2020년 12월 수정판

젠투설치 매뉴얼은 공식 위키가 아주 잘 쓰여있는데다 한글 번역까지 되어있으므로 공식 매뉴얼에서 개인적인 팁을 덧붙이는 식으로 한다.  전체적인 큰 틀은 공식위키와 다르지 않다.

https://wiki.gentoo.org/wiki/Handbook:AMD64/Full/Installation/ko

사실 젠투를 설치할 정도면 이미 리눅스 사용이나 여러 운영체제를 설치하는 부분에 있어서는 충분한 지식이 있을 정도이니 기타 잡다한 설명들은 제외할 예정이며, 순서대로 적어보고자 한다. 또한, 공식 위키에서는 설명되어있지 않지만, 직접 설치하면서 겪은 도움이 될만한 부분 역시 설명하고자 본 설치기를 작성한다.

이전에 시작하기 글에도 설명했지만, 설치환경을 다시 한 번 언급하자면,
1. 리눅스 단독 설치 (기록 차원에서 듀얼부팅 방법은 적어놨다)
2. 유선 네트워크
3. systemd
4. KDE Plasma desktop
로 진행하고자 한다. 하나 더 추가하자면, 모든 emerge 명령어의 컴파일 출력물은 끄고 진행한다.  설치는 부팅이 되는 상황까지 만드는데 컴퓨터 성능에 따라 다르지만 대략 2-3시간이면 충분하다.

1. 다운로드
먼저, https://gentoo.org/downloads/ 이 페이지에 가서 부팅 가능한 이미지인 Minimal Installation CDstage3 파일을 받는다. Minimal Installation CD를 받고나면 이것을 부팅가능한 매체, USB나 CD에 굽는다. 그리고 stage3는 같은 USB에 넣어도 되며, 만약 본인이 사용 중인 컴퓨터에서 젠투 설치 USB가 인식되지 않으면 다른 usb 메모리 드라이브를 준비해서 넣어둔다.

Stage3 다운로드는 stage 3stage 3 systemd 이렇게 2종류가 있는데, 쉽게 설명하자면 첫번째 것은 OpenRC라고 하는 리눅스의 전통적인 부팅방식 (BSD Init이냐 SystemV이냐 등등)을 사용하며, 두번째 systemd는 최근에 등장한 새로운 부팅방식이다.  여기서 자세하게 설명하긴 어렵지만, 젠투는 기본적으로  OpenRC를 채택하고 있으며, 그외 거의 모든 배포판이 systemd로 넘어온 상태이다.  따라서, 나중에 다른 배포판을 쓸 의향이 있다면 쉬운 적응을 위해 systemd를 선택해서 배우는 것이 낫다고 본다.

2. 부팅
네트워크 케이블을 연결한 상태에서 위에서 만든 부팅 디스크로 부팅한다. 부팅이 완료되면 요즘의 젠투 부팅씨디는 알아서 DHCP를 이용하여 IP 주소를 받아오지만, 다시 한 번 확인해준다.

ip link | grep "state UP" | awk '{print $2}' | sed 's/://'

IP 주소를 받아오지 못하거나 안한 것으로 보인다면, dhcp 명령어를 실행해서 주소를 받아온다. 참고로 아래 명령어에서 eth0 부분은 ifconfig 등의 명령어를 통해서 나오는 이름을 참고하시면 되겠다.

dhcpcd eth0

3. 파티션, 포맷
윈도우가 설치된 상태에서 리눅스를 설치하는 것은, 일단 적어도 파티션의 개념이 제대로 잡혀있어야 윈도우를 날리지않고 설치할 수 있고, 그렇지않으면 윈도우를 전부 날릴 확률이 높다. 따라서, 파티션이 무엇이고 이걸 어떻게 다루는지 안다는 전제 하에 핵심만 설명하자면,

a. 파티션은 굳이 여러개를 나눌 필요는 없다.
b. 하이버네이션 기능이 꼭 필요한 게 아니라면, 스왑파티션을 크게 잡을 필요는 없다.
c. UEFI / GPT를 사용하지 않는다면, /boot 파티션은 없어도 괜찮다. 만약 만든다면, 나는 개인적으로 boot에는 2기가 정도를 준다.

정도 되겠다. fdiskparted를 이용하여 파티션을 나눠주면 되고, GPT 방식을 이용한다면 공색 매뉴얼을 필히 참고하시라고 권해드린다. 스왑파티션의 경우, 나는 개인적으로 스왑은 2기가 이상은 잡지않는 편인데 그 이유는, 파티션이 500메가 이상 사용된다는 의미는 이미 램이 심각하게 모자란다는 의미로 받아들이기 때문이다. 사실상, 램이 부족하지 않은 시스템에서 스왑이 돌아간다는 것 자체를 문제로 본다. 따라서, 2기가 이상은 아무런 의미가 없다고 본다.

파티셔닝이 끝나면 원하는 파일시스템으로 포맷을 해주자. 만약 /boot를 만들어줬다면 /boot에는 Ext2를 권장한다. 몇 가지 이유가 있는데, 일단 리눅스라는 운영체제에서 가장 오래되고 검증됐으며 비저널링 파일시스템으로서는 이견이 없기 때문이다.

참고로, GPT로 진행하는 경우 공식 매뉴얼에는 언급이 되어있지 않은데, boot (EFI) 파티션을 ext2로 포맷해줘야한다.

mkfs.ext2 /dev/sda2

또한, GPT로 진행하는 경우, 파티션을 포맷하려고 하는데 /dev/sda2 is apparently in use by the system; will not make a filesystem here!  라는 메시지가 나오면서 포맷을 거부할 경우, 왜인지는 모르겠으나 md (소프트웨어 레이드)가 활성화 되어있어서 그렇다. 이것을 꺼주면 되겠다.

# ls /dev/md*
만약  /dev/md126과 /dev/md127이 목록에 나올 경우
# mdadm --stop /dev/md126
# mdadm --stop /dev/md127
# mkfs.ext2 /dev/sda2
# mkswap /dev/sda3
# swapon /dev/sda2
# mkfs.ext4 /dev/sda4

당연한 말이지만, 윈도우와 듀얼부팅을 하고자 하시는 분은 절대로 EFI 파티션을 포맷하면 안된다.  그냥 /mnt/gentoo/boot에 마운트만 해주면 된다.  루트 파티션과 스왑 파티션의 준비가 모두 끝났으면, 파티션들을 모두 마운트 해줘야한다. 마운트해주고 나서 미리 다운받아놓은 stage3 파일이 담긴 usb를 연결하여 복사 및 압축을 풀어준다.  압축이 풀리는데 시간이 꽤 걸린다. stage3 파일이 모두 풀렸으면, 시스템이 사용할 가상 파일시스템들을 마운트 해줘야한다.

# mount /dev/sda4 /mnt/gentoo
# mount /dev/sda2 /mnt/gentoo/boot
# cd /mnt/gentoo
# cp /mnt/cdrom/stage3* /mnt/gentoo/
# tar xpvf stage3-*.tar.xz --xattrs-include='*.*' --numeric-owner
# chmod 1777 /mnt/gentoo/tmp
# mount -t proc /proc /mnt/gentoo/proc
# mount --rbind /sys /mnt/gentoo/sys
# mount --make-rslave /sys /mnt/gentoo/sys
# mount --rbind /dev /mnt/gentoo/dev
# mount --make-rslave /dev /mnt/gentoo/dev

fdisk나 parted 등 파티션을 준비하기 위한 부분을 잘 모르겠으면, 공식 위키의 디스크 준비 항목을 보고 그대로 따라하시면 되겠다.

그외, 다른 컴퓨터에서 ssh로 접속하여 설치를 진행하고싶으면 root의 패스워드를 지정하면 된다.

# passwd
# rc-service sshd start

4-1. 설치준비
공식 위키에서와는 다르게, 날짜/시간과 컴파일 옵션 설정은 당장 안해도 된다.
미러를 골라준다.

# mirrorselect -i -o >> /mnt/gentoo/etc/portage/make.conf

미러는 여러 개를 고를 수 있는데, 자신이 사는 지역과 가까운 곳에 있는 미러들을 선택해주면 되겠다. 이것이 다 됐으면, DNS 정보를 복사해준다.

# cp --dereference /etc/resolv.conf /mnt/gentoo/etc/

젠투의 리포지토리 설정을 복사한다

# mkdir --parents /mnt/gentoo/etc/portage/repos.conf
# cp /mnt/gentoo/usr/share/portage/config/repos.conf /mnt/gentoo/etc/portage/repos.conf/gentoo.conf

이제 chroot 명령어를 통해서 설치에 돌입한다.

chroot /mnt/gentoo /bin/bash
source /etc/profile
export PS1="(chroot) ${PS1}"

젠투 패키지 목록을 모아놓은 포티지를 설치해야한다. 그래야 어떤 패키지가 있는지 젠투가 알 수 있다.

emerge-webrsync

공식위키에서는 다음 단계로 뉴스를 읽으라는데, 읽을 수 있게 스크롤을 멈춰주는 것도 아니고, 현재 설치시점에서 딱히 관심이 가는 것도 아니니 일단 실행은 해준다.

# eselect news read

프로파일을 선택하라고 나오는데, 여기서 desktop을 선택하여 진행하면 X-Windows에 관련된 패키지까지 줄줄이 설치하게 되므로 시간이 오래 걸린다.  당장의 목적은 부팅부터 성공적으로 하는 것이므로, 일단은 프로파일을 systemd 기본인 14번 default/linux/amd64/17.1/systemd 이것을 선택한다.  사실, 처음부터 플라즈마 등을 선택하면 커널을 설치하기 전부터도 시간이 너무 오래 걸리는데, 다시 한 번 강조하지만 본 매뉴얼은 최대한 빨리 빌드를 끝내고 설치 USB가 아닌 새로운 커널로 부팅하고나서, 즉 완전한 새로운 운영체제를 구축하고 난 이후에 설치를 계속 하는 걸로 한다.

# eselect profile list
Available profile symlink targets:
[1] default/linux/amd64/17.1 (stable)
[2] default/linux/amd64/17.1/selinux (stable)
[3] default/linux/amd64/17.1/hardened (stable)
[4] default/linux/amd64/17.1/hardened/selinux (stable)
[5] default/linux/amd64/17.1/desktop (stable)
[6] default/linux/amd64/17.1/desktop/gnome (stable)
[7] default/linux/amd64/17.1/desktop/gnome/systemd (stable)
[8] default/linux/amd64/17.1/desktop/plasma (stable)
[9] default/linux/amd64/17.1/desktop/plasma/systemd (stable) *
[10] default/linux/amd64/17.1/developer (stable)
[11] default/linux/amd64/17.1/no-multilib (stable)
[12] default/linux/amd64/17.1/no-multilib/hardened (stable)
[13] default/linux/amd64/17.1/no-multilib/hardened/selinux (stable)
[14] default/linux/amd64/17.1/systemd (stable)
[15] default/linux/amd64/17.0 (dev)
[16] default/linux/amd64/17.0/selinux (dev)
[17] default/linux/amd64/17.0/hardened (dev)
[18] default/linux/amd64/17.0/hardened/selinux (dev)
[19] default/linux/amd64/17.0/desktop (dev)
[20] default/linux/amd64/17.0/desktop/gnome (dev)
[21] default/linux/amd64/17.0/desktop/gnome/systemd (dev)
[22] default/linux/amd64/17.0/desktop/plasma (dev)
[23] default/linux/amd64/17.0/desktop/plasma/systemd (dev)
[24] default/linux/amd64/17.0/developer (dev)
[25] default/linux/amd64/17.0/no-multilib (dev)
[26] default/linux/amd64/17.0/no-multilib/hardened (dev)
[27] default/linux/amd64/17.0/no-multilib/hardened/selinux (dev)
[28] default/linux/amd64/17.0/systemd (dev)
[29] default/linux/amd64/17.0/x32 (dev)
[30] default/linux/amd64/17.0/musl (exp)
[31] default/linux/amd64/17.0/musl/hardened (exp)
[32] default/linux/amd64/17.0/musl/hardened/selinux (exp)
[33] default/linux/amd64/17.0/uclibc (exp)
[34] default/linux/amd64/17.0/uclibc/hardened (exp)
# eselect profile set 14

여기까지 했으면, 공식 위키에서 설치하라고 나오는 그 어떠한 패키지도 지금 현재는 설치하지마시길 권해드린다.  물론 위키에 나오는대로 해도 된다.  다만, 젠투를 사용하는 목적에 좀 더 부합하게 최적화를 위한 설정을 미리 다 해놓고 시작하고자 한다.

4-2. C Cache

패키지를 설치하기 전 가장 먼저 해야할 일이 하나 있다. 바로 패키지 컴파일시 이 컴파일 데이터들을 캐싱해주는 C Cache라는 것을 먼저 설치해야한다. 얼마나 도움이 될지는 모르겠지만, 조금이라도 설치 시간을 단축시켜줄 수 있기 때문에 설치를 추천한다.

개인적으로 나는 패키지 설치시 출력 메시지를 아예 보지않는다. 어차피 C언어를 모르기 때문에 에러메시지를 이해할 수 없을 뿐더러, 뭐 굳이 컴파일되는 과정의 메시지를 볼 필요가 있나. 따라서, 모든 emerge 명령어 실행시에는 나는 -q를 붙인다.

emerge -q ccache

C Cache 설치 이후에는 설정을 해줘야한다. C Cache를 활성화하고 캐시 사이즈 및 위치를 지정하는 것이다. /etc/portage/make.conf 파일을 열고 다음과 같이 넣는다. 이미 위에서 make.conf 파일을 정리했는데, 이것은 해도그만 안해도 그만이므로 추가로 설명하게 됐다. 위치는 관계없다.

FEATURES="ccache"
CCACHE_SIZE="2G"
CCACHE_DIR="/var/cache/ccache"

참고로, 상단의 CCACHE_SIZE는 원하는대로 변경이 가능하다.  이제 디렉토리를 생성하자.

# mkdir -p /var/cache/ccache
# chown root:portage /var/cache/ccache
# chmod 2775 /var/cache/ccache

안해줘도 상관없는 부분이지만, 최근의 CCache는 /var/cache/ccache/ccache.conf 파일 작성을 설명하고 있으니, 여기서도 작성해본다.

umask = 002
compiler_check = %compiler% -v
cache_dir_levels = 3

4-3. make.conf
/etc/portage/make.conf 파일은 젠투라는 배포판에 있어서 가장 핵심을 이루는 중요한 설정파일이다. 설정은 간단하며 내용물은 몇 안되는데, 까다로운 성격을 가진 유저들에게는 미치도록 스트레스 혹은 희열감을 주는 파일이 되겠다.

이 파일이 하는 일은, 앞으로 내 젠투 리눅스가 나아가야할 전체적인 시스템의 방향을 잡아주고, 내 하드웨어에 가장 최적화된 방법으로 시스템을 구성할 수 있게끔 설정을 하게해준다. 여기에 있어서 가장 핵심이 되는 설정은 USECFLAGS인데, 하나씩 살펴보자.

먼저 CFLAGS는, 소스코드를 컴파일할 때 주는 옵션을 정의하는 곳이다. 내 컴퓨터가 인텔 i7 CPU를 장착했다면, 이 CPU가 가진 기능을 모두 활용하여 최대의 성능을 내게끔 한다거나 하는 일들이 가능한데, 그럴려면 CPU의 제원과 GCC라는 컴파일러의 옵션을 다 알아야하고, 이것이 일반적인 유저에게는 아주 어려운 일이다. 따라서, 젠투 커뮤니티는 “가장 보편적이고 안전한 옵션”을 제안한다.
https://wiki.gentoo.org/wiki/Safe_CFLAGS 이 페이지에 가면 다양한 CPU에 따른 CFLAGS를 제안하는데 예를 들어 내 CPU가 하스웰 Core i7이라면, CFLAGS="-march=haswell -O2 -pipe" 라는 옵션이면 충분히 무난하다라는 것이다. 여기에 CPU별 구체적인 명령어들을 CPU_FLAGS_X86이라는 옵션을 통해 정의할 수 있다. 젠투의 기본값은 CPU_FLAGS_X86="mmx sse sse2"로 설정되어있거나, 요즘엔 아예 안적혀있기도 하다.

하지만, “이건 너무 두루뭉실하지 않나” 하는 유저들이 있을 수 있고, 젠투를 쓰는 매력은 이런 최적화 옵션을 통해 내 컴퓨터에 맞는 맞춤형 리눅스를 만드는 것이 목적이기 때문에, 내 CPU가 가진 명령어셋을 검색/비교하여 최적화된 CFLAGS를 보여줄 수는 없을까? 하는 생각을 가진 유저들이 분명 있어서 나온 명령어가 있다. 기본 명령어는 아니므로 설치를 해야한다.

# emerge -q app-portage/cpuid2cpuflags

설치가 완료됐으면 실행을 해보자.

# cpuinfo2cpuflags-x86
CPU_FLAGS_X86="aes mmx mmxext popcnt sse sse2 sse3 sse4_1 sse4_2 ssse3"

이렇게 나온다. 이걸 그냥 복사해서 /etc/portage/package.use/00cpu-flags 파일에 넣으면 된다.

# echo "*/* $(cpuid2cpuflags)" > /etc/portage/package.use/00cpu-flags

혹은 /etc/portage/make.conf에 넣어줘도 상관없다.

4-4. USE
USE 플래그는 젠투의 진입장벽을 높이는 주범이라고들 하는데, 그 이유는 USE를 너무 자세하게 설정하려고 하기 때문에 그렇다. 따라서, USE에는 취지에 맞게 최대한 global하게 설정하고, 시스템 전반적으로 이것만큼은 꼭 있어야한다는 플래그를 넣어준뒤, 특별히 문제가 되는 패키지들은 패키지별 USE를 따로 설정해주는 것이 편하다. 개인적으로 추천하는 최소 USE 플래그는 다음과 같다.
USE="bash-completion cjk unicode X -bindist"

bash-completion은, 만약 설치하려는 패키지가 BASH의 명령어 및 옵션 자동완성을 지원하는 경우 이것을 활성화하게되며, cjk는 동북아시아 3개국의 언어, Chinese, Japanese, Korean 언어 지원, unicode는 역시 마찬가지로 언어에 관계된 유니코드 설정, X는 GUI 환경인 X-Windows 지원, 그리고 마지막 -bindist 앞에 붙은 -는 on/off 스위치 같은 것인데, -를 붙이면 off 하겠다는 얘기다. 즉, bindist를 안쓰겠다는 의미인데, bindist (내 추측으로는 아마 binary distribution의 약자)는 특정 라이센스나 어떤 상황에 있어서 소스코드를 다운받아서 컴파일하지 않고, 그냥 미리 컴파일되어있는 패키지를 받아서 쓰겠다는 옵션인데, 이것은 젠투를 쓰고자하는 취지와 전혀 맞지않고, bindist로 받은 패키지들이 문제를 일으키는 경우가 종종 있다.

추가로 추천하는 USE 플래그가 있다면, 파이썬을 선호하는 유저라면 python, vim을 주력으로 쓴다면 vim 문법지원 플래그인 vim-syntax 정도가 있겠다. 참고로 내 USE 플래그는 다음과 같다.
USE="bash-completion cjk ldap nano-syntax python ssl unicode vim-syntax X zsh-completion -bindist -gpm"

LDAP과 SSL은 개인적으로 직장에서 업무상 꼭 필요한 기능이기 때문에 넣었다. 이렇게 꼭 필요한 건 넣고, 필요없는 건 뺄 수 있는 점이 바로 젠투의 매력이겠지.

추가적으로 다중 모니터를 사용하고자한다면 xinerama를 추가시켜주면 되며, Lenovo의 ThinkPad 노트북을 사용 중이라면 thinkpad 플래그를 추가시켜, 시스템 전반적으로 thinkpad를 지원하는 프로그램에 기능을 활성화시킬 수 있겠다.

공식 위키에서는 -gtk -gnome qt kde 등이 예제로 있는데, GNOME을 쓴다고 굳이 -qt 할 필요는 없고, 오히려 개인적으로는 비추천한다. GNOME 환경으로 구성해서 쓴다고해서 QT 기반 어플리케이션을 아예 안쓸 수도 없기 때문이기 때문인데, 예를 들자면 개인적으로 애용하는 XCA 같은 프로그램들은 GNOME 기반 앱인줄 알았는데 나중에 알고보니 QT기반이었다는 등… 요즘은 QT고 GNOME이고 한 가지만 지향해서 구성하는 건 좋지않다고 생각한다.

전체 USE Flags는 여기에서 보면 된다. https://www.gentoo.org/support/use-flags/

4-5. 기타 설정
/etc/portage/make.conf 파일의 나머지 설정을 할 차례다. 지금 굳이 안해도 상관없지만, 미리 하지 않았다가 나중에 시스템 전체를 다시 통째로 재컴파일해야하는 상황을 만들 수도 있기 때문에 지금 하는 게 낫다.

딱히 건드릴 건 없지만, ABI_X86="32 64" 항목을 넣어주는 것을 권장한다 (안넣어도 요즘은 알아서 64비트 위주에 32비트를 추가적으로 빌드한다). 이것은, multilib 즉, 32/64비트 환경 둘 다 지원하는 바이너리를 빌드하도록하는 옵션인데, 일부 특정 패키지가 이 옵션을 요구한다. 그런데, “나는 완벽한 64비트 환경으로 쓰고싶은데” 라고 생각하는 유저들도 있을텐데, 이런 환경은 일반적으로 리눅스에서 전혀 권장하지 않으며, 공식 위키에도 이 부분에 대해서 설명하고 있다.
https://wiki.gentoo.org/wiki/Handbook:AMD64/Full/Installation/ko#Multilib_.2832.EB.B9.84.ED.8A.B8_.EB.B0.8F_64.EB.B9.84.ED.8A.B8.29

특히 nVidia 그래픽카드의 드라이버가 multilib를 요구하는데, 이것과 관계된 커널 모듈 및 기타 패키지들도 다 같이 요구되므로, 잘 모르는 상태에서 64비트 전용 환경을 구성하면 골치아파지므로 그냥 속편하게 multilib 환경으로 미리 구성을 해놓자.

참고로, ABI_X86="32 64" 항목을 넣어주면 stage3에 딸려오는 거의 모든 패키지를 재컴파일하므로 사실상 stage1부터 하는 것과 다름없어진다.  이것은 현재 기본값인 64비트 운영체제에 32비트 실행 기능을 추가시키는 것인데, 굳이 안넣어도 상관은 없다.

다음으로 MAKEOPTS라는 옵션이 있다. 이것은 젠투를 설치하려는 컴퓨터의 CPU가 가진 총 코어의 갯수를 적어주면 된다. 예를 들어, Core i7 970이라는 CPU는 물리 코어 6개에 논리 코어 6개로 총 12개의 코어가 있다. 따라서 MAKEOPTS="-j12" 라고 넣어주면 된다. 공식위키에서는, 총 코어갯수+1을 하라고 하는데, 사실 공식 영문위키에서는 +1을 하라는 의견이 없으며, 오히려 하단에 +1을 하는 것이 좋지않다라는 젠투의 공식 블로그 글을 링크해놓고 있다.
https://wiki.gentoo.org/wiki/MAKEOPTShttps://blogs.gentoo.org/ago/2013/01/14/makeopts-jcore-1-is-not-the-best-optimization/

잘 모르겠으면 아래의 명령어를 실행해서 나오는 값을 붙이면 된다.

# cat /proc/cpuinfo | grep processor | wc -l

X-Windows의 GUI 환경을 구축할 계획이 있다면, 그래픽카드와 장치를 적어주면 좋다. 사실, 안적어줘도 크게 상관은 없다.
VIDEO_CARDS="nvidia"
INPUT_DEVICES="evdev"

노트북을 사용 중이며 터치패드를 쓰고자한다면 다음과 같이 한다.
INPUT_DEVICES="evdev synaptics libinput"

마지막으로, 지원언어를 설정해줄 수 있다.
L10N="en ko"
LINGUAS="en ko"

이렇게 적어주면, 영어를 우선지원하고 다음으로 한국어를 지원하게 된다. 만약 순서를 바꾸면, GNOME 터미널이나 Konsole 등에서 각종 메시지가 한글로 나오게 된다.

이제 make.conf 파일을 총 정리해보자. 내 make.conf 파일을 올리는 것으로 정리를 마무리한다.

CFLAGS="-march=westmere -O2 -pipe"
CXXFLAGS="${CFLAGS}"
CHOST="x86_64-pc-linux-gnu"
MAKEOPTS="-j12"
ABI_X86="32 64"

USE="bash-completion cjk ldap pulseaudio python ssl unicode vim-syntax X zsh-completion -bindist -gpm"

PORTDIR="/var/db/repos/gentoo"
DISTDIR="/var/cache/distfiles"
PKGDIR="/var/cache/binpkgs"

VIDEO_CARDS="nvidia"
INPUT_DEVICES="evdev"
L10N="en ko"
LINGUAS="en ko"

GENTOO_MIRRORS="http://www.gtlib.gatech.edu/pub/gentoo http://lug.mtu.edu/gentoo/ http://gentoo.osuosl.org/ http://gentoo.mirrors.pair.com/ http://mirrors.rit.edu/gentoo/ http://gentoo.mirrors.tds.net/gentoo http://mirror.lug.udel.edu/pub/gentoo/ http://cosmos.illinois.edu/pub/gentoo/ http://gentoo.cs.uni.edu/ http://mirror.usu.edu/mirrors/gentoo/"

4-6. 필수 패키지 설치 준비

이제부터 필수 패키지 설치를 시작하는데, 필수적인 패키지를 크게 분류하자면 다음과 같다.
a. 커널
b. 시스템 운영 패키지
c. 부트로더
d. 기타 툴

5. 전체 시스템 컴파일
요즘의 젠투는 stage3부터 시작하게끔 만들어져있기 때문에 기존의 코어 시스템 (예 util-linux, gcc 등) 을 재컴파일하지 않아도 되며, 사실 젠투 공식문서에서는 이러한 운영체제의 핵심부터 재컴파일 하는 과정 (stage1)을 권장하지 않고 있다.  다만, 시스템 전체에 해당하는 메타 패키지인 @world를 넣고 업데이트를 실행하면 상단에 새로 작성한 make.conf 파일적용으로 인해 어차피 전부 다 재컴파일하게 된다.  따라서 시간이 꽤 오래 걸릴 거다.

emerge -aqvuDN @world

공식 위키에 나오는 시간대(timezone), 로케일 등은 사실 안해도 된다.  왜냐하면, locale-gen이나 echo “Europe/Brussels” > /etc/timezone 등의 명령어는 기존의 OpenRC에서 쓰던 Init 방식이라 systemd에서는 사용하지 않으며, systemd에서는 별도의 로케일 전용 명령어인 localectl이 따로 있기 때문이다.  물론 그냥 그대로 보고 따라해도 상관은 없다.  참고로 한국어는 ko_KR.UTF8이다. 사실 systemd 환경에서는 부팅이 성공적으로 된 후에 해도 되므로 상관없긴 하지만, 지금 해주면 나중에 systemd가 OpenRC 환경으로 설정한 것들을 가져와서 적용시켜주므로 편리하다는 장점도 있다.

5-1. 커널 설치
옛날에 리눅스를 쓸 때는 커널 옵션 하나하나 확인해가면서 설치를 했고, 사실 그게 또 나름 맛이 있어서 자연스럽게 커널 옵션들을 공부하게 됐다. 하지만 요즘은 하드웨어가 너무나도 복잡해지고 지원해야하는 종류도 많아져서, 옵션 일부를 잘못 건드리면 어떤 기능 전체가 싸그리 작동이 안되거나, 아니면 아예 부팅이 안되는 등의 문제가 생긴다. 자신의 하드웨어를 아주 잘 알고있고, 모듈로 컴파일하는 것과 커널에 넣는 것의 차이를 이해하면 혼자서 해볼만한데, 그렇지 않다면 별로 추천하지 않는다. 따라서, 젠투에서는 다른 리눅스 배포판들처럼 어떤 컴퓨터에서든 작동하는 범용 커널을 만들어주는 툴이 있다.  먼저 커널을 설치하자.

emerge -q sys-kernel/gentoo-sources

시간이 좀 걸린다. 커널 소스코드 설치가 끝나면, 범용커널을 만들어주는 툴을 설치한다.

emerge -q sys-kernel/genkernel

만약 아래와 같은 메시지가 뜨면서 설치가 되지않으면, 리눅스 커널에 하드웨어 제조사에서 제공하는 펌웨어의 라이센스 동의를 위해 라이센스에 동의한다는 파일을 하나 넣어야한다.

The following license changes are necessary to proceed:
(see "package.license" in the portage(5) man page for more details)
# required by sys-kernel/genkernel-4.1.2-r3::gentoo[firmware]
# required by sys-kernel/genkernel (argument)
=sys-kernel/linux-firmware-20201022-r3 linux-fw-redistributable no-source-code

/etc/portage/package.license 디렉토리를 생성하여 /etc/portage/package.license/genkernel 파일을 열고 아래의 내용을 복붙한다.

# mkdir /etc/portage/package.license
# nano /etc/portage/package.license/genkernel

# required by sys-kernel/genkernel-4.1.2-r3::gentoo[firmware]
# required by sys-kernel/genkernel (argument)
=sys-kernel/linux-firmware-20201022-r3 linux-fw-redistributable no-source-code

만약 다른 컴퓨터에서 젠투 설치를 진행 중이 아니거나 마우스를 사용할 수 없는 등의 상황이라 내용을 복붙할 수 없다면, emerge -q대신 emerge -aq를 붙여서 실행한다.  그러면 아래와 같이 물어볼텐데, Yes 혹은 엔터키를 친다.

Would you like to add these changes to your config files? [Yes/No]

이렇게 하면 라이센스 파일을 하나 만들어줬을텐데 아직 적용이 되지 않은 상태다. 적용을 시켜보자.

# etc-update
1
q
1
y
# emerge -q sys-kernel/genkernel

라이센스 동의는 아예 make.conf에 넣어서 전부 다 accept하게 할 수 있지만 공식 매뉴얼에서는 그렇게 하지 않는 것을 권장하는데, 이유는 어떤 프로그램을 설치할 때 현재 환경에 설치를 해도 되는 라이센스인지 확인하라는 차원에서 그렇게 하는 것이다.  특정 프로그램들은 개인 사용은 무료이지만 회사나 기관 등에서 사용하면 무료가 아닌 프로그램들이 꽤 많이 있는데 예를 들면 Oracle VirtualBox의 Extension Pack 같은 프로그램이 그렇다.

그런다음 다시 설치를 진행한다.

emerge -q sys-kernel/genkernel

이제 커널을 빌드해준다.  genkernel 명령어엔 굉장히 많은 옵션이 있지만, 여기서는 자신의 컴퓨터에서 컴파일된 커널을 만드는 게 목적이므로, 전부 다 설치하는 것으로 한다.  꽤 오래 걸린다.

genkernel all

커널을 직접 수정해서 쓰고싶다면, 일단 최초 설치는 genkernel로 전부설치한 뒤, 이후 새롭게 빌드한 시스템으로 부팅이 잘 되고나서 시도해볼 것을 추천한다.

5-2. 시스템 운영 패키지 설치
기본적인 운영에 필요한 패키지를 설치해야하는데, 사실 systemd 프로파일 적용하는 단계에서 거의 대부분 설치된다. 거기서 빠진 것들 중 없으면 불편한 것들을 설치해보자.

# emerge -q sys-apps/pciutils
# emerge -q app-portage/gentoolkit
# emerge -q app-portage/eix
# emerge -q net-misc/dhcpcd
# emerge -q net-misc/openssh
# emerge -q app-admin/sysklogd
# emerge -q sys-process/cronie
# emerge -q app-admin/sudo
# emerge -q app-admin/syslog-ng
# emerge -q app-admin/logrotate

일부 하드웨어의 추가 펌웨어를 설치해준다.  위의 genkernel을 설치하는 과정에서 이미 설치되어있을 수도 있고 혹은 당장은 필요없을 수 있겠지만, 나중에 이걸 안해줘서 문제가 생기는데 기억이 안나서 해결 못하는 경우도 있다.

emerge -q sys-kernel/linux-firmware

무선랜 (WiFi)을 사용하고싶으면 아래의 패키지를 설치해줘야한다.

emerge -q net-wireless/wireless-tools

5-3. 부트로더 설치
부트로더로는 grub을 선택한다. 사실 이게 제일 무난하고 쓰기편하다.

emerge -q sys-boot/grub:2
grub-install /dev/sda

설치가 끝났으면 새로운 커널로 부팅할 시 systemd로 부팅하기 위한 설정을 해줘야한다. 설정은 간단한데, /etc/default/grub 파일을 열고 다음 줄을 찾아서 주석을 해제해주면 된다.
GRUB_CMDLINE_LINUX="init=/usr/lib/systemd/systemd"

그런다음 적용을 시켜준다.

grub-mkconfig -o /boot/grub/grub.cfg

6. 환경설정
이제 마지막으로 수작업으로 작성해줘야하는 필수 설정파일을 작성해줄 차례다.
공식 위키에 /etc/fstab 파일에 대한 설명이 잘 나와있으니 그것을 보고 작성해준다.

passwd 명령어로, root 사용자의 패스워드를 변경해주고, 아래의 명령어로 일반 유저를 생성해준다.

useradd -m -G users,wheel,audio,video,plugdev -s /bin/bash USERNAME

랜카드의 DHCP를 활성시켜주기위해 systemd 파일을 하나 작성해준다. /etc/systemd/network/50-dhcp.network 파일을 열고 아래와 같이 넣어주면 된다.

[Match]
Name=en*

[Network]
DHCP=yes

이렇게 넣고나서 재부팅해도 사실 DHCP를 이용해서 IP 주소를 못받은 상태가 되어있을텐데, 이것은 “시스템 시작시 DHCP를 이용해서 IP를 받아라” 라고하는, OpenRC 식으로 말하자면 /etc/init.d에 항목이 없기 때문에 그렇다.  따라서, 부팅 이후 명령어 실행이 한 번 더 필요하다.

이제 새로운 시스템으로 부팅을 해야한다. 먼저 chroot를 빠져나오고, 설치 시작 전에 마운트 했던 가상 파일시스템들을 해제해야하는데, 일반적인 umount 명령어로는 해제가 안된다. 옵션을 하나 붙이면 간단하게 해제된다.

exit
umount /mnt/gentoo/boot
umount -l /mnt/gentoo/proc
umount -l /mnt/gentoo/sys
umount -l /mnt/gentoo/dev
umount /mnt/gentoo
reboot

7. 윈도우와 듀얼부팅

본 문서에서 리눅스 단독설치만 설명하는 이유는, UEFI 환경에서 윈도우10과 리눅스의 듀얼부팅은 설정이 꽤 까다롭기 때문인데, 개인적으로 몇 시간이나 젠투, 아치 등등의 공식 문서 등을 뒤져가면서 매뉴얼을 정독해도 쉬운 답을 얻기 어려웠기 때문이다.  간단하게 팁을 공유해드리자면, 우선 EFI 파티션을 /boot에 마운트 해야한다. 현재 chroot상태일테니, Alt+화살표키 등을 눌러 다른 콘솔로 진입한 다음, 마운트 해주면 된다.  어떤 것이 EFI 파티션인지 모르겠다면, fdisk -l /dev/sda명령어를 입력하면 EFI System이라고 나오는 파티션을 보면 된다.

# mount /dev/sda2 /mnt/gentoo/boot

일단은 GRUB부터 설치한다.

# grub-install --target=x86_64-efi --efi-directory=/boot --removable --bootloader-id=GRUB

위의 명령어를 실행하고나면 /boot/EFI/Boot/bootx64.efi라는 파일이 생성된다.  아마 윈도우즈10의 EFI 파일은 /boot/EFI/Microsoft라는 디렉토리에 Boot 디렉토리와 Recovery 라는 디렉토리로 이루어져있을 거다. 여기서부터가 함정 아닌 함정이며, 개인적으로 몇 시간이나 헤매게 만든 요인인데, 사실 이 디렉토리의 구조는 크게 상관이 없다. EFI 디렉토리 내에서라면 어떤 폴더가 있든 크게 상관이 없기 때문이다.  우선, 개인적으로 보기 쉬운 관리를 위해 /boot/EFI/Boot/bootx64.efi라는 파일을 /boot/EFI/Gentoo/Boot/bootx64.efi 라는 위치로 변경했다.  그런다음 적용을 시켜 cfg 파일을 생성하면 되는데, 이 상태에서는 윈도우10이 설치된 파티션을 제대로 인식할 수 없다.  따라서 패키지 하나를 설치한 다음, /run이라는 가상 파티션의 하위 디렉토리 하나를 마운트해야한다.

# emerge -q sys-boot/os-prober
Alt-화살표 키를 눌러 chroot가 아닌 다른 콘솔로 넘어간다.
# mkdir -p /mnt/gentoo/run/udev
# mount -o bind /run/udev /mnt/gentoo/run/udev
# mount --make-rslave /mnt/gentoo/run/udev

이제 grub-mkconfig -o /boot/grub/grub.cfg 명령어를 실행하면 반드시 윈도우를 발견했다고 나와야한다.

# grub-mkconfig -o /boot/grub/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.4.80-gentoo-r1-x86_64
Found linux image: /boot/initramfs-5.4.80-gentoo-r1-x86_64.img
Found Windows Boot Manager on /dev/sda2@/EFI/Microsoft/Boot/bootmgfw.efi
done

이제 EFI에 젠투를 추가해준다.

# efibootmgr -c -d /dev/sda -p 5 -L "Gentoo" -l '\EFI\Gentoo\Boot\bootx64.efi'

위의 명령어에서 -p 5는 젠투가 설치된 파티션 번호이니 자신의 시스템에 맞게 수정해서 적어줘야한다.  이렇게 하고나서 efibootmgr -v 명령어를 실행해보면 바이오스로부터 현재 등록된 EFI 부팅목록이 출력되는데, 아마 Boot0000* Windows Boot Manager  HD(2,GPT)Boot0001* Gentoo  HD(2,GPT)가 보일 것이다.  HD뒤의 숫자는 하드디스크 숫자이니 각자 환경에 따라 다르게 나올 거다.

아직 끝나지 않았다.  왜인지는 모르겠으나, 원래는 이것까지만 하면 EFI에서 목록이 뜰 것으로 예상됐으나 여전히 윈도우로 부팅이 됐다.  따라서, 윈도우의 부트로더를 수정하기로 했다.  젠투를 재부팅하면 분명 윈도우10으로 부팅될텐데, 자세한 사항은 생략하고, 제어판의 전원 관련 항목에서 빠른시작켜기를 꺼야하며, 만약에라도 혹시나 메인보드의 BIOS 설정에서 Safe Boot 혹은 Secure Boot가 켜져있을 경우 이것 역시 꺼야한다.

관리자 권한으로 CMD나 파워쉘을 열고 몇 가지 작업을 더 해줘야한다.  bcdedit라는 명령어를 치면 2가지 혹은 3가지 항목이 출력될텐데, 여기서 우리는 딱 2가지 IdentifierDescription만 확인하면 된다.  아까 추가한 GentooDescription 항목에 나올텐데, 그것의 Identifier를 복사해서 아래의 명령어를 실행해준다.  Identifier 양 옆의 중괄호 { }는 꼭 넣어야한다.

bcdedit /set {Identifier} path \EFI\Gentoo\Boot\bootx64.efi

그런다음 다시 bcdedit명령어를 실행하면 {fwbootmgr}이라는 Identifier에 Windows와 Gentoo 2개의 Identifier가 나올 것이다.  여기서 부팅 타이머, 기본 부팅값 등은 bcdedit 명령어 사용법과 관련해서 구글링 해보면 자세히 나온다.

젠투를 1번으로 등록하기: bcdedit /set {fwbootmgr} displayorder {Identifier} /addfirst
윈도우 부트로더 타이머 변경: bcdedit /set {fwbootmgr} timeout 5

여기서부터 아마도 컴퓨터마다 조금씩 다를 것 같은데, 이 상태에서 윈도우를 재부팅하면 윈도우 부트로더에서 부팅 메뉴를 보여줘야할 것으로 예상됐었다.  하지만 내 컴퓨터의 경우 BIOS 부팅 항목에 하드디스크 메뉴에 윈도우와 젠투를 선택할 수 있게 나왔고, 젠투를 선택함으로써 Grub이 실행됐다.  Grub을 통해서 윈도우와 젠투 모두 정상적으로 부팅됐다.

8. 부팅 이후
만약 새로운 시스템으로 부팅이 되지않는다면, 공식위키를 보면서 어떤 절차가 빠졌는지 확인해본다.

이상없이 부팅이 됐으면, 6번에서 언급한대로 ifconfig 명령어를 쳐보면 분명 IP 주소가 안잡혀있을 거다. 아래의 명령어로 DHCP 및 네트워크 관련 서비스 데몬들을 활성화하자.

# systemctl enable systemd-networkd.service 
# systemctl start systemd-networkd.service
# ln -snf /run/systemd/resolve/resolv.conf /etc/resolv.conf
# systemctl enable systemd-resolved.service
# systemctl start systemd-resolved.service
# systemctl enable NetworkManager.service

그외 다른 비활성화 되어있는 서비스들을 활성화한다.

# systemctl enable syslog-ng@default
# systemctl enable logrotate.timer
# systemctl enable logrotate.service

만약 systemctl이라는 명령어가 에러를 내보내면, 그건 systemd로 부팅되지 않았다는 얘기다. /etc/default/grub 파일을 열고 GRUB_CMDLINE_LINUX 항목을 다시 보자. 제대로 되어있는게 맞다면 아래의 명령어로 GRUB을 재설치 해준다.

# grub-install /dev/sda
# grub-mkconfig -o /boot/grub/grub.cfg

저널링 동작을 위해 머신 ID를 만든다.

# systemd-machine-id-setup

호스트 이름을 설정한다..

# hostnamectl set-hostname HOSTNAME

로케일을 설정한다. 이 부분은 위의 설치과정에서 공식위키를 보고 진행했었다면 따로 안해줘도 된다. 안해줬다면 아래의 명령어로 가능한데, 개인적으로 로케일은 한글이든 영문이든 utf8을 쓰는 것을 추천한다. 영어라면 en_US.utf8이고, 한글은 ko_KR.utf8이다.  먼저, /etc/locale.gen파일에 2개의 로케일을 넣어준다.

en_US.UTF8 UTF-8
ko_KR.UTF8 UTF-8

그런 다음, 로케일을 생성하고 eselect에서 지정해준다.  사실 systemd 환경에서는 localectl 명령어 하나만으로 해결이 가능하지만, 공식매뉴얼이 OpenRC 기준으로 설명이 되어있어 확실하지 않은 탓에 같은 명령어를 여러번 실행한다.

# locale-gen
# eselect locale list
# eselect locale set 6 
# localectl set-locale en_US.utf8

9. KDE 설치
KDE 설치는 사실 간단하다. 어차피 X가 의존성으로 묶여있어서 설치할 때 같이 딸려오니 따로 신경안써줘도 되며, 나중에 별도로 XDM만 설치해주면 끝난다. 다만, KDE 메타패키지에 빠진 프로그램들이 너무 많아서, KDE 빌드 이후에도 계속 설치해줘야할 프로그램들이 너무 많다는 정도.

먼저 시스템의 프로파일을 변경해줘야한다.

# eselect profile list

여기서 default/linux/amd64/17.1/desktop/plasma/systemd 항목을 선택한다. kde/systemd가 아니라 plasma/systemd를 선택해야하는데, 왜냐하면 plasma가 KDE의 최신버전인 5의 새로운 이름이기 때문이다.

변경된 시스템 프로파일을 적용해준다.

# emerge -aqvuDN @world

내 설치 진행에서는 2가지의 에러가 났는데, 하나는 python 패키지의 circular dependencies 즉 의존성이 돌고도는 현상이 생겼고, 다른 하나는 dbus의 별도 USE 설정이 필요했다.

시간이 상당히 오래 걸린다.  내 기억에 3시간 넘게 걸렸던 것 같다.

먼저, 빨간 글씨로 The following USE changes are necessary to proceed: 라고 뜰텐데, #으로 시작하는 라인부터 초록색으로 나오는 라인까지 쭉 복사해서 /etc/portage/package.use/dbus라는 파일에 넣으면 된다.  그런 다음 다시 emerge -aqvuDN @world 명령어를 실행해주면 python의 circular dependencies의 에러만 나올텐데, 메시지를 잘 읽어보면 해결책을 제시해준다.

* Error: circular dependencies:

(dev-lang/python-3.8.6:3.8/3.8::gentoo, ebuild scheduled for merge) depends on
(dev-db/sqlite-3.33.0:3/3::gentoo, ebuild scheduled for merge) (buildtime_slot_op)
(dev-libs/icu-67.1:0/67.1::gentoo, ebuild scheduled for merge) (buildtime_slot_op)
(dev-lang/python-3.8.6:3.8/3.8::gentoo, ebuild scheduled for merge) (buildtime)

It might be possible to break this cycle
by applying any of the following changes:
- dev-lang/python-3.8.6 (Change USE: -sqlite)
- dev-db/sqlite-3.33.0 (Change USE: -icu)

하단의 2줄을 보면 -sqlite를 하든 -icu를 하든 하라고 하는데, icu는 Internationalization Components for Unicode 즉, 유니코드에 관련된 플래그이므로 꼭 있어야한다.  sqlite는 데이터베이스인데 보통 mysql을 많이 쓰므로, sqlite를 제거하기로 한다.  USE="-sqlite" emerge -aqvuDN @world 하고 진행해도 되지만, 난 sqlite를 아예 사용할 계획이 없으므로 /etc/portage/make.confUSE에 넣기로 했다.

KDE 설치의 필수 패키지는 아래와 같다.  특히 plasma-meta에 250개, kde-apps-meta에 380개가 넘는 패키지를 빌드하기 때문에 상당히 오랜 시간이 걸린다.  plasma-meta는 대략 3시간 이상 걸렸고, kde-apps-meta는 거의 24시간이 넘었던 것 같다.  kde-apps-meta는 선택사항이므로, 원하는 프로그램만 골라서 해도 되며, 혹은 일단 kde-plasma/plasma-meta 까지만 설치한 뒤 재부팅하여 GUI 환경에서 kde-apps/kde-apps-meta를 설치해도 된다.  kde-apps의 목록은 여기에 있다 https://packages.gentoo.org/categories/kde-apps

당연하겠지만 한글 입력이 필요할텐데, 원래는 우분투 등 여러 배포판에서 널리 쓰이는 ibus로 진행했으나, 막상 써보니 카카오톡과 페이스북에서 한글 입력에 심각한 오동작이 생겨서 다른 입력기를 찾아봤으며, 검색결과 다방면에서 크게 이상이 없는 fcitx를 설치하기로 했다.  ibus의 경우 Qt 라이브러리 및 플라즈마 데스크탑에 ibus를 넣어서 컴파일할 수 있는 장점이 있어서 이 시점에서 미리 USE를 설정해주어 나중에 재컴파일 하는 귀찮은 일을 방지할 수 있지만, fcitx는 다행히 따로 필요없었다.

# emerge -q app-i18n/fcitx
# emerge -q app-i18n/fcitx-configtool
# emerge -q app-i18n/fcitx-hangul
# emerge -q app-i18n/fcitx-qt5

우측 Alt키를 한영키로 쓸 수 있게끔 키보드 배열을 변경할 수 있다.  /usr/share/X11/xkb/keycodes/evdev 파일을 열고 아래와 같이 수정한다.

주석처리 혹은 삭제
<RALT> = 108;
<HNGL> = 130;
추가
<HNGL> = 108;

이제 KDE 기본 패키지 빌드를 시작하자.  그리고 당장 웹브라우저가 필요할테니, 그래도 가장 빨리 설치할 수 있는 Firefox를 소스코드가 아닌 미리 컴파일 되어있는 바이너리로 설치한다.

# emerge -q kde-plasma/plasma-meta
# emerge -q kde-plasma/plasma-pa
# emerge -q kde-apps/konsole
# emerge -q app-i18n/ibus-hangul
# emerge -q www-client/firefox-bin

SDDM을 활성화하고, 재부팅을 해보자. 사실 재부팅은 필요없지만, 젠투가 부팅하자마자 바로 GUI로 넘어가는 것을 확인하기 위해서 재부팅을 하자.

# systemctl enable sddm.service

만약 sddm이 없다는 메시지가 뜨면 설치해주면 된다.

# emerge -q x11-misc/sddm
# emerge -q kde-plasma/sddm-kcm

그외 필요한 KDE 프로그램들은 여기서 볼 수 있다.https://www.kde.org/applications/

재부팅한 이후 가장 시간이 오래 걸리는 메타 패키지를 설치한다.

# emerge -q kde-apps/kde-apps-meta

만약 X가 설치되지 않았다면, 2개의 패키지만 설치해주면 된다.

# emerge -q x11-base/xorg-server
# emerge -q x11-base/xorg-drivers

설치가 모두 끝났으면, revdep-rebuild명령어로 패키지들의 의존성 관계를 점검한다.  일반적인 환경에서는 실행할 일이 없는 명령어지만, 그래도 혹시 모르니 체크한다.

메모리에 올라온 모듈을 확인해서 그래픽카드 드라이버가 올바르게 로딩됐는지 보자.

# lsmod | grep nvidia

만약 모듈이 로딩된 게 없다면 왜 안됐는지 확인을 해봐야하는데, 일단 커널 메시지를 통해 확인한다.

# dmesg | grep -i nvidia
[ 6.437135] NVRM: The NVIDIA NVS 5400M GPU installed in this system is
NVRM: supported through the NVIDIA 390.xx Legacy drivers. Please
NVRM: visit http://www.nvidia.com/object/unix.html for more
NVRM: information. The 455.28 NVIDIA driver will ignore
[ 6.437137] NVRM: No NVIDIA graphics adapter found!

내가 설치를 진행한 구형 노트북 (Lenovo ThinkPad T530)에서는 Legacy라고 한다.  즉, 구형이라 신형 드라이버가 지원하지 않는 하드웨어다.  이 경우, /etc/portage/package.mask라는 디렉토리를 만들고, 특정 버전 이상은 막아야한다.

# mkdir /etc/portage/package.mask
# nano /etc/portage/package.mask/nvidia-drivers
>x11-drivers/nvidia-drivers-400
# emerge -aqvuDN @world

그리고, 일반 사용자로 그래픽카드 드라이버를 쓸 수 있게 권한을 추가시켜야한다.  만약 일반사용자의 유저이름이 larry라면,

gpasswd -a larry video

한글입력기를 구동하기 위해 ~/.xprofile 파일에 아래의 내용을 추가해준다.

export XMODIFIERS=@im=fcitx
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
eval "$(dbus-launch --sh-syntax --exit-with-session)"

페이스북이나 카카오톡 등에서 한글입력시 오동작을 일으키지 않으려면 위의 내용을 입력한 뒤 재부팅해서 한 가지를 더 해줘야하는데 “Fcitx 설정”을 실행시키고 한글 키보드를 추가한 뒤, 한글키보드 설정 (Hangul을 더블클릭) 해서 두벌식 설정 하단에 있는 “단어 단위 입력”을 활성화시켜줘야한다.

최종적으로 현재 USE를 적용한 상태에서 모든 패키지를 재검사하여 설치한다.

# emerge -aqvuDN @world

10. 끝
총 5대의 설치를 진행하면서 메모를 해두려고 노력했으나, 의외로 메모하지 못한 곳에서 필요한 부분이 많았고, 그것들 대부분을 기억에 의존하여 작성하였다. 초보들이 보기엔 상당히 불편한 설치기이지만, 사실 젠투는 초보가 설치하기에는 적합하지 않다고 생각하고, 리눅스라는 운영체제에 익숙하지 않다면 절대로 추천하고 싶지 않은 배포판이다. 설령 리눅스에 익숙하더라도 성향에 맞지않으면 절대 오래 쓰지 못하는 배포판이기도 하다.

내 경우는, 내 성격과 젠투의 장단점이 잘맞아서 아주 만족스럽게 쓰고있다. 또한, 전혀 기대하지 않았던 KDE 5 Plasma가 너무 마음에 들어서 이것 역시도 아주 만족스럽다. 젠투는 쓰면 쓸수록 점점 안정적으로 변하는 배포판이라고도 하는데, 그것은 젠투가 사용자로 하여금 시스템의 구성에 더욱 더 시간을 사용하게 만들기 때문이다. 이것이 적성에 맞으면 잘쓰게 되고, 이런 데에 시간을 쓸 수 없다면 최악의 배포판이 되는 것이다. 이 경우라면 차라리 데비안이 훨씬 낫다. 한 번 설치하면 재부팅 외엔 거의 손댈 곳이 없는데다, 지금까지 내가 본 2대의, 전 세계적으로 uptime 길다고 알려진 서버들 모두 데비안을 썼다. 하나는 uptime이 3,000 days인가 그랬고, 다른 하나는 2,396 days였다.

젠투를 이미 2004년부터 썼지만 그때는 사실 젠투를 제대로 이해하고 쓴 것은 아니라고 생각한다. 지금은 나름 어느정도 이해한다고 생각하는 시점에서 보면, 젠투는 너무나도 잘만들어진 배포판이라고 생각하고, 사용자가 원하는대로 패키지 하나하나를 세밀하게 설정해서 설치할 수 있게 해주고, 그것을 유지/보수할 수 있게 제공해주는 각종 컬러풀한 CLI 툴들이 아주 잘만들어져서 부족한 점이 없다고 생각될 정도다.

다만 아쉬운 점은, 젠투를 개발하는 젠투 재단과 그 커뮤니티 자체가 불안정하다는 점인데, 이것 때문에 젠투라는 배포판 자체가 오랫동안 지속될지를 걱정해야할 판이라는 거다. 우분투도 사실 캐노니컬의 상태가 썩 좋지만은 않기 때문에, 젠투도 우분투도 망해서 없어지면 결국 정착할 곳은 데비안이 되겠지만, 현재로서는 젠투에 아주 만족한다.