jueves 2 de febrero de 2012

Bajar paquetes y no instalarlos con yum

Suelo usar en Debian/Ubuntu el comando:


# aptitude -yd algun-paquete

que permite bajar el paquete pero NO instalarlo. Pero yum no tiene ninguna opción parecida, aunque encontré que a través de un plugin se puede conseguir la misma de aptitude.

Para instalar dicho plugin:

# yum install yum-downloadonly


# yum --help
(...)
  Plugin Options:
    --downloadonly      don't update, just download
    --downloaddir=DLDIR
                        specifies an alternate directory to store packages

Y se puede usar, por ejemplo:

# yum install --downloadonly python-devel

Las instrucciones las encontré en http://www.cyberciti.biz/faq/yum-downloadonly-plugin/

miércoles 25 de enero de 2012

Instalando django_openid_auth usando PIP

Hay algunos problemas con la version 0.4 de django_openid_auth (ej: no se puede instalar via pip). El proyecto es open source, por lo tanto es muy facil subirlo a GitHub y compartir estos arreglos :-)

Básicamente bajé el proyecto original (revisión 88) y lo subi a GitHub. Para instalarlo usando PIP hay que ejecutar:

./pip install -e git+http://github.com/hgdeoro/hgdeoro_fork_of_django_openid_auth#egg=django_openid_auth

Actualización

Mucho mejor, instalamos usando PIP, pero un commit en particular (ec68dfc046d1a75b50080ea98c56eda71956ed7a):

pip install -e git+http://github.com/hgdeoro/hgdeoro_fork_of_django_openid_auth@ec68dfc046d1a75b50080ea98c56eda71956ed7a#egg=django_openid_auth

O también un tag en particular (bzr_revno_88):

pip install -e git+http://github.com/hgdeoro/hgdeoro_fork_of_django_openid_auth@bzr_revno_88#egg=django_openid_auth


miércoles 21 de diciembre de 2011

Cargando modulo 'tun' al iniciar Android

Al intentar usar el cliente de OpenVpn me encontré con que mi Android no carga automáticamente el modulo "tun", y por lo tanto la VPN nunca levanta.

Para solucionarlo, agregué el siguiente archivo en "/system/etc/init.d/10modprobetun":

Luego de crear el archivo, hace falta agregarle permisos de ejecución, usando:

chmod +x /system/etc/init.d/10modprobetun

Para poder modificar los contenidos de /system, hay que remontarlo en modo escritura, usando:

mount -o remount,rw /system


Ahora, luego de reiniciar el celular, el modulo aparece cargado:


localhost ~ # lsmod 
Module                  Size  Used by    Not tainted
wireless              189315  0
tun                    11765  0

jueves 8 de diciembre de 2011

Aprendiendo a usar uci en OpenWrt

Entre la extensa documentación de OpenWrt encontré que "uci show" puede ser de muchísima ayuda, ya que hace un "dump" de la configuración en un formato que después se puede usar con "uci get" y "uci set". Por ejemplo:


root@TL_MR3420:/etc/config# uci show system
system.@system[0]=system
system.@system[0].timezone=UTC
system.@system[0].hostname=TL_MR3420
system.ntp=timeserver
system.ntp.server=0.openwrt.pool.ntp.org 1.openwrt.pool.ntp.org 2.openwrt.pool.ntp.org 3.openwrt.pool.ntp.org
system.led_usb=led
system.led_usb.name=USB
system.led_usb.sysfs=tp-link:green:3g
system.led_usb.trigger=usbdev
system.led_usb.dev=1-1
system.led_usb.interval=50

Luego, por ejemplo, para cambiar la zona horaria:

root@TL_MR3420:/etc/config# uci set system.@system[0].timezone=ART3
root@TL_MR3420:/etc/config# uci commit system

sábado 5 de noviembre de 2011

Apache en primer plano (o sea, foreground)

Necesitaba iniciar apache y que quede funcionando en "primer plano". Inicialmente intenté arrancarlo con la opción "-X" para activar el modo debug, pero esto hacía que las páginas sean servidas muy lentamente. Buscando un poco más encontré http://httpd.apache.org/docs/2.2/programs/httpd.html y ví que se puede usar "-D" para lograrlo.

Finalmente, el comando que estoy usando es:


apache2 -DNO_DETACH -DFOREGROUND -f apache-dev.conf


lunes 31 de octubre de 2011

CyanogenMod 7.1 en mi LG Optimus One (P500)

Pude instalar exitosamente CyanogenMod 7.1 (Android 2.3 Gingerbread) en mi LG Optimus One (P500), usando un ROM no oficial (o sea un ROM que no es armado por el proyecto CyanogenMod). Mi celular tenía originalmente Android 2.2 (Froyo). El link con todas las instrucciones, advertencias, consejos, etc. es:

http://forum.xda-developers.com/showthread.php?t=946354

Mi intención con este post es compartir mi experiencia, nada más. Si vas a hacerlo, te recomiendo que sigas las instrucciones del link que puse más arriba.

Yo use la version "beta6.5.8", que era la versión estable del ROM.

Procedimiento que seguí:
  • Primero: investigar en internet los peligros de hacer esto! Lo peor que puede pasar es que el celular deje de funcionar (o sea, ni siquiera se pueda prender)! Además, los programas que vienen de fábrica puestos por LG no van a estar mas (NDrive, juegos, y la posibilidad de sincronizar los datos con la PC usando el soft de LG, etc, etc, etc). A mí esto no me afectaba porque no uso esos programas, y la sincronización la hago con Google.
  • Leer http://forum.xda-developers.com/showthread.php?t=946354 (allí están todas las instrucciones necesarias).
  • Backupear todos los datos importantes, sacar todas las fotos, downloads, etc. 
  • Antes de la instación tuve que rootearlo (no entiendo por qué Google no obliga a que todos los celulares salgan rooteados "de fábrica", o con algún procedimiento documentado para hacerlo). Lo rooteé exitosamente con GingerBreak-v1.20.
  • Luego instalé ClockworkMod ROM Manager (http://www.clockworkmod.com/rommanager): esto permite hacer un backup de la instalación original e instalar ROMs. Este programa de la opción de formatear la tarjeta SD para crear una partición ext2/ext3, swap, etc. Si se hace esto, se perderán los datos almacenados en la tarjeta SD.
  • Luego hice un backup del ROM original (Froyo), por las dudas... Y por las dudas lo bajé a la PC.
  • Luego bajé el ROM para hacer la actualización, en mi caso, la versión estable más reciente era la beta6.5.8. El link actualizado a la última versión estable está en http://forum.xda-developers.com/showthread.php?t=946354
  • Luego de bajar el archivo, hay que pasarlo a la tarjeta SD.
  • En el Android, abrir "Rom Manager", elejir "Intall ROM from SD Card", y elegir el archivo bajado en el punto anterior. Lo que recomiendan es "... Do not forget to wipe data/cache ...", así que yo elegí borrar todo (total no tenía datos importantes en el celular).
  • A esta altura, el celular se reiniciará, instalará la nueva versión y arrancará nuevamente.
  • Luego hace falta instalar un ROM que trae las aplicaciones de Google mínimas necesarias (por ejemplo, Market!). El link para bajar las apicaciones también está en http://forum.xda-developers.com/showthread.php?t=946354
  • Ahora ya podemos abrir Market y bajar las aplicaciones que necesites :-)

    domingo 23 de octubre de 2011

    Aptitude no funciona con multiarch

    Ubuntu Oneiric activa el soporte para multiarch.
    Multiarchi: Integrate support for cross-architecture installation of binary packages (particularly i386 / amd64, but also other combinations) in dpkg and apt
    Esto produce que aptitude sea bastante inusable debido a varios bugs (831768828807845183) que, al dia de hoy parecen estar sin resolver. Probé desactivar multiarch y al menos aptitude ya me funciona como antes. Para desactivar multiarch, edité el archivo /etc/dpkg/dpkg.cfg.d/multiarch y comenté la única linea que tiene:

    Antes:
    foreign-architecture i386

    Ahora:

    #foreign-architecture i386

    Al menos ya no me causa problemas al instalar nuevos paquetes, y ya no tengo conflictos imposibles de resolver (831768).

    ----------

    Luego de desactivar multiarch, no me funciona Wine, asi que simplemente no usaré aptitude, y estaré obligado a usar apt-get, o synaptic :-(

    Estilos de app. Gtk al usar KDE

    Por alguna cuestion la integración del estilo de las aplicaciones GTK (por lo tanto las app. Gnome) no está funcionando al usar KDE en Ubuntu Oneiric.

    Encontré una alternativa en https://bbs.archlinux.org/viewtopic.php?id=121803. Tampoco funcionó. Pero luego de revisar los estilos con soporte para GTK3, encontré que el estilo "oxygen-gtk" no existe en /usr/share/themes... Asi que probé con "Radiance" (que existe y es para GTK3) y funcionó! :-)

    Luego de hacer unas modificaciones, este es el contenido que dejé en /etc/gtk-3.0/settings.ini.

    [Settings]
    gtk-theme-name = Radiance
    gtk-fallback-icon-theme = gnome
    gtk-application-prefer-dark-theme = false
    gtk-font-name = Sans 9

    Y ahora queda pendiente arreglar las aplicaciones GTK2. Al parecer, las aplicaciones GTK2 buscan un archivo ".gtkrc-2.0" en el home del usuario, pero KDE genera un archivo llamado ".gtkrc-2.0-kde4". Esto puede solucionarse creando un symlink en el home del usuario con el siguiente comando:

    ln -s .gtkrc-2.0-kde4 .gtkrc-2.0

    sábado 22 de octubre de 2011

    Ubuntu Oneiric + Arduino 0.22 = problemas

    Luego de actualizar Ubuntu ya no me compiló un proyecto de Arduino. Luego de chequear en internet encontré que hay unos bugs relacionados a este problema:

    https://bugs.launchpad.net/ubuntu/+source/binutils-avr/+bug/818188
    https://bugs.launchpad.net/ubuntu/+source/avr-libc/+bug/791335
    http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=634341
    http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=633659

    Y la forma rápida de solucionarlo fue seguir el consejo del último de los links, editando el archivo hardware/arduino/cores/arduino/wiring.h (dentro del directorio donde tengo instalado Arduino 0.22) y comentando la linea 79:

    Inicialmente está así:

    #define round(x) ((x)>=0?(long)((x)+0.5):(long)((x)-0.5))

    y ahora:

    // #define round(x) ((x)>=0?(long)((x)+0.5):(long)((x)-0.5))

    No sé cuáles serán los "efectos colaterales" pero funcionó!

    miércoles 19 de octubre de 2011

    Cómo resetear South

    Podemos resetear South desinstalándolo y volviéndolo a instalar. Atención: esto hará que se pierdan todas las migraciones existentes, y los datos de las BD de las aplicaciones que se quieran resetear. Los pasos a seguir son:

    1) eliminar de la BD las tablas de South: south_migrationhistory.
    2) eliminar de la BD las tablas de las aplicaciones administradas por south.
    3) eliminar el paquete migrations de las aplicaciones que usen South.
    4) ejecutar syncdb.
    5) volver a marcar las aplicaciones que deben ser administradas usando South, ejecutando: "manage.py convert_to_south APP"


    lunes 26 de septiembre de 2011

    PHP ejecutados al ser accedidos con WebDav

    Seguí las instrucciones para configurar WebDav en Apache2 (Ubuntu Server 10.04.3 LTS), pero las páginas de PHP eran "ejecutadas" al ser bajadas desde el editor HTML. La configuración (obviando la restricción por IP y usuario/password) era:

        Alias /edit /var/www/www.example.com
        <Location /webdav>
            DAV On
            ForceType text/plain
        </Location>
    

    Revisando la configuración de Apache ví que PHP era habilitado usando "SetHandler", así que lo solucioné usando "SetHandler None":

        Alias /edit /var/www/www.example.com
        <Location /webdav>
            DAV On
            ForceType text/plain
            SetHandler None
        </Location>
    


    jueves 1 de septiembre de 2011

    Desabilitando GDM al inicio

    En Ubuntu 11.04 los servicios los arranca Upstart, así que para deshabilitar GDM no se puede borrar el link de /etc/rc2.d/gdm. La forma de hacerlo es editar /etc/init/gdm.conf y agregar "and runlevel RUNLEVEL=5" a la opción "start on". El diff es:


    --- a/init/gdm.conf
    +++ b/init/gdm.conf
    @@ -7,6 +7,7 @@ description     "GNOME Display Manager"
     author         "William Jon McCann "

     start on (filesystem
    +          and runlevel RUNLEVEL=5
               and started dbus
               and (drm-device-added card0 PRIMARY_DEVICE_FOR_DISPLAY=1
                    or stopped udev-fallback-graphics))

    sábado 20 de agosto de 2011

    Benchmarks de port forwarding con Python+Eventlet

    Les comparto algunos benchmarks que hice para verificar la velocidad del "tcp port forwarder" implementado usando Python+Eventlet: http://blog.eventlet.net/2010/02/28/beautiful-er-eventlet/

    No pude hacer los tests usando 'ab', ya que parece haber algun problema por el cual la aplicación no funciona correctamente.

    Copia de ISO usando scp, puerto 22: OK
    • ubuntu.iso 100%  698MB  63.4MB/s   00:11
    • ubuntu.iso 100%  698MB  69.8MB/s   00:10
    • ubuntu.iso 100%  698MB  69.8MB/s   00:10

    Copia de ISO usando scp, puerto 7000 (eventlet): OK
    • ubuntu.iso 100%  698MB  41.0MB/s   00:17
    • ubuntu.iso 100%  698MB  41.0MB/s   00:17
    • ubuntu.iso 100%  698MB  43.6MB/s   00:16

    Copia de ISO, usando wget, bajada directamente de Apache, puerto 80: OK
    • 731,453,440  524M/s   in 1.3s    
    • 731,453,440  539M/s   in 1.3s    
    • 731,453,440  523M/s   in 1.3s    


    Copia de ISO, usando wget, bajada directamente de Apache, puerto 7080 (eventlet): OK
      • 731,453,440  319M/s   in 2.2s
      • 731,453,440  318M/s   in 2.2s
      • 731,453,440  323M/s   in 2.2s


      Usando ApacheBench, al puerto 80:  OK
      • ab -n 400 -c 5 http://localhost:80/index.html 
        • Finished 400 requests
        • Concurrency Level:      5
        • Time taken for tests:   0.083 seconds
        • Complete requests:      400
        • Failed requests:        0


      Usando ApacheBench, al puerto 7080 (eventlet): ERROR!!!
        • ab -n 400 -c 5 http://localhost:7080/index.html 
          • apr_poll: The timeout specified has expired (70007)
        • ab -n 40 -c 5 http://localhost:7080/index.html 
          • apr_poll: The timeout specified has expired (70007)
        • ab -n 5 -c 1 http://localhost:7080/index.html 
          • apr_poll: The timeout specified has expired (70007)

        ssh en CentOS 6

        Estoy aprendiendo a trabajar con CentOS, luego de instalar un servidor de aplicaciones python en CentOS 5.6, estoy arrancando desde cero con un CentOS 6. El tema es que se me complicó la configuracion de ssh.

        Por alguna cuestión, no podia ingresar como root a mi máquina virtual con CentOS 6, y resultó ser un problema relacionado con SELinux.

        En definitiva, la configuración del servidor SSH, los permisos, todo estaba OK, y lo solucioné ejecutando:

        • /sbin/restorecon -r /root/.ssh
        Para los servidores "reales" nunca permito el login de root, pero para aprender, en una máquina virtual en mi PC, es muy cómodo poder acceder directamente como root :-D

        viernes 19 de agosto de 2011

        Listar BD y tablas con sus respectivos tamaños

        Para listar las bases de datos con el tamaño ocupado en disco de cada una:

        • SELECT pg_database.datname, pg_size_pretty(pg_database_size(pg_database.datname)) AS size FROM pg_database ORDER BY pg_database_size(pg_database.datname);

        Para listar las tablas con el tamaño ocupado en disco de cada una, pero solo del schema 'public' (probado en PostgreSql 8.1):

        • SELECT tablename, pg_size_pretty(pg_total_relation_size(tablename)) FROM pg_tables WHERE schemaname = 'public'  ORDER BY pg_total_relation_size(tablename);

        Para que la última consulta funcione en Postgre 8:4, hay que utilizar casting:
        • SELECT tablename, pg_size_pretty(pg_total_relation_size(tablename::TEXT)) FROM pg_tables WHERE schemaname = 'public' ORDER BY pg_total_relation_size(tablename::TEXT);
        Esto lo probé en 8.1 y 8.4 (únicas versiones que tengo a mano).

        miércoles 10 de agosto de 2011

        psycopg2 (2.4.2) + Django (1.3) = problemas!


        Si usas psycopg2 versión 2.4.2 con Django 1.3 surge el siguiente problema:

        $ ./virtualenv27/bin/python src/dynamicware/manage.py test myprojects
        Creating test database for alias 'default'...
        (...)
        psycopg2.ProgrammingError: autocommit cannot be used inside a transaction



        Una solución temporal es instalar la versión anterior de psycopg2:

        $ ./virtualenv27/bin/pip install psycopg2==2.4.1

        La solución definitiva ya existe: https://code.djangoproject.com/ticket/16250

        PIL / pillow + virtualenv

        Instalé PIL usando virtualenv, y así termina la instalción:


            --------------------------------------------------------------------
            PIL 1.1.7 SETUP SUMMARY
            --------------------------------------------------------------------
            version       1.1.7
            platform      linux2 2.7.1+ (r271:86832, Apr 11 2011, 18:13:53)
                          [GCC 4.5.2]
            --------------------------------------------------------------------
            *** TKINTER support not available (Tcl/Tk 8.5 libraries needed)
            *** JPEG support not available
            *** ZLIB (PNG/ZIP) support not available
            *** FREETYPE2 support not available
            --- LITTLECMS support available
            --------------------------------------------------------------------



        PIL se instaló correctamente, pero sin soporte para JPEG y PNG. Este es el funcionamiento "esperado" al instalar PIL con virtualenv.

        La solución: usar pillow (fork PIL, amigable con virtualenv)

        Luego de ejecutar "./virtualenv27/bin/pip install pillow":


            --------------------------------------------------------------------
            Pillow 1.7.4 ( PIL fork based on PIL 1.1.7 ) SETUP SUMMARY
            --------------------------------------------------------------------
            platform  linux2 2.7.1+ (r271:86832, Apr 11 2011, 18:13:53)
              [GCC 4.5.2]
            --------------------------------------------------------------------
            *** TKINTER support not available (Tcl/Tk 8.5 libraries needed)
            --- JPEG support available
            --- ZLIB (PNG/ZIP) support available
            --- FREETYPE2 support available
            --- LITTLECMS support available
            --------------------------------------------------------------------

        domingo 17 de julio de 2011

        Storage distribuido con SheepDog

        Instalé SheepDog siguiendo las instrucciones del sitio sobre un Debian Sid, todo funcionó excelente!

        Todo el esquema de pruebas lo armé en mi notebook:
        • Host: acer (Ubuntu Desktop 11.04)
          • Guest: debian-virt-server-01 (Debian Sid / libvirt+KVM)
            • ejecutando SheepDog
          • Guest: debian-virt-server-02 (Debian Sid / libvirt+KVM)
            • ejecutando SheepDog
          • Guest: debian-virt-server-03 (Debian Sid / libvirt+KVM)
            • ejecutando SheepDog
          • Guest: linux-over-sheepdog (Ubuntu 10.04 Server / QEMU)
            • usando "linux-over-sheepdog" como disco (esta imagen es creada usando qemu-img).
        Luego configuré coresync y arranqué sheepdog en debian-virt-server-01debian-virt-server-02 y debian-virt-server-03.

        Ahora, a crear la imagen de disco!

        root@debian-virt-server-01:~# collie cluster format --copies=2

        Este comando sólo se debe ejecutar en 1 nodo.

        root@debian-virt-server-01:~# collie node list
         Idx - Host:Port Number of vnodes
        ------------------------------------------------
        * 0 - 192.168.122.101:7000 64
         1 - 192.168.122.102:7000 64
         2 - 192.168.122.103:7000 64
        El cluster fue "formateado" para que mantenga 2 copias de la información. Los 3 nodos se están viendo, ya que aparecen al ejecutar "collie node list". 

        Creamos imagen para ser usado como disco

        acer| ~$ qemu-img create sheepdog:192.168.122.101:7000:linux-over-sheepdog 4G
        Formatting 'sheepdog:192.168.122.101:7000:linux-over-sheepdog', fmt=raw size=4294967296
        Booteamos QEMU

        acer| ~$ qemu-system-x86_64 -enable-kvm -m 512 -cdrom ubuntu-10.04-server-amd64-LTS.iso sheepdog:192.168.122.101:7000:linux-over-sheepdog

        Y listo! La instalación de Ubuntu Server se inició correctamente sobre un "disco virtual" hosteado usando SheepDog.



        miércoles 13 de julio de 2011

        Procesamiento de anotaciones en Java

        Hay un bug en la JVM de Sun Oracle que hace fallar el procesamiento de anotaciones. Me pasó que compilando el proyecto funcionaba OK, pero al agregar "-processor ....", aparecía el siguiente problema:


        [javac] /...../ValidationCheck.java:25: incompatible types
        [javac] found   : ......annotations.Type
        [javac] required: ......Type
        [javac] Type type() default Type.WORKER;

        El problema es el Enum "Type". Este Enum existe y está en el classpath, pero javac "no la ve". Está definido de la siguiente manera:

        Type type() default Type.WORKER;

        La solución para zafar de este bug es introducir el paquete en el nombre del Enum, de manera que quede:

        Type type() default my.package.annotations.Type.WORKER;


        Y con eso compila!

        BUGhttp://bugs.sun.com/view_bug.do?bug_id=6512707

        viernes 1 de julio de 2011

        Cómo usar dispositivos USB desde KVM

        Quiero usar mi pendrive desde un guest KVM (gestionado por libvirt). El dispositivo USB es el marcado con negrita:

        acer| ~$ lsusb
        Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
        Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
        Bus 002 Device 004: ID 0930:6545 Toshiba Corp. Kingston DataTraveler 102 flash drive

        Primera opción: usando vendor id + product id

        Editamos el XML usando "virsh edit", y agregamos lo siguiente en el elemento devices:



        Esta opción asocia un "tipo de dispositivo" (en este caso, el pendrive Kingston) al guest KVM, sin importar en qué puerto se conecte.

        Segunda opcióni: usando bus + device

        Editamos el XML usando "virsh edit", y agregamos lo siguiente en el elemento devices:



        Esta opción asocia un puerto USB al guest, sin importar qué tipo de dispositivo se conecte.