MarioDebian, mi devlog

Bitácora de un desarrollador newbie.

¿Cómo hacer una metadistro? ACTUALIZADO
Antes de empezar me gustaría decir que este tipo de artículo es lo que llevaba pensando hacer un buen tiempo, pero por varios motivos (uno de ellos es pulir un poco el calzador) no lo he hecho hasta hoy.

El fruto de este trabajo se llama soleupix, puedes descargar una pequeña iso (aún en estado de pruebas) desde aquí.

Este artículo se distribuye bajo licencia CC, como el resto de mi blog, así que si lo vas a copiar en otra web acuérdate de ponerme un enlace.

Vamos a empezar.


NOTA IMPORTANTE: Hacer una metadistro conlleva unos conocimientos mínimos de shell scripts, el kernel de linux, módulos y dependencias y bastante soltura en comandos de consola. Si no cumples estos requisitos, antes de empezar usa google para documentarte sobre ello.

(Sigue ....)

ACTUALIZACIÓN (16 Dic 2005 23:19): Después de sufrir un pequeño efecto barrapunto, el servidor sigue vivo, se me ha olvidado lo más importante que es dar las gracias a Juanje y los desarrolladores que colaboran con metadistros y Guadalinex sin los cuales todas estas novedades no serían posibles.

ACTUALIZACIÓN (19 Dic 2005 10:27): Este fin de semana el server ha estado caido, no por el efecto barrapunto sino por una metida de gamba y el kernel 2.6.14 que no le dió la gana arrancar. Siento mucho las molestias. Ahora SOLEUPIX está basada en el kernel 2.6.14-2-386 ( el de debian ) he compilado aparte el módulo squashfs y unionfs para no necesitar un kernel raro. Esto es un gran avance y funciona mucho mejor.

ACTUALIZACIÓN (31 Dic 2005 12:40): He corregido algunos fallos o incoherencias en el artículo y borrado la forma vieja (lo que dejé tachado).

ACTUALIZACIÓN (24 Ene 2006 09:20): Añadido enlaces para descargar kernel 2.6.14-2-386 que ha desaparecido en debian

ACTUALIZACIÓN (20 Feb 2006): Articulo actualizado al kernel 2.6.15-1-486 el 2.6.14 tiene algún problema y ha desaparecido de debian.
 (Más)



El nuevo calzador funciona en debian.
Después de probar guadalinex he descargado el nuevo calzador del svn y he preparado una minidistro para probarlo.

He generado e instalado los paquetes:

genlive (SVN)
initramfs-tools (SVN)

busybox-cvs-initramfs (paquete de ubuntu al que he quitado algunas dependencias molestas para poder instalarlo en debian)

Si alguien quiere hacer pruebas se pueden descargar desde:

http://idefix.eup.uva.es/metadistros


Una vez instalados he ido a /media/distro/

y he ejecutado:

debootstrap testing /media/distro/sources http://localhost/mirror/debian

Esto me ha instalado el sistema base, después he entrado en chroot y he instalado lo siguiente:
# chroot /media/distro/sources
# mount /proc
# dpkg-reconfigure -a (esto reconfigura todos los paquetes instalados)
# apt-get install locales
# apt-get update
# apt-get install x-window-system gnome-core gnome-bin gdm

Tenía un paquete deb con un kernel parcheado con squashfs unionfs bootsplash y supermount => kernel-image-2.6.14-meta

Los parches, kernel y demás se puede descargar desde:

http://soleup.eup.uva.es/soleupix

Lo he instalado con dpkg pero como lo generé con --initrd intenta crear la imagen y no puede al no encontrar primero un generador de imágenes (luego instale yaird) y después al no encontrar la partición /boot en el fstab/mounts del chroot...

No hay mucho problema ya que se puede destripar el deb y modificar el postinst para que no genere initrd....

A continuación he instalado el mismo paquete en la distro huésped (mi portatil con debian sid) y he eliminado las entradas de grub que me ha hecho ya que no quiero usar ese kernel. El motivo de instalarlo en la distro huésped es porque mkinitramfs necesita los módulos para generar la imagen de arranque.

He hecho un backup del contenido de isolinux y he puesto el antiguo gfxgrub (bootlogo, isolinux.cfg, message, isolinux.bin)

Antes de generar la meta y la iso he editado /usr/sbin/genlive para que no copiase de nuevo el isolinux de guadalinex, y para que usase el kernel 2.6.14-meta

He editado isolinux.cfg para que tenga los mismos parámetros que el isolinux.cfg de guadalinex.

He generado la imagen squash y la iso con genlive a secas.

Durante la creación del initramfs (lo que es ahora el calzador) obtengo algunos errores:

cpio: ./sbin/udev: No such file or directory
cpio: ./sbin/mdadm: No such file or directory
cpio: ./sbin/mdrun: No such file or directory
cpio: ./sbin/vgchange: No such file or directory

Los tres últimos son debidos a que no tengo instalados los paquetes de RAID ni LVM, no me preocupa, el primero me preocupa más ya que intenta copiar /sbin/udev y en mi sistema (debian unstable, udev-0.074-2 ) no existe ningún binario con ese nombre.

¿Para qué versión de udev está pensado el calzador? El udev de debian hace los papeles de hotplug.


Al poco tiempo tenía una iso de 172 megas en /media/distro/isos

La arranco con qemu (con el acelerador) y a toda leche arranca pero no carga las X :( para más inri salé el mensaje de error de que no ha podido arrancar las X pero no responde al teclado.

Edito /media/distro/sources/etc/init.d/gdm y meto un exit al principio del archivo para que al menos me deje en la shell.

Después de mirar en /dev no hay /dev/psaux ni /dev/input/mice y supongo que es por eso por lo que no quieren arrancar las X.

Instalo discover borro el META.squash y vuelvo a ejecutar genlive.

Esta vez si que se crean los dispositivos y puedo entrar en gnome con un startx.

Problemas encontrados:

* sudo da error referente al hostname (uname to lookup via gethostname() )

hostname devuelve una cadena vacía y en /ect/hosts no hay ningún nombre de máquina (se ve un tabulador antes de donde debería ir el nombre)

Supongo que hay una variable que initramfs no está procesando correctamente $hostname:

en el código del initramfs-tools => live_scripts/live-bottom/hwdetect

veo lo siguiente:

# Setup the hostname
hostname=$(grep ID /etc/lsb-release | cut -d "=" -f 2 | tr -s [:upper:] [:lower:])

En mi distro no hay ningún archivo llamado /etc/lsb-release

¿De donde sale?
¿Que debiera contener?

* El dhclient se ejecuta en primer plano y en un equipo que no tenga red obliga a pulsar Ctrl + C o esperar el timeout....

¿No se puede ejecutar en segundo plano? ¿O lo lanza /etc/init.d/networking start?

* Al no usar el isolinux de guadalinex no tengo la configuración de locales en español.

¿Cómo indicar en el cmdline que arranque con las locales y el teclado en español?

si ejecuto locale salen en POSIX la mayoria.

* Se hecha de menos un script (tipo hacks.sh) donde poder meter los scripts de cada distro, no he investigado mucho por el calzador pero no debería ser muy dificil crear un script que se ejecute en S90 por ejemplo con las cosas que cada uno hace a sus distros como configurar la home a partir de un skel o poner iconos personalizados.


Creo no haber encontrado más fallos, tampoco me ha dado mucho tiempo a ver nada más, tengo que decir que unionfs funciona de maravilla (lo he probado con apt) y la carga es rapidísima comparada con otros livecd.

En vmware las X arrancan apenas en 30-40 segundos después de arrancar.




«Anterior   1 2