LiveCD con OpenBSD 4.0

Para la creación de un LiveCD basado en OpenBSD realizaremos los siguientes pasos con el propósito de evitar que nuestro sistema tenga información redundante o se haga un ciclo al momento de copiar todo el sistema.Trabajaremos sobre 2 máquinas, una que será llamada firewall y otra backup; para ello utilizaremos un Software de máquina virtual como VMware o QEMU.

Preparar el Sistema Base



Inicialmente realizaremos los siguientes pasos:

  1. Instalar el sistema base en los 2 equipos.
  2. Configurar el firewall tal y como deseemos que quede en el livecd con las aplicaciones y reglas predefinidas.
  3. Copiar todo el sistema a la máquina backup.
  4. Personalizar y compilar el kernel del livecd.

Una vez configurado OpenBSD en el firewall procederemos a enviar todo el contenido del sistema de archivos por medio de una tubería a la máquina backup de la siguiente forma.

# tar -pzcf – / | ssh root@backup dd of=/tmp/firewall.tgz
tar: Removing leading / from absolute path names in the archive

Si es la primera vez que nos conectamos a esta máquina se importará su clave del host a lo que responderemos Yes

The authenticity of host 'backup (192.168.100.4)' can't be established.
RSA key fingerprint is fc:13:93:db:1f:43:0e:9f:81:2c:5a:7d:30:d1:ac:c1.
Are you sure you want to continue connecting (yes/no)?
yes

A continuación simplemente escribiremos el password del usuario con el que deseamos conectarnos.
root@backup's password:

Con esto estamos empaquetando y enviado todo el sistema via ssh a la máquina backup y será almacenado en el directorio /tmp con el nombre de firewall.tgz

Una vez terminado tendremos algunos errores pero no se preocupen nada grave simplemente son archivos que se encuentran trabajando y por lo tanto no se puede hacer una copia exacta de ellos.

tar: Ustar cannot archive a socket /var/cron/tabs/.sock
tar: Ustar cannot archive a socket /var/empty/dev/log
tar: Ustar cannot archive a socket /dev/log


280052+5 records in
280053+1 records out
143387179 bytes transferred in 141.512 secs (1013248 bytes/sec)

Ahora estando en la máquina backup teclearemos lo siguiente para crear la carpeta y desempaquetar todo el sistema anterior.

Nota: Es importante saber si hay suficiente espacio o colocar otro directorio con mayor capacidad, para ver que particiones tienen suficiente espacio ejecutamos el siguiente comando:

# df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/wd0a 503M 38.1M 440M 8% /
/dev/wd0g 3.0G 2.0K 2.8G 0% /home
/dev/wd0f 3.0G 137M 2.7G 5% /tmp
/dev/wd0d 3.0G 504M 2.3G 18% /usr
/dev/wd0e 3.0G 4.4M 2.8G 0% /var

Aquí podremos observar que en /usr tenemos 2.3 Gb libres suficientes para nuestra tarea. Aunque podría ser cualquier otro directorio. A continuación realizamos los siguientes pasos:

# mkdir /usr/livecd
# tar -pzxf /tmp/firewall.tgz -C /usr/livecd/
# mkdir -p /usr/livecd/backups/dev; chmod 755 /usr/livecd/backups/dev

Borraremos información que podría ser sensitiva como el historial del shell o algun otro documento importante, también serán borradas claves de ssh, para que al iniciar el sistema cree una nueva de acuerdo al nuevo equipo en que se esta iniciando el livecd.

# rm -i /usr/livecd/root/{.history,.viminfo}
# rm -i /usr/livecd/home/*/{.history,.viminfo}
# rm -rf /usr/livecd/{src,ports}/*
# rm /usr/livecd/etc/ssh/*key*
# rm -rf /usr/livecd/var/tmp/*
# rm -rf /usr/livecd/tmp/*

También los logs serán eliminados
for log_file in `find /usr/livecd/var/log -type f`
do
echo "" > $log_file
done

Necesitamos hacer un respaldo de algunos directorios que serán utilizados después
cp -pR /usr/livecd/{var,etc,root,home} /usr/livecd/backups/
cp -pR /usr/livecd/dev/MAKEDEV /usr/livecd/backups/dev/

Instalación de cruchgen, crunchide y libstubs



En la máquina de backup procederemos a instalar algunos programas que serán necesarios para la construcción y compilación del nuevo LiveCD como son crunchgen y crunchide, así como la librería libstubs.Primero, debemos desempaquetar estos archivos ya que no se encuentran de manera preinstalada dentro de OpenBSD, En nuestro caso se encuentran en el CDROM, sin embargo puede descargarlo del sitio oficial de OpenBSD. ftp://ftp.openbsd.org/pub/OpenBSD/4.0

Teniendo listo nuestro CDROM de OpenBSD procederemos a montar la unidad y desempaquetar el archivo src.tar.gz y sys.tar.gz así:

# mount /dev/cd0a /mnt/
# cd /usr/src; tar xzf /mnt/4.0/i386/src.tar.gz
# tar zxf /mnt/4.0/i386/sys.tar.gz

Importante: Desmontar la unidad ya que posteriormente muestra un error en algun momento de la compilación.
# umount /mnt/

Ahora procederemos a la compilación de los paquetes anteriores.

# cd /usr/src/distrib/crunch/crunchgen/
# make; make install
cc -O2 -pipe -g -Wall -DMF_NAMES=’”Makefile.bsd-wrapper”,”Makefile”‘ -nostdinc -idirafter /usr/include -c crunchgen.c
sh /usr/src/distrib/crunch/crunchgen/mkskel.sh /usr/src/distrib/crunch/crunchgen/crunched_main.c > crunched_skel.c
cc -O2 -pipe -g -Wall -DMF_NAMES=’”Makefile.bsd-wrapper”,”Makefile”‘ -nostdinc -idirafter /usr/include -c crunched_skel.c
cc -o crunchgen crunchgen.o crunched_skel.o
nroff -Tascii -mandoc crunchgen.1 > crunchgen.cat1
install -c -s -o root -g bin -m 555 crunchgen /usr/bin/crunchgen
install -c -o root -g bin -m 444 crunchgen.cat1 /usr/share/man/cat1/crunchgen.0

# cd /usr/src/distrib/crunch/crunchide/

# make; make install
cc -O2 -pipe -nostdinc -idirafter /usr/include -c crunchide.c
cc -O2 -pipe -nostdinc -idirafter /usr/include -c elf_hide.c
cc -O2 -pipe -nostdinc -idirafter /usr/include -c ecoff_hide.c
cc -o crunchide crunchide.o elf_hide.o ecoff_hide.o
nroff -Tascii -mandoc crunchide.1 > crunchide.cat1
install -c -s -o root -g bin -m 555 crunchide /usr/bin/crunchide
install -c -o root -g bin -m 444 crunchide.cat1 /usr/share/man/cat1/crunchide.0

# cd /usr/src/distrib/special/libstubs/

# make; make install
cc -O2 -pipe -g -Os -D__DBINTERFACE_PRIVATE -c setlocale.c -o setlocale.o
cc -O2 -pipe -g -Os -D__DBINTERFACE_PRIVATE -c db.c -o db.o
building standard stubs library
ranlib libstubs.a
install -c -o root -g bin -m 600 libstubs.a /usr/lib/libstubs.a
ranlib -t /usr/lib/libstubs.a
chmod 444 /usr/lib/libstubs.a

Personalización del kernel



Ahora editaremos el siguiente archivo /usr/src/sys/arch/i386/conf/RAMDISK_CD. Si ocurre algun error tendremos un archivo de respaldo de RAMDISK_CD de la siguiente forma
# cd /usr/src/sys/arch/i386/conf/
# cp RAMDISK_CD RAMDISK_CD.anterior
Buscamos, agregamos y comentamos las siguientes líneas

option RAMDISK_HOOKS
option MINIROOTSIZE=3800
option MFS
option UNION
config bsd root on cd0a
#config bsd root on rd0a swap on rd0b and wd0b and sd0b

Podemos iniciar nuestro CD con algunas reglas de firewall

pseudo-device bpfilter 8
pseudo-device pf 1
pseudo-device pflog 1

A continuación modificaremos el archivo /usr/src/distrib/i386/common/Makefile.inc, al igual que el anterior haremos un respaldo de este por algun cambio que pudiera ocurrir
# cd /usr/src/distrib/i386/common/
# cp Makefile.inc Makefile.inc.anterior

Ahora localizamos las siguientes líneas
#strip ${.OBJDIR}/boot
#strip -R .comment ${.OBJDIR}/boot

Y las reemplazamos por la siguiente
strip -s -R .comment -K cngetc ${.OBJDIR}/boot

Ahora las siguientes:
#strip bsd.strip
#strip -R .comment bsd.strip

Quitamos o comentamos las anteriores y se reemplazaran por esta:
strip -s -R .comment -K cngetc bsd.strip

Una vez hecho esto guardamos los cambios hechos y salimos.

Compilación del KERNEL RAMDISK



Este proceso puede tomar bastante tiempo dependiendo de la velocidad del sistema. Además que realizaremos unas tareas adicionales para verificar que todo este bien

Nota: Si hicieramos un ls sobre este directorio veríamos que solo hay algunos paquetes, posteriormente se generan varios de los cuales nosotros solo necesitaremos el kernel generado bsd y el archivo cdrom40.fs

# cd /usr/src/sys/arch/i386/conf
# config RAMDISK_CD
# cd ../compile/RAMDISK_CD/
# make clean; make depend; make

Ahora la imagen de arranque será creada. Cuando es la primera vez que se hace el directorio obj se encuentra vació pero para evitar problemas simplemente borramos su contenido en caso que exista.

Una vez compilado el kernel tendrá que ser copiado a la nueva carpeta de livecd

# cd /usr/src/distrib/i386/ramdisk_cd/
# rm -rf obj/*
# make
# cp bsd /usr/livecd ; chown root:wheel /usr/livecd/bsd ; chmod 644 /usr/livecd/bsd
# cp cdrom40.fs /usr/livecd/

Personalizando el archivo /usr/livecd/etc/rc



# cd /usr/livecd/etc/
# vi rc

Despues de: rm -f /fastboot # XXX (root now writeable) agregue las siguientes líneas

echo 'Montando unidades mfs'
mount_mfs -s 51200 -o async,nosuid,nodev,noatime swap /var
mount_mfs -i 4096 -s 6144 -o async,nosuid,nodev,noatime swap /etc
mount_mfs -i 128 -s 2048 -o async,noatime swap /dev
mount_mfs -s 6144 -o async,nosuid,nodev,noatime swap /tmp
mount_mfs -s 8192 -o async,nosuid,nodev,noatime swap /home
mount_mfs -s 8192 -o async,nosuid,nodev,noatime swap /root
sleep 2
echo -n 'Copiando archivos: var '
cp -pR /backups/var/* /var
echo -n 'etc '
cp -pR /backups/etc/* /etc
echo -n 'dev '
cp -pR /backups/dev/* /dev
echo 'root'
cp -pR /backups/root/.[a-z]* /root
echo 'Creando nodos del dipositivo'
cd /dev && sh MAKEDEV all

Una vez finalizado esto eliminaremos las siguientes lineas en el archivo /usr/livecd/backups/etc/rc:

umount -a >/dev/null 2>&1
mount -uw /
rm -f /fastboot
mount -s /usr >/dev/null 2>&1
mount -s /var >/dev/null 2>&1

echo clearing /tmp
(cd /tmp && rm -rf [a-km-pr-zA-Z]* &&
find . ! -name . ! -name lost+found ! -name quota.user
! -name quota.group -execdir rm -rf -- {} ; -type d -prune)

Ahora si deseamos escribir un nuevo password para root al momento de iniciar el equipo agregaremos las siguientes líneas en /usr/livecd/backups/etc/rc.local

# Add your local startup actions here.
# We need a root Password
echo 'Escribe en nuevo password para root'
passwd

Personalizando el archivo /usr/livecd/etc/fstab



Como nuestro sistema se estará ejecutando desde nuestro CDROM no se necesitan todas esas líneas así que pueden borrarse y reemplazarlas solo por estas estas. El floppy esta agregado por que desde ahí serán leídas las configuraciones que permitirán iniciar las reglas del firewall.

# cd /usr/livecd/etc/
# vi fstab

/dev/cd0a / cd9660 ro,noatime 0 0
/dev/fd0a /mnt/floppy msdos rw,noauto 0 0

Creación del archivo /usr/livecd/etc/boot.conf



Creamos el archivo /etc/boot.conf y agegamos las siguientes líneas:


set image /bsd
set timeout 5

Creación de la imagen



# cd /usr/livecd/
# mkhybrid -b cdrom40.fs -c boot.catalog -R -v -o /var/tmp/mylivecd.iso /usr/livecd/

Cualquier duda y sugerencia a speques@gmail.com, saludos desde México

De antemano gracias a Diego por su colaboración en la elaboración de este articulo. GRACIAS

Bibliografía

http://www.openbsd-wiki.org/index.php?title=LiveCD

http://archives.neohapsis.com/archives/openbsd/2005-09/1348.html

http://www.blackant.net/other/docs/howto-bootable-cdrom-openbsd.php

http://www.threatmind.net/secwiki/OpenBSDLiveCD#head-d3925af4dcd407645974d11f07a30b088fc52e15

Una respuesta para “LiveCD con OpenBSD 4.0”

Escribe un comentario