이번에 메인 운영체제를 리눅스로 바꾸기로 결정했습니다.
지금까지 가상 머신에 리눅스는 많이 설치해 봤지만, 메인 컴퓨터에 리눅스는 처음으로 설치해봅니다.
그래서 메인 운영체제로써에 리눅스에 대한 Slog를 한번 써보려고 합니다.
참고로 배포판은 아치 리눅스(롤링 릴리스이기 때문에 버전이 딱히 존재하지 않음)입니다.
지난 글에서는 메인 운영체제로 리눅스를 사용하려 시도했었지만 여러가지 현실적인 문제로 인해 실패했었습니다. 그 후로 몇달 동안 윈도우만 쓰다가 이번에 서브 운영체제로 다시 리눅스를 사용하려 합니다.
배포판은 지난번과 마찬가지로 아치 리눅스입니다.
원래 WSL을 통해 아치 리눅스를 사용 중이었는데 직접 설치하는 손맛이 그리워서(?) 다시 리눅스를 사용해보려 합니다.
이번에는 메인 운영체제로 사용할 예정이며, 저번에는 '적응기’였는데 이번에는 왜 '사용기’냐면 이제는 적응을 다 했다고 생각하기 때문입니다.
배포판은 아치 리눅스를 사용하며, 윈도우와 멀티 부팅을 구성합니다. (윈도우는 주로 게임용으로)
매월 나오는 아치 리눅스 공식 ISO가 아닌, 커스텀한 ISO를 이용합니다. 아치 리눅스 ISO 만들기 · GitHub
7개의 좋아요
파티션 작업
파티션 작업은 윈도우 PE에서 미리 해놨습니다. 따라서 리눅스에서는 단순히 파티션 타입을 변경하고 포맷만 하겠습니다.
파티션 타입을 변경하는 작업은 여기서 설명하지 않습니다.
이번에는 루트 파티션과 서브 파티션에 모두 F2FS를 사용하겠습니다. EFI 시스템 파티션은 미리 포맷해놨습니다.
mkfs.f2fs -l Linux -O extra_attr,inode_checksum,sb_checksum,encrypt,lost_found,verity,compression /dev/nvme0n1p3
mkfs.f2fs -l LinuxDev -O extra_attr,inode_checksum,sb_checksum,encrypt,lost_found,verity,compression /dev/sda2
그런 다음 멀티 부팅 구성을 위해 윈도우를 설치하겠습니다.
3개의 좋아요
윈도우를 설치하고 세팅까지 완료했습니다. 이제 아치 리눅스 설치 미디어로 부팅합니다.
이전 내용. 커스텀 ISO를 이용하면 와이파이에 수동으로 연결할 필요가 없습니다.
와이파이 연결
이제 와이파이에 연결하겠습니다. 물론 유선 네트워크 쓰시는 분들은 건너뛰어도 됩니다.
iwctl
station wlan0 scan
station wlan0 connect (SSID)
exit
1개의 좋아요
파티션 마운트
이제 파티션들을 마운트합니다. 참고로 저는 systemd-gpt-auto-generator를 사용할 것이기 때문에 fstab은 만들지 않습니다.
mount -o compress_chksum,compress_algorithm=zstd:6,noatime,atgc,gc_merge /dev/nvme0n1p3 /mnt
chattr -R +c /mnt
mount --mkdir /dev/nvme0n1p1 /mnt/boot
아치 리눅스 설치
이제 리눅스 설치를 진행합니다.
pacstrap -KP /mnt base base-devel cachyos-keyring linux-cachyos-bore-lto linux-cachyos-bore-lto-headers linux-firmware-amdgpu linux-firmware-intel intel-ucode f2fs-tools zlib-ng-compat networkmanager iwd iptables-nft firewalld openssh nano sudo git zsh less efibootmgr
CachyOS mirrorlist를 복사합니다.
cp /etc/pacman.d/cachyos* /mnt/etc/pacman.d/
설치한 리눅스로 들어갑니다.
arch-chroot /mnt
1개의 좋아요
나머지 설치 진행
multilib 저장소를 활성화 합니다.
nano /etc/pacman.conf
([multilib]와 그 아랫줄에 있는 주석 제거)
pacman -Syy
시간대를 설정합니다.
ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
hwclock --systohc
date
locale을 설정합니다.
nano /etc/locale.gen
(en_US.UTF-8 UTF-8의 주석 처리 해제)
(ko_KR.UTF-8 UTF-8의 주석 처리 해제)
locale-gen
echo "LANG=en_US.UTF-8" > /etc/locale.conf
호스트 이름을 설정합니다.
echo naLinux > /etc/hostname
사용자를 만듭니다.
useradd -m -G wheel -s /bin/zsh na1307
passwd na1307
sudoer를 설정합니다.
EDITOR=nano visudo
%wheel ALL=(ALL:ALL) ALL
네트워크를 설정합니다.
systemctl enable NetworkManager
nano /etc/NetworkManager/conf.d/wifi_backend.conf
[device]
wifi.backend=iwd
systemctl enable firewalld
initramfs 대신 통합 커널 이미지(UKI)를 만들도록 설정합니다.
nano /etc/kernel/cmdline
rw rootflags=compress_chksum,compress_algorithm=zstd:6,noatime,atgc,gc_merge
nano /etc/mkinitcpio.d/linux-cachyos-bore-lto.preset
(default_image에 주석 처리)
(default_uki의 주석 처리 해제, 경로를 /boot로 시작하도록 변경)
통합 커널 이미지를 생성합니다.
mkdir /boot/EFI/Linux
mkinitcpio -P
rm -f /boot/initramfs-*.img
1개의 좋아요
메인보드 부팅 엔트리에 리눅스 추가
저는 부트로더를 사용하지 않고 UEFI에서 바로 UKI로 부팅하는 방식을 사용합니다. 이렇게 하면 멀티부팅 메뉴 없이 바로 리눅스로 부팅됩니다. 만약 윈도우로 부팅하고 싶다면? 메인보드의 바이오스 설정에서 부팅 항목을 선택하면 됩니다.
efibootmgr --create --disk /dev/nvme0n1 --part 1 --label "Arch Linux" --loader '\EFI\Linux\arch-linux-cachyos-bore-lto.efi' --unicode
재부팅
파티션을 언마운트하고 재부팅합니다.
exit
umount /mnt/boot
umount /mnt
reboot
1개의 좋아요
재부팅 후 작업
와이파이에 연결합니다.
nmcli device wifi connect (SSID) password password
시계 동기화를 활성화합니다.
sudo timedatectl set-ntp true
1개의 좋아요
파티션 마운트 및 램디스크 설정
필요한 파티션들을 마운트하도록 설정합니다. systemd automount 기능을 사용하겠습니다.
sudo mkdir /mnt/data
sudo nano /etc/systemd/system/mnt-data.mount
[Mount]
What=/dev/disk/by-uuid/(UUID)
Where=/mnt/data
Type=ntfs3
Options=ro
sudo nano /etc/systemd/system/mnt-data.automount
[Automount]
Where=/mnt/data
TimeoutIdleSec=600
[Install]
WantedBy=multi-user.target
sudo systemctl enable mnt-data.automount
일부 디렉토리에 tmpfs를 이용한 램디스크를 설정합니다.
sudo nano /etc/systemd/system/var-cache.mount
[Mount]
What=tmpfs
Where=/var/cache
Type=tmpfs
Options=rw,nosuid,nodev,size=4G
[Install]
WantedBy=multi-user.target
sudo systemctl enable var-cache.mount
/var/log와 /var/lib/systemd/coredump에 대해서도 똑같이 해줬습니다.
1개의 좋아요
zram 활성화
저는 스왑 대신 zram을 사용하겠습니다.
sudo pacman -S zram-generator
sudo nano /etc/systemd/zram-generator.conf
[zram0]
zram-size = 16384
compression-algorithm = zstd
sudo systemctl daemon-reload
sudo systemctl start systemd-zram-setup@zram0
zram 사용할 때는 zswap을 끄는 것이 좋습니다.
sudo nano /etc/kernel/cmdline
rw zswap.enabled=0 rootflags=...
sudo mkinitcpio -P
그 다음 재부팅합니다.
1개의 좋아요
보안 부팅(Secure Boot) 설정
사실 저는 보안 부팅을 요구하는 게임을 하고 있지는 않지만 그래도 사용하려 합니다.
메인보드의 바이오스 설정에서 키들을 전부 지우고 보안 부팅 자체도 비활성화해 줍니다.
sbctl을 설치합니다.
sudo pacman -S sbctl
reboot
상태를 확인해줍시다.
sudo sbctl status
Secure Boot는 disabled, Setup mode는 enabled라고 떠야 합니다.
이제 키를 등록하고 UKI에 서명합니다.
sudo sbctl create-keys
sudo sbctl enroll-keys -m (MS의 키를 같이 등록함)
sudo sbctl status (여기서 installed라고 떠야 함)
sudo sbctl sign -s /boot/EFI/Linux/arch-linux-cachyos-bore-lto.efi
서명하는 과정은 이번 한 번만 하면 됩니다. 나중에 커널이 업데이트될 때는 pacman hook이 자동으로 서명해 줄 것입니다.
이제 재부팅하고 바이오스 설정에서 보안 부팅을 활성화합니다. sudo sbctl status에서 Secure Boot가 enabled라고 뜨면 성공입니다.
위 과정에서 MS의 키를 같이 등록했으므로 윈도우로의 부팅도 잘 될 것입니다. 리눅스는 윈도우와는 다르게 기본적으로 부팅 시 서명되지 않은 모듈(DKMS)의 로딩을 허용하기 때문에 모듈을 사용하는 경우에도 문제가 없습니다.
1개의 좋아요
bluehill 저장소 추가
bluehill 저장소를 추가합니다. 이 저장소에는 여러 가지 미리 빌드된 AUR 패키지들이 있습니다. 참고로 제가 쓰는 AUR 패키지들은 여기 에 있습니다.
sudo nano /etc/pacman.conf
[bluehill]
Server = https://storage.googleapis.com/bluehillaur/
sudo pacman -Syy
PGP 키를 가져옵니다.
sudo pacman-key -r AB69CFD0BE72421F --keyserver keys.openpgp.org
sudo pacman-key -f AB69CFD0BE72421F # 지문이 11EC DFAA EFB2 7D0C 1FE0 이어야 함
sudo pacman-key --lsign-key AB69CFD0BE72421F
한글 폰트 설치
나눔글꼴과 D2Coding 폰트를 설치합니다. 먼저 bluehill 저장소를 추가하셔야 합니다.
sudo pacman -S ttf-nanum-meta ttf-d2coding
한국어로 언어 바꾸기
sudo nano /etc/locale.conf
(en_US를 ko_KR로 변경)
재부팅하면 한글이… 반겨주지 않습니다. 콘솔 환경에서는 한글을 출력할 수 없기 때문입니다.
데스크톱 환경 및 PipeWire 설치
한글 폰트를 설치했다고 해서 콘솔에 한글이 나오는 건 아닙니다. 데스크톱 환경을 설치해줘야만 합니다.
xfce는 Wayland가 실험적 지원이고, GNOME은 제 마음에 들지 않았습니다. 그래서 KDE를 사용하려 합니다. 아래 명령은 Plasma 데스크톱 환경과 몇몇 앱들을 설치합니다.
sudo pacman -S plasma-desktop breeze-gtk kde-gtk-config plasma-nm plasma-pa plasma-browser-integration plasma-firewall dolphin konsole spectacle ark kalk koko haruna okular kfind kget ksystemlog plasma-systemmonitor kscreen kinfocenter plasma-disks kdf kgpg kwalletmanager kwallet-pam ksshaskpass kdialog
jack 뭐시기가 나오는데 이때는 pipewire-jack을 선택합니다.
디스플레이 매니저도 설치해야 합니다. 보통 KDE에는 SDDM을 많이 씁니다.
sudo pacman -S sddm sddm-kcm
sudo systemctl enable sddm
설치를 완료했으면 재부팅합니다.
1개의 좋아요
한글 입력기 설치
Gemini가 KDE와 Wayland 환경에서는 Fcitx5가 좋답니다. 설치합시다.
sudo pacman -S fcitx5 fcitx5-hangul fcitx5-qt fcitx5-gtk fcitx5-configtool
그런 다음 이 링크 에서 나온 대로 해 줍니다. 여기서 설명하기에는 좀 복잡하군요.
오른쪽 Alt 키를 한영키로 인식시키기 위해서 아래와 같이 해 줍니다. 그냥 Alt 키를 전환 키로 쓰면 안되냐고 물을 수도 있는데, 그렇게 하면 Alt키로도 기능하고 한영키로도 기능하더군요.
sudo nano /etc/udev/hwdb.d/90-custom-keyboard.hwdb
evdev:input:b*v*p*e*
KEYBOARD_KEY_700e6=hangeul
KEYBOARD_KEY_700e4=hanja
sudo systemd-hwdb update
sudo udevadm trigger
1개의 좋아요
소프트웨어 설치
여러가지 소프트웨어들을 설치합니다.
Microsoft Edge
sudo pacman -S microsoft-edge-stable-bin
Visual Studio Code
sudo pacman -S visual-studio-code-bin
Oh My Zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
nano ~/.zshrc
ZSH_THEME="sunaku"
블루투스 스택
sudo pacman -S bluez bluedevil
sudo systemctl enable bluetooth
그리고 재부팅합니다.
Galaxy Buds Client
sudo pacman -S galaxybudsclient-bin
닷넷
닷넷을 시스템 영역에 설치하는 대신 dotup 버전 관리 도구를 이용합시다.
sudo pacman -S dotup-bin
Fast Node Manager
sudo pacman -S fnm-bin
JetBrains Toolbox
sudo pacman -S jetbrains-toolbox
KDE Connect
윈도우에 휴대폰과 연결이 있다면 KDE에는 KDE Connect가 있습니다. 기능도 휴대폰과 연결보다 강력합니다.
sudo pacman -S kdeconnect sshfs
그 다음에는 firewalld 방화벽 규칙을 구성합니다. kdeconnect 서비스에 체크하면 됩니다.
이제 안드로이드 기기에 KDE Connect를 설치하고 설정을 진행합니다.
2개의 좋아요
OpenSSH 및 ksshaskpass 설정
SSH 키를 KWallet에 저장해서 ssh-add만으로 키를 불러올 수 있게 합니다.
먼저 OpenSSH를 systemd 서비스로 추가합니다.
mkdir -p ~/.config/systemd/user/
nano ~/.config/systemd/user/ssh-agent.service
[Unit]
Description=SSH key agent
[Service]
Type=simple
Environment=SSH_AUTH_SOCK=%t/ssh-agent.socket
ExecStart=/usr/bin/ssh-agent -D -a $SSH_AUTH_SOCK
[Install]
WantedBy=default.target
systemctl --user daemon-reload
systemctl --user enable --now ssh-agent
nano ~/.zshrc
export SSH_AUTH_SOCK="${XDG_RUNTIME_DIR}/ssh-agent.socket"
다음으로 ksshaskpass를 설정합니다.
mkdir -p ~/.config/environment.d
~/.config/environment.d/ssh_askpass.conf
SSH_ASKPASS=/usr/bin/ksshaskpass
SSH_ASKPASS_REQUIRE=prefer
이제 ssh-add 명령어를 실행하고 암호 기억에 체크한 후 암호를 입력하면 다음부터는 암호를 입력할 필요가 없습니다.
1개의 좋아요
DNS 설정
DNSSEC, DNS over HTTPS를 설정합니다. 먼저 필요한 패키지를 설치합니다.
sudo pacman -S dnscrypt-proxy unbound
dnscrypt-proxy를 구성합니다.
sudo nano /etc/dnscrypt-proxy/dnscrypt-proxy.toml
server_names = ['cloudflare']
listen_addresses = ['127.0.0.1:5300']
cache = false
Unbound를 구성합니다.
sudo nano /etc/unbound/unbound.conf
server:
do-not-query-localhost: no
forward-zone:
name: "."
forward-addr: 127.0.0.1@5300
NetworkManager를 구성합니다.
sudo nano /etc/NetworkManager/conf.d/dns.conf
[main]
dns=none
sudo systemctl restart NetworkManager
DNS를 구성합니다.
sudo rm /etc/resolv.conf
sudo nano /etc/resolv.conf
nameserver 127.0.0.1
options edns0 trust-ad
서비스를 활성화합니다.
sudo systemctl enable --now dnscrypt-proxy unbound
sudo systemctl restart NetworkManager
1개의 좋아요
윈도우로 재부팅하는 스크립트 생성
저는 기본적으로 리눅스로 부팅하도록 설정했기 때문에 윈도우로 재부팅하려면 bcdedit이나 efibootmgr 명령을 써야 하는 불편함이 있습니다. 따라서 쉽게 재부팅할 수 있도록 리눅스 셸 스크립트와 윈도우 파워셸 스크립트를 만들었습니다.
리눅스 셸 스크립트
#!/usr/bin/bash
TARGET_NAME="Windows Boot Manager"
BOOT_ID=$(efibootmgr | grep -i "$TARGET_NAME" | head -n1 | awk '{print substr($1, 5, 4)}')
if [ -z "$BOOT_ID" ]; then
return 1
fi
(echo "(user password)" | sudo -S efibootmgr -n "$BOOT_ID") && reboot
윈도우 파워셸 스크립트
# 관리자 권한 확인
if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) {
Start-Process powershell.exe "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`"" -Verb RunAs
exit
}
# 1. 펌웨어 목록에서 "Windows Boot Manager"가 포함된 항목 찾기
$targetLabel = "Windows Boot Manager"
$bootEntry = bcdedit /enum firmware | Select-String -Pattern $targetLabel -Context 5,0
if ($bootEntry) {
# 2. 식별자(identifier) 라인 파싱 ({GUID} 추출)
# Context를 이용해 "Windows Boot Manager" 줄의 위쪽에서 identifier를 찾음
$guidLine = $bootEntry.Context.PreContext | Select-String "identifier"
$guid = $guidLine.ToString().Split(" ")[-1].Trim()
# 3. 부팅 순서 변경 및 재부팅
bcdedit /set "{fwbootmgr}" bootsequence $guid /addfirst
shutdown /r /t 0
} else {
Write-Host "Error: '$targetLabel' entry not found in BCD." -ForegroundColor Red
Pause
}
1개의 좋아요
QEMU 설치
리눅스에서는 VMware보다는 KVM이 좋다고 들어서 QEMU를 설치하려 합니다.
sudo pacman -S qemu-desktop virt-manager dnsmasq swtpm
sudo usermod -aG libvirt $USER
sudo systemctl enable libvirtd
그리고 재부팅합니다. 가상 장비 관리자라는 앱이 설치되어 있을 것입니다.
1개의 좋아요
게이밍 세팅하기
사실 이번에는 리눅스에서 게임은 안 하려고 했습니다만, 그래도 호기심이 도져서 ㅠㅠㅠㅠ
Polychromatic
sudo pacman -S polychromatic
sudo gpasswd -a $USER openrazer
systemctl --user enable openrazer-daemon
그리고 재부팅합니다.
스팀
sudo pacman -S steam steam-native-runtime proton-cachyos
하드웨어에 맞는 적절한 드라이버를 선택합니다. 저는 vulkan-radeon을 선택했습니다.
디스코드
sudo pacman -S discord
xpadneo
엑스박스 시리즈 X 컨트롤러를 사용하기 위해서 xpadneo를 설치합니다.
sudo pacman -S xpadneo-dkms
그리고 재부팅합니다.
GameMode
sudo pacman -S gamemode lib32-gamemode
sudo gpasswd -a $USER gamemode
그리고 재부팅합니다.
Gamescope
sudo pacman -S gamescope
이제 위의 GameMode와 결합해서 스팀에서 아래와 같이 사용할 수 있습니다.
gamemoderun gamescope -W 1920 -H 1080 -r 240 -f --adaptive-sync -- %command%
ProtonUp-Qt
sudo pacman -S protonup-qt
여기서 GE Proton 같은 것들을 설치할 수 있습니다.
Prism Launcher
sudo pacman -S prismlauncher
3개의 좋아요