MarioDebian, mi devlog

Bitácora de un desarrollador newbie.

Something about TCOS
He arreglado algunos fallos de los scripts de generación de TCOS y he metido todo junto en un mirror tipo debian para poder ser instalado/actualizado con mucha más facilidad.

A partir de ahora ya no hay que descargar paquetes sueltos y de esta forma se tendrá un mejor control sobre las dependencias... Además he creado dos tipos de soluciones, una estable, es decir paquetes de TCOS algo antíguos pero que funcionan con lo que tienen y una rama unstable con todas las mejoras que voy añadiendo día a día.

Añadir a /etc/apt/sources.list

# versión estable de TCOS
deb http://soleup.eup.uva.es/tcos/debian stable main

# últimas versiones de TCOS
deb http://soleup.eup.uva.es/tcos/debian unstable main

Además hay que importar mi clave GPG para que el mirror funcione sin errores:

# wget http://soleup.eup.uva.es/tcos/mariodebian-pub.key
# cat mariodebian-pub.key| sudo apt-key add -

Estas son las mejoras de la última versión de tcos 0.47-b2 y de tcos-config 0.0.4-b2:

INITRAMFS-TOOLS-TCOS
* Update initramfs-tools-tcos version dependencies.
* Add tinlylogin dependency.
* Add TCOS_ADMIN_USER entry (ssh key and italc key)
* Add TCOS_REMOTEFS selector (shfs, ltspfs, none)
* Remove TCOS_BIG_BUSYBOX (reboot and poweroff now works!!!)
* Add TCOS_SHOW_NEEDED_MODULES (show loaded and discover detected modules)
* Add showmodules cmdline to show loaded, discover and not found modules info.
* Add tcos-server-utils package:
- tcos-shfsmount (mount shfs in terminal)
- tcos-shfsumount (umount shfs)
* Add manpages of tcos-shfs[u]mount.1
* Update gentcos manpage
* Add tinylogin utils to create users and groups with busybox.

TCOS-CONFIG
* Updated dependencies to python2.4-gtk and python2.4-glade
* Add TCOS_REMOTEFS selector
* Add TCOS_ADMIN_USER entry
* Add TCOS_SHOW_NEEDED MODULES checkbox
* Delete TCOS_BIG_BUSYBOX checkbox
* Delete TCOS_SSH_KEYS filechooser

Ahora estoy trabajando en un nuevo método de acceder a los dispositivos del terminal mediante shfs (SSH filesystem + FUSE), bastante más sencillo que ltspfs y que no necesita más que un servidor ssh corriendo en el terminal. El problema es el siguiente, para montar /media/autofs/ del terminal en /home/USARIO/desktop/Devices del servidor tengo que usar un usuario especial creado al efecto (podría usar root pero no me sirve) que pueda leer y escribir en /media/autofs/ y que no necesite contraseña para acceder (claves SSH rsa), lo de la contraseña habría que copiar la clave pública en el authorized_hosts del usuario del terminal, y en la home de todos los usuarios que vayan a usar dispositivos remotos. Para gente que usa plantillas para crear usuarios no hay problema, se mete en la plantilla, tendré que montar un pequeño script que lo haga....

He estado investigando también para poder usar el aula de terminales como cluster (OpenSSI o OpenMosix) pero hay varias cosas que no me acaban de gustar, primero se necesita un kernel parcheado (que podría mantener yo) y luego se necesitan determinados paquetes también parcheados, no se muy bien con que fin. Sería bastante interesante usar las capacidades de los terminales para ayudar a la CPU del servidor... lo dejaré apuntado en mi lista de posibles TODO.




La vida sigue...
Para ser sincero, el golpe de google me ha dolido bastante y tengo que reconocer que se me han quitado bastantes ganas de cosas que se me estaban ocurriendo montar, digamos que el brainstorming que me gusta hacer con mi socio Maci acabará en una libreta para cuando vuelva a tener de nuevo ganas de hacer cosas.

Sabía que no iba a ser seleccionado para el SoC, ya que primero mi inglés es bastante malo y luego viendo ejemplos de gente presentando sus ideas no me he sabido vender. Pero el palo del error en los correos fue el que me dió los 10 minutos de gloria y el gran cabezazo al final.

Hoy he estado corrigiendo algunos fallos de TcosConfig (0.0.4) y initramfs-tools-tcos (0.47) y creo que liberaré las cosas tal y como están (es posible que con muchos fallos aún).

Changelog 0.45 => 0.47:

* Updates README file ( debug a kernel panic )
* Delete scripts/tcos-premount/40unionfs and put code in 30sqmount
* More easy script scripts/tcos-premount/30sqmount
* add allmodules.squashfs ( all kernel modules to debuging )
* add _log() function ( write into /tmp/initramfs.debug )
* add reboot and poweroff scripts ( reboot -f / poweroff -f )
* Add info about missing packages
* Add TCOS_DISABLE_ACPI to delete acpi and raid stuff
* Complete gentcos script support to be more flexible from TcosConfig
* Add some debconf scripts and templates
* Add support of embedded web browser (dillo 25Mb or links2 6 Mb)
* Reorganize hooks/tcosbin scripts
* Add some functions to conf/tcos-functions to copy files and dirs
* Add resolv.conf file generated from server resolv.conf ( browser need it )
* Add HACKING info.
* Add Etherboot support ( NBI images )
* Initial version of tcos own package.
* Rename pxes to TCOS support (Thin Client Operating System)
* Add swap file mount and generation system
* Mount /usr in read-write mode unionfs and 2 Mb of ram filesystem.
* Add ltspfs daemon and autofs to read devices from user session.
* Remove samba support.
* Split TCOS to his own package.
* Add /tftboot/tcos dir to all needed into it.
* Create symbolic link to /boot/vmlinuz-xxxxx into /tftpboot/tcos
* Add /etc/tcos dir to not touch /etc/mkinitramfs files
* Add /etc/tcos/tcos-functions with common shell script functions
* Create symbolic link to /usr/lib/syslinux/pxelinux.0 into /tftpboot/tcos
* Add support of ssh server (dropbear ssh don't need PAM)
* Copy ssh rsa public keys to .ssh root home in initramfs (no pass needed)
* Add support of Xorg 7.0 or 6.9 (debian testing unstable generation build systems)
* Move vars to /etc/tcos/tcos.conf (only vars)
* Use debian kernel 2.6.16-1-486 (can use any > 2.6.12)

Los próximos dias (semanas/meses) los dedicaré a preparar algo que tengo muy abandonado (la carrera) y a ver si me saco algunos callos que tengo de segundo!!!
Tengo pendiente alguna cosa importante con Metadistros pero de momento no tengo demasiado tiempo....

Os dejo un mini-howto para instalar TCOS en un servidor de terminales.

Instalar Tcos:

Descargar los 3 paquetes deb de aquí:

http://soleup.eup.uva.es/tcos/2006-05-25/

Instalar las siguientes cosas __ANTES__ de instalar los paquetes deb:

* linux-image-2.6.16-1-486 (está en debian unstable)
* unionfs-modules-2.6.16-1-486
* squashfs-modules-2.6.16-1-486
* squashfs-tools
* syslinux
* dhcp-client
* dhcp3-server
* atftpd
* python2.4 (es posible que ya esté)

(Puede que algunas ya estén instaladas)

Como paquetes recomendables instalar:

* autofs
* discover (discover1, que viene por defceto NO SIRVE aún)
* dropbear
* mknbi

Como paquetes opcionales:

* ltspfs-client y ltspfs-server ( disponibles aquí )
* esound
* alsa-utils
* x11vnc
* italc-client e italc-master
* links2 o dillo

Instalar:
# dpkg -i gentcos_0.46-3_i386.deb initramfs-tools-tcos_0.46-3_i386.deb tcos-config_0.0.4_i386.deb

A continuación en el menú de Herraminentas de Sistema de GNOME (no se donde irá en KDE) saldrá un acceso a TcosConfig, sino se puede ejecutar por consola:

# tcosconfig

Es un asistente la mar de sencillo (en español o inglés) con el que indicamos las cosas que queremos que tenga nuestra imagen, los archivos acabarán en /tftpboot/tcos. Se pueden ver capturas en el wiki de TcosConfig, (la versión de las capturas es bastante vieja).

También es posible generar las imágenes con el comando gentcos, para más ayuda consultar:

# man gentcos

Ahora hay que configurar el servidor dhcp:

# cp /usr/share/doc/gentcos/examples/dhcpd.conf /etc/dhcpd3/dhcpd.conf

Editamos el archivo para poner las MAC que correspondan, hay bastante más ayuda e información en:

# zless /usr/share/doc/initramfs-tools-tcos/README.gz (en __mi__ inglés)
# less /usr/share/doc/initramfs-tools-tcos/HACKING.es (en español)

Configurar el servidor de fuentes:

# nano /etc/X11/fs/config

COMENTAR (poner una # delante) la línea no-listen = tcp

Permitir conexiones XMDCP:

GDM => Configurar /etc/gdm/gdm.conf para que tenga algo como esto::

[daemon]
RemoteGreeter=/usr/lib/gdm/gdmgreeter

[security]
DisallowTCP=false

[xdmcp]
Enable=true

Reiniciar gdm y dhcp3-server.

Espero que alguien lo pruebe y me comente si le funciona, dentro de unos días tendré la información más actualizada en el wiki, así como un manual de instalación con capturas. De momento hay bastante información técnica en el wiki de TCOS.

Escribo esto aquí porque varias personas me han pedido por mail datos y especificaciones de TCOS, así no tengo que explicar lo mismo a cada uno.

Así mismo animo a alguien que le interese desarrollar una alternativa propia a LTSP PXES o cualquiera de las soluciones Thin Client, a unirse al proyecto, en estos momentos es cuando un par de coders o tres sería algo bastante importante para sacarlo adelante, añadirle cosas y mejorar rendimiento.






Expectante => desilusionado
Mucha gente está expectante de las noticias de google para hoy.

Hoy 23 de Mayo se resuelven los proyectos aprobados por google en el Summer of Code 2006.

Yo presenté mi pequeño proyecto TCOS y estoy bastante cardiaco esperando algún tipo de noticia, aunque no soy el único.

En cuanto tenga noticias (voy a rebentar la tecla F5) avisaré por aquí....

ACTUALIZACIÓN (24/05/2006 09:34)

ME HAN ACEPTADO,


el proyecto TCOS está en


el Summer of Code 2006 !!!!!!!!!


Me tiemblan hasta las orejas!!!!!

ACTUALIZACIÓN (24/05/2006 09:38)

QUIETOR!!!!

Según dicen por aquí parece que han mandao un mail a todo el mundo por error.

Parece ser que los chicos de google han metido la gamba hasta el fondo y viendo como estaban ayer los nervios de mucha gente no es de estrañar que alguien se haya pegado un tiro después de primero, ser uno de los 1800 destinatarios que recibieron el mail de aceptado y después el mail de confirmación de haber sido rechazados.....

Sus disculpas en este hilo.

Otro año será :( :(

ACTUALIZACIÓN 23/05/06 16:00

Hoy parece que no va a ser mi día, me he vuelto a quedar sin conexión a internet en casa (wanadoo no sabes cómo te odio) y ya.com aún no ha empezado el alta.

Gracias a Maci y Carlos por los apoyos morales... enhorabuena a los proyectos/estudiantes que si han admitido.




De Windows, sus updates, antivirus y ¿donde leches está mi GRUB?
Resulta que ayer recordé que he cambiado de proveedor de internet ( al final me decidí por ya.com ) y supongo que en unos días wanadoo cortará el grifo por lo que necesitaba darle un repaso al Windows de mi portatil porque es la única forma de conectarme por modem convencional.

Total que arranco el innombrable entro en la página de actualizaciones de windows y después de más de 60 Mb (si que hace que no entraba) cambio y actualizo el antivirus (la demo de avast de 60 días) y el firefox a la última versión. En uno de los 4 reinicios de este proceso me doy cuenta que ya no está GRUB !!! ¿Quién cojones me ha borrado el GRUB? ¿Ahora como arranco mi Debian?

En otro equipo esto no hubiera sido un problema pero en mi portatil sí. Desde el año pasado en las I Jornadas de Software Libre donde rodó (literalmente) por las escaleras por romperse el asa de la bolsa el lector/grabador de cds/dvd funciona a un 5%. Cualquier cd no lo reconoce y con algunos llega a volverse loco y ponerlos a 10.000 rpm teniendo que dar un botonazo no vaya a ser que se reviente el cd dentro del lector, hace poco cuando reinstale debian por temas de redimensionado de particiones tuve suerte que el debian-netinstall es de los pocos que se que funcionan...

Da la casualidad que mis 3 copias de reserva del netinstall están en SOLEUP dado que necesitaba algún cd extra para instalarlo en el curso de GNU/linux que estamos a punto de acabar (Lunes).

Total que me estoy liando mucho. Tengo un portatil que no lee cds (he probado knoppix, ubuntu, y 6 o 7 más de los que tengo en casa) mi portatil no tiene disquetera y para colmo el MP3-usb en el que antes tenía un SOLEUPIX-usb de emergencia lo he formateado para escuchar música. Para reinstalar GRUB me quedan tres opciones:

1.- Me bajo un netinstall, lo grabo y hago el chroot... (no es seguro que vuelva a funcionar)

2.- Me bajo el SOLEUPIX-usb, lo instalo de nuevo en el pendrive (y otra vez a formatearlo para escuchar música)

3.- Intento arancar por red.... (ummm TCOS rules!!!)

Así que empiezo a pensar en cómo funciona TCOS y que mi hermano tiene su ordenador con Ubuntu conectado al router donde me conecto yo.

Me bajo de SOLEUP algunas cosillas que necesito:

/tftpboot/tcos/vmlinuz
/tftpboot/tcos/initramfs
/tftpboot/tcos/usr.squashfs
/tftpboot/tcos/pxelinux.cfg/default
/tftpboot/tcos/logo.lss

Configuro el servidor atftpd en ubuntu y el servidor dhcp3 para incluir mi MAC.

Mi portatil tiene una tarjeta de red via-rhine con soporte PXE así que en unos segundos ya estaba en la consola busybox de TCOS, montando la partición de mi debian, y remontando /dev, /proc y /sys dentro de lo que sería la jaula:

# mkdir /target
# mount -t ext3 /dev/hda2 /target
# mount -o bind /dev /target/dev
# mount -o bind /proc /target/proc
# mount -o bind /sys /target/sys
# chroot /target

Aquí ya estoy de nuevo en mi debian, lo único que falta es volver a copiar GRUB al MBR:

# grub
grub> root (hd0,1)
grub> setup (hd0)
grub> quit

Con esto ya está reinstalado, salgo de la jaula chroot, desmonto todo lo montado y reinicio. He recuperado GRUB !!!!!!!!!

¿Quién narices ha borrado GRUB del MBR? ¿Algún update de windows? ¿Desinstalar el antivirus viejo (AVG)? ¿Instalar el nuevo (avast)? ¿La actualización de firefox :P?

Es una de las dudas que tendré un tiempo pero por lo menos se que en caso de emergencia en GNU/Linux siempre hay al menos 3 opciones a seguir.

Por si vuelve a ocurrir he instalado GRUB en el disco duro externo USB que tengo de 200Gb con una ubuntu dapper (el portatil no será muy bueno pero además de arrancar por PXE admite arrancar desde USB)




El java de Sun en debian????
Hoy el cron de debmirror de alguno de los servidores que llevo me da dicho algo como esto:

[.....]
[ 80%] Getting: pool/non-free/s/sun-java5/sun-java5-bin_1.5.0-06-1_i386.deb... ok
[ 87%] Getting: pool/non-free/s/sun-java5/sun-java5-demo_1.5.0-06-1_i386.deb... ok
[ 91%] Getting: pool/non-free/s/sun-java5/sun-java5-doc_1.5.0-06-1_all.deb... ok
[ 91%] Getting: pool/non-free/s/sun-java5/sun-java5-fonts_1.5.0-06-1_all.deb... ok
[ 91%] Getting: pool/non-free/s/sun-java5/sun-java5-jdk_1.5.0-06-1_i386.deb... ok
[ 92%] Getting: pool/non-free/s/sun-java5/sun-java5-jre_1.5.0-06-1_all.deb... ok
[ 95%] Getting: pool/non-free/s/sun-java5/sun-java5-plugin_1.5.0-06-1_i386.deb... ok
[ 95%] Getting: pool/non-free/s/sun-java5/sun-java5-source_1.5.0-06-1_all.deb... ok
[....]

Todo apunta que en unstable/non-free ya tenemos los paquetes de java por lo que es un gran paso para aplicaciones (vease JClic) ya que con el java gnu no compila.

Estos son los datos del paquete jre:

# apt-cache show sun-java5-jre
Package: sun-java5-jre
Priority: optional
Section: non-free/libs
Installed-Size: 15568
Maintainer: Matthias Klose
Architecture: all
Source: sun-java5
Version: 1.5.0-06-1
Replaces: sun-java5-bin, ia32-sun-java5-bin
Provides: java-virtual-machine, java2-runtime
Depends: java-common, locales, sun-java5-bin (= 1.5.0-06-1) | ia32-sun-java5-bin (= 1.5.0-06-1),
debconf (>= 0.5) | debconf-2.0
Pre-Depends: debconf (>= 0.5) | debconf-2.0
Recommends: java-common (>= 0.24), gsfonts-x11
Suggests: sun-java5-plugin | ia32-sun-java5-plugin, sun-java5-fonts, ttf-baekmuk,
ttf-kochi-gothic | ttf-kochi-gothic-naga10, ttf-kochi-mincho | ttf-kochi-mincho-naga10, ttf-arphic-bsmi00lp
Conflicts: j2se-common
Filename: pool/non-free/s/sun-java5/sun-java5-jre_1.5.0-06-1_all.deb
Size: 7341098
MD5sum: 0cbe8453b3bdf95e996b25566090ac2f
Description: Sun Java(TM) Runtime Environment (JRE) 5.0
The Sun Java Platform Standard Edition Runtime Environment (JRE) 5.0
contains the Java virtual machine, runtime class libraries, and
Java application launcher that are necessary to run programs written
in the Java progamming language. It is not a development environment and
doesn't contain development tools such as compilers or debuggers.
For development tools, see the Java Development Kit JDK(TM) 5.0
(package sun-java5-jdk).
.
NOTE: You must accept Sun's EULA prior to successfully installing
this package
.
This package contains architecture independent files.


¿quién decia que ubuntu no devuelve el trabajo a debian? Aquí lo teneis han empaquetado java...




TcosConfig 0.0.3 aka Python rulesssssss
Ya he dicho varias veces que me mola python aunque tiene algunas cosas que me sacan de quicio, pero bueno, realmente hay mucha docuumentación por ahí...

Este fin de semana ha sido de duro trabajo para tener una interfaz gráfica algo presentable para generar imágenes TCOS. Como no se me ocurria una forma de desarrollar una interfaz elegante y sencilla empecé a buscar qué programas pygtk tenían algo parecido a un asistente y me acordé del instalador de guadalinex/ubuntu-express, del cual he tomado prestado parte del archivo glade. El código python del instalador me parece ( ya que soy bastante newbie ) un poco enrevesado, además no he acabado de entender para que se separan las cosas en clases si no puedes referenciar a una desde la otra sin crearuna nueva instancia... ¿Algún pythonmaniaco que me lo explique?

Lo más dificil ha sido ejecutar una aplicación de consola y en tiempo real y sin colgar el interfaz meterlo en un campo de texto y hacer scroll, gracias a un proyecto sobre bluethooth y gnome-obex-server he reutilizado su gestor de hilos (threading) para hacer lo que quería. Esto me ha llevado a pasarme a python2.4 ya que en 2.3 no hay Popen (en mayúscula)

Así que despues de unas 30 horas de trabajo (más o menos) acabo de liberar la versión 0.0.3 de TcosConfig.

Después de la pantalla de bienvenida se muestran algunos datos configurables por casillas, simplemente activar o desactivar el soporte de añadidos.



En esta segunda fase se pide datos avanzados (el kernel y las claves ssh no funciona ene le interfáz aún)



Ahora se selecciona un método de arranque y se añade un sufijo a las imágenes (initramfs-XXXX) para poder tener varias a la vez



Aquí es donde más horas he metido, al pulsar el botón comenzar se ejecuta gentcos con una serie de parámatros extraidos de la propia configuración del interfaz y del archivo /etc/tcos/tcos.conf, el interfaz no se congela y se va leyendo según el comando se va ejecutando.



Una vez terminado se nos avisa si queremos guardar nuestra configuración personalizada del interfaz en el archivo /etc/tcos/tcos.conf por lo que nos servirá de "plantilla" para próximas ejecuciones.



El interfaz está en español y en inglés ( archivos po )

Se agradecen sugerencias, ayuda o betatesters....




TCOS, avances del proyecto
Sigo trabajando en TCOS ( incluso sin esperar al Summer of Code ), y tengo bastantes progresos.

1.- El más importante y más reciente, soporte para arranque Etherboot, muchos de los terminales que hay en todo el mundo (3.000.000) usan disquetes que son más baratos que las tarjetas de red con soporte PXE.

2.- El siguiente en importancia es un servidor SSH en el terminal para poder acceder a él de manera remota e incluso ejecutar comandos
( ssh -X root@terminal xlinks2 ) :P Openssh necesita soporte PAM y he encontrado otro más simple que no lo necesita => dropbear.

3.- Soporte para aplicaciones locales, he conseguido meter links2, 6Mb ( en forma gráfica [-g] ) en incluso dillo, 25 Mb (navegador ligero) sin muchos problemas, cualquier aplicación gráfica no demasiado pesada puede ser candidata a ejecutarse desde el terminal.

4.- Redución del tamaño del initramfs ( menos de 4Mb ), es posible arrancar un terminal con 32 Mb de RAM y swap.

5.- Generación automática (gentcos) de varios tipos de imágenes:

* initramfs & usr.squashfs para arranque PXE
* linux.nbi & usr.squashfs para arranque Etherboot
* tcos-boot.iso para arranque por medio de cdrom ( cargador de arranque isolinux o grub )

6.- Información sobre HACKING de TCOS, crear un archivo en /etc/tcos/hacking/ para añadir nuestros propios programas. Ejemplo, añadir el binario display para ver imágenes:

####### /etc/tcos/hacking/display ##############
# script TCOS para soporte del comando display

cpifexists $(pathof display) /usr/bin

##############################################


7.- Documentación README sobre arranque de terminales PXE, Etherboot, depurar cuando no arranca el terminal y reducir el consumo de ram, y manpage del script gentcos.

8.- Separar las funciones shell script a su propio archivo /etc/tcos/tcos-functions (scripts más limpios)

9.- Comprobación de que existen los paquetes que se necesitan para construir la imagen de arranque, como no son dependencias estrictas avisa que faltará soporte de ciertas cosas hasta que instalemos lo que se nos pide.

10.- Wrapper para copiar archivos, directorios y binarios dentro del initramfs.

11.- Nuevo logo y usplash de arranque (gracias Paulino):











TCOS & SoC
Pues visto que el proyecto TCOS parece ser interesante para el futuro de redes thin client me he tomado la libertad de proponerlo al Google Summer of Code, y si hay suerte trabajar este veranito para mejorarlo.

Como hay que catalogar el proyecto dentro de alguno de los patrocinadores, lo he puesto como proyecto debian, y lo he añadido al wiki de SoC.

Como requisito necesito un DD (Debian Developer) para ser mi mentor, he hablado ya con varios que se han interesado por el proyecto pero aún no tengo nadie seguro ¿Algún DD por la sala?

Lo que no tengo demasido claro son las labores del mentor (supongo que será el tutor del proyecto)

Las cartas están en la mesa, ¿habrá suerte?