在VPS上部署Gentoo

目前的vps都是debian之类的系统不是喜欢的形状,日常使用gentoo习惯了想要把这些vps都重装成gentoo,同时做一些安全加密尽量防止云厂商偷看我的东西(bushi。

这篇文章其实是和之前的一篇文章是类似的不过更偏向于小内存的vps,所以会省略掉很多内容,如果想看更详细的配置更推荐看官方的Handbook

我这边的vps是buyvm家的vps,这家的话是可以用自定义的iso的,同时支持直接vnc去操作还是比较方便的。

buyvm这家的自定义上传iso发现有点问题,gentoo的iso引导不起来用arch反而可以正常引导。

Buyvm upload iso

挂载之后重新启动就可以正常引导进入archlinux的livecd了:

Buyvm vnc archlinux livecd
引导之后设置一下root密码:

passwd

再使用ssh进行链接:

ssh root@ip

我这里买的是buyvm家最低的vps,硬盘是只有20G,这次分区就打算是一个200M的 /boot剩下的全部给/ 用luks加密

初始化/boot的文件系统:

mkfs.ext4 /dev/vda1

初始化LUKS

cryptsetup luksFormat /dev/vda2

打开luks

cryptsetup luksOpen /dev/vda2 system

初始化文件系统

mkfs.ext4  -i 8192 /dev/mapper/system

创建挂载点:

mkdir -pv /mnt/gentoo

挂载分区:

mount /dev/mapper/system  /mnt/gentoo

创建boot分区:

mkdir -pv /mnt/gentoo/boot

挂载boot分区:

mount /dev/vda1 /mnt/gentoo/boot

查看目前的挂载情况:

lsblk

../../images/buyvm-gentoo-lsblk.png

下载stage3

cd /mnt/gentoo
wget -c https://distfiles.gentoo.org/releases/amd64/autobuilds/20240211T161834Z/stage3-amd64-systemd-mergedusr-20240211T161834Z.tar.xz

解压:

tar xpvf stage3-*.tar.xz --xattrs-include='*.*' --numeric-owner

portage的配置这里就直接跳过了,可以参考官方的文档或者是我上篇文章

这里用的是luks在文件系统这个sets里面的内容就不太一样了,这个要注意。

创建并编辑/etc/portage/sets/filesystem文件,内容如下:

sys-fs/cryptsetup

创建并编辑/etc/portage/sets/kernel文件,内容如下:

sys-kernel/gentoo-kernel-bin
sys-kernel/genkernel

创建并编辑/etc/portage/sets/bootloader文件,内容如下:

sys-boot/grub

这里没有选择自己编译内核直接选择二进制的内核,二进制内核USE会帮我们创建initramfs;我这里不要它帮我创建的,因此要关掉一个USE:

echo sys-kernel/gentoo-kernel-bin -initramfs > /etc/portage/package.use/gentoo-kernel-bin

安装内核:

emerge -av @kernel

生成initramfs

创建文件夹:

mkdir -pv  /etc/dropbear/

创建并编辑/etc/dropbear/authorized_keys文件,里面就存放自己的公钥:

vi /etc/dropbear/authorized_keys

生成initramfs:

genkernel --luks --ssh initramfs

这个vps只有1G的内存在生成initramfs的时候遇到内存不足的问题了,用swapfile先顶替一下:

dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progress
chmod 0600 /swapfile
mkswap -U clear /swapfile
swapon /swapfile

重新运行genkernel命令就可以正常构建了。

配置grub

blkid查看一下磁盘的uuid:

blkid

编辑/etc/default/grub文件,修改GRUB_CMDLINE_LINUX这行的内容如下:

GRUB_CMDLINE_LINUX="crypt_root=UUID=99a469b2-9467-48e1-9d85-607f9851f734  root=/dev/mapper/root ip=dhcp dosshd gk.sshd.port=2222 init=/lib/systemd/systemd net.ifnames=0"
  • crypt_root 后续跟着的是luks所在的分区UUID,注意不是解锁之后的UUID
  • dosshd 在initramfs中启动一个sshd守护进程
  • root 解锁之后root所在的位置
  • ip 这里使用dhcp分配对应的ip
  • gk.sshd.port=2222 sshd守护进程的端口
  • init=/lib/systemd/systemd systemd init的配置
  • net.ifnames=0 网卡都遵循类似etch0, eth1 这样的格式

安装grub:

grub-install /dev/vda

生成grub的配置文件:

grub-mkconfig -o /boot/grub/grub.cfg

fstab

编辑/etc/fstab 添加内容如下:

UUID=e8f7a90b-0c3a-46a4-97bf-338760ba5ac4       /               ext4         rw,relatime     0 1

清理掉distfiles

vps空间不大可以清理掉distfiles节省一些空间:

rm -rf /var/cache/distfiles/*

清理掉stage3文件

rm -f /stage3*

卸载挂载

退出chroot:

exit

卸载挂载:

umount -R /mnt

重启

reboot

重启之后远程链接就可以直接使用:

ssh root@ip -p 2222

如下图所示:

../../images/buyvm-vps-remote-unlock-luks.png

  • 安全加固
  • 备份