Comment convertir un système Debian 32 bits (x86) en 64 bits


36

J'ai un système 32 bits qui fonctionne sur un processeur 64 bits. Comment puis-je le convertir entièrement en 64 bits sans avoir à le réinstaller? J'ai vu quelque part que c'est faisable grâce au nouveau cadre Multiarch .


5
Je suis intéressé par les réponses à cette question. J'ai un système 32 bits sur une machine compatible 64 bits (qui a maintenant plus de 6 ans, mais continue pour le moment). La seule raison pour laquelle j'ai utilisé la version 32 bits lors de l'installation initiale de cette machine en 2007 était parce que je voulais y exécuter des applications 32 bits. Avec la nouvelle multiarch, si je comprends bien, les applications 32 bits peuvent facilement être installées sur une machine 64 bits. Donc, ce serait bien de convertir en 64 bits pour Wheezy, mais je ne sais pas à quel point ce serait difficile. La suggestion de @ bahamat d'utiliser une machine virtuelle sonne bien. Si je réussis une conversion, je vais répondre ici.
Faheem Mitha


Question similaire sur AU: askubuntu.com/q/5018/178596
Wilf

Réponses:


8

TL; DR: C'est faisable, mais compliqué. J'ai esquissé une alternative au bas.

Maintenant la description longue , et prenez-la avec un grain de sel, car je n’ai peut-être pas choisi la meilleure voie:

C'est possible, et voici ce que j'ai fait ces deux dernières nuits: il y a une entrée wiki décrivant la manière de la vieille école sans support multiarch. C'est utile pour réparer les paquets cassés.

Pour migrer votre système de base, procédez comme suit :

$ dpkg --print-architecture
i386
# dpkg --add-architecture amd64
$ dpkg --print-foreign-architectures
amd64
# apt-get update
# apt-get download gcc-4.6-base:amd64 libgcc1:amd64 libc6:amd64 \
          libselinux1:amd64 zlib1g:amd64 libbz2-1.0:amd64 dpkg:amd64
# dpkg -i gcc-4.6-base*.deb libgcc*.deb libc*.deb libselinux*.deb \
          libbz2*.deb zlib*.deb dpkg*.deb
$ dpkg --print-architecture
amd64
$ dpkg --print-foreign-architectures
i386

Certains de vos paquets sont alors amd64, mais la plupart resteront i386. apt-get upgrades'occupera de certains paquets, apt-get -f installréparera certaines des erreurs, mais la plupart des paquets resteront i386. Si vous voulez faire face à cela, passez la partie la plus délicate;)

Utiliser dpkg --get-selections | grep :i386retournera tous vos paquets, que vous devrez toujours migrer.

Ma prochaine idée était de faire:

# apt-get install `dpkg --get-selections \
  | grep i386 \
  | awk {'gsub(/:i386/, ":amd64"); print $1'}`

Mais cela s'est avéré être une mauvaise idée: certains paquets ne sont pas disponibles dans amd64 (par exemple, libc6-i686), apt-get sera confus et de nombreux paquets seront installés dans les deux versions. Beaucoup de travail manuel dans l'aptitude doit être fait.

Plus de difficultés: certains paquets essentiels peuvent être remplacés, de sorte que les fichiers binaires seront toujours installés pour l'installation, mais certains paquets devront être supprimés et réinstallés, par exemple, j'ai eu ce problème avec tar. J'ai wgot les paquets sur un autre système, extrait les paquets via ar p package.deb data.tar.gz | tar zxet ensuite scpédité les fichiers extraits via scp -r ./* root@other_computer:/, de sorte que les fichiers binaires sont à nouveau disponibles. Rincez et répétez, et les scpfichiers ed seront écrasés.

Ce que je ferais à la place

J'ai effectué les opérations suivantes chaque fois que j'ai changé de système:

Sauvegardez /home, /etc(et peut - être /var, /usr/localcertains autres fichiers que vous avez changé, /root..., YMMV).

Obtenez une liste des packages installés avec dpkg --get-selections > packagelistet copiez également le fichier résultant packagelist.

Faites ensuite une réinstallation propre de Debian, créez à nouveau tous les utilisateurs, peut-être des rôles, etc.

Réinstallez tous les paquets avec dpkg --set-selections < packagelist; apt-get -f install.

Copiez en arrière les répertoires sauvegardés, les fichiers, et vous avez presque terminé.

Un inconvénient de cette approche: tous vos paquets, y compris les bibliothèques, seront marqués comme installés manuellement, de sorte qu'ils ne seront pas désinstallés, alors qu'aucun paquet ne dépend d'eux plus.


1
"Ce que je ferais à la place" ... mec, j'étais sûr que OP a demandé sans réinstaller: /
Braiam

@Braiam L'OP souhaitait probablement le faire sans réinstallation. Je rapportais simplement mon expérience personnelle en ce sens. La voie alternative est plus simple pour moi et peut-être ai-je commis des erreurs lors de la conversion du système.
Résiduum

6
Pour marquer les packages installés automatiquement, vous auriez peut-être utilisé apt-mark showautopour exporter la liste automatiquement installée et apt-mark autopour les marquer dans la nouvelle installation.
Adrien Clerc

Merci d'avoir écrit votre expérience. "Si vous voulez faire face à cela, alors sautez la partie la plus délicate;)" Et si mon objectif est simplement de pouvoir développer des logiciels x86_64, et que mon paquet système n'utilise pas le processeur 64 bits de manière optimale ? J'utilise également un système d'exploitation 32 bits. Je suppose que je pensais que mon processeur était en 32 bits lors de ma première installation :(
jberryman

7

Les autres réponses ici montrent que, bien que cela soit théoriquement possible, cela reste très complexe et ne vaut probablement pas la peine. Vous pouvez toutefois effectuer une installation propre et rendre le processus relativement simple si vous restez $HOMEle même.

Le processus général sera

  1. Faites une sauvegarde de votre liste de packages installés et de la liste des packages installés automatiquement.

    dpkg --get-selections '*' > package.list
    apt-mark showauto >auto.list
    

    Notez que vous pouvez également vouloir supprimer l’architecture de tout nom de paquet que vous avez installé avec multiarch :

    dpkg --get-selections '*' | sed -e 's/:\(i386\|amd64\)//' > package.list
    
  2. Si votre /homepartition est une partition distincte, veillez simplement à ne pas la formater pendant le processus d'installation. S'il ne se trouve pas sur une partition séparée, effectuez une sauvegarde que vous pourrez restaurer ultérieurement:

    tar cvzf home_backup.tgz $HOME/
    
  3. Une fois que vous avez installé votre nouveau système, installez les packages manquants

    sudo dpkg --set-selections < package.list 
    sudo apt-get update
    sudo apt-get dist-upgrade
    sudo apt-mark auto $(cat auto.list)
    
  4. Restaurez votre $ HOME. Copiez le fichier tgz et extrayez-le dans votre répertoire $ HOME:

    tar xvzf home_backup.tgz
    

Vous voudrez peut-être également consulter les outils fournis par Mint pour faciliter cette tâche. Ils devraient tous être installables sur Ubuntu également.


4

C'est théoriquement possible, mais probablement perfide. Debian multiarch at current supporte les bibliothèques multiarch, mais pas les fichiers binaires. Donc, il y a ça.

Le système comprend principalement sa propre architecture dpkg-architecture(qui est en fait un script Perl, mais il extrait et affiche les informations sur la voûte), qui prétend également pouvoir définir l’architecture.


AVERTISSEMENT: JE N'AI FAIT PAS CELA NI MÊME TENTATIF !!!


Le processus approximatif serait:

  1. Installez la variante multiarch de toutes vos bibliothèques (le plus important libgcc1)
  2. Utilisez dpkg-architecture -aamd64pour décaler votre arcade (remarque, il peut se plaindre de GCC)
  3. Téléchargez et mettez en scène tous les composants requis (voir ci-dessous)
  4. Forcer l'installation de la variante amd64 dpkget de ses dépendances
  5. Forcer l’installation de variantes amd64 des paquetages essentiels du système de base, y compris apt-getet du noyau (remarque, cela peut se plaindre BEAUCOUP)
  6. Redémarrage
  7. Installez probablement le reste du système avec apt-get

Ces étapes sont basées sur ce que je sais de la conception de Debian l'ayant utilisé presque exclusivement parmi les distributions Linux au cours des 12 dernières années (y compris les utilisations debtakeoverprécédentes) et de l'approche que je prendrais. Considérez ceci à vos risques et périls . Votre système peut devenir inutilisable tout moment après avoir essayé de l' étape 4. Autre pour les étapes 4 et 5 pourraient être debbootstrap.

Plus important encore, je suggère fortement d'essayer cela sur une machine virtuelle avant de le faire pour tout ce qui compte pour vous.

Bonne chance et que la force soit avec vous .


3

Pas une réponse à la question, mais il peut être difficile de mettre à jour tous les paquets de x86 à amd64, mais vous pouvez au moins facilement installer le paquet de noyau amd64, ce qui vous permettra au moins d’exécuter des applications 64 bits, des machines virtuelles et des conteneurs ( qui peut être suffisant pour ce dont vous avez besoin).

Installez simplement le paquet amd64 linux-image avec dpkg -i --force-architecture.


1
--force-architecturen'est pas nécessaire, et le noyau amd64 peut être installé via apt sur i386.
Jordanie

3

Il existe pas mal de manuels, mais ils ne montrent pratiquement pas à quoi s'attendre. J'écris ceci sur un ordinateur portable Debian Wheezy que je viens de terminer de mettre à niveau de 32 bits à 64 bits et cela fonctionne.

J'ai suivi ces instructions et elles étaient vraiment précises sur ce à quoi vous allez réellement faire face:

http://blog.zugschlus.de/archives/972-How-to-amd64-an-i386-Debian-installation-with-multiarch.html

Il est recommandé de maintenir le système sous tension tout au long du processus. Ne redémarrez pas sauf si vous êtes sûr d'avoir tout migré et que tout ce qui a été supprimé a été réinstallé (notamment les packages essentiels), sinon vous ne pourrez pas redémarrer le système.


1
Intéressant à lire ce qui est réellement impliqué, mais après avoir lu ceci, je pense que je suis mieux avec une réinstallation. Merci.
Faheem Mitha Le

Ce lien ne fonctionne pas pour moi - la ressource a-t-elle été déplacée?
Toby Speight

Oh oui, tu as vu la date? J'ai écrit qu'en 2013, les choses disparaissent souvent sur le Web en six ans. Malheureusement, le Web n'a toujours pas de fonction très basique: Afficher les liens brisés avant de cliquer sur un lien.
nigratruo

1

Suivant l’idée d’utiliser awk , j’ai utilisé:

dpkg --get-selections \               # get the list
 | grep -v deinstall \                # throw away deselected packages
 | grep ':i386' \                     # get the i386 arch packages
 | sed 's/install//g' \               # drop 'install' to get list
 | sed 's/:i386/:amd64/g' \           # replace i386 with amd64
 | while read package; do \           # iterate over the result
      apt-get -yf install $package; \ # install each one and fix dependencies
   done

J'ai dû l'exécuter plusieurs fois. dpkg --get-selectionsest simplement une liste alphabétique, donc les paquets en haut qui nécessitent des paquets en bas seront ignorés. Si vous voulez voir combien d’installations sont en cours, faites-le dpkg --get-selections | grep amd64 | wc -là l’intérieur de la whileboucle.


-1

J'ai peu d'expérience dans ce domaine, mais je pense que vous avez raison de dire qu'une conversion de 32 à 64 devrait être compatible avec le multi-arch. Je serais cependant prudent quant à la qualité du support de ce nouveau système.

Voici l'un des documents que j'ai lus qui ont discuté de la question, peut-être que cela vous aidera: https://wiki.ubuntu.com/MultiarchSpec

Notez les troisièmes User Stories. Voici un autre lien autour du même sujet: https://help.ubuntu.com/community/MultiArch

Même si cela pourrait être un peu différent entre Debian et Ubunutu, il s'agit d'une fonctionnalité essentielle. Ce qui, j'imagine, Ubuntu et Debian travaillerait en étroite collaboration pour que cette structure fonctionne sur le terrain avant qu'Ubuntu ne se retire et ne fasse quelque chose de son goût.

Bonne chance!

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.