GoogleCL – Accede a los servicios de datos de Google por consola/terminal

De Google podemos decir cualquier cosa, excepto que sea predecible con sus nuevos servicios y aplicaciones. Y este es el caso de GoogleCL, una aplicación para acceder a los servicios de datos de la empresa desde la línea de comandos. Fue presentado con bombo y platillo hace no más de una semana y no es sino un gran script Python que usa las bibliotecas gdata (Google Data Protocol). Les presentaré unos ejemplos para comenzar a aprovecharlo.

Por ahora, GoogleCL soporta estos servicios:

Docs

  google docs edit --title "Comandos Linux"

Blogger

  google blogger post --title "Frase" "Si no te equivocas de vez en cuando, es que no lo intentas"

Calendar

  google calendar add "Desayuno en Tiffany"

Contacts

  google contacts list name,email > contactos-respaldo.csv

Picasa

  google picasa create --title "Fotos vergonzosas" ~/fotos/familia/*.png

Youtube

  google youtube post --category Education aprendiendo_navi.mp4

Instalación enUbuntu/Debian

Descarga el código fuente o bien el DEB para sistemas de la familia Debian. Elige tu favorita del sitio de descargas. La versión más reciente a la fecha es la 0.9.7. Desde Debian/Ubuntu ejecuta:

  sudo dpkg -i googlecl_0.9.7-1_all.deb

Uso

Hay muchos ejemplos en el sitio de GoogleCL. Aquí me concentraré en mostrar cómo configurar el acceso a Google Docs desde la línea de comandos. Antes de eso debes saber que ejecutado sin argumentos, GoogleCL inicia una sesión interactiva a través del comando google, con el carácter “>” como prompt.

  google
  > help
  Welcome to the Google CL tool!
    Commands are broken into several parts: service, task, options, and arguments.
    For example, in the command

    [...más salida...]

    Enter "> help <service>" for more information on a service.
    Or, just "quit" to quit.

   > help docs
   Available tasks for service docs: 'edit', 'delete', 'list', 'upload', 'get'
    edit: Edit a document
     Requires: title Optional: format, editor

    delete: Delete documents
     Requires: none Optional: title

    list: List documents
     Requires: delimiter Optional: title, folder

    upload: Upload a document
     Requires: none Optional: title, folder, no-convert Arguments: PATH_TO_FILE

    get: Download a document
     Requires: (title OR folder) Arguments: LOCATION

  > quit

Usaré la sesión interactiva en todos los ejemplos.

Es importante configurar el navegador que utilizaremos con GoogleCL para realizar ciertas tareas. Hay dos opciones: exportar una variable de ambiente BROWSER o editar el archivo de configuración de la aplicación. Te recomiendo esta última.

  echo auth_browser=firefox >> ~./google/config

Desde el shell de GoogleCL y con ayuda de la documentación haremos unas sencillas tareas. Comencemos por obtener una lista de nuestros documentos. La primera vez te solicitará un usuario y luego que aceptes desde el navegador que GoogleCL pueda acceder a tu cuenta en el futuro.

  google
  > docs list
  Please specify user: *****
  Please log in and/or grant access via your browser at https://www.google.com
  ***** then hit enter.

El navegador que elegiste se abre y debes dar clic en “Grant access”. Un archivo access_tok_tu_usuario se crea bajo el directorio ~./google.

De ahora en adelante ya no será necesario autorizar nada para ese usuario. Después de aceptar, en el shell de google aparece un listado de tus archivos. Aquí muestro una vista parcial de la salida porque es extensa.

  Lista de ejemplos,http://docs.google.com/Doc?docid=*****
  Reporte 10-P,http://spreadsheets.google.com/ccc?key=*****
  [... más salida ...]

Ahora edito un documento de texto con Vim.

 docs edit --title "In the beginning was the command line" --editor vim

Y aquí lo descargo

 docs get --title "In the beginning was the command line"
 Downloading In the beginning was the command line to /home/eli/In the [...] .txt

Conclusiones

Como sucede con cualquier herramienta, GoogleCL puede ser tan poderoso como lo quieras. Sobre todo si lo incluyes en tus scripts personales. Además notarás que algunas opciones tienen bugs, pero ten paciencia y espera la versión 1.0 estable. Si eres frecuente usuario del shell y de los servicios de Google, encontrarás en GoogleCL un importante aliado para tu productividad.

Script para vaciar la Swap en Linux

Muchos servidores o sistemas Linux al tener demasiados archivos abiertos necesitan mucha SWAP y mucha RAM , para evitar que no se bloquee el servidor por tener la memoria SWAP llena, aqui teneis este script en bash para vaciar o liberar memoria o partición de intercambio (como lo queramos llamar) SWAP .

#!/bin/bash
echo -e "\nOutput of free before:"
free
swapoff -a ; swapon -a
echo -e "\nOutput of free after:"
free
echo "Swap Clean DONE¡"

Este script lo podeis guardar en un archivo, lo haceis ejecutable con «chmod +x archivo» y lo podeis poner en un CRON diario para que se vacie la partición SWAP

NOTA: para reducir la tendencia a usar SWAP se modifica el archivo sysctl.conf con el siguiente valor:

#Tendencia del uso de Swap
vm.swappiness=20

Script para optimizar las tablas fragmentadas en MySQL

Bueno otro buen script a la huchaca… esta escrito en bash aparte de ser utilisisimo porque chequea las tablas fragmentadas y tambien chequea todas las bbdds en busca de tablas MyISAM o INNODB y las optimiza.

#!/bin/bash

VERSION="0.7.2"
log="$PWD/mysql_error_log.txt"

echo "MySQL fragmentation finder (and fixer) v$VERSION, written by Phil Dufault ( http://www.dufault.info/ )"

showHelp() {
echo -e "\tThis script only repairs MyISAM and InnoDB tables"
echo -e "\t--help or -h\t\tthis menu"
echo -e "\t--user username\tspecify mysql username to use\n\t\t\tusing this flag means the script will ask for a password during runtime, unless you supply..."
echo -e "\t--password \"yourpassword\""
echo -e "\t--host hostname\tspecify mysql hostname to use, be it local (default) or remote"
}

#s parse arguments
while [[ $1 == -* ]]; do
case "$1" in
--help|-h) showHelp; exit 0;;
--user) mysqlUser="$2"; shift 2;;
--password) mysqlPass="$2"; shift 2;;
--host) mysqlHost="$2"; shift 2;;
--) shift; break;;
esac
done

# prevent overwriting the commandline args with the ones in .my.cnf, and check that .my.cnf exists
if [[ ! $mysqlUser && -f "$HOME/.my.cnf" ]]; then
if grep "user=" "$HOME/.my.cnf" >/dev/null 2>&1; then
if grep "pass=" "$HOME/.my.cnf" >/dev/null 2>&1; then
mysqlUser=$(grep user= < "$HOME/.my.cnf" | awk -F\" '{print $2}'); mysqlPass=$(grep pass= < "$HOME/.my.cnf" | awk -F\" '{print $2}'); if grep "host=" "$HOME/.my.cnf" >/dev/null 2>&1; then
mysqlHost=$(grep host= < "$HOME/.my.cnf" | awk -F\" '{print $2}'); fi else echo "Found no pass line in your .my.cnf,, fix this or specify with --password" fi else echo "Found no user line in your .my.cnf, fix this or specify with --user" exit 1; fi fi # set localhost if no host is set anywhere else if [[ ! $mysqlHost ]]; then mysqlHost="127.0.0.1" fi # error out if [[ ! $mysqlUser ]]; then echo "Authentication information not found as arguments, nor in $HOME/.my.cnf" echo showHelp exit 1 fi if [[ ! $mysqlPass ]]; then echo -n "Enter your MySQL password: " read -s mysqlPass fi # Test connecting to the database: mysql -u"$mysqlUser" -p"$mysqlPass" -h"$mysqlHost" --skip-column-names --batch -e "show status" >/dev/null 2>&1
if [[ $? -gt 0 ]]; then
echo "An error occured, check $log for more information.";
exit 1;
fi

# Retrieve the listing of databases:
databases=( $(mysql -u"$mysqlUser" -p"$mysqlPass" -h"$mysqlHost" --skip-column-names --batch -e "show databases;" 2>"$log") );
if [[ $? -gt 0 ]]; then
echo "An error occured, check $log for more information."
exit 1;
fi

echo -e "Found ${#databases[@]} databases";
for i in ${databases[@]}; do
# get a list of all of the tables, grep for MyISAM or InnoDB, and then sort out the fragmented tables with awk
fragmented=( $(mysql -u"$mysqlUser" -p"$mysqlPass" -h"$mysqlHost" --skip-column-names --batch -e "SHOW TABLE STATUS FROM $i;" 2>"$log" | awk '{print $1,$2,$10}' | egrep "MyISAM|InnoDB" | awk '$3 > 0' | awk '{print $1}') );
if [[ $? -gt 0 ]]; then
echo "An error occured, check $log for more information."
exit 1;
fi
tput sc
echo -n "Checking $i ... ";
if [[ ${#fragmented[@]} -gt 0 ]]; then
if [[ ${#fragmented[@]} -gt 0 ]]; then
if [[ ${#fragmented[@]} -gt 1 ]]; then
echo "found ${#fragmented[@]} fragmented tables."
else
echo "found ${#fragmented[@]} fragmented table."
fi
fi
for table in ${fragmented[@]}; do
let fraggedTables=$fraggedTables+1;
echo -ne "\tOptimizing $table ... ";
mysql -u"$mysqlUser" -p"$mysqlPass" -h"$mysqlHost" -D "$i" --skip-column-names --batch -e "optimize table $table" 2>"$log" >/dev/null
if [[ $? -gt 0 ]]; then
echo "An error occured, check $log for more information."
exit 1;
fi
echo done
done
else
tput rc
tput el
fi
unset fragmented
done

# footer message
if [[ ! $fraggedTables -gt 0 ]]; then
echo "No tables were fragmented, so no optimizing was done.";
else
if [[ $fraggedTables -gt 1 ]]; then
echo "$fraggedTables tables were fragmented, and were optimized.";
else
echo "$fraggedTables table was fragmented, and was optimized.";
fi
fi

if [[ ! -s $log ]]; then
rm -f "$log"
fi

unset fraggedTables

Link | http://www.dufault.info/blog/a-script-to-optimize-fragmented-tables-in-mysql/

Script en bash para cambiar el puerto de Apache en todos los dominios en Plesk

Si quereis cambiar el puerto en todos los vhost`s en Plesk, tendreis que cambiar el numero 80 (puerto Apache default de Plesk) dentro del archivo httpd.include de cada vhosts, y si teneis muchos vhosts en el servidor o servidores… como no tengais este pequeño script en bash, os podeis morir en el intento

#!/bin/bash
MY_FILEPATH="/var/www/vhosts"
MY_FILE="httpd.include"
MY_REPLACE=":81"
find $MY_FILEPATH  -name $MY_FILE -exec perl -p -i -e "s[:80][$MY_REPLACE]g" {} \;
service httpd restart"

Script para después de instalar Ubuntu Lucid Lynx 10.04

Una vez instalado Ubuntu 10.04 Lucid Lynx, con la ejecución del siguiente script, podréis poner al día vuestro sistema de una forma automática, ahorrando el proceso de consola ( aunque tampoco es que hacer el tipico copy&paste, que todos hacemos es que sea mucho trabajo, pero lo cierto es que con el script las siguientes tareas descritas se realizaran de forma automática:

  • Agrega repositorios (Medibuntu, getdeb, etc).
  • Descarga e instala las últimas actualizaciones.
  • Instala Ubuntu Tweak.
  • Instala codecs, plugins del navegador web (Java, Flash), un apoyo adicional para los archivos (RAR, 7-Zip) y fuentes adicionales, instala el más reciente reproductor de Flash para Ubuntu 10,04 Lucid Lynx 64 del sitio de Adobe.
  • Ajustes GConf: mueve los botones de nuevo a la derecha, desactiva el sonido de entrada GDM, se fija el comportamiento del gestor de actualización para mostrar siempre las actualizaciones y permite los iconos de los menús y botones.
  • Instala GIMP (que se ha eliminado de Ubuntu 10,04).
  • Instala VLC.
  • Instala el cliente de correo electrónico Thunderbird.
  • Instale el navegador web Chromium.
  • Instala Google Chrome – la última versión dev (se descarga la versión de 32 bits o 64 de forma automática – dependiendo de la arquitectura de su sistema).
  • Instala WINE.
  • Instala MPlayer.
  • Establece la codificación de caracteres de MPlayer y Totem  a Central / Europa del Este (Windows-1250), pueden desactivar esto quitando líneas: 64 y 69,70,71,72,73,74,75, o desde la configuración manual en el menú del script.
  • Instala el cliente de mensajería instantánea Pidgin.
  • Tiene con una interfaz gráfica de usuario – bueno, casi, lo único que tienen que hacer es marcar algunas cajas de verificación y la secuencia de comandos hará el resto.
  • Se añadió la instalación de Dropbox (incluyendo el repositorio de Dropbox que es paraKarmic  por ahora, pero funciona en Lucid también – los desarroladores prometen que usará el repositorio para Lucid cuando Dropbox lo de a conocer).
  • Instala las herramientas de desarrollo (de build-essential a Subversion y GIT).
  • Añadido gnome-do.
  • Elimina iconos de unidad del escritorio.
  • Arregla el problema de lentitud del repositorio de Google Chrome para el comando “apt-get update”.
  • Permite desactivar en la pantalla de entrada GDM la lista de usuarios.
  • Añade repositorios: Ubuntu Restricted Extras, Medibuntu, getdeb, Dropbox (sólo si se selecciona para instalar Dropbox)
  • Se instala desde los repositorios: The GIMP, Pidgin, el vino, navegador de cromo, Gnome Do, Guake, VLC media player, Mplayer, SMPlayer, Thunderbird, Dropbox, codecs (multimedia, java, flash), el apoyo archivos adicionales, soporte para DVD y las fuentes, Ubuntu Tweak, Deluge Torrent, CompizConfig Administrador de configuración, herramientas de desarrollo.
  • Descarga e instala los siguientes: navegador de Google Chrome (se descarga la construcción de 32 o 64 bits, dependiendo de su versión de Ubuntu), los emoticones oficiales de Pidgin (para todos los protocolos), la más reciente de Flash Player para 64 bits a través de la web de Adobe, Skype (32 o 64 bits, dependiendo de su versión de Ubuntu).
  • Tweaks:

Mueve los botones de ventana a la derecha (estilo Karmic).
Cambia el comportamiento del Administrador de actualizaciones.
Quita los iconos de las unidades montadas en el escritorio.
Deshabilita el sonido entrada GDM.
Habilita los iconos de los menús y botones.
Deshabilita en el inicio de sesión GDM la lista de usuarios.
Quita el paquete ubuntu-docs (libera 252MB).
Cambia en Gnome Calendar el primer día de la semana de domingo a lunes.
Descarga (o instala) y configura fuentes.
Arregla el “apt-get update” para evitar demoras en el repositorio de Google
Automáticamente monta unidades NTFS en el arranque.

  • Automáticamente acepta la licencia de JAVA.
  • La nueva versión también corrige un montón de errores de la versión anterior.

Tener en cuenta que, antes de ejecutar el script estén corriendo el script como root; que ni Synaptic ni apt-get ni dpkg ni centro de software está en ejecución; comprueben la conexión a Internet para asegurarse de que realmente se pueden instalar los paquetes, etc.

Para ejecutarlo deben pegar las siguientes líneas en la consola:

sudo apt-get install zenity

wget http://launchpad.net/ubuntustart/trunk/0.4.2/+download/ubuntu-10.04-script

chmod +x ubuntu-10.04-script

sudo ./ubuntu-10.04-script

También lo pueden bajar desde aquí: https://launchpad.net/ubuntustart/+download

Espero que les sirva. Yo lo probé y me dio buenos resultados este script para Ubuntu 10.04 .

Y tu, ¿ te animas a crear o mejorar un script mejor que este ?, si lo haces espero lo compartas con nosotros, y lo publiques en tu blog para difundirlo.
Bueno gente, espero que les sea útil, que no tengan problemas para instalarlo y que mejor sustancialmente su experiencia en Ubuntu 10.04.