| « FON + Menéame = Fonera GRATIS | Titanio para afeitar » |
La situación:
El objetivo:
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:
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
| 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 |
powered by
+
photos powered by

Nikon Coolpix 7600
+

Nokia 3650
Por cortesía de NokiaGame 2002

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