Ho un sistema a 32 bit che funziona su un processore a 64 bit. Come posso convertirlo in tutto a 64 bit, senza reinstallarlo? Ho visto da qualche parte che è fattibile grazie al nuovo framework Multiarch.
Risposta accettata:
TL;DR: È fattibile, ma complicato. Ho delineato un'alternativa in fondo.
Ora la descrizione lunga , e prendilo con le pinze, perché forse non ho preso la strada migliore:
È possibile, ed ecco cosa ho fatto nelle ultime due notti:
C'è una voce wiki che descrive il modo della vecchia scuola senza supporto multiarch. È utile per riparare i pacchetti rotti.
Per migrare il tuo sistema di base, procedi 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 😉
Usando dpkg --get-selections | grep :i386
restituirà tutti i tuoi pacchi, che dovrai ancora 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. C'è molto lavoro manuale in attitudine da fare.
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 installati nuovamente, ad es. Ho avuto questo problema con tar. Ho ottenuto i pacchetti su un altro sistema, ho estratto i pacchetti tramite ar p package.deb data.tar.gz | tar zx
e poi scp
ed i file estratti tramite scp -r ./* [email protected]_computer:/
, quindi i binari sono di nuovo disponibili. Risciacquare e ripetere, e il scp
ed i file verranno sovrascritti.
Cosa farei invece
Ho fatto quanto segue, ogni volta che ho cambiato sistema:
Eseguire il backup di /home
, /etc
(e forse /var
, /usr/local
, alcuni altri file che hai modificato, /root
, …, YMMV).
Ottieni un elenco di pacchetti installati con dpkg --get-selections > packagelist
e copia il file risultante packagelist
anche.
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 di nuovo le directory e i file di backup e il gioco è quasi fatto.
Uno svantaggio di questo approccio:tutti i tuoi pacchetti, incluse le librerie, verranno contrassegnati come installati manualmente, quindi non verranno disinstallati quando nessun pacchetto dipende più da loro.