대망의 make.conf 파일 편집이다. 사실 이것을 지금하지 않아도 부트스트랩을 하는데는 문제가 없지만, CFLAGS 때문에 그냥 미리 다 세팅해놓고 시작했다.

사실 젠투의 최적화는 여전히 말이 많은 부분이고 논쟁의 여지가 있는 부분이다. 따라서, make.conf의 CFLAGS는 별로 의미없는 옵션일지도 모르겠지만 1편에서도 적었듯이 내가 만족스럽다는데 누가 뭐라고 하겠는가. 이 글을 읽는 분이라면, 누가 이래든 저래든 젠투설치 하실 분이라고 생각한다. 젠투 최적화의 허와 실에 대해서 알고싶으신 분은 http://kldp.org/node/81215 글을 읽어보시면 되겠다. 아마 매우 도움이 될 거다.

먼저 필자의 make.conf 파일을 올려서 설명해드린다. 내 블로그를 좀 읽어보신 분은 보셨겠지만 나는 전산학도도, 전산업계에 근무했던 사람이 아니다. 어디까지나 금융권에서 예금이랑 대출상담하면서 직장생활했었고 단지 리눅스는 취미로 했을 뿐이다 (2014년 9월 개정하는 현재는 전산업계에 근무하고 있다).

1편에서 얘기하면 까먹으실까봐 지금 얘기한다.
글쓴이의 시스템은 인텔 제온 E5-2643, 램64기가, nVidia 쿼드로 K4000 정도다.

/etc/make.conf 파일은 대략 3개의 섹션으로 나뉜다고 볼 수 있다(라고 생각한다).
첫번째 섹션은 전체적인 환경을 설정하는 섹션, 두번째는 USE Flag, 세번째는 미러링서버 지정이다.
USE Flag도 전체적인 환경을 설정한다고 볼 수 있지만 USE Flag 자체만으로도 상당히 어렵기 때문에 굳이 나눴다.

CHOST="x86_64-pc-linux-gnu"

64비트로 빌드할 것을 정한다. 32비트로 원하시면 CHOST="i686-pc-linux-gnu"로 하시면 된다.
보다 자세한 사항은 http://en.gentoo-wiki.com/wiki/Safe_Cflags/Intel 여기를 참고하시면 된다.

CFLAGS="-march=corei7-avx -msse -msse2 -msse3 -mmmx -O2 -pipe -fomit-frame-pointer"

먼저 이 부분에 대한 자세한 사항은 여기를 클릭하시라.
내가 프로그래머가 아니니 설명이 틀릴 수도 있다는 점을 이해부탁드린다.
코어2듀오일 경우 mtune=core2 -march=core2 옵션을 붙이시면 된다.
mssse3 msse3는, 사실 gcc 홈페이지에도 어떻게 붙이면 어떻게 된다는 정확한 설명이 없는데,
cat /proc/cpuinfo 하시면 나오는 부분이니 없으면 빼시고, 있으면 넣으시면 되겠다. 필자는 저렇게 넣고
이상없이 잘 됐다. mssse3이 msse3보다 나중에 나온 명령어인데, mssse3이 msse3까지 포함하는건지 아닌지
설명이 없어서 그냥 넣어버렸다.
-O3은 최적화의 레벨을 정하는 건데, 보통 가장 권장되는 옵션은 -O2이다. -O3가 가장 높은 레벨인데 사실 -O9
까지 있지만 O3 이상은 다 똑같단다. 그리고 O3로 컴파일했다고 해서 얻는 이득보다는 손해가 더 많고 O3로 해봐야
더 느려질 수 있다.
-pipe-fomit-frame-pointer는 권장되는 옵션이다. 그래서 보통 다들 꼭 넣는다. 나도 뭔지는 모른다.
설명을 하자면, fomit-frame-pointer는, 쓰이지않는 포인터를 생략해버린다는 옵션인데 그게 무슨 말인지는
잘 모르겠다.
보통 가장 일반적인, 즉 누구에게나 전부 이상없이 빌드할 수 있는 옵션 플래그를 불러보자면, 아마도

CHOST="i686-pc-linux-gnu"
CFLAGS="-march=native-O2 -pipe"

정도이리라 싶다.

CXXFLAGS="${CFLAGS}"

대충 감이 오실 거다. 위에꺼랑 똑같이 하겠다는 거다.

MAKE_OPTS="-j17 -l32"

j값은 자기 컴퓨터가 가진 CPU 코어 갯수에 +1을 하면 된다. 총 작업수를 의미한다.
l값은 CPU 코어 갯수에 2를 곱한다. 코어가 16개 (물리 8 + 하이퍼쓰레딩 8 = 16)라면 숫자는 32가 된다.

VIDEO_CARDS="intel i965"

그래픽카드를 지정하는 것인데, 위의 예제는 인텔통합칩셋을 쓰시는 분을 위한 예제이다.

ALSA_CARDS="hda-intel"

역시 인텔통합칩셋에서 사용하는 사운드카드의 드라이버명이다. 참고로 GM45 칩셋이다. 그외 칩셋들은 “ALSA_CARDS”로 구글링하시면 나올거다. 대충 눈치껏 보고 넣으면 된다.

ACCEPT_KEYWORDS="amd64"

64비트로 빌드시 amd64를 넣고, 32비트일시 x86을 넣으시면 된다. 참고로 인텔 코어2듀오더 amd64라고 한다. 틸드(~)를 넣으면 소프트웨어를 최상위 불안정 버전까지 써보겠다는 의미가 된다. 참고로, 빌드 중 에러가 간간히 난다.

LINGUAS="en ko"

언어를 세팅해준다. 본인은 미국에 살고있기 때문에 컴퓨터에 통째로 한글만 나오면 좀 이상하다. 그리고 여기 사람들이 내 노트북의 모니터를 들여다볼 때 영어가 아니면 좀 불편해하는 감이 없지않아 있다. 그래서 일단 영어를 가장 먼저 했고 다음에 한국어를 넣었다. 사실 이게 순서가 상관은 없을 것 같은데, 그래도 혹시 몰라서 이렇게 했다.

FEATURES="ccache"

반복되는 컴파일의 캐쉬기능을 넣는 옵션이다. 다만, 이 옵션은 ccache라는 패키지를 빌드해야만 하는데, 그 전까지는 적용되지 않는다. 부트스트랩할 때부터 넣어놔도, 알아서 무시하고 빌드한다. 난 귀찮아서 미리 넣었다.

CCACHE_SIZE="2G"

위의 ccache의 캐쉬사이즈다. 캐쉬는 하드에 저장된다.

CCACHE_DIR="/var/tmp/ccache"

ccache의 경로를 지정한다. 이건 바꾸지 말자.

INPUT_DEVICES="evdev mouse keyboard synaptics"

입력장치를 나열한다. 노트북을 쓰신다면 시냅틱 마우스패드 입력기를 넣는다.

다음은 USE Flags다. 전부 다 설명할 수 없으니 USE flags의 설명이 나온 웹사이트 링크를 드린다.
http://www.gentoo.org/dyn/use-index.xml
나무위키의 설명을 한 번 보시길 추천해드린다.
https://namu.wiki/w/%EC%A0%A0%ED%88%AC%20%EB%A6%AC%EB%88%85%EC%8A%A4#s-5.3

USE 플래그는, 시스템 전역 세팅을 위한 것인데 쉽게 설명드리자면, 만약 ffmpeg를 플래그에 넣었다면 X와 GNOME 혹은 KDE를 빌드할 때 동영상 관련 프로그램을 컴파일시 ffmpeg를 포함시켜서 빌드를 하게 된다.

아래는 필자의 세팅이다. 필자는 GNOME을 안쓰고 KDE를 쓰기로 했다. 남들 다 쓰는 GNOME을 안쓰는 이유는, 남들이 다 쓰는 걸 쓰고싶지 않아서다. 그래서 젠투를 쓰고 맥을 쓰는 이유지. 그외에도 쿠분투의 KDE를 보고 리눅스가 이렇게 발전했는가를 몸소 체험했다. 너무 예뻤다. 마지막으로, 미국에서 잘나가는 핸드폰 중 하나인 블랙베리의 프로그램들이 QT기반이란다.
GNOME으로 컴파일 하시고 싶으면 -qt4 -kde 하시고 gtk gnome 넣으시면 되겠다. 굳이 -qt4 -kde를 하진 않아도 된다. kde나 qt를 사용하는 프로그램을 절대로 빌드하고싶지 않다면 -를 쓰면 된다.
필자는 abc 순서대로 적어놨다. 한줄로 길게 늘어뜨리면 편집할 때 귀찮다.

USE="-3dnow -3dfx  
a52 aac acpi apm alsa apache2 avahi aqua autoipd
berkdb bluetooth 
cjk curl cups crypt 
dga directfb drl dts  dvd dvdr dbus 
fbcon fbcondecor ffmpeg firefox flac 
gcj gd gif gpm gzip  
hal 
imagemagick imap innodb ipod -ipv6 iconv 
java javascript jpeg jpeg2k 
kde 
ldap 
-mozila mp3 mp4 mpeg msn -matrox mysql mysqli mhash mng 
ncurses networkmanager nls 
ogg opengl 
pcmcia pdf perl php png pnp -postgres python plasma 
qt4 quicktime 
readline ruby 
samba subversion ssl -slp svga szip sql svg smp 
tcl threads tk truetype tiff tcpd 
unicode usb 
vhosts vorbis -voodoo3 vim-syntax 
wifi win32codecs webkit 
X Xaw3d x264 xml xmlrpc xvid xcomposite 
zeroconf zlib"

나머지 미러설정인데, 이건 1편에서의 mirrorselect 명령을 실행했으면 설정되어있는 부분이다.

이제 대략의 설치할 준비는 다 끝났다. 사실 설치준비가 별 거 없다.
네트워크 설정 -> 파티션 준비/포맷 -> make.conf 파일 설정
이게 다다. 다만 우분투처럼 마우스 클릭만으로 끝나는 설치가 아니다보니 어렵게 느껴질 뿐인 것이고, 또한 다른 글에서 언급했듯 파티션이라던가 하는 아주 기본적인 내용에 대한 기초가 없어서 어렵게 느껴지는 것이다.

이제 루트디렉토리를 / 에서 /mnt/gentoo로 바꿔서 부트스트랩을 시작한다.

chroot /mnt/gentoo /bin/bash

환경설정을 읽어와야한다.

env-update; source /etc/profile

젠투 Portage의 트리를 받아와야한다. 이게 뭐하는 거냐면, 우분투/데비안 유저들이 apt-get install xchat2 라고 입력하면, 의존성 관계되는 패키지를 자동으로 계산해서 필요한 파일들을 모조리 받아와서 설치하는 시스템인데 젠투의 emerge도 그런 역할을 한다. 다만, Portage는 -BSD의 Port는- 프로그램들의 버전, 의존성관계, 컴파일하는 방법 등이 기술된 파일/디렉토리를 받아와서 오프라인이더라도 패키지의 검색이 가능하게끔 되어있다. 그래서 주기적으로 이 트리를 갱신해줘야한다.

emerge-webrsync

예전에는 rsync 프로토콜을 이용해서 한 5분쯤 걸리는 거 같은게 엄청나게 많은 것들을 보여줬는데, emerge-webrsync는 그냥 대충 간단한 메시지 정도만 보여준다.

이제 프로파일을 선택해야한다. 프로파일이란, 이 시스템이 최종적으로 어떤 상태로 갈 것인지를 정해서 시스템이 해당 목표로 빌드되도록 할 수 있다. 프로파일의 목록을 보자.

# eselect profile list
[1]  default/linux/amd64/13.0 *
[2]  default/linux/amd64/13.0/selinux
[3]  default/linux/amd64/13.0/desktop
[4]  default/linux/amd64/13.0/desktop/gnome
[5]  default/linux/amd64/13.0/desktop/gnome/systemd
[6]  default/linux/amd64/13.0/desktop/kde
[7]  default/linux/amd64/13.0/desktop/kde/systemd
[8]  default/linux/amd64/13.0/developer
[9]  default/linux/amd64/13.0/no-multilib
[10] default/linux/amd64/13.0/x32
[11] hardened/linux/amd64
[12] hardened/linux/amd64/selinux
[13] hardened/linux/amd64/no-multilib
[14] hardened/linux/amd64/no-multilib/selinux
[15] default/linux/uclibc/amd64
[16] hardened/linux/uclibc/amd64

지금은 아무런 프로파일도 선택되어있지 않으므로 1번에 * 표시가 되어있을 거다. 만약 그놈 데스크탑으로 빌드를 하고싶다면 4번이나 5번을 하면 된다. 참고로 systemd는 현재 날짜 기준으로 문제가 많으므로, 4번을 선택하면 된다.

eselect profile set 4
eselect profile list

4번에 * 표시가 되어있는 것을 볼 수 있다.

이것만 끝나면 신발끈(Boot Strap)을 묶자. 신발끈을 묶는 과정은 젠투의 패키지 시스템인 Portage와 필수패키지에 해당하는 gcc 등의, 시스템을 빌드할 수 있는 최소한의 패키지 8개로 구성되어있다.

cd /usr/portage
scripts/bootstrap.sh

필자의 시스템에서는 대략 1시간 가량 걸렸다. 여기까지가 Stage 1에 해당한다.
신발끈이 안묶어진다고 해서 포기하거나 우울해지지 말자. 사실 신발끈 안묶어지는 발이 많다고 한다. 근데, 사실 신발끈 못묶는다고 해서 그 사람이 나사가 하나 빠졌다던가 소위 말하는 병신은 아니지않나. 안되는 사람도 많으니, 안되는 거 붙잡고 삽질하지 말고 과감하게 Stage 3으로 넘어가시라. 그리고나서 시스템 전체를 다시 통째로 컴파일하면 Stage 1부터 한거랑 똑같이 된다.

참고로, 젠투 설치한다고 컴퓨터 끄지도 못하고 계시는 분들이 많아서 말씀드린다만 설치하다가 밖에 오랫동안 나가봐야할 일이 있으면 끄셔도 된다. 방법을 알려드린다.

먼저 chroot에서 빠져나가야한다.

exit

다음 설치하다만 파티션들을 언마운트 해야한다.

umount /mnt/gentoo/proc
umount /mnt/gentoo

스왑파티션을 off 해준다.

swapoff /dev/sda4

이제 종료한다.

halt
# 또는
poweroff

그런다음, 나중에 다시 설치할 때는 젠투설치씨디로 부팅을 한뒤, 아래와 같이 한다.

mount /dev/sda3 /mnt/gentoo
mount -t proc none /mnt/gentoo/proc
mount --rbind /sys /mnt/gentoo/sys
mount --rbind /dev /mnt/gentoo/dev
swapon /dev/sda4
chroot /mnt/gentoo /bin/bash
env-update; source /etc/profile #이거 빼먹으면 안된다

다음 나머지를 이어서 하시면 되겠다.
Stage 2부터는 다음편에 한다.