Le blog de Victor Héry https://blog.victor-hery.com
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

457 lines
25 KiB

  1. ---
  2. Title: Installer Openvz 7 à distance
  3. subtitle: Bonus : chiffrez le intégralement
  4. date: 2017-11-23 23:31
  5. Authors: Victor
  6. Slug: installer-openvz7-a-distance
  7. Tags: openvz7, installation distante, chiffrement, LUKS, centos
  8. keywords: openvz7, installation distante, chiffrement, LUKS, centos
  9. Status: published
  10. ---
  11. [TOC]
  12. **Edit 2022**: Article mis à jour pour nettoyer les parties obsolètes : utilisation de sshd et du raid soft
  13. # Vous n'avez accès à rien ?
  14. Pas d'ipmi, pas de KVM, pas de console ? Et pourtant vous voulez installer votre serveur openvz ?
  15. C'est possible et dans cet article, on va voir comment vous pouvez vous en tirer !
  16. En bonus, parce que sinon ce serait trop facile, on va également voir comment chiffrer le serveur et lancer un serveur SSH au boot pour entrer le mot de passe et déchiffrer le disque.
  17. Vous aurez ainsi un serveur openvz entièrement chiffré pour faire tourner vos container ou vos VM, ce qui est très appréciable à notre époque où la confidentialité des données est un problème important.
  18. Vous pouvez très bien faire confiance à votre hébergeur (ou à ceux qui pourraient lui demander d'accéder à vos données), mais personnellement je pense que si vous ne vous mettez pas dans la situation ou vous **devez** lui faire confiance, c'est encore plus simple ;-)
  19. Je ne vais par contre pas vous mentir, sans accès visuel, le debug en cas de problèmes peut être trèèèèès relou.
  20. Je vais ici décrire la procédure complète qui a fonctionné plusieurs fois chez moi, mais il a fallut de nombreux tests... Si jamais vous ne vous en sortez pas, n'hésitez pas à commenter, j'essaierai de vous aider au mieux !
  21. **Attention !** Cela va de soit, mais cette procédure va totalement effacer les données de votre serveur. S'il n'est pas neuf et que vous souhaitez récupérer des données dessus, pensez à les backuper ;-)
  22. # Prérequis
  23. Je le dis tout de suite, il va vous falloir quand même quelques trucs pour vous faciliter la vie et permettre l'installation.
  24. * Un serveur HTTP (pas hébergé sur le serveur que vous installez !) accessible par le serveur que vous souhaitez installer. Voir ci-dessous.
  25. * Un client VNC. Je vous conseille [Reminna](http://www.remmina.org/wp/) si vous utilisez Linux. Sous Windows, je ne peux pas vous aider.
  26. * Un client SSH. Openssh sous Linux, ou [putty](http://www.putty.org/) sous Windows.
  27. * Il vous faut un mode rescue avec votre hébergeur... Même minimaliste, avec au moins un accès SSH, nécessaire pour le chroot.
  28. * Installer votre serveur sur votre OS préféré pour le préparer, j'utiliserai pour ma part Debian 11.
  29. ## Préparer le serveur HTTP
  30. Pour permettre l'installation à distance, il va falloir faire en sorte que les fichiers de l'image ISO openvz7 soient accessibles en HTTP pour que votre serveur puisse récupérer les fichiers à distance lors de son démarrage.
  31. **Ces manipulations doivent donc avoir lieu sur un AUTRE serveur que celui que vous allez installer !**
  32. Je partirai également du principe que vous avez un serveur HTTP. N'importe quel serveur web fera l'affaire, apache, nginx, IIS, c'est selon vos préférenes ou ce qui est disponible.
  33. Téléchargez votre iso depuis les [mirroirs openvz](https://download.openvz.org/virtuozzo/releases/7.0/x86_64/iso/). Vous pouvez prendre l'image classique (pas la netinstall).
  34. Il va vous falloir mettre à disposition les fichiers de l'image via HTTP. On va donc monter l'ISO sur votre serveur web, puis poser les fichiers dans un vhost pour qu'ils soient disponibles.
  35. mount openvz-iso-7.0.5-netinstall.iso /votre_repertoire_web/
  36. Faites en sortes que ce répertoire soit accessible sur une adresse type http://votredomain.tld/vz. Il doit pointer directement dans le répertoire où est montée l'image.
  37. Notez cette adresse dans un coin, ça va resservir. :-)
  38. ## Préparer le serveur pour l'installation
  39. ### Nettoyez les disques en mode rescue
  40. Redémarrer votre serveur sur votre mode rescue, pour nettoyer à fond les disques dur de votre serveur avant l'installation.
  41. Pour ça, on va utiliser l'outil [Shred](https://fr.wikipedia.org/wiki/Shred_(commande_unix)). En mode rescue, vous pouvez effacer vos disques tranquillement.
  42. Je vous conseille d'utliser au moins 2 passes, tout en remplissant de zéro pour être carré :
  43. shred -n 2 -z /dev/sda
  44. Ca peut prendre pas mal de temps selon la taille des disques, jusqu'à plusieurs heures... Lancez le de nuit si possible, mais pour que le chiffrement soit efficace, mieux vaut que le disque ne soit pas prédictible :-)
  45. ### Poser les fichiers d'installation
  46. Pour télécharger les fichiers nécessaires au lancement de l'installation, il vous faudra un OS installé sur votre serveur.
  47. Vous aurez besoin de générer un grub et de poser quelques fichiers dans /boot donc un Linux selon votre préférence. Pour ma part, je part sur un debian.
  48. Réinstallez donc votre serveur via le système d'installation de votre hébergeur, connectez vous en SSH, et go !
  49. Récupérez via votre serveur HTTP (celui avec l'ISO montée) les 2 fichiers d'install PXE :
  50. wget http://votredomaine.tld/vz/images/pxeboot/initrd.img -O /boot/initrd_ovz7.img
  51. wget http://votredomaine.tld/vz/images/pxeboot/vmlinuz -O /boot/vmlinuz_ovz7
  52. Notez la configuration réseau de votre serveur. Il vous faut adresse IP, passerelle, masque réseau et serveurs DNS :
  53. ip address show
  54. cat /etc/resolv.conf
  55. Vérifiez quel driver grub utilise pour votre partition de boot, et l'id de la partition /boot au passage :
  56. grep "hint" /boot/grub/grub.cfg
  57. # search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' xxxx-xxxx-xxxx-xxxx-xxxx
  58. # Ici on veut récupérer l'info du --hint, ainsi que l'ID du disque xxxx-....
  59. On va ensuite éditer grub pour ajouter une entrée spécifique pour booter sur l'installeur :
  60. vim /etc/grub.d/40_custom
  61. Et ajoutez après les commentaires le contenu suivant :
  62. **Attention à ne pas enlever le ``exec tail -n +3 $0`` dans le fichier**
  63. menuentry 'NetInstall' {
  64. load_video
  65. set gfxpayload=keep
  66. insmod gzio
  67. insmod part_msdos
  68. insmod ext2
  69. set root='HINT'
  70. if [ x$feature_platform_search_hint = xy ]; then
  71. search --no-floppy --fs-uuid --set=root --hint='HINT' ID_DISQUE
  72. else
  73. search --no-floppy --fs-uuid --set=root ID_DISQUE
  74. fi
  75. linux /vmlinuz_ovz7 vnc vncpassword=guigui inst.vncpassword=guigui headless inst.repo=https://votredomaine.tld/vz/ ip=IP_SERVEUR netmask=MASQUE_SERVEUR gateway=PASSERELLE_SERVEUR dns=DNS_SERVEUR nameserver=DNS_SERVEUR biosdevname=0 net.ifnames=0 ksdevice= bootproto=static lang=en_US keymap=us text noipv6
  76. initrd /initrd_ovz7.img
  77. }
  78. Cette configuration va permettre de redémarrer le serveur sur une console VNC pour permettre d'installer openvz7 en mode graphique à distance :-)
  79. Editez bien entendu les valeurs ci dessous :
  80. * ID_DISQUE : l'id de la partition récupérée plus tôt
  81. * HINT : le numéro de disque et la table de partition associé récupéré dans grub.cfg (ex : `hd0,msdos`, `hd1,gpt`, ...)
  82. * IP_SERVEUR : l'adresse IP du serveur
  83. * MASQUE_SERVEUR : le masque de sous réseau de votre serveur
  84. * PASSERELLE_SERVEUR : la passerelle par défaut de votre serveur
  85. * DNS_SERVEUR (x2) : l'IP du serveur DNS remontée plus tôt
  86. * mot de passe vnc : il doit faire entre 4 et 6 caractères, donc si vous le changez, restez dans ces critères
  87. Puis regénérez la configuration de grub :
  88. grub-mkconfig -o /boot/grub/grub.cfg
  89. Et enfin, configurez votre serveur pour redémarrer sur votre installeur au prochain reboot. Cette option permettra de redémarrer sur l'entrée grub, mais une fois seulement.
  90. Ainsi, si jamais il ne démarre pas ou que l'installation se passe mal (avant le formatage bien sûr), un simple redémarrage électrique le fera redémarrer sur son OS de base.
  91. grub-reboot NetInstall
  92. **Attention**, si votre serveur utilise une partition /boot sur un RAID soft, cette commande est durable. En cas de souci, il faudra passer par le rescue pour reconfigurer le démarrage sur le bon os.
  93. On va maintenant pouvoir redémarrer et récupérer la console VNC.
  94. # Installation d'openvz 7 !
  95. Redémarrez votre serveur, et lancez un ping sur son adresse IP. Dès qu'il répond, lancez votre console VNC sur l'IP du serveur, avec le port `:5901` ou `:1`.
  96. **Attention**, malgré pas mal de recherches et de tests, je n'ai pas réussi à monter une connexion chiffrée pour ce VNC... Sachez donc que tout ce que vous y entrerez sera potentiellement récupérable en clair sur Internet !
  97. Préparez vous donc à utiliser des mots de passe temporaires pour le chiffrement des disques et les accès utilisateurs. Nous les changerons dès l'installation terminée via une connexion SSH un peu plus robuste :-)
  98. Vous avez accès à la console VNC en mode graphique, donc rien de très compliqué pour l'installation. La [documentation officielle](https://docs.openvz.org/openvz_installation_guide.webhelp/_installing_openvz_in_graphics_mode.html) est parfaite à ce niveau là.
  99. Normalement, la configuration réseau est déjà faite grâce aux options de grub, donc rien à toucher.
  100. Le partitionnement des disques par défaut est en théorie suffisant, **mais** c'est le moment de penser à cocher "Encrypt" !
  101. Vous devez cocher la case pour toutes les partitions sauf /boot et la petite partition "BIOS Boot".
  102. En sortant du menu de partionnement, l'installeur vous demandera les mots de passe pour le chiffrement. Il est important de mettre le même mot de passe pour toutes les partitions.
  103. Attention là encore à ne pas mettre le mot de passe final, car la connexion à VNC n'est pas chiffrée !
  104. Laissez ensuite l'installation se terminer tranquillement, puis passez à la suite.
  105. # SSH et réseau au démarrage
  106. Pour cette partie, il va falloir redémarrer votre serveur en mode rescue de nouveau.
  107. En effet, votre serveur est désormais installé, ses disques sont chiffrés, mais vous n'avez pour l'instant aucun moyen de taper le mot de passe demandé au boot pour déchiffrer les disques !
  108. On va donc modifier directement le initramfs pour y intégrer un petit serveur SSH qui se lancera au boot, et qui permettra ainsi de taper le mot de passe au démarrage en toute sécurité.
  109. Une fois revenu en mode rescue, préparez vous à monter votre système en chroot. Je part ici du principe que vous avez gardé le partionnement par défaut, donc pensez à adapter le nom des partitions dans la suite si besoin.
  110. On va commencer par changer les mots de passe bidon des partitions maintenant que nous sommes sur une connexion ssh sécurisée.
  111. La manipulation change toutefois selon que vous ayez gardé du lvm monodisque, ou utilisé une configuration avec raid multidisque, choisissez celle qui vous convient le mieux !
  112. ## chroot avec lvm
  113. <p>
  114. <details>
  115. <summary>cliquez pour déplier</summary>
  116. On va activer les volumes lvm, changer les mots de passe luks, puis activer la partition root et la monter pour entrer en chroot.
  117. vgchange -a y
  118. cryptsetup luksChangeKey /dev/sda3 # On change le mot de passe du swap
  119. cryptsetup luksChangeKey /dev/mapper/virtuozzo-root # On change le mot de passe du /
  120. cryptsetup luksChangeKey /dev/mapper/virtuozzo-vz # On change le mot de passe du vz
  121. cryptsetup luksOpen /dev/mapper/virtuozzo-root crypt_root
  122. mkdir -p /mount/openvz
  123. mount /dev/mapper/crypt_root /mount/openvz
  124. mount /dev/sda2 /mount/openvz/boot
  125. mount -o bind /dev/ /mount/openvz/dev/
  126. mount -o bind /sys/ /mount/openvz/sys
  127. mount -o bind /proc/ /mount/openvz/proc/
  128. chroot /mount/openvz
  129. </details>
  130. </p>
  131. ## chroot avec raid soft
  132. <p>
  133. <details>
  134. <summary>cliquez pour déplier</summary>
  135. l'objectif est de signaler au système l'existence de volumes raid avec les bonnes partitions, changer les mots de passe luks, puis activer la partition root et la monter pour entrer en chroot.
  136. Pour commencer, récupérez les partitions qui correspondent entre-elles sur vos disques
  137. ```
  138. fdisk -l /dev/sda
  139. # Start End Size Type Name
  140. 1 2048 4095 1M BIOS boot
  141. 2 4096 2101247 1G Microsoft basic
  142. 3 2101248 5760518143 2,7T Linux RAID
  143. 4 5760518144 5827631103 32G Linux RAID
  144. 5 5827631104 5860532223 15,7G Linux RAID
  145. fdisk -l /dev/sdb
  146. # Start End Size Type Name
  147. 1 2048 5758418943 2,7T Linux RAID
  148. 2 5758418944 5825531903 32G Linux RAID
  149. 3 5825531904 5858433023 15,7G Linux RAID
  150. ```
  151. L'objectif ici est de **rapprocher** les partitions qui "vont ensembles" en raid mdadm, en utilisant leur taille, puisque 2 partitions en raid doivent être identiques.
  152. On observe par exemple que
  153. - sda3 est liée à sdb1
  154. - sda4 est liée à sdb2 # Au passage, cette partition est notre partition root, à repérer pour savoir quelle partition monter dans le chroot
  155. - sda5 est liée à sdb3
  156. Une fois cette correspondance faite, on va dire à mdadm d'activer les volumes raid.
  157. On prends ici l'exemple d'un raid1 avec 2 disques, dans le cas de raid5, ou 6, ajoutez les partitions nécessaires.
  158. ```
  159. # Modifiez bien vos partitions si nécessaire !
  160. mdadm -A -R /dev/md1 /dev/sda3 /dev/sdb1
  161. mdadm -A -R /dev/md2 /dev/sda4 /dev/sdb2
  162. mdadm -A -R /dev/md3 /dev/sda5 /dev/sdb3
  163. cryptsetup luksChangeKey /dev/md1
  164. cryptsetup luksChangeKey /dev/md2
  165. cryptsetup luksChangeKey /dev/md3
  166. cryptsetup luksOpen /dev/md2 crypt_root
  167. mkdir -p /mount/openvz
  168. mount /dev/mapper/crypt_root /mount/openvz
  169. mount /dev/sda2 /mount/openvz/boot
  170. mount -o bind /dev/ /mount/openvz/dev/
  171. mount -o bind /sys/ /mount/openvz/sys
  172. mount -o bind /proc/ /mount/openvz/proc/
  173. chroot /mount/openvz
  174. ```
  175. </details>
  176. </p>
  177. ## SSH dans le Initramfs
  178. Une fois dans le chroot, les choses marrantes reprennent ;-)
  179. La connexion au boot se fera exclusivement avec une clef SSH. Si vous avez besoin de générer une clef SSH, vous pouvez vous référer à [cet article](https://blog.victor-hery.com/2012/08/connexion-ssh-par-cle.html#generation-de-la-cle-les-choses-serieuses-commencent) .
  180. Commencez donc par poser votre clef ssh dans le chroot directement, ainsi elle sera prête pour votre connexion une fois le serveur démarré.
  181. mkdir -p /root/.ssh
  182. vim /root/.ssh/authorized_keys # Entrez votre clef SSH personnelle
  183. chmod 700 /root/.ssh
  184. chmod 600 /root/.ssh/authorized_keys
  185. J'utilisais précédemment [dracut-crypt-ssh](https://github.com/dracut-crypt-ssh/dracut-crypt-ssh) qui implémentait DropbearSSH, mais après plusieurs années de bons et loyaux services, il n'est plus maintenu.
  186. On peut avantageusement le remplacer désormais par [dracut-sshd](https://github.com/gsauthof/dracut-sshd) qui utilise pour sa part openssh.
  187. ```
  188. yum install yum-plugin-copr
  189. yum copr enable gsauthof/dracut-sshd/
  190. yum update
  191. yum install dracut-sshd
  192. mkdir /etc/dracut-sshd
  193. cp /root/.ssh/authorized_keys /etc/dracut-sshd/
  194. ```
  195. **Si vous utilisez un raid software** il est nécessaire d'indiquer à dracut de charger le driver correspondant
  196. ```
  197. vim /etc/dracut.conf
  198. # Modifier et décommentez l'entrée add_drivers
  199. add_drivers+="raid1" # Dans le cas d'un raid1, sinon raid5, raid6, raid0, ...
  200. ```
  201. Par défaut, dracut va générer un initramfs pour le noyau sur lequel le serveur est démarré, à savoir celui du rescue.
  202. Pas très utile dans notre cas...
  203. Récupérez donc le "vrai" noyau qu'utilise openvz, c'est à dire le dernier (classé par nom) disponible dans /boot :
  204. # ls /boot/
  205. [...]
  206. vmlinuz-3.10.0-514.16.1.vz7.30.10
  207. On va ici générer l'image initramfs pour le noyau 3.10.0-514.16.1.vz7.30.10 :
  208. dracut --force /boot/initramfs-3.10.0-514.16.1.vz7.30.10.img 3.10.0-514.16.1.vz7.30.10
  209. La commande dracut ne doit rien vous renvoyer mais peut être longue à exécuter... Si vous avez une erreur, vous devrez chercher la solution avant le prochain redémarrage, car votre initramfs risque d'être HS. Au pire, le mode rescue vous sera extrêmement utile !
  210. Une fois que le initramfs a été généré sans erreur, on va s'occuper du réseau.
  211. ## Configuration de grub : réseau
  212. Reprenez ici la configuration réseau que vous aviez noté plus haut pour le boot VNC, ça va resservir.
  213. On va éditer le fichier `/etc/default/grub` pour demander à grub de monter le réseau au démarrage.
  214. GRUB_CMDLINE_LINUX="... rd.neednet=1 ip=IP_SERVEUR::PASSERELLE_SERVEUR:MASQUE_SERVEUR:centos:enp0s3:off dns=DNS_SERVEUR nameserver=DNS_SERVEUR"
  215. Ici on va réutiliser les paramètres réseaux, mais ce qu'il faut surtout noter, c'est la partie "enp0s3".
  216. Il s'agit de votre interface réseau, nommée d'après les paramètres du Bios de votre serveur, les classiques ethX ayant été abandonnés depuis les derniers noyaux. Si jamais vous ne la connaissez pas, il est possible de forcer eth0, cf la section troubleshooting plus bas :-)
  217. Une fois le fichier enregistré, regénérez la configuration grub :
  218. grub2-mkconfig --output /etc/grub2.cfg
  219. ## Configuration de grub : luks
  220. Sur les dernières versions d'openvz, j'ai noté que le grub n'est parfois configuré que pour déchiffrer que les partitions root et swap.
  221. Cela nous pose problème, car il demande le mot de passe pour déchiffrer la partition /vz bien plus tard, **après** le process initramfs mais **avant** d'avoir lancé les services. Pas de ssh pour le déverrouiller donc !
  222. Pour corriger cela, on va devoir vérifier la configuration du grub nous-même.
  223. Tout se passe dans le fichier `/etc/default/grub`, à la section `GRUB_CMDLINE_LINUX`.
  224. Tout d'abord, récupérez les noms des partitions luks :
  225. ```
  226. # blkid |grep luks
  227. /dev/mapper/luks-c80672a4-6644-4c0a-bc11-2ab2674fd4ec: UUID="16609b0b-983e-4982-9dd0-972f66a0c115" TYPE="swap"
  228. /dev/mapper/luks-40bc8a84-7296-4df4-b872-6b67aa037174: UUID="51390ed2-dddf-4f61-8c29-19bd43022863" TYPE="ext4"
  229. /dev/mapper/luks-02313a5d-c3af-4372-9ea5-ead11f2ce244: UUID="5b63074f-c886-46bf-a1c9-1c43a0059667" TYPE="ext4"
  230. ```
  231. On récupère ce qui est après le `/dev/mapper`, par exemple `luks-c80672a4-6644-4c0a-bc11-2ab2674fd4ec`
  232. Pour chaque volume luks à déchiffrer au boot, vous devez avoir une section de type
  233. ```
  234. rd.luks.uuid=luks-02313a5d-c3af-4372-9ea5-ead11f2ce244
  235. ```
  236. dans la `GRUB_CMDLINE_LINUX` du fichier `/etc/default/grub. (cf un exemple complet ci-dessous)
  237. <p>
  238. <details>
  239. <summary>Si vous utilisez en outre un raid soft, cliquez</summary>
  240. Vous devez récupérer les volumes raid :
  241. ```
  242. # blkid | grep md
  243. /dev/md127: UUID="6f09377e-dda8-4d11-83b6-c3c3cc17b6b9" TYPE="crypto_LUKS"
  244. /dev/md126: UUID="03988b26-4004-4551-969b-461a7d2f37e6" TYPE="crypto_LUKS"
  245. /dev/md125: UUID="0d60f8ec-7167-4e07-a92a-8f58fe89c22a" TYPE="crypto_LUKS"
  246. ```
  247. On va utiliser le paramètre `rd.md.uuid` de grub MAIS celui-ci prends un format bien précis d'uuid, séparé par des points.
  248. Prenez donc l'UUID de vos disques, et tous les 8 caractères, enlevez le tiret et mettez un `:` à la place :
  249. ```
  250. 6f09377e-dda8-4d11-83b6-c3c3cc17b6b9 => 6f09377e:dda84d11:83b6c3c3:cc17b6b9
  251. 03988b26-4004-4551-969b-461a7d2f37e6 => 03988b26:40044551:969b461a:7d2f37e6
  252. ...
  253. ```
  254. Il faudra ensuite ajouter dans la ligne `GRUB_CMDLINE_LINUX` une option `rd.md.uuid=XXX` pour chaque partition raid. (cf exemple complet ci-dessous)
  255. </details>
  256. </p>
  257. Voici un exemple complet de la ligne finale avec un raid1 :
  258. ```
  259. # cat /etc/default/grub
  260. GRUB_CMDLINE_LINUX="crashkernel=auto rd.luks.uuid=luks-03988b26-4004-4551-969b-461a7d2f37e6 rd.md.uuid=4e7537f2:97d36823:1495a4b6:5e02ee30 rd.luks.uuid=luks-6f09377e-dda8-4d11-83b6-c3c3cc17b6b9 rd.md.uuid=d57b1ed4:ea77ea71:27bcaadd:39321bd9 rd.luks.uuid=luks-0d60f8ec-7167-4e07-a92a-8f58fe89c22a rd.md.uuid=5e66072c:1ffb2033:ff97ca5a:6ab13de0 biosdevname=0 net.ifnames=0 quiet rd.neednet=1 ip=IP_SERVEUR::PASSERELLE_SERVEUR:MASQUE_SERVEUR:centos:enp0s3:off dns=DNS_SERVEUR nameserver=DNS_SERVEUR"
  261. ```
  262. Une fois le fichier enregistré, regénérez la configuration grub :
  263. grub2-mkconfig --output /etc/grub2.cfg
  264. ## Sortir du chroot
  265. Une fois la configuration regénérée sans erreurs, vous pouvez quitter le chroot, démonter les disques et préparer le redémarrage.
  266. <p>
  267. <details>
  268. <summary>Cliquez pour sortir du chroot avec lvm</summary>
  269. ```
  270. exit
  271. umount /mount/openvz/dev
  272. umount /mount/openvz/sys
  273. umount /mount/openvz/proc
  274. umount /mount/openvz/boot
  275. umount /mount/openvz
  276. cryptsetup luksClose crypt_root
  277. vgchange -a n
  278. ```
  279. </details>
  280. </p>
  281. <p>
  282. <details>
  283. <summary>Cliquez pour sortir du chroot avec raid soft</summary>
  284. ```
  285. exit
  286. umount /mount/openvz/dev
  287. umount /mount/openvz/sys
  288. umount /mount/openvz/proc
  289. umount /mount/openvz/boot
  290. umount /mount/openvz
  291. cryptsetup luksClose crypt_root
  292. mdadm -S /dev/md3
  293. mdadm -S /dev/md2
  294. mdadm -S /dev/md1
  295. ```
  296. </details>
  297. </p>
  298. N'oubliez pas de désactiver le mode rescue de votre serveur, pour éviter qu'il ne démarre en mode rescue ! Puis redémarrez le serveur.
  299. # Last reboot (?)
  300. Si tout s'est bien passé, au bout de quelques minutes (selon votre serveur), le réseau devrait se remettre à pinguer. Quelques instant plus tard, le SSH devrait être disponible.
  301. ```
  302. % ssh root@IP_SERVEUR -p 22
  303. # Cette commande permet de passer le mot de passe de déchiffrement à systemd
  304. # Sur une install standard, vous avez 3 disques à déchiffrer (/root, /vz et swap), il faudra donc entrer la commande 3 fois
  305. systemd-tty-ask-password-agent
  306. systemd-tty-ask-password-agent
  307. systemd-tty-ask-password-agent
  308. ```
  309. Si le mot de passe est correct, le boot va continuer, votre shell va se terminer et votre serveur terminer de démarrer tranquillement.
  310. Vous devriez ensuite pouvoir vous connecter de manière tout à fait classique avec vos identifiants (le mot de passe root indiqué à l'installation).
  311. Si jamais initramf ne continue pas, n'hésitez pas à utiliser la commande `systemd-tty-ask-password-agent --list` pour récupérer la liste des disques non débloqués et voir ce qui coince.
  312. # Troubleshooting
  313. Cette procédure est normalement fonctionnelle, mais pas mal de chose peuvent mal se passer malheureusement, sans accès console, c'est difficile à debuguer...
  314. Personnellement, j'ai redémarré mon serveur en mode rescue/redémarrage classique plus de 90 fois pour rédiger cet article :-D
  315. Je vais ici parler des problèmes que j'ai rencontré pendant mes tests.
  316. ## Pas de VNC
  317. Si votre serveur ne démarre pas en VNC, il se peut que le réseau ne monte pas. Si vous avez suivi la consigne avec la commande `grub-reboot NetInstall`, il vous suffit de redémarrer le serveur via l'interface de votre hébergeur, et il repartira par défaut sur votre OS de préparation.
  318. À partir de là, vérifiez votre configuration réseau et que votre grub contient le tout. Sous Debian, il est dans `/boot/grub/grub.cfg`.
  319. Remettez un coup de `grub-reboot NetInstall` et on redémarre :-)
  320. ## L'installeur Virtuozzo plante
  321. J'ai rencontré plusieurs crash une fois la console VNC lancée. Ils étaient dû à des paramètres incorrects dans les paramètres de boot, comme l'id du disque dur de votre menu grub, ou le layout clavier.
  322. Vérifiez que tout correspond bien, et notamment si vous avez tenté un `lang` différent de "en_US" ou un `keymap` différent de "us", laissez tomber et réessayez avec les bonnes options. Apparemment, l'installeur de Virtuozzo n'aime pas les autres options au démarrage...
  323. Notez que vous pouvez quand même configurer un layout FR une fois l'installeur lancé via l'interface graphique.
  324. ## Forcer eth0
  325. Pour la configuration réseau de initramfs, déterminer le nom qu'aura l'interface réseau avec la prédiction Bios n'est pas forcément évident si votre OS de préparation ne l'utilise pas.
  326. Pour forcer à revenir à eth0, il vous suffit d'ajouter les 2 options suivantes dans votre `GRUB_CMDLINE_LINUX`, via votre chroot en mode rescue :
  327. ... net.ifnames=0 biosdevname=0 ...
  328. N'oubliez pas de régnérer le grub une fois la ligne modifiée :-)
  329. grub2-mkconfig --output /etc/grub2.cfg
  330. ## Rien ne boot ça marche pas !
  331. Un conseil, si vraiment ça ne fonctionne pas et que tout parait correct, déroulez toute la procédure sur une VM locale, par exemple via virtualbox, pour disposer d'une console et voir les erreurs qui peuvent s'y afficher.
  332. Si jamais, n'hésitez pas à me laisser un petit commentaire, si je peux aider ça sera avec plaisir !
  333. Et bon courage ;-)
  334. # Sources et biblio
  335. Je remercie ces différents auteurs qui m'ont permis d'arriver à ce résultat et à écrire cet article !
  336. * [Stockage chiffré intégral sur serveur distant Debian](https://blog.imirhil.fr/2017/07/22/stockage-chiffre-serveur.html)
  337. * [Install Virtuozzo via VNC](https://docs.virtuozzo.com/virtuozzo_7_installation_guide/installing-virtuozzo/installing-virtuozzo-via-vnc.html)
  338. * [Centos6 disk encryption with remote password](http://roosbertl.blogspot.com/2012/12/centos6-disk-encryption-with-remote.html)
  339. * [crypt-wait for dracut](https://bitbucket.org/bmearns/dracut-crypt-wait/src)
  340. * [Dracut sshd](https://github.com/gsauthof/dracut-sshd)
  341. * [Dracut documentation](https://www.kernel.org/pub/linux/utils/boot/dracut/dracut.html)