前言
作为一个debian系发行版的老用户,之前一直使用mint和ubuntu两个发行版.但是最近由于原来安装系统的固态硬盘损坏,所以打算重装一个系统顺便换一个linux发行版试试看.之前之一听说像Arch和Gentoo这样的滚动发行版(rolling release distribution)可以时刻保持系统软件是最新的,一次安装之后只需要考虑进行系统更新即可.之所以选择Gentoo而不是Arch是因为根据我所了解到的信息Gentoo 可以使同一个软件的不同版本同时存在,这对于作为开发环境来说是十分吸引人的(主要是之前使用 ubuntu server 安装高版本python感觉是在是有点折腾).
本文的目的是记录我初次安装Gentoo的步骤,主要参考了yangmame的博客、Houge_Langley和Jaus_Hwang两位up主的视频教程,以及最重要的官方的Handbook. 这些参考源的信息将在文末给出对应的链接🔗.后续应该还会根据我的具体使用情况更新这个系列,包括GUI的安装、开发环境搭建等.
注意事项
迫于篇幅和本人能力,此安装步骤涉及以下条件,如果你的安装条件与我有差异请谨慎参考并且自行变通.
- 本文使用x86_64实体机进行安装;
- 本安装步骤以GPT分区uefi引导启动;
- 安装时间估算及部分编译选项是在ryzen 3950x下得倒的.
- 本文使用systemd而非openrc,以后GUI计划使用KDE plasma.
- 本文过程不对kernel进行调整和编译,直接使用二进制发行版,如果这部分有需求建议观看Houge_Langley的视频教程对应部分.
准备安装盘
如果你本身已经又一个能够正常运行的linux系统就不需要准备安装盘了,但是如果你电脑上本身没有安装好的linux系统则需要使用livecd的镜像来制作安装盘.理论上所有发行版的livecd都可以用来安装Gentoo系统,我本人是通过Gentoo官方livecd下载安装的,如果使用官方的livecd推荐下载下图所示的带GUI的版本,这样方便复制和粘贴命令,同时遇到不懂得问题也方便查找资料.
如果是windows系统可以使用UltraISO或者Rufus这样的工具将ISO文件刻录到优盘.
如果你和我一样使用的Mac,那么可以直接使用mac自带的cli工具diskutil制作启动优盘.详细步骤这里就不再赘述了,需要的可以参考此链接MacOS 制作 USB 启动盘.
准备磁盘
磁盘分区
首先使用lsblk
命令查看磁盘结构,本文将在下图所示的nvme固态硬盘中进行安装.
可以看到上面的固态硬盘还没有分区,因此需要先进行分区.你可以使用任何熟悉的分区工具,个人比较推荐带有CUI界面的的cfdisk.
1 | cfdisk /dev/nvme0n1 |
由于我不需要单独把/home 和/opt挂载到单独的分区上,因此只分了一个用于挂载/boot的分区和一个用于挂载/root的分区.官方Handbook建议是/boot分区200M即可,为了保险我设置了500M.最终分区效果如下图所示:
磁盘格式化
对于/boot分区使用下面的命令格式化成vfat格式
1 | sudo mkfs.vfat -F32 /dev/nvme0n1p1 |
对于/root分区和别的分区可以根据你的需求进行选择比如ext4、btrfs等, 我是采用的btrfs分区格式所以用下面的命令进行格式化:
1 | sudo mkfs.btrfs /dev/nvme0n1p2 |
挂载分区
这里可以直接将/boot和/root分区挂载上去,后面就不需要进行挂载了
1 | sudo mkdir /mnt/gentoo |
挂载好后通过lsblk确认分区挂载成功,对应效果如下图所示:
安装stage3
首先进入之前挂载好的gentoo文件夹
1 | cd /mnt/gentoo |
下载并解压stage3文件
然后通wget
下载对应的stage3文件,这里推荐中科大USTC镜像站,由于本文选取systemd所以通过如下命令下载的对应版本文件
1 | sudo wget https://mirrors.ustc.edu.cn/gentoo/releases/amd64/autobuilds/current-stage3-amd64-desktop-systemd/stage3-amd64-desktop-systemd-20220605T170549Z.tar.xz |
解压stage3压缩包
1 | sudo tar xpvf stage3-*.tar.xz --xattrs-include='*.*' --numeric-owner |
解压后就会在gentoo目录下生成好linux的树状目录了
配置make.conf文件
通过vim编辑make.conf文件,如果你习惯使用nano编辑文本文件将下面的vim替换为nano即可:
1 | sudo vim etc/portage/make.conf |
可以参考我的make.conf进行修改,具体作用可以看注释
1 | # These settings were set by the catalyst build script that automatically |
需要注意的是CPU_FLAGS_X86这个参数,需要根据自己的cpu具体型号确定.这里可以通过下面的命令安装cpuid2cpuflags自动输出支持的指令集
1 | emerge --ask app-portage/cpuid2cpuflags |
获得的指令集如下图所示:
配置portage源
1 | sudo mkdir --parents /mnt/gentoo/etc/portage/repos.conf |
其中gentoo.conf文件中配置为USTC的源,具体内容如下:
1 | [DEFAULT] |
安装基本文件
复制DNS信息
1 | sudo cp --dereference /etc/resolv.conf /mnt/gentoo/etc/ |
挂载必要的文件系统
1 | sudo mount --types proc /proc /mnt/gentoo/proc |
其中带有 –make-rslave的项目是使用systemd才需要的,如果你使用openrc可以不用运行.
需要注意的是,如果你不使用Gentoo的livecd的话,需要运行下面的命令让/dev/shm/目录称为一个正常挂载的tmpfs
1 | test -L /dev/shm && rm /dev/shm && mkdir /dev/shm |
chroot
做好上面的准备以后就可以chroot了,运行下面的命令进行chroot并同步
1 | sudo chroot /mnt/gentoo/ /bin/bash |
配置Portage
推荐使用快照的方式进行更新(速度快):
1 | emerge-webrsync |
如果上面的方式失败或者你有别的方面的考虑可以使用下面的命令更新(速度慢):
1 | emerge --sync |
选择配置文件
通过下列命令列出并选择你需要的profile模块
1 | eselect profile list |
由于我需要的是KDE桌面并且使用systemd,所以我选择了下图中9这个profile
第一次更新
接下来就是漫长的第一次更新了,我的3950x大概需要一小时左右,主要是看cpu的速度决定的:
1 | emerge -auvDN --with-bdeps=y @world |
在第一次更新完成后反复运行下面的命令,直至确认没有更新之后在执行后续的步骤
1 | emerge @preserved-rebuild |
配置时区和地区信息
1 | echo "Asia/Shanghai" > /etc/timezone |
接下来可以选择语言,为了方便排除错误建议选者英文,一面出现中文无法显示出来方框的问题
1 | eselect locale list |
同步环境
1 | . /etc/profile |
重新加载环境
1 | env-update && source /etc/profile && export PS1="(chroot) ${PS1}" |
安装内核
这里就是和yangmame和Houge_Langley的教程区别最大的地方,这里采用了Jaus_Hwang提到的直接使用二进制发行kernel的方式,这样不但免去了繁琐的配置和编译kernel的步骤,节省时间和精力.
1 | emerge --ask sys-kernel/gentoo-kernel-bin |
配置系统
配置fstab
新手为了省事可以使用脚本自动生成一个fstab以免手残弄错
1 | wget https://raw.githubusercontent.com/YangMame/Gentoo-Installer/master/genfstab |
如果你的内存够大的话,推荐在生成好fstab后在后面按照Houge_Langley的方法将/tmp和/var/tmp两个目录自动挂载到内存中,这样不但可以提高速度,还能省去以后编译软件时对于固态硬盘寿命的损耗.具体的方式是在自动生成的fstab后面添加下面两列内容
1 | tmpfs /tmp tmpfs size=32G,noatime 0 0 |
其中具体的大小要根据你实际的内存大小来确定,具体内容如下图所示:
安装并启动dhcpcd
安装
1 | emerge --ask net-misc/dhcpcd |
启动
如果是用的openrc可以用如下命令
1 | rc-update add dhcpcd default |
如果你和我一样使用systemd则使用下面的命令
1 | systemctl enable --now dhcpcd |
确认系统安装正确(仅适用于systemd)
对于systemd来说直接运行下面的命令后根据提示进行设置即可
1 | systemd-firstboot --prompt --setup-machine-id |
设置root密码
1 | passwd |
需要注意的是Gentoo默认的安全级别比较高,需要比较复杂的密码才能通过.
配置系统引导GRUB
如果之前已经按照本文在make.conf中加入了GRUB_PLATFORMS=”efi-64”并且使用efi引导,则直接运行下面的命令即可
1 | emerge --ask --verbose sys-boot/grub |
运行上面的命令后正常情况下应该弹出如下图所示的提示
生成grub配置文件
1 | grub-mkconfig -o /boot/grub/grub.cfg |
最终步骤
现在其实就可以直接重启了,但是建议重启前进行检查,比如/boot目录里面是否有应该存在的内容一类的.确认无误后就可以执行以下操作重启计算机进入系统了
1 | exit #推出chroot环境 |
如果没有问题那么重启后就可以正常进入安装好的Gentoo系统了:
参考链接
Houge_Langley 乐享 Linux 生活第五期,再谈 Gentoo Linux,从安装到初体验