早就听说 Gentoo 是一个高度可定制,能够很好的发挥机器性能的 linux 系统,作死的我来安装试试。
因为 Gentoo 是基于源码分发的系统,所有软件均需要自己编译,不想在自己电脑上折腾,就在百度云的云主机BCC上实验。
使用的云服务器情况如下,使用云服务器的 VNC 功能可以连接到云服务器的图形化桌面
- 系统盘: /dev/vda1 大小40G 系统格式ext4
- 数据盘: /dev/vdb1 大小20G 系统格式ext4
系统盘(/dev/vda1)中已经安装有 ubuntu20.04系统,将 Gentoo 安装到数据盘(/dev/vdb2)。
服务器架构
查看服务器架构是 kvm 还是 zen 等,后续编译内核有用,百度云BCC 的是 kvm 架构。
Debian/ubuntu 安装 virt-what
apt-get install virt-what
安装完直接运行命令
virt-what

安装
官方的安装教程写的十分详细,按照教程来就行,一次不行就多试几次,自己也是安装了很多次才成功
https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Media/zh-cn
系统下载
去阿里云镜像站下载就好,国内下载速度快一点,根据自己系统下载 install-xxx.iso 和 stage3-xxx 两个文件。
64 位的下载地址如下:
http://mirrors.aliyun.com/gentoo/releases/amd64/autobuilds/current-install-amd64-minimal/
从iso启动
由于是服务器,没法使用 U 盘,这里直接从 iso 启动,将下载的 iso 文件放在根目录下,然后编辑启动项:
编辑 /etc/grub/40_custom
menuentry 'Gentoo' --class gnu-linux --class iso {search --no-floppy --fs-uuid --set=root 07329829-7140-41f8-a844-80722c167f39set isofile="/gentoo.iso"loopback loop $isofilelinux (loop)/boot/gentoo root=/dev/ram0 init=/linuxrc dokeymap looptype=squashfs loop=/image.squashfs cdroot initrd=gentoo.igz isoboot=/gentoo.isoinitrd (loop)/boot/gentoo.igz}
下面这些选项一定不要写错或者漏掉,否则无法加载成功
root=/dev/ram0 init=/linuxrc dokeymap looptype=squashfs loop=/image.squashfs cdroot initrd=gentoo.igz isoboot=/gentoo.iso
更新 grub
update-grub
使用阿里源
在 /etc/portage/make.conf 中添加或修改
GENTOO_MIRRORS="http://mirrors.aliyun.com/gentoo/"
并行编译
使用 lscpu 查看当前cpu 有多少核心,即 cpus 后面的数字
在 /etc/portage/make.conf 中添加或修改
MAKEOPTS="-j2"
编译内核
内核构建基础
由于是在 kvm 虚拟机上编译内核,所以虚拟相关的支持一定要打开,不然会无法识别虚拟硬盘和设备,导致系统无法启动。
Gentoo 内核配置手册
https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Kernel/zh-cn
查看硬件
lspci
可以看到当前服务器上虚拟的各种设备,包括虚拟网卡、磁盘等,所以编译内核时一定要将虚拟化支持编译进内核。
内核配置
进入内核源码目录后,使用 make menuconfig 命令进入内核设置的图形化界面
(*代表编译到内核,M代表编译但只在需要时候才加载)
除了Gentoo 手册中列出的,下面的选项一定要开启(不同内核版本入口可能不同,多找找)
启用devtmpfs支持
Device Drivers —-> Generic Driver Options —-> [*] Maintain a devtmpfs filesystem to mount at /dev [ ] Automount devtmpfs at /dev, after the kernel mounted the rootfs
启用SCSI 磁盘支持
Device Drivers —-> SCSI device support —-> <> SCSI disk support <> NVIDIA SATA support
启用文件系统支持
File systems —-> <> Second extended fs support <> The Extended 3 (ext3) filesystem <> The Extended 4 (ext4) filesystem <> Reiserfs support <> JFS filesystem support <> XFS filesystem support <> Btrfs filesystem support DOS/FAT/NT Filesystems —-> <> MSDOS fs support <*> VFAT (Windows-95) fs support
Pseudo Filesystems —-> [] /proc file system support [] Tmpfs virtual memory file system support (former shm fs)
启用多核处理功能(现在的CPU基本上都是多核的)
Processor type and features —-> [*] Symmetric multi-processing support
启用虚拟化支持
—- Virtualization
<> Kernel-based Virtual Machine (KVM) support
<> KVM for Intel processors support
<> KVM for AMD processors support
[] Audit KVM MMU<*> Host kernel accelerator for virtio net
[*] Cross-endian support for vhost
启用虚拟硬件支持(百度云服务器使用了 qemu)
Firmware Drivers —->
<> QEMU fw_cfg device support in sysfs [] QEMU fw_cfg device parameter parsing
Device Drivers —->
[] Virtualization drivers —-> [] Virtio drivers —->
根据自己硬件和需要配置其他选项,选项越多,编译需要的时间以及编译得到的内核就越大。
参考安装virtio驱动 & 升级内核
配置完后保存,会保存在当前目录的 .config 文件中
配置文件
内核配置这一步很容易出问题,如果没有配置合适,可能找不到硬件系统无法启动。
使用下面命令更新上一步的 .config 文件,确保现在使用的模块被编译进内核,开启 kvm 支持。
make localyesconfig # 将当前使用的模块编译进内核make kvmconfig # 开启 kvm 支持
检查是否开启了虚拟磁盘支持
cat .config | grep CONFIG_VIRTIO
检查输出中是否有下面两项
CONFIG_VIRTIO_BLK=y
CONFIG_VIRTIO_PCI=y
编译安装内核
配置完成后编译安装内核
make -j4 && make modules_installmake install
问题
报错1
Please append a correct “root=” boot option
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown block(0,0)
出现上面的提示的话,一般是内核编译过程中编译配置不对,没有开启相应硬件的支持,需要重新编译内核,或者是grub 文件配置不对,可以参考
