domingo, 10 de abril de 2016

Montar disco duro externo automáticamente en Raspbian

Si queremos usar nuestra Raspberry para cosas que requieran espacio de almacenamiento, como streaming de música o servidor de descargas, resulta útil conectarle un disco duro para tener espacio suficiente. Montar ese disco duro automáticamente permite que podamos gestionar la Raspberry remotamente, y reiniciarla ante cualquer eventualidad.

En mi caso tengo un disco duro de 2TB que voy a utilizar como almacenamiento. Este disco tiene una única partición formateada en ntfs. Veamos cómo montarlo en Raspbian:

1. Preparando el directorio destino y configurando permisos

En la mayoría de distribuciones Linux suele existir un directorio que se usa para montar unidades externas (discos duros, pendrives, etc). Este directorio normalmente es /mnt o /media. En mi caso voy a usar /mnt.

Lo primero que haremos será crear un nuevo directorio dentro de /mnt para montar ahí nuestro disco duro. De este modo, si posteriormente quisiéramos montar otra unidad, podremos crear otro directorio y tendremos todo más organizado.

$: sudo mkdir /mnt/midisco

Ahora toca configurar los permisos para que nuestro usuario pueda leer, escribir y ejecutar archivos en ese directorio. Si estamos usando el usuario por defecto (pi), podemos escribir:

$: sudo chown -R pi:pi /mnt/midisco
$: sudo chmod -R 775 /mnt/midisco

2. Determinando el sistema de archivos de nuestro disco y probando el montaje

Como he dicho, en mi caso voy a usar un disco duro formateado en ntfs que ya contiene datos que me interesan. Podemos mostrar las particiones que reconoce el sistema con:

$: sudo fdisk -l

Que mostrará algo parecido a la siguiente imagen:


Vemos que tenemos una tarjeta de memoria con dos particiones (recuadro verde), y un disco duro (recuadro azul) con una partición (recuadro rojo). Ésta última es la que me interesa montar, así que apuntamos la línea que hay debajo de "Device" (/dev/sda1), y comprobamos el tipo de sistema de archivos debajo de "Type". En mi caso HPFS/NTFS/exFAT.

Si el sistema de archivos es NTFS, como en este ejemplo, me toca instalar los drivers ntfs-3g:

$: sudo apt install ntfs-3g

Si el sistema de archivos que queremos montar fuese exFAT, también nos toca instalar los drivers en Raspbian:

$: sudo apt insatall exfat-utils

Si el sistema de archivos fuese ext4 o alguno que soporte Raspbian de serie, no tendríamos que instalar nada.

Una vez llegados aquí, podemos probar a montar el disco duro con:

$: sudo mount /dev/sda1 /mnt/midisco

Donde /dev/sda1 es la partición que quería montar, y /mnt/midisco el directorio de montaje que he creado en el paso 1.

Si todo ha ido bien podremos acceder a /mnt/midisco y ver los archivos.

3. Editando el fichero fstab para que el disco se monte automáticamente

Lo último que nos queda es conseguir que el proceso de montaje se haga automáticamente al iniciar el sistema. Para ello toca editar el fichero /etc/fstab:

$: sudo nano /etc/fstab

Y añadir una línea parecida a la siguiente:

 
Lo primero (recuadro rojo) es la dirección de la partición que queremos montar, que encontramos al inicio del paso 2. En el recuadro verde escribimos el directorio de montaje, que en mi caso es /mnt/K2TB, (en el ejemplo que hemos usado en esta entrada sería /mnt/midisco). en el recuadro azul escribimos el sistema de archivos de la partición, en el recuadro naranja dejamos los parámetros por defecto (es posible que se pueda mejorar el rendimiento añadiendo algún parámetro extra), y los dos últimos ceros especifican que no se tenga en cuenta esa unidad en posibles copias de seguridad y que fsck no compruebe errores en esa unidad. Si queremos que fsck compruebe errores en nuestro disco duro, habría que cambiar el cero del recuadro blanco por un 2.

Si todo ha ido bien, una vez reiniciemos el sistema, tendríamos que poder leer y escribir los archivos de nuestro disco duro accediendo a la carpeta /etc/midisco

Configurar IP estática en Raspbian Jessie

Para usar una Raspberry como servidor casero y acceder a él desde el exterior, resulta conveniente que tenga una IP estática para redireccionar las peticiones que llegan a nuestro router.

Con Raspbian Jessie, el método tradicional para configurar una IP (modificando /etc/network/interfaces) no funciona. Sin embargo, bastan un par de pasos para tener una IP estática:

1. Obteniendo la información necesaria

Necesitamos obtener al menos tres direcciones: la IP estática que queremos en la Raspberry, que debe estar en la misma subred, la dirección del router y la dirección (o direcciones) de los DNS. Para obtenerlas escribimos:

$: ifconfig

Obtendremos algo similar a la siguente imagen:


En el recuadro rojo podemos ver nuestra IP actual, en mi caso 192.168.1.100. En el recuadro verde podemos ver nuestra máscara de subred (255.255.255.0). Estos dos datos nos indican que nuestra subred es 192.168.1.X, donde X será un valor entre 0 y 255. Es decir, todos los equipos de nuestra red doméstica tendrán una IP local con el formato 192.168.1.X. En este ejemplo, voy a usar 192.168.1.100 como IP estática para mi Raspberry.

Sólo nos queda averiguar la IP del router. Para ello podemos escribir:

$: route -ne


Nos interesa fijarnos en la puerta de enlace (Gateway) que esté en la fila donde Destination es 0.0.0.0 (recuadro verde). En mi caso, la dirección es 192.168.1.1 (recuadro rojo). Básicamente lo que nos dice esa línea es que, en nuestra red local, todo el tráfico que tenga como destino Internet (0.0.0.0) se redirecciona al dispositivo con IP 192.168.1.1, es decir, nuestro router.

Ya que tenemos esos dos datos apuntados, podemos configurar nuestra IP estática.

2. Configurando la IP estática

Para establecer la IP estática en nuestra Raspberry, vamos a añadir la información anterior al fichero /etc/dhcpcd.conf. Es necesario editarlo como root, por lo que no olvidéis usar sudo:

$sudo nano /etc/dhcpcd.conf

Sólo es necesario añadir algunas líneas al final del fichero, sin modificar nada más:




En la línea que comienza por interface establecemos la interfaz de red que vamos a configurar. En mi caso es eth0 (cableada), pero podéis usar wlan0 o similar si os conectáis por wifi (con ifconfig podéis ver la interfaz que os interesa configurar)

En la siguiente línea (static ip_address) escribimos la IP estática que podemos establecer. El /24 no es necesario, pero no está de más ponerlo si vuestra máscara de subred (ver paso 1) era 255.255.255.0.

En la línea static routers, escribimos la IP de nuestro router (el gateway que obtuvimos al final del paso 1)

Por último, en la línea static domain_name_servers escribimos la IP (o IPs, separadas por un espacio) de los servidores DNS. Como mi router proporciona las DNS de mi proveedor de Internet, he optado por poner la dirección de mi router. También podríais poner otras DNS, como las de Google, sustituyendo esa última línea por algo como:

static domain_name_servers=8.8.8.8 8.8.4.4

Ya sólo queda guardar el fichero (Ctrl+X) y reiniciar con un:

$: sudo reboot

Y comprobar que nuestra IP es la que queríamos.


Nota: Si el router tiene habilitado el DHCP, cosa muy común, asignará automáticamente direcciones IP a los distintos dispositivos que se conecten a él. Nos interesa que no asigne automáticamente nuestra IP estática (192.168.1.100) a otro dispositivo, para evitar un conflicto IP, que seguramente nos dejaría sin conexión a Internet en la Raspberry. Esto se puede solucionar de dos maneras:

1. Muchos routers tienen la posibilidad de reservar una IP a un dispositivo dada su dirección MAC (que podéis encontrar con el comando ifconfig)

2. Podéis configurar el servidor DNS para que empiece a repartir direcciones IP automáticas en un rango, así que otra posibilidad es restringir ese rango y asignar nuestra IP estática fuera de ese rango. Por ejemplo, en mi caso tengo configurado el servidor DNS para que reparta IPs desde 192.168.1.128 a 192.168.1.255, por lo que si mi IP estática es 192.168.1.100 no habrá problemas de conflictos IP.

miércoles, 10 de febrero de 2016

lunes, 7 de septiembre de 2015

Usando Meld con Git en Linux

Cuando usamos Git, podemos ver los cambios entre dos commits con el comando diff:

git diff master development

Sin embargo la salida del diff puede llegar a ser confusa, especialmente si hay muchos cambios entre las versiones. Uno de los programas gráficos más conocidos para visualizar estos diffs es Meld. Para que Git utilice Meld a la hora de visualizar las diferencias basta con escribir:

git config --global diff.tool meld

El --global sirve para que el cambio se aplique a todos los repositorios Git del sistema. A partir de ahora, bastará con hacer:

git difftool master development

O, si se quiere comparar a nivel de directorios, en lugar de entre archivos individuales:

git difftool -d master development


lunes, 31 de agosto de 2015

Solaar: Usando Logitech Unifying en Linux

Hace algunos años, Logitech unificó la gran mayoría de sus dispositivos inalámbricos bajo un mismo receptor. Esta tecnología se llamó Unifying y permitía, entre otras cosas, utilizar un mismo receptor para emparejar hasta 6 dispositivos, con el consiguiente ahorro de puertos USB. Además, si no se instalaba ningún driver, el sistema operativo reconocía el enlace inalámbrico como el de un dispositivo normal y corriente, aunque la instalación del software de Logitech permitía funciones adicionales, como ver el estado de la batería, activar teclas de función, cambiar el DPI en los ratones, etc.

Como suele suceder, este software sólo esta disponible de forma oficial para Windows/MacOS. Afortunadamente, la comunidad pudo descifrar el protocolo HID++ de Logitech y desarrolló Solaar, un gestor de dispositivos compatibles con Unifying para Linux.

Solaar, además del código fuente, dispone de paquetes para Debian, Ubuntu, OpenSuse y Arch. Para instalarlo en Ubuntu, basta con añadir el siguiente PPA:

sudo add-apt-repository ppa:daniel.pavel/solaar

E instalar el programa:

sudo apt-get update 
sudo apt-get install solaar

Yo lo he instalado en Ubuntu y funciona de maravilla. Permite emparejar y desemparejar dispositivos al receptor, ver la carga de los periféricos, incluso activar las teclas de función por defecto en mi teclado:




jueves, 25 de junio de 2015

Eliminar archivos recursivamente con wilcards en Linux

Por ejemplo, para borrar todos los archivos terminados en exe en el directorio actual recursivamente, bastaría con escribir:

find . -name '*.exe' -exec rm -f {} \;

miércoles, 20 de mayo de 2015

Extraer imagen de un PDF en Ubuntu

Primero instalamos (si no lo tenemos ya) el paquete poppler-utils:

sudo apt-get install poppler-utils

Una vez tengamos el paquete, sólo tenemos que usar en el terminal:

pdftoppm -rx 300 -ry 300 -png file.pdf output

Donde -rx y -ry permiten especificar los DPI horizontales y verticales respectivamente (a más DPI, mayor resolución de salida en la imagen final), file.pdf es el archivo PDF de entrada y output es el archivo (en este caso PNG) de salida. Muy útil para convertir imágenes vectoriales a un formato que acepten programas como Word o Powerpoint.