1.微码。
不将微码编进内核可无视。
改/etc/hosts
加上
- 185.199.108.133 raw.githubusercontent.com
- 185.199.109.133 raw.githubusercontent.com
- 185.199.110.133 raw.githubusercontent.com
- 185.199.111.133 raw.githubusercontent.com
以上是在https://www.ipaddress.com/找raw.githubusercontent.com的结果。
另外下载https://dev.gentoo.org/~whissi/dist/intel-microcode/intel-microcode-collection-20210830.tar.xz,放在/var/cache/distfiles/下(可能是chroot下)。
(链接:https://pan.baidu.com/s/1lO8V-hS1cCDqCeN5j2mofA 提取码:usxi)
否则sys-firmware/intel-microcode装不上,然后就找不到cpu的编号。
===========================这是华丽的分割线=============================
记录一下这几天的gentoo安装过程:
先下载安装iso和stage3。虽然stage3可以在安装时下载,但是在windows下用迅雷下载还是有点安稳感。
进到镜像站 Index of /gentoo/releases/amd64/autobuilds/current-install-amd64-minimal/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 会看到略乱的下载项:
只下载红框中的iso即可。注意:此页面中也有stage3下载,但是本人以两天废寝忘食的经历告诉你,这里的stage3都会有编译问题,具体原因不明。
接下来在Index of /gentoo/releases/amd64/autobuilds/current-stage3-amd64/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror下载stage3
如有特殊需要可以下载相应的stage3
在下对Linux了解不多,不知道hardened、selinux、openrc什么意思,只知道mltilib是运行32位用的,有好心人知道的话请告诉我,谢谢!
将iso用Rufus写入U盘,将stage3拷贝到U盘中(只是方便拷贝到宿主机上,不用纠结拷贝在哪里)。上面的intel-microcode-collection-20210608.tar.xz也拷进来,因为安装时下载的话速度很慢。
以u盘启动,会进入到liveCD中,也就是事先编好的gentoo。
本人是装在一块空白的WD SN550上,不需要和Windows共存。
创建分区:
parted -a optimal /dev/nvme0n1
mkpart ESP 0% 300M
mkpart rootfs 300M 72000M
set 1 boot on
efi分区300M足矣(好像单独装不需要ESP,但是我不知道设什么好)
p用来查看布局。rm {序号}删除分区,quit退出parted。要想检查是否4K对齐用align-check optimal {序号}。
之后格式化分区:
mkfs.vfat -F 32 /dev/nvme0n1p1
mkfs.ext4 /dev/nvme0n1p2
然后挂载分区:
mkdir -p /mnt/gentoo
mount /dev/nvme0n1p2 /mnt/gentoo
mkdir -p /mnt/gentoo/boot/efi
mount /dev/nvme0n1p1 /mnt/gentoo/boot/efi
从U盘拷贝文件到分区中:
cp -v /mnt/cdrom/stage3-amd64-*.tar.xz /mnt/gentoo
cp -v /mnt/cdrom/intel-microcode-*.tar.xz /mnt/gentoo
解压stage3
cd /mnt/gentoo
tar xpvf stage3-*.tar.xz --xattrs-include='*.*' --numeric-owner
复制编译配置文件:
cp -v /mnt/cdrom/make.conf /mnt/gentoo/etc/portage/
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.
#(无论何种intel、amd的CPU,且无论何种新老CPU架构,均建议-march=native,CPU指令集自动识别全面) #程序员的用户注意了,“-fomit-frame-pointer"这一项会导致你编译出来的程序无法debug;不做程序开发或debug的普通用户可以放心开启。COMMON_FLAGS="-march=native -O2 -pipe -finline-functions -fomit-frame-pointer"
CFLAGS="${COMMON_FLAGS}"
CXXFLAGS="${COMMON_FLAGS}"
FCFLAGS="${COMMON_FLAGS}"
FFLAGS="${COMMON_FLAGS}"
LDFLAGS="${COMMON_FLAGS} -Wl,-O2 -Wl,--as-needed -Wl,--hash-style=gnu -Wl,--sort-common -Wl,--strip-all"
MAKEOPTS="-j18"
CPU_FLAGS_X86="aes avx avx2 f16c fma3 mmx mmxext pclmul popcnt rdrand sse sse2 sse3 sse4_1 sse4_2 ssse3"CHOST="x86_64-pc-linux-gnu"
EMERGE_DEFAULT_OPTS="--with-bdeps=y --ask --verbose=y --load-average --keep-going --deep"
# NOTE: This stage was built with the bindist Use flag enabled
PORTDIR="/var/db/repos/gentoo"
DISTDIR="/var/cache/distfiles"
PKGDIR="/var/cache/binpkgs"
#如果你的内存足够大(8G、16G),那么建议你把编译程序时存放临时中间文件的目录设置为内存的tmpfs(/tmp目录),以减少编译时对硬盘的大量读写、延长硬盘使用寿命、并加快编译速度;但如果你的内存较小(<=4G),那么建议你把此项注释掉,否则很多程序会因内存容量不足而导致编译失败PORTAGE_TMPDIR="/tmp"
# This sets the language of build output to English.
# Please keep this setting intact when reporting bugs.
LC_MESSAGES=CUSE="-bindist -mdev -systemd -consolekit -doc -test -gnome-shell -gnome -gnome-keyring -handbook -gtk -dhcpcd -netifrc -pulseaudio -wayland -oss -gpm -iptables -bluetooth gdbm iwd udev gold icu nftables X staging fortran lto pgo graphite openmp minizip udev blkid efi hwdb smack acpi kde alsa sudo cjk ccache dbus policykit network elogind udisks aria2 dhclient networkmanager connection-sharing wifi ppp jack libsamplerate vdpau vaapi vulkan layers nvidia glamor http2"
ACCEPT_LICENSE="*"#("amd64"是使用稳定版的较旧的软件,"~amd64"是使用不稳定版的更新的软件;建议用稳定版的,免得不稳定的软件包出了问题还要折腾;而且gentoo所谓“稳定版”的“旧”软件相比起debian、ubuntu、centos这些已经很新了,除非你是想像archlinux那样追新)
ACCEPT_KEYWORDS="amd64"
L10N="en-US zh-CN en zh"
LINGUAS="en-US zh-CN en zh"
AUTO_CLEAN="yes"GRUB_PLATFORMS="efi-64"(UEFI 64位系统引导必须项)
VIDEO_CARDS=“radeonsi”
#"intel i965 iris nvidia"(Intel UHD630和nvidia双显卡)
#ALSA_CARDS="hda-intel"(intel HD声卡)
#INPUT_DEVICES="libinput synaptics"(笔记本电脑的触控板)#(如果想把CPU的microcode直接编译进内核,则需要设置为“-S”;否则注释掉)
MICROCODE_SIGNATURES="-S"LLVM_TARGETS="X86"
GENTOO_MIRRORS="https://mirrors.163.com/gentoo"
#安装完aria2之后去掉注释,具体参数参考aria2官方文档
#FETCHCOMMAND="/usr/bin/aria2c -d \${DISTDIR} -o \${FILE} --allow-overwrite=true --max-tries=5 --max-file-not-found=2 --max-concurrent-downloads=5 --connect-timeout=5 --timeout=5 --split=5 --min-split-size=2M --lowest-speed-limit=20K --max-connection-per-server=9 --uri-selector=feedback \${URI}"
#RESUMECOMMAND="${FETCHCOMMAND}"#此处先注释掉,配置完ccache后再去掉注释
#FEATURES="ccache -test"
#CCACHE_DIR="/var/cache/ccache"
配置软件镜像源
#选择中国源,这一步是非必须的,上面的的make.conf里已经有中国的所有源了
mirrorselect -i -o >> /mnt/gentoo/etc/portage/make.conf
mkdir -p -v /mnt/gentoo/etc/portage/repos.confcd /mnt/gentoo/usr/share/portage/config/
cp -v repos.conf /mnt/gentoo/etc/portage/repos.conf/gentoo.conf#加入中国源
nano -w /mnt/gentoo/etc/portage/repos.conf/gentoo.conf:
sync-uri = rsync://mirrors.163.com/gentoo-portage
#sync-uri = rsync://mirrors.tuna.tsinghua.edu.cn/gentoo-portage/
#sync-uri = rsync://rsync.mirrors.ustc.edu.cn/gentoo-portage/
#sync-uri = rsync://rsync.mirrors.ustc.edu.cn/gentoo-portage/
#sync-uri = rsync://mirrors.yun-idc.com/gentoo-portage/
复制DNS信息
cp --dereference /etc/resolv.conf /mnt/gentoo/etc/
挂载系统必要环境,并进入Chroot环境
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,所以注释掉)chroot /mnt/gentoo /bin/bash
mkdir -p /var/db/repos/gentoo
env-update
source /etc/profile
export PS1="(chroot) ${PS1}"
拷贝微码文件:
cp -v intel-microcode-*.tar.xz /var/cache/distfiles/
添加github的host:
nano -w /etc/hosts
添加:
185.199.108.133 raw.githubusercontent.com
185.199.109.133 raw.githubusercontent.com
185.199.110.133 raw.githubusercontent.com
185.199.111.133 raw.githubusercontent.com
以上是在 https://www.ipaddress.com/查找 raw.githubusercontent.com的结果。
开始安装系统:
emerge-webrsync
#gentoo handbook上提到可以使用emerge -rsync升级软件包数据库到最近2小时的最新版
先选择基础配置文件
eselect profile list #选一个合适的profile予设值
eselect profile set X #这里先保持选择默认值,即“default/linux/amd64/17.1 (stable)”
安装cpuid2cpuflags,检测cpu指令集
emerge --ask app-portage/cpuid2cpuflags
cpuid2cpuflags #将输出值全部拷贝到/mnt/gentoo/etc/portage/make.conf中,作为“CPU_FLAGS_X86= ”的值,并取消对“CPU_FLAGS_X86= ”这一行的注释
出现“Invalid impl in /etc/python-exec/python-exec/python-exec.conf:python.3.7”的解决方法:
这是python(本人一直认为这玩意是业界毒瘤!)升到3.9造成的。
解决办法:
eselect python list
eselect python cleanup
eselect python update
如果没有安装eselect-python
则可以使用
emerge -av eselect-python
安装ccache加快编译速度:
emerge --ask ccache
mkdir -p /var/cache/ccache
chown root:portage /var/cache/ccache -R
chmod 2775 /var/cache/ccache -R之后去掉/etc/portage/make.conf中关于“ccache”的注释
安装aria2加快emerge的下载速度:
emerge --ask aria2
之后去掉/mnt/gentoo/etc/portage/make.conf中关于“aria2”的注释
以上工作做完,就可以在安装过程被中断后(太晚了熬不住关机之类),以下列步骤进入chroot继续之前的安装过程:
mkdir -p /mnt/gentoo
mount /dev/nvme0n1p2 /mnt/gentoo
mkdir -p /mnt/gentoo/boot/efi
mount /dev/nvme0n1p1 /mnt/gentoo/boot/efimount --types proc /proc /mnt/gentoo/proc
mount --rbind /sys /mnt/gentoo/sys
mount --rbind /dev /mnt/gentoo/devchroot /mnt/gentoo /bin/bash
mkdir -p /var/db/repos/gentoo
env-update
source /etc/profile
export PS1="(chroot) ${PS1}"
配置系统时区和地区:
ls /usr/share/zoneinfo
echo "Asia/Shanghai" > /etc/timezone #我是中国人emerge --config sys-libs/timezone-data
hwclock --systohc
date MMDDhhmmYY #设为当前时间
设置字符编码:
nano -w /etc/locale.gen: #设置这几项
en_US ISO-8859-1
en_US.UTF-8 UTF-8
zh_CN GBK
zh_CN.UTF-8 UTF-8
locale-geneselect locale list #查看可用系统时区和地区配置
eselect locale set X #这里先选择“C”!!env-update && source /etc/profile && export PS1="(chroot) ${PS1}"
接下来,重新将整个基本系统从stage1编译到stage3,把原来官方提供的stage3 tarball里的所有组件替换成自己编译的(包括GCC编译器和所有基本系统组件),这样一来整个系统的所有程序和组件都是针对自己电脑CPU架构优化编译的了,争取性能最大化,美滋滋。
首先
qfile /etc/locale.gen /etc/conf.d/keymaps #备份之前的locale和键盘设置
cp -v /etc/locale.gen{,.bak}
从stage1到stage2(重新编译:emerge包管理器、GCC编译器、llvm编译器、clang编译器、zlib库、glibc库、libtool库)
cd /var/db/repos/gentoo/scripts
nano -w bootstrap.sh:找到这一段
# This stuff should never fail but will if not enough is installed.
[[ -z ${myBASELAYOUT} ]] && myBASELAYOUT=">=$(portageq best_version / sys-apps/baselayout)"
[[ -z ${myPORTAGE} ]] && myPORTAGE="portage"
[[ -z ${myBINUTILS} ]] && myBINUTILS="binutils"
[[ -z ${myGCC} ]] && myGCC="gcc"
[[ -z ${myGETTEXT} ]] && myGETTEXT="gettext"
[[ -z ${myLIBC} ]] && myLIBC="$(portageq expand_virtual / virtual/libc)"
[[ -z ${myTEXINFO} ]] && myTEXINFO="sys-apps/texinfo"
[[ -z ${myZLIB} ]] && myZLIB="zlib"
[[ -z ${myNCURSES} ]] && myNCURSES="ncurses"在里面
[[ -z ${myLIBC} ]] && myLIBC="$(portageq expand_virtual / virtual/libc)"
改为
[[ -z ${myLIBC} ]] ; myLIBC="$(portageq expand_virtual / virtual/libc)"
export USE="-* bootstrap ${ALLOWED_USE} ${BOOTSTRAP_USE}"
改为
export USE="-* bootstrap ${ALLOWED_USE} ${BOOTSTRAP_USE} openmp"./bootstrap.sh
这个脚本执行完检测后会要求你重新编译安装emerge包管理器,yes同意重新安装。
tmpfiles-0.2错的话
emerge --
sync
emerge --depclean
emerge --update --newuse --deep --with-bdeps=y @world
试试