Featured image of post Gentoo随手记

Gentoo随手记

本人的Gentoo安装和配置手记

目录

Gentoo 是一个快速、现代化的 Linux 发行版,它的设计简洁、灵活。Gentoo 围绕自由软件建立,它不会对它的用户隐瞒“引擎盖下的细节”。Gentoo 所使用的软件包维护系统 Portage 是用 Python 编写的,这意味着用户可以轻松地查看和修改它的源代码。 Gentoo 的软件包管理系统使用源代码包(虽然也支持预编译软件包),并通过标准的文本文件配置Gentoo。换句话说,开放无处不在。 ——- 摘抄自Gentoo Wiki

安装的总流程

强烈建议参考Wiki

我在这里只是做了一些简单的记录,而且可能因为版本迭代不再适用,强烈建议参考官方Wiki

  • 准备好镜像和环境
  • 互联网连接
  • 完成分区 并挂载
  • chroot,安装核心部件
  • 配置并编译内核
  • 创建大部分Gentoo的系统配置文件
  • 必要的系统工具安装
  • 引导程序安装
  • 退出livecd环境并进入新系统
  • 添加用户配置图形界面等

下载镜像并进入LiveCD

本人是在清华大学镜像站下载的iso镜像,链接如下

镜像传送门,选择合适的镜像下载。

然后制作U盘启动器,推荐使用Ventoy

U盘插入电脑选择启动项启动,选择gentoo默认内核启动

前置准备

  1. 联网ping www.baidu.com

    • 有线网的话本人使用手机联网通过USB共享给LiveCD,使用dhcpcd命令
    • 无线网的话可以使用wpa_supplicant -i <dev> -c <(wpa_passphrase [SSID] [passwd])>
  2. 硬盘分区

    分区工具建议使用fdisk,分区前建议使用lsblk查看

    • UEFI or BIOS 引导分区(UEFI建议256MB及以上)
    • swap (如果内存足够可以不要,如果内存不足,建议设置为RAMx2)
    • root 根目录(其实本人并不建议为home目录单独分一个分区,因为我觉得对于ssd来说没必要,当然也可以创建一个共用区ntf给Windows)
  3. 创建文件系统(以sda为例)

    • UEFI分区mkfs.vfat -F 32 /dev/sda1
    • swap分区:初始化mkswap /dev/sda2,激活swapon /dev/sda2
    • root分区mkfs.ext4 /dev/sda3

开始安装

  1. 挂载

    1
    2
    3
    4
    5
    
    mkdir --parents /mnt/gentoo
    
    mount /dev/sda3 /mnt/gentoo
    # 如果/tmp/需要放在一个单独的分区,请确保其在挂载后有对应的权限
    chmod 1777 /mnt/gentoo/tmp
    
  2. 安装Gentoo安装文件

    • 确保时间正确date,从互联网下载stage3归档文件,建议使用links https://mirrors.tuna.tsinghua.edu.cn/gentoo/命令行浏览器进入tui界面进行下载,或者也可以用其他的电脑下载到硬盘后直接挂载导入到当前地址

    • 下载完成之后将下载的归档文件解压到新系统根目录

    1
    
    tar xpvf stage3-amd64-desktop-openrc-20230521T160357Z.tar.xz --xattrs-include='*.*' --numeric-owner
    

    然后配置编译选项

    nano -w /mnt/gentoo/etc/portage/make.conf

    本人的make.conf文件如下所示:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    
    # These settings were set by the catalyst build script that automatically
    # built this stage.
    # Please consult /usr/share/portage/config/make.conf.example for a more
    # detailed example.
    COMMON_FLAGS="-march=native -O2 -pipe"
    CFLAGS="${COMMON_FLAGS}"
    CXXFLAGS="${COMMON_FLAGS}"
    FCFLAGS="${COMMON_FLAGS}"
    FFLAGS="${COMMON_FLAGS}"
    
    # NOTE: This stage was built with the bindist Use flag enabled
    
    # This sets the language of build output to English.
    # Please keep this setting intact when reporting bugs.
    LC_MESSAGES=C.utf8
    MAKEOPTS="-j4"
    ACCEPT_LICENSE="*"
    ACCEPT_KEYWORDS="amd64"
    
    GENTOO_MIRRORS="https://mirrors.aliyun.com/gentoo/ http://mirrors.aliyun.com/gentoo/ https://mirrors.tuna.tsinghua.edu.cn/gentoo"
    GRUB_PLATFORMS="efi-64"
    
    # USE
    USE="networkmanager savedconfig X elogind alsa icu zsh-completion -systemd"
    
    # Xorg
    # support for touchpad, mouse, and keyboard
    INPUT_DEVICES="synaptics libinput"
    
  3. 配置并Chroot进入新系统环境

    选择镜像mirroselect -i -o >> /mnt/gentoo/etc/portage/make.conf

    配置软件仓库mkdir --parents /mnt/gentoo/etc/portage/repos.conf

    复制Portage提供的Gentoo仓库配置文件到新创建的目录cp /mnt/gentoo/usr/share/portage/config/repos.conf /mnt/gentoo/etc/portage/repos.conf/gentoo.conf

    复制DNS信息,不然进新环境后会没有网络cp --dereference /etc/resolv.conf /mnt/gentoo/etc/

    挂载必要的文件系统

    1
    2
    3
    4
    5
    6
    7
    
    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  #----# 为systemd提供的
    

    Chroot

    1
    2
    3
    4
    5
    6
    
    chroot /mnt/gentoo /bin/bash
    source /etc/profile
    export PS1="(chroot) ${PS1}"
    
    # 挂载boot分区
    mount /dev/sda1 /boot
    
  4. 配置Portage

    • 从网站安装ebuild数据库快照emerge-webrsync
    • 更新ebuild数据库emerge --sync
    • 选择正确的配置文件
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    
    eselect profile list
    Available profile symlink targets:
      [1]   default/linux/amd64/17.1 (stable)
      [2]   default/linux/amd64/17.1/selinux (stable)
      [3]   default/linux/amd64/17.1/hardened (stable)
      [4]   default/linux/amd64/17.1/hardened/selinux (stable)
      [5]   default/linux/amd64/17.1/desktop (stable) *
      [6]   default/linux/amd64/17.1/desktop/gnome (stable)
      [7]   default/linux/amd64/17.1/desktop/gnome/systemd (stable)
      [8]   default/linux/amd64/17.1/desktop/gnome/systemd/merged-usr (stable)
      ......
    

    eselect profile set 5

    • 更新@world集合emerge --ask --verbose --update --deep --newuse @world 或者 emerge -avuDN @world
    • 配置USE变量 见我上面展示的make.conf
  5. 时区、区域配置(OpenRC)

    • 选择系统时区echo "Asia/Shanghai" > /etc/timezoneemerge --config sys-libs/timezone-data
    • 区域配置nano -w /etc/locale.gen 启用en_US.UTF-8 UTF-8zh_CN.UTF-8 UTF-8,然后执行locale-gen
    • 选择区域eselect locale list我选的是en_US.utf8
    • 重新加载环境env-update && source /etc/profile && export PS1="(chroot) ${PS1}"
  6. 安装微码和固件

    • 固件 emerge --ask sys-kernel/linux-firmware

    • 微码 emerge --ask sys-firmware/intel-microcode

      其中,AMD处理器的微码已经在linux-firmware固件里面包含了

  7. 编译内核(冲!!)

    我使用的是Genkernel

    接受系统范围任意软件的许可证,也可以在/etc/portage/make.conf中设置。 mkdir /etc/portage/package.license

    安装genkernelemerge --ask sys-kernel/genkernel

    编译内核源码并安装 genkernel --mountboot --install all

    第一次可能比较慢,当然如果你的电脑性能好,也可能会编译的很快,Howerver,等到编译浏览器的时候,你会发现是处理器性能和内存大小对这影响还是很大的 (确信)

配置系统并完成安装

  1. fstab

    建议使用UUID, blkid命令可以查看UUID 内附我的fstab文件

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    
    # <fs>                  <mountpoint>    <type>          <opts>          <dump/pass>
    
    # NOTE: If your BOOT partition is ReiserFS, add the notail option to opts.
    #
    # NOTE: Even though we list ext4 as the type here, it will work with ext2/ext3
    #       filesystems.  This just tells the kernel to use the ext4 driver.
    #
    # NOTE: You can use full paths to devices like /dev/sda3, but it is often
    #       more reliable to use filesystem labels or UUIDs. See your filesystem
    #       documentation for details on setting a label. To obtain the UUID, use
    #       the blkid(8) command.
    
    #LABEL=boot             /boot           ext4            noauto,noatime  1 2
    #UUID=58e72203-57d1-4497-81ad-97655bd56494              /               ext4            noatime         0 1
    #LABEL=swap             none            swap            sw              0 0
    #/dev/cdrom             /mnt/cdrom      auto            noauto,ro       0 0
    
    
    # /dev/sda1
    UUID="80AE-02C2"        /boot   vfat    defaults,noatime        0 2
    # /dev/sda2
    UUID="711c9bab-9f43-4ebf-8817-1712928b6a89"     /       ext4    defaults,noatime,discard        0 1
    # /dev/sda3
    UUID="6676917276914429" /home/haoleng/Public    ntfs    defaults,noatime,discard        0 1
    
  2. 网络配置

  3. root密码passwd

  4. OpenRC

    查看/etc/rc.conf的注释并根据需求修改

    安装系统日志工具emerge --ask app-admin/sysklogd,更新应用配置rc-update add sysklogd default

    时间同步emerge --ask net-misc/chrony,运行rc-update add chronyd default

    网络工具NetworkManager

  5. 引导程序GRUB(UEFI)

    安装Grub echo 'GRUB_PLATFORMS="efi-64"' >> /etc/portage/make.confemerge --ask sys-boot/grub

    激活Grub grub-install --target=x86_64-efi --efi-directory=/boot --removable

    生成Grub配置文件

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    
    sudo grub-mkconfig -o /boot/grub/grub.cfg
    密码:
    正在生成 grub 配置文件 ...
    找到主题:/usr/share/grub/themes/Cyberpunk/theme.txt
    找到 Linux 镜像:/boot/vmlinuz-6.1.28-gentoo-x86_64
    找到 initrd 镜像:/boot/initramfs-6.1.28-gentoo-x86_64.img
    警告: os-prober will not be executed to detect other bootable partitions.
    Systems on them will not be added to the GRUB boot configuration.
    Check GRUB_DISABLE_OS_PROBER documentation entry.
    Adding boot menu entry for UEFI Firmware Settings ...
    完成
    

    然后就可以重启进入新系统了。

  • 重新启动正常将进入系统之后,就要自己创建一个日常使用的用户了,然后记得安装sudo 并且修改用户权限。

恭喜你,完成了Gentoo Linux 的安装工作,然后就要开始进行个人的配置工作了。下面是一些我自己的随手小记,想要了解的话可以继续阅读。

安装后相关问题记录

包管理器

Portage是用Python和Bash两种语言编写的,Portage软件系统是Gentoo最显著的特色之一。

Gentoo是滚动发行版,需要将软件仓库与上游同步:

sudo emaint --auto sync

然后再更新整个系统:

sudo emerge --ask --verbose --update --deep --newuse @world

内核的更新可以参考–>更新内核

  1. 获取新的内核源码(一般会在更新系统软件包的时候自行下载完成)

    当然您也可以单独下载

    sudo emerge --ask sys-kernel/gentoo-sources

  2. 使用eselect设置一个符号链接到新的内核源码

    1
    2
    3
    4
    
    ❯ sudo eselect kernel list
    Available kernel symlink targets:
      [1]   linux-6.1.31-gentoo *
    ❯ sudo eselect kernel set 1
    

    当然也可以手动链接

    ln -sf /usr/src/linux-6.1.31-gentoo /usr/src/linux

  3. 移动到新内核文件夹并配置

    移动到新内核文件夹cd /usr/src/linux

    配置新内核make menuconfig,或者直接使用旧内核的配置make olddefconfig,该命令会保持所有旧的.config的选项并将旧内核没有包括的新的内核选项设置为默认值

    然后编译内核,本人比较菜,采用的是自动编译的工具genkernel

  4. Genkernel自动构建和安装

    genkernel all可以自动构建和安装内核到/usr/src/linux符号链接指向的$BOOTDIR和引导程序

    如果还有外部内核模块如nvidia等需要再重新编译一次

    sudo make modules_prepare sudo emerge --ask @module-rebuid

    最后将内核更新到引导程序

    sudo grub-mkconfig -o /boot/grub/grub.cfg

安装和卸载软件(以mpv为例)

安装mpv播放器

sudo emerge --ask media-video/mpv

该过程会从软件源下载源代码并默认存在/var/cache/distfiles/中,然后解压缩、编译和安装该软件包。如果仅下载源代码而不安装,可以添加--fetchonly到emerge命令

卸载mpv播放器

sudo emerge --deselect media-video/mpv

该命令告诉Protage这个软件包现在不需要了,可以通过--depclean清理掉 注意emerge --depclean是一项危险的操作,我们可以添加一个-p选项来只列出这些包而不删除他们,示例如下:

sudo emerge -p --depclean

tty自动登录

我用的init是OpenRC,在安装系统时已经附带安装了sysvinit 因此直接编辑/etc/inittab文件修改为如下样式:

1
2
3
4
5
6
7
# TERMINALS
c1:12345:respawn:/sbin/agetty --autologin <username> --noclear 38400 tty1 linux
c2:2345:respawn:/sbin/agetty 38400 tty2 linux
c3:2345:respawn:/sbin/agetty 38400 tty3 linux
c4:2345:respawn:/sbin/agetty 38400 tty4 linux
c5:2345:respawn:/sbin/agetty 38400 tty5 linux
c6:2345:respawn:/sbin/agetty 38400 tty6 linux

双系统时间同步问题

sudo nvim /etc/conf.d/hwclock对应项修改为clock="local"

禁用 nouveau 并安装 Nvidia 驱动

编辑配置文件 /etc/modprobe.d/blacklist.conf 以禁用nouveau驱动

1
2
3
blacklist nouveau
blacklist lbm-nouveau
options nouveau modeset=0

安装nvidia驱动

sudo emerge --ask x11-drivers/nvidia-drivers

图形界面

附上我的xorg环境下的dwm配置和源码,配置简单,基本上clone下来之后make clean install就可以使用。

Firefox浏览器下指定网站禁用插件

原理是Firefx为了保护用户隐私,有些官方的域名是强制不开启扩展的,因此我们可以在这些域名后加或者删除域名

具体操作如下:

首先在地址栏输入about:config然后无视风险继续浏览,进入之后在搜索框输入extensions.webextensions.restrictedDomains,在里面添加指定域名即可,注意使用,隔开。

Linux下一些实用的软件介绍

Android设备投屏软件scrcpy

该软件在gentoo的软件源里有,如果您使用的是ACCEPT_KEYWORDS="amd64"或者我需要把软件包加入accept_keywords中,操作如下

编辑/etc/portage/package.accept_keywords

1
2
# Always use unstable packages
app-mobilephone/scrcpy ~amd64

或者将其ACCEPT_KEYWORDS="amd64"改为"~amd64"个人不建议这样

然后就可以安装软件包了, 但是安装之后有个坑,就是adb无法连接usb手机

会报错如下:

1
adb no permissions(user xxx is not in the plugdev group);....

我们需要将用户加入plugdev组中,

1
root #usermod -aG plugdev $LOGNAME 

然后还是会报错,我们还需要编辑android规则文件

sudo nvim /etc/udev/rules.d/android.rules

内容如下:

1
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0666"

然后就可以顺利使用使用scrcpy了。

adb tcpip 5037 adb connect 192.168.0.4:5037 scrcpy -S

scrcpy的一些快捷键(Mod默认为ALT键)

快捷键 运行命令
Mod + f 切换全屏
Mod + g 重置屏幕尺寸到像素比1:1
Mod + w 重置屏幕尺寸消除黑边
Mod + p 相当于电源按键
Mod + o 关闭屏幕
Mod + Shift + o 点亮关闭的屏幕
Mod + c 同步复制到电脑剪切板
Mod + v 同步粘贴剪切板的内容
Mod + i 启用或者禁用FPS监视器
Licensed under CC BY-NC-SA 4.0
最后更新于 2024-02-20 22:35 CST