En este artículo detallamos todo el proceso seguido para crear un Dominio Lógico apto para Debian Lenny, y a continuación instalarlo. Los Dominio Lógicos (LDoms) son el sistema de virtualización provisto en las versiones del chip Multi-Threading (CMT) de la arquitectura Sparc.
Cuidado: Este procedimiento incluye acciones sobre tablas de partición que pueden dejar, si no se siguen correctamente los pasos, inutilizado un disco virtual. Por favor, es necesario seguir los pasos con mucho cuidado
Para crear el dominio lógico, seguiremos los pasos habituales pero, una vez creado el disco virtual, debemos, después de hacer el bind, sobreeescribir la tabla de particiones con 512 bytes nulos. La razón es que en la versión de LDOMs que tenemos en Opensolaris 2009.06 sobreescribe las tablas al hacer bind con una VTOC de Sun que estropeará las particiones Linux del disco virtual.
Así pues, vamos con los pasos. A nuestro dominio de prueba le asignaremos 1 Gb de RAM, 1 thread como CPU y un disco virtual de 4 Gb. Empecemos:
global# ldm list-domain NAME STATE FLAGS CONS VCPU MEMORY UTIL UPTIME primary active -n-cv- SP 8 4G 0.2% 10m global# ldm add-domain debiandom global# ldm add-vcpu 1 debiandom global# ldm add-memory 1024m debiandom global# ldm add-vnet vnet1 primary-vsw0 debiandom global# mkfile 4G /export/ldomsvdisks/debian01.img global# ldm add-vdsdev /export/ldomsvdisks/debian01.img vol2@primary-vds0 global# ldm add-vdisk vdisk1 vol2@primary-vds0 debiamdom global# ldm bind debiandom
Una vez hecho el bind, escribimos 512 bytes nulos al principio del disco:
global# dd if=/dev/zero of=/export/ldomsvdisks/debian01.img conv=notrunc count=1
Por último, quitamos la variable auto-boot=true para que podamos manejar el arranque a nuestro antojo hasta que esté instalado:
global# ldm set-variable auto-boot\?=false debiandom
Ya tenemos el dominio listo, con un disco virtual de 4Gb. Procedemos a instalar Debian por red.
No podemos instalar Debian con CDROM de momento, así que lo haremos con la opción más básica (y compatible) de las instalaciones por red: con TFTP.
Tenemos que instalar y configurar, RARP y TFTP. Empecemos por TFTP, sirviendo el fichero boot.img de Debian Lenny para Sparc:
global# mkdir /tftpboot ; cd /tftpboot global# http://ftp.us.debian.org/debian/dists/lenny/main/installer-sparc/current/images/netboot/boot.img
Ahora creamos un link más en el /tftpboot que es dependiente de la dirección IP asignada a la instalación, que es 192.168.91.2. Es decir, haremos lo siguiente:
global# cd /tftpboot global# ln -sf boot.img `printf %02x 192 168 91 2|tr [:lower:] [:upper:]` global# ls -l ... lrwxrwxrwx 1 root root 15 Sep 18 19:42 C0A85B02 -> boot.img ...
Configuramos el servicio tftp:
global# echo "tftp dgram udp6 wait root /usr/sbin/in.tftpd in.tftpd -s /tftpboot" > ~/tftp.inetd.conf global# inetconv -i tftp.inetd.conf global# svcs -a|grep tftp online 19:05:45 svc:/network/tftp/udp6:default
Instalamos y configuramos RARP:
global# pkg install SUNWbs
Guardamos la dirección MAC de la máquina en /etc/ethers y activamos el rarp:
global# ldm ls -l debiandom |grep vnet1
vnet1 primary-vsw0@primary network@0 00:14:4f:fb:02:4a 1 1500
Por tanto, guardamos esta MAC en /etc/ethers y ponemos la dirección IP en el /etc/hosts. En nuestro caso:
global# echo "00:14:4f:fb:02:4a debiandom" > /etc/ethers global# echo "192.168.91.2 debiandom" >> /etc/hosts global# svcadm enable rarp
Además, si no hemos configurado aun NAT en el dominio de control, lo haremos para que nuestra Debian encuentre por red los restantes archivos. Por ejemplo, tendremos activada una IP en el switch virtual (que permitirá que nuestra Debian tenga un gateway predeterminado):
global# ifconfig vsw0 plumb ; ifconfig vsw0 192.168.91.1 netmask 255.255.255.0 up
Y añadiremos las líneas correspondientes para NAT a /etc/ipf/ipnat.conf:
map e1000g0 192.168.91.0/24 -> 0/32 proxy port ftp ftp/tcp map e1000g0 192.168.91.0/24 -> 0/32 portmap tcp/udp auto map e1000g0 192.168.91.0/24 -> 0/32
Recargamos ahora NAT:
global# ipnat -CF -f /etc/ipf/ipnat.conf
Iniciaremos el dominio lógico y nos conectaremos a la consola, ejecutando el boot net correspondiente:
global# ldm start debiandom ; telnet localhost 5000
Connecting to console "t2000-01" in group "t2000-01" ....
Press ~? for control options ..
~ ?
{0} ok boot net
Boot device: /virtual-devices@100/channel-devices@200/network@0 File and args:
Requesting Internet Address for 0:14:4f:fb:2:4a
/-
Nos saldrán los mensajes de arranque de Linux. Ahora comenzaremos una instalación de Debian Lenny por red, donde debemos:
IP address: 192.168.91.2 Netmask: 255.255.255.0 GW: 192.168.91.1 Nameserver: x.x.x.x (el que DNS de nuestro proveedor) Hostname: debian
Continuará el proceso normalmente. Recomendamos simplificarlo al máximo, para ello en la selección de paquetes (tasksel) no seleccionar nada, con lo que quedará en pocos minutos el sistema base. Cuando llegue al final del todo y nos pida que confirmemos reiniciar, no lo haremos aun, y pasaremos a la siguiente sección.
Como decimos, cuando el proceso de instalación llegue al final del todo y nos pida que confirmemos reiniciar, no lo haremos aun, ya que en el kernel que nos instalará no se incluirá el driver de disco, imprescindible. Además, por alguna razón las consolas virtuales de Debian no reciben las pulsaciones del teclado de la consola virtual de LDOMs, con lo que las desactivaremos si queremos entrar en el dominio (pendiente de corregir).
Lo que haremos aquí, por tanto, es salir al menú del Debian Installer y seleccionar ejecutar una shell.
Una vez en la shell, nos haremos chroot en el sistema recién instalado y seguiremos haciendo allá un par de cosas. En primer lugar, asegurarnos que el kernel cargará el driver sunvdc, imprescindible para que arranque nuestra Debian:
# chroot /target # echo "sunvdc" >> /etc/initramfs-tools/modules # update-initramfs -u -k all
En segundo lugar, cambiaremos la tabla /etc/inittab para que no cargue procesos getty en consolas virtuales y sí lo haga en la consola principal, /dev/console. Lo hacemos comentando las líneas y creando una nueva:
#1:2345:respawn:/sbin/getty 38400 tty1 1:2345:respawn:/sbin/getty 38400 console #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
Listo, ahora salimos de la shell (con exit, dos veces) y nos saldrá de nuevo el menú de instalación. Seleccionamos la opción Finish Installation. Nos volverá el boot prompt del controlador del dominio.
Lo mejor tras reiniciar es instalar openssh-server para que podamos administrarla por red desde el controlador de dominios, ya que el driver de consola no soporta las teclas de control de trabajos (CTRL-C, CTRL-Z, etc) y nos podríamos quedar bloqueados en la consola si lanzamos un comando sin fin (tan simple como un ping, por ejemplo).
Veamos un log del primer arranque:
Sun Fire T200, No Keyboard Copyright 2009 Sun Microsystems, Inc. All rights reserved. OpenBoot 4.30.3, 1024 MB memory available, Serial #83521591. Ethernet address 0:14:4f:fa:70:37, Host ID: 84fa7037. ok boot disk Boot device: /virtual-devices@100/channel-devices@200/disk@0 File and args: SILO Version 1.4.13 boot: Linux Allocated 8 Megs of memory at 0x40000000 for kernel Uncompressing image... Loaded kernel version 2.6.26 Loading initial ramdisk (6396281 bytes at 0x9000000 phys, 0x40C00000 virt)... - ... ... Starting OpenBSD Secure Shell server: sshd[697845.670757] NET: Registered protocol family 10 [697845.670757] NET: Registered protocol family 10 [697845.675673] lo: Disabled Privacy Extensions [697845.675673] lo: Disabled Privacy Extensions . Starting periodic command scheduler: crond. Debian GNU/Linux 5.0 debian console debian login: root Password: ... -bash: no job control in this shell debian:~# apt-get install openssh-server
Conviene tener lista la cuenta de usuario y el servidor openssh-server para continuar instalando desde una conexión ssh.
Para los curiosos, el pantallazo completo de arranque lo dejamos en esta página.