필자는 HP Pavilion x360 노트북에 리눅스를 운용하고 있으며, 데스크탑에는 한때 SSD까지 더 달면서 리눅스 듀얼부팅을 운용했었지만 귀차니즘으로 인하여 가상머신을 사용할 계획이다.
아치 리눅스를 쓰면서 Win11로 발로란트를 하고 싶은 유저들이나 Windows 보안의 보안 부팅 관련 경고를 보기 싫은 유저들만 이 방법을 사용하길 바란다.
아치 리눅스는 Secure Boot를 지원하지 않는다. 그래서 설치 전에는 Secure Boot를 끄고 설치해야 한다.
부트로더는 GRUB을 사용하며, 최근 업데이트된 GRUB은 Secure Boot 설정이 훨씬 까다로워졌고 어떻게든 설정해본 결과 해상도가 VGA로 고정되고 전원을 넣자마자 오류 메시지가 몇 줄 뜨는 등 문제가 많아졌다. 그래서 설치 후 GRUB 버전을 2.06-5로 낮추고 부팅용으로 GRUB 최신 버전을 설치한다.
설치할 디스크를 골라준다. 필자가 사용중인 HP Pavilion x360 14인치 모델은 efibootmgr을 사용해도 반드시 1개의 EFI 파티션당 1개의 부트로더만 인식하게끔 설정되어 있어서 EFI - 스왑 - 루트 파티션 순으로 만들어줘야 한다.
물론 gdisk에서 파티션 UUID 설정도 해줘야 한다.
루트 파티션 포맷은 원하는 거 하면 되는데, 앵간하면 ext4를 하길 바란다.
일단 여기서는 그놈 기준으로 설명한다. KDE는 gdm을 sddm으로 바꾸면 된다.
# mkfs.vfat -F32 /dev/nvme0n1p5
# mkswap /dev/nvme0n1p6
# swapon /dev/nvme0n1p6
# mkfs.ext4 /dev/nvme0n1p7
# mount /dev/nvme0n1p7 /mnt
# mount /dev/nvme0n1p5 /boot/efi
# pacstrap /mnt base base-devel linux-zen linux-zen-headers linux-firmware linux-firmware-qlogic intel-ucode dkms nano networkmanager git wget cups cups-pdf ntfs-3g power-profiles-daemon
# genfstab -U /mnt >> /mnt/etc/fstab
이후 arch-chroot 과정에서 데스크탑 환경을 설치해주고 systemd 서비스를 활성화해준다.
# ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
# hwclock --systohc
# echo 'LANG=ko_KR.UTF-8' > /etc/locale.conf
(그놈)
# pacman -S gnome system-config-printer firefox firefox-i18n-ko ttf-roboto ttf-ubuntu-font-family noto-fonts-cjk noto-fonts noto-fonts-emoji
(KDE)
# pacman -S plasma sddm flatpak packagekit-qt5 fcitx5 fcitx5-gtk fcitx5-hangul fcitx5-configtool kcm-fcitx5 firefox firefox-i18n-ko ttf-roboto ttf-ubuntu-font-family noto-fonts-cjk noto-fonts noto-fonts-emoji
# sed -i '/%wheel ALL=(ALL) ALL/s/^#//' /etc/sudoers
# passwd
# useradd -m -G wheel -s /bin/bash (사용자 계정 이름)
# passwd (사용자 계정 이름)
# systemctl enable gdm (그놈)
# systemctl enable sddm (KDE)
# systemctl enable cups
# systemctl enable NetworkManager
# systemctl enable bluetooth
# grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=arch
# mkdir /boot/efi/EFI/boot
# cp /boot/efi/EFI/arch/grubx64.efi /boot/efi/EFI/boot/bootx64.efi
# grub-mkconfig -o /boot/grub/grub.cfg
당연하겠지만 로케일 설정 파일도 변경해야 한다.
/etc/locale.gen
...
#en_SG ISO-8859-1
en_US.UTF-8 UTF-8
#en_US ISO-8859-1
...
ko_KR.UTF-8 UTF-8
...
GUI는 원하는 거 쓰던가. 물론 터치가 되는 노트북에서는 그놈, KDE 같은 주류 DE를 쓰는 게 낫다. 시나몬을 써도 되지만, 시나몬을 쓸 거면 민트를 쓰는 게 좋다.
SDDM은 KDE만의 디스플레이 매니저가 아니기 때문에 기본 테마는 못생김의 극치를 자랑한다.
default.conf 파일을 바꿔도 되지만, 그렇게 하면 업데이트 시 테마가 초기화되므로 /usr/lib/sddm/sddm.conf.d/kde.conf 파일을 만들어서 default.conf를 무시할 수 있는 설정파일을 만들어야 한다.
[General]
Numlock=off
[Theme]
Current=breeze
CursorTheme=breeze_cursors
Font=Noto Sans
Numlock은 풀사이즈 키보드 노트북이나 데스크탑에선 on으로 바꿔주면 되고 Font에는 Ubuntu, Roboto를 대신 넣어도 된다.
먼저 시스템 업데이트 시 사용할 키가 저장될 경로를 지정해준다. 이건 커널 변경 및 업데이트 시 반드시 필요하므로 앵간하면 home 경로에는 저장하지 않는 게 편하다. 리눅스는 숨김 파일 클릭만 뚝딱 하면 그만인 Windows가 아니다.
# mkdir /etc/secureboot-keys
# cd /etc/secureboot-keys
# openssl req -newkey rsa:4096 -nodes -keyout MOK.key -new -x509 -sha256 -days 3650 -subj "/CN=my Machine Owner Key/" -out MOK.crt
# openssl x509 -outform DER -in MOK.crt -out MOK.cer
이 키를 하나도 빠짐없이 EFI 파티션에 복사해준다. MOK Manager에서 키를 넣을 때 필요하며, Windows에서 BIOS를 업데이트할 시 키를 다시 넣어줘야 하기 때문이다.
# cp /etc/secureboot-keys/MOK* /boot/efi/EFI/arch
리눅스 배포판은 Secure Boot에 대응하기 위해 shim을 사용한다. Shim을 설치하고 shimx64.efi, fbx64.efi, mmx64.efi를 EFI 파티션에 복붙해주면 끝.
다만, shimx64.efi는 \EFI\Boot\Bootx64.efi로 복사해줘야 하고 grubx64.efi 역시 Boot에 복사해야 한다.
방금 말했듯이 최신 버전 GRUB에선 SecureBoot 설정이 매우 까다로워졌고 하더라도 GRUB 테마가 먹통이 된다. 그래서 안정적인 2.06-5 버전 패키지 파일을 받은 후 sudo pacman -U로 설치해준다.
그 후 arch-chroot 과정에서 했던 것을 똑같이 해준다.
# grub-install --target=x86_64-efi --efi-directory=/boot/efi --modules="tpm" --sbat="/usr/share/grub/sbat.csv" --bootloader-id=arch --no-nvram
참고로 2.06-5까지만 해도 전원을 넣으면 Welcome to GRUB! 메시지가 떴으므로 그걸 제거하기 위해 EFI 파티션이 마운트된 경로로 가준다.
# cd /boot/efi/EFI/arch
# echo -n -e \\x00 > patch && cat grubx64.efi | strings -t d | grep "Welcome to GRUB!" | awk '{print $1;}' | xargs -I{} dd if=patch of=grubx64.efi obs=1 conv=notrunc seek={}
당연하겠지만 부트로더와 커널을 서명해줘야 한다.
# sbsign --key /etc/secureboot-keys/MOK.key --cert /etc/secureboot-keys/MOK.crt --output /boot/efi/EFI/arch/grubx64.efi /boot/efi/EFI/arch/grubx64.efi
# sbsign --key /etc/secureboot-keys/MOK.key --cert /etc/secureboot-keys/MOK.crt --output /boot/vmlinuz-linux* /boot/vmlinuz-linux*
서명된 부트로더를 /boot/efi/EFI/boot에 복사해준다. 왜냐하면 shimx64.efi는 GRUB을 불러오기 때문이다.
# cp /boot/efi/EFI/arch/grubx64.efi /boot/efi/EFI/boot/grubx64.efi
최신 버전 GRUB는 문제가 있으므로 아예 버전을 고정시키려면 /etc/pacman.conf를 건들어주면 된다.
IgnorePkgs = grub
pamac에선 맨날 업데이트 하라고 뜨지만, 실제로 업뎃하면 그 패키지만 빼고 업뎃되니 안심하자.
아치 리눅스는 롤링 릴리즈이다. 당연히 커널도 최신 버전이 매일 올라오며, 서명도 새로 해줘야 한다.
커널을 자동으로 서명하게 하려면 hook을 만들어주면 되는데, 기본적으로는 /etc/pacman.d/hooks 경로가 없다.
파일명은 99-secureboot.hook으로 해준다.
[Trigger]
Operation = Install
Operation = Upgrade
Type = Package
Target = linux
Target = linux-lts
Target = linux-hardened
Target = linux-zen
[Action]
Description = Signing kernel with Machine Owner Key for Secure Boot
When = PostTransaction
Exec = /usr/bin/find /boot/ -maxdepth 1 -name 'vmlinuz-*' -exec /usr/bin/sh -c 'if ! /usr/bin/sbverify --list {} 2>/dev/null | /usr/bin/grep -q "signature certificates"; then /usr/bin/sbsign --key /etc/secureboot-keys/MOK.key --cert /etc/secureboot-keys/MOK.crt --output {} {}; fi' ;
Depends = sbsigntools
Depends = findutils
Depends = grep
모든 설정이 끝났으면 MokManager에서 키를 넣어주고 SecureBoot를 다시 켜주면 된다.
다만, 일부 시스템에선 MokManager도 Secure Boot에서 작동이 안 될 수 있으므로 키를 넣어줄 때까지는 Secure Boot를 꺼준다.
이후 리눅스 부팅도 해보고 Windows 부팅도 해보면서 잘 되는가 확인해주기만 하면 끝. 물론 이렇게 할 바에야 우분투를 설치하는 게 훨씬 빠르긴 하다.