### ZFS Lanciamo lo script `create_pools.sh` ### Installazione debian base Dal live system, ci segnamo l'output del seguente comando ``` blkid -s PARTUUID -o value ``` dove `` 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= /boot/efi vfat nofail,x-systemd.device-timeout=1 0 1 ``` (dove `` è 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` ```dosini [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 >> /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][zfsunlock] e mettiamolo in `/usr/share/initramfs-tools/hooks/zfsunlock` e diamogli l'eseguibilità: ``` chmod +x /usr/share/initramfs-tools/hooks/zfsunlock ``` Poi modifichiamo `/usr/share/initramfs-tools/scripts/zfs` come in [questo commit][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 ``` [zfsunlock]: https://raw.githubusercontent.com/openzfs/zfs/1cc635a2dd0379181950a1458255ea8ae8b9c1e0/contrib/initramfs/zfsunlock [commit]: https://github.com/openzfs/zfs/commit/1cc635a2dd0379181950a1458255ea8ae8b9c1e0#diff-98a21a3fd74b681e806ecbd958c2352bL409