Algo de Linux: abril 2017

jueves, 27 de abril de 2017

Convertir en facts los valores definidos en fichero de configuración /etc/default/pkgsync

He creado un nuevo fichero ruby (readpkgsyncconfig.rb) que convierte las variables definidas en el fichero de configuración /etc/default/pkgsync en variables facter con tan sólo colocarlo en el directorio /usr/lib/ruby/vendor_ruby/facter/ de los clientes.

Podéis descargarlo directamente en vuestro servidor:
# wget --no-check-certificate -O readpkgsyncconfig.rb https://github.com/algodelinux/facter/raw/master/readpkgsyncconfig.rb
Y distribuirlo a vuestros clientes mediante puppet.

Aquí podéis ver el código completo: Una vez distribuido el fichero readpkgsyncconfig.rb a los clientes, podéis consultar las variables facter generadas a partir del fichero de configuración:
# facter |grep "pkgsync_"

pkgsync_clean => no
pkgsync_enable => yes
pkgsync_ignore_mayhave => no
pkgsync_ignore_maynothave => no
pkgsync_ignore_musthave => yes
pkgsync_launch_sinc_puppet => yes
pkgsync_launchpad_getkeys => no
pkgsync_purge_old_kernels => no
pkgsync_remove_orphan_libs => no
pkgsync_timeout_for_dpkg_or_apt => 3m
Publicado por primera vez en http://enavas.blogspot.com.es

Convertir en facts los valores definidos en fichero de configuración /usr/share/linex-ubuntu-puppet/sincpuppet.default

He creado un nuevo fichero ruby (readsincpuppetconfig.rb) que convierte las variables definidas en el fichero de configuración /usr/share/linex-ubuntu-puppet/sincpuppet.default en variables facter con tan sólo colocarlo en el directorio /usr/lib/ruby/vendor_ruby/facter/ de los clientes.

Podéis descargarlo directamente en vuestro servidor:
# wget --no-check-certificate -O readsincpuppetconfig.rb https://github.com/algodelinux/facter/raw/master/readsincpuppetconfig.rb
Y distribuirlo a vuestros clientes mediante puppet.

Aquí podéis ver el código completo: Una vez distribuido el fichero readsincpuppetconfig.rb a los clientes, podéis consultar las variables facter generadas a partir del fichero de configuración:
# facter |grep "puppet_"

puppet_enable => yes
puppet_interval => 2
puppet_locales => es_ES.UTF-8
puppet_ping_interval => 30
puppet_ping_server => puppetinstituto
puppet_ping_tries => 3
puppet_splaylimit => 3m
puppet_waitforcert => 30
Publicado por primera vez en http://enavas.blogspot.com.es

miércoles, 26 de abril de 2017

sed: Extraer el valor de una variable com la forma variable="valor" de un fichero de configuración

Supongamos que tenemos un fichero de configuración como /etc/default/sincpuppet en el que existen definiciones de variables como las siguientes:
# grep -v -e "#" -e "^$" /etc/default/sincpuppet
 
LOCALES="es_ES.UTF-8"
ENABLE="yes"
PING_SERVER="puppetinstituto"
PING_TRIES="3"
SPLAYLIMIT="3m"
WAITFORCERT="30"
Podemos extraer el valor de cada variable utilizando el comando sed como en el siguiente ejemplo, donde extraemos el valor de la variable INTERVAL:
# sed -n 's|^INTERVAL="\(.*\)".*|\1|p' /etc/default/sincpuppet
Publicado por primera vez en http://enavas.blogspot.com.es

Puppet: Asegurar que un fichero existe y se encuentre vacío

Podemos asegurar que un fichero existe utilizando la propiedad:
ensure => present
Ahora bien, si además queremos asegurar que el fichero se encuentra vacío, podemos utilizar la propiedad :
content =>""
file { "/etc/resolvconf/resolv.conf.d/base":
  ensure => present,
  content => "",
}
Publicado por primera vez en http://enavas.blogspot.com.es

jueves, 20 de abril de 2017

Establecer la impresora por defecto mediante comandos

Si queremos ver qué impresoras tenemos configuradas en un equipo desde la línea de comandos, no tenemos más que ejecutar:
# lpstat -p
Ahora bien, si lo que nos interesa es saber cuál es la impresora predeterminada, lo que tenemos que usar es el parámetro -d:
# lpstat -d
Y si lo que queremos es establecer una impresora como predeterminada haremos uso de lpadmin:
# lpadmin -d "nombre-impresora"
Sabiendo ésto, podemos configurar fácilmente una impresora como pretederminada mediante puppet. Por ejemplo:
exec { "lpadmin -d Copiadora_BN":
       unless => "lpstat -d | grep Copiadora_BN"
}
Publicado por primera vez en http://enavas.blogspot.com.es

Configuración para que Arduino IDE contacte con la placa Arduino

En febrero preparé un paquete que nos permite instalar Arduino IDE en nuestros equipos. Si tenéis problemas para que el entorno de desarrollo se comunique con la placa Arduino, probablemente sea porque no habéis añadido vuestro usuario al grupo dialout. La forma más sencilla de que todos nuestros usuarios tengan dicho grupo es añadirlo al archivo /etc/security/group.conf:
*;*;*;Al0000-2400;audio,cdrom,floppy,plugdev,video,lp,lpadmin,netdev,games,fuse,dialout
Publicado por primera vez en http://enavas.blogspot.com.es

Utilizar dig para testear resolución de nombres

dig es una herramienta muy útil para testear resolución de nombres.

Esta herramienta se encuentra disponible en el paquete dnsutils. Si lo no tenéis instalado, podéis hacerlo fácilmente desde los repositorios:
# apt-get install dnsutils
Una vez instalado, podéis hacer una consulta sobre un nombre de host:
# dig a25-pro.valledeljerte3
O sobre una dirección IP:
# dig -x 172.19.144.106
Si tenéis varios servidores DNS y queréis consultar a uno en concreto:
# dig @ip-servidor-dns a25-pro.valledeljerte3
Por ejemplo:
# dig @172.19.144.4 a25-pro.valledeljerte3
Publicado por primera vez en http://enavas.blogspot.com.es

Optimización de resolución de nombres en clientes

Como ya he comentado en varias ocasiones, en mi centro tengo configurados dos servidores de nombres en la vlan por defecto:
search valledeljerte3
nameserver 172.x.y.3
nameserver 172.x.y.2
Si configuro los clientes para que utilicen solamente mis dos servidores de nombres, sería interesante añadir la opción "options rotate" al fichero /etc/resolv.conf de los clientes para repartir la carga de las consultas entre los diferentes servidores DNS.

Por otra parte, también al tener dos servidores, sería interesante reducir el timeout de las consultas DNS, de manera que si un servidor de nombres no responde, se tarde menos en consultar al siguiente. Para ello, utilizaremos la opción timeout, reduciendo por ejemplo el tiempo de espera a 1 segundo: "options timeout:1"

Por último, también sería útil reducir el número de intentos por servidor. Por ejemplo: "options attempts:1".

Nuestros clientes Ubuntu tienen instalado el paquete resolvconf. Así que podemos aplicar dichas opciones simplemente añadiendo la línea siguiente al fichero de configuración /etc/resolvconf/resolv.conf.d/base:
options timeout:1 attempts:1 rotate
Y ejecutar el siguiente comando para actualizar el fichero /etc/resolv.conf:
# resolvconf -u
Una vez hecho ésto, podemos comprobar que la línea se ha añadido al fichero /etc/resolv.conf.

Realizar estos cambios en los clientes mediante puppet, no tiene ninguna dificultad:
   file { '/etc/resolvconf/resolv.conf.d/base':
      content => 'options timeout:1 attempts:1 rotate',
      notify => Exec ['update-resolvconf']
   }

   exec { 'update-resolvconf':
      command => 'resolvconf -u',
      refreshonly => true
   }
Publicado por primera vez en http://enavas.blogspot.com.es

Orden de los servidores de nombres en /etc/resolv.conf

Supongamos que tenemos un /etc/resolv.conf como el siguiente en nuestros clientes:
search valledeljerte3
nameserver 172.x.y.3
nameserver 172.x.y.2
Las entradas nameserver nos permiten especificar diferentes direcciones de servidores de nombres que podrían ser consultados por el resolver.

De acuerdo con la ayuda (man resolv.conf), se listan hasta un máximo de MAXNS (actualmente 3) servidores de nombre, uno por palabra clave. 

Si en el fichero de configuración incluimos múltiples servidores de nombres, como en el ejemplo inicial, la biblioteca resolver los consultará en el orden listado. No obstante, es posible modificar ese comportamiento haciendo que se consulten mediante un mecanismo round-robin incluyendo la siguiente opción en el fichero de configuración:
options rotate
Lo que nos aporta esta opción es repartir la carga de las consultas entre los diferentes servidores DNS.
Publicado por primera vez en http://enavas.blogspot.com.es

Instalar manpages en español

Como todos sabéis, las páginas de ayuda de linux son un bien muy preciado que nos permiten consultar en cualquier momento la ayuda de cualquier comando, con tan sólo utilizar el comando man.

Si hacéis un dpkg -l | grep manpages, comprobaréis que al menos se encuentra instalado en el sistema el paquete manpages, que contiene las páginas de ayuda en inglés.

Si queréis disponer de las páginas de ayuda en español tanto en Ubuntu como en Debian, tan sólo tenéis que instalar dos paquetes:
  • manpages-es
  • manpages-es-extra
# apt-get install manpages-es manpages-es-extra
Publicado por primera vez en http://enavas.blogspot.com.es

miércoles, 19 de abril de 2017

Limpiar la cache de squid3 de nuestro servidor Debian Jessie

Podemos limpiar fácilmente la caché de squid3 de la siguiente manera:

Primero.- Paramos el servicio squid3:
# systemctl stop squid3.service
Segundo.- Borramos el contenido de la caché:
rm -Rf /var/spool/squid3/*
Tercero.- Regeneramos la estructura de directorios de la caché:
# squid3 -z
Cuarto.- Iniciamos el servicio squid3:
# systemctl start squid3.service
Podemos convertir estos cuatro pasos en un script para simplificar nuestra tarea: Podéis instal este script fácilmente en vuestro servidor con tan sólo ejecutar los siguientes comandos:
# wget --no-check-certificate -O /usr/local/sbin/clean-squid3-cache https://github.com/algodelinux/clean-squid3-cache/raw/master/clean-squid3-cache
# chmod 755 /usr/local/sbin/clean-squid3-cache
Publicado por primera vez en http://enavas.blogspot.com.es

martes, 18 de abril de 2017

Instalar Master PDF Editor en Debian Jessie

Master PDF Editor es una excelente herramienta para editar ficheros PDF en Linux, Windows o Mac OS X que se encuentra disponible tanto en versión comercial como free.

Como ya comentamos en el post donde explicábamos como instalarlo en Ubuntu, la versión free tan sólo puede utilizarse con fines no comerciales, como por ejemplo, para propósitos educativos o uso en casa y tiene algunas funciones bloqueadas:
  • "Paste to Multiple Pages"
  • "Save Optimized As..."
  • "Document Actions"
  • "Document JavaScript"
  • "Page Properties"
  • "Signing PDF with digital signature"
Si queréis disponer de estas funciones, tendréis que adquirir una licencia. 

Instalarlo en Debian Jessie es sencillo:

Primero.- Descargamos el paquete, que se encuentra disponible tanto para 32 como 64 bits, desde el sitio web. Por ejemplo:
# wget http://get.code-industry.net/public/master-pdf-editor-4.1.30_qt5.amd64.deb
La 4.1.30 es la última versión disponible a día de hoy.

Segundo.- Instalamos el paquete:
# dpkg -i master-pdf-editor-4.1.30_qt5.amd64.deb
Tercero.- Y por último, instalamos sus dependencias:
# apt-get -f install
Publicado por primera vez en http://enavas.blogspot.com.es

clean-homes: Script para hacer limpieza en homes de alumnos y/o profesores mediante Bleachbit

En un post del 6 de abril, hablamos de BleachBit, una interesante herramienta que nos permite hacer limpieza y liberar espacio en disco.

Para liberar espacio en el servidor nfs del centro, escribí un script (clean-homes) con el que liberar espacio en los directorios HOME de profesores y/o alumnos haciendo uso de BleachBit.

Podéis instalarlo fácilmente en vuestro servidor con tan sólo ejecutar los siguientes comandos:
# wget --no-check-certificate -O /usr/local/sbin/clean-homes https://github.com/algodelinux/clean-homes/raw/master/clean-homes
# chmod 755 /usr/local/sbin/clean-homes
Aquí podéis ver el código completo: El script es muy sencillo de utilizar. Tan sólo tendremos que indicar si deseamos limpiar homes de alumnos, profesores o todos:
# clean-homes -c profesor
# clean-homes --clean profesor
# clean-homes -c alumnos
# clean-homes --clean alumnos
# clean-homes -c all
# clean-homes --clean all
No olvidéis que debéis instalar el paquete bleachbit en el servidor. Publicado por primera vez en http://enavas.blogspot.com.es

Puppet: Asegurar que un servicio está corriendo

Si administráis un entorno de clientes Ubuntu Trusty y Xenial o incluso Debian mediante Puppet, habréis notado que en algún caso, al aplicar algún módulo que gestiona un servicio, Puppet no encuentra el servicio. 

En ese caso, lo más probable es que debamos cambiar el proveedor del servicio por defecto. Ésto es algo muy sencillo de lograr, puesto que el recurso puppet "service" nos proporciona una propiedad "provider" con la que podemos indicar al servicio qué proveedor debe utilizar.

Teniendo en cuenta lo anterior, en nuestros módulos podemos distinguir tipos de máquinas en función del facter $lsbdistcodename para asegurar que el servicio esté corriendo con un proveedor diferente para cada tipo de máquina. Por ejemplo:

   case $lsbdistcodename {
      'trusty': {
         service { "ntp":
            provider => 'upstart',
            ensure => running
         }
      }
      default: {
         service { "ntp":
            provider => 'systemd',
            ensure => running
         }
      }
   }
Ésto me permitiría usar "systemd" como proveedor de servicio por defecto (algo necesario para máquinas con Debian Jessie o Ubuntu Xenial, que utilizan systemd) y "upstart" como proveedor de servicio para "trusty".
Publicado por primera vez en http://enavas.blogspot.com.es

Reempaquetar un paquete instalado en el sistema

Alguien me preguntaba cómo podía obtener un paquete que ya no encontraba en los repositorios pero que tenía instalado en su máquina. La solución es sencilla: Haciendo uso de dpkg-repack.

Éste es un post que publiqué en 2013 y que quizás alguien haya descartado por ser antiguo. Lo vuelvo a publicar tal cual porque sigue funcionando.

A veces hemos instalado algún software en nuestro sistema y, a pesar de que sigue instalado, ya no disponemos del paquete con el que lo hemos instalado, sea porque ya no se encuentra en los repositorios, no tenemos actualmente configurados los repositorios desde los que lo instalamos, es un paquete que creamos nosotros mismos y lo hemos perdido, etc... En este caso, podemos volver a crear el paquete haciendo uso de una herramienta muy útil para estos casos: dpkg-repack.

Veamos cómo usarla con un ejemplo:

Supongamos que hace tiempo instalamos en nuestro sistema el paquete gpdftk, queremos instalarlo en otra máquina y no sabemos de dónde sacarlo.

Primero instalamos los paquetes fakeroot y dpkg-repack:
# apt-get -y install fakeroot dpkg-repack

Una vez instalados, no tenemos más que usarlos:
$ fakeroot -u dpkg-repack  gpdftk

Y de este modo tan sencillo, obtendremos el paquete gdftk.
Publicado por primera vez en http://enavas.blogspot.com.es

viernes, 14 de abril de 2017

El comando ls: Listar ficheros ordenados por fecha de modificación

Podemos listar ficheros ordenando la salida por fecha de modificación y mostrando los más nuevos primero mediante el parámetro -t del comando ls:
# ls -lt
Y si queremos mostrar una ordenación inversa (los más antiguos primero), tan sólo tenemos que añadir el parámetro -r al comando anterior:
# ls -ltr
Publicado por primera vez en http://enavas.blogspot.com.es

jueves, 6 de abril de 2017

Bleachbit: Una herramienta Opensource muy útil para liberar espacio en disco

BleachBit es una interesante herramienta que nos va a permitir hacer limpieza y liberar espacio en disco. Tres de sus principales ventajas frente a otras herramientas de propósito similar son:
  • Es OpenSource.
  • Se encuentra disponible tanto para Linux como para Windows. 
  • Podemos utilizarlo mediante su interfaz gráfica o desde la línea de comandos.
Con BleachBit podemos: Liberar espacio de caché, eliminar cookies, borrar el historial de los navegadores, triturar archivos para evitar su recuperación una vez borrados, etc...

Instalarlo tanto en Debian como en Ubuntu es realmente trivial puesto que se encuentra en los repositorios: 
# apt-get update && apt-get -y install bleachbit
Un ejemplo de limpieza de la caché del sistema, los paquetes de idioma, la papelera y archivos temporales:
# bleachbit --clean system.cache system.localizations system.trash system.tmp
Publicado por primera vez en http://enavas.blogspot.com.es

El comando find: Buscar archivos modificados en las últimas 24 horas

Podemos buscar los archivos modificados en las últimas 24 horas simplemente utilizando el comando find:
# find directorio-de-busqueda -mtime -1 -type f 
Ejemplo:
# find /usr/local/sbin/ -mtime -1 -type f 
Es importante decir que el símbolo "-" significa que el archivo cambió en un día o menos.
Si utilizamos el símbolo "+" estaremos buscando archivos que hayan cambiado en un día o mas.
Y si no utilizamos ningún símbolo, estaremos indicando que queremos buscar archivos que hayan cambiado exactamente en un día.

martes, 4 de abril de 2017

Lyx: "Package babel Error: You haven't specified a language option" al generar documento PDF

Al tratar de generar un documento PDF escrito en otra máquina con Lyx me aparecía el siguiente error:
Package babel Error: You haven't specified a language option
La solución ha sido instalar el paquete texlive-lang-spanish:
# apt-get install texlive-lang-spanish
Publicado por primera vez en http://enavas.blogspot.com.es

Pulseaudio: Configurar salida de audio combinada

Todos hemos tenido problemas con usuarios a los que, por alguna razón que desconozco, se les cambia la salida de audio de analógica a hdmi y deja de escucharse el sonido. 

Una de las soluciones para resolver el problema consiste en deshabilitar el perfil de audio HDMI. Otra, sería habilitar la salida de audio combinada a todos los dispositivos. Esta segunda posibilidad es la que yo he decidido aplicar. Para ello, no tenemos más que añadir la siguiente línea al final del fichero de configuración /etc/pulse/default.pa:
load-module module-combine-sink sink_name=combined
Una vez añadida, reiniciamos pulseaudio:
# killall pulseaudio
Convertir ésto en un módulo puppet es muy sencillo. Os muestro a continuación cómo habría que crear la clase:
# cat /etc/puppet/modules/pulseaudio/manifests/init.pp 
class pulseaudio {

   file { '/etc/pulse/default.pa':
      source => "puppet:///modules/pulseaudio/default.pa",
      owner => root, group => root, mode => 644,
      notify => Exec ['restart_pulseaudio']
   }

   exec { 'restart_pulseaudio':
      command => '/usr/bin/killall pulseaudio',
      refreshonly => true
   }
}
No olvidéis colocar el fichero default.pa modificado en el directorio files del módulo puppet.
Publicado por primera vez en http://enavas.blogspot.com.es

domingo, 2 de abril de 2017

Detectar y matar procesos zombie en nuestro sistema

Un proceso zombie es un proceso que ha terminado pero sigue apareciendo en la tabla de procesos. Para detectar si en nuestro sistema hay procesos zombie, podemos ejecutar la siguiente combinación de comandos:
# ps -A -ostat,ppid | awk '/[zZ]/{print $2}')
Un proceso zombie ya es un proceso muerto, y, por tanto, no se le puede matar. Así que, si matamos al proceso padre conseguiremos eliminar el hijo. Para eliminar los procesos zombie, añadiremos un kill a la secuencia de comandos anterior:
# kill $(ps -A -ostat,ppid | awk '/[zZ]/{print $2}')
Publicado por primera vez en http://enavas.blogspot.com.es