Gentoo 安装记录

  • ~6.17K 字
  1. 1. 关于 Gentoo Linux 的安装 && 选择正确的安装媒介
  2. 2. 配置网络
  3. 3. 准备磁盘
    1. 3.1. 磁盘分区
    2. 3.2. 创建文件系统
    3. 3.3. 挂载分区
  4. 4. 安装Gentoo基础系统
    1. 4.1. 设置时区
  5. 5. 配置内核
  6. 6. 配置系统
  7. 7. 安装系统工具
  8. 8. 配置引导加载程序
  9. 9. 收尾安装工作
  10. 10. 故障

关于 Gentoo Linux 的安装 && 选择正确的安装媒介

  • 为避免双系统读取 RTC 时间因为时区不一致导致无法加载 Gentoo 内核问题,在 Windows 端设置写入到 RTC 的时区为 UTC:sudo reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /d 1 /t REG_DWORD /f
  • 关闭 bit locker 加密和 secure boot
  • 在选择 gentoo 的 boot in normal mode 安装时,会直接进入 grub rescue 环境,退出后再进入 Windows 则显示”你的PIN不可用,单击以重新设置PIN”
  • 选择 boot in grub2 mode
  • passwd root如果有公网IP,则设置一个强密码
  • rc-service sshd start 启动ssh服务

配置网络

  • net-setup显示enp12s0(以太网接口)和wlp0s20f3(无线局域网)

  • 接口命名规则:

    • p表示设备连接到主板的第几号PCI总线
    • s表示设备在第几号插槽
    • f表示该插槽的功能编号为几
  • 注意连接协议类型:

    • open/wep表示开放或者等效有线保密(由于安全性低,现已废弃)
    • 推荐使用wpa-psk/wpa2-psk
  • ip link set wlp0s20f3 up显示RFNETLINK answers: Operation not possible due to RF-kill 需要rfkill unblock wifi

  • 默认dpcp服务没有启动,需要echo 'config_eth-=("dhcp")' >> /etc/conf.d/net,修改后,重启网络服务/etc/init.d/network restart

  • ip addr查看本机ip地址,我的是连接无线的,则是wlp0s20f3项inet(表示IPV4协议)后 192.168.43.57/24去掉/24(表示网络部分占用前24位,子网掩码为255.255.255.0)

  • 在另一台处于同一个局域网(热点)的电脑远程连接ssh root@192.168.43.57后出现提示输入yes,再输入刚才设置的root密码

如果你在接下来的安装中,不小心断开了连接,重新连接继续之前的操作即可 ,注意服务器的ip地址可能会发生变化
如果你的 ssh 卡住,可以ps aux | grep ssh 查找进程 PID 并使用 kill -9 PID 杀掉这个 ssh 进程,再重新连接

准备磁盘

磁盘分区

  • lsblk -f显示有sda nvme0n1 nvme1n1分别对应U盘,加装的固态硬盘,原装的固态硬盘
  • fdisk /dev/nvme0n1
    • g创建一个新的GPT磁盘分区表GUID: AEE90FFF-915C-471C-BF7D-4CB8CD08E2D
    • n创建一个新的分区,按2次enter选择默认的分区号,和分区开始位置,结束位置设置为+1G,如果有显示Do you want to remove the signature则输入yest更改磁盘类型为efi
    • 接下来同样操作建立32G的swap分区
    • 创建/分区,我分配了300G
    • 创建/home分区,分配剩下所有空间,文件系统和根分区皆为默认的 Linux filesystem

创建文件系统

1
2
3
4
mkfs.fat -F 32 /dev/nvme0n1p1
mkswap /dev/nvme0n1p2
mkfs.ext4 /dev/nvme0n1p3
mkfs.ext4 /dev/nvme0n1p4

挂载分区

1
2
3
4
5
swapon /dev/nvme0n1p2
# 得先有根目录,才能创建下面的目录
mount /dev/nvme0n1p3 /mnt/gentoo
mount /dev/nvme0n1p4 /mnt/gentoo/home --mkdir
mount /dev/nvme0n1p1 /mnt/gentoo/efi --mkdir

如果分错了,可以umount /mnt/gentoo/home,中途随时可以使用lsblk -f或者fdisk -l来查看分区状况

安装Gentoo基础系统

1
2
3
4
5
6
7
8
9
cd /mnt/gentoo
chronyd -q
# 同步时间
vi /etc/resolv.conf
# 写入 nameserver 1.1.1.1
# 系统将使用1.1.1.1(Cloudflare提供)作为DNS服务器进行域名解析
links https://www.gentoo.org/downloads/mirrors/或者links https://mirrors.ustc.edu.cn/gentoo/
#选择releases->amd64->autobuilds->current-stage3-amd64-desktop-systemd/ 下载.tar.xz文件
tar xpvf stage3-*.tar.xz --xattrs-include='*.*' --numeric-owner
  • vi /mnt/gentoo/etc/portage/make.conf中COMMON_FLAGS改为-march=native -O2 -pipe
    增加配置如下:
1
2
3
4
5
6
7
MAKEOPTS="-j12"
GENTOO_MIRRORS="https://mirrors.ustc.edu.cn/gentoo/"
USE="-gtk -gnome qt6 qt5 gtk3 gtk2 kde alsa X wayland yulkan fcitx dist-kernel dbus vdpau nvenc"
VIDEO_CARDS="nvidia"
ACCEPT_LICENSE="@FREE @BINARY-REDISTRIBUTABLE @EULA"
ACCEPT_LICENSE="en en_US zh zh_CN"
GRUB_PLATFORMS="efi-64"

上文配置解读:
指定12线程并行编译,1job对应内存2G
指定 Gentoo 软件包的镜像源
USE 标志用于控制软件包的编译选项,-gtk 意为禁用 GTK 支持,vulkan 为图形 API 支持,dist-kernel 为启用分布式内核(Gentoo 提供的预编译内核),dbus 用于进程间通信
指定系统使用显卡驱动VIDEO_CARDS
指定系统可以接受的软件许可协议
设置接受的软件本地化语言
指定 GRUB 引导程序的平台目标

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
cp --dereference /etc/resolv.conf /mnt/gentoo/etc/
# 将/etc/resolv.conf文件复制到 Gentoo 的根文件系统中,确保在 chroot环境可以解析域名
arch-chroot /mnt/gentoo
# 进入到 Gentoo 的 chroot 环境,为后续配置提供虚拟根目录
source /etc/profile
# 加载 Gentoo 环境的用户配置文件
export PS1="(chroot) ${PS1}"
# 设置提示符以指示当前处于 chroot 环境中
emerge-webrsync
# 从网站安装 Gentoo ebuild 数据库快照
emerge news list
# 检查是否有新的新闻条目
emerge profile list
# 列出可用的 Gentoo 配置文件
emerge profile set 27
emerge --ask --oneshot app-portage/cpuid2cpuflags
# 安装cpuid2cpuflags工具
cpuid2cpuflags
# 输出当前 CPU 支持的指令集
echo "*/* $(cpuid2cpuflags)" > /etc/portage/package.use/00cpu-flags
# 将 CPU 指令集标志写入 Portage 配置文件,以便为系统的所有软件包启用这些优化
emerge --ask --verbose --update --deep --newuse -e @world
# 重新编译系统中的所有软件包,确保启用了新设置的 USE 标志,同时处理深层依赖项和新增功能,如果在此时你不小心断开了网络连接(比如我第一次安装时连的手机热点,然后中途带着手机出门了),那它中途断开

设置时区

  • 查看可用时区:ls /usr/share/zoneinfo/...
    OpenRC:
  • echo "Asia/Shanghai" > /etc/timezone
  • emerge --config sys-libs/timezone-data
    systemd:
  • ln -sf ../usr/share/zoneinfo/Europe/Brussels /etc/localtime之后当 systemd 运行时,时区和相关设置可以使用 timedatectl 命令设置
  • emerge vim 我不希望使用nano
  • vim /etc/locale.gen 生成区域设置
    添加如下:
1
2
en_US.UTF-8 UTF-8 # 去掉注释即可
zh_CN.UTF-8 UTF-8
  • locale-gen 根据 /etc/locale.gen 文件中的设置生成所需的语言环境
  • locale -a 可以验证当前所选择的 locale 可用
  • eselect locale list 显示可用目标
  • eselect locale set 5 选择 zh_CN.utf8
  • env-update && source /etc/profile && export PS1="(chroot) ${PS1}" 重新加载环境
  • nano 检测目前语言设置情况

配置内核

1
2
3
4
5
6
7
8
9
10
11
vim /etc/portage/package.use/installkernel

# 写入:sys-kernel/installkernel dracut grub

emerge --ask sys-kernel/gentoo-kernel
# 编译内核
emerge --ask sys-kernel/linux-firmware
# 安装固件
emerge --ask sys-firmware/sof-firmware
emerge -a sys-firmware/intel-microcode
# 如果你使用 Intel 的 CPU 的话

配置系统

1
2
3
emerge fstab
genfstab -U / >> /etc/fstab
echo hostname > /etc/hostname

安装系统工具

1
2
3
4
5
6
7
8
9
10
emerge --ask app-admin/sysklogd 安装系统日志
rc-update add sysklogd default
emerge --ask sys-process/cronie 安装守护进程
rc-update add cronie default
emerge --ask sys-apps/mlocate 安装文件索引
emerge --ask app-shells/bash-completion
emerge --ask net-misc/chrony 时间同步
rc-update add chronyd default
emerge -a sys-fs/e2fsprogs sys-fs/dosfstools 安装文件系统工具,对应 ext4 和 VFAT
emerge --ask sys-block/io-scheduler-udev-rules

配置引导加载程序

1
2
grub-install --target=x86_64-efi --efi-directory=/efi
grub-mkconfig -o /boot/grub/grub.cfg

收尾安装工作

1
2
3
4
5
6
7
8
9
10
11
12
useradd -m -G users,wheel,audio,video -s /bin/bash name
passwd name
passwd root
emerge sudo
export EDITOR=vim 临时设置编辑器为 vim
visudo
在 etc/sudoers.tmp 文件中查找 root ALL=(ALL:ALL) ALL 并在其下添加 name ALL=(ALL:ALL) ALL 其中,name为你自己刚设置的用户名
rm /stage3-*.tar.* 删除安装后的残留文件
emerge openssh
rc-update add sshd default
exit
reboot

故障

  1. 问题描述:前期下载用了 OpenRC,Gentoo 启动卡死在了 Setting system clock using the hardware clock [UTC] ... 按任何键都无反应。
  2. 问题排查:
  • 进入 BIOS 界面,查看系统时间为北京时间
  • 进入修复环境 mount /dev/nvme1n1p3 /mnt arch-chroot /mnt
  • hwclock --verbose 查看硬件时钟为 UTC 时间,但数值却为 CST 时间
  • 回顾设置时区部分,执行 emerge --config sys-libs/timezone-data 时,显示 Assuming your /etc/localtime symlink is what you want; skipping update
  1. 问题更大:
    硬件时间应该是一台电脑只有一个,而系统时间应该可以有多个
  • 在 Arch 中 timedatectl set-ntp true 启动 System clock synchronized 不对啊,这是在内存中进行的
  • 进入修复环境 ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
  • hwclock --systohc
  • hwclock --verbose 检查硬件时钟正常
  • reboot 显示问题更大
    systemd