Algo de Linux: 2012

lunes, 31 de diciembre de 2012

Poner Backtrack 5 R3 en español

Backtrack viene en inglés. Si lo queremos en español, instalamos el paquete language-selector, que nos va a permitir cambiar  el idioma desde el entorno gráfico:

# apt-get install language-selector

Una vez instalados el paquete, abrimos el menú System -> Administration -> Language Support. Desde allí añadimos el soporte de idioma español, que instalará los paquetes de idioma necesarios. Cuando se hayan instalado, colocamos el idioma español al principio de la lista, antes que el inglés, y se aplicará la próxima vez que iniciemos sesión.




martes, 18 de diciembre de 2012

Detectar interfaces de red en bash y si tienen el cable de red conectado

En ocasiones necesitamos detectar en nuestros scripts bash, qué interfaces de red hay en el sistema y si están conectadas o no. Hay unas cuantas maneras de hacerlo, pero habitualmente suelo usar el comando ip.

El comando ip nos permite gestionar rutas, dispositivos, reglas de enrutamiento y túneles.  Para detectar las interfaces de red sólo necesito utilizar:
  • ip link show muestra todas las interfaces.
  • ip link show up muestra las interfaces que tienen el cable conectado.
Así, si quiero obtener los nombres de las interfaces de red que hay en el sistema, no tengo más que ejecutar:

# ip link show|grep ^[0-9]| grep -v lo|cut -f2 -d":"|sed 's/^[ \t]*//'


Y si tan sólo quiero obtener los nombres de las interfaces de red que tienen el cable conectado:

# ip link show up|grep ^[0-9]| grep -v lo|cut -f2 -d":"|sed 's/^[ \t]*//'

Cuando utilizamos ip link, podemos obtener las direcciones mac de las interfaces de red. Ahora bien, si en lugar de usar ip link, usamos ip addr, podremos obtener también las direcciones IP:
  • ip addr show muestra todas las interfaces.
  • ip addr show up muestra las interfaces que tienen el cable conectado.
Por ejemplo: Si quiero obtener la dirección mac de la interfaz de red eth0, no tengo más que ejecutar:
# ip link show eth0| grep 'link/ether' | sed 's/^[ \t]*//' | cut -f2 -d" " 
o
# ip addr show eth0 | grep 'link/ether' | sed 's/^[ \t]*//' | cut -f2 -d" "


Y si quiero obtener la dirección IP de la interfaz de red eth0, ejecuto:
# ip addr show eth0 | grep -v inet6 | grep 'inet' | sed 's/^[ \t]*//' | cut -f2 -d" " | cut -f1 -d"/"
Y ya puestos, podemos obtener la máscara de red de la interfaz eth0:
# ip addr show eth0 | grep -v inet6 | grep 'inet' | sed 's/^[ \t]*//' | cut -f2 -d" " | cut -f2 -d"/"  
Y de paso, la dirección de broadcast de la interfaz de red eth0:
# ip addr show eth0 | grep -v inet6 | grep 'inet' | sed 's/^[ \t]*//' | cut -f4 -d" "  

Si quisiera obtener los nombres de las interfaces de red activas, ejecutaría:
# ip addr show | grep "state UP" | awk '{print $2}' | cut -f1 -d":" 

Y si quisiera obtener la ip del gateway por defecto:
# ip route show 0.0.0.0/0 | awk '{print $3}'

sábado, 15 de diciembre de 2012

"Current Kerberos password: " al cambiar password de usuario

He creado un usuario y al tratar de cambiarle el password, con el comando passwd, me pide que introduzca el password kerberos y no uso kerberos:

Current Kerberos password:
# passwd

Desinstalando el paquete libpam-krb5 el problema se ha resuelto:

apt-get remove --purge libpam-krb5

Lo que no recuerdo es haber instalado este paquete en el sistema. Supongo que debió instalarse como dependencia de otro.

viernes, 14 de diciembre de 2012

bindfs: Montar un directorio remoto en otra ubicación

bindfs es un sistema de ficheros fuse que nos va a permitir montar un directorio en otra ubicación, de forma similar a cuando usamos --bind. ¿Y me diréis: para qué puede servirme ésto? Bueno, pues vamos a verlo con un ejemplo real y práctico:

Imaginemos que tenemos una máquina que utilizamos como servidor de clonación con dos discos duros: Uno en el que se encuentra el sistema operativo, y, otro, en el que almacenamos las copias de seguridad. 

Supongamos que vamos a guardar las imágenes de clonación en /var/ies_backups/partimag, que es un directorio del segundo disco duro y clonezilla siempre busca por defecto las imágenes en /home/partimag, que se encuentra en el primer disco duro.

Y me diréis: Esto es fácil. Creo un enlace simbólico y listo. Bueno, pues no. Esta solución no sirve. Si lo hacéis así, cuando clonezilla trate de hacer el montaje de /home/partimag fallará y os dará un error como el siguiente:

No disk image is found in /home/partimag.. Make sure you already saved an image! Program terminated!!!! 

Esto es porque sshfs no permite montar un enlace.

Así que la solución para este problema es usar bindfs. Veamos cómo:

Primero.- Instalamos bindfs, si no lo tenemos instalado ya:

# apt-get install bindfs
Segundo.- Una vez instalado, ejecutamos el comando:

# bindfs --perms=a-w /var/ies_backups/partimag /home/partimag
Lo que  estamos haciendo es "montar"  el directorio /var/ies_backups/partimag en /home/partimag (algo que no podríamos hacer con un simple mount)

Además, lo estamos "montando" sin permiso de escritura para los usuarios que no sean root con la opción --perms=a-w.

Este montaje es temporal, hasta que se apague la máquina. Si quisiéramos hacerlo permanente, podríamos añadir las instrucciones de montaje al fstab.

# echo "bindfs#/var/ies_backups/partimag /home/partimag fuse perms=a-w 0 0" >> /etc/fstab
Bindfs nos ofrece muchas opciones para ajustar los permisos, propietarios y grupos de un archivo. Veamos un ejemplo:

Supongamos que no tengo mucho espacio en mi home y quiero montar mi carpeta de Dropbox en otra unidad, de forma que el propietario sea yo. Podría hacer lo siguiente:

# bindfs --user=gestor /var/ies_backups/Dropbox /home/gestor/Dropbox

Y para hacerlo permanente, tan sólo tengo que añadir al fstab:

# echo "bindfs#/var/ies_backups/Dropbox /home/gestor/Dropbox fuse user=gestor 0 0" >> /etc/fstab

miércoles, 12 de diciembre de 2012

Configurar un equipo workstation como cliente del puppetmaster puppetinstituto

Algunos compañeros me habían preguntado si se podían configurar los equipos workstation como clientes puppet del servidor principal del centro (puppetinstituto) en la imagen workstation que compartí hace tiempo.

Adjunto un recurso con el que podéis configurarlo automáticamente:
En el fichero configura-cliente-puppet.tar.gz van dos archivos:
  • El recurso configura-cliente-puppet.pp, que configura el cliente.
  • Un archivo leeme.txt explicativo de lo que hace.
Para configurar un equipo como cliente del servidor puppetinstituto, le copiáis el archivo configura-cliente-puppet.pp, mediante ssh, por ejemplo. Una vez copiado, os conectáis al cliente y lo configuráis ejecutando en un terminal:

# puppet apply configura-cliente-puppet.pp


martes, 11 de diciembre de 2012

Descargar Adobe Flash Player completo para instalación offline

A veces no tenemos conexión o por algún problema con el firewall no es posible instalar el plugin de flash de la forma habitual. En este caso, podemos recurrir a la página de distribución de Adobe Flash Player para descargar una versión completa que instalaremos sin necesidad de conexión a internet:


Descargar versiones de 32 y 64 bits de firefox

El otro día me preguntaba un compañero de dónde descargaba las versiones de 32 y 64 bits de firefox que instalo mediante la tarea instala-firefox. Por si alguien no lo sabe y lo necesita, las descargo del sitio ftp de mozilla:

http://ftp.mozilla.org/pub/mozilla.org/firefox/releases/

o

ftp://ftp.mozilla.org/pub/mozilla.org/firefox/releases/

lunes, 10 de diciembre de 2012

Nueva imagen de actualización de la BIOS en equipos Nec PowerMate VL4

He modificado las siguientes imágenes de disquete y cdrom que permiten flashear la bios de los Nec PowerMate VL4 que tenemos en los IES para añadir una nueva opción de flasheo. A continuación dejo los enlaces de descarga para que descarguéis la que os interese:

  • fbiosnec.img (floppy para actualizar las bios vía pxe o syslinux)
  • fbiosnec.iso (iso de CD para actualizar las bios desde CDROM)
  • rescate.iso (iso de CD para actualizar las bios desde CDROM que incorpora otros floppys adicionales: allinone, plop boot manager, fdubcd, gpxe)
Ahora existen tres opciones de flasheo:
  • Actualizar BIOS en equipos NEC de (A)ulas
  • Actualizar BIOS en equipos NEC de (D)epartamentos
  • (R)estaurar BIOS original NEC PowerMate VL4

La opción "Actualizar BIOS en equipos NEC de (A)ulas" tiene establecidos los siguientes ajustes por defecto:
  • Fijado como primer dispositivo de arranque "On Board LAN" y activado como "Show only" para que no pueda ser modificado por el usuario.
  • Desactivado segundo y tercer dispositivo de arranque para que el usuario no pueda cambiarlo.
  • Desactivado el arranque desde otros dispositivos.
  • Desactivadas opciones de establecer passwords de setup y de usuario. Así los usuarios no van a poder cambiarlos en caso de reseteo de los valores de la CMOS.
  • Tiene añadido módulo shutdown.bin a la imagen de la BIOS, preparado por Germán Sánchez Gutiérrez, para apagar el equipo si no ha sido posible arrancar por red porque el ordenador del profesor esté apagado o el cableado de red esté averiado.

La opción "Actualizar BIOS en equipos NEC de (D)epartamentos" tiene establecidos los siguientes ajustes por defecto:
  • Fijado como primer dispositivo de arranque "HDD USB" para permitir el arranque desde dispositivos USB.
  • Fijado como segundo dispositivo de arranque "CDROM" para permitir el arranque desde CD.
  • Fijado como tercer dispositivo de arranque "HD" para permitir el arranque desde el disco duro del equipo.
  • Se permite que el usuario pueda cambiar el orden de los dispositivos de arranque.
  • Desactivadas opciones de establecer passwords de setup y de usuario. Así los usuarios no van a poder cambiarlos en caso de reseteo de los valores de la CMOS.
  • Tiene añadido módulo shutdown.bin a la imagen de la BIOS, preparado por Germán Sánchez Gutiérrez, para apagar el equipo si no ha sido posible arrancar por red porque el ordenador del profesor esté apagado o el cableado de red esté averiado.
La opción "(R)estaurar BIOS original NEC PowerMate VL4" restaura la bios original sin retoques que tiene los ajustes por defecto proporcionados por el fabricante.



Microsoft TrueType core fonts en Debian

Para disponer de las siguientes fuentes en Debian:
  •   Arial
  •   Comic Sans MS
  •   Courier New
  •   Georgia
  •   Impact
  •   Times New Roman
  •   Trebuchet
  •   Verdana
  •   Webdings
No tenemos más que instalar el paquete ttf-mscorefonts-installer:

# apt-get install ttf-mscorefonts-installer

Este paquete se encargará de descargar e instalar dichas fuentes en nuestro sistema.

miércoles, 5 de diciembre de 2012

Módulo puppet para agregar ipxe a los clientes

Aquí dejo un módulo que agrega ipxe y crea una entrada de grub que permite arrancar los clientes puppet por red:

Puppet: Tarea para mantener actualizados los paquetes

Hoy os voy a contar un pequeño "truquillo" (por decirlo de algún modo) que utilizo para mantener actualizados los paquetes de los servidores de terminales, portátiles, workstation y el sistema de los clientes ligeros mediante puppet.

A modo de ejemplo, vamos a ver el módulo apt-upgrade que tengo creado:

# tree /etc/puppet/modules/apt-upgrade
/etc/puppet/modules/apt-upgrade
|-- files
|   `-- init_upgrade
`-- manifests
    `-- init.pp

El archivo init_upgrade es tan sólo un archivo vacío o que puede contener cualquier cosa. En cualquier caso, no importa el contenido porque tan sólo va actuar como testigo para realizar el apt-get upgrade del cliente puppet cuando el archivo cambie.  

En cuanto al archivo init.pp, contiene la definción de la tarea:

class apt-upgrade {
   file {"/etc/init_upgrade":
      source => "puppet:///apt-upgrade/init_upgrade"
   }

   exec { "/usr/bin/apt-get update && /usr/bin/apt-get -y upgrade":
      refreshonly => true,
      subscribe => File["/etc/init_upgrade"],
      timeout => 3600 
   }
}

Como podéis ver el apt-get update && apt-get -y upgrade se va a realizar tan sólo cuando cambie el archivo /etc/init_upgrade.

Con esta tarea puppet tan sencilla, forzaremos una actualización de paquetes en los clientes puppet cuando queramos, con tan sólo modificar el archivo init_upgrade en el servidor puppet.

Del mismo modo, podemos tener una tarea que actualice los paquetes en el chroot de los terminales ligeros. 

Dejo a continuación ambas tareas para que podáis descargarlas:
Dejo ya de paso un par de tareas para hacer un apt-get -y autoremove en los equipos:
Y en el chroot de los terminales ligeros:
Estas dos últimas utilizadlas con cuidado.

martes, 4 de diciembre de 2012

ltsp-chroot: Actualizar la imagen de los terminales

ltsp-chroot nos permite actualizar la imagen que se va a servir a los terminales haciendo algo más que el chroot. 

Por ejemplo, si quiero hacer un apt-get update del chroot, haría lo siguiente:

# ltsp-chroot -a i386 apt-get update  

De este modo, ejecutaría el apt-get update dentro del chroot.


jueves, 29 de noviembre de 2012

Modificado el módulo puppet para instalar iceweasel desde Backports

He modificado el módulo puppet para solucionar un problema reportado por Carlos Magro, por el que no se instalaba el paquete con la nueva key del repositorio, debido a que antes había que hacer un update del repositorio:

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

Por cierto, este módulo instala los paquetes desde un mirror de backports montado en el servidor ldap. Si queréis utilizarlo, podéis hacer dos cosas: 
  • Cambiar los repositorios por los oficiales en el propio módulo.
  • Crear el mirror en vuestro servidor ldap.

Crear un árbol de directorios con un solo comando

Muchas veces necesitamos crear una estructura de directorios de una sola vez; por ejemplo, cuando vamos a crear un módulo puppet. Si ejecutamos:

# mkdir -p /etc/puppet/modules/{files,manifests,facts}
crearemos de una sola vez la siguiente estructura de directorios:

/etc/puppet/modules/
|-- facts
|-- files
`-- manifests

miércoles, 28 de noviembre de 2012

Montar un servidor de clonación con DRBL

Instalar un servidor de clonación con DRBL es relativamente sencillo cuando tenemos control sobre el DHCP de nuestra red y podemos instalar DRBL en la misma máquina donde se encuentra instalado DHCP. 

Lo que no es tan sencillo es instalar un servidor DRBL en una red donde ya tenemos un servidor de DHCP cuya configuración no podemos tocar. Para solucionar este problema podemos ocurrir a varias soluciones, como:
  • Configurar el servidor DHCP de DRBL para que escuche en otro puerto distinto del estándar.
  • O sustituir el servidor DHCP de DRBL (isc-dhcp-server) por dnsmasq, un servidor dhcp que podemos configurar como proxyDHCP.
A continuación podéis ver un documento en el que he elegido la segunda opción para resolver el problema:

viernes, 23 de noviembre de 2012

Nueva corrección del módulo instala-java-1_7

He vuelto a subir el módulo instala-java-1_7 después de corregir un bug que no creaba bien los enlaces alternativos /etc/alternatives/iceweasel-javaplugin.so y /etc/alternatives/mozilla-javaplugin.so si utilizábamos el módulo en un equipo de 64 bits.

miércoles, 21 de noviembre de 2012

Modificado el módulo instala-java-1_7

He modificado el módulo de puppet instala-java-1_7 para corregir un pequeño bug por el que no se realizaba la instalación del paquete hasta la segunda ejecución de puppet.

Podéis descargarlo desde el siguiente enlace:
https://www.box.com/s/b5aynghswl8gtk3oac2v

Gracias, Paco.

domingo, 18 de noviembre de 2012

resolvconf: Gestionando /etc/resolv.conf

El archivo /etc/resolv.conf es el archivo de configuración del resolver. Se usa para que un cliente pueda acceder a DNS y, en él se proporcionan los servidores de DNS que se van a utilizar.

Antiguamente el archivo /etc/resolv.conf era estático, pero hoy en día hay muchas aplicaciones que lo manejan de forma dinámica.

resolvconf es un framework que mantiene la información del archivo /etc/resolv.conf y que muchas veces nos encontraremos instalado. 

Los ficheros de configuración de resolvconf se encuentran en: /etc/resolvconf

Dentro del directorio /etc/resolvconf encontraremos un archivo: 
/etc/resolvconf/interface-order, donde se establece el orden (por interfaces) en el que los scripts de actualización de resolvconf procesarán los registros de servidores de nombres.

# cat /etc/resolvconf/interface-order

# interface-order(5)
lo.inet*
lo.dnsmasq
lo.pdnsd
lo.!(pdns|pdns-recursor)
lo
tun*
tap*
hso*
eth*
ath*
wlan*
ppp*
*

Dentro del directorio /etc/resolvconf encontraremos otro directorio: resolvconf.d en el que tenemos tres archivos:
  • /etc/resolvconf/resolvconf.d/head
  • /etc/resolvconf/resolvconf.d/base
  • /etc/resolvconf/resolvconf.d/tail
En el archivo /etc/resolvconf/resolvconf.d/base se almacena la información básica para el resolver. Dentro de él guardaremos la información básica de dns que queramos tener en la máquina. Por ejemplo:

nameserver 127.0.0.1

nameserver 8.8.8.8
search midominio.es


En el archivo /etc/resolvconf/resolvconf.d/head se almacena la información que queremos que se añada al comienzo del archivo resolv.conf generado. Por defecto, tan sólo contiene el comentario de cabecera que vemos al editar el archivo resolv.conf:

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN

En el archivo /etc/resolvconf/resolvconf.d/tail se almacena la información que queremos que se añada al final del archivo resolv.conf generado. Por defecto, se encuentra vacío.

Cuando modifiquemos  estos archivos, para actualizar el archivo /etc/resolv.conf ejecutaremos el comando:
# resolvconf -u

Para más información:
  • man resolvconf
  • http://anonscm.debian.org/gitweb/?p=resolvconf/resolvconf.git;a=blob;f=README;hb=HEAD

jueves, 15 de noviembre de 2012

Forzar el desmontaje de una partición o dispositivo

A veces nos es imposible desmontar un dispositivo o partición con el comando umount. Cuando esto suceda, podemos probar lo siguiente:

1) Tratar de desmontar el recurso usando la opción -l de umount si estamos trabajando con un recurso local:

# umount -l punto-de-montaje

2) Tratar de desmontar el recurso usando la opción -f de umount, si estamos trabajando con un recurso nfs:

# umount -f punto-de-montaje

Puppet: Clase clase-especifica-squeeze

Aquí tenéis mi clase-especifica-squeeze, tal y como la tengo definida ahora mismo en el centro para tener todo un poco más organizado.

Como podéis ver, tengo cinco posibles clasos:
  • Tareas que van dirigidas a todos los servidores de terminales  
  • Tareas para servidores de terminales en aulas de portátiles.
  • Tareas para sevidores de terminales en aulas con thinclients.
  • Tareas para el servidor freeradius.
  • Tareas para un equipo de pruebas.


# Cualquier regla debe estar comprendida entre las llaves
# Para poner reglas a los servidores de aula con squeeze de los IES con la imagen de junio de 2012
# class clase-especifica-squeeze { }, nunca fuera.

class clase-especifica-squeeze {
   file {"/tmp/fichero.test12_ltsp":
          ensure  => present, owner => root, group  => root
   }

   include "add-repositorio-local"
   include "instala-iceweasel-backports"
   include "instala-iceweasel-backports-chroot"
   include "instala-java-1_7"
   include "gnome-mandatory-squeeze"
   include "adm_avisos"
   include "administracion2"
   include "add-opciones-arranque-terminal"

   case $hostname  {
      a01-pro,a02-pro,a03-pro,a08-pro,a09-pro: { include "tareas-aulas-portatiles" }
      a04-pro,a05-pro,a06-pro,a07-pro,a10-pro,a11-pro,a12-pro,a13-pro,a14-pro,a15-pro,a16-pro,a17-pro,a18-pro,a19-pro,a20-pro,a21-pro: { include "tareas-aulas-terminales" }
      a22-pro: { include "tareas-servidor-freeradius" }
     
      default: { }
   }

   if $hostname == "a01-pro" {
      # include "tarea-en-pruebas" 
   }
}

Las tareas para aulas de portátiles las incluimos dentro de un fichero .pp:

# cat /etc/puppet/manifests/classes/tareas-aulas-portatiles.pp

class tareas-aulas-portatiles {
   # include "tarea-para-aulas-de-terminales"
} 


Las tareas para aulas de thinclients las incluimos dentro de un fichero .pp:

# cat /etc/puppet/manifests/classes/tareas-aulas-terminales.pp

class tareas-aulas-terminales {
   # include "tarea-para-aulas-de-terminales"
}

Las tareas para el servidor freeradius las incluimos dentro de un fichero .pp:

# cat /etc/puppet/manifests/classes/tareas-servidor-freeradius.pp

class tareas-servidor-freeradius {
   # include "tarea-para-servidor-freeradius"
}

Las tareas para el servidor de terminales de pruebas las coloco directamente dentro del if:

if $hostname == "a01-pro" {
   # include "tarea-en-pruebas" 
}

Polkit: Modificar políticas para permitir al usuario apagar o reiniciar desde gnome

Algún compañero comentó que en los equipos workstation con Debian Squeeze el usuario no podía reiniciar o apagar el sistema porque el botón de apagado de la barra de tareas le aparecía desactivado. 

Lo mejor para solucionar este problema es crear un fichero dentro de  /etc/polkit-1/localauthority/50-local.d/  en el que definamos las políticas a  aplicar. Por ejemplo, yo he creado un fichero llamado 50-consolekit.pkla dentro de dicho directorio con el siguiente contenido para permitir reiniciar o apagar el sistema desde Gnome a usuarios del grupo profesor: 

# cat /etc/polkit-1/localauthority/50-local.d/50-consolekit.pkla


[Restart]
Identity=unix-group:teachers
Action=org.freedesktop.consolekit.system.restart
ResultAny=no
ResultInactive=yes
ResultActive=yes

[Shutdown]
Identity=unix-group:teachers
Action=org.freedesktop.consolekit.system.stop
ResultAny=no
ResultInactive=yes
ResultActive=yes

Si queremos que cualquier usuario pueda apagar y reiniciar el sistema, no tendríamos más que cambiar:
Identity=unix-group:teachers por Identity=unix-user:*

# cat /etc/polkit-1/localauthority/50-local.d/50-consolekit.pkla


[Restart]
Identity=unix-user:*
Action=org.freedesktop.consolekit.system.restart
ResultAny=no
ResultInactive=yes
ResultActive=yes

[Shutdown]
Identity=unix-user:*
Action=org.freedesktop.consolekit.system.stop
ResultAny=no
ResultInactive=yes
ResultActive=yes


Es recomendable hacerlo así, en lugar de editar el fichero /usr/share/polkit-1/actions/org.freedesktop.consolekit.policy, para evitar que al actualizarse polkit se pierdan nuestros ajustes.

miércoles, 14 de noviembre de 2012

Puppet: Clase especifica-miniportatil-2011

Algunos compañeros me han preguntado cómo tenía definida la clase específica de puppet para portátiles para distinguir entre portátiles de alumnos y portátiles de profesores. Bien, pues lo muestro a continuación:


# Cualquier regla debe estar comprendida entre las llaves 
# para poner reglas a los miniportatiles entregados en 2011 en los IES (apd)
# class especifica-miniportatil-2011 { }, nunca fuera.
 
class especifica-miniportatil-2011 {
   file {"/tmp/fichero.test11":
          ensure  => present, owner => root, group  => root
   }

   # aquí las reglas

   include "politicas-networkmanager"
   include "disable-warning-puppetmasterd"
   include "instala-flash"
   include "instala-firefox"
   include "instala-java-1_7"
   include "cambia-root-password"
   include "add-repositorio-local"

   case $use {
        "portatil-profesor-2011": { 
            include "backupHomeUser"
            include "instala-dropbox"
         }
        "portatil-alumno-2011": {
            # include "tarea-especifica-alumnos"
        }
        default: { }
   } 

   if $hostname == "cobaya" { 
      # include "tareas-en-pruebas" 
      # include "apt"
   }
} 

Como se puede ver, de este modo, dependiendo de donde coloque una nueva regla, se aplicará:
  • A todos los portátiles, si coloco el include "tarea" justo antes de la sentencia case.
  • A portátiles de profesores, si coloco el include en el caso de que la variable facter $use = "portatil-profesor-2011".
  • A portátiles de alumnos, si coloco el include en el caso de que la variable facter $use = "portatil-alumno-2011"
 Decir que en mi centro, tengo todos los portátiles clonados con la misma imagen, por lo que tan sólo tengo que definir tareas para portátiles en la clase "especifica-miniportatil-2011"

rsync para hacer una copia de ext3 a fat32

Normalmente uso rsync entre sistemas de archivos ext3 o ext4 con las opciones -av ( -av es lo mismo que -rlptgoD):
  • -r: recursivo.
  • -l: copiar enlaces simbólicos como enlaces simbólicos.
  • -p: preservar permisos.
  • -t: preservar tiempos (fechas/horas).
  • -g: preservar grupos.
  • -o: preservar el propietario.
  • -D: dispositivos.
Para hacer un rsync entre un directorio de un sistema de archivos ext3 y un sistema de archivos fat32, podemos utilizar las siguientes opciones:

# rsync -rtv /directorio/original   /directorio/destino

  • -r: recursivo.
  • -t: preservar tiempos (fechas/horas).
  • -v: modo verbose.

domingo, 11 de noviembre de 2012

Generar archivo de fuentes sources.list para Ubuntu

Al igual que podemos crear el contenido del sources.list para una distribución Debian (http://repogen.simplylinux.ch/index.php), también podemos generar un sources.list para Ubuntu, recorriendo a Ubuntu Sources List Generator (http://repogen.simplylinux.ch/index.php):

Si entramos en la web de Ubuntu Sources List Generator, veremos que podemos añadir una gran cantidad de repositorios. Lo que se muestra en pantalla es tan sólo una captura de una parte.

Generar archivo de fuentes sources.list para Debian

A veces es complicado recordar cuál es la lista de repositorios que tenemos que añadir una Debian que estamos instalando. En este caso podemos recurrir a Debian Sources List Generator (http://debgen.simplylinux.ch/), una aplicación web que nos generará la lista de repositorios que seleccionemos:



Además de los repositorios oficiales de Debian, podremos añadir otra serie de repositorios extra que en este sitio tienen en lista.

Montar BackTrack en un dispositivo usb formateado en FAT32

BackTrack es una distribución linux live que nos va a permitir testear la seguridad de nuestros sistemas. Dispone de un instalador, por lo que podemos probarla desde CD y, si nos gusta, instalarla en disco duro.

No obstante, hoy en día, dado que el precio de los pendrives es reducido, nos merece también la pena montar backtrack en un usb para lograr una mayor agilidad en la ejecución y poder llevar con nosotros la distribución en un bolsillo, lista para utilizar en otra máquina que no sea la que usamos habitualmente.

El modo más sencillo de instalar BackTrack en un pendrive es mediante UnetBootIn. Y esto es lo que vamos a ver a continuación.

Si no tenemos instalado UnetBootIn en nuestro Debian, lo instalamos:

# apt-get update && apt-get install unetbootin

A continuación, descargamos la iso desde la web oficial: http://www.backtrack-linux.org/

Una vez descargada, introducimos el pendrive que tenemos formateado en FAT32 en nuestro equipo y arrancamos unetbootin.

Puede que nos pida la contraseña de administrador:


Si es así, la introducimos.

Nos aparecerá una ventana como la siguiente:


Marcamos la opción DiscoImagen, dejamos seleccionado "ISO" y pulsamos en el botón con los puntos suspensivos que hay a continuación para seleccionar la iso de BackTrack:



En la parte inferior, dejamos seleccionado "Unidad USB"  y, en "Unidad:" elegimos la unidad USB donde queremos instalar BackTrack. Tened cuidado si tenéis conectado otro dispositivo USB, más que nada para no instalarlo en el dispositivo que no queramos.

Tardará un poquito. Una vez que termine el proceso, unetbootin nos preguntará si queremos reiniciar o salir. Elegimos salir, puesto que estamos instalando en el pendrive y no necesitamos reiniciar.

Es importante recordar que el proceso de instalación no borra nada de lo que tengamos guardado en el pendrive, y que, la ventaja de este método es que, al estar formateado en FAT32, podemos seguir utilizando el pendrive para almacenar nuestros archivos y poder disponer de ellos tanto en linux como en windows.

sábado, 10 de noviembre de 2012

Modificados los módulos puppet instala-firefox, instala-java-1_7 e instala-flash

He modificado los módulos puppet instala-firefox, instala-java-1_7 e instala-flash. Los encontraréis en el directorio tareas_puppet (https://www.box.com/s/lj0r9zhs4n4ckl5rxila) de mi cuenta de box.net.

Es importante que los descarguéis de nuevo, si los estáis utilizando en aulas de portátiles con conexión wifi. En aulas con clientes cableados no he detectado ningún problema.

La versión anterior tenía el inconveniente de que no limitaba el consumo de ancho de banda en la descarga de archivos de wget. Como consecuencia, cuando varios portátiles ejecutaban alguna de estas tareas a la vez y comenzaban a descargarse los archivos, algunos de ellos no se descargaban completamente y alguna de las tareas fallaba.

viernes, 9 de noviembre de 2012

Crear un mirror local con apt-mirror

En los centros ya tenemos un mirror de debian squeeze creado con una herramienta llamada debmirror. 

apt-mirror es otra excelente herramienta para crear mirrors de repositorios.

Aprovechando que acabo de crear un mirror de ubuntu para los ciclos de informática, vamos a ver cómo hacerlo usando apt-mirror.

apt-mirror maneja los siguientes ficheros de configuración y directorios:
  •  /etc/apt/mirror.list: Es el principal fichero de configuración.
  • /etc/cron.d/apt-mirror: Es una plantilla de configuración de cron para lanzar apt-mirror de forma programada
  • /var/spool/apt-mirror/mirror: Es el directorio donde se guardará el mirror.
  • /var/spool/apt-mirror/skel: Es un directorio para almacenar temporalmente los índices descargados.
  • /var/spool/apt-mirror/var: Es un directorio donde se guardan los logs, urls y hashes md5.
Primero instalamos apache2 (si no lo tenemos instalado ya) para servir los paquetes del mirror:

# apt-get install apache2

A continuación instalamos el paquete apt-mirror:

# apt-get install apt-mirror

Una vez instalados los paquetes, hacemos una copia del fichero de configuración principal, para recurrir a él, si fuera necesario:

# cp /etc/apt/mirror.list /etc/apt/mirror.list.orig

Y editamos el fichero:

# nano /etc/apt/mirror.list


###################### config ######################
#
# set base_path    /var/spool/apt-mirror
#
# set mirror_path  $base_path/mirror
# set skel_path    $base_path/skel
# set var_path     $base_path/var
# set cleanscript $var_path/clean.sh
# set defaultarch 
# set postmirror_script $var_path/postmirror.sh
# set run_postmirror 0
set nthreads     20
set _tilde 0
################### end config ######################


############## Repositorios amd64 #####################

###### Ubuntu Main Repos
deb-amd64 http://es.archive.ubuntu.com/ubuntu/ quantal main restricted universe multiverse

###### Ubuntu Update Repos
deb-amd64 http://es.archive.ubuntu.com/ubuntu/ quantal-security main restricted universe multiverse
deb-amd64 http://es.archive.ubuntu.com/ubuntu/ quantal-updates main restricted universe multiverse

###### Ubuntu Proposed Repos
deb-amd64 http://es.archive.ubuntu.com/ubuntu/ quantal-proposed main restricted universe multiverse

###### Ubuntu Backports Repos
deb-amd64 http://es.archive.ubuntu.com/ubuntu/ quantal-backports main restricted universe multiverse

############### Repositorios i386 ##################### 


###### Ubuntu Main Repos
deb-i386 http://es.archive.ubuntu.com/ubuntu/ quantal main restricted universe multiverse

###### Ubuntu Update Repos
deb-i386 http://es.archive.ubuntu.com/ubuntu/ quantal-security main restricted universe multiverse
deb-i386 http://es.archive.ubuntu.com/ubuntu/ quantal-updates main restricted universe multiverse

###### Ubuntu Proposed Repos
deb-i386 http://es.archive.ubuntu.com/ubuntu/ quantal-proposed main restricted universe multiverse

###### Ubuntu Backports Repos
deb-i386 http://es.archive.ubuntu.com/ubuntu/ quantal-backports main restricted universe multiverse



clean http://es.archive.ubuntu.com/ubuntu/


Como podéis ver, en la sección de configuración, todos los parámetros de ubicación de ficheros están comentados. No los he "descomentado" porque quiero que se almacenen en la ubicación por defecto.

Tampoco he tocado la opción set defaultarch que nos permite indicar la arquitectura de paquetes por defecto. Por ejemplo:

# set defaultarch amd64

En cambio, como se puede apreciar en el fichero de configuración, estoy creando específicamente el repositorio con:
  • paquetes de 64 bits: deb-amd64  
  • y paquetes de 32 bits: deb-i386
Por último, en el fichero de configuración veréis la siguiente línea:

clean http://es.archive.ubuntu.com/ubuntu/

Esta línea le dice a apt-mirror en qué directorios del disco duro local debería chequear para ver si se puede liberar espacio en disco.

Con ésto, como se puede ver en el archivo de configuración, voy a crear los siguientes mirrors:
  • quantal
  • quantal-backports
  • quantal-proposed
  • quantal-security
  • quantal-updates
 Y aquí es donde quedarán almacenados los archivos:

/var/spool/apt-mirror/mirror/
 └── es.archive.ubuntu.com
        └── ubuntu
                 ├── dists
                 │     ├── quantal
                 │     ├── quantal-backports
                 │     ├── quantal-proposed
                 │     ├── quantal-security
                 │     ├── quantal-updates
                 │    
                 ├── pool
                 │     ├── main
                 │     ├── restricted
                 │     ├── universe
                 │     ├── multiverse

Bien, pues una vez que ya tenemos los repositorios en /var/spool/apt-mirror/mirror, vamos a crear un enlace en /var/www para que los paquetes del repositorio sean servidos por apache:

# cd /var/www
# ln -s /var/spool/apt-mirror/mirror/es.archive.ubuntu.com/ubuntu/  ubuntu

Una vez que tengamos el enlace creado, el siguiente paso será editar el fichero /etc/cron.d/apt-mirror y modificar la hora de puesta en marcha de la creación del mirror:

# /etc/cron.d/apt-mirror
# Regular cron jobs for the apt-mirror package
#
30 21    * * *    apt-mirror    /usr/bin/apt-mirror > /var/spool/apt-mirror/var/cron.log


Por otra parte, crearemos un fichero cron para matar la tarea anterior a cierta hora:

# /etc/cron.d/apt-mirror-die
# Kill the apt-mirror
#
45 7    * * *    apt-mirror    killall -9 apt-mirror


Y eso es todo. Cuando lleguen las 21:20 comenzará la creación del mirror y terminará a las 7:45 de la mañana del día siguiente.

Por último, tan sólo me queda mencionar cómo usar los repositorios en el fichero /etc/apt/sources.list:

deb http://mirror-ubuntu/ubuntu quantal main restricted universe multiverse
deb http://mirror-ubuntu/ubuntu quantal-backports main restricted universe multiverse
deb http://mirror-ubuntu/ubuntu quantal-proposed main restricted universe multiverse
deb http://mirror-ubuntu/ubuntu quantal-security main restricted universe multiverse
deb http://mirror-ubuntu/ubuntu quantal-updates main restricted universe multiverse

lunes, 5 de noviembre de 2012

Módulo puppet para configurar puppet kick en los clientes

Aquí dejo una tarea que configura puppet kick en los clientes puppet:

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

Módulo puppet para agregar el repositorio deb-multimedia a los clientes

Aquí dejo un módulo que añade el repositorio deb-multimedia a los clientes:

https://www.box.com/s/3ueeasvkef61fjsr65kk

El módulo añade el repositorio junto con la clave pública del mismo.

Este repositorio lo conocíamos antes como debian-multimedia. Tuvieron que cambiarlo de nombre a deb-multimedia a petición de Debian.


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)

martes, 25 de septiembre de 2012

Asistencia remota con GNU Screen

A veces necesitamos echar una mano a un compañero administrador para ayudarle a resolver un problema, dejándonos que accedamos vía ssh  a una de sus máquinas Y queremos que él pueda ver lo que estamos haciendo mientras estamos conectados. Para ésto, puede venirnos de maravilla GNU Screen.

Veamos cómo podemos hacerlo:

1) Abrimos un terminal y nos conectamos vía ssh a su máquina con los datos que nos haya proporcionado.
2) Ejecutamos screen:
# screen

Y se nos mostrará una pantalla como la siguiente:
 



Pulsamos la barra espaciadora o Enter, como nos indica en pantalla.

3) Y le pedimos a nuestro compañero que abra un terminal con el mismo usuario y ejecute:
# screen -x

Automáticamente estaremos compartiendo el terminal y todo lo que escribamos o se muestre en nuestra pantalla se mostrará al mismo tiempo en la suya. Además, él también podrá escribir y nosotros lo veremos.

viernes, 7 de septiembre de 2012

Instalar ClockworkMod Recovery en Galaxy Mini/Pop Plus - GT-S5570I

Bueno, como ya hemos visto en el post anterior que es muy sencillo rootear nuestro Samsung Galaxy Mini/Pop Plus - GT-S5570I, veremos que es igual de sencillo instalar el ClockworkMod Recovery.

El ClockworkMod Recovery tiene mayor funcionalidad que el Android System Recovery y nos va a permitir, entre otras, cosas como hacer un backup de nuestra  ROM actual, restaurar un backup, cambiar la ROM, etc...

Para instalarlo, lo primero que haremos será descargar el siguiente archivo: pop_plus_CWM.zip de xda-developers 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 pop_plus_CWM, que se encuentra en la raiz de la tarjeta SD.

Y tendremos instalado ClockworkMod Recovery en nuestro S5570I.