Algo de Linux: octubre 2012

miércoles, 31 de octubre de 2012

Módulo puppet para eliminar el mensaje de warning "[puppetmasterd], which is a deprecated section..."

En versiones anteriores de puppet, la sección de configuración del puppetmaster en el fichero /etc/puppet/puppet.conf se llamaba [puppetmasterd]. Ésto ha cambiado y actualmente esta sección se llama [master].

Puppet muestra un warning similar al siguiente:

warning: You have configuration parameter $certname specified in [puppetmasterd], which is a deprecated section. I'm assuming you meant [master]

Para solucionarlo, he creado una tarea de puppet que, haciendo uso de un tipo definido por el usuario llamado replace.pp de David Schmitt cambia [puppetmasterd] por [master] en el archivo /etc/puppet/puppet.conf

https://www.box.com/s/1e33z9l2tpnx630yzfqa

Para que dicho módulo funcione, tenemos que colocar el archivo replace.pp en un directorio: /etc/puppet/defines/ del servidor puppet. Si queréis utilizar la tarea, cread este directorio. En él iremos almacenando funciones interesantes, como la que hemos mencionado anteriormente.

Módulo puppet para instalar Dropbox en Debian Squeeze desde los repositorios

Aquí tenéis un módulo para instalar Dropbox en Debian Squeeze desde los repositorios de Dropbox:


https://www.box.com/s/t1x2qfubg47spm3nin03

Este módulo añade la fuente de los repositorios, la clave pública del repositorio e instala el paquete.

Crear un pendrive de instalación de Debian Squeeze

Necesitaba crear un pendrive de instalación de Debian Squeeze para instalar una máquina desde cero porque me fastidia mucho tener que estropear un CD que posiblemente nunca vuelva a usar puesto que, cuando vaya a querer usarlo, habrá una versión más reciente del sistema operativo que estoy instalando en estos momentos. 

Buscando por ahí encontré un pendrive de 256 Mb, que tenía aparcado que no sabía cómo aprovechar. Como era más que suficiente para montarle la iso de debian-6.0.6-i386-netinst.iso, me puse manos a la obra.

Crear un pendrive instalador de Debian a partir de Squeeze es algo trivial:

Primero.- Descargamos la ISO desde http://cdimage.debian.org/

Segundo.- Usamos el comando dd para montar la iso que hayamos descargado en el pendrive:

$ dd if=debian-6.0.6-i386-netinst.iso of=/dev/sdX

Sustituyendo la X por la letra de la unidad con la que el sistema ha identificado nuestro pendrive.  Por ejemplo:

$ dd if=debian-6.0.6-i386-netinst.iso of=/dev/sdb

De este modo tan sencillo tendremos un pendrive instalador de Debian.

martes, 30 de octubre de 2012

Módulo puppet para instalar iceweasel desde Backports

Aquí dejo un módulo para instalar la última versión de Iceweasel desde Squeeze-backports:

https://www.box.com/s/tmsi7clsaxbvnpannksw

El módulo añade los repositorios y luego instala los paquetes iceweasel e iceweasel-l10n-es-es

NixNote: Manten tus notas sincronizadas con EverNote

Hasta hace poco tiempo, mantenía mis notas sincronizadas entre máquinas linux con Tomboy alojado en una cuenta Dropbox. El problema me surgió cuando quise añadir mi Smartphone con Android para poder poner notas en el teléfono también.

Al final, para lograr mantener sincronizadas las notas entre mi smartphone, el portátil, mi servidor de casa y el equipo del trabajo, instalé EverNote en el teléfono y el cliente NixNote en mis máquinas con Debian Squeeze.

La ventaja de NixNote es que está hecho en Java y, por lo tanto, puede correr en Linux, Windows y OS-X. Para descargarlo:



Módulos puppet para utilizar en los IES

En el directorio de tareas_puppet (https://www.box.com/s/lj0r9zhs4n4ckl5rxila) de mi cuenta de box.net dejo tres módulos interesantes que preparé para el curso de "Sistema de automatización de tareas Puppet" de la Escuela de Administración Pública, para mantener actualizado firefox, flash y java en los institutos:
Los tres módulos están pensados para que instalar la versión que se indique en cada fichero init.pp, de tal manera que la misma tarea nos servirá para ir actualizando a nuevas versiones firefox, flash o java sin tener que retocar la tarea y con tan sólo indicar en una variable el nombre del paquete a instalar y descargarlo previamente al servidor nfs del centro.

Estos módulos sirven para servidores de terminales, portátiles y workstation. No obstante, como siempre, os recomiendo probarlos en una máquina antes de poner el módulo para todo el centro.

Subo también dichos módulos a desarrollo.educarex.es y al gestor documental Alfresco.


Mantener sincronizadas varias cuentas de Dropbox en nuestro usuario de linux

Habitualmente, tenemos sincronizada nuestra cuenta de Dropbox en nuestro escritorio linux sin ningún problema. Pues bien, si queremos, podemos mantener sincronizadas varias cuentas de Dropbox en la misma cuenta de usuario de linux.

Para cada cuenta adicional que queramos mantener sincronizada, creamos una carpeta:

# mkdir $HOME/.dropbox2
 
Una vez creada cada carpeta, lanzamos el configurador de Dropbox:

# HOME=$HOME/.dropbox2 /usr/bin/dropbox start -i


Nos preguntará si queremos crear una nueva cuenta o si tenemos ya una creada que deseamos utilizar. Elegimos la opción que más nos interese dependiendo de si tenemos creada ya la cuenta que queremos configurar o no. 

Una vez que terminemos la configuración de la cuenta, haremos clic en el menú de Gnome -> Sistema -> Aplicaciones al inicio:


Pulsaremos el botón "Añadir" y realizaremos la configuración para que se lance el servicio de Dropbox con nuestra segunda cuenta en el inicio:


  • Primero, indicamos un nombre de programa, por ejemplo: DropboxIES
  • Después indicamos el comando a ejecutar: 
    • sh -c "HOME=$HOME/.dropbox-alt /usr/bin/dropbox start" 
  • Por útimo, indicamos un comentario, por ejemplo: Dropbox para el servidor de recursos
  • Pulsamos el botón añadir y ya tendremos nuestra segunda cuenta de Dropbox configurada.

viernes, 19 de octubre de 2012

java-package: Crear paquetes debian de Java a partir del .tar.gz

Normalmente, los usuarios de Debian, tenemos que descargar java desde la web de Java en formato .tar.gz para luego hacer una instalación manual.

Existe un paquete en Debian llamado java-package que nos proporciona una utilidad cuyo nombre es make-jpkg. Esta utilidad nos va a permitir convertir el archivo java .tar.gz descargado en un paquete deb. De este modo, lograremos tener un paquete .deb que es más automático instalar que el .tar.gz

He probado el java-package 0.50 en Debian Squeeze y me ha funcionado sin problemas. Podéis descargarlo desde aquí mismo: https://www.box.com/s/ntmtdd2j4thv0khg1wwi

El paquete java-package tiene como dependencia fakeroot, así que podemos instalar primero fakeroot y luego java-package:

# apt-get -y install fakeroot
# dpkg -i java-package_0.50_all.deb

En cualquier caso, si hemos instalado java-package sin instalar fakeroot, no pasa nada. Hacemos después un apt-get -f install para resolver dependencias y listo:

# dpkg -i java-package_0.50_all.deb
# apt-get -fy install

Una vez instalado el paquete, no tenemos más que ir a la web de Java y descargar la versión correspondiente al sistema de nuestra máquina. Como normalmente tenemos tanto máquinas con sistema de 32 bits como máquinas con sistema de 64 bits, descargamos los dos paquetes y listo. Una vez descargados los archivos,  ejecutamos make-jpkg para crear los paquetes:

# make-jpkg jre-7u9-linux-i586.tar.gz
# make-jpkg jre-7u9-linux-x64.tar.gz

Cuando termine,  ya tendremos los paquetes:
  • oracle-j2re1.7_1.7.0+update9_amd64.deb
  • oracle-j2re1.7_1.7.0+update9_i386.deb
Para instalarlos en nuestras máquinas, no tenemos más que usar una tarea puppet y listo.

Si los enlaces de java han sido definidos manualmente, se preservarán al instalar el paquete que hemos creado.

Si queremos resetear los enlaces de java a sus valores por defecto, debemos usar la opción --auto.

# update-alternatives --auto java
# update-alternatives --auto iceweasel-javaplugin.so
# update-alternatives --auto mozilla-javaplugin.so

Del modo anterior reseteamos el enlace de java, y los enlaces para los plugins de iceweasel (iceweasel-javaplugin.so) y firefox (mozilla-javaplugin.so).

Si tuviéramos que crear los enlaces a los plugins de java manualmente en un sistema de 32 bits:

# ln -sf /usr/lib/jvm/j2re1.7-oracle/lib/i386/libnpjp2.so /etc/alternatives/mozilla-javaplugin.so
# ln -sf /usr/lib/jvm/j2re1.7-oracle/lib/i386/libnpjp2.so /etc/alternatives/iceweasel-javaplugin.so


Y si tuviéramos que crear los enlaces a los plugins de java manualmente en un sistema de 64 bits:

# ln -sf /usr/lib/jvm/j2re1.7-oracle/lib/amd64/libnpjp2.so /etc/alternatives/mozilla-javaplugin.so
# ln -sf /usr/lib/jvm/j2re1.7-oracle/lib/amd64/libnpjp2.so /etc/alternatives/iceweasel-javaplugin.so


Las versiones soportadas por java_package en la actualidad son las siguientes:
  • Oracle JDK, version 6 (update >= 10), 7
  • Oracle JRE, version 6 (update >= 10), 7
  • Oracle J2SE API Javadoc, version 6 (update >= 10), 7
Fuente: http://wiki.debian.org/JavaPackage

Importante: Hay una actualización del paquete  a la versión 0.51. 
Ver artículo: http://enavas.blogspot.com.es/2013/01/actualizacion-de-java-package-crear.html

martes, 16 de octubre de 2012

Crear nuestro propio repositorio de paquetes con Reprepro

En ocasiones necesitamos disponer de un repositorio de paquetes propio con el que instalar una serie de paquetes que no se encuentran en los repositorios de nuestra organización ni en los de nuestra distribución. En este caso, podemos recurrir a reprepro.

Vamos a ver cómo podemos instalar y utilizar reprepro en nuestra organización.

Instalar reprepro.
Lo primero es instalar los paquetes reprepro y apache2:

# apt-get install reprepro apache2

Reprepro necesita que tengamos apache para distribuir los paquetes del repositorio a los clientes.

Una vez instalados los paquetes, creamos el directorio principal de nuestro repositorio y el directorio de configuración de una vez. Por ejemplo:

# mkdir -p /var/www/iesvalledeljerte3/conf

A continuación vamos a crear una clave con la que firmaremos el repositorio:

cd /var/www/repositorio $ gpg --gen-key

gpg nos pedirá que seleccionemos el tipo de clave que deseamos crear. Elegiremos la opción (4) RSA (sólo firmar).

Lo siguiente que nos preguntará gpg es de qué tamaño queremos crear la clave y por defecto nos ofrece un tamaño de 2048. Lo aceptamos.

Nos preguntará por el período de validez de la clave y por detecto nos ofrecerá la opción 0 = la clave nunca caduca. Elegimos la opción por defecto.

Nos preguntará si es correcto. Respondemos que sí (s).

Nos preguntará el nombre y apellidos. Introducimos nuestro nombre y apellidos.

Nos pedirá que introduzcamos nuestra dirección de correo.  Así que la introducimos.

Nos ofrecerá la posibilidad de poner un comentario. Pulsamos Enter para dejarlo vacío.

Para terminar, suponiendo que hemos introducido todos los datos correctamente, pulsaremos (V) de (V)ale.

Y, ya por último, nos pedirá que introduzcamos una frase de contraseña. La introducimos y repetimos cuando nos lo pida.

Al final nos mostrará la clave generada. Si se nos ha escapado por lo que sea y no la hemos visto, ejecutamos:

$ gpg --list-keys
/home/enam0000/.gnupg/pubring.gpg
---------------------------------
pub   1024D/153F5386 2009-12-01
uid                  Esteban M. Navas Martín (Administrador Informatico)
sub   2048g/83061C03 2009-12-01


Copiamos el identificador de la clave pública para introducirlo posteriormente en el fichero /var/www/iesvalledeljerte3/conf/distributions. En mi caso: 153F5386

Exportamos la clave pública en un archivo y la copiamos en el directorio principal del repositorio:

$ gpg  --armor --export 153F5386 > /var/www/iesvalledeljerte3/iesvalledeljerte3.asc

A continuación creamos un fichero donde vamos a definir las distribuciones con las que vamos a trabajar:

$ nano /var/www/iesvalledeljerte3/conf/distributions

Origin: IES Valle del Jerte
Label: Debian Squeeze packages
Suite: squeeze
Codename: squeeze
Architectures: i386 amd64
Components: main
Description: Paquetes adicionales para el IES
DebIndices: Packages Release . .gz .bz2
SignWith: 153F5386


Cuando tengamos todo lo anterior, entramos en el directorio del repositorio:

$ cd /var/www/iesvalledeljerte3

Y ejecutamos:

$ reprepro -VVV export

Al ejecutar el comando anterior, en alguna ocasión he tenido problemas con  la clave. Si tuviérais algún problema como yo, siempre podéis ejecutar el comando anterior con el parámetro --ask-passphrase:

$ reprepro --ask-passphrase -VVV export

A continuación creamos los enlaces simbólicos:

$ reprepro -VVV createsymlinks


Agregar paquetes binarios a nuestro repositorio
Para agregar paquetes binarios (.deb), nos situamos en la carpeta raíz del repositorio (siguiendo el ejemplo: /var/www/iesvalledeljerte3) y ejecutamos el siguiente comando:

$ reprepro --ask-passphrase includedeb [DISTRIBUCION] [PAQUETE]

Ejemplo:
$ reprepro --ask-passphrase includedeb squeeze /home/enam0000/Java-package/oracle-j2re1.7_1.7.0+update7_amd64.deb

$ reprepro --ask-passphrase includedeb squeeze /home/enam0000/Java-package/oracle-j2re1.7_1.7.0+update7_i386.deb

Nos preguntará por la frase de paso. La introducimos y al terminar incluirá nuestro paquete binario en el repositorio.


Eliminar paquetes binarios del repositorio
Eliminar un paquete de una rama de nuestro repositorio es sencillo:

$ reprepro --ask-passphrase remove [DISTRIBUCION] [PAQUETE]

Ejemplo:
$ reprepro --ask-passphrase remove squeeze oracle-j2re1.7


Usar el repositorio en nuestros clientes
Una vez hecho todo lo anterior, ya podemos usar el repositorio en nuestros clientes.

Creamos un archivo en el cliente para nuestro repositorio:

# nano /etc/apt/sources.list.d/iesvalledeljerte3.list

Con el siguiente contenido:

deb http://servidor/repositorio [DISTRIBUCIÓN] [COMPONENTES]

Siguiendo con el ejemplo en distribución especificamos squeeze, tal y como indicamos en el archivo de configuración /var/www/iesvalledeljerte3/conf/distributions y como componentes main (no hemos creado otro).

deb http://servidor/iesvalledeljerte3 squeeze main

Seguidamente descargamos la clave pública de nuestro repositorio, que ya subimos al servidor en el cliente y la añadimos mediante apt-key:

# wget http://servidor/iesvalledeljerte3.asc
# apt-key add iesvalledeljerte3.asc

Por último, haremos un apt-get update en el cliente para actualizar la lista de paquetes y ya podremos instalar lo que queramos desde nuestro repositorio.


Listar los paquetes disponibles en nuestro repositorio
Si queremos ver la lista de paquetes que tenemos agregados en nuestro repositorio, tan sólo tenemos que ejecutar:

# reprepro list "rama-de-repositorio"

Por ejemplo: Si quiero ver los paquetes que tengo en la rama squeeze de mi repositorio, ejecuto el siguiente comando:

# reprepro list squeeze

Y obtendré una lista en la que puedo ver los paquetes, la sección en la que están incluidos y la arquitectura:

squeeze|main|i386: firefox 18.0-2
squeeze|main|i386: iceweasel 17.0-1~bpo60+1
squeeze|main|i386: iceweasel-l10n-es-es 1:17.0-1~bpo60+1
squeeze|main|i386: java-package 0.51~exp1
squeeze|main|i386: nixnote 1.4
squeeze|main|i386: oracle-java7-jre 7.11
squeeze|main|i386: pkg-mozilla-archive-keyring 1.1
squeeze|main|i386: skype 4.0.0.7-1
squeeze|main|i386: xulrunner-17.0 17.0-1~bpo60+1
squeeze|main|amd64: firefox 18.0-2
squeeze|main|amd64: iceweasel-l10n-es-es 1:17.0-1~bpo60+1
squeeze|main|amd64: java-package 0.51~exp1
squeeze|main|amd64: libsqlite3-0 3.7.13-1~bpo60+1
squeeze|main|amd64: nixnote 1.4
squeeze|main|amd64: oracle-java7-jre 7.11
squeeze|main|amd64: pkg-mozilla-archive-keyring 1.1



Agregar paquetes sin sección o prioridad a nuestro repositorio
A veces queremos añadir ciertos paquetes a nuestro repositorio y éstos carecen de información de sección a la que pertenecen o prioridad, por ejemplo. O incluso, puede que tengan dicha información pero queremos cambiarla.

Para especificar la sección a la que queremos añadir un paquete, usamos el parámetro -S o --section. Por ejemplo: Imaginemos que quiero añadir los paquetes de libreoffice descargados de la web oficial de LibreOffice, que carecen de información de sección:

# reprepro --ask-passphrase -S main includedeb squeeze /var/www/descargas/libreoffice4/*.deb

Y si además, quiero cambiar la prioridad, usaré el parámetro -P o --priority. Por ejemplo: Imaginemos que, además de cambiar la sección quiero asignar una prioridad de 600 a los paquetes que voy a añadir a mi repositorio. No tendría más que hacer lo siguiente:

# reprepro --ask-passphrase -S main -P 600 includedeb squeeze /var/www/descargas/libreoffice4/*.deb


miércoles, 10 de octubre de 2012

Usar el SMTP de Gmail para enviar alertas de Monit

Monit es un sistema Open Source para la monitorización de sistemas que nos permite monitorizar procesos, archivos, directorios y sistemas de ficheros.

Con monit podemos realizar tareas automáticas, como por ejemplo, reiniciar un servicio o enviar una notificación al administrador cuando suceda algún error.

Si no tenemos un servidor de correo en nuestra organización, podemos hacer uso del SMTP de Gmail para que monit nos envíe las notificaciones que le digamos a nuestra cuenta de Gmail. Veamos, a continuación, cómo hacerlo:

Editamos el fichero /etc/monit/monitrc y añadimos las siguientes líneas:

set mailserver smtp.gmail.com port 587
      username "miusuario@gmail.com" password "mipassword"
      using tlsv1
      with timeout 15 seconds

set alert miusuario@gmail.com

Donde sustituiremos miusuario por nuestro usuario de gmail y mipassword por la password de dicha cuenta.

Si ahora establecemos una condición de monitorización, podemos que hacer que el sistema nos alerte, como en el siguiente ejemplo:

check host ldap with address ldap.valledeljerte3
      if failed icmp type echo count 5 with timeout 15 seconds
         then alert
De este modo recibiremos un e-mail cuando no se pueda contactar con el servidor ldap.

domingo, 7 de octubre de 2012

Averiguar a qué paquete pertenece un archivo en distribuciones Debian

Publiqué un artículo en el blog en el año 2008 en el que explicaba cómo averiguar a qué paquete pertenece un archivo en distribuciones Debian (http://enavas.blogspot.com.es/2008/12/averiguar-qu-paquete-pertenece-un.html). 

Este artículo se refería a paquetes que tuviéramos instalados en nuestro sistema, pero en muchas ocasiones, necesitamos saber a qué paquete pertenece un archivo cuyo paquete no tenemos instalado en nuestro sistema. Para ésto utilizaremos apt-file, que buscará los archivos que le pidamos mediante el sistema gestor de paquetes APT.

Instalar apt-file es sencillo si tiramos de apt-get:

# apt-get install apt-file

Una vez instalado, actualizamos la B.D. de apt-file:

# apt-file update

apt-file examinará los repositorios que estemos usando en nuestro sistema, y creará una B.D. que usará cuando busquemos un archivo.

Así, podemos buscar a qué paquete pertenece un patrón que especifiquemos:

# apt-file search "patrón"

Por ejemplo, si ejecutamos:

apt-file search mkpasswd

Buscaremos en qué ficheros hay archivos que contengan el patrón mkpasswd.

Crear contraseñas con mkpasswd

A veces tenemos que crear un usuario, por ejemplo mediante puppet, y no queremos que al hacerlo se muestre la contraseña en claro. Para solucionar este problema, podemos hacer uso de la herramienta mkpasswd.

mkpasswd es una herramienta que nos va a permitir generar hashes para nuestras contraseñas.  Se encuentra disponible en el paquete whois, así que, si no lo tenemos, lo instalamos:

# apt-get install whois

 Bien, pues una vez que tenemos instalado whois, ya podemos hacer uso de mkpasswd.

Para ver los métodos de cifrado que podemos utilizar, ejecutamos:

# mkpasswd -m help

Métodos disponibles:
des    standard 56 bit DES-based crypt(3)
md5    MD5
sha-256    SHA-256
sha-512    SHA-512

Para crear una contraseña cifrada, por ejemplo con cifrado sha-512,  ejecutamos en un terminal:

# mkpasswd -m sha-512

El programa nos pedirá la contraseña. La introducimos y automáticamente nos devolverá un hash con dicha contraseña cifrada. Lo copiamos y ya podemos utilizarlo donde sea necesario.

lunes, 1 de octubre de 2012

Des-rootear Galaxy Mini/Pop Plus - GT-S5570I

También es muy sencillo des-rootear nuestro Samsung Galaxy Mini/Pop Plus - GT-S5570I.
 
Es importante volver a recordar que el Samsung Galaxy GT-S5570I tiene diferentes componentes hardware que el Samsumg Galaxy GT-S5570 y no podemos utilizar las mismas roms o kernel para ambos dispositivos.

Para des-rootear nuestro S5570I, lo primero que haremos será descargar el siguiente archivo: unroot.zip y copiarlo a la raiz de la tarjeta SD.

Una vez descargado, apagamos completamente el teléfono y lo encendemos pulsando simultáneamente las teclas Vol. Up + Home + Power hasta que entre en el modo Recovery. En este modo tendremos cuatro opciones:
  • Reboot system now.
  • Apply update from sdcard.
  • Wipe data/factory reset.
  • Wipe cache partition
Seleccionamos la opción "Apply update from sdcard" (Nos desplazamos por el menú con las teclas de subir/bajar volúmen y seleccionamos con la tecla Home).

A continuación, elegimos el archivo unroot, que se encuentra en la raiz de la tarjeta SD.

Y listo. Ya tendremos des-rooteado nuestro S5570I.

NetworkManager: Modificar políticas II

Como ya vimos en el artículo "NetworkManager: Modificar políticas", si creamos una conexión inalámbrica y la guardamos como conexión del sistema, marcando la casilla "Disponible para todos los usuarios", cuando el usuario quiera cambiar su clave de entrada al sistema (que es la misma para acceder a la wifi), no va a poder hacerlo porque NetworkManager le pide la contraseña de administrador.

Para solucionar este problema, tendremos que cambiar la política de NetworkManager.

En el artículo "NetworkManager: Modificar políticas", lo hicimos modificando el fichero:

/usr/share/polkit-1/actions/org.freedesktop.network-manager-settings.system.policy

El problema de hacerlo así es que, si se produce una actualización del paquete  network-manager, se modificará dicho archivo y perderemos las modificaciones que hubiéramos realizado.

Otra opción es utilizar pklocalauthority, que nos va a permitir crear una política local para nuestro caso. No voy a entrar en detalles sobre pklocalauthority ahora. Tan sólo voy a contar la solución al problema.

Creamos un fichero, dentro de /etc/polkit-1/localauthority/50-local.d/ y le llamamos, por ejemplo: 50-network-manager.pkla

# nano /etc/polkit-1/localauthority/50-local.d/50-network-manager.pkla

Y le añadimos el siguiente contenido:

[Network Manager Permissions]
Identity=unix-group:students;unix-group:teachers
Action=org.freedesktop.network-manager-settings.system.modify
ResultAny=yes
ResultActive=yes
ResultInactive=no

Básicamente estamos definiendo que se permita realizar modificaciones en los ajustes de network-manager (Action=org.freedesktop.network-manager-settings.system.modify), sin solicitar contraseña de administrador a los usuarios de los grupos students y teachers (Identity=unix-group:students;unix-group:teachers)