« FON + Menéame = Fonera GRATISTitanio para afeitar »

HOWTO: Ubuntu Server desde Debian desde Mandriva

Mandriva a Debian a UbuntuLa situación:

  • servidor con Mandriva 2006
  • root sobre RAID por soft auto-detectado desde initrd
  • sin disquetera ni lector de CD ni DVD

El objetivo:

  • instalar Ubuntu Server

Tras preguntar a algunas personas he llegado a la conclusión de que lo mejor es hacerlo... pasando de opiniones negativas. Que si no se puede, que si es imposible, que si blablabla... bla. En fin.

La idea que se me había ocurrido era simple: copy+paste de un disco root a pelo. Pero claro, no tenía ninguno a mano de Ubuntu Server. Lo que sí tenía a mano eran las imágenes de root de UML. Se me había ocurrido que no debería ser muy complicado pegar una de esas en una partición, actualizar a Ubuntu aprovechando que está basada en Debian, apuntarle el arranque, y a correr.

Y así es, no es muy difícil. Sólo hay que tener en cuenta algunos detalles del arranque, como por ejemplo que el initrd de Ubuntu necesita obligatoriamente que se le diga el root en la línea de arranque del kernel (en Mandriva esto no hace falta). Detalles.

Aparte de eso, la instalación es bastante sencilla. Sólo hay que:

  1. arrancar en Mandriva
  2. descargar la imágen de root de UML de Debian
  3. descomprimirla y pegarla en alguna partición
  4. descargar una imágen de Ubuntu (la Server ocupa menos)
  5. montar la imágen del CD en loop dentro de la root de Debian
  6. entrar con chroot
  7. cambiar los repositorios y hacerle un dist-upgrade
  8. instalar kernel y configurar lilo/grub
  9. cambiar algunos detalles más
  10. desmontar todo, y reiniciar con el nuevo sistema

La utilidad de todo esto es la de poder migrar un servidor entero de forma "transparente". Esto es, se puede configurar todo lo que haga falta en el nuevo sistema, apuntar las particiones/directorios de datos correspondientes, reiniciar... y voilá, dejarlo funcionando a la primera :)

Y como aquí somos buenos y amables, a continuación va un bonito how-to para hacer todo esto paso a paso.

Follow up:

Lo primero es cargarse el mirror del RAID:

mdadm -f /dev/md0 /dev/hdb1
mdadm -r /dev/md0 /dev/hdb1

Una vez hecho, convertir las segunda partición de "raid auto-detect" a "linux fs":

fdisk /dev/hdb1
> t 1 83

Bajarse la imágen de CD de Ubuntu Server:

proz ftp://ftp.rediris.es/sites/releases.ubuntu.com/releases/6.06/ubuntu-6.06.1-server-i386.iso

Descargar la imágen de UML de Debian:

wget http://surfnet.dl.sourceforge.net/sourceforge/user-mode-linux/Debian-3.0r0.ext2.bz2

Descomprimir la imágen de UML a la particion. ADVERTENCIA: necesita 63MB o más.

bunzip2 -c Debian-3.0r0.ext2.bz2 > /dev/hdb1

Ajustar el tamaño de la imágen descomprimida para que ocupe toda la partición, y convertirla en EXT3 (con journaling):

e2fsck -f /dev/hdb1
resize2fs /dev/hdb1
tune2fs -j /dev/hdb1

Crear un directorio en mnt, montar la partición, montar la ISO de Ubuntu en loop, montar boot, y entrar con chroot en la Debian:

cd /mnt
mkdir 1
mount /dev/hdb1 1
cd 1
mount -o loop /mnt/ubuntu-6.06.1-server-i386.iso cdrom
mount -o bind /boot boot
chroot .

Toca añadir los repositorios del CD:

apt-cdrom --no-mount -d=/cdrom add

Para editar mejor el sources.list, salimos a Mandriva para usar vi (vale, aquí cada uno podría usar el editor que más rabia le dé):

exit
 
vi etc/apt/sources.list

Los cambios a realizar en etc/apt/sources.list son muy simples, sólo comentar los repositorios de Debian:

deb cdrom:[Ubuntu-Server 6.06.1 _Dapper Drake_ - Release i386 (20060807.1)]/ unstable main main/debian-installer restricted restricted/debian-installer
#deb http://http.us.debian.org/debian stable main contrib non-free
#deb http://non-us.debian.org/debian-non-US stable/non-US main contrib non-free
#deb http://security.debian.org stable/updates main contrib non-free

NOTA: después de cada apt-get es posible que se desmonte el loop de la iso de Ubuntu, por lo que habrá que salir del chroot, volver a montarla, y volver a entrar.

Volvemos otra vez a Debian... y aquí es donde viene el lío: para el dist-upgrade hay que desinstalar e2fsprogs:

chroot .
 
apt-get remove e2fsprogs
> Yes, do as I say!
< Do you want to upgrade glibc now? [Y/n]
> Y

Pero claro, al hacer eso... ¡no podremos usar apt-get! Faltará update-rc.d, y eso es un problema. Por suerte google aporta la solución:

ln -s /bin/false /tmp/update-rc.d
export PATH=$PATH:/tmp
apt-get install sysv-rc

Una vez solucionado este inconveniente, viene otro. Falta sed:

apt-get install sed

Ahora ya sí, podemos darle al dist-upgrade:

apt-get dist-upgrade
> Y
> Dialog
> medium
> No
< May I update your system? [Y/n]
> Y
< Configuration file `/etc/securetty'
< *** securetty (Y/I/N/O/D/Z) [default=N] ?
> I
< Should man and mandb be installed 'setuid man'?
> No
 
| LILO configuration
| It seems to be your first LILO installation. It is absolutely necessary to run liloconfig(8) when you complete this
| process and execute /sbin/lilo after this.
| LILO won't work if you don't do this.

Bueno, un recordatorio sobre LILO... claro, habrá que cambiarlo, pero primero volvamos a instalar e2fsprogs:

apt-get install e2fsprogs

Sí... era broma, en realidad ya debería haber estado instalado con el dist-upgrade. Pero no es mala idea asegurarse, ¿verdad? ;)

Lo siguiente es instalar Ubuntu en sí, y para no volverse loco con los avisos de paquete con firma no reconocida, las claves de firma también:

apt-get install ubuntu-keyring
apt-get install ubuntu-keyring-udeb
apt-get install ubuntu-standard
< ??? RAID
> Yes
< *** dselect.cfg (Y/I/N/O/D/Z) [default=N] ?
> I
< Participate in the Ubuntu Package Popularity Contest? "dpkg-reconfigure popularity-contest"
> Yes

ADVERTENCIA: el siguiente paso es opcional.

En caso de no haber montado el boot, o de querer sacar su contenido afuera para manejarlo mejor, y alguna cosa más, se puede usar una secuencia como esta:

exit
mkdir boot2
cp -Rp boot/* boot/
mv boot boot_
mkdir boot
mount -o bind /boot boot
cp /etc/lilo.conf etc/
mount -t proc none proc
chroot .

Úsese bajo la propia responsabilidad.

Pero volvamos a la instalación en sí: el kernel.

mkdir /root/tmp
 
apt-get install linux-image-386
> Y
< Install these packages without verification [y/N]?
> Y
 
< You are attempting to install an initrd kernel image (version 2.6.15-26-386)
< This will not work unless you have configured your boot loader to use
< initrd. (An initrd image is a kernel image that expects to use an INITial
< Ram Disk to mount a minimal root file system into RAM and use that for
< booting).
<
< As a reminder, in order to configure LILO, you need
< to add an 'initrd=/initrd.img' to the image=/vmlinuz
< stanza of your /etc/lilo.conf
<  
< I repeat, You need to configure your boot loader -- please read your
< bootloader documentation for details on how to add initrd images.
<  
< If you have already done so, and you wish to get rid of this message,
< please put
< "do_initrd = Yes"
< in /etc/kernel-img.conf. Note that this is optional, but if you do not,
< you will continue to see this message whenever you install a kernel
< image using initrd.
< Do you want to stop now? [Y/n]
> n
 
< Setting up linux-image-2.6.15-26-386 (2.6.15-26.46) ...
 
< Do you want me to create a link from initrd.img to /boot/initrd.img-2.6.15-26-386?[Yn]
> N
 
< A new kernel image has been installed at /boot/vmlinuz-2.6.15-26-386
< (Size: 1382kB)
<
< Initial rootdisk image: /boot/initrd.img-2.6.15-26-386 (Size: 6595kB)
<
< Do you wish to set up Linux to boot from the hard disk? [Yes]
> N

Bueno, no es malo recordar y volver a recordar esas cositas, ¿no? ;) Desde luego el lilo.conf tendrá que salir de algún lado en la Debian... digo, Ubuntu.

Habrá que encargarse de eso luego, a gusto de cada uno. Lo primero es poder arrancar con ella. Salimos del chroot, y editamos el lilo.conf del sistema anfitrión (Mandriva):

exit
vi /etc/lilo.conf

Hay que añadirle una línea parecida a esta:

image=/boot/vmlinuz-2.6.15-26-386
label="2615-26_hdb1"
root=/dev/hdb1
initrd=/boot/initrd.img-2.6.15-26-386
append="acpi=ht root=/dev/hdb1"

RECORDAR: el initrd de Ubuntu comprueba el parámetro "root=" de la línea del kernel. ¿Que por qué no detecta el "root=" de LILO directamente?... pues buena pregunta, pero no lo hace.

Una vez cambiado, ejecutamos lilo y volvermos al chroot:

lilo
chroot .

Ahora toca asignar las unidades.

vi etc/fstab

Lo mínimo es ponerla como root a ella misma:


/dev/hdb1 / ext3 defaults 0 0
proc /proc proc defaults 0 0

Ahora, sólo para asegurarnos de que está todo metido, el meta-paquete de linux:

apt-get install linux-386

OPCIONAL: como una comodidad para ver ficheros, podemos instalar less:

apt-get install less

OPCIONAL: para tener terminales interactivos en consola local, también es buena idea editar inittab:

vi /etc/inittab

(usar editor a gusto de cada uno, desde dentro o fuera del chrooot como sea)

Necesitaríamos poner algo como:

0:2345:respawn:/sbin/getty 38400 ttys/0
1:2345:respawn:/sbin/getty 38400 ttys/2
2:2345:respawn:/sbin/getty 38400 ttys/3
c:2345:respawn:/sbin/getty 38400 serial/0

0:2345:respawn:/sbin/getty 38400 tty0
2:23:respawn:/sbin/getty 38400 tty2
3:23:respawn:/sbin/getty 38400 tty3
4:23:respawn:/sbin/getty 38400 tty4
5:23:respawn:/sbin/getty 38400 tty5
6:23:respawn:/sbin/getty 38400 tty6

Y ya para terminar, salir, desmontar... y comprobar el sistema de ficheros "sólo por si las moscas":

exit
cat /proc/mounts | cut -d " " -f2 | grep /mnt/1 | xargs umount
cd ..
# kill whatever may prevent umount
lsof -n 2>/dev/null | grep /mnt/1/ | sed "s/  */ /g" | cut -d " " -f 2 | xargs kill -9
umount 1
 
# just to be sure...
e2fsck /dev/hdb1 -f

Si todo ha ido bien, FELICIDADES, ya estará instalado el Ubuntu en versión básica con un mínimo de down-time. Sólo hay que meterse en chroot, instalar y configuar lo que haga falta, y reiniciar sin que apenas se dé cuenta nadie.

Si no... bueno, a mí me ha funcionado, pero no puedo prometer que le funcione a nadie. Si quieres, puedes ponerte en contacto conmigo para ver si se puede hacer algo (nota: a partir de 1h, cobro).

Para más detalles sobre la instalación de Ubuntu, se puede consultar esta guía, Ubuntu-es o simplemente Google.

APÉNDICE: secuencias adicionales

Mientras estaba probando cosas, me crucé también con estas otras secuencias.

Re-crear el initrd:

/usr/sbin/mkinitramfs -o /boot/initrd.img-2.6.15-26-386 2.6.15-26-38

Re-crear la partición:

mount /dev/hdb1 /mnt/1
cd /mnt/1
tar c . > ../tar1
cd ..
umount 1
mkfs.ext3 /dev/hdb1
cd /mnt/1
tar x . < ../tar1
cd ..
umount 1

Trackback address for this post

This is a captcha-picture. It is used to prevent mass-access by robots.
Please enter the characters from the image above. (case insensitive)

No feedback yet

Deja un comentario


Your email address will not be revealed on this site.

Your URL will be displayed.
(Line breaks become <br />)
(Name, email & website)
(Allow users to contact you through a message form (your email will not be revealed.)

¿Cuántos GATOS hay en la foto?

(si fallas, puedes volver a intentarlo... al menos por ahora)

Jaroslaw Filiochowski
jar<QUIT@ESTO>fil@gmail.com
(e-mail, jabber, gtalk)
Desde: Bilbao, España

Noviembre 2008
Lun Mar Mié Jue Vie Sáb Dom
 << <   > >>
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Ordenar por:

Yo NO veo TV

Yo NO veo TV
00 horas de TV a la semana
image

powered by

powered by b2evolution free blog software

+

Gentoo
Gentoo


photos powered by

Foto de una cámara de fotos difital Nikon Coolpix 7600
Nikon Coolpix 7600

+

Foto de un móvil Nokia 3650 con logo personalizado
Nokia 3650

Por cortesía de NokiaGame 2002


Creative Commons License
Esta obra está bajo una licencia Creative Commons salvo donde se especifique explícitamente otra licencia.


IBSN: 3-3718-9164-1