Algo de Linux: abril 2014

martes, 29 de abril de 2014

Actualizar imagen ISO de Debian mediante jigdo

Como ya vimos en un post anterior, Jigdo es una de las mejores formas de descargar imágenes ISO de Debian. 

Aprovechando que en aquél post vimos cómo descargar la ISO de Debian 7.4.0, en este post, vamos a ver cómo actualizarla a la versión 7.5.0, algo que requerirá mucho menos tiempo, puesto que tan sólo tendrán que descargarse las variaciones de paquetes.

Lo primero que haremos será ir a la página de descargas:

 

Por si no lo recordáis, en aquél post descargamos la siguiente ISO: debian-7.4.0-amd64-CD-1.iso

Como entonces descargamos el primer CD de amd64, hacemos clic en amd64:


Con lo que accederemos a la página de descargas:


Como podéis ver, he marcado en un rectángulo los dos archivos que tenemos que descargar.

A continuación nos conectamos a la máquina donde tenemos guardada la ISO, nos situamos en el directorio donde está almacenada y descargamos ambos archivos:

root@recursos:/root# cd /var/www/descargas/isos 
root@recursos:/var/www/descargas/isos# wget http://cdimage.debian.org/debian-cd/7.5.0/amd64/jigdo-cd/debian-7.5.0-amd64-CD-1.jigdo
root@recursos:/var/www/descargas/isos# wget http://cdimage.debian.org/debian-cd/7.5.0/amd64/jigdo-cd/debian-7.5.0-amd64-CD-1.template

Una vez descargados, montamos la imagen de la versión anterior en un directorio, por ejemplo /mnt:

root@recursos:/var/www/descargas/isos# mount -o loop debian-7.4.0-amd64-CD-1.iso /mnt/

Y ejecutamos jigdo-lite, pasándole como parámetro el archivo .jigdo:

root@recursos:/var/www/descargas/isos# jigdo-lite debian-7.5.0-amd64-CD.1.jigdo

Lo primero que nos preguntará el programa es si tenemos una imagen antigua para actualizarla:


Si os dáis cuenta, hemos montado la imagen antigua en el directorio que nos ofrece por defecto jigdo-lite a propósito.  Y si leéis lo que dice, comprobaréis que nos pide que introduzcamos el dígito correspondiente a las opciones que nos ofrece. En este caso sólo nos ofrece una opción 1: /mnt, que es donde hemos montado la imagen. Así que escribimos 1 y pulsamos ENTER.

La aplicación comprobará qué archivos se encuentran en el directorio de la imagen y cuáles no se encuentran:


Cuando termine, volverá a preguntarnos si tenemos otro directorio donde pueda localizar nuevos archivos para añadirlos a la ISO sin tener que descargarlos de internet. Como no tenemos más, pulsamos ENTER.

A continuación nos ofrecerá como mirror de descarga el que usamos en la anterior ocasión y nos dará la posibilidad de cambiarlo:


Pulsamos ENTER para que trate de descargarlo desde nuestro propio mirror. Al fin y al cabo, si no encontrase los paquetes, los descargaría desde una de las réplicas oficiales de Debian.

Y comenzará el proceso de descarga de paquetes para construir la ISO. Cuando termine el proceso de descarga, creará la imagen y comprobará si ha sido generada correctamente:


Como podéis comprobar, en nuestro ejemplo jigdo ha tenido que descargar muy pocos paquetes y ha generado la imagen en menos de un minuto.

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

lunes, 28 de abril de 2014

Montar un mirror ldap en una Raspberry Pi

Ahora que tengo el servicio ldap replicado en los dos servidores principales del centro, tengo mayor de seguridad de que mis servicios van a tener una alta disponibilidad. No obstante, estaba pensando que podría dar una vuelta de tuerca más y montar un mirror ldap en una Raspberry Pi. De este modo, si por alguna razón, ninguno de los servidores ldap funcionara, podría poner en marcha la Raspberry para mantener el servicio mientras solucionara los problemas en el servidor principal.

Como ya dispongo de un mirror ldap en el servidor nfs del centro, la tarea es muy sencilla:

Primero.- Instalamos los paquetes slapd, ldap-utils y phpldapadmin y se instalarán además todas sus  dependencias.
root@raspberrypi:~# apt-get -y install slapd ldap-utils phpldapadmin

Segundo.- Paramos el servicio:
root@raspberrypi:~# service slapd stop

Tercero.- Copiamos el fichero de configuración del servidor de réplica "servidor":
root@raspberrypi:~# scp root@servidor:/etc/ldap/slapd.conf /etc/ldap/

Cuarto.- Copiamos los esquemas:
root@raspberrypi:~# scp -r root@ldap:/etc/ldap/schema /etc/ldap/
Esto lo hago porque utilizamos algunos esquemas que no vienen incluidos por defecto.

Quinto.- Modificamos el identificador de la réplica en el fichero /etc/ldap/slapd.conf para que no coincida:
syncrepl rid=3
   provider=ldap://ldap
   searchbase="dc=instituto,dc=extremadura,dc=es"
   type=refreshOnly
   interval=00:00:02:00
   retry="60 10 300 +"
   filter="(objectClass=*)"
   scope=sub
   attrs="*,+"
   sizelimit=unlimited
   timelimit=unlimited
   schemachecking=off
   bindmethod=simple
   starttls=yes
   tls_reqcert=never
   binddn="cn=replica,dc=instituto,dc=extremadura,dc=es"
   credentials=password-usuario-replica
updateref       ldap://ldap

Sexto.- Copiamos el fichero /etc/ldap/rootDSE-linex.ldif desde el servidor ldap:
root@raspberrypi:~# scp root@ldap:/etc/ldap/rootDSE-linex.ldif /etc/ldap/

Séptimo.- En el fichero de configuración se hace referencia a los certificados para usar ldap con ssl. Creamos el directorio ssl y copiamos en él los ficheros ldap-server-pubkey.pem, mkslapdcert y  slapd-cert.cnf desde el servidor ldap:
root@raspberrypi:~# mkdir /etc/ldap/ssl
root@raspberrypi:~# scp root@ldap:/etc/ldap/ssl/ldap-server-pubkey.pem /etc/ldap/ssl/
root@raspberrypi:~# scp root@ldap:/etc/ldap/ssl/mkslapdcert /etc/ldap/ssl/
root@raspberrypi:~# scp root@ldap:/etc/ldap/ssl/slapd-cert.cnf /etc/ldap/ssl/

Octavo.- Ejecutamos mkslapdcert para crear un certificado:
root@raspberrypi:~# /etc/ldap/ssl/mkslapdcert

Noveno.- Modificamos el archivo /etc/default/ldap para especificar que el archivo de configuración de ldap es /etc/ldap/slapd.conf al principio del archivo:
# Default location of the slapd.conf file or slapd.d cn=config directory. If
# empty, use the compiled-in default (/etc/ldap/slapd.d with a fallback to
# /etc/ldap/slapd.conf).
SLAPD_CONF=/etc/ldap/slapd.conf

Décimo.- Por último, arrancamos el servicio ldap:
root@raspberrypi:/etc/ldap# service slapd restart

Y, si todo ha ido bien, se replicará la base de datos. Podéis comprobarlo viendo cómo se modifica el contenido del directorio /var/lib/ldap/, por ejemplo:
root@raspberrypi:~# watch ls -l /var/lib/ldap
Publicado por primera vez en http://enavas.blogspot.com.es

viernes, 25 de abril de 2014

Raspberry Pi como gestor de descargas torrent con Transmission

En un post anterior, hemos visto cómo convertir nuestra Raspberry Pi en un gestor de descargas directas con pyLoad. En este post, vamos a ver cómo convertirlo en un gestor de descargas torrent usando Transmission.



Hay mucha gente que deja su ordenador encendido continuamente para realizar descargas. Un ordenador de sobremesa tiene un consumo entre 350W y 500W. En cambio, una Raspberry consume tan sólo 3.5W. Si realizáis algunos cálculos, al precio que tiene la electricidad hoy en día, ¿no creéis que merece la pena sustituir el ordenador como herramienta de descargas por una Raspberry?

Bueno, pues vamos al tema...

Como los paquetes de transmission se encuentran en los repositorios, lo primero que vamos a hacer es una actualización de índices:

# apt-get update

Una vez actualizados, instalamos el paquete:

# apt-get install transmission-daemon

Con ésto, instalaremos el paquete transmission-daemon y todas sus dependencias:


Le respondemos que sí queremos continuar y comenzará el proceso de instalación. Cuando termine, iniciará automáticamente el servicio, como podéis ver en la siguiente imagen:


Si conectáis un disco duro vía usb para guardar los archivos descargados, el sistema operativo de la Raspberry lo detectará automáticamente y lo montará normalmente por el nombre de la etiqueta del disco. Por ejemplo, si mi disco usb tiene como etiqueta MULTIMEDIA, la Raspberry lo montará en /media/MULTIMEDIA.

El siguiente paso que daremos será crear la estructura de carpetas en el disco duro:

# mkdir /media/MULTIMEDIA/transmission
# mkdir /media/MULTIMEDIA/transmission/done
# mkdir /media/MULTIMEDIA/transmission/incomplete

A continuación, paramos el servicio para poder modificar el archivo de configuración:

# /etc/init.d/transmission-daemon stop

Y configurar, como mínimo, los ajustes que os resalto en color amarillo en el archivo /var/lib/transmission-daemon/info/settings.json:

# nano /var/lib/transmission-daemon/info/settings.json

{
    "alt-speed-down": 50,
    "alt-speed-enabled": false,
    "alt-speed-time-begin": 540,
    "alt-speed-time-day": 127,
    "alt-speed-time-enabled": false,
    "alt-speed-time-end": 1020,
    "alt-speed-up": 50,
    "bind-address-ipv4": "0.0.0.0",
    "bind-address-ipv6": "::",
    "blocklist-enabled": false,
    "blocklist-url": "http://www.example.com/blocklist",
    "cache-size-mb": 4,
    "dht-enabled": true,
    "download-dir": "/media/MULTIMEDIA/transmission/done",
    "download-limit": 100,
    "download-limit-enabled": 0,
    "download-queue-enabled": true,
    "download-queue-size": 5,
    "encryption": 1,
    "idle-seeding-limit": 30,
    "idle-seeding-limit-enabled": false,
    "incomplete-dir": "/media/MULTIMEDIA/transmission/incomplete",
    "incomplete-dir-enabled": true,
    "lpd-enabled": false,
    "max-peers-global": 200,
    "message-level": 2,
    "peer-congestion-algorithm": "",
    "peer-limit-global": 240,
    "peer-limit-per-torrent": 60,
    "peer-port": 51413,
    "peer-port-random-high": 65535,
    "peer-port-random-low": 49152,
    "peer-port-random-on-start": false,
    "peer-socket-tos": "default",
    "pex-enabled": true,
    "port-forwarding-enabled": false,
    "preallocation": 1,
    "prefetch-enabled": 1,
    "queue-stalled-enabled": true,
    "queue-stalled-minutes": 30,
    "ratio-limit": 2,
    "ratio-limit-enabled": false,
    "rename-partial-files": true,
    "rpc-authentication-required": true,
    "rpc-bind-address": "0.0.0.0",
    "rpc-enabled": true,
    "rpc-password": "raspberry",
    "rpc-port": 9091,
    "rpc-url": "/transmission/",
    "rpc-username": "pi",
    "rpc-whitelist": "127.0.0.1",
    "rpc-whitelist-enabled": false,
    "scrape-paused-torrents-enabled": true,
    "script-torrent-done-enabled": false,
    "script-torrent-done-filename": "",
    "seed-queue-enabled": false,
    "seed-queue-size": 10,
    "speed-limit-down": 100,
    "speed-limit-down-enabled": false,
    "speed-limit-up": 100,
    "speed-limit-up-enabled": false,
    "start-added-torrents": true,
    "trash-original-torrent-files": false,
    "umask": 18,
    "upload-limit": 100,
    "upload-limit-enabled": 0,
    "upload-slots-per-torrent": 14,
    "utp-enabled": true
}

Como podéis observar, hemos establecido los directorios de descarga, el usuario que tendrá acceso al interfaz web y su contraseña.

En cuanto a la password por defecto es: transmission. Se encuentra cifrada.  Podéis cambiarla sin ningún problema, escribiéndola en claro entre las comillas y cuando volváis a iniciar el servicio, se cifrará.

Si os dáis cuenta, hay muchos parámetros de configuración que podemos ajustar.

Una vez realizados los cambios de configuración, iniciamos el servicio:

# /etc/init.d/transmission-daemon start

A continuación vamos a comprobar que podemos acceder al intefaz web indicando la IP o el nombre del servidor seguido del puerto de escucha: 9091
http://ipServidor:9091


Introducimos el usuario y la password que hayamos establecido en el fichero de configuración, pulsamos el botón Aceptar y estaremos dentro:



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

Configurar PowerDNS en los centros para tener acceso a las aplicaciones de la Intranet del Gobierno de Extremadura

En nuestras instalaciones utilizamos PowerDNS, un servidor DNS OpenSource cuyas funciones están separadas básicamente en dos componentes clave: El servidor autoritativo (pdns-server) y el recursor (pdns-recursor). Además usamos ldap como backend (pdns-backend-ldap).

Para acceder a las aplicaciones de la Intranet del Gobierno de Extremadura, podemos realizar diferentes configuraciones en diferentes lugares, ya sea en los servidores DNS o en los propios clientes. Os voy a contar la configuración que considero más óptima y que tengo establecida en mi centro.

En el fichero de configuración de powerdns /etc/powerdns/pdns.d/pdns-debian-edu.conf tengo definido que use como recursor el propio servidor dns (127.0.0.1:1553):
recursor=127.0.0.1:1553
Con ésto garantizo que se resolverán los nombres de los equipos de mi centro y las páginas de internet.

Por otro lado, en el fichero de configuración del recursor /etc/powerdns/recursor.conf  tengo definido que las consultas de la zona gobex.pri sean redirigidas a los servidores DNS 172.20.5.4, 172.20.5.3:
forward-zones=gobex.pri=172.20.5.4;172.20.5.3,juntaextremadura.pri=172.16.1.28
De este modo, los servidores DNS 172.20.5.4, 172.20.5.3 y 172.16.1.28 resolverán los servicios de Intranet, como por ejemplo:
  • http://alfresco.gobex.pri
  • http://gtp.gobex.pri
  • http://fichajeap.juntaextremadura.pri
  • https://x-webportal.gobex.pri
  • etc...
Publicado por primera vez en http://enavas.blogspot.com.es

jueves, 24 de abril de 2014

Replicar el servicio ldap del servidor "ldap" en el servidor "servidor"

Como ya comenté en un post anterior, repliqué el servicio ldap del servidor "ldap" en el servidor "servidor" de mi centro, configuré el dhcp en modo failover y monté el servidor dns replicado en el servidor "servidor" para lograr una mayor seguridad y una alta disponibilidad de servicios.

Como la base de todos estos cambios está en crear una réplica del servidor "ldap" (ldap master) en el servidor "servidor" (ldap slave), vamos a ver qué cambios hay que realizar para replicar el servicio mediante syncrepl.

Configuración del ldap master (servidor "ldap"):
Lo primero que tenéis que hacer es aseguraros de que tenéis las siguientes líneas en el fichero de configuración /etc/ldap/slapd.conf del ldap master:

moduleload syncprov
overlay syncprov
syncprov-checkpoint 100 10
syncprov-sessionlog 200
Estas líneas convierten el servidor ldap en un proveedor.

Por otra parte, aseguraos de que entre las opciones de indexado de la B.D. existe la siguiente:
index           entryCSN,entryUUID eq

Y que entre las reglas de acceso a los atributos restringidos, hay permiso de lectura para el usuario replica, un usuario que usamos única y exclusivamente para esta tarea:
access to attrs=userPassword,shadowLastChange
        by dn="cn=admin,ou=People,dc=instituto,dc=extremadura,dc=es" write
        by dn="cn=replica,dc=instituto,dc=extremadura,dc=es" read
        by anonymous auth
        by self =xw
        by * none

access to attrs=employeeNumber,jpegPhoto
        by dn="cn=replica,dc=instituto,dc=extremadura,dc=es" read
        by dn="cn=interno,dc=instituto,dc=extremadura,dc=es" read
        by self read

Configuración del ldap slave (servidor "servidor"):
En el servidor ldap, lo primero que habrá que hacer es instalar los paquetes slapd, ldap-utils y phpldapadmin.

Una vez instalados los paquetes, vamos a necesitar tener la misma configuración que en el otro servidor, así que lo mejor que podemos hacer es copiar el archivo slapd.conf y el directorio schema desde el servidor "ldap" al servidor "servidor". Así nos aseguramos de que tenemos la misma configuración y los mismos esquemas.

Bien, pues una vez hecho ésto, editamos el archivo /etc/ldap/slapd.conf y le añadimos las siguientes líneas:

syncrepl rid=1
        provider=ldap://ldap
        searchbase="dc=instituto,dc=extremadura,dc=es"
        type=refreshOnly
        interval=00:00:02:00
        retry="60 10 300 +"
        filter="(objectClass=*)"
        scope=sub
        attrs="*,+"
        sizelimit=unlimited
        timelimit=unlimited
        schemachecking=off
        bindmethod=simple
        starttls=yes
        tls_reqcert=never
        binddn="cn=replica,dc=instituto,dc=extremadura,dc=es"
        credentials=clave-del-usuario-replica
updateref       ldap://ldap

Con ésto, lograremos que el ldap slave replique la B.D. del ldap master.

No voy a entrar en detalle sobre todos los parámetros. Todos son importantes, pero tan sólo contaremos los principales:

  • syncrepl rid=1 Identificamos la réplica. Por lo que he leído, cada réplica debe llevar un número diferente.
  • provider=ldap://ldap Indicamos quién es el proveedor del que se va a obtener la B.D.
  • searchase="dc=insituto,dc=extremadura,dc=es" Nos permite indicar la raiz desde donde realizar búsqueda para hacer la réplica.
  • type=refreshOnly Con esta opción le decimos al ldap slave que realice la réplica y no vuelva a realizarla hasta que pase un intervalo de tiempo especificadon mediante el parámetro interval
  • interval=00:00:02:00 Esta opción se usa conjuntamente con el tipo de sincronización refreshOnly para que vuelva a realizarse una sincronización tras el intervalo de tiempo especificado en formato dias:horas:minutos:segundos. En este caso, estamos diciendo que vuelva a realizar la sincronización cada 2 minutos.
  • retry="60 10 300 +" Si se produce algún error durante el proceso de réplica, el consumidor intentará reconectar con el servidor de acuerdo con los parámetros especificados en la lista. Ésta es una lista de pares. En el ejemplo mostrado, el consumidor reintentará realizar la sincronización cada 60 segundos las 10 primeras veces. Transcurridos estos intentos, tratará de realizar la sincronización cada 300 segundos de forma indefinida (ésto es lo que significa el signo +)
  • binddn="cn=replica,dc=instituto,dc=extremadura,dc=es" nos permite indicar con qué usuario se debe realizar la operación de sincronización.
  • credentials=clave-del-usuario-replica nos permite indicar la clave del usuario con el que se realiza la operación de sincronización.
Bien, pues ahora que ya hemos configurado el archivo /etc/ldap/slapd.conf, establecemos el propietario y grupo del directorio /var/lib/ldap a openldap:openldap

# chown -R openldap:openldap /var/lib/ldap

Por último, reiniciamos los servicios ldap de ambos servidores y comprobamos que los cambios del master se han replicado en el slave.

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

Detectar entradas no válidas en los ficheros de pkgsync

Como ya vimos en un post anterior, pkgsync es una herramienta muy útil para mantener una uniformidad en el software instalado en las máquinas que administramos manteniendo tres archivos con listas de ficheros de paquetes que la máquina debe tener (musthave), paquetes que puede tener (mayhave) y paquetes que no debe tener (maynothave). 

A veces, estos ficheros pueden contener paquetes que han dejado de existir en los repositorios y al ejecutar pkgsync véis líneas como éstas:

No se puede encontrar ningún paquete cuyo nombre o descripción coincida con "python2.4-cairo"

No se puede encontrar ningún paquete cuyo nombre o descripción coincida con "python2.4-gnome2-extras"
...

Para detectar este tipo de situaciones y detectar los paquetes que tengo en los ficheros de configuración de pkgsync que ya no existen en los repositorios, uso la siguiente combinación de comandos:


# pkgsync -s|grep "No se puede encontrar"|cut -f2 -d"\""|grep -v "^$"|sort -u
Publicado por primera vez en http://enavas.blogspot.com.es

miércoles, 23 de abril de 2014

Problema con el botón de encendido/apagado Wireless en HP EliteBook 2530p

El botón de encendido/apagado Wireless del HP EliteBook 2530p es un botón/indicador que permite activar/desactivar los medios wireless, de tal manera que desactiva tanto la tarjeta wifi como el bluetooth.



Este modelo de portátiles siempre ha mostrado algún problema con este botón de encendido/apagado porque en muchas ocasiones el indicador cambiaba de color entre el azul (activado) y el naranja (desactivado), como si se desactivase y activase de una forma muy rápida. El caso es que, por alguna razón, en uno de estos portátiles se desactivó y no ha sido posible volver a activarlo de ninguna manera.

Después de realizar muchas pruebas y buscar información, la única solución que se me ocurrió fue actualizar la BIOS a la última versión disponible a día de hoy (F.22 4 Jan 2013) y funcionó.


Escogí la última opción (ROMPaq for HP Notebook System BIOS (68PSU) - FreeDOS Bootable Media) para utilizar la versión bootable con freedos que HP proporciona en una ISO. De este modo, podía añadir la iso a mi disco duro de herramientas usb y modificar el archivo syslinux.cfg para añadirle una nueva entrada que me permitiera seleccionar la opción de flashear la bios:
label flashbiosHPEliteBook2530p
  MENU LABEL Actualizar BIOS HP EliteBook 2530p
  linux memdisk
  append iso
  initrd /isos/hpelitebook2530p.iso

Así de sencillo. De este modo, me resultará muy fácil actualizar la BIOS de cualquiera de estos portátiles.
Publicado por primera vez en http://enavas.blogspot.com.es

Servidor de ebooks con Calibre en Debian Wheezy

Calibre es una aplicación que no puede faltar entre nuestra colección de programas. Su principal función es gestionar nuestra propia biblioteca de ebooks, aunque también nos va a permitir:
  • Gestionar nuestra colección de ebooks.
  • Convertir ebooks a otro formato.
  • Sincronizar nuestra colección de ebooks con dispositivos de lectura de libros electrónicos.
  • Descargar noticias desde la web y convertirlas en libros electrónicos.
  • Leer los libros electrónicos con su visor integrado.
  • Editar libros electrónicos.
  • Servir nuestra colección de libros a través de la red mediante un servidor web integrado.



Hoy vamos a ver cómo utilizar Calibre para convertir nuestro equipo con Debian Wheezy en un servidor de ebooks.

Abrimos un terminal y nos logueamos como administrador.

A continuación, descargamos el script de instalación de Calibre y le damos permisos de ejecución:

root~# wget -O /usr/sbin/calibre-update --no-check-certificate https://copy.com/v8KCcFtiUKPR
root~# chmod +x /usr/sbin/calibre-update

Una vez que tenemos el script, lo ejecutamos para realizar el proceso de descarga e instalación:

root~# calibre-update

Tardará un ratito más o menos largo, dependiendo de vuestra velocidad de conexión.

Una vez instalado, ya podemos iniciar Calibre desde el menú Aplicaciones -> Oficina -> calibre.
Si es la primera vez que lo iniciamos, se nos abrirá el asistente de configuración. Si ya lo hemos iniciado anteriormente, podremos encontrar los archivos de configuración en nuestro home de usuario, y más concretamente, dentro del directorio .config/calibre. Si necesitáramos realizar configuraciones sin disponer de entorno gráfico en algún momento, podríamos hacerlo modificando los archivos de este directorio.

En cuanto a los libros que vayamos guardando en nuestro catálogo, se almacenarán dentro de una carpeta dentro del home de usuario. Si al seguir el asistente, habéis configurado el idioma español y habéis dejado la ubicación por defecto, la carpeta de llamará Biblioteca de calibre.

Para iniciar el servidor de ebooks no tenemos más que abrir un terminal y escribir el siguiente comando:

root~# calibre-server --username=calibre --password=mipassword --with-library=/home/enam0000/Biblioteca\ de\ calibre/

Con este comando le estamos indicando:
  • Que queremos lanzar el servidor de calibre: calibre-server
  • Que el usuario debe introducir el nombre calibre para acceder: --username=calibre
  • Que el usuario debe introducir la password mipassword para acceder: --password=mipassword
  • Y que la librería que vamos a servir se encuentra en /home/enam0000/Biblioteca\ de\ calibre/
Por supuesto, podéis indicar el nombre de usuario y la password que queráis.

Si ahora abrimos el navegador y escribimos en la barra de direcciones la IP del equipo junto con el puerto 8080, que es el puerto por defecto:

http://ipServidor:8080

Os pedirá que introduzcáis un nombre de usuario y contraseña. Introducid los que hayáis especificado en el comando. Y se abrirá la página web con la que podremos navegar por el catálogo:


Por supuesto, si queréis que se inicie el servicio al iniciar la máquina, tendréis que crear un script de inicio normalizado en /etc/init.d

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

martes, 22 de abril de 2014

Script de instalación/actualización de Calibre

En un post anterior (http://enavas.blogspot.com.es/2014/04/instalar-la-ultima-version-disponible.html) vimos que es muy sencillo instalar o actualizar Calibre usando el script python que nos proporcionan los desarrolladores:
# python -c "import sys; py3 = sys.version_info[0] > 2; u = __import__('urllib.request' if py3 else 'urllib', fromlist=1); exec(u.urlopen('http://status.calibre-ebook.com/linux_installer').read()); main(install_dir='/opt')"
Para que nos sea más cómodo utilizarlo, podemos colocar el código en un archivo al que llamaremos por ejemplo calibre-update dentro del directorio /opt/calibre, más que nada por ser un poco organizados:

# cat /opt/calibre/calibre-update
#!/usr/bin/python

import sys; 
py3 = sys.version_info[0] > 2; 
u = __import__('urllib.request' if py3 else 'urllib', fromlist=1); 

exec(u.urlopen('http://status.calibre-ebook.com/linux_installer').read()); 

main(install_dir='/opt')

Una vez guardado el archivo, le damos permisos de ejecución:

# chmod +x /opt/calibre/calibre-update

Y creamos el enlace /usr/sbin/calibre-update:

# ln -s /opt/calibre/calibre-update /usr/sbin/calibre-update

De este modo, cuando el programa nos diga que hay una nueva versión de calibre, no tendremos más que ejecutar el script:

# calibre-update

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

viernes, 11 de abril de 2014

Monitorizar los servidores del centro con Monit

Monit es una utilidad gratuita de código abierto para la gestión y control de:
  • procesos.
  • archivos.
  • directorios
  • sistemas de ficheros.

Lo que siginifica que nos va a servir, no sólo para monitorizar estos elementos, sino también para controlarlos, de manera que, por ejemplo, pueda reiniciar un servicio si se cumplen determinadas condiciones. Esto es muy útil e interesante porque vamos a poder "vigilar" un servicio y que monit lo levante en caso de que esté caído.

Mi idea, ahora que ya tengo "casi" todos los servicios redundantes, era dar un paso más y controlar los servicios y máquinas de una manera visual y automatizada, recibiendo un correo en mi cuenta de gmail cuando se produzca una incidencia.

Supongo que iré ampliando los elementos a monitorizar, pero de momento, ya tengo monitorizados los siguientes servicios y ficheros en el servidor nfs:


En el servidor ldap:

Y en los servidores ltsp:
Publicado por primera vez en http://enavas.blogspot.com.es

jueves, 10 de abril de 2014

Writer2ePub: Extensión para crear ebooks ePub en Libreoffice y OpenOffice.org

Writer2ePub es una extensión disponible para Libreoffice y OpenOffice.org que nos va a permitir usar el procesador de textos de estas suites ofimáticas para crear nuestros ebooks en formato ePub.


Podéis descargar esta extensión desde el Blog del autor: 

Si tenéis LibreOffice, deberéis descargar esta versión:
http://lukesblog.it/wp-content/plugins/cimy-counter/cc_redirect.php?cc=Writer2ePub&fn=http://dl.dropbox.com/u/14712909/macro/w2e/writer2epub.oxt

Y si utilizáis OpenOffice.org, ésta:
http://lukesblog.it/wp-content/plugins/cimy-counter/cc_redirect.php?cc=Writer2ePubAOO4&fn=http://dl.dropbox.com/u/14712909/macro/w2e/writer2epubA.oxt

Una vez descargada, es muy fácil de instalar. Tan sólo buscamos el archivo descargado en el explorador y le hacemos doble clic. Automáticamente se abrirá Libreoffice u OpenOffice.org (el que tengamos instalado) y se instalará la extensión.

Por supuesto, también podéis instalar la extensión desde un terminal, siguiendo las instrucciones de este post:

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

Controlar el acceso a páginas https desde Squid

Ya os conté cómo es posible filtrar por usuario y/o por grupos en un post anteriorhttp://enavas.blogspot.com.es/2013/11/filtrar-por-usuario-mediante-squid-ldap.html, utilizando squid en modo no transparente, algo que os recomiendo porque, aunque es cierto que puede darnos un poco más de trabajo a la hora de implementarlo, debido a que requiere configurar el uso explícito del proxy en el navegador, nos va a aportar un mayor nivel de control sobre las reglas de filtrado.

En este post os voy a explicar cómo controlar el acceso a páginas https como facebook, twitter, etc.. vía https y para corroborar lo que os digo, os mostraré cómo podemos hacer un control selectivo dependiendo del grupo al que pertenezca un usuario, basándome en la configuración realizada en el post mencionado anteriormente.

Supongamos que tengo configurado mi servidor con un filtrado selectivo mediante squid y ldap y en el fichero de configuración /etc/squid/squid.conf tengo dos ACL:
# ACL para establecer reglas de filtrado para el grupo teachers
acl profesores external group_auth teachers

# ACL para establecer reglas de filtrado para el grupo students
acl alumnos external group_auth students

Supongamos que quiero controlar el acceso vía https a páginas como facebook, twitter y youtube. Para ello podría crear una acl por cada dominio:
# ACL para gestionar facebook
acl facebook dstdomain .facebook.com

# ACL para gestionar twitter
acl twitter dstdomain .twitter.com

# ACL para gestionar youtube
acl youtube dstdomain .youtube.com

Y crear reglas de filtrado para permitir el acceso del grupo profesores a estos tres dominios y denegárselo al grupo alumnos:
# Permitir facebook a profesores y denegárselo a alumnos
http_access allow CONNECT facebook profesores
http_access deny CONNECT facebook alumnos

# Permitir twitter a profesores y denegárselo a alumnos
http_access allow CONNECT twitter profesores
http_access deny CONNECT twitter alumnos

# Denegar youtube a profesores y denegárselo a alumnos
http_access allow CONNECT youtube profesores
http_access deny CONNECT youtube alumnos

Una vez añadidas las reglas al fichero de configuración, haríamos que squid lo re-lea:

# service squid reload

Así de fácil. Ahora bien, en lugar de crear una acl y una regla de filtrado para cada web con acceso https que necesite filtrar, podríamos almacenar los dominios a restringir en un fichero y cambiar las reglas de filtrado anteriores por las siguientes:

# Lista de dominios https restringidos
acl deny_https url_regex "/etc/squid/acl/deny_https"

# Controlar el acceso a webs https específicas
http_access allow CONNECT deny_https profesores
http_access deny CONNECT deny_https alumnos

De este modo, cuando queramos filtrar el acceso a una nueva web vía https, tan sólo tendremos que añadir el dominio al archivo /etc/squid/acl/deny_https.

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

miércoles, 9 de abril de 2014

Instalar extensiones de LibreOffice desde un terminal de forma desatendida

Publico este post en respuesta a dos preguntas que me han hecho y ya sirve para todos los que me siguen.

En un post anterior (http://enavas.blogspot.com.es/2013/02/instalar-extensiones-de-libreoffice.html) os conté cómo instalar extensiones de LibreOffice desde un terminal y que estén disponibles para todos los usuarios, algo que como ya vimos, es algo bastante sencillo:
# unopkg add --shared Sun_ODF_Template_Pack_2_ES.oxt

Ahora bien, al efectuar la instalación, se nos muestra la Licencia de Usuario, algo que no nos interesa si estamos realizando una instalación desatendida mediante puppet, por ejemplo. Pero eso es muy fácil de resolver, puesto que la herramienta unopkg tiene un parámetro "-s" que nos permite omitir que se muestre la licencia:
# unopkg add -s --shared Sun_ODF_Template_Pack_2_ES.oxt

Por otra parte, me habían comentado que el paquete unopkg no se encontraba disponible en las versiones de LibreOffice descargadas desde la web oficial. Sí se encuentra disponible. Lo que sucede es que los paquetes de la web oficial instalan LibreOffice en el directorio /opt y los binarios de LibreOffice se encuentran concretamente en /opt/libreoffice4.0/program/, /opt/libreoffice4.1/program/, /opt/libreoffice4.2/program/, etc... dependiendo de la versión que tengáis instalada y la ruta no se encuentra añadida al path de binarios. 

Si, por ejemplo, tenéis Libreoffice 4.2 y queréis instalar una extensión, podéis especificar la ruta completa a unopkg:
# /opt/libreoffice4.2/program/unopkg add -s --shared Sun_ODF_Template_Pack_2_ES.oxt

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

martes, 8 de abril de 2014

LTSP: Configurar DNS para los thinclients

Si queremos, podemos configurar las DNS de los thinclients LTSP modificando el fichero /opt/ltsp/i386/etc/resolv.conf a mano. Aunque también podemos utilizar otro método: Definirlos en el fichero de configuración /opt/ltsp/i386/etc/lts.conf, algo sencillo de hacer porque sólo hay que configurar dos parámetros:
  • DNS_SERVER: Nos permite indicar los servidores DNS.
  • SEARCH_DOMAIN: Nos permite indicar el dominio de búsqueda.

Por ejemplo: Si en mi centro tengo dos servidores de DNS: 172.19.144.2 y 172.19.144.3, mi dominio es valledeljerte3 y quiero configurar los DNS para los thinclients utilizando este método, añadiré los dos parámetros al fichero de configuración /opt/ltsp/i386/etc/lts.conf:

DNS_SERVER="172.19.144.3 172.19.144.2"
SEARCH_DOMAIN="valledeljerte3"

Una vez hecho ésto, como en nuestro sistema utilizamos NBD, tendremos que volver a regenerar la imagen de los terminales.

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

Alta disponibilidad con ldap+réplica ldap+dhcp failover+dns duplicado

En el siguiente post: http://enavas.blogspot.com.es/2014/04/alta-disponibilidad-con-ldapreplica.html, os mostré los cambios que he realizado en los servidores y clientes de mi centro para tener una mayor disponibilidad de servicios y que el sistema no deje de funcionar por la caída de alguno de ellos. Con estos cambios conseguí:
  • Disponer de dos servidores de autenticación activos usando ldap y una réplica de ldap.
  • Disponer de un dhcp failover que proporcione direcciones IP a los clientes mediante dos servidores.
El siguiente cambio que me propuse fue replicar también el servicio DNS, de manera que ahora tengo dos servidores DNS: Uno en el servidor "ldap" y otro en el servidor nfs "servidor".



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

viernes, 4 de abril de 2014

Glipper: Un portapapeles en Linux

Glipper es un gestor del portapapeles que mantiene un historial de los textos copiados, algo verdaderamente útil que nos permite disponer no solamente del último texto copiado.


Para instalarlo, no tenemos más que hacer un:

# apt-get install glipper

La última versión disponible en los repositorios de Debian Wheezy es la 2.3.

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

jueves, 3 de abril de 2014

Instalar la última versión disponible de Calibre en Debian y distribuciones derivadas

La última versión de Calibre disponible en los repositorios de Debian Wheezy a día de hoy es la 0.8.4, si no recuerdo mal. En cambio, Calibre va ya por la versión 1.30. Esto quiere decir que tendremos que usar otros medios si queremos disponer de una versión actualizada. 

La forma más sencilla es utilizar el script python que nos proporcionan los desarrolladores.

Pero, antes de ejecutarlo, instalamos dependencias:

# apt-get install glibc xdg-utils python

Y a continuación ejecutamos el script de instalación:

# python -c "import sys; py3 = sys.version_info[0] > 2; u = __import__('urllib.request' if py3 else 'urllib', fromlist=1); exec(u.urlopen('http://status.calibre-ebook.com/linux_installer').read()); main()"

El instalador nos pedirá que introduzcamos el directorio en que queremos realizar la instalación y nos ofrece por defecto /opt. Lo aceptamos.

A continuación el instalador descargará el fichero comprimido con el código (a día de hoy: calibre-1.30.0-x86_64.tar.bz2), lo descomprimirá en /opt/calibre y creará los enlaces a los ejecutables en /usr/bin.

Por último, nos informará de que, para futuras instalaciones, podemos especificar el directorio de instalación en el comando:

# python -c "import sys; py3 = sys.version_info[0] > 2; u = __import__('urllib.request' if py3 else 'urllib', fromlist=1); exec(u.urlopen('http://status.calibre-ebook.com/linux_installer').read()); main(install_dir='/opt')"

Y listo.

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

Sigil: Un editor de ebooks EPUB opensource y multiplataforma

Sigil es una aplicación de código abierto con la que podemos crear o editar libros electrónicos. Y digo ambas cosas porque a parte de crear libros desde cero, podríamos coger un libro en pdf, convertirlo con Calibre a formato .EPUB y luego editarlo con Sigil.

Además, es multiplataforma: Está disponible tanto para Linux, como para Windows o Mac. 

Tiene una interfaz WYSIWYG agradable y sencilla que nos permite trabajar simultáneamente con el editor WYSIWYG y con el código html generado.


En cuanto al manual de la versión 0.7.2, se encuentra disponible en versión online:

O en formato epub:

La última versión disponible a día de hoy es la 0.7.4:

El único problema que podemos tener los usuarios de Debian es que no hay paquetes oficiales para Debian y tendremos que instalar desde el código fuente o encontrar paquetes no oficiales que alguien haya creado. 

Aprovechando que quería instalarlo, he creado dos paquetes que podéis descargar desde los siguientes enlaces:

Eso sí. Requieren tener instalada la librería libc6 (>= 2.13). 

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

Descargar imágenes ISO de Debian mediante Jigdo

Básicamente tenemos varias opciones para conseguir CDs/DVDs de Debian:
  • Comprarlos.
  • Descargar las imágenes ISO usando HTTP o FTP.
  • Descargar las imágenes ISO mediante Bittorrent.
  • Descargar las imágenes ISO con jigdo.
Debian propone que Jigdo sea la principal manera de distribuir imágenes de CDs/DVDs de Debian en el futuro. Teniendo en cuenta ésto, me ha parecido interesante escribir un post sobre cómo descargar las imágenes ISO de Debian mediante Jigdo (Jigsaw Download). Pero, ¿por qué es interesante para nosotros usar Jigdo a la hora de descargar imágenes de Debian? Esencialmente por tres razones:
  • Por decirlo de algún modo, Jigdo usa el archivo "normal" de Debian para generar las imágenes ISO. Como hay muchas más réplicas de los repositorios de Debian que réplicas para imágenes de CDs/DVDs completas, siempre será más rápido descargar una ISO usando Jigdo.
  • Porque las imágenes ISO se van actualizando. Si hoy hemos descargado una imagen ISO de Debian y después de un tiempo se actualiza a una nueva versión, con Jigdo no tendremos que descargar la ISO completa desde cero, sino que podremos actualizarla. Lo que requerirá menor consumo de ancho de banda y tardaremos menos tiempo en realizar la descarga.
  • Porque en cada centro tenemos un mirror de Debian. Esto supone que vamos a poder generar las imágenes ISO a partir de nuestros  repositorios internos. Lo que implica mayor velocidad para la creación de la imagen, menor consumo de ancho de banda y menor tiempo para disponer de la imagen ISO.
Vamos a ver concretamente cómo utilizar Jigdo en el centro para descargar una ISO de Debian usando nuestro mirror interno. En otro post ya os contaré cómo actualizar una ISO con jigdo. Primero.- Instalamos jigdo: # apt-get install jigdo-file Este es un programa de línea de comandos que se ejecuta en terminal. Segundo.- Una vez instalado el programa, tendremos que buscar en la página de Debian https://www.debian.org/CD/jigdo-cd/#which los archivos de Jigdo disponibles para la versión que queremos descargar:

 
En esta página haremos clic sobre la arquitectura de la imagen que queremos crear y obtendremos la lista de archivos jigdo que podemos descargar. Supongamos que queremos descargar el CD 1 para una arquitectura amd64. Haríamos clic en amd64:

 
Y veríamos el directorio descarga de archivos .jigo de CD para amd64:

 
Como queremos descargar el CD 1, bajaremos los archivos .jigdo y .template correspondientes a este CD:

 
Yo tengo por costumbre descargarlos en un directorio donde guardo las ISOS y que tengo compartido mediante apache en mi máquina de "recursos". Como esta máquina es un servidor que no tiene entorno gráfico activo, los descargo mediante wget. 

Por ejemplo:

root@recursos:/root# cd /var/www/descargas/isos root@recursos:/var/www/descargas/isos# wget http://cdimage.debian.org/debian-cd/7.4.0/amd64/jigdo-cd/debian-7.4.0-amd64-CD-1.jigdo
root@recursos:/var/www/descargas/isos# wget http://cdimage.debian.org/debian-cd/7.4.0/amd64/jigdo-cd/debian-7.4.0-amd64-CD-1.template


Tercero.- Una vez descargados, ejecutamos el comando jigdo-lite, pasándole como parámetro el nombre del archivo .jigdo:

root@recursos:/var/www/descargas/isos# jigdo-lite debian-7.4.0-amd64-CD-1.jigdo


Cuarto.- Nos preguntará si tenemos una versión anterior del CD que queremos descargar. Como en este post nos interesa ver cómo crear la imagen desde cero, pulsamos <enter> para continuar:

 


Quinto.- A continuación, nos mostrará el mirror que usará por defecto y nos ofrecerá la posibilidad de cambiarlo:

 
Como lo que nos interesa es usar el mirror interno de nuestro centro, lo cambiaremos:


Y comenzará el proceso de creación de la imagen ISO:

 

Si os dáis cuenta, lo que está haciendo es descargar desde el mirror todos los paquetes necesarios para crear la iso en un directorio temporal. Lo que nos lleva a pensar que el proceso será aún más rápido si usamos jigdo para crear la ISO en la misma máquina donde tenemos el mirror de Debian.
Tan sólo tardará unos minutos en crear la ISO y, cuando termine, si todo ha ido bien, nos informará de que la imagen ha sido creada y, además, comprobará si el checksum del archivo es correcto:



Y tendremos nuestra iso lista para usar.

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

miércoles, 2 de abril de 2014

Utilizar "External Facts" en Puppet a partir de la versión 1.7 de Facter

Para aquellos que no lo conocen, podemos decir que Facter es una librería multiplataforma que sirve para obtener información acerca de los nodos gestionados mediante Puppet.

Facter incorpora de serie un conjunto de facts y nos permite añadir nuevos facts creados por nosotros.  El problema es que, aunque sea más o menos sencillo crear pequeños facts, sobre todo basándonos en el shell de linux, es necesario escribir dichos facts en Ruby.

La versión 1.7 de Facter incorpora una importante colección de nuevos facts, pero, además, nos ofrece la posibilidad de crear facts en los que definamos "variables" de una manera sencilla.

Para utilizar estos "external facts", crearemos un directorio, si no lo tenemos creado aún:

# mkdir /etc/facter/facts.d

En este directorio podemos crear:
  • Ficheros de texto (.txt)
  • Ficheros YAML (.yaml)
  • Ficheros JSON (.json)
Dependiendo del tipo de fichero que creemos, tendremos que usar una sintaxis predeterminada. 

Por ejemplo, si decidimos usar un fichero de texto para almacenar facts, utilizaremos la siguiente sintaxis:

# /etc/facter/facts.d# cat config.txt 
uso=servidor
aula=terminales

Facter examinará los ficheros almacenados dentro del directorio /etc/facter/facts.d y convertirá los pares que lea de cada fichero en variables facter.

Si ahora ejecutamos:

# facter | grep -e uso -e aula

Comprobaremos que existen los dos nuevos facts:

aula => terminales
uso => servidor

De este modo se hace muy sencillo definir nuevos facter en los que asignamos valor a una variable.

Si en lugar de definir los facts en un fichero de texto, queréis hacerlo en ficheros JSON, la sintaxis es diferente:

# cat /etc/facter/facts.d/config.json 

 "uso": "servidor", 
 "aula": "terminales" 
}

Y si quisiéramos definir los facts en un fichero YAML, ésta sería la sintaxis:

# cat /etc/facter/facts.d/config.yaml

 uso: servidor
 aula: terminales


}

A gusto del consumidor...

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

martes, 1 de abril de 2014

Alta disponibilidad con ldap+réplica ldap+dhcp failover

Una de las cosas que no me convence de nuestras instalaciones es que el servidor dhcp se encuentre en una máquina (servidor) y los datos de configuración de dhcp se encuentren en un backend ldap de otra máquina (ldap). 
Esta configuración sería mucho más eficiente si el servidor dhcp se encontrara en la misma máquina que el backend ldap, y, además, se evitaría el problema de que el sistema no funcione correctamente cuando se inicia el servidor dhcp antes de que esté listo el servidor ldap.

Para mejorar el sistema de mi centro y solucionar este problema, me planteé la siguiente solución: Replicar la B.D. del servidor "ldap" en el servidor "servidor". De este modo, sería muy sencillo configurar el servidor dhcp para que tome los datos de la réplica de ldap en lugar de hacerlo del ldap maestro.  Con ésto lograba:
  • Tener un ldap master y un ldap slave que podría poner en funcionamiento en caso de fallo del master.
  • Tener servidor dhcp en la misma máquina que el backend ldap para resolver el problema comentado y que el sistema fuera más eficiente.
Pero, una vez que lo tenía funcionando, me propuse dos cosas más:
  • Instalar un segundo servidor dhcp en el servidor ldap y configurar ambos para disponer de un dhcp failover, de tal manera que, si caía un servidor dhcp, el otro continuaría atendiendo peticiones.
  • Configurar los clientes para que pudieran utilizar tanto el ldap master como el ldap slave para autentificar. De este modo, usarían el master y en caso de que éste no respondiera utilizarían el slave.
A continuación podéis verlo de forma gráfica en un esquema:
Interesante, ¿verdad?

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