create_pools.sh | ||
guide_rosa.txt | ||
install_zfsonlinux.sh | ||
installazione.md | ||
README.md | ||
zfs.patch |
ZFS
Installiamo zfs nel sistema live (lo script è fornito direttamente da hetzner, l'ho copiato in questa repo)
./install_zfsonlinux.sh
Lanciamo lo script create_pools.sh
./create_pools.sh
(per importare delle pool già esistenti, facciamo zfs import -f <nome_pool>
).
Installazione debian base
Dal live system, ci segnamo l'output del seguente comando
blkid -s PARTUUID -o value <path/to/efi/partition>
dove <path/to/efi/partition>
corrisponde al valore puntato da ${DISK1}-part1
nello script lanciato nello step precedente. Installiamo nella directory target
il sistema base
debootstrap buster /mnt
Entriamo in chroot con systemd-nspawn
systemd-nspawn -D /mnt
Modificare le /etc/apt/sources.list
per includere i seguenti
deb http://deb.debian.org/debian buster main non-free contrib
deb http://deb.debian.org/debian buster-updates main non-free contrib
deb http://deb.debian.org/debian buster-backports main non-free contrib
deb http://security.debian.org buster/updates main non-free contrib
Facciamo il pinning (ovvero diciamo ad apt di prendere certi pacchetti da una
specifica repository) per i pacchetti relativi a ZFS, mettendo questo contenuto
in /etc/apt/preferences.d/90_zfs
Package: libnvpair1linux libuutil1linux libzfs2linux libzfslinux-dev libzpool2linux python3-pyzfs pyzfs-doc spl spl-dkms zfs-dkms zfs-dracut zfs-initramfs zfs-test zfsutils-linux zfsutils-linux-dev zfs-zed
Pin: release n=buster-backports
Pin-Priority: 990
Per lo scopo dell'installazione
ln -s /proc/self/mounts /etc/mtab
apt update
Configurare il locale e la timezone (io ho selezionato en_US.UTF-8
e locale
Europe/Berlin
)
apt install --yes locales
dpkg-reconfigure locales
dpkg-reconfigure tzdata
Installiamo i pacchetti relativi a ZFS nel nuovo sistema
apt install --yes dpkg-dev linux-headers-amd64 linux-image-amd64
apt install --yes zfs-initramfs
apt install --yes console-setup
echo REMAKE_INITRD=yes > /etc/dkms/zfs.conf
Aggiungiamo la seguente riga nell'/etc/fstab
PARTUUID=<uuid_da_primo_step> /boot/efi vfat nofail,x-systemd.device-timeout=1 0 1
(dove <uuid_da_primo_step>
è la stringa ottenuta nel primo passo di questa
sezione) e preoccupiamoci di ciò che riguarda il boot
apt install dosfstools
apt install --yes grub-efi-amd64 shim-signed
dpkg --purge os-prober
Impostiamo la password root
passwd
(Forse non serve) creiamo e abilitiamo questa unit systemd (in
/etc/systemd/system/zfs-import-bpool.service
) per forzare l'import della pool
di /boot
[Unit]
DefaultDependencies=no
Before=zfs-import-scan.service
Before=zfs-import-cache.service
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/sbin/zpool import -N -o cachefile=none bpool
[Install]
WantedBy=zfs-import.target
Adesso installiamo e configuriamo grub
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=debian --recheck
perl -i -pe 's/(GRUB_CMDLINE_LINUX=")/${1}root=ZFS=rpool /' /etc/default/grub
echo 'GRUB_DISABLE_OS_PROBER=true' >> /etc/default/grub
update-grub
I seguenti passi servono a configurare il boot
umount /boot/efi
umount /boot
zfs set mountpoint=legacy bpool
echo "bpool /boot zfs nodev,relatime,x-systemd.requires=zfs-import-bpool.service 0 0" >> /etc/fstab
e disabilitiamo il suspend/resume (questo è un server)
echo RESUME=none > /etc/initramfs-tools/conf.d/resume
Dropbear
Installiamo dropbear nell'initramfs
apt install --yes dropbear-initramfs
Configuriamo dropbear per rispondere alla porta 4747
(morto-che-parla)
echo 'DROPBEAR_OPTIONS="-s -j -k -p 4747"' >> /etc/dropbear-initramfs/config
(-s
disabilita password login; -j
disabilita il local port forwarding; -k
disabilita il remote port forwarding; -p
è la porta a cui bindarsi)
Copiamo la chiave pubblica generata in /etc/dropbear-initramfs/authorized_keys
cat <LA_CHIAVE_PUBLICA> >> /etc/dropbear-initramfs/authorized_keys
Configuriamo la rete
echo 'IP="144.76.80.140::144.76.80.129:255.255.255.224:::off"' >> /etc/initramfs-tools/initramfs.conf
Stunt per far funzionare zfs al boot in dropbear
Copiamo lo script da qui e mettiamolo in
/usr/share/initramfs-tools/scripts/zfsunlock
e diamogli l'eseguibilità:
chmod +x /usr/share/initramfs-tools/scripts/zfsunlock
Poi modifichiamo /usr/share/initramfs-tools/scripts/zfs
come in questo
commit (si può usare la patch in zfs.patch
, copiandola in
/tmp/zfs.patch
e invocando patch < /tmp/zfs.patch
).
Infine, aggiorniamo l'initramfs
update-initramfs -u -v