15 septiembre 2010

¿Cómo convertir ficheros flv a avi o mpeg?

Este es  un rápido Cómo, porque pienso que hay muchas páginas en la red que extienden el
tema con mayor profundidad y detalle.

Como prerrequisito tenemos que tener instalado ffmpeg. Si lo  tenemos instalado tendremos instaladas todas
las librerías que necesita.

Lo primero que podemos hacer es ver la información del fichero que queremos convertir
# ffmpeg -i fichero.flv.

Para convertir a un formato sería tan fácil  como ejecutar
# ffmpeg -i fichero.flv fichero.avi

o bien

# ffmpeg -i fichero.flv fichero.mpeg.

Existen múltiples recursos en los que nos que nos enseñan una completa utilización del programa:

http://www.hiteshagrawal.com/ffmpeg/converting-audiovideos-using-ffmpeg
http://mundogeek.net/archivos/2008/10/10/19-cosas-utiles-que-puedes-hacer-con-ffmpeg/
http://ubuntuforums.org/showthread.php?t=1117283
http://howto-pages.org/ffmpeg/

Como descargar videos o audio flash en linux

La manera en la que lo hago yo es un poco manual, pero a mi me  funciona perfectamente.

Cuando comenzamos a ver el vídeo o a escuchar el audio desde el navegador, es normal que veamos cómo se está descargando el fichero flash en segundo plano en la barra de progreso



En este momento si listamos los ficheros que tenemos en /tmp podremos ver uno que coincide con la hora en la que iniciamos la reproducción del flash, y que comienza por "flash" seguido de letras y números. Ésta es nuestra reproducción.

Cuando finalice de descargar todo el buffer, podremos ver cómo ya no varía el tamaño de este fichero. En este momento podemos copiar este fichero donde queramos, y ponerle extensión .flv para no confundirlo con un mpeg, o un mp3.

09 septiembre 2010

Script para ejecutar chown sólo en ficheros con un uid determinado

Hace unos días me llegó una petición de  uno de nuestros clientes. Quería poder ejecutar chown sin ser root sobre determinados ficheros. La particularidad de la petición es que si no eres root, sólo puedes cambiar de propietario tus ficheros.

Pensamos en solucionarlo configurando sudo de modo que el usuario pudiera utilizar chown, pero no tuvimos que darle ni una vuelta para darnos cuenta de que era una opción demasiado peligrosa, ya que de esa manera, el usuario podría cambiar el propietario de cualquier fichero.

Ahora sí comenzamos a darle unas vueltas  y finalmente escribimos un script. El script es muy sencillo, existe un array con la lista de usuarios a los que puede pertenecer el fichero o ficheros a modificar, es decir, si tengo el usuario "pepe", el usuario "manolo", y el usuario "perico" y sólo quiero poder ejecutar chown para ficheros que pertenecen a "pepe" y a "manolo", son estos dos usuarios los que tengo que incluir en el array.

La sintaxis es como la de chown, pero con el nombre del script, y si además está en sudoers será:

#sudo mchown usuario fichero
No es que sea la octava maravilla del mundo, pero cumple su función .

El script en cuestión es éste:



#/bin/bash

##########################################################################
# Shellscript:  mchown - cambia el propietario de un fichero o ficheros
# Date       :  2010-9-9
# Categoria   : Utilidades de ficheros
##########################################################################


PN=`basename "$0"`                      # Nombre del programa
VER='1.0'

Uso () {
    echo >&2 "$PN  Cambia los permisos de ficheros con usuarios determinados
                  en el directorio actual, $VER

     Uso: $PN usuario [fichero...]

     Se puede dar el nombre de ficheros determinados o utilizar *. No es recursivo.
     "
     exit 1
}
# Comprobamos si existen los tres usuarios en el sistema

USUARIOS=( usuario1 usuario2 usuario3 usuario4)
i=0
while [ $i -lt 4 ]; do
   usr=`id -u ${USUARIOS[$i]} 2>/dev/null`
   case $? in
      0) USUID[$i]=$usr;
        indice=$i
      ;;
      *)
      ;;
   esac
   (( i=i+1 ))
done

[ $# -lt 1 ] && Uso

# Si nos dan PN,  usuario y fichero continuamos

nuevoprop=$1
while [ $# -gt 1 ] ; do
    for propiet in "${USUID[@]}"; # Iteramos sobre el array
    do
        fichero=`stat -c %u $2` # comprobamos el uid del fichero
        if [ $fichero == $propiet ]; # Validamos el uid del fichero
            then
            chown $nuevoprop $2
            unset fichero
        fi
     shift # movemos la posicion del parametro un lugar
    done

done


Liberada versión 1.3.2 de wine

Se ha liberado la versión 1.3.3 de wine

En la nota del lanzamiento destacan entre otras cosas una actualización del motor de Gecko, incluyendo ahora una versión de 64 bits, una nueva implementación del soporte de consola en terminales Unix, nuevas funciones en dlls de tiempo de ejecución de C y el arreglo de algunos bugs.

Wine es el emulador que permite ejecutar aplicaciones Windows en otros Sistemas operativos.

08 septiembre 2010

Aquí viene la "Internet TV Android" de Sony

Sony  ha presentado en primicia mundial la primera televisión Google. La ha presentado en la IFA de Berlín y va a tener un procesador Atom CE4100 de 1,2 Ghz.


Esta televisión va a costar entre 2000 y 3000 dólares (en USA).







Además de Sony habrá otros partners de Google que fabriquen televisiones Android, probablemente a precios más asequibles

Código Linux

Un repaso a la historia de Linux y el movimiento GNU. Por supuesto no es nuevo, pero es un clásico.

Lanzado Linux Mint Debian (201009)

El el blog de Linux Mint han anunciado el lanzamiento de una nueva distribución, Linux Mint Debian Edition (LMDE). Aseguran que va  a ser más rápida y más estable. Esta edición tendrá como distribución base Debian, como se puede deducir de su nombre.

Comentan que en algunos aspectos no es tan amigable como las versiones anteriores, pero que se trabajará duro sobre ella, ya que esta edición permite el control total del equipo de Linux Mint sobre la distribución, de modo que pueden trabajar con independencia de otras decisiones de terceros que modifiquen la base del sistema y que afecten al desarrollo final.

La nueva distribución viene en 32 y 64 bits, y existirán distintas ediciones para escritorios alternativos a Gnome, KDE, Fluxbox, y LXDE

07 septiembre 2010

Probando Google Voice

Mi historia con VoIP es la del usuario medio que utiliza un ordenador conectado a Internet.
He venido utilizando el portátil para realizar videoconferencias y alguna llamada a teléfonos convencionales a través de Skype. La verdad, no tengo queja del servicio de Skype, aunque sí que es verdad que en Linux con Skype siempre he notado un retraso bastante apreciable en las conversaciones.

Con el reciente lanzamiento por parte de Google de la característica de llamadas a números convencionales mediante Google Voice, me vi motivado a instalar el plugin de videoconferencia de Gtalk de Linux, y esperar pacientemente a que me activaran la característica de llamadas en mi cuenta.

Una vez activada he hecho una llamada a Holanda con los 10 centavos que amablemente nos regala Google y el resultado me ha sorprendido mucho. Realmente me estaba dando la sensación de que estaba utilizando un medio tradicional de telefonía, tanto por la calidad del sonido, como por la ausencia de retraso.

¿Puede ser competencia para Skype?

Por supuesto que puede serlo, por dos razones, por la calidad, y por los precios tan competitivos de que dispone, aunque esto puede hacer que Skype mejore, lo cual no es malo.

Pero pienso que este servicio va a ser el mayor rival de las compañías clásicas de telecomunicaciones, ya que casi todo el mundo está conectado a internet hoy en día, y además de que en tarifas internacionales no hay ni punto de comparación, es muy cómodo no tener que coger el auricular para llamar por teléfono.

Actualmente el principal inconveniente para mucha gente es que de momento el sistema está sólo en inglés, una buena motivación para aprender idiomas...

23 agosto 2010

Tu próximo iPad podría ser un iMac

Via Mashable leemos que si las patentes lo permiten Apple está estudiando tener dos dispositivos en uno.

La idea de fondo es que cuando el usuario trabaje con el iMac en la posición habitual, el ordenador funcionará como habitualmente, sin embargo si colocamos la pantalla en posición horizontal, el sistema se cambiará de OS X a IOS.

La idea de dos sistemas operativos coexistiendo y cambiando basándose en la orientación es revolucionaria.

¿Podrán quitar de su soporte los usuarios de Apple el ordenador y llevárselo como un iPad?. ¿Qué tamaño tendrá la pantalla para poder ser portable?, porque en el caso de no ser portable, ¿para qué quieren los usuarios esta funcionalidad?.

18 agosto 2010

Cómo instalar un certificado SSL de Thawte en Apache

Hasta junio de este año para instalar un certificado SSL de Thawte bastaba con descargar el certificado, depositarlo en un directorio del servidor web y hacer referencia a él.

Desde el 27 de junio Thawte ha cambiado su certificado raíz a uno de 2048 bits. Complementario a este cambio, ahora además de nuestro certificado SSL generado por Thawte, también necesitamos certificados intermedios.

Thawte provee de un paquete (un bundle) con el certificado intermedio. Según el enlace que me proporcionaron debería poder verificar mi certificado haciendo referencia a este "bundle".

A mi no me funcionó tal cual. Tuve que descargarme el certificado raíz y agregarlo al final del bundle. En ese momento sí pude verificar el nuevo certificado.

Referencias (en inglés):

11 junio 2010

Cómo determinar la versión de Linux que tenemos

Una manera genérica de ver qué versión de Linux tenemos es mirar el contenido de /etc/issue. Tan fácil como ejecutar:

# cat /etc/issue


Otra manera puede ser en función del sistema operativo que tengamos.

Si el sistema es RedHat:

# cat /etc/redhat-release


Si el sistema es Debian:

# cat /etc/debian-version


Si el sistema es Fedora:

# cat /etc/fedora-release

Si el sistema es Ubuntu:


# lsb_release -a

Monitorizar la actividad de un usuario en un directorio con lsof

# lsof -u root -a +D /etc


Vía commandlinefu

09 junio 2010

Funciones lambda en pyton

Son funciones de una línea que se pueden utilizar en cualquier lugar donde se necesite una función.

Desaparece la palabra reservada "return" y los paréntesis con los parámetros. Se pueden asignar a una variable o ejecutar directamente:

ejemplos:

>>> l = lambda x: x*3
>>> l(4)
12
>>> (lambda x: x*3) (4)
12

Google Maps Navigation ya funciona en España

A partir de la versión 2.1 de OS.


Fuente

Cómo analizar la velocidad de red sin ocupar espacio en el disco

Simplemente ejecutando:

# dd if=/dev/zero bs=4096 count=1048576 | ssh user@host 'cat > /dev/null'

Con esto transmitiremos 4 GB que no ocuparán espacio.

Si antes del comando ejecutamos el comando "time" también tendremos el tiempo que tardamos en transmitir los datos.

Cómo configurar múltiples smart relay host en sendmail

Es una tarea muy fácil. Directamente en el fichero sendmail.cf vamos a la línea de los smart relay host y ahí incluímos los que queramos separados por dos puntos.

Más gráfico con un ejemplo:
# "Smart" relay host (may be null)
DSservidor1:servidor2

Configurando los smart relay host de esta manera lo que hace sendmail es intentar enviar por el primero, si no consigue enviar, postpone el mensaje, y el siguiente reenvío lo hace a través del otro host que tenemos configurado.

Google lanza Caffeine, el nuevo índice de búsqueda

Google ha anunciado en su blog el lanzamiento de su nuevo sistema de indexación web, llamado Caffeine. Aseguran que con este nuevo sistema de indexación, las búsquedas tendrán un 50% más de resultados más nuevos que con el antiguo sistema.

Con el antiguo sistema de Google, las búsquedas se estaban realizando en información que se había indexado y tratado previamente. Este sistema constaba de una serie de capas y no todas las capas tenían la misma velocidad de actualización, tardando algunas varias semanas en ponerse al día.


Con el nuevo sistema las actualizaciones son mucho más dinámicas. La web se analiza en pequeñas porciones y los índices de búsqueda se están actualizando contínuamente. Cuando se encuentra nueva información o nuevas webs, se pueden incluir directamente al índice. Todo esto significa que se puede encontrar información más reciente que nunca.

Según Google, Caffeine procesa cada segundo cientos de miles de páginas en paralelo, lo cual ocupa casi 100 millones de Gigabytes.

Noticia original (en inglés)

08 junio 2010

Linux continúa dominando la Supercomputación

El dominio de Linux entre los superordenadores está claro. Del top 500 de los ordenadores más potentes del mundo, Linux posee 470 puestos, Unix 25 y Windows 5.

Noticia original
(en inglés)

ZFS en el kernel de Linux

Desarrolladores del Lawrence Livermore National Laboratory han colaborado con Oracle para portar portar grandes partes del sistema de ficheros ZFS al kernel de Linux.

Su objetivo es conseguir tener disponible el sistema de ficheros distribuidos Lustre en Linux con ZFS.

Colaborando en este desarrollo, supongo que es posible que se acelere la integración total de ZFS en el kernel, ya que hasta ahora se integra con FUSE.

Es interesante que Oracle esté apoyando estas iniciativas, aunque todavía queda la duda de cómo será su evolución futura con respecto a Linux.

La noticia orignal (en inglés)

Google Maps Navigation será presentado mañana en España

Mañana día 9 será presentado en Madrid Google Maps Navigation, el sistema GPS de Google.

Por fin los usuarios españoles podremos disfrutar de esta aplicación en nuestros dispositivos con Android :-)

Fuente

Webminar gratis: Conociendo VIM

Este Webminar está ofrecido por la Linux Foundation, es en inglés y cubre tres puntos importantes sobre Vim:

  1. La comprensión de la naturaleza de Vim como editor "modal" y por qué Vim es importante.
  2. Edición básica, como buscar y reemplazar, movimiento, etc.
  3. Añade recursos adicionales para que el asistente investigue más.
Este es el enlace a la página de inscripción

Arrays en bash

En The Geek Stuff hemos encontrado un pequeño tutorial (en inglés) de utilización de arrays en bash.

Muchas veces nos podemos encontrar en la situación de necesitar los arrays en bash y hacer alguna pequeña chapuza para evitarlos o cambiar a otro lenguaje de scripting. Con estos truquillos ya no hay excusa :-)

Aquí está el enlace

07 junio 2010

Inminente Android 2.1 para Hero

Por fin HTC ha liberado una versión 2.1 de Android para Hero. Concretamente lo han hecho para Taiwán, pero esto hace que las versiones para el resto del mundo se acerquen a nosotros :-)



Referencias:

http://www.eurodroid.com/2010/06/report-htc-hero-android-2-1-update-hitting-europe-on-june-18/
http://smarthouse.com.au/Phones/Industry/B4J9B9V7
http://www.dialtosave.co.uk/blog/2010/06/05/htc-hero-owners-may-receive-android-2-1-update-soon/

Cómo quitar el resaltado en las búsquedas de vim

Cuando trabajamos con vim y realizamos búsquedas, podemos encontrarnos con que además del primer resultado, el programa resalta todas las entradas coincidentes con nuestra búsqueda.

Generalmente es una opción útil, pero a veces consigue que el texto sea difícil de leer y la mejor opción es desactivarlo. Nada más fácil, simplemente tecleamos :nohl.

Si queremos volver a activarlo tecleamos :set hlsearch

05 junio 2010

El comando cat

Pocas veces un comando parece que no hace demasiadas cosas, pero "en la sombra", tiene grandes usos. Este es el caso del comando "cat".

Su definición formal dice que "concatena ficheros e imprime por la salida estándar". Por supuesto esto es cierto, pero podemos hacer más cosas gracias a la potencia de cat y al shell.

En primer lugar es posible que veamos los caracteres no imprimibles; vale..., esto se puede hacer con otros programas como por ejemplo "vi", pero gracias a esta funcionalidad y a la redirección de linux podemos hacer cosas como por ejemplo filtrar la salida de un "ls" para comprobar si hay caracteres no imprimibles en el nombre de un fichero.

# ls -l |cat -vet
total 124$
drwxr-xr-x 2 root root 4096 2010-05-23 08:46 bin$
drwxr-xr-x 4 root root 4096 2010-02-02 05:31 boot$
lrwxrwxrwx 1 root root 11 2009-09-27 22:52 cdrom -> media/cdrom$
drwxr-xr-x 18 root root 4280 2010-06-07 06:04 dev$
drwxr-xr-x 151 root root 12288 2010-06-07 06:05 etc$
drwxr-xr-x 6 root root 4096 2010-06-04 23:48 home$
lrwxrwxrwx 1 root root 33 2009-09-27 23:06 initrd.img -> boot/initrd.img-2.6.28-11-generic$
drwxr-xr-x 16 root root 12288 2010-06-04 16:39 lib$
drwxr-xr-x 7 root root 12288 2010-06-04 16:39 lib32$
lrwxrwxrwx 1 root root 4 2009-09-27 22:52 lib64 -> /lib$
drwx------ 2 root root 16384 2009-09-27 22:52 lost+found$
drwxr-xr-x 3 root root 4096 2010-06-07 06:04 media$
drwxr-xr-x 2 root root 4096 2009-04-13 11:33 mnt$
drwxr-xr-x 7 root root 4096 2010-01-20 05:58 opt$
dr-xr-xr-x 169 root root 0 2010-06-07 08:03 proc$
drwx------ 18 root root 4096 2010-06-04 23:48 root$
drwxr-xr-x 2 root root 12288 2010-06-04 16:39 sbin$
drwxr-xr-x 2 root root 4096 2009-03-06 18:16 selinux$
drwxr-xr-x 2 root root 4096 2009-04-20 15:59 srv$
drwxr-xr-x 12 root root 0 2010-06-07 08:03 sys$
drwxrwxrwt 14 root root 12288 2010-06-07 06:33 tmp$
drwxr-xr-x 13 root root 4096 2009-11-26 08:39 usr$

En este caso no tenemos nombres con caracteres no imprimibles ni tabuladores en el listado, pero sí podemos ver los saltos de línea.

Por supuesto podemos mostrar la salida de cat con número de línea, por si tenemos la necesidad de saber exactamente en qué línea estamos viendo algo:


# ls -l |cat -n
1 total 124
2 drwxr-xr-x 2 root root 4096 2010-05-23 08:46 bin
3 drwxr-xr-x 4 root root 4096 2010-02-02 05:31 boot
4 lrwxrwxrwx 1 root root 11 2009-09-27 22:52 cdrom -> media/cdrom
5 drwxr-xr-x 18 root root 4280 2010-06-07 06:04 dev
6 drwxr-xr-x 151 root root 12288 2010-06-07 06:05 etc
7 drwxr-xr-x 6 root root 4096 2010-06-04 23:48 home
8 lrwxrwxrwx 1 root root 33 2009-09-27 23:06 initrd.img -> boot/initrd.img-2.6.28-11-generic
9 drwxr-xr-x 16 root root 12288 2010-06-04 16:39 lib
10 drwxr-xr-x 7 root root 12288 2010-06-04 16:39 lib32
11 lrwxrwxrwx 1 root root 4 2009-09-27 22:52 lib64 -> /lib
12 drwx------ 2 root root 16384 2009-09-27 22:52 lost+found
13 drwxr-xr-x 3 root root 4096 2010-06-07 06:04 media
14 drwxr-xr-x 2 root root 4096 2009-04-13 11:33 mnt
15 drwxr-xr-x 7 root root 4096 2010-01-20 05:58 opt
16 dr-xr-xr-x 169 root root 0 2010-06-07 08:03 proc
17 drwx------ 18 root root 4096 2010-06-04 23:48 root
18 drwxr-xr-x 2 root root 12288 2010-06-04 16:39 sbin
19 drwxr-xr-x 2 root root 4096 2009-03-06 18:16 selinux
20 drwxr-xr-x 2 root root 4096 2009-04-20 15:59 srv
21 drwxr-xr-x 12 root root 0 2010-06-07 08:03 sys
22 drwxrwxrwt 14 root root 12288 2010-06-07 06:33 tmp
23 drwxr-xr-x 13 root root 4096 2009-11-26 08:39 usr
24 drwxr-xr-x 15 root root 4096 2010-04-24 22:07 var
25 lrwxrwxrwx 1 root root 30 2009-09-27 23:06 vmlinuz -> boot/vmlinuz-2.6.28-11-generic


También lo podemos utilizar como editor rápido. Esto es llamado en bash "here document"


# cat > documento_nuevo << EOF
primera
segunda
tercera
EOF

Con la sentencias anteriores tendremos un fichero llamado documento_nuevo y el contenido será "primera, sgunda, tercera", tal cual lo hemos escrito en el documento

04 junio 2010

Exploración de directorios en vim

Esta es una opción que podemos no utilizar habitualmente, pero que puede resultarnos muy útil.
En vim hay varias maneras de explorar el directorio.

Podemos abrir una ventana de vim sin ficheros mostrarlo.

  • Ejecutamos :e .

  • Podemos ejecutar :Exp que produce exactame nte el mismo resultado que hemos visto.

  • Podemos ejecutar :Sex que divide la pantalla en dos.

¿Cómo pasar variables en un script de bash a sed?

Es posible que en nuestro trabajo habitual de administración de sistemas estemos realizando un script y nos encontremos con la necesidad de pasar una variable que obtenemos de un bucle, por ejemplo, como uno de los argumentos que necesita el comando sed.

Simplemente hay incluír la variable entre comillas dobles y a su vez entre comillas simples. Lo he probado en bash y en ksh y funciona correctamente en ambos.

Con un ejemplo, aunque sea un poco absurdo es más fácil de ver:

# a="palabra"
# sed -e 's/otrapalabra/'"$a"'/g' fichero

13 mayo 2010

lsof, errores viendo tus propios procesos

En una de las máquinas HP-UX 11.31 que tenemos en la red, detectamos que si hacíamos login con usuario sin privilegios, se producía un error y no veíamos información relevante sobre el proceso.
El error en cuestión era parecido a esto:

can't read cwd pst_filedetails: Permission denied
can't read mem pst_filedetails: Permission denied
can't read rtd pst_filedetails: Permission denied
can't read txt pst_filedetails: Permission denied
can't read pst_filedetails: Permission denied
can't read 3 stream structures: Permission denied
can't read pst_socket: Permission denied

En este caso ha sido muy sencillo de solucionar. Simplemente cambiamos los permisos del binario de root y le añadimos setuid a root, es decir, pasamos de 755  a 4755.
El origen en el faq :-), http://www.cs.colostate.edu/~dzubera/FAQs/lsof.faq

23 febrero 2010

Hoy es el 15 aniversario de Apache

Hoy, 23 de febrero es el 15 aniversario de la aparición del servidor web Apache, servidor que sirve actualmente unos 112 millones de webs.

Más información en el blog de apache

21 febrero 2010

HTC Hero, mejor dispositivo móvil del año


Aunque con algo de retraso, como brillante poseedor que soy de un HTC Hero quiero decir que ha sido galardonado en el Mobile World Congress como mejor dispositivo móvil del año.

En total había más de 100 nominados en 21 categorías.

A ver si con este galardón HTC se pone un poco las pilas y saca una actualización de android para los pobres desgraciados que la estamos esperando como agua de mayo :-)

11 febrero 2010

Cómo configurar yum para instalar paquetes del dvd

Lo primero que tenemos que hacer es instalar el paquete createrepo, directamente desde el cdrom/dvd, o bien desde internet si tenemos actualización de paquetes.

A continuación montamos el dvd en el subdirectorio que queramos, por ejemplo en /mnt/dvd

Cambiamos al directorio anterior al subdirectorio de montaje y ejecutamos createrepo .:

# cd /mnt
# createrepo


Ejecutamos yum clean all.

# yum clean all

Creamos el fichero de configuración en /etc/yum.repos.d , por ejemplo: dvd.repo

Este fichero tendrá el siguiente contenido:

[DVD]

baseurl=file:///mnt
enabled=1


Después salvamos, guardamos cambios y probamos a instalar paquetes

02 febrero 2010

Insecure Magazine 24

Ya han lanzado el número 24 de Insecure Magazine.

El enlace de descarga aquí:

El contenido de este número (en inglés):

The covered topics include:

- Writing a secure SOAP client with PHP: Field report from a real-world project
- How virtualized browsing shields against web-based attacks
- Review: 1Password 3
- Preparing a strategy for application vulnerability detection
- Threats 2.0: A glimpse into the near future
- Preventing malicious documents from compromising Windows machines
- Balancing productivity and security in a mixed environment
- AES and 3DES comparison analysis
- OSSEC: An introduction to open source log and event management
- Book review - Hacking: The Next Generation
- Q&A: Sandra Toms LaPedis on RSA Conference 2010
- Secure and differentiated access in enterprise wireless networks
- Achieving continuous PCI compliance with IT GRC

01 febrero 2010

Administración de dispositivos con udev II

Para poder utilizar udev en nuestro sistema, además de tenerlo instalado, tenemos que escribir una serie de reglas que tenemos que guardar en un fichero. El fichero tiene que tener extensión ".rules" y se debe guardar en el directorio /etc/udev/rules.d.

Escribiremos una configuración de ejemplo, con dispositivos creados al añadir discos de fibra al sistema, que guardaremos en el fichero 25-names.rules.

En el directorio /etc/udev/rules.d podemos encontrarnos con el fichero 50-udev.rules. Este fichero no se debería editar, puesto que lo crea el sistema, aunque sí que podemos (debemos) echarle un ojo para ver la sintaxis general de udev.

Las reglas en el fichero /etc/udev/rules.d se leen en orden, las líneas se comentan con almohadilla, como si estuviéramos comentando un fichero de shell. Los ficheros se ejecutan de menor número a mayor número, de ahí nuestro fichero "25-names.rules".

En nuestro ejemplo tendríamos una entrada así:

KERNEL="sd*", BUS="scsi", PROGRAM="/sbin/scsi_id", RESULT="3600a0b8000199a9400002cdf4a3199ca", NAME="disco1%n"

  • KERNEL es el nombre que el kernel le da al dispositivo, en nuestro caso tenemos "sd*" porque también funcionan los comodines.
  • BUS es el subsistema, en este caso es el subsistema scsi.
  • PROGRAM es el programa que se va a ejecutar cuando se ejecute udev
  • RESULT es el resultado que nos tiene que dar el programa para que validemos esta entrada, en nuestro caso es el wwn del disco.
  • NAME es el nombre que le vamos a dar al dispositivo; el %n significa que si tiene números de partición también los va asignar.

En realidad podemos crear condiciones extraídas de un programa como en nuestro ejemplo, o bien podemos indicar atributos del dispositivo.

Aunque hay documentación es un poco confusa. Si leemos la documentación que encontramos en el enlace de kernel.org, podemos leer que nos indican que utilicemos "==" para filtrar los dispositivos y "=" para asignar (el nombre por ejemplo), pues bien utilizando esta sintaxis a mi no me estaba funcionando udev en versiones 4 y 5 de redhat.
Finalmente me funcionó utilizando siempre "=", la asignación.

Buscando información por internet de cómo combinar "scsi_id" y "udev" nos hemos encontrado con indicaciones en las que se escribía que había que escribir "scsi_id -s" directamente en el apartado PROGRAM. Más tarde hemos descubierto que no hacía falta que lo hiciéramos, puesto que "udev" lo hacía por nosotros.

Lo bueno de udev es que si no reiniciamos el sistema no va a borrar nuestros dispositivos originales, con lo cual podemos ejecutar "udevstart" y observar si nuestros cambios funcionan. Una vez hayamos comprobado podemos reiniciar el sistema para que se vean sólo los nuevos dispositivos. Otra opción es crear enlaces simbólicos en lugar de renombrar los dispositivos, pero esto ya queda "a gusto del consumidor".

Asignación de dispositivos con udev: Parte I, Parte 2

19 enero 2010

Como sincronizar vmware-esx con ntpd

Nos hemos encontrado con un nodo de vmware-esx que no conseguía sincronizar la hora contra el servidor ntp.

Después de ver que estaba iptables activado y que no había regla que permitiera la salida hacia puertos 123 udp, estábamos a punto de introducir la regla a mano cuando nos encontramos en la base de datos de conocimiento de vmware una herramienta con la que se pueden modificar las reglas del firewall.

La herramienta es "esxcfg-firewall". Al final ha sido tan fácil como ejecutar "esxcfg-firewall --enableService ntpClient".

Asignación de dispositivos con udev I

Estos días estoy "luchando" un poco contra el driver multipath de rdac, en lugar de utilizar el driver multipath que viene con las distribuciones de Red Hat.

Se puede decir que el driver rdac no tiene un exceso de documentación, pero aunque la instalación no se sale de lo corriente en Linux, el problema con el que nos estamos encontrando es que los dispositivos cambian de nombre en el reinicio del sistema, por lo cual no nos vale la configuración que tenemos en el "fstab".

En el "readme.txt" que tiene el driver podemos encontrar un punto en el que nos dice:

2.5 Persistent Naming
Linux SCSI device names have the possibility of changing when the host system reboots. We recommend using a utility such as devlabel to create user-defined device names that will map devices based on a unique identifier, called a UUID.

En sistemas modernos la herramienta que se utiliza para la asignación de dispositivos en el sistema es udev. Voy a tratar de dar una explicación concisa de cómo trabajar con udev, a través de varios posts.
¿Qué es udev?
En versiones antiguas de Linux el directorio /dev estaba lleno de dispositivos, es decir, el sistema tenía preparado ya los ficheros correspondientes a los dispositivos, por si se daba el caso de que tuviéramos que conectar otro disco duro, un disco externo, un floppy, etc, etc (es una explicación vaga, pero simplemente se trata de dar una noción). Esto era un poco ineficiente. Entre otras cosas nos encontrabamos con miles de ficheros que no tenían ningún uso.
Según la definición de kernel.org, udev provee de un directorio /dev dinámico y engancha el espacio de usuario con los eventos del kernel. ¿Qué quiere decir esto?, que ahora los dispositivos se añaden en el espacio de usuario, independientemente del reconocimiento que haga el kernel del dispositivo, mientras que antes eso era un trabajo casi exclusivo del kernel.
En el siguiente post nos pondremos manos a la obra con udev.

Asignación de dispositivos con udev: Parte I, Parte 2

05 enero 2010

Borrado de dispositivos SCSI de una LUN.

Recientemente nos hemos encontrado con que después de presentar una lun de una SAN en uno de nuestros servidores linux nos piden que la borremos y que presentemos el almacenamiento dividido en dos luns.

Se nos planteaban dos problemas:
  1. ¿Cómo borramos el dispositivo sin que afecte al sistema?
  2. ¿Si desaparece la letra de unidad creada, cómo afecta esto a las nuevas unidades cuando reescaneemos de nuevo las hba?

La solución es bien sencilla. Si hace poco tiempo (el tiempo siempre viene dado en términos relativos a cada servidor) que hemos escaneado los dispositivos scsi, podemos encontrarnos con el nuevo dispositivo y su "host, channel, id, y lun" y su letra de unidad, simplemente ejecutando "dmesg" por ejemplo:


Una vez localizado qué dispositivo queremos borrar tenemos que buscar el comando scsi de borrado, que lo tenemos bajo el directorio /sys.

Debemos buscarlo con el comando "find /sys -name delete". El resultado que nos podemos encontrar puede ser similar a esto:


Lo único que hay que hacer ahora para borrar el dispositivo es un echo 1 a la ruta que hemos encontrado. Si ahora ejecutáramos fdisk -l nos encontraríamos que ha desaparecido la letra de unidad que se corresponde con el identificador scsi que hemos borrado.

Si tuviéramos los dispositivos con multipath deberíamos borrar todos los dispositivos.

Después de realizar este procedimiento, se evitan problemas en el arranque del sistema, puesto que cuando arranca el sistema escanea los dispositivos scsi de nuevo, y no sabe nada de letras de unidad, las asigna correlativas, se puede montar un buen jaleo el fstab con las unidades que tiene que montar.

De todos modos este problema es evitable utilizando LVM, ya que de esta manera es la capa de LVM la que se queda con información del dispositivo que está utilizando mediante su UUID no necesitando las letras de unidad.