Tengo una instalación de Ubuntu de 32 bits funcionando en un hardware de 64 bits. Ahora que se ha implementado multi-arch, me gustaría cambiar a 64 bits sin tener que reinstalar el sistema operativo.
Esta es una de las historias de usuario abordadas por la especificación:
Shawn instaló su sistema usando la versión de 32 bits de Ubuntu, pero su hardware es de 64 bits y quiere cambiar. Instala manualmente las versiones amd64 de dpkg y apt, reemplazando las versiones i386 y cambiando qué arquitectura se usa por defecto; luego instala el paquete ubuntu-minimal amd64; luego instala el paquete ubuntu-desktop amd64. Con el tiempo los paquetes i386 restantes se reemplazan automáticamente al actualizar.
Sin embargo, al tratar de seguir las instrucciones de allí, no puedo encontrar ninguna versión de 64 bits de dpkg o apt.
¿Esta historia de usuario se implementó de una manera diferente en la especificación final, o tengo que hacer algo diferente?
En resumen, ¿cómo puedo cambiar mi instalación de 32 bits a 64 bits?
Esta aproximación es muy complicada, y es poco probable que resulte en que todos sus paquetes tengan la versión amd64
en lugar de la versión i386
. Sólo los paquetes que realmente reciban actualizaciones cambiarán de arquitectura, y probablemente sólo si ningún otro paquete que no esté siendo actualizado depende de su arquitectura i386
. Dado que algunos paquetes no recibirán ninguna actualización durante todo el ciclo de soporte de su versión de Ubuntu, probablemente nunca tendrá un sistema completamente amd64
usando esta técnica. Además, ciertamente no hay soporte oficial para este enfoque.
En su lugar, sería aconsejable reemplazar su actual sistema Ubuntu con una nueva instalación de 64 bits.
Sin embargo, si desea intentar esta técnica, tendrá que descargar manualmente los archivos .deb
para dpkg
y apt
. Puede encontrarlos en las páginas dpkg
en Ubuntu y apt
en Ubuntu en Launchpad--expanda la última versión bajo "The Oneiric Ocelot" que esté marcada como release, security, y/o updates (pero probablemente no querrá una versión marcada sólo como proposed y/o backports, si es que hay alguna). A continuación, descargue los archivos .deb
marcados como amd64
. Específicamente, los archivos que querrá son: este para dpkg
(y los otros listados, también, si tiene esos paquetes instalados) y este y este y este y este y este para apt
.
Antes de hacer nada con estos archivos, deberías asegurarte de hacer una copia de seguridad de todos los documentos importantes de tu sistema Ubuntu instalado y de cualquier otro archivo importante (por ejemplo, música, ebooks, vídeos), porque es bastante probable que intentar esta técnica salga mal y deje tu sistema Ubuntu completamente inutilizable.
Puedes instalar todos estos paquetes poniéndolos en una carpeta que no contenga nada más (supongamos que la carpeta se llama debs
y está dentro de tu directorio Downloads
), y luego ejecutando este comando:
sudo dpkg -Ri ~/Downloads/debs
Por supuesto, una vez que los haya instalado, en realidad no se ejecutarán, porque sus ejecutables son de 64 bits y su sistema Ubuntu de 32 bits está ejecutando un kernel de 32 bits (que sólo ejecutará ejecutables de 32 bits). De hecho, puede que ni siquiera terminen de instalarse, ya que pueden tener scripts post-instalación que invoquen sus ejecutables de 64 bits no ejecutables.
Hay varias formas de intentar instalar un kernel de 64 bits en un sistema de 32 bits, pero todas son extremadamente complicadas, así que en su lugar recomiendo que arranque desde un Live CD de Oneiric de 64 bits (que ejecuta un kernel de 64 bits), chroot en el sistema Ubuntu instalado, y use los recientemente instalados apt
y dpkg
de 64 bits para instalar un kernel de 64 bits.
Aquí hay instrucciones específicas para hacer eso ... pero por favor no tome esto como que yo estoy diciendo que va a funcionar. No he intentado esto. (He hecho chroot en sistemas Ubuntu instalados desde live CD's y he realizado gestión de paquetes y otras operaciones, pero no he intentado las operaciones entre arquitecturas sugeridas aquí).
En tu sistema Ubuntu instalado, abre una ventana de Terminal (Ctrl+Alt+T) y ejecuta mount | grep ' on / '
(pegándolo en el Terminal y pulsando enter). Deberías ver algo como /dev/sda2 on / type ext4 (rw,errors=remount-ro,commit=0)
. La parte que te interesa es el nombre del dispositivo antes de on
(en este ejemplo, es /dev/sda2
). Recuérdalo, o escríbelo.
El paso 1 te dio el nombre del dispositivo de la partición /
. Si tienes una partición /boot
separada, entonces necesitarás saber el nombre del dispositivo también. En ese caso, ejecute mount | grep ' on /boot '
. Verá algo como /dev/sda1 on /boot type ext2 (rw)
. Recuerda o anota esto también.
Arranque desde un Live CD Oneiric amd64 (es decir, de 64 bits) y seleccione "Probar Ubuntu" en lugar de "Instalar Ubuntu".
Vaya a un navegador web y asegúrese de que la conectividad a Internet es totalmente funcional. Si no lo está, configúrela.
Abre una ventana de Terminal y ejecuta sudo mount /dev/sda2 /mnt
(sustituye /dev/sda2
por el nombre del dispositivo que obtuviste en el paso 1, si es diferente).
Si tu sistema instalado tiene una partición /boot
separada, ejecuta sudo mount /dev/sda1 /mnt/boot
(sustituye /dev/sda1
por el nombre del dispositivo que obtuviste en el paso 2, si es diferente).
Ahora, ejecuta estos comandos para hacer chroot en tu sistema instalado: sudo mount --bind /dev /mnt/dev sudo chroot /mnt mount -t proc none /proc mount -t sysfs ninguno /sys mount -t devpts ninguno /dev/pts
Ejecute ping -c 4 launchpad.net
para ver si la conectividad a Internet funciona completamente desde dentro del chroot. Usted espera algo como esto:
PING launchpad.net (91.189.89.223) 56(84) bytes de datos.
64 bytes desde launchpad-net.banana.canonical.com (91.189.89.223): icmp_req=1 ttl=41 time=141 ms
64 bytes desde launchpad-net.banana.canonical.com (91.189.89.223): icmp_req=2 ttl=41 time=143 ms
64 bytes desde launchpad-net.banana.canonical.com (91.189.89.223): icmp_req=3 ttl=41 time=142 ms
64 bytes desde launchpad-net.banana.canonical.com (91.189.89.223): icmp_req=4 ttl=41 time=140 ms
--- estadísticas de ping de launchpad.net ---
4 paquetes transmitidos, 4 recibidos, 0% pérdida de paquetes, tiempo 3003ms
Si, en cambio, no pudiste transmitir o recibir paquetes, entonces tendrás que configurar la conectividad a Internet en el chroot. Para ello, ejecute estos comandos (para salir del chroot, copie los archivos de configuración relevantes desde el sistema live CD al chroot, y vuelva a entrar en el chroot):
sudo cp /mnt/etc/resolv.conf /mnt/etc/resolv.conf.old
sudo cp /mnt/etc/hosts /mnt/etc/hosts.old
sudo cp /etc/resolv.conf /mnt/etc/resolv.conf
sudo cp /etc/hosts /mnt/etc/hosts
Aunque generalmente debería detener este proceso si se produce un error, no se preocupe si el primero y/o el segundo de estos cuatro comandos fallan, siempre que la forma específica en la que falla sea diciéndole que /mnt/etc/resolv.conf
(o /mnt/etc/hosts
) no existe.
El chroot de nuevo y vuelve a intentarlo:
sudo chroot /mnt
ping -c 4 launchpad.net
Ejecute estos comandos para que su entorno chroot esté totalmente listo para su uso: export HOME=/root export LC_ALL=C
Si no ha instalado los archivos .deb
para las versiones de 64 bits de dpkg
y apt
, hágalo ahora. Si los instaló pero había errores de configuración, ejecute dpkg --configure -a
para corregirlos. (Esperemos que funcione... puede que sea mejor esperar a intentar instalarlos hasta que esté en el entorno de CD en vivo, en caso de que instalar dpkg
de 64 bits mientras arranca en el sistema instalado deje dpkg
en un estado inutilizable).
Con las versiones de 64 bits de dpkg
y apt
instaladas, asumiendo que instalarán automáticamente paquetes de 64 bits, ahora puede eliminar todos sus núcleos de 32 bits e instalar un núcleo de 64 bits. Para eliminar los núcleos de 32 bits, ejecute dpkg -l | grep linux-
. Esto lista los paquetes instalados que empiezan por linux-
. Está más específicamente interesado en paquetes que empiecen por linux-generic
, linux-image
, linux-server
, y/o linux-headers
. Elimine estos archivos con apt-get purge ...
donde ...
se sustituye por una lista separada por espacios de los paquetes que está eliminando.
Ahora reinstale los paquetes que ha eliminado. (En realidad, para los paquetes que contienen números de versión en el nombre del paquete, como por ejemplo linux-image-3.0.0-13-generic
, sólo necesita instalar los nombres de los paquetes con la última versión). Para ello, ejecute apt-get install ...
donde ...
se sustituye por una lista separada por espacios de los paquetes que está instalando.
Actualiza la configuración del gestor de arranque, desmonta algunos dispositivos y abandona el chroot: update-grub umount /proc || umount -lf /proc umount /sys umount /dev/pts salir de sudo umount mnt/dev
Si ejecutó sudo cp /mnt/etc/resolv.conf /mnt/etc/resolv.conf.old
y no falló, ejecute ahora sudo cp /mnt/etc/resolv.conf.old /mnt/etc/resolv.conf
.
Si ejecutó sudo cp /mnt/etc/hosts /mnt/etc/hosts.old
y no falló, entonces ahora ejecute sudo cp /mnt/etc/hosts.old /mnt/etc/hosts
.
Si su sistema instalado tiene una partición /boot
separada, desmóntela: sudo umount /mnt/boot
.
Desmonte la partición /
de su sistema instalado: sudo umount /mnt
.
Salga de la ventana Terminal (ejecute exit
), reinicie (o apague) el sistema live CD y arranque en el sistema instalado.
uname -m
debería indicar que la arquitectura es x86_64
).
Puede que haya paquetes adicionales que necesite instalar, como ia32_libs
y/o la versión de 64 bits de libc6
, para que esto funcione. Para algunos de ellos, puede que se le informe de que los necesita cuando intente instalar la versión de 64 bits de dpkg
y/o apt
. Para otros, puede que no se le informe.
(Las instrucciones anteriores para chrootear y operar en el entorno chrooteado se basan en gran parte en este procedimiento relacionado pero diferente y también en algunos posts míos de Launchpad Answers, especialmente #6 aquí y #6 aquí. Y un agradecimiento especial a Caesium por señalar que los ejecutables dpkg
y apt
de 64 bits no se ejecutarán en un sistema con un kernel de 32 bits).Buena pregunta. He buscado un poco y, aparte de la historia de usuario que citas, no encuentro ningún detalle sobre cómo hacerlo. Toda la documentación indica que sólo sirve para ejecutar aplicaciones de 32 bits en un sistema operativo de 64 bits.
Sin embargo, si estás dispuesto a experimentar, podrías probar lo siguiente (derivado de mi enlace en [1])
echo foreign-architecture amd64 | sudo tee /etc/dpkg/dpkg.cfg.d/multiarch
sudo apt-get install linux-image:amd64
Creo que tendrás que empezar con un kernel amd64, ya que el de 32 bits no podrá ejecutar ningún binario de 64 bits. Sin embargo, el de 64 bits debería ejecutar binarios de 32 bits (si ia32-libs está instalado).
Si tienes el kernel de 64 bits instalado y arrancado, puedes ir desde ahí para instalar apt:amd64, luego seguir la historia del usuario como se citó anteriormente, ubuntu-minimal, ubuntu-desktop, etc.
Después de apt:amd64 está instalado, creo que se puede quitar la línea de arquitectura extranjera, ya que esencialmente han cambiado en ese punto.
Descargo de responsabilidad: No tengo ningún sistema de 32 bits para probar, así que todo esto son conjeturas. Buena suerte.