阿里云 ECS 安装 Gentoo Linux

本文为笔者给阿里云 ECS 安装 Gentoo Linux 的过程记录,文中的安装方法乃笔者自己的理解,而并非官方教程,请各位读者谨慎参考。此外,笔者不建议一般用户在云服务器上使用 Gentoo Linux ,除非明确自己的需求,切勿盲目跟风安装。在这里演示的云服务器为阿里云 ECS ,初始系统是 Debian 12.2 64位 UEFI 版,其他提供商的云服务器或系统可能不适用于本文,请自行随机应变。文中提到的软件均为笔者个人喜好,不代表本人向各位读者推荐使用这些软件。而且以下软件的配置仅为个人一己之见,不一定适合所有人,切勿盲目照搬。

注意,本文的操作将删除云服务器内的所有数据,请确保该云服务器没有存放重要数据或者运行重要服务,并提前做好备份工作!

安装前准备

登录云服务器

本人的云服务器初始默认用户为 root ,并且设置了使用密码登录,而且阿里云给本人分配的公网 IP 地址为 xxx.xxx.xxx.xxx 。各位读者可以初始设置其他用户,也可设置使用密钥登录。另外,笔者偏好在终端下使用 OpenSSH 远程登录主机,各位读者也可使用其他方法来远程登录。

打开终端,输入:

ssh root@xxx.xxx.xxx.xxx

xxx.xxx.xxx.xxx 替换为你自己的公网 IP ,输入 yes ,再输入 root 密码,即可登录云服务器。

下载 RootFS

输入:

curl -OL https://mirrors.ustc.edu.cn/archlinux/iso/latest/archlinux-bootstrap-x86_64.tar.zst

下载 Arch Linux 的 RootFS 压缩包。

再输入:

tar xpf archlinux-bootstrap-x86_64.tar.zst --xattrs-include='*.*' --numeric-owner -C /tmp

解压该压缩包到 /tmp 目录。

Change Root

输入:

mount --bind /tmp/root.x86_64 /tmp/root.x86_64

将 /tmp/root.x86_64 目录自己绑定到自己,使之可被作为挂载点。

再输入:

/tmp/root.x86_64/bin/arch-chroot /tmp/root.x86_64

Change Root 到 /tmp/root.x86_64 目录中。

挂载分区

本人的阿里云 ECS 只有一块磁盘,初始默认有三个分区,它们分别是 /dev/vda1 ( BIOS boot ) 、/dev/vda2 ( EFI System ) 和 /dev/vda3 ( Linux filesystem ) 。

输入:

mount /dev/vda3 /mnt

挂载 /dev/vda3 分区。

删除旧系统

在运行下面命令前,请确保该云服务器没有存放重要数据或者运行重要服务!

输入:

rm -rf /mnt/{bin,boot/*,etc,home,lib,lib32,lib64,libx32,lost+found,media,mnt,opt,root,sbin,srv,usr,var,initrd.img,initrd.img.old,vmlinuz,vmlinuz.old}

删除旧系统。

再输入:

mount /dev/vda2 /mnt/boot

挂载引导分区。

最后输入:

rm -rf /mnt/boot/*

删除引导分区中的内容。

安装基本系统

安装 Stage3

笔者在该云服务器上不打算运行任何 32 位应用;而且笔者偏好使用 Systemd 作为 init 程序,所以在这里选择 no multilib | systemd 的 Stage3 压缩包,各位读者也可自行选择下载其他的 Stage3 压缩包。

输入:

curl -OL https://mirrors.ustc.edu.cn/gentoo/releases/amd64/autobuilds/\
"$(curl -fsSL https://mirrors.ustc.edu.cn/gentoo/releases/amd64/autobuilds/\
latest-stage3-amd64-nomultilib-systemd.txt | sed -n '6p' | awk 'END{print $1}')"

下载 Stage3 压缩包。

再输入:

tar xpf stage3-amd64-nomultilib-systemd-*.tar.xz --xattrs-include='*.*' --numeric-owner --directory=/mnt

解压该压缩包到 /mnt 目录。

配置编译选项

依次输入:

sed -i 's/COMMON_FLAGS="/&-march=native /' /mnt/etc/portage/make.conf
echo 'FEATURES="getbinpkg"
GENTOO_MIRRORS="https://mirrors.ustc.edu.cn/gentoo/"
L10N="en-US zh-CN en zh"' >>/mnt/etc/portage/make.conf

即可。

其中 FEATURES="getbinpkg" 的作用是尽可能地使用预编译好的二进制包,以节约系统资源和安装时间。

创建 fstab 文件

输入:

genfstab -L /mnt >>/mnt/etc/fstab

即可。

再次 Change Root

输入:

cp --dereference /etc/resolv.conf /mnt/etc

复制 DNS 配置到目标系统环境。

再输入:

arch-chroot /mnt

Change Root 到 /mnt 目录中。

安装 Gentoo ebuild 存储库快照

输入:

emerge-webrsync

即可。

更新 Gentoo ebuild 存储库

笔者偏好使用 Git 来同步 Portage 数据库,各位读者也可使用 rsync 来同步,这里则略过 rsync 的设置方法。

输入:

mkdir /etc/portage/repos.conf

创建文件夹。

再输入:

echo '[gentoo]
location = /var/db/repos/gentoo
sync-type = git
sync-depth = 1
sync-uri = https://mirrors.ustc.edu.cn/gentoo.git
auto-sync = yes
sync-rsync-verify-jobs = 1
sync-rsync-verify-metamanifest = yes
sync-rsync-verify-max-age = 24
sync-openpgp-key-path = /usr/share/openpgp-keys/gentoo-release.asc
sync-openpgp-keyserver = hkps://keys.gentoo.org
sync-openpgp-key-refresh-retry-count = 40
sync-openpgp-key-refresh-retry-overall-timeout = 1200
sync-openpgp-key-refresh-retry-delay-exp-base = 2
sync-openpgp-key-refresh-retry-delay-max = 60
sync-openpgp-key-refresh-retry-delay-mult = 4
sync-webrsync-verify-signature = yes' >/etc/portage/repos.conf/gentoo.conf

配置 Portage 数据库源。

然后输入:

sed -i 's/distfiles.gentoo.org/mirrors.ustc.edu.cn\/gentoo/' /etc/portage/binrepos.conf/gentoobinhost.conf

设置二进制包源。

再输入:

getuto

初始化密钥。

然后输入:

emerge -av dev-vcs/git

安装 git 。

若安装失败,则输入 rm -rf /etc/portage/gnupg && getuto 重新初始化密钥,再输入 emerge -av dev-vcs/git 重试。

再输入:

rm -rf /var/db/repos/gentoo

删除原有的数据库。

然后输入:

emerge --sync

初始化同步 Portage 数据库。

最后输入:

eselect news read --quiet

标记已阅读全部新闻。

设置 CPU FLAGS

输入:

emerge -av1 cpuid2cpuflags

安装 cpuid2cpuflags 。

再输入:

echo "*/* $(cpuid2cpuflags)" >/etc/portage/package.use/00cpu-flags

设置 CPU FLAGS 。

使用 Swap file

输入:

fallocate -l 4GiB /.swapfile

创建交换文件。

再输入:

chmod 0600 /.swapfile

设置交换文件权限。

然后输入:

mkswap /.swapfile

格式化文件。

再输入:

swapon /.swapfile

启用交换文件。

最后输入:

echo -e '/.swapfile\t\tnone\t\tswap\t\tdefaults\t0 0' >>/etc/fstab

设置开机后自动使用交换文件。

安装系统组件

输入:

echo 'app-admin/sudo -sendmail
sys-apps/systemd boot
sys-kernel/installkernel dracut systemd-boot' >/etc/portage/package.use/custom

设置 USE 。

再输入:

emerge -avuDN --with-bdeps=y @world

更新系统。

最后输入:

emerge -av app-misc/screen gentoo-kernel-bin ranger sudo vim zsh

安装内核与常用软件。

配置时区

输入:

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

设置时区为上海。

设置 root 密码

输入:

passwd

再输入两次你要设置的密码。注意这里需要设置较为复杂的密码,否则将可能导致设置失败。

创建用户

下面默认要创建的用户名为 username ,若要使用其他名字,请自行将其替换。

输入:

useradd -m -G users,wheel username

新建用户。这里会有一个关于 mailbox 文件夹不存在的提醒,忽略即可。

再输入:

passwd username

然后再输入两次要设置的密码。注意这里需要设置较为复杂的密码,否则将可能导致设置失败。

禁止 root 用户通过 ssh 登录

输入:

sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin no/g' /etc/ssh/sshd_config

即可。

启动引导配置

这里使用 systemd-boot 来引导系统,初始系统必须选择带 UEFI 的版本。笔者用的是 Debian 12.2 64位 UEFI版,而不是 Debian 12.2 64位,请务必正确选择系统版本。

输入:

bootctl --path=/boot install

安装引导。

再输入:

sed -i '/^options/c\options    root=\/dev\/vda3' /boot/loader/entries/*-gentoo-dist.conf

配置引导。

配置 Sudo

输入:

visudo

反注释 %wheel ALL=(ALL:ALL) ALL ,即去掉该行前面的 # 号,再保存退出。

启用必要服务

输入:

systemd-machine-id-setup

创建一个机器 ID 。

再依次输入:

systemctl enable sshd
systemctl enable systemd-networkd
systemctl enable systemd-resolved
systemctl enable systemd-timesyncd

启用必要服务。

注意:这里若不运行 systemd-machine-id-setup ,将可能导致 systemd-networkd 不能正常工作

配置网络

输入:

echo -e '[Match]\nName=en*\n\n[Network]\nDHCP=ipv4' >/etc/systemd/network/50-dhcp.network

即可。

配置语言环境

输入:

echo 'zh_CN.UTF-8 UTF-8' >>/etc/locale.gen

启用 zh_CN.UTF-8 。

再输入:

sed -i 's/#en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/g' /etc/locale.gen

启用 en_US.UTF-8 。

然后输入:

locale-gen

生成 Locale 。

最后输入:

eselect locale set zh_CN.utf8

设置语言环境为中文。

强制重启

输入:

sync

将内存中还未写入到磁盘的数据同步到磁盘。

再打开网页 阿里云 ,登录账号,打开控制台,在阿里云工作台中强制重启 ECS 。

启用密钥验证登录

下面默认云服务器的公网 IP 为 xxx.xxx.xxx.xxx ,用户名为 username ,请自行将下面出现的相关内容替换为你自己的公网 IP 和用户名。另外,这里默认本地电脑上已有 SSH 公钥,若无公钥则请运行 ssh-keygen -t ed25519 生成公钥。

重新打开终端,输入:

sed -i '' '/xxx.xxx.xxx.xxx/d' .ssh/known_hosts

xxx.xxx.xxx.xxx 替换为你服务器的 IP 地址,下同。删除所有与 xxx.xxx.xxx.xxx 有关的信息。Windows下则可手动自行删除。

再输入:

ssh-copy-id username@xxx.xxx.xxx.xxx

并输入云服务器上 username 用户的密码确认,启用密钥验证登录。

Windows 下则可输入:

cat ~\.ssh\id_ed25519.pub | ssh username@xxx.xxx.xxx.xxx "mkdir ~/.ssh; cat >> ~/.ssh/authorized_keys"

最后输入:

ssh username@xxx.xxx.xxx.xxx

username 替换为你刚新建的用户名,再输入该用户密码,连接阿里云 ECS 。

设置 resolv

成功登录后输入:

sudo ln -rsf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

将 resolv.conf 文件交由 systemd-resolved 管理。

清理系统

依次输入:

sudo rm -rf /usr/local/share/aliyun-assist
sudo emerge @preserved-rebuild
sudo perl-cleaner --all
sudo emerge -ac

即可。

至此 Gentoo Linux 已基本安装完毕,接下来是对系统的一些配置。

安装后配置

禁止 ssh 通过密码登录

输入:

sudo sed -i 's/#KbdInteractiveAuthentication yes/KbdInteractiveAuthentication no/g' /etc/ssh/sshd_config

即可。

设置主机名

下面默认要将主机名修改为 myhostname ,若要用其他名称,请自行将其替换。

输入:

sudo hostnamectl hostname myhostname

即可。

配置 GNU Screen

输入:

echo 'if [[ -n "${REMOTEHOST}${SSH_CONNECTION}" && -z "$STY" ]]; then
  (screen -xRR session_name) && exit
fi' >.zshrc

设置通过 SSH 登录后自动运行 GNU Screen 。

配置 Vim

输入:

sudo eselect editor set vi

设置默认默认编辑器为 Vim 。

再输入:

echo -e 'set number\nset noautoindent' | sudo tee -a /etc/vim/vimrc >/dev/null

设置显示行号与取消自动缩进。

配置 Zsh

依次输入:

sudo chsh -s /bin/zsh
chsh -s /bin/zsh

并输入当前用户密码。更改默认 shell 为 Zsh 。

再输入:

git clone --depth=1 https://gitee.com/znolight/zsh-plugins.git $HOME/.zsh-plugins

下载插件。

最后输入:

echo 'source $HOME/.zsh-plugins/zsh-plugins.zsh' >>.zshrc

配置 Zsh 。

配置 ranger

输入:

ranger --copy-config=all

创建配置文件。

再输入:

echo 'export RANGER_LOAD_DEFAULT_RC=false' >>.zshrc

禁用初始配置文件。

重启

输入:

sudo reboot

即可。

结语

至此,Gentoo Linux 已基本安装配置完毕。在这里再次强调,本文为安装记录而并非教程,文中内容不适合新手。本文用了大量 echosed 之类的命令来修改配置,仅仅是笔者自己为了方便复制粘贴,笔者更推荐新手使用 nanovim 之类的工具来修改配置文件。另外,本文中的所有命令若您不了解其含义,请不要轻易尝试,不明白某个配置的选项或功能时,也不要盲目跟风。请善用搜索,更要有自学能力。


阿里云 ECS 安装 Gentoo Linux
https://www.nolightblog.com/posts/fe4463fe/
作者
Nolight
发布于
2024年4月1日
许可协议