Crear LiveCD de OpenBSD 4.4
// June 18th, 2009 // manuales

OpenBSD
Éste manual detalla cómo crear un LiveCD de OpenBSD 4.4. Me parece más que bastamente interesante tener un LiveCD de OpenBSD, especialmente si sóis un usuario que deseas iniciar en el mundo de UNIX. Éste artículo, es una traducción de “LiveCD OpenBSD“.
Hecha la introducción de rigor y adelantando que al final de éste artículo incluiré la bibliografía y créditos respectivos, comenzaré de inmediato con la traducción del artículo.
En breve.
Dado que no exite una versión oficial en CD ó DVD de OpenBSD, crearémos uno. Intentarémos apegarnos en la mayor medida de lo posible al “sistema predeterminado”, lo cual simplificará notablemente la labor de mantenimiento. La creación de éste LiveCD de OpenBSD se ha probado en las plataformas i386 y amd64.
Andrew Dalgleish, hizo un aporte sugiriendo donde se puede usar qemu (en i386) y también nos comenta que podéis ahorrar espacio en el disco rígido si reemplazas:
- montando la unidad qemu
- creando un tarball
- extrayendo el tarball en /usr/livecd
por:
- montar la unidad qemu en /usr/livecd
Espacio de disco duro requerido.
- CD (700 MB): Suficiente para que incluya “X”, pero, queda “ajustado” al incluírle los “ports” de X.
- CD (800 MB): Incluye “X-Window System” junto con algunos ports de X livianos.
- DVD: Almacena todo el “X-Window System” junto con muchos ports de X bastante robustos.
Pre-requisitos.
El código fuente de la rama estable de la versión 4.4 de OpenBSD. Puedes conseguirlo en el sitio oficial de OpenBSD. Si tenéis un CD oficial de OpenBSD, sería aún mejor.
Creación del LiveCD de OpenBSD, paso a paso.
- Crear el ambiente de desarrollo (en el ordenador de desarrollo).
Comando: Defina “umask” al valor deseado.
umask 022
El directorio que sea la partición en el LiveCD deberá estar en (/usr) y no debe tener activada la opción nodev.
mkdir -p /usr/livecd/backups/dev; chmod 755 /usr/livecd/backups/dev
Nota: Si no tenéis suficiente espacio en la partición /usr aún así podéis elegir otro directorio para hacer el desarrollo del LiveCD de OpenBSD; sin embargo, en los comandos que aparecerán más adelante debéis ajustarlos para que usen vuestro definido directorio. Y si os gusta copiar/pegar podéis hacer un enlace desde /usr/livecd a /directorioDefinido/foodir.
Si vuestra partición /usr está montada con la opción nodev, entonces, podéis usar vnconfig para montar a vnd(4) en /usr/livecd. Véase: man 8 vnconfig.
- Crear el contenido del LiveCD (en el LiveCD host).
Haced uso de un disco rígido “vacío” y éste instala OpenBSD con el mínimo software posible, mas, que incluya todos los paquetes/ports que deseáis estén presentes en el LiveCD. Debéis configurar el sistema exactamente a como deseáis que esté en el LiveCD de OpenBSD. Y recalco que debéis usar el software de la versión de OpenBSD a construir (en éste caso OpenBSD 4.4).
Advertencia: Algunas configuraciones serán muy genéricas. Para el caso /etc/X11/xorg.conf debería usar el controlador VESA y una resolución de 1024×768. El sistema X Window se configurará para que autodetecte el hardware y haga autoconfiguraciones, de tal forma que si falla siempre se pueda devolver a la configuración genérica expuesta aquí.
Y otra cosa: NO uséis vuestra clave normal de root.
Consejos: Contra todas las buenas prácticas os recomiendo que solamente hagáis una partición “a” ya que esto simplificará notablmente la creación del LiveCD.
Os recomiendo que iniciéis una sesión en X con vuestro usuario antes de proceder con la creación del LiveCD. Digo esto porque es deseable que .fonts.cache-1 exista. Eso sí, desactiva el sistema X antes de transferir ficheros.
No necesitaréis un segundo disco rígido ó un segundo ordenador porque para eso tendrémos a qemu.
Comando: Instalar OpenBSD desde el CD-imagen, en qemu. Instalar OpenBSD hasta el paso: halt & reboot.
qemu-img create ~/livecd.qemu.hd0 2G qemu -hda ~/livecd.qemu.hd0 -cdrom /path/to/cd40.iso -boot d
Inicie desde el disco rígido emulado y complete la instalación:
qemu -hda ~/livecd.qemu.hd0 -boot c
- Eliminar cosas indeseables (en el LiveCD host).
Aplica únicamente para el caso del CD. Si deseáis desarrollar un DVD, mas bien, deberías hacer una “extracción”.
Comando: Eliminar ports y src (únicamente en el caso del LiveCD).
rm -rf /usr/{src,ports,xenocara}/*
Y aunque algunos desearán mantenerlas (no es mi caso):
Comando: Eliminar “ssh host keys”.
rm /etc/ssh/*key*
Y como no se desea que otras personas puedan leer nuestros “logs”:
Comando: Vaciar los logs.
for log_file in `find /var/log -type f` do echo "" > $log_file done
- Transferir el contenido del LivdCD al ordenador de desarrollo (en el LiveCD host).
Ahora monte esta partición en otro sistema OpenBSD de forma tal que podamos crear un fichero tar y comprimido:
Comando: Crear fichero tar.
cd / && tar pczf ~/livecd_root.tar.gz *
Desde luego esto también lo podéis hacer en red:
Comando: Crear/Transferir fichero tar mediante SSH.
cd / && tar pczf - / | ssh user@buildhost 'cat >~/livecd_root.tar.gz'
Command: Crear/Transferir el fichero tar, desde qemu.
(cd /mnt/ && sudo tar pczf ~/livecd_root.tar.gz *)
sudo umount /mnt
sudo vnconfig -u svnd0
- Extraer el contenido del LiveCD (en el ordenador de desarrollo).
Después de haber transferido el fichero tar a nuestro ordenador de desarrollo, lo extraemos también en nuestro directorio LiveCD que ya habíamos creado desde antes. Poned atención de no olvidar el switch “p”. Ejectuta esto:
tar pxzf livecd_root.tar.gz -C /usr/livecd/
- Configurar el LiveCD (en el ordenador de desarrollo).
- Borrar información comprometedora: Borrar el historial de la consola, “viminfo” y otros ficheros que no deban estar en el LiveCD resultante.
cd /usr/livecd && rm -i root/{.history,.viminfo} cd /usr/livecd && rm -i home/*/{.history,.viminfo} - Crear directorios de respaldo.
- Modificar etc/rc
- Eliminar líneas de /usr/livecd/backups/etc/rc
- Adjuntar a backups/etc/rc.local
- Crear etc/boot.conf
- Modificar etc/fstab
- Modificar backups/etc/ttys [Opcional].
- Crear dispositivos.
- Crear el kernel del LiveCD (en el ordenador “host”).
- Create LIVE_CD.MP kernel (OPCIONAL).
- Respaldos y mover /usr/local al contenedor.
- Mover usr/local a un fichero contenedor.
- Cree puntos de montaje MFS (en el ordenador de desarrollo).
- Optimizar el kernel del LiveCD (OPCIONAL).
- Crear la imagen ISO (en el ordenador de desarrollo).
- Grabar la imagen ISO a un CD/DVD.
Se deben copiar “/var”, “/etc”, “/dev”, “/root” y “/home” desde “/usr/livecd” a “/usr/livecd/backup” y crearles un link (esto es un “sucio hack”).
Comando: Copiar directorios verdaderos a los directorios de respaldo.
mkdir -p /usr/livecd/backups/dev
cp -pR /usr/livecd/{var,etc,root,home} /usr/livecd/backups/
cp -p /usr/livecd/dev/MAKEDEV /usr/livecd/backups/dev/
cd /usr/livecd && ln -s tmp/xorg.conf.new xorg.conf.new
Se deben crear particiones virtuales en memoria (MFS) dado que se quiere que sean rápidas y por sobretodo: escribibles. Durante el inicio (boot) el contenido de los ficheros tar localizados en “livecd/backups” se extrae en éstas particiones MFS.
Comando: Contenido de /usr/livecd/etc/rc
# Create/mount mfs partitions, better do be done inside subshells
echo -n 'Replacing with mfs:'
echo -n ' /tmp' # Can be smaller
(mount_mfs -s 204800 -o async,nosuid,nodev,noatime swap /tmp; \
sleep 1; chmod 1777 /tmp)
echo -n ' /dev'
(mount_mfs -s 4096 -i 64 -o async,noatime swap /dev; \
sleep 1; tar pzxf /backups/dev.tar.gz -C /; cd /dev && sh MAKEDEV all) \
>>/tmp/livecd_boot.log 2>&1
echo -n ' /var' # If you have many packages installed use 204800
(mount_mfs -s 51200 -o async,nosuid,nodev,noatime swap /var; \
sleep 1; tar pzxf /backups/var.tar.gz -C /; \
test -d /var/tmp && (/bin/rm -rf /var/tmp; /bin/ln -sf /tmp /var/tmp)) \
>>/tmp/livecd_boot.log 2>&1
echo -n ' /root'
(mount_mfs -s 8192 -o async,nosuid,nodev,noatime swap /root; \
sleep 1; tar pzxf /backups/root.tar.gz -C /) \
>>/tmp/livecd_boot.log 2>&1
echo -n ' /home' # Can be smaller
(mount_mfs -s 204800 -o async,nosuid,nodev,noatime swap /home; \
sleep 1; tar pzxf /backups/home.tar.gz -C /) \
>>/tmp/livecd_boot.log 2>&1
echo ' /etc'
(mount_mfs -s 20480 -i 4096 -o async,nosuid,nodev,noatime swap /etc; \
sleep 1; tar pzxf /backups/etc.tar.gz -C /) \
>>/tmp/livecd_boot.log 2>&1
# Workaround for a bug in either CDBOOT or mkisofs, use containers for a big
# part of the file system (to reduce number of files in ISO9660)
echo -n 'Mounting images:'
echo ' /usr/local'
(vnconfig svnd3c /usrlocal.img && mount -r /dev/svnd3a /usr/local)
# Start regular rc
. /etc/rc
echo "regular /etc/rc terminated with: $?" # debug
# Clean exit
exit 0
# REMOVE these lines
umount -a >/dev/null 2>&1
mount -a -t nonfs,vnd
mount -uw / # root on nfs requires this, others aren't hurt
rm -f /fastboot # XXX (root now writeable)
mount -s /usr >/dev/null 2>&1
mount -s /var >/dev/null 2>&1
echo clearing /tmp
# prune quickly with one rm, then use find to clean up /tmp/[lq]*
# (not needed with mfs /tmp, but doesn't hurt there...)
(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)
Revisa los comentarios.
Comando: Inserte éstas líneas justo antes del bloque que comienza con “# Alternatively, on some arch…” en /usr/livecd/backups/etc/rc
# We need a root password
while true; do
echo -n 'Please enter a root '
passwd && break
done
# We need a password for our default user as well
while true; do
echo -n "Please enter default user ahb "
passwd ahb && break
done
# Start X environment?
echo -n 'Do you want to have a [G]raphical environment or
[C]onsole only: '
read ans
if [ x"$ans" == x"G" -o x"$ans" == x"g" -o x"$ans" == x"Graphical" ] ; then
# Configure X
echo 'Configuring X'
/usr/X11R6/bin/X -configure >/tmp/X-configure.log 2>&1
if [ $? -eq 0 ] ; then
cp /xorg.conf.new /etc/X11/xorg.conf
# If you want to use a different keyboard layout (e.g. dvorak):
#/usr/bin/sed '
#/Driver[ ]*"kbd"/ a\
#Option "XkbRules" "xorg"\
#Option "XkbModel" "pc105"\
#Option "XkbLayout" "dvorak"\
#' < /etc/X11/xorg.conf > /tmp/xorg.conf
#cp /tmp/xorg.conf /etc/X11/xorg.conf
# If you are using other fonts (e.g. terminus) than in default fontpath:
#/usr/bin/sed '
#/FontPath.*100dpi\/"/ a\
#FontPath "/usr/X11R6/lib/X11/fonts/75dpi/:unscaled"\
#FontPath "/usr/X11R6/lib/X11/fonts/100dpi/:unscaled"\
#FontPath "/usr/local/lib/X11/fonts/terminus/"\
#FontPath "/usr/local/lib/X11/fonts/mscorefonts/"\
#FontPath "/usr/local/lib/X11/fonts/ghostscript/"\
#FontPath "/usr/local/lib/X11/fonts/freefont/"\
#FontPath "/usr/local/share/fonts"\
#FontPath "/usr/local/share/fonts/override"\
#' < /etc/X11/xorg.conf > /tmp/xorg.conf
#cp /tmp/xorg.conf /etc/X11/xorg.conf
chmod 644 /etc/X11/xorg.conf
else
echo 'FAILED will use default xorg.conf'
fi
rm -f /tmp/.X11-unix/* # Remove stale socket!
xdm_flags="" # Start xdm
else
echo -n 'Does your graphics card support 80x50 consoles? (y/n): '
read ans
if [ x"$ans" == x"y" -o x"$ans" == x"yes" -o x"$ans" == x"Y" ] ; then
wsfontload -h 8 -e ibm /usr/share/misc/pcvtfonts/vt220l.808
for Terminal in 1 2 3
do
wsconscfg -dF $Terminal
wsconscfg -t 80x50 $Terminal
done
echo 'ttyC1, ttyC2 and ttyC3 set to 80x50 mode'
fi
xdm_flags=NO
fi
Es necesario modificar éste archivo para poder iniciar (boot).
Comando: Establecer las opciones de boot(8), contenido de /usr/livecd/etc/boot.conf
set image /bsd set timeout 5
Comando: Contenido de /usr/livecd/etc/fstab
/dev/cd0a / cd9660 ro,noatime 0 0
Comando: Contenido de /usr/livecd/backups/etc/fstab
/dev/cd0a / cd9660 ro,noatime 0 0 # Aquí podéis tener otras (noauto) entradas, desde luego.
En caso de que desees tener activada la consola serial; en caso contrario, usad los valores predeterminados.
Comando: Cambiar en /usr/livecd/backups/etc/ttys
tty00 "/usr/libexec/getty std.9600" vt100 on secure local
No serán necesarios todos los devs creados, pero ellos no dañan dado que se hace un montaje en la partición MFS en los dispositivos reales /dev y los dispositivos se crean al inicio (boot).
Comando: Crear dispositivos que se necesitarán.
cd /usr/livecd/dev && ./MAKEDEV all
Tal y como se ha dicho varias veces: Utilice las fuentes que coincidan con sus binarios. Raras y desagradables cosas ocurrirán si su kernel no concuerda con su “entorno”.
Comando: Copiar la configuración del kernel genérico.
cd /usr/src/sys/arch/`uname -m`/conf && cp GENERIC LIVE_CD
Comando: Modificar esto en el LiveCD.
# config bsd swap generic <– hay que cambiar esto por
config bsd root on cd0
Comando: Compilar el kernel modificado.
config LIVE_CD && cd ../compile/LIVE_CD/ && make clean && make depend && make
Comando: Copiar el kernel modificado en el directorio root del LiveCD.
cp bsd /usr/livecd && chown root:wheel /usr/livecd/bsd && \
chmod 644 /usr/livecd/bsd
Asumo que habéis compilado el kernel del LiveCD como en el paso10.
Comando: Copiar la configuración del kernel GENERIC.MP
cd /usr/src/sys/arch/`uname -m`/conf && cp GENERIC.MP LIVE_CD.MP
Comando: Modificar esto en LIVE_CD.MP
# include “arch/i386/conf/GENERIC” <- cambiar esto por:
include “arch/i386/conf/LIVE_CD”
Comando: Compilar el kernel modificado.
config LIVE_CD.MP && cd ../compile/LIVE_CD.MP/ && make clean && make depend && make
Comando: Compilar el kernel modificado en el directorio root del LiveCD.
cp bsd.mp /usr/livecd/bsd.mp && chown root:wheel /usr/livecd/bsd.mp && \
chmod 644 /usr/livecd/bsd.mp
Archive los respaldos y elimine los ficheros restantes (en el ordenador de desarrollo “host”).
Dado que un CD no tiene una capacidad de almacenamiento masiva, archivarémos los directorios de respaldo en ficheros tar.
Comando: Archivar respaldos / eliminar archivos.
cd /usr/livecd/backups && \
tar zcf var.tar.gz var && \
tar zcf etc.tar.gz etc && \
tar zcf dev.tar.gz dev && \
tar zcf home.tar.gz home && \
tar zcf root.tar.gz root && \
mv /usr/livecd/etc/{rc,fstab,group,passwd,boot.conf,login.conf} \
/usr/livecd/ && \
rm -rf /usr/livecd/{root,home,var,etc}/* && \
mv /usr/livecd/{rc,fstab,group,passwd,boot.conf,login.conf} \
/usr/livecd/etc/ && \
rm -rf /usr/livecd/backups/{var,etc,dev,home,root}
Debes ya sea que liberar svnd0 ó utilizar otro dispositivo svnd in todos los comandos siguientes. Copie y pegue el código que se da a continuación en una consola /bin/shell y asegúrese de que se ejecuta en 1 sóla orden. Concomitantemente chequee los posibles errores.
# Calculate size for container file
usrlocsize=$(du -ks /usr/livecd/usr/local | awk ‘{print $1}’)
usrlocsize=$((($usrlocsize / 1024) + 200))
if [ $usrlocsize -gt 4000 ] ; then # ISO9660 limitation
echo “/usr/local is too large!”
return 1
fi
# Create, fdisk, disklabel, newfs and mount container file
dd if=/dev/zero of=/usr/livecd/usrlocal.img bs=1m count=$usrlocsize
mkdir /usr/livecd/usr/localtmp
mount_vnd /usr/livecd/usrlocal.img svnd0
fdisk -yi svnd0 >/dev/null
# Important: THREE new lines between “a a” and “q”
disklabel -E svnd0 << _END_DISKLABEL >/dev/null 2>&1
a a
q
y
_END_DISKLABEL
newfs svnd0a >/dev/null 2>&1
mount /dev/svnd0a /usr/livecd/usr/localtmp
# Move usr/local content into container file
mv /usr/livecd/usr/local/* /usr/livecd/usr/localtmp/
# Clean up
umount /usr/livecd/usr/localtmp
vnconfig -u svnd0
rmdir /usr/livecd/usr/localtmp
Asegúrese de que existen directorios vacíos -y con los respectivos permisos- para los puntos de montaje: /var, /etc, /dev, /home, /root, /tmp.
Comando: Crear puntos de montaje.
cd /usr/livecd/ && \
chmod 700 root && \
chmod 755 {var,etc,dev,home,backups} && \
chmod 1777 tmp
Para hacer más rápido el LiveCD, se puede optimizar cachepct en el kernel.
Comando: Optimizar bsd.
cd /usr/livecd && \
(echo “cachepct 20″; echo “quit”) | config -e -o nbsd bsd && \
mv nbsd bsd
Comando: Optimizar bsd.mp
cd /usr/livecd && \
(echo “cachepct 20″; echo “quit”) | config -e -o nbsd.mp bsd.mp && \
mv nbsd.mp bsd.mp
Nota: Si quiere ejecutar el LiveCD en un ordenador con bastante memoria ( 1 Gb ó más ), puede incluso incrementar a más de “20″.
Se debe copiar cdbr y cdboot a la raíz del LiveCD.
Comando: Copiar los archivos bootstrap.
cp /usr/livecd/usr/mdec/{cdbr,cdboot} /usr/livecd/
Finalmente se puede crear ahora la imagen ISO del CD/DVD.
Comando: Crear imagen ISO del LiveCD.
vers=”42″
/usr/local/bin/mkisofs \
-no-iso-translate \
-R -T \
-allow-leading-dots \
-l -d -D -N -v \
-V “LiveCD OpenBSD${vers}” \
-A “LiveCD OpenBSD${vers}” \
-p “Your Name <your.mail@address.de>” \
-publisher “Your Name <your.mail@address.de>” \
-b cdbr -no-emul-boot \
-c boot.catalog \
-o /home/livecd.iso \
/usr/livecd/
Comando: Probar CD en qemu.
qemu -cdrom livecd.iso -boot d ”<other options>”
Comando: Grabar imagen ISO a CD.
qemu -cdrom livecd.iso -boot d ”<other options>”
Comando: Grabair imagen ISO a DVD.
growisofs -dvd-compat -Z /dev/rcd1c=livecd.iso
Y de ésta manera, llego al final de éste artículo en el que se describe cómo crear un LiveCD de OpenBSD 4.4. Durante toda la traducción traté de guardar la máxima consistencia. Tuve que hacer la traducción en 2 días diferentes. Sé que eso podría haber afectado la consistencia del artículo final; espero que no haya ocurrido.
Desarrollar éste LiveCD de OpenBSD, es una labor compleja. No sólo por el conocimiento requerido, sino, por la paciencia que se debe tener.
Créditos.
- Artículo original: OpenBSD 4.4 Live CD.
- OpenBSD man pages.
- OpenBSD FAQ.
Si deseáis contactar al autor de éste manual para crear un LiveCD de OpenBSD 4.4, envía un mensaje a: Andreas Bihlmaier <andreas dot bihlmaier at gmx dot de>.
Alguna duda con respecto a la traducción, por favor contacta a GatoLinux.








¡Sígueme!