domingo, 16 de febrero de 2014

compartiendo archivos en red con NFSv4 en debian

NFS (Network File System) es un protocolo utilizado para compartir archivos en red. Posibilita que sistemas distintos, conectados a la misma red, puedan acceder a ficheros remotos como si fuesen locales. Este protocolo está incluido por defecto en los sistemas operativos UNIX y en la mayoría de distribuciones GNU/Linux.

NFS es un protocolo cliente-servidor. El servidor comparte los recursos y el cliente (o clientes) puede acceder a los recursos. El acceso a los recursos es totalmente transparente para el cliente y todas las operaciones son síncronas. Es decir, una operación sólo retorna cuando el servidor ha completado todo el trabajo asociado.

La versión 4 de NFS (NFSv4) fue publicada en abril de 2003 y *no* es compatible con las versiones anteriores.

El uso de NFS, presenta una serie de ventajas e inconvenientes que tendremos que tener presentes antes de decidirnos a implementar esta tecnología:

Ventajas

  • Fácil de instalar y configurar
    Respecto a la instalación: Todos los archivos necesarios deberían estar disponibles en los repositorios de la distribución, llegando a estar instalado por defecto en muchas de ellas.
    Respecto a la configuración: En el lado del servidor, editando un único fichero se definen los recursos a compartir, las direcciones IP que pueden acceder a dicho recurso y los permisos que los clientes tendrán sobre éste. En la parte del cliente (si queremos que los recursos remotos se monten automáticamente, por ejemplo durante el arranque) sólo tendremos que editar el fichero /etc/fstab.
  • Más rápido que SSH
    NFS llega a ser un 30% más rápido que SSH
    *Aunque en las pruebas que yo he realizado se aproximaba más al 25% (sin optimizaciones).
    *Después de configurar correctamente los usuarios, en mis pruebas, sí que resulta un 30% más rápido. Además consume la mitad de CPU que SSH.
  • Fácil de utlizar
    Si nos encontramos en un escenario donde la persona que utiliza la máquina cliente es un usuario normal, al poder montar el recurso compartido como si fuese un recurso local más, su acceso será trivial y el usuario no tendrá la necesidad de complicarse aprendiendo a utilizar tecnologías como SSH, FTP, rsync o similares.

Desventajas

  • NFSv4 no es compatible con las versiones anteriores
    En la realidad nos encontramos con que, en algunos casos, se siguen utilizando NFSv2 y NFSv3.
  • Transmisión en plano
    NFS no va cifrado. En caso de encontrarnos en una red no fiable, o sobre la que pueda llegar a ser objetivo de ataques, sería más conveniente utilizar SSH, que al ir cifrado añade una capa de seguridad a las transmisiones.
  • Restricciones de acceso en base a la IP El servidor restringe el acceso a los recursos en base a la dirección IP de los clientes, pero estas direcciones pueden ser falsificadas con relativa facilidad. Una buena alternativa a esto sería utilizar SSH con claves RSA y/o un firewall bloqueando las falsificaciones de IP (ip spoofing).
  • El acceso de root
    Si el servidor NFS está mal configurado, un cliente que utilice el usuario root para acceder al recurso podrá acceder a todos los archivos, ya que el servidor confía en el nombre de usuario que le da el cliente.

Configurando NFSv4

El servidor

  1. Instalar nfs-kernel-server
    $ sudo aptitude install nfs-kernel-server *NFS se basa en RPC. Si no disponemos de un gestor de paquetes o éste no instala RPC, deberemos instalarlo manualmente.
  2. Editar los ficheros /etc/default/nfs-kernel-server y /etc/default/nfs-common
    Editar estos ficheros sólo debería ser necesario en caso de disponer (en el servidor) de un firewall basado en puertos (port-based firewall), del protocolo de autenticación Kerberos o de querer securizar NFS. Estos ficheros son auto explicativos, por lo que no voy a detallar su configuración. En https://wiki.debian.org/SecuringNFS podremos consultar más información sobre cómo securizar el servidor NFS.
  3. Configurar el fichero /etc/exports
    En este fichero se configurarán los directorios compartidos (exportados). La sintaxis es simple:
    /foo/bar maquina1(opcion1,opcion2,...) maquina2(...) ... Como podermos ver en los ejemplos de /etc/exports: /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check) Para conocer en detalle las opciones disponibles, y su funcionamiento, podemos consultar el man, donde también podremos encontrar opciones para mejorar el rendimiento. $ man exports
  4. Reiniciar el servidor
    Una vez que los cambios están hehos, deberemos aplicarlos, bien reiniciando el servidor:
    $ sudo /etc/init.d/nfs-kernel-server start O bien, mefiante el comando exportfs:
    $ sudo exportfs -r

El cliente

  1. Instalar el paquete nfs-common $ sudo aptitude install nfs-common
  2. Montar el recurso remoto
    Podemos montar el recurso remoto manualmente, mediante el comando mount: $ sudo mount -t nfs servidor:/ /foo/bar * A mount le podremos pasar todas las opciones que consideremos oportunas.

    O, también, podremos añadir el recurso remoto en el fichero /etc/fstab para montarlo más cómodamente o durante el arranque: servidor:/ /foo/bar/ nfs opciones 0 0 * servidor: El nombre del servidor (si lo tenemos añadido en hosts), la URI o la dirección IP del servidor.
    * /foo/bar: El punto de montaje local.
    * opciones: Opciones de montaje.

Enjoy!

lunes, 10 de febrero de 2014

reparando errores del disco duro (gnu/linux)


¿Quién no ha sufrido algún error de disco duro alguna vez? Muchos optan por rendirse ante esta situación, aunque, en realidad, en muchos casos la información puede llegar a recuperarse totalmente, o podemos llegar a ganar algo de tiempo extra de utilización para ese disco. ¿Y quien no quiso en esa situación más tiempo para poder realizar una copia de seguridad o para poder seguir utilizando el equipo mientras no tiene otro disco?


Cuando hablamos de erroes en discos duros, lo primero que tenemos que hacer es distinguir entre errores lógicos y físicos. Los errores lógicos son los producidos a nivel de software (un superbloque corrupto, una partición eliminada, etc), mientras que los errores físicos son aquellos que se producen a nivel de hardware, daños directos en el disco (sectores, platos o mecanismos dañados).

Errores lógicos

Los errores lógicos suelen ser los más fácilmente recuperables, mientras no se haya formateado la partición. En este último caso ya tendríamos que utilizar herramientas específicas de recuperación de datos y ver qué información se puede salvar.
Dentro de los errores más comunes que nos encontramos en este apartado se encuentran tablas FAT o superbloques corruptos, particiones eliminadas, o sectores de arranque dañados o eliminados. Para reparar este tipo de errores mi herramienta preferida es testdisk. Testdisk es capaz de solucionar todos estos problemas (y algunos más) en un tiempo espectacularmente breve y, todo ello, siendo multiplataforma. Incluso dando soporte a sistemas RAID. En alguna ocasión, para estas tareas, también he utilizado gparted (que además dispone de una distribución en modo live). Y, aunque ha funcionado correctamente, he de confesar que me sentí un poco como Indiana Jones cuando cambiaba la estatuilla de oro por un saco de arena ;)

Errores físicos

Dentro de los errores físicos, principalmente nos podemos encontrar dos escenarios: Un disco duro con errores graves o un disco duro con algunos sectores dañados.

Si nos encontramos en el primer caso (un disco duro con el motor quemado o con platos rallados), lo único que podríamos hacer es sustituir estas piezas. Para ello habría que recurrir a empresas especializadas y sería sustancialmente caro. Por lo que deberíamos evaluar si el coste compensa la recuperación de la información perdida.

Cuando nos encontramos en el segundo caso (un disco con sectores dañados), es obvio que el disco empieza a fallar, lo más probable es que el fallo total sea sólo cuestión de tiempo. Lo primero que deberemos hacer es una copia de seguridad (o backup). Lo segundo, intentar reparar los errores.

Para reparar este tipo de errores yo utilizo e2fsck en combinación con badblocks. Badblocks (incluido en el proyecto e2fsprogs) genera una lista de los sectores dañados de un disco. Su principal ventaja es que esta lista puede ser leída por otras herramientas y que puede trabajar conjuntamente con e2fsck. Utilizando e2fsck conjuntamente con badblocks mediante el comando: # e2fsck -c /foo/bar/ podremos localizar y aislar los sectores defectuosos del disco, añadiéndolos automáticamente al inodo bad block para que no puedan ser utilizados por ningún fichero. Con esto habremos ganado algo de tiempo y podremos seguir utilizando el disco, sin preocuparnos por la corrupción de datos hasta su próximo fallo o su fallo total.

Lo ideal es prevenir este tipo de fallos, y para ello es recomendable realizar tests periódicamente con smartctl y/o badblocks.
Smartctl (incluído en el paquete smartmontools) controla y monitoriza la información S.M.A.R.T. (Self-Monitoring Analysis and Reporting Technology), una tecnología incluida en la mayoría de los discos duros. En mi opinión, es recomendable complementar estos test con badblocks, ya que más de una vez S.M.A.R.T. me ha devuleto un estado correcto para un disco duro dañado.

Aunque los test realizados por smartctl, se pueden realizar "en caliente" y sobre particiones montadas, los tests basados en badblocks es recomendable realizarlos sobre particiones desmontadas. Aunque dependiendo del test y del caso en particular se podrían realizar sobre particiones montadas en modo sólo lectura ("read only" o "ro").

*La duración de estos test va a depender de diversos factores. Smartctl dispone de test rápidos y tests largos, mientras que la duración de los test realizados por badblocks va a depender de la cantidad de datos almaceados en el disco.

Happy recovering! ;)

miércoles, 1 de enero de 2014

feliz 2014

            *             ,
                       _/^\_
                      <     >
     *                 /.-.\         *
              *        `/&\`                   *
                      ,@.*;@,
                     /_o.I %_\    *
        *           (`'--:o(_@;
                   /`;--.,__ `')             *
                  ;@`o % O,*`'`&\ 
            *    (`'--)_@ ;o %'()\      *
                 /`;--._`''--._O'@;
                /&*,()~o`;-.,_ `""`)
     *          /`,@ ;+& () o*`;-';\
               (`""--.,_0 +% @' &()\
               /-.,_    ``''--....-'`)  *
          *    /@%;o`:;'--,.__   __.'\
              ;*,&(); @ % &^;~`"`o;@();         *
              /(); o^~; & ().o@*&`;&%O\
        jgs   `"="==""==,,,.,="=="==="`
           __.----.(\-''#####---...___...-----._
         '`         \)_`"""""`
                 .--' ')
               o(  )_-\
 / _|  ___ | |(_) ____ |___ \  / _ \ / || || |  
| |_  / _ \| || ||_  /   __) || | | || || || |_ 
|  _||  __/| || | / /   / __/ | |_| || ||__   _|
|_|   \___||_||_|/___| |_____| \___/ |_|   |_|  

domingo, 15 de diciembre de 2013

ver la televisión en ordenadores viejos con gnu/linux (SIN FLASH)

A día de hoy, es normal que las televisiones emitan su programación online. El problema viene cuando nuestro ordenador es viejo y/o utilizamos como sistema operativo GNU/Linux. Por una parte, si el ordenador es viejo, es poco potente y los requisitos que impone Adobe no permiten instalar Flash Player en el equipo*. Por otra parte, están las trabas que Adobe nos pone a los usuarios de GNU/Linux.

* Hay algunos usuarios que optan por instalar versiones antiguas de Flash Player. Esto supone un gran fallo de seguridad. Puesto que son versiones obsoletas, con numerosas vulnerabilides reportadas y, en muchos casos, explotadas con éxito.

En mi caso, el equipo que utilizo como sobremesa, es muy viejo. Se trata de un Duron a 1.3Ghz con Debian GNU/Linux como sistema operativo, por lo que ya no podría instalar Flash Player. Aunque tengo el sistema operativo [muy] optimizado, probé algunas alternativas (gnash, TVenLinux...) y no conseguí, con ninguna, unos resultados satisfactorios.

Después de analizar el problema, he probado a saltarme los "intermediarios" y he conseguido el resultado esperado, poder ver la televisión online desde mi viejo equipo.

El problema

El problema es el siguiente: Para ver una televisión online se necesitan bastantes "intermediarios", un plugin de flash que estará dentro de un javascript, que estará dentro de una página web, que estará dentro de un navegador... Demasiada CPU requerida. Un equipo con una potencia limitada es, simplemente, incapaz.

La solución

mplayer (en mi caso sin interfaz) reproduciendo el streaming de vídeo directamente.
mplayer es muy ligero, y es capaz de reproducir emisiones realizadas a través del protocolo RTMP. RTMP es un protocolo diseñado por Macromedia (que ahora pertenece a Adobe) para transmitir vídeo, audio y datos a través de internet. Así que, básicamente, con mplayer podremos reproducir cualquier contenido que se pueda visualizar con Flash Player (sí, incluso vídeos de youtube).

Conseguir la dirección del streaming mediante RTMP es un proceso trivial utilizando algún sniffer como Wireshark o tcpdump. Las complicaciones pueden aparecer después, según el tipo de seguridad que implemente la web (ID, tokens...). En este último caso, se podría utilizar rtmpdump para capturar el streaming a un fichero, y, luego, reproducir éste con mplayer.

Una vez obtenida la dirección, sólo tendremos que pasársela a mplayer como argumento.

Para agilizar el proceso he creado un pequeño script en python. Como esto es simplemente una prueba, sólo he añadido algunos de los principales canales de televisión online, que no presentaban mayor complicación en lo referente a la obtención de la URL del RTMP. He subido el script a mi cuenta en github, por si queréis probarlo, modificarlo, y/o añadirle algo: https://github.com/rubenhortas/pytv.

Ventajas

Ver de esta forma la televisión online, presenta varias ventajas, entre ellas:

  • Tendremos televisión en nuestro viejo equipo >;)
  • No hay que utilizar Flash Player (gracias por tu soporte para gnu/linux, Adobe)
  • Menor consumo de CPU.
    Aún en equipos que dispongan de la suficiente potencia, la reducción de uso de CPU es considerablemente notable.
  • Emisión ininterrumpida (sin cortes).
    Es decir, que aunque no haya emisiones disponibles vía web, por lo que he podido comprobar, para nosotros sí estará disponible.

Así que, si eres de los que, como a mi, nos gusta tener ruido de fondo mientras realizamos alguna tarea que no requiera mayor anteción, o simplemente te gustaría ver alguno de tus programas favoritos en tu viejo equipo...

Enjoy!

domingo, 1 de diciembre de 2013

configurar la isight y el micrófono de un macbook en debian



La verdad es que yo no era de los que ponían el trozo de cinta tapando la cámara. Como no la necesitaba, directamente no le instalaba el driver. Y el micrófono, siempre en mute. Pero por causalidades de la vida, he tenido que configurar las dos cosas. Así que, aquí dejo un howto rapidito ;)




iSight

Para configurar la iSight, después de leerme unos cuantos post, he llegado a este: http://askubuntu.com/questions/100527/how-to-fix-webcam-on-macbook-pro-5-5, que funciona perfectamente. Y por eso he decidido copiarlo, reproducirlo, ampliarlo, traducirlo, adaptarlo y referenciarlo aquí ;)

1) Encontrar el driver para iSight de Mac OS X

  • Si tenemos OS X instalado
    Con la partición de OS X montada (en este ejemplo en /mnt/osx), copiarlo a algún directorio del /home (por ejemplo) donde queramos trabajar
    $ sudo /mnt/macosx/System/Library/Extensions/IOUSBFamily.kext/Contents/PlugIns/AppleUSBVideoSupport.kext/Contents/MacOS/AppleUSBVideoSupport /home/rubenhortas/descargas/isight
  • Si no tenemos OS X instalado
    Averiguar de qué modelo de macbook se trata:
    $ sudo dmidecode | grep -i "product name"
    Una búsqueda rápida en google del tipo "isight driver macbook " nos devolverá unos cuantos resultados. Yo he usado este driver en un macbook 4,1: dl.getdropbox.com/u/332246/AppleUSBVideoSupport . Aunque en principio es para un macbook 5,5, en el 4,1 funciona perfectamente.

2) Instalar isight-firmware-tools
Este paquete contiene herramientas para extraer el firmware del driver de la iSight, instalar y configurar todo lo necesario para configurar el firmware cuando sea necesario.
$ sudo aptitude install isight-firmware-tools

2) Copiar el driver a /lib/firmware
$ sudo cp /home/rubenhortas/descargas/isight/AppleUSBVideoSupport /lib/firmware/

3) Instalar el firmware:
$ sudo ift-extract -a /lib/firmware/AppleUSBVideoSupport

4) Añadir el módulo a acpi-support
$ sudo vim /etc/default/acpi-support
Buscar "MODULES" y transforarlo en: MODULES="isight_usb"
*En mi caso no estaba esa sección, así que la añadí al final.

5) Averiguar el modelo de la iSight
$ lsusb | grep -Po '(?<=:)(\d+)(?=.*iSight)'
Esto nos devolverá el ID de la iSight. Hay que recordar/apuntar el número. En mi caso es la 8300.

6) Añadir las reglas udev
$ sudo vim /etc/udev/rules.d/isight.rules
Añadir:
ACTION=="add", SYSFS{idVendor}=="05ac", SYSFS{idProduct}=="8300", RUN+="/usr/lib/udev/ift-load --firmware /lib/firmware/isight.fw"
*Reemplazar "8300" por el ID de la iSight que corresponda.

7) Apagar

8) Encender y reiniciar

9) Probar
Ya se puede probar la cámara con skype, cheese, ...

Micrófono (con alsa)

Recuerdo que hace años, cuando instalé debian gnu/linux en esta máquina, los canales estaban desactivados ("muted"), por defecto. La verdad es que no sé si a día de hoy sigue siendo el caso. Pero, por si caso, explico los canales que hay que activar para tener el micrófono funcionando.

1) Ejecutar alsamixer
$ alsamixer

2) Activar el sonido de "Mic"
Seleccionar "Mic" y activar el sonido (si es necesario) pulsando la tecla 'm':

3) Activar el sonido de los dispositvos de captura
Pulsar F4 para ver los dispositivos de captura "Capture", y activarles el sonido (tecla 'm'):


*"Mic Boost" amplía el nivel de captura del micrófono. Si está activado y muy alto, producirá ruídos molestos para la persona que nos escuche.

*Sin tener activado el canal "Digital" no se escuchará el micrófono. Tenerlo muy alto pruducirá ruídos molestos para la persona que nos escuche.

4) Pruebas
Para probar el micrófono podemos recurrir a cualquier programa, por ejemplo skype o hangouts, o utilizar las herramientas de alsa.

Utilizando las herramientas de alsa:

  • Gabar el sonido a un fichero wav:
    $ arecord -f cd -D hw:0 -d 10 test.wav

    *Si esto no funciona, hay que probar con la interfaz de PCM "plughw"
    $ arecord -f cd -D plughw:0 -d 10 test.wav
  • Reproducir la grabación:
    $ aplay test.wav
    *Borrar el fichero al finalizar


Ahora que están la iSight y el micrófono funcionando, por seguridad, es recomendable tapar la cámara con un trozo de cinta adhesiva y desactivar el sonido del micrófono. Nunca se sabe qué puede pasar >;).

Enjoy!

Fuentes: