小怪兽的Gentoo安装手册

Gentoo的安装介质使用常见linux发行版的live cd均可,如果用gentoo官方的安装介质要配置网络比较麻烦。我这里以ubuntu 23.10.1为例。

从USB启动之后选择try ubuntu的那个选项,进入到ubuntu环境,动动鼠标连接上网络。

磁盘分区

1
2
3
4
5
6
# parted /dev/sdx
(parted) mkpart ESP fat32 1MiB 300MiB
(parted) set 1 boot on
(parted) mkpart primary btrfs 300MiB 80GiB
(parted) mkpart primary btrfs 80GiB 100%
(parted) quit

格式化分区

1
2
3
# mkfs.fat -F32 /dev/sdx1
# mkfs.btrfs /dev/sdx2
# mkfs.btrfs /dev/sdx3

挂载分区

1
2
3
# mkdir /mnt/gentoo && mount /dev/sdx2 /mnt/gentoo
# mkdir -p /mnt/gentoo/efi && mount /dev/sdx1 /mnt/gentoo/efi
# mkdir /mnt/gentoo/home && mount /dev/sdx3 /mnt/gentoo/home

下载并安装gentoo安装文件

1
2
3
# cd /mnt/gentoo
# wget https://mirrors.tuna.tsinghua.edu.cn/gentoo/releases/amd64/autobuilds/current-stage3-amd64-desktop-openrc/stage3-amd64-desktop-openrc-20231015T161657Z.tar.xz
# tar xpvf stage3-amd64-*.tar.xz --xattrs-include='*.*' --numeric-owner

设置repo

1
2
# 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

复制DNS信息

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

挂载额外的文件系统

1
2
3
4
# 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 --rbind /run /mnt/gentoo/run && mount --make-slave /mnt/gentoo/run

非Gentoo介质的/dev/shm/可能是一个软链接,chroot之后可能不可用,挂载一个tmpfs分区可以解决这个问题。

1
2
3
# 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环境

1
2
# chroot /mnt/gentoo
# source /etc/profile && export PS1="(chroot) ${PS1}"

镜像源的本土化配置

从本地镜像源里面下载编绎所需的源码

1
# nano -w /etc/portage/repos.conf/gentoo

sync-uri = rsync://rsync.gentoo.org/gentoo-portage前面加个#,并在它下面添加sync-uri = rsync://mirrors.tuna.tsinghua.edu.cn/gentoo-portage

更新portage树

1
# emerge-webrsync

选择profile

更改profile之后更新可能需要很多时间,所以现在也可以先不选,等基本系统安装完毕之后再进行这个操作。

1
2
# eselect profile list
# eselect profile set x

编辑make.conf

初步编辑/etc/portage/make.conf文档。
可以参照本文最后。
CPU_FLAGS_*参数设置

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

更新系统

如果机器内存较大,同时担心编绎会减少ssd的寿命,可以将内存挂载在/tmp,然后将编绎目录选为/tmp。对openrc采用以下操作

1
2
3
4
# nano -w /etc/fstab
/etc/fstab

tmpfs /tmp tmpfs rw,nosuid,noatime,nodev,size=4G,mode=1777 0 0
1
2
# mount -t tmpfs tmpfs /tmp && findmnt --target /tmp
# emerge -auvDN @world

设置时区

1
# echo "Asia/Shanghai" > /etc/timezone && emerge --config sys-libs/timezone-data

更新locale

1
2
3
4
5
6
# nano -w /etc/locale.gen
/etc/locale.gen

en_US.UTF-8 UTF-8
zh_CN.UTF-8 UTF-8
zh_TW.UTF-8 UTF-8
1
2
# locale-gen && eselect locale set en_US.utf8
# env-update && source /etc/profile && export PS1="(chroot) $PS1"

安装内核和一些工具

1
2
3
# emerge --ask sys-kernel/gentoo-kernel-bin
# sys-apps/pciutils sys-kernel/genkernel sys-kernel/linux-firmware
# emerge --ask app-admin/syslog-ng app-admin/logrotate sys-process/cronie net-misc/dhcpcd

编辑/etc/fstab

blkid命令可查询各分区的uuid,下面是我的fstab文件:

1
2
3
4
5
6
7
8
# nano -w /etc/fstab

/etc/fstab

UUID="CC7C-4643" /efi vfat defaults,noatime 0 2
UUID="0ba72bcf-5ecf-4f6e-a82b-2a7966a3ead4" / btrfs noatime 0 1
UUID="35838d1a-cae2-4839-9541-4582bfc841e3" /home btrfs noatime 0 1
tmpfs /tmp tmpfs rw,nosuid,noatime,nodev,size=4G,mode=1777 0 0

设置主机名

1
2
# nano -w /etc/conf.d/hostname
hostname='GentooLinux'

编辑hosts文件

1
2
3
4
5
# nano -w /etc/hosts
/etc/hosts

127.0.0.1 localhost gentoo
::1 localhost gentoo

设置root用户密码

1
# passwd

一些自启动项

1
2
# rc-update add syslog-ng default
# rc-update add cronie default

安装grub2

1
2
3
4
# echo 'GRUB_PLATFORMS="efi-64"' >> /etc/portage/make.conf
# emerge --ask --update --newuse --verbose sys-boot/grub:2
# grub-install --target=x86_64-efi --efi-directory=/boot/efi
# grub-mkconfig -o /boot/grub/grub.cfg

退出安装环境,重启

1
2
3
# exit
# cd ~ && umount -l /mnt/gentoo/dev{/shm,/pts,} && umount -R /mnt/gentoo
# reboot

make.conf的备份

下面是我电脑的make.conf文件,仅供参考

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
COMMON_FLAGS="-march=haswell -O2 -pipe"
CFLAGS="${COMMON_FLAGS}"
CXXFLAGS="${COMMON_FLAGS}"
FCFLAGS="${COMMON_FLAGS}"
FFLAGS="${COMMON_FLAGS}"

PORTDIR="/usr/portage"
DISTDIR="/usr/portage/distfiles"
PKGDIR="/usr/portage/packages"
PORTAGE_TMPDIR="/tmp"

MAKEOPTS=-j8

ACCEPT_KEYWORDS=amd64

GENTOO_MIRRORS="https://mirrors.tuna.tsinghua.edu.cn/gentoo"

USE="consolekit dbus infinality policykit pulseaudio networkmanager touchpad udev udisk vulkan -bluetooth"

GRUB_PLATFORMS="efi-64"
VIDEO_CARDS="intel"
INPUT_DEVICES="libinput"
CPU_FLAGS_X86="avx avx2 f16c fma3 mmx mmxext pclmul popcnt sse sse2 sse3 sse4_1 sse4_2 ssse3"

参考文档:Gentoo Handbook