目录
Gentoo 是一个快速、现代化的 Linux 发行版,它的设计简洁、灵活。Gentoo 围绕自由软件建立,它不会对它的用户隐瞒“引擎盖下的细节”。Gentoo 所使用的软件包维护系统 Portage 是用 Python 编写的,这意味着用户可以轻松地查看和修改它的源代码。 Gentoo 的软件包管理系统使用源代码包(虽然也支持预编译软件包),并通过标准的文本文件配置Gentoo。换句话说,开放无处不在。 ——- 摘抄自Gentoo Wiki
安装的总流程
强烈建议参考Wiki
我在这里只是做了一些简单的记录,而且可能因为版本迭代不再适用,强烈建议参考官方Wiki。
- 准备好镜像和环境
- 互联网连接
- 完成分区 并挂载
- chroot,安装核心部件
- 配置并编译内核
- 创建大部分Gentoo的系统配置文件
- 必要的系统工具安装
- 引导程序安装
- 退出livecd环境并进入新系统
- 添加用户配置图形界面等
下载镜像并进入LiveCD
本人是在清华大学镜像站下载的iso镜像,链接如下
镜像传送门,选择合适的镜像下载。
然后制作U盘启动器,推荐使用Ventoy
U盘插入电脑选择启动项启动,选择gentoo默认内核启动
前置准备
-
联网
ping www.baidu.com- 有线网的话本人使用手机联网通过USB共享给LiveCD,使用
dhcpcd命令 - 无线网的话可以使用
wpa_supplicant -i <dev> -c <(wpa_passphrase [SSID] [passwd])>
- 有线网的话本人使用手机联网通过USB共享给LiveCD,使用
-
硬盘分区
分区工具建议使用
fdisk,分区前建议使用lsblk查看- UEFI or BIOS 引导分区(UEFI建议256MB及以上)
- swap (如果内存足够可以不要,如果内存不足,建议设置为RAMx2)
- root 根目录(其实本人并不建议为home目录单独分一个分区,因为我觉得对于ssd来说没必要,当然也可以创建一个共用区ntf给Windows)
-
创建文件系统(以sda为例)
- UEFI分区
mkfs.vfat -F 32 /dev/sda1 - swap分区:初始化
mkswap /dev/sda2,激活swapon /dev/sda2 - root分区
mkfs.ext4 /dev/sda3
- UEFI分区
开始安装
-
挂载
1 2 3 4 5mkdir --parents /mnt/gentoo mount /dev/sda3 /mnt/gentoo # 如果/tmp/需要放在一个单独的分区,请确保其在挂载后有对应的权限 chmod 1777 /mnt/gentoo/tmp -
安装Gentoo安装文件
-
确保时间正确
date,从互联网下载stage3归档文件,建议使用links https://mirrors.tuna.tsinghua.edu.cn/gentoo/命令行浏览器进入tui界面进行下载,或者也可以用其他的电脑下载到硬盘后直接挂载导入到当前地址 -
下载完成之后将下载的归档文件解压到新系统根目录
1tar 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" -
-
配置并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 7mount --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 6chroot /mnt/gentoo /bin/bash source /etc/profile export PS1="(chroot) ${PS1}" # 挂载boot分区 mount /dev/sda1 /boot -
配置Portage
- 从网站安装ebuild数据库快照
emerge-webrsync - 更新ebuild数据库
emerge --sync - 选择正确的配置文件
1 2 3 4 5 6 7 8 9 10 11eselect 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
- 从网站安装ebuild数据库快照
-
时区、区域配置(OpenRC)
- 选择系统时区
echo "Asia/Shanghai" > /etc/timezone,emerge --config sys-libs/timezone-data - 区域配置
nano -w /etc/locale.gen启用en_US.UTF-8 UTF-8和zh_CN.UTF-8 UTF-8,然后执行locale-gen - 选择区域
eselect locale list我选的是en_US.utf8 - 重新加载环境
env-update && source /etc/profile && export PS1="(chroot) ${PS1}"
- 选择系统时区
-
安装微码和固件
-
固件
emerge --ask sys-kernel/linux-firmware -
微码
emerge --ask sys-firmware/intel-microcode其中,AMD处理器的微码已经在linux-firmware固件里面包含了
-
-
编译内核(冲!!)
我使用的是Genkernel
接受系统范围任意软件的许可证,也可以在
/etc/portage/make.conf中设置。mkdir /etc/portage/package.license安装
genkernel包emerge --ask sys-kernel/genkernel编译内核源码并安装
genkernel --mountboot --install all第一次可能比较慢,当然如果你的电脑性能好,也可能会编译的很快,Howerver,等到编译浏览器的时候,你会发现是处理器性能和内存大小对这影响还是很大的
(确信)。
配置系统并完成安装
-
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 -
root密码
passwd -
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 -
引导程序GRUB(UEFI)
安装Grub
echo 'GRUB_PLATFORMS="efi-64"' >> /etc/portage/make.conf,emerge --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 11sudo 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
内核的更新可以参考–>更新内核
-
获取新的内核源码(一般会在更新系统软件包的时候自行下载完成)
当然您也可以单独下载
sudo emerge --ask sys-kernel/gentoo-sources -
使用
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 -
移动到新内核文件夹并配置
移动到新内核文件夹
cd /usr/src/linux配置新内核
make menuconfig,或者直接使用旧内核的配置make olddefconfig,该命令会保持所有旧的.config的选项并将旧内核没有包括的新的内核选项设置为默认值然后编译内核,本人比较菜,采用的是自动编译的工具
genkernel -
Genkernel自动构建和安装
genkernel all可以自动构建和安装内核到/usr/src/linux符号链接指向的$BOOTDIR和引导程序如果还有外部内核模块如
nvidia等需要再重新编译一次sudo make modules_preparesudo 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文件修改为如下样式:
|
|
双系统时间同步问题
sudo nvim /etc/conf.d/hwclock对应项修改为clock="local"
禁用 nouveau 并安装 Nvidia 驱动
编辑配置文件 /etc/modprobe.d/blacklist.conf 以禁用nouveau驱动
|
|
安装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:
|
|
或者将其ACCEPT_KEYWORDS="amd64"改为"~amd64",个人不建议这样
然后就可以安装软件包了, 但是安装之后有个坑,就是adb无法连接usb手机
会报错如下:
|
|
我们需要将用户加入plugdev组中,
|
|
然后还是会报错,我们还需要编辑android规则文件
sudo nvim /etc/udev/rules.d/android.rules
内容如下:
|
|
然后就可以顺利使用使用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监视器 |