퇴근 후에 틈틈히 작성하는 삽질 일지 - Archlinux (1) - 기본 설치편

제로·2023년 8월 11일
0

🤔서론 - 왜 갑자기 아치리눅스?

오랫동안 글이 없다가 갑자기 아치리눅스 삽질을 한다고 글을 적고 있다.

그렇다고 서버 작업을 포기하거나 한 것은 아니고, 서버를 관리하는 작업용 노트북에 아치리눅스를 설치하고 설정하는 과정을 정리해 두려고 한다.

아치리눅스를 노트북용 OS로 고려한 것은 몇가지 이유가 있다.

  • 미니멀한 설계 - 아치리눅스는 설치를 해보면 알겠지만 미니멀한 설계로 설치하는 방향에 따라 리소스를 적게 사용할 수 있다.

  • 방대한 Wiki - 엔간한 설정에 관한 건 다 포함하고 있을 정도로 Wiki가 방대하다. 잘 찾아보면 필요한 설정을 할 수 있다.

  • 수동 설정 - 세부 설정을 수동으로 하게 됨으로써 시스템 구조를 이해하는데 도움을 준다.

  • 롤링 릴리즈 - 어차피 애플리케이션이 버그가 없을 수는 없으니 차라리 잦은 업데이트로 빠르게 버그를 없앨 수 있다.

물론 위의 이유는 장점이 될 수도 있고 단점이 될 수도 있는데, 미니멀한 설계로 시스템 설치에도 필요한 애플리케이션을 "직접" 깔아야 하고 "수동"으로 설정을 해줘야 하는 것은 꽤 피곤한 일이다.

하지만 그럼에도 불구하고 한번 설정을 잘 해서 이해하게 되면 그만큼 편한 OS가 없는 것도 사실이다.

물론 설치를 쉽게 도와주는 몇몇 아치변형배포판(Manjaro / EndeavourOS 등등)이 있지만, 어차피 삽질을 할 것이니 조금이라도 배울 것이 많은 아치리눅스를 설치하려고 한다.


📐본론 - 설치

설치 진행은 Installation Guide를 참고하여 직접 진행하면서 작성하였다.

💾1. 부팅 USB 준비

USB에 Ventoy를 설치하고 아치리눅스 이미지를 USB에 넣는다.

  • 아치리눅스 이미지는 아치리눅스 에서 받을 수 있다.

  • 08/11 기준 archlinux-2023.08.01-x86_64.iso 이미지 사용

  • Ventoy는 iso나 wim을 그대로 이용하여 부팅을 할 수 있는 도구로, Ventoy 에서 받을 수 있다.

🖇️2. 인터넷 연결

🖥️A. 유선 연결시

유선이 연결된 상황이라면 DHCP 서버가 있다면 별도의 설정없이 바로 사용 가능하다.

💻B. 무선 연결시

🔖빠른 설정

# iwctl --passphrase 'passphrase' station 'device' connect "SSID"
옵션설명
'passphrase'Wi-fi 암호
'device'무선 랜카드 장치명
"SSID"Wi-fi SSID

📖기본 설정

# iwctl
[iwd]# device list								// 무선 랜카드 검색
[iwd]# device 'device' set-property Powered on	// 무선 랜카드 켜기
[iwd]# station 'device' scan					// 무선 인터넷 검색
[iwd]# station 'device' get-network				// 사용 가능한 무선 인터넷 확인
[iwd]# station 'device' connect 'SSID'			// 무선인터넷 연결

🛠️C. IP 수동 설정

특수한 환경이라 IP설정을 수동으로 할 필요가 있을 경우가 있다.

# ip address add "IP"/"prefix_len" dev "interface"					// 수동으로 IP할당
# ip route add "Destination" via "Default-Gateway" dev "interface"	// 게이트웨이 설정

✔️설정 확인

핑으로 간단하게 연결 확인 해본다

# ping 8.8.8.8

🪚3. 파티셔닝

리눅스는 MBR일경우 /, swap의 두개의 파티션, UEFI일 경우에는 /, ESP, swap의 세개의 파티션만 있으면 일단 설치하고 운영하는 데는 문제가 없다.

물론 웹서버를 구동한다던가 할 경우 보안이나 백업 등의 문제로 하위 파티션을 분리할 필요성은 있지만 지금 사용 환경은 서버로 사용하는 것이 아니라 유지보수용으로 사용할 목적이므로 다른 파티션은 크게 필요하지 않다.

⚖️적정 파티션 크기

😵‍💫swap

  • swap 파티션의 크기에 대해서 말이 많은데, 간략하게 서버로 사용하느냐, 아니면 데스크탑에서 Hibernate 사용유무에 따라 다르다고 할 수 있다. 간략하게 표를 참고하면 될 것 같다.
RAM용량/사용환경서버데스크탑(Hibernate X)데스크탑(Hibernate O)
2GiB\sim 2{GiB}RAM2{RAM} * 2RAM2{RAM} * 2RAM2{RAM} * 2
4GiB\sim 4{GiB}RAM+2{RAM} + 2RAMRAM2\sqrt{RAM} \sim {RAM} * 2RAM+RAM{RAM} + \sqrt{RAM}
>4GiB\gt 4{GiB}RAM20%{RAM} * 20\%RAMRAM2\sqrt{RAM} \sim {RAM} * 2RAM+RAM{RAM} + \sqrt{RAM}

위 표는 아래 사이트를 참고하여 만들었다.

https://itsfoss.com/swap-size/

📌ESP (/boot 또는 /efi)

  • 단일 커널 사용시 300MiB 다중 커널 사용시 최대 1GiB

♾️/

  • 하위에 다른 파티션을 나누지 않으면 나머지 가용용량 모두 사용

🔪파티셔닝

  • 익숙한 fdisk를 이용하여 파티셔닝을 진행하였다.
# fdisk -l					// 디스크 확인
# fdisk /dev/nvme0n1		// nvme 파티셔닝
fdisk Command설명
m매뉴얼
n파티션 생성
d파티션 삭제
p현재 파티션 확인
t파티션 종류 변경
w변경내용 저장 및 종료
q변경내용 저장없이 종료

📝파티셔닝 요약

파티션종류크기
/dev/nvme0n1p1EFI System(1)300MiB
/dev/nvme0n1p2Linux Swap(19)11GiB
/dev/nvme0n1p3Linux filesystem(20)454.5GiB
  • UEFI 환경이므로 ESP(/boot), swap, / 용도의 3개 파티션 생성
  • 단일 커널 사용 예정이므로 ESP에 300MiB 할당
  • RAM 용량이 8GB이고, Hibernate를 사용하는 데스크탑환경을 구성할 것이므로 swap에 11GiB 할당
  • 그외 나머지 모두 /에 할당

🔨4. 파일시스템 생성

  • mkfs, mkswap 사용

  • /dev/nvme0n1p1 : FAT32

# mkfs.fat -F 32 /dev/nvme0n1p1
  • /dev/nvme0n1p2 : swap
# mkswap /dev/nvme0n1p2
  • /dev/nvme0n1p3 : ext4
# mkfs.ext4 /dev/nvme0n1p3
  • ext4는 소규모시스템에서는 성능이 준수하므로 ext4 사용

🪂5. 파일시스템 마운트

  • mount, swapon 사용
# mount /dev/nvme0n1p3 /mnt					// /마운트
# mount --mkdir /dev/nvme0n1p1 /mnt/boot	// /boot 디렉토리 생성 및 마운트
# swapon /dev/nvme0n1p2						// swap 활성화

🪛6. 설치

🪪1. 미러리스트 선택

  • reflector(자동 최적화 미러 선택 도구) 사용
# reflector -c KR --sort rate

🛒2. 기본 패키지 설치

# pacstrap -K /mnt base base-devel linux-zen linux-zen-headers linux-firmware amd-ucode neovim dhcpcd iwd man-db man-pages texinfo
  • base, base-devel : 기본 시스템 및 라이브러리
  • linux-zen, linux-zen-headers : zen 커널 및 헤더
  • linux-firmware : 하드웨어 장치
  • amd-ucode : AMD CPU 명령어 집합
  • neovim : vim을 대체하는 텍스트 에디터
  • iwd : 무선 설정 도구
  • dhcpcd : dhcp 클라이언트 데몬
  • man-db, man-pages, texinfo : 매뉴얼 도구
  • booster : mkinitcpio 처럼 initramfs을 생성해주는 도구

⚙️7. 설치 후 설정

fstab

  • UUID로 설정
# genfstab -U /mnt >> /mnt/etc/fstab
  • Label로 설정
# genfstab -L /mnt >> /mnt/etc/fstab

chroot

# arch-chroot /mnt

⌚시간 설정

# ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime		// 타임존 설정
# hwclock --systohc											// 하드웨어 시간 동기화

💬언어 설정

사용 언어 설정
  • /etc/locale.gen 에서 필요한 언어 주석해제 후 locale-gen 실행
# nvim /etc/locale.gen		// locale.gen 수정
# locale-gen				// 필요 언어 설정
기본 언어 설정
  • 기본 언어 /etc/locale.conf 에 지정
# echo "LANG=en_US.UTF-8" >> /etc/locale.conf
  • CUI에서는 어차피 한글사용이 불가능하므로 영어로 설정한다.

네트워크 설정

호스트네임 지정
  • /etc/hostname에 호스트네임 저장
# echo "hostname" >> /etc/hostname
인터넷 연결
🖥️유선 사용시
# systemctl enable dhcpcd
💻무선 사용시
# systemctl enable iwd

부트로더 설치

1. 부팅용 이미지 생성
# mkinitcpio -P
  • 생성된 이미지는 모두 /boot 아래에서 확인 가능
2. 부트로더 생성
  • systemd-boot 사용하는 방법
# bootctl install
부트로더 설정
  • 생성된 이미지를 활용하여 /boot/loader/loader.conf 와 /boot/loader/entries/*.conf 수정
  • initramfs-linux-zen.img 탑재하는 기본 부트 설정 1개와 initramfs-linux-zen-fallback.img 이미지를 탑재하는 fallback용 설정을 하나씩 만들어 두는 것이 좋음
  • 상세한 설정은 부트로더 설정커널 파라미터 참고
# /boot/loader/loader.conf

default arch.conf	# 부팅에서 사용할 기본 설정 지정
timeout 3			# 메뉴 자동 선택 시간 지정
console-mode keep	# 모듈 탑재되는 과정 생략
editor yes			# 메뉴에서 편집모드 사용 가능
# /boot/loader/entries/arch.conf

title	Arch linux																# 메뉴에 보여질 이름
linux	/vmlinuz-linux-zen														# 사용할 커널 지정
initrd	/amd-ucode.img															# HOOK 탑재
initrd	/initramfs-linux-zen.img												# HOOK 탑재
options	root="UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" rw quiet splash		# / 파티션 지정, fstab을 Label로 저장했을 경우 root="Label=/dev/xxxx" 형태로 작성 가능

계정 추가

  • 보안상 관리자 계정을 따로 생성하고 root 계정을 비활성화 하는 것이 좋음
# passwd					// root 계정 암호 설정
# useradd -m -G wheel 'user'
# passwd 'user'

8. 마무리

1. chroot 환경 종료

# exit
  • 단축키 Ctrl + d 로도 가능

2. 마운트 해제

# umount -R /mnt

3. 재부팅

# reboot
  • ‼️ 부팅 USB는 반드시 제거하고 부팅이 잘 되는지 확인한다. ‼️

요약 및 마무리

설치과정 요약

  • (부팅용 이미지 준비) ➡️ 네트워크 연결 설정 ➡️ 디스크 파티셔닝 및 파일시스템 생성, 마운트 ➡️ 필요한 기본 패키지 설치 ➡️ chroot 환경 진입하여 기본 설정 및 부트로더 설치 ➡️ chroot 환경 종료 후 재부팅

맺는 말

오늘은 초보자가 설치하기 비교적 어려운 아치리눅스를 기본설치하는 과정을 정리하였다. 비록 설치가 끝난 후 칙칙한(?) CUI가 반겨주지만 시스템을 정상적으로 설치할 수 있게 정리해두는 과정도 중요하다고 생각한다.

다음에는 CUI를 벗어나 GUI에 한글 입력을 사용하는 과정을 정리해 보려고 한다.

수정사항

23.11.22

fstab 항목

  • 기존 '#genfstab -U /mnt >> /mnt/fstab', '#genfstab -L /mnt >> /mnt/fstab' 에서
    변경 후 '#genfstab -U /mnt >> /mnt/etc/fstab', '#genfstab -L /mnt >> /mnt/etc/fstab' 으로 각각 경로 누락 수정

패키지 설치 항목

  • 기존 'mad-db' 에서 'man-db' 로 오자 수정, booster 불필요로 삭제

무선연결 항목

  • 기존 'iwctl --passphrase "passphrase" station "device" "SSID"' 에서 'iwctl --passphrase "passphrase" station "device" connect "SSID"' 로 누락 명령 수정, 가독성을 위해 기호
profile
늦었지만 그래도 다시 시작해보자

2개의 댓글

comment-user-thumbnail
2023년 8월 11일

글 잘 봤습니다.

1개의 답글