jueves, 26 de mayo de 2011

Como cambiar un texto en muchos archivos

Hola!

Mientras más trabajo con GNU/Linux (y la consola) más me impresiona su poder y flexibilidad al mismo tiempo que se mantiene la elegancia.

Una necesidad que se presenta con cierta recurrencia es la de cambiar un texto que aparece en muchos archivos por otro texto. Decidí crear un script para las personas que tengan la misma necesidad y que no lo tengan que hacer desde 0.

El script es así:

#!/bin/bash

# copyright 2011 Edmundo Carmona
# Released under the terms of Affero GPLv3

REPLACED="$1"
REPLACEMENT="$2"
FILTER="$3"
TEMP_FILE="$4"

echo Will replace "$REPLACED" with "$REPLACEMENT" on files named "$FILTER" \
    using "$TEMP_FILE" as the temporary file

find ./ -iname "$FILTER" -exec grep -Hi "$REPLACED" {} ';' | sed 's/:.*//' \
    | uniq | while read filename; do
    echo replacing on $filename
    sed "s/$REPLACED/$REPLACEMENT/g" < "$filename" > "$TEMP_FILE"
    mv "$TEMP_FILE" "$filename"
done


La forma de llamarlo es la siguiente:
- 1er parámetro: Texto que va a ser reemplazado.
- 2do parámetro: Texto que va a entrar a reemplazar.
- 3er parámetro: Filtro de archivos a buscar. Por favor, encerrarlo en comillas simples o dobles, de lo contrario bash lo va a reemplazar.
- 4to parámetro: Archivo temporal a utilizar. La sustitución se hace utilizando un archivo temporal intermedio que al final desaparece.

Por ejemplo, para reemplazar el texto Linux por GNU-Linux en los archivos .txt y utilizando el archivo temp.txt como el temporal, la llamada se haría de esta forma:

./text_change Linux "GNU-Linux" '*.txt' temp.txt

Nota: Tener cuidado de no utilizar caracteres especiales para reemplazar porque esto va a ser hecho utilizando sed. Caracteres como \ deben ser especificados con sumo cuidado. Adicionalmente, como pueden ver en el script, la búsqueda de los archivos involucrados se hace con find así que la búsqueda va a ser recursiva pasando por los subdirectorios del directorio actual.

Ventas de servidores GNU/Linux alcanzan US$ 2 mil millones

Buenos días

Por informaciones de IDC se sabe que las ventas de servidores aumentaron un saludable 12.1% en el Q1 de 2011 comparado con el mismo periodo del año pasado. Todos los segmentos de ventas de servidores crecieron. HP se llevó la palma con 31.5% de las ventas con IBM siguiéndoles de cerca con 29.2%.

Si bien un crecimiento del 12.1% es bueno, la ventas de servidores GNU/Linux crecieron aún más con un incremento de 16.9% y alcanzando US$ 2 mil millones para colocarse con un 16.8% de las ventas totales de los servidores. Este es el 6to cuarto consecutivo de crecimiento para el sistema opertativo libre que se sigue posicionando muy bien en los centros de datos del mundo entero.

Con información de serverwatch.

miércoles, 25 de mayo de 2011

Módulo que permite conectar Asterisk con Skype llega a su fin

Luego de decir que no había que tener absolutamente ningún recelo luego de su adquisición de Skype por parte de Microsoft tenemos que Microsoft le notificó a Digium (entidad que subvenciona el desarrollo de Asterisk) que no va a renovar el contrato que permitía que se vendiera/activara el módulo por el cual los usuarios de Asterisk se podían conectar a Skype.

Si quiere ver el anuncio, mire aquí.Simon Phipps tiene unos buenos comentarios al respecto aquí.

martes, 24 de mayo de 2011

Llega Linux 2.8!

Luego de seguir en la línea 2.6 de Linux por unos 8 años, en los cuales se han introducido muchos cambios radicales en el kernel sin necesidad de romper la arquitectura del mismo, Linus Torvalds piensa que podría estar llegando el momento de crear el kernel 2.8.

Eso significa que ahora va a haber una reingeniería del kernel que va a tomar años sin estabilizarse? No, en lo absoluto. Linus piensa que la numeración del 2.6 ya está muy alta (luego de haber lanzado 2.6.39) y quzás llame al nuevo release del kernel 2.8.0 así que espero que la noticia, si se da, no los vaya a tomar por sorpresa.

Para leer el correo completo mire aquí.

Hasta luego!

domingo, 22 de mayo de 2011

Como ejecutar acciones automáticamente luego de establecer una conexión con wvdial/ppp

Buenos días.

Estoy utilizando Kubuntu Natty y estoy bastante satisfecho con la distro aunque tengo un par de bugs que me fastidian con relativa frecuencia.

Uno de ellos es que cuando conecto mi modem GSM a internet, squid3 no logra salir a través de esta nueva conexión (no se por qué). La forma de resolverlo es bastante sencilla. Solo hay que reiniciar el servicio de squid y con eso ya puedo navegar normalmente (tengo las aplicaciones configuradas para utilizar squid).

Pero eso implica que cada vez que se establece la conexión (yo lo hago ejecutando wvdial normalmente) tengo que esperar a que se establezca la conexión para luego ejecutar el comando para reiniciar el proceso de squid. Decidí resolver esta situación y no es complicado.

pppd (en ubuntu... supongo que en debian también.. no podría garantizar en otras distros) ofrece un directorio donde se pueden colocar scripts que serán ejecutados cuando se establezca una conexión o cuando se caiga. En este caso como es una acción que se hace al establecer la conexión, creé un script en el directorio /etc/ppp/ip-up.d:

$ cat /etc/ppp/ip-up.d/9999squid #!/bin/bash

/etc/init.d/squid3 restart

Muy directo. Aseguúrese de tener la bandera de ejecutable del script habilitada y con eso está resuelto.

Adicionalmente, al ejecutar el script se reciben los siguientes parámetros (en el orden en el que se van recibiendo):
Interfaz
TTY
Velocidad
Dirección IP Local
Dirección IP del par
Un parámetro adicional opcional (recibido en la ejecución de pppd)

Supondría que también estarían disponibles las variables de entorno PPP_IFACE, PPP_TTY, PPP_SPEED, PPP_LOCAL, PPP_REMOTE, PPP_IPPARAM pero no he hecho la prueba.

Nota: Dado que el hack está emplementado en pppd, también debería funcionar con conexiones configuradas en NetworkManager que utilicen ppp (como las que son de banda ancha telefónica).

miércoles, 18 de mayo de 2011

Emulador de un PC basado en Javascript permite ejecutar linux en un browser

Hola!

De la mano de Fabrice Bellard nos llega el desarrollo de un emulador basado en Javascript que puede ejecutar linux.


Qué tal? Para entrar al emulador, hacer click aquí.

martes, 10 de mayo de 2011

Como instalar/utilizar django sin privilegios de administrador

Hola!

Estoy tumbando mis primeros pinitos con Django y con solo bajarlo me consigo con el problema de que hay que tener privilegios de administrador para poder hacer la instalación del mismo. La verdad, este tipo de cosas no me gusta hacerlas así que me senté un rato a ver si podía lograr utilizar Django sin necesidad de pasar por un administrador.

Cuando se extrae el contenido del tarball de django, tenemos algo como esto:
$ ls -l /home/antoranz/Downloads/Django/Django-1.3
total 72
-rw-r--r--  1 antoranz antoranz 19166 2011-03-21 20:38 AUTHORS
drwxr-xr-x 17 antoranz antoranz  4096 2011-05-09 09:16 django
drwxr-xr-x 14 antoranz antoranz  4096 2011-03-23 00:08 docs
drwxr-xr-x  2 antoranz antoranz  4096 2011-03-23 00:08 extras
-rw-r--r--  1 antoranz antoranz   592 2009-10-30 03:24 INSTALL
-rw-r--r--  1 antoranz antoranz  1558 2008-08-09 09:40 LICENSE
-rw-r--r--  1 antoranz antoranz  1494 2011-03-16 14:02 MANIFEST.in
-rw-r--r--  1 antoranz antoranz  1228 2011-03-23 00:08 PKG-INFO
-rw-r--r--  1 antoranz antoranz  1786 2011-01-28 17:07 README
drwxr-xr-x  2 antoranz antoranz  4096 2011-03-23 00:08 scripts
-rw-r--r--  1 antoranz antoranz   108 2010-08-05 08:00 setup.cfg
-rw-r--r--  1 antoranz antoranz  4325 2011-03-23 00:06 setup.py
drwxr-xr-x  5 antoranz antoranz  4096 2011-03-23 00:08 tests

Desde este directorio el administrador debe ejecutar el setup.py para hacer la instalación, pero evitemos hacer este paso.

Si tratamos de utilizar django en este punto con una aplicación ya comenzada:


$ python manage.py runserver
Traceback (most recent call last):
  File "manage.py", line 2, in
    from django.core.management import execute_manager
ImportError: No module named django.core.management
Qué tendremos que hacer  entonces para lograr que django sea "visible" para python? Debemos exportar la ruta del directorio incluido en el tarball dentro de la variable PYTHONPATH:

$ export PYTHONPATH=/home/antoranz/Downloads/Django/Django-1.3/
$ python manage.py runserver

Validating models...

0 errors found
Django version 1.3, using settings 'django1.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
De esa forma no se necesita la asistencia de un administrador para poder utilizar django.

PS Si se necesita ejecutar algunos de los otros scripts de administración de python (django-admin.py por ejemplo), incluir el directorio donde están estos scripts en el PATH y con eso queda resuelto.