블로그의 첫글로 아치리눅스 가상환경 구축을 정리하고자 한다. 재밌기도 하고 첫글의 주제로는 부담없이 글을 써볼 수 있을것 같다.
본 글은 VMware Workstation Player 16 + archlinux-2021.12.01-x86_64 기준으로 정리되어 있으니 나중에는 조금 수정이 필요한 부분이 있을 수 있음에 유의하라
https://archlinux.org/download/ 에서 토렌트로 받거나 HTTP Direct Downloads에서 적당한 한국 미러를 찾아 받을 수 있다. 여기서는 archlinux-2021.12.01-x86_64를 받았다.
호스트에 직접 아치리눅스를 설치할수도 있지만 나는 보통 윈도우 호스트에 os별로 가상머신을 생성하여 대부분 작업을 가상머신 안에서 수행한다. 덕분에 리눅스환경에서 개발도 하고 윈도우환경에서 공공업무도 같이 볼 수 있다. 가상화를 따로 하지 않을거라면 이 단계는 생략해도 좋다.
가상화 프로그램엔 크게 VMware, VirtualBox가 있다. 여기서는 비상업적 용도에 한해 무료로 사용가능한 VMware Workstation Player를 기준으로 설명한다.
좌상단의 Player -> File -> New Virtual Machine을 눌러 새로운 가상머신을 생성하자.
Installer disk image file(iso)로 (1)에서 받은 이미지를 선택하고 나머지는 적당히 입력한다. 적당히 뭘 입력해야할지 모르겠다면 아래 사진을 참고하면 된다.
Memory나 Processors는 처음에 너무 짜게 할당되는데, 원활한 개발환경을 위해 넉넉히 할당해주자. 마지막 Customize Hardware에서 설정할 수 있다.
본격적으로 Arch Linux를 설치할 차례다. (2)에서 따로 booting usb를 만들었든, 가상머신을 생성했든 부팅하면 다음과 같은 화면이 보일것이다.
첫번째 메뉴를 선택하고 넘어가면 바로 셸로 떨어질 것이다. 이 단계에서 해야할 일은 Install guide - ArchWiki에 상세히 설명되어 있으니 읽어보면 좋다.
여기서는 필요한 부분만 설명하겠다.
installation image에는 fdisk, cfdisk가 같이 들어있다. cfdisk는 curses기반 ui를 가지고 있어 사용하기 편하지만 글로 정리하기에는 fdisk가 나쁘지 않다.
fisk -l
로 사용가능한 디스크를 확인하자. VMware라면 /dev/sda에 잡힐 것이고 호스트에서 SATA port 대신 NVM Express port를 사용한다면 /dev/nvme0n1 같은 곳에 잡힐 것이다. fdisk /dev/sda
로 파티션을 만들어주자. 실행하면 fdisk 셸로 떨어지는데 여기서 m
을 눌러 사용가능한 명령어들을 볼 수 있지만
n add a new partition
p print the partition table
w write table to disk and exit
지금은 위 3개만 알고 있으면 된다.
여기서는 통째로 Linux Filesystem을 /dev/sda1에 생성했고 swap은 생략했다. 이렇게 생성한 파티션을 mkfs.ext4 /dev/sda
를 통해 ext4 파일시스템으로 만들어준다.
(3.1)에서 생성한 파티션을 mount /dev/sda /mnt
로 마운트 해준 뒤 pacstrap /mnt base linux linux-firmware vim grub
으로 필요한 패키지들을 설치해준다. genfstab -U /mnt >> /mnt/etc/fstab
으로 fstab 파일을 생성해주고 arch-chroot /mnt
로 새로 만든 시스템에 접속한다.
여기서는 명령어들의 나열이기 때문에 주석으로 설명하겠다.
# # 타임존 설정
# ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime # 타임존을 서울로 맞춘다.
# hwclock --systohc # hwclock을 osclock에 맞춘다.
# # 로케일 설정
# vim /etc/locale.gen # 필요한 locale들을 uncomment해준다. 여기서는 en_US.UTF-8, ko_KR.UTF-8을 사용
# vim /etc/locale.conf
# cat /etc/locale.conf
LANG=en_US.UTF-8
# locale-gen # 로케일 생성
# # 네트워크 설정
# vim /etc/hostname # hostname을 입력한다. 여기서는 arch-example로 한다.
# ip l # 네트워크 인터페이스 확인. 여기서는 ens33라 한다.
# vim /etc/systemd/network/ens33.network # dhcp 설정을 해준다. 내용은 다음을 참고
# cat /etc/systemd/network/ens33.network
[Match]
Name=ens33
[Network]
DHCP=yes
# 루트 비밀번호 설정
# passwd
# microcode 설치
# pacman -S intel-ucode # intel의 microcode를 설치한다. amd라면 amd-ucode 사용
# 부트로더 설정
# grub-install --target=i386-pc /dev/sda # 파티션이 아니라 디스크임에 유의
# grub-mkconfig -o /boot/grub/grub.cfg # 안해주면 부팅이 안되니 꼭 해주자
이제 ctrl+d
로 빠져나와 reboot
로 재부팅을 해주면 GRUB 메뉴가 뜰텐데 선택지는 "Arch Linux" 하나므로 그냥 넘어가자.
그러면 로그인 셸만 덩그러니 남는데 id는 root pw는 위에서 설정한 비밀번호를 사용한다.
몇가지 추가적인 설정이 더 필요해, 이 상태에선 인터넷이 되지 않는다. dhcp 설정은 위에서 해줬으니
# systemctl enable systemd-networkd # 내장 network daemon 활성화
# systemctl start systemd-networkd # 내장 network daemon 시작
# vim /etc/resolv.conf # 네임서버 추가. 여기서는 nameserver 1.1.1.1 사용
를 해주면 기본적인 Arch Linux 설치가 끝난다.
Install guide - ArchWiki를 다 끝냈으면 General recommendations - Archwiki 문서를 볼 수 있다. 그 중 가장 기본이 되는 유저와 그룹관리는 짚고 넘어가겠다.
# useradd -m <유저명>
# passwd <유저명>
# vim /etc/sudoers # wheel group의 주석을 풀어주자
# usermod -aG wheel group <유저명> # 해당 유저가 sudo 권한에 접근 가능하도록
필요하다면 chsh -s `command -v zsh`
로 기본 셸을 변경할 수 있다.
위 환경까지 하고 마치고 "원활한 작업환경"이라 하기엔 무리가 있다. Display server를 위해 Xorg를 설치하자. 10년전에 새로(?) 나온 Wayland도 있지만 아직까지 다소 불안정하다고 하니 그건 써볼 사람만 써보자.
pacman -S xorg-server xorg-xinit xterm
으로 필요한 패키지를 설치한다.
그리고 바로 startx
를 실행해 Xorg를 띄울 수도 있지만 어디 내놔도 부끄러운 화면만 덩그러니 WM이든 DE든 추가적인 작업이 필요하다. 다양한 선택지가 있지만 여기선 내가 항상 애용하는 i3-gaps를 소개한다.
pacman -S i3-gaps i3status rofi noto-fonts
로 해당 패키지들과 필요한 폰트를 설치하고 관련 설정들을 초기화 해주자. 아래를 계속 진행하기 전에 (3)에서 생성한 유저로 로그인을 먼저 한다.
~/.zprofile (bash라면 ~/.bash_profile)에 다음과 같이 추가한다.
if [[ -z $DISPLAY ]] && [[ $(tty) = /dev/tty1 ]]; then
exec startx
fi
~/.xinitrc에는 다음과 같이 추가한다.
exec i3
다시 재부팅 후 해당 유저로 로그인을 하면 i3 config을 생성할건지와 win, alt중 어떤 키를 mod 키로 사용할건지 물어보는데 적절히 자기가 원하는 취향에 맞게 설정해주면 다음과 같은 화면을 볼 수 있다.
마우스도 안먹히고 키도 안먹히는 것 같지만 아래 key binding을 참고하면 중요한것을 볼 수 있다.
Mod+Return 조합으로 다음과 같이 터미널을 새로 열 수 있다.
Mod+h는 수직으로 분할, Mod+v는 수평으로 분할한다. 이렇게 분할된 윈도우들은 Mod+←, ↑, →, ↓로 포커스를 이동하고, Mod+Shift+←, ↑, →, ↓로 윈도우 자체를 이동할 수도 있다. Mod+f로 전체화면으로 전환하거나 Mod+1, 2, 3...으로 워크스페이스를 전환하는 등 유용한 기능들이 더 많지만 자세한 내용은 위 그림과 i3 - user guide를 참고하라.
마지막으로 위 과정을 모두 수행했으면 ~/.config/i3/config에 기본적인 i3 설정 파일이 생성되었을 것이다. 적절한 에디터로 해당 파일을 열어 #start dmenu 부분을 ... --no-startup-id rofi -show run으로 수정해주자. 이제 Mod+d를 누르면 임의의 프로그램을 터미널없이 실행시킬 수 있다.
Arch에는 커뮤니티 주도로 관리되는 Arch User Repository (AUR) 레포지토리가 있다. 아쉽게도 내장 패키지 관리자(pacman)로는 쓸 수 없고 AUR helper를 따로 써야 한다. helper 없이 직접 소스를 받아 설치하는 방법도 있지만 귀찮으니 미리 준비해두자.
여러 helper들이 있지만 가장 인기 많은 yay를 추천한다.
pacman -S --needed git base-devel
git clone https://aur.archlinux.org/yay.git
cd yay
makepkg -si
설치는 위와 같이 한다. yay가 없으면 다른 AUR package들도 위와 같이 코드를 받고 직접 설치해야 하는데 여간 귀찮은 작업이 아닐 수 없다. 이번엔 yay를 가지고 google chrome을 깔아보자. 사용법은 pacman과 동일하다. yay -S google-chrome
면 된다.
이제 Mod+d로 rofi를 꺼내 google-chrome-stable을 실행하면 인터넷 브라우저를 볼 수 있다.
(5)를 보면 한글이 깨지는 것을 볼 수 있다. 아직 한글 폰트가 없어서 그렇다. 한글 폰트는 AUR에 있기 때문에 yay전에 일부러 언급하지 않았다. yay -S ttf-nanumgothic_coding
를 설치하고 크롬을 다시 켜보면 한글이 제대로 보인다.
그러나 아직 한글을 입력할 방법이 없다. 여러 입력기가 있지만 그 중 하나인 uim을 소개한다.
yay -S uim
로 uim을 설치한다. 설치가 끝나면 uim-pref-gkt3
로 설정창을 열자.
Global settings -> specify default IM 체크 -> Default input method: Byeoru
Global settings -> Enabled input methods Edit -> "Byeoru"만 남기기
이제 Shift+space로 한영키를 전환할 수 있다. 혹시 나처럼 CapsLock을 한영 전환키로 쓰고 싶다면 아래 작업도 같이 해주면 된다.
아까 열었던 설정창을 다시 열어 Byeoru key bindings 1에 들어가면 Byeoru on/off 키를 설정하는 것이 보인다. 근데 여기서 CapsLock을 눌러도 별다른 키가 인식되지 않을 수 있다. 키 설정이 필요하다.
먼저 /usr/include/linux/input-event-codes.h
에서 HANGEUL의 키코드를 알아낸다. 내 환경에선 122다.
그리고 CapsLock을 한번 눌러보고 journalctl
을 실행한뒤 G를 누르면 Unknown key pressed.. Use 'setkeycodes 72 <keycode>'... 라는 메시지를 볼 수 있다.
scancode는 72, keycode는 122. 필요한 정보는 모두 얻었으니 설정만 해주면 된다.
sudo vim /etc/systemd/system/setkeycodes.service
로 서비스를 하나 다음과 같이 생성한다.
[Unit]
Description=Change keycodes at boot
[Service]
Type=oneshot
ExecStart=/usr/bin/setkeycodes 72 122
[Install]
WantedBy=multi-user.target
그리고 sudo systemctl enable setkeycodes
로 해당 서비스를 활성화 시킨 뒤 재부팅 해주자.
다시 설정창을 열어서 키설정을 해주면 CapsLock이 hangul키로 잘 인식되는 것을 확인할 수 있다. 이제 Mac에서처럼 CapsLock으로 한영 변환을 편하게 할 수 있다 :)
가상머신을 쓸때 없어서는 안될 기능 두가지는
이를 위해 yay -S open-vm-tools gtkmm3
로 필요한 패키지를 설치해주자.
그리고
$ sudo systemctl enable vmtoolsd
$ sudo systemctl start vmtoolsd
$ sudo systemctl enable vmware-vmblock-fuse
$ sudo systemctl start vmware-vmblock-fuse
로 해당 서비스들을 활성화 시킨다.
그리고 i3 config을 열어 마지막에 exec --no-startup-id vmware-user-suid-wrapper
를 추가해준뒤 재부팅한다.
이제 임의의 해상도로 쾌적하게 즐길 수 있다.
위에서 추가로 해보면 좋을 것들로
i3
, i3status
, terminal emulator
, autologin
, grub
, editor
설정docker
, pulseaudio
, flameshot
, guake
, fzf
설치가 있겠다.