이번에 메인 운영체제를 리눅스로 바꾸기로 결정했습니다.
지금까지 가상 머신에 리눅스는 많이 설치해 봤지만, 메인 컴퓨터에 리눅스는 처음으로 설치해봅니다.
그래서 메인 운영체제로써에 리눅스에 대한 Slog를 한번 써보려고 합니다.
참고로 배포판은 아치 리눅스(롤링 릴리스이기 때문에 버전이 딱히 존재하지 않음)입니다.
이번에 메인 운영체제를 리눅스로 바꾸기로 결정했습니다.
지금까지 가상 머신에 리눅스는 많이 설치해 봤지만, 메인 컴퓨터에 리눅스는 처음으로 설치해봅니다.
그래서 메인 운영체제로써에 리눅스에 대한 Slog를 한번 써보려고 합니다.
참고로 배포판은 아치 리눅스(롤링 릴리스이기 때문에 버전이 딱히 존재하지 않음)입니다.
먼저 설치 ISO 파일을 USB로 복사해줍시다. 저는 Rufus라는 프로그램을 사용했습니다.
만들어준 USB로 부팅해줍니다. 이때 Secure Boot는 꺼줘야 합니다.
먼저 인터넷 연결을 확인해봅니다.
ping 1.1.1.1
정상적으로 연결된 것으로 보입니다.
64 bytes from 1.1.1.1 (생략) ...
다음으로 현재 시각을 확인해 봅니다.
date
시간이 UTC로 뜨는데 시각은 잘 맞는 것으로 보입니다.
Sat Nov 16 11:56:13 UTC 2024
가장 먼저 EFI 시스템 파티션을 생성해 줍시다. 사실 이건 윈도우에서 해도 상관없긴 합니다.
fdisk /dev/nvme0n1
g (새 GPT 파티션 테이블)
n (새 파티션)
(엔터)
(엔터)
+100m (100 MiB)
t (파티션 타입 바꾸기)
1 (EFI 시스템 파티션)
w (변경 사항을 저장하고 끝내기)
그리고 저는 윈도우를 설치했습니다. 리눅스와 윈도우를 멀티부팅할 때는 윈도우를 먼저 설치하는 것이 좋다고 들었기 때문입니다.
윈도우 설치를 완료했으면 다시 리눅스 설치 미디어로 부팅합니다.
저는 루트 파티션에 F2FS(!), 게임 등을 저장할 보조 파티션에 Btrfs를 사용할 생각입니다. 그 이유는 다음과 같습니다.
다만 여러분이 리눅스 초심자라면 F2FS 말고 그냥 얌전히 ext4 쓰시기 바랍니다. F2FS는 ext4보다 약간 불안정하다고 알려져 있기 때문입니다. 근데 많은 안드로이드 폰(갤럭시 등)에 F2FS가 기본으로 쓰이는 걸 보면 그렇게 안정성이 나쁜것 같지는 않기도 합니다.
하여튼 F2FS를 사용할 것인데, 문제는 GRUB가 F2FS를 제대로 지원하지가 않습니다. 그래서 "Linux extended boot(XBOOTLDR)"라는 특수한 파티션을 만들어야 합니다. 이 파티션을 /boot
로 마운트하여, 커널 등을 담을 것입니다.
그리고 스왑 파티션은 맨 끝에 배치하겠습니다. 혹시 스왑 공간을 키워야한다면 쉽게 키울 수 있게 하기 위함입니다.
fdisk /dev/nvme0n1
n
(엔터)
(엔터)
+400m (400 MiB)
t
(엔터)
142 (Linux extended boot)
n
(엔터)
(엔터)
+95367m (100GB, 약 93.1 GiB)
t
(엔터)
23 (Linux root (x86-64))
n
(엔터)
(엔터)
-16g (마지막 16GiB를 제외한 용량 전부)
n
(엔터)
(엔터)
(엔터)
t
(엔터)
19 (Linux swap)
w
파티션 생성을 완료했으니, 이제 포맷을 해야겠죠. EFI 시스템 파티션은 포맷하지 않습니다, 아까 윈도우를 설치했고 포맷하게 되면 윈도우로 부팅이 불가능해지기 때문입니다.
mkfs.ext4 /dev/nvme0n1p2
mkfs.f2fs -l Linux -O extra_attr,inode_checksum,sb_checksum,encrypt,lost_found,verity,casefold,compression -C utf8:strict /dev/nvme0n1p3
mkfs.btrfs -L Games /dev/nvme0n1p4
mkswap /dev/nvme0n1p5
이제 파티션을 생성합시다.
fdisk -l
이 명령을 사용하여 설치할 디스크를 확인합니다. 제 경우에는 /dev/sda
네요. (자세한 내용은 길어서 생략…)
아래 명령어로 파티션 작업을 합니다.
fdisk /dev/sda
g (새 GPT 파티션 테이블)
n (새 파티션)
(엔터)
(엔터)
+100m (100 MiB)
y (vfat 서명 지우기. 이건 새 하드에서 작업하면 안 뜹니다.)
t (파티션 타입 바꾸기)
1 (EFI 시스템 파티션)
n
(엔터)
(엔터)
(엔터, 전체 용량 사용하기)
t
(엔터)
23 (Linux root x86-64)
w
파티션 작업을 한 후 다시 fdisk -l
로 파티션이 잘 만들어졌는지 확인합니다.
파티션 작업을 완료했으면 포맷을 해 줍니다. 저는 Btrfs를 사용할 생각입니다.
mkfs.fat -F 32 /dev/sda1
mkfs.btrfs -L System /dev/sda2
mount -o compress_chksum /dev/nvme0n1p3 /mnt
mount --mkdir /dev/nvme0n1p1 /mnt/efi
mount --mkdir /dev/nvme0n1p2 /mnt/boot
NTFS 파티션은 일단 읽기 전용으로 마운트하겠습니다.
mount --mkdir /dev/nvme0n1p4 /mnt/mnt/games
mount --mkdir -t ntfs-3g -o ro /dev/sda2 /mnt/mnt/data
mount --mkdir -t ntfs-3g -o ro /dev/sdb2 /mnt/mnt/windows
mount --mkdir -t ntfs-3g -o ro /dev/sdb3 /mnt/mnt/vm
swapon /dev/nvme0n1p5
reflector -c KR -p https --sort rate --save /etc/pacman.d/mirrorlist
pacstrap -K /mnt base base-devel linux linux-firmware sudo git nano amd-ucode f2fs-tools btrfs-progs ntfs-3g networkmanager zsh grub efibootmgr os-prober
먼저, fstab의 내용을 확인합시다.
genfstab -U /mnt
fstab을 만들어줍시다.
genfstab -U /mnt > /mnt/etc/fstab
arch-chroot /mnt
이제 본격적으로 설치를 해 봅시다. 먼저 파티션을 마운트합니다.
mount /dev/sda2 /mnt
mount --mkdir /dev/sda1 /mnt/boot/efi
한국 미러를 설정하여 다운로드를 더 빠르게 합시다.
reflector -c KR -p https --sort rate --save /etc/pacman.d/mirrorlist
파일 설치를 진행합니다.
pacstrap -K /mnt base base-devel linux linux-firmware sudo git nano amd-ucode btrfs-progs networkmanager zsh grub efibootmgr
fstab을 생성합니다.
genfstab -U /mnt > /mnt/etc/fstab
이제 설치한 리눅스로 들어갑시다.
arch-chroot /mnt
시간대를 설정해줍시다.
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 naMain > /etc/hostname
Btrfs를 사용할 것이므로 initramfs를 다시 생성해야 합니다.
nano /etc/mkinitcpio.conf
(HOOKS=(... btrfs))
mkinitcpio -P
사용자를 만들어줍시다.
useradd -m -G wheel,storage,power,audio,video -s /bin/zsh na1307
passwd na1307
sudoer를 설정해줍니다.
EDITOR=nano visudo
%wheel ALL=(ALL:ALL) ALL
네트워크를 활성화합니다.
systemctl enable NetworkManager
부트로더는 GRUB를 사용하겠습니다. 왜 GRUB를 쓰냐면 테마를 커스텀 할 수 있기 때문입니다.
아까 pacstrap 단계에서 GRUB 설치 프로그램(?)은 이미 설치했습니다. (grub efibootmgr os-prober
)
우리는 윈도우를 먼저 설치했기 때문에 GRUB에서 윈도우를 감지할 수 있게 해야합니다.
nano /etc/default/grub
(GRUB_DISABLE_OS_PROBER=false의 주석 처리 해제)
이제 GRUB를 설치합시다.
grub-install --efi-directory=/efi --bootloader-id=Linux
grub-mkconfig -o /boot/grub/grub.cfg
exit
umount /mnt/mnt/vm
umount /mnt/mnt/windows
umount /mnt/mnt/data
umount /mnt/mnt/games
umount /mnt/boot
umount /mnt/efi
umount /mnt
reboot
저는 systemd-boot를 사용하겠습니다.
bootctl install
ukify build --linux=/boot/vmlinuz-linux --initrd=/boot/amd-ucode.img --initrd=/boot/initramfs-linux.img --output=/boot/efi/EFI/Linux/vmlinuz-linux.efi --cmdline "quiet rw"
systemd-boot는 btrfs에서 부팅을 지원하지 않는 것 같습니다. 설정도 어려운 것 같으니 어쩔 수 없이 grub를 사용합시다.
grub-install /dev/sda1
grub-mkconfig -o /boot/grub/grub.cfg
이제 재부팅합니다.
exit
umount /mnt/boot/efi
umount /mnt
reboot
시계 동기화를 활성화해 줍시다.
timedatectl set-ntp true
먼저 자신의 uid와 gid를 알아냅시다.
id
그 다음 fstab을 수정합니다.
sudo nano /etc/fstab
(ntfs를 ntfs-3g로 변경, ro를 rw로 변경, uid와 gid를 자신의 것으로 변경, relatime 추가, dmask=000 추가, fmask=000 추가, windows_names 추가)
reboot
데스크톱 환경은 GNOME, KDE 등 여러가지가 있는데, 저는 Xfce를 설치하겠습니다.
sudo pacman -S xfce4 xfce4-whiskermenu-plugin xfce4-screenshooter xfce4-taskmanager gvfs
로그인 매니저도 설치해야겠죠. 저는 LightDM을 씁니다.
sudo pacman -S lightdm lightdm-gtk-greeter
sudo systemctl enable lightdm
reboot
재부팅하면 GUI 환경이 반겨줄 것입니다. 자유롭게 커스텀 해 줍시다.
가장 먼저 yay를 설치해 줍니다.
git clone --depth=1 https://aur.archlinux.org/yay.git
cd yay
makepkg -si
cd ..
rm -rf yay
이제 한글 폰트 등 필요한 AUR들을 설치하겠습니다.
yay -S ttf-nanum ttf-d2coding google-chrome visual-studio-code-bin
Settings - Appearance로 들어갑니다. Fonts 탭으로 들어가서 Default Font와 Default Monospace Font를 한글 폰트로 바꿔줍니다.
그런 다음
sudo nano /etc/locale.conf
(en_US.UTF-8을 ko_KR.UTF-8으로 변경)
reboot
이제 재부팅하면 한글이 반겨줄 것입니다.
저는 이제 kime를 사용합니다.
다음 명령어를 입력합니다.
sudo pacman -S ibus-hangul
sudo nano /etc/environment
GTK_IM_MODULE=ibus
QT_IM_MODULE=ibus
XMODIFIERS=@im=ibus
그런 다음 ibus-daemon -rxRd
을 로그인 할 때 설정합니다. Xfce의 경우 설정 - 세션 및 시동에서 설정하면 됩니다.
로그아웃 했다가 다시 로그인 하면 iBus를 사용할 수 있습니다.
다음 명령을 입력합니다.
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
이제 마지막 단계입니다. 이 작업이 끝나면 천천히 올릴 생각입니다.
저는 PipeWire를 쓰려고 합니다.
sudo pacman -S pipewire wireplumber pipewire-audio pipewire-alsa pipewire-pulse xfce4-pulseaudio-plugin pavucontrol
systemctl --user enable pipewire
systemctl --user enable pipewire-pulse
systemctl --user enable wireplumber
이제 로그아웃 했다가 다시 로그인 하면 소리가 나올 것입니다.
패널에 네트워크 아이콘을 표시되게 합시다.
sudo pacman -S network-manager-applet
로그아웃 했다가 다시 로그인 합니다.
dnscrypt-proxy 패키지를 설치합니다.
sudo pacman -S dnscrypt-proxy
sudo systemctl enable dnscrypt-proxy
구성을 진행합시다.
sudo nano /etc/dnscrypt-proxy/dnscrypt-proxy.toml
위키를 참고하여 적절히 구성을 진행합니다. 저는 cloudflare만 활성화 해 두었습니다.
패널의 네트워크 아이콘에 우클릭 - Edit Connections… - 유선 연결 1 - IPv4 설정으로 들어가서 주소만 자동 (DHCP)로 변경한 후 DNS Servers를 127.0.0.1로 설정합니다.
그런 다음
sudo systemctl start dnscrypt-proxy
nmcli dev disconnect enp9s0
nmcli dev connect enp9s0
이제 1.1.1.1 — One of the Internet’s Fastest, Privacy-First DNS Resolver 로 들어가서 Using DNS over HTTPS (DoH)가 Yes인지 확인합니다.
이전 단계를 그대로 따랐다면, 이미 스왑 파티션을 통해 스왑을 활성화했을 것입니다. 따라서 스왑 파일을 별도로 만들 필요는 없습니다.
이하 내용은 제가 처음으로 메인에 리눅스를 설치했을 때 적은 글입니다.
제 컴퓨터는 메모리가 24GB이지만, 스왑이 없으면 일부 앱이 정상적으로 실행되지 않을 수 있습니다.
sudo btrfs subvolume create /swap
sudo btrfs filesystem mkswapfile --size 8g --uuid clear /swap/swapfile
sudo swapon /swap/swapfile
sudo nano /etc/fstab
/swap/swapfile none swap defaults 0 0
그리고 재부팅합니다.
noto-fonts-emoji
패키지를 설치하면 됩니다.
sudo pacman -S noto-fonts-emoji
32비트 앱인 스팀이나 와인 등을 사용하기 위해서 multilib 저장소를 활성화합니다.
sudo nano /etc/pacman.conf
[multilib]
Include = /etc/pacman.d/mirrorlist
sudo pacman -Syyu
steam
패키지를 설치합니다.
sudo pacman -S steam
Vulkan 드라이버는 저는 vulkan-radeon
을 선택했습니다.
스팀을 설치했으면 로그인합니다. 스팀 설정으로 들어가서 호환성 - 다른 모든 타이틀에 Steam 플레이 활성화에 체크합니다.
sudo pacman -S wine wine-mono
윈도우 폰트를 설치해야 정상적으로 한글이 나옵니다.
yay -S ttf-ms-win11-auto-korean
설치해 보고 몇 가지 앱들을 실행해 봤는데 네이티브, 레거시 닷넷 프레임워크, 닷넷 (코어) 앱 모두 정상적으로 실행되는 것을 확인했습니다. (닷넷 코어 데스크톱 앱은 Self-Contained 앱만 되는 듯 함)
저는 더 이상 리눅스에서는 VMware를 쓰지 않습니다. 여러 가지 문제가 있기 때문입니다.
vmware-workstation
AUR 패키지를 설치합니다.
sudo pacman -S linux-headers
yay -S vmware-workstation
(VMware 한번 실행한 후)
sudo systemctl enable vmware-networks
sudo systemctl enable vmware-usbarbitrator
sudo modprobe -a vmw_vmci vmmon
다만 문제가 하나 있는데 가상 머신 시작하는 시간이 매우 오래 걸립니다. 제 시스템의 문제인지는 모르겠습니다.
아치 공식 패키지 저장소는 x.x.1xx 버전만 제공하기 때문에 그 이상 버전의 SDK를 사용하려면 AUR을 통해 설치해야만 합니다.
yay -S dotnet-sdk-bin aspnet-runtime-bin aspnet-targeting-pack-bin
sudo nano /etc/environment
DOTNET_ROLL_FORWARD=LatestMajor
지금까지 비주얼 스튜디오만 쓰다가 라이더는 처음 써 보네요. 최근에 비상업적으로는 무료화되서 정말 다행입니다.
JetBrains Toolbox를 사용하는 방법도 있지만 개인적으로 별로 좋아하지 않기 때문에 AUR을 이용하여 설치합시다. (사실 JetBrains Toolbox도 AUR을 통해 설치해야 하는건 마찬가지)
yay -S rider
저는 유니티를 이제 처음 배우고 있는 단계입니다.
yay -S unityhub
다음에 깡 리눅스 쓸 일이 있을 때 큰 도움이 될 것 같은 레퍼런스입니다.
아참, 어썸한 텍스트 편집기 VS Code 도 설치하시죠 ㅎㅎㅎ
이미 위 단계에서 vscode를 설치했습니다.
저는 Razer사의 헌츠맨 V2 라는 키보드를 사용하는데 이 키보드의 LED를 조절하려면 OpenRazer와 Polychromatic이라는 소프트웨어가 필요합니다.
sudo pacman -S openrazer-daemon
sudo gpasswd -a $USER plugdev
systemctl --user enable openrazer-daemon
yay -S polychromatic
그리고 재부팅합니다.
기본적으로 sln 파일과 csproj 파일은 text/plain
(혹은 text/xml
)로 취급되기 때문에 일반 텍스트 파일과는 따로 연결할 수 없습니다.
그래서 직접 MIME 타입을 만들어줘야 합니다.
아래 링크에서 코드 블록에 있는 텍스트를 복사하여 mimes.xml로 저장합니다. 그런 다음 아래 명령을 실행합니다.
sudo xdg-mime install mimes.xml --mode system --novendor
설정 - 기본 애플리케이션 - 기타로 이동합니다. application/x-dotnet-solution
과 application/x-dotnet-csharp-project
를 Rider로 지정하면 됩니다.
exiftool은 보통 사진의 exif를 조작하는 데에 많이 쓰지만 PE(exe, dll) 바이너리의 버전 등의 정보를 보는 데에도 쓸 수 있습니다. 저는 이 목적으로 설치했습니다.
sudo pacman -S perl-image-exiftool
gtkhash는 윈도우의 hashtab과 비슷한 프로그램입니다. Thunar 플러그인을 설치합시다.
yay -S gtkhash-thunar
sudo pacman -S discord
Seahorse(혹은 암호 및 키)를 사용하여 GPG 키를 관리합시다.
sudo pacman -S seahorse
Celluloid는 mpv의 GTK 프런트엔드 중 하나입니다.
sudo pacman -S celluloid
Loupe는 GNOME의 새로운 기본 이미지 뷰어입니다. 우리는 Xfce를 설치했지만, 그래도 같은 GTK인데 작동되지 않을 이유가 없습니다. (물론 Xfce는 GTK3이고 Loupe는 GTK4이긴 하지만, 사실 Celluloid도 GTK4)
sudo pacman -S loupe