Installer Debian en CLI comme Archlinux
2023-02-18
RĂ©cemment j'ai voulu changer de serveur Kimsufi et passer sur une gamme plus importante. J'avais une machine avec 4 disques, j'ai donc initialement voulu faire un gros RAID 5. Sauf que le manager OVH m'envoyait valser sur l'installation de l'OS car la partition / devait ĂȘtre en RAID 0 ou 1 mais pas en RAID 5... Quel dommage (sic), cette limitation m'a donnĂ©e envie de bidouiller un peu et d'installer une Debian sans l'installeur d'OVH... Et pourquoi pas installer sa Debian comme une ArchLinux ? Pas en rolling release mais en faisant tout manuellement ?
--------------------------------------------------------------------------------
Petite anecdote, les nouveaux serveurs "kimsufi" sont en rĂ©alitĂ© devenus des gammes Ăco chez OVHcloud, donc maintenant on peut commander son KS avec son compte OVH et avoir accĂšs Ă un mĂȘme manager pour tout gĂ©rer (DNS, Domaine, serveur)... (Source @olesovhcom)
--------------------------------------------------------------------------------
Envie de s'amuser un peu ? Eh bien c'est parti !
Petite chose cependant, je souhaitais partir sur un RAID 5, mais aprÚs diverse réflexions un RAID 0 me suffit amplement. Alors oui je sais, c'est dangereux, je peux perdre tout un FS complet en cas de panne, corruption de disque ou whatever... Si je suis parti sur ça, j'ai mes raisons.
Alors pourquoi continuer d'installer ma Debian comme ça alors que le manager OVH permet d'installer son OS sur un RAID 0 ? Eh bien pour le FUN
/content/images/2023/03/glitter-sparkle.gif
âčïž
Apparament il n'est plus possible d'avoir son /boot et / en RAID 0, mais uniquement en RAID 1
Du coup, c'est parti pour de la ligne de commande !
DĂ©jĂ on boot le serveur en rescue sur le rescue64-pro... C'est une Debian 8 et ça va nous embĂȘter pour la suite, mais que serai l'informatique sans problĂšme ? :D Une fois bootĂ© sur le rescue, on va Ă©diter comme des sauvages le sources.list de la machine pour ajouter les repository de Debian 11, on va en utiliser le paquet arch-install-scripts. On peut largement s'en passer, mais ils facilitent un peu tout ça (un peu) :
Une fois cela fait, on va [STRIKEOUT:créer les partitions nécessaires pour installer notre machine.] vérifier l'état des disques avec la commande smartctl. Ensuite on crée les partitions nécessaires pour installer notre machine.
Il y a plusieurs écoles, celle qui met une seule et unique partition et celle qui sépare le / du /var du /var/log du /home. Je vous avouerai que sur cette machine j'ai fait un énorme / et basta. Sur mes machines ayant besoin d'un peu plus de qualité (pour la MCO par exemple) j'ai un /, un /var et un /data séparé et avec du LVM. D'ailleurs si vous souhaitez faire des partitions, je conseil de les faire avec LVM et de gérer votre RAID avec mdadm (qui semble avoir de meilleure performance) et donc de n'avoir qu'une partition physique sur le disque, que vous brancher avec mdadm pour ensuite mettre vos partitions LVM comme ça par exemple :
semble avoir de meilleure performance
Du coup, on ne crée qu'une seule partition avec fdisk :
/content/images/2023/02/image-2.png
Pour résumer, j'ai appuyé sur m pour avoir le helper puis sur n pour "new", puis sur entré, puis sur entré (deux fois donc), puis sur w pour écrire la table de partition. Et parce que j'ai une FLEMME MONSTRUEUSE de faire cette éreintante commande 4 fois, j'utilise sfdisk pour cloner ma table de partition :
La partition est créé sur tout les disques ? Vous pouvez utiliser lsblk pour voir cela :
Du coup c'est bon ?
TrĂšs bien, donc maintenant le RAID ! Tout simple, c'est avec mdadm !
đĄ
Petit point d'attention, faire un RAID sur un disque complet sans partition c'est possible, mais si votre systĂšme est hĂ©bergĂ© sur ce RAID, cela va empĂȘcher l'installation de grub
On format le nouveau périphérique (nommé md0) en ext4 (ou xfs ou ce que vous voulez) et on le monte sur /mnt
Du coup, comme le rescue est un OS vieux comme le monde, il faut récupérer la clé GPG de Debian 11
On installe debootstrap et on lance l'installation de la base de Debian dans le /mnt
Puis on attend un :
Ă partir de lĂ les scripts de archlinux nous seront utile (mais il est possible de le faire sans)
Alternativement, pour le /mnt/etc/fstab :
Si vous n'avez qu'une seule partition
Et pour vous chrootez :
Maintenant on va installer et configurer la machine (comme sur une archlinux, on commence par le nom de la machine, l'heure et la langue de la machine
tzdata permet de paramĂ©trer l'heure de la machine. locales permet de paramĂ©trer et gĂ©nĂ©rer la langue de la machine et les langues supportĂ©. J'ai une petite prĂ©fĂ©rence pour le support de fr_FR.UTF-8 et en_US.UTF-8 avec en par dĂ©faut, mais vous ĂȘtes grand ;).
Ensuite, on va installer linux ( đ ). Je vais partir du principe que vous ĂȘtes sur un Kimsufi, alors vous ĂȘtes sur un BIOS et vous avez une architecture en 64bits, donc vous allez installer les paquets qui suit :
Vous pouvez chercher des images Linux plus approprié avec la commande apt-cache search linux-image qui permet de lister les images standard, cloud ou rt.
Pour grub, si vous n'ĂȘtes pas sur si votre machine supporte EFI ou pas, une commande peut gĂ©rer ça :
C'est pas forcĂ©ment fiable, la carte mĂšre d'un autre serveur supporte l'UEFI mais je l'ai configurĂ© en BIOS il y a longtemps (pourquoi ? Alors lĂ ...) mais ça donne une idĂ©e. Si vous ĂȘtes sĂ»r de supporter l'EFI, utilisez le paquet grub-efi.
Une fois ces paquets-là installés, on a quasiment fini (quasiment ! ), on doit installer mdadm pour permettre l'installation du grub, sinon cela échoue (je me suis cassé un peu le crùne sur l'erreur car l'OS ne trouvait pas md0 alors qu'il était dessus...
Ensuite on install grub :
Voilà , Linux est installé.
/content/images/2023/02/cependant-jdg.gif
Ce n'est pas fini. Si vous redĂ©marrez votre machine maintenant elle n'aura pas de rĂ©seau ! Pour ça, on va installer deux trois paquets, notamment SSH (sinon mĂȘme avec une connexion rĂ©seau vous n'avez pas accĂšs Ă l'administration de votre machine, c'est un peu dommage et ça m'est un peu arrivĂ©).
Du coup :
vim ou nano on s'en fout (non), vous allez l'utiliser pour :
- Configurer votre serveur SSH
- Ajouter une clé SSH dans votre ${HOME}/.ssh/authorized_keys
- Configurer votre réseau (la partie la moins simple)
â ïž
Vous n'avez pas de mot de passe défini pour root
La section authentification c'est un peu la foire à l'empoigne, chacun à sa petite méthode pour se connecter à sa machine qui est mieux que celle de l'autre (et je sais que je risque d'avoir des commentaires sur la mienne).
Alors je vais faire la méthode la plus complexe pour l'authentification, mais en retenant qu'un seul point : interdire la connexion root avec mot de passe en SSH (vraiment).
Tout d'abord, ajoutez un mot de passe Ă root
Ensuite, on va créer un nouvel utilisateur et lui créer son dossier .ssh :
Ensuite modifiez votre configuration SSH pour glisser ces directives :
PermitRootLogin peut avoir différente valeur :
- yes qui permet de se connecter comme un utilisateur normal
- without-password qui permet de se connecter mais sans utiliser de mot de passe
- forced-commands-only qui permet de se connecter en root (pareil sans utiliser de mot de passse pour lancer certaines commandes.
- no interdit la connexion Ă root
(le man).
On modifie le sudoers pour pouvoir utiliser root :
(Le man)
Maintenant le réseau !
C'est ici la partie la plus "compliquée", la configuration de l'interface réseau. Le rescue force l'utilisation du nom eth0, mais l'interface a probablement un autre nom.
Bon, je suis prĂȘt Ă parier que le nom sera eno1 đ mais sait on jamais.
On va donc éditer les interfaces. Tout d'abord l'interface local, assez facile :
Maintenant l'interface public de la machine, on va se rendre sur le manager OVH
/content/images/2023/02/Capture-d--cran-du-2023-02-22-22-00-33.png
Vous vous doutez, les IPs sont modifiĂ©es mais l'essentiel est lĂ
Donc dans le fichier de configuration réseau /etc/network/interfaces.d/eno1 vous allez remplir les informations suivantes :
Pour la gestion de l'IPv6 sur un Kimsufi, je vous invite Ă lire l'article Ă ce sujet
https://dryusdan.space/mettre-en-place-lipv6-sur-un-kimsufi/
Maintenant, l'heure de verité, vous allez quitter votre chroot, redémarrer la machine (en ayant pris soin de retirer le mode rescue sur le manager OVH) et attendre. Vous pouvez dans un terminal à cÎté lancer un ping.
Normalement il y a de grandes chances que votre serveur démarre.
Si jamais cela ne fonctionne pas, revenez sur le rescue, et effectuez la commande suivante :
(On voit d'ailleur que j'ai 2 interfaces sur cette machine). eth0 a été renommé en eno1.
Un exemple sur autre exemple sur mon archlinux :
Donc ça marche plutÎt bien.
Si le nom ressorti n'est pas eno1 mais enp5s0, refaites l'étape précédente (modification d'un fichier de configuration réseau) en remplaçant eno1 par enp5s0.
Petit découverte par la suite. Ma machine est montée avec des interfaces 1000mbps mais un débit limité à 100mbps. Assez rapidement j'ai découvert que j'avais énormément de "TCP retransmit"
/content/images/2023/02/Capture-d-e-cran-2023-02-25-a--11.33.15.png
Ce que me confirmait iperf3 (et là j'étais sur le rescue pour valider que ce n'était une application qui a pété une durite) :
La petite colonne Retr indique le nombre de paquet retransmis. Du coup, il va falloir contrÎler le trafic (Traffic shapping) et là c'est pas simple. Assez rapidement j'ai découvert que la méthode la plus efficace serait d'utiliser tc déjà intégré au systÚme. Le wrapper tcconfig que j'ai testé n'avait pas fonctionné. Mais tc c'est un peu comme la commande ip ou nft (pour nftables et pas "non-fungible token") c'est trÚs efficace, mais trÚs complexes à appréhender.
Du coup, aprÚs avoir parcouru plusieurs sites pour trouver non pas un article qui fonctionne, mais un article qui explique plus simplement que la documentation, je suis tombé sur cet article (en anglais) qui donne pas mal d'exemple et explique avec des cas "concrets" : Limiting WireGuard Bandwidth. Mais nous n'allons pas limiter le trafic pour wireguard mais carrément en sortie du serveur.
đĄ
Il faut l'exécuter dans un tmux ou un screen
Normalement, en relançant un iperf3, vous devriez avoir de bien meilleur résultat :
D'ailleurs dans l'article vous pourrez lire comment définir une QOS
Je ne vais pas vous traduire ce qui est écrit dans l'article, il est trÚs bien écrit et je pense rendre moins compréhensible que nécessaire.
Cependant, je vais quand mĂȘme expliquer grossiĂšrement ce qu'on a fait. Dans l'idĂ©e, on a créé une rĂšgle de contrĂŽle en sortie "parente" qui est la rĂšgle 0 et qui va matcher tous les paquets flagguĂ© avec un bit 32 (tous par dĂ©faut donc) et ainsi appliquer une rĂšgle de contrĂŽle de trafic qui ici limite la bande passante Ă 100mbps et crĂ©er une rĂšgle de PFIFO (first in / first out).
Maintenant qu'on a validé que le traffic shapping fonctionne, on va l'intégrer au démarrage du systÚme. Il y a plusieurs méthodes possible :
- Faire un script et appeler ce script via systemd
- Utiliser un service systemd qui appel ces deux commandes
Je pars sur le second choix. Du coup :
On recharge systemd et on active au démarrage le service qu'on vient de créer.
Et maintenant c'est "reboot proof", vous pouvez tester en redémarrant et en testant via iperf3. Profitez bien de votre machine !
Sur ce, portez-vous bien.
Photo de Onur Binay
--------------------------------------------------------------------------------