% 个人学习整理,仅供参考 — Xin
同步时间,20231117(同步与个人blog)
Gentoo Linux 中文社区 https://gentoo.site/
QQ交流群: 87709706
本文仅适用于 amd64架构平台,EFI/UEFI的主机可食用
食材准备
做LFS需要,自己四处找食材。做Gentoo呢,需要去官网买准备好的一堆食材。
购物清单: minimal镜像和stage3的系统包(没有外网加速条件的stage3包建议先行下载,复制到安装U盘中)
购买链接: https://www.gentoo.org/downloads/
备菜工具: 启动盘制作,此处略过。可以使用rufus(链接为官网,外网,稍慢)
个人安装环境介绍(作为参考)
CPU、显卡 不同的,需要自行上官网查找对应的安装方法
3A平台,5950X,RX6500,ASUS Gamming WIFI I X570
架构: AMD64
init: Openrc
镜像文件:install-amd64-minimal-20230220T081656Z.iso
系统包:stage3-amd64-openrc-20230220T081656Z.tar.xz
关于 init 选择
System,并行启动,集成度高,执行速度快
OpenRC,串行启动,启动的东西多,开机速度会稍慢些,轻量化
U盘安装阶段
键盘布局,初入系统有一个Keyboard Layout选项,不动默认就是qwerty布局,Dvorak是14,其他的自行查看
键盘布局,没来及输入可以用命令loadkeys dvorak
,dvorak换成自己想要的布局名称就行
服务,推荐 打开ssh服务rc-service sshd start
,然后设置root用户密码password root
然后提示,输入密码
网络,推荐网线连接,简单。(特别是无线网是中文名称/非英文符号名称的,主要是没有其他的输入法。当然输入对应的编号也成。)
网络/网卡基本信息查看
ip link
:显示 所有已检测到的网卡(包含虚拟网卡和loop环回路线),也用于查看网卡名称
ifconfig
:显示 所有网卡的状态与具体信息,同时连接到网络的网卡会显示inet/inet6的ip地址
net-setup
网卡名称
net-setup
会询问你关于网络环境的一些问题。流程结束后,网络应该就可以正常工作啦
意外问题(网卡无法使用)
网络模块是否已加载
ls /lib/modules/`uname -r`/kernel/drivers/net
# 有输出就成, 没有看下面
网络模块驱动手动加载
modprobe 驱动名称
# 驱动名称得按实际看
查看系统中可用网络接口名称
ls /sys/class/net
网线连接(强烈推荐)
ip link
:可以查看所有可用的网络设备的状态 — ip
命令来自iproute
包
<>
中有UP,说明开启/启用状态
dhcpcd dev
:开启DHCP dev — 网络设备的名字
ping -c 3 www.baidu.com
:想ping啥ping啥
ifconfig dev
:记住inet 后的ip地址(ssh需要),dev — 同上 — ifconfig
命令来自net-tools
(不推荐,圈内已弃用)
一定要做的 - ssh
启动: rc-service sshd start
连接: ssh username@ip地址
>> yes >> 输入密码
DNS配置
DNS配置文件: nano -w /etc/resolv.conf
(镜像内自带的是nano,livecd也有vi;进入chroot后,只有nano)
#/etc/resolv.conf
nameserver ${NAMESERVER1}
nameserver ${NAMESERVER2}
# 如果需要多个不同网络切换,直接多配置几个也可以,会自动轮训的
nameserver 192.168.3.1
nameserver 192.168.8.1
nameserver 192.168.121.154
无线连接
(不适用)注意点
- 处于英文操作系统/安装流程中,不要使用含有非英文的特殊字符的无线网名称。
- 无法输入中文,特别是tty2-6中,没有中文输入支持。
- 安装流程中,不切换为中文,因为安装界面的纯文字不支持中文字符,非ASCII表中的文字一般都无法正确显示 ( / 口 \ )
- 实在只能用的,你得知道wifi的ESSID的编号
wpa_supplicant — 无线网临连接方案
如遇到 引导盘/常规系统,尚未联网,且没有自带的iw,iwd,等连接软件,可以使用wpa_supplicant临时联网。但此联网方式,不建议作为长久连接网络的方法。
## 生成wpa_supplicant.conf
wpa_passphrase ESSID pssward > /etc/wpa_supplicant/wpa_supplicant.conf
## 使用wpa_supplicant连接
wpa_supplicant -i 网卡名称 -B -Dwext -c wpa_supplicant.conf文件位置
## 网卡名称 可以使用 查看
ip link
网络周边问题
关于网络管理器network,NetworkManager,systemd-networkd
- network — 推荐用于服务器上,优势,稳定。命令为
network
- NetworkManager — 是一个综合的模块组成的网络管理器,优势是有GUI界面,对于有desktop的的用户来说,更方便管理网络(不过,说实话,一般用Linux的用户,使用命令行管理网络都是没问题的)。当然,人家自己也是有
nmcli
命令用作命令行管理的 - systemd-networkd — 是systemd这个init(初始化)系统现在自带的网络管理器(目前了解不多)
一定要安装/使用dhcpcd么?
- dhcpcd 用于dhcp服务,自动分配/请求分配和获取ip地址作用。
- 如果不安装dhcpcd服务,则需要自行设置静态ip地址。
前期准备
磁盘
分区建议(需要独立分区的),具体可参考 Linux FHS 标准
- 必要分区
- / 根目录
- /boot — 方便修引导 — FAT32
mkfs.fat -F 32 /dev/sda1
- /home — 方便后期扩容
- 推荐分区
- /var — 如果有服务器规划则单独分区
- /usr/local — 如果自编译的库较多或者自己写的Shell文件较多,这里一般放库类文件和Shell文件(自己的理解)
- /opt — 第三方的二进制包,或者自编译的应用级软件,反正就是较大的非源内的软件就放这里,方便管理嘛
- swap — 算分区吧,虚拟内存,我是单独的128G换下来的SSD做的Swap(高速U盘可能也行吧,但是毕竟不是装在上面的,容易碰到造成丢失),需要作为额外的内存空间的,所以可能被多次读写。
Swap一般是RAM(的1~2倍),太大也没用,就是防止到时候编译chromium和Firefox这种占内存的软件用的
因为我想跑更多的核心 make.conf配置的 -j12 (5950X 16核32线程,一般是16/2 8个 然后-jobs =2 这样更好),这就需要 大概 12*2 24G的空间,到时候还得余一些用于运行基本程序)
Tip: 不推荐在SDD上划Swap空间。
文件系统类型
- btrfs (我的选择)
mkfs.btrfs /dev/sda1
- ext4 (常见,推荐第一次用Linux或者了解不多,这个简单,兼容度高)
mkfs.ext4 /dev/sda1
- vfat 一般用于格式化SD卡、U盘等,不推荐移动硬盘用vfat ·mkfs.vfat /dev/sda1`
Tip: vfat相对于NTFS,可以格式化更小的簇
- NTFS 属于微软的文件系统,一般用于Winodws下硬盘格式化类型。现在一般的Linux发行版都会有内置的NTFS文件格式的支持,也有需要自行下载的,都一样(反正都是OpenSource的项目)。Mac需要安装插件应用才能正确使用。
其实,还有许多优秀的文件系统,留以后补充,或者直接写详细的Blog吧
GPT分区
工具:
- 官网 — fdisk — 近几年的教程已经几个使用fdisk分区了
- 推荐 — parted — 正在逐渐代替fdisk
- 推荐 — cfdisk — 有UI界面,操作简单,当然功能也比较基本,但是足够分区、mark分区Type了
格式化
mkfs.文件系统名称 指定分区的绝对路径 # 分区语句的一般格式
## 常见的分区
mkfs.vfat -F 32 /dev/sda1 #用于格式化EFI分区,用于挂载/boot目录
mkfs.btrfs --type gentoo /dev/sda2 #用于格式化Btrfs格式,用于挂载根目录(/)、家目录(/home),等等
mkfs.ext4 /dev/sda3 #用于格式化ext4格式,可挂载的目录同上
## swap分区
mkswap /dev/sda4 #初始化swap分区
swapon /dev/sda4 #激活并使用swap分区
## 等等
至此可挂载 /(根目录)
此处,仅挂载 根目录,其他的暂时可以不用挂载
mount /dev/sda2 /mn/gentoo
可选: 打开SSH
rc-service sshd start
Tip: SSH需要一个用户并设置密码,目前可以先用root
设置密码 passwd root
然后,需要设置一个比较复杂的密码
设置弱密码策略(不推荐,但是自己在用)
文件位置 cd /etc/security && vi passwdqc.conf
min=disabled,24,11,8,7
max=30
passphrase=3
match=4
similar=deny
random=47
enforce=none # everyone => none
retry=3
开工啦
一定要写在前面的,make.conf文件的完整内容
# 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="-O3 -march=znver3 -pipe"
CFLAGS="${COMMON_FLAGS}"
CXXFLAGS="${COMMON_FLAGS}"
FCFLAGS="${COMMON_FLAGS}"
FFLAGS="${COMMON_FLAGS}"
PORTDIR="/var/db/repos/gentoo"
DISTDIR="/var/cache/distfiles"
PKGDIR="/var/cache/binpkgs"
CHOST="x86_64-pc-linux-gnu"
MAKEOPTS="-j12"
GENTOO_MIRRORS="https://mirrors.tuna.tsinghua.edu.cn/gentoo"
# 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
EMERGE_DEFAULT_OPTS="--keep-going --with-bdeps=y"
## USE g-flag
USE="X wayland udev alsa -systemd -gnome -sddm -lightdm"
#GPU
## AMD/ATI GPU
VIDEO_CARDS="amdgpu radeonsi"
## intel GPU
#VIDEO_CARDS="intel"
## nvidia GPU
#VIDEO_CARDS="nvidia"
## mouse keyboard ...
INPUT_DEVICES="libinput synaptics evdev"
ACCEPT_KEYWORDS="~amd64"
#LANGUAGE
L10N="en-US zh-CN en zh"
LINGUAS="en_US zh_CN en zh"
#GRUB
GRUB_PLATFORMS="efi-64"
#ccache
FEATURES="ccache"
CCACHE_DIR="/var/cache/ccache"
CCACHE_SIZE="16G"
# 32 64
ABI_X86="32 64"
安装基本系统到硬盘
日期检查(很重要)
偏差大,会导致更新错误,软件包同步错误,还有一些奇怪的问题
date
— 显示当前系统时间
date mmddHHMMYYYY
— 手动设置当前系统的时间 (对应格式说明: 月天时分年
)
此处设置,注意角色权限(需要root权限),是否需要 sudo
下载stage包
## 下载系统文件
cd /mnt/gentoo
links https://www.gentoo.org/downloads/mirrors/#CN #选一个国内源下载哈
#或者下面是直接清华的源
links https://mirrors.tuna.tsinghua.edu.cn/gentoo/releases/amd64
## 解压文件
tar xpvf stage3-*.tar.xz --xattrs-include='*.*' --numeric-owner #等待解压结束
简单设置 make.conf
make.conf文件位置 `cd /mnt/gentoo/ && vi ./etc/portage/make.conf
修改/添加
COMMON_FLAGS="-O3 -march=native -pipe"
MAKEOPTS="-j6" # 编译最大并行数量
EMERGE_DEAULT_OPTS="--keep-going --with-bdeps=y"
安装
设置镜像mirror
mirrorselect -i -o >> /mnt/gentoo/etc/portage/make.conf
网络不好的话,在这里找吧,然后自己追加到make.conf里吧
GENTOO_MIRRORS="https://mirrors.tuna.tsinghua.edu.cn/gentoo"
设置repos软件库
## 可参考的地址
# 官网
sync-uri = rsync://rsync.gentoo.org/gentoo-portage
# 清华源
sync-uri = rsync://mirrors.tuna.tsinghua.edu.cn/gentoo-portage
mkdir -p /mnt/gentoo/etc/portage/repos.conf
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/
挂载必要的文件系统
mount --types proc /proc /mnt/gentoo/proc
mount --rbind /sys /mnt/gentoo/sys
mount --rbind /dev /mnt/gentoo/dev
mount --bind /run /mnt/gentoo/run
使用systemd用户仍需要挂载的
mount --make-rslave /mnt/gentoo/sys mount --make-rslave /mnt/gentoo/dev mount --make-rslave /mnt/gentoo/run
进入 新系统
chroot /mnt/gentoo /bin/bash
source /etc/profile && export PS1="(Xin) ${PS1}"
挂载剩余需要的分区吧
mount /dev/nvme1n1p1 /boot
mount /dev/nvme1n1p3 /home
mount /dev/sdb2 /var
mount /dev/sdb3 /opt
同步新的镜像库
emerge-webrsync
emerge --sync
Error:
Fetching most recent snapshot ...
Trying to retrieve 20230315 snapshot from https://mirrors.tuna.tsinghua.edu.cn/gentoo ...
Fetching file gentoo-20230315.tar.xz.md5sum ...
Fetching file portage-20230315.tar.xz.md5sum ...
Fetching file gentoo-20230315.tar.bz2.md5sum ...
Fetching file portage-20230315.tar.bz2.md5sum ...
Fetching file gentoo-20230315.tar.gz.md5sum ...
Fetching file portage-20230315.tar.gz.md5sum ...
20230315 snapshot was not found
* Latest snapshot date: 20230314
*
* Approximate snapshot timestamp: 1678841100
* Current local timestamp: 1678905601
*
* The current local timestamp is newer than the timestamp of the latest
* snapshot. In order to force sync, use the --revert option or remove
* the timestamp file located at '/usr/portage/metadata/timestamp.x'.
Slove:
rm /usr/portage/metadata/timestamp.x
选择合适的profile配置
- init系统 openrc
- 是否 桌面 desktop
- 是否 包含 SE Linux(不清楚这个,自己wiki.gentoo.org看吧)
- 是否 纯64环境 no-multilib
- 是否 32位环境 x32
eselect profile list
eselect profile set 1
安装cpuid2cpuflags
emerge --ask app-portage/cpuid2cpuflags
cpuid2cpuflags >> /etc/portage/make.conf
vim /etc/portage/make.conf
## 修改 替换 空格 为 =
CPU_FLAGS_X86 "aes avx ..."
## 修改后
CPU_FLAGS_X86="aes avx ..."
可选:更新一次
完全新手的话,这里不推荐更新
emerge --ask --verbose --update --deep --newuse @world
进击
内核 kernel
安装微码,添加kernel use
(可选) AMD zenver1,2,3有内核选项,需要添加执行use
echo "sys-kernel/gentoo-sources experimental" >> /etc/portage/package.use/sys-kernel
Intel 需要安装微码
emerge --ask sys-kernel/linux-firmware
安装kernel source
emerge --ask sys-kernel/gentoo-sources
选择/增加 linux软链接
eselect kernel list #显示kernel列表
eselect set 数字 #选择kernel
eselect kernel list #显示kernel列表,重新确认
使用genkernel生成.config文件
cd /usr/src/linux #进入kernel source
# 运行genkernel
genkernel kernel #如果你需要在自动配置之后,再手动调整,请使用次命令
genkernel all #完全自动 直到 自动的生成initramfs文件结束
(可选)手动调整
- 安装pciutils: `emerge --ask sys-apps/pciutils`
- `pwd` 确定自己在source文件内 `/usr/src/linux`
- `make menuconfig` 调整,save > exit
- `make && make modules_install`
- `make install`
(可选)initramfs
emerge --ask sys-kernel/dracut
dracut --kver=使用对应的内核文件名称
##检测是否成功生成
ls /boot/initramfs*
准备就绪
安装gentoolkit
gentoolkit — 提供一组安装软件需要使用的命令
equery 属于比较常用的 — equery uses 包名
查看当前包的use flags有哪些以及选装状态
emerge --ask app-portage/gentoolkit
安装genfstab — 自动生成fstab工具
`emerge --ask --verbose sys-fs/genfstab`
先把需要的都挂好再执行哈~
`genfstab / >> /etc/fstab`
`cat /etc/fstab` 检查一下
设置hostname
`echo xin > /etc/hostname`
(可选)使用DHCP — 安装dhcpcd
`emerge --ask net-misc/dhcpcd`
启用 `rc-update add dhcpcd default`
运行 `rc-service dhcpcd start`
设置hosts文件
#查看是否已有内容,不为空就 vim / nano手动添加
cat /etc/hosts
#为空的话,指令可以放执行;否则,会将原内容完全覆盖且无法恢复
echo '#/etc/hosts: Local Host Database
127.0.0.1 localhost
::1 localhost' > /etc/hosts
键盘布局设置
配置文件patch `/etc/conf.d/keymaps`
建议: 不需要/修改的语句,推荐复制并注释,以便保证原文件的完整度
```bash
#keymaps='us'
keymaps='dvorak'
```
无线网络工具
统一的管理工具 — NetworkManger
NetworkManager 会统一管理,以接管的网络设备,会覆盖network的工作和dhcpcd的工作,所以需要停止network的运行,取消dhcpcd的运行
- 安装
equery uses net-misc/networkmanager
emerge --ask net-misc/networkmanager
- 将NetworkManager添加到全局use中
USE="..... networkmanager -network -dhcpcd"
- 添加启动项
rc-update del dhcpcd default
rc-service NetworkManager start
有严格的大小写区分,所以一定要写对这个服务的名称鸭
rc-update add NetworkManager default
临时连接工具 — wpa_supplicant
`equery uses net-wireless/wpa_supplicant`
`emerge --ask net-wireless/wpa_supplicant`
安装&配置引导程序 — grub2
- 先添加
GRUB_PLATFORMS="efi-64"
到/etc/portage/make.conf
中
'GRUB_PLATFORMS="efi-64"' >> /etc/portage/make.conf
- 安装grub工具
emerge --ask --verbose sys-boot/grub
- 安装grub到指定位置
grub-install --target=x86_64-efi --efi-directory=/boot
- 生成/更新 grub.cfg文件
grub-mkconfig -o /boot/grub/grub.cfg