Gentoo Systemd Boot

为啥要systemd boot,前一段时间在搞secure boot的时候发现grub带的字体啥的没办法被签名没办法正常去搞secure boot,看了一下其他的bootloader发现systemd已经支持直接引导了。 这篇就记录一下systemd boot的注意点。

分区 主要分为两个一个是esp分区 一个是/ 用luks加密:

mkfs.fat -F32 /dev/nvme0n1p1 
cryptsetup luksFormat /dev/nvme0n1p2
cryptsetup luksOpen /dev/nvme0n1p2 system
mkfs.ext4 -i 8192 /dev/mapper/system 

挂载分区:

mkdir -pv /mnt/gentoo 
mount /dev/mapper/system /mnt/gentoo/
mkdir -pv /mnt/gentoo/boot
mount /dev/nvme0n1p1 /mnt/gentoo/boot/

用gdisk去修改esp分区的值

gdisk /dev/nvme0n1

需要将esp分区的值改为ef00。

systemd 的use:

sys-apps/systemd boot

重新构建systemd

emerge --oneshot systemd

安装systemd boot

bootctl install

用genkernel生成带有ssh支持的initramfs

mkdir -pv /etc/dropbear 
vi /etc/dropbear/authorized_keys # 加入自己的ssh公钥

生成initramfs:

genkernel  --luks --ssh initramfs

配置具体的引导信息:

/boot/loader/entries/gentoo.conf

内容如下:

# Boot Loader Specification type#1 entry
# File created by /usr/lib/kernel/install.d/90-loaderentry.install (systemd 254)
title      Gentoo Linux
options    crypt_root=UUID=e6346fc6-2eb9-4cf2-a327-012b38a5a28b root=/dev/mapper/root rw root_trim=yes  ip=dhcp dosshd gk.sshd.port=2222
linux      /linux
initrd     /initramfs
  • crypt_root 后续跟着的是luks所在的分区UUID,注意不是解锁之后的UUID
  • dosshd 在initramfs中启动一个sshd守护进程
  • root 解锁之后root所在的位置
  • ip 这里使用dhcp分配对应的ip
  • gk.sshd.port=2222 sshd守护进程的端口

入口的配置

/boot/loader/loader.conf

内容如下:

default gentoo
console-mode max

到这里就算是配置完成了,重启之后就可以看到会自动分配ip和等待解锁luks,可以用远程ssh进行解锁也可以直接输入密码进行解锁。

如下图所示:

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

  • 和Secure Boot结合起来能够让其直接自动签名更新之后的内核