Wie konvertiert man ein 32-Bit (x86) Debian-basiertes System auf 64-Bit


36

Ich habe ein 32-Bit-System, das auf einem 64-Bit-Prozessor ausgeführt wird. Wie konvertiere ich es auf 64-Bit, ohne es neu zu installieren? Ich habe irgendwo gesehen, dass es als Ergebnis des neuen Multiarch-Frameworks machbar ist .


5
Ich bin an Antworten auf diese Frage interessiert. Ich habe ein 32-Bit-System auf einem 64-Bit-fähigen Computer (der jetzt über 6 Jahre alt ist, aber noch läuft). Der einzige Grund, warum ich bei der ursprünglichen Installation dieses Computers im Jahr 2007 32-Bit verwendet habe, war, dass ich 32-Bit-Anwendungen darauf ausführen wollte. Wenn ich das richtig verstehe, können mit dem neuen Multiarch 32-Bit-Apps problemlos auf einem 64-Bit-Computer installiert werden. Es wäre also schön, für Wheezy auf 64-Bit zu konvertieren, aber ich weiß nicht, wie schwer es sein würde. @ Bahamats Vorschlag, eine VM zu verwenden, klingt gut. Wenn ich eine erfolgreiche Konvertierung schaffe, antworte ich hier.
Faheem Mitha


Ähnliche Frage auf AU: askubuntu.com/q/5018/178596
Wilf

Antworten:


8

TL; DR: Es ist machbar, aber kompliziert. Ich habe unten eine Alternative skizziert.

Nun die lange Beschreibung und nimm es mit einem Körnchen Salz, da ich vielleicht nicht den besten Weg genommen habe:

Es ist möglich, und das habe ich in den letzten zwei Nächten getan: Es gibt einen Wiki-Eintrag, der den Old-School-Weg ohne Multiarch-Unterstützung beschreibt. Es ist hilfreich, um defekte Pakete zu reparieren.

So migrieren Ihr Basissystem, tun dies :

$ 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

Einige Ihrer Pakete sind dann amd64, die meisten bleiben jedoch i386. apt-get upgradekümmert sich um einige Pakete, apt-get -f installrepariert einige Fehler, aber die meisten Pakete bleiben i386. Wenn du damit fertig werden willst, dann überspringe den kniffligen Teil;)

Wenn Sie verwenden, dpkg --get-selections | grep :i386werden alle Ihre Pakete zurückgegeben, die Sie noch migrieren müssen.

Meine nächste Idee war:

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

Es stellte sich jedoch als schlechte Idee heraus: Einige Pakete sind in amd64 nicht verfügbar (z. B. libc6-i686), apt-get ist verwirrt und viele Pakete werden in beiden Versionen installiert. Es muss viel Handarbeit in Eignung geleistet werden.

Mehr Härte: Einige wichtige Pakete können ersetzt werden, so dass Sie immer die Binärdateien für die Installation installiert haben, aber einige Pakete müssen entfernt und erneut installiert werden, z. B. hatte ich dieses Problem mit tar. Ich habe die Pakete auf einem anderen System heruntergeladen, die Pakete über extrahiert ar p package.deb data.tar.gz | tar zxund dann scpdie extrahierten Dateien über bearbeitet scp -r ./* root@other_computer:/, damit die Binärdateien wieder verfügbar sind. Spülen und wiederholen, und die scpEd-Dateien werden überschrieben.

Was würde ich stattdessen tun

Ich habe Folgendes getan, wenn ich zwischen Systemen gewechselt habe:

Sichern Sie /home, /etc(und vielleicht auch /var, /usr/localeinige andere Dateien , die Sie geändert haben, /root..., YMMV).

Holen Sie sich eine Liste der installierten Pakete mit dpkg --get-selections > packagelistund kopieren Sie die resultierende Datei packagelist.

Führen Sie dann eine Neuinstallation von Debian durch, erstellen Sie alle Benutzer erneut, möglicherweise Rollen usw.

Installieren Sie alle Pakete erneut mit dpkg --set-selections < packagelist; apt-get -f install.

Kopieren Sie die gesicherten Verzeichnisse und Dateien zurück, und schon sind Sie fertig.

Ein Nachteil dieses Ansatzes: Alle Ihre Pakete, einschließlich der Bibliotheken, werden als manuell installiert markiert, sodass sie nicht deinstalliert werden, wenn kein Paket mehr von ihnen abhängt.


1
"Was ich stattdessen tun würde" ... Mann, ich war sicher, dass OP ohne Neuinstallation gefragt: /
Braiam

@Braiam Das OP wollte das höchstwahrscheinlich ohne Neuinstallation machen. Ich habe nur über meine persönlichen Erfahrungen damit berichtet. Die alternative Route ist für mich einfacher und möglicherweise habe ich beim Umrüsten des Systems einige Fehler gemacht.
Residuum

6
Um automatisch installierte Pakete zu markieren, hätten Sie apt-mark showautodie automatisch installierte Liste exportieren und apt-mark autoin der neuen Installation markieren können.
Adrien Clerc

Vielen Dank für Ihre Bewertung "Wenn Sie damit fertig werden möchten, überspringen Sie den kniffligen Teil;)" Was ist, wenn es mein Ziel ist, nur Software für zu entwickeln x86_64, und es ist mir egal, ob meine Systempakete den 64-Bit-Prozessor nicht optimal nutzen ? Ich verwende auch ein 32-Bit-Betriebssystem. Ich denke, ich dachte, mein Prozessor wäre 32-Bit, als ich das erste Mal installiert habe :(
jberryman

7

Die anderen Antworten zeigen, dass dies zwar theoretisch möglich ist, aber sehr komplex und wahrscheinlich den Aufwand nicht wert ist. Sie können jedoch eine Neuinstallation durchführen und den Vorgang relativ schmerzfrei gestalten, wenn Sie den Vorgang beibehalten $HOME.

Der allgemeine Prozess wird sein

  1. Erstellen Sie eine Sicherungskopie Ihrer Liste der installierten Pakete und der Liste der automatisch installierten Pakete.

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

    Beachten Sie, dass Sie möglicherweise auch die Architektur von allen Paketnamen entfernen möchten, die Sie mit multiarch installiert haben :

    dpkg --get-selections '*' | sed -e 's/:\(i386\|amd64\)//' > package.list
    
  2. Wenn es sich bei Ihrer /homePartition um eine separate Partition handelt, stellen Sie einfach sicher, dass Sie diese während des Installationsvorgangs nicht formatieren. Wenn es sich nicht auf einer separaten Partition befindet, erstellen Sie eine Sicherung, die Sie später wiederherstellen können:

    tar cvzf home_backup.tgz $HOME/
    
  3. Nachdem Sie Ihr neues System installiert haben, installieren Sie die fehlenden Pakete

    sudo dpkg --set-selections < package.list 
    sudo apt-get update
    sudo apt-get dist-upgrade
    sudo apt-mark auto $(cat auto.list)
    
  4. Stellen Sie Ihr $ HOME wieder her. Kopieren Sie die tgz-Datei und extrahieren Sie sie in Ihr $ HOME-Verzeichnis:

    tar xvzf home_backup.tgz
    

Vielleicht möchten Sie auch einen Blick auf die Tools werfen , die Mint zur Verfügung stellt, um dies zu vereinfachen. Sie sollten alle auch unter Ubuntu installierbar sein.


4

Es ist theoretisch möglich, aber wahrscheinlich tückisch. Debian Multiarch unterstützt derzeit Multiarch-Bibliotheken, jedoch keine Binärdateien. Das ist es also.

Das System versteht in erster Linie seine eigene Architektur dpkg-architecture(die eigentlich ein Perl-Skript ist, aber es extrahiert die Arch-Informationen und zeigt sie an), die auch angibt, die Architektur festlegen zu können .


WARNUNG: Ich habe dies noch nicht getan, auch nicht, wenn ich es versucht habe !!!


Der grobe Prozess wäre:

  1. Installieren Sie die Multiarch-Variante aller Ihrer Bibliotheken (am wichtigsten libgcc1)
  2. Verwenden Sie dpkg-architecture -aamd64auf Ihren Bogen verschieben (Hinweis kann es beschweren sich über GCC)
  3. Laden Sie alle erforderlichen Komponenten herunter und stellen Sie sie bereit (siehe nächste Seite).
  4. Erzwinge die Installation der amd64-Variante dpkgund der Abhängigkeiten
  5. Erzwingen Sie die Installation von amd64-Varianten wichtiger Basissystempakete, einschließlich apt-getund des Kernels.
  6. Starten Sie neu
  7. Vermutlich installieren Sie den Rest des Systems mit apt-get

Diese Schritte basieren auf dem, was ich über das Design von Debian weiß, das es in den letzten 12 Jahren fast ausschließlich unter Linux-Distributionen verwendet hat (einschließlich der vorherigen debtakeover), und auf dem Ansatz, den ich verfolgen würde. Betrachten Sie dies also auf eigenes Risiko . Ihr System kann unbrauchbar werden , jederzeit nach Schritt 4. Alternate versucht für die Schritte 4 und 5 könnte sein debbootstrap.

Am wichtigsten ist jedoch, dass Sie dies auf einer VM ausprobieren, bevor Sie es auf etwas ausführen, das Ihnen wichtig ist.

Viel Glück und möge die Macht mit dir sein .


3

Keine Antwort auf die Frage, aber es kann schwierig sein, alle Pakete von x86 auf amd64 zu aktualisieren, aber Sie können das amd64-Kernelpaket zumindest problemlos installieren, wodurch Sie zumindest 64-Bit-Anwendungen sowie virtuelle Maschinen und Container ausführen können ( was vielleicht genug für das ist, was du brauchst).

Installieren Sie einfach das amd64-Linux-Image-Paket mit dpkg -i --force-architecture.


1
--force-architecturewird nicht benötigt und der amd64 kernel kann via apt auf i386 installiert werden.
Jordanien

3

Es gibt eine ganze Reihe von Handbüchern, aber kaum eine zeigt, was wirklich zu erwarten ist. Ich schreibe dies auf einem Debian Wheezy-Laptop, den ich gerade von 32 Bit auf 64 Bit hochgerüstet habe, und es funktioniert tatsächlich.

Ich habe diese Anweisungen befolgt und sie waren sehr genau, was Sie tatsächlich konfrontiert werden:

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

Es wird empfohlen, das System während des gesamten Vorgangs mit Strom zu versorgen. Führen Sie keinen Neustart durch, es sei denn, Sie sind sicher, dass Sie alles migriert haben und alles, was entfernt wurde, erneut installiert wurde (insbesondere wichtige Pakete), oder Sie werden das System nicht wieder zum Laufen bringen.


1
Interessant zu lesen, worum es eigentlich geht, aber nachdem ich das gelesen habe, denke ich, dass ich mit einer Neuinstallation besser dran bin. Vielen Dank.
Faheem Mitha

Dieser Link funktioniert bei mir nicht. Hat sich die Ressource bewegt?
Toby Speight

Oh ja, hast du das Datum gesehen? Ich habe 2013 geschrieben, dass Dinge in 6 Jahren oft im Web verschwinden. Leider hat das Web immer noch keine sehr grundlegende Funktion: Es werden defekte Links angezeigt, bevor Sie auf einen Link klicken.
Nigratruo

1

Nach der Idee mit awk habe ich Folgendes verwendet:

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

Ich musste es ein paar Mal ausführen. dpkg --get-selectionsist einfach eine alphabetische Liste, sodass Pakete oben, für die Pakete unten erforderlich sind, übergangen werden. Wenn Sie sehen möchten, wie viele installiert werden, gehen Sie dpkg --get-selections | grep amd64 | wc -lin der whileSchleife vor.


-1

Ich habe wenig Erfahrung mit der Angelegenheit, aber ich glaube, dass Sie richtig sind, wenn Sie sagen, dass die Konvertierung von 32 in 64 mit dem Multi-Arch kompatibel sein sollte. Ich würde allerdings vorsichtig sein, wie gut dieses neue System unterstützt wird.

Hier ist eines der Dokumente, die ich gelesen habe und die die Angelegenheit besprochen haben. Vielleicht hilft Ihnen das: https://wiki.ubuntu.com/MultiarchSpec

Beachten Sie die dritten User Stories. Hier ist ein weiterer Link zum selben Thema: https://help.ubuntu.com/community/MultiArch

Auch wenn es zwischen Debian und Ubunutu ein bisschen anders sein mag, ist dies eine Kernfunktion. Was ich mir vorstellen würde, dass Ubuntu und Debian eng zusammenarbeiten würden, um diese Struktur zum Laufen zu bringen, bevor Ubuntu sich zurückzieht und etwas nach eigenem Belieben tut.

Viel Glück!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.