Niveau :
Résumé : mke2fs; mount; tar; grub; reboot
Si vous administrez des machines à distance sous linux, il se peut que cet article vous intéresse.
Il arrive parfois qu'on veuille réinstaller une machine sur laquelle on n'a qu'un accès distant (en général ssh), par exemple pour changer de distribution ou pour beaucoup d'autres mauvaises raisons. Il existe pour cela peu de méthodes. Nous allons en voir quelques unes avec différentes contraintes. Il est certainement possible d'appliquer la méthode pour installer d'autres unix, mais les pièges sont différents.
Attention toutefois, une erreur de manipulation peut vous faire perdre le contrôle. Il vous faut disposer d'un éventuel collaborateur pouvant agir directement sur la machine en cas d'urgence. Ou tout au moins la possibilité d'un reboot distant (du style par commande de la prise électrique), avec un bootloader bien configuré ou la possibilité de booter par le réseau, ceci permet de rattraper quasiment toutes les erreurs. Et n'oubliez pas de tester chez vous ce dont vous n'êtes pas sûr :-).
Méthode 1
La plus simple, si vous avez une partition vide disponible. Ou de l'espace libre sur votre disque, auquel cas un cfdisk && mkfs bien placé vous ramène dans la situation voulue (notez le besoin de rebooter si vous faites un cfdisk sur le disque où se situe votre / ).
Les étapes sont alors les suivantes :
- Préparer la partition
$ mke2fs -j /dev/sda3 $ mount /dev/sda3 /mnt
- Installer la système selon la méthode qui lui convient
# si vous avez une installation de référence dans une archive $ tar xfz base.tgz -C /mnt # si vous installez une debian (debootstrap peut s'installer sur une non debian) $ debootstrap lenny /mnt ftp://ftp.debian.org
Debootstrap est très pratique, il permet d'installer une debian dans un répertoire.
Si vous n'installez pas une debian ou si vous n'aimez pas debootstrap, il vous faut avoir préparé l'installation et disposer d'un base.tgz. Soit en trouvant une installation toute prête dans FreeOsZoo, ou chez Aurélien soit en installant vous-même la distribution dans une machine virtuelle.
- Configurer le nouveau système
$ mount -t proc proc /mnt/proc $ mount --bind /dev /mnt/dev $ chroot /mnt $ vi /etc/network/interfaces $ vi /etc/hostname $ vi /etc/fstab $ ... $ exit
- Configurer le bootloader
# grub $ vi /boot/grub/menu.lst # lilo $ vi /etc/lilo.conf $ lilo
- Rebooter
$ reboot
- Il vous reste à supprimer l'ancien système et donc éventuellement réinstaller le bootloader pour le gérer dans cette nouvelle distribution.
C'est propre et sans bavure. N'oubliez pas d'avoir un noyau installé et de garder en option un reboot vers l'ancienne version. Petite astuce pour un reboot unique, en cas de problème le prochain reboot se fera comme avant :
$ lilo -R newlinux
ou pour grub
$ echo "savedefault --default=2 --once" | grub --batch
Méthode 2
Vous n'avez pas de partition disponible, mais vous avez une partition de swap. Il vous faut alors éteindre suffisamment de services pour libérer de la mémoire puis désactiver la partition de swap :
$ swapoff -a
Il suffit ensuite de formater la swap en ext3 pour vous retrouver dans le cas de la méthode 1.
Si le swap vous semble trop petit, vous pouvez faire une installation très basique, puis recommencer avec la méthode 1.
Méthode 3
Aucune des méthodes précédentes ne fonctionne car vous êtes un pauvre malheureux.
Cette fois vous devrez vous armer d'un peu plus de patience car nous allons utiliser une ruse de sioux.
Nous allons mettre une distribution temporaire avec un serveur ssh dans un répertoire. Cette distribution peut être n'importe laquelle, elle sera supprimée par la suite. Debootstrap et freeoszoo sont toujours vos amis. En cas de place restreinte, je vous fais confiance pour trouver une distribution miniature. Les outils indispensables sont les commandes de base permettant d'installer une distribution, le réseau ainsi qu'un serveur ssh.
Initramfs
Si vous disposez d'un noyau 2.6, cette distrib de base nous servira d'initramfs :
$ cd /mnt/distrib $ find . | cpio -o -H newc | gzip -9 > /boot/newinit.gz
Attention, la taille totale décompressée plus la taille compressée ne doit pas dépasser la ram disponible. Pour booter sur cet initramf ils vous faut simplement le spécifier comme initrd à votre bootloader, pas d'autres options.
# grub initrd /boot/newinit.gz # lilo initrd=/boot/newinit.gz
Initrd
Si vous n'avez pas de noyau 2.6 à disposition vous pouvez aussi faire avec un initrd, mais il y a quelques subtilité supplémentaires et cela impose des restrictions de taille et d'outils. Je vous laisse donc découvrir tout seul mkinitrd.
Reboot
Vous pouvez maintenant rebooter. N'oubliez pas le conseil de la méthode 1 pour ne rebooter qu'une fois sur la nouvelle image.
Et voila, maintenant vous êtes sur une machine basique qui vous laisse un accès en ssh. Nous nous rapprochons de la situation 1.
Formatons l'ancienne distribution sans pour autant perdre notre capacité à booter.
$ mount /dev/hda1 /mnt # on va conserver, le bootloader, le noyau, et le ramfs $ chattr -R +i /mnt/boot/vmlinux-* /mnt/boot/grub/ /mnt/boot/newinit.gz $ rm -rf /mnt/*
A partir de maintenant vous ne pouvez plus reculer. Goto méthode 1, installez tout dans /mnt. Attention, le chattr peut vous causer quelques ennuis. Pour les éviter vous pouvez soit ne pas faire ce chattr (système non bootable pendant l'intervention, toute erreur est fatale) soit vous être préparé avant l'intervention. C'est-à-dire avoir précédemment placé tout le système de boot dans un autre répertoire :
$ cp -a /boot /boot-tmp # changer la configuration de lilo / grub pour prendre en compte le changement # relancer lilo / grub-install # oui, même pour grub pour qu'il aille chercher les stages au bon endroit
Une fois ces petits inconvénients gérés, l'installation continue selon la méthode 1 avec le chroot et la configuration.
Par contre, ne rebootez pas une fois l'installation finie, installez proprement votre ex nouveau bootloader our au cas où.
$ chattr -R -i /mnt/boot/vmlinux-blah /mnt/boot/grub/ /mnt/root/newinit.gz $ chroot /mnt # méthode d'installation choisie, lilo ou grub $ vi /etc/lilo.conf && lilo $ grub-install # et n'oubliez pas de garder la possibilité de booter sur le ramfs
Conclusion
On peut tout faire à distance, il suffit d'être prudent !
Et le partitionnement c'est bien (tm), lvm aurait pu nous être utile.
Comments