Gentoo安装记录
前言
从 ArchLinux 切换到 Gentoo 也有一段时间了,感觉 Gentoo 系统稳定性还是非常棒的,至少在我看来比 Arch 要好很多,比如在 Arch 下 KDE 6 经常崩溃,但是在 Gentoo 下我用了大半个月也就在切换外接显示器的时候崩溃过一次。不过后面我切换到了 niri 桌面,一直使用到现在。
Gentoo 整体安装过程还是比较繁琐的,最小化系统安装还好,主要是系统安装后的各种优化调整以及桌面环境的搭建。回头看看,真的已经忘记怎么一步步优化的了,本文主要记录下最小化系统安装步骤,下一篇文章会以配置 niri 桌面为例详细介绍如何优化 Gentoo 日常桌面使用。
Gentoo 安装步骤大致可以分为以下阶段,一步步的进行即可,其他 Linux 系统安装过程跟这个也是类似的,只是有些发行版为我们准备了图形化安装界面。
- 准备安装盘并进入安装系统
- 连接好网络并准备就绪
- 初始化磁盘,决定使用的文件系统,并进行挂载准备安装系统
- 下载
Stage3文件(Gentoo系统特有)并解压到目标目录 - 基础系统就绪,
chroot进入安装的基础系统 - 配置Gentoo系统和最小化安装
- 安装操作系统内核
- 系统其他必要设置以及安装必要软件
- 安装和配置引导(用于发现和启动操作系统)
- 取消挂载并重启进入新系统,进行后续配置
参考:Gentoo官方安装文档 ,真的非常详细!
准备安装盘
Gentoo 官方有自己的最小化安装 ISO 镜像,但是也可以使用其他发行版比如 Arch 的安装镜像,只要能正常格式化磁盘、挂载磁盘、连接网络、访问终端即可,但是还是推荐使用 Gentoo 官方的镜像,其他发行版镜像不一定包含 Gentoo 需要的一些组件,有官方的为啥不用呢?
官方安装镜像包含纯终端版本和带 GUI 版本两种,推荐使用带 GUI 版本的,方便复制命令,还能在安装过程中查看文档,不用费劲扒拉的去看手机和费眼睛的 tty 。镜像可以直接到官网 download页面 下载,记得选择 Boot Media 部分的 LiveGUI USB Image ,不要下载成 Stage 区域的了。
下载好镜像后准备一个 8G 以上 U 盘进行刻录,这里推荐使用 Ventoy ,这是一个多系统启动 U 盘工具,只需要安装的时候格式化一次 U 盘,之后直接拷贝 ISO 镜像进去即可,不用每次启动一个镜像都要重新格式化一次,还能当正常的 U 盘存放文件。新版本现在支持了无损安装,甚至不需要格式化 U 盘,天才的设计。
启动前还需要对电脑 BIOS 进行配置,进入 BIOS 的方法不同型号主板有区别,自行搜索。进入 BIOS 后主要进行两处配置:关闭安全启动 和 设置USB为第一启动项 ,不进行配置开机还是默认进入原来的系统而不是U盘上的系统。
配置好后保存退出,插上 U 盘再开机就会进入安装系统了。
配置网络
如果使用网线连接的有线连接,进入系统后就会自动启用并连接,不需要额外的配置。如果需要连接 wifi ,使用 GUI 版本的安装镜像默认桌面环境是 KDE ,进入设置连接 wifi 即可,这里主要介绍下命令行连接 wifi 。
运行 ip link 查看网络接口信息,运行后可能输出如下:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
4: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether e8:40:f2:ac:25:7a brd ff:ff:ff:ff:ff:ff
6: wlan0: ...如果除了 lo 外没有其他项,那估计内核是不支持当前电脑网卡,这种情况很少发生,如果有那就放弃安装吧哈哈~ 一般 en 开头的属于有线网卡(比如 enp1s0、ens1),wl 开头的是无线网卡(比如 wlan0)。
连接 wifi 时推荐使用手机开热点,然后设置成无密码(开放网络),这样用 iw 直接连接就行了,不用折腾。如果配置了密码,通常都是 WPA、WPA2 或 WPA3 协议,这就需要使用 wpa_supplicant、iwd 这类软件连接。
iw 连接 wifi:
## 激活接口,假设为 wlan0
ip link set dev wlan0 up
## 连接到手机热点(无密码),假设 wifi 名称为 mywifi
iw dev wlan0 connect -w mywifi
## 测试网络连接
ping www.bilibili.com准备磁盘
安装 Linux 至少需要两个磁盘分区,一个是用于引导的引导分区,固定 vfat 格式,一个用于系统安装,可选多个文件系统,比如 ext4、btrfs、xfs、zfs。需要注意 ntfs 是 windows 系统使用的文件系统,由于缺少 Linux 系统运行所需的 UNIX 权限和扩展属性,不能用来安装 Linux ,仅作为与 Windows 系统交换文件时推荐使用。
个人桌面使用我推荐 ext4 和 btrfs 两种文件系统。ext4 是 Unix 下老牌文件系统,开箱即用,稳定可靠,但是缺少一些现代化功能。btrfs 也是开箱即用,相比 ext4 多了很多现代化功能比如快照、校验、透明压缩、子卷、组 RAID 等,配置要比 ext4 麻烦一些。zfs、xfs 这些我没用过,这里就不做介绍了。
分区与格式化
我使用 btrfs 较多,因为 ext4 每次分区都必须指定大小,给根目录和 home 目录分多大很是纠结,后期扩容麻烦,而且快照也没 btrfs 方便,下面以 btrfs 为例进行配置。
首先使用 fdisk -l 查看有那些磁盘,比如我的:
Disk /dev/nvme0n1:953.87 GiB,1024209543168 字节,2000409264 个扇区
磁盘型号:YMTC PC41Q-1TB-B
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):4096 字节 / 4096 字节
磁盘标签类型:gpt
磁盘标识符:F87EDD9B-91D8-47CC-97B7-BD6B562C2685
设备 起点 末尾 扇区 大小 类型
/dev/nvme0n1p1 40 614439 614400 300M EFI 系统
/dev/nvme0n1p2 614440 647207 32768 16M Microsoft 保留
/dev/nvme0n1p3 649216 419428351 418779136 199.7G Microsoft 基本数据
/dev/nvme0n1p4 419429256 2000409230 1580979975 753.9G Microsoft 基本数据
Disk /dev/nvme1n1:931.51 GiB,1000204886016 字节,1953525168 个扇区
磁盘型号:Samsung SSD 980 1TB
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):16384 字节 / 131072 字节
磁盘标签类型:gpt
磁盘标识符:D3AAFC77-755D-45DE-8677-C1829F22E3E2
设备 起点 末尾 扇区 大小 类型
/dev/nvme1n1p1 2048 2099199 2097152 1G EFI 系统
/dev/nvme1n1p2 2099200 1953523711 1951424512 930.5G Linux 文件系统/dev/nvme1n1p1用作引导分区,如果有 Windows 系统的话就不需要格式化引导分区,后面直接挂载即可,我这里有两个磁盘,直接一个 Windows ,一个 Gentoo 了,使用 nvme1n1 磁盘进行安装。/dev/nvme1n1p2用作系统安装,格式化为 btrfs 文件系统。
使用 cfdisk /dev/nvme1n1 对磁盘进行分区,我这里分了两个,一个用作 EFI (1G大小),剩余空间全部用作系统安装。
- 使用
mkfs.vfat -F 32 -n EFI /dev/nvme1n1p1格式化 EFI 分区为 FAT32 格式,并且指定一个卷标 ”EFI“ 。 - 使用
mkfs.btrfs -f -L Gentoo /dev/nvme1n1p2格式化为 btrfs 文件系统,并指定一个卷标 ”Gentoo“ 。
挂载分区
挂载顺序:先挂载根目录,然后挂载子目录。
为方便后面使用 snapper 进行系统快照需要为系统分区配置扁平化子卷,我习惯分下面这些子卷:
- @:根子卷,用于挂载根目录,快照整个系统。
- @home:用户目录子卷,用于挂载用户数据目录,日常使用主要是这个,单独快照用户数据。
- @swap:交换文件子卷,用于存储内存交换文件,用于系统休眠。
- @gentoo_tmp:用于 Gentoo 构建时的临时文件
mkdir -pv /mnt/gentoo
mount -t btrfs /dev/nvme1n1p2 /mnt/gentoo
btrfs subvolume create /mnt/gentoo/@
btrfs subvolume create /mnt/gentoo/@home
btrfs subvolume create /mnt/gentoo/@swap
btrfs subvolume create /mnt/gentoo/@gentoo_tmp
umount /mnt/gentoo正式挂载分区:
## 挂载 btrfs 文件系统
## subvol指定子卷,compress指定压缩算法,ssd针对ssd磁盘优化
## noatime 禁止系统在读取文件后更新文件最后访问时间,避免不必要的写入
mount -t btrfs -o subvol=@,noatime,compress=zstd,ssd /dev/nvme1n1p2 /mnt/gentoo
mount --mkdir -t btrfs subvol=@home,noatime,compress=zstd,ssd /dev/nvme1n1p2 /mnt/gentoo/home
## swap文件必须关闭写时复制和压缩
mount --mkdir -t btrfs subvol=@swap,noatime,ssd /dev/nvme1n1p2 /mnt/gentoo/swap
mount --mkdir -t btrfs subvol=@gentoo_tmp,noatime,compress=zstd,ssd /dev/nvme1n1p2 /mnt/gentoo/var/tmp
## 挂载 EFI 分区
mount --mkdir /dev/nvme1n1p1 /mnt/gentoo/efi挂载swap分区,swap文件大小推荐设置为内存大小的 1.5 倍左右,我内存是 32GB ,我分配了 44G 容量给 swap 文件。如果内存小于 16 G 可以设置为内存的 2 倍。
## 取消 swap 目录的写时复制特性,只针对新文件有效
chattr +C /mnt/gentoo/swap
## 使用 btrfs 工具直接创建 swap 文件
btrfs filesystem mkswapfile --size 44G /mnt/gentoo/swap/swapfile
## 启用
swapon /mnt/gentoo/swap/swapfile全部挂载完成后可以使用 lsblk 查看挂载路径以及磁盘是否正确。
下载 Stage3 文件并解压
Stage3 文件内容是一个最小化 Gentoo 基础系统,包含了必要的文件目录,相当于整个系统的地基,需要解压到安装路径下,然后使用
chroot工具进入这个基础系统,再进行后续安装配置。
Gentoo 提供了两套初始化系统可供选择,一个是 OpenRC ,一个是 Systemd 。OpenRC 是 Gentoo 的原生初始化系统,相对简洁,而 Systemd 目前是大多数 Linux 系统默认初始化环境,相对臃肿,但是功能更丰富。新手的话无脑 Systemd 就行了,出问题解决方案多而且使用起来比较省事。
!!!需要注意 Gentoo 系统切换初始化系统非常麻烦,请在安装系统时就决定好使用哪一套初始化系统。
Gentoo 在初始化系统之上还提供了基础 Stage3 系统与带 Desktop(桌面)的 Stage3 系统可供选择,这两者主要区别就是 Desktop 版本提前帮你配置了一些桌面友好的设置,如果是使用窗口管理器比如 hyprland、sway、niri 这种的话选择基础的即可,如果使用 KDE、Gnome 等桌面就选 Desktop 版本就行。不过都无所谓了,后期都能切换的~
嗯,还有一个,Gentoo 还提供了“纯64位库(no-multilib)”版本跟“32+64位库(multilib)”版本,除非必要,一定不要选择 no-multilib 版本,会导致一些需要 32 位库的软件没法使用,比如 Steam ,后期更换起来也是非常困难的。
选择一个镜像站,常用的:
cd /mnt/gentoo
## 使用links浏览器下载文件,这里链接替换为实际的
links https://mirrors.aliyun.com/gentoo/releases/amd64/autobuilds/
## 解压 Stage3 压缩包到当前文件夹
tar xpvf stage3-*.tar.xz --xattrs-include='*.*' --numeric-owner -C /mnt/gentoo进入最小化系统
按照官方教程,需要先挂载一些目录并且复制 DNS 信息:
## 复制 DNS 信息,确保进入新环境网络能正常使用
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如果使用的非 Gentoo 官方启动镜像,还需要做下面的挂载,使用官方镜像可忽略。
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 进入新环境:
chroot /mnt/gentoo /bin/bash
# 加载环境变量并设置 PS1 区分 chroot 环境
source /etc/profile
export PS1="(chroot) ${PS1}"初始化 Portage 与 USE 标志
Portage 是 Gentoo 的包管理系统,基于系统核心提供高级依赖关系解析以及各种包的分发、灵活构建、安装等。而 USE 标志(
USE flags)是 Gentoo 系统的核心特性,是控制软件特性以及依赖信息的关键字,通过 USE 变量,可以做到一个软件只安装需要的功能,一些多余的选项完全可以规避。
首先需要对 make.conf 和 portage 选项、仓库等进行配置,Portage 相关配置都位于 /etc/portage/ 目录下,常见的目录结构如下:
ls -al /etc/portage
总计 20
drwxr-xr-x 1 root root 246 Nov 23 00:26 .
drwxr-xr-x 1 root root 2954 Dec 11 17:46 ..
drwxr-xr-x 1 root root 36 Nov 30 20:52 binrepos.conf
drwxr-xr-x 1 root root 274 Dec 10 18:32 gnupg
-rw-r--r-- 1 root root 915 Nov 23 00:26 make.conf
lrwxrwxrwx 1 root root 75 Nov 22 00:54 make.profile -> ../../var/db/repos/gentoo/profiles/default/linux/amd64/23.0/desktop/systemd
drwxr-xr-x 1 root root 96 Dec 10 19:05 package.accept_keywords
drwxr-xr-x 1 root root 0 Nov 17 14:27 package.mask
drwxr-xr-x 1 root root 150 Dec 10 20:11 package.use
drwxr-xr-x 1 root root 30 Nov 20 22:58 postsync.d
drwxr-xr-x 1 root root 34 Feb 4 2024 profile
drwxr-xr-x 1 root root 56 Nov 23 00:48 repos.conf
drwxr-xr-x 1 root root 44 Nov 25 18:50 savedconfig一些常用目录和文件介绍:
binrepos.conf/:Gentoo 二进制仓库配置,通过二进制包,Gentoo 现在可以做到大多数软件不用编译了,使用更加丝滑。gunpg/:存储密钥的,自动生成,一般不需要碰。make.conf:主要的配置文件,大多数配置都会在这个文件中完成。package.accept_keywords/:目录下每个conf后缀文件用作控制一些包使用稳定版还是测试版,后续日常使用会经常用到。package.mask/:也是 conf 后缀文件,对包进行 mask ,可以做到屏蔽特定包更新、切换包的不同版本等。package.use/:同上,控制特定包的 USE 标志,是控制软件开启关闭某些功能特性的关键,经常会用到。repos.conf/:用于控制软件包仓库,可以扩展一些overlay仓库比如gentoo-zh,大大提升了 Gentoo 下可用的软件包数量。
配置 make.conf
一个配置示例:
## Gentoo make.conf
########### 控制编译参数,源码编译会用到 ####################
COMMON_FLAGS="-march=native -O2 -pipe"
CFLAGS="${COMMON_FLAGS}"
CXXFLAGS="${COMMON_FLAGS}"
FCFLAGS="${COMMON_FLAGS}"
FFLAGS="${COMMON_FLAGS}"
## 制定编译线程数量,不要超过cpu最大线程数
MAKEOPT="-j6"
######## 控制系统级别 Use 标志,对所有软件包生效 #############
## 启用 systemd、vulkan、btrfs 支持
USE_SYSTEM="systemd vulkan egl dbus dist-kernel btrfs"
## wayland 环境
USE_WAYLAND="wayland pipewire qt5 qt6"
## 音频、录屏、蓝牙等支持
USE_MEDIA="screencast gles2 alsa pulseaudio bluetooth"
## 不想要的特性
USE_NO="-gnome -consolekit -gnome-keyring -qt4"
USE="${USE_SYSTEM} ${USE_WAYLAND} ${USE_MEDIA} ${USE_NO}"
################# Emerge & Portage Config ########################
## emerge 启用的功能:二进制包支持、多线程下载支持、美化输出、ccache编译加速支持
## ccache 可以先不启用,这个需要额外安装 ccache 软件,可以系统安装完成后再配置
FEATURES="${FEATURES} getbinpkg binpkg-request-signature parallel-fetch candy ccache"
## emerge 命令默认参数:操作执行前询问用户、显示详细信息
EMERGE_DEFAULT_OPTS="--ask --verbose --complete-graph=y"
## 配置 gentoo 仓库镜像源,启用官方仓库以及 gentoo-zh 仓库镜像
GENTOO_MIRRORS="https://mirrors.ustc.edu.cn/gentoo/ https://mirrors.cqu.edu.cn/gentoo-zh"
## 允许的许可类型:开源不开源的我都要使用
ACCEPT_LICENSE="*"
## 配置 portage 使用的根目录
PORTAGE_DIR="/var/portage"
DISTDIR="${PORTAGE_DIR}/dist"
PKGDIR="${PORTAGE_DIR}/pkgs"
## 配置 portage 使用的临时目录
PORTAGE_TMPDIR="/var/tmp"
## ccache 目录
CCACHE_DIR="/var/tmp/ccache"
################# Other ######################
## 语言配置
L10N="en-US zh-CN"
LC_MESSAGES=en_US.UTF-8接下来按照镜像站教程在 /etc/portage/repos.conf/gentoo.conf 文件中设定默认仓库:
[DEFAULT]
main-repo = gentoo
[gentoo]
location = /var/db/repos/gentoo
## 使用 Git 同步,不容易失败
sync-type = git
sync-depth = 1
sync-uri = https://mirrors.ustc.edu.cn/gentoo.git
sync-git-clone-extra-opts = -b stable
auto-sync = yes
sync-rsync-verify-jobs = 1
sync-rsync-verify-metamanifest = yes
sync-rsync-verify-max-age = 24
sync-openpgp-key-path = /usr/share/openpgp-keys/gentoo-release.asc
sync-openpgp-keyserver = hkps://keys.gentoo.org
sync-openpgp-key-refresh-retry-count = 40
sync-openpgp-key-refresh-retry-overall-timeout = 1200
sync-openpgp-key-refresh-retry-delay-exp-base = 2
sync-openpgp-key-refresh-retry-delay-max = 60
sync-openpgp-key-refresh-retry-delay-mult = 4
sync-webrsync-verify-signature = yes接下来设置二进制包仓库,避免每个包都源码编译,文件在 /etc/portage/binrepos.conf/gentoobinhost.conf:
# These settings were set by the catalyst build script that automatically
# built this stage.
# Please consider using a local mirror.
[binhost]
priority = 99
sync-uri = https://mirrors.ustc.edu.cn/gentoo/releases/amd64/binpackages/23.0/x86-64
[gentoobinhost]
priority = 1
sync-uri = https://distfiles.gentoo.org/releases/amd64/binpackages/23.0/x86-64nano /etc/portage/package.use/00video_cards 新建 package use 文件配置系统显卡,会为支持的软件开启特定USE,我的显卡是 AMD核显加英伟达独立显卡,我的配置如下(intel 显卡添加 intel 即可):
*/* VIDEO_CARDS: amdgpu radeonsi nvidia更新仓库和系统
目前系统软件仓库并没有进行初始化,需要先使用 emerge-webrsync 从远程仓库获取最新的快照,这个会从配置的远程仓库下载最新的每日快照并同步到本地数据库,第一次初始化会自动创建本地仓库目录。
之后使用 eselect profile list 列出系统预设的一些 profile ,这个包含了预设环境必要的 USE 标记和环境变量,如果列表太长可以使用 eselect profile list | less 分页。
可能会输出这样的内容:
Available profile symlink targets:
[1] default/linux/amd64/23.0 (stable)
[2] default/linux/amd64/23.0/systemd (stable)
[3] default/linux/amd64/23.0/desktop (stable)
[4] default/linux/amd64/23.0/desktop/systemd (stable) *
[5] default/linux/amd64/23.0/desktop/gnome (stable)如果使用的 systemd 和桌面环境,使用 eselect profile set 4 选择列出预设前面的数字来选择预设,这会在 /etc/portage/ 目录下创建一个指向特定 profile 的目录链接(make.profile)。
使用 emerge --sync 同步软件仓库到最新版本,这会使用 rsync 或者 git 协议来同步更新的软件仓库,取决于之前配置文件中具体配置。
要为特定 CPU 优化编译代码可以配置 CPU_FLAGS_*。首先使用 emerge --ask --oneshot app-portage/cpuid2cpuflags 安装 cpuid2cpuflags 软件获取 CPU_FLAGS 信息,等待安装完成后使用 echo "*/* $(cpuid2cpuflags)" > /etc/portage/package.use/00cpu_flags 将变量写入 package use,这样软件就会在安装时自动使用这些 USE 。
到现在为止基本配置已经完成,可以使用 emerge --ask --verbose --update --deep --newuse @world 来更新整个系统软件包,这会下载最新软件并且安装之前选择的 profile 中必要的软件。这个过程会比较久,取决于选择的 profile ,带 desktop 的会更久。
等待安装完成没报错后使用 emerge --ask --depclean 清理系统中残留的无用包以及过时的包。
系统设置与本地化
配置时区与区域
创建一个指向目标时区的符号链接:ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
Gentoo 提供了很多支持的语言环境,默认是注释掉的,可以编辑 /etc/locale.gen 文件,取消注释需要的语言环境,比如想要美国区域和中文区域,就可以注释掉 en_US.UTF-8 UTF-8、zh_CN.UTF-8 UTF-8 两行。然后使用 locale-gen 编译语言环境。
安装完成后使用 eselect locale list 列出所有可用的系统级语言环境,使用 eselect locale set xxx 选择列表前数字来选择正确的语言环境。
也可以手动操作,使用 nano /etc/locale.conf 编辑文件,写入如下内容:
LANG="en_US.UTF-8"
LC_MESSAGE="en_US.UTF-8"
LC_COLLATE="C.UTF-8"然后重新加载环境变量:env-update && source /etc/profile && export PS1="(chroot) ${PS1}"
配置主机名和网络
使用 echo "你的主机名" > /etc/hostname 设置系统主机名。
桌面环境下配置网络推荐安装 NetworkManager ,使用 emerge --ask net-misc/networkmanager 安装软件,然后使用 systemctl enable NetworkManager 设置开机启动服务。安装 net-wireless/wpa_supplicant 进行 wifi 连接,如果安装后发现某些wifi搜索不到可以考虑启用 wpa_supplicant 软件包的 tkip USE 标记,默认是不启用的。
使用 nano /etc/hosts 编辑系统 hosts 文件,确保有类似下面的记录,确保本机 IP 配置正确:
127.0.0.1 localhost
::1 localhostfstab 配置
在传统 Linux 系统中,系统启动自动挂载的分区都需要在 /etc/fstab 文件中进行配置,否则启动后系统无法正确挂载。fstab 文件每行指定一个分区,每行包含 6 个字段,由空格分隔:
- 字段1:需要挂载的块特殊设备或者远程文件系统,通常使用本地磁盘分区的标签或者UUID
- 字段2:分区挂载点,即需要挂载到文件系统哪个目录
- 字段3:分区的文件系统类型
- 字段4:mount 命令挂载分区时的挂载选项,不同文件系统所需挂载选项不同
- 字段5:判断是否需要转储分区,一般设置为 0
- 字段6:由 fsck 用于确定文件系统检查的顺序,0 为不需要检查,1 用于根文件系统,2用于其余文件系统
使用 blkid 可以方便的查看磁盘每个分区的 UUID ,我的 fstab 文件配置:
UUID=75128735-80a5-471c-8ef1-eca9e8ac4835 / btrfs defaults,subvol=@,noatime,compress=zstd,ssd,discard=async,space_cache=v2 0 1
UUID=75128735-80a5-471c-8ef1-eca9e8ac4835 /home btrfs defaults,subvol=@home,noatime,compress=zstd,ssd,discard=async,space_cache=v2 0 0
UUID=75128735-80a5-471c-8ef1-eca9e8ac4835 /swap btrfs subvol=@swap,noatime,ssd 0 0
UUID=75128735-80a5-471c-8ef1-eca9e8ac4835 /var/tmp btrfs subvol=@gentoo_tmp,noatime,compress=zstd,ssd,discard=async,space_cache=v2 0 0
UUID=68FA-E8DB /efi vfat umask=0077 0 2
/swap/swapfile none swap defaults 0 0配置内核与固件
安装固件和微码
Linux 系统中一些硬件需要非开源固件才能工作,linux-firmware 包包含了绝大部分的固件,sof固件可以用作补充。微码(微代码)主要用于修复CPU硬件中不稳定、安全问题或其他各种漏洞。
emerge --ask sys-kernel/linux-firmware
emerge --ask sys-firmware/sof-firmware
## Intel CPU 需要安装,AMD CPU已包含在 linux-firmware 包中
emerge --ask sys-firmware/intel-microcode安装引导与内核
Gentoo 系统可以用 sys-kernel/installkernel 完成自动安装内核、initramfs生成、统一内核映像等。首先编辑特定包 USE 为 installkernel 启用某些功能:nano /etc/portage/package.use/installkernel:
sys-kernel/installkernel dracut grub这会为 grub 引导和 initramfs 提供支持,安装内核时会自动运行 grub-mkconfig 生成新配置,自动生成 initramfs 文件。
安装 installkernel 工具和 grub:
emerge --ask sys-boot/grub
emerge --ask sys-kernel/installkernel
## 创建EFI目录
mkdir -pv /efi/EFI/Gentoo
## 安装 grub
grub-install --target=x86_64-efi --efi-directory=/efi --bootloader-id=Gentoo 为了尽快启动系统,可以先安装 Gentoo 的预编译内核,进入系统后再安装自编译内核进行特定优化:
emerge --ask sys-kernel/gentoo-kernel-bin
## 运行 grub-mkconfig 确保有grub配置
grub-mkconfig -o /boot/grub/grub.cfg安装工具与启动前检查
新建用户
Linux 一般不直接使用 root 用户,可以新建一个普通用户,然后将这个用户加入到必要的组中,并为 sudo 启用支持。
## 首先重置 root 用户密码
passwd root
## 新建用户并加入必要的组
useradd -m -G wheel,users,video,audio,plugdev,network yourusername
## 设置用户密码
passwd yourusername
## 安装sudo
emerge --ask app-admin/sudo
## 允许 wheel 组使用sudo
mkdir -pv /etc/sudoers.d
echo "%wheel ALL=(ALL) ALL" > /etc/sudoers.d/wheel安装必要软件
## 文件系统工具
emerge --ask sys-fs/e2fsprogs # ext4
emerge --ask sys-fs/btrfs-progs # btrfs
emerge --ask sys-fs/dosfstools # mkfs.vfat
emerge --ask sys-fs/ntfs3g # ntfs (windows分区)
## 挂载移动磁盘
emerge --ask udiskie
## 终端文件编辑器
emerge --ask app-editors/neovim
## portage 工具包
emerge --ask app-portage/portage-utils app-portage/gentoolkit app-portage/eix启动前检查
- 确保
/etc/fstab文件配置正确 - 确保
/efi/EFI/Gentoo、/boot/目录下有文件 - 确保执行了 grub 安装以及
grub-mkconfig生成配置文件 - 设定了 root 密码和普通用户密码,否则重启登陆不了系统
检查完成后可以退出 chroot 环境,取消挂载磁盘并重启:
exit
## 如果启用了swap文件
swapoff /swap/swapfile
umount -R /mnt/gentoo
reboot