Come convertire un sistema basato su Debian a 32 bit (x86) in 64 bit


36

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 .


5
Sono interessato a risposte a questa domanda. Ho un sistema a 32 bit su una macchina a 64 bit (che ora ha più di 6 anni, ma continua ancora per il momento). L'unica ragione per cui ho usato 32 bit quando ho installato questa macchina nel 2007, era perché volevo eseguire applicazioni a 32 bit su di esso. Con il nuovo multiarch, se ho capito bene, le app a 32 bit possono essere facilmente installate su una macchina a 64 bit. Quindi, sarebbe bello convertire a 64 bit per wheezy, ma non so quanto sarebbe difficile. Il suggerimento di @ bahamat di usare una VM sembra buono. Se gestisco una conversione corretta, risponderò qui.
Faheem Mitha


Domanda simile su AU: askubuntu.com/q/5018/178596
Wilf,

Risposte:


8

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 upgradesi occuperà di alcuni pacchetti, apt-get -f installriparerà alcuni errori, ma la maggior parte dei pacchetti rimarrà i386. Se vuoi farcela, salta la parte difficile;)

L'utilizzo dpkg --get-selections | grep :i386restituirà 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 zxe quindi ho modificato i scpfile estratti tramite scp -r ./* root@other_computer:/, quindi i binari sono nuovamente disponibili. Risciacquare e ripetere e i scpfile 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/localalcuni altri file che sono stati modificati /root,, ..., YMMV).

Ottieni un elenco di pacchetti installati con dpkg --get-selections > packageliste 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.


1
"Cosa avrei fatto invece" ... amico, ero sicuro che OP avesse chiesto senza reinstallare: /
Braiam

@Braiam L'OP probabilmente voleva farlo senza una reinstallazione. Stavo solo raccontando la mia esperienza personale nel farlo. Il percorso alternativo è più semplice per me e forse ho commesso degli errori durante la conversione del sistema.
Residuum,

6
Per contrassegnare i pacchetti installati automaticamente, si sarebbe potuto usare apt-mark showautoper esportare l'elenco autoinstallato e apt-mark autocontrassegnarli nella nuova installazione.
Adrien Clerc,

Grazie per aver scritto la tua esperienza. "Se vuoi far fronte a questo, allora salta la parte difficile;)" Cosa succede se il mio obiettivo è solo quello di essere in grado di sviluppare software per 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 :(
jberryman

7

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 $HOMElo stesso.

Il processo generale sarà

  1. 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
    
  2. 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/
    
  3. 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)
    
  4. 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.


4

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.


ATTENZIONE: NON LO HO FATTO NÉ ANCHE TENTATO !!!


Il processo approssimativo sarebbe:

  1. Installa la variante multiarch di tutte le tue librerie (soprattutto libgcc1)
  2. Usa dpkg-architecture -aamd64per spostare l'arco (Nota, potrebbe lamentarsi di GCC)
  3. Scarica e mette in scena tutti i componenti richiesti (vedi successivo)
  4. Forza l'installazione della variante amd64 dpkge delle dipendenze
  5. Forza l'installazione di varianti amd64 dei pacchetti del sistema di base essenziale, incluso apt-gete il kernel (Nota, potrebbe lamentarsi MOLTO)
  6. Reboot
  7. Presumibilmente installare il resto del sistema con 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 debtakeoverprecedenza) 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 .


3

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.


1
--force-architecturenon è necessario e il kernel amd64 può essere installato tramite apt su i386.
Giordania,

3

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.


1
Interessante leggere ciò che è effettivamente coinvolto, ma dopo aver letto questo, penso che sto meglio con una reinstallazione. Grazie.
Faheem Mitha,

Quel link non funziona per me - la risorsa è stata spostata?
Toby Speight,

Oh sì, hai visto la data? Ho scritto che nel 2013, le cose spesso svaniscono sul web in 6 anni. Purtroppo, il web non ha ancora una funzione molto semplice: mostrare collegamenti interrotti prima di fare clic su un collegamento.
nigratruo,

1

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 -lall'interno del whileloop.


-1

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!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.