메인 운영체제로써의 리눅스 적응기

이번에 메인 운영체제를 리눅스로 바꾸기로 결정했습니다.

지금까지 가상 머신에 리눅스는 많이 설치해 봤지만, 메인 컴퓨터에 리눅스는 처음으로 설치해봅니다.

그래서 메인 운영체제로써에 리눅스에 대한 Slog를 한번 써보려고 합니다.

참고로 배포판은 아치 리눅스(롤링 릴리스이기 때문에 버전이 딱히 존재하지 않음)입니다.

7 Likes

0. 설치 준비

먼저 설치 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
1 Like

1. 파티션 생성

가장 먼저 EFI 시스템 파티션을 생성해 줍시다. 사실 이건 윈도우에서 해도 상관없긴 합니다.

fdisk /dev/nvme0n1
g (새 GPT 파티션 테이블)
n (새 파티션)
(엔터)
(엔터)
+100m (100 MiB)
t (파티션 타입 바꾸기)
1 (EFI 시스템 파티션)
w (변경 사항을 저장하고 끝내기)

그리고 저는 윈도우를 설치했습니다. 리눅스와 윈도우를 멀티부팅할 때는 윈도우를 먼저 설치하는 것이 좋다고 들었기 때문입니다.

윈도우 설치를 완료했으면 다시 리눅스 설치 미디어로 부팅합니다.

저는 루트 파티션에 F2FS(!), 게임 등을 저장할 보조 파티션에 Btrfs를 사용할 생각입니다. 그 이유는 다음과 같습니다.

  1. F2FS는 SSD에서 사용하는 모든 파일 시스템 중 성능이 가장 좋다고 합니다.
  2. Btrfs는 WinBtrfs라는, 윈도우에서 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
1 Like

2. 파티션 마운트 및 파일 설치

루트 파티션 마운트

mount -o compress_chksum /dev/nvme0n1p3 /mnt

부팅 파티션 마운트

mount --mkdir /dev/nvme0n1p1 /mnt/efi
mount --mkdir /dev/nvme0n1p2 /mnt/boot

서브 파티션, NTFS(윈도우) 파티션 마운트

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 실행

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 생성

먼저, 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
1 Like

3. 나머지 설치 진행

시간대를 설정해줍시다.

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
1 Like

4. 부트로더 설치 및 재부팅

부트로더 설치

부트로더는 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
1 Like

5. 재부팅 후 작업 및 데스크톱 환경 설치

시계 자동 동기화 활성화

시계 동기화를 활성화해 줍시다.

timedatectl set-ntp true

NTFS 파티션을 읽기/쓰기로 다시 마운트

먼저 자신의 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 환경이 반겨줄 것입니다. 자유롭게 커스텀 해 줍시다.

1 Like

6. AUR 설치

가장 먼저 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
1 Like

7. 한글로 바꾸기

Settings - Appearance로 들어갑니다. Fonts 탭으로 들어가서 Default Font와 Default Monospace Font를 한글 폰트로 바꿔줍니다.

그런 다음

sudo nano /etc/locale.conf
(en_US.UTF-8을 ko_KR.UTF-8으로 변경)
reboot

이제 재부팅하면 한글이 반겨줄 것입니다.

1 Like

8. 한글 입력기 설치

저는 이제 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를 사용할 수 있습니다.

9. Oh My Zsh 설치

다음 명령을 입력합니다.

sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
1 Like

10. 사운드 시스템 설치

이제 마지막 단계입니다. 이 작업이 끝나면 천천히 올릴 생각입니다.

저는 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

이제 로그아웃 했다가 다시 로그인 하면 소리가 나올 것입니다.

1 Like

DNS over HTTPS 설정

패널에 네트워크 아이콘을 표시되게 합시다.

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 Servers127.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인지 확인합니다.

2 Likes

스왑 활성화

이전 단계를 그대로 따랐다면, 이미 스왑 파티션을 통해 스왑을 활성화했을 것입니다. 따라서 스왑 파일을 별도로 만들 필요는 없습니다.

이하 내용은 제가 처음으로 메인에 리눅스를 설치했을 때 적은 글입니다.


이전 내용

제 컴퓨터는 메모리가 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

그리고 재부팅합니다.

2 Likes

이모지 폰트 설치

noto-fonts-emoji 패키지를 설치하면 됩니다.

sudo pacman -S noto-fonts-emoji

multilib 저장소 활성화

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 앱만 되는 듯 함)



2 Likes

VMware Workstation 설치

저는 더 이상 리눅스에서는 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

Rider 설치

지금까지 비주얼 스튜디오만 쓰다가 라이더는 처음 써 보네요. 최근에 비상업적으로는 무료화되서 정말 다행입니다.

JetBrains Toolbox를 사용하는 방법도 있지만 개인적으로 별로 좋아하지 않기 때문에 AUR을 이용하여 설치합시다. (사실 JetBrains Toolbox도 AUR을 통해 설치해야 하는건 마찬가지)

yay -S rider

유니티 허브 설치

저는 유니티를 이제 처음 배우고 있는 단계입니다.

yay -S unityhub
2 Likes

다음에 깡 리눅스 쓸 일이 있을 때 큰 도움이 될 것 같은 레퍼런스입니다.

아참, 어썸한 텍스트 편집기 VS Code 도 설치하시죠 ㅎㅎㅎ

2 Likes

이미 위 단계에서 vscode를 설치했습니다.

2 Likes

OpenRazer 설치

저는 Razer사의 헌츠맨 V2 라는 키보드를 사용하는데 이 키보드의 LED를 조절하려면 OpenRazer와 Polychromatic이라는 소프트웨어가 필요합니다.

sudo pacman -S openrazer-daemon
sudo gpasswd -a $USER plugdev
systemctl --user enable openrazer-daemon
yay -S polychromatic

그리고 재부팅합니다.

2 Likes

.sln, .csproj 파일 Rider로 연결하기

기본적으로 sln 파일과 csproj 파일은 text/plain (혹은 text/xml)로 취급되기 때문에 일반 텍스트 파일과는 따로 연결할 수 없습니다.

그래서 직접 MIME 타입을 만들어줘야 합니다.

아래 링크에서 코드 블록에 있는 텍스트를 복사하여 mimes.xml로 저장합니다. 그런 다음 아래 명령을 실행합니다.

sudo xdg-mime install mimes.xml --mode system --novendor

설정 - 기본 애플리케이션 - 기타로 이동합니다. application/x-dotnet-solutionapplication/x-dotnet-csharp-project를 Rider로 지정하면 됩니다.

2 Likes

exiftool 설치

exiftool은 보통 사진의 exif를 조작하는 데에 많이 쓰지만 PE(exe, dll) 바이너리의 버전 등의 정보를 보는 데에도 쓸 수 있습니다. 저는 이 목적으로 설치했습니다.

sudo pacman -S perl-image-exiftool

gtkhash 설치

gtkhash는 윈도우의 hashtab과 비슷한 프로그램입니다. Thunar 플러그인을 설치합시다.

yay -S gtkhash-thunar

디스코드 설치

sudo pacman -S discord

Seahorse 설치

Seahorse(혹은 암호 및 키)를 사용하여 GPG 키를 관리합시다.

sudo pacman -S seahorse

Celluloid 설치

Celluloid는 mpv의 GTK 프런트엔드 중 하나입니다.

sudo pacman -S celluloid

Loupe 설치

Loupe는 GNOME의 새로운 기본 이미지 뷰어입니다. 우리는 Xfce를 설치했지만, 그래도 같은 GTK인데 작동되지 않을 이유가 없습니다. (물론 Xfce는 GTK3이고 Loupe는 GTK4이긴 하지만, 사실 Celluloid도 GTK4)

sudo pacman -S loupe
2 Likes