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 .
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 .
Antworten:
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 upgrade
kümmert sich um einige Pakete, apt-get -f install
repariert 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 :i386
werden 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 zx
und dann scp
die extrahierten Dateien über bearbeitet scp -r ./* root@other_computer:/
, damit die Binärdateien wieder verfügbar sind. Spülen und wiederholen, und die scp
Ed-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/local
einige andere Dateien , die Sie geändert haben, /root
..., YMMV).
Holen Sie sich eine Liste der installierten Pakete mit dpkg --get-selections > packagelist
und 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.
apt-mark showauto
die automatisch installierte Liste exportieren und apt-mark auto
in der neuen Installation markieren können.
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 :(
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
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
Wenn es sich bei Ihrer /home
Partition 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/
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)
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.
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 .
Der grobe Prozess wäre:
libgcc1
)dpkg-architecture -aamd64
auf Ihren Bogen verschieben (Hinweis kann es beschweren sich über GCC)dpkg
und der Abhängigkeitenapt-get
und des Kernels.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 .
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
.
--force-architecture
wird nicht benötigt und der amd64 kernel kann via apt auf i386 installiert werden.
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.
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-selections
ist 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 -l
in der while
Schleife vor.
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!