Old school
This commit is contained in:
parent
15cf7e0776
commit
a543387976
202
installazione.md
202
installazione.md
|
@ -1,153 +1,138 @@
|
|||
### ZFS
|
||||
# How to rosa
|
||||
|
||||
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>`).
|
||||
## ATTENZIONE:
|
||||
|
||||
Se vuoi solo loggarti sulla macchina, vai [qui](./login.md).
|
||||
|
||||
### Installazione debian base
|
||||
|
||||
Dal live system, ci segnamo l'output del seguente comando
|
||||
Dal live system, usiamo `imageinstall -e` provvisto da Hetzner per installare un
|
||||
sistema debian buster base, in cui configuriamo i dischi con il seguente layout:
|
||||
|
||||
```
|
||||
blkid -s PARTUUID -o value <path/to/efi/partition>
|
||||
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
|
||||
sda 8:0 0 2.7T 0 disk
|
||||
├─sda1 8:1 0 1G 0 part
|
||||
│ └─md0 9:0 0 1022M 0 raid1 /boot
|
||||
├─sda2 8:2 0 2.7T 0 part
|
||||
│ └─md1 9:1 0 2.7T 0 raid1
|
||||
│ └─vg0-root 253:1 0 300G 0 lvm /
|
||||
└─sda3 8:3 0 1M 0 part
|
||||
sdb 8:16 0 2.7T 0 disk
|
||||
├─sdb1 8:17 0 1G 0 part
|
||||
│ └─md0 9:0 0 1022M 0 raid1 /boot
|
||||
├─sdb2 8:18 0 2.7T 0 part
|
||||
│ └─md1 9:1 0 2.7T 0 raid1
|
||||
│ └─vg0-root 253:1 0 300G 0 lvm /
|
||||
└─sdb3 8:19 0 1M 0 part
|
||||
```
|
||||
|
||||
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
|
||||
Il sistema provvede ad installare un sistema con ssh già avviato e l'utente root
|
||||
con la chiave ssh già configurata (se l'abbiamo impostata nel pannello del
|
||||
rescue system).
|
||||
|
||||
### Cryptoroot
|
||||
|
||||
A questo punto, riavviamo di nuovo nel rescue system. Creiamo un disco in ram
|
||||
abbastanza grande da contenere il tarball di tutto il contenuto della root:
|
||||
|
||||
```
|
||||
debootstrap buster /mnt
|
||||
mkdir /ramdisk
|
||||
mount -t tmpfs -o size=10G /ramdisk
|
||||
```
|
||||
|
||||
Entriamo in chroot con systemd-nspawn
|
||||
Montiamo la root
|
||||
|
||||
```
|
||||
systemd-nspawn -D /mnt
|
||||
mount /dev/vg0/root /mnt
|
||||
```
|
||||
|
||||
Modificare le `/etc/apt/sources.list` per includere i seguenti
|
||||
Facciamo un backup della root
|
||||
|
||||
```
|
||||
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
|
||||
cd /mnt
|
||||
tar czvf /ramdisk/root.tar.gz /mnt/*
|
||||
```
|
||||
|
||||
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`
|
||||
Eliminiamo il contenitore vg0 (un volume group LVM) in questa brutale maniera,
|
||||
creando così uno strato di cifratura
|
||||
|
||||
```
|
||||
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
|
||||
cryptsetup luksFormat /dev/md1
|
||||
```
|
||||
|
||||
Per lo scopo dell'installazione
|
||||
Ci viene chiesta la conferma, e di immettere due volte la nuova passphrase. Dopo
|
||||
di questo, montiamo il nuovo contenitore cifrato
|
||||
|
||||
```
|
||||
ln -s /proc/self/mounts /etc/mtab
|
||||
apt update
|
||||
cryptsetup open /dev/md1 crypta
|
||||
```
|
||||
|
||||
Configurare il locale e la timezone (io ho selezionato `en_US.UTF-8` e locale
|
||||
`Europe/Berlin`)
|
||||
creiamo un nuovo volume group e un logical group per la partizione di root
|
||||
|
||||
```
|
||||
apt install --yes locales
|
||||
dpkg-reconfigure locales
|
||||
dpkg-reconfigure tzdata
|
||||
vgcreate /dev/mapper/crypta vg0
|
||||
lvcreate -L 300G --name root vg0
|
||||
```
|
||||
|
||||
Installiamo i pacchetti relativi a ZFS nel nuovo sistema
|
||||
lo montiamo e ci riversiamo dentro il backup della root
|
||||
|
||||
```
|
||||
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
|
||||
mount /dev/vg0/root /mnt
|
||||
tar xzvf /ramdisk/root.tar.gz -C /mnt
|
||||
```
|
||||
|
||||
Aggiungiamo la seguente riga nell'`/etc/fstab`
|
||||
Il nuovo layout dovrebbe essere questo
|
||||
|
||||
```
|
||||
PARTUUID=<uuid_da_primo_step> /boot/efi vfat nofail,x-systemd.device-timeout=1 0 1
|
||||
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
|
||||
sda 8:0 0 2.7T 0 disk
|
||||
├─sda1 8:1 0 1G 0 part
|
||||
│ └─md0 9:0 0 1022M 0 raid1 /boot
|
||||
├─sda2 8:2 0 2.7T 0 part
|
||||
│ └─md1 9:1 0 2.7T 0 raid1
|
||||
│ └─crypta 253:0 0 2.7T 0 crypt
|
||||
│ └─vg0-root 253:1 0 300G 0 lvm /
|
||||
└─sda3 8:3 0 1M 0 part
|
||||
sdb 8:16 0 2.7T 0 disk
|
||||
├─sdb1 8:17 0 1G 0 part
|
||||
│ └─md0 9:0 0 1022M 0 raid1 /boot
|
||||
├─sdb2 8:18 0 2.7T 0 part
|
||||
│ └─md1 9:1 0 2.7T 0 raid1
|
||||
│ └─crypta 253:0 0 2.7T 0 crypt
|
||||
│ └─vg0-root 253:1 0 300G 0 lvm /
|
||||
└─sdb3 8:19 0 1M 0 part
|
||||
```
|
||||
|
||||
(dove `<uuid_da_primo_step>` è la stringa ottenuta nel primo passo di questa
|
||||
sezione) e preoccupiamoci di ciò che riguarda il boot
|
||||
(dove `<uuid_di_dev_md0>` si può ottenere da `lsblk -o +UUID`, alla riga
|
||||
corrispondente di `/dev/md0`).
|
||||
Montiamo tutto insieme e facciamo il chroot dentro
|
||||
|
||||
```
|
||||
apt install dosfstools
|
||||
apt install --yes grub-efi-amd64 shim-signed
|
||||
dpkg --purge os-prober
|
||||
mount /dev/vg0/root /mnt
|
||||
mount /dev/md0 /mnt/boot
|
||||
mount -t proc /proc /mnt/proc
|
||||
for fs in dev sys run; do mount --rbind /${fs} /mnt/${fs}; done
|
||||
chroot /mnt /bin/bash --login
|
||||
```
|
||||
|
||||
Impostiamo la password root
|
||||
Ci assicuriamo che `/etc/fstab` abbia questa forma
|
||||
|
||||
```
|
||||
passwd
|
||||
proc /proc proc defaults 0 0
|
||||
UUID=<uuid_di_dev_md0> /boot ext3 defaults 0 0
|
||||
UUID= none swap sw 0 0
|
||||
/dev/vg0/root / ext4 defaults 0 0
|
||||
```
|
||||
|
||||
(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`
|
||||
|
||||
```ini
|
||||
[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
|
||||
e che `/etc/crypttab` sia fatto così
|
||||
|
||||
```
|
||||
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
|
||||
# <target name> <source device> <key file> <options>
|
||||
crypta /dev/md1 none luks
|
||||
```
|
||||
|
||||
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
|
||||
### Dropbear nell'initram
|
||||
|
||||
Installiamo dropbear nell'initramfs
|
||||
|
||||
|
@ -165,6 +150,7 @@ echo 'DROPBEAR_OPTIONS="-s -j -k -p 4747"' >> /etc/dropbear-initramfs/config
|
|||
disabilita il remote port forwarding; `-p` è la porta a cui bindarsi)
|
||||
|
||||
Copiamo la chiave pubblica generata in `/etc/dropbear-initramfs/authorized_keys`
|
||||
(ATTENZIONE: **non** può essere una chiave ellittica, usate una RSA)
|
||||
|
||||
```
|
||||
cat <LA_CHIAVE_PUBLICA> >> /etc/dropbear-initramfs/authorized_keys
|
||||
|
@ -176,27 +162,9 @@ 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/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][commit] (si può usare la patch in `zfs.patch`, copiandola in
|
||||
`/tmp/zfs.patch` e invocando `patch < /tmp/zfs.patch`).
|
||||
|
||||
Infine, aggiorniamo l'initramfs
|
||||
Infine, aggiorniamo l'initramfs e grub
|
||||
|
||||
```
|
||||
update-initramfs -u -v
|
||||
update-grub
|
||||
```
|
||||
|
||||
|
||||
|
||||
[zfsunlock]: https://raw.githubusercontent.com/openzfs/zfs/1cc635a2dd0379181950a1458255ea8ae8b9c1e0/contrib/initramfs/zfsunlock
|
||||
[commit]: https://github.com/openzfs/zfs/commit/1cc635a2dd0379181950a1458255ea8ae8b9c1e0#diff-98a21a3fd74b681e806ecbd958c2352bL409
|
||||
|
|
41
login.md
Normal file
41
login.md
Normal file
|
@ -0,0 +1,41 @@
|
|||
# How to login
|
||||
|
||||
Per loggarti devi avere accesso a due chiavi ssh diverse. Si trovano entrambe
|
||||
nel pass condiviso. Quella per loggarsi al boot è `unit/rosa_dropbear_key` e
|
||||
quella per loggarsi sul sistema avviato è `unit/server_common_key`.
|
||||
|
||||
Queste vanno decifrate e messe in un posto adeguato
|
||||
|
||||
```
|
||||
pass unit/rosa_dropbear_key >> $HOME/.ssh/rosa_boot
|
||||
pass unit/server_common_key >> $HOME/.ssh/unit
|
||||
chmod 600 $HOME/.ssh/rosa_boot
|
||||
chmod 600 $HOME/.ssh/unit
|
||||
```
|
||||
|
||||
### Decifrare il disco cifrato
|
||||
|
||||
Alla partenza, la macchina non è in uno stato utilizzabile: la partizione di
|
||||
root è ancora cifrata. Il server espone ssh sulla porta `4747`, quindi per
|
||||
loggarsi
|
||||
|
||||
```
|
||||
ssh -i $HOME/.ssh/rosa_boot -p 4747 root@144.76.80.140
|
||||
```
|
||||
|
||||
A questo punto, per decifrare il disco e avviare definitivamente la macchina si
|
||||
può usare lo script
|
||||
|
||||
```
|
||||
cryptroot-unlock
|
||||
```
|
||||
|
||||
che chiede la passphrase del disco (`pass unit/rosa_root_passphrase`). Una volta
|
||||
immessa e premuto invio, la connessione ssh si chiude e il server termina il
|
||||
processo di avvio.
|
||||
|
||||
### Per loggarsi normalmente
|
||||
|
||||
```
|
||||
ssh -i $HOME/.ssh/unit root@144.76.80.140
|
||||
```
|
Loading…
Reference in New Issue
Block a user