在VPS上部署Gentoo
目前的vps都是debian之类的系统不是喜欢的形状,日常使用gentoo习惯了想要把这些vps都重装成gentoo,同时做一些安全加密尽量防止云厂商偷看我的东西(bushi。
这篇文章其实是和之前的一篇文章是类似的不过更偏向于小内存的vps,所以会省略掉很多内容,如果想看更详细的配置更推荐看官方的Handbook。
环境准备
我这边的vps是buyvm家的vps,这家的话是可以用自定义的iso的,同时支持直接vnc去操作还是比较方便的。
buyvm这家的自定义上传iso发现有点问题,gentoo的iso引导不起来用arch反而可以正常引导。
挂载之后重新启动就可以正常引导进入archlinux的livecd了:
引导之后设置一下root密码:
passwd
再使用ssh进行链接:
ssh root@ip
安装Gentoo
分区
我这里买的是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
下载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,注意不是解锁之后的UUIDdosshd
在initramfs中启动一个sshd守护进程root
解锁之后root所在的位置ip
这里使用dhcp分配对应的ipgk.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
如下图所示:
TODO
- 安全加固
- 备份