我个人要用到OpenFOAM和dealii这两个软件包。而它们都需要使用到mpi,有些软件包如deallii、hdf5仅支持mpich(因为mpich是Cray集群指定的,如果想要在Cray集群上运行mpi软件,就只能用mpich),但是在其他发行版上,大多数用到mpi的软件包都是基于openmpi的。而在一个系统内只允许有一个mpi,openmpi有从1.x到4.x多个版本,openmpi和mpich还不一样,虽然可以用mpi-selector激活特定的mpi,但是人家发行版已经编译好的二进制软件包想要重新制作难度太大了。这就导致我无法在一个统一的mpi接口上同时使用多个软件包。
gentoo因为有USE系统,所以可以定制,这样就可以保证我能在一个统一的mpi接口上同时使用这些软件包。
以上只是gentoo的部分优点,其实还是我想装屄
下面记录了我亲自安装的步骤,作为以后我再次安装时参考所用。
整体步骤
一般来讲一个linux发行版的安装步骤其实大体上都差不多,基本分为以下几步:
1. 制作启动盘
2. 从启动盘启动进入安装流程
3. 硬盘分区
4. 复制文件到分区
5. 安装引导软件(现代linux基本上都是grub)
6. 进行一些初次启动的基础设置
7. 重启进入新系统
8. 对新系统进行个性化设置
每一步都有各自的难点。不过以我的经验来看,最劝退的在硬盘分区这一步,容易搞坏。
另外对新系统进行个性化设置的时候,可能会发现某些地方和用户预期的不太一样,也可能导致劝退。
制作启动盘
大多数发行版都是通过自己的启动盘启动后进入安装步骤。而gentoo可以用任意的linux启动,然后通过chroot切换到安装分区,再进行后续步骤。但是考虑到gentoo安装过程中可能会用到一些自己特定的工具,所以我考虑后还是决定使用gentoo官方的启动盘。
在
我下载了Live GUI USB Image。当然,用其他的live系统也可以,比如debian或者opensuse,不过有些gentoo专属的工具可能会缺。
在
下载了rufus工具。
然后用rufus把刚才下载的gentoo镜像烧录到了u盘上。记得rufus一定要用4.5或者更高版本,因为低版本的只能使用dd模式,而高版本的可以使用iso镜像模式。
把刚刚制作好的usb启动盘插入usb口,然后开机,狂按delete键进入bios设置,选择usb存储介质启动,就可以从刚刚制作好的usb启动盘启动。
要特别说明一下。gentoo官方的启动盘带了一些有助于安装的工具,最重要的是mirrorselect和cpuid2cpuflags这两个工具。但是gentoo官方的启动盘没有带中文字体,就算输入法可以使用网上一些在线输入法的网站,但是没有中文字体的话,在浏览中文网站时,看到的全是小方块。这个时候可能需要浏览英文网站作为安装手册。不过也可以在启动后,通过kde控制面板直接安装中文字体,这样在浏览中文网站的时候就可以很好的显示中文了。
而如果采用其他发行版的启动盘,比如debian/ubuntu/fedora之类,它们自带了中文字体,可以正常浏览中文网站,但是缺少一些工具,可能需要手动处理一些操作。
在我第一次安装的时候,使用的是gentoo官方的启动盘,参考的也是英文的帖子。
连通网络
因为gentoo在安装过程中要下载很多文件,所以必须要连通网络。
因为我选的是Live GUI,所以开机启动以后,进入了KDE桌面,会自动识别计算机硬件以及网络。因为我的机器在路由器后面,而路由器开启了dhcp,所以网络变成了自动配置,直接就连接到了网络上。
没错,很多市面上的教程都是讲解的minimal installation CD字符界面的启动盘如何开始配置网络,因为我用的Live GUI,网络配置这步省掉了。
在左下角的开始菜单可以启动浏览器,通过浏览器浏览网页,可以在线阅读安装教程,比纯字符界面的启动盘操作方便多了。
同样通过左下角的开始菜单,启动一个命令行窗口。因为是KDE桌面,所以konsole还可以开启多标签页,可以在一个标签里进行安装,在另一个标签里输入其他命令。这样方便多了。
也许有人认为在纯命令行的minimal installation CD系统下调试网络是一件水平更高的事情,但是我还没到那种水平,先从GUI开始。
在
Gentoo Linux安装教程20220218(长期更新维护)_gentoo安装-CSDN博客
的作者选择从minimal installation CD启动,通过命令行完成网络配置,然后启动ssh, 通过ssh远程操作来完成所有的后续步骤,这个方法适用于服务器的管理。
我这边是桌面系统,而且既然已经可以通过minimal installation CD启动,也就是说可以物理接触到这台电脑了。那也没有必要非得把安装系统的工作也通过远程来处理,完全可以直接操作电脑完成系统安装,然后在安装好的系统里开启ssh,再通过ssh远程操作完成个性化配置的步骤。
硬盘分区
我的电脑上有多块硬盘,专门拿出一块来做linux系统用,所以我选择全盘安装,为此,我拆开机箱,把其他几块硬盘的sata线拔了,以免误操作把其他几块硬盘上的数据破坏了。
接下来进入实质的硬盘分区步骤。硬盘分区是十分危险的操作,必须要root权限,在gentoo Live GUI环境里,通过sudo来提权执行是不需要输入密码的,但是如果想通过su命令直接切换为root却不行。所以可以用
sudo su
命令进入root模式
我参考了几个文章
How to install Gentoo with UEFI LUKS LVM and systemd | amedeos home
Installing Gentoo – Alice's Digital Notebook
How To Install Gentoo With LVM and Disk Encryption | NKLY
关于硬盘分区,我采用的方案是GPT方式。搭配lvm和btrfs,lvm和btrfs的优势这里就不介绍了,读者可以去自行查阅相关资料。
konsole中输入命令
lsblk
输出结果大概如下
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 953.9G 0 disk
├─sda1 8:1 0 100M 0 part
├─sda2 8:2 0 16M 0 part
├─sda3 8:3 0 292.2G 0 part
├─sda4 8:4 0 680M 0 part
└─sda5 8:5 0 660.9G 0 part
sdb 8:16 0 238.5G 0 disk
├─sdb1 8:17 0 512M 0 part /boot
└─sdb2 8:18 0 238G 0 part
├─system-swap 254:0 0 2G 0 lvm
└─system-root 254:1 0 236G 0 lvm /
sdc 8:32 0 3.6T 0 disk
├─sdc1 8:33 0 16M 0 part
└─sdc2 8:34 0 3.6T 0 part
nvme0n1 259:0 0 465.8G 0 disk
├─nvme0n1p1 259:1 0 16M 0 part
└─nvme0n1p2 259:2 0 465.7G 0 part
可以看到有sda,sdb,sdc共3个sata硬盘,另外还有一个nvme0n1的nvme 硬盘,从容量和分区上上可以判断到底哪块硬盘是要用的。
当然,也可以使用
fdisk -l
列出的信息会更多。
初步分区
我选择了/dev/sdb作为安装硬盘,那么使用命令
fdisk /dev/sdb
进入分区模式
按m可以弹出提示
按l可以列出已有的分区
按d可以删除分区
按p可以打印出分区表,也就是可以列出各个分区的信息
因为我要使用全盘安装,所以先用d删除所有分区,删除所有分区后按l查看分区情况,然后按n增加新分区。我创建了以下几个分区:
bios启动分区2M,fat格式
boot分区512M,fat32格式
其他硬盘空间划分为一个lvm卷
在这个lvm卷中创建一个swap分区作为系统的swap
把这个lvm卷剩余的空间创建一个btrfs分区作为/分区,在这步其实也可以创建多个分区分别给/,/usr,/home等,但是这不是十分重要的,所以我没有费心处理。
fdisk有点古老,可以设置的内容也比较少,比如卷标之类的不能设置,也可以使用parted命令
parted -a optimal /dev/sdb
进入分区模式后,可以按照以下命令创建分区。
如果是UEFI模式启动
# Make new GPT partition table
mklabel gpt
# Create an UEFI ESP
mkpart primary 1MiB 257MiB
name 1 efi
set 1 esp on
# Create a boot partition
mkpart primary 257MiB 513MiB
name 2 boot
set 2 boot on
# Create a LVM partition
mkpart primary 513MiB 100%
name 3 data-encrypted
set 3 lvm on # 如果使用gentoo的iso启动盘,这里会自动创建swap和root的logical volumn
# Check that everything is correct and quit
print
quit
如果是BIOS模式启动
# Make new GPT partition table
mklabel gpt
# Create a BIOS Boot partition
mkpart primary 1MiB 3MiB
name 1 biosboot
set 1 bios_grub on
# Create a boot partition
mkpart primary 3MiB 259MiB
name 2 boot
set 2 boot on
# Create a LVM partition
mkpart primary 259MiB 100%
name 3 data-encrypted
set 3 lvm on
# Check that everything is correct and quit
print
quit
BIOS模式MBR分区不支持2T以上的硬盘,所以现在即使是创建分区也都是用UEFI模式GPT分区。这里之所以有区别,仅仅是考虑到将来启动的时候主板采用的启动模式。说到底还是建议使用UEFI模式。
创建加密的lvm卷组
剩下的第3个分区我打算创建lvm,所以操作有所不同。
如果你希望在lvm上开启加密,那么
cryptsetup luksFormat -c aes-xts-plain64 -s 512 /dev/sdb3
会提示你是否创建加密分区,输入yes确认,然后按照提示输入加密的密码,这个分区就被加密了。然后使用命令
cryptsetup luksOpen /dev/sdb3 lvm
在这个加密分区上创建lvm卷,这里会提示你输入加密的密码,把刚才的密码输入进去。注意这个命令最后的参数“lvm”这个成为了设备名,所以下一步使用命令
pvcreate /dev/lvm # lvm就是刚刚创建的加密分区名
创建lvm的物理卷
输入命令
vgcreate system /dev/lvm # 在lvm物理卷上创建卷组system
创建卷组
创建非加密的lvm卷组
我个人使用的电脑没必要加密,所以我跳过加密这一步,直接创建lvm物理卷。
pvcreate /dev/sdb3
输入命令
vgcreate system /dev/sdb3 # 在/dev/sdb3物理卷上创建卷组system
创建lvm分区
不论是加密还是不加密,我创建的卷组名都叫system。卷组创建好以后就可以创建分区,输入命令
lvcreate -L 8G -n swap system # 在system卷组内创建swap分区
lvcreate -l 100%VG -n root system # 在system卷组内创建root分区,使用剩余的全部空间
如果是gentoo的启动盘,在前面parted的时候就自动创建好了。
格式化分区
创建分区的时候是不能指定文件系统的,所以创建分区完成后,使用以下命令格式化对应分区创建文件系统
mkfs.vfat /dev/sdb1 # 创建fat文件系统用于bios启动
mkfs.vfat -F32 /dev/sdb2 # 创建fat32文件系统作为/boot分区
这里我采用了fat32格式的boot分区,也可以用ext4的。无论如何boot分区都必须是一个单独的primary分区,否则启动容易失败。
efi/esp分区必须是fat的
处理swap分区
mkswap /dev/system/swap # 刚才创建的lvm逻辑卷
swapon /dev/system/swap # 启用swap分区
处理根分区
mkfs.btrfs -L root /dev/system/root # 刚刚创建的逻辑卷
mount /dev/system/root /mnt/gentoo # 把格式化后的分区挂在到一个目录上备用,通常是/mnt/gentoo
如果说这块硬盘之前安装过其他的linux系统,并且已经分好区了,那么前面的分区操作都不需要,直接执行这里的格式化就可以,只要用lsblk和blkid命令查看一下分区情况,确保mkfs时选择正确的分区即可。
安装stage3
很多安装教程都是建议用户使用curl和wget来下载stage3的压缩包。因为我用的是Live GUI,所以我用浏览器到镜像站点下载的stage3的压缩包。我下载的是desktop profile openrc。这是因为我考虑到将来可能会用到FreeBSD,而systemd和FreeBSD不兼容,迁移的时候会麻烦。
stage3的压缩包下载以后,放到/mnt/gentoo目录,然后解压缩
tar -xpvf stage3*.tar.xz # 解压缩文件
rm stage3*.tar.xz # 删除不再需要的压缩包
因为用的是Live GUI,所以也可以用图形界面的工具解压缩到/mnt/gentoo目录
这样stage3的文件内容就都解压缩到/mnt/gentoo目录下了,而/mnt/gentoo其实是mount的/dev/sdb3这个lvm中的/分区。所以理论上讲,只要把grub安装到启动设备——也就是/dev/sdb——上,再设定好fstab,其实可以重启到这个stage3的系统中了。
但是这样的话后续的操作就要全部在stage3中进行,这样就失去了图形界面,无法一边安装一边上网查资料。而且因为还有一些其他参数没有设定好,比如时区、语言等等,会导致更多的不便。所以我还是坚持在Live GUI中完成后续的操作。
校对时间
因为gentoo安装过程中会下载很多文件,而且会对比文件的新旧,如果计算机本身的时间有问题,那就可能会在对比文件新旧的过程中产生一些不必要的麻烦,这里可以用命令行对一下时间
#自动或者手动设置时间
ntpd -q -g #自动
date 021822162021 #手动设置,我这时间2021年11月27日19点16分
如果计算机的时间没问题,不进行这步操作也没事
设置镜像站点
为了改善下载的速度,我们把镜像站点选为离我们较近的站点。这个mirrorselect命令就是gentoo官方启动盘中自带的一个工具,其他的启动盘里没有这个工具。
mirrorselect -i -o >> /mnt/gentoo/etc/portage/make.conf
虽然是字符界面,但是会弹出老式的那种字符界面的图形菜单供选择,根据自己的网络状态选取就好,比如说我选的是南京大学的镜像。
nano /mnt/gentoo/etc/portage/make.conf
如果采用其他的启动盘,没有mirrorselect工具,也可以直接编辑/mnt/gentoo/etc/portage/make.conf这个文件,里面增加内容
GENTOO_MIRRORS="http://mirror.nju.edu.cn/gentoo/"
配置编译选项
调整编译选项的方法是:编辑配置文件
nano /mnt/gentoo/etc/portage/make.conf
里面的内容
编译优化选项
Linux Manpages Online - man.cx manual pages
COMMON_FLAGS = "-march=native -mtune=native -O2 -pipe"
# -march=native -mtune=native 针对当前cpu优化
# -O2 中等优化,比较稳妥,如果要激进的优化可以使用-O3,但是会有一些危险的汇编代码可能会导致计算出错
# -pipe 在编译期使用管线IO而不是临时文件,通过增加内存占用的代价加快编译速度
MAKEOPTS = "-j16" # 采用多线程编译,加快编译速度。根据CPU线程数和内存填写,数字可以是CPU核心数,但是数字不能超过内存G数的一半
CFLAGS="${COMMON_FLAGS}" # C编译器的优化选项
CXXFLAGS="${COMMON_FLAGS}" # C++编译器的优化选项
FCFLAGS="${COMMON_FLAGS}" # Fortran 9x编译器的优化选项,其实和FFLAGS没啥差别
FFLAGS="${COMMON_FLAGS}" # Fortran编译器的优化选项
还可以通过命令
cpuid2cpuflags
检测当前cpu支持的指令集,并通过在/mnt/gentoo/etc/portage/make.conf中增加对应内容。比如说Ryzen 5的cpu指令集支持如下
CPU_FLAGS_X86=“aes avx avx2 f16c fma3 mmx mmxext pclmul popcnt rdrand sha sse sse2 sse3 sse4_1 sse4_2 sse4a ssse3 vpclmulqdq”
开启对该cpu所拥有指令集的支持
cpuid2cpuflags也是gentoo官方启动盘中自带的一个工具,其他系统的启动盘可能没有带这个工具
本地化选项
Localization/Guide - Gentoo wiki
L10N="en en-US zh zh-CN" # 增加额外的语言支持
LINGUAS="en en_US" # 对于这里的语言不提供额外支持
USE选项
gentoo通过USE选项来调整软件在编译和配置时的参数,在这个配置文件中可以增加一些全局参数。而如果想在各个软件包中单独设置参数,则可以在/etc/portage/package.use/目录下的软件包名的文件来调整。
对于全局而言,一般都要用的选项
USE="networkmanager pulseaudio alsa spice usbredir udisks offensive bash-completion opengl opencl vulkan v41 x264 x265 theora policykit vaapi vdpau lto cec wayland X libressl xattr dbus xft eselect-ldso"
# bash-completion 添加bash提示
# -jit 禁用JIT,因为JIT可能和hardened冲突
# libressl 替代openssl,因为openssl冒出来了心脏流血漏洞,确实有替代的需要
# vim-syntax 安装配套的vim语法高亮文件
# xattr 针对额外的文件系统特性提供支持
# alsa 增加对alsa声音系统的支持
# dbus 启用dbus对系统的支持
# gnome gnome-keyring 对GNOME的支持
# kde 对KDE的支持
# pulseaudio 对Pulseaudio的支持,在KDE环境,几乎所有的多媒体音频都是通过pulseaudio的
# xft 启用X FreeType支持
# X 启用X11支持 ,虽然新一代的图形系统大家都在逐步切换到wayland,但是有时对X11的支持是必不可少的,而且如果文件中有VIDEO_CARDS和INPUT_DEVICES这两个选项,启用对X11的支持也是有好处的
在USE选项中,还可以增加hardened参数来提高安全性,不过这额外的安全性可能会在未来带来使用上的不便,比如SELinux
加固的Gentoo (Hardened Gentoo) - Gentoo wiki
另外如果需要使用一些可互换的库,必要时切换使用,那么可以参考这个维基
Blas-lapack-switch - Gentoo wiki
在USE中增加eselect-ldso选项
其他选项
其实还可以添加VIDEO_CARDS和
INPUT_DEVICES这两个选项,有助于X系统的安装。不过因为本来我就是用的Live GUI,都已经识别好了,而且我用的是台式机,不需要针对触摸板或者指点杆做特殊处理。
ACCEPT_LICENSE=“*”
# 对任何软件的许可协议都接受,这样在emerge的时候不会需要你时不时的去接受一些奇奇怪怪的许可协议
复制DNS
因为当前的Live GUI已经识别了网卡,网络都已经配置好了,所以直接把当前系统的DNS设置复制到新的stage3里
cp -L /etc/resolv.conf /mnt/gentoo/etc/
挂载文件系统
mount /dev/mapper/system-root /mnt/gentoo # 挂载根文件系统
mount /dev/sdb2 /mnt/gentoo/boot # 挂载boot分区
mkdir -p /mnt/gentoo/boot/efi
mount /dev/sdb1 /mnt/gentoo/boot/efi # 挂载ESP分区
mount --types proc /proc /mnt/gentoo/proc
mount --rbind /sys /mnt/gentoo/sys
#mount --make-rslave /mnt/gentoo/sys #安装systemd需要
mount --rbind /dev /mnt/gentoo/dev
#mount --make-rslave /mnt/gentoo/dev #安装systemd需要
test -L /dev/shm && rm /dev/shm && mkdir /dev/shm
mount -t tmpfs -o nosuid,nodev,noexec shm /dev/shm
chmod 1777 /dev/shm
除了刚刚创建的boot分区以外,还要把bios启动的EFI分区也要挂载上去。另外proc、sys、dev也挂载上去。
我选择的是openrc,所以对于sys和dev不需要太多处理,如果选择systemd,还要额外处理一下。
shm是共享内存,如果用的是gentoo官方的启动盘,需要处理。经过实测,debian的启动盘不需要处理。
切换到stage3
到这里就可以切换到刚刚解压缩出来的stage3了
chroot /mnt/gentoo /bin/bash
source /etc/profile
export PS1="(chroot) $PS1"
通过chroot命令,当前命令行——也就是konsole里的标签页——也就切换到了新解压缩出来的stage3系统中。接下来的所有操作其实都是在stage3新系统里的操作
设置时区
通过以下命令可以查看当前时区
timedatectl
通过以下命令可以查看可用的时区
ls /usr/share/zoneinfo
如果有子目录的话,意味着里面还有更多的时区选项,比如
ls /usr/share/zoneinfo/Asia
就可以看到Shanghai
或者这个命令也可以查看可用的时区
timedatectl list-timezones
根据可选的时区设置时区,比如说我国使用的是
echo "Asia/Shanghai" > /etc/timezone
或者使用下面的命令也可以选择时区
timedatectl set-timezone Asia/Shanghai
选好时区以后更新系统设置
emerge --config sys-libs/timezone-data
源同步
设置源
编辑配置文件
cp /usr/share/portage/config/repos.conf /etc/portage/repos.conf/gentoo.conf
nano /etc/portage/repos.conf/gentoo.conf
将
sync-uri = rsync://rsync.gentoo.org/gentoo-portage
修改为
sync-uri = rsync://mirror.nju.edu.cn/gentoo-portage
这样就把官方的gpg-key源切换为南京大学的镜像。
执行源同步
emerge-webrsync # 下载Gentoo ebuild数据库快照,稍陈旧,大概1个月前,一般来讲足够用了
emerge --sync # 更新Gentoo ebuild存储库,最新的,大概几个小时前。这步网络比较慢,具体要多久视你的网络情况而定,也是切换本地源的原因。其实这么新也没啥用,不推荐
设定系统方案
eselect profile list # 列出备选的系统方案
eselect profile set <prof-num>
首先是列出备选的系统方案,然后根据清单选择
如果想要安装桌面系统,最好这步选好对应的桌面系统。虽然可以由desktop基础来安装桌面系统的软件包,但是容易出问题,因为profile里有一些特别的use设定。
更新系统
emerge --ask --verbose --update --deep --newuse @world #更新@world集(系统升级、profile构建stage3、use标记变化时需要)
emerge -avuDN @world # 也可以用缩写
系统更新以后,你的stage3系统就相当于全部重新编译了一遍,编译优化参数就是之前设置的COMMON_FLAGS。现在这个stage3系统的速度应该是有一定的提升的,不能说很大,因为目前这个系统里面对cpu占用比较多的程序暂时还没有。
安装cpuid2cpuflags
在Live GUI中,cpuid2cpuflags这个工具是有的,但是到了stage3里面,这个工具默认是没有自带的,为了后续可能用到,这里要安装一下
emerge --ask app-portage/cpuid2cpuflags
设置locale
nano /etc/locale.gen
里面的内容
en_US ISO-8859-1
en_US.UTF-8 UTF-8
zh_CN.GB18030 GB18030
zh_CN.GBK GBK
zh_CN.UTF-8 UTF-8
zh_CN.GB2312 GB2312
然后运行命令
locale-gen # 生成本地化文件
eselect locale list # 列出本地化选项
eselect locale set <locale-num> # 根据清单选择本地化方案
env-update # 更新系统环境
source /etc/profile # 更新当前bash
export PS1="(chroot) $PS1" # 当前bash提示符被重置后,再改为合适的提示符
更新gcc
gcc-config --list-profiles # 查看备选的gcc
gcc-config 2 <gcc-num> # 选取合适的gcc版本
在2024年2月,候选的gcc只有1个版本,所以也无所谓优化了。
更新过gcc后,有必要更新一下系统,新版的gcc一般来说生成的二进制文件要快一些。
emerge -avuDN @world
定制内核
更新固件
emerge --ask sys-kernel/linux-firmware # 更新固件
更新intel cpu的微代码,如果是AMD的cpu,不需要做
echo "sys-firmware/intel-microcode initramfs" > /etc/portage/package.use/intel-microcode
emerge --ask sys-firmware/intel-microcode
安装内核源代码,注意不是内核
emerge --ask sys-kernel/gentoo-sources # 安装源码包
eselect kernel list # 列出系统中有的源码包
eselect kernel set <source-num> # 选择想要编译的源码包
ls -l /usr/src/linux # 检查一下源码包是否存在
安装好内核源代码以后到/usr/src目录下看看找到源代码的目录,已经使用eselect选择过,genkernel工具会自动读取选取的这个源码包
如果你不喜欢genkernel工具,也可以自己动手编译kernel
安装内核编译工具
emerge --ask sys-kernel/genkernel
调整内核参数
cd /etc
cp -p genkernel.conf genkernel.conf.ORIG # 备份旧的配置文件
nano genkernel.conf
/etc/genkernel.conf的内容中
MAKEOPTS="$(portageq envvar MAKEOPTS)"
LVM="yes"BTRFS="yes" # 我用了btrfs文件系统
LUKS="yes" # 如果之前选择了加密的lvm就是比需的,否则不必DEFAULT_KERNEL_SOURCE="/usr/src/linux" # 这是一个软链接指向eselect kernel set所指定的内核源码目录
其他的选项看情况
安装硬件探测工具
emerge --ask sys-apps/pciutils # 安装包含lspci命令的sys-apps/pciutils包
配置并编译内核
genkernel --menuconfig all # 需要再调整参数的用-menuconfig,不需要多调整的可以不加这个参数
安装额外的文件系统支持
emerge --ask sys-fs/btrfs-progs # btrfs支持
echo "sys-fs/lvm2 lvm" > /etc/portage/package.use/lvm2 # 对lvm的支持调整一下参数
emerge --ask sys-fs/lvm2 # 对lvm的支持
rc-update add lvm boot # openrc系统设定在启动阶段载入lvm支持
# systemctl enable lvm2-monitor.service # systemd
emerge --ask sys-fs/ntfs3g # 对ntfs的支持
emerge --ask sys-fs/fuse-exfat sys-fs/exfatprogs # 对exfat的支持,大容量U盘用
对lvm的支持要特别注意,因为如果不把它加入到boot启动阶段,将来开机会出问题
如果需要对其他文件系统的支持,也可以添加
安装grub
在/etc/portage/make.conf中增加grub的配置内容
GRUB_PLATFORMS="efi-64" # x86_64 UEFI支持,目前最流行的
# GRUB_PLATFORMS="efi-32" # x86 i386 UEFI支持,因为32位cpu时代基本没有UEFI启动的设备,所以该选项其实没什么用武之地
# GRUB_PLATFORMS="pc" # x86 i386 BIOS MBR支持,古老
# GRUB_PLATFORMS="pc efi-64" # x86 i386 BIOS MBR支持,同时支持x86_64 UEFI,也就是同时支持老旧的和新的
# GRUB_PLATFORMS="pc efi-64 efi-32" # 同时支持:x86 i386 BIOS MBR,x86_64 UEFI ,x86 i386 UEFI
增加grub对lvm的支持
echo "sys-boot/grub device-mapper" > /etc/portage/package.use/grub
编译grub
emerge --ask sys-boot/grub
把grub安装到引导存储器上。安装前记得用lsblk命令查看一下块设备的清单,不要选错了
grub-install --target=x86_64-efi --efi-directory=/boot /dev/sdb
我是在一整个硬盘上安装,不用grub做多操作系统启动,所以没有让grub探测其他操作系统。当我使用多系统时,我会在开机时按delete进入bios选择启动的硬盘,以此来启动不同的操作系统
找到加密lvm的UUID
blkid
该命令会列出各个存储设备的信息,其中最重要的是UUID
配置grub
/etc/default/grub
里面的内容
GRUB_CMDLINE_LINUX_DEFAULT="dolvm crypt_root=UUID=<crypt-partition-uuid> crypt_swap=UUID=<crypt-swap-uuid> root=/dev/system/root"
其中dolvm支持lvm文件系统格式
crypt_root和crypt_swap支持加密卷。如果前面使用了加密的lvm,则必须要设置;如果没有加密,这个不加也没事
root支持根目录,注意这里root对应的值是lsblk命令显示的内容
生成grub配置文件
grub-mkconfig -o /boot/grub/grub.cfg
生成fstab
linux系统启动的时候会读取/etc/fstab文件并按照其内容挂载文件系统。内容如下
/dev/system/root / btrfs defaults 0 0
/dev/system/swap swap swap defaults 0 0
UUID=A84A-FDFE /boot vfat utf8,codepage=936 0 2
UUID=BA13-AD23 /boot/efi vfat utf8,codepage=936 0 2
也就是之前对硬盘的分区所对应的几个分区。其他硬盘上的分布如果需要挂载,可以在系统启动后通过其他方法挂载,而不建议在fstab中增加内容,因为那些设备一旦变动可能会导致系统不能启动。另外由于多个硬盘的存在,如果增减硬盘,那么/dev/sdx中的x可能会变,所以fstab里也要避免使用这种可能会变的设备名。增减硬盘UUID是不变的。
其中/boot的UUID就是之前命令blkid输出的挂载到/boot的/dev/sda2的UUID,每次格式化mkfs之后都会生成一个新的。
根分区和swap分区用的是lvm的卷,使用的其实是lvdisplay显示的内容
如果这块硬盘之前安装过其他的Linux系统,之前的分区可以不用,而是直接格式化。在最开始最好是把之前Linux系统的fstab备份出来,以作参考。
到这里stage3就已经安装到硬盘上,而且启动器grub也安装好了,接下来要进行一些配置
初次启动前配置
配置网络
使用networkmanager管理网络
emerge --ask net-misc/networkmanager # NetworkManager支持,网络连接管理服务,自动识别网卡,自动dhcp
rc-update add NetworkManager default # NetworkManager随系统启动
# systemctl enable networkp-manager # systemd
rc-update add sshd default #启用开机ssh,将来可以远程登录上来,进行远程操作
我是反对使用netifrc和dhcpcd的,因为networkmanager更适合桌面电脑
有了networkmanager开机启动以后,每次开机网络都会自动配置,自动联网
设置主机名
echo "your_host_name" > /etc/hostname
有一些文章建议编辑/etc/conf.d/hostname,我不建议
另外还要设定一些特定的主机名对应的ip,可以编辑/etc/hosts,一般来讲都是用来指定内网地址或者绕开DNS污染的
配置系统
计划任务
emerge -av sys-process/cronie # 计划任务
rc-update add cronie default # 计划任务随系统启动
一些管理工具
emerge -av app-portage/gentoolkit # gentoo的一些工具
emerge -av app-admin/sudo # sudo支持
chrony可以替代ntp,功能更丰富。但是FreeBSD上用的是ntp,而且老牌的ntp兼容性更好。各位看官自己决定
ntp方案
emerge --ask net-misc/ntp # ntp时间校准服务
rc-update add ntp-client default # openrc系统内ntp随系统启动
# systemctl enable ntpdate.service # systemd
chrony方案
emerge --ask net-misc/chrony
# openrc用下面的命令
rc-service chronyd start
rc-update add chronyd default
# systemd用下面的命令
# systemctl start chronyd.service
# systemctl enable chronyd.service
设置root密码
第一次开机登录的时候使用该密码登录
passwd root
退出以后就可以重启了
初次启动的配置
初次启动的时候,直接从grub菜单选择启动内核即可。
启动后以root登录,密码刚才设置过了
然后创建一个新的普通用户
useradd -m -G users,wheel,audio,video,portage -s /bin/bash your_user_name
passwd your_user_name
日常情况下可以以这个普通用户登录来使用
如果想要让这个用户可以用sudo的话,需要以root编辑
nano /etc/sudoers
找到
%wheel ALL=(ALL:ALL) ALL
把这一行前面的注释取消掉。这样整个wheel组的成员都可以使用sudo,这也是为什么前面添加普通用户的时候要把它加入wheel组。
如果不想要整个用户组 都有权sudo,那就设置单个用户
your_user_name ALL=(ALL:ALL) ALL
这样这个普通用户就可以使用sudo了
安装KDE
此时仍然是root在字符界面登录的状态。
emerge --ask kde-plasma/plasma-meta
emerge --ask kde-plasma/kdeplasma-addons
emerge --ask kde-apps/kwalletmanager
emerge --ask kde-plasma/kwallet-pam
emerge -1 kde-cli-tools
emerge --ask kde-apps/kde-apps-meta
如果哪个包在安装后提示要进行相应的操作,记得完成操作。其中kde-app/arch安装后会提示需要安装一些压缩解压缩的后台程序,比如rar/p7zip/lrzip
这个过程中,ffmpeg会自动安装,另外KDE自带的媒体播放器也会安装,多媒体也就解决了。
另外,KDE桌面环境自带了一个Falkon的浏览器,其实就是以前的qupzilla。
设置SDDM
emerge --ask kde-plasma/sddm-kcm
usermod -a -G video sddm # 如果sddm用户不在video组内,就无法使用显卡加速,SDDM界面就会特别缓慢
emerge --ask gui-libs/display-manager-init
# sddm依赖dbus,所以必须要添加dbus,而且还必须要在sddm之前添加
rc-update add dbus default
# systemctl enable dbus # systemd用这个命令设置dbus
rc-update add display-manager default # SDDM 开机启动
# systemctl enable sddm # systemd用这个命令设置sddm开机启动
另外有一处还需要单独处理
nano /etc/conf.d/display-manager
里面的内容
CHECKVT=7
DISPLAYMANAGER="sddm" # 这里默认的是xdm,要改过来
到了这个时候,英文的显示和使用是没有问题的,但是中文显示是小方块,而且没法输入中文。
完整中文化
安装字体
emerge --ask media-fonts/noto-cjk media-fonts/source-han-sans media-fonts/source-sans media-fonts/source-serif
eselect fontconfig list #查看系统中的所有字体
eselect fontconfig enable <noto-cjk-fonts> #刚刚安装的时候输出信息里的字体,尤其是sc(简体中文)字体
安装以后,KDE的应用程序就能正确显示中文了。
然后在KDE控制面板中设置为中文,从KDE桌面注销后,再次登录KDE后就全都是中文了。
网上很多文章会推荐安装文泉驿字体wqy,但是我个人使用下来感觉noto字体更好看。
另外,有些安装包可能会带上arphic字体,安装以后会把系统默认字体改为楷体,我觉得很难看,所以都是卸载arphic字体的
如果有什么原因必须要在系统内保留arphic字体的话,可以参考这篇帖子
Arch(KDE Plasma)中文化_arch中文输入法-CSDN博客
设置/etc/fonts/local.conf来调整字体族的设置,以此保证noto字体的优先级高于思源字体和名流字体。这样arphic字体(名流字体)的楷体就不会雀巢鸠占,默认显示还是noto字体。
但此时SDDM登陆界面还是英文
找到/etc/env.d/02locale文件,将LANG变量的值由en_US.utf8更改为zh_CN.utf8。这样即使用户没有登录,SDDM显示的也是中文了。
fcitx输入法
5.x已经出来好几年了,但是官方库至今仍然是4.x。而4.x对新版的kde支持很差,所以有必要更新到5.x
https://ivonblog.com/posts/gentoo-overlay-setup/
emerge --ask app-eselect/eselect-repository
eselect repository list
eselect repository enable gentoo-zh
nano /etc/portage/repos.d/eselect.conf
因为众所周知的原因,把里面github的源地址更改为国内的镜像
emaint sync -r gentoo-zh # 更新源内容
emerge --ask app-i18n/fcitx app-i18n/kcm-fcitx app-i18n/fcitx-configtool app-i18n/fcitx-libpinyin app-i18n/fcitx-sunpinyin
这样就安装好了fcitx
全系统使用fcitx
打开系统设置文件
nano /etc/profile
在里面追加
fcitx &
export XMODIFIERS="@im=fcitx"
export XIM=fcitx
export XIM_PROGRAM=fcitx
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
用户自己使用fcitx
一般来说,把前面的内容复制到~/.xprofile即可
如果不行,大概率是发生在kde-plasma桌面,那么创建一个文件把以上内容复制进去,再把这个文件放在~/.config/plasma-workspace/env/目录下即可。重新登录KDE的时候就会启动fcitx了
ibus输入法
emerge --ask app-i18n/ibus ibus-libpinyin
然后
nano /etc/portage/package.use/ibus
里面的内容
dev-qt/qtgui ibus
kde-plasma/plasma-desktop ibus
然后重新编译qt和kde组件以支持ibus
emerge --ask --oneshot --newuse dev-qt/qtgui kde-plasma/plasma-desktop
全系统使用ibus
nano /etc/environment
里面的内容
GTK_IM_MODULE=ibus
QT_IM_MODULE=ibus
XMODIFIERS=@im=ibus
想知道ibus支持哪些输入法,可以
emerge --ask app-portage/eix
eix -c -S engine app-i18n/ibus
配置好/etc/environment以后,重启就可以正常使用ibus输入中文了
用户自己使用ibus
可以在~/.bashrc中添加内容
export XIM=ibus
export GTK_IM_MODULE=ibus
export QT_IM_MODULE=ibus
export XMODIFIERS=@im=ibus
export XIM_PROGRAM="ibus-daemon"
export XIM_ARGS="--daemonize --xim"
如果不行的话,创建一个文件
#!/bin/sh
export XIM=ibus
export GTK_IM_MODULE=ibus
export QT_IM_MODULE=ibus
export XMODIFIERS=@im=ibus
export XIM_PROGRAM="ibus-daemon"
export XIM_ARGS="--daemonize --xim"
然后把这个文件放在~/.config/plasma-workspace/env目录下
ibus还是fcitx
ibus在kde/x11下,系统托盘,还有输入都没有问题。
不过ibus说到底是gnome的亲儿子,对kde/wayland支持不好。需要把/etc/environment里面的那3行删除,然后在“kde控制面板->输入设备->虚拟键盘”中选择ibus,然后从开始菜单选择ibus配置启动ibus进程,或者直接在命令行里启动ibus-set命令也可以,这样ibus才能在kde/wayland里启动。
不过即便如此,ibus在kde/wayland的系统托盘中仍然不会显示,而且输入的时候也没有面板,全靠猜。
在2024年,全行业都在从X11向wayland迁移。如果因为某些因素,用户坚持使用kde/x11桌面,那可以使用ibus。如果要用kde/wayland桌面,最好还是fcitx
可以通过
emerge --ask app-i18n/im-chooser
安装一个输入法选择器。这样的话不需要设置/etc/environment就可以切换输入法,这个软件是在用户目录下修改.xinitrc来实现的,不会影响系统设置,但是这个工具不支持fcitx。
安装GNOME
基本安装
在gentoo-23.0-202406版本里,KDE的输入法有问题,虽然前文说fcitx可以用,但是在这个新版里,KDE需要fcitx5,但是源里只有fcitx4,我一直搞不定fcitx5的安装。所以后来我还是切换到了GNOME。
GNOME的安装比KDE简单
emerge --ask gnome-base/gnome
env-update && source /etc/profile
gpasswd -a <username> plugdev # 把常用的普通用户加入plugdev组,在安装gnome-base/gnome的时候,该用户组已经被自动创建。前面提到的创建普通用户,那时候没有加入这个组,这是因为这个组当时并没有创建
rc-update add elogind boot
rc-service elogind start
然后编辑文件
nano /etc/conf.d/display-manager
DISPLAYMANAGER="gdm"
和KDE的sddm不同,GNOME的登陆管理器是gdm
然后把登陆管理器加入启动项
rc-update add display-manager default
rc-service display-manager start # 虽然官方说现在就可以启动桌面,但是我一般习惯后面再处理一些事情,然后再启动桌面,或者重启进桌面
# systemd
# systemctl enable gdm.service
# systemctl start gdm.service
# systemctl enable --now gdm.service # 这个命令可以把服务加入启动,同时立即启动服务,相当于上面两条命令合并
到这里,基础的GNOME就安装好了,可以登录使用了
用户组
如果用户没有加入video组,则可能会出问题,前面在创建普通用户的章节中介绍了一定要加入video组,如果前面没有处理,这里可以
gpasswd -a <user> video
即插即用设备的支持
gpasswd -a <username> plugdev # 前面提过,这里再强调一下,如果前面忘了,处理一下就好
提权
当运行过程中需要root权限时,弹出对话框请求输入root密码。这个功能再KDE是默认的,但是在GNOME需要手动开启。
nano /etc/polkit-1/rules.d/49-wheel.rules
polkit.addAdminRule(function(action, subject) { return ["unix-group:wheel"]; });
GNOME扩展
既然用了GNOME,那就必须得用extension
emerge --ask gnome-extra/gnome-shell-extensions
eselect gnome-shell-extensions list
eselect gnome-shell-extensions enable <extensions list>
开启通过浏览器一键安装extension
emerge --ask gnome-extra/gnome-browser-connector
GNOME安装后自带了一个简易的浏览器,可以用来安装扩展。如果想用其他浏览器安装扩展,其实也可以。
有一个好消息,就是GNOME扩展的网站上的扩展,都不是链接到github上的,所以不需要梯子。
以下扩展我比较喜欢
常用扩展
User Themes - GNOME Shell Extensions
这个扩展可以使用自定gtk主题,比如窗口装饰,面板风格等。用户可以到
查找自己喜爱的主题,然后通过这个扩展选择。但不幸的是,很多主题的下载链接其实是指向GitHub的
Dash to Panel - GNOME Shell Extensions
这个扩展可以把GNOME默认的上面板+下任务栏的风格,修改为类似windows的下面板+下任务栏。上面板+下任务栏是苹果风格,华丽但是并不好用,作为生产力用户,我更喜欢windows的风格。
Blur my Shell - GNOME Shell Extensions
当面板为浅色时,一旦窗口浮动,面板里的字也会变成浅色,可能GNOME这样的设计是为了让用户更加专注,但是我不喜欢。所以我选这个扩展,可以先再dash to panel里把面板设置成深色(更像windows),然后用blur my shell把面板里的字体设置成浅色,这样看的更清楚。
GitHub - vinceliuice/Fluent-gtk-theme: Fluent design gtk theme for linux desktops
启用了user theme和blur my shell后,我非常喜欢这套主题
ArcMenu - GNOME Shell Extensions
更丰富的开始菜单风格
Date Menu Formatter - GNOME Shell Extensions
这个扩展可以调整面板上时钟的显示格式
Media Controls - GNOME Shell Extensions
这个扩展可以在音量控制那里提供更多的功能
安装字体
和KDE一样,也要安装中文字体才能正确显示
emerge --ask media-fonts/noto-cjk media-fonts/source-han-sans media-fonts/source-sans media-fonts/source-serif
eselect fontconfig list #查看系统中的所有字体
eselect fontconfig enable <noto-cjk-fonts> #刚刚安装的时候输出信息里的字体,尤其是sc(简体中文)字体
ibus
既然用了GNOME,那就不要用fcitx了,就直接上ibus好了。
emerge --ask app-i18n/ibus ibus-libpinyin
然后编辑~/.profile文件
export XIM=ibus
export GTK_IM_MODULE=ibus
export QT_IM_MODULE=ibus
export XMODIFIERS=@im=ibus
export XIM_PROGRAM="ibus-daemon"
export XIM_ARGS="--daemonize --xim"ibus-daemon -rxRd
然后进GNOME->Settings > Keyboard > Input Sources,在里面添加Chinese Pinyin就好了