Ho un sistema a 32 bit che funziona su un processore a 64 bit. Come faccio a convertirlo in tutto a 64 bit, senza reinstallare? Ho visto da qualche parte che è fattibile grazie al nuovo framework Multiarch .
Ho un sistema a 32 bit che funziona su un processore a 64 bit. Come faccio a convertirlo in tutto a 64 bit, senza reinstallare? Ho visto da qualche parte che è fattibile grazie al nuovo framework Multiarch .
Risposte:
TL; DR: è fattibile, ma complicato. Ho delineato un'alternativa in fondo.
Ora la lunga descrizione , e prenderlo con un granello di sale, poiché potrei non aver preso la strada migliore:
È possibile, ed ecco cosa ho fatto nelle ultime due notti: c'è una voce wiki che descrive la vecchia scuola senza il supporto multiarco. È utile per riparare i pacchetti rotti.
Per migrare il sistema di base, procedere come segue :
$ 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
Alcuni dei tuoi pacchetti sono quindi amd64, ma la maggior parte rimarrà i386. apt-get upgrade
si occuperà di alcuni pacchetti, apt-get -f install
riparerà alcuni errori, ma la maggior parte dei pacchetti rimarrà i386. Se vuoi farcela, salta la parte difficile;)
L'utilizzo dpkg --get-selections | grep :i386
restituirà tutti i pacchetti che dovrai comunque migrare.
La mia prossima idea era di fare:
# apt-get install `dpkg --get-selections \
| grep i386 \
| awk {'gsub(/:i386/, ":amd64"); print $1'}`
Ma si è rivelata una cattiva idea: alcuni pacchetti non sono disponibili in amd64 (ad esempio libc6-i686), apt-get sarà confuso e molti pacchetti verranno installati in entrambe le versioni. Molto lavoro manuale in attitudine deve essere fatto.
Più difficoltà: alcuni pacchetti essenziali possono essere sostituiti, in modo da avere sempre i binari installati per l'installazione, ma alcuni pacchetti dovranno essere rimossi e reinstallati, ad esempio ho avuto questo problema con tar. Ho registrato i pacchetti su un altro sistema, ho estratto i pacchetti tramite ar p package.deb data.tar.gz | tar zx
e quindi ho modificato i scp
file estratti tramite scp -r ./* root@other_computer:/
, quindi i binari sono nuovamente disponibili. Risciacquare e ripetere e i scp
file ed verranno sovrascritti.
Cosa farei invece
Ho fatto quanto segue, ogni volta che ho cambiato sistema:
Eseguire il backup /home
, /etc
(e forse /var
, /usr/local
alcuni altri file che sono stati modificati /root
,, ..., YMMV).
Ottieni un elenco di pacchetti installati con dpkg --get-selections > packagelist
e copia anche il file risultante packagelist
.
Quindi esegui una reinstallazione pulita di Debian, crea di nuovo tutti gli utenti, forse i ruoli, ecc.
Reinstalla tutti i pacchetti con dpkg --set-selections < packagelist; apt-get -f install
.
Copia le directory, i file di cui è stato eseguito il backup e il gioco è fatto.
Un aspetto negativo di questo approccio: tutti i pacchetti, comprese le librerie, saranno contrassegnati come installati manualmente, quindi non verranno disinstallati, quando nessun pacchetto dipende più da loro.
apt-mark showauto
per esportare l'elenco autoinstallato e apt-mark auto
contrassegnarli nella nuova installazione.
x86_64
, e non importa se i miei pacchetti di sistema non utilizzano il processore a 64 bit in modo ottimale ? Sto anche eseguendo un sistema operativo a 32 bit. Immagino di aver pensato che il mio processore fosse a 32 bit quando ho fatto l'installazione per la prima volta :(
Le altre risposte qui mostrano che sebbene ciò sia teoricamente possibile, è molto complesso e probabilmente non vale la pena. Tuttavia, è possibile eseguire un'installazione pulita e rendere il processo relativamente indolore se si mantiene $HOME
lo stesso.
Il processo generale sarà
Fai un backup del tuo elenco di pacchetti installati e dell'elenco dei pacchetti installati automaticamente.
dpkg --get-selections '*' > package.list
apt-mark showauto >auto.list
Nota che potresti anche voler rimuovere l'architettura da qualsiasi nome di pacchetto che hai installato usando multiarch :
dpkg --get-selections '*' | sed -e 's/:\(i386\|amd64\)//' > package.list
Se la tua /home
è una partizione separata, assicurati di non formattarla durante il processo di installazione. Se non si trova su una partizione separata, eseguire un backup che è possibile ripristinare in un secondo momento:
tar cvzf home_backup.tgz $HOME/
Dopo aver installato il nuovo sistema, installare i pacchetti mancanti
sudo dpkg --set-selections < package.list
sudo apt-get update
sudo apt-get dist-upgrade
sudo apt-mark auto $(cat auto.list)
Ripristina $ HOME. Copia il file tgz sopra ed estrailo nella tua directory $ HOME:
tar xvzf home_backup.tgz
Potresti anche dare un'occhiata agli strumenti forniti da Mint per renderlo più semplice. Dovrebbero essere installabili anche su Ubuntu.
In teoria è possibile, ma probabilmente insidioso. Il multiarch Debian attualmente supporta le librerie multiarch, ma non i binari. Quindi c'è quello.
Il sistema comprende principalmente la propria architettura dpkg-architecture
(che in realtà è uno script perl, ma estrae le informazioni sull'arco e le visualizza), che afferma anche di essere in grado di impostare l'architettura.
Il processo approssimativo sarebbe:
libgcc1
)dpkg-architecture -aamd64
per spostare l'arco (Nota, potrebbe lamentarsi di GCC)dpkg
e delle dipendenzeapt-get
e il kernel (Nota, potrebbe lamentarsi MOLTO)apt-get
Questi passaggi si basano su ciò che conosco del design di Debian che l'ha usato quasi esclusivamente tra le distribuzioni Linux negli ultimi 12 anni (incluso averlo usato in debtakeover
precedenza) e dell'approccio che avrei adottato. Quindi considera questo a tuo rischio e pericolo . Il sistema potrebbe diventare inutilizzabile in qualsiasi momento dopo aver tentato il passaggio 4. Potrebbe essere alternativo ai passaggi 4 e 5 debbootstrap
.
Soprattutto, consiglio vivamente di provare questo su una VM prima di farlo su qualsiasi cosa ti interessi.
Buona fortuna e che la forza sia con te .
Non è una risposta alla domanda, ma potrebbe essere difficile aggiornare tutti i pacchetti da x86 ad amd64, ma puoi almeno installare facilmente il pacchetto del kernel amd64, che ti permetterà almeno di eseguire applicazioni a 64 bit e macchine virtuali e contenitori ( che può essere sufficiente per quello che ti serve).
Basta installare il pacchetto amd64 linux-image con dpkg -i --force-architecture
.
--force-architecture
non è necessario e il kernel amd64 può essere installato tramite apt su i386.
Ci sono molti manuali là fuori, ma quasi nessuno mostra cosa aspettarsi davvero. Sto scrivendo questo su un laptop Debian Wheezy che ho appena finito di aggiornare da 32 bit a 64 e funziona davvero.
Ho seguito queste istruzioni e sono state davvero accurate su ciò che dovrai affrontare:
http://blog.zugschlus.de/archives/972-How-to-amd64-an-i386-Debian-installation-with-multiarch.html
Una raccomandazione è quella di mantenere il sistema alimentato durante l'intero processo, non riavviare a meno che non si sia sicuri di aver migrato tutto e che tutto ciò che è stato rimosso sia stato installato di nuovo (in particolare i pacchetti essenziali), o non si riavvierà il sistema.
Seguendo l'idea usando awk , ho finito per usare:
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
Ho dovuto eseguirlo alcune volte. dpkg --get-selections
è semplicemente un elenco alfabetico, quindi i pacchetti nella parte superiore che richiedono pacchetti nella parte inferiore verranno passati. Se vuoi vedere quanti ne stanno installando, fallo dpkg --get-selections | grep amd64 | wc -l
all'interno del while
loop.
Ho poca esperienza con la questione, ma credo che tu abbia ragione quando dici che la conversione da 32 a 64 dovrebbe essere capace con il multi-arco. Sarei comunque cauto su quanto sia ben supportato questo nuovo sistema.
Ecco uno dei documenti che ho letto che parlava della questione, forse questo ti aiuterà: https://wiki.ubuntu.com/MultiarchSpec
Si noti la terza User Story. Ecco un altro link sullo stesso argomento: https://help.ubuntu.com/community/MultiArch
Anche se potrebbe essere un po 'diverso tra Debian e Ubunutu, questa è una caratteristica fondamentale. Il che immagino che Ubuntu e Debian lavorino da vicino per far funzionare questa struttura sul terreno prima che Ubuntu si allontanasse e facesse qualcosa di suo gradimento.
In bocca al lupo!