Dans cette page, nous allons voir comment installer Alpine Linux sur une
partition ZFS chiffrée, le tout avec des commandes pour le MBR et pour le
UEFI.
En bonus, des commandes afin de mettre le tout en RAID1/mirroir.
Il faut redémarrer le serveur en mode Rescue.
Une fois démarré, télécharger l'ISO en mode EXTENDED car c'est le seul
à l'heure actuel qui contient les modules pour le ZFS, et l'enregistrer
sur le premier disque dur /dev/sda.
wget http://dl-cdn.alpinelinux.org/alpine/v3.12/releases/x86_64/alpine-extended-3.12.0-x86_64.iso \
-O /dev/sdaRedémarrer le serveur ensuite et accéder à la console de celui-ci via KVM ou autre.
Ouvrir une session root.
Il vaut mieux maintenir le clavier en anglais actuellement, le mot de passe utilisé pour
ZFSdevra être saisi durant le démarrage avec l'encodage du clavier par défaut, à savoir l'UScorrespondant à duQWERTY.Celui-ci sera changé juste avant l'installation, en français.
Définir le nom du serveur
setup-hostnameConfigurer le réseau
setup-interfacesSi le réseau est configuré pour être en DHCP, ne rien faire de plus, sinon il faut configurer les DNS
setup-dns
Lancement du réseau
/etc/init.d/networking start(Optionnel) Configurer le fuseau horaire à utiliser, UTC par défaut
setup-timezone
Définir le dépôt à utiliser pour les paquets
setup-apkreposConfigurer le client NTP pour la synchronisation de l'horloge
setup-ntp(Optionel) Activer un serveur SSH afin de réaliser des Copier/Coller facilement. il faut dans un premier temps définir un mot de passe pour le compte root
Il est à noter que la disposition du clavier est toujours en
QWERTYsauf si vous l'avez changé. Il faut y penser lors de la création du mot de passe sur le serveur, et lorsque l'on devra se connecter via SSHpasswd setup-sshd
Activation des services pour le prochain démarrage
rc-update add networking boot
rc-update add urandom boot
rc-update add acpid
rc-update add crond
/etc/init.d/hostname restartNote :
Tout programme installé maintenant, ou toute configuration sera repporté sur la version finale de la machine.
Description des programmes installé dans tous les cas :
zfsles paquets pour gérer le système de fichier ZFS et fournit les programmeszfsetzpoolentre autresfdisksera utilisé pour partitionner le disque durxfsprogspour la gestion du système de fichier utilisé pour la partition/boot
apk add zfs sfdisk grub-efi xfsprogs dosfstools efibootmgrgrub-efipour installer le gestionnaire de chargement du système, à savoir grubdosfstoolsafin de formater au bon format (FAT32) la partition nécessaire pour l'UEFIefibootmgrpermet de modifier le gestionnaire de boot UEFI
apk add zfs sfdisk syslinux xfsprogssyslinuxest le gestionnaire de chargement du système
Cette partie est à effectuer indépendament de l'UEFI ou du MBR si l'on souhaite
mettre en place du mirroring de la partition /boot.
apk add mdadmOn charge les modules avant de démonter l'ISO afin de pouvoir partitionner
modprobe zfs
modprobe xfsPour le FAT, utile uniquement pour la partition UEFI
modprobe vfat
modprobe nls_cp437Démonte l'image avant repartitionnement
umount /.modloop
umount /media/sda1Ici, le partitionnement sera réalisé sur /dev/sda.
Il faut adapter le cas échéant.
Effaçage de la table des partitions
sfdisk --delete /dev/sdaPartitionnement du disque sur une table de partition au format GPT :
| Partition | Taille | Type | Point de montage |
|---|---|---|---|
| 1 | 512 Mo | UEFI | /boot/efi |
| 2 | 100 Mo | XFS | /boot |
| 3 | Reste | ZFS | / |
echo -e "label: gpt\n2M,512M,U\n-,100M,L\n-" | sfdisk -f -W always -w always /dev/sda
mdev -s
mkfs.vfat -F 32 -n UEFI /dev/sda1
BOOTFS=/dev/sda2
ZFSROOT=/dev/sda3Partitionnement du disque sur une table de partition au format MBR :
| Partition | Taille | Type | Point de montage |
|---|---|---|---|
| 1 | 100 Mo | XFS | /boot |
| 2 | Reste | ZFS | / |
echo -e "label: dos\n2M,100M,L,*\n-" | sfdisk -f -W always -w always /dev/sda
mdev -s
BOOTFS=/dev/sda1
ZFSROOT=/dev/sda2Formatage de la partition /boot au format XFS
mkfs.xfs -L Boot -f $BOOTFSCréation du volume ZFS, définition du mot de passe et montage sur /mnt
zpool create -f -o ashift=12 \
-O acltype=posixacl -O canmount=off -O compression=lz4 \
-O dnodesize=auto -O normalization=formD -O relatime=on -O xattr=sa \
-O encryption=aes-256-gcm -O keylocation=prompt -O keyformat=passphrase \
-R /mnt \
rpool $ZFSROOT
zfs create -o mountpoint=/ -o canmount=noauto rpool/root
mount -t zfs rpool/root /mntExplication de quelques options remarquables :
ashift=12définit la taille des secteurs physiques. Cette valeur est recommandée et vaut 4Kio, correspondant à la valeur des des disques d'aujourd'hui.acltype=posixaclpermet d'activer les ACL POSIX globalement.normalization=formDpermet de n'accepter les noms des fichiers valides au format UTF-8xattr=saaméliore les performances des attributs étendus, mais l'option n'est valide que pour les systèmes Linux. Ne pas utiliser cette option si le volume doit être utilisé sur un autre système.
Pour vérifier que le pool a bien été créé, saisir la commande suivante
zpool statusLa commande doit afficher quelque chose comme ci-après :
pool: rpool
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
rpool ONLINE 0 0 0
sda3 ONLINE 0 0 0
errors: No known data errorsmkdir /mnt/boot
mount -t xfs $BOOTFS /mnt/bootSi UEFI
mkdir /mnt/boot/efi
mount -t vfat /dev/sda1 /mnt/boot/efiOn poursuit avec tout le monde en activant les services ZFS
rc-update add zfs-import sysinit
rc-update add zfs-mount sysinitTaille de la SWAP correspondant à 1 Gio
zfs create -V 1G \
-o logbias=throughput -o sync=always -o primarycache=metadata \
-o mountpoint=none -o secondarycache=none \
rpool/swapExplication des options utilisées ici
-V 1Gest la taille de la SWAP que l'on veut créerlogbias=throughputetsync=alwaysdemandent à ce que les données soient écritent le plus vite possible sur le disque afin de libérer la mémoireprimarycache=metadataafin d'éviter que les données soient conservées en RAM via ARC
Pour finir, formatage de la SWAP, activation de l'auto-montage lors du
démarrage de la machine, et export afin que l'UUID soit indiqué dans le
fichier /etc/fstab lors de l'installation ultérieure.
mkswap -L Swap /dev/zd0
export SWAP_DEVICES=/dev/zd0
rc-update add swap bootexport USE_EFI=y
export BOOTLOADER=grub
mkdir /mnt/sys
mount --bind /sys /mnt/sys
setup-disk /mntsetup-disk /mntmount --bind /dev /mnt/dev
mount --bind /proc /mnt/procCorriger la génération automatique de grub.cfg
echo "GRUB_FS=zfs" >> /mnt/etc/default/grub
chroot /mnt grub-mkconfig | sed -e "s#root=ZFS=/#root=ZFS=rpool/#" \
> /mnt/boot/grub/grub.cfg
umount /mnt/dev
umount /mnt/procÉcrit le secteur MBR afin que le système puisse démarrer
dd if=/usr/share/syslinux/mbr.bin of=/dev/sdaumount /mnt/sys
rebootSi le système ne démarre pas automatiquement avec UEFI, il faut éditer l'ordre
de démarrage du boot, soit directement dans l'UEFI, soit avec l'utilisation de
l'utilitaire efibootmgr.
Afficher la liste des entrées :
efibootmgr -vDevrait afficher quelque chose comme ici :
BootCurrent: 0002
Timeout: 0 seconds
BootOrder: 0000,0001,0002,0003
Boot0000* UiApp FvVol(7cb8bdc9-f8eb-4f34-aaea-3ee4af6516a1)/FvFile(462caa21-7614-4503-836e-8ab6f4662331)
Boot0001* UEFI VBOX CD-ROM VB2-01700376 PciRoot(0x0)/Pci(0x1,0x1)/Ata(1,0,0)N.....YM....R,Y.
Boot0002* UEFI VBOX HARDDISK VBefef2fd7-f6b20036 PciRoot(0x0)/Pci(0xd,0x0)/Sata(0,65535,0)N.....YM....R,Y.
Boot0003* EFI Internal Shell FvVol(7cb8bdc9-f8eb-4f34-aaea-3ee4af6516a1)/FvFile(7c04a583-9e3e-4f1c-ad65-e05268d0b4d1)
Boot0004* alpine HD(1,GPT,c4f262a1-59d9-e948-9801-49cc40ee1de9,0x1000,0x100000)/File(\EFI\alpine\grubx64.efi)Ici, les champs intéressants sont BootOrder et les entrées Bootxxxx.
BootOrder représente l'ordre dans lequel les entrées seront essayées afin
de démarrer la machine. Dans ce cas là, les entrées de 0000 à 0003 seront
testées dans l'ordre, l'entrée 0004 ne sera jamais essayée.
Pour modifier l'ordre, il faut utiliser l'option -o :
efibootmgr -o 1,4,3BootCurrent: 0002
Timeout: 0 seconds
BootOrder: 0001,0004,0003
Boot0000* UiApp
Boot0001* UEFI VBOX CD-ROM VB2-01700376
Boot0002* UEFI VBOX HARDDISK VBefef2fd7-f6b20036
Boot0003* EFI Internal Shell
Boot0004* alpineMaintenant, le CD-ROM sera essayé en premier, puis l'entrée alpine et pour
finir le Shell EFI ; les autres entrées sont ignorées.
Pour ajouter une entrée, il faut utiliser l'option -c qui mettra aussi
l'entrée créée en premier dans l'ordre de démarrage, ou -C qui ne fera que
rajouter l'entrée à la liste sans modification de l'ordre du boot.
efibootmgr -c -L EtiquetteEntree -l /EFI/alpine/grubx64.efiBootCurrent: 0002
Timeout: 0 seconds
BootOrder: 0005,0001,0004,0003
Boot0000* UiApp
Boot0001* UEFI VBOX CD-ROM VB2-01700376
Boot0002* UEFI VBOX HARDDISK VBefef2fd7-f6b20036
Boot0003* EFI Internal Shell
Boot0004* alpine
Boot0005* EtiquetteEntreePour supprimer une entrée, il faut utilier l'option -B :
efibootmgr -b 5 -BBootCurrent: 0002
Timeout: 0 seconds
BootOrder: 0001,0004,0003
Boot0000* UiApp
Boot0001* UEFI VBOX CD-ROM VB2-01700376
Boot0002* UEFI VBOX HARDDISK VBefef2fd7-f6b20036
Boot0003* EFI Internal Shell
Boot0004* alpineCréation du RAID1 avec seulement un seul disque, l'autre est ajouté plus bas:
mdadm --create /dev/md0 --level=1 --raid-devices=2 --metadata=0.90 --run $BOOTFS missing
mdadm --detail --scan >> /etc/mdadm.conf
rc-update add mdadm-raid boot
echo raid1 >> /etc/modulesAjout de la seconde partition /boot (second disque):
mdadm /dev/md0 --add /dev/sdb2Ajout d'une seconde partition mirroir au ZFS:
zpool attach rpool sda3 sdb3