[ howto ] Installation d'un serveur dédié (partie 1 debootstrap de devuan)
Je viens de prendre une nouvelle machine pour remplacer mon ancienne. Plus performante pour moins cher.
Au passage, je passe chez Hertzner. Premier fois chez eux, tout le monde m'en a dit du bien (contenu non sponsorisé bien évidement !)
L'idée de cet article est d'expliquer comment je mets en place Devuan avec des disques chiffrés sur un serveur distant.
Comme l'installation se fera via debootstrap, il est possible d'installer absolument n'importe quelle distribution basée sur une gestion des paquets par APT.
Pour commencer, étant donné que les manipulations suivantes ne sont pas sans risques, un petit disclamer (originellement utilisée sur Android) :
#include <std_disclaimer.h
/*
* Your warranty is now void.
*
* I am not responsible for bricked devices, dead SD cards,
* thermonuclear war, or you getting fired because the alarm app failed. Please
* do some research if you have any concerns about features included in this ROM
* before flashing it! YOU are choosing to make these modifications, and if
* you point the finger at me for messing up your device, I will laugh at you.
*/
Allez, on se lance !
Par défaut, la machine a boot en rescue. Parfait !
Si ce n'est pas le cas, ça peut se faire ici :
Première étape : Partitionnement
Comme je veux faire des disques chiffrés, le partitionnement sera un peu particulier. De plus, pas de raid car j'ai besoin de tout l'espace.
L'idée est la suivante :
- /boot : Non chiffré, ext2, petite taille
- / : Non Chiffré, ext4, taille moyenne
- /media/data : Chiffré, ext4, grand
- /home: Chiffré, ext4, grand
mklabel msdos
mkpart primary ext4 1 512mb
mkpart primary ext4 512mb 50.5gb
mkpart primary 50.5gb 100%
toggle 1 boot
print free
quit
parted /dev/nvme1n1
mklabel msdos
mkpart primary 1 100%
quit
Resultat :
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop0 7:0 0 3G 1 loop
nvme0n1 259:0 0 476.9G 0 disk
|-nvme0n1p1 259:5 0 487M 0 part
|-nvme0n1p2 259:6 0 46.6G 0 part
`-nvme0n1p3 259:7 0 429.9G 0 part
nvme1n1 259:1 0 476.9G 0 disk
Deuxième étape: Préparer le terrain pour le debootstrap
mkfs.ext4 /dev/nvme0n1p2
export MY_CHROOT=/target
mkdir -p $MY_CHROOT
mount /dev/nvme0n1p2 $MY_CHROOT
mkdir ${MY_CHROOT}/boot
mount /dev/nvme0n1p1 ${MY_CHROOT}/boot
Petit problème: devuan n'est pas inclu dans le rescue disc
ln -s ceres /usr/share/debootstrap/scripts/chimaera
Troisième étape: On passe aux debootstrap
LC_ALL=C debootstrap --arch amd64 --include=$PKG --variant=minbase chimaera $MY_CHROOT http://deb.devuan.org/merged
Et voilà !
Ce n'est pas plus compliqué que cela 🙂
Quatrième étape: Finaliser le système
On 'chroot' dans le système nouvellement installé
mount -o bind /dev ${MY_CHROOT}/dev
mount -t proc /proc ${MY_CHROOT}/proc
LC_ALL=C chroot ${MY_CHROOT}
Attention aux étapes suivantes. Il faut prendre le temps de bien faire si non le système ne démarrera pas (correctement) !
Premier chose importante à faire : Configurer le fstab
Récuperer la liste des UUID avec `blkid` puis les mettre dans le fstab :
/dev/loop0: UUID="2dceb8c1-0bfe-488e-820a-e4f78326dc0a" BLOCK_SIZE="4096" TYPE="ext2"
/dev/nvme0n1p1: UUID="af0c516a-4da3-4010-903f-e8a6213b1ec4" BLOCK_SIZE="1024" TYPE="ext4" PARTUUID="b5e79a8a-01"
/dev/nvme0n1p2: UUID="d6a7c1f4-036a-411c-a50d-eaee427131aa" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="b5e79a8a-02"
/dev/nvme0n1p3: PARTUUID="b5e79a8a-03"
/dev/nvme1n1p1: PARTUUID="9257632b-01"
root@rescue:/# cat /etc/fstab
# UNCONFIGURED FSTAB FOR BASE SYSTEM
UUID=af0c516a-4da3-4010-903f-e8a6213b1ec4 /boot ext4 discard,noatime,nodiratime,errors=remount-ro 0 1
UUID=d6a7c1f4-036a-411c-a50d-eaee427131aa / ext4 discard,noatime,nodiratime,errors=remount-ro 0 0
puis mettre à jour GRUB pour prendre en compte les nouvelles partitions :
update-grub
On crée un compte utilisateur
Adding user `nailyk' ...
Adding new group `nailyk' (1000) ...
Adding new user `nailyk' (1000) with group `nailyk' ...
Creating home directory `/home/nailyk' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for nailyk
Enter the new value, or press ENTER for the default
Full Name []: nailyk
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n]
Et le mettre sudoer
(ben oui, la première fois j'ai oublié, me suis retrouvé un peu bête 😁 )
Creer le fichier interfaces :
## /etc/network/interfaces example Hetzner root server
# Loopback-Adapter
auto lo
iface lo inet loopback
#
# LAN interface
auto eth0
iface eth0 inet static
# Main IP address of the server
address 65.108.227.145
# Netmask 255.255.255.255 (/32) independent from the
# real subnet size (e.g. /27)
netmask 255.255.255.192
# explicit host route to the gateway
gateway 65.108.227.129
pointopoint 65.108.227.129
#
iface eth0 inet6 static
# one IPv6 address from assigned subnet
address 2a01:4f9:1a:a7af::2
netmask 64
gateway fe80::1
Et, enfin, mettre en place un hostname
Pas forcemment nécéssaire mais, d'experience, les Linux ont du mal à gérer le réseau quand ce n'est pas proprement mis en place, donc je ne prends pas le risque:
666
cat /etc/hosts
127.0.0.1 localhost
127.0.0.1 666
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
cat /etc/resolv.conf
#fdn
nameserver 80.67.169.12
nameserver 80.67.169.40
nameserver 80.67.188.188
nameserver 89.234.141.66
nameserver 2001:910:800::12
nameserver 2001:910:800::40
Le moment stréssant : Le restart
Sortir du chroot puis redémarrer 🤞
Petites améliorations : Fichier de SWAP
(il peut être intéréssant de le mettre sur un disque chiffré, voir l'article suivant)
sudo fallocate -l 16G /media/data/swapfile
sudo chmod 600 /media/data/swapfile
sudo mkswap /media/data/swapfile
sudo swapon /media/data/swapfile
echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf
🔖 vm.swappiness=10 permet de dire de commencer à utiliser le swap à partir de 10% de mémoire libre. Par defaut, sous de[bv]ian la valeur est de 60. Peu intéréssant dans le cas d'un serveur.
Quand ça se passe mal
Très probablement, certaines choses vont mal se passer.
Pas de panique !
Via l'interface de management de la machine, mettre en mode Rescue puis redémarrer la machine.
Une fois la machine redémarrée en mode rescue il faut remettre en place le chroot :
mkdir -p $MY_CHROOT
mount /dev/nvme0n1p2 $MY_CHROOT
mount /dev/nvme0n1p1 ${MY_CHROOT}/boot
mount -o bind /sys ${MY_CHROOT}/sys
mount -o bind /dev ${MY_CHROOT}/dev
mount -t proc /proc ${MY_CHROOT}/proc
LC_ALL=C chroot ${MY_CHROOT}
Et débogger 😉