▶ Arch Linux
아치 리눅스는 데비안 및 레드햇 기반 배포판들과 비교했을 때 몇 가지 독특한 장점이 있다.
이 장점들은 주로 시스템 관리, 사용자 제어, 최신 소프트웨어 제공 등의 측면에서 부각된다.
□ NOTE
기본적인 틀에서 사용자가 알아서 자신만의 OS를 커스텀할 수 있는 장점이 존재한다.
□ NOTE
레드햇 또는 데비안 계열 배포판에서는 사용자의 편의를 위해 더 많은 기본 패키지 및 기타 설정을 포함하고 있기 때문에
시스템을 직접 커스텀하려는 일부 유저들에게는 불필요한 요소들이 많이 포함되게 된다.
반면, 아치의 경우 설치부터 시작해서 쓸만한 하나의 운영체제가 될 때까지의 과정이 비교적 쉽지 않고, 오래 걸리기도 하지만
그로인해 리눅스 시스템의 전반적인 이해와, 성취감을 느낄 수 있는 장점이 존재한다.
또한, 웬만한 설정 파일은 한 번씩 사용자의 손을 거치기 때문에 추후 발생한 문제에 대한 트러블슈팅도 문제없이 풀어나갈 확률이 높다.
그러면서도 이러한 종류의 배포판들이 주로 사용하는 소스 컴파일 프로그램 인스톨 방식이 아닌
바이너리 인스톨 방식을 디폴트로 사용하여, 세팅과 프로그램 인스톨이 매우 편리하면서도 커스텀 유저들의 요구 사항들도 충족 시켜준다.
1. 설치 준비
1-1. 이미지파일 다운
아래 링크로 가서 South Korea라고 써있는 항목을 찾은 후 나열 되어있는 목록 중 아무거나 클릭하여 .iso 파일을 다운로드 받도록 하자.
https://archlinux.org/download/
네이티브로 띄우려는 경우 부팅 USB를 준비해주고 각 OS에 맞게 이미지를 구워준다.
- 리눅스: balena etcher
- 윈도우: rufus (dd 모드)
본인의 경우 VM으로 띄워 사용할 것이므로 위 과정은 생략하겠다.
1-2. UEFI 확인
부팅 USB로 부팅하였다면 UEFI를 확인
ls /sys/firmware/efi/efivars
해당 명령어 실행 시 오류가 없다면, 시스템이 정상적으로 UEFI 모드로 부팅한 것이다. 만약 디렉토리가 존재하지 않는다면 시스템이 BIOS모드로 부팅했을 가능성이 있으니 사용자의 메인모드를 확인해보자.
1-3. 인터넷 연결
부팅이 정상적으로 되었다면, 제일 먼저 인터넷 연결을 확인해야 한다.
인터넷 랜선이 서버와 유선으로 연결되어 있다면 자동 연결이 되지만 무선 와이파이의 경우 수동으로 잡아줘야 한다.
iwctl
[iwd]$ device list
[iwd]$ station <연결할 무선 랜카드 이름> scan
[iwd]$ station <연결할 무선 랜카드 이름> get-networks
[iwd]$ station <연결할 무선 랜카드 이름> connect <연결할 네트워크 이름>
위 과정이 정상적으로 수행되었거나, 랜선이 유선 연결인 경우 ping
으로 인터넷이 잘 되는지 확인해보자.
ping google.com
1-4. 시스템 시간 설정
timedatectl set-ntp true
timedatectl set-timezone Asia/Seoul
1-5. 디스크 파티션 나누기
디스크 목록 출력
---
$ fdisk -l
Disk /dev/sda: 120 GiB, 128849018880 bytes, 251658240 sectors
Disk model: QEMU HARDDISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
---
---
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 792.2M 1 loop /run/archiso/airootfs
sda 8:0 0 120G 0 disk
sr0 11:0 1 1.1G 0 rom /run/archiso/bootmnt
---
HDD를 사용 중이라면 /dev/sda
가 나오고, SSD를 사용 중이라면 /dev/nvme
가 나온다.
파티션 생성
fdisk /dev/sda
# Boot 파티션 생성
Command: n
---
Partition number (1-4, default 1):
First sector (2048-251658239, default 2048): 2048
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-251658239, default 251658239): +1G
Created a new partition 1 of type 'Linux' and of size 1 GiB.
---
# 주 파티션 생성
Command: n
---
Partition number (2-4, default 2):
First sector (2099200-251658239, default 2099200):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2099200-251658239, default 251658239):
Created a new partition 2 of type 'Linux' and of size 119 GiB.
---
# 설정 저장
Command (m for help): w
---
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
---
1-6. 부트 파티션 포맷
mkfs.ext4 /dev/sda1
1-7. 주 파티션 LVM 설정
1. PV 생성
# PV 생성
pvcreate /dev/sda2
Physical volume "/dev/mapper/lvm" successfully created.
# 생성된 PV 출력
pvdisplay
--- NEW Physical volume ---
PV Name /dev/sda2
VG Name
PV Size <119.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID DMWAxd-4fNu-j3Rg-IRA3-HXlg-3DXD-mBdg9I
3. VG 생성
# VG 생성
vgcreate vg0 /dev/sda2
Volume group "vg0" successfully created
# 생성된 VG 출력
vgdisplay
--- Volume group ---
VG Name vg0
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size <119.00 GiB
PE Size 4.00 MiB
Total PE 30463
Alloc PE / Size 0 / 0
Free PE / Size 30463 / <119.00 GiB
VG UUID 21uQGg-NLT7-0i2z-Pdd0-iN4p-z0IZ-tTVf73
4. LV 생성
# named lv_root in this section, and its for our root filesystem
lvcreate -L 40GB vg0 -n lv_root
Logical volume "lv_root" created.
# can adjust this value, in this case just want to have unclaimed space for it
lvcreate -l 100%FREE vg0 -n lv_home
Logical volume "lv_home" created.
# 생성된 LV 출력
lvdisplay
--- Logical volume ---
LV Path /dev/vg0/lv_root
LV Name lv_root
VG Name vg0
LV UUID UHI0Te-8y35-d4Lq-N0nj-qKEV-1nlr-p1KqIm
LV Write Access read/write
LV Creation host, time archiso, 2024-06-25 06:52:38 +0000
LV Status available
# open 0
LV Size 40.00 GiB
Current LE 10240
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 254:1
--- Logical volume ---
LV Path /dev/vg0/lv_home
LV Name lv_home
VG Name vg0
LV UUID 7OMkop-oUDW-1TFD-70KV-Tee9-Rms4-esh0UB
LV Write Access read/write
LV Creation host, time archiso, 2024-06-25 06:54:00 +0000
LV Status available
# open 0
LV Size 78.98 GiB
Current LE 20219
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 254:2
5.장치 매퍼 모듈 로드: LVM 기능을 사용하기 위해 커널에 dm_mod 모듈을 로드
modprobe dm_mod
6. 볼륨 그룹 검색: 시스템에 존재하는 볼륨 그룹 검색
vgscan
7. 볼륨 그룹 활성화: 검색된 모든 볼륨 그룹을 활성화하여 논리 볼륨을 사용할 수 있게 한다.
vgchange -ay
8. 파일시스템 ext4로 포맷
mkfs.ext4 /dev/vg0/lv_root
mkfs.ext4 /dev/vg0/lv_home
1-9. 파일 시스템 마운트
주 파티션 마운트
mount /dev/vg0/lv_root /mnt
home 파티션 마운트
mkdir /mnt/home
mount /dev/vg0/lv_home /mnt/home
부팅 시스템 마운트
mkdir /mnt/boot
mount /dev/sda1 /mnt/boot
2. 설치
2-1. 미러 선택하기
가장 빠른 미러 서버 찾아서 저장
# 가장 빠른 미러서버 찾아서 저장하기
reflector -c "South Korea" -a 12 --sort rate --save /etc/pacman.d/mirrorlist
패키지 매니저 업데이트
pacman -Syy
-S
: 패키지 데이터베이스 동기화 또는 패키지 설치, 업그레이드, 제거하는데 사용-y
: 패키지 데이터베이스 새로 고침. 다시 말해 원격 서버의 패키지 데이터베이스를 로컬 시스템과 동기화-yy
: 패키지 데이터베이스를 강제로 새로 고침. 이 옵션은 보통 사용되지 않는 옵션으로, 이미 최신 상태인 데이터베이스를 다시 다운로드 하도록 강제.
2-2. 필수 패키지 설치
최소한의 필요 패키지만 설치 후 부가적인 것은 추후 설치
pacstrap /mnt base linux linux-firmware vim grub lvm2 dhcpcd sudo
3. 시스템 설정
3-1. fstab 등록
genfstab
을 사용하여 파일 시스템 레이블(fstab
)을 생성하고, 이를 /mnt/etc/fstab
파일에 추가
genfstab -U /mnt >> /mnt/etc/fstab
3-2. Chroot
root 유저로 설치한 리눅스에 접속
arch-chroot /mnt
3-3. SWAP 파일 생성
시스템에 메모리가 충분하므로, 스왑 파일을 zero
로 생성
dd if=/dev/zero of=/swapfile bs=1M count=1024 status=progress
# 권한 설정
chmod 600 /swapfile
# swap 활성화
mkswap /swapfile
swapon /swapfile
# fstab에 등록
sh -c 'echo "/swapfile none swap defaults 0 0" >> /etc/fstab'
3-4. 시간대 설정
# 서울 시간대 찾아 링크 파일 생성
ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
# 하드웨어 시간 동기화
hwclock --systohc
3-5. 지역 및 언어 설정
/etc/locale.gen
파일을 수정하여 local 설정 파일 만들기
vim /etc/locale.gen
# 원하는 locale을 찾아서 주석처리된 '#'을 삭제
#ko_KR.UTF-8 -> ko_KR.UTF-8
locale.gen
Generating locales...
ko_KR.UTF-8... done
Generation complete.
/etc/locale.conf
파일을 만들고 아래에 문구 추가
sh -c 'echo "LANG=ko_KR.UTF-8" > /etc/locale.conf'
3-6. 네트워크 설정
현재 활성화된 인터페이스 출력
$ ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
link/ether bc:24:11:3c:15:70 brd ff:ff:ff:ff:ff:ff
altname enp0s18
ens18
네트워크 인터페이스에 대한 파일을 아래와 같이 설정
$ vim /etc/systemd/network/ens18.network
[Match]
Name=ens33
[Network]
DHCP=yes
hostname 파일을 생성
echo "arch" > /etc/hostname
hosts 파일도 위에서 설정한 이름에 맞춰서 추가
cat >> /etc/hosts << EOF
127.0.0.1 localhost
::1 localhost
127.0.1.1 arch.localdomain arch
EOF
3-7. root 계정 패스워드 설정
passwd root
4. 부트로더 설치
- 부팅을 하기위해 부트로더를 설치. 해당 실습에서는
grub
부트로더를 설치함.
4-1. grub 설치
grub-install --target=i386-pc /dev/sda # 파티션이 아닌 디스크임에 유의
grub-mkconfig -o /boot/grub/grub.cfg # 해당 설정을 안해주면 부팅 안되니 주의
4-2. LVM 설정 추가
mkinitcpio.conf
파일을 수정하여 HOOKS
에 lvm2
를 추가하자.
vim /etc/mkinitcpio.conf
# 해당 변수에 lvm2를 추가
HOOKS=(base udev autodetect modconf block lvm2 filesystems keyboard fsck)
# vim에서 나온 후 initramfs 이미지를 생성
mkinitcpio -P
# arch-chroot에서 빠져나오기
exit
5. 재부팅
부팅 usb 분리 후 재부팅
umount /mnt/boot
umount /mnt/home
umount /mnt
reboot
Arch Linux로 접속하면 된다.
6. 계정 생성
1. a-user 유저를 생성하고 wheel 그룹에 등록
useradd -mG wheel a-user
2. a-user의 패스워드 설정
passwd a-user
3. /etc/sudoers
파일 설정
먼저 /etc/sudoers
파일을 직접 수정하는 것은 권장되지 않는다. Arch Linux에서는
/etc/sudoers.d/ 디렉토리를 사용하여 개별 파일로 sudo
권한을 설정한다.
이 디렉토리에 파일을 만들어 설정하는 것이 더 안전하고 추천되는 방법이다.
visudo -f /etc/sudoers.d/a-user
위 명령어로 a-user라는 파일을 생성하고 편집할 수 있다. 이 파일에 a-user
에게 sudo
권한을 부여하는 설정을 추가해주자.
4. sudo 권한 설정
a-user
에게 wheel
그룹에 속해 있으며 sudo
권한을 부여하려면 다음과 같이 설정
echo "a-user ALL=(ALL:ALL) ALL" | sudo tee /etc/sudoers.d/a-user
5. 그룹 멤버십 확인
a-user
가 wheel
그룹에 속해 있는지 확인해보자.
$ id a-user
uid=1000(a-user) gid=1000(a-user) groups=1000(a-user),998(wheel)
6. sudo 권한 즉시 적용
변경된 sudo 권한을 즉시 적용하려면 로그아웃 후 다시 로그인하거나, newgrp
명령어를 사용하여 새로운 쉘 세션에서 그룹 멤버십을 적용할 수 있다
newgrp wheel
7. aur 레포지토리 설정
Arch에는 커뮤니티 주도로 관리되는 Arch User Repository (AUR) 레포지토리가 존재한다.
이는 내장 패키지 관리자(pacman
)로는 쓸 수가 없고, AUR Helper를 따로 써야 한다.
Helper 없이 직접 소스를 받아 설치하는 방법도 있다.
해당 실습에서는 가장 인기 많은 헬퍼인 yay
를 사용할 것이다.
sudo pacman -S --needed git base-devel
git clone https://aur.archlinux.org/yay.git
cd yay
makepkg -si
설치는 위와 같다.
yay
가 없으면 다른 AUR package들도 위와 같이 코드를 받고 직접 설치해야 하는데 매우 귀찮지 않겠는가.
만약 yay를 가지고 어떤 패키지를 사용한다면 yas -S <패키지 이름>
과 같이 사용할 수 있다. pacman
의 사용법과 동일하다.
8. 한글 설치
위 과정에서 locale
을 ko_KR.UTF-8
로 지정해놨었는데 여전히 한글이 깨지는 현상이 발생한다.
이는 한글 폰트가 없어서 그런 것이므로, yay
를 사용하여 한글 폰트를 설치해주자.
yay -S ttf-nanumgothic_coding