viernes, 7 de marzo de 2008

* CLONANDO DEBIAN GNU/LINUX A MI MANERA

En mi trabajo de Administrador de Servidores, en varias ocasiones me he visto en la necesidad de instalar un Servidor ( de Correo, Web, Dns, etc ...) sin disponer de mucho tiempo para ello.

En los servidores tengo bastantes paquetes de software instalados, y con un gran número de configuraciones que he tenido que ir ajustando para obtener las funcionalidades necesarias, una buena estabilidad, disponibildad, seguridad, y un rendimiento adecuado. Por mencionar algunos de los software a instalar y configurar en ellos tenemos: postfix+tls+sasl+mysql+pcre,maildropfilter, amavis-new, spamassassin+pyzor+razor+dcc+spf, clamav+clam-daemon+freshclam, courier+pop+pop-ssl+imap+imap-ssl+authdaemon+authmysql, mysql-server, heartbeat, iptables, etc ...

Estas máquinas están dentro de una estructura de cluster, es decir, son nodos activos que se respaldan entre ellos de manera que si uno sufre una falla y deja de funcionar otro toma su lugar automáticamente en cuestión de segundos. Este tipo de estructura me permite tener un a buena disponibildad de servicio y me deja un buen tiempo para reparar o reemplazar la máquina que presentó fallas, sin embargo mientras más rápido la reinstale menos sobrecarga de trabajo tendré sobre el servidor que asimiló la carga propia más la del nodo caído.

En fin para levantar un nuevo servidor rápidamente, en caso de emergencia, sin perder mucho tiempo en realizar instalaciones de paquetes y evitarse un sin número de configuraciones requeridas para dejarlo funcionando igual que el resto de los nodos, yo he optado varias veces por hacer una clonación del S.O. completo.

El procedimiento que describo a continuación yo lo he probado para clonar máquinas de distinto hardware con Debian Sarge y Etch tanto en servidores como PCs de escritorio con entorno gráfico icewm, gnome, kde, xfce4, etc ...

Las herraminetas necesarias para poder realizar la clonación son:

- CD de instalación de debian (preferible de tipo net-install)
- Live CD ( yo use knoppix 5.1.1)

Aquí va el procedimiento que he usado para clonar debian:

1) Bajar Debian, para este cometido yo he usado cd's instaladores de tipo net-install de los cuales he bajado su imagen iso desde la página oficial de debian aquí ( hay que bajar el que termina en netinst.iso ) . Es conveniente que el sistema debian a instalar en la máquina destino (host2) sea de la misma rama (sarge, etch, lenny, ...) que el que está instalado en la máquina a clonar (host1), aunque esto no es obligatorio pero por simplicidad se asumirán de la misma rama .

2) Quemar la iso de debian usando k3b u otro software de grabación de cd.

3) Hacer que el host2 inicie desde el cd de instalación ( aquí usé un cd de Etch Net Install )

4) Dar enter e iniciar la instalación.

5) En los pasos de instalación sgtes. seteará el Idioma (Spanish), País (Chile), mapa de teclado
(Latinoamericano) según donde Ud. viva.

6) Configurar la red via dhcp si es que existe un servidor de este tipo dentro de su red, en caso contrario configure manualmente la dirección ip estática y el resto de datos requeridos (network, máscara, broadcast, gateway, servidores dns, dominio y nombre del host ). Es importante que la red quede bien configurada de manera que cuando se tenga que instalar un kernel más actualizado pueda bajarlo sin problemas.

7) Hacer el particionado manual si es que desea dejar las particiones similares a como están definidas en el host1. Fijarse que el tamaño de las particiones del host2 sean de un tamaño mayor que el espacio ocupado en el host1 en su directorio análogo o se puede quedar sin espacio al hacer la clonación. No es obligatorio hacer el particionado manual también podría ser automático si es que no le importa que las particiones queden similares en ambos hosts. Es importante que tenga cuidado si tiene una partición con datos u otro S.O. instalado, ya que de proceder en forma incorrecta podría ocurrir que ésta se formateara accidentalmente y perder toda la información contenida.

8) Fijar Zona Horaria (Santiago de Chile) según corresponda.

9) Ingresar la clave de superusuario que Ud. desee.

10) No es necesario crear una cuenta de usuario normal.

11) Configurar uno o más repositorios según Ud. estime conveniente para asegurar que más adelante pueda bajar el paquete de kernel que se requiera.

12) En la etapa de instalación en que corresponde indicar el software a instalar, no hay que indicar nada y si ya viene algo seleccionado, quítelo de manera que no pierda tiempo instalando paquetes que no va a ocupar nunca, ya que cuando el proceso de clonación haya terminado el host2 quedará con los mismos paquetes que el host1.

13) Cuando le pregunte si desea instalar grub en el registro principal de arranque (Master Boot Record ) diga que si. Si tiene otro S.O. operativo instalado en este equipo el instalador le informará si lo a detectado y lo agregará a la lista en el gestor de booteo (grub), de manera que Ud. pueda seleccionar con cual de los sistemas desea iniciar su PC. Si Ud. tiene otro S.O. instalado y el instalador no se lo informa, es probable que sólo pueda bootear con el debian que acaba de instalar, pero esto se puede arreglar fácilmente editando el archivo menu.lst del paquete grub.

14) Aquí se termina la instalación mínima y se reinicia el host2.

15) Luego de reiniciarse el host2 ingrese root y la password fijada en la instalación.

16) Si deseamos hacer una clonación via red, nos podemos instalar el paquete ssh (openssh-server, openssh-client) el cual trae consigo el comando scp que permite transportar archivos de forma muy simple entre dos host remotos: apt-get install ssh

17) Ingrese (via ssh o localmente) al host1 desde una terminal, como superusuario.

18) Ejecute: df -h y luego du -sh /* y con la información entregada por estos dos comandos vea el espacio ocupado en cada partición y en cada una de los carpetas de la raiz del sistema. Si puede eliminar algunas cosas que tenga demás en su host1 hágalo, y piense si hay subdirectorios ( de respaldos de archivos u otra información) o archivos que de desee excluir de la clonación y anótelos.

19) Ejecute apt-get clean si lo desea, esto borrará paquetes instaladores que quedaron almacenados en /var/cache/apt/archives cuando se instalaron todos los software que están en su debian en el host1. Esto disminuirá la cantidad de información a clonar y por tanto hará un tanto más rápido este proceso, además ocupará menos espacio en le host2.

20) En este paso construirá una imagen comprimida del host1. Dentro de ésta debe incluir los directorios que están en la raíz (puede listarlos haciendo ls / ), pero excluirá aquellos que no nos sirven de nada y solo ocuparían espacio en la imagen. Los directorios que yo excluyo siempre son: /dev /proc /lost+found /sys /srv /tmp y el directorio donde estoy creando la imagen. Además de estos directorios puede excluir otros más que no desee incluir en la imagen, por ejemplo, alguna carpeta en la que Ud. guarde respaldos de archivos muy grandes, u otra carpeta ( ej: /mnt/hdc5, /mnt/respaldos-mp3s,/home/../respaldos-peliculas ) en la que tenga montada una partición que no le interesa llevarse al host2, o alguna carpeta o archivo que contenga información privada o confidencial . Se debe tener mucho cuidado en excluir algún subdirectorio donde se encuentren guardados archivos binarios, librerias, o configuraciones importantes para el buen funcionamiento de su sistema.

Si Ud. piensa compartir esta imagen con otras personas no debe olvidar que dentro de ella puede haber datos privados como la password del root y del resto de usuarios de su equipo, las claves públicas y privadas del ssh, las password de algunos software instalados en su máquina. Si es el caso, asegúrese de cambiar la clave del root y de los usuarios del sistema por otras provisorias. Ej:
Para cambiar la clave del root ejecute : #passwd
Para cambiar la clave de un usuario juanito: #passwd juanito

También, asegúrese de excluir los directorios /etc/ssh /root/.ssh /home/juanito/.ssh, /home/pedrito/.ssh (igual para todos los usuarios que están en el /home). Si está clonando un PC de escritorio con entorno gráfico asegúrese de cambiar las claves de su software de correo electrónico ( si es que las guarda) por otras provisorias. Lo mismo para otros tipos de software de entorno gráfico que guarden claves. Si tiene algún servidor ftp, web, de base de datos o de otro tipo que almacene claves en algún archivo o tabla, debe cambiarlas o excluir el archivo o directorio en donde se encuentran. Insisto, en caso de compartir la imagen que creará de su host1 debe saber muy bien lo que está haciendo con el tema de las claves e información privada.

Entonces, para crear la imagen ejecute algo como esto:
(suponemos que la imagen se guardará en el dir. '/var/clon-debian' (Ud. puede usar otro dir.), asegúrese de que este dir. esté en una partición que tenga el espacio libre suficiente para albergar el archivo de imagen)

#mkdir /var/clon-debian
#tar -cvzf /var/clon-debian/clon-debian$(cat /etc/debian_version)-$(uname -s)$(uname -r).tar.gz / --exclude='/dev' --exclude='/lost+found' --exclude='/proc' --exclude='/srv' --exclude='/sys' --exclude=='/tmp' --exclude='/etc/ssh' --exclude='/root/.ssh' --exclude='/home/juanito/.ssh' --exclude='/mnt/respaldos-peliculas' --exclude='/var/clon-debian' > /var/clon-debian/clon-debian.log &


Al ejecutar este comando arrojará en pantalla mensajes como:

tar: Removing leading `/' from member names
tar: Removing leading `/' from hard link targets

O algunos similares a este: tar: /var/log/syslog: el fichero cambio mientras se estaba leyendo
Ignore este tipo de mensajes.
Una vez que ya ha creado la imagen y en el caso de que haya puesto algunas password provisorias, puede modificarlas nuevamente y dejar las originales para que le host1 quede tal como estaba.

21) Ahora, debe llevar el archivo de imagen al host2, puede hacerlo de distintas formas:

a) via el comando scp. ej: #scp clon-debian-4.0-Linux2.6.18-5-686.tar.gz root@host2:/root

b) via cd/dvd, si dispone de un copiador de dvd/cd en el host1 y lector en el host2. Si la imagén es más grande que un cd (700MB) puedes usar split para dividirla en trozos de 700MB(=734003200 bytes) cada uno. ej: split -b 734003200 clon-debian-4.0-Linux2.6.18-5-686.tar.gz clon-debian-4.0-Linux2.6.18-5-686-

Hay muchos tutoriales en internet que explican como crear una .iso de datos en el disco duro y luego pasarla a un cd/dvd via consola. Si tiene entorno gráfico instalado en el host1 puede usar k3b u otro software quemador de cd/dvd.

Y luego, una vez en el host2, se puede unir los trozos usando cat. ej:
cat clon-debian-4.0-Linux2.6.18-5-686-aa clon-debian-4.0-Linux2.6.18-5-686-ab clon-debian-4.0-Linux2.6.18-5-686-ac > clon-debian-4.0-Linux2.6.18-5-686.tar.gz

c) Via pendrive, si Ud. dispone de este tipo de dispositivo de una capacidad de almacenamiento lo suficientemente grande para contener el archivo de imagen creado.

d) Etc ...

22) El archivo de imagen ya está en el host2, ahora vaya a la raíz del sistema (siempre en el host2), cree una carpeta 'raiz-nueva' , mueva el archivo de imagen dentro de ella y proceda a descomprimirlo. Ej:
#cd /
#mkdir raiz-nueva
#mv /root/clon-debian-4.0-Linux2.6.18-5-686.tar.gz /raiz-nueva/clon-debian-4.0-Linux2.6.18-5-686.tar.gz

#cd /raiz-nueva
#tar -xzvf clon-debian-4.0-Linux2.6.18-5-686.tar.gz > untar.log

23) Crear directorios que faltan

#mkdir proc sys srv tmp lost+found
#chmod -Rf ugo+rwx tmp
#chmod -Rf o+t tmp
#chmod go-rwx lost+found
#cp -a /dev /raiz-nueva/dev


24) Instalar la version del kernel más nueva que hay en la rama de debian que está usando (etch) y que vaya de acuerdo con la nueva arquitectura del host2:

Ej:

#apt-get update
#apt-get install linux-image | more ( le mostrará un listado de los kernel que puede instalar)
#apt-get install linux-image-2.6.18-5-k7 ( supuse que el host2 era un amd k7, Ud. use el que le correponda a su procesador )
(nota: en sarge y anteriores los paquetes de kernel linux se llaman kernel-image....)
Reiniciamos para verificar que el nuevo kernel-quedo bien instalado.
25) Hacer lo mismo pero dentro del sistema que tiene en /raiz-nueva:

#chroot /raiz-nueva
#apt-get update
#apt-get install linux-image-2.6.18-5-k7 ( como es de la misma rama y usará el mismo hardware se instala el mismo kernel)
#exit


26) Como ya se sabe desde el paso 24 que el booteo del debian mínimo instalado con el nuevo kernel funciona correctamente y el sistema inicia sin problemas, se puede ir a la segura reemplazando la carpeta /raiz-nueva/boot por la /boot :
Ej:


#cd /raiz-nueva
#mv boot boot-bak
#cp -a /boot /raiz-nueva/boot


27) Inserte un live cd en el host2 (knoppix) y luego reinicie (shutdown -r now)

28) Cuando el equipo inicie con knoppix y aparezca boot: escriba knoppix 2 (y luego dele enter)

29) Cuando termine de iniciar ingrese a la consola como root y haga lo sgte.:


#su
#cd /mnt
#mount hda5 (suponiendo que esta será la partición raíz de su sistema)
#cd hda5
#mkdir raiz-old
#mv * raiz-old ( arrojará un mensaje de que no puede mover raiz-old a raiz-old, no lo tome en cuenta )
#mv /mnt/hda5/raiz-old/raiz-nueva/* /mnt/hda5


30) Actualizar el archivo /mnt/hda5/etc/fstab acuerdo a su nueva estructura de particiones:

#cd /mnt/hda5/etc
#mv ftsab fstab-bak
#cp -a /mnt/hda5/raiz-old/etc/fstab /mnt/hda5/fstab

Si en fstab aparece una o más particiones de disco duro (además de la raíz) montada en un directorio que no es la raíz / , por ejemplo algo como esto:
"/dev/hdc6 /home ext3 .... "
"/dev/hdc7 /var ext3 .... "
En este caso Ud. debe montar las particiones y mover todos los datos de los directorios que aparecen en la línea correspondiente de fstab a estas particiones. Ej:
(según ej. anterior)
#cd /mnt
#mount hdc6
#mv /mnt/hdc5/home/* /mnt/hdc6
#mount hdc7
#mv /mnt/hdc5/var/* /mnt/hdc7


31) Setear la nueva configuración de red del sistema si es necesario. Este paso no será necesario en el caso de que Ud. este clonado para reemplazar la maquina host1 por hots2, es decir, si va a usar la misma dirección ip que tení­a el host original en la red en que se encuentra. Obviamente, este paso tampoco será necesario si la nueva máquina host2 no está dentro de ninguna red. Para configurar la red debe editar o crear si es que no existe el archivo /mnt/hda5/etc/network/interfaces

auto lo iface lo inet loopback
# This entry was created during the Debian installation
# (network, broadcast and gateway are optional)
auto eth0
iface eth0 inet static
address 10.0.0.5
netmask 255.255.255.0
network 10.0.0.0
broadcast 10.0.0.255
gateway 10.0.0.1

Debe cambiar estos datos por los de su red. Si la red usa dhcp se cambia la palabra static por dhcp y se borra el resto de las lineas (address,netmask,network,broadcast y gateway se borran). También debemos agregar los servidores DNS si fuese necesario, en el archivo /mnt/hda5/etc/resolv.conf. Debería quedar como sigue:

search midominio.com
nameserver 10.0.0.2 (aqui ponga el dns primario que corresponda a su red)
nameserver 10.0.0.3 (aqui ponga el dns secundario que corresponda a su red)

Puede que Ud. desee cambiar el nombre de host en el archivo /mnt/hda5/etc/hostname
También deberá cambiar los datos de su nuevo (nombre e ip) host en el archivo /mnt/hda5/etc/hosts


32) Apague su equipo desde knoppix y retire el cd cuando este mueva la bandeja del cdrom hacia fuera, y finalmente encienda el PC para que inicie con el nuevo sistema clonado, prácticamente idéntico al original.

33) En debian Etch o superior, es probable que, la red no quede funcionando bien, pero esto se puede arreglar editando el archivo /etc/udev/rules.d/z25_persistent-net-rules. Fíjese, en el archivo, lo que hizo udev fue mantener el nombre eth0 asociado a la mac de la tarjeta antigua y a la nueva le puso eth1, esto es en el caso de que el equipo origen(host1) tenía una sola tarjeta. Lo que Ud. debe hacer es borrar las líneas en donde aparezcan las mac de las tarjetas de red del host original y dejar solamente las lineas correspondientes a la o las mac de las tarjetas actuales, y en esas lineas modificar el valor de NAME de acuerdo al nombre (eth0, eth1, eth2, etc) que desee para cada tarjeta. ¿ Cómo averiguar cuales son las mac de sus tarjetas actuales? Ejecute algo parecido a esto, ej:
#echo -e "eth0\neth1\neth2\neth3\neth4" | sed "s/^/ifconfig /" | sh 2>/dev/null | grep "^eth"
En el comando anterior las eth0 van de 0 hasta 4 donde cuatro corresponde a la suma del número de tarjetas del host original más las del nuevo menos 1. Aquí se supuso que el host original tenía tres tarjetas de red y el nuevo 2 tarjetas ( 4=3+2-1).
En resumen, si su nuevo host tuviese dos tarjetas de red el archivo debería quedar parecido a esto:

# This file was automatically generated by the /lib/udev/write_net_rules
# program, probably run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single line.
# MAC addresses must be written in lowercase.

# PCI device 0x1106:0x3106 (via-rhine)
#SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{address}=="00:1b:11:0b:8a:5f", NAME="eth0"

# PCI device 0x10ec:0x8139 (8139too)
#SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{address}=="00:50:ba:8c:11:00", NAME="eth1"

Finalmente debe reiniciar, y su nuevo Debian, clon del original, debería quedar funcionando sin problemas.

34) Detalles: si Ud. tenía ssh instalado en el host original y al crear la imagen excluyó el directorio /etc/ssh, haga lo sgte para que el cliente y servidor de ssh queden funcionado bien:

#apt-get install --reinstall openssh-client openssh-server ssh (no cambie el orden de los tres paquetes)

No olvide que puede borrar los directorios que quedaron demás en la raíz junto con el archivo de imagen si es que lo desea.

#rm -Rf /boot-bak
#rm -Rf /raiz-old
#rm -f /clon-debian-4.0-Linux2.6.18-5-686.tar.gz (o el que corresponda a su version de debian y a su kernel)


35) En el caso de que Ud. haya clonado un PC de escritorio es probable que no pueda iniciar la sesión gráfica debido a que el servidor X no reconoce la tarjeta de video de la nueva máquina, en este caso debe iniciar su equipo en modo recovery, ingresar la password del root y ejecutar:
#dpkg-reconfigure xserver-xorg
Con este comando podrá reconfigurar el servidor gráfico.

Espero que este procedimiento les funciones, lo que es a mi me ha dado muy buenos resultados, me he ahorrado bastante tiempo y trabajo.
En caso de cualquier consulta, comentario, o corrección escribir a cmunox@gmail.com .

Suerte ...

No hay comentarios: