(no title)
周日闲着心血来潮,看看远处的Gentoo,这篇博文也当成长期更新的记录贴吧,只针对于AMD 64架构,just
keep learning!
安装
引导进入安装镜像
与其他发行版一样,Gentoo安装也需要一个启动镜像,有纯命令行的最小化安装CD和Gentoo LiveGUI两种,我选择前者。这个镜像可以方便地使用Ventoy进行引导,但仅仅是一个安装媒介而已。
引导时我选择默认地gentoo内核,除此外还有一个gentoo-nofb,nofb即no
framebuffer,它让内核和用户态程序通过一个统一的设备文件(通常是
/dev/fb0)直接访问显卡的显存,从而在不依赖 X server 或
Wayland
之类图形系统的情况下,也能在控制台显示图形、字体、图片,甚至跑一些简单的图形程序。
安装时可以用另一台机器远程ssh链接,一边查wiki一边安装,复制粘贴什么的都很方便。然鹅我没有多余的机子,手敲长串的命令行,屏幕还没驱动默认最大亮度,就很坐牢。
配置网络
gentoo的安装是需要网络的,如果计算机使用网线连接到IPv6路由或DHCP路由器,那么安装镜像一般是可以自动连接网络的。如果没有路由器只有个光猫,需要pppoe拨号上网,具体参考wiki。用安卓手机通过数据线连接至电脑,启用USB网络共享模式大概也是可行的。
使用WiFi连接网络也是可行的,可以使用net-setup工具,参考wiki
磁盘分区
这一步可以在先前已有的系统上进行,实在不行在pe系统里进行也可以,更直观更不容易出错,并且Linux自带的cfdisk工具和diskgenius之类的软件的操作逻辑有些不同。数据无价,谨慎更改!
2025年了,legacy BIOS逐渐消亡,GUID(GPT)表早已成为主流。我大概分了三个区:根分区、与Windows共用的EFI分区、Swap分区
使用fdisk -l命令查看磁盘设备,如果不是用ssh连接的,消息过多,可能会无法看到部分信息,此时也可以使用lsblk命令查看。
分好区之后接着将分区格式化为Linux适用的文件系统。俗话说:人生苦短,远离Gentoo😇。Gentoo是纯手动档,大量的软件包需要自己编译,这可能会对磁盘进行较多的高速I/O读写,笔者了解的文件系统类型也不多:
- xfs
- btrfs
- ext4(以及过去的ext3,ext2)
- zfs
- f2fs
我选择了xfs,它在高速IO读写方面略胜一筹,接下来是格式化:
1 | mkfs.xfs /dev/nvmexnxpx |
EFI分区由于是共用的,不用格式化,接下来开启swap分区:
1 | mkswap /dev/nvmexnxpx |
接下来挂载分区:
1 | mkdir --parents /mnt/gentoo |
wiki推荐挂载EFI分区到/efi,我已经习惯了挂载到/boot/efi
1 | mkdir --parents /mnt/gentoo/boot/efi |
安装基本的系统环境
安装镜像提供了一个临时的基本系统环境,带有内核、常用工具(bash、fdisk、wget…),让你能进入一个命令行环境进行磁盘分区、下载文件等操作。它不是最终系统,只是“施工工具”。接下来需要下载stage3文件,这是一个
预编译好的基础系统,是一个能开机、能用
chroot 进去的最小 Linux 用户空间环境,里面已经有:
- C 库(glibc 或 musl)
- 编译器(gcc 或 clang)
- 核心工具链(binutils、bash、coreutils、portage …)
有了 stage3,就能在 chroot 里运行 emerge
去拉源码并编译其余的软件。
stage3文件类型多种多样,我选择了最省事最习惯的使用systemd和multilib的stage3文件。
首先进入挂载位置/mnt/gentoo,然后设置时间,这个很关键,因为Stage 存档通常使用 HTTPS 获取,这需要相对准确的系统时间。
1 | chronyd -q |
使用命令行浏览器下载stage3文件:
1 | links https://www.gentoo.org/downloads/mirrors/ |
进入后选择Asia源中的CN,即中国镜像源,选择合适的镜像站点后进入releases/amd64/autobuilds/目录,选中合适的stage3文件,按d键开始下载,一般下载没什么问题。
接着解压包:
1 | tar xpvf stage3-*.tar.xz --xattrs-include='*.*' --numeric-owner -C /mnt/gentoo |
Gentoo系统是需要编译的,因此接下来配置的编译选项也是非常重要的。
编译选项配置文件是/mnt/gentoo/etc/portage/make.conf,下面是一个示例:
1 | # These settings were set by the catalyst build script that automatically |
CFLAGS 和 CXXFLAGS 变量分别定义了GCC C和C ++编译器的优化标志,详细信息在GNU在线手册中。
编译安装基础系统
接下来就是chroot到stage3所带的基础编译环境,开始编译新的系统,在这之前需要:
1 | cp --dereference /etc/resolv.conf /mnt/gentoo/etc/ |
以此确保chroot后网络仍然可用,接下来:
1 | arch-chroot /mnt/gentoo |
至此,我们已经进入了stage3所带的基础编译环境,也是根分区。接下来挂载EFI分区:
1 | mount /dev/nvmexnxpx /boot/efi |
然后选择合适的镜像源:
1 | emerge --ask --verbose --oneshot app-portage/mirrorselect |
然后执行:
1 | emerge-webrsyn |
Gentoo的软件包源rsyn和git两种方式,可以方便时换成后者。
接下来选择合适的配置文件,我选择了plasma桌面且带有systemd,使用eselect profile list查看所有的配置文件,使用eselect profile set 2选择相应的配置文件。
也有部分二进制软件包来自官方,参考wiki,然而我拒绝🤪。
接下来是USE变量的设置,这非常重要,它控制了编译时是否加入/删除对某些功能的支持,比如说-gtk就是删除所有编译后的包对gtk的支持,他也是在/mnt/gentoo/etc/portage/make.conf中进行配置
1 | USE=" |
接下来设置CPU_FLAGS_*,这是给 ebuild 提供 CPU
指令集信息的,不同包会根据这些 flag 决定是否启用 SIMD 优化。
1 | emerge --ask --oneshot app-portage/cpuid2cpuflags |
在/etc/portage/make.conf设置显示卡:
1 | VIDEO_CARDS="amdgpu radeonsi vdpau vaapi" |
娱乐用户直接大开:
1 | ACCEPT_LICENSE="*" |
更新系统:
1 | emerge --ask --verbose --update --deep --newuse @world |
设置时区:
1 | ls /usr/share/zoneinfo |
设置本地化:
1 | echo 'zh_CN.UTF-8 UTF-8' >> /etc/locale.gen |
安装固件、微码:
1 | emerge --ask sys-kernel/linux-firmware |
安装内核:
1 | sys-kernel/installkernel |
安装引导程序,创建文件/etc/portage/package.use/installkernel
1 | sys-kernel/installkernel grub |
接着:
1 | emerge --ask sys-kernel/installkernel |
配置系统
创建fstab!!!
设置主机名:
1 | echo storm > /etc/hostname |
安装dhcpcd并启用:
1 | emerge --ask net-misc/dhcpcd |
创建hosts文件
设置root密码
收尾
将GRUB_PLATFORMS="efi-64"加如/etc/portage/make.conf
1 | echo 'GRUB_PLATFORMS="efi-64"' >> /etc/portage/make.conf |
创建一个普通用户:
1 | useradd -m -G users,wheel,audio -s /bin/bash storm |
添加sudo权限
内核选择
gentoo
默认内核,支持K8 CPU(包括NUMA支持)和EM64T CPU。
gentoo-nofb
与“gentoo”相同,但没有framebuffer支持。