最後活躍 2 days ago

修訂 bf12d998fccc51f79dfbc4fb1b17af308a7893ea

main.sh 原始檔案
1#! /usr/bin/env bash
2# adapted from https://docs.zfsbootmenu.org/en/v2.3.x/guides/ubuntu/uefi.html
3# script is not meant to be run non-interactively. read and understand before executing
4
5sudo -i
6
7source /etc/os-release
8export ID
9
10export POOL_DISK="/dev/sdg"
11export POOL_PART="3"
12export POOL_DEVICE="${POOL_DISK}${POOL_PART}"
13
14echo 'passphrase' > /etc/zfs/zroot.key
15chmod 000 /etc/zfs/zroot.key
16
17zpool create -f -o ashift=12 \
18 -O compression=zstd \
19 -O acltype=posixacl \
20 -O xattr=sa \
21 -O relatime=on \
22 -O encryption=aes-256-gcm \
23 -O keylocation=file:///etc/zfs/zroot.key \
24 -O keyformat=passphrase \
25 -o autotrim=on \
26 -o compatibility=openzfs-2.1-linux \
27 -m none zroot "$POOL_DEVICE"
28
29zfs create -o mountpoint=none zroot/ROOT
30zfs create -o mountpoint=/ -o canmount=noauto zroot/ROOT/${ID}
31zfs create -o mountpoint=/home zroot/home
32
33zpool set bootfs=zroot/ROOT/${ID} zroot
34
35zpool export zroot
36zpool import -N -R /mnt zroot
37zfs load-key -L prompt zroot
38
39zfs mount zroot/ROOT/${ID}
40zfs mount zroot/home
41
42udevadm trigger
43
44rsync -avAHXx --numeric-ids --exclude='/home' --exclude='/timeshift' /media/curiouser/5b30118c-3837-4895-9c60-70ea27dd36d9/ mnt/
45rsync -av --numeric-ids /media/curiouser/5b30118c-3837-4895-9c60-70ea27dd36d9/home/ mnt/home/
46
47mount -t proc proc mnt/proc
48mount -t sysfs sys mnt/sys
49mount -B /dev mnt/dev
50mount -t devpts pts mnt/dev/pts
51chroot mnt /bin/bash
52
53source /etc/os-release
54export ID
55
56apt update
57apt install zfs-initramfs zfsutils-linux
58
59systemctl enable zfs.target
60systemctl enable zfs-import-cache
61systemctl enable zfs-mount
62systemctl enable zfs-import.target
63
64echo "UMASK=0077" > /etc/initramfs-tools/conf.d/umask.conf
65
66update-initramfs -c -k all
67
68zfs set org.zfsbootmenu:commandline="systemd.show_status=false splash loglevel=0 quiet resume=UUID=9a4e4168-0964-4895-8d40-0e1ee0bf5d9a" zroot/ROOT
69zfs set org.zfsbootmenu:keysource="zroot/ROOT/${ID}" zroot
70
71exit
72
73umount -n -R /mnt
74zpool export zroot
75
76sudo -i
77apt remove kernelstub
78cat <<EOF > /etc/apt/preferences.d/blacklist-kernelstub
79Package: kernelstub
80Pin: release *
81Pin-Priority: -1
82EOF
83
84# assumes your ESP is mounted at /boot/efi
85
86sudo -i
87
88# copy zbm boot files
89wget -qO- https://get.zfsboot.menu/components/release | tar xvz -C /boot/efi/EFI
90# ignore ownership errors
91mv /boot/efi/EFI/zfsbootmenu-release-x86_64-v* /boot/efi/EFI/zbm
92
93# add entries
94cat <EOF > /boot/efi/loader/entries/pop.conf
95title Pop!_OS
96linux /EFI/zbm/vmlinuz-bootmenu
97initrd /EFI/zbm/initramfs-bootmenu.img
98options zbm.skip systemd.show_status=false splash loglevel=0 quiet
99EOF
100
101cat <EOF > /boot/efi/loader/entries/zbm.conf
102title ZFSBootMenu
103linux /EFI/zbm/vmlinuz-bootmenu
104initrd /EFI/zbm/initramfs-bootmenu.img
105options zbm.show
106EOF
107
108echo 'default pop' > /boot/efi/loader/loader.conf
109
110# removing kernelstub entries and boot files
111rm /boot/efi/loader/entries/Pop-*
112rm -r /boot/efi/EFI/Pop*
113
114# reboot into system
115systemctl reboot