Ubuntu 8: Hardy Heron LTS

Hardy Heron LTS

Hace pocos días salió a la luz Hardy Heron, no fuimos pocos los que recién parido quicimos tenerlo en nuestras manos y gozar de su belleza. Lo bajé de la web TuxPUC que es de un grupo de Investigación alrededor del tema de Linux y Software Libre que existe en mi universidad. Pertenecí a este grupo hace algún tiempo.

Quemé la imagen del Hardy Heron 8.04 LTS Alternate a un CD y procedí con algunos comandos para actualizar mi sistema.

gksu «sh /cdrom/cdromupgrade»

Durante el proceso de Upgrade guardé una copia de algunos archivos que el sistema de actualización sugería reemplazar. Alrededor de 300 MB fueron descargadas pues tengo más software instalado que el que vino en el CD de Gusty Gibbon. Entonces no les contaré tanto sobre el Hardy Heron sino del comportamiento de otras aplicaciones ya instaladas en Ubuntu antes del upgrade.

LDAP

cp /etc/ldap/ldap.conf /etc/ldap/ldab.conf.bak

Se ha insertado en la primera línea un comentario sobre la versión de este archivo de configuración.
Se ha reemplazado el dc base de ejemplo de example a nodomain.
Es seguro reemplazar este archivo.

MySQL

cp /etc/mysql/my.cnf /etc/mysql/my.cnf.bak

Se ha agregado una anotación con prioridad de Importante sobre cambios generales al archivo de configuración de mysql. Yo Había activado skip-external-locking para administración remota pero no tuve éxito así que puedo reemplazar este archivo sin problemas.

Asterisk

cp /etc/asterisk/extensions.conf /etc/asterisk/extenstions.conf.bak

Se han corregido ciertas imprecisiones en los nombres de comandos del CLI de asterisk. También se han reemplazado algunas comillas simples por comillas dobles. Es conveniente rescatar configuraciones personales como pueden ser extensiones creadas por nosotros en este archivo.

Por ejemplo yo tengo las siguientes líneas. Sin embargo es curioso que la actualización de asterisk no reemplaza iax.conf. Entonces no realiza el reemplazo por tratarse de archivos de configuración sino únicamente de los que se hayan tenido cambios desde la versión anterior.

;
[positivo]
exten => 444,1,Dial(IAX2/Rita)
exten => 444,2,Hangup
exten => 445,1,Dial(IAX2/Bob)
exten => 445,2,Hangup
exten => 600,1,Dial(IAX2/Ziggy)
exten => 600,2,Hangup
;

ProFTPd

cp /etc/proftpd/proftpd.conf /etc/proftpd/proftpd.conf.bak

Se ha agregado una línea imprescindible en la versión 1.3 de proftpd que es una instrucción Include. Se debe reemplazar el archivo de configuración anterior.

PHP5

cp /etc/php5/cli/php.ini /etc/php5/cli/php.ini.bak

Se ha incrementado la memoria que un script puede usar en memoria de 32M a 128M.
Se ha incluido las opciones para la salida de errores.
La función dl() que se emplea en servidores multihilo como IIS o Zeus es automáticamente desabilitada en ellos por lo que está activa por defecto.
El valor para cgi.fix_pathinfo es por defecto 0 pero la documentación señalaba 1, esto ha sido corregido.
El parámetro fastcgi.log ha sido renombrado a fastcgi.logging.
Al final del archivo se ha incluido una línea que hace referencia a la extensión imap.so.

cp /etc/php5/apache2/php.ini /etc/php5/apache2/php.ini.bak

Los cambios en este archivo son los mismos que se presentan en /etc/php5/cli/php.ini. Adicionalmente, al final del archivo se hace referencia a la extensión mcrypt.so.

SASL

cp /etc/default/saslauthd /etc/default/saslauthd.bak

Se ha agregado unas línea de Descripción del demonio de Autenticación SASL.
Se ha agregado unas líneas para un nombre corto para este demonio.
Ahora es necesario emplear el flag -m.

Tremendo Bug

PHP5 no trae imagick ni recode. imagick.so y recode.so están en los repositorios oficiales de Ibuntu pero existen problemas con libWand.so.9.
El buen Olexandr Zanichkovsky coloca en su repositorio de launchpad los paquetes arreglados.
deb http://ppa.launchpad.net/ozanichkovsky/ubuntu hardy main
Que dicho sea de paso, aún no logro instalar.

Git y Mercurial: QuickStart for the impatient

Deseaba probar los sistemas de control de versiones Git y Mercurial así que decidí versionar un pequeño proyecto para postear al Twitter de manera automatizada los últimos feeds de los blogs que administro. Veamos las fuentes de este proyecto como simpleas archivos alacenados en un directorio simple. Inicialmente este directorio se llamaba RSStoTwitter y pensa cambiarlo a RSS2Twitter pero uno de los blogs está sindicado con Atom así que el nombre no era preciso. No me he preocupado en revisar si el Atom es un RSS, pero supongo que amgos son estructuras XML sencillas y transformables entre sí ya que su finalidad e sla misma. No nos desviemos más y vayamos a lo nuestro.

He creado tres directorios para realizar las pruebas.

git_github: versionará empleando Git y es alojado en el servidor libre de GitHub.com
git_assembla: versionará empleando Git y es alojado en el servidor libre de Assembla.com
hg_freehg: versionará empleando Mecurial (HG por el símbolo del elemento químico Mercurio) y es alojado en el servidor libre FreeHG.org

Para el caso de Git se puede emplear la seguridad de un certificado RSA el cual podemos crear desde el directorio home de nuestro usuario:

cd .ssh
ssh-keygen -t rsa
<nombre para el certificado>
<password>

Para mostrar la llave pública realizamos la impresión en pantalla de un archivo generado en el proceso anterior:

cat id_rsa.pub

Esta llave se puede ingresar tanto en el Sitio de Assembla que hayamos creado como en el Perfil de GitHub.
Assembla es un poco más complejo debido a las mayores opciones que permite. Por ejemplo el soporte para Git debemos agregarlo ya que no está activo por defecto y podemos elminar Subversion.

qct
qgit

Para el caso de GitHub realicé lo siguiente:

cd twitterrssmultifeed/
git init
touch README
git add README
git commit -m ‘first commit’
git remote add origin git@github.com:adagio/twitterrssmultifeed.git
git push origin master

Ese archivo README está vació pero ya se encuentra en el repositorio. Luego de copiar las fuentes de mi aplicación las agregué, hice commit y nuevamente push. Para el caso de Assembla no realicé el paso de crear un archivo README que no forma parte de mi aplicación sino de un ejemplo. Así que luego de copiar las fuentes en el directorio ejecuté los siguientes comandos.

git add .
git-commit -m «first commit»
git remote add origin git@git.assembla.com:twitterrssmultifeed.git
git push origin master:refs/heads/master

Debido al certificado RSA el password me es solicitado, esto se puede automatizar.

Para el caso de Mercurial realizar un proceso similar fue algo accidentado ya que no completaba la operación de commit. Lo más sencillo fue clonar el repositorio al directorio local:

cd mercurial_freehg/
clone http://freehg.org/u/adagio/twitterrssmultifeed/ twitterrssmultifeed/

Y Luego de copiar las fuentes emplear una aplicación que realice el commit ( hg status, hg add, hg commit ):

qct

Esta aplicación detecta de forma automática el sistema de control de versiones empleado. Seguramente lo hace buscando los ficheros .git o .hg, de forma similar para otros sistemas como subversion o cvs.

Finalmente el proceso de push lo realicé sin problemas.

hg push http://freehg.org/u/adagio/twitterrssmultifeed/

Vemos que Git y Hg el proceso de commit está separado del push. La teoría de estos sistemas debe justificar esta implementación y el uso de herramientas gráficas totalmente integradas al sistema operativo como Tortoise nos ocultan estos interesantes detalles que podrían ser muy útiles cuando deseamos conocer si ya hemos sobreescrito algún archivo entre otras aplicaciones bastante prácticas.

Pensaba probar el promocionado sistema Bazaar pero parece que los dos que he explicado son mejores. Es una interesante tarea para quien los use conocer sobre la comparación de fuentes, creación de forks, exportación de proyectos, candados, etc. Pero personalmente le doy el uso más sencillo de versionado personal.

Alrededor de estas tecnologías sitios como Assembla están brindando la posibilidad de realizar un seguimiento a reporte de bug, tener salas de chat, establecer hitos, seguir un proceso formal de desarrollo, entre otras herramientas que deben ser seleccionadas de acuerdo a la naturaleza del proyecto que se tenga.

Saludos.

Google Aplication Engine (GoogleApp Engine)

Hoy probé un poco del poder del motor de aplicaciones de Google. Basta bajar el instalador, ejecutarlo y empezar a realizar algunas pruebas.

Creé un directorio de trabajo con el nombre librodevisitas donde copié el contenido de la aplicación de ejemplo guestbook.

Realicé algunas modificaciones al archivo app.yaml que es un archivo similar al manifest en java, es decir un archivo descriptivo que guía el despliegue de la aplicación. En este caso se requiere el nombre de la aplciación, la versión, el lenguaje intérprete y la versión de la interfaz para aplicaciones empleada. La línea más importante es la que indica el script a ejecutar que en este caso es un archivo de texto con código en lenguaje python (archivo *.py).

application: librodevisitas
version: 1
runtime: python
api_version: 1

handlers:
– url: .*
script: librodevisitas.py

También modifiqué el archivo librodevisitas.py originalmente llamado guestbook.py y reemplacé algunas cadenas para mostrar una interfaz en lenguaje español además de agregar un un título de encabezado de página.

Para ejecutar la aplicación web procedemos a desplegarla con la aplicación dev_appserver.py ubicada en la raíz del directorio google_appengine en nuestro sistema de archivos.
Entonces ubicándonos en el directorio que contiene al de nuestro trabajo ejecutamos el servidor de aplicaciones indicando el puerto por el cual se publicará la aplicación y el nombre del directorio que contiene los archivos. Por ejemplo:

dev_appserver.py –port=9999 librodevisitas

En un navegador web podemos ver nuestra aplicación en la dirección http://localhot:9999

Además GoogleApp Engine ofrece alojamiento libre para las aplicaciones que desarrollamos con esta tecnología. Me he registrado y con el link de Create App podemos indicar un nombre para la aplicación (que formará parte del nombre de dominio) y el nombre clave de la aplicación (que debe coincidir con los datos del archivo *.yaml).

Una forma sencilla de subir las fuentes que tenemos localmente es crear un *.tar.gz (archivo consolidado y comprimido) con los archivos necesarios.1

Al subirlo el sistema se encargará de la descompresión de este archivo.

Luego mi aplicación ya estaba disponible en: http://appdrop.com/apps/librodevisitas/

Provecho. Espero tu firma.