Cómo convertir un sistema basado en Debian de 32 bits (x86) a 64 bits

36

Tengo un sistema de 32 bits que se ejecuta en un procesador de 64 bits. ¿Cómo lo convierto a todo-64-bit, sin reinstalar? He visto en alguna parte que es factible como resultado del nuevo marco Multiarch .

tshepang
fuente
55
Estoy interesado en respuestas a esta pregunta. Tengo un sistema de 32 bits en una máquina con capacidad de 64 bits (que ahora tiene más de 6 años, pero sigue funcionando por el momento). La única razón por la que usé 32 bits cuando instalé originalmente esta máquina en 2007, fue porque quería ejecutar aplicaciones de 32 bits. Con el nuevo multiarch, si entiendo correctamente, las aplicaciones de 32 bits se pueden instalar fácilmente en una máquina de 64 bits. Por lo tanto, sería bueno convertir a 64 bits para wheezy, pero no sé lo difícil que sería. La sugerencia de @ bahamat de usar una VM suena bien. Si logro una conversión exitosa, responderé aquí.
Faheem Mitha
Pregunta similar sobre AU: askubuntu.com/q/5018/178596
Wilf

Respuestas:

8

TL; DR: es factible, pero complicado. He esbozado una alternativa en la parte inferior.

Ahora la larga descripción , y tómalo con un grano de sal, ya que puede que no haya tomado la mejor ruta:

Es posible, y esto es lo que hice durante las últimas dos noches: hay una entrada wiki que describe la forma de la vieja escuela sin soporte multiarch. Es útil para arreglar paquetes rotos.

Para migrar su sistema base, haga esto :

$ 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

Algunos de sus paquetes son entonces amd64, pero la mayoría seguirá siendo i386. apt-get upgradese encargará de algunos paquetes, apt-get -f installreparará algunos de los errores, pero la mayoría de los paquetes seguirán siendo i386. Si desea hacer frente a esto, omita la parte difícil;)

El uso dpkg --get-selections | grep :i386devolverá todos sus paquetes, que aún tendrá que migrar.

Mi siguiente idea fue hacer:

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

Pero resultó ser una mala idea: algunos paquetes no están disponibles en amd64 (por ejemplo, libc6-i686), apt-get se confundirá y se instalarán muchos paquetes en ambas versiones. Se debe hacer mucho trabajo manual en aptitud.

Más dificultades: algunos paquetes esenciales se pueden reemplazar, por lo que siempre tendrá los binarios instalados para la instalación, pero algunos paquetes tendrán que eliminarse e instalarse nuevamente, por ejemplo, tuve este problema con tar. Wgot los paquetes en otro sistema, extraje los paquetes a través ar p package.deb data.tar.gz | tar zxy luego edité los scparchivos extraídos scp -r ./* root@other_computer:/para que los archivos binarios estén disponibles nuevamente. Enjuague y repita, y los scparchivos ed se sobrescribirán.

Lo que haría en su lugar

He hecho lo siguiente, cada vez que cambié de sistema:

Una copia de seguridad /home, /etc(y tal vez /var, /usr/localalgunos otros archivos que ha cambiado, /root, ..., tu caso es distinto).

Obtenga una lista de los paquetes instalados dpkg --get-selections > packagelisty copie también el archivo resultante packagelist.

Luego realice una reinstalación limpia de Debian, cree todos los usuarios nuevamente, tal vez roles, etc.

Vuelva a instalar todos los paquetes con dpkg --set-selections < packagelist; apt-get -f install.

Copie de nuevo los directorios y archivos respaldados, y ya casi ha terminado.

Una desventaja de ese enfoque: todos sus paquetes, incluidas las bibliotecas, se marcarán como instalados manualmente, por lo que no se desinstalarán, cuando ningún paquete dependa de ellos.

Residuo
fuente
1
"Lo que haría en su lugar" ... hombre, estaba seguro de que OP preguntó sin reinstalar: /
Braiam
@Braiam El OP probablemente quería hacerlo sin una reinstalación. Solo estaba informando sobre mi experiencia personal al hacer eso. La ruta alternativa es más simple para mí, y tal vez he cometido algunos errores al convertir el sistema.
Residuo el
66
Para marcar paquetes instalados automáticamente, podría haber utilizado apt-mark showautopara exportar la lista de instalación automática y apt-mark automarcarlos en la nueva instalación.
Adrien Clerc
Gracias por escribir tu experiencia. "Si quiere lidiar con esto, omita la parte difícil;)" ¿Qué pasa si mi objetivo es poder desarrollar software x86_64y no me importa si los paquetes de mi sistema no usan el procesador de 64 bits de manera óptima? ? También estoy ejecutando un sistema operativo de 32 bits. Supongo que pensé que mi procesador era de 32 bits cuando hice la instalación por primera vez :(
jberryman
7

Las otras respuestas aquí muestran que si bien esto es teóricamente posible, es muy complejo y probablemente no valga la pena el esfuerzo. Sin embargo, puede hacer una instalación limpia y hacer que el proceso sea relativamente sencillo si mantiene $HOMEel mismo.

El proceso general será

  1. Haga una copia de seguridad de su lista de paquetes instalados y la lista de paquetes instalados automáticamente.

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

    Tenga en cuenta que es posible que también desee eliminar la arquitectura de cualquier nombre de paquete que haya instalado utilizando multiarch :

    dpkg --get-selections '*' | sed -e 's/:\(i386\|amd64\)//' > package.list
    
  2. Si su /homees una partición separada, solo asegúrese de no formatearla durante el proceso de instalación. Si no está en una partición separada, haga una copia de seguridad que pueda restaurar más tarde:

    tar cvzf home_backup.tgz $HOME/
    
  3. Una vez que haya instalado su nuevo sistema, instale los paquetes faltantes

    sudo dpkg --set-selections < package.list 
    sudo apt-get update
    sudo apt-get dist-upgrade
    sudo apt-mark auto $(cat auto.list)
    
  4. Restaura tu $ HOME. Copie el archivo tgz y extráigalo en su directorio $ HOME:

    tar xvzf home_backup.tgz
    

También es posible que desee echar un vistazo a las herramientas que ofrece Mint para facilitar esto. Todos deberían ser instalables en Ubuntu también.

terdon
fuente
4

En teoría es posible, pero probablemente traicionero. Debian multiarch en la actualidad admite bibliotecas multiarch, pero no binarios. Entonces ahí está eso.

El sistema comprende principalmente su propia arquitectura dpkg-architecture(que en realidad es un script perl, pero extrae la información del arco y la muestra), que también afirma ser capaz de configurar la arquitectura.


ADVERTENCIA: ¡NO LO HE HECHO NI INTENTADO!


El proceso aproximado sería:

  1. Instale la variante multiarch de todas sus bibliotecas (lo más importante libgcc1 )
  2. Utilizar dpkg-architecture -aamd64 para cambiar su arco (Nota, puede quejarse de GCC)
  3. Descargue y organice todos los componentes necesarios (vea a continuación)
  4. Forzar la instalación de la variante amd64 de dpkg y dependencias de
  5. Forzar la instalación de variantes amd64 de paquetes esenciales del sistema base, incluidos apt-get y el núcleo (Nota, puede quejarse MUCHO)
  6. Reiniciar
  7. Presumiblemente instale el resto del sistema con apt-get

Estos pasos se basan en lo que sé del diseño de Debian que lo ha utilizado casi exclusivamente entre las distribuciones de Linux en los últimos 12 años (incluido el uso debtakeoveranterior) y el enfoque que adoptaría. Así que considere esto bajo su propio riesgo . Su sistema puede quedar inutilizable en cualquier momento después de intentar el paso 4. Alterno para los pasos 4 y 5 podría serdebbootstrap .

Lo que es más importante, le recomiendo probar esto en una máquina virtual antes de hacerlo en cualquier cosa que le interese.

Buena suerte y que la fuerza te acompañe .

bahamat
fuente
3

No es una respuesta a la pregunta, pero puede ser difícil actualizar todos los paquetes de x86 a amd64, pero al menos puede instalar fácilmente el paquete del núcleo amd64, que al menos le permitirá ejecutar aplicaciones de 64 bits y máquinas y contenedores virtuales ( que puede ser suficiente para lo que necesitas).

Simplemente instale el paquete amd64 linux-image con dpkg -i --force-architecture.

Stéphane Chazelas
fuente
1
--force-architectureno es necesario, y el núcleo amd64 se puede instalar a través de apt en i386.
jordanm
3

Existen bastantes manuales, pero casi ninguno muestra qué esperar realmente. Estoy escribiendo esto en una computadora portátil Debian Wheezy que acabo de terminar de actualizar de 32 bits a 64 y de hecho funciona.

Seguí estas instrucciones y fueron muy precisas sobre lo que realmente enfrentarás:

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

Una recomendación es mantener el sistema encendido durante todo el proceso, no reiniciar a menos que esté seguro de que ha migrado todo y que todo lo que se eliminó se volvió a instalar (especialmente los paquetes esenciales), o no volverá a ejecutar el sistema.

nigratruo
fuente
1
Es interesante leer lo que realmente está involucrado, pero después de leer esto, creo que estoy mejor con una reinstalación. Gracias.
Faheem Mitha
Ese enlace no me funciona, ¿se ha movido el recurso?
Toby Speight
Oh si, viste la fecha? Escribí que en 2013, las cosas a menudo desaparecen en la web en 6 años. Lamentablemente, la web todavía no tiene una función muy básica: mostrar enlaces rotos antes de hacer clic en un enlace.
nigratruo
1

Siguiendo la idea usando awk , terminé usando:

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

Tuve que ejecutarlo algunas veces. dpkg --get-selectionses simplemente una lista alfabética, por lo que los paquetes en la parte superior que requieren paquetes en la parte inferior se pasarán por alto. Si desea ver cuántos se están instalando, hágalo dpkg --get-selections | grep amd64 | wc -ldentro del whilebucle.

Douglas La Rocca
fuente
-1

Tengo poca experiencia con el asunto, pero creo que está en lo correcto cuando dice que la conversión de 32 a 64 debería ser capaz con el arco múltiple. Sin embargo, sería cauteloso acerca de qué tan bien está soportado este nuevo sistema.

Aquí está uno de los documentos que leí que discutió el asunto, tal vez esto lo ayude: https://wiki.ubuntu.com/MultiarchSpec

Observe las historias de terceros usuarios. Aquí hay otro enlace sobre el mismo tema: https://help.ubuntu.com/community/MultiArch

Aunque podría ser un poco diferente entre Debian y Ubunutu, esta es una característica central. Lo que me imagino que Ubuntu y Debian trabajarían estrechamente para lograr que esta estructura funcione en el terreno antes de que Ubuntu se aleje y haga algo de su agrado.

¡Buena suerte!

CenterOrbit
fuente