Algo de Linux: marzo 2014

viernes, 28 de marzo de 2014

Módulo puppet para configurar nfs en clientes

He subido a mi GitHub un módulo (puppet-nfsv4) para gestionar el servicio nfs. Pensaba haber añadido la gestión de servidor nfs, pero, como no lo necesito, en principio, tan sólo administra el servicio cliente de nfs.

Su función es garantizar que el paquete nfs-common se encuentra instalado y el servicio está corriendo. Además configura idmap para mapear id's de usuario y grupos, lo que mejora notablemente el montaje de unidades nfs. 

Este módulo podría implementarse de una forma más sencilla. Lo implementé de una forma más compleja para que fuera funcional y, al mismo tiempo, poder utilizarlo con fines formativos en un nuevo curso de puppet avanzado o de ampliación que propusiéramos para ampliar los conocimientos para aquellos compañeros que pudieron realizar el de "Sistema de automatización de tareas Puppet" y que he tenido el placer de impartir en la Escuela de Adminstración Pública durante dos años, pero viendo que la EAP no ha tenido a bien mantener el curso anterior ni ninguno de los cursos a los que los administradores informáticos podíamos optar, está claro que no merece la pena hacer ninguna nueva propuesta.

Publicado por primera vez en http://enavas.blogspot.com.es

jueves, 27 de marzo de 2014

pam_usb: Ejecutar acciones al conectar o desconectar el pendrive

En un post anterior, os mostraba cómo utilizar un pendrive para iniciar sesión en el sistema sin tener que introducir nuestra contraseña. En este post vamos a ver cómo ejecutar comandos cuando se conecte o se desconecte el pendrive.

El ejemplo que vamos a ver es el más sencillo: Activar el salvapantallas y bloquear la pantalla cuando se desconecte el pendrive y desactivarlo cuando se vuelva a conectar. No obstante, se podría ejecutar cualquier comando. Por ejemplo, podríamos crear y utilizar un script que realice automáticamente una copia de seguridad de los documentos del usuario cuando conecte su pendrive. 

Para realizar la configuración de pamusb debemos entender cómo se encuentra organizado el archivo /etc/pamusb.conf:

<configuration>
    <defaults>
        <!-- default options -->
    </defaults>

    <devices>
        <!-- devices definitions -->
    </devices>

    <users>
        <!-- users definitions -->
    </users>

    <services>
        <!-- services definitions -->
    </services>
</configuration>

Como podéis ver, está dividido en cuatro secciones. Pues bien, en la sección será donde configuremos qué acciones deben realizarse cuando el usuario concreto introduzca el pendrive para el que estamos definiendo las reglas. Para que quede más claro, vamos a verlo con un ejemplo:

Supongamos que, siguiendo con el post anterior, creé un dispositivo al que llamé enavasSandisk y quiero que se active el salvapantallas en modo seguro cuando el usuario enam0000 que definí desconecte el pendrive y lo desactive cuando vuelva a introducirlo.

Para ello, abriré el archivo /etc/pamusb.conf y en la sección <users>  introduciré la siguiente definición:

<user id="enam0000">
    <device>enavasSandisk</device>
          <agent event="lock">mate-screensaver-command --lock</agent>
          <agent event="unlock">mate-screensaver-command --deactivate</agent>
</user>

Creo que la definición se entiende muy bien, ¿verdad?

El comando que estoy ejecutando en esta máquina es mate-screensaver-command porque tengo instalado mate en la máquina que estoy usando para realizar el tutorial. Si utilizáis gnome, el comando se llamará gnome-screen-saver-command.

Si en lugar de activar y desactivar el salvapantallas tan sólo queremos cerrar sesión cuando se desconecte el pendrive, podríamos hacer lo siguiente:

<user id="enam0000">
    <device>enavasSandisk</device>
          <agent event="lock">mate-session-save --logout</agent>
</user>

Una vez hecho ésto, lo único que nos queda es ir al menú Sistema -> Preferencias -> Aplicaciones al inicio y crear un lanzador que inicie pamusb-agent, quien se encargará de monitorizar la conexión o desconexión de dispositivos.

Por otra parte, también podríamos crear el lanzador manualmente desde un terminal:

# cat /home/enam0000/.config/autostart/pamusb-agent.desktop 
[Desktop Entry]
Type=Application
Exec=pamusb-agent
Hidden=false
X-MATE-Autostart-enabled=true
Name[es_ES]=pamusb-agent
Name=pamusb-agent
Comment[es_ES]=Monitorizar pamusb
Comment=Monitorizar pamusb

Publicado por primera vez en http://enavas.blogspot.com.es

Reforzando la seguridad de nuestros servidores con denyHosts

DenyHosts  es un script python pensado para prevenir ataques de fuerza bruza contra servicios ssh. 
Este script bloquea ataques ssh añadiendo entradas al archivo /etc/hosts.deny, y si lo configuramos, puede informarnos por e-mail.

Instalarlo en Debian es realmente fácil porque se encuentra en los repositorios:

# apt-get install denyhosts

Y configurarlo también es muy sencillo porque tan sólo tenemos que modificar el fichero /etc/denyhosts.conf y cada parámetro viene perfectamente comentado para que conozcamos cuál es su función.

DenyHosts se basa en TCP Wrapper. Por lo tanto, los ficheros de configuración /etc/hosts.deny y /etc/hosts.allow estarán creados en el sistema.

En ocasiones, puede que nosotros mismos nos equivoquemos al acceder al servidor y DenyHosts bloquee el acceso para nuestra máquina. En este caso, podemos purgar las entradas añadidas a /etc/hosts.deny de la siguiente manera:

# /etc/init.d/denyhosts stop
# denyhosts --purge
# /etc/init.d/denyhosts start

De este modo, se eliminarán los hosts añadidos con una antigüedad mayor que la definida en PURGE_DENY en el fichero de configuración /etc/denyhosts.conf.

Publicado por primera vez en http://enavas.blogspot.com.es

miércoles, 26 de marzo de 2014

Webogram: Aplicación Web para usar Telegram desde nuestro ordenador

Webogram (https://github.com/zhukov/webogram) es una aplicación web que nos permitirá usar Telegram, una aplicación Opensource de mensajería instantánea para móviles bastante mejor que Whatsapp, sobre todo porque no envía los mensajes en claro, sino que los cifra, algo muy importante hoy en día para que no espíen tus conversaciones. 

Otra de las características interesantes de Telegram es que permite realizar chats secretos en los que se usa un cifrado móvil a móvil de tal manera que tan sólo el emisor y el receptor pueden leer esos mensajes y no es posible reenviar los mensajes de los chats secretos. Además, se puede fijar la autodestrucción de los mensajes enviados al receptor despúes de un tiempo tras haberlos leído. Es más, los chats secretos no se almacenan en la nube de Telegram.

Pero volvamos al tema del que estábamos hablando... Webogram nos va a permitir utilizar Telegram desde el navegador de nuestro ordenador, por lo que no necesitaremos instalar ninguna aplicación para utilizarlo:

Además, si utilizáis Google Chrome, podréis instalar la siguiente extensión para utilizarlo desde este navegador:

¿A qué esperáis para empezar a usar Telegram?

Publicado por primera vez en http://enavas.blogspot.com.es

martes, 25 de marzo de 2014

pam_usb: Autenticación usando un pendrive

pam_usb básicamente nos va a permitir iniciar sesión en nuestro sistema mediante una memoria flash sin tener que introducir la password de usuario, entre otras cosas. Y digo entre otras cosas porque también sería posible usar el pendrive como doble sistema de seguridad requiriendo que se introduzca la contraseña y que además se introduzca el pendrive.

Además, según nos dicen en su web, el sistema no es intrusivo. Esto quiere decir que no es necesario realizar modificaciones en el dispositivo usb porque los ajustes se realizan en el ordenador.

Por otra parte, también es posible ejecutar acciones al autentificarse o al desconectar el dispositivo, pero esto lo dejaremos para otro post y de momento, nos centraremos tan sólo en la autenticación.

Para poder entrar en nuestro equipo sin tener que introducir la contraseña, lo primero que tendremos que hacer será instalar los paquetes necesarios: libpam-usb y pamusb-tools:


Una vez instalados, conectamos el pendrive al ordenador, y ejecutamos:

# pamusb-conf --add-device Midispositivo

Donde sustituiremos Midispositivo por un nombre descriptivo para nosotros que se utilizará para identificarlo en el fichero de configuración. Por ejemplo:


Si os fijáis, ha identificado mi pendrive; y como sólo tengo uno conectado, no me pregunta cuál quiero usar. En cambio, me pregunta si quiero guardar su configuración en el fichero /etc/pamusb.conf. Respondo Y para decirle que sí. Y me responderá: Done.


Bien, pues una vez añadida la configuración del pendrive que voy a usar, el siguiente paso será decirle con qué usuario quiero identificarme. Para ello, ejecuto:

# pamusb-conf --add-user Minombredeusuario

Por ejemplo:


Como podéis comprobar, me pregunta si quiero guardar la configuración en /etc/pamusb.conf. Le respondo Y:


Bueno, pues con ésto, ya tendríamos asociado el pendrive al usuario. 

El siguiente paso sería asegurarnos de que funciona. Para ello, utilizamos el comando:

# pamusb-check Minombredeusuario

Si todo ha ido bien, veremos que el resultado de la comprobación es satisfactorio:


Por último, editamos el archivo /etc/pam.d/common-auth:

# nano /etc/pam.d/common-auth

Y añadimos como primer sistema de autenticación la siguiente línea:

auth    sufficient      pam_usb.so

A partir de ahora, podremos iniciar sesión en el sistema:
  • Introduciendo nuestro nombre de usuario y password, como siempre.
  • O introduciendo nuestro pendrive e iniciando sesión con nuestro nombre de usuario, sin tener que escribir la contraseña.


Publicado por primera vez en http://enavas.blogspot.com.es

lunes, 24 de marzo de 2014

Could not update ICEauthority file /home/usuario/.ICEauthority

Could not update ICEauthority file /home/usuario/.ICEauthority. Este es un error que en alguna ocasión se le ha dado a casi todo el mundo y que normalmente hace que el usuario que sufre el error no pueda iniciar sesión.

En la mayor parte de las ocasiones el problema se debe principalmente a dos causas:
  • Los permisos del archivo .ICEauthority no son los que debe tener.
  • El usuario no es propietario del archivo .ICEauthority.
En principio, sería suficiente con asignar bien el propietario y los permisos de este archivo, aunque para asegurarnos, también podemos borrar el archivo antiguo y volver a crearlo de nuevo:

# rm /home/usuario/.ICEauthority
# touch /home/usuario/.ICEauthority
# chmod 600 /home/usuario/.ICEauthority
# chown usuario:usuario /home/usuario/.ICEauthority
También es posible que al crear un usuario, por alguna razón tuviérais otro usuario con el mismo UID que el que estáis creando. Esto es un caso que puede suceder cuando en una máquina se manejan usuarios locales y usuarios de un servidor ldap, por ejemplo, si no tenemos control sobre ello.
Publicado por primera vez en http://enavas.blogspot.com.es

Reproducir contenidos multimedia en nuestra pantalla informativa

Como ya os conté en un post anterior, tengo montado un sistema de pantalla informativa en mi centro basado en Google Docs muy sencillo de poner en marcha y gestionar, y que por lo he escuchado, le está gustando mucho a todos aquellos que lo han visto funcionando. 

Pues bien, el otro día me plantearon si sería posible aprovechar la pantalla informativa para exponer trabajos de vídeo realizados por los alumnos. Estuve pensándolo y barajé diferentes posibilidades. Una de ellas era almacenar las presentaciones en una microSD insertada en el dispositivo, pero me pareció incómodo a la hora de transferir los contenidos al dispositivo, entre otras cosas. 

Así que al final, pensando en que se pudieran reproducir, además de vídeos, audio e imágenes,  me decidí por montar un servidor DLNA en una máquina linux que tengo en la misma red y reproducir los contenidos desde el dispositivo android de la pantalla informativa con una aplicación como Skifta. De este modo, me resulta muy cómodo transferir los contenidos al servidor DLNA y reproducirlos desde la pantalla informativa.

Es muy sencillo montar un servidor DLNA en linux con minidlna. Como referencia, podéis leer el siguiente post en el que explicaba cómo usar una Raspberry Pi como servidor DLNA:
http://enavas.blogspot.com.es/2014/02/raspberry-pi-como-servidor-dlna.html

Publicado por primera vez en http://enavas.blogspot.com.es

viernes, 21 de marzo de 2014

Encontrar archivos mayores de un determinado tamaño usando find

En ocasiones, los usuarios almacenan archivos de gran tamaño en su home, y, si no tenemos establecidas quotas, probablemente en algún momento, llegarán a llenar la partición /home.

Si necesitáis buscar archivos de un determinado tamaño en las cuentas de usuario, es muy fácil de hacer usando el comando find. Por ejemplo, si queremos encontrar los archivos mayores de 5 Mb que haya en el directorio /home, haríamos lo siguiente:

# find /home/ -type f -size +5M -print

Y si quisiéramos borrar los archivos vacíos encontrados:

# find /home/ -type f -size +5M -exec rm {} \;

Si quisiérais restringir un poco más la búsqueda, acotando los resultados tan sólo a determinados archivos, sería cuestión de añadir algún filtro más al comando find. Por ejemplo, imaginemos que quiero buscar los archivos mp4 que tengan un tamaño mayor de 50 Mb:

# find /home/ -type f -size +50M -name "*.mp4" -print

Y si quisiéramos borrar los archivos vacíos encontrados:

# find /home/ -type f -size +50M -name "*.mp4" -exec rm {} \;

Publicado por primera vez en http://enavas.blogspot.com.es

jueves, 20 de marzo de 2014

Script make-firefoxdeb: Generar un paquete Debian de Firefox

Para evitar tener que crear manualmente los paquetes de Firefox con aquél método que publiqué allá por enero de 2013 (http://enavas.blogspot.com.es/2013/01/una-forma-rapida-de-crear-paquetes-de.html), cada vez que haya una nueva versión, he creado un nuevo script al que he llamado make-firefoxdeb y lo he publicado en mi github.

Este script sigue el mismo procedimiento de aquél post y sirve para generar un paquete Debian a partir del fichero .tar.bz2 de la última versión disponible en el ftp de mozilla.

Es muy sencillo de utilizar. Si ejecutáis:
# make-firefoxdeb i386 

ó

# make-firefoxdeb amd64 

El script descargará la última versión disponible desde el ftp de mozilla y creará el paquete a partir del fichero .tar.bz2 descargado.

Dos observaciones:
  • Ejecutad el script en un sistema de 32 bits para generar el paquete de 32 bits.
  • Ejecutad el script en un sistema de 64 bits para generar el paquete de 64 bits.
Publicado por primera vez en http://enavas.blogspot.com.es

miércoles, 19 de marzo de 2014

PyDownTV: Un servicio web para descargar vídeos de las webs de televisiones españolas

Como ya hemos comentado en alguna ocasión, a veces necesitamos reproducir un vídeo online, pero el ancho de banda no nos dá de sí. En este caso, puede sernos muy útil PDownTV, un servicio web que nos va a permitir descargar vídeos de las webs de televisiones españolas. 


Con este servicio podemos descargar previamente el vídeo para reproducirlo en el momento que lo necesitamos, evitando la sorpresa de que se corte cuando lo estamos reproduciendo online.

La lista de canales soportados por este servicio es verdaderamente amplia:
http://www.pydowntv.com/canales

Publicado por primera vez en http://enavas.blogspot.com.es

lunes, 17 de marzo de 2014

Instalar y configurar MediaGoblin

Uno de los problemas que solemos tener habitualmente en los centros es la dificultad para reproducir contenidos multimedia alojados en plataformas como YouTube, Vimeo, etc... en muchas ocasiones motivado porque no se dispone de suficiente ancho de banda para todos los usuarios y servicios que se están utilizando a la vez. Para salvar estas dificultades, en ocasiones los usuarios recurren a almacenar sus contenidos en dispositivos externos como discos duros o pendrives USB. 

Mediagoblin es la plataforma web de software libre diseñada para alojar y compartir archivos multimedia que he escogido para solventar este problema. 



Con Mediagoblin creamos una serie de usuarios con permisos para subir contenidos tales como:
  • imágenes.
  • vídeos.
  • audios.
  • pdf.
Naturalmente, dependiendo del uso que le déis a la plataforma, es posible permitir a los usuarios registrarse, además de usar ldap o incluso oauth.

De este modo, los usuarios registrados podrán subir sus propios contenidos a la plataforma de una manera muy sencilla y organizarlos en colecciones y disponer de ellos cuando los necesiten de una forma interna en la red del centro. 

Una de las ventajas de esta plataforma es que cualquier usuario registrado puede añadir contenidos de otro a sus colecciones, con lo que no duplicamos la subida de archivos que se usen comúnmente. Además, cualquier usuario no registrado podrá visualizar los contenidos.

La pega que tiene es que no resulta sencillo de instalar porque no hay paquetes de instalación y es necesario hacerlo desde el código fuente mediante git. 

Así que dejo aquí el procedimiento que he seguido para instalarlo paso a paso:

Instalación.-

1.- Instalamos git:
# apt-get install git 

2.- Instalamos algunas dependencias necesarias: 
# apt-get install python python-dev python-lxml python-imaging python-virtualenv

3.- Mediagoblin usa PostgreSQL como base de datos, así que lo instalamos:
# apt-get install postgresql postgresql-client python-psycopg2

4.- Nos logueamos con el usuario postgres para crear un usuario y la B.D:
# su postgres

5.- Ahora, con el usuario postgres, creamos el usuario de la B.D. Le llamáis por ejemplo: mediagoblin (qué original):
$ createuser mediagoblin

6.- Nos hará tres preguntas. Se entiende bien cada una de ellas. Respondemos que no a las tres:
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) n
Shall the new role be allowed to create more new roles? (y/n) n

7.- A continuación creamos la B.D. donde se van a guardar todos los datos de mediagoblin:
$ createdb -E UNICODE -O mediagoblin mediagoblin

8.- Y para terminar con esta parte, abandonamos el usuario postgres:
$ exit

9.- A continuación, como administrador creamos una cuenta de usuario de sistema sin privilegios:
# adduser --shell /bin/bash --system --group mediagoblin

10.- Aunque es posible usar apache, Mediagoblin está pensado para usar por defecto nginx como servidor web, así que, para no complicarnos, haremos la configuración con nginx. Creamos un directorio para la plataforma /srv/mediagoblin.valledeljerte3:

# mkdir /srv/mediagoblin.valledeljerte3

11.- Asignamos como propietario y grupo al usuario mediagoblin:
# chown -hR mediagoblin:mediagoblin /srv/mediagoblin.valledeljerte3

12.- Nos identificamos con el usuario mediagoblin y dentro de la carpeta donde vamos a alojar el servidor, descargamos el proyecto mediante git:
# su mediagoblin
$ cd /srv/mediagoblin.valledeljerte3
$ git clone git://gitorious.org/mediagoblin/mediagoblin.git
$ cd mediagoblin
$ git submodule init && git submodule update 

13.- A continuación instalamos todos los recursos python que la aplicación va a necesitar:
$ (virtualenv --system-site-packages . || virtualenv .) && ./bin/python setup.py develop

14.- Por último, estando dentro del directorio mediagoblin.valledeljerte3/mediagoblin, instalamos flup:
$ ./bin/easy_install flup

Y si todo ha ido bien, habremos instalado Mediagoblin. El siguiente paso será configurarlo.

Configuración.-

Partimos de que nos encontramos situados dentro del directorio de Mediagoblin, concretamente dentro de /srv/mediagoblin.valledeljerte3/mediagoblin.

1.- Copiamos mediagoblin.ini a mediagoblin_local.ini:
$ cp mediagoblin.ini mediagoblin_local.ini

2.- Editamos mediagoblin_local.ini:

Descomentamos la línea:
# sql_engine = postgresql:///mediagoblin

Cambiamos el mail por uno nuestro:
email_sender_address = "notice@mediagoblin.example.org"

Desactivamos el envío de notificaciones de email en modo debug:
email_debug_mode = false

Desactivamos el registro de usuarios porque no queremos registro automático de usuarios:
allow_registration = false

3.- Copiamos paste.ini a paste_local.ini:
$ cp paste.ini paste_local.ini:

4.- Ejecutamos el siguiente comando para actualizar las bases de datos de Mediagoblin:
$ bin/gmg dbupdate

Comprobación de que funciona.-

Bien, pues ahora que la instalación está completa, comprobamos que nuestro sitio funciona, ejecutando:
$ ./lazyserver.sh --server-name=broadcast

A continuación, abrimos un navegador y nos conectamos al servidor en la siguiente dirección:
http://mediagoblin.valledeljerte3:6453

Si nuestro sistema está bien instalado, se abrirá la interfaz de Mediagoblin.

Configuración de Mediagoblin con nginx y FastCGI.-

Como hemos visto en el apartado anterior, Mediagoblin nos proporciona un servidor web, aunque nos dicen que este servidor es más bien para realizar testeos y no es adecuado para mantener un servidor en producción, por lo que nos recomiendan usar Nginx o Apache.

Veamos cómo instalar y configurar nuestro servidor con Nginx.

1.- Lo primero de todo será instalar nginx:
# apt-get install nginx

2.- Una vez instalado, creamos un archivo para el servidor mediagoblin en /etc/nginx/sites-available con el siguiente contenido:
cat /etc/nginx/sites-available
server {
 #################################################
 # Stock useful config options, but ignore them :)
 #################################################
 include /etc/nginx/mime.types;

 autoindex off;
 default_type  application/octet-stream;
 sendfile on;

 # Gzip
 gzip on;
 gzip_min_length 1024;
 gzip_buffers 4 32k;
 gzip_types text/plain application/x-javascript text/javascript text/xml text/css;

 #####################################
 # Mounting MediaGoblin stuff
 # This is the section you should read
 #####################################

 # Change this to update the upload size limit for your users
 client_max_body_size 8m;

 # prevent attacks (someone uploading a .txt file that the browser
 # interprets as an HTML file, etc.)
 add_header X-Content-Type-Options nosniff;

 server_name mediagoblin.valledeljerte3;
 access_log /var/log/nginx/mediagoblin.valledeljerte3.access.log;
 error_log /var/log/nginx/mediagoblin.valledeljerte3.error.log;

 # MediaGoblin's stock static files: CSS, JS, etc.
 location /mgoblin_static/ {
    alias /srv/mediagoblin.example.org/mediagoblin/mediagoblin/static/;
 }

 # Instance specific media:
 location /mgoblin_media/ {
    alias /srv/mediagoblin.example.org/mediagoblin/user_dev/media/public/;
 }

 # Theme static files (usually symlinked in)
 location /theme_static/ {
    alias /srv/mediagoblin.example.org/mediagoblin/user_dev/theme_static/;
 }

 # Plugin static files (usually symlinked in)
 location /plugin_static/ {
    alias /srv/mediagoblin.example.org/mediagoblin/user_dev/plugin_static/;
 }

 # Mounting MediaGoblin itself via FastCGI.
 location / {
    fastcgi_pass 127.0.0.1:26543;
    include /etc/nginx/fastcgi_params;

    # our understanding vs nginx's handling of script_name vs
    # path_info don't match :)
    fastcgi_param PATH_INFO $fastcgi_script_name;
    fastcgi_param SCRIPT_NAME "";
 }
}

En este fichero, cambiamos mediagoblin.example.org por nuestro nombre de dominio. En mi caso: mediagoblin.valledeljerte3.

3.- A continuación creamos un enlace en /etc/nginx/sites-enabled para activar el sitio:
# ln -s /etc/nginx/sites-available/nginx.conf /etc/nginx/sites-enabled/

4.- Por último, reiniciamos nginx:
# /etc/init.d/nginx restart

Y listo. Con ésto ya habremos terminado de configurar nginx para servir la aplicación Mediagoblin.

Activando medios.-

Bien. Ahora que tenemos nuestro sitio recién configurado, veréis que tan sólo os permite subir imágenes. Como nosotros también queremos poder subir vídeos, audios y archivos pdf, vamos a configurar el servidor para activar este tipo de medios.

Activando videos.-

1.- Siguiendo las instrucciones del manual de Mediagoblin, instalamos los paquetes de gstreamer:
# apt-get install python-gst0.10 \
    gstreamer0.10-plugins-base \
    gstreamer0.10-plugins-bad \
    gstreamer0.10-plugins-good \
    gstreamer0.10-plugins-ugly \
    gstreamer0.10-ffmpeg

2.- Añadimos [[mediagoblin.media_types.video]] a la sección [plugins] de nuestro fichero /srv/mediagoblin.valledeljerte3/mediagoblin/mediagoblin_local.ini

3.- Ejecutamos:
# su mediagoblin
$ cd /srv/mediagoblin.valledeljerte3/mediagoblin
$ ./bin/gmg dbupdate

4.- Iniciamos el servidor de pruebas:
$ ./lazyserver.sh --server-name=broadcast

5.- A continuación, abrimos un navegador y nos conectamos al servidor en la siguiente dirección:
http://mediagoblin.valledeljerte3:6453

Con ésto, ya deberíamos poder subir videos a Mediagoblin.

Activando audios && ascii art.-

1.- Siguiendo las instrucciones del manual de Mediagoblin, instalamos los paquetes de gstreamer:
# apt-get install python-gst0.10 \
    gstreamer0.10-plugins-base \
    gstreamer0.10-plugins-bad \
    gstreamer0.10-plugins-good \
    gstreamer0.10-plugins-ugly \
    gstreamer0.10-ffmpeg \
    python-numpy \
    python-scipy

Algunos de ellos ya se encuentran instalados, si seguimos los pasos del apartado anterior para activar el video, y, por tanto, sólo se instalarán python-numpy y python-scipy.

2.- Instalamos también los paquetes libsndfile1-dev y libasound2-dev:
# apt-get install libsndfile1-dev libasound2-dev

3.- A continuación, haciendo uso de easy_install:
$ cd /srv/mediagoblin.valledeljerte3/mediagoblin
$ ./bin/easy_install chardet
$ ./bin/easy_install scikits.audiolab
$ ./bin/easy_install mock

3.- Ejecutamos:
$ ./bin/gmg dbupdate

4.- Iniciamos el servidor de pruebas:
$ ./lazyserver.sh --server-name=broadcast

5.- A continuación, abrimos un navegador y nos conectamos al servidor en la siguiente dirección:
http://mediagoblin.valledeljerte3:6453

Con ésto, ya deberíamos poder subir audios y ascii art a Mediagoblin.

Activando pdf.-

1.- Según dice el manual de Mediagoblin, para poder mostrar archivos pdf es necesario disponer de pdftocairo y pdfinfo. Por lo tanto, en Debian tendremos que instalar el paquete poppler-utils:
# apt-get install poppler-utils

2.- También necesitamos el paquete unoconv para convertir documentos:
# apt-get install unoconv

3.- A continuación, para instalar el módulo pdf.js ejecutamos:
$ cd /srv/mediagoblin.valledeljerte3/mediagoblin
$ git submodule init
$ git submodule update

Si tenéis cualquier problema, también es posible descargar el módulo pdf.js manualmente desde la web de desarrollo:
https://github.com/mozilla/pdf.js/archive/master.zip

Y descomprimirlo directamente en:
/srv/mediagoblin.valledeljerte3/mediagoblin/mediagoblin/static/extlib/

Se creará una carpeta pdf.js dentro de este directorio

Si tenemos algún problema con el procesamiento de pdf's debemos mirar en ese directorio.

4.- Añadimos [[mediagoblin.media_types.pdf]] en la seción [plugins] de nuestro archivo de configuración mediagoblin_local.ini.

5.- Ejecutamos:
$ cd /srv/mediagoblin.valledeljerte3/mediagoblin
$ ./bin/gmg dbupdate

6.- Iniciamos el servidor de pruebas:
$ ./lazyserver.sh --server-name=broadcast

7.- A continuación, abrimos un navegador y nos conectamos al servidor en la siguiente dirección:
http://mediagoblin.valledeljerte3:6453

Y con ésto, deberíamos poder subir archivos pdf a nuestro servidor Mediagoblin.

Gestión de usuarios.-

En nuestra instalación, he desactivado el registro automático de usuarios por razones de seguridad y controlar quién puede subir vídeos. En este caso, solamente el administrador podrá crear cuentas usando la herramienta gmg:

$ cd /srv/mediagoblin.valledeljerte3/mediagoblin/
$ ./bin/gmg adduser

Este script nos preguntará el nombre del usuario, su password y su e-mail para crear la cuenta.

Si queremos crear el usuario de una vez, podemos especificar sus datos mediante parámetros:
$ ./bin/gmg adduser -u <usuario> -p <contraseña> -e <email>

Para convertir un usuario en administrador, también usaremos gmg:
$ cd /srv/mediagoblin.valledeljerte3/mediagoblin/
$ ./bin/gmg makeadmin 

Para cambiar el password de un usuario, lo haremos de la siguiente manera:
$ cd /srv/mediagoblin.valledeljerte3/mediagoblin/
$ ./bin/gmg changepw  



Observaciones.-

CUIDADO CON LOS PERMISOS!!!
Hay que tener mucho cuidado con los permisos. Los archivos del servidor se almacenan en /srv/mediagoblin.valledeljerte3/mediagoblin/user_dev/

En mi caso, por algún error, el directorio user_dev tenía permisos 700 y era propiedad de mediagoblin:mediagoblin  Para solucionarlo, he dado permisos 755 y listo.


PACIENCIA AL SUBIR CONTENIDOS!!!
Cuando subimos contenidos de archivos grandes, puede que tardemos un poco en poder verlos añadidos. Esto es porque requiere un procesamiento, que se tarda en realizar. Para comprobar el estado de subida de un archivo no tenemos más que entrar en el "Panel de procesamiento de contenido" del usuario. Allí veremos básicamente tres categorías:

* El contenido que se está procesando.
* Los archivos que no pudieron ser procesados.
* Los 10 últimos envíos exitosos.

Publicado por primera vez en http://enavas.blogspot.com.es

miércoles, 12 de marzo de 2014

Script rpkgsync para servidores de aula

He publicado un nuevo script en mi github al que he llamado rpkgsync. Tenía ganas de escribirlo hace tiempo, pero no encontraba el momento, así que a ratos, entre ayer y hoy lo he terminado de preparar. En principio, es una primera versión que no tiene errores de escritura de código, pero que tendré que probar para ver si cumple todas mis espectativas.

Como ya he comentado en alguna ocasión, he comprobado que cuando 30 portátiles de alumno se conectan a la red vía wifi, en muchas ocasiones no pueden navegar por internet. Y uno de los problemas de que no puedan hacerlo es que muchas veces el sistema operativo de los mismos está actualizando paquetes en segundo plano de forma transparente para el usuario, sobre todo cuando se ejecuta pkgsync. Pienso que si estuvieran conectados vía ethernet, no habría tanto problema, pero la red wifi, en la práctica, no da tanto ancho de banda como el cable; incluso aunque utilicéis un punto de acceso de 300 Mbps porque en muchos casos no llegaréis ni a los 65 Mbps.

Si todos los portátiles se actualizaran con regularidad y una cierta frecuencia, estoy seguro de que tampoco habría problema, pero es algo que no podemos garantizar. 

Por lo tanto, si partimos determinando cuál es nuestra situación real:
  • Los portátiles no se encuentran permanentemente conectados a la red.
  • Se actualizan sólo cuando se conectan a la red.
  • Cuando se conectan a la red, lo hacen vía wifi.
  • En ocasiones, se usan todos a la vez, y si hay muchas actualizaciones de software por realizar, los usuarios no pueden navegar. El ancho de banda lo está consumiendo el sistema de actualización de paquetes de todos los estos portátiles.
  • Algunos portátiles se usan mucho menos que otros. Se encienden poco, y, por lo tanto, cuando se enciendan, probablemente van a tener que realizar muchas actualizaciones de software. 

Teniendo en cuenta todo ésto, mi opinión personal (y no quiero decir que sea lo que deba hacerse porque yo lo diga) es que lo mejor sería dejar desactivado pkgsync y realizar instalaciones puntuales de software tan sólo cuando sea necesario vía puppet, dejando pkgsync para lanzarlo de forma expresa por parte del administrador cuando se crea conveniente.

Para tratar de solucionar el problema, la idea sería desactivar la ejecución de pkgsync en portátiles y colocar el script rpkgsync en el servidor de aula, de tal manera que ejecutáramos este script en el servidor de aula para que este lanzase pkgsync en los portátiles que detecte encendidos de una forma no concurrente.

Como ya he comentado ésta seguramente sea sólo una primera versión porque podría ser necesario lanzar las ejecuciones de pkgsync en diferentes portátiles de una forma "más espaciada", salvo que el trabajo que se esté realizando en ese momento sea solamente actualizarlos sin importar que quede ancho de banda disponible para navegar, por ejemplo.

Publicado por primera vez en http://enavas.blogspot.com.es

Sistema de pantalla informativa basado en Google Docs Presentations

Basándome en el excelente trabajo de Long Zheng (http://www.istartedsomething.com/20130618/work-hack-use-google-docs-to-create-an-automatically-updating-tv-kiosk-presentation/), he montado el sistema de presentación de noticias de mi centro.

Me gustó mucho su idea de utilizar Google Docs Presentations por varias cuestiones:
  • Primero de todo, por la sencillez del sistema.
  • Segundo, porque no es necesario un técnico para gestionar la presentación.
  • Tercero, porque permite crear las presentaciones de forma remota fuera del dispositivo que las presenta.
  • Cuarto, porque se pueden añadir todo tipo de elementos a las presentaciones.
  • Quinto, porque se puede organizar las presentaciones como quiera el propio creador.
  • Sexto, porque nos permite realizar las presentaciones en pantalla completa y en formato panorámico.
Os voy a explicar básicamente lo que he hecho:

He creado una carpeta compartida en la cuenta de Google Drive, a la que he llamado web. Dentro de ella he colocado dos archivos:

El archivo index.html creado por Long Zheng es el que se encargará de cargar la presentación:

El otro archivo, al que he llamado presentacion, contiene la presentación en formato 16:9 porque estamos usando una TV panorámica 16:9 para mostar las presentaciones.

Una vez creados, tomamos nota (copy-paste) de las URL de ambos archivos porque:

  • La url del archivo index.html será la que usemos para iniciar la presentación en el navegador.
  • La url del archivo presentacion tendremos que colocarla dentro del archivo index.html en el lugar de la que Long Zheng tiene en el archivo que muestra en github, más que nada para que muestre nuestra propia presentación.

Por otra parte, como el dispositivo que visualiza las presentaciones en mi centro es un dispositivo Android, he instalado la aplicación Kiosk Browser (https://play.google.com/store/apps/details?id=it.automated.android.browser.kiosk), que me permite iniciar la presentación directamente en pantalla completa. También he probado otras aplicaciones android, pero no han dado el resultado que esperaba, así que me quedo con ésta.

El resultado es bastante vistoso.

Publicado por primera vez en http://enavas.blogspot.com.es

sábado, 8 de marzo de 2014

Finless Rom 1.7 en Woxter Android TV 300

Es posible flashear el Woxter Android TV 300 con la Finless Rom 1.7. Esta rom funciona bastante bien y tiene unas cuantas mejoras sobre el sistema original, aunque su principal ventaja es que está "rooteada", lo que nos permitirá instalar aplicaciones que requieran permisos de root.


Lo que no me gusta de este dispositivo android es que las herramientas que acompañan a la rom para flashearlo sólo están disponibles para windows.

Lo bueno es que el procedimiento de flasheo es muy sencillo:

Primero.- Descargamos la ROM: Finless Rom 1.7

Segundo.- Descomprimimos el fichero zip descargado en una carpeta.

Tercero.- Entramos dentro de la carpeta. Veréis que contiene lo siguiente:


Cuarto.- Pulsamos el botón "Fn" del dispositivo y lo mantenemos pulsado mientras conectamos el dispositivo al ordenador. Si es la primera vez que lo conectáis, se instalarán los drivers necesarios.

Quinto.- Ejecutamos el archivo ROM Flash Tool.exe y se nos abrirá el programa de flasheo:


Sexto.- Pulsamos el botón "Flash ROM" que he resaltado con un cuadro de color rojo y comenzará el proceso de flasheo. Cuando termine, ya tendremos la nueva rom instalada en nuestro dispositivo.

Si por cualquier razón, quisiérais volver a la ROM original, os váis a la web de Woxter:
http://woxter.es/esp/es/multimedia-players-android-tv/842-woxter-android-tv-stick-300-8435089018387.html, descargáis el programa de flasheo RKDeviceManage, la rom y lo flasheáis con él.

Publicado por primera vez en http://enavas.blogspot.com.es

viernes, 7 de marzo de 2014

Gestionar módulos de puppet mediante librarian-puppet

He pensado que sería interesante mantener los módulos de puppet que uso habitualmente en mi centro mediante un sistema de control de versiones o VCS (Version Control System) como git combinado con librarian-puppet. Ésto me aportaría tres ventajas muy importantes:
  • Las propias de un sistema VCS, realizando un desarrollo en el que se mantenga un control de versiones que me permita gestionar fácilmente el software.
  • Compartir fácilmente los módulos desarrollados con otros administradores que realizan habitualmente las mismas tareas.
  • Implantar los módulos en el servidor puppet de una manera cómoda y sencilla.
Para empezar a probar el sistema y ponerlo en marcha, he creado una cuenta en github, donde iré subiendo los módulos puppet desarrollados: https://github.com/algodelinux

Como imagino que usaré la cuenta de git para subir otro tipo de desarrollos, aparte de los módulos puppet, he decidido crear un repositorio por cada módulo y nombrarlo comenzando siempre por el prefijo "puppet-" para distinguirlo de otras cosas que pudiera llegar a subir.

El primer módulo que he subido https://github.com/algodelinux/puppet-scripts-administrador. Se trata de un módulo que coloca una serie de scripts de administración en los servidores de terminales, portátiles y workstations del centro que me facilitan el trabajo de gestión de estos equipos. De momento, no voy a entrar en detalle acerca de para qué sirve cada script. Eso lo dejaré para otro post.

Lo que vamos a ver es cómo se pueden instalar y mantener actualizados en el servidor puppet los módulos que iré publicando en mi github usando como ejemplo el módulo mencionado anteriormente:


Primer paso.- Instalación.
Lo primero que hay que hacer es instalar librarian-puppet en el servidor:

servidor:~# gem install librarian-puppet

En mi caso, tengo un sistema de 64 bits en el servidor. Fuera por lo que fuera, librarian-puppet no se instalaba y gem me daba un error de que no se podía encontrar. Para solucionarlo, he actualizado rubygems y rubygems1.8 desde squeeze-backports y ahora sí he podido instalarlo:

servidor:~# apt-get -t squeeze-backports install rubygems rubygems1.8
servidor:~# gem install librarian-puppet


Segundo paso.- Configuración.
Una vez instalado librarian-puppet, nos situamos en el directorio de configuración de puppet y ejecutamos librarian-puppet init:

servidor:~# cd /etc/puppet
servidor:/etc/puppet# librarian-puppet init

Ésto creará varios ficheros (Puppetfile, Puppetfile.lock, .gitignore) y un directorio .tmp:
  • /etc/puppet/Puppetfile (donde añadiremos los módulos que queremos instalar)
  • /etc/puppet/Puppetfile.lock (mantiene información de los módulos instalados con librarian-puppet)
  • /etc/puppet/.gitignore (contiene los ficheros a ignorar por git: ./tmp y modules)
  • /etc/puppet/.tmp (para ficheros temporales y cachés)
El archivo que utilizaremos directamente para indicar los módulos que queremos instalar en nuestro servidor será /etc/puppet/Puppetfile. El resto son gestionados por librarian-puppet.

Tercer paso.- Utilización:

Instalación de un módulo en el servidor puppet:
Una vez instalado y configurado librarian-puppet, veréis que es muy sencillo instalar un módulo puppet alojado en mi cuenta de github:

Nos situamos en el directorio /etc/puppet:
servidor:~# cd /etc/puppet

Editamos el archivo Puppetfile que hemos generado al ejecutar: librarian-puppet init. El contenido inicial de este archivo es bastante descriptivo:

#!/usr/bin/env ruby
#^syntax detection

forge "http://forge.puppetlabs.com"

# mod 'puppetlabs/stdlib'

# mod 'ntp',
#   :git => 'git://github.com/puppetlabs/puppetlabs-ntp.git'

# mod 'apt',
#   :git => 'https://github.com/puppetlabs/puppetlabs-apt.git',
#   :ref => 'feature/master/dans_refactor'

Si os fijáis, básicamente tiene el repositorio de puppetlabs: http://forge.puppetlabs.com y algunos ejemplos de uso de módulos.

Abrimos la página de github con el módulo de puppet que queremos usar. Siguiendo con el ejemplo del módulo que comentaba al principio: https://github.com/algodelinux/puppet-scripts-administrador


Y pulsamos el botón que os he marcado con un cuadro de color rojo para copiar la URL de clonación del proyecto.

A continuación lo vamos a añadir al archivo /etc/puppet/Puppetfile. Para ello lo editamos y añadimos las dos líneas que he marcado en color amarillo y que van a permitir descargar el módulo:

#!/usr/bin/env ruby
#^syntax detection

forge "http://forge.puppetlabs.com"

# mod 'puppetlabs/stdlib'

# mod 'ntp',
#   :git => 'git://github.com/puppetlabs/puppetlabs-ntp.git'

# mod 'apt',
#   :git => 'https://github.com/puppetlabs/puppetlabs-apt.git',
#   :ref => 'feature/master/dans_refactor'

mod 'puppet-scripts-administrador',
    :git => 'https://github.com/algodelinux/puppet-scripts-administrador.git'

Si os fijáis, lo único que hacen estas dos líneas es indicarle a librarian-puppet cómo se llama el módulo, y de dónde obtenerlo.

Guardamos el archivo y, a continuación, ejecutamos el comando que lo va a instalar:

servidor:/etc/puppet# librarian-puppet install

Mejor dicho: librarian-puppet va a instalar todos los módulos indicados en el archivo Puppetfile.


Comprobar los módulos instalados mediante librarian-puppet:
Si queremos obtener un listado de los módulos instalados mediante librarian-puppet, ejecutaremos:

servidor:/etc/puppet# librarian-puppet show

Por ejemplo:
servidor:/etc/puppet# librarian-puppet show
puppet-scripts-administrador (0.0.1)


Actualizar los módulos instalados mediante librarian-puppet:
Si tenemos instalado un módulo puppet y el desarrollador lo ha actualizado, actualizarlo en el servidor  puppet mediante librarian-puppet es sencillísimo:

servidor:/etc/puppet# librarian-puppet update nombre-del-modulo

Por ejemplo:
servidor:/etc/puppet# librarian-puppet update puppet-scripts-administrador

Para obtener un listado de los comandos disponibles en librarian-puppet:
servidor:/etc/puppet# librarian-puppet 

Commands:
  librarian-puppet clean           # Cleans out the cache and install paths.
  librarian-puppet config          # Show or edit the config.
  librarian-puppet help [COMMAND]  # Describe available commands or one specific command
  librarian-puppet init            # Initializes the current directory.
  librarian-puppet install         # Resolves and installs all of the dependencies you specify.
  librarian-puppet outdated        # Lists outdated dependencies.
  librarian-puppet package         # Cache the puppet modules in vendor/puppet/cache.
  librarian-puppet show            # Shows dependencies
  librarian-puppet update          # Updates and installs the dependencies you specify.
  librarian-puppet version         # Displays the version.

Para obtener ayuda acerca de alguno de los comandos disponibles en librarian-puppet:
servidor:/etc/puppet# librarian-puppet help comando

Ejemplo:
servidor:/etc/puppet# librarian-puppet update

Publicado por primera vez en http://enavas.blogspot.com.es