
안녕하십니까! 잼니크입니다.
자! 이제 드디어(?) 젠투 리눅스를 태블릿에 설치해 보려고 합니다.
먼저 젠투 핸드북을 펼칩시다!
https://wiki.gentoo.org/wiki/Handbook:AMD64
Gentoo AMD64 Handbook - Gentoo Wiki
The Gentoo Handbook is an effort to centralize documentation into a coherent handbook. This handbook contains the installation instructions for an Internet-based installation and some additional sections for working with Gentoo's native software tools such
wiki.gentoo.org
이전에 Gentoo 리눅스(5) 빌드지옥의 구원자 편의 시작처럼 부팅 한 다음, 진행합니다.
링크 아래에 남깁니다.
2025.04.05 - [IT/Linux] - Gentoo 리눅스(5): 빌드지옥의 강력한 구원자 (1)
Gentoo 리눅스(5): 빌드지옥의 강력한 구원자 (1)
안녕하세요 잼니크입니다.Gentoo 리눅스 설치를 시작해 보겠습니다!!!!!!라고 패기 넘치게 도전하는 당신께... 먼저 빌드 지옥에 강력한 구원자를 하나 투입하고 시작하겠습니다. 설치를 진행하
gam1532.tistory.com
이미 이 글에서 대부분의 내용은 그대로 다뤘기 때문에 이 글을 참고 해 주시고, 그다음 파티션 설정 부분부터 차이가 있습니다.
이 마개조(?) 테블릿의 디스크는 MMC로 되어 있습니다. 그리고 확장할 수 있는 디스크는 Micro SD 카드입니다.
이런 장치는 리눅스에서 많이 쓰이는 ext4 같은 파일 시스템 보다는 f2fs 같이 플래시 드라이브를 위한 파일 시스템을 쓰는 게 더 낫기 때문입니다.
그럼 파티션 설정 부터 진행해 보겠습니다.
# 쉘이서 실행
fdisk -l

장치 이름은 /dev/mmcblk0 입니다. 스크린 숏을 자세히 보면 리눅스 파티션이 있습니다... 사실 저는 블로그 글쓰기 위해 최소 3번 정도 반복하는 것 같습니다. 첫 번째는 되는지 확인을 위해, 두 번째는 간단하게 문서화를 위한 메모 작성 및 검증을 위해, 마지막으로 블로그 같이 정리하기 위해 최소 3번입니다.
반복 학습이 실력 향상의 지름길이고, 문서를 작성하면서 한번 더 정리할 수 있으니까요.
저 파티션을 사정없이 삭제 해 줍시다!
# 쉘에서 실행
fdisk /dev/mmcblk0
# 1번 파티션 제거
Command (m for help): d
Partition number (1-3, default 3): 1
# 2번 파티션 제거
Command (m for help): d
Partition number (1-3, default 3): 2
# 3번 파티션 제거
# 3번은 마지막이므로 알아서 선택해 줍니다.
Command (m for help): d
# 저장하고 종료 합니다
Command (m for help): w
# 파티션이 삭제 되었는지 확인
fdisk -l


파티션을 삭제해서 목록에 나오지 않습니다. 스크린 숏에 나온 /dev/mmcblk0 boot0 장치는 어떤 장치인지 모르겠습니다.
다시 fdisk 를 실행해서 디스크의 파티션을 만들어 줍시다!
아! 그전에!!!! 이번에 파티션 구성을 아래 표 처럼 하려고 합니다
| 파티션 | 파일시스템 | 크기 |
| /dev/mmcblk0p1 | fat32 | 1GB |
| /dev/mmcblk0p2 | swap | 1GB |
| /dev/mmcblk0p3 | f2fs | 나머지 |
달라진건 첫 번째 파티션은 EFI 부팅을 하기 위한 파일시스템을 fat로 변경했고, 세 번째 파티션은 플래시 메모리를 위한 f2fs 파일시스템을 사용하려 합니다.
자 이제 파티션을 구성해 봅시다!
# 쉘에서 실행
fdisk /dev/mmcblk0
# 첫번째 파티션 생성
Command (m for help): n
Partition number (1-128, default 1): 1
First sector (34-241827806, default 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-241827806, default 241825791): +1G
# 파티션 종류 지정
Command (m for help): t
Selected partition 1
Partition type or alias (type L to list all): 1
# 두번째 파티션 생성
Partition number (2-128, default 2): 2
First sector (2099200-241827806, default 2099200):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2099200-241827806, default 241825791): +1G
# 파티션 종류를 SWAP 으로 지정
Command (m for help): t
Partition number (1,2, default 2): 2
Partition type or alias (type L to list all): 19
# 세번째 파티션 생성
Command (m for help): n
Partition number (3-128, default 3): 3
First sector (4196352-241827806, default 4196352):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (4196352-241827806, default 241825791):
(여기서는 전체 남는 공간을 다쓰려고 공백으로 두고 엔터를 누릅니다!)
# 파티션 종류를 리눅스 루트로 지정
Command (m for help): t
Partition number (1-3, default 3): 3
Partition type or alias (type L to list all): 23
# 저장후 종료
Command (m for help): w
# 확인
fdisk -l /dev/mmcblk0
그러면 이제 원하는데로 만들어졌는지 확인해 보겠습니다.

잘 만들어 진걸로 보입니다. 이제 각 파티션을 포맷합니다.
# 쉘에서 실행
mkfs.vfat -F 32 /dev/mmcblk0p1
mkswap /dev/mmcblk0p2
swapon /dev/mmcblk0p2
mkfs.f2fs /dev/mmcblk0p3

몇 번 설치해 보니 잘 되고 있습니다. (제 피땀 눈물 시간 ㅠ)
이쯤 따라오시면 다음은 뭘 해야 할지 아시겠죠?
마운트 진행한 다음, stage 파일을 다운로드하기 위해 진행합니다!
# 쉘에서 진행
mkdir --parents /mnt/gentoo
mount /dev/mmcblk0p3 /mnt/gentoo
# 부트를 EFI로 하기 위해 실행
mkdir --parents /mnt/gentoo/efi
mount /dev/mmcblk0p1 /mnt/gentoo/efi
cd /mnt/gentoo
# 시간 동기화
chronyd -q
무난하게 넘어갈 겁니다... 계속 진행합시다!
저는 stage 파일을 openrc를 쓰는 desktop 프로파일로 했습니다.
최신버전은 https://www.gentoo.org/downloads/mirrors/ 여기서 확인할 수 있습니다.
다운로드한 다음 압축을 해제합니다.
# 쉘에서 실행
wget https://ftp.lanet.kr/pub/gentoo/releases/amd64/autobuilds/current-stage3-amd64-desktop-openrc/stage3-amd64-desktop-openrc-20250413T165021Z.tar.xz
tar xpf stage3-*.tar.xz --xattrs-include='*.*' --numeric-owner -C /mnt/gentoo
젠투 핸드북에서는 make.conf 파일을 수정해야 하는데... 일단은 넘어갑시다!
하지만 조만간 하게 될꺼니까요... 아래를 실행하면 됩니다!
# 쉘에서 실행
cp --dereference /etc/resolv.conf /mnt/gentoo/etc/
mount --types proc /proc /mnt/gentoo/proc
mount --rbind /sys /mnt/gentoo/sys
mount --make-rslave /mnt/gentoo/sys
mount --rbind /dev /mnt/gentoo/dev
mount --make-rslave /mnt/gentoo/dev
mount --bind /run /mnt/gentoo/run
mount --make-slave /mnt/gentoo/run
chroot /mnt/gentoo /bin/bash
source /etc/profile
export PS1="(chroot) ${PS1}"
그다음은 emerge 저장소를 동기화하고, 프로파일을 선택합니다.
# 쉘에서 실행
emerge-webrsync
eselect profile list
여기서 프로파일을 설정합니다. 저는 어차피 gnome으로 갈거라 desktop/gnome 프로파일을 선택했습니다. (명령에는 따로 적지 않았으니 핸드북에 나온 내용을 참고하세요)
그다음에... make.conf 설정을 본격적으로 하겠습니다!
먼저 distcc를 위한 설정입니다.
make.conf을 수정해서 아래와 같이 만들어 줍시다!
# 쉘에서 실행
nano /etc/portage/make.conf
# 아래와 같이 수정
COMMON_FLAGS="-O2 -pipe"
CFLAGS="${COMMON_FLAGS}"
CXXFLAGS="${COMMON_FLAGS}"
FCFLAGS="${COMMON_FLAGS}"
FFLAGS="${COMMON_FLAGS}"
LC_MESSAGES=C.utf8
MAKEOPTS="-j4"
추가한 부분은 사실 MAKEOPTS 하나입니다... distcc를 빌드해야 해서... 우선은 태블릿의 힘을 써야 합니다. (하지만 두고 봐라... 설정이 끝나면 distcc의 힘을 발휘할 테니!!!)
그다음 distcc를 설치하고 설정에 들어갑니다. distcc 설정을 진행하면서 ccache 같은 도구도 같이 설정하겠습니다.
# 쉘에서 실행
emerge --ask sys-devel/distcc

distcc설치를 위해 같이 준비할 게 몇 개 있군요... 당장은 참고 인내해서 설치합시다 ㅠ 다행히 덩치는 크지 않아서 수분 내로 끝납니다. 저는 커피 한잔탈 정도의 시간이었으니... 충분히 인내할 수 있다고 생각합니다.
설치가 끝나면 설정에 들어갑시다!
# 쉘에서 실행
nano /etc/conf.d/distccd
사실 저는 설정할 것이 없었습니다만... 혹시 누군가는 수정해야 할 필요가 있을 수 있으니 열어서 한 번쯤 확인해 봅니다.
distcc 서비스를 올려 봅니다!
rc-update add distccd default
rc-service distccd start

저는 일단 오류가 났지만... 일단은 넘어가 줍시다!
다시 make.conf 수정에 들어갑니다... 이때는 빌드에 사용할 파라미터를 알아야 합니다.
먼저 march에 들어갈 정확한 파라미터를 알아야 하므로... 아래 명령을 실행해 줍니다.
# 쉘에서 실행
gcc -### -march=native -x c -
실행하면 뭐가 이것저것 나옵니다... 정신이 대략 혼미해지는데요... 중요한 부분의 시작점은 아래 스크린숏에서 줄 친 부분부터 입니다.

여기 중요한 내용을 모두 make.conf 에 추가해야 합니다. (다만 옵션이 문제가 발생하는 부분도 있는데요... 그건 추후에 제거하도록 하겠습니다)
이것에 대한 링크입니다.
https://blogs.gentoo.org/mgorny/2014/06/23/inlining-marchnative-for-distcc/
Inlining -march=native for distcc
-march=native is a gcc flag that enables auto-detection of CPU architecture and properties. Not only it allows you to avoid finding the correct value of -march= but also enables instruction sets th…
blogs.gentoo.org
일단은 이 내용을 먼저 추가해 줍시다!
# 쉘에서 실행
nano /etc/portage/make.conf
# 아래와 같이 내용 수정
COMMON_FLAGS="-O2 -pipe -march=silvermont
-mmmx -mpopcnt -msse -msse2 -msse3 -mssse3
-msse4.1 -msse4.2 -mno-avx -mno-avx2 -mno-sse4a
-mno-fma4 -mno-xop -mno-fma -mno-avx512f -mno-bmi
-mno-bmi2 -maes -mpclmul -mno-avx512vl -mno-avx512bw
-mno-avx512dq -mno-avx512cd -mno-avx512vbmi
-mno-avx512ifma -mno-avx512vpopcntdq -mno-avx512vbmi2
-mno-gfni -mno-vpclmulqdq -mno-avx512vnni -mno-avx512bitalg
-mno-avx512bf16 -mno-avx512vp2intersect -mno-3dnow -mno-adx
-mno-abm -mno-cldemote -mno-clflushopt -mno-clwb -mno-clzero
-mcx16 -mno-enqcmd -mno-f16c -mno-fsgsbase -mfxsr -mno-hle
-msahf -mno-lwp -mno-lzcnt -mmovbe -mno-movdir64b -mno-movdiri
-mno-mwaitx -mno-pconfig -mno-pku -mprfchw -mno-ptwrite
-mno-rdpid -mrdrnd -mno-rdseed -mno-rtm -mno-serialize
-mno-sgx -mno-sha -mno-shstk -mno-tbm -mno-tsxldtrk -mno-vaes
-mno-waitpkg -mno-wbnoinvd -mno-xsave -mno-xsavec -mno-xsaveopt
-mno-xsaves -mno-amx-tile -mno-amx-int8 -mno-amx-bf16 -mno-uintr
-mno-hreset -mno-kl -mno-widekl -mno-avxvnni -mno-avx512fp16
-mno-avxifma -mno-avxvnniint8 -mno-avxneconvert -mno-cmpccxadd
-mno-amx-fp16 -mno-prefetchi -mno-raoint -mno-amx-complex
-mno-avxvnniint16 -mno-sm3 -mno-sha512 -mno-sm4 -mno-apxf
-mno-usermsr --param l1-cache-size=24 --param l1-cache-line-size=64
--param l2-cache-size=1024"
MAKEOPTS="-j26 -l4"
FEATURES="distcc"
ACCEPT_LICENSE="@EULA @BINARY-REDISTRIBUTABLE @FSF-APPROVED-OTHER @FREE-SOFTWARE @GPL-COMPATIBLE"
USE="dist-kernel"
나중에 오류 나는 부분만 적당히 삭제해 줍니다 ㅋㅋ 저는 COMMON_FLAGS를 한 줄로 적었습니다만... 편의상 적당히 잘랐으니 한줄로 작성하시기 바랍니다.
문서에 따르면 MAKEOPS 부분의 공식은 다음과 같습니다.
J = 2x(리모트서버코어+로컬코어+1)
리모트서버코어 = 8
로컬코어 = 4
J = 26
그중 로컬코어의 숫자인 4를 l에 넣어서 -j26 -l4가 되었습니다.
설정을 계속 진행하겠습니다.
# 쉘에서 실행
/usr/bin/distcc-config --set-hosts "localhost 192.168.0.17"
IP 주소에 있는 192.168.0.17는 gentoosaver(distcc로 빌드 돌릴 서버)의 주소입니다
그 다암... distcc가 잘 되는지... 체크할 겸 CPU 플래그를 확인하는 도구를 설치해 봅니다. 그다음 use 플래그를 추가합니다. 내친김에 gpu 관련된 것도 설정해 보겠습니다.
# 쉘이서 실행
emerge --ask --oneshot app-portage/cpuid2cpuflags
echo "*/* $(cpuid2cpuflags)" > /etc/portage/package.use/00cpu-flags
echo "*/* VIDEO_CARDS: intel" > /etc/portage/package.use/00video_cards
시간대 설정을 진행합니다!
# 쉘에서 실행
ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
이제 한번 설정을 정리해 줍니다
# 쉘에서 실행
env-update && source /etc/profile && export PS1="(chroot) ${PS1}"
이제 커널 설치를 해봅니다!
이번에도 부팅이 목적이기 때문에 이전에 빌드된 커널을 사용할 생각입니다.
# 쉘에서 실행
mount /dev/mmcblk0p1 /efi
emerge --ask sys-kernel/linux-firmware sys-firmware/intel-microcode sys-fs/f2fs-tools
nano /etc/portage/package.accept_keywords/installkernel
# 아래와 같이 작성
sys-kernel/installkernel
sys-boot/uefi-mkconfig
app-emulation/virt-firmware
# 쉘에서 실행
nano /etc/portage/package.use/installkernel
# 아래와 같이 작성
sys-kernel/installkernel efistub dracut
# 쉘에서 실행
emerge --ask sys-kernel/installkernel
mkdir -p /efi/EFI/Gentoo
emerge --ask sys-kernel/gentoo-kernel-bin sys-kernel/gentoo-sources
그다음은 본격적으로 부팅 설정 하겠습니다.
# 쉘에서 실행
blkid

여기서 fstab을 위한 파라미터를 얻을 수 있습니다.
저는 파티션의 UUID인 PARTUUID 부분을 써서 fstab에 기록할 생각입니다.
# 쉘에서 실행
nano /etc/fstab

위 스크린숏을 비교하면서 작성하면 됩니다.
그다음 호스트이름을 만들어 줍니다! 저는 gentablet이라고 했습니다.
끝나면 root 사용자 암호도 만들어 줍니다.
# 쉘에서 실행
echo gentablet > /etc/hostname
nano /etc/hosts
# 아래와 같이 내용 수정
127.0.0.1 localhost gentablet
::1 localhost gentablet
# 쉘에서 실행
passwd
그다음은 시스템 도구들을 설치해 줍시다.
# 쉘에서 실행
emerge --ask app-admin/sysklogd sys-process/cronie app-shells/bash-completion net-misc/chrony sys-block/io-scheduler-udev-rules net-misc/dhcpcd net-wireless/iw net-wireless/wpa_supplicant
rc-update add sysklogd default
rc-update add cronie default
rc-update add sshd default
rc-update add chronyd default
마지막으로... efi 설정을 확인해야 합니다.
# 쉘에서 실행
efibootmgr
이걸 실행하면 EFI 부팅항목이 나옵니다...

뭐가 좀 긴데... 파라미터를 보면 부팅을 위한 설정은 잘 되어 있는 것처럼 보입니다만...
gentoo-kernel-bin을 설치할 경우 initramfs를 사용합니다. (핸드북 중간에 나와있습니다) 그러나 이 파라미터가 없군요...
일단 새로 만들어 줍시다!
# 쉘에서 실행
efibootmgr --create
--disk /dev/mmcblk0
--part 1
--label gentoo
--loader "\EFI\Gentoo\vmlinuz-6.12.21-gentoo-dist.efi"
--unicode "initrd=\EFI\Gentoo\initramfs-6.12.21-gentoo-dist.img"
그럼 아래와 같이 항목이 새로 생깁니다.

새로 만든 항목은 Boot0000이라는 이름이고, 부팅 순서에 가장 처음(0000)으로 되어 있습니다.
이제 새로 만든 걸로 부팅될 것 같네요...
이제 잘 부팅되는지 확인을 위해 재부팅을 해줍시다!
혹시 여러 세션을 열어서 썼다면 exit와 cd 명령은 세션마다 한 번씩 실행해 줍니다.
# 쉘에서 실행
exit
cd
umount -l /mnt/gentoo/dev{/shm,/pts,}
umount -R /mnt/gentoo
reboot
하지만... 이렇게 쉽게 끝나지는 않겠죠... (사실 처음 설치 때는 쉽게 넘어갔습니다만!?)

그래서 다시 설정을 바꿔줍니다...
# 쉘에서 실행
efibootmgr --create
--disk /dev/mmcblk0
--part 1
--label gentoo
--loader "\EFI\Gentoo\vmlinuz-6.12.21-gentoo-dist.efi"
--unicode "root=/dev/mmcblk0p3 rootfstype=f2fs rw initrd=\EFI\Gentoo\initramfs-6.12.21-gentoo-dist.img"

정리를 좀 했습니다. 과연 부팅이 될지?!
실패입니다 ㅋㅋㅋ
뭐 다음 글에서 또 이어가겠습니다!
감사합니다!
'IT > Linux' 카테고리의 다른 글
| Gentoo 리눅스(11): 부팅을 성공후 WIFI를 잡아봅시다! (0) | 2025.04.20 |
|---|---|
| Gentoo 리눅스(10): 결국 부팅시킬겁니다! (0) | 2025.04.20 |
| 리눅스에서 파일이나 디스크를 ISO로 만드는 방법 (0) | 2025.04.13 |
| 레드햇 계열 리눅스에서 XRDP로 원격 접속하기 (0) | 2025.04.12 |
| Gentoo 리눅스(8): 빌드지옥의 강력한 구원자 (3) (0) | 2025.04.06 |