Archlinux os 설치하기
배경 이야기
중고 XPS13 램 8GB으로 IDE, 브라우저, 피그마를 키면 프로세스가 멈추거나, 아예 꺼져 버리곤 했다.
그렇게 함께 1-2년을 지내다, 눈 여겨보고 있던 빨콩 노트북이 블랙프라이데이 행사로 50% 할인 가격으로 득템할 수 있었다.
커스텀 형태의 모델들에서 32GB 모델은 16GB와 다르게 none OS옵션이었지만, 둘의 가격 차이가 고작 10만원이였기도 했고, 그동안 8GB의 설움을 떠올리며 32GB를 선택했다.
배송된 노트북에 어떤 OS를 설치할지 고민하게 되었는데, 그동안 macOS와 Ubuntu를 사용해왔기에 Git/Vim/Tmux 등의 터미널 프로그램에 어느 정도 익숙해지면서 앞으로도 리눅스 환경을 원했고, 직접 기본 시스템 구성 요소를 커스텀 해볼 수 있는 archlinux를 설치하기로 결정했다.
왜 Arch Linux?
- 스스로 좋은 개발자가 되고자 다짐하면서도 랩탑을 제대로 제어할 수 있는 지에 대해 회의감이 들곤했다. 이번 기회에 직접 수동 설치 및 구성으로 GNU/Linux 기본 시스템 구성요소를 이해해볼 수 있는 좋은 경험을 해보고자 채택했다.
- 롤링 릴리즈 업데이트에 대해 항상 이야기가 나온다. 포인트 릴리즈 방식은 EOL(End of Life)를 가지게 되는 반면, 롤링 릴리즈 방식은 버전이라는 것이 존재하지 않는다. 조금의 변경이 발생하더라도 바로바로 릴리즈하는 방식으로 항상 최신의 상태를 유지할 수 있다. 내 노트북의 성능 향상 그리고 새로운 기능에 대해 경험할 수 있는 좋은 기회라 생각했다.
설치 과정
1. 설치 매체 준비
ISO 이미지를 USB에 다운로드해야 한다.
Windows 노트북에서 https://archlinux.org/download/ > South Korea 목록의 archlinux-2024.12.01-x86_64.iso를 다운로드했고, rufus 프로그램을 통해 USB를 부팅 가능한 형태로 변환시켰다.
2. 라이브 환경 부팅
UEFI모드로 부팅되고 있는지 확인을 해야한다.
# ls /sys/firmware/efi/efivars명령어가 디렉토리를 에러 없이 보여준다면 시스템이 UEFI모드로 부팅한 것이다.
UEFI모드와 BIOS모드에 따라 파티션 테이블, 부트로더등 설정이 달라진다. 나의 경우 UEFI 모드로 부팅되고 있었다. (대부분 요즘은 UEFI모드를 지원한다고 한다.)
USB가 부팅되면서 부트로더 화면이 나타나면, Arch Linux install medium을 선택하고 Enter를 눌르면 루트 사용자로 로그인한 zsh 쉘 프롬프트 가상 콘솔 virtual console로 접속하게 된다.
개인적으로 신기했던 부분은 아무것도 설정하지 않은 환경에서 zsh환경을 기본적으로 제공되는 것이였다. Installation guide를 읽어보니 archlinux install medium에서 제공해주는 최소한의 패키지인것을 알게 되었다.
제공되는 패키지 목록은 pkglist.x86_64.txt 이곳에서 확인 가능하다. (zsh, iwd 등)
설정을 하다보면 pkglist.x86_64.txt에 벗어나는 패키지를 pacstrap, pacman을 통해 다운받아야 하는 경우가 있다. 따라서, 인터넷 연결을 우선시 했다.
3. 인터넷 연결
나의 경우에는 케이블이 연결되어 있지 않으며, wifi를 사용하려 하려했다.
ip link를 통해 wifi 인터페이스가 wlan0인 것을 확인할 수 있었으며, wifi를 설정하기위해 ISO 이미지에 있는 iwd의 iwctl 명령으로 무선 네트워크를 검색해 보았다.
1.
2.
3.
4.
5. - iwctl을 통해 보조 명령 프롬프트를 실행시킨다.
- wlan0 인터페이스에 연결가능한 네트워크를 스캔한다.
- 스캔된 사용 가능한 무선 네트워크를 조회한다.
- 해당 명령어로 무선 네트워크에 연결한다.
- 네트워크 연결 여부는 ping으로 확인한다.
4. 디스크 파티션 나누기
위키에서 반드시 필요한 파티션을 알려준다.
- 루트 디렉토리
/를 위한 파티션 - UEFI 모드에서의 부팅을 위한 EFI 시스템 파티션
나의 경우는
- UEFI 파티션 (ESP)
- 부팅 파티션
- LVM 물리 볼륨
스왑 파티셔닝은 하지 않았는데, 32GB로 시스템 메모리 부족하지는 않을 것 같아 넘어갔다.
| 저장장치 | 마운트 위치 | 파티션 | 파티션 종류 | 크기 |
|---|---|---|---|---|
| nvme0n1p1 | /boot/EFI | UEFI system partition | UEFI 시스템 파티션 | 1GB |
| nvme0n1p2 | /mnt/boot | Booting partition | Linux 파일 시스템 | 1GB |
| nvme0n1p3 | nvme0n1p3 └─volgroup0 ├─volgroup0-lv_root /mnt └─volgroup0-lv_home /mnt/home | LVM (Logical Volume) | Linux LVM | 장치의 남은 공간 |
1. # lsblk
2. # fdisk nvme0n1
2-1. # p(print)
2-2. # g(create gpt table)
2-3. # n(new)
2-4. # Partition number: 1 Enter
2-5. # First sector: Enter
2-6. # Last sector, ...: +1G
2-7. # n(new)
2-8. # Partition number: 1 Enter
2-9. # First sector: Enter
2-10. # Last sector, ...: +1G
2-11. # n(new)
2-12. # Partition number: 1 Enter
2-13. # First sector: Enter
2-14. # Last sector, ...: Enter
2-15. # t(type)
2-16. # Partition number: 4 Enter
2-17. # Partition type: 44 Enter
2-18. # wlsblk로 하드 드라이브의 장치 식별자를 알아낸다. 나의 경우는 nvme0n1이다.
- partition tool에는 여러가지가 존재하고 나의 경우
fdisk로 파티셔닝을 진행하였다.fdisk nvme0n1을 하게 되면 보조 명령 프롬프트가 실행된다.
2-1. p: print를 하여 현재 파티션상황을 출력해본다.
2-2. g: created a new GPT disklabel (wiki에서 UEFI모드일 경우 GPT 파티션 테이블 설정은 권장사항이다.)
nvme0n1p1 - efi 파티션
2-3. n: 새로운 파티션 생성
2-4. Partition number: 1
2-5. First sector: default (자동 할당)
2-6. Last sector: +1G (1GB)
nvme0n1p2 - 부팅 파티션
2-7. n: 새로운 파티션 생성
2-8. Partition number: 2
2-9. First sector: default (자동 할당)
2-10. Last sector: +1G (1GB)
nvme0n1p3 - lvm (루트 파티션)
2-11. n: 새로운 파티션 생성
2-12. Partition number: 3
2-13. First sector: default (자동 할당)
2-14. Last sector: default (나머지 모두 할당)
2-15. t: 타입 설정
2-16. Partition number: 3
2-17. Partition type: 44 (lvm)
2-18. w: 쓰기
5. 파티션 포맷
파티션을 나눈 후에 각 파티션은 알맞은 파일 시스템으로 포맷되어야 한다.
1. # mkfs.fat -F 32 /dev/nvme0n1p1
2. # mkfs.ext4 /dev/nvme0n1p2- wiki에서 UEFI esp 포맷은 FAT 형식으로 포맷하기를 권장하고 있다.
- 기본 linux file system은 ext4로 포맷한다.
nvme0n1p3는 포맷하기전에 아 파티션 내의 모든 데이터가 안전할 수 있도록 암호화를 진행했다.
1. # cryptsetup luksFormat /dev/nvme0n1p3
2. # cryptsetup open --type luks /dev/nvme0n1p3 lvmluks형식으로 암호화 진행한다.- 암호화된 파티션을 복호화한 매핑할 이름을
lvm으로 설정한다.
nvme0n1p3를 각각 lv_root, lv_home 논리적 볼륨으로 변환 후 포맷시킨다.
1. # pvcreate /dev/mapper/lvm
2. # vgcreate volgroup0 /dev/mapper/lvm
3. # lvcreate -L 30GB volgroup0 -n lv_root
4. # lvcreate -L 250GB volgroup0 -n lv_home
5. # modprobe dm_mod
6. # vgscan
7. # vgchange -ay
8. # mkfs.ext4 /dev/volgroup0/lv_root
9. # mkfs.ext4 /dev/volgroup0/lv_home- 물리적 볼륨으로 변환
- 물리적 볼륨을 볼륨그룹으로 변환
- lv_root 논리적 볼륨 생성
- lv_home 논리적 볼륨 생성
5, 6, 7. 논리적 볼륨들이 volgroup0에 위치시킬 수 있도록 해주는 자동 명령어
6. 파일 시스템 마운트
# mkdir /boot/EFI
# mkdir /mnt/boot
# mkdir /mnt/home
# mount /dev/nvme0n1p1 /boot/EFI
# mount /dev/nvme0n1p2 /mnt/boot
# mount /dev/volgroup0/lv_root /mnt
# mount /dev/volgroup0/lv_home /mnt/home7. 필수 패키지 설치하기
pacstrap 스크립트를 사용해 base, linux, linux-firmware 패키지 그룹을 설치한다.
Minimal package set to define a basic Arch Linux installation
8. 시스템 설정하기
다음 명령어를 사용해 fstab(파일 시스템 테이블) 파일을 생성한다.
# genfstab -U -p /mnt >> /mnt/etc/fstab새로운 시스템으로 Change root를 한다. 그리고 사용자 계정 hyunwlee를 추가한다.
개인적으로 추가해주고 싶은거 추가 한다.
-
grub: UEFI 부팅 모드일 경우 권장하는 부트로더
-
efibootmgr: UEFI 부팅 관련 설정 관리 도구
-
gnome: 사용자 친화적 데스크탑 환경
-
gnome-tweaks: 폰트, 키보드, 마우스 등 설정 관리 도구
디스크 암호화를 진행했기 때문에 mkinitcpio 쉘 스크립트 HOOKS 부분에에 encrypt와 lvm2를 추가한다.
# vim /etc/mkinitcpio.conf다시 쉘 스크립트를 실행시킨다.
UEFI 시스템에 맞게 GRUB 부트로더를 설치한다.
# grub-install --target=x86_64-efi --bootloader-id=grub_uefi --recheck편집기를 통해 Grub boot loader 설정파일에 접근한 뒤, GRUB_TIMEOUT=0으로 수정, GRUB_TIMEOUT_STYLE=0으로 추가한다.
또한, 디스크 암호화를 해주었으므로 GRUB_CMDLINE_LINUX_DEFAULT에 cryptevice=/dev/nvme0n1p3:volgroup0을 추가한다.
# vim /etc/default/grub다시 부트로더 스크립트를 재설정한다.
# grub-mkconfig -o /boot/grub/grub.cfg로그인 화면인 Gnome Display Manager을 활성화 해주고
systemctl enable gdmNetworkManager도 활성화시켜준다.
systemctl enable NetworkManager마지막으로 모두 언마운트 시키고 재실행을 통해 부트로더가 실행되는지 확인한다.