最近Google/YouTuBe把我的vps的ip识别成了阿拉伯联合酋长国ip,结果就是推荐了一堆莫名其妙的视频/推送。总之,很不爽,我就决定在美国地区重新搞一个。由于Vultr支持vps附着一个自定义ISO文件来启动进入live环境,于是就可以用来安装Gentoo Linux。

基本的步骤可以在下面这个链接找到

Installing gentoo linux on a vultr server

最好是多参照官方安装文档:

Gentoo Handbook

安装好的Gentoo Linux VPS

Figure 5: neofetch

我只所以选择Gentoo Linux,主要还是因为其源代码分发带来的高度可定制性,举个例子,Gentoo可以让你用libressl替换openssl库,大部分二进制分发的发行版是做不到的。当然,这不代表这是个好选择或者是必要的选择。

gentoo的包管理总体来说还是相当不错的,比较好的特性主要有:

  • 使用USE变量来选择需要的特性,比如说cmake可以有qt5的用户界面,也可以没有。
  • slot支持在同一个系统上安装统一软件的多个版本,比如python:2和python:3。
  • 支持并行安装,同时进行多个安装
  • 滚动更新,当然这个仁者见仁智者见智
  • 包管理附带的各类工具非常齐全,比如equery,eselect,flaggie,repoman,genlop,etc-update等
  • 打包很方便,基本只要有一些bash基础就可以自己打包,而且很多时候改一下版本号就可以适用于新版本了
  • 文档丰富详细
  • 很稳定,随便折腾都不会挂

缺点:

  • 编译时间是真的长,尤其是桌面

当然这只是我个人的看法,肯定不客观

要安装gentoo之前,首先要做一些决定,比如

  • uefi/bios
  • openRC/systemd
  • multilib/nomultilib
  • 分区方案
  • 等等

我个人有点“洁癖”,不管是自己的笔记本还是服务器都选择了openRC和nomultilib的组合,甚至会在内核选项里关闭32位程序模拟。目前用下来是还没碰到大问题。总之这不代表这是一个好选择。

接下来我们就来说一下怎么安装gentoo,这里是在vultr上安装gentoo的步骤,所以并不代表适用其他情况。基本上这篇文章可以看作是上面链接的“翻译”,同时最好也看一边官方的安装文档。

注:命令里被<>扩起来的部分都需要整体替换为相应的内容

创建实例开启ssh服务

创建实例的时候选择custom iso,复制一个gentoo官方的最小化安装live链接,创建实例之后启动VNC窗口,由于VNC窗口不方便复制粘贴,因此推荐使用ssh远程安装,如果不介意,也可以直接用VNC窗口进行安装。建议使用passwd先修改root用户的密码。

启动ssh服务

/etc/init.d/sshd start
##passwd

启动之后就可以在本地使用ssh来进行远程安装了

ssh root@<server_ip>

分区

分区我使用了最简单的方案,2个分区,在自己的笔记本上,我是选择了复杂一点的方案,但也区别不大,主要是多了boot分区以及efi分区(UEFI启动),以下是分区方案,依次是大小、设备名、挂载点

23GB /dev/vda1     /
2GB  /dev/vda2     swap

默认的磁盘设备是/dev/vda,这一步可以使用cfdisk或者parted或者其他工具进行,如

cfdisk /dev/vda

文件系统我选择了xfs,虽然ext4是Linux官方文件系统,但是需要保留少量额外的空间,所以。。。

mkfs.xfs /dev/vda1

创建并启用swap分区

mkswap /dev/vda2
swapon /dev/vda2

挂载主分区,把主系统的根目录挂载至live系统的/mnt/gentoo路径

mount /dev/vda1 /mnt/gentoo

安装基础系统

获取最新的stage3 tarball,stage3其实有不少不同的版本,如nomultilib,harden等等,需要选择相应的stage3文件,比如我选择纯64位环境,就要选择nomultilib的

cd /mnt/gentoo
wget <stage3_tarball_url>
tar xpfj <stage3_tarball_file> --xattrs

编辑主系统的/etc/portage/make.conf文件,当然在live系统里实际位置是在/mnt/gentoo/etc/portage/make.conf,配置好源,编译选项,这一部分最好参照官方安装文档。

配置portage的主仓库,即gentoo仓库,可以更改里面的sync-uri,以达到比较快的同步速度

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
# nano -w /mnt/gentoo/etc/portage/repos.conf/gentoo.conf

把live系统的DNS配置文件复制到主系统上,否则之后chroot到主系统后,无法解析域名,也就无法同步

cp -L /etc/resolv.conf /mnt/gentoo/etc/

挂载必要的文件系统,其中被注释的命令是使用systemd必须要执行的命令,如果使用openRC就无需执行

mount -t proc proc /mnt/gentoo/proc
mount --rbind /sys /mnt/gentoo/sys
# mount --make-rslave /mnt/gentoo/sys
mount --rbind /dev /mnt/gentoo/dev
# mount --make-rslave /mnt/gentoo/dev

chroot进入主系统

chroot /mnt/gentoo /bin/bash
export PS1="(chroot) $PS1"

获取portage树的快照

emerge-webrsync

读取portage的消息

eselect news list
eselect news read

选择profile,这里需要说一下,profile是gentoo提供的一种特性,不同的profile针对不同的使用环境/选择,会有不同的USE变量/默认的包等不同配置,比如kde桌面用户,就可以选择带plasma的profile,如果是systemd的用户,就可以选择带systemd的profile,切换profile是比较难的,因此这里需要谨慎选择。我们由于选择了nomultilib,因此这里也要选择nomultilib的profile

eselect profile list
eselect profile set <profile>

选择了profile之后就可以更新系统了,下面的选项a是ask,即需要自己确认是否执行操作,v是verbose,即详细信息,q是quiet,即减少输出,u是upgrade升级,D是指deep,是指检查依赖的更新,N是指new use,指如果一个包有新加的默认启用的USE变量,就重新编译这个包(?)。world是一个组,包含系统里的所有(?)包,这一步和内核编译都是耗时比较久的过程

emerge -avquDN @world

设置时区,area比如说Asia/Shanghai

echo "<area>" > /etc/timezone
emerge --config sys-libs/timezone-data

设置locale

nano /etc/locale.gen
locale-gen
eselect locale list
eselect locale set en_US.UTF-8

重新载入shell环境

env-update && source /etc/profile && export PS1="(chroot) $PS1"

安装Linux内核

安装Linux内核,这里我选择的gentoo官方内核

emerge -avq sys-kernel/gentoo-sources

安装完了之后,先切换至内核源文件目录,再进行配置,我用的单核VPS用genkernel工具编译太慢,就手动配置了,这一步也是最难的地方,总体来说一点一点手动配置内核实在是比较麻烦,我基本没怎么配置

cd /usr/src/linux
make menuconfig

配置内核方面,在VPS上,最主要要启用virtio系列的选项,主要有以下4个,当然最好关于virtio的选项都启用一下

CONFIG_VIRTIO_PCI
CONFIG_VIRTIO_MMIO
CONFIG_VIRTIO_BLK
CONFIG_VIRTIO_NET

另外就是文件系统,比如之前我使用了xfs的文件系统,那么就必须在内核配置里启用xfs文件系统支持,否则无法启动。

如果你需要使用docker之类的程序,那么还需要启用一些docker指定的选项,具体不表

配置完成之后就可以编译安装内核了。-j2指使用2个进程(还是线程?我不清楚)编译

make -j2 && make modules_install

安装内核镜像至/boot目录

make install

配置系统

编辑fstab文件,fstab文件是系统启动时自动挂载的配置,这里我们需要配置主分区和swap分区,具体请参照官方安装文档,推荐使用UUID区分不同的分区(上次被win10坑了)。

配置hostname,不赘述

配置网络,这里我目前也不是很懂,基本上照着做,大体上就是增加了一个启动项来处理网络连接

emerge -a --noreplace net-misc/netifrc

新建文件/etc/conf.d/net,写入

config_eth0="dhcp"

这里的eth0是你的网络设备名,vps上默认eth0,笔记本上自然不一样,笔记本上我选择了networkmanager,懒

网络启动项

cd /etc/init.d
ln -s net.lo net.eth0
rc-update add net.eth0 default

编辑hosts,不赘述

更改root用户密码

passwd

安装并启用一些系统工具

emerge -avq sysklogd logrotate cronie dhcpcd

rc-update add sshd default
rc-update add cronie default
rc-update add sysklogd default

安装grub:2,基本上bootloader大家都会选择grub2吧

emerge -avq sys-boot/grub:2

安装bootloader并生成开机选项

grub-install /dev/vda
grub-mkconfig -o /boot/grub/grub.cfg

建议新建普通用户,并加入wheel,portage等用户组,具体请参照官方安装文档

建议安装常用工具,配置好普通用户的sudo权限

emerge -avq dev-vcs/git sudo vim tmux gentoolkit eselect-repository strace lrzsz
nstats aria2 inxi htop lsof

建议配置好ssh登录选项

退出重启,移除ISO文件

exit
reboot

到这重启能正常启动、能连接网络,安装就成功了~