Preface
This Gentoo Linux installation guide has completely changed direction.
It’s now meant for people already familiar with the installation, for when consulting the Handbook is a hassle.
If you’re new to Gentoo Linux or not yet comfortable with Linux, please refer to the Handbook.
As of December 2023, Gentoo officially supports binary packages.
I’ve written a separate post on how to install binary packages.
Prerequisite
When you need to download a file from your own Git repository,
> Github
$ wget https://github.com/YOUR_USER_ID/YOUR_REPOSITORY_NAME/raw/main/FILE_DIRECTORY/SOME_FILE
> Gitlab
$ wget https://gitlab.com/YOUR_USER_ID/YOUR_REPOSITORY_NAME/-/raw/master/FILE_DIRECTORY/SOME_FILE
Live USB
# wipefs --all /dev/sdb
# dd if=./Downloads/install-amd64-minimal-20211231T235901Z.iso of=/dev/sdb status=progress && sync
Base
Ping
# ping
Partition
Check for UEFI boot
# ls /sys/firmware/efi
# wipefs --all /dev/sda
# parted /dev/sda
# cfdisk /dev/sda
Format
/boot partition
# mkfs.vfat -F 32 /dev/sdaN
swap partition
# mkswap /dev/sdaN
# swapon /dev/sdaN
/ partition
# mkfs.ext4 -j /dev/sdaN
foramt as xfs or btrfs
# mkfs.xfs /dev/sdaN
# mkfs.btrfs /dev/sdaN
Mount
If you’re installing from another distribution, the /mnt/gentoo directory doesn’t exist, so
# mkdir -pv /mnt/gentoo
# mount -v -t ext4 /dev/sda3 /mnt/gentoo
# mkdir -pv /mnt/gentoo/boot
# mount -v -t vfat /dev/sda1 /mnt/gentoo/boot
TIME
# ntpd -q -g
# hwclock --systohc --utc
Stage 3 Tarball
# cd /mnt/gentoo
# links https://www.gentoo.org/downloads/mirrors/
# tar xpf stage3-*.tar.xz --xattrs-include='*.*' --numeric-owner
Edit make.conf
# nano -w /mnt/gentoo/etc/portage/make.conf
Mirror
# mirroselect -i -o >> /mnt/gentoo/etc/portage/make.conf
Copy repos.conf
# 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
Copy resolv.conf
# cp --dereference /etc/resolv.conf /mnt/gentoo/etc/
Mount /proc, /sys, /dev
Only run the commands below with the --make-rslave option if you are installing systemd
# 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
Chroot
# chroot /mnt/gentoo /bin/bash
# source /etc/profile
# export PS1="(chroot) $PS1"
Portage
# merge-webrsync
# emerge -avuDN @world
# emerge -av gentoolkit eix genlop
News
# eselect news list
# eselect news read N
Profile
# eselect profile list
# eselect profile set N
Timezone
# ls /usr/share/zoneinfo
# echo "Asia/Seoul" > /etc/timezone
# emerge --config sys-libs/timezone-data
Locale
# nano -w /etc/locale.gen
Uncomment 'en_US.UTF-8 UTF-8'
# locale-gen
# eselect locale list
# eselect locale set N
Update env
# env-update && source /etc/profile && export PS1="(chroot) $PS1"
Kernel
// The genuine article
# emerge --ask sys-kernel/gentoo-sources pciutils sys-kernel/linux-firmware
// The real deal
# git clone https://github.com/torvalds/linux.git
# wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.14.1.tar.xz
// Look-alike 1 - binary [2020-09-15: Gentoo update]
# emerge -a sys-kernel/gentoo-sources-bin
# emerge -a sys-kernel/gentoo-kernel-bin
// Look-alike 2 - compiled
# emerge -a sys-kernel/gentoo-kernel
# emerge -a sys-kernel/vanilla-sources
# emerge -a sys-kernel/git-sources
# cd /usr/src/linux
# make mrproper
# make defconfig
# make menuconfig
# make -jN
# make modules_install
# make install
When updating the kernel
# cp /usr/src/linux/.config /usr/src/linux/NEW_KERNEL
# make olddefconfig
If you need initramfs
# genkernel --install --kernel-config=/usr/src/linux/.config initramfs
Microcode (TIP: Enable 'initramfs' USE Flag)
ex) add 'sys-firmware/intel-microcode initramfs'
inside '/etc/portage/package.use/package.use' file
# emerge -av sys-firmware/intel-microcode
Edit fstab
# blkid >> /etc/fstab
# nano -w /etc/fstab
# Inside file '/etc/fstab'
/dev/sda1 /boot vfat defaults,noatime 0 2
/dev/sda2 none swap sw 0 0
/dev/sda3 / ext4 noatime 0 1
/dev/sda4 /home ext4 noatime 0 1
# UUID -> remove quotation(")
# PARTUUID -> remove quotation(")
Hostname
# nano -w /etc/conf.d/hostname
# nano -w /etc/conf.d/net
# nano -w /etc/hosts
Netifrc
# emerge --ask --noreplace net-misc/netifrc
# nano -w /etc/conf.d/net
config_enp3s0="dhcp"
# cd /etc/init.d
# ln -s net.lo net.enp3s0
Below, use the name of your own network interface.
# rc-update add net.enp3s0 default
TIP
emerge -av ifplugd
Passwd
passwd
Edit rc.conf
nano -w /etc/rc.conf
rc_logger="YES"
rc_log_path="/var/log/rc.log"
nano -w /etc/conf.d/keymaps
nano -w /etc/conf.d/hwclock
Install logroate, sysklogd, cronie
# emerge --ask app-admin/sysklogd cronie mlocate
# rc-update add sysklogd default
# rc-update add cronie default
# emerge --ask net-misc/dhcpcd
or
# emerge -av networkmanger
# rc-update add NetworkManager default
GRUB:2
# emerge --ask --verbose sys-boot/grub:2
# grub-install --target=x86_64-efi --efi-directory=/boot
# grub-mkconfig -o /boot/grub/grub.cfg
Reboot
# exit
# cd
# umount -lR /mnt/gentoo
# reboot
Useradd
# useradd -m -g users -G wheel,audio,video,portage -s /bin/bash USER_NAME
# passwd USER_NAME
Remove stage3*.tar.xz
# rm /stage3*.tar.xz
XORG
# eselect profile list
# eselect profile set N
# emerge -avuDN @world
# env-update && source /etc/profile
# emerge --ask x11-base/xorg-server
# env-update && source /etc/profile
PLASMA
Settings for Plasma
# eselect profile set N
# eselect profile list
# emerge -avuDN --with-bdeps=y @world
System Dependencies
# emerge --noreplace -av elogind udev dbus polkit udisks
# rc-update add dbus default
# rc-update add elogind boot
Install Packages
# emerge -av plasma-meta kde-aps-meta
SDDM
# emerge --noreplace -av sddm
# usermod -a -G video sddm
# emerge --renoplace -av gui-libs/display-manager-init
Enable SDDM
# vim /etc/conf.d/display-manager
CHECKVT=7
DISPLAYMANAGER="sddm"
# rc-update add display-manager default