리눅스/Arch or Manjaro

아치 리눅스(Arch Linux) 설치 03 - 사용자에 의한 Base 시스템 완전 수동 설치[UEFI/GRUB2/Swap Partition]

씨실과 날실 2021. 6. 30. 09:00

[관련 게시물]

2021.06.22 - [리눅스/Arch or Manjaro] - 아치 리눅스(Arch Linux) 설치 01 - Arch Linux에 대한 소개 및 ISO 파일 다운로드

2021.06.24 - [리눅스/Arch or Manjaro] - 아치 리눅스(Arch Linux) 설치 02 - archinstall 인스톨러를 통한 설치

2021.06.30 - [리눅스/Arch or Manjaro] - 아치 리눅스(Arch Linux) 설치 03 - 사용자에 의한 Base 시스템 완전 수동 설치[UEFI/GRUB2/Swap Partition]

2021.07.05 - [리눅스/Arch or Manjaro] - 아치 리눅스(Arch Linux) 설치 04 - 사용자에 의한 Base 시스템 완전 수동 설치[UEFI/systemd-boot/Swap File]

2021.07.09 - [리눅스/Arch or Manjaro] - 아치 리눅스(Arch Linux) 설치 05 - 데스크톱 환경 설치

2021.07.12 - [리눅스/Arch or Manjaro] - 아치 리눅스(Arch Linux) 설치 06 - 시스템 언어 환경 및 형식(포맷)과 한글 입력 설정(한글 폰트 설치, IBUS/Fcitx5 입력기 설치 및 한글 입력 설정)

2021.07.14 - [리눅스/Arch or Manjaro] - 아치 리눅스(Arch Linux) 설치 07 - 버추얼박스 게스트 확장(Guest Additions) 설치

2021.07.20 - [리눅스/Arch or Manjaro] - 아치 리눅스(Arch Linux) 설치 08 - TUI 인스톨러 archfi를 통한 설치 01

2021.07.23 - [리눅스/Arch or Manjaro] - 아치 리눅스(Arch Linux) 설치 08 - TUI 인스톨러 archfi를 통한 설치 02(archdi의 Update Menu)

2021.07.29 - [리눅스/Arch or Manjaro] - 아치 리눅스(Arch Linux) 설치 08 - TUI 인스톨러 archfi를 통한 설치 03(archdi의 Install Menu 중 필수 GUI 환경 구축 과정)

2021.08.02 - [리눅스/Arch or Manjaro] - 아치 리눅스(Arch Linux) 설치 08 - TUI 인스톨러 archfi를 통한 설치 04(archdi의 Install Menu 중 각종 응용 앱 설치 과정)

2021.08.04 - [리눅스/Arch or Manjaro] - 아치 리눅스(Arch Linux) 설치 08 - TUI 인스톨러 archfi를 통한 설치 05(주요 시스템 설정 작업 및 마무리 과정)

2021.08.06 - [리눅스/Arch or Manjaro] - 아치 리눅스 (Arch Linux) 주요 설정 파일 예시

 

 

안녕하세요. 씨실과 날실입니다.

지난 시간에서는 아치 리눅스 인스톨러인 archinstall을 통해 아치 리눅스를 설치하는 방법에 대해 알아보았습니다.

이번에는 아치 리눅스를 설치하는 전통적인 방법인 수동 설치(Manual Installation) 방법에 대해 알아보도록 하겠습니다.

 

리눅스 초보자로써 아치 리눅스를 한 번 써보는데 의의를 두시는 분들은 이하의 글에서 설명하고 있는 수동 설치 방법 대신 아래 링크의 archinstall 패키지를 이용한 간편 설치를 권장합니다.

그러나 리눅스를 어느 정도 아시는 분으로써 아치 리눅스를 최적화 설치를 해보고 싶거나 운영체제를 자신의 손으로 구축하는 보람을 느껴보고 싶으신 분들은 이하의 수동 설치 설명을 참고하시기 바랍니다.

 

아치 리눅스 수동 설치 방법은 아치 리눅스 위키에 정말 굉장히 자세히 설명되어 있습니다. 개인적으로 젠투 리눅스와 함께 설치 가이드가 가장 잘 정비되어 있는 리눅스 배포판이라는 생각을 하고 있습니다. 물론 설치 가이드가 따로 정비되어야 할 만큼 설치 작업이 복잡다단하다는 것을 의미하기도 합니다.

어쨌든 아치와 젠투 이 두 리눅스의 설치 과정을 통달하게 되면 적어도 리눅스의 기본적인 핵심 설정 등은 다룰 줄 알게 됩니다.

 

두 리눅스의 공식 설치 가이드가 꽤 잘 정비 되어 있고 번역 역시 충실히 되어 있습니다만 리눅스 초보자가 따라하면서 시스템을 구축하기에는 부족한 부분이 분명 있습니다.

그 부족한 부분을 채워 줄 수 있는 곳이 전우형님의 사이트입니다.

 

전우형님의 Documents for the Korean Linux Users 웹사이트

https://jeonwh.com/

 

전우형님의 아치 리눅스 설치 가이드

https://jeonwh.com/arch-install/

 

전우형님의 과거 사이트 주소

https://whjeon.com/

국내에서는 아치 리눅스와 젠투 리눅스 설치 가이드에 대하여 가장 짜임새 있게 구성되어 있는 글로 위의 전우형님의 글이 가장 유명합니다.

 

아치 리눅스를 수동으로 설치해보고자 하시는 분들은 위 링크들의 웹문서를 찾아 먼저 탐독하시는 것을 권장합니다.

 

이하의 제 글은 아래의 목적을 가집니다.

[포스팅 목적]

1. 따라하면서 궁금할 만한 정보 게시

2. 정보의 원본 출처 게시

3. 단순히 명령을 게시하는 것 뿐만 아니라 해당 명령을 실행했을 때 표시되는 내용도 함께 적어 학습자들이 현재 올바르게 진행되고 있는지 검토할 수 있도록 안내

 

[아치 리눅스 수동 설치 연재 주제]

1. 기본(Base) 시스템 구축

2. 주요 데스크톱 환경DE) 구축

3. 버추얼박스 게스트 확장 설치

4. 한글 환경 구축(한글 폰트, 시스템 언어, 한글 입력기)

5. ABS 사용법

6. AUR 사용법

7. pacman 사용법

 

[아치 리눅스 구축 환경]

가상머신 환경 : VirtualBox 6.1

가상 하드 디스크 용량 : 2T

아치 리눅스 설치 미디어 ISO : archlinux-2021.06.01-x86_64.iso

 

[구성 목표]

부팅모드 : UEFI

사용 네트워크 : 유무선 네트워크

사용 부트로더 : GRUB

스왑 형식 : 파티션

시스템 유형 : 데스크톱 환경

 


MBR 방식은 거의 사라져가는 레거시 기술로 취급받고 대신 UEFI 방식이 현재 주류 부팅 방식이므로 UEFI 방식을 기준으로 삼아 설명을 진행하도록 하겠습니다.

리눅스 시스템 구축자는 부팅모드 외에도 부트로더와 스왑 형식 두 가지에 대해서 선택을 해야 합니다.

이 글은 전통적이고 아직까지 널리 쓰이고 있는 GRUB 부트로더와 스왑 파티션 형식을 기준으로 글을 진행하도록 하겠습니다.

 

그러나 근래 많이 쓰이는 systemd-boot 부트로더와 스왑 파일 형식도 그 세를 얻어가고 있으므로 해당 내용에 대해서 따로 글을 작성하도록 하겠습니다.

아직 작성 중

systemd-boot 부트로더와 스왑 파일 형식을 이용한 시스템 구축은 위 링크의 글을 참고하시기 바랍니다.

 

위 포스팅 목적에도 간략하게 적었지만 이 글을 포함하여 아치 리눅스 관련 연재 글들은 단순히 작업  순서도 수준의 짧은 안내서가 아니라 초보자가 따라하면서 궁금해 할만한 내용을 첨부하여 배경지식을 넓히는데 그 목적이 있습니다.

그간 제가 리눅스를 공부하면서 궁금해왔던 내용들은 다른 분들도 궁금해할 것이기 때문입니다.

각 단계마다 생길 수 있는 궁금중에 대해서 짧게나마 적거나 적지는 못하더라도 해당 내용을 공부할 수 있는 믿을 만한 출처를 게시하도록 하겠습니다.

 

제 글이 아치 리눅스 사용자 뿐만 아니라 다른 리눅스 배포판 사용자들에게도 도움이 되기 바랍니다.

 

버추얼박스 가상머신에서 아치 리눅스 설치 및 라이브 부팅 이미지를 통한 구동

버추얼박스 가상머신에서 아치 리눅스 설치 및 라이브 부팅 이미지를 통한 시스템 부팅은 위 링크를 참고하시기 바랍니다.

 

라이브 부팅 구동 시 설치 메뉴 선택 화면

Arch Linux install medium (x86_64, UEFI)
Arch Linux install medium (x86_64, UEFI) with speech
Arch Linux install medium (x86_64, UEFI, Copy to RAM)
EFI Shell
Reboot Into Firmware Interface

일반 사용자라면 맨 위 항목을 선택해주시면 됩니다.

 

라이브 부팅 직후 초기 화면

Arch Linux 5.12.8-arch1-1 (tty1) 

archiso login: root (automatic login) 

To install Arch Linux follow the installation guide: 
https://wiki.arch1inux.org/index.php/Installation_guide 

For Wi-Fi, authenticate to the wireless network using the iwctl utility. 
For mobile broadband (WWAN) modems, connect with the mmcli utility. 
Ethernet, ULAN and WWAN interfaces using DHCP should work automatically. 

After connecting to the internet, the installation guide can be accessed 
via the convenience script Installation_guide. 
root@archiso ~ #

archlinux-2021.06.01-x86_64.iso로 라이브 부팅했을 때의 초기 화면입니다.

위 출력 내용을 요약하면 다음과 같습니다.

아치 리눅스 설치 및 라이브 부팅 미디어로 부팅한 직후 tty1 터미널에 출력된 첫 내용 요약

1. 로그인 정보

root 계정으로 자동으로 로그인되었다.

 

2. 아치리눅스 설치 가이드

 

아치 리눅스 설치 가이드는 위 링크에서 얻을 수 있다.

 

3. 인터넷 연결

Wi-Fi의 경우 iwctl 유틸리티를 사용하여 무선 네트워크에 연결한다.
모바일 광대역 (WWAN) 모뎀의 경우 mmcli 유틸리티로 연결한다.
DHCP를 사용하는 이더넷, ULAN 및 WWAN 인터페이스는 자동으로 작동한다.

 

4. 터미널에서 아치 리눅스 설치 가이드 보기
인터넷에 연결된 상태라면 터미널에서 편의 스크립트인 Installation_guide를 실행하여 설치 가이드 내용을 확인할 수 있다.

 

아치 리눅스 설치 미디어 root 계정의 셸

## chroot 전
root@archiso ~ # grep root /etc/passwd
root:x:0:0::/root:/bin/bash
root@archiso ~ #

## chroot 후
[root@archiso /]# grep root /etc/passwd
root:x:0:0::/root:/bin/bash
[root@archiso /]#

아치 리눅스 설치 미디어로 부팅하여 root 계정으로 로그인된 상태일 때 기본 셸은 zsh입니다.

그러나 아치 리눅스의 설치가 완료된 후의 기본 셸은 bash입니다.

 

키보드 레이아웃 설정

아치 리눅스 위키의 Installation guide에서는 필요한 경우 키보드 레이아웃을 설정하라고 되어 있습니다만 우리는 굳이 설정해줄 필요 없습니다.

 

장치 확인

root@archiso ~ # lsblk
NAME 	MAJ:MIN RM 	SIZE 	RO 	TYPE 	MOUNTPOINT
loop0 	7:0 	0 	638.7M 	1 	loop 	/run/archiso/airootfs
sda 	8:0 	0 	2T 	0 	disk
sr0 	11:0 	1 	774.3M 	0 	rom 	/run/archiso/bootmnt
root@archiso ~ # 

명령어 lsblk는 (LiSt BLocK device)에서 따온 것으로 블록 장치를 나열하라는 명령입니다.

여기서 블록 장치가 무엇인지 알 필요가 있습니다.

일반적으로 장치(Device)는 일부 특수 장치를 제외하면 크게 캐릭터 디바이스(Character Device)와 블록 디바이스(Block Device) 이 둘로 나뉩니다.

 

캐릭터 디바이스는 직렬포트(시리얼포트) 등과 같이 물리적으로 주소를 지정할 수 있는 저장매체가 존재하지 않는 장치로 일반적으로 데이터 입출력이 byte stream으로 수행되는 장치들을 일컬으며, 키보드, 마우스, 모니터, 프린터 등이 이에 속합니다.

 

블록 디바이스는 물리적으로 주소를 지정할 수 있어  랜덤 액세스가 가능한 저장매체로 데이터 교환을 블록(Block)이나 섹터(Sector) 단위로 수행하는 장치를 말하며 하드디스크(HDD), SSD, CD/DVD 등이 이에 속합니다. 외에 메모리 영역도 여기에 속한다고 할 수 있습니다.

즉 쉽게 말해서 블록장치는 정보를 쓰고 지울 수 있는 디스크 장치를 말한다고 볼 수 있습니다.

 

리눅스에셔 표시되는 디스크 장치 이름 예시

IDE - /dev/hd
SCSI - /dev/sd
NVMe - /dev/nvme
CD/DVD - /dev/sr
USB - /dev/usb

데이터 입출력에 쓰이는 단자 방식에 따라 디스크별 장치 명명 방식이 위 상자와 같이 다르게 됩니다.

이들 장치명들은 공통부분까지만 표기한 것입니다.

예를들어 현재 쓰이는 하드 디스크의 경우 각 디스크마다 /dev/sda, /dev/sdb, /dev/sdc 등으로 이름이 붙여지게 되고, 하나의 디스크는 다시 파티션별로 또 구분이 되어 /dev/sda1, /dev/sda2, /dev/sda3 이런 식으로 나뉘게 됩니다.

 

루프 디바이스(Loop Device)에 대하여

아주 간단히 설명하자면 파일을 마치 물리적으로 존재하는 블록 디바이스처럼 인식케 한 가상 장치입니다.

가장 대표적인 예가 광학미디어의 ISO 파일을 마운트할 때입니다. ISO 파일은 하나의 파일 안에 전체 파일 시스템이 포함되어 있는 형태입니다. 따라서 해당 파일 시스템 안의 파일을 다루려면 루프 디바이스를 이용하게 됩니다.

$ sudo mount -t 1so9660 -o loop /media/test.iso /mnt

 

아치 리눅스 설치미디어로 부팅한 후 lsblk를 실행해보면 블록장치 중 loop0가 있는 것을 확인할 수 있습니다.

root@archiso ~ # lsblk
NAME 	MAJ:MIN RM 	SIZE 	RO 	TYPE 	MOUNTPOINT
loop0 	7:0 	0 	638.7M 	1 	loop 	/run/archiso/airootfs

 ls -l  명령으로 loop0의 마운트 포인트를 확인해보면 ls -l   /과 동일한 내용을 출력합니다.

즉 /의 내용이 /run/archiso/airootfs에 loop된 것을 확인할 수 있습니다.

 

 

라이브 부팅 시 사용 가능한 디렉터리 및 파일 확인

root@archiso ~ # ls -F /
bin@ 	dev/ 	home/ 	lib64@ 	mnt/ 	proc/ 	run/ 	srv/ 	tmp/ 	var/
boot/ 	etc/ 	lib@ 	media/ 	opt/ 	root/ 	sbin@ 	sys/ 	usr/ 	version
root@archiso ~ #

ls의 -F 옵션은 해당 항목의 속성을 표시해주는 기능을 합니다.

ls -F 옵션 사용 시 표시되는 기호의 의미

/ : 해당 항목이 디렉터리임을 의미

@ : 해당 항목이 심볼릭 링크임을 의미

* : 해당 항목이 실행 파일임을 의미

= : 해당 항목이 소켓임을 의미

| : 선입선출 특수 파일(FIFO) , 파이프 파일

> : 도어(Door) 파일

위 내용은 man ls 명령을 통해서는 확인할 수 없습니다.

GNU 프로젝트의 코어 유틸 메뉴얼 중 10.1.4 General output formatting 항목의 ‘-F’, ‘--classify’, ‘--indicator-style=classify’ 부분에서 확인할 수 있습니다.

 

부팅 이미지 버전 확인

root@archiso ~ # cat /version
2021.06.01
root@archiso ~ #

이번 아치 리눅스 설치에 사용되는 설치 미디어의 버전이 2021년 6월 1일자임을 알 수 있습니다.

아치리눅스는 매달 1일에 설치미디어 ISO 파일이 배포됩니다.

 

부트방식 확인

이제 대부분의 컴퓨터들은 UEFI를 지원할 것입니다. 그러나 간혹 BIOS를 쓰는 경우가 있습니다.

자신의 컴퓨터가 현재 지원하는 부트 방식이 무엇인지는 아치 설치미디어로 부팅할 때 알 수 있습니다.

 

위와 같이 뜬다면 BIOS로 부팅되는 컴퓨터입니다.

 

반대로 위와 같이 뜬다면 UEFI로 부팅되는 컴퓨터입니다.

 

이 방법 말고 터미널에서도 확인해볼 수 있습니다.

 

root@archiso ~ # ls -F /sys/firmware
acpi/ dmi/ memmap/
root@archiso ~ #

위와 같이 efi 디렉터리를 볼 수 없다면 BIOS 또는 CSM으로 부팅된 것입니다.

 

root@archiso ~ # ls -F /sys/firmware
acpi/ dmi/ efi/ memmap/
oot@archiso ~ #

그런데 위처럼 efi 디렉터리가 존재한다면 UEFI로 부팅된 것입니다.

 

root@archiso ~ # ls -F /sys/firmware/efi
config_tables efivars/ fw_platform_size fw_vendor runtime runtime-map/ systab
root@archiso ~ #

efi 디렉터리 안의 내용을 확인해보면 위와 같이 출력됩니다.

 

root@archiso ~ # ls -F -1 /sys/firmware/efi/efivars
BackgroundClear
Boot0000
Boot0001
Boot0002
Boot0003
BootCurrent
BootOptionSupport
BootOrder
ConInDev
ConIn
ConOutDev
ConOut
FirmwareFeaturesMask
FirmwareFeatures
Key0000
Key0001
LangCodes
Lang
LoaderEntries
LoaderEntrySelected
LoaderFeatures
LoaderFirmwareInfo
LoaderFirmwareType
LoaderImageIdentifier
LoaderInfo
LoaderTimeExecUSec
LoaderTimeMenuUSec
MTC
OsIndicationsSupported
PlatformLangCodes
PlatformLang
PlatformRecovery0000
Timeout
VarErrorFlag
boot-args
root@archiso ~ #

위는 efi 디렉터리 안에서도 핵심 디렉터리인 efivars 디렉터리 안의 내용들입니다.

 

인터넷 연결 여부 확인

root@archiso ~ # ping -c3 archlinux.org
Ping archlinux.org (95.217.163.246) 56(84) bytes of data.
64 bytes from archlinux.org (95.217.163.246): icmp_seq=1 ttl=47 time=273 ms
64 bytes from archlinux.org (95.217.163.246): icmp_seq=1 ttl=47 time=273 ms
64 bytes from archlinux.org (95.217.163.246): icmp_seq=1 ttl=47 time=273 ms

--- archlinux.org ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 271.920/272.447/273.139/0.511 ms
root@archiso ~ #

인터넷이 정상적으로 연결되어 있는지 테스트해봅시다. 이를 위해서 이른바 핑 테스트라는 것을 합니다.

위에서는 아치 리눅스 공식 사이트를 대상으로 핑을 3번 보내본 결과입니다.

3 패킷을 보내 모두 응답을 받았습니다. 손실이 일어나지 않았습니다. 인터넷이 정상적으로 연결되어 있는 것입니다.

 

이때 알아야 할 점은 아무 사이트에서나 핑 테스트에 대한 응답을 보내지는 않는다는 것입니다.

예를 들어 국내 주요 포털 사이트들(DAUM, NAVER, NATE 등)은 응답하지 않습니다.

따라서 핑 테스트를 할 때는 응답을 해주는 사이트에 해야 합니다. 여기서는 아치 리눅스 공식 사이트를 핑 테스트 사이트로 지정했지만 일반적으로 핑 테스트에 자주 쓰이는 사이트는 구글입니다.

 

시스템 시각 설정

아치 리눅스 위키의 설치 가이드에서는 인터넷 연결 확인  파트 바로 다음에 시스템 시각 설정에 대해 설명하고 있습니다만 아치 리눅스 시스템 구축에서 반드시 필요한 작업은 아닙니다.

따라서 이 부분은 건너 뛰어도 무방합니다.

그래도 알아두면 유용 하기에 보충 설명을 적어 둡니다.

 

root@archiso ~ # timedatectl set-ntp true

NTP 서버 네트워크를 통해 정확한 시각을 설정할 수 있습니다. 설정하려면 위 명령을 실행하면 됩니다.

 

root@archiso ~ # timedatectl status
               Local time: Wed 2021-06-16 11:50:00 UTC
           Universal time: Wed 2021-06-16 11:50:00 UTC
                 RTC time: Wed 2021-06-16 11:50:00 UTC
                Time zone: UTC (UTC, +0000)
System clock synchronized: no
              NTP service: inactive
          RTC in local TZ: no
root@archiso ~ #

timedatectl status 명령을 실행하면 위와 같이 현재의 주요 설정 시각을 알 수 있습니다.

참고로 위는 NTP 서버를 통한 네트워크 시간 동기화를 진행하지 않은 경우의 예시입니다.

 

디스크 장치 구성 확인

앞서 lsblk 명령을 통해서 블록 장치를 알아보았습니다만 이 방법 외에 더 널리 쓰이는 명령이 있습니다.

바로 fdisk 명령입니다. 리눅스는 전통적으로 이 명령을 통해 파티션 테이블을 관리해왔습니다.

그런데 -l 옵션을 사용하면 디스크에 대한 자세한 정보를 확인할 수도 있습니다.

 

root@archiso ~ # fdisk -l
Disk /dev/sda: 2 TiB, 2199022206976 bytes, 4294965248 sectors
Disk model: VBOX 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


Disk /dev/loop0: 638.7 MiB, 669728768 bytes, 1308064 sectors
Disk model: VBOX 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
root@archiso ~ #

일반적으로 장치 구성을 확인할 때 위와 같이 $ sudo fdisk -l를 사용합니다.

참고로 CD-ROM 같은 읽기 전용(read only) 디스크는 fdisk 같은 파티션 테이블 관리 프로그램에서 인식하지 않습니다.

파티션을 관리하려면 일단 지우고 쓸 수 있어야 하는데 디스크가 읽기 전용이라면 자신의 목적을 수행할 수 없으므로 굳이 인식할 필요 없기 때문입니다.

 

파티션 구성 계획

시스템을 구축하려면 가장 먼저 시스템을 구축할 디스크의 파티션을 구성해야 합니다.

그리고 파티션은 시스템 관리자 또는 사용자의 목적에 맞게 구성되어야 합니다.

 

파티션 구성 1

파티션 구성 예시

파티션 테이블 : GPT

/dev/sda1 : EFI System  / FAT32 / 512M

/dev/sda2 : Linux Swap / Swap / 2G

/dev/sda3 : Linux Filesystem / ext4 / 나머지 용량

전통적인 파티션 구성입니다. 스왑 파티션을 따로 할당합니다.

 

파티션 구성 2

파티션 구성 예시

파티션 테이블 : GPT

/dev/sda1 : EFI System  / FAT32 / 512M

/dev/sda2 : Linux Filesystem / ext4 / 나머지 용량

스왑 파일 : 4G

근래의 파티션 구성입니다. 스왑 파티션을 따로 할당하지 아니하고 그 역할을 대신할 스왑 파일을 생성합니다.

 

과거에는 전통적으로 스왑 파티션을 따로 할당할 것을 권장하였지만 근래는 컴퓨팅 환경의 발전으로 파일로도 스왑 기능을 충분히 수행할 수 있게 되었으므로  자원의 유연한 활용을 위하여 스왑 파일 사용을 권장하는 편이며 우분투 등 일부 리눅스 배포판에서도 스왑 파일을 기본 설정으로 채택하고 있습니다.

 

이 글에서는 파티션 구성 1을 기준으로 설명하겠습니다.

스왑 파일 형식은 위 링그의 글을 참고하시기 바랍니다.

 

파티션 구성 프로그램

리눅스용 파티셔닝 도구로 여러가지가 존재합니다.

리눅스용 파티셔닝 도구

MBR 지원 도구

대화식 : fdisk  / parted

준 그래픽 : cfdisk

비대화식 : sfdisk / parted

그래픽 : GParted / gnome-disk-utility / partitionmanager

 

GPT 지원 도구

대화식 : fdisk  / gdisk / parted

준 그래픽 : cfdisk / cgdisk

비대화식 : sfdisk / sgdisk / parted

그래픽 : GParted / gnome-disk-utility / partitionmanager 

그런데 그래픽 파티셔닝 도구는 디스플레이 서버를 설치해야하는 등 사실상 시스템을 구축하는 이 시점에서는 사용하기가 어렵습니다.

여기서는 양 파티션 테이블 스키마를 모두 지원하고 초보자가 손쉽게 파티셔닝할 수 있는 cfdisk를 사용하도록 하겠습니다.

 

파티션 구성

파티션 구성 1

root@archiso ~ # cfdisk /dev/sda

파티션을 구성할 장치명을 인수로 삼아 cfdisk를 실행합니다.

 

Select lable type : gpt / dos / sgi / sun

파티션 테이블 유형을 선택합니다. 여기서는 UEFI를 사용하므로  GPT를 선택합니다.

2TB 미만의 MBR 파티션을 구성한다면 dos를 선택하시면 됩니다.

 

파티션 설정 절차

Disk: /dev/sda
Size: 2 TiB, 2199022206976 bytes, 4294965248 sectors
Label: gpt, identifier: 

  Device        Start             End          Sectors     Size   Type
>>Free space    2048        4294965214      4294963167       2T  



[   New   ] [   Quit   ] [   Help   ] [   Write   ] [   Dump   ]

파티션 설정 첫 화면입니다.

보시면 디스크 장치명, 디스크 크기(데이터 용량, 섹터), 파티션별 정보 등을 확인할 수 있습니다.

 

cfdisk의 파티션 설정 작업 순서는 아래와 같습니다.

cfdisk 파티션 설정 작업 순서

Free space 선택 > New 메뉴 선택 > Partition size 설정 > Type 메뉴 선택 > 파티션 유형 선택 >
Free space 항목으로 이동 > 이전의 파티션 생성 작업 반복 >
Write 메뉴 선택

하단의 메뉴는 Tab키로 이동할 수 있습니다.

 

Disk: /dev/sda
Size: 2 TiB, 2199022206976 bytes, 4294965248 sectors
Label: gpt, identifier: 

  Device        Start             End          Sectors     Size   Type
>>Free space    2048        4294965214      4294963167       2T  



Partition size: 512M

May be followed by M for MiB, G for GiB, T for TiB, or S for sectors.

New 메뉴가 선택된 상태에서 엔터키를 누르면 위처럼 파티션 크기를 설정하는 화면이 나타납니다.

숫자와 단위를 적고 엔터키를 눌러줍니다.

 

Disk: /dev/sda
Size: 2 TiB, 2199022206976 bytes, 4294965248 sectors
Label: gpt, identifier: 

  Device        Start             End          Sectors     Size   Type
>>/dev/sda1      2048         1050623          1048576     512M   Linux filesystem
Free space    1050624      4294965214       4293914591       2T  



Partition UUID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Partition type: Linux filesystem (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)

[   Delete   ] [   Resize   ] [   Quit   ] [   Type   ] [   Help   ] [   Write   ] [   Dump   ]

New 메뉴를 누르고 용량 설정을 마치면 위같이 표시됩니다.

맨 처음 생성된 파티션이므로 /dev/sda 뒤에 숫자 1이 붙습니다. 그리고 파티션 유형은 기본값인 Linux filesystem이 자동으로 설정됩니다.

그러나 이 파티션은 EFI System 파티션으로 예약했으므로 파티션 유형을 바꾸어 주도록 합시다.

 

Type 메뉴로 이동해 엔터키를 눌러줍니다. 그러면 아래와 같이 파티션 유형을 선택하는 메뉴가 나타납니다.

Select partition type
EFI System
MBR partition scheme
Intel Fast Flash
BIOS boot
Sony boot partition
Lenovo boot partition
PowerPC PReP boot
ONIE boot
ONIE config
Microsoft reserved
Microsoft basic data
Microsoft LDM metadata
Microsoft LDM data
Windows recovery environment
IBM General Parallel Fs
Microsoft Storage Spaces
HP-UX data
HP-UX service
Linux swap
Linux filesystem
Linux server data
Linux root (x86)
Linux root (x86-64)
Linux root (ARM)
Linux root (ARM-64)
Linux root (IA-64)
Linux reserved
Linux home
Linux RAID
Linux LVM
Linux variable data
Linux temporary data
Linux /usr (x86)
Linux /usr (x86-64)
Linux /usr (ARM)
Linux /usr (ARM-64)
Linux /usr (IA-64)
Linux root verity (x86)
Linux root verity (x86-64)
Linux root verity (ARM)
Linux root verity (ARM-64)
Linux root verity (IA-64)
Linux /usr verity (x86)
Linux /usr verity (x86-64)

맨 위의 EFI System을 선택해줍니다.

 

화살표키를 이용해 Device를 Free space 항목으로 이동하고 동일한 방식으로 스왑 파티션과 시스템 파티션을 설정해줍니다.

Disk: /dev/sda
Size: 2 TiB, 2199022206976 bytes, 4294965248 sectors
Label: gpt, identifier: 

  Device        Start             End          Sectors     Size   Type
>>/dev/sda1      2048         1050623          1048576     512M   EFI System
>>/dev/sda2   1050624         5244927          4194304       2G   Linux swap
>>/dev/sda3   5244928      4294965214       4289720287       2T   Linux filesystem  



Partition UUID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Partition type: Linux filesystem (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)

[   New   ] [   Quit   ] [   Help   ] [   Write   ] [   Dump   ]

설정이 끝나면 위와 같이 표시될 것입니다.

Tab키를 눌러 Write메뉴로 이동한 다음 엔터키를 눌러줍니다.

 

Are you sure you want to write the partition table to disk? yes

Type "yes" or "no", or press ESC to leave this dialog.

그럼 위와 같이 위 설정과 ㄱㅌ이 파티션 테이블을 디스크게 작성하겠느냐는 질문이 표시됩니다.

yes를 입력하고 엔터키를 눌러줍니다. 이때 y만 누르고 엔터키를 누르면 오류가 뜨므로 꼭 yes를 온전히 다 적어주도록 합시다.

 

그리고 Quit 메뉴로 이동해 엔터키를 눌러줍니다.

Quit program without writing changes
Syncing disks.
root@archiso ~ #

그러면 위같이 표시되고는 명령 입력 대기 상태로 돌아옵니다.

 

파티션 포맷

파티션 테이블을 구성한 다음에는 각 파티션이 사용할 파일시스템 포맷을 설정해주어야 압니다.

아래와 같이 각 파티션에 맞는 파일시스템을 구성해줍니다.

root@archiso ~ # mkfs.vfat -F32 /dev/sda1
mkfs.fat 4.2 (2021—01—31)

root@archiso ~ # mkswap /dev/sda2
Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
no label, UUID =xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 

root@archiso ~ # mkfs.ext4 -j /dex/sda3
mke2fs 1.46.2 (8-Feb-2021)
Creating filesystem with 536215035 4k blocks and 134053888 inodes
Filesystem UUID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Superblock backups stored on blocks:
	32768, 38304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
	4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 
	102400000, 214990848, 512000000

Allocating group tables: done
Writing inode tables: done Creating journa1 (262144 blocks): done
Creating journal (262144 blocks): done
Writing superblocks and filesystem accounting information: done

root@archiso ~ #

mkfs.vfat와 mkfs.ext4는 사실은 mke2fs 명령의 각기 다른 포맷 옵션을 적용한 별칭 명령입니다.

man mke2fs를 실행하여 DESCRIPTION 섹션의 세번째 문단을 보면 해당 내용에 대한 설명이 있습니다.

If mke2fs is run as mkfs.XXX (i.e., mkfs.ext2, mkfs.ext3, or mkfs.ext4) the option -t XXX is implied; so mkfs.ext3 will create a file system for use with ext3, mkfs.ext4 will create a file system for use with ext4, and so on.

즉 해당 내용을 요약하면 다음과 같습니다.

파일 시스템 설정 명령

mkfs.ext2 = mke2fs -t ext2

mkfs.ext3 = mke2fs -t ext3

mkfs.ext4 = mke2fs -t ext4

이와 유사하게 mkfs.vfat도 사실은 mkfs.fat의 별칭입니다. 단 여기는 명령어만 살짝 다를 뿐 특수한 옵션을 내포하여 작동한다거나 하는 일은 없습니다.

 

리눅스에서 포맷하는 방법에 대한 보다 자세한 내용은 위 링크의 글을 참고하시기 바랍니다.

 

스왑 파티션 활성화

root@archiso ~ # swapon /dev/sda2
root@archiso ~ # 

swapon은 'swap on'의 의미로 해당 파티션을 스왑 공간으로 활성화하는 명령입니다.

 

파티션 마운트

아치 리눅스 설치 미디어로 부팅 후 루트(/) 디렉터리 내용을확인해보면 아래와 같습니다.

root@archiso ~ # ls -F /
bin@ 	dev/ 	home/ 	lib64@ 	mnt/ 	proc/ 	run/ 	srv/ 	tmp/ 	var/
boot/ 	etc/ 	lib@ 	media/ 	opt/ 	root/ 	sbin@ 	sys/ 	usr/ 	version
root@archiso ~ #

이제 사용 준비가 되어, 향후 구동 시스템에 사용될 파티션들을 현재 구동 중인 아치 리눅스 설치 미디어시스템(archiso)에 마운트해 줄 차례입니다.

이들 파티션들을 마운트해주는 이유는 앞으로 사용될 파티션에 시스템 구동에 필요한 필수 패키지 등을 설치해주기 위함입니다.

 

사실 마운트 지점은 아무 디렉터리나 지정해도 상관 없지만 가능하면 파일시스템 계층구조 표준(FHS - Filesystem Hierarchy Standard)을 지켜 주시는 것이 좋습니다.

FHS에 대한 보다 자세한 내용은 위 링크를 참고하시는 것을 권장합니다.

FHS에서는 마운트와 관련하여 /mnt와 /media 디렉터리를 언급하고 있습니다.

각 디렉터리의 마운트 성격은 아래와 같습니다.

FHS에서 권장하는 마운트 디렉터리

/mnt

/mnt는 사용자가 일반적으로 잠깐 필요하여 임시적으로 마운트하는 디렉터리입니다.

우리는 지금 설치미디어로 시스템을 구축하고자 할때 파티션을 잠시 마운트하는 것이므로 /mnt가 적합한 마운트 디렉터리입니다.

 

/media

/media는 이동식 저장매체를 마운트할 때 사용되는 디렉터리입니다.

처음에는 하위 디렉터리가 없습니다만 필요할 때마다 이동식 저장매체별로 디렉터리를 추가하여 사용합니다.

FHS에서는 /floppy, /cdrom, /cdrecoder, /zip 등을 예시로 들고 있습니다.

시스템을 구축하는 사용자의 입맛에 따라 이 디렉터리는 없는 경우도 있습니다.

 

 

root@archiso ~ # mount /dev/sda3 /mnt

향후 주 파티션(루트 파티션)으로 사용될 파티션인 /dev/sda3를 임시 마운트 지점인 /mnt에 마운트합니다.

 

root@archiso ~ # mkdir /mnt/boot

/mnt 디렉터리 안에 부트 파티션을 마운트할 부트 디렉터리를  만들어줍니다.

 

root@archiso ~ # mount /dev/sda1 /mnt/boot

위에서 생성한 부트 디렉터리(/boot)에 아까 생성했던 부트 파티션(/dev/sda1)을 마운트해줍니다.

 

스왑 파티션은 따로 마운트해줄 필요 없습니다.

후에 진행될 genfstab 작업 시 마운트한 파일 시스템과 함께 현재 생성된 스왑 공간도 인식하게 됩니다.

 

root@archiso ~ # ls -F /mnt
boot/	lost+found/
root@archiso ~ #

마운트를 마치고 마운트 포인트인 /mnt 디렉터리 내용물을 확인해보면 자신이 만들이 않은 디렉터리가 생성되어 있는 것을 확인할 수 있습니다.  lost+found는 각 파일 시스템(즉 파티션)이 마운트된 곳마다 자동으로 생성되는 디렉터리로, 시스템 검사 도구(fsck, e2fsck emd 등)가 시스템을 검사하고 손상된 데이터에 대한 정보를 저장되는 특별한 디렉터리입니다.

 

root@archiso ~ # lsblk
NAME 	MAJ:MIN RM 	SIZE 	RO 	TYPE 	MOUNTPOINT
loop0 	7:0 	0 	638.7M 	1 	loop 	/run/archiso/airootfs
sda 	8:0 	0 	2T 	0 	disk
-sda1 	8:1 	0 	512M 	0 	part 	/mnt/boot
-sda2 	8:2 	0 	2G 	0 	part 	[SWAP]
-sda3 	8:3 	0 	2T 	0 	part 	/mnt
sr0 	11:0 	1 	774.3M 	0 	rom 	/run/archiso/bootmnt
root@archiso ~ # 

위와 같이 파티션 마운트 정보를 확인할 수 있습니다.

 

미러리스트(mirrorlist) 수정

사실 Mirrorlist 파일을 굳이 수정해줄 필요는 없습니다.

아치리눅스 설치미디어 구동 시 파이썬 스크립트인 reflector 패키지가  위의 Arch Linux Mirror Status 페이지를 접속하여 최신 미러 목록을 검색하고,  필터링 후, 속도별로 정렬해 해당 내용을 /etc/pacman.d/mirrorlist 파일을 덮어 쓰기 때문에 큰 문제없이 꽤 빠른 속도로 패키지 다운로드를 이용할 수 있습니다.

 

초기에는 자동으로 20개의 미러 서버 정보가 저장되어 해당 정보를 통해 패키지를 다운로드받을 수 있지만 해당 정보는 사용자가 직접 조건을 부여하여 검색해 얻은 정보가 아닙니다.

 

사용자가 별도로 건 조건에 해당하는 미러 서버 주소를 대신 덮어 쓸 수 있습니다.

root@archiso ~ # reflector -c 'KR,JP,TW' -l 10  -a 12 -p http,https,ftp --sort rate --save /etc/pacman.d/mirrorlist

여기에 사용된 옵션들이 의미는 다음과 같습니다.

reflector 주요 옵션

-c / --country 국가명  or 국가코드 : 미러 서버가 위치한 국가

-l / --latest N(숫자) : 가장 최근에 싱크된 미러부터 시간 순으로 N개의 싱크된 미러

-a / --age N(숫자) : 마지막으로 N 시간 안에 싱크한 미러 서버

-p / --protocol 프로토콜 : 미러 서버가 사용하는 프로토콜

--sort 정렬방식 : 정렬 방식(age, rate, country, score, delay)

--save /경로/파일명 : 내용을 저장할 파일(/etc/pacman.d/mirrorlist)

 

root@archiso ~ # reflector --list-countries | less

아치 리눅스 미러서버가 위치해 있는 나라의 국가명이나 국가 코드를 알고자 한다면 위 명령을 실행하시면 됩니다.

 

root@archiso ~ # reflector -h | less

reflector 패키지의 보다 자세한 사용법은 위 명령을 실행하시기 바랍니다.

 

 

명령어 입력이 아니라 저장소 미러 서버 주소 설정을 위해 mirrorlist 파일을 직접 편집할 수도 있습니다.

root@archiso ~ # nano -w /etc/pacman.d/mirrorlist

아치리눅스의 mirrorlist 파일은 패키지 저저장소 미러 주소 목록 파일입니다. 이 mirrorlist 파일은 데비안 계열의 sources.list, 레드햇 계열의 Name.repo 파일 등과 동일한 역할을 합니다.

 

nano 명령어에 -w 옵션은 없어도 무방하며  -w옵션은 줄이 길어지더라도 자동 줄바꿈 기능을 사용하지 말라는 의미입니다. 이와 반대로 자동 줄바꿈 기능을 사용하려면 -b옵션을 사용하면 됩니다.

 

아치 리눅스 사용자들은 reflector 명령보다는 위 링크의 Pacman Mirrorlist Generator 페이지를 이용해 국가별, 프로토콜별 미러서버 주소를 얻어 사용하는 편입니다.

##
## Arch Linux repository mirrorlist
## Generated on 2021-06-17
##

## South Korea
#Server = http://mirror.anigil.com/archlinux/$repo/os/$arch
#Server = https://mirror.anigil.com/archlinux/$repo/os/$arch
#Server = http://ftp.harukasan.org/archlinux/$repo/os/$arch
#Server = https://ftp.harukasan.org/archlinux/$repo/os/$arch
#Server = http://ftp.lanet.kr/pub/archlinux/$repo/os/$arch
#Server = https://ftp.lanet.kr/pub/archlinux/$repo/os/$arch
#Server = http://mirror.premi.st/archlinux/$repo/os/$arch
#Server = https://mirror.premi.st/archlinux/$repo/os/$arch

현재 아치 리눅스 미러서버 정보 페이지는 위처럼 4곳의 서버가 올라가 있습니다.

그러나 이곳 외에도 Kaist 미러도 존재합니다.

그러나 카이스트의 아치 리눅스 미러는 제가 테스트해본 결과 뭔가 문제가 있는 것 같았습니다.

 

pacstrap 스크립트 실행

pacstrap은 지정한 새 루트 디렉터리에 패키지들을 설치하는 스크립트 도구입니다.

자세한 내용은 위 링크를 참고하시기 바랍니다.

 

root@archiso ~ # pacstrap /mnt base linux linux-firmware

향후 주 파티션(root 파티션)이 될 /dev/sda3을 /mnt에 마운트했습니다. 따라서 pacstrap이 패키지들을 복사할 위치를 /mnt로 지정해주고 이어서 복사할 패키지 목록을 나열해줍니다.

 

위 명령에 설치할 패키지로 지정한 base, linux, linux-firmware는 단순한 단일 패키지가 아닌 메타 패키지들입니다.

이 세 메타 패키지들은 아치 리눅스 시스템을 구축하는데 가장 필수적인 것들입니다.

메타 패키지들 중 가장 핵심이 되는 base에 연결되어 있는 패키지들은 다음과 같은 것들이 있습니다.

[base]
  # very very base(설치를 요하는 최소한의 필수 패키지)
  'filesystem' - Arch Linux 필수 파일
  'gcc-libs' - GCC에서 제공하는 런타임 라이브러리
  'glibc' - GNU C 라이브러리
  'bash'  - The GNU Bourne Again shell

  # POSIX tools(이식 가능 운영 체제 인터페이스 도구 모음)
  'coreutils' - GNU 운영 체제의 기본 파일, 셸 및 텍스트 조작 유틸리티
  'file' - 파일 유형 식별 유틸리티
  'findutils' - 파일을 찾기 위한 GNU 유틸리티
  'gawk' - awk의 GNU 버전 (awk는 텍스트 입력 데이터를 처리해 출력하는 스크립트)
  'grep' - 문자열 검색 유틸리티
  'procps-ng' - 시스템 및 프로세스 모니터링 도구
  'sed' - GNU 스트림(stream) 에디터
  'tar' - 아카이브(archive) 생성 도구

  # standard linux toolset(표준 리눅스 도구 모음)
  'gettext' - GNU 국제화 라이브러리
  'pciutils' - PCI 버스 구성 공간 액세스 라이브러리 및 도구 
  'psmisc' - 기타 잡다한 proc 파일시스쳄 도구
  'shadow' - 섀도우 파일 및 PAM을 지원하는 암호 및 계정 관리 도구 모음 
  'util-linux' -기타 잡다한 리눅스용 시스템 유틸리티 모음
  'bzip2' - 버로우즈-휠러 변환 기반 압축 프로그램(확장자: .bz2)
  'gzip' - GNU 압축 유틸리티
  'xz'- XZ 및 LZMA 압축 파일용 라이브러리 및 명령 줄 도구 

  # distro defined requirements
  'licenses' - 표준 라이선스 배포 패키지
  'pacman' - Arch Linux용 패키지 관리자
  'systemd' - 시스템 및 서비스 관리자(system demon)
  'systemd-sysvcompat' - SysV 호환을 위한 systemd 패키지

  # networking, ping, etc
  'iputils' - ping을 포함한 네트워크 모니터링 도구
  'iproute2' - IP 라우팅 유틸리티
)
  # optdepends
  'linux: bare metal support' - 리눅스 커널 및 모듈

 

base 메타 패키지에 대한 추가 정보

base는 기존에는 패키지 그룹이었으나 2019년 10월 6일자로 메타 패키지로 그 속성이 바뀌게 되었습니다.

 

자세한 설명은 위 링크를 참고하시기 바랍니다.

 

리눅스 관련 메타 패키지 정보

메타 패키지 linux - 리눅스 커널 및 모듈 파일

https://archlinux.org/packages/core/x86_64/linux/

메타 패키지 linux-firmware - 리눅스 펌웨어 파일

https://archlinux.org/packages/core/any/linux-firmware/

이상은 아치 시스템을 구축하기 위한 핵심 패키지 모음입니다.

 

그러나 이것들만 가지고는 정상적인 운용이 불가능합니다. 사용자가 운영체제를 운용하기 위한 필수적인 추가 패키지들도 설치해주어야 합니다.

 

root@archiso ~ # pacstrap /mnt base-devel man-db man-pages dosfstools e2fsprogs nano vim networkmanager

 

위 명령에 언급된 패키지들에 대한 자세한 정보는 아래 링크에서 확인할 수 있습니다.

 

base-devel은 메타 패키지인 base와는 달리 패키지 그룹입니다.

base-devel 패키지 그룹에 속한 패키지들은 위 링크에서 확인할 수 있습니다.

 

[base-devel]
  # base와 공통으로 속한 패키지
  file -파일 유형 식별 유틸리티
  findutils - 파일을 찾기 위한 GNU 유틸리티
  gawk - awk의 GNU 버전 (awk는 텍스트 입력 데이터를 처리해 출력하는 스크립트)
  gettext - GNU 국제화 라이브러리
  grep - 문자열 검색 유틸리티
  gzip - GNU 압축 유틸리티
  pacman - Arch Linux용 패키지 관리자
  sed - GNU 스트림(stream) 에디터

  # base에 속하지 않은 패키지
  autoconf - 소스코드를 자동으로 구성하는 GNU 도구
  automake - Make 파일을 자동으로 생성해주는 GNU 도구
  binutils - 바이너리 및 오브젝트 파일을 조작하는 일련의 프로그램 도구 모음
  bison - GNU 범용 파서(Parser) 생성 프로그램
  fakeroot - Super user 권한 시뮬레이션 도구
  flex - 텍스트 스캐닝 프로그램 생성 도구
  gcc - C와 C++ 프론트엔드를 위한 GNU 컴파일러 모음
  groff - GNU 이전 세대 문서 조판 시스템
  libtool - 일반 라이브러리 지원 스크립트
  m4 - GNU 매크로 프로세서
  make - GNU 자동 빌드 도구
  patch - 원본 소스에서 패치 파일을 적용하는 유틸리티
  pkgconf - 패키지 컴파일러 및 링커 메타데이터 도구 모음
  sudo - 특정 사용자에게 root 권한 부여 도구
  texinfo - 온라인 정보 및 인쇄 출력을위한 GNU 문서 시스템 
  which - 명령의 전체 경로 표시 도구

 

이하는 권장 설치 패키지들입니다.

root@archiso ~ # pacstrap /mnt reflector bash-completion net-tools mdadm lvm2

 

권장 설치 패키지 정보

[Arch Mirror Tool]

reflector : https://archlinux.org/packages/community/any/reflector/

 

[BASH Shell Tool]

bash-completion : https://archlinux.org/packages/extra/any/bash-completion/

 

[Network Tools]

net-tools : https://archlinux.org/packages/core/x86_64/net-tools/

 

[RAID Management]

mdadm : https://archlinux.org/packages/core/x86_64/mdadm/

lvm2 : https://archlinux.org/packages/core/x86_64/lvm2/

 

 

fstab 파일 생성

fstab은 파일 시스템에 디스크 파티션, 그외 다른 다양한 블록 장치 또는 원격 파일 시스템을 마운트한 정보를 정의하

는 파일입니다.

root@archiso ~ # genfstab -U /mnt >> /mnt/etc/fstab

genfstab 명령을 실행하여 /mnt에 마운트한 장치를 UUID로 구분하여 /mnt/etc 디렉터리 안에 있는 fstab 파일에 내용을 추가하라는 의미입니다. 이때 현재 스왑 공간도 같이 작성됩니다.

 

-U 옵션은 장치를 UUID로 구분한다는 의미입니다. UUID 대신 다른 태그로 구분하도록 설정할 수 있습니다.

예를 들어 파티션에 레이블을 지정해주었다면 -L 옵션으로 레이블을 구분자로 설정할 수 있습니다.

 

위에서는 >>(Append - 추가 적성) 기호가 쓰였지만 실제로는 현 시점에서 /mnt/etc 디렉터리 안에는 fstab 파일이 존재하지 않습니다. 따라서 새로 작성하게 됩니다. touch 명령이 본래는 파일의 타임스탬프를 찍는 역할을 하지만 인수로 지정한 파일이 존재하지 않으면 지정한 이름을 가진 파일을 생성하는 역할을 하는 것과도 같은 맥락입니다.

Shell에서 >, >>의 기능(리다이렉팅 출력 - Redirecting output)

> : 앞부분에서 실행되어  출력되어야 하는 값(stdout)을 지정한 파일에 덮어쓰라(overwrite)는 의미입니다.

>> : 앞부분에서 실행되어  출력되어야 하는 값(stdout)을 지정한 파일에 추가(append)하라는 의미입니다.

 

참고

Shell에서 | (Pipe)의 기능

| (Pipe)는 앞부분에서 실행되어  출력되어야 하는 값(stdout)을 파일이 아닌, 후행하는 명령에 대한 입력값으로 사용하라는 의미입니다.

 

rootParchiso ~ # genfstab -U /mnt » /mnt/etc/fstab
rootParchiso ~ # cat /mnt/etc/fstab
# Static information about the filesystems.
# See fstab(5) for details.
# <file system〉 <dir> <type> <options> <dump> <pass>
# /dev/sda3
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx	/	ext4	rw,relatime	0 1

# /dev/sda1
UUID=xxxx-xxxx	/boot	vfat	rw,relatime,fmask=0022,dmask=002Z,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro	0 2

# /dev/sda2
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx	none	swap	defaults	0 0

rootParchiso ~ #

 

fstab에 지정된 option값의 의미

fstab에 지정된 option에 대한 보다 자세한 내용은 man mount를 실행하여  FILESYSTEM-INDEPENDENT MOUNT OPTIONS 섹션에서 확인할 수 있습니다.

 

아래는 위에서 사용된 옵션 값의 의미입니다.

 

rw : 읽고 쓰기 가능

relatime : 파일 액세스 타임(access time)이 파일 수정 시각보다 오래 되었을 때나 atime이 수정되고 나서 1일 이상 지났을 때만 업데이트

fmask=0022 : 정규(일반) 파일에 대한 퍼미션 설정 마스크값 설정, 퍼미션 값 0755에 대응되는 마스크값이 0022

dmask=0022 : 디렉터리에 대한 퍼미션 설정 마스크값 설정, 퍼미션 값 0755에 대응되는 마스크값이 0022

codepage=437 : FAT 및 VFAT 파일 시스템에서 짧은 이름 문자로 변환하기 위한 코드 페이지(문자 인코딩 방식)을 설정하는 것으로 코드 페이지 번호 437은 IBM PC 캐릭터셋을 의미

iocharset=ascii : 8비트 문자와 16비트 유니코드 문자 간 변환에 사용할 문자 집합

shortname=mixed : 레거시 파일 명명 방식인 기본 선행 파일명 최대 8 문자열, 확장자명 최대 3문자열 형식의 파일 생성하고 표시할 때 작동 방식 설정

mixed 모드는 짧은 이름은 있는 그대로 표시하고, 짧은 이름에 사용된 문자열이 모두 대문자가 아닌 경우 긴 이름 방식으로 저장

utf8 : CD의 16비트 유니코드 문자를 8비트 유니코드로 변환

errors=remount-ro:오류 발생 시 작동 유형 정의. 여기에 사용된 설정값 remount-ro은 읽기 전용으로 재마운트하라는 의미 


fstab 정보 중 5번째와 6번째 필드 속성에 대한 정보

<dump>

dump 실행 시 해당 파일 시스템 dump 여부를 사전 결정

0(기본값)은 덤프 안함, 1은 덤프함

 

<pass>

시스템 부팅 시 fsck가 파일 시스템을 검사할 때 수행 순서 설정

루트 파일 시스템은 숫자 1로 설정하여 다른 파일 시스템보다 우선 순위를 지녀야 함.

검사할 다른 파일 시스템은 숫자 2로 설정

숫자 0으로 설정한 파일 시스템은 검사에서 제외

 

새 아치 리눅스 시스템 내부로 진입

root@archiso ~ # arch-chroot /mnt
[root@archiso /]#

시스템 작업 공간을 현재 부팅하여 구동 중인 archiso 시스템이 아니라 향후 사용할 주 파티션(/dev/sda3)과 부트 파티션(/dev/sda1)이 마운트되어 있는 /mnt를 새로운 root 디렉터리로 삼는 새로운 시스템으로 변경합니다.

이제 이곳에서는 pacstrap 명령을 통해 복사한 아치의 패키지 관리자 pacman을 이용해 패키지들을 설치 및 관리할 수 있고 이렇게 설치된 패키지들은 추후 아치 설치 라이브 디스크 부팅 환경이 아니라 설치가 완료된 새 아치 시스템 환경에서 그대로 이용할 수 있습니다.

 

인터넷 확인

[root@archiso /]# ping -c 3 archlinux.org
Ping archlinux.org (95.217.163.246) 56(84) bytes of data.
64 bytes from archlinux.org (95.217.163.246): icmp_seq=1 ttl=47 time=272 ms
64 bytes from archlinux.org (95.217.163.246): icmp_seq=1 ttl=47 time=272 ms
64 bytes from archlinux.org (95.217.163.246): icmp_seq=1 ttl=47 time=272 ms

--- archlinux.org ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 271.920/272.447/273.139/0.511 ms
[root@archiso /]#

새 루트 시스템에서 인터넷이 잘 작동하는지 다시금 확인합니다.

Root 계정 암호 설정

[root@archiso /]# passwd
New password:
Retype new password:
passwd: password updated successfully
[root@archiso /]# 

리눅스를 처음 다루시는 분들은 암호를 설정할 때 당황하시는 경우 꽤 많습니다.

분명 나는 문자를 입력하고 있는데 모니터 화면에서는 아무런 변화도 보이지 않기 때문입니다.

예를 들어 윈도 같은 경우 암호를 입력하면 입력 문자가 아주 잠깐 보이고 검은색 동그라미 문자로 바뀌어 표시되거나 입력 문자 표시 없이 바로 검은색 동그라미 문자가 문자를 입력할 때마다 표시되는데 리눅스의 경우 암호를 입력할 때 화면상 아무런 변화가 없습니다. 그래서 사용자가 암호를 입력 중이라도 모니터만 봐서는 암호가 입력되고 있는 것인지 알 수 없습니다. 원래 아무런 표시도 되지 않는 것이 정상이므로 당황하지 않으셔도 됩니다.

 

root 계정에 암호가 설정되어 있지 않으므로 설정하고자 하는 새 암호와, 입력한 암호의 정확한 타이핑 여부를 확인하기 위한 암호 재입력 두 단계 과정을 거쳐 암호가 설정됩니다.

 

시스템 로컬 시간대 설정

시스템의 로컬 시간대는 /etc/localtime을 참조합니다.

[root@archiso /]# ls -l /etc/localtime
ls: cannot access '/etc/localtime' : No such file or directory 
[root@archiso /]#

그런데 시스템을 구축하고 있는 현 시점의 chroot 상태에서는 로컬 시간대를 확인할 수 있는 /etc/localtime이 지금은 존재하지 않습니다.

 

study@study-virtualbox ~ $ sudo timedatectl set-timezone Asia/Seoul

현재 구동 중인 시스템이 chroot 상태가 아닌 일반적인 root 파티션 상태라면 위와 같이 timedatectl 명령을 이용하거나,

 

study@study-virtualbox ~ $ sudo tzselect
Please identify a location so that time zone rules can be set correctly.
Please select a continent, ocean, "coord", or "TZ".
1) Africa
2) America
3) Antarctica
4) Asia
5) Atlantic Ocean
6) Australia
7) Europe
8) Indian Ocean
9) Pacific Ocean
10) coord - I want to use geographical coordinates.
11) TZ - I want to specify the timezone using the POsix TZ format.

위와 같은 대화형 도구 tzselect를 사용해 명령어 사용에 어려움을 겪는 초봊라도 손쉽게 시간대를 설정할 수 있겠지만

현재는 arch-chroot 명령을 실행하여 chroot 상태이므로

[root@archiso /]# ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime

위와 같이 수동으로 심볼릭 링크를 설정해주어야 합니다.

위 명령을 해석하면 다음과 같습니다.

위 ln 명령 해석

ln : 링크를 만든다

-s : 링크 유형은 심볼릭 링크이고

-f : 기존 링크 정보는 제거하고 강제로 지금 설정값을 적용한다

선행 경로 : 링크할 대상

후행 경로 : 링크 파일

 

해석 : 앞으로 /etc/localtime을 참조할 때 기존 설정값인 /usr/share/zoneinfo/UTC이 아니라 새 설정값인  /usr/share/zoneinfo/Asia/Seoul를 향하도록 심볼릭 링크를 걸어주어라.

 

[root@archiso /]# ls -l /etc/localtime
lrwxrwxrwx 1 root root 30 Jun 29 11:41 /etc/localtime -> /usr/share/zoneinfo/Asia/Seoul
[root@archiso /]#

심볼릭 링크가 정상적으로 변경되면 위와 같이 바뀌게 될 것입니다.

 

 

시스템 시계(System Clock) 설정

시스템 시계는 파일의 ctime, atime, mtime과  프로세스 실행 그리고 일반적인 날짜와 시각 표시 등에 쓰입니다.

date 명령으로 수동 설정

[root@archiso /]# date 061813302021.25
Fri Jun 18 13:30:25 KST 2021
[root@archiso /]#

위와 같은 형식으로 시스템 시각을 설정할 수 있습니다.

date 뒤에 붙는 인수 형식은 다음과 같습니다.

 date MMDDhhmmYYYY.ss

지정 순서는 위 구문에서 보듯 월/일/시/분/연도/초입니다.

즉 연도를 제외하고 모든 단위는 두 자리 숫자로 지정합니다.

시를 지정할 땐 24시간 기준으로 설정합니다.

연도 뒤에 .ss를 붙이면 초까지 설정할 수 있으며 .ss가 없으면 지정 시 해당 분 00초로 시작합니다.

 

위 date 설정은 현재 시스템에 설정된 로컬 시간대를 기준으로 설정됩니다.

즉, 만약 로컬 시간대가 UTC로 설정되어 있다면 KST 대신 UTC로 설정됩니다.

 

NTP 서버 실시간 동기화

네트워크를 통해 손쉽게 시스템 시각을 설정할 수도 있습니다. 그러나 그러기 위해서는 아래의 링크 글에서 소개하는 여러 ntp 관리 패키지 중 하나를 설치하고 동기화 명령을 실행해주어야 합니다.

아치 리눅스에서는 NTP 패키지를 아직 설치할 수 있습니다만 Ubuntu나 CentOS 주요 리눅스배포판에서 NTPd가 deprecated되었습니다. 대신 chrony가 널리 쓰이고 있습니다.

 

하드웨어 클럭(Hardware Clock) 설정

하드웨어 클럭은 배터리로 구동되는 메인보드 안의 시계로,  CMOS 설정과 관련 있습니다.

[root@archiso /]# hwclock --systohc --utc
[root@archiso /]#

시스템 시계를 바탕으로 하드웨어 클럭을 설정합니다.

 

로케일(Locale) 설정

로케일은 시스템의 언어 환경을 설정합니다.

[root@archiso /]# locale
locale: Cannot set LC_CTYPE to default locale: No such file or directory 
locale: Cannot set LC_MESSAGES to default locale: No such file or directory 
locale: Cannot set LC_ALL to default locale: No such file or directory 
LANG="en_US.UTF-8"
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES=
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATI0N="en_US.UTF-8°
LC_ALL=
[root@archiso /]#

기본값은 위와 같이 en._US.UTF-8로 포시되어 나옵니다.

 

[root@archiso /]# nano -c -w /etc/locale.gen

-c 옵션을 사용하면 커서가 위치해 있는 줄 번호와 해당 파일 사용된  총 줄 수 등 각종 문서 통계를 확인할 수 있습니다.

 

#en_US.UTF-8 UTF-8
#ko_KR.UTF-8 UTF-8

우리가 찾아보아야 할 내용은 위 두 문구입니다.

2021년 6월 1일자 배포 ISO 파일 기준으로 /etc/locale.gen을 열어 보면 위 내용은 각각 177번째 줄과 313번째 줄에 있습니다.

 

각 줄 앞에 있는 주석 기호 #을 제거히고 수정한 내용을 저장합니다.

 

[root@archiso /]# locale-gen
Generating locales...
 en_US.UTF-8... done
 ko_KR.UTF-8... done
Generating complete.
[root@archiso /]#

locale-gen 명령을 실행해줍니다.

 

[root@archiso /]# locale
LANG="en_US.UTF-8"
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES=
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATI0N="en_US.UTF-8°
LC_ALL=
[root@archiso /]#

locale-gen 명령을 실행하더라도  기본 locale 설정값은 변화가 없습니다.

 

이제 LANG 변수를 locale.conf 파일에 설정해주어야 합니다.

[root@archiso /]# cat /etc/locale.conf
cat: /etc/locale.conf: No such file or directory
[root@archiso /]#

그런데 locale.conf 파일이 없습니다.

 

[root@archiso /]# echo LANG=en_US.UTF-8 > /etc/locale.conf

위 명령을 이용해 간편하게 LANG 변수를 설정한 locale.conf 파일을 생성해줍니다.

 

[root@archiso /]# cat /etc/locale.conf
LANG=en_US.UTF-8
[root@archiso /]# 

위와 같이 정상적으로 생성되었음을 확인할 수 있습니다.

다른 언어로 설정할 수도 있습니다만 그냥 영어로 설정하시기 바랍니다.

만약 문제가 발생했을 때 출력되는 오류 메시지를 구글링하는 경우 당연히 영어가 다른 언어에 비해 정보량이 월등합니다.  

 

호스트 이름 설정

[root@archiso /]# echo study-virtualbox > /etc/hostname

앞서 locale.conf 파일을 생성할 때와 유사한 방식으로 안에 담길 내용과 생성 파일명만 달리하여 생성할 수 있습니다.

 

일반 사용자 계정 추가

리눅스는 다중 계정 운영체제입니다. 당연히 root 계정 외에도 여러 사용자를 둘 수 있습니다. 그런데 시스템을 한 명만 사용하더라도 최소 한 명 이상의 일반 계정을 생성해 사용하곤 합니다.

그 이유는 root는 모든 유닉스 계열 운영체제에서 시스템 관리자에게 부여되는 공통 계정이기 때문입니다. 계정명이 같다는 것은 어떤 작업에 대한 권한을 획득하기 위해 입력해야 하는 계정명과 암호 두 정보 중 하나는 이미 공개되어 있는 것이므로  보안상 그다지 좋을 일이 없기 때문입니다.

 

앞서 root 계정에 암호를 부여함으로써 루트 계정을 활성화하긴 했습니다만 그것을 계속 유지하는 것은 보안상 권장되지 않습니다. 따라서 이 root 계정을 사용하지 않기 위해 따로 일반 계정을 생성하고 그 계정에 root 권한을 부여합니다.

일반 계정에 root 권한을 부여하기 위해서는 해당 계정을 wheel이라는 그룹에 속하도록 설정주면 됩니다.

[root@archiso /]# useradd -m -g users -G wheel -s /bin/bash study

위 명령을 해석해보도록 하겠습니다.

위에 사용된 useradd 명령의 구문 해석

useradd : 계정을 추가하라

-m : 해당 계정의 홈 디렉터리 생성

-g : 해당 계정의 초기 로그인 그룹 지정

-G : 해당 계정의 보조 그룹 설정

-s : 해당 계정이 사용하는 기본셸 설정(절대 경로 지정)

계정명 : 생성하고자 하는 계정의 이름 지정

 

wheel 그룹에 대하여

wheel 그룹에 대한 보다 자세한 내용은 위 링크의 글을 참고하시기 바랍니다.

 


adduser 패키지에 대하여

다른 리눅스 배포판을 사용하시다가 아치로 넘어오신 경우 useradd와 기능은 유사하지만 보다 편리한 adduser 명령을 사용하려다 'adduser command not found' 문구를 보고는 당황하는 경우가 있습니다.

adduser는 데비안/우분투 계열 리눅스 전용 사용자 생성 도구입니다.

당연히 아치 기본 저장소에는 존재하지 않습니다. 따라서 일반적으로 계정을 새로 생성할 때 useradd명령을 사용하며 AUR에서 검색할 수 있습니다.

 

 

[root@archiso /]# passwd study
New password:
Retype new password:
passwd: password updated successfully
[root@archiso /]#

일반 계정을 생성한 다음에는 해당 계정의 암호를 설정해주어야 합니다.

자세한 설명은 앞서 root 계정 암호 설정에서 하였습니다.

 

sudo 설치 및 설정

sudo는 일반 계정에서 root 권한이 필요한 작업을 수행할 때 임시로 권한을 부여하는 명령입니다.

이 명령은 sudo 패키지가 설치되어 있어야 사용이 가능하며 해당 패키지는 base-devel 패키지 그룹을 설치한 경우 자동으로 설치됩니다. 앞서 설명했다시피 base-devel은 아치 리눅스 운영체제를 구축할 때 반드시 설치해야하는 패키지 그룹입니다.

따라서 제 가이드를 따라오신 분들이라면 이미 깔려 있을 겁니다. 혹여 설치했는지 잘 모르시는 분들은 다음 명령을 통해 설치 여부를 확인하고 안 깔려 있는 경우 설치 가능합니다.

[root@archiso /]# pacman --needed -S sudo
warning: sudo-1.9.7.p1-1 is up to date -- skipping
 there is nothing to do
[root@archiso /]#

만약에 제 가이드를 따라오셨는데 sudo 패키지 설치 과정이 진행되는 경우 base-devel 패키지 그룹이 설치되지 않은 것이므로 설치해주시기 바랍니다.

 

[root@archiso /]# pacman -S sudo
resolving dependencies...
looking for conflicting packages...

Packages (1) sudo-1.9.7.pl-1

Total Download Size: 1.51 MiB
Total Installed Size: 6.51 MiB

:: Proceed with installation? [Y/n] y
:: Retrieving packages...
sudo-1.9.7.pl-l-x86_64	1546.7 KiB 4.92MiB/s 00:00
(1/1) checking keys in keyring
(1/1) checking package integrity
(1/1) loading package files
(1/1) checking for file conflicts
(1/1) checking available disk space
:: Processing package changes...
(1/1) installing sudo
:: Running post-transaction hooks...
(1/3) Reloading system manager configuration...
Skipped: Running in chroot.
(2/3) Creating temporary files...
(3/3) Arming ConditionNeedsUpdate...
[root@archiso /]#

만약  --needed 옵션이 붙지 않으면 설치가 되어 있든 안 되어 있든 무조건 설치합니다. 즉 이미 설치되어 있는 경우 재설치 과정을 거치게 됩니다.

 

wheel 그룹에 속한 사용자들이 sudo 명령을 사용할 수 있도록 활성화

[root@archiso /]# EDITOR=nano visudo

여기서는 초심자들을 위해 사용 에디터를 nano로 설정하여 파일을 편집합니다.

단순히 # visudo로 실행하면 기본 에디터인 vi로 visudo를 편집하게 되며, # EDITOR=vim visudo를 실행하면 vi의 기능 강화판 에디터인 vim으로 편집하게 됩니다.

 

위 명령을 실행하면 /etc/sudoers.tmp 파일이 열리게 되며 이 파일을 아래 설명대로 수정해주시면 됩니다.

 

##
## User privilege specification
##
root ALL=(ALL) ALL

## Uncomment to allow members of group wheel to execute any command
# %wheel ALL

## Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL

파일의 하단부에 위 내용을 찾아볼 수 있습니다.

 

## Uncomment to allow members of group wheel to execute any command 구문 바로 아래

# %wheel ALL=(ALL) ALL

이 구문의 주석기호 #을 제거해주시면 됩니다.

그러면 wheel 그룹 안에 속한 사용자들은 모두 sudo 명령을 사용할 수 있게 됩니다.

 

바로 아래 ## Same thing without a password 섹션이 있습니다.

이부분은 wheel 그룹 사용자들이 sudo 명령 실행 시 암호를 묻지 않도록 설정하는 부분입니다.

# %wheel ALL=(ALL) NOPASSWD: ALL

위와 마찬가지 방식으로 # 기호를 제거해주면 wheel 그룹 사용자들이 sudo 명령 실행 시 암호 입력 없이 바로 실행이 됩니다.

그러나 이 설정은 보안상 권장하지 않습니다. 보안이란 결국은 사용자가 불편할수록 강화되는 것입니다.

 

부트로더 GRUB2 설치 및 설정

지금까지 잘 따라오시느라 수고하셨습니다. 이번 단계만  넘기게 되면 시스템을 구동하기 위한 최소한의 아치 리눅스 구성요소 설치가 마무리됩니다. 조금만 더 힘내도록 합시다.

 

부트로더란?

운영 체제가 시동되기 이전에 미리 실행되면서 커널이 올바르게 시동되기 위해 필요한 모든 관련 작업을 마무리하고 최종적으로 운영 체제를 시동시키기 위한 목적을 가진 프로그램을 말한다.

출처 : 위키백과 - https://ko.wikipedia.org/wiki/부팅#부트_로더

간단하지만 핵심적인 내용을 담고 있습니다.

 

부트로더 프로그램은 여러 종류가 있습니다만 현재 GRUB과 systemd-boot 이 두 가지가 널리 쓰이고 있습니다.

여기서는 대부분의 리눅스 배포판이 채택 중인 GRUB을 중심으로 설명하도록 하겠습니다.

만약 리눅스 초보자라면 큰 고민하지 마시고 GRUB을 사용하시기 바랍니다.

 

패키지 전체 업그레이드

[root@archiso /]# pacman -Syu

가장 먼저 chroot 시스템의 패키지들을 업그레이드 해줍니다.

 

GRUB 설치

[root@archiso /]# pacman -S grub efibootmgr efivar

핵심 GRUB 부트로더 패키지들을 설치해줍니다.

 

:: Processing package changes... 
(1/3) installing grub
:: Generate your boot loader configuration with: 
	grub-nkconfig -o /boot/grub/grub.cfg
Optional dependencies for grub 
	freetype2: For grub-mkfont usage 
	fuse2: For grub-mount usage 
	dosfstools: For grub-mkrescue FAT FS and EFI support [installed] 
	efibootmgr: For grub-install EFI support [pending] 
	libisoburn: Provides xorriso for generating grub rescue iso using grub-mkrescue 
	os-prober: To detect other OSes when generating grub.cfg in BIOS systems 
	mtools: For grub-mkrescue FAT FS support

설치 중 위와 같은 과정을 확인할 수 있습니다.

자신의 설치 환경에 따라 필요한 패키지들을 추가 설치해주시면 됩니다.

눈여겨 볼 패키지는 os-prober입니다. 이 패키지는 멀티 부팅 시스템을 구축할 때 사용됩니다.

 

grub 설치

[root@archiso /]# grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=arch --recheck
Installing for x86_64-efi platform.
Installation finished. No error reported.
[root@archiso /]#

위 명령에서 실행하는 것은 GRUB 패키지를 설치하는 것이 아니라 설치된 GRUB 패키지를 바탕으로 grub을 설치하는 것입니다.

정상적으로 설치되면 위와 같이 출력될 것입니다.

 

GRUB 부트로드의 기본 설정

[root@archiso /]# nano -w /etc/default/grub

GRUB 부트로더 기본 설정을 수정합니다.

GRUB 기본 설정 방법은 위 글에서 한 번 다루었습니다. 이 글은 우분투를 기반으로 작성한 것입니다만 아치 리눅스에서도 큰 문제 없이 적용이 가능합니다.

 

방금 수정한 /etc/default/grub 파일을 기반으로 부팅할 때 참조하는 /boot/grub/grub.cfg 파일을 생성해줍니다.

[root@archiso /]# grub-mkconfig -o /boot/grub/grub.cfg
Generating grub configuration file
Found 1inux image: /boot/vmlinuz-linux
Found initrd image: /boot/initramfs-linux.img
Found fallback initrd image(s) in /boot: initramfs-linux-fallback.img
Warning: os-prober will not be executed to detect other bootable partitions.
Systems on them will not be added to the GRUB boot configuration.
Check GRUB_DISABLE_OS_PROBER documentation entry.
Adding boot menu entry for UEFI Firmware Settings ...
done
[root@archiso /]# 

/boot/grub/grub.cfg 파일을 업데이트할 때도 grub.cfg 파일을 직접 수정하지 않고 /etc/default/grub 파일을 수정한 다음 update-grub 명령을 실행함으로써 업데이트해줍니다.

 

NetworkManager 지속 활성화

[root@archiso /]# systemctl enable NetworkManager.service
Created symlink /etc/systemd/system/multi-user.target.wants/NetworkManager.seruice -> /usr/lib/systemd/system/NetworkManager.service.
Created symlink /etc/systemd/system/dbus-org.freedesktop.nm-dispatcher.service -> /usr/lib/systemd/system/NetworkManager-dispatcher.service.
Created symlink /etc/systemd/system/network-online.target.wants/NetworkManager-wait-online.service -> /usr/lib/systemd/system/NetworkManager-wait-online.service.
[rootOarchiso /]#

이제 NetworkManager를 시스템 부팅될 때마다 자동 구동되어 언제든 인터넷을 이용할 수 있도록 설정합니다.

 

 

Root 디렉터리 빠져 나가기

[root@archiso /]# exit
arch-chroot /mnt 23.98s user 5.92s system 0% cpu 25:37:10.28 total
root@archiso ~ #

지금까지  /mnt 디렉터리를 root 디렉터리로 삼아 작업하던 chroot 상태에서 빠져나오도록 합시다.

 

언마운트

root@archiso ~ # umount -lR /mnt

/mnt에 마운트되어 있던 두 파티션(/dev/sda1, /dev/sda3)을 모두 마운트 해제합니다.

 

재부팅

root@archiso ~ # reboot

버추얼박스 가상머신에서 아치 리눅스를 설치하는 경우 재부팅 과정 중 버추얼박스 archiso 파일을 꺼내주시면 됩니다.

재부팅 후

Arch Linux 5.12.11-arch1-1 (tty1)

study-virtualbox login: study
Password:
[study@study-virtualbox ~]$

이것으로 아치 리눅스 BASE 시스템 구축이 완료되었습니다.

그러나 이 외에도 여러 필수 및 권장 작업들이 남아있습니다.

아래에 안내해드리는 작업도 빠뜨리지 않고 수행하시기 바랍니다.

 


마이크로코드(Microcode) 설치 및 설정

Intel 및 AMD는 프로세서 마이크로 코드에 대한 안정성 및 보안 업데이트를 꾸준히 합니다.

이 마이크로코드는 초기 로드 방식과 지연 로드 방식이 있는데 부팅 중에 initramfs 단계 전에 마이크로 코드를 업데이트하는 초기 로드 방식을 권장하며 또 선호합니다. 따라서 여기서도 초키 로드 방식을 기준으로 설명하도록 하겠습니다.

 

[study@study-virtualbox ~]$ sudo pacman -Syu

먼저 패키지 업그레이드를 진행합니다.

 

## Intel Processor
[study@study-virtualbox ~]$ sudo pacman -S intel-ucode

## AMD Processor
[study@study-virtualbox ~]$ sudo pacman -S amd-ucode

자신의 시스템에 맞는 CPU의 마이크로코드 패키지를 설치해줍니다.

 

[study@study-virtualbox ~]$ sudo pacman -S intel-ucode
[sudo] password for study:
resolving dependencies...
looking for conflicting packages...

Packages (1) intel-ucode-20210608-1

Total Download Size: 3.67 MiB
Total Installed Size: 4.55 MiB

:: Proceed with installation? [Y/n]
:: Retrieving packages...
 intel-ucode-20210608-1-any
(1/1) checking keys in keyring 
(1/1) checking package integrity 
(1/1) loading package files 
(1/1) checking for file conflicts 
(1/1) checking auailable disk space 
:: Processing package changes...
(1/1) installing intel-ucode
:: Running post-transaction hooks... 
(1/1) Arming ConditionNeedsUpdate...
[study@study-virtualbox ~]$

위는 인텔 CPU의 마이크로코드 패키지 설치 과정입니다.

 

[study@study-virtualbox ~]$ ls -F /boot
EFI/ grub/ initramfs-linux-fallback.img* initramfs-linux.img* intel-ucode.img* vmlinuz-linux*

해당 패키지들을 설치하면 /boot 디렉터리 안에 intel-ucode.img 또는 amd-ucode.img 파일이 있는 것을 확인할 수 있습니다.

 

부트로더에 해당 이미지 파일 정보를 업데이트해주어야 합니다.

 

[study@study-virtualbox ~]$ sudo grub-nkconfig -o /boot/grub/grub.cfg
[sudo] password for study:
Generating grub configuration file...
Found 1inux image: /boot/vmlinuz-linux
Found initrd image: /boot/intel-ucode.img /boot/initramfs-1inux.img
Found fallback initrd image(s) in /boot: intel-ucode.img initramfs-linux-fallback.img
Warning: os-prober will not be executed to detect other bootable partitions.
Systems on them will not be added to the GRUB boot configuration.
Check GRUB_DISABLE_OS_PROBER documentation entry.
Adding boot menu entry for UEFI Firmware Settings ...
done
[study@study-virtualbox ~]$ 

GRUB의 경우 systemd-boot와는 달리 마이크로코드를 자동으로 감지하고 설정합니다.

따라서 위처럼 grub-mkconfig 명령을 실행해주어야 합니다.

 

부트로더가 GRUB이 아닌 systemd-boot인 경우 자동 감지 및 설정이 되지 않습니다.

따라서 사용자가 수동으로 설정해주고 업데이트해주어야 합니다.

자세한 내용은 위 링크를 참고하시기 바랍니다.

마이크로 코드와 관련하여 보다 자세한 정보는 아래 아치 위키의 문서를 참고하시기 바랍니다.

 

pacman.conf 추천 설정

pacman.conf은 패키지 관리자 pacman 사용 시 인터페이스 및 작동 방식 등의 정보를 담은 설정 파일입니다.

준비 중

위 링크 글은 개인적으로 제가 권장하는 수정 사항입니다.

 


이 글에 사용된 각 명령어의 의미와 메뉴얼

명령어 메뉴얼

더보기

grep - Global Regular Expression Print

https://man.archlinux.org/man/grep.1


lsblk - LiSt BlocK devices

https://man.archlinux.org/man/lsblk.8


ls - LiSt

https://man.archlinux.org/man/ls.1


cat - conCATenate files and print on the standard output

https://man.archlinux.org/man/cat.1


ping

https://man.archlinux.org/man/ping.8


timedatectl - TIME and DATE ConTroL

https://man.archlinux.org/man/timedatectl.1


fdisk - stands for Fixed Disk Editor

https://man.archlinux.org/man/fdisk.8


cfdisk - Curses library FDISK

https://man.archlinux.org/man/cfdisk.8


mke2fs - MaKe Ext2 File System

https://man.archlinux.org/man/mke2fs.8


mkfs - MaKe File System 

https://man.archlinux.org/man/mkfs.8


mkswap - MaKe SWAP

https://man.archlinux.org/man/mkswap.8


swapon - SWAP ON

https://man.archlinux.org/man/swapon.8


mount - MOUNT a filesystem

https://man.archlinux.org/man/mount.8


mkdir - MaKe DIRectories

https://man.archlinux.org/man/mkdir.1


reflector - mirror reflector

https://man.archlinux.org/man/reflector.1


nano - Nano's ANOther editor

https://man.archlinux.org/man/nano.1


pacstrap

https://man.archlinux.org/man/pacstrap.8


genfstab - GENerate output suitable for addition to an FSTAB file

https://man.archlinux.org/man/genfstab.8


arch-chroot - ARCH linux's enhanced chroot[CHange ROOT directory] command

https://man.archlinux.org/man/arch-chroot.8


passwd - change user PASSWorD

https://man.archlinux.org/man/passwd.1


ln - make LiNks between files

https://man.archlinux.org/man/ln.1


date - print or set the system DATE and time

https://man.archlinux.org/man/date.1


hwclock - HardWare time CLOCKs utility

https://man.archlinux.org/man/hwclock.8


locale - get LOCALE-specific information

https://man.archlinux.org/man/locale.1


locale-gen - LOCALE GENerator

$ man locale-gen 명령 실행


echo - display a line of text

https://man.archlinux.org/man/echo.1


useradd - USER ADD

https://man.archlinux.org/man/useradd.8


sudo - SuperUser DO / Substitute User DO

https://man.archlinux.org/man/sudo.8


pacman - PACkage MANager utility

https://man.archlinux.org/man/pacman.8


grub-install - INSTALL GRUB to a device

https://man.archlinux.org/man/core/grub/grub-install.8.en


grub-mkconfig - MaKe a GRUB CONFIGuration file

https://man.archlinux.org/man/grub-mkconfig.8


systemctl - SYSTEM ConTroL / Control the systemd system and service manager

https://man.archlinux.org/man/systemctl.1


exit - EXIT - End the application

https://man.archlinux.org/man/exit.n


umount - UnMOUNT filesystems

https://man.archlinux.org/man/umount.8


reboot - halt, poweroff, REBOOT - Halt, power-off or reboot the machine

https://man.archlinux.org/man/reboot.8