[Mini-tutoriel] Migrer un Linux (Debian) d'une Dedibox SC à l'autre en "cowboy"


#1

(Mise à jour du mini-tuto: https://forum.online.net/index.php?/topic/2688-mini-tutoriel-incomplet-et-non-garanti-pour-migrer-un-linux-dune-dedibox-sc-a-lautre/)

Introduction

Alors voila, vous avez reçu le fameux mail “Votre Server Dedibox SC gen2 arrive en fin de vie” …et devez migrer rapidement vers votre nouvelle Dedibox (sur le site flambant neuf DC5 en plus)!

Première solution: vous réinstallez tout, en prenant modèle sur l’ancien serveur.

Cependant, pour ceux qui ont passé un temps certain à configurer moult conneries (comme moi), et ne veulent pas tout se retaper, voici quelques idées. Merci de signaler les succès et les échecs, les bêtises et oublis qui vous auront donné du fil à retordre, etc. Le tout sans aucune garantie: si vous cassez tout, tant pis pour vous, c’est à vos risques et périls!

Des connaissances en administration système vous seront utiles pour mener à bien cette migration, c’est donc une opération à déconseiller aux débutants!

Principe

Le principe général est un bête rsync complet (c’est à dire y compris les modules du kernel, le /boot, etc.) qui va écraser le serveur de destination une fois ce dernier partitionné/installé “nu”, avec quelques précautions (sinon bizarrement cela ne fonctionnera pas).

Les précautions concernent certains changements liés au matériel:

  • adresse IPv4 et préfixe IPv6 qui vont changer
  • identifiants matériel de cartes réseaux (adresses mac, utilisés maintenant pour ordonner le nommage des eth*)
  • identifiants matériel des partitions (boot/grub)
  • éventuellement changement de filesystem (par ex. ext3 vs. ext4)

L’idée est aussi que vous ne modifierez rien sur la machine source ; vous aurez un downtime de quelques minutes selon votre célérité à fixer les dernières coquilles (et à propager les DNS), donc pas de cata possible normalement :wink: .

Installation rapide du nouveau serveur

Prendre une nouvelle machine (NB: que ce soit en gros le même matériel, mais cela peut fonctionner quand même), installer la même distribution qu’avant (ici, Debian 64-bit, 9.0 “stretch”), avec le même nom, le même mot de passe root, le même login utilisateur. Essayez au besoin d’avoir également le même layout de partitions, mais ce n’est pas obligatoire. Cette install “nu” sera la base d’atterrissage.

Arrêter à la main tous les services (sauf sshd/inetd).

Ah, c’est aussi le moment d’abaisser les TTL de vos DNS au besoin :wink:

Quelques backups

Normalement vous n’allez pas toucher aux data du serveur source, mais il est toujours bien d’avoir un backup de ce dernier B) .

Sur la machine destination que vous venez d’installer “nu”: quelques backups sont nécessaires (notamment pour ensuite remplacer certains fichiers rsync’és)

Par exemple:

cd /
cp -ax etc etc.orig
cp -ax boot boot.orig

Installer rsync: apt-get install rsync

Transfert lui même

Sur la machine source: effectuer premier transfert “brut”, machine en service (oui, on va rsync’er même les database en service à chaud comme un goret). A modifier au besoin si vous avez des répertoires additionnels (genre un /backups)

Par exemple:

cd /
rsync -av --delete \
        bin boot etc home initrd.img initrd.img.old \
        lib lib32 lib64 media mnt opt root sbin selinux srv \
        usr var vmlinuz vmlinuz.old \
        root@IP_MACHINE_DESTINATION:/

Il est conseillé de ne pas poliotter durant cette phase critique, car rsync va tout écraser, y compris son propre binaire, la libc, le kernel, etc. et une interruption brutale risquerait de laisser votre machine dans le même état cérébral qu’un supporter de l’HADOPI.

Effectuez cette opération une seconde fois, pour rattraper les deltas de ce qui est rattrapable à chaud.

On va ensuite effectuer quelques remplacements (IP, ids matériels)

Tout d’abord écrasez ces fichiers avec les fichiers initialement créés sur la machine nue (ie. copier depuis /etc.orig vers /etc)

/etc/fstab
/etc/udev/rules.d/70-persistent-net.rules

Par exemple:

cp -ax /etc.orig/fstab /etc/fstab
cp -ax /etc.orig/udev/rules.d/70-persistent-net.rules /etc/udev/rules.d/70-persistent-net.rules

Note: le dernier est important: vous risquez sinon de ne pas avoir de réseau.

Collectez les informations sur les deux machines:

  • IPv4/v6 et préfixes: /sbin/ifconfig

  • ids’s des partitions (“UUID”) donnés par: /sbin/blkid

  • adresses mac: /sbin/ip l

Vérifiez qu’il ne reste pas d’instances des IP/préfixe source dans /etc et d’UUID dans /boot, par exemple en effectuant des itérations:

Par exemple:

grep -r IP_MACHINE_SOURCE /etc/*
grep -r UUID_PARTITION /etc/* /boot/*
etc..

On peut utiliser un petit script,

Par exemple:

cd /etc
for i in \
        apache2/sites-enabled/mon-site \
        apache2/sites-available/mon-site \
        bind/named.conf \
        hosts \
	ipsec.conf \
        network/interfaces \
        blkid.tab \
        /boot/grub/menu.lst \
        /boot/grub/grub.cfg \
        ; do \
        sed -i \
        -e 's/IP_MACHINE_SOURCE/IP_MACHINE_DESTINATION/g' \
        -e 's/PREFIXE_IPV4_MACHINE_SOURCE/PREFIXE_IPV4_MACHINE_DESTINATION/g' \
        -e 's/IP6_MACHINE_SOURCE/IP6_MACHINE_DESTINATION/g' \
        -e 's/PREFIXE_IPV6_MACHINE_SOURCE/PREFIXE_IPV6_MACHINE_DESTINATION/g' \
        -e 's/UUID_1_SOURCE/UUID_1_DEST/g' \
        -e 's/UUID_2_SOURCE/UUID_2_DEST/g' \
        -e 's/MAC_ADDRESS_SOURCE/MAC_ADDRESS_DEST/g' \
        $i ; \
done

Une fois qu’on s’est convaincu que l’on a rien oublié, on peut réinstaller le boot:

grub-install --recheck /dev/sda

On arrête maintenant les services sur la machine source (c’est là qu’on va essayer de se dépêcher). On pourra effectuer le changement de DNS en cowboy dans cette phase, également (vous n’aurez pas oublié de changer les TTL quelques heures avant, hein ?)

Par exemple:

for i in sendmail opendkim spamassassin spamass-milter milter-greylist milter-smf-spf clamav-daemon clamav-freshclam clamav-milter inn2 mysql apache2 bind9 ntp ipsec snmpd ; do
/etc/init.d/$i stop
done

Vérifiez avec ps -ef qu’il ne traine plus aucun service et effectuer le rsync final (ATTENTION: ne pas écraser /etc et /boot)

rsync -av --delete \
        bin home lib lib32 lib64 media mnt \
        opt root sbin selinux srv usr var \
        root@IP_MACHINE_DESTINATION:/

Le finish

Vérifier une dernière fois que vous n’avez pas laissé trainer une IP/UUID en greppant (grep -r MON_IP /etc/* et ses amis)

Et enfin reboot, et croiser les doigts :stuck_out_tongue:

Si tout se passe bien, la machine pingue, vous pouvez vous y connecter, et vous corrigez les coquilles restantes à la main. La machine source peut éventuellement être arrêtée (et son / backupé en remote par sécurité).

N’oubliez pas les éventuels glu record, si votre machine gère votre nom de domaine, et que ce dernier a un glue!

En cas de soucis (ça pingue pas au bout de cinq minutes) :o

Effectuer un boot réseau live via la console, puis aller à la pèche :huh:

sudo mount -t ext4 /dev/sda2 /mnt
sudo mount -t ext4 /dev/sda1 /mnt/boot
cd /mnt
...

Pour réinstaller le boot:

sudo grub-install --recheck --root-directory=/mnt /dev/sda

et éventuellement pour ajouter/supprimer des choses

Par exemple:

sudo chroot /mnt
apt-get install pouic-pouic
/etc/init.d/bind9 start
etc..

Si des enp1s0: renamed from eth0 traînent dans /var/log/syslog, c’est que votre /etc/udev/rules.d/70-persistent-net.rules doit être buggé (le corriger, c’est probablement la mac qui est fausse, cf. ip l)

Conclusion

Remarques et suggestions bienvenues. J’ai migré avec succès ma dédibox encore une fois via cette méthode un peu cowboy, mais qui est au final moins lourdingue que de tout réinstaller.


#2

Bonjour,
Est-ce que ce tuto est encore d’actualité, ou y a t il une mise à jour ,
Merci bien
cordialement