Ejecutar comandos de Linux mediante Python

1429409720_application-x-pythonComo opinión personal, y sin que sea el motivo de crear una disputa entre unos y otros, creo que PHP es más tolerante a errores que Python. Claro, que digo esto porque llevo únicamente un par de semanas dedicado a Python, y aunque como lenguaje de programación me parece sencillo de usar y aprender, creo que escupe errores constantemente, y que a veces encontrar el error no es tan intuitivo como pudiera parecer.

Pero una vez mencionada mi opinión personal, es hora de ponerme al tema del post. Resulta que he encontrado como incentivo para aprender Python el uso de este lenguaje en todos mis scripts de shell que tengo para mantenimiento de mis sistemas. En ocasiones, me doy cuenta que lo que en un script de shell me lleva únicamente 4-5 líneas, en Python me lleva casi el triple, y sin dejar de escupirme errores en la consola. Visto desde el lado bueno, no sólo aprendo a usar Python, sino que si en alguna ocasión necesito complicar el script, posiblemente Python me ofrezca más potencia para hacerlo.

He comenzado a pasar mis scripts a Python, pero sin fijarme en la versión del mismo. Resulta que cuando me di cuenta, estaba programando en Python 2, cuando prácticamente todo el mundo programa ya en Python 3. Esto es importante porque el módulo que se utiliza para usar la línea de comandos está obsoleto en Python 3. Aun así, lo explicaré para ambas versiones.

Seguir leyendo “Ejecutar comandos de Linux mediante Python”

Ejecutar comandos de Linux mediante Python

Git para uso personal en Debian (II)

1427946407_bitbucketLa breve introducción que hice en el último post es un acercamiento inicial a cómo funciona Git. Por supuesto, no pretende ser exhaustivo, porque hay manuales mejores que el mío, y que además lo explican muy bien, con dibujitos y todo. En el post de hoy explicaré algo que no hice en la primera parte: de qué va eso de las ramas (branches) y cómo subir nuestro repositorio a un servidor remoto.

Sigo pensando que esto no es una explicación de alto nivel para usar Git. Es la manera en que yo uso Git y cómo me ayuda a mantener ordenados mis propios proyectos.

Es importante conocer que aún estamos trabajando en local, no en remoto.

Creación de ramas

Branching es la creación de ramas. ¿Para qué sirve una rama? Nosotros estaremos editando nuestros archivos de manera local, en la rama principal o master, hasta que aparezca una idea nueva, un nuevo experimento o simplemente queramos hacer una prueba para ver si funciona de determinada forma. Así, tendremos una rama master y una rama de prueba, que podremos llamar como nos dé la gana. Si la idea funciona, la podremos unir con la rama master y seguir programando. Si ha sido una mala idea, no volvemos a tocarla y seguimos programando en la rama principal. Un ejemplo sería el de este gráfico:

Seguir leyendo “Git para uso personal en Debian (II)”

Git para uso personal en Debian (II)

RStudio Server y uso de R en red, en Debian Wheezy

Dispuesto a instalar RStudio en un ordenador del trabajo, entré en la dirección de RStudio para bajar el programa en Windows. Sin embargo, advertí la presencia de la posibilidad de instalar RStudio para su uso en red, cuando se tiene un servidor Linux. Curiosamente, tenemos un servidor GNU/Linux con un Debian que funciona de perlas en el trabajo, así que se me ocurrió instalar RStudio para tener las siguientes ventajas:

  • Puedo acceder vía web desde cualquier equipo, da igual el sistema operativo que presente
  • Puedo guardar mis archivos en una ubicación centralizada del servidor, y dejar de depender de las copias que pueda guardar de manera local en cada equipo (lo habitual es tener treinta copias o más, con sus diferentes versiones, pupulando entre los equipos, ya que todos los ordenadores son de todos).
  • Supone un reto (y posiblemente esto invalida el resto de los anteriores argumentos).

Las instrucciones son bastante sencillas, y aunque tuve que lidiar con el proxy que tenemos para poder actualizar mediante apt-get, la verdad es que fue bastante rápido.

En primer lugar, actualizamos el sistema:

apt-get update
apt-get upgrade -y

Instalamos R y (por si no estaba instalado), sudo:

apt-get install r-base sudo

Si estamos en Wheezy, hay que instalar OpenSSL 0.9.8, que no existe en Wheezy, pero sí en Squeeze:

wget http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl0.9.8_0.9.8o-4squeeze14_i386.deb
dpkg -i libssl0.9.8_0.9.8o-4squeeze14_i386.deb

Recomiendo visitar la página de instalación de OpenSSL, porque el paquete es diferente según la arquitectura de nuestra máquina, y esta página de soporte de RStudio, ya que Ubuntu y Debian necesitan diferentes dependencias.

Luego nos bajamos y nos instalamos RStudio-Server:

wget http://download2.rstudio.org/rstudio-server-0.98.1103-i386.deb
dpkg -i rstudio-server-0.98.1103-i386.deb

Ya se puede configurar el servidor:

nano /etc/rstudio/rserver.conf

Y añadir lo siguiente:

# 8787 es el puerto por defecto, pero se puede modificar
 www-port=8787
# Permitimos el acceso desde toda la red; se puede especificar
# la dirección desde la que se puede entrar
 www-address=0.0.0.0

Ahora reiniciamos:

rstudio-server restart

Más sobre Configurar RStudio-Server.

Finalmente entramos en el servidor desde la dirección IP del servidor, pero indicando el puerto:

http://10.35.95.160:8787

captura_RStudio

Más sobre el mantenimiento y comandos de administrador para RStudio-Server.

RStudio Server y uso de R en red, en Debian Wheezy

Navegar e instalar paquetes en Debian, tras un proxy

Creo que este es el tercer post referente a la configuración de Debian 7 (Wheezy) cuando estamos tras un proxy, pero volveremos a repetirlo. En mi trabajo cambian frecuentemente de configuración de Internet, de IPs y demás cosas, y es bastante cansado reconfigurarlo todo, así que de nuevo vuelvo a poner una referencia básica para poder navegar sin problemas y poder bajar paquetes, tanto mediante apt-get como mediante wget.

Solamente hay que editar dos ficheros. El primero de ellos es el /etc/apt/apt-conf, en el que hay que añadir lo siguiente:

Acquire::http::Proxy "http://usuario:password@172.22.200.10:8080/";
Acquire::https::Proxy "http://usuario:password@172.22.200.10:8080/";
Acquire::ftp::Proxy "http://usuario:password@172.22.200.10:8080/";

La configuración es sencilla. Indicamos, por este orden, usuario, password, dirección IP del proxy y el puerto de escucha. Con este fichero nos aseguramos que podemos instalar paquetes y hacer update y upgrade.

Si queremos bajar mediante wget, hay que modificar el fichero /etc/bash.bashrc, y añadir al final algo como esto:

export http_proxy=http://usuario:password@172.22.200.10:8080/
export https_proxy=http://usuario:password@172.22.200.10:8080/
export ftp_proxy=http://usuario:password@172.22.200.10:8080/

En teoría, se puede usar wget y se puede navegar. Es posible que algún navegador utilice el proxy del sistema (Chromium, sin ir más lejos) y no se le pueda configurar al estilo de Iceweasel o Firefox. Aunque no sea necesario, no está de más configurar las variables de entorno en /etc/environment y añadir esto:

http_proxy=172.22.200.10:8080
https_proxy=172.22.200.10:8080
ftp_proxy=172.22.200.10:8080

Así, los navegadores detectarán el proxy y aparecerá un prompt para introducir nombre y contraseña.

Navegar e instalar paquetes en Debian, tras un proxy

CodeIgniter 2.x y PHP 5.6.0

Como advertí en mi anterior post, doy la solución para el molesto problema de la actualización a PHP 5.6, que hacía inusable completamente las aplicaciones creadas con CodeIgniter 2.x. El error consistía en que nada más ejecutar la aplicación web, aparecía el siguiente error, que además impedía que la aplicación funcionase:

A PHP Error was encountered
Severity: Notice
Message: Only variable references should be returned by reference
Filename: core/Common.php
Line Number: 257

Captura de pantalla - 160614 - 17:05:29

 

La búsqueda fue bastante infructuosa, y hasta hace un par de días, nadie respondió a un llamamiento en los foros de Ellislab (el equipo creador de CodeIgniter). Varias soluciones se habían propuesto, pero ninguna era efectiva. Este pequeño arreglo es lo que he utilizado, de modo que ahora puedo continuar usando mi instalación de Lighhtpd, PHP y MySQL, proporcionadas por Debian.

El error se refiere a la línea 257 del archivo /system/core/Common.php, que dice esto:

return $_config[0] =& $config;

Lo que hay que hacer es sustitutirla por:

$_config[0] =& $config;
return $_config[0];

Después de esto, la aplicación funciona correctamente.

CodeIgniter 2.x y PHP 5.6.0

Instalación y puesta en marcha de XAMPP en Debian testing

1403450164_source_php

Hace una semana aproximadamente ejecuté la actualización periódica de mi Debian testing. Casi nunca ttengo problemas, porque la versión testing es casi tan estable como la Debian stable, pero con software más actualizado. Lamentablemente, una de las actualizaciones fue la de PHP, que se actualizó a la versión 5.6.0-beta3. Resulta que el framework quu utilizo, CodeIgniter, tanto en su versión 2.1.4 como en la 2.2, tiene problemas con esa nueva versión de PHP. Así, descubrí con horror que todas las aplicaciones que había construido con CodeIgniter daban error.

Al principio no sabía si era del servidor web o del PHP o de la propia aplicación. Es un error no sólo molesto, sino que impedía utilizar la aplicación completamente. Tras un par de horas de búsqueda, vi el error en numerosas páginas (probablemente porque estaban programadas con el framework CodeIgniter), pero no vi ninguna solución útil, aunque de algo sí me sirvió la búsqueda: el problema era de incompatibilidad entre CodeIgniter y PHP 5.6.0. El error en cuestión era el siguiente:

A PHP Error was encountered
Severity: Notice
Message: Only variable references should be returned by reference
Filename: core/Common.php
Line Number: 257

Captura de pantalla - 160614 - 17:05:29

 

De todas las estrategias que vi, me llamaron dos la atención:

  • Hacer un downgrade a cualquier versión de PHP funcionante;
  • Eliminar de mi equipo el servidor web, el servidor MySQL y PHP, e instatar, por ejemplo XAMMP.

Seguir leyendo “Instalación y puesta en marcha de XAMPP en Debian testing”

Instalación y puesta en marcha de XAMPP en Debian testing

Modificar la caducidad de las sesiones en PHP (I)

1376240811_Clock4Desde que utilizo CodeIgniter para programar, no suelo tener problemas con la duración de las sesiones o de cualquier otro problema que tenía al trabajar con PHP directamente. Una de las ventajas de los frameworks es que hay un montón de cosas que dejan de preocuparme, porque sé que la aplicación ya se ocupa de ellas. Una de estas cosas es al duración de las sesiones y la propagación de los datos almacenados en la sesión.

Al crear mis antiguas aplicaciones en PHP, solía controlar la duración de las sesiones con únicamente un parámetro, session.gc_maxlifetime, que por defecto está ajustado a 1440 segundos (24 minutos), ya que lo cambiaba a 7200 segundos (dos horas, o 120 minutos).

Seguir leyendo “Modificar la caducidad de las sesiones en PHP (I)”

Modificar la caducidad de las sesiones en PHP (I)

Sin sonido en Debian Wheezy (solucionado, claro)

1370215477_kmixdockedHace un par de días hice una actualización de las gordas para mi Debian. Pasé de Squeeze a Wheezy, y lo primero que falló fue el sonido. No me sorprendió en exceso, porque realmente es un mal menor. Cuando instalé Squeeze, hace ya un par de años, el sonido se configuró automáticamente, con PulseAudio. No tuve que modificar absolutamente nada. Ahora que he hecho una actualización de versión a Wheezy, el sonido ha dejado de funcionar. Como digo, no me sorprende, porque es un problema común cuando se instala Wheezy o cuando se actualiza.

Afortunadamente hay una manera sencilla de arreglarlo, o por lo menos a mí me ha resultado sencilla. Tomé como base el post que había escrito hace dos años, en que en la primera instalación de Squeeze, el sonido no funcionaba. En aquel momento tuve que descargar, compilar e instalar los paquetes de ALSA que indicaba. Era un proceso laborioso y pesado, en el que había que descargar 4 paquetes y compilarlos uno por uno.

En Wheezy sólo tuve que instalar un par de paquetes vía apt-get y luego bajar y compilar alsa-driver. Reinicié y luego funcionó todo.

Seguir leyendo “Sin sonido en Debian Wheezy (solucionado, claro)”

Sin sonido en Debian Wheezy (solucionado, claro)

Chrome (o Chromium) en Debian Wheezy tras un proxy

1370214429_chromium-browserDesde que hace menos de un mes la versión 7 de GNU/Linux Debian se ha convertido en la versión estable, he actualizado la máquina Debian que tenía en el trabajo. Aunque en casa ya estaba utilizando la versión testing (hasta hace un mes, Wheezy), en el trabajo es esencial la estabilidad, así que de momento sigo siendo estable.

El caso es que pasar de Squeeze a Wheezy es trivial:

apt-get update
 
apt-get upgrade
 
apt-get dist-upgrade
 
apt-get autoremove
 
apt-get dist-upgrade

Sin embargo hay cosas que dejan de funcionar, por ejemplo, el sonido, aunque para eso ya tengo una entrada preparada próximamente.

Otra de las cosas que tuve que volver a configurar era la conexión de Chrome o de Cromium, si decidimos no instalar la última versión desde los repositorios de Google. Mientras que Iceweasel (Firefox en el mundo no-Debian) permite configurar un servidor proxy, Chromium no lo permite, sino que utiliza el proxy del sistema.

La vieja manera de configurar un proxy para el sistema no sirve:

export http_proxy=http://usuario:password@172.21.79.39:8080

Así que no tuve más remedio que arrancar cada instancia de Chromium indicando que iba a usar un proxy:

/usr/bin/google-chrome --proxy-server=http://172.21.79.39:8080

Este comando se pone en el acceso directo de la barra de tareas.

Captura de pantalla - 020613 - 20:09:45

He de advertir que en Chrome/Chromium no se puede definir bien el usuario y la contraseña, de modo que siempre que abramos el navegador, nos saldrá el prompt para indicar login y password. Pero es un mal menor.

Chrome (o Chromium) en Debian Wheezy tras un proxy

Grabar una ISO desde consola

1362449478_consoleAprovechando que Brasero no me termina de convencer, sigo grabando CDs desde la consola. Ya hace casi un año escribí una entrada sobre los problemas que me daba Brasero, y que no he terminado de arreglar, por eso sigo con la consola. El caso es que me sigue sorprendiendo la facilidad, la fiabilidad  y la rapidez con que se hacen las cosas desde la consola, de modo que retomo las explicaciones para el uso de la consola para grabar CDs.

En mi caso, por razones que ya contaré más adelante, he decidido despedirme de Archlinux (quiero pensar que es un hasta luego y volver a poner Debian en el portátil.

No tengo ninguna duda, o Debian o nada. Como mucho, podría instalar Linux Mint, pero resulta que Linux Mint Debian Edition ya no viene con XFCE, sino con MATE (fork de Gnome 2) o Cinnamon (fork de Gnome 3).

Así que me he decido por instalar Debian testing (Wheezy, en estos momentos) con XFCE como escritorio.

Después de bajarme la ISO desde el Torrent (sigo alucinando por la velocidad que alcanza esto), llega la hora de grabar la ISO:

Comprobemos cuál es nuestro dispositivo:

wodim --devices

Saldrá una cosa así:

wodim: Overview of accessible drives (1 found) :
-------------------------------------------------------------------------
 0 dev='/dev/sg0' rwrw-- : 'HL-DT-ST' 'DVDRAM GSA-4081B'
-------------------------------------------------------------------------

En mi caso es /dev/sr0, pero puede ser/dev/cdrom, /dev/scd0, etc.

wodim -v -dao speed=1 -eject dev=/dev/sro -data debian-6.0.7.iso
Grabar una ISO desde consola