Algo de Linux: diciembre 2013

viernes, 20 de diciembre de 2013

THE DEBIAN ADMINISTRATOR'S HANDBOOK

Para los que trabajamos habitualmente administrando Debian, es imprescindible tener el Debian Administrator's Handbook a mano.

Si queréis descargar la versión PDF del libro en español, podéis hacerlo desde aquí: 
Si queréis la versión EPUB del libro en español:
Si queréis la versión MOBI del libro en español:


Para descargar versiones en otros idiomas:

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

Configurar Link Aggregation en switch TP-LINK TL SG3210

Si queréis hacer bonding en vuestro servidor nfs, no es suficiente con realizar la configuración en el servidor. También tenéis que configurar los puertos del switch al que están conectadas las tarjetas de red para formar una agrupación de puertos (Link Aggregation) para que el switch sepa cómo debe actuar con esos puertos. Evidentemente, para hacer ésto, debéis tener un switch gestionable.

A continuación os muestro cómo configurar la agrupación de puertos en el switch TP-LINK TL SG3210:


Es muy sencillo. Basicamente se trata de dar un nombre al grupo de puertos, marcar los puertos que pertenecen a dicho grupo y guardar la configuración.

Ojo, como podéis ver en la imagen anterior, no es recomendable mezclar puertos de 100Mb y 1000Mb en una agrupación de puertos.


Como podéis deducir de la imagen, mi servidor tiene dos tarjetas de red conectadas a los puertos 2 y 3 del swich funcionando con bonding.

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

El shell de linux: Usando variables con el comando sed

Imaginemos que, mediante el comando ip almacenamos en una variable la dirección de red de nuestra máquina. Por ejemplo, si ejecutamos:

# ip route | grep -oiE '([0-9]{1,3}\.){3}[0-9]{1,3}/[0-9]{1,2}'

Obtendremos una salida parecida a ésta:

192.168.1.0/24

Si almacenamos el resultado en una variable:

# RED = `ip route | grep -oiE '([0-9]{1,3}\.){3}[0-9]{1,3}/[0-9]{1,2}'`

Y queremos usar dicha variable para sustituir un patrón con el comando sed, de la siguiente manera:

# sed -i "s/NETWORK/$RED/g" fichero.conf 

Obtendremos un error. 

Para solucionarlo, lo mejor es utilizar una sintaxis alternativa:

# sed -i "s|NETWORK|$RED|g" fichero.conf 

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

martes, 17 de diciembre de 2013

Borrar copias de seguridad antiguas

Para hacer copias de seguridad uso rsync (http://enavas.blogspot.com.es/2008/01/copias-de-seguridad-incrementales-con.html). Es cómodo, sencillo y me facilita las búsquedas a la hora de recuperar archivos.

Con este sistema de copias de seguridad, por cada máquina de la que hacemos copia, se guarda:
  • Un directorio main con las copias actualizadas del sistema.
  • Y un directorio nombrado mediante fecha con las modificaciones por cada día en que hubo cambios.
Para borrar copias de seguridad antiguas, podemos usar el comando find desde un script lanzado desde cron. Como es más fácil verlo con un ejemplo, os muestro mi script de borrado de copias de seguridad:

#!/bin/bash

# Primero borra copias de mas de 60 días del servidor nfs
find /var/ies_backups/servidor/ -maxdepth 1 -mtime +60 -not -iname main -exec rm -rf {} +;
# Para ver las copias que se van a eliminar: find /var/ies_backup/servidor/ -maxdepth 1 -mtime +60 -not -iname main -exec echo {} +;

# Luego borra copias de mas de 60 días del servidor ldap
find /var/ies_backups/ldap/ -maxdepth 1 -mtime +60 -not -iname main -exec rm -rf {} +;
# Para ver las copias que se van a eliminar: find /var/ies_backup/ldap/ -maxdepth 1 -mtime +60 -not -iname main -exec echo {} +;

# Luego borra copias de mas de 60 días del servidor recursos
find /var/ies_backups/recursos/ -maxdepth 1 -mtime +60 -not -iname main -exec rm -rf {} +;
# Para ver las copias que se van a eliminar: find /var/ies_backup/recursos/ -maxdepth 1 -mtime +60 -not -iname main -exec echo {} +;

# Luego borra copias de mas de 60 días del servidor freeradius
find /var/ies_backups/a22-pro/ -maxdepth 1 -mtime +60 -not -iname main -exec rm -rf {} +;

# Para ver las copias que se van a eliminar: find /var/ies_backups/a22-pro/ -maxdepth 1 -mtime +60 -not -iname main -exec echo {} +;

Analicemos uno de los comandos de borrado paso a paso:

# find /var/ies_backups/servidor/ -maxdepth 1 -mtime +60 -not -iname main -exec rm -rf {} +;

En este ejemplo estamos buscando con una profundidad de subdirectorio de 1 (-maxdepth 1), aquellos archivos/directorios que tengan más de 60 días de antiguedad (-mtime +60), excluyendo el archivo/directorio main (-not -iname main) y los borramos (-exec rm -rf {})

Fijaos lo útil que pueden ser los parámetros -iname y -not.
  • Con -iname "patrón" puedo indicar un patrón de búsqueda. Por ejemplo, si indico como patrón -iname 2013-11*, buscaré los archivos que tengan como nombre 2013-11 seguido de cualquier cadena de caracteres, lo que, en este caso, se traducirá en encontrar los directorios de copias de seguridad de noviembre de 2013.
  • Con -not simplemente voy a indicar una negación para que la búsqueda me devuelva lo contrario del patrón indicado en -iname.
Publicado por primera vez en http://enavas.blogspot.com.es

Paquetes de firefox 26.0 para instalar en las máquinas de los IES

Aquí tenéis los paquetes de 32 y 64 bits creados "de forma rápida" para instalar firefox 26.0 en el directorio /opt/firefox/ de las máquinas del instituto. 

Importante: Estos paquetes tan sólo colocan firefox en /opt/firefox/. No cambian el enlace de /usr/bin/iceweasel a /opt/firefox/firefox para que se siga pudiendo usar iceweasel como navegador por defecto. 

Para realizar el cambio de iceweasel a firefox o firefox a iceweasel, tengo dos tareas puppet:
  • activa-firefox 
  • activa-iceweasel 
De este modo, si quiero que los portátiles, los servidores ltsp o los workstation usen firefox, les pongo la tarea activa-firefox y si quiero que usen iceweasel, les pongo la tarea activa-iceweasel.

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

lunes, 16 de diciembre de 2013

Comprobar la fecha de expiración de un certificado de un servidor

Si queréis comprobar la fecha de expiración de un certificado de un servidor no tenéis más que ejecutar lo siguiente, sustituyendo "nombreservidor" por el nombre del servidor y "puerto" por el puerto en el que escucha:

# echo | openssl s_client -connect nombreservidor:puerto 2>/dev/null | openssl x509 -noout -dates

Por ejemplo, si queréis comprobar la validez del certificado que tiene vuestro servidor puppet, no tenéis más que ejecutar:

# echo | openssl s_client -connect servidor:8140 2>/dev/null | openssl x509 -noout -dates

Y obtendréis una salida parecida a ésta:

notBefore=Jan 13 11:49:58 2009 GMT
notAfter=Jan 12 11:49:58 2014 GMT

Como podéis ver, el certificado de mi servidor puppet expira el 12 de enero de 2014. Así que me apunto la fecha para volver a generarlo cuando caduque.

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

sábado, 14 de diciembre de 2013

Compartir la gestión de paquetes mediante pkgsync

Como ya hemos visto en el post anterior (http://enavas.blogspot.com.es/2013/12/gestion-de-paquetes-mediante-pkgsync.html), pkgsync es de lo más útil para mantener uniformidad en el software que tenemos instalado en nuestras máquinas, pero además, nos facilita la instalación de software de una manera muy sencilla si gestionamos el archivo /etc/pkgsync/musthave. ¿Por qué? Simplemente porque con poner el nombre de los paquetes que queramos instalar, pkgsync se va encargar de instalarlos él mismo.

El problema que tenemos en nuestro sistema es que el fichero /etc/pkgsync/musthave no lo gestionamos los administradores de los centros. ¿Y qué conlleva ésto? Bueno, pues básicamente dos cosas:

Primero: Que la instalación de software es un poco más incómoda para nosotros, porque tenemos que poner el nombre del paquete a instalar en el archivo /etc/pkgsync/mayhave de las máquinas, y luego, hacer una tarea puppet que lo instale.
Segundo: Que el proceso de instalación de software no sea todo lo eficiente que podría ser. ¿Y por qué? 
  • Porque puede coincidir que se estén instalando paquetes mediante pkgsync y al mismo tiempo se ejecuten tareas de puppet que instalan software. En cuyo caso, en ese momento, todas esas tareas fallarán porque el sistema de gestión de paquetes estará ocupado mediante pkgsync.
  • O puede que suceda justo lo contrario: Que se estén ejecutando tareas de puppet que instalan software mientras se lanza pkgsync, en cuyo caso, la instalación de software mediante pkgsync va a fallar porque porque el sistema de gestión de paquetes estará ocupado mediante las tareas puppet.

Para solucionar ambos problemas he modificado pkgsync de manera que se sigan gestionando los archivos musthave, mayhave y maynothave como hasta ahora, pero que yo pueda tener también mis propios ficheros musthave.ies, mayhave.ies y maynothave.ies, de tal manera que, cuando se ejecute pkgsync, se fusionen del siguiente modo:
  • musthave + musthave.ies > musthave.all 
  • mayhave + mayhave.ies > mayhave.all 
  • maynothave + maynothave.ies > maynothave.all 
Así, yo podré instalar fácilmente nuevos paquetes con tan sólo añadirlos al archivo musthave.ies y no tendré que hacer tareas de instalación de paquetes, con lo que evitaré el problema de eficiencia que comentaba.

#! /bin/bash
#
# pkgsync - Automated package synchronization tool
# 2004-2007 Steinar H. Gunderson <sgunderson bigfoot.com>.
# Modificado: 11/12/2013 Esteban M. Navas Martín <algodelinux gmail.com>
#
# Permite 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, fusionándolos en los siguientes archivos:
# musthave.all, maynothave.all y mayhave.all
# Con ésto facilitamos una gestión compartida
#
# Licensed under the GNU GPL version 2, as publicshed by the FSF;
# see /usr/share/common-licenses/GPL-2 on Debian systems or visit
# www.fsf.org.
#

set -e
set -o noglob
export DEBIAN_FRONTEND=noninteractive
export VERSION=1.21

if [ ! -r /etc/pkgsync/musthave -o \
     ! -r /etc/pkgsync/mayhave -o \
     ! -r /etc/pkgsync/maynothave ]; then
 echo Error: Missing files in /etc/pkgsync. Aborting.
 echo 
 echo Please see /usr/share/doc/pkgsync/README.Debian for information on 
 echo configuring pkgsync.
 
 exit 1
fi

print_help () {
 echo "pkgsync $VERSION"
 echo "Automated package synchronization tool"
 echo ""
 echo "Usage: pkgsync [OPTIONS]"
 echo "Recognized options:"
 echo "  -h, --help           display this help and exit"
 echo "  -k, --keep-unused    don't remove unused packages"
 echo "  -s, --simulate       don't do anything, just print out what would have happened"
 echo "  -d, --dpkg-glob      use dpkg's globbing (deprecated)"
 echo "  -a, --aptitude-glob  use aptitude's globbing (default, recommended)"
 echo ""
 echo "Complete documentation can be found in /usr/share/doc/pkgsync/README.Debian."
}

# Largely adapted from /usr/lib/getopt/parse.bash
parse_options () {
 TEMP=`getopt -o hksad --long help,keep-unused,simulate,dpkg-glob,aptitude-glob -n 'pkgsync' -- "$@"`
 eval set -- "$TEMP"

 APTITUDE_ARGS="-y -q -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confold"
 GLOB_STYLE="aptitude"

 while :; do
  case "$1" in
   -s|--simulate)
    APTITUDE_ARGS="$APTITUDE_ARGS -s"
    shift
    ;;
   -k|--keep-unused)
    APTITUDE_ARGS="$APTITUDE_ARGS -o Aptitude::Delete-Unused=false"
    shift
    ;;
   -d|--dpkg-glob)
    GLOB_STYLE="dpkg"
    shift
    ;;
   -a|--aptitude-glob)
    GLOB_STYLE="aptitude"
    shift
    ;;
   -h|--help)
    print_help
    exit 0
    ;;
   --)
    shift
    break
    ;;
   *)
    echo "Internal error: doesn't recognize argument '$1'"
    exit 1
    ;;
  esac
 done
}
readpkgs () {
 grep -vE '^#' "$1" | grep -vE '^\s*$' || true
}
getpkgs () {
 IFS="
"
 for pkg in $( readpkgs $1 ); do
  # if the line starts with "debtags:", it's a debtags expression,
  # so run it through debtags.
  if echo "$pkg" | grep -Eq '^debtags:'; then
   if ! [ "$USE_DEBTAGS" ]; then
    echo Error: "debtags:" line encountered, but debtags is not installed. Stopping.
    exit 1
   fi
   PATTERN=$( echo "$pkg" | cut -d: -f2- )
   debtags grep "$PATTERN" | tagcoll copy | cut -d: -f1
  else
   # if the line is "meta:current-kernel", use the kernel package
   # for the currently running kernel, if it exists
   if [ "$pkg" = "meta:current-kernel" ]; then
    KVERS=$( uname -r )
    if [ "$GLOB_STYLE" = "dpkg" ]; then
     dpkg-query --showformat '${Package}\n' -W "*-image-$KVERS" 2>/dev/null || true
    else
     aptitude -F '%p' search ".*-image-$KVERS" | sed "s/ \+$//" 2>/dev/null || true
    fi
   else
    # if there's a wildcard in this, push it through dpkg/aptitude
    # to glob. if not, just print it out.
    if [ "$GLOB_STYLE" = "dpkg" ]; then
     if echo "$pkg" | grep -Eq '[][*?]'; then
      dpkg-query --showformat '${Package}\n' -W "$pkg" 2>/dev/null || true
     else
      echo "$pkg"
     fi
    else
     if echo "$pkg" | grep -Eq '[][*?()|~]'; then
      aptitude -F '%p' search "$pkg" | sed "s/ \+$//" 2>/dev/null || true
     else
      echo "$pkg"
     fi
    fi
   fi
  fi
 done
}
run_aptitude () {
 echo RUNNING: aptitude $APTITUDE_ARGS "$@"
 aptitude $APTITUDE_ARGS "$@" 
}
run_debtags () {
 if [ "$USE_DEBTAGS" ]; then
  echo RUNNING: debtags "$@"
  debtags "$@" 
 fi
}

# The beautiful look of hacks in the morning...
filter () { 
 echo "$@" | tr " " "\n" | sort | uniq -c | grep "     2" | cut -c9-
}

parse_options "$@"

# Check if we've got debtags installed
[ -x /usr/bin/debtags ] && USE_DEBTAGS=yes

# Update the package lists
aptitude update
run_debtags update

# Create ies files if they don't exists
test -f /etc/pkgsync/musthave.ies || touch /etc/pkgsync/musthave.ies
test -f /etc/pkgsync/maynothave.ies || touch /etc/pkgsync/maynothave.ies
test -f /etc/pkgsync/mayhave.ies || touch /etc/pkgsync/mayhave.ies

# Merge files 
sort -o /etc/pkgsync/musthave.all /etc/pkgsync/musthave /etc/pkgsync/musthave.ies
sort -o /etc/pkgsync/maynothave.all /etc/pkgsync/maynothave /etc/pkgsync/maynothave.ies
sort -o /etc/pkgsync/mayhave.all /etc/pkgsync/mayhave /etc/pkgsync/mayhave.ies

# Find out what parameters to give to aptitude.
installed=$( dpkg -l | grep '^ii' | cut -c5- | cut '-d ' -f1 )
musthave_install=$( getpkgs /etc/pkgsync/musthave.all | sort -u | sed "s/$/+/" )
maynothave_remove=$( getpkgs /etc/pkgsync/maynothave.all | sort -u | sed "s/$/-/" )
mayhave_marknonauto=$( getpkgs /etc/pkgsync/mayhave.all | sort -u | sed "s/$/\&m/" )
mustormayhave=$( ( getpkgs /etc/pkgsync/musthave.all ; getpkgs /etc/pkgsync/mayhave.all ) | sort -u )
rest_markauto=$( filter $installed $installed $mustormayhave | sed "s/$/\&M/" )

run_aptitude full-upgrade '?upgradable' $musthave_install $maynothave_remove $mayhave_marknonauto $rest_markauto
run_aptitude autoclean

Aquí tenéis el enlace al paquete, por si queréis probarlo: https://copy.com/uCvXJ6cAEXu9

Como siempre, recomiendo leerlo y entender lo que hace antes de aplicarlo.

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

Gestión de paquetes mediante pkgsync

pkgsync es una herramienta muy útil cuando tenemos que administrar muchos equipos y mantener una uniformidad en el software que éstos tienen instalado. Además, la administración de pkgsync es bastante sencilla porque se basa en tres ficheros: 
  • /etc/pkgsync/musthave: Contiene una lista de los paquetes que debe tener instalado la máquina. 
  • /etc/pkgsync/mayhave: Contiene una lista de los paquetes que puede tener instalado la máquina. 
  • /etc/pkgsync/maynothave: Contiene una lista de de los paquetes que no debe tener instalado.
De este modo, si colocamos el nombre de un paquete en el fichero /etc/pkgsync/musthave (uno por línea), pkgsync se encargará de que dicho paquete sea instalado.

Del mismo modo, si colocamos el nombre de un paquete en el fichero /etc/pkgsync/mayhave, pkgsync no instalará el paquete, pero permitirá que el paquete sea instalado por el usuario.

Por último, si colocamos el nombre de un paquete en el fichero /etc/pkgsync/maynothave, pkgsync se encargará de desinstalarlo.

Una vez que tenemos creados nuestros archivos, si queremos simular la ejecución de pkgsync, sin llegar a ejecutarlo, podemos lanzar pkgsync con el parámetro -s:

# pkgsync -s

Otra cuestión que me parece interesante destacar es que podemos usar comodines para referirnos a un conjunto de paquetes que tienen un patrón en común. Por ejemplo, si tenemos un fichero /etc/pkgsync/mayhave con el siguiente contenido:

libreoffice4.1
libreoffice4.1-*
libobasis4.1-*

Con ésto permitiremos instalar el paquete llamado "libreoffice4.1", todos los paquetes que comiencen por "libreoffice4.1-" y todos los paquetes que comiencen por "libobasis4.1-". En definitiva, permitiremos instalar todos los paquetes de libreoffice4.1.

Y por mencionar algo más, decir que podemos usar comentarios en estos ficheros, comenzando la línea por un caracter # y que las líneas en blanco son ignoradas.


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

jueves, 12 de diciembre de 2013

Instalar un servidor tftpd para actualizar firmwares

Al hilo del tema de actualización de los switches Dlink DES-3226, alguien me preguntaba por una forma sencilla y rápida de instalar un servidor tftp.

La más sencilla que se me ocurre es instalar tftpd:

# apt-get install tftpd

tftpd va a configurar el servicio vía inetd y podremos usarlo directamente sin tocar ningún fichero de configuración.

Por defecto, tftpd sirve los ficheros desde el directorio /srv/tftp. Así que es allí donde tendremos que colocar los archivos que queramos proporcionar a los clientes. Si queréis cambiar la ubicación, no tenéis más que editar el fichero /etc/inetd.conf y cambiarlo en la línea que he resaltado en color rojo:

# /etc/inetd.conf:  see inetd(8) for further informations.
#
# Internet superserver configuration database
#
#
# Lines starting with "#:LABEL:" or "##" should not
# be changed unless you know what you are doing!
#
# If you want to disable an entry so it isn't touched during
# package updates just comment it out with a single '#' character.
#
# Packages should modify this file by using update-inetd(8)
#
#       
#
#:INTERNAL: Internal services
#discard                stream  tcp     nowait  root    internal
#discard                dgram   udp     wait    root    internal
#daytime                stream  tcp     nowait  root    internal
#time           stream  tcp     nowait  root    internal

#:STANDARD: These are standard services.

#:BSD: Shell, login, exec and talk are BSD protocols.

#:MAIL: Mail, news and uucp services.

#:INFO: Info services

#:BOOT: TFTP service is provided primarily for booting.  Most sites
#       run this only on machines acting as "boot servers."
tftp            dgram   udp     wait    nobody  /usr/sbin/tcpd  /usr/sbin/in.tftpd /srv/tftp

#:RPC: RPC based services

#:HAM-RADIO: amateur-radio services

#:OTHER: Other services

Si hacéis cambios en /etc/inetd.conf, recordad reiniciar el servicio:

# killall -HUP inetd

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

miércoles, 11 de diciembre de 2013

Restaurar el sistema de vuestro portátil Acer con D2D Recovery

D2D Recovery (o Disk to Disk Recovery) es la herramienta de Acer que os va permitir restaurar el sistema operativo de vuestro portátil al estado de fábrica. La principal ventaja que nos aporta es que vamos a poder restaurar la configuración del equipo a los valores predeterminados sin necesidad de utilizar un CD o DVD de recuperación.

 Para activar D2D Recovery:
  1. Encendemos nuestro portátil y pulsamos "F2" durante el comienzo del proceso de arranque para entrar en la BIOS. 
  2. Una vez dentro, nos desplazamos hasta abajo en la pantalla principal y seleccionamos la opción "D2D Recovery".
  3. Una vez seleccionada, pulsamos la tecla "Enter" y elegimos la opción "Enabled" (activado) para activar este modo.
  4. Por útimo, pulsamos la tecla "F10" para guardar los cambios y salir de la configuración del BIOS. Y nuestro portátil se reiniciará.
 A partir de este momento, podremos entrar en el sistema de recuperación de Acer, pulsando la combinación de teclas "Alt" + "F10" durante el inicio del sistema para entrar en el eMachines Recovery Mode (modo de recuperación).

Y siguiendo las instrucciones que se muestran en pantalla podremos restaurar el sistema a los valores predeterminados de fábrica.

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

Actualizar firmware switches Dlink DES-3226

Al hilo del artículo Proceso de actualización del firmware del switch Dlink DES-3226, alguien me ha preguntado si tenía que montar el servidor tftp para actualizar sus switches.

Como estos swiches no permiten más que un modo de actualización vía tftp, podéis hacerlo sin ningún problema usando el servidor atftpd de cualquier servidor ltsp del centro. Lo único que tenéis que hacer es copiar el archivo con el firmware en el directorio /var/lib/tftpboot del servidor de terminales que vayáis a utilizar.


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

martes, 10 de diciembre de 2013

Proceso de actualización del firmware del switch Dlink DES-3226

Aprovechando que alguien me lo ha pedido y tenía que actualizar uno de mis switches, aquí podéis ver el proceso de actualización paso a paso de un Swich Dlink DES-3226, vía telnet:

Primero.- Nos conectamos al dispositivo e introducimos usuario y contraseña:


Segundo.- Entramos en el apartado "System Utilities".


Tercero.- Seleccionamos la opción "Upgrade Firmware from TFT Server". Es necesario tener un servidor TFTP para actualizar estos switches.


Cuarto.- Introducimos la IP del servidor TFTP y el nombre del fichero con el firmware, seleccionamos "APPLY" y pulsamos la tecla "Enter" para aplicar. Previamente, habremos almacenado el fichero con el firmware en el servidor TFTP: 


Si lo almacenamos dentro de algún subdirectorio donde se ubican los archivos, tendremos que especificarlo.

Quinto.- Seleccionamos "START" y pulsamos la tecla "Enter" para  iniciar el proceso de actualización:



Veremos cómo se descarga el firmware desde el servidor TFTP al swich:


Una vez terminado el proceso, el switch se reiniciará:


Y ya podremos entrar en su configuración vía web mediante el navegador:


Aquí se puede ver que, al terminar el proceso, el firmware se ha actualizado a la versión 6.00.133:


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

lunes, 9 de diciembre de 2013

El shell de Linux: Crear un fichero si no existe desde un script

En Linux hay muchas formas de hacer las cosas. Una forma muy sencilla de crear un fichero desde un script, si éste no existe es la siguiente:

# test -f fichero || touch fichero

Si os dáis cuenta estamos usando un OR. De este modo:
  • Si el fichero existe, no se crea. 
  • Y si no existe, se crea.

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

viernes, 6 de diciembre de 2013

NowMyMail: Correo temporal

A veces, algunos servicios nos obligan a indicar una dirección de e-mail. Si no queremos proporcionar nuestro correo habitual, podemos hacer uso de NowMyMail, un servicio con el que conseguiremos una dirección de correo temporal para usar en el momento; por decirlo de algún modo, una dirección de "usar y tirar":



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

jueves, 5 de diciembre de 2013

Problemas de reinicio Swich Dlink DES-3226

Esta última semana hemos tenido muchos problemas con un Switch Dlink DES-3226 al configurar una VLAN para telefonía y activar el STP. La cuestión es que el switch se reiniciaba una y otra vez sin motivo aparente y sin mostrar ningún error. 

Después de probar muchas cosas, dando palos de ciego, entre ellas cambiar el switch, parece que el problema se ha resuelto actualizando el firmware del dispositivo. 

Por lo que he podido ver todos los switches Dlink DES-3226 que están montados, tienen la versión 4.00.081 del firmware:


He actualizado el firmware del Dlink DES-3226 que daba problemas a la versión 6.00.133, y, después de algo más de tres horas no ha vuelto a tener ningún reinicio, así que supongo que se reniciaba por algún bug.


Seguiré comprobando su evolución, y, si todo va bien, actualizaré el resto a la misma versión.

Por si tenéis que buscar alguna actualización o información acerca de alguno de vuestros dispositivos Dlink, aquí dejo el enlace del ftp de Dlink Europa: ftp://ftp.dlink.eu/

Por cierto, para actualizar este switch es necesario disponer de un servidor tftp.

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