24 ene. 2012

API de Mercurial para Python

Mercurial como ya se ha explicado es un sistema de control de versiones distribuído desarrollado en python, otros sistemas de control de versiones tienen API o módulos para python, pero para el caso de mercurial no había visto una API para usarlo desde python.

Revisando los artículos que publican en los sparks de python  en Google+ me encuentro con que existe un API que se llama hgapi.

El API soporta lo siguiente:

hg init
hg id
hg add <file>
hg commit [files] [-u name] [--close-branch]
hg update <rev>
hg heads
hg log
hg remove
hg status
hg merge (fails on conflict)
hg revert


El procedimiento para instalarlo es el siguiente:
 # pip install hgapi
 Downloading/unpacking hgapi
  Downloading hgapi-1.1.0.tar.gz
  Running setup.py egg_info for package hgapi
  
Installing collected packages: hgapi
  Running setup.py install for hgapi
  
Successfully installed hgapi
Cleaning up...

Se crea el directorio pruebas:

$mkdir pruebas

Dentro del directorio pruebas se crea el archivo hora.txt:
cd pruebas
touch hora.txt

Ya está todo listo para probar el API.

1. Se importa el módulo hgapi:
import hgapi
2. Fuera del directorio pruebas se crea la instancia del repositorio:
repo = hgapi.Repo("pruebas")
3. Se inicializa el repositorio:
repo.hg_init()
4. Se agrega el archivo hora.txt:
repo.hg_add("hora.txt")
5. Se realiza el commit colocando la descripción y el usuario quien realiza el commit:
repo.hg_commit("Agregando archivo hora.txt",user="ernesto")
6. Se captura la descripción:
str(repo['tip'].desc)
'Agregando archivo hora.txt'

Esto es lo básico que explica el sitio de hgapi. Lo interesante es que ya se puede automatizar procesos de mercurial desde python.

La documentación de hgapi la pueden revisar aquí.

23 ene. 2012

Crear metapaquete con equivs (incorporando archivos postinst y prerm)

Para continuar con los artículos de metaempaquetado para Debian/Canaima, el último artículo sobre la herramienta equivs.

Lo que faltaba por hacer era crear un metapaquete de configuración que copie archivos de configuración del escritorio cuando se instala y que se guarde dichas configuraciones en el directorio /etc/skel para cuando se cree un nuevo usuario en el sistema.


En el tutorial de Ubuntu Forums explican como crear el metapaquete con archivos postinst y prerm, el problema es que los archivos de ejemplo no se encuentran en los enlaces que hacen referencia.

La idea es agregar el applet del programa radiotray en el escritorio de gnome para todos los usuarios. Como normalmente ya se tiene usuarios en el equipo se tendrá que copiar los archivos de configuración de radiotray al directorio home de cada usuario; para los usuarios que se creen luego de la instalación del metapaquete el sistema copiará los archivos de configuración que se encuentran en el directorio /etc/skel/ .

Lo primero que se necesita hacer es crear el archivo control para metaempaquetado de equivs con el comando equivs-control:

$equivs-control canaima-radiotray-conf

Esté archivo contendrá:

Section: misc
Priority: optional
Homepage: http://canaima.softwarelibre.gob.ve
Standards-Version: 3.9.1

Package: canaima-radiotray-conf
Version: 0.1
Maintainer: Ernesto Nadir Crespo Avila <ecrespo@cenditel.gob.ve>
Pre-Depends: radiotray
Depends: ${misc:Depends}
Architecture: all
Copyright: copyright
Changelog: changelog
Files: ./radiotray/radiotray.desktop /etc/skel/.config/autostart/radiotray.desktop
       ./radiotray/bookmarks.xml   /etc/skel/.local/share/radiotray/bookmarks.xml
File: postinst
 #!/bin/sh -e
 # preinst for main-package-config. Divert some configuration file of main-package.
 .
 set -e
 .
 PKG=canaima-radiotray-conf
 .
     if [ "$1" = configure ] ; then
 .
    for usuario in  /home/*? ; do
 .
        usuario_min=$(basename $usuario)
 .
        case $(grep "${usuario_min}:.*:.*:.*:.*:.*:::" /etc/shadow ) in
 .
                '')
                #no se hace nada
                ;;
 .
                *)
                usuario=${usuario_min}
 .
                if [ -f  /home/${usuario}/.config/autostart/radiotray.desktop ];
 .
                then
 .
                        cp -r /etc/skel/.config/autostart/radiotray.desktop /home/${usuario}/.config/autostart/radiotray.desktop
 .
                        chown ${usuario}.${usuario} /home/${usuario}/.config/autostart/radiotray.desktop

                else
 .
                        mkdir -p  /home/${usuario}/.config; chown -R ${usuario}.${usuario} /home/${usuario}/.config
 .
                        mkdir -p /home/${usuario}/.config/autostart; chown -R ${usuario}.${usuario} /home/${usuario}/.config/autostart
 .
                        cp -r /etc/skel/.config/autostart/radiotray.desktop /home/${usuario}/.config/autostart/radiotray.desktop
 .
                        chown ${usuario}.${usuario} /home/${usuario}/.config/autostart/radiotray.desktop
 .
                fi
 .
                if [ -f /home/${usuario}/.local/share/radiotray/bookmarks.xml ];
 .
                then
 .
                        cp -r /etc/skel/.local/share/radiotray/bookmarks.xml /home/${usuario}/.local/share/radiotray/bookmarks.xml
 .
                        chown ${usuario}.${usuario} /home/${usuario}/.local/share/radiotray/bookmarks.xml
 .
                else
 .
                        mkdir -p /home/${usuario}/.local; chown -R ${usuario}.${usuario} /home/${usuario}/.local
 .
                        mkdir -p /home/${usuario}/.local/share; chown -R ${usuario}.${usuario} /home/${usuario}/.local/share
 .
                        mkdir -p /home/${usuario}/.local/share/radiotray; chown -R ${usuario}.${usuario} /home/${usuario}/.local/share/radiotray
 .
                        cp -r /etc/skel/.local/share/radiotray/bookmarks.xml /home/${usuario}/.local/share/radiotray/bookmarks.xml
 .
                        chown ${usuario}.${usuario} /home/${usuario}/.local/share/radiotray/bookmarks.xml
 .
                fi
 .
        esac
 .
    done
 .
     fi
 .
    exit 0
File: prerm
 #!/bin/sh -e
 .
 set -e
 .
 PKG=canaima-radiotray-conf
 .
    if [ "$1" = configure ] ; then
 .
        for usuario in  /home/*? ; do
 .
            usuario_min=$(basename $usuario)
 .
             case $(grep "${usuario_min}:.*:.*:.*:.*:.*:::" /etc/shadow ) in
 .
                '')
                    #no se hace nada
                    ;;
 .
                    *)
                    usuario=${usuario_min}
 .
                    if [ -f  /home/${usuario}/.config/autostart/radiotray.desktop ];
 .
                        then
 .
                            rm -f /home/${usuario}/.config/autostart/radiotray.desktop
 .
                    fi
 .
                    if [ -f /home/${usuario}/.local/share/radiotray/bookmarks.xml ];
 .
                        then
 .
                            rm -f /home/${usuario}/.local/share/radiotray/bookmarks.xml
 .
                fi
 .
            esac
 .
        done
 .
    fi
 .
     exit 0
Description: Radiotray bookmarks to Venezuelan radio streaming
 Radiotray config to autostart in gnome and radio stream bookmark


Se define la sección y prioridad del programa, se define el sitio del programa, la versión del policy a utilizar; el nombre del programa, su versión, el mantenedor del programa, la predependencia en este caso es el programa radiotray.

La dependencia es ${misc:Depends}, está variable se define ya que se está usando debhelper para empaquetar. La arquitectura es all, se definen los archivos copyright y changelog.

Luego con la opción Files se define los archivos que se van a copiar en el directorio /etc/skel/ .

Con la opción File se define cada script que se desea agregar al paquete, en este caso los archivos postinst y prerm.

Lo que hace postinst es averiguar las cuentas de los usuarios del equipo y copiar los archivos de configuración en los directorios que usa gnome para manejar las configuraciones. En el caso de prerm lo que hace es borrar dichos archivos de cada usuario del equipo.

Por último se da una descripción corta y luego larga del programa.

El archivo changelog tendrá los cambios realizados en el metapaquete:

canaima-radiotray-conf (1:0.1) unstable; urgency=low

  * First release.

 -- Ernesto Nadir Crespo Avila <ecrespo@cenditel.gob.ve>  Fri, 23 Dec 2011 10:57:05 -0430

El archivo copyright contendrá lo siguiente:

Authors:

    Copyright (C) 2011 Ernesto Nadir Crespo Avila <ecrespo@cenditel.gob.ve>

License:

   This package is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; version 2 dated June, 1991.

   This package is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA

On Debian GNU/Linux systems, the complete text of the GNU General
Public License can be found in `/usr/share/common-licenses/GPL-2'.

Se crea el directorio radiotray que contendrá los archivos de configuración:
$mkdir radiotray

Se crean los archivos bookmarks.xml y radiotray.desktop. El primero define las radios por Internet que se quieren tener en los favoritos y el segundo archivo define que el programa radiotray se coloque como un applet en el escritorio Gnome.

Archivo bookmarks.xml. El contenido de este archivo se muestra en la siguiente figura:


Archivo radiotray.desktop:
[Desktop Entry]
Type=Application
Exec=radiotray
Hidden=false
X-GNOME-Autostart-enabled=true
Name[es_VE]=radiotray
Name=radiotray
Comment[es_VE]=Cliente de radio por internet
Comment=Cliente de radio por internet


Equivs toma la definición de archivos (File) y crea los archivos para el proceso de instalación. En la siguiente figura se muestra la estructura de archivos del directorio DEBIAN dentro del paquete deb:



Al subir el metapaquete a un repositorio e instalar se puede ver en la siguiente figura las radios que aparecen en favoritos de radiotray:


17 ene. 2012

No a SOPA y PIPA




Gracias e1th0r por las imagen en contra de SOPA.

El día de hoy fue publicado un artículo que escribí en el diario Ciudad Caracas. Ahí hago un resumen de lo que es SOPA y PIPA y  como nos afectaría a todos si son aprobadas.

Presentaré tres vídeos donde se explica con más detalle lo que es SOPA y PIPA, como nos afectará si son aprobadas dichas propuestas de Ley.


Vídeo sobre ACTA:


Vídeo sobre SOPA:



Vídeo sobre PIPA:


Otro vídeo que trata sobre los derechos de autor:


Por esa razón el sitio de Debian Venezuela tendrá una página como protesta como lo muestra la figura:

Este blog estará en protesta el día de mañana desde las 8am hasta las 8am del día siguiente como lo muestra la figura:


Y esto por que? pues para evitar que muchos sitios tengan un mensaje de que está censurado:

Hasta ahora los sitios que estarán protestando son:

  • Wikipedia
  • Identi.ca
  • Mozilla
  • FreeSoftware Fundation
  • Reddit
  • Tucows
  • XDA Developers 
  • Cuevana
  • Anonymous
  • Diaspora
  • Twicpic
  • Wordpress
Y sigue sumando, si quiere conocer la lista completa la pueden ver aquí.

De latinoamerica se suma Hipatia, Solar, Solve Colibris, Debian-ve, etc.

Los que quieran apoyar la protesta colocando banners o quieren tener una infografía lo pueden ver en los siguientes enlaces:

  • Infografía: La pueden encontrar en la página de Derecho a Leer.
  • Plantilla de protesta para sus sitios lo pueden encontrar en artículo de alt1040.
  • Si sus sitios o blogs usan Drupal, Wordpress o Blogger, tienen una guía de como protestar en el sitio de Cibernauta Latino.

10 ene. 2012

Servidor Proxy DNS con pdnsd

Ya hace un tiempo había explicado como se instala un servidor proxy DNS con dnsmasq, ahora explicaré la configuración de PDNSD utilizando como servidor de DNS los servidores raíz de OpenNIC debido a los posibles problemas que nos genere la aprobación de la Ley SOPA y la Censura en Internet.

Si quiere utilizar los servidores de DNS de OpenNIC  más cercanos puede visitar el siguiente enlace. Si desea más información sobre OpenNIC puede revisar el siguiente artículo y la página del proyecto.

En mi caso luego de consultar los servidores de OpenNIC más cercanos usaré el siguiente servidor de DNS 192.121.86.100.

Instalación de pdnsd.


En Debian simplemente se ejecuta un apt-get install.
#apt-get install pdnsd

La aplicación muestra una ventana de dialogo donde menciona 3 métodos de configuración (resolvconf, servidores de DNS raíz o manual).

En este caso se usará el método manual y se selecciona en la ventana de dialogo.




Se edita el archivo /etc/pdnsd.conf .
Se agrega la siguiente información:
server {
    label = "OpenNIC";
    ip = 192.121.86.100; //IP del servidor DNS
    uptest = query;     //Lrealiza consultas  DNS de una solicitud DNS.
    interface=wlan0;     //La interface conectada a la red.
}

Se modifica a yes el parámetro START_DAEMON  del archivo /etc/default/pdnsd para iniciar automáticamente el servicio pdnsd.

START_DAEMON=yes

Al editar el archivo /etc/resolv.conf y agregar el servidor de DNS 127.0.0.1.

nameserver 127.0.0.1

Se reinicia el servicio pdnsd:
# invoke-rc.d pdnsd restart
Stopping pdnsd.
Starting pdnsd.


Se hace una consulta con dig:
dig www.barrapunto.com|grep "Query time"
;; Query time: 316 msec
 
dig www.barrapunto.com|grep "Query time"
;; Query time: 2 msec


Para verificar el funcionamiento del servidor se ejecuta el siguiente comando:
# pdnsd-ctl status
Opening socket /var/cache/pdnsd/pdnsd.status
pdnsd-1.2.8-par running on jewel.

Cache status:
=============
2048 kB maximum disk cache size.
56894 of 2107392 bytes (2.7%) memory cache used in 216 entries.

Thread status:
==============
server status thread is running.
pdnsd control thread is running.
tcp server thread is running.
udp server thread is running.
19 query threads spawned in total (0 queries dropped).
10 running query threads (10 active, 0 queued).

Configuration:
==============
Global:
-------
    Cache size: 2048 kB
    Server directory: /var/cache/pdnsd
    Scheme file (for Linux pcmcia support): /var/lib/pcmcia/scheme
    Server port: 53
    Server ip (0.0.0.0=any available one): 127.0.0.1
    Ignore cache when link is down: off
    Maximum ttl: 604800
    Minimum ttl: 900
    Negative ttl: 900
    Negative RRS policy: default
    Negative domain policy: auth
    Run as: pdnsd
    Strict run as: on
    Use NSS: on
    Paranoid mode (cache pollution prevention): on
    Ignore CD ('checking disabled') flag in queries: on
    Control socket permissions (mode): 600
    Maximum parallel queries served: 40
    Maximum queries queued for serving: 60
    Global timeout setting: 10
    Parallel queries increment: 2
    Randomize records in answer: on
    Query method: udp_only
    Query port start: 1024
    Query port end: 65535
    TCP server thread: on
    TCP query timeout: 30
    Delegation-only zones: (none)
Server 0:
------
    label: OpenNIC
    ip: 192.121.86.100
    server assumed available: yes
    port: 53
    uptest: query
    timeout: 120
    uptest interval: 900
    ping timeout: 600
    ping ip: (using server ip)
    interface: wlan0
    device (for special Linux ppp device support):
    uptest command:
    uptest user: (process owner)
    force cache purging: off
    server is cached: on
    lean query: on
    Use only proxy?: off
    Assumed root server: no
    Randomize server query order: no
    Default policy: included
    Policies: (none)
Succeeded


Se pueden agregar tantas IPS como se quiera.

Si desea más información para configurar pdnsd revise los siguientes enlaces:
https://wiki.archlinux.org/index.php/Pdnsd_(Espa%C3%B1ol)
http://manualinux.heliohost.org/pdnsd.html

9 ene. 2012

Feliz año 2012

Les deseo a todos un Feliz año 2012 y que todas sus metas se cumplan. Este correo debí enviarlo los primeros días del año pero por motivos de viaje fue hasta ahorita que pude sentarme a escribir.

Entre las metas de este blog fue el escribir para el año 2011 por lo menos más de 36 artículos que fue logrado el año 2009, en el 2011  se publicaron 49 artículos que da un promedio por mes de 4 artículos.

Adicional a esto en el mes de Diciembre se logro superar la cantidad de visitas mensuales del blog de 3800 que fue el máximo a 4160 para ese mes según lo muestra la siguiente figura.

La distribución por países de las visitas al blog en toda su vida es la siguiente:
España            11.440
Venezuela         6.697
México               5.927

Argentina          4.261

Estados Unidos 3.230

Chile                    2.799
Colombia             2.042
Perú                        757
Alemania                674
Países Bajos           509

Muchas gracias a todos por leer el blog.

Para este año espero terminar con los artículos sobre PyQt, PyGTK, gráficos con python, android con python y seguir con artículos sobre empaquetado para Python y Debian, de administración de servidores, mercurial, monitoreo entre otros temas. Posiblemente empezar a escribir sobre programación de Python con wxwidget.

Es más, siguiendo el ejemplo de Blogeros como el sitio Orsai, dejo abierta la posibilidad de quienes leen este blog propongan temas, claro sobre software Libre y Linux.

Por lo pronto aspiro que este año pueda escribir más de 50 artículos. Espero tener el tiempo y los temas preparados para lograrlo.




AddThis