AVERTISSEMENTFemme aux seins lourds

Ne tentez pas de faire ceci sur votre propre machine ou de reproduire les étapes décrites ci-dessous. Vous la détruirez À COUP SÛR. Vous avez été prévenu. Je décline toute responsabilité et ne fournirai aucune assistance technique d'aucune sorte à qui suivra les indications de ce billet pour faire des choses qu'il ne devrait pas faire et foutra sa machine en l'air, puisque c'est le résultat attendu ;-)

Si vous y allez quand même, c'est à vos risques et périls, et ça finira mal :-}

Les manips de ce billet ont été inspirées de ce mode d'emploi pour Debian. Merci à son auteur :-)

La documentation officielle déclare spécifiquement que ceci est impossible. C'est donc impossible.

Liste des packages à télécharger depuis http://packages.ubuntu.com avant de commencer :

root@totor:~/up3264/pkgs# ls -1R

./Step_1_libc6-i386:
libc6-i386_2.7-10ubuntu3_amd64.deb

./Step_2_libs32:
gcc-4.2-base_4.2.3-2ubuntu7_amd64.deb
ia32-libs_2.2ubuntu11_amd64.deb      
lib32asound2_1.0.15-3ubuntu4_amd64.deb
lib32gcc1_4.2.3-2ubuntu7_amd64.deb
lib32ncurses5_5.6+20071124-1ubuntu2_amd64.deb
lib32stdc++6_4.2.3-2ubuntu7_amd64.deb
lib32z1_1.2.3.3.dfsg-7ubuntu1_amd64.deb
lsb-release_3.2-4ubuntu1_all.deb

./Step_3_libc6:
libc6_2.7-10ubuntu3_amd64.deb

./Step_4_tools:
apt_0.7.9ubuntu17_amd64.deb
apt-listchanges_2.79ubuntu2_all.deb
apt-utils_0.7.9ubuntu17_amd64.deb
dpkg_1.14.16.6ubuntu3_amd64.deb
libdb4.6_4.6.21-6ubuntu1_amd64.deb
libgcc1_4.2.3-2ubuntu7_amd64.deb
libstdc++6_4.2.3-2ubuntu7_amd64.deb
python_2.5.2-0ubuntu1_all.deb
python2.5-minimal_2.5.2-2ubuntu4.1_amd64.deb
python-apt_0.7.4ubuntu7_amd64.deb
python-gdbm_2.5.2-0ubuntu2_amd64.deb
zlib1g_1.2.3.3.dfsg-7ubuntu1_amd64.deb
  • Booter la machine sur un live-CD d'installation Kubuntu Hardy AMD64.
  • Dans le gestionnaire de packages adept-manager, gestion des dépôts, activer universe et multiverse.
  • Installer les packages suivants :
aptitude install mdadm lvm2 cryptsetup ia32-libs
  • Créer un répertoire "/hd" à la racine, et y monter toute la structure de partitions du disque dur de la machine, telle qu'elle est en fonctionnement normal.
  • Monter /dev avec "mount --bind /dev /hd/dev"
  • Se chrooter dans cette structure : "chroot /hd"
  • Puis (les packages s'installent à partir des répertoires où ils auront été téléchargés sur le disque dur au préalable) :

Liste des commandes à exécuter dans le chroot dans l'ordre de leur exécution :

mount -t proc proc /proc
mount -t sysfs sysfs /sys
alias ll='ls -l'
  • apt-get ne saura plus résoudre : remplacer les noms de serveurs par leurs adresses IP dans /etc/apt/sources.list. Garder l'ancien en sauvegarde pour le remettre ensuite...
dpkg --force-architecture --force-overwrite --force-depends -i libc6-i386_2.7-10ubuntu3_amd64.deb                                                                         

find /lib*/ /usr/lib*/ -name "ld-linux.so*" -exec ls -l {} \;
ln -svf /lib32/ld-linux.so.2 /lib/ld-linux.so.2
find /lib*/ /usr/lib*/ -name "ld-linux.so*" -exec ls -l {} \;

dpkg --force-architecture -i ia32-libs_2.2ubuntu11_amd64.deb lib32asound2_1.0.15-3ubuntu4_amd64.deb lib32gcc1_4.2.3-2ubuntu7_amd64.deb lib32ncurses5_5.6+20071124-1ubuntu2_amd64.deb lib32stdc++6_4.2.3-2ubuntu7_amd64.deb lib32z1_1.2.3.3.dfsg-7ubuntu1_amd64.deb lsb-release_3.2-4ubuntu1_all.deb gcc-4.2-base_4.2.3-2ubuntu7_amd64.deb                                                                              

find /lib*/ /usr/lib*/ -name "ld-linux.so*" -exec ls -l {} \;
ln -svf /lib32/ld-linux.so.2 /lib/ld-linux.so.2
find /lib*/ /usr/lib*/ -name "ld-linux.so*" -exec ls -l {} \;

dpkg --force-architecture -i libc6_2.7-10ubuntu3_amd64.deb

find /lib*/ /usr/lib*/ -name "ld-linux.so*" -exec ls -l {} \;
ln -svf /lib32/ld-linux.so.2 /lib/ld-linux.so.2
find /lib*/ /usr/lib*/ -name "ld-linux.so*" -exec ls -l {} \;

dpkg --force-architecture -i apt_0.7.9ubuntu17_amd64.deb dpkg_1.14.16.6ubuntu3_amd64.deb apt-listchanges_2.79ubuntu2_all.deb apt-utils_0.7.9ubuntu17_amd64.deb            

dpkg -i --force-architecture libstdc++6_4.2.3-2ubuntu7_amd64.deb
dpkg -i --force-architecture libgcc1_4.2.3-2ubuntu7_amd64.deb   

dpkg -i --force-architecture python2.5-minimal_2.5.2-2ubuntu4.1_amd64.deb python_2.5.2-0ubuntu1_all.deb python-apt_0.7.4ubuntu7_amd64.deb                                 

dpkg -i --force-architecture zlib1g_1.2.3.3.dfsg-7ubuntu1_amd64.deb
dpkg -i --force-architecture libdb4.6_4.6.21-6ubuntu1_amd64.deb    
dpkg -i --force-architecture python-gdbm_2.5.2-0ubuntu2_amd64.deb libgdbm3_1.8.3-3_amd64.deb                                                                  

apt-get update

apt-get -f install
apt-get -f install
dpkg -i --force-overwrite /var/cache/apt/archives/perl-base_5.8.8-12_amd64.deb
apt-get -f install
apt-get -f install

aptitude install

echo exit 0 > /etc/init.d/dirmngr

apt-get -f install
aptitude install
aptitude install
apt-get -f install
aptitude upgrade

dpkg --get-selections > dpkg_get_selections.out

for package in $(grep '[^e]install' dpkg_get_selections.out | awk '{ print $1 }'); do dpkg -s $package | grep -q 'Architecture: i386' && echo $package; done > updates

for package in `cat updates`; do aptitude install $package; done

Fignoler à la main ce qui peut être nécessaire ; rebooter sur disque dur. La machine est maintenant en architecture AMD64. Contrôler et corriger ce qui peut être nécessaire.

root@totor:~# uname -a
Linux totor 2.6.24-21-generic #1 SMP Tue Oct 21 23:09:30 UTC 2008 x86_64 GNU/Linux

(Et en fait, pour faire encore plus tordu, j'ai fait la mise à jour depuis un portable booté sur le live-CD AMD64, sur un snapshot des partitions de ce brave Totor, montées par NFS via le réseau, comme ça il fonctionnait en IA32 alors même qu'il était en cours de migration vers AMD64. Oui, je sais...)


L'illustration de ce billet provient de cette page et apparaît pour la première fois ici dans ce billet.