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

J'ai un système 32 bits qui fonctionne sur un processeur 64 bits. Comment puis-je le convertir en 64 bits sans réinstaller? J'ai vu quelque part que c'est faisable à la suite du nouveau cadre Multiarch .

    TL; DR: C'est faisable, mais compliqué. J'ai décrit une alternative au fond.

    Maintenant, la description longue , et le prendre avec un grain de sel, comme je ne l'ai pas pris le meilleur path:

    C'est possible, et voici ce que j'ai fait pour les deux dernières nuits: Il y a une input wiki décrivant la méthode old-school sans support multiarchique. Il est utile pour réparer les packages brisé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 packages sont alors amd64, mais la plupart restront i386. apt-get upgrade prendra soin de certains packages, apt-get -f install va réparer certaines erreurs, mais la plupart des packages restront i386. Si vous voulez faire face à cela, alors sauter la partie délicate;)

    Utilisation de dpkg --get-selections | grep :i386 dpkg --get-selections | grep :i386 returnnera tous vos packages, que vous devrez encore 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 packages ne sont pas disponibles dans amd64 (par exemple libc6-i686), apt-get sera confus et beaucoup de packages seront installés dans les deux versions. Beaucoup de travail manuel en aptitude doit être fait.

    Plus difficile: certains packages essentiels peuvent être remplacés, de sorte que vous aurez toujours les binarys installés pour l'installation, mais certains packages devront être enlevés et installés à nouveau, par exemple, j'ai eu ce problème avec tar. J'ai manipulé les packages sur un autre système, extrait les packages via ar p package.deb data.tar.gz | tar zx ar p package.deb data.tar.gz | tar zx , puis scp ed les files extraits via scp -r ./* root@other_computer:/ , donc les binarys sont de nouveau disponibles. Rincez et répétez, et les files scp ed seront écrasés.

    Ce que je ferais plutôt

    J'ai fait ce qui suit, chaque fois que j'ai changé de système:

    Sauvegardez /home , /etc (et peut /var être /var , /usr/local , d'autres files que vous avez changés, /root , …, YMMV).

    Obtenez une list des packages installés avec dpkg --get-selections > packagelist et copyz également le packagelist résultant.

    Ensuite, faites une réinstallation propre de Debian, créez à nouveau tous les users, peut-être des rôles, etc.

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

    Recopyz les directorys sauvegardés, les files, et vous êtes la plupart du time fait.

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

    Les autres réponses ici montrent que si cela est théoriquement possible, il est très complexe et ne vaut probablement pas l'effort. Vous pouvez, cependant, faire une installation propre et rendre le process relativement indolore si vous gardez votre $HOME identique.

    Le process général sera

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

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

      Notez que vous pouvez également supprimer l'architecture des noms de package que vous avez installés à l'aide de multiarch :

       dpkg --get-selections '*' | sed -e 's/:\(i386\|amd64\)//' > package.list 
    2. Si votre /home est une partition séparée, assurez-vous de ne pas la formater pendant le process 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 file tgz et extrayez-le dans votre directory $ HOME:

       tar xvzf home_backup.tgz 

    Vous pouvez également jeter un oeil aux outils fournis par Mint pour faciliter cela. Ils devraient tous être installables sur Ubuntu.

    C'est théoriquement possible, mais probablement perfide. Debian multiarch au niveau actuel supporte les librairies multiarchiques, mais pas les binarys. Donc, il y a ça.

    Le système comprend principalement sa propre architecture de dpkg-architecture (qui est en fait un script perl, mais il extrait l'info arch et l'affiche), qui prétend également être en mesure de définir l'architecture.


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


    Le process brut serait:

    1. Installez la variante multiarch de toutes vos bibliothèques (le plus important est libgcc1 )
    2. Utilisez dpkg-architecture -aamd64 pour décaler votre arc (Note, il peut se plaindre de GCC)
    3. Télécharger et mettre en scène tous les composants requirejs (voir ci-dessous)
    4. Forcer l'installation de la variante amd64 de dpkg et des dependencies
    5. Forcer l'installation des variantes amd64 des packages système de base essentiels, y compris apt-get et le kernel (Note, il peut se plaindre BEAUCOUP)
    6. Redémarrer
    7. Vraisemblablement installer le rest du système avec apt-get

    Ces étapes sont basées sur ce que je sais de la design de Debian l'ayant utilisé presque exclusivement parmi les dissortingbutions Linux au cours des 12 dernières années (y compris avoir utilisé debtakeover avant) et l'approche que je prendrais. Alors considérez ceci à vos risques et périls . Votre système peut devenir inutilisable à tout moment après avoir tenté l'étape 4. Alterner pour les étapes 4 et 5 peut être debbootstrap .

    Plus important encore, je suggère fortement d'essayer cela sur une VM avant de le faire sur tout ce qui vous intéresse.

    Bonne chance, et que la Force soit avec vous .

    Pas une réponse à la question, mais il peut être difficile de mettre à jour tous les packages de x86 à amd64, mais vous pouvez au less facilement installer le package amd64 kernel, qui vous permettra au less d'exécuter des applications 64 bits et des machines et conteneurs virtuels qui peut être suffisant pour ce dont vous avez besoin).

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

    Il y a pas mal de manuels là-bas, mais il n'y a guère de quoi s'attendre. J'écris ceci sur un ordinateur portable Debian Wheezy que je viens juste de terminer la mise à niveau de 32 bit à 64 et ça fonctionne vraiment.

    J'ai suivi ces instructions et ils étaient vraiment précis sur ce que 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 pendant toute la durée du process, 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é (surtout les packages essentiels).

    Suite à l'idée d'utiliser awk , j'ai fini par utiliser:

     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 

    Je devais le faire tourner plusieurs fois. dpkg --get-selections est simplement une list alphabétique, donc les packages en haut qui requièrent des packages en bas seront dpkg --get-selections . Si vous voulez regarder combien sont en cours d'installation, faites dpkg --get-selections | grep amd64 | wc -l dpkg --get-selections | grep amd64 | wc -l dpkg --get-selections | grep amd64 | wc -l dans la boucle while.

    J'ai peu d'expérience avec la question, mais je crois que vous avez raison quand vous dites que la conversion de 32 à 64 devrait être capable avec le multi-arc. Je serais toutefois prudent quant à la façon dont ce nouveau système est bien supporté.

    Voici un des documents que j'ai lu qui a 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 peut être un peu différent entre Debian et Ubunutu, il s'agit d'une caractéristique essentielle. Ce que j'imagine que Ubuntu et Debian travailleraient étroitement pour faire fonctionner cette structure sur le terrain avant qu'Ubuntu ne s'éloigne et fasse quelque chose de leur propre goût.

    Bonne chance!