gentoo 快速安装过程记录
最后更新日期:2022年2月2日
写在前面:
我为什么要用gentoo
不是因为什么苦难哲学,安装Gentoo并不困难,只是需要时间而已
从最开始接触到Linux,就选择了Gentoo,一开始是因为编译时满屏的代码滚动,有一种莫名其妙的快感~
人都是有一种习惯的
最开始认为Gentoo从源码编译安装,会提高性能,这个好像是个误区,实际上并不能,就算有一点提升,也感觉不出来
最好的办法是配一台性能强劲的电脑 😃
用Gentoo最主要的原因是有限的选择权
比如我不喜欢systemd,我可以用openrc
通过USE控制可以一定程度上进行定制(这是一项长期的工作,不是一次安装就可以解决的)
可能让我用Gentoo的根本原因就是这个吧,能满足一点点控制欲~
安装之前准备工作
先选择好stage3
需要提前考虑好的问题:
systemd or openrc
no-multilib or multilib
文件系统的选择:ext4,xfs,btrfs 等等
然后就是安装环境,是纯字符界面还是用图形界面安装
个人推荐用带图形界面的livecd,可以一边安装一边看wiki,虽然字符界面也可以看..不过那种排版实在太蛋疼了
本次安装:
init : openrc
profile : no-multilib
filesystem: xfs
这次用的是SystemRescue9.0 + Rufus 3.17制作LiveUSB
SystemRescue以前是基于gentoo的发行版,不过现在改为基于Arch,不过不影响安装gentoo,理论上来说gentoo可以在任何现有Linux系统上安装
为什么使用SystemRescue
1、有图形界面,可以在安装的时候从gentoo handbook 或者其他教程中复制命令
2、基于Arch Linux ,可以使用genfstab生成fstab文件
3、arch-chroot 命令可以自动挂载 proc sys dev 这些,不用手动输入了 😃
4、可以方便的回滚终端,唯一的遗憾就是不能输入中文
制作好liveusb后用U盘重启
输入:startx 进入图形界面,用浏览器打开gentoo handbook
打开终端,开始安装
有线连接一般情况下网络已经自动配置好了
无线的话参考gentoo handbook吧…我没有无线网卡
硬盘分区
lsblk #查看硬盘编号,确定在哪块硬盘安装Gentoo,我这里是sdd
sgdisk --zap-all /dev/sdd # 清空硬盘,如果硬盘上有其他系统或重要文件,谨慎操作
cfdisk -z /dev/sdd
# 选择gpt
# 因为我另一块硬盘上有WIN10的EFI分区(/dev/sdb1),所以不用再分一个EFI分区,直接整块硬盘分一个区
# cfdisk 操作比较简单
# new ---> 新建分区
# type ---> linux-root(x86-64)
# write ---> 写入硬盘
# quit ---> 退出
分区 | 大小 | 文件系统 | 挂载点 | 补充说明 |
---|---|---|---|---|
/dev/sdb1 | 300M | fat32 | /boot/EFI | 和win10共用esp分区 |
/dev/sdd1 | all | xfs | / |
- 格式化
mkfs.xfs -f /dev/sdd1
# 如果用ext4
# 使用相应的命令 mkfs.ext4
挂载分区
# 挂载root
# 由于不是使用的gentoo官方livecd,所以需要建立一个目录,这个目录名字随意,不过习惯了用/mnt/gentoo
mkdir -v /mnt/gentoo
mount -t xfs /dev/sdd1 /mnt/gentoo
# 挂载EFI分区
mkdir -pv /mnt/gentoo/boot/efi
mount -t vfat /dev/sdb1 /mnt/gentoo/boot/efi
df -hT # 检查无误后开始安装
开始安装
安装部分可以跳过了…和gentoo wiki区别不大,主要就是make.conf和内核编译部分和wiki不一样
我是为了自己安装的时候复制命令方便
ping -c 3 www.baidu.com # 测试网络
ntpd -q -g # 调整好当前的系统时间
stage3
cd /mnt/gentoo
# 通常非基于gentoo的livecd都没有links命令
# 本次使用的SystemRescueCd可以使用elinks,与links十分相似
elinks https://mirrors.ustc.edu.cn/gentoo
# 进入目录
/releases/amd64/autobuilds/current-stage3-amd64/
# 用方向键选中文件,按 d 键下载:
stage3-amd64-nomultilib-YYYYMMDDhhmmssZ.tar.xz
stage3-amd64-nomultilib-YYYYMMDDhhmmssZ.tar.xz.DIGESTS
# stage3的生成时间以你实际安装的时候看到的为准
# 我选的no-multilib profile,纯64位系统
# 选好自己要用的stage3,安装的时候最好不要切换profile
# no-multilib 和 multilib 貌似在后期是不能相互切换的
# 强烈建议校验一下
sha512sum -c --ignore-missing stage3-amd64-nomultilib-YYYYMMDDhhmmssZ.tar.xz.DIGESTS
tar xpf stage3-amd64-*.tar.xz --xattrs-include='*.*' --numeric-owner
ls -la /mnt/gentoo #解压完检查一下
# 删除 stage3 ,也可以等安装完重启后再删
rm stage3-*.tar.xz*
创建SWAP交换文件
fallocate -l 16GiB /mnt/gentoo/.swapfile_16G
dd if=/dev/zero of=/mnt/gentoo/.swapfile_16G bs=1M count=16384 status=progress # 交换文件大小自己调整
chmod 600 /mnt/gentoo/.swapfile_16G
mkswap /mnt/gentoo/.swapfile_16G
swapon /mnt/gentoo/.swapfile_16G
复制DNS
cp --dereference /etc/resolv.conf /mnt/gentoo/etc/
配置fstab
genfstab -U /mnt/gentoo >> /mnt/gentoo/etc/fstab
配置编译选项(make.conf)
vim /mnt/gentoo/etc/portage/make.conf
# 安装系统的时候只添加下面几条就可以,其他的东西等安装完再说
# MAKEOPTS: cpu 核心数 + 1, 即命令 nporc 的输出 + 1
# 或者内存大小/2
CHOST="x86_64-pc-linux-gnu"
COMMON_FLAGS="-march=ivybridge -O3 -pipe"
CFLAGS="${COMMON_FLAGS}"
CXXFLAGS="${COMMON_FLAGS}"
FCFLAGS="${COMMON_FLAGS}"
FFLAGS="${COMMON_FLAGS}"
# ivybridge 专用,别照抄
CPU_FLAGS_X86="aes avx f16c mmx mmxext pclmul popcnt sse sse2 sse3 sse4_1 sse4_2 ssse3"
MAKEOPTS="-j8"
# ACCEPT_KEYWORDS="amd64" # 新手的话,建议使用
ACCEPT_KEYWORDS="~amd64"
ACCEPT_LICENSE="*"
GRUB_PLATFORMS="efi-64"
MICROCODE_SIGNATURES="-S"
AUTOCLEAN="yes"
EMERGE_DEFAULT_OPTS="--jobs=8 --load-average=7.2 --ask --verbose --quiet-build --keep-going --with-bdeps=y"
PORTAGE_ELOG_CLASSES="info warn error log qa"
PORTAGE_ELOG_SYSTEM="echo save"
FEATURES="userfetch parallel-fetch candy clean-logs split-log split-elog news"
#FEATURES="${FEATURES} -userpriv -usersandbox -sandbox"
GENTOO_MIRRORS="https://mirrors.tuna.tsinghua.edu.cn/gentoo/"
USE=""
chroot
arch-chroot /mnt/gentoo /bin/bash
source /etc/profile
Gentoo ebuild 软件仓库
mkdir -p -v /etc/portage/repos.conf
cp -v /usr/share/portage/config/repos.conf /etc/portage/repos.conf/gentoo.conf
nano -w /etc/portage/repos.conf/gentoo.conf
#sync-uri = rsync://rsync.gentoo.org/gentoo-portage
sync-uri = rsync://mirrors.tuna.tsinghua.edu.cn/gentoo-portage #sync镜像改为国内的,这是清华大学
#或者
#sync-uri = rsync://mirrors.163.com/gentoo-portage //网易
#sync-uri = rsync://rsync.mirrors.ustc.edu.cn/gentoo-portage/ //中科大
#sync-uri = rsync://mirrors.yun-idc.com/gentoo-portage/ //首都在线科技股份有限公司
安装ebuild 数据库快照并更新
emerge-websync
# 可选
emerge --sync
#如果无法更新,将/etc/portage/repos.conf/gentoo.conf里的
#sync-rsync-verify-metamanifest = yes 改为
#sync-rsync-verify-metamanifest = no
# 如果 make.conf 中设置了 FEATURES="userfetch"
# 需要改变一下/var/db/repos/gentoo目录的权限
chown --recursive --verbose portage:portage /var/db/repos/gentoo
选择正确的配置文件
#不建议在这里更改profile,保持与开始下载的stage3一致,不然又要编译一大堆包
# 所以要在安装之前确定no-multilib或multilib,貌似这两个是不能随便切换的,编译一定会出错
# Desktop的profile 在基本系统安装后再切换,不过也可以不切换,在make.conf里设置USE来控制,保持系统整洁...
# 而且 no-multilib也没有desdtop的 profile可以切换..
# 关于建立自己的profile, 自己参考gentoo wiki 吧
eselect profile list
[26] default/linux/amd64/17.1/no-multilib (stable) *
安装一些必要工具
emerge -av linux-firmware gentoo-kernel-bin grub os-prober dosfstools gentoolkit neovim syslog-ng dhcpcd acpid cpuid2cpuflags xfsprogs
#如果提示需要更新
etc-update # 输入 -3 回车 yes回车
rc-update add syslog-ng default
rc-update add dhcpcd default
rc-update add acpid default
eselect vi list
[1] nvim
eselect vi set 1
eselect editor list
[1] nano
[2] ex
[3] vi
[ ] (free form)
eselect editor set 3
cpuid2cpuflags >> /etc/portage/make.conf
vi /etc/portage/make.conf
CPU_FLAGS_X86:aes avx f16c mmx mmxext pclmul popcnt sse sse2 sse3 sse4_1 sse4_2 ssse3
修改为:
CPU_FLAGS_X86="aes avx f16c mmx mmxext pclmul popcnt sse sse2 sse3 sse4_1 sse4_2 ssse3"
GRUB
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=Gentoo
echo 'GRUB_DISABLE_OS_PROBER=false' >> /etc/default/grub # 如果有win系统的话
grub-mkconfig -o /boot/grub/grub.cfg
其它设置
主机名
vi /etc/conf.d/hostname
hostname="GentoO"
#vi /etc/issue
##删掉 .\O
vi /etc/hosts
127.0.0.1 GentoO
127.0.0.1 localhost
::1 localhost
配置网络
ifconfig #看一下网卡接口的名字,我这里是enp3s0
echo 'config_enp3s0="dhcp"' > /etc/conf.d/net
cd /etc/init.d
ln -s net.lo net.enp3s0
rc-update add net.enp3s0 default
重启进入新系统
OK,基本系统安装结束
passwd #先设置一下root密码
exit
cd
umount -lR /mnt/gentoo
reboot
时区,时间,locale
echo 'Asia/Shanghai' > /etc/timezone
emerge --config sys-libs/timezone-data
echo "en_US.UTF-8 UTF-8\nzh_CN.UTF-8 UTF-8" >> /etc/locale.gen
#echo "zh_CN.UTF-8 UTF-8" >> /etc/locale.gen
locale-gen
eselect locale list
#确保设定了一个地区,不然系统会在后面安装中的内核编译和部署其他软件时显示警告和错误。
#不要设置为zh,终端会有乱码
#重新加载环境
env-update && source /etc/profile
更新@world集合
我的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.
# C, C++ and FORTRAN options for GCC.
# CPU: E3-1240 v2
# -fstack-protector-strong // stack smashing protector
# -Wl,-z,relro // read-only segments after relocation
# -Wl,-z,now // disable lazy binding
# -fexceptions // enable table-based thread cancellation
# 安装的时候一直编译失败,看Log的提示也无法找到原因
# 最后我盯着屏幕看...发现无法编译的原因是.. -march=ivybridge写成了 -march-ivybridge
# 所以手动输入的时候仔细一点...
# CFLAGS: 其实这一行不用你自己去写,先保留默认,后面 chroot 之后使用 resolve-march-native -a ,将输出复制进去就行了
# COMMON_FLAGS="-march=native -O2 -pipe"
# COMMON_FLAGS="-march=native -maes -O2 -pipe -fstack-protector-strong"
#COMMON_FLAGS="-march=native -O2 -pipe -fstack-protector-strong -fno-math-errno -fno-trapping-math -fforce-addr -finline-functions -freorder-functions -fexpensive-optimizations -falign-functions -falign-labels -falign-loops -falign-jumps -frename-registers -fweb -funit-at-a-time -fbranch-target-load-optimize -fbranch-target-load-optimize2 -Wl,-z,relro -Wl,-z,now"
# NTHREADS="auto"
#
# GCC[lto,pgo,graphite] PASS
# COMMON_FLAGS="-march=native -O2 -pipe -fstack-protector-strong -fforce-addr -finline-functions -freorder-functions -fexpensive-optimizations -falign-functions -falign-labels -falign-loops -falign-jumps -frename-registers -fweb -funit-at-a-time: -fbranch-target-load-optimize -fbranch-target-load-optimize2"
COMMON_FLAGS="-march=ivybridge -O3 -pipe"
CFLAGS="${COMMON_FLAGS}"
CXXFLAGS="${COMMON_FLAGS}"
FCFLAGS="${COMMON_FLAGS}"
FFLAGS="${COMMON_FLAGS}"
#LDFLAGS="${LDFLAGS} -Wl,--sort-common -Wl,--strip-all -Wl,-zcombreloc -Wl,-zrelro -Wl-znow"
#RUSTFLAGS="-C opt-level=3 -C target-cpu=ivybridge"
# NOTE: This stage was built with the bindist Use flag enabled
PORTDIR="/var/db/repos/gentoo"
DISTDIR="/var/cache/distfiles"
PKGDIR="/var/cache/binpkgs"
# PORTAGE_TMPDIR="/tmp"
# This sets the language of build output to English.
# Please keep this setting intact when reporting bugs.
LC_MESSAGES=C
LLVM_TARGETS="X86 AMDGPU" # N卡用户将AMDGPU改为NVPTX
#####################################################################################################
### ###
### Custom section ###
### ###
#####################################################################################################
# MAKEOPTS: cpu 核心数 + 1, 即命令 nporc 的输出 + 1
# 或者内存大小/2
MAKEOPTS="-j8 -l8"
CHOST="x86_64-pc-linux-gnu"
ACCEPT_KEYWORDS="~amd64"
ACCEPT_LICENSE="*"
CPU_FLAGS_X86="aes avx f16c mmx mmxext pclmul popcnt sse sse2 sse3 sse4_1 sse4_2 ssse3"
GRUB_PLATFORMS="efi-64"
MICROCODE_SIGNATURES="-S"
AUTOCLEAN="yes"
# 可以使用的L10N值列表以/var/db/repos/gentoo/profiles/desc/l10n.desc 的形式提供
# grep -i china /var/db/repos/gentoo/profiles/desc/l10n.desc
L10N="zh-CN zh"
LINGUAS="zh_CN zh"
# EMERGEDEFAULTOPTS: emerge 默认的选项
# jobs 和 load-average 都是提升编译速度的: jobs = nproc + 1 而 load-average = nproc × 0.9。
EMERGE_DEFAULT_OPTS="--jobs=8 --load-average=7.2 --ask --verbose --quiet-build --keep-going --with-bdeps=y"
PORTAGE_ELOG_CLASSES="info warn error log qa"
PORTAGE_ELOG_SYSTEM="echo save"
FEATURES="userfetch parallel-fetch candy clean-logs split-log split-elog news"
#FEATURES="${FEATURES} -userpriv -usersandbox -sandbox"
###################################
### Hardware ###
###################################
VIDEO_CARDS="amdgpu radeonsi"
ALSA_CARDS="hda-intel"
INPUT_DEVICES="libinput"
###################################
### mirrors ###
###################################
NETEASE="https://mirrors.163.com/gentoo/"
NEUSOFT="https://mirrors.neusoft.edu.cn/gentoo/"
TSINGHUA="https://mirrors.tuna.tsinghua.edu.cn/gentoo/"
CDS="http://mirrors.yun-idc.com/gentoo/"
ALI="https://mirrors.aliyun.com/gentoo/"
BIT="https://mirror.bit.edu.cn/gentoo/"
USTC="https://mirrors.ustc.edu.cn/gentoo/"
GENTOO_MIRRORS="${TSINGHUA}"
###################################
### distfiles download ###
###################################
#FETCHCOMMAND="wget --timeout=5 --passive-ftp --no-check-certificate -O \"\${DISTDIR}/\${FILE}\" \"\${URI}\""
#RESUMECOMMAND="${FETCHCOMMAND}"
###################################
### Global USE settings ###
###################################
# profile no-multilib
# 因为我不打算切 profile,所以需要手动添加桌面需要的USE
# 全局USE最好少设置
# 具体调整在 /etc/portage/package.use/ 里,单独设置各个包的USE
# 安装的时候可以都注释掉,基本系统安装完后再取消注释
#
USE="-bindist -passwdqc -xinerama -wayland -systemd" # 我安装系统的时候只使用这五个
# USE="${USE} graphite lto pgo"
# USE="${USE} udev zstd lzma zlib elogind policykit dbus udisks vdpau vulkan"
# USE="${USE} cairo fontconfig icu pango pie python savedconfig xml"
# USE="${USE} X cjk opengl infinality truetype nftables"
# USE="${USE} aac alsa ffmpeg flac mng mp3 mp4 mpeg vorbis x264 xv xvid"
# USE="${USE} exif gif jpeg jpeg2k png svg tiff"
# USE="${USE} -bluetooth -cdr -cups -debug -doc -dvdr -emboss -joystick -gnome -gnome-keyring -gtk -gtk3 -kde -plasma -ppds -sdl -static-libs-geoip -geolocation -networkmanager -jit -ldap -upower -gpm -modemmanager -gstreamer -flash -consolekit -pulseaudio -introspection -ipv6 -mono -accessibility -mms -webkit -oss -iptables"
# 如果 make.conf 里设置 ACCEPT_KEYWORDS="~amd64",那么这个过程将十分漫长
# 大概会有一百多个包(视USE设置而定)需要编译
# 而且中途还有可能出错,所以 make.conf 里设置了 EMERGE_DEFAULT_OPTS="--keep-going",自动跳过编译出错的包
# 有一次我在安装的时候开了~amd64,不过忘记用 time 命令记时,整个过程大概需要2-3个小时左右,还好一切顺利,没有编译错误
# 现在安装gentoo实在是容易多了,就是编译时间长一点
#
# 如果有编译错误
# 试试在 make.conf 中加入 FEATURES="${FEATURES} -userpriv -usersandbox -sandbox" ,注意跑完 @world 后注释掉这一句
emerge --ask --verbose --update --deep --newuse @world
Intel microcode
警告
本方法仅适用于64位内核
#修改make.conf
vi /etc/portage/make.conf
MICROCODE_SIGNATURES="-S"
emerge --ask sys-firmware/intel-microcode sys-apps/iucode_tool
#识别处理器签名并查找相应文件名
#下面的是在gentoo wiki上复制过来的,以CPU实际 signature 值来选择文件
iucode_tool -S -l /lib/firmware/intel-ucode/*
iucode_tool: system has processor(s) with signature 0x000306c3
[...]
microcode bundle 49: /lib/firmware/intel-ucode/06-3c-03
[...]
selected microcodes:
049/001: sig 0x000306c3, pf_mask 0x32, 2017-01-27, rev 0x0022, size 22528
#文件名是/lib/firmware/intel-ucode/06-3c-03
#内核中的必要选项和设置
Processor type and features --->
<*> CPU microcode loading support
[*] Intel microcode loading support #注意,不能为模块
Device Drivers --->
Generic Driver Options --->
Firmware Loader --->
-*- Firmware loading facility
(intel-ucode/06-3c-03) Build named firmware blobs into the kernel binary #将文件编入内核
(/lib/firmware) Firmware blobs root directory (NEW)
新系统的一些设置
#建立新用户
useradd -m -G users,wheel,audio,video,portage,usb -s /bin/bash 用户名
passwd 用户名
#解决eix命令的背景颜色问题
emerge eix
eix-update
vi /etc/eixrc/00-eixrc
COLOR_INST_VERSION="white,1;blue|33,1;%{BG1}|black;green|30,1;%{BG3}"
BG0=none;
BG1=none;
BG2=none;
BG3=none;
COLORSCHEME0=0;
COLORSCHEME1=0;
COLORSCHEME2=0;
COLORSCHEME3=0;
安装如果遇到问题,可以在tg群 问大佬~