Algo de Linux

martes, 24 de mayo de 2016

pkgsync 1.28: Modificado pkgsync para esperar mientras se esté ejecutando un gestor de paquetes

A veces sucede que se está ejecutando el gestor de paquetes porque, por ejemplo, puppet está actualizando índices de repositorios o instalando paquetes al iniciarse pkgsync.

Para evitar este problema, he modificado pkgsync de forma que espere mientras los siguientes ficheros lock estén bloqueados por algún proceso:
  • /var/lib/apt/lists/lock
  • /var/lib/dpkg/lock
Aquí podéis ver el código completo de pkgsync:
Y si queréis descargar el paquete que instala esta versión de pkgsync, aquí lo tenéis:
https://copy.com/d2n3dZ2izAlvj6fH
Publicado por primera vez en http://enavas.blogspot.com.es

domingo, 22 de mayo de 2016

Script de sincronización sinc_puppet

Escribo este post para explicar un poco la problemática del script sinc_puppet en equipos trusty (o sinc_puppet_inst en wheezy) y las mejoras que le he realizado, con el fin de que alguno de los compañeros que me siguen se anime a probarlo antes de solicitar propagarlo a todos los centros. 

En principio, lo tengo funcionando en mi centro desde hace tiempo  y tan sólo he ido realizando mejoras en él, pero, sería conveniente que se probara en algún centro más.

Os cuento primero los problemas que tiene el script actual:
  • Tiene un bucle de espera activa que hace que el script se esté ejecutando eternamente al esperar una respuesta de ping al puppetinstituto,  si el equipo se encuentra fuera del centro.
  • Es demasiado agresivo. Se ejecuta una sola vez en el arranque y borra el directorio de certificados del cliente completo /var/lib/puppet/ssl/, si el cliente ha estado sin sincronizar con puppet más de 12 horas, lo que sucederá cada día. Como consecuencia, cada día, el cliente solicitará nuevos certificados al servidor.
  • Al borrar el directorio /var/lib/puppet/ssl completo en el cliente, los certificados que tiene el servidor almacenados, ya no serán válidos. Ese es el motivo de que se colocara una tarea cron que borre los certificados firmados cada 10 minutos entre las 8:00 y las 20:00. Y si cada 10 minutos se borran todos los certificados de clientes en el servidor, lo que se está consiguiendo al final es que cada cliente solicite un nuevo certificado cada vez que se ejecute puppet. Por eso digo que el funcionamiento es demasiado agresivo.
Y ahora os cuento las mejoras que le he aplicado:
  • He eliminado la espera activa limitando el número de intentos de hacer ping a puppetinstituto.
  • He trasladado la ejecución de puppet a /etc/network/if-up.d para que se ejecute al levantar el interfaz de red. Así no es necesario comprobar si se ha levantado el interfaz de red.
  • Como no se quiere ejecutar puppet si no ha transcurrido un tiempo determinado, he adelantado esta comprobación al principio para que no se realicen más acciones en ese caso.
  • Compruebo si existe el certificado en el cliente, y, si no existe, ejecuto puppet agent con un waitforcert de 60 para que se ejecute puppet y se solicite un nuevo certificado con una espera máxima de 60 segundos.
  • Si existe el certificado y ha estado más del tiempo determinado sin sincronizar con puppet, se ejecuta puppet agent con los parámetros splay y splaylimit para lograr que se realize en un tiempo pseudoaleatorio como máximo de splaylimit tiempo.
  • He hecho que sinc_puppet sea configurable por el administrador, creando un fichero de configuración /etc/default/sincpuppet que permitirá personalizarlo según necesidades.
  • También me ha parecido interesante añadir un parámetro ENABLE (como hicimos con pkgsync) al fichero de configuración para que podamos desactivarlo fácilmente si fuera necesario.
Aquí tenéis el código, por si queréis echarle un vistazo:
/usr/share/linex-ubuntu-puppet/sinc_puppet
Y el fichero de configuración:
/etc/default/sincpuppet
Todo es mejorable. Así que si alguien tiene alguna propuesta, que la envíe y lo hablamos.

sinc_puppet se distribuye en el paquete linex-ubuntu-puppet para los equipos con Ubuntu. Así que he creado una nueva versión de dicho paquete:
https://mega.nz/#!Fl8mDBDJ!-ELC2x2koIWe9HaYAvuNML8fe64Qe2pt4DpK7fg8c2Q
Como no podemos evitar que en el servidor puppet se borren los certificados firmados del directorio /var/lib/puppet/ssl porque la tarea cron que lo hace está puesta mediante el puppetmaster de Mérida, lo que tenéis que hacer es comentar la línea que dice ssldir=/var/lib/puppet/ssl en la sección [master] del fichero /etc/puppet/puppet.conf del servidor puppet:
[master]
ssldir=/var/lib/puppet/ssl

certname=puppetinstituto
ssl_client_header = SSL_CLIENT_S_DN
ssl_client_verify_header = SSL_CLIENT_VERIFY
#templatedir=/var/lib/puppet/templates
autosign=true
Para que quede tal que así:
[master]
# ssldir original
# ssldir=/var/lib/puppet/ssl
# ssldir cambiado para que no me borren los certificados
ssldir=/var/lib/puppet/ssl.ies

certname=puppetinstituto
ssl_client_header = SSL_CLIENT_S_DN
ssl_client_verify_header = SSL_CLIENT_VERIFY
#templatedir=/var/lib/puppet/templates
autosign=true
De este modo, estamos cambiando la ubicación de certificados del servidor a /var/lib/puppet/ssl.ies

Está pensado para Ubuntu. Así que probadlo en Ubuntu aquellos que queráis, más que nada para testear su funcionamiento en otros centros y, si a todo el que lo haya probado le va bien, solicitamos su propagación mediante puppet. O, si le encontramos fallos, los corregimos.
Publicado por primera vez en http://enavas.blogspot.com.es

viernes, 20 de mayo de 2016

Clase frequency: Esablecer frecuencia de ejecución automática de pkgsync

Antes de nada, dar las gracias a Ismael por aceptar las sugerencias de mejora que vamos proponiendo y que es bueno aplicar en todos los centros.

Este post es para aclarar las dudas que algunos compañeros me han planteado sobre esta clase. Lo dejo escrito y así sirve para cuando a alguien más le surjan dudas:
  • La clase pkgsync-ies::frequency sirve para establecer una frecuencia de ejecución automática particular para cada tipo de máquina.
  • Se llama así (pkgsync-ies::frequency) porque en mi centro tengo un módulo para distribuir los ficheros de pkgsync .ies a los diferentes tipos de clientes del que forma parte. Este módulo contiene otro módulo más: pkgsync-ies:config. No lo he compartido porque lo retoqué para mostrar ejemplos representativos de diferentes formas de distribuir ficheros a los clientes. Si queréis podría estandarizarlo y compartirlo.
  • Contempla todos los posibles tipos de máquinas a las que el servidor presta servicio mediante expresiones regulares. Ésto significa que podréis establecer una frecuencia diferente para:
    • máquinas cuya variable facter use contenga las palabras portatil, workstation y ltsp.
    • máquinas cuya variable facter tipo contenga las palabras notebook, siatic e infolab.
  • Podéis modificar la frecuencia de ejecución para cada tipo de máquina con tan sólo cambiar el valor de la variable $FREQUENCY en cada caso del bloque que he marcado en color amarillo.
  • Si necesitáis añadir más casos de uso, podéis hacerlo. Se ha cambiado la forma de distribuir los módulos para que podamos adaptar los módulos recibidos en /etc/puppet/modules y nos sigan pasando módulos que no es conveniente modificar en otra ubicación.
class pkgsync-ies::frequency {

    if ($use =~ /portatil/) { $FREQUENCY="weekly" }      
   elsif ($use =~ /workstation/) { $FREQUENCY="daily" }  
   elsif ($use =~ /ltsp/) { $FREQUENCY="daily" }         

   if ($tipo =~ /notebook/) { $FREQUENCY="weekly" }      
   elsif ($tipo =~ /siatic/) { $FREQUENCY="daily" }      
   elsif ($tipo =~ /infolab/) { $FREQUENCY="daily" }     

   case $FREQUENCY {
      "weekly": {
         file { "/etc/cron.weekly/nightly-pkgsync":
            source => "puppet:///modules/pkgsync-ies/nightly-pkgsync",
            owner => root, group => root, mode => 755
         }
         file { "/etc/cron.daily/nightly-pkgsync":
            ensure => absent
         }
         file { "/etc/cron.monthly/nightly-pkgsync":
            ensure => absent
         }
      }
      "monthly": {
         file { "/etc/cron.monthly/nightly-pkgsync":
            source => "puppet:///modules/pkgsync-ies/nightly-pkgsync",
            owner => root, group => root, mode => 755
         }
         file { "/etc/cron.daily/nightly-pkgsync":
            ensure => absent
         }
         file { "/etc/cron.weekly/nightly-pkgsync":
            ensure => absent
         }
      }
      default: {
         file { "/etc/cron.daily/nightly-pkgsync":
            source => "puppet:///modules/pkgsync-ies/nightly-pkgsync",
            owner => root, group => root, mode => 755
         }
         file { "/etc/cron.monthly/nightly-pkgsync":
            ensure => absent
         }
         file { "/etc/cron.weekly/nightly-pkgsync":
            ensure => absent
         }
      } # default="daily"
   } # end case
} # end class
Publicado por primera vez en http://enavas.blogspot.com.es

jueves, 19 de mayo de 2016

pkgsync 1.27: Añadida nueva funcionalidad

Como ya hemos hablado en alguna ocasión, hay máquinas en las que no nos interesa ejecutar pkgsync automáticamente, como por ejemplo en portátiles porque puede crearnos problemas. 

Para poder desactivar la ejecución automática de pkgsync añadimos una mejora a la versión 1.26 que consistía en añadir un parámetro ENABLE al fichero de configuración /etc/default/pkgsync, de manera que nos permita activar o desactivar pkgsync en el cliente: 
  • ENABLE="yes": activa pkgsync (opción por defecto) 
  • ENABLE="no" : desactiva pkgsync 
  • Si no existe la variable ENABLE en el fichero /etc/default/pkgsync o no tiene valor, es equivalente al valor ’yes’. 
El problema es que si desactivamos completamente pkgsync, no lo vamos a poder ejecutar ni de forma manual, ni de forma automática. 

Para permitir la ejecución de pkgsync de forma manual, he introducido un nuevo parámetro en la versión 1.27: -f o --force  con el que podemos ejecutar pkgsync de forma manual estando desactivada la ejecución automática.
# pkgsync -f

Aquí podéis ver el código completo de pkgsync:

Y si queréis descargar el paquete que instala esta versión de pkgsync, aquí lo tenéis:
https://copy.com/d2n3dZ2izAlvj6fH
Publicado por primera vez en http://enavas.blogspot.com.es

Propuesta de gestión de módulos Puppet de forma compartida entre administradores y la sección de administración de sistemas

Para gestionar módulos puppet de forma compartida entre administradores y la sección de administración de sistemas, propongo:
  • Que los administradores coloquemos nuestros módulos puppet en /etc/puppet/modules
  • Que los módulos puppet suministrados por la Sección de Administración de Sistemas se coloquen en /usr/share/puppet/modules
Puppet tiene configurado como valor por defecto buscar los módulos en ambas ubicaciones:
# puppet config print modulepath
/etc/puppet/modules:/usr/share/puppet/modules
Publicado por primera vez en http://enavas.blogspot.com.es

miércoles, 18 de mayo de 2016

Sincronizar los módulos de un servidor puppet en otro

Es muy sencillo y verdaderamente útil sincronizar el contenido de un directorio entre el servidor puppet y clientes. 

El caso más claro es aquél en que tenemos un servidor puppet que debe distribuir módulos a otros servidores puppet, como puede ocurrir en los CPR's, donde es interesante que el servidor del CPR suministre módulos puppet a los servidores de colegios; o, el caso de la sección de administración de sistemas, donde hay un servidor que distribuye módulos puppet a los servidores de todos los centros.

Distribuir los módulos es tan sencillo como crear un módulo que contenga la siguiente clase:
class modulesync {
   file { '/etc/puppet/modules':
      ensure  => directory,
      source  => 'puppet:///modules/modulesync/modules',
      owner   => puppet,
      group   => puppet,
      mode    =>  0755,
      recurse => true,   # entrar en subdirectorios
      replace => true,   # reemplazar ficheros que ya existan
      purge   => false,  # no eliminar ficheros que no tengamos
      links   => follow, # seguir enlaces y modificar el objetivo del link
      force   => false
   }
}
Si os fijáis en los dos atributos que he resaltado en color amarillo, le estamos diciendo a puppet que reemplace el contenido del directorio modules y todo su contenido (recurse => true) y que reemplace los ficheros que ya existan (replace => true). Ésta última opción es la opción por defecto, es decir, que no habría que especificarla expresamente. 

Podríamos utilizar este módulo en servidores puppet de CPR's para distribuir módulos a servidores de colegios. Ahora bien,  si la sección de administración de sistemas distribuye módulos a todos los centros, tanto de primaria como de secundaria, no podremos gestionar el recurso /etc/puppet/modules porque ya lo gestionan ellos. En ese caso, es preferible que nos distribuyan los módulos utilizando la opción replace => false para que los administradores podamos modificar los módulos que nos distribuyen.
class modulesync {
   file { '/etc/puppet/modules':
      ensure  => directory,
      source  => 'puppet:///modules/modulesync/modules',
      owner   => puppet,
      group   => puppet,
      mode    =>  0755,
      recurse => true,   # entrar en subdirectorios
      replace => false,  # no reemplazar ficheros que ya existan
      purge   => false,  # no eliminar ficheros que no tengamos
      links   => follow, # seguir enlaces y modificar el objetivo del link
      force   => false
   }
}
Publicado por primera vez en http://enavas.blogspot.com.es

martes, 17 de mayo de 2016

Utilizar expresiones regulares en clases puppet

Me preguntaba un compañero cómo podía hacer referencia a un conjunto de nodos concretos con los siguientes nombres de host: siatic-informatica-01,
 siatic-intormatica-02,..., siatic-informatica-30.

Como podemos hacer uso de expresiones regulares en una clase puppet, es muy sencillo identificar los hosts en función del nombre del host obtenido de la variable facter hostname. Por ejemplo:
if $hostname =~ /^siatic-informatica-(\d+)/ {
   lista de includes
}
Si os dáis cuenta:
  • Estamos usando el operador =~ para comparar el contenido de la variable facter hostname con la expresión regular. En la comparación de expresiones regulares también podríamos utilizar el operador de no coincidencia !~
  • La espresión regular es aquella que va entre los símbolos /    /
  • En este caso estamos definiendo una expresión regular que se refiere a un nombre que comienza por la cadena siatic-informatica- y a continuación tiene un número cualquiera de dígitos.
Publicado por primera vez en http://enavas.blogspot.com.es

sábado, 14 de mayo de 2016

Extremadura: Des-coordinación TIC en Educación

Viendo el vídeo de esta comisión de Educación, Empleo y Deportes, tan sólo saco una conclusión: O no les han informado bien, o lo único que interesa es excusarse y no importa si las cosas se están haciendo bien o mal para buscar una solución.

Desde luego, estamos ya en el tercer trimestre, dicen que la fase de puesta en marcha óptima del sistema finalizó y lo cierto es que todo sigue teniendo los mismos problemas que cuando el material se suministró. Os lo dice un administrador informático que está cada día al pie del cañón.

Dicen que han organizado un "comité de expertos". Muy bien. ¿Pero para qué? Desde luego, para solucionar los problemas técnicos, tengo claro que no, porque para ello tendrían que haber contado con el colectivo de administradores informáticos y para eso no hemos recibido ninguna comunicación. 

Como bien se dice en esta comisión, se ha creado un foro de administradores
que para nosotros no tiene ninguna utilidad, básicamente por dos razones:
  • Nos da la impresión de se ha convertido tan sólo en un diario personal donde contamos los problemas del sistema, ofrecemos nuestra opinión de cómo se podría actuar, de las cosas que se deberían hacer, etc.. pero no sirve para nada porque los responsables de dar respuesta no contestan.
  • Ya teníamos una lista para comunicarnos, el foro no aporta nada nuevo y las informaciones no se organizarían bien.

Los administradores informáticos tan sólo queremos prestar un buen servicio a los centros y nos resulta muy difícil sin información y planificación.

Necesitamos:
  • Más información sobre el nuevo sistema que debemos gestionar en cuestiones técnicas que nos planteamos para actuar en consecuencia.
  • Que exista una mejor comunicación con nosotros y con la Sección de Administración de Sistemas.
  • Es imprescindible que se cuente con los técnicos a la hora de diseñar cualquier solución para que cualquier cambio en el sistema sea óptimo y se eviten los problemas que estamos sufriendo actualmente.
  • La formación específica es fundamental. Nuestro principal interés es recibir formación concreta para nuestro trabajo.
  • Laboratorios que usemos tanto para la formación como para la realización de pruebas fuera del entorno de producción, ubicados en CPR's distribuidos en diferentes zonas. Las pruebas deben realizarse en entornos de pruebas y no entornos de producción. De lo contrario, pueden acarrearse muchos problemas.
  • Pero sobre todo, necesitamos organización y planificación. Estamos en el tercer trimestre y seguimos trabajando de forma aislada para solucionar cada uno los problemas de su centro, cuando se podría trabajar en equipo para tener un sistema funcional y verdaderamente bueno con una cierta uniformidad. Con la forma de trabajo actual, como cada uno aplica soluciones particulares en su centro, lo que se está consiguiendo es que el sistema se convierta en algo demasiado heterogéneo que será cada vez más difícil de gestionar. Se podrían establecer grupos de trabajo y administradores de referencia en torno a los diferentes servicios que debe proporcionar el sistema, pero todo ésto requiere una organización y coordinación.
Publicado por primera vez en http://enavas.blogspot.com.es

miércoles, 11 de mayo de 2016

pkgsync 1.26-2: Añadida nueva funcionalidad

Cuando envié el paquete pkgsync para distribuir a todos los servidores puppet de los centros, recibí una propuesta de mejora de nuestro compañero Antonio Abasolo, que pareció muy interesante incluir en la versión 1.26

Esta mejora consiste en añadir un parámetro ENABLE al fichero de configuración /etc/default/pkgsync, de manera que nos permita activar o desactivar pkgsync en el cliente: 
  • ENABLE="yes": activa pkgsync (opción por defecto) 
  • ENABLE="no" : desactiva pkgsync 
  • Si no existe la variable ENABLE en el fichero /etc/default/pkgsync o no tiene valor, es equivalente al valor ’yes’. 
Es una mejora que nos viene muy bien para desactivar pkgsync, por ejemplo, en portátiles, donde su uso puede ser más problemático. 
Posteriormente, a propuesta de Antonio también, he creado una versión 1.26-2 en la que corregía dos pequeñas cosas: 
  • La forma de mostrar el mensaje que informa de que pkgsync ha sido desactivado. 
  • Los comentarios explicativos del uso del parámetro ENABLE en el fichero de configuración /etc/default/pkgsync. 
Aquí podéis ver el código completo de pkgsync:
Y si queréis descargar el paquete que instala esta versión de pkgsync, aquí lo tenéis:
https://copy.com/d2n3dZ2izAlvj6fH
Publicado por primera vez en http://enavas.blogspot.com.es

sábado, 7 de mayo de 2016

Subir un archivo a Mega utilizando megatools

megatools nos ofrece un conjunto de herramientas para gestionar nuestro espacio de almacenamiento en Mega desde la línea de comandos: 
  • megareg: Nos permite registrar y verificar una nueva cuenta de mega.
  • megadf: Muestra la información del espacio de almacenamiento en términos de uso.
  • megals: Lista los ficheros almacenados en la cuenta.
  • megamkdir: Crea un directorio en nuestra cuenta de mega.
  • megarm: Elimina un fichero o directorio de nuestro espacio de almacenamiento.
  • megaput: Permite subir archivos individuales.
  • megaget: Permite descargar archivos individuales.
  • megadl: Descarga un fichero desde un enlace público de mega.
  • megacopy: Sube o descarga un árbol de directorios.
  • megafs: Nos permite montar el sistema de ficheros remoto localmente.
Veamos un ejemplo de subida del paquete megatools a nuestra cuenta de Mega:
# megaput -u miusuario@gmail.com megatools_1.9.97-1_i386.deb 
Enter password for (miusuario@gmail.com): 
Good, signing in...
Uploaded megatools_1.9.97-1_i386.deb
Publicado por primera vez en http://enavas.blogspot.com.es