Monitorizar la entrada y salida de tu linux

El otro día en el curro teníamos un servidor medio caído por que si IO waiting era mas heavy que los Hellowen. El problema es que no sabíamos quien era el culpable. Nos pusimos a buscar la manera de dar con el y Txema nos apunto la existencia de iotop. Desgraciadamente el server corría una versión del kernel demasiado antigua y no nos sirvió de mucho. Pero bueno, es una herramienta interesante.

Empaquetado deb rápido y sucio de aplicaciones python

Ieup,

Toca mini-receta basado en el artículo de David en la web de crysol.

  1. Necesitamos un fichero setup.py. Si el software no lo trae deberemos crearlo nosotros.
  2. creamos el dir debian: mkdir debian
  3. Creamos el fichero debian/control:

  4. Source: hola-pythoneros
    Section: utils
    Priority: optional
    Maintainer: Juan Nadie <juan.nadie@loquesea.es>
    Build-Depends: debhelper (>= 5.0.38)
    Build-Depends-Indep: cdbs (>= 0.4.43), python-all-dev (>= 2.3.5-11), python-central (>= 0.5.6)
    Standards-Version: 3.7.2
    XS-Python-Version: all


    Package: hola-pythoneros
    Architecture: all
    Depends: ${python:Depends}
    XB-Python-Version: ${python:Versions}
    Description: Ejemplo básico de script Python empaquetado en Debian GNU/Linux
    Un script "hola mundo" que sirve únicamente para explicar cómo se
    empaquetan scripts Python en GNU/Linux de forma adecuada.

  5. Creamos el rules (ojo, tiene que ser ejecutable chmod +x debian/rules):

  6. #!/usr/bin/make -f


    DEB_PYTHON_SYSTEM=pycentral
    DBK2MAN_XSL=/usr/share/xml/docbook/stylesheet/nwalsh/manpages/docbook.xsl


    include /usr/share/cdbs/1/rules/debhelper.mk
    include /usr/share/cdbs/1/class/python-distutils.mk

  7. Creamos el debian/changelog : dch --create

Con esto tenemos lo ultrabásico para poder compilar el paquete deb: dpkg-buildpackage

Es una manera sucia de empaquetar algo (es más una nota mental para mi que un howto) y para que el paquete sea medio decente hay que hacer muchas más cosas 🙂 Leeros el articulo de David que es más completo.

Como procesar un fichero .changes de un paquete debian

Buenas,

Si queremos procesar un fichero .changes de un paquete debian es tan sencillo como:

  1. Quitarle la firma
  2. Procesar el contenido con una librería de yaml, por ejemplo syck

En código sería lo siguiente:

import os
import GnuPGInterface
import syck

changes_file = '/tmp/factoriapegaso-panel_0.2.6-4_amd64.changes'

gnupg = GnuPGInterface.GnuPG()
ciphertext = open(changes_file).read()
p2 = gnupg.run(['--decrypt'], create_fhs=['stdin', 'stdout'])
p2.handles['stdin'].write(ciphertext)
p2.handles['stdin'].close()
decrypted_plaintext = p2.handles['stdout'].read()
p2.handles['stdout'].close()
#Puede fallar por no tener la llave GPG
try:
        p2.wait()
except:
        pass

changes_info = syck.load(decrypted_plaintext)


print "tenemos:"
print changes_info

No es lo mas elegante del mundo, solo una prueba de concepto 🙂

Howto parse a debian changes file in python

Firts post in English (just a test :). If yo want to parse a debian package changes file in python is so easy as:

import os
import GnuPGInterface
import syck

changes_file = '/tmp/factoriapegaso-panel_0.2.6-4_amd64.changes'

gnupg = GnuPGInterface.GnuPG()
ciphertext = open(changes_file).read()
p2 = gnupg.run(['--decrypt'], create_fhs=['stdin', 'stdout'])
p2.handles['stdin'].write(ciphertext)
p2.handles['stdin'].close()
decrypted_plaintext = p2.handles['stdout'].read()
p2.handles['stdout'].close()
#Puede fallar por no tener la llave GPG
try:
        p2.wait()
except:
        pass

changes_info = syck.load(decrypted_plaintext)


print "tenemos:"
print changes_info

Generar metapaquetes deb con equivs

Mirando el sistema de compilación de gNewSense descubro el software equivs. Ya hay bastante docu (y en cristiano) así que solo voy a explicar que hace este software. A través de un fichero de control, del estilo de los debian/control de un paquete deb) nos permite generar un paquete deb que solo incluye dependencias a otros paquetes. Bueno, y si queremos también script de pre/post-install/remove, copyright,….

moreutils, utilidades para la consola

ShellHoy toca entrada un poco techie, que me estoy perdiendo en mi ombligo ultimamente:)
En el recomedable blog Debian Package of The Day encuentro una interesante entrada sobre moreutils, paquete que incluye unas cuantas utilidades de consola que nos harán muy felices al tener que scriptear algo en shell script.

A modo de resumencillo:

Continue reading

Desarrollo de paquetes deb con subversion

Me estoy convertiendo en un gran fan de los sistemas de control de versiones, concretamente de subversion. Me parece fundamental el tener un control de los cambios que va sufriendo el código, sobre todo cuando aparecen errores que ya han ocurrido en el pasado, etc. También me estoy entrenando en el noble arte de hacer paquetes .deb. Es una manera estupenda de distribuir nuestro trabajo (sobre todo por que en el trabaja usamos Debian y/o Ubuntu). Entonces si sumamos los paquetes .deb y svn tenemos la repera: svnbuildpackage

Tambien hay herramientas para otros sistemas de control de versiones: cvs-buildpackage, darcs-buildpackage. arch-buildpackage y tla-buildpackage por ejemplo.
Más info: