gentoo linux 설치

joepasss·2024년 3월 2일

linux

목록 보기
2/3

부팅 디스크 준비하기


  1. 디스크 삭제
    dd if=/dev/zero of=/dev/MY_DISK bs=4M status=progress && sync
  • MY_DISK 확인하는 방법
    (linux) lsblk 명령어로 확인 가능 (sudo 필요)
    (mac) diskutil list 명령어로 확인 가능

  • macOS 환경에서 disk unmount 하는 방법
    sudo diskutil umountDisk MY_DISK

  1. 부팅에 사용할 iso 파일 준비하기
    gentoo booting iso

굳이 젠투 부팅 디스크가 아닌 ubuntu, linux mint등을 사용해도 무관하지만 필자는 mac 환경에서 ssh를 통해 접근할 예정이므로 젠투 부팅 디스크 사용 예정

macOS와 gentoo의 멀티부팅을 예정하고 있다면 mac환경에서 disk utility 프로그램을 통해 미리 파티션을 나눈 뒤 진행

설치 환경 진입


(gentoo minimal installation 기준으로 설명)

(optional) sshd 실행
/etc/init.d/sshd start 또는 rc-service sshd start 명령어로 ssh 데몬 실행

ssh 에서 사용해야 하므로 passwd root 명령어로 root 유저 password 설정

ip link 또는 iwconfig 명령을 통해 네트워크 인터페이스 이름을 확인 후 iwconfig MY_INTERFACE txpower 10 으로 지정

ip link 출력 예시

1: lo: ~~~~
2: wlp2s0: ~~~~

iwconfig 출력 예시

lo: ~~~~
wlp2s0: ~~~~

ip link set dev wlp2s0 up 명령으로 네트워크 인터페이스의 state up으로 변경

ap 포인트 목록 가져오기
iw wlp2s0 scan | grep -Po '(signal|SSID):\K.*

net-setup wlp2s0 명령으로 네트워크 설정을 해 주면 된다

iw dev wlp2s0 link 명령어로 네트워크 상태 확인 가능

이후 ssh로 연결 해야하므로, ip a 또는 ip addr 명령어로 wlp2s0 인터페이스의 ip 주소 (inet 필드에 있음) 찾아준 다음 ssh root@MY_ADDR 명령어로 진입해 주면 된다

파티션 계획 / 분할


lsblk 명령으로 현재 파티션 확인

멀티부팅할 계획이 없기 때문에 nvme0n1 깔끔하게 제거 하고 시작 (macOS 와 멀티부팅할 계획이 있는 경우, nvme0n1p4 또는 sda4 부분에서 /boot 파티션 제외 하고 작업하면 된다)

디스크 데이터 제거 (주의)
dd if=/dev/zero of=/dev/nvme0n1 bs=4M status=progress && sync

(디스크 정리 이후 lsblk output)

cfdisk /dev/nvme0n1 명령어로 nvme0n1 디스크 파티션 진행

gpt lable 선택한 다음 진입

efi에 1G, swap에 16G (권장 swap 크기 참고) 나머지 linux filesystem

type변경

EFI System, Linux swap, Linux filesystem(default)로 type 지정 해 준 다음 write, 이후 quit

cfdisk 작성 이후 lsblk 출력

파티션 포멧

mkfs.vfat -F32 /dev/nvme0n1p1
mkfs.ext4 -j /dev/nvme0n1p3

swap에 사용할 파티션을 제외하고 포멧을 해 준다음 swap 준비

mkswap /dev/nvme0n1p2
swapon /dev/nvme0n1p2

이후 lsblk로 확인해 보면

swap 처리가 된 것을 확인 가능하다

파티션 마운트

마운트될 폴더 만들기
mkdir --parents /mnt/gentoo/

/mnt/gentoo 에 메인 파티션 (/dev/nvme0n1p3) mount
mount /dev/nvme0n1p3 /mnt/gentoo

gentoo stage 파일 설치하기


메인 파티션이 있는 폴더로 이동 후 gentoo downloads 에 있는 stage 받기

다운 받기 전 시간 설정
date 명령어로 시간 확인 가능
여기서는 ntp를 사용해서 자동으로 시간을 맞출것
chronyd -q 명령으로 ntp 설정 가능

다운 받을 폴더 (/mnt/gentoo/)로 이동
cd /mnt/gentoo

젠투 downloads 에서 stage tar 링크 복사 후 wget

stage 3 openrc 설치 예시

wget https://distfiles.gentoo.org/releases/amd64/autobuilds/20240229T194908Z/stage3-amd64-openrc-20240229T194908Z.tar.xz

다운로드가 완료되었으면
tar xpvf stage3-*.tar.xz --xattrs-include='*.*' --numeric-owner 명령으로 압축 해제

compile option 설정하기
vim 이 없어서 vi로 작성
vi /mnt/gentoo/etc/portage/make.conf 진입

MAKEOPTS="-j4" (ram % 2 한 수치를 넣어주면 된다)

/mnt/gentoo 진입 (chroot)


dns info 복사
cp --dereference /etc/resolv.conf /mnt/gentoo/etc/

arch-chroot /mnt/gentoo /bin/bash

! arch-chroot가 없는 경우

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

! gentoo-installation media 외에 다른 live boot 사용하는 경우

test -L /dev/shm && rm /dev/shm && mkdir /dev/shm
mount --types tmpfs --options nosuid,nodev,noexec shm /dev/shm
chmod 1777 /dev/shm /run/shm

이후에 chroot /mnt/gentoo /bin/bash 로 접근하면 된다

# profile 가져오기
source /etc/profile

# 표기에 (chroot) 추가
export PS1="(chroot) ${PS1}"

chroot 환경 진입 이후 boot 파티션 mount
mount /dev/nvme0n1p1 /boot

모종의 이유로 /boot dir가 없으면 mkdir /boot 으로 만들어 넣으면 된다

mount 이후 lsblk 출력

portage 설정


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

cat /etc/portage/repos.conf/gentoo.conf 으로 설정 확인 가능

Gentoo ebuild repository 설치


emerge-webrsync

mirror 추가하기


/etc/portage/make.conf 에 직접 추가해도 되지만, app-portage/mirrorselect 이용하는게 편리함

# mirrorselect 설치
emerge --ask --oneshot app-portage/mirrorselect

# mirrorselect 실행
mirrorselect -i -o >> /etc/portage/make.conf

### space bar 로 선택 가능 ###

(optional) vim 설치


emerge --ask vim

profile 선택하기


eselect profile list
(2024 3월 기준 profile list 출력, 다를 수 있음)

hyprland 또는 sway desktop env 를 꾸릴 예정이므로, 필자는 /default/linux/amd64/17.1/desktop (5번) 선택

eselect profile set 5 (원하는 프로파일 넣어주면 된다)

32비트 라이브러리, 프로그램이 아예없는 pure한 64비트 환경을 이용하고 싶으면 no-multilib이 붙어있는 프로파일을, openrc가 아닌 systemd를 사용하고 싶으면 systemd가 붙어 있는 프로파일을 고르면 된다

make.conf 수정 (CPU flag, video card 옵션 추가, accept_license)


CPU flag또한 직접 수정해도 되지만, cpuid2cpuflags 라는 패키지가 있기 때문에 emerge 해 준다음 사용 할 예정

# cpuid2cpuflags 패키지 emerge
emerge --ask --oneshot app-portage/cpuid2cpuflags

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

VIDEO_CARDS 수정
vim /etc/portage/make.conf

VIDEO_CARD="" 에 넣어주면 된다

AMD GPU
INTEL GPU
NVIDIA (NOUVEAU)
NVIDIA

! VGA 카드 모르는 경우 확인 방법

# lspci 설치
emerge --ask sys-apps/pciutils

# lspci 로 하드웨어 정보(VGA) 확인
lspci | grep VGA

! lspci 에서 NVIDIA GPU 보이지 않는 경우

# lshw emerge
emerge --ask sys-apps/lshw

### !!! emerge에 시간이 오래걸리므로, gentoo system 설치 완료 후 작업하는 것을 추천함 !!! ###

ACCEPT_LICENSE 수정

@GPL-COMPATIBLE
@FSF-APPROVED
@OSI-APPROVED
@MISC-FREE
@FREE-SOFTWARE
@FSF-APPROVED-OTHER
@MISC-FREE-DOCS
@FREE-DOCUMENTS.
@FREE
@BINARY-REDISTRIBUTABLE
@EULA
등 가능한 옵션이 존재, 필자는 전체 다 가능하게하는 "*" 옵션을 주겠음

vim /etc/portage/make.conf

ACCEPT_LICENSE="*" 추가

portageq envvar ACCEPT_LICENSE 로 설정값 확인 가능

@world set 업데이트


emerge --quiet --ask --verbose --update --deep --newuse @world

timezone, locale 설정


locale-gen 수정
vim /etc/locale.gen

사용할 언어의 코멘트(#) 풀어준 후 locale-gen 명령어 실행

eselect 로 locale 선택
eselect locale list

리스트를 확인한 후 사용할 언어를 eselect locale set NUMBER 명령어로 선택
필자는 en_US.utf8 을 사용할 예정이므로, eselect locale set 4으로 선택했음

env update 하기
env-update && source /etc/profile && export PS1="(chroot) ${PS1}"

kernel source install


emerge --ask sys-kernel/gentoo-sources 로 kernel source 를 emerge

emerge가 완료되면,

# 커널 리스트 확인
eselect kernel list

# 커널 선택 (심볼릭 링크 생성)
eselect kernel set NUMBER

# 심볼릭 링크가 생성되었는지 확인
ls -l /usr/src/linux

! 수동으로 설정할 경우
cd /usr/src/linux 명령어로 폴더로 이동 후

# kernel config
make menuconfig

# kernel config 완료 후
make clean
make

# make 완료 후 module_install
make modules_install

# /boot 에 이미지 복사
make install

genkernel 사용

# genkernel emerge
emerge --ask sys-kernel/genkernel

# genkernel 실행
genkernel --mountboot --install all

# 체크
ls /boot/vmlinu* /boot/initramfs*
ls /lib/modules

installkernel


package.use 수정

vim /etc/portage/package.use/installkernel

# openrc, systemd-boot
sys-apps/systemd-utils boot kernel-install
sys-kernel/installkernel systemd systemd-boot

# systemd, systemd-boot
sys-apps/systemd boot
sys-kernel/installkernel systemd-boot

# grub
sys-kernel/installkernel grub

fstab 작성


emerge --ask --oneshot sys-fs/genfstab
emerge 가 완료된 후

genfstab -U / >> /etc/fstab

hostname, passwd 설정


echo HOST_NAME > /etc/hostname

# systemd
hostnamectl hostname HOST_NAME

vim /etc/hosts localhost aliases 수정

passwd 명령어로 password 추가

sudo 설치, user 추가


emerge --ask app-admin/sudo

emerge가 완료되면

# user 추가
useradd -m -g users -G wheel -s /bin/bash SOMEUSERNAME

# user password 추가
passwd SOMEUSERNAME

EDITOR=vim visudo 명령어로 visudo 수정

user privileage specification 부분을 찾아서 wheel group 접근 수정해줌

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

## Uncomment to allow members of group wheel to execute any command
%wheel ALL=(ALL:ALL) ALL

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

## Uncomment to allow members of group sudo to execute any command
# %sudo ALL=(ALL:ALL) ALL

init & boot 설정


! openRC 사용시
/etc/rc.conf 파일에서 수정 가능

vim /etc/conf.d/keymaps 으로 keymap 수정

vim /etc/conf.d/hwclock 으로 하드웨어 clock 설정 가능

! systemd 사용시

systemd-machine-id-setup

systemd-firstboot --prompt

systemctl preset-all --preset-mode=enable-only
# 또는
systemctl preset-all

사용할 도구 설치


필자는 system logger, ntp 도구, network 도구정도만 설치한 후 진행하겠음 추가로 필요한 도구는 젠투 핸드북, 젠투 패키지 목록 참고 해서 필요한거 추가하면 된다 (emerge --ask PACKAGE_NAME 으로 설치 가능)

# 패키지 설치
emrge --ask app-admin/sysklogd net-misc/chrony net-misc/networkmanager net-wireless/wireless-tools

# sysklogd (system logger) 설정 (systemd 의 경우 기본 내장이므로, 설치할 필요 없음)
rc-update add sysklogd default

# chrony (ntp) 설정
# OpenRC
rc-update add chronyd default
    
# systemd
systemctl enable chronyd.service

# network manager
# OpenRC
rc-service NetworkManager start
rc-update add NetworkManager default

# systemd
systemctl start NetworkManager
systemctl enable NetworkManager

bootloader 설정


(grub 기준으로 설명)

  • 패키지 설치
    emerge --ask sys-boot/efibootmgr

  • uefi 설치 가능 여부 확인
    ls /sys/firmware/efi
    결과에 efivars가 존재하면 uefi로 설치 가능

  • uefi 설치가 가능한 경우 make.conf 수정 (GRUB_PLATFORMS="efi-64" 추가)
    echo 'GRUB_PLATFORMS="efi-64"' >> /etc/portage/make.conf
    또는 vim /etc/portage/make.conf로 파일을 열어 직접 GRUB_PLATFORMS="efi-64" 추가

  • 이후 grub 설치
    make.conf 수정한 경우 :emerge --ask --update --newuse sys-boot/grub
    mack.conf 수정하지 않은 경우: emerge --ask sys-boot/grub

  • grub install
    lsblk로 boot에 사용할 파티션이 어디에 mount되어 있는지 확인
    lsblk 명령어로 확인 가능
    UEFI
    grub-install --efi-directory=/boot --bootloader-id=MY_OS_NAME --efi-directory 옵션에 lsblk로 찾은 boot 파티션 마운트 포인트 넣어주면 된다
    DOS / legacy
    grub-install /dev/sda --bootloader-id=MY_OS_NAME boot 파티션 이름을 넣어주면 된다

  • grub config 수정
    vim /etc/default/grub 으로 파일을 열어서 수정 가능

  • grub.cfg 생성
    grub-mkconfig -o /boot/grub/grub.cfg

mount 해제, reboot


  • chroot exit
    exit

  • umount

cd
umount -l /mnt/gentoo/dev{/shm,/pts,}
umount -R /mnt/gentoo
  • umount 확인
    lsblk

  • reboot
    reboot

0개의 댓글