Algo de Linux: noviembre 2015

lunes, 30 de noviembre de 2015

Forzar apt-get para que sobreescriba ficheros de configuración instalados por otro paquete

En ocasiones, cuando instalamos un paquete, obtenemos un error porque trata de sobreescribir archivos instalados por otro paquete. Si ésto sucede, podemos hacer que apt-get los sobreescriba utilizando la opción --force-overwrite.

Veámoslo con un ejemplo:
# apt-get -o Dpkg::Options::="--force-overwrite" install libldap-2.4-2:i386
Publicado por primera vez en http://enavas.blogspot.com.es

miércoles, 25 de noviembre de 2015

Instalar las páginas de ayuda de linux 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.

Cuando queremos disponer de las páginas de ayuda, instalamos el paquete manpages, que se encuentra en los repositorios de Debian.
# apt-get install manpages

Ahora bien, como muchas de las páginas de ayuda se encuentran traducidas a varios idiomas, si queremos disponer de ellas en español, deberemos instalar también el paquete manpages-es:
# apt-get install manpages-es
Publicado por primera vez en http://enavas.blogspot.com.es

Eliminar el historial del shell completamente

Una de las cosas más utilizadas por un administrador en la línea de comandos es el historial.

Cuando queremos consultar el historial de comandos de cualquier usuario ejecutamos el comando:
# history
De este modo, podemos ver todos los comandos que un usuario ha ejecutado en el shell. 

Ahora bien, el historial puede borrarse fácilmente de la siguiente manera:
# history -c && history -w 
Ésto limpia el historial actual del shell (history -c) y fuerza a que el historial (vacío tras ejecutar history -c) sobreescriba el fichero ~/.bash_history
Publicado por primera vez en http://enavas.blogspot.com.es

Configurar OpenMediaVault para que nos envíe notificaciones por correo usando el smtp de gmail

A continuación podéis ver un pantallazo en el que muestro cuál es la configuración que hay que realizar para que OpenMediaVault nos envíe notificaciones por correo electrónico usando el SMTP de gmail:

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

martes, 24 de noviembre de 2015

pkgsync 1.25-2: Añadidas nuevas mejoras y funcionalidades

He visto que el sistema que nos han proporcionado en el nuevo servidor HP es un Debian Jessie de 32 bits sin LVM. Como desconozco el motivo, y ya tenía en mente otros cambios, lo primero que pensé fue transformarlo en un sistema de 64 bits con volúmenes LVM.

Así que, aprovechando que la plataforma de virtualización Proxmox VE 4.0 está basada en Debian Jessie y quería disponer una plataforma de virtualización,  decidí matar dos pájaros de un tiro.

El problema estaba en que, examinando el sistema que nos han proporcionado, ví que la lista de paquetes de pkgsync incluía expresamente paquetes de 32 bits. Un verdadero problema, sobre todo, teniendo en cuenta que necesitamos seguir manteniendo la "compatibilidad". Y con compatibilidad me refiero a que el servidor siga respondiendo al puppetmaster de Mérida y nuestros compañeros de la sección de administración de sistemas puedan seguir gestionándolo mediante puppet como cualquier otro servidor. Pero sobre todo, cumplir mi objetivo de aprovechar mejor los recursos del servidor, y ya que dispongo de una máquina de 64 bits, lo más óptimo es que el sistema operativo también lo sea.

En diciembre de 2013, ya hice una mejora en pkgsync, modificándolo para compartir la gestión de paquetes. Así que pensé que lo más conveniente sería volver a revisar pkgsync, añadiéndole una serie de mejoras y funcionalidades, entre ellas, una que me permitiera ignorar el fichero musthave que mi servidor reciba vía puppet, manteniendo sólo los paquetes que yo indique en mis ficheros musthave locales.

Éstos son los cambios que he realizado en pkgsync:

Primero.- Además de permitir fusionar los archivos musthave, maynothave y mayhave gestionados por la sección de administración de sistemas con los archivos musthave.ies, maynothave.ies y mayhave.ies gestionados por el administrador informático del centro, es posible crear ficheros en los siguientes directorios:
  • /etc/pkgsync/musthave.d
  • /etc/pkgsync/mayhave.d
  • /etc/pkgsync/maynothave.d
Ésto permite al administrador mantener organizadas sus listas de paquetes.

De este modo pkgsync fusionará por un lado todos los musthave, por otro los mayhave y por otro los maynothave, eliminando repeticiones y limpiando los ficheros de espacios en blanco y tabulaciones.

Segundo.- A veces, por circunstancias, resulta imposible realizar una gestión compartida, como en este caso: Estoy tratando de instalar un sistema de 64 bits y en los ficheros musthave figuran expresamente paquetes de 32 bits que me rompen el sistema. Esta modificación es la que me llevó a introducir las diferentes mejoras que he introducido en pkgsync. 
De este modo, podemos ignorar los ficheros musthave, mayhave y maynothave, con tan sólo cambiar el valor de las siguientes variables en el fichero /etc/default/pkgsync:

IGNORE_MUSTHAVE="no"
IGNORE_MAYHAVE="no"
IGNORE_MAYNOTHAVE="no"


por:

IGNORE_MUSTHAVE="yes"
IGNORE_MAYHAVE="no"
IGNORE_MAYNOTHAVE="no"

Para ello he introducido un fichero de configuración: /etc/default/pkgsync.

En el ejemplo anterior, como podéis comprobar estoy ignorando el fichero /etc/pkgsync/musthave, de tal manera que pkgsync para crear la lista de paquetes sólo utilizará el fichero /etc/pkgsync/musthave.ies junto con los ficheros ubicados en /etc/pkgsync/musthave.d/ y todos los ficheros mayhave y maynothave.

Tercero.- Como el script pkgsync nos lo colocan vía puppet en el directorio /usr/sbin y necesito que se ejecute mi versión de pkgsync, el paquete lo instala en /usr/local/sbin que tiene prioridad sobre /usr/sbin.

Cuarto.- En esta versión de pkgsync he añadido una funcionalidad interesante que permite comprobar si alguno de los ficheros de pkgsync contiene paquetes que no se encuentran disponibles en los repositorios utilizando el parámetro -t,--test-files.
Al ejecutar pkgsync -t o pkgsync --test-files se muestra por pantalla la lista de paquetes especificados en los ficheros de pkgsync que no se encuentran en los repositorios y, además, lo almacena en el siguiente fichero de log:
/var/log/pkgsync/removefromlist.log

Quinto.- Por último, también he añadido una mejora que considero muy importante: En esta versión de pksync se da prioridad a los ficheros maynothave, de tal manera que, cuando el administrador especifique un nombre de paquete en un fichero maynothave, si el nombre del fichero se encuentra añadido a cualquiera de los ficheros musthave, pkgsync lo ignorará para que aptitude no trate de instalarlo. Ésto me resuelve el problema de instalar un paquete que es incompatible con los que se han instalado por defecto en el sistema y el que se ha instalado por defecto en el sistema no se usa y me estorba.

Por si alguien quiere echarle un vistazo, he subido el proyecto a mi github:
https://github.com/algodelinux/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

Modificado el script musthave-build para Debian Jessie

Como ya comenté anteriormente, en Debian Squeeze creábamos una lista de paquetes en /etc/pkgsync/musthave con los nombres de los paquetes instalados intencionadamente en el sistema para mantener una uniformidad en el software instalado en un conjunto de máquinas. Para generar la lista de paquetes en Debian Wheezy, que es multiarch, tuve que hacer una pequeña modificación que incluya, además del nombre del paquete instalado, su arquitectura.

Así que preparé un script al que llamé musthave-build que detecta el codename del sistema operativo (squeeze o wheezy) realiza la generación del fichero musthave en función del mismo. Pues bien, recientemente lo he modificado para que permita crear la lista de paquetes también en Debian Jessie.

Aquí podéis ver el código:
Publicado por primera vez en http://enavas.blogspot.com.es

sábado, 21 de noviembre de 2015

sed: Eliminar espacios en blanco y tabuladores en ficheros de configuración

Cuando trabajamos con shell scripts en los que necesitamos hacer comparaciones, muchas veces nos surgen problemas porque el usuario ha introducido espacios en blanco y/o tabuladores. 

Supongamos que tenemos un fichero mayhave en el que el usuario ha introducido los nombres de los paquetes que el sistema puede tener con espacios y tabuladores. Por ejemplo:
        acpi     
     man


              cinnamon-desktop-environment
         
zip





    mtools

Podemos quitar todos los espacios y tabuladores de una forma muy sencilla, con tan sólo ejecutar el comando sed:
# sed -i -e 's/^[ \t]*//; s/[ \t]*$//; /^$/d' fichero
Y el fichero quedaría así:
acpi
man
cinnamon-desktop-environment
zip

Si dividimos las expresión aplicada con sed en partes, veremos que es muy sencillo:
  • Eliminamos los espacios en blanco y tabuladores al comienzo de cada línea:
    s/^[ \t]*//
  • Eliminamos los espacios en blanco y tabuladores al final de cada línea:
    s/[ \t]*$//
  • Eliminamos las líneas en blanco con líneas en blanco formadas por espacios y/o tabuladores:
    /^$/d
Publicado por primera vez en http://enavas.blogspot.com.es

jueves, 12 de noviembre de 2015

Error "Error constructing proxy for org.gnome.Terminal:/org/gnome/Terminal/Factory0" al abrir gnome-terminal en Debian Jessie

Si tratáis de abrir gnome-terminal en Debian Jessie y obtenéis un error como el siguiente: Error constructing proxy for org.gnome.Terminal:/org/gnome/Terminal/Factory0 , lo más probable es que sea porque hay un bug que no permite iniciarlo cuando se usan locales sin UTF-8. Si es así, reconfigurad vuestros locales y elegid uno que sea UFT-8:
# dpkg-reconfigure locales
Una vez configurados, ejecutad el comando locale para comprobarlo:
# locale
LANG=es_ES.UTF-8
LANGUAGE=
LC_CTYPE="es_ES.UTF-8"
LC_NUMERIC="es_ES.UTF-8"
LC_TIME="es_ES.UTF-8"
LC_COLLATE="es_ES.UTF-8"
LC_MONETARY="es_ES.UTF-8"
LC_MESSAGES="es_ES.UTF-8"
LC_PAPER="es_ES.UTF-8"
LC_NAME="es_ES.UTF-8"
LC_ADDRESS="es_ES.UTF-8"
LC_TELEPHONE="es_ES.UTF-8"
LC_MEASUREMENT="es_ES.UTF-8"
LC_IDENTIFICATION="es_ES.UTF-8"
LC_ALL=
Publicado por primera vez en http://enavas.blogspot.com.es

miércoles, 11 de noviembre de 2015

Instalar Google Chrome desde los repositorios de Google en Debian Jessie

Instalar Google Chrome desde los repositorios de Google es muy sencillo.
Vamos a verlo paso a paso para que quede muy claro:

Primero.- Añadimos la dirección del repositorio a los archivos de fuentes:
# echo "deb http://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google-chrome.list
Segundo.- Descargamos la clave pública del repositorio y la añadimos directamente al anillo de claves:
wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | sudo apt-key add - 
El anillo de claves se guarda en el archivo /etc/apt/trusted.gpg
Tercero.- Actualizamos los índices de los repositorios:
# apt-get update
Cuarto.- Instalamos Google Chrome:
# apt-get install google-chrome-stable
Publicado por primera vez en http://enavas.blogspot.com.es

Instalar la última versión de Iceweasel desde los repositorios de Mozilla en Debian Jessie

Mantener actualizado iceweasel en Debian Jessie es muy sencillo si utilizamos los repositorios de Mozilla y los de Debian-Backports.

Primero.- Añadimos los repositorios necesarios a un archivo de fuentes. Para mantener un poco organizadas las fuentes de mis repositorios, lo haré de la siguiente manera:
# echo "# Repositorio del Mozilla Debian Team\n\ndeb http://mozilla.debian.net/ jessie-backports iceweasel-release" > /etc/apt/sources.list.d/mozilla.list

# echo "# Repositorio jessie-backports\n\ndeb http://ftp.es.debian.org/debian jessie-backports main contrib non-free" > /etc/apt/sources.list.d/jessie-backports.list
Segundo.- Actualizamos los índices de los repositorios:
# apt-get update
Tercero.- Instalamos el paquete que contiene la firma del repositorio de mozilla:
# apt-get install  pkg-mozilla-archive-keyring
Cuarto.- Por último, instalamos iceweasel en español:
# apt-get -t jessie-backports install iceweasel iceweasel-l10n-es-es
Publicado por primera vez en http://enavas.blogspot.com.es

domingo, 8 de noviembre de 2015

Resetear punto de acceso UniFi a sus valores por defecto conociendo su IP

Si conocemos la IP del punto de acceso Ubiquiti, es muy sencillo resetearlo:
  1. Nos conectamos al punto de acceso mediante ssh. Nos pedirá que introduzcamos la contraseña. Así que introducimos la contraseña del controlador.
  2. Una vez conectados al punto de acceso, ejecutamos el comando "set-default" y esperamos algo más de un minuto a que termine de reiniciar.
  3. Cuando haya terminado, ya podemos volver a conectarnos por ssh con los datos de acceso por defecto:
    • Usuario: ubnt
    • Password: ubnt
Publicado por primera vez en http://enavas.blogspot.com.es

¿Qué significa el color del LED en los puntos de acceso Ubiquiti UAP?

El color del led de estado de nuestros dispositivos UAP de Ubiquiti va a variar dependiendo del estado del mismo.


Si nuestro dispositivo es un UAP-Normal, un UAP Long Range o un UAP Outdoor, éste es el significado de los colores del LED de estado:
  • Orange Blinking (second interval) - initializing
  • Orange Steady - factory defaults; awaiting adoption
  • Orange Flashes (every 10 seconds) - reset device & readopt
  • Green Steady - adopted
  • Green Flashing (every 3-4 seconds) - isolated AP; looking for uplink
  • Green Flashing (intervals < 1 second) - AP being located in controller
  • No Light Steady - Check power/cable/POE
Y si nuestro dispositivo es un UAP-Pro, éste es el significado de los colores del LED de estado:
  • White Flashing - initializing
  • White Steady - factory defaults; awaiting adoption
  • White/Blue Flashing - busy with process (i.e. firmware); do not disconnect!
  • Blue Steady - device is successfully integrated in UAP network
  • Blue Steady Flashing (every 3-4 seconds) - isolated AP; looking for uplink
  • Blue Flashing (intervals < 1 second) - AP being located by controller
  • Blue/White Flashing - busy with process (i.e. firmware); do not disconnect!
Fuente: http://www.getclearwave.com/knowledge-base/what-do-the-led-color-patterns-represent-for-uaps/
Publicado por primera vez en http://enavas.blogspot.com.es

jueves, 5 de noviembre de 2015

Error al actualizar VirtualBox 5.0.6 a VirtualBox 5.0.8 en Debian Jessie

Al actualizar VirtualBox 5.0.6 a VirtualBox 5.0.8 en Debian Jessie he observado que no se me abría ninguna de las máquinas virtuales que tenía instaladas y me aparecía un cuadro de diálogo diciendo que ejecutara /sbin/vboxconfig para instalar los módulos de VirtualBox.

Al ejecutar el comando /sbin/vboxconfig siempre obtengo los mismos errores:
Failed to get D-Bus connection: Error desconocido -1
Failed to get D-Bus connection: Error desconocido -1
Failed to get D-Bus connection: Error desconocido -1
Failed to get D-Bus connection: Error desconocido -1
La solución para eliminar los viejos módulos de VirtualBox e instalar los nuevos es ejecutar:
# rcvboxdrv setup
Stopping VirtualBox kernel modules ...done.
Uninstalling old VirtualBox DKMS kernel modules ...done.
Removing old VirtualBox pci kernel module ...done.
Removing old VirtualBox netadp kernel module ...done.
Removing old VirtualBox netflt kernel module ...done.
Removing old VirtualBox kernel module ...done.
Trying to register the VirtualBox kernel modules using DKMS ...done.
Starting VirtualBox kernel modules ...done.
Publicado por primera vez en http://enavas.blogspot.com.es

Eliminar certificados en el cliente puppet

Si tenemos problemas con los certificados en algún cliente, puppet nos muestra un mensaje informándonos de que debemos borrar el certificado tanto en el cliente como en el servidor:

Cuando tengo que borrar el certificado en el servidor, lo hago con la herramienta puppet cert:
# puppet cert clean nombrehost.nombredominio

Y cuando tengo que borrar el certificado en el cliente utilizo el siguiente script que coloqué en el directorio /usr/local/sbin de todos los clientes puppet:
#!/bin/bash
#
# Esteban M. Navas Martín 
#

test -f /var/run/puppet/agent.pid && puppet resource service puppet ensure=stopped
rm -r $(puppet agent --configprint ssldir)/* && puppet agent --test
grep "START=yes" /etc/default/puppet && puppet resource service puppet ensure=running
Fijáos en el script:
  • Si puppet está corriendo en el cliente, lo paro utilizando el propio recurso service de puppet.
  • A continuación borro el directorio de almacenamiento de las claves ssl y hago un puppet agent --test para volver a regenerarlo.
  • Y, por último, utilizando de nuevo el recurso service de puppet, me aseguro de que se vuelva a iniciar, si el servicio está configurado para iniciarse.
 
Publicado por primera vez en http://enavas.blogspot.com.es

miércoles, 4 de noviembre de 2015

Limpiar y regenerar certificados en el servidor puppet

En ocasiones, es posible que necesitemos regenerar los certificados, así como las credenciales de seguridad (claves públicas y claves privadas) creadas por la autoridad de certificación de nuestro servidor Puppet. Para ello seguiremos los siguientes pasos:

Primero.- como nuestro servidor puppet es cliente y servidor a la vez, nos aseguraremos de cuál es el directorio ssldir del puppetmaster:
root@servidor ~ # puppet master --configprint ssldir
/var/lib/puppet/ssl
Segundo.- Haremos un backup del directorio /var/lib/puppet/ssl del servidor Puppet. De este modo, si algo no fuera bien, podríamos restaurar la configuración:
root@servidor ~ # cp -r $(puppet master --configprint ssldir) $(puppet master --configprint ssldir).old
Tercero.- Paramos el servicio puppet agent:
root@servidor ~ # puppet resource service puppet ensure=stopped
Si os dáis cuenta, lo estamos parando usando los recursos de puppet.
Cuarto.- Paramos el servicio puppet master. Una observación importante: Como nuestro servidor puppet está montado con apache2 mediante passenger, lo que tenemos que parar es el servicio apache2:
root@servidor ~ # puppet resource service apache2 ensure=stopped
Quinto.- Una vez parados los servicios, borramos  el contenido del directorio ssldir:
root@servidor ~ # rm -r $(puppet master --configprint ssldir)/*
Sexto.- Regeneramos los certificados de la autoridad de certificación:
root@servidor ~ # puppet cert list -a
Veremos un mensaje como el siguiente:
Notice: Signed certificate request for ca
Lo que significa que la autoridad de certificación de puppet se habrá autofirmado su certificado.
Séptimo.- A continuación, generamos los nuevos certificados del puppet master:
root@servidor ~ # puppet master --no-daemonize --verbose
Ésto ejecutará puppet master en primer plano. Cuando veamos el siguiente mensaje en pantalla, pulsamos Ctrl+C:
Notice: Starting Puppet master 
Octavo.- Una vez regenerados los certificados,  arrancamos el puppet master de nuevo levantando apache2:
root@servidor ~ # puppet resource service apache2 ensure=running
Noveno.- Y por último, arrancamos el puppet agent de nuevo:
root@servidor ~ # puppet resource service puppet ensure=running
Con todo ésto, habremos creado dos cosas:
  • Un nuevo certificado y una nueva clave para la autoridad de certificación de puppet (CA).
  • Un nuevo certificado para el puppet master firmado por la autoridad de certificación.
Publicado por primera vez en http://enavas.blogspot.com.es

martes, 3 de noviembre de 2015

Crear una lista blanca de hosts en denyhosts

Podemos crear una lista blanca de hosts en el fichero /var/lib/denyhosts/allowed-hosts, de tal manera que denyhosts no monitorice los accesos desde las IP's que especifiquemos dentro del mismo. Este fichero contendrá una IP por línea. Por ejemplo:
127.0.0.1
172.19.25.10
172.19.25.11
172.19.25.12
Publicado por primera vez en http://enavas.blogspot.com.es

Script para listar las direcciones IP baneadas por denyhosts

Aunque tan sólo hay que echar un vistazo al fichero /etc/hosts.deny para ver qué direcciones IP se encuentran baneadas en un momento determinado, utilizo un script muy simple: listbannedhosts:
#!/bin/bash

sed -nr "/([0-9]{1,3}\.){3}[0-9]{1,3}/ p" /etc/hosts.deny | cut -f2 -d" "
Así, si lo necesito, puedo utilizar este script desde otro.
https://copy.com/0knRokFHTV1q31nF
Publicado por primera vez en http://enavas.blogspot.com.es

Eliminar una dirección IP baneada por denyhosts

Si utilizáis denyhosts para prevenir ataques de fuerza bruta contra ssh a vuestros servidores, probablemente más de una vez os habréis equivocado al realizar la conexión y habéis bloqueado accidentalmente el acceso a la IP desde la que habéis accedido.

Para volver a permitir el acceso a una IP denegada por denyhosts, es necesario borrarla de los siguientes archivos:
  • /etc/hosts.deny
  • /var/lib/denyhosts/hosts 
  • /var/lib/denyhosts/hosts-restricted
  • /var/lib/denyhosts/hosts-root
  • /var/lib/denyhosts/hosts-valid
  • /var/lib/denyhosts/users-hosts
Para poder hacerlo de una forma más cómoda, he creado un script al que he llamado unbanhost que "des-banea" la IP que le indiquemos como parámetro:
#!/bin/bash

if [ -z "$1" ]; then
    echo -e "Error:\tDebe indicar la IP del host"
    echo -e "  Uso: $0 "
    exit 1
fi

/etc/init.d/denyhosts stop
sed -i "/$1/d" /var/lib/denyhosts/hosts
sed -i "/$1/d" /var/lib/denyhosts/hosts-restricted
sed -i "/$1/d" /var/lib/denyhosts/hosts-root
sed -i "/$1/d" /var/lib/denyhosts/hosts-valid
sed -i "/$1/d" /var/lib/denyhosts/users-hosts
sed -i "/$1/d" /etc/hosts.deny
/etc/init.d/denyhosts start
https://copy.com/kpOTUNhSXas3hvuX
Publicado por primera vez en http://enavas.blogspot.com.es

Utilizar expresiones regulares extendidas en el comando sed

Podemos emplear expresiones regulares extendidas en el comando sed, utilizando el parámetro -r (--regexp-extended). Las expresiones regulares extendidas son aquellas aceptadas por el comando egrep.

Por ejemplo, si queremos buscar las líneas que contienen una IP en un fichero, podríamos usar la siguiente expresión regular: ([0-9]{1,3}\.){3}[0-9]{1,3}
# sed -nr "/([0-9]{1,3}\.){3}[0-9]{1,3}/ p" /etc/hosts.deny
Publicado por primera vez en http://enavas.blogspot.com.es

Tecla de acceso al BIOS en portátiles TTL de TeknoService

La tecla de acceso a la configuración BIOS en portátiles TTL de TeknoService es F2.

Si tenéis Windows instalado y no podéis entrar en ella, probablemente sea porque se encuentra activado el Fast Startup en el sistema operativo.
Publicado por primera vez en http://enavas.blogspot.com.es