gentoo的安装坑

1.微码。

不将微码编进内核可无视。

改/etc/hosts

加上

以上是在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=C

USE="-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.conf

cd /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/efi

mount --types proc /proc /mnt/gentoo/proc
mount --rbind /sys /mnt/gentoo/sys
mount --rbind /dev /mnt/gentoo/dev

chroot /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-gen

eselect 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

试试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值