gentoo安装笔记

最近比较闲,所以挑战一下自己,在自己的台式电脑上安装gentoo

下面记录了我亲自安装的步骤,作为以后我再次安装时参考所用。

整体步骤

一般来将一个linux发行版的安装步骤其实大体上都差不多,基本分为一下几步:

1. 制作启动盘

2. 从启动盘启动进入安装流程

3. 硬盘分区

4. 复制文件到分区

5. 安装引导软件(现代linux基本上都是grub)

6. 进行一些初次启动的基础设置

7. 重启进入新系统

8. 对新系统进行个性化设置

每一步都有各自的难点。不过以我的经验来看,最劝退的在硬盘分区这一步,容易搞坏。

另外对新系统进行个性化设置的时候,可能会发现某些地方和用户预期的不太一样,也可能导致劝退。

制作启动盘

大多数发行版都是通过自己的启动盘启动后进入安装步骤。而gentoo可以用任意的linux启动,然后通过chroot切换到安装分区,再进行后续步骤。但是考虑到gentoo安装过程中可能会用到一些自己特定的工具,所以我考虑后还是决定使用gentoo官方的启动盘。

Downloads – Gentoo Linux

我下载了Live GUI USB Image

Rufus - 轻松创建 USB 启动盘

下载了rufus工具。

然后用rufus把刚才下载的gentoo镜像烧录到了u盘上。和其他的发行版不同,gentoo必须要选dd模式烧录出来的usb启动盘才好用。

把刚刚制作好的usb启动盘插入usb口,然后开机,狂按delete键进入bios设置,选择usb存储介质启动,就可以从刚刚制作好的usb启动盘启动。

连通网络

因为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却不行。

我参考了几个文章

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# 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/mapper/lvm # /dev/mapper是系统指定的,lvm就是刚刚创建的加密分区名

创建lvm的物理卷

输入命令

vgcreate system /dev/mapper/lvm # 在/dev/mapper/lvm物理卷上创建卷组system

创建卷组
 

创建非加密的lvm卷组

我个人使用的电脑没必要加密,所以我跳过加密这一步,直接创建lvm物理卷。

pvcreate /dev/sdb3

输入命令

vgcreate system /dev/sdb3 # 在/dev/sdb3物理卷上创建卷组system

创建逻辑卷组 

创建lvm分区

不论是加密还是不加密,我创建的卷组名都叫system。卷组创建好以后就可以创建分区,输入命令

lvcreate -L 8G -n system-swap system # 在system卷组内创建system-swap分区
lvcreate -l 100%VG -n system-root system # 在system卷组内创建system-root分区,使用剩余的全部空间

格式化分区

创建分区的时候是不能指定文件系统的,所以创建分区完成后,使用以下命令格式化对应分区创建文件系统

mkfs.vfat /dev/sdb1 # 创建fat文件系统用于bios启动
mkfs.vfat -F32 /dev/sdb2 # 创建fat32文件系统作为/boot分区

这里我采用了fat32格式的boot分区,也可以用ext4的。无论如何boot分区都必须是一个单独的primary分区,否则启动容易失败。

处理swap分区

mkswap /dev/mapper/system-swap # /dev/mapper是lvm的固定路径,system-swap是刚才创建的lvm逻辑卷
swapon /dev/mapper/system-swap # 启用swap分区

处理根分区

mkfs.btrfs -L root /dev/mapper/system-root # /dev/mapper是lvm固定路径,system-root是刚刚创建的逻辑卷
mount /dev/mapper/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

因为用的是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 -i -o >> /mnt/gentoo/etc/portage/make.conf

 虽然是字符界面,但是会弹出老式的那种字符界面的图形菜单供选择,根据自己的网络状态选取就好,比如说我选的是南京大学的镜像。

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

也可以直接编辑/mnt/gentoo/etc/portage/make.conf这个文件,里面增加内容

GENTOO_MIRRORS="http://mirrors.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 = "-j17"     # 采用多线程编译,加快编译速度。根据CPU线程数和内存填写,数字可以是CPU核心数+1,但是数字不能超过内存G数的一半(建议用CPU核心数+1和内存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中增加对应内容

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所拥有指令集的支持

本地化选项

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"

# bash-completion 添加bash提示

# -jit t禁用JIT,因为JIT可能和hardened冲突

# libressl 替代openssl,因为openssl冒出来了心脏流血漏洞,确实有替代的需要

# vim-syntax 安装配套的vim语法高亮文件

# xattr 针对额外的文件系统特性提供支持

# alsa 增加对alsa声音系统的支持

# dbus 启用dbus对系统的支持

# -gnome -gnome-keyring 去掉对GNOME的支持

# -kde 去掉对KDE的支持

# -pulseaudio 去掉对Pulseaudio的支持

# xft 启用X FreeType支持

# X 启用X11支持 ,虽然新一代的图形系统大家都在逐步切换到wayland,但是有时对X11的支持是必不可少的,而且如果文件中有VIDEO_CARDS和INPUT_DEVICES这两个选项,启用对X11的支持也是有好处的

在USE选项中,还可以增加hardened参数来提高安全性,不过这额外的安全性可能会在未来带来使用上的不便,比如SELinux

加固的Gentoo (Hardened Gentoo) - Gentoo wiki

其他选项

其实还可以添加VIDEO_CARDS和INPUT_DEVICES这两个选项,有助于X系统的安装。不过因为本来我就是用的Live GUI,都已经识别好了,而且我用的是台式机,不需要针对触摸板或者指点杆做特殊处理。

ACCEPT_LICENSE=“*”

# 对任何软件的许可协议都接受,这样在emerge的时候不会需要你时不时的去接受一些奇奇怪怪的许可协议

复制DNS

因为当前的Live GUI已经识别了网卡,网络都已经配置好了,所以直接把当前系统的DNS设置复制到新的stage3里

cp -L /etc/resolv.conf /mnt/gentoo/etc/

挂载文件系统

mkdir /mnt/gentoo/boot
mount /dev/sdb2 /mnt/gentoo/boot
mkdir -p /mnt/gentoo/boot/efi
mount /dev/sdb1 /mnt/gentoo/boot/efi
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这个共享内存,一般来讲不需要处理,但是保险起见,我处理了一下。

切换到stage3

到这里就可以切换到刚刚解压缩出来的stage3了

chroot /mnt/gentoo /bin/bash
source /etc/profile
export PS1="(chroot) $PS1"

通过chroot命令,当前命令行——也就是konsole里的标签页——也就切换到了新解压缩出来的stage3系统中。接下来的所有操作其实都是在stage3新系统里的操作

设置时区

通过以下命令可以查看可用的时区

ls /usr/share/zoneinfo

如果有子目录的话,意味着里面还有更多的时区选项,比如

ls /usr/share/zoneinfo/Asia

就可以看到Shanghai

根据可选的时区设置时区,比如说我国使用的是

echo "Asia/Shanghai" > /etc/timezone
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://mirrors.nju.edu.cn/gentoo-portage

这样就把官方的gpg-key源切换为南京大学的镜像。

执行源同步
emerge-webrsync # 下载Gentoo ebuild数据库快照,稍陈旧
emerge --sync # 更新Gentoo ebuild存储库,最新的。这步网络比较慢,具体要多久视你的网络情况而定,也是切换本地源的原因

设定系统方案

eselect profile list # 列出备选的系统方案
eselect profile set <prof-num>

 首先是列出备选的系统方案,然后根据清单选择

更新系统

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的微代码

echo "sys-firmware/intel-microcode initramfs" > /etc/portage/package.use/intel-microcode
emerge --ask sys-firmware/intel-microcode

安装内核源代码,注意不是内核

 emerge --ask sys-kernel/gentoo-sources

安装好内核源代码以后到/usr/src目录下看看找到源代码的目录,后面要用到 

安装内核编译工具

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"
LUKS="yes" # 如果之前选择了加密的lvm就是比需的,否则不必

DEFAULT_KERNEL_SOURCE="/usr/src/linux-6.6.13-gentoo" # 就是之前安装的源代码的目录

其他的选项看情况 

安装硬件探测工具

emerge --ask sys-apps/pciutils # 安装包含lspci命令的sys-apps/pciutils包

配置并编译内核 

genkernel --menuconfig all

安装额外的文件系统支持

emerge --ask sys-fs/btrfs-progs # btrfs支持
echo "sys-fs/lvm2 lvm" > /etc/portage/package.use/lvm2 # 对lvm的支持调整一下参数
emerge --ask sys-fs/lvm2 # 对lvm的支持
emerge --ask sys-fs/ntfs3g # 对ntfs的支持

每次添加文件系统支持后会有提示,要求用rc-update添加到系统服务中,按照提示操作 

如果需要对其他文件系统的支持,也可以添加

安装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安装到引导存储器上

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/mapper/system-root"

其中dolvm支持lvm文件系统格式,crypt_root和crypt_swap支持加密卷,root支持根目录

生成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里也要避免使用这种可能会变的设备名。 

其中/boot的UUID就是之前命令blkid输出的挂载到/boot的/dev/sda2的UUID,每次格式化mkfs之后都会生成一个新的。UUID是不变的。

到这里stage3就已经安装到硬盘上,而且启动器grub也安装好了,接下来要进行一些配置

初次启动前配置

配置网络

使用networkmanager管理网络

NetworkManager - Gentoo wiki

emerge --ask net-misc/networkmanager # NetworkManager支持,网络连接管理服务,自动识别网卡,自动dhcp
rc-update add NetworkManager default # NetworkManager随系统启动
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支持

设置root密码

第一次开机登录的时候使用该密码登录 

passwd root

退出以后就可以重启了

初次启动的配置

初次启动的时候,直接从grub菜单选择启动内核即可。

启动后以root登录,密码刚才设置过了

然后创建一个新的普通用户

useradd -m -G users,wheel,audio,video,portage -s /bin/bash your_user_name

日常情况下可以以这个普通用户登录来使用

安装KDE 

 此时仍然是root在字符界面登录的状态。

KDE - Gentoo wiki

SDDM - Gentoo wiki

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
usermod -a -G video sddm
emerge --ask gui-libs/display-manager-init
rc-update add display-manager default # SDDM 开机启动

如果哪个包在安装后提示要进行相应的操作,记得完成操作。

这个过程中,ffmpeg会自动安装,另外KDE自带的媒体播放器也会安装,多媒体也就解决了。

另外,KDE桌面环境自带了一个Falkon的浏览器,其实就是以前的qupzilla。

到了这个时候,英文的显示和使用是没有问题的,但是中文显示是小方块,而且没法输入中文。 

完整中文化 

安装字体

emerge --ask media-fonts/noto-cjk

安装以后,KDE的应用程序就能正确显示中文了。 

 安装fcitx输入法

emerge --ask app-i18n/fcitx app-i18n/kcm-fcitx app-i18n/fcitx-configtool

打开系统设置文件

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

然后在KDE控制面板中设置为中文,从KDE桌面注销后,再次登录KDE后就全都是中文了,而且可以正常输入中文。 

但此时SDDM登陆界面还是英文

修改系统locale设定

找到/etc/env.d/02locale文件,将LANG变量的值由en_US.utf8更改为zh_CN.utf8。这样即使用户没有登录,SDDM显示的也是中文了。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/693544.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【算法与数据结构】1020、LeetCode飞地的数量

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;   程序如下&#xff1a; 复杂度分析&#xff1a; 时间复杂度&#xff1a; O ( ) O() O()。空间复杂…

RisingWave分布式SQL流处理数据库调研

概述 RisingWave是一款分布式SQL流处理数据库&#xff0c;旨在帮助用户降低实时应用的的开发成本。作为专为云上分布式流处理而设计的系统&#xff0c;RisingWave为用户提供了与PostgreSQL类似的使用体验&#xff0c;官方宣称具备比Flink高出10倍的性能&#xff08;指throughp…

快速清理_卸载docker_找到不用的进程_centos磁盘爆满_清理磁盘---Linux工作笔记071

查看大文件,并且按照大小排名 cd / | du -h |sort -hr|head -30 可以看到根据不用的结果进行删除 可以看到在/data/dict目录很大,里面的都可以删除 然后再去卸载docker,要不然,没有磁盘是卸载不了的 systemctl stop docker systemctl stop docker.socket yum remove docker-…

【2024上半年数学建模推荐】2024年第九届数维杯大学生数学建模挑战赛报名通知

2024上半年数模人必打的数学建模竞赛&#xff1a;数维杯全国大学生数学建模挑战赛已经开始报名。 赛题难度&#xff1a;四颗星 含金量&#xff1a;国家级二类 参赛对象&#xff1a;在校专科、本科、研究生 推荐理由&#xff1a;获奖率高&#xff0c;赛题难度比国赛略微简单…

Qt _day1

1.思维导图 2.设计一个简单登录界面 #include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {this->setWindowTitle("原神启动"); // this->setStyleSheet("background-color:rgb(255,184,64)");this->setStyl…

XSS攻击原理与解决方法

参考&#xff1a; web安全之XSS攻击原理及防范_xss攻击原理与解决方法-CSDN博客 跨站脚本攻击&#xff08;XSS)分类介绍及解决办法_反射型跨站脚本解决方案-CSDN博客 一、概述 XSS攻击是Web攻击中最常见的攻击方法之一&#xff0c;它是通过对网页注入可执行代码且成功地被浏…

ThinkPHP6中使用GatewayWorker

首先是先安装 composer require workerman/gateway-worker composer require workerman/gatewayclient下载demo 服务器开通TCP端口8282、1238 将Applications\YourApp目录随便放ThinkPHP6的哪个位置&#xff0c;我这里放在了app\gateway\ws目录中 配置composer.json "…

【竞技宝】DOTA2-喀山:莫言帕克毁天灭地 IG让一追二力克Neon

北京时间2024年2月21日,喀山未来运动会DOTA2项目在昨天迎来第二个比赛日。本日第二轮第二场比赛由IG对阵Neon。本场比赛两队在前两局各取一胜,决胜局IG的防守反击多次击溃Neon,最终IG让一追二击败Neon。以下是本场比赛的详细战报。 第一局: 首局比赛,IG在天辉方,Neon在夜魇方。…

c++try-catch块的使用和异常处理机制。异常的传播和捕获规则。

ctry-catch块的使用和异常处理机制。 在C中&#xff0c;try-catch块是一种异常处理机制&#xff0c;用于在程序执行期间捕获和处理可能发生的异常。try块用于包含可能抛出异常的代码&#xff0c;而catch块则用于捕获并处理这些异常。 以下是try-catch块的基本用法和异常处理机…

Python自动化部署与配置管理:Ansible与Docker

Ansible 和 Docker 是两种常用于自动化部署和配置管理的工具。Ansible 是一个基于 Python 的自动化运维工具&#xff0c;可以配置管理、应用部署、任务自动化等。而 Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中&…

算法项目(2)—— LSTM、RNN、GRU(SE注意力)、卡尔曼轨迹预测

本文包含什么? 项目运行的方式(包教会)项目代码LSTM、RNN、GRU(SE注意力)、卡尔曼四种算法进行轨迹预测.各种效果图运行有问题? csdn上后台随时售后.项目说明 本文实现了三种深度学习算法加传统算法卡尔曼滤波进行轨迹预测, 预测效果图 首先看下不同模型的指标: 模型RM…

unity学习(33)——角色选取界面(原版)

10ARPG网络游戏编程实践&#xff08;十&#xff09;&#xff1a;角色选择UI及创建面板制作&#xff08;一&#xff09;&#xff08;流畅&#xff09;_哔哩哔哩_bilibili 角色选择界面教程中是这样的&#xff01;&#xff08;这个美工肯定是不能拿出去卖的&#xff0c;但是是有…

IP协议及相关技术协议

一、IP基本认识 1. IP的作用 IP在TCP/IP模型中处于网络层&#xff0c;网络层的主要作用是实现主机与主机之间的通信&#xff0c;而IP的作用是在复杂的网络环境中将数据包发送给最终目的主机。 2. IP与MAC的关系 简单而言&#xff0c;MAC的作用是实现“直连”的两个设备之通信…

77、Spring、Spring Boot和Spring Cloud的关系

77、Spring、Spring Boot和Spring Cloud的关系 随着 Spring、Spring Boot 和 Spring Cloud 的不断发展&#xff0c;越来越多的开发者加入 Spring 的大军中。对于初学者而言&#xff0c;可能不太了解 Spring、Spring Boot 和 Spring Cloud 这些概念以及它们之间的关系&#xff…

[IO复用] Windows IOCP的初步学习

文章目录 前言正文重叠 IO如何理解重叠IO&#xff1a;创建重叠IO重叠IO操作的返回值如何确认IO操作的结果 IOCP比重叠IO多了什么IOCP的流程IOCP和EPOLL的比较 参考 前言 提起IO复用&#xff0c;大部分人首先接触的都是Select、Poll、Epoll&#xff0c;但是在不同的系统中&…

10个行锁、死锁案例⭐️24张加锁分析图彻底搞懂Innodb行锁加锁规则!

10个行锁、死锁案例⭐️24张加锁分析图&#x1f680;彻底搞懂Innodb行锁加锁规则&#xff01; 上篇文章 我们描述原子性与隔离性的实现&#xff0c;其中描述读操作解决隔离性问题的方案时还遗留了一个问题&#xff1a;写操作是如何解决不同的隔离性问题&#xff1f; 本篇文章…

linux CentOs 安装docker 推荐生产环境使用

目录 1. 在CentOs上安装docker所需的系统环境 2. 卸载旧版本 2.1 查看是否已安装docker 2.2 卸载已安装的docker 3. 安装方式 3.1 使用rpm存储库安装(推荐使用该方法) 3.2 从包中安装 4. 开始docker 1. 在CentOs上安装docker所需的系统环境 需要以下CentOS版本之一的维…

数据结构-邻接链表

介绍 邻接矩阵是运用较多的一种储存图的方法&#xff0c;但如果一张网图边数较少&#xff0c;就会出现二维矩阵中大部分数据为0的情况&#xff0c;浪费储存空间 为了避免空间浪费&#xff0c;也可以采用数组与链表结合的方式来存储图 假设有这样一张图 我们可以先用一个数组…

C#中的Async的异常处理

在C#的代码编写中可以通过try/catch来捕获Exception。然而当调用Async方法时需要特别注意 private void Start() {try{TestVoid();}catch (Exception e){Debug.LogException(e);} }private async void TestVoid() {var t Task.Delay(1);await t;throw new Exception("Te…

测试环境搭建整套大数据系统(四:ubuntu22.4创建普通用户)

一&#xff1a;创建用户&#xff0c;修改密码&#xff0c;增加sudo权限。 useradd dolphinscheduler #输入密码 passwd dolphinscheduler # 配置 sudo 免密 sed -i $adolphinscheduler ALL(ALL) NOPASSWD: NOPASSWD: ALL /etc/sudoers sed -i s/Defaults requirett/#Defa…