Comment passer d'une installation 32 bits à une installation 64 bits?

54

J'ai une installation Ubuntu 32 bits fonctionnant sur du matériel 64 bits. Maintenant que le multi-arch a été implémenté , je voudrais passer au 64-bit sans avoir à réinstaller le système d'exploitation.

C'est l'une des histoires d'utilisateurs abordées par la spécification :

Shawn a installé son système en utilisant la version 32 bits d’Ubuntu, mais son matériel est en 64 bits et il souhaite basculer. Il installe manuellement les versions amd64 de dpkg et apt, en remplaçant les versions i386 et en modifiant l'architecture utilisée par défaut; puis il installe le paquet amd64 ubuntu-minimal; il installe ensuite le paquet amd64 ubuntu-desktop. Au fil du temps, les packages i386 restants sont automatiquement remplacés lors de la mise à niveau.

Cependant, lorsque j'essaie de suivre les instructions, je ne trouve aucune version 64 bits de dpkg ou d'apt.

Cette user story a-t-elle été implémentée de manière différente dans la spécification finale ou dois-je faire quelque chose de différent?

En bref, comment puis-je passer de mon installation 32 bits à 64 bits?

David Planella
la source
3
Je me rends bien compte que la question a déjà été posée sur askubuntu.com/questions/5018/… , mais c'était avant la mise en œuvre de multi-arch, la réponse devrait donc être différente.
David Planella

Réponses:

36

Une telle approche est très compliquée et il est peu probable que tous vos paquets soient la amd64version au lieu de la i386version. Seuls les packages qui reçoivent réellement des mises à niveau seront probablement modifiés dans l'architecture, et probablement que si aucun autre package non mis à niveau ne repose sur leur appartenance à l' i386architecture. Étant donné que certains paquets ne recevront aucune mise à jour tout au long du cycle de support de votre version d'Ubuntu, vous ne disposerez probablement jamais d'un amd64système complet utilisant une telle technique. En outre, il n’ya certainement aucun soutien officiel en faveur d’une telle approche.

Nous vous conseillons de remplacer votre système Ubuntu existant par une nouvelle installation 64 bits.

Toutefois, si vous souhaitez essayer cette technique, vous devrez télécharger manuellement les .debfichiers pour dpkget apt. Vous pouvez les trouver dans les pages dpkgUbuntu et aptUbuntu sur Launchpad - développez la dernière version sous "The Oneiric Ocelot" qui est marquée comme étant une version, une sécurité et / ou des mises à jour (mais vous ne voulez probablement pas une version marquée uniquement). proposés et / ou backports, s’il en existe un). Ensuite, téléchargez les .debfichiers marqués amd64. Spécifiquement, les fichiers que vous voulez sont: celui-ci pourdpkg (et les autres listés, aussi, si vous avez ces paquets installés) et ceci et ceci et ceci et celaet ceci pour apt.

Avant de faire quoi que ce soit avec ces fichiers, vous devez vous assurer de sauvegarder tous les documents importants de votre système Ubuntu installé et tout autre fichier important (par exemple, de la musique, des livres électroniques, des vidéos), car il est plutôt probable que cette technique se retournera contre vous. et laissez votre système Ubuntu complètement inutilisable.

Vous pouvez installer tous ces packages en les plaçant dans un dossier ne contenant rien d'autre (supposez que le dossier est appelé debset se trouve dans votre Downloadsrépertoire), puis en exécutant cette commande:

sudo dpkg -Ri ~/Downloads/debs

Bien sûr, une fois que vous les aurez installés, ils ne fonctionneront pas car leurs exécutables sont 64 bits et votre système Ubuntu 32 bits exécute un noyau 32 bits (qui n'exécutera que des exécutables 32 bits). En fait, ils pourraient même ne pas terminer l'installation, car ils pourraient avoir des scripts de post-installation qui invoquent leurs exécutables inimaginables de 64 bits.

Il existe différentes façons d’installer un noyau 64 bits sur un système 32 bits, mais elles sont toutes extrêmement complexes. Je vous recommande donc de démarrer à partir d’un Live CD Oneiric 64 bits (qui exécute lui-même un disque 64 bits). noyau), chroot dans le système Ubuntu installé et utiliser la version 64 bits récemment installé aptet dpkginstaller un noyau 64 bits.

Voici des instructions spécifiques pour le faire ... mais s'il vous plaît ne prenez pas cela pour dire que je dis que cela fonctionnera. Je n'ai pas essayé cela. (J'ai chrooté dans les systèmes Ubuntu installés à partir de CD live et effectué la gestion des paquets et d'autres opérations, mais je n'ai pas tenté les opérations inter-architectures suggérées ici.)

  1. Dans votre système Ubuntu installé, ouvrez une fenêtre de terminal ( Ctrl+ Alt+ T) et exécutez-la mount | grep ' on / '(en la collant dans le terminal et en appuyant sur Entrée). Vous devriez voir quelque chose comme /dev/sda2 on / type ext4 (rw,errors=remount-ro,commit=0). La partie qui vous intéresse est le nom de l’appareil avant on(dans cet exemple, c’est /dev/sda2). Rappelez-vous-le ou écrivez-le.

  2. L'étape 1 vous a donné le nom de périphérique de la /partition. Si vous avez une /bootpartition séparée , vous devez également connaître le nom du périphérique correspondant. Donc dans ce cas, courez mount | grep ' on /boot '. Vous verrez quelque chose comme /dev/sda1 on /boot type ext2 (rw). Rappelez-vous ou écrivez cela aussi.

  3. Démarrez à partir d’un live CD Oneiric amd64 (c’est-à-dire 64 bits) et sélectionnez "Essayer Ubuntu" plutôt que "Installer Ubuntu".

  4. Allez dans un navigateur Web et assurez-vous que la connectivité Internet est entièrement fonctionnelle. Si ce n'est pas le cas, installez-le.

  5. Ouvrez une fenêtre de terminal et lancez-la sudo mount /dev/sda2 /mnt(remplacez-le /dev/sda2par le nom de périphérique obtenu à l'étape 1, s'il est différent).

  6. Si votre système installé possède une /bootpartition distincte , exécutez-le sudo mount /dev/sda1 /mnt/boot(remplacez-le /dev/sda1par le nom de périphérique indiqué à l'étape 2, s'il est différent).

  7. Maintenant, exécutez ces commandes pour chroot dans votre système installé:

    sudo mount --bind /dev /mnt/dev  
    sudo chroot /mnt  
    mount -t proc none /proc  
    mount -t sysfs none /sys  
    mount -t devpts none /dev/pts  
    
  8. Exécuter ping -c 4 launchpad.netpour voir si la connectivité Internet fonctionne pleinement depuis le chroot. Vous espérez quelque chose comme ça:

    PING launchpad.net (91.189.89.223) 56(84) bytes of data.
    64 bytes from launchpad-net.banana.canonical.com (91.189.89.223): icmp_req=1 ttl=41 time=141 ms
    64 bytes from launchpad-net.banana.canonical.com (91.189.89.223): icmp_req=2 ttl=41 time=143 ms
    64 bytes from launchpad-net.banana.canonical.com (91.189.89.223): icmp_req=3 ttl=41 time=142 ms
    64 bytes from launchpad-net.banana.canonical.com (91.189.89.223): icmp_req=4 ttl=41 time=140 ms
    
    --- launchpad.net ping statistics ---
    4 packets transmitted, 4 received, 0% packet loss, time 3003ms
    
  9. Si, au contraire, vous ne pouviez pas transmettre ou recevoir de paquets, vous devrez configurer la connectivité Internet dans le chroot. Pour ce faire, exécutez ces commandes (pour quitter le chroot, copiez les fichiers de configuration appropriés du système de CD live dans le chroot, puis entrez-le de nouveau):

    sudo cp /mnt/etc/resolv.conf /mnt/etc/resolv.conf.old  
    sudo cp /mnt/etc/hosts /mnt/etc/hosts.old  
    sudo cp /etc/resolv.conf /mnt/etc/resolv.conf  
    sudo cp /etc/hosts /mnt/etc/hosts
    

    Bien qu'en règle générale, vous devriez arrêter ce processus en cas d'erreur, ne vous inquiétez pas si la première et / ou la deuxième de ces quatre commandes échouent, à condition que la façon spécifique dont cela échoue consiste à vous dire que /mnt/etc/resolv.conf(ou /mnt/etc/hosts) n'existe pas. .

    Retournez dans le chroot et essayez à nouveau:

    sudo chroot /mnt  
    ping -c 4 launchpad.net  
    
  10. Exécutez ces commandes pour rendre votre environnement chrooté entièrement prêt à être utilisé:

    export HOME=/root  
    export LC_ALL=C  
    
  11. Si vous n'avez pas installé les .debfichiers pour les versions 64 bits de dpkget apt, faites-le maintenant. Si vous les avez installées mais que des erreurs de configuration se sont produites, exécutez-les dpkg --configure -apour les réparer. (J'espère que cela fonctionnera ... il vaudra peut-être mieux attendre d'essayer de les installer jusqu'à ce que vous soyez dans l'environnement du CD live, au cas où l'installation du 64 bits au dpkgdémarrage du système installé resterait dpkgdans un état inutilisable.)

  12. Avec les versions 64 bits de dpkget aptinstallées, en supposant qu'elles installent automatiquement les packages 64 bits, vous pouvez maintenant supprimer tous vos noyaux 32 bits et installer un noyau 64 bits. Pour supprimer vos noyaux 32 bits, exécutez dpkg -l | grep linux-. Ceci répertorie les paquets installés qui commencent par linux-. Vous êtes plus particulièrement intéressé dans des emballages qui commencent comme linux-generic, linux-image, linux-serveret / ou linux-headers. Supprimez ces fichiers avec apt-get purge ......est remplacé par une liste de paquets que vous supprimez, séparés par un espace.

  13. Maintenant, réinstallez les paquets que vous avez supprimés. (En fait, pour les packages contenant des numéros de version dans le nom du package, par exemple linux-image-3.0.0-13-generic, il vous suffit d'installer les derniers noms de packages versionnés.) Pour ce faire, exécutez apt-get install ......est remplacé par une liste des packages que vous installez séparés par un espace. .

  14. Mettez à jour la configuration du chargeur de démarrage, démontez certains périphériques et laissez le chroot:

    update-grub  
    umount /proc || umount -lf /proc  
    umount /sys  
    umount /dev/pts  
    exit  
    sudo umount mnt/dev  
    
  15. Si vous avez couru sudo cp /mnt/etc/resolv.conf /mnt/etc/resolv.conf.oldet que cela n'a pas échoué, exécutez maintenant sudo cp /mnt/etc/resolv.conf.old /mnt/etc/resolv.conf.

  16. Si vous avez couru sudo cp /mnt/etc/hosts /mnt/etc/hosts.oldet que cela n'a pas échoué, exécutez maintenant sudo cp /mnt/etc/hosts.old /mnt/etc/hosts.

  17. Si votre système installé possède une /bootpartition séparée , démontez-le:sudo umount /mnt/boot

  18. Démontez la /partition de votre système installé :sudo umount /mnt

  19. Quittez la fenêtre du terminal (exécutez exit), puis redémarrez (ou éteignez) le système de CD live et démarrez le système installé.

  20. Voyez si le système est utilisable et exécute un noyau 64 bits ( uname -mdevrait dire l'architecture est x86_64).

Pour que cela fonctionne, il se peut que vous deviez installer des packages supplémentaires, tels que ia32_libset / ou la version 64 bits de libc6celle-ci. Pour certains d'entre eux, vous pouvez être informé que vous en avez besoin lorsque vous essayez d'installer la version 64 bits de dpkget / ou apt. Pour d'autres, vous pourriez ne pas être informé.

(Les instructions ci - dessus pour chroot et opérant dans l'environnement chroot reposent en grande partie sur cette procédure connexe mais différente et aussi sur certains Launchpad Réponses messages de moi, en particulier # 6 ici et # 6 ici . Et merci à Césium pour souligner 64 bits dpkget les aptexécutables ne fonctionneront pas sur un système exécutant un noyau 32 bits.)

Eliah Kagan
la source
2
Ces binaires fonctionneront-ils sous un noyau 32 bits, Eliah?
Cesium
@ Caesium Bon appel. Bien sûr que non. Je modifierais mon message pour indiquer comment faire fonctionner le noyau 64 bits ... sauf que je ne sais pas comment installer un package de noyau 64 bits sur un système Ubuntu 32 bits (fonctionnant sur du matériel 64 bits, bien sûr) quand aptet dpkgsont toujours en 32 bits et refuseront (vraisemblablement) d’installer un paquet de noyau 64 bits. (Construire le noyau à partir des sources et utiliser la compilation croisée fonctionnerait, mais c'est très compliqué et je ne veux pas le recommander. Je suis sûr qu'il existe un moyen plus simple et meilleur. Si vous le savez, n'hésitez pas pour modifier mon ou votre post ou un commentaire à ce sujet.)
Eliah Kagan
@ Caesium En fait, je pense savoir comment installer le noyau 64 bits. Je vais éditer mon message sous peu pour refléter cela. Une fois que c'est fait, si vous pensez que la technique proposée fonctionnerait, n'hésitez pas à la copier et / ou la paraphraser dans votre réponse ... ou bien, à condition que les informations de votre réponse ne soient pas dans la mienne et celles de votre correspondant. dans ma réponse, ce n’est pas dans la vôtre, vous pouvez combiner nos réponses en une seule réponse. (Cela pourrait être votre réponse - ça me convient. Vous avez déjà posté un peu avant moi. Ensuite, je supprimerais ma réponse.)
Eliah Kagan Le
@Caesium Edits terminés; J'attends tes commentaires avec impatience.
Eliah Kagan
Wow, bon travail :) À ce stade, vous avez mis beaucoup plus d'efforts à faire que moi, alors je ne rêverais pas de copier dans ma réponse, la vôtre devrait rester pour le crédit. Cela déroge vraiment à l'objectif initial d'utilisation de la technologie multiarch, mais je serais intéressé de savoir si cela fonctionne quand même :) Je suppose que nous devrons attendre l'affiche originale :)
Cesium
25

Comme indiqué ci-dessus, j'ai fait:

echo foreign-architecture amd64 | sudo tee /etc/dpkg/dpkg.cfg.d/multiarch
sudo apt-get update
sudo apt-get install linux-image:amd64
sudo apt-get install gcc-multilib
sudo update-grub

Ça a marché. Je suis en mesure d'exécuter mon environnement utilisateur 32 bits avec un noyau 64 bits sous Ubuntu 12.04.

VJ-
la source
5
Cette réponse est géniale. Je peux confirmer que ça marche toujours avec chou. La seule différence est que la procédure d'ajout d'une architecture a changé: utilisez sudo dpkg --add-architecture amd64plutôt. Il va crier à vous si vous le faites dans l'autre sens. J'avais besoin de faire cela pour pouvoir chrooter dans une installation 64 bits à partir d'une (précédemment) 32 bits et cela a fonctionné exactement comme prévu, sans aucun accroc.
Wug
J'ai essayé cela à la menthe, mais j'ai des problèmes, avez-vous fait autre chose? Détails: superuser.com/q/927830/150718
dr Hannibal Lecter
En plus du changement de Wug, vous devez également utiliser linux-image-generic:amd64Ubuntu 16.04. Cela a bien fonctionné, même sans les deux dernières commandes.
Qznc
6

Bien que la question soit similaire à Est-il possible de "passer" d'une installation 32 bits à une installation 64 bits? (Si vous ne l'avez pas lu avant, je vous encourage à l'essayer. La réponse est bonne.) Je vous recommande également de lire les liens suivants:

Pour de meilleures performances, dois-je installer 32 bits ou 64 bits?

Comment passer d'une installation 32 bits à une installation 64 bits?

Quelles sont les différences entre 32 bits et 64 bits et que dois-je choisir?

Est-ce possible: oui

Est-ce facile: NON!

Si votre problème concerne la mémoire, sachez qu'Ubuntu 32 Bit peut lire plus de 4 Go de RAM (jusqu'à 64 Go). Donc, utiliser la dernière version 32 bits d'Ubuntu avec un ordinateur doté d'une architecture 32 bits ou 64 bits ne nécessitera pas davantage de mémoire vive. Il va simplement lire la RAM supplémentaire et travailler.

Luis Alvarado
la source
5

Ces réponses sont un peu dépassées. Le classement croisé est maintenant documenté pour Debian sur le wiki Debian , mais il n’est toujours pas recommandé.

L'installation d'un noyau d'une architecture différente est maintenant aussi simple que décrit ici, mais le nouvel 'apt' ne reconnaîtra pas les paquets d'une architecture précédente, de sorte que tous les serveurs frontaux peuvent signaler de nombreux paquets cassés. Cela nécessite soit de changer toutes les dépendances de l'autre architecture, soit de rétablir apt et dpkg en 32 bits.

La meilleure approche peut donc être tout d’abord de sauvegarder les résultats de dpkg --get-selections, d’extraire: i386 de cela et de télécharger un paquet amd64 pour chacune des dépendances dans le cache:

apt-get --download-only install perl:amd64 python3:amd64 python3-gi:amd64 xorg:amd64...

Au mieux, la résolution des dépendances risque d'être lente et longue.

Cedric Knight
la source
5

Ces instructions permettent à votre système de démarrer avec un noyau 64 bits, mais ne modifient pas la plupart des programmes utilisateur.

Après avoir mis à niveau mon système avec un processeur 64 bits, je souhaitais également installer un noyau 64 bits sur mon Ubuntu 14.04.2 32 bits (nom de code: Trusty). Pour ce faire, j'ai entré les commandes suivantes en tant qu'utilisateur root :

dpkg --add-architecture amd64   
apt-get update
apt-get install linux-generic-lts-utopic:amd64

Remarques:

  1. Cela pourrait supprimer votre noyau 32 bits car trusty - par défaut - est livré avec un noyau mis à jour (le noyau de utopic), voir 14.04 Notes de publication . Dans ce cas, votre noyau actuel entre en conflit avec le noyau 64 bits à installer et est donc supprimé. Si vous n'aimez pas cette idée, essayez plutôt l'ancien paquet du noyau 64 bits "linux-generic-lts-trusty: amd64".

  2. La commande "--add-architecure" est essentielle. Sans cela, le système de packages ne prend pas en charge les packages de différentes architectures, voir Multiarch-HowTo

  3. Pour voir ce que apt-getfera votre système, lancez-le avec les options -Vsqui activent le "mode de simulation détaillé". Cela imprimera tous les paquets à installer et à supprimer.

  4. Que votre système démarre avec le nouveau noyau dépend de la grubconfiguration. En tant qu'utilisateur root , exécutez-le update-grubpour mettre à jour grub et imprimer la configuration de démarrage actuelle. La première image de la liste sera démarrée par défaut.

  5. Pour sélectionner une image de noyau différent, j'ai enlevé la ligne GRUB_HIDDEN_TIMEOUT=0de /etc/default/grubet RAN comme utilisateur root update-grub . Au démarrage, vous pouvez maintenant sélectionner un autre noyau (vous avez 10 secondes pour appuyer sur n’importe quelle touche, sinon grub continuera avec le noyau par défaut).

  6. La réponse avec le plus grand nombre de votes est de 2011 et est désespérément obsolète à mon avis. Multiarch vous permet d'installer des paquetages de bibliothèques de plusieurs architectures sur le même ordinateur sans plus tarder.

Daniel K.
la source
C'est un bon conseil simple qui a presque fonctionné pour moi le 14.10 (utopique) (mais ce que j'ai fait, apt-get install linux-generic:amd64ce qui ne doit pas être très important pour l'expérience)! Si je passe par l'option de démarrage "rescue", le système s'exécute, mais X n'utilise pas nouveaude pilote vidéo. Si je démarre normalement, le démarrage est interrompu à un moment donné et le système redémarre. (Mais la toute première fois, j’ai pu démarrer avec succès.) Je ne sais pas si le problème vient du pilote vidéo lors du démarrage "normal" ou autre chose.
imz - Ivan Zakharyaschev
Le pilote vidéo et X se sont avérés non liés (statistiquement) à mes plantages / redémarrages avec le noyau amd64. Pour le moment, c'est juste un mystère - bugs.launchpad.net/ubuntu/+source/upstart/+bug/1495116 .
imz - Ivan Zakharyaschev
2

Comme je suis confronté au même problème, cela fonctionnera peut-être, c’est ce que je comptais faire:

Procurez-vous une version 64 bits du système d'exploitation, installez-la dans une partition. Une fois l'opération terminée, copiez les documents et autres éléments de l'installation 32 bits. Lorsque tout est copié en toute sécurité, vous pouvez formater le reste du lecteur et l'utiliser.

Ubuntufan
la source
2

Oui, la ligne d’architecture étrangère est incontestablement essentielle pour l’INSTALLATION DE TOUT paquetage multi-arch. Mais après cela, faites comme plusieurs autres utilisateurs ont mentionné:

sudo apt-get update
sudo apt-get install linux-image:amd64
sudo apt-get install linux-modules:amd64
sudo init 6 #reboot into new kernel
sudo apt-get install apt:amd64
sudo apt-get install ubuntu-desktop:amd64

Cela devrait presque le faire ...

realkstrawn93
la source
l'avez-vous essayé? cela ne fonctionne pas vraiment, j'ai des problèmes une fois qu'il commence à remplacer dpkg et perl par leurs homologues amd64
Janus Troelsen
2

Ma recette pour Ubuntu 16.04 Xenial, testée sur une machine virtuelle Ubuntu 32 bits fraîchement installée avec système standard et serveur SSH mais sans interface graphique:

sudo -s
dpkg --get-selections > pkg1
dpkg --add-architecture amd64
apt update
apt install linux-image-generic:amd64 thermald 

(sinon, il installerait thermald: amd64 et ne le redémarrerait pas avec un noyau 32 bits)

reboot

après le redémarrage avec le noyau 64 bits:

sudo -s
unset LANG
apt install apt:amd64 apt-utils:amd64

tapez 'Oui, faites ce que je dis!' quand on lui demande, ça va être en sécurité

mkdir /tmp/upgrade 
cd /tmp/upgrade
pkgs() { dpkg -l | awk '$4=="'$1'"{print $2}' | awk -F: '{print $1}' | sort -u
}
apt download $(comm -23 <(pkgs i386) <(pkgs amd64))
while ls *amd64*deb
do dpkg -i *amd64*deb
   dpkg -l | awk '$1=="ii" && $4=="amd64" {print $2}' | awk -F: '{print $1}' |
   while read a
   do [ -f ${a}_*amd64*deb ] && rm ${a}_*amd64*deb
   done
done

dans la boucle ci-dessus, nous supprimons les fichiers .deb qui ont été installés avec succès et obtenons le statut 'ii' dans la liste dpkg.

nous devons répéter les dpkg -iessais, car cela ne réussit pas dès le premier essai

reboot

à présent, avec le noyau 64 bits et l’espace utilisateur, les derniers paquets i386 peuvent être supprimés:

dpkg --purge $(dpkg -l | awk '$4=="i386"{print $2}')

la liste que vous avez sauvegardée dans un pkgs1fichier peut être utilisée pour vos besoins ultérieurs.

Wladimir Mutel
la source
C'est un peu magique, mais cela m'a aidé à effectuer une transition de 32 à 64 bits via SSH sur un PC distant.
user271872
1

Bonne question. J'ai eu une chasse autour et en dehors de la user story que vous citez, je ne trouve aucun détail sur la façon de procéder Toute la documentation indique que c'est uniquement pour l'exécution d'applications 32 bits sur un système d'exploitation déjà 64 bits.

Cependant, si vous êtes prêt à expérimenter, vous pouvez essayer ce qui suit (dérivé de mon lien à [1])

 echo foreign-architecture amd64 | sudo tee /etc/dpkg/dpkg.cfg.d/multiarch
 sudo apt-get install linux-image:amd64

Je pense que vous devrez commencer avec un noyau amd64, car celui-ci 32 bits ne sera pas capable d’exécuter des fichiers binaires 64 bits. Cependant, celui 64 bits devrait exécuter des fichiers binaires 32 bits (si ia32-libs est installé?).

Si vous avez le noyau 64 bits installé et démarré, vous pouvez ensuite installer apt: amd64, puis suivez la user-story citée précédemment, ubuntu-minimal, ubuntu-desktop, etc.

Après qu'apt: amd64 soit installé, je pense que vous pouvez supprimer la ligne d’architecture étrangère puisque vous avez essentiellement basculé à ce stade.

Disclaimer: Je n'ai pas de système 32 bits à tester, donc ce ne sont que des conjectures. Bonne chance!

[1] https://wiki.ubuntu.com/OneiricOcelot/TechnicalOverview/Beta1#Improved_handling_of_32-bit_compatibility_on_amd64_systems

Césium
la source
1

La mise à niveau (mise à niveau vers une architecture différente) n'est pas encore prise en charge.

tordue
la source