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
源同步
设置源
编辑配置文件
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显示的也是中文了。
相关文章:

gentoo安装笔记
最近比较闲,所以挑战一下自己,在自己的台式电脑上安装gentoo 下面记录了我亲自安装的步骤,作为以后我再次安装时参考所用。 整体步骤 一般来将一个linux发行版的安装步骤其实大体上都差不多,基本分为一下几步: 1. …...

Git如何使用 五分钟快速入门
Git如何使用 五分钟快速入门 Git是一个分布式版本控制系统,它可以帮助开发人员跟踪和管理项目的代码变更。与传统的集中式版本控制系统(如SVN)不同,Git允许开发人员在本地存储完整的代码仓库,并且可以独立地进行代码修…...

FreeRTOS学习笔记——(FreeRTOS临界段代码保护及调度器挂起与恢复)
这里写目录标题 1,临界段代码保护简介(熟悉)2,临界段代码保护函数介绍(掌握)3,任务调度器的挂起和恢复(熟悉) 1,临界段代码保护简介(熟悉…...

箱形理论在交易策略中的实战应用与优化
箱形理论,简单来说,就是将价格波动分成一段一段的方框,研究这些方框的高点和低点,来推测价格的趋势。 在上升行情中,价格每突破新高价后,由于群众惧高心理,可能会回跌一段,然后再上升…...

MinIO 和 Apache Tika:文本提取模式
Tl;dr: 在这篇文章中,我们将使用 MinIO Bucket Notifications 和 Apache Tika 进行文档文本提取,这是大型语言模型训练和检索增强生成 LLM和RAG 等关键下游任务的核心。 前提 假设我想构建一个文本数据集,然后我可以用它来微调 LLM.为了做…...

c编译器学习05:与chibicc类似的minilisp编译器(待续)
minilisp项目介绍 项目地址:https://github.com/rui314/minilisp 作者也是rui314,commits也是按照模块开发提交的。 minilisp只有一个代码文件:https://github.com/rui314/minilisp/blob/master/minilisp.c 加注释也只有996行。 代码结构&a…...

手撕qsort函数
前言 本篇主要讲解的是qsort函数细节以及运用实例。 紧跟我的脚步一起手撕qsort函数吧~ 欢迎关注个人主页:逸狼 更多优质内容: 拿捏c语言指针(上) 拿捏c语言指针(中) 拿捏c语言指针(下&…...

项目在linux上的简单部署
本文章只介绍项目的简单部署,暂时没有Docker部署。 项目部署有两种方式,一种是直接命令部署,第二种是用脚本,脚本本身也是将命令进行封装来执行。 命令 项目通过maven打包,启动命令: # 启动命令 nohup …...

MySQL安装教程(详细版)
今天分享的是Win10系统下MySQL的安装教程,打开MySQL官网,按步骤走呀~ 宝们安装MySQL后,需要简单回顾一下关系型数据库的介绍与历史(History of DataBase) 和 常见关系型数据库产品介绍 呀,后面就会进入正式…...

Linux platform tree下的单总线驱动程序设计(DHT11)
目录 概述 1 认识DHT11 1.1 DHT11特性 1.2 DHT11数据格式 1.3 DHT11与MCU通信 1.4 DHT11信号解析 1.4.1 起始信号 1.4.2 解析信号0 1.4.3 解析信号1 2 驱动开发 2.1 硬件接口 2.2 更新设备树 2.2.1 添加驱动节点 2.2.2 编译.dts 2.2.3 更新板卡中的.dtb 2.3 驱…...

自研爬虫框架的经验总结(理论及方法)
背景: 由于业务需要,承接一部分的数据采集工作。目前市场内的一些通用框架不太适合。故而进行了自研。 对比自研和目前成熟的框架,自研更灵活适配,可以自己组装核心方法;后者对于新场景的适配需要对框架本身有较高的理…...

配置基于 AWS CRT 的 HTTP 客户端
基于 AWS CRT 的 HTTP 客户端包括同步 AwsCrtHttpClient 和异步 AwsCrtAsyncHttpClient。基于 AWS CRT 的 HTTP 客户端具有以下 HTTP 客户端优势: 更快的 SDK 启动时间 更小的内存占用空间 降低的延迟时间 连接运行状况管理 DNS 负载均衡 SDK 中基于 AWS CRT …...

挑战杯 基于LSTM的天气预测 - 时间序列预测
0 前言 🔥 优质竞赛项目系列,今天要分享的是 机器学习大数据分析项目 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/po…...

我为什么不喜欢关电脑?
程序员为什么不喜欢关电脑? 你是否注意到,程序员们似乎从不关电脑?别以为他们是电脑上瘾,实则是有他们自己的原因!让我们一起揭秘背后的原因,看看程序员们真正的“英雄”本色! 一、上大学时。 …...

Unity【角色/摄像机移动控制】【1.角色移动】
本文主要总结实现角色移动的解决方案。 1. 创建脚本:PlayerController 2. 创建游戏角色Player,在Player下挂载PlayerController脚本 3. 把Camera挂载到Player的子物体中,调整视角,以实现相机跟随效果 3. PlayerController脚本代码…...

Oracle12cR2之Job定时作业调度器详解
Oracle12cR2之Job定时作业调度器详解 文章目录 Oracle12cR2之Job定时作业调度器详解1.Oracle Job1. 关于Job2. 使用方法 2. Job详细说明1. 查看Job的相关视图2.SYS.DBA_JOBS视图字段详细说明 3. 创建及查看Job1. 创建Job2. 查看运行中的Job 1.Oracle Job 1. 关于Job 在 Oracle…...

python自学...
一、稍微高级一点的。。。 1. 闭包(跟js差不多) 2. 装饰器 就是spring的aop 3. 多线程...

Message Pack 协议详解及应用
文章目录 一、Message Pack是什么二、Message Pack的语法规则三、Message Pack相关链接四、Message Pack应用场景五、MessagePack 兼容性与特点 一、Message Pack是什么 Message Pack是一种高效的二进制序列化格式,用于在不同的应用程序之间进行数据交换。它类似于J…...

智慧社区管理系统:构建未来的生活模式
在这个信息化、智能化的时代,我们期待的不再是简单的居住空间,而是一个集安全、便捷、舒适、环保于一体的智能化社区。为此,我们推出了全新的智慧社区管理系统,旨在将先进的科技力量引入社区管理,为居民提供更优质的生…...

Rocky 8.9 Kubespray v2.24.0 在线部署 kubernetes v1.28.6 集群
文章目录 1. 简介2. 预备条件3. 基础配置3.1 配置hostname3.2 配置互信 4. 配置部署环境4.1 在线安装docker4.2 启动容器 kubespray4.3 编写 inventory.ini4.4 关闭防火墙、swap、selinux4.5 配置内核模块 5. 部署6. 集群检查 1. 简介 kubespray 是一个用于部署和管理 Kuber…...

新版AI系统ChatGPT源码支持GPT-4/支持AI绘画去授权
源码获取方式 搜一搜:万能工具箱合集 点击资源库直接进去获取源码即可 如果没看到就是待更新,会陆续更新上 新版AI系统ChatGPT网站源码支持GPT-4/支持AI绘画/Prompt应用/MJ绘画源码/PCH5端/免授权,支持关联上下文,意间绘画模型…...

学习鸿蒙基础(5)
一、honmonyos的page路由界面的路径 新建了一个page,然后删除了。运行模拟器的时候报错了。提示找不到这个界面。原来是在路由界面没有删除这个page。新手刚接触找了半天才找到这个路由。在resources/base/profile/main_pages.json 这个和微信小程序好类似呀。 吐槽…...

Tuxera NTFS2024最新中文版支持M1/M2/M3苹果全系机型
Tuxera NTFS的传输速度会受到多种因素的影响,包括硬件配置、文件大小、存储设备的性能等。因此,无法给出具体的传输速度数值。 不过,根据一些用户的使用经验和测试数据,Tuxera NTFS的传输速度通常都非常快,能够满足大…...

【Python】OpenCV-图片添加水印处理
图片添加水印处理 1. 引言 图像处理中的水印添加是一种常见的操作,用于在图片上叠加一些信息或标识。本文将介绍如何使用OpenCV库在图片上添加水印,并通过详细的代码注释来解释每一步的操作。 2. 代码示例 以下是一个使用OpenCV库的简单代码示例&…...

Milvus数据库介绍
参考:https://www.xjx100.cn/news/1726910.html?actiononClick Milvus 基于FAISS、Annoy、HNSW 等向量搜索库构建,核心是解决稠密向量相似度检索的问题。在向量检索库的基础上,Milvus 支持数据分区分片、数据持久化、增量数据摄取、标量向量…...

notepad++的下载与使用
1.进入官网下载 https://notepad-plus-plus.org/ 点击下载即可 2.选择中文简体 3.建议安装在D盘 其余步骤按照指示就行 4.安装后这几个是必选的 设置完成后就可以写中文了 以此为例 结果为...

论UI的糟糕设计:以百度网盘为例
上面这一排鼠标一经过就会弹出来(不是点才弹出来),然后挡住你的各种操作, 弹出来时你就必须等它消失,卡一下才能操作。 在用户顺畅地操作内容时,经常就卡一下、卡一下、卡一下…… 1、比如鼠标从下到上&am…...

【Spring】三级缓存
目录标题 触发所有未加载的实例a - 开始getBean( doGetBean) - 获取单例beangetSingleton() - 获取单例beancreateBean(doCreateBean) - 创建beancreateBeanInstance - 创建并返回beanaddSingletonFactory -放三级缓存populateBea…...

CVE-2016-3088(ActiveMQ任意文件写入漏洞)
漏洞描述 1、漏洞编号:CVE-2016-3088 2、影响版本:Apache ActiveMQ 5.x~5.13.0 在 Apache ActiveMQ 5.12.x~5.13.x 版本中,默认关闭了 fileserver 这个应用(不过,可以在conf/jetty.xml 中开启);…...

270.【华为OD机试真题】字符串拼接(深度优先搜索(DFS)-JavaPythonC++JS实现)
🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目-字符串拼接二.解题思路三.题解代码Python题解代…...