Profile picture

[Arch Linux] Arch Linux(아치 리눅스) 설치하기

JaehyoJJAng2023년 07월 10일

▶ 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 파일을 수정하여 HOOKSlvm2를 추가하자.

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

image
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-userwheel 그룹에 속해 있는지 확인해보자.

$ 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. 한글 설치

위 과정에서 localeko_KR.UTF-8로 지정해놨었는데 여전히 한글이 깨지는 현상이 발생한다.

이는 한글 폰트가 없어서 그런 것이므로, yay를 사용하여 한글 폰트를 설치해주자.

yay -S ttf-nanumgothic_coding

Loading script...