Appunti sull'installazione di Mafalda
Go to file
2020-09-28 23:34:35 +02:00
create_pools.sh Init 2020-09-27 23:31:23 +02:00
guide_rosa.txt Init 2020-09-27 23:31:23 +02:00
install_zfsonlinux.sh Aggiunto scriptazzo hetzner 2020-09-28 23:34:35 +02:00
installazione.md Aggiunto scriptazzo hetzner 2020-09-28 23:34:35 +02:00
README.md README 2020-09-27 23:33:25 +02:00
zfs.patch Init 2020-09-27 23:31:23 +02:00

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