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 .
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 .
Respuestas:
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 upgrade
se encargará de algunos paquetes, apt-get -f install
reparará 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 :i386
devolverá 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 zx
y luego edité los scp
archivos extraídos scp -r ./* root@other_computer:/
para que los archivos binarios estén disponibles nuevamente. Enjuague y repita, y los scp
archivos 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/local
algunos otros archivos que ha cambiado, /root
, ..., tu caso es distinto).
Obtenga una lista de los paquetes instalados dpkg --get-selections > packagelist
y 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.
apt-mark showauto
para exportar la lista de instalación automática y apt-mark auto
marcarlos en la nueva instalación.
x86_64
y 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 :(
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 $HOME
el mismo.
El proceso general será
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
Si su /home
es 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/
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)
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.
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.
El proceso aproximado sería:
libgcc1
)dpkg-architecture -aamd64
para cambiar su arco (Nota, puede quejarse de GCC)dpkg
y dependencias deapt-get
y el núcleo (Nota, puede quejarse MUCHO)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 debtakeover
anterior) 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 .
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
.
--force-architecture
no es necesario, y el núcleo amd64 se puede instalar a través de apt en i386.
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.
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-selections
es 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 -l
dentro del while
bucle.
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!