The perfect server: software

Una vez que tenemos la base física funcionando y con una buena Debian corriendo por sus transistores vamos a darle sentido a lo que hemos ensamblado.

Yo simplemente os voy a contar cómo funciona el servidor de mi casa en el momento de escribir estas líneas, ya que lo bueno del software libre es que en cualquier esquina puede surgir un nuevo proyecto que nos solucione aquella cosa que siempre quisimos hacer pero nunca tuvimos tiempo de implementar.

La principal función de este servidor es almacenar todos los archivos multimedia de casa, desde mi colección completa de CDs originales ripeados en FLAC, un formato sin pérdida de calidad, hasta mis revistas de informática en pdf que he ido acumulando a lo largo de los años.

Almacenamiento Extra

Como ya comenté en el post anterior mientras no baje el precio de los discos duros SSDs de 1TB seguiré utilizando mi disco externo que viajó de Cartagena a Madrid cuando me vine a trabajar aquí. Para servir de almacén de datos lo único que hay que hacer es enchufarlo a cualquier entrada USB, a ser preferible 3.0, formatearlo con ext4 y montarlo cada vez que arranque nuestro sistema. Para ello sólo hay que añadir una línea similar a la siguiente en el archivo '/etc/fstab':

# External HDD
UUID=xxxxxxxx-yyyy-zzzz-aaaa-bbbbbbbbbbbb   /mnt/almacen  ext4  defaults,auto  0  1  

El UUID lo podéis obtener fácilmente, siempre que el disco esté conectado y su partición creada, mediante el siguiente comando:

# blkid

La salida os informará de los UUIDs de todas las particiones presentes en el sistema, entre ellas nuestro disco externo. Antes de montarlo definitivamente debéis crear el directorio '/mnt/almacen':

# mkdir -p /mnt/almacen

Con todo esto, la próxima vez que arranquéis el sistema vuestro almacén de datos estará disponible para que empecéis a llenarlo con todo lo que se os ocurra. En algún post futuro os contaré cómo realizar una copia de seguridad en otro ordenador mediante un simple rsync. Mi idea es ponerlo en el arranque de su hermano mayor, que consume más y que no se usa tan a menudo como nuestro servidor silencioso, porque seguro que no queréis perder nada de lo que tengáis allí guardado.

Transmission

Una vez que ya tenéis un almacén suficiente debéis llenarlo con archivos para visionar, un muy buen sitio para descargar películas clásicas bajo creative commons o directamente de dominio público es archive.org, hay auténticas joyas clásicas con sus respectivos torrents o para visionar directamente en línea.

Yo tengo configurado mi directorio downloads dentro del almacenamiento extra y sobre él actúa el servicio Transmission. Para instalarlo basta con el siguiente comando:

# apt-get install transmission-daemon

Su configuración es muy sencilla pero antes de cambiarla debéis parar el servicio:

# systemctl stop transmission-daemon.service

Ahora editáis el archivo /etc/transmission-daemon/settings.json y cambiáis los siguientes parámetros acomodándolos a vuestras necesidades:

{
    [...]
    "bind-address-ipv4": "0.0.0.0", 
    [...]
    "download-dir": "/mnt/almacen/downloads", 
    "download-limit": 100, 
    "download-limit-enabled": 0, 
    "download-queue-enabled": true, 
    "download-queue-size": 5, 
    [...]
    "rpc-authentication-required": true, 
    "rpc-bind-address": "0.0.0.0", 
    "rpc-enabled": true, 
    "rpc-password": "{507d574f966d6f27982d6655de08883ece0e13f3HnWLeCJU", 
    "rpc-port": 9091, 
    "rpc-url": "/transmission/", 
    "rpc-username": "transmission", 
    "rpc-whitelist": "127.0.0.1,192.168.1.*", 
    "rpc-whitelist-enabled": true, 
    [...]
    "speed-limit-up": 50, 
    "speed-limit-up-enabled": true, 
    "start-added-torrents": true, 
    "trash-original-torrent-files": false, 
    "umask": 2, 
    "upload-limit": 100, 
    "upload-limit-enabled": 0, 
    "upload-slots-per-torrent": 14, 
    "utp-enabled": true
}

Si comparáis la configuración original con lo que acabo de exponer veréis que he cambiado pocas cosas. El directorio de descarga, las redes sobre las que funciona la interfaz web, los límites de velocidad de subida (cómo añoro la fibra) y un dato bastante importante, el umask. Ese valor 2 indica que los archivos que nos descarguemos tendrán la siguiente máscara:

-rw-rw-r--

Esto nos es útil para montajes posteriores, como las comparticiones Samba y el servido dlna. Podéis consultar el resto de variables en la siguiente dirección, seguro que alguna variable os puede resultar útil.

En casi todos los ordenadores de casa en los que tengo instalado Gnome tengo la extensión para controlar el servidor de forma remota y en el resto simplemente entro vía web:

http://ip-servidor:9091/transmission/web/  

Desde esta dirección también podéis cambiar algunas configuraciones sin necesidad de editar el json. Podéis añadir cualquier dirección de red que tengáis configurada mediante vpn para poder controlar vuestros torrents vía web desde cualquier lugar del mundo en el que estéis.

Para añadir un poco más de seguridad podéis cambiar el usuario por defecto y su contraseña, para ello en el archivo sólo tenéis que cambiar el nombre del usuario en la variable rpc-user y escribir el password en plano en el campo rpc-password. Una vez que arranquéis el servidor éste cambiará el password en plano por su hash y si accedéis vía web podréis comprobar cómo ha surtido efecto el cambio.

Minidlna

Si habéis comprado una televisión en los últimos 12 meses seguro que soporta el protocolo dlna, básicamente el servidor lista todos los archivos multimedia presentes en unos directorios determinados. Por otro lado los clientes cogen estos archivos y los reproducen tal cuál, todo el trabajo de decodificación recae sobre ellos.

Mi montaje inicial para el salón requería un servidor con capacidades de reproducción multimedia pero al sustituir esta funcionalidad con la propia televisión podemos prescindir de una buena tarjeta gráfica y su consiguiente conexión tanto a la televisión como al 5.1. Con una simple raspberry pi, un disco duro externo y una televisión con dlna tenemos un centro multimedia en toda regla.

Para instalar el servidor minidlna simplemente ejecutamos el siguiente comando:

# apt-get install minidlna

Su archivo de configuración es /etc/minidlna.conf y sólo tendréis que cambiar alguna línea:

[...]
# network interfaces to serve, comma delimited
network_interface=br0,vpn_interface  
[...]
#   + "P" for images (eg. media_dir=P,/home/jmaggard/Pictures)
#   + "PV" for pictures and video (eg. media_dir=PV,/home/jmaggard/digital_camera)
media_dir=/mnt/almacen/musica  
media_dir=/mnt/almacen/downloads  
[...]
# set this if you want to customize the name that shows up on your clients
friendly_name=Fancy Name Media Server  
[...]

El resto de variables yo mismo las conservo en sus valores iniciales. Sólo he cambiado las interfaces de red para que el servidor escuche en mi red local, y por qué no, en mi vpn, cuando volvamos a tener fibra en casa, Juan, el otro colaborador del blog podrá ver todo nuestro material sin necesidad de descargárselo.

También podéis ver cómo tengo definidos un par de directorios con contenidos multimedia en los que el servidor buscará material y lo indexará, así como un divertido nombre para presentarse a los dispositivos conectados a la red.

Samba

Con este servicio conectaremos las máquinas windows de casa y de nuestra vpn con el resto de máquinas que de verdad funcionan, tiene que haber de todo en la viña del señor y no somos nadie para ignorarlas.

En principio he intentado conjugar todas los servicios anteriores con el servidor samba para que todos los archivos, tanto multimedia como el resto, estén accesibles por todo el mundo a través del mayor número de interfaces.

El principal escollo era conjugar el directorio downloads con el servidor minidlna y con samba, pero unos cuantos juegos de grupos, usuarios y permisos obrarán el milagro. Empecemos:

# apt-get install samba

Al instalar este paquete y todas sus dependencias se configurará una compartición por defecto $print, podréis verla si accedéis desde cualquier máquina windows de la red o desde el cómodo nautilus, el explorador de archivos de Gnome, en el apartado Otras ubicaciones bajo el nombre del servidor sobre el que estéis instalándolo todo.

Si intentáis entrar en esta carpeta comprobaréis que os pide usuario y contraseña, por defecto no se mapean los usuarios del sistema así que tendremos que crear como mínimo un usuario para poder acceder a los archivos compartidos. Para que podáis tener una instalación en la que se puedan compartir estos archivos con varios usuarios en la red, ya sean locales o remotos vía VPN, vamos a crear una par de usuarios extra para poder ver claramente cómo mezclarlo todo en los archivos de configuración:

# adduser userone
[...]
# adduser usertwo
[...]

Con estos comandos los hemos creado en el sistema y con los siguientes comandos los mapeamos también en el servidor samba:

# smbpasswd -a userone
New SMB password: ******  
Retype new SMB password: ******  
Added user userone.  
# smbpasswd -a usertwo
New SMB password: ******  
Retype new SMB password: ******  
Added user usertwo.  

Haberlos creado en el propio sistema nos dará juego para hacer que los usuarios compartan varios de los servicios instalados en la máquina.

Pasamos a revisar las opciones por defecto del archivo /etc/samba/smb.conf. En principio vamos a limitar los interfaces en los que escucha nuestro servidor mediante la variable interfaces, después cambiaremos los permisos de los archivos que se crean mediante este servicio para permitir que los grupos a los que pertenecen los usuarios también puedan leerlos:

[global]
[...]
  interfaces = 127.0.0.0/8 eth0 vpn_interface
[...]
  valid users = userone, usertwo
  read list = userone, usertwo
  write list = userone
  read only = No
  create mask = 0775
  directory mask = 0775
  force create mode = 0775
  force directory mode = 0775
  force group = userone
  force user = userone
[...]

He puesto explícitamente en la write list al primer usuario ya que yo lo tengo así configurado porque siempre he hecho más cosas que los demás usuarios, pero de todas formas en las distintas comparticiones podremos sobreseer estos valores para ampliar los permisos y cualquier otro valor por defecto. Ya sé que sobran opciones pero prefiero tener las variables por escrito y no tener que andar mirando cuáles son sus valores por defecto.

Ahora vamos a crear nuestra compartición principal, como veréis ésta se corresponderá con el mismo directorio en el que se descargarán nuestros archivos mediante el servidor transmission, pero para compatibilizar ambos servicios faltarán un par de ajuste posteriores, de momento vamos a añadir las siguientes líneas al final de nuestro fichero /etc/samba/smb.conf:

[...]
[downloads]
  comment = Central downloads
  path = /mnt/almacen/downloads
  force group = userone
  force user = userone
  write list = userone, usertwo

Si reiniciáis el servicio samba:

# systemctl restart smbd.service 

ya podréis acceder mediante cualquier ordenador windows o linux, utilizando el protocolo samba, al directorio compartido en //ip_servidor_o_nombre/downloads. Recordad que mediante nautilus, el explorador de archivos de Gnome tendréis que especificar el protocolo también escribiendo smb://ip_servidor_o_nombre/downloads.

Ahora bien, para que este directorio contenga archivos descargados automáticamente mediante transmission y puedan ser leídos por los usuarios samba debemos aplicar una serie de cambios en el sistema de archivos:

# chown userone:debian-transmission /mnt/almacen/downloads
# chmod g+w /mnt/almacen/downloads

Podéis probar a crear un archivo mediante el explorador de archivos de cualquier windows y luego listar el contenido de este directorio en el servidor:

# ls -lkp /mnt/almacen/downloads
total 8  
drwxrwxr-x 2 userone userone 4096 ene  3 19:53 test/  
-rwxrwxr-x 1 userone userone    9 ene  3 19:54 test.txt

Como veréis, todo se crea bajo el usuario userone aunque hayáis accedido mediante el usuario usertwo. Si descargáis alguna de las joyas de cine clásico que os comentaba más arriba podréis ver que los permisos y el propietario giran en torno a un tal debian-transmission, esto se puede cambiar en la configuración de ése servicio, pero yo he optado por asegurarme de que los usuarios del sistema pertenezcan a este grupo para que los usuarios que hemos creado tengan acceso también a este contenido:

# adduser userone debian-transmission
# adduser usertwo debian-transmission

Con este último detalle cerramos el círculo de permisos y usuarios. Me dejo en el tintero uno de los principales servicios, Owncloud, o cómo crear nuestra nube privada para no depender de empresas externas, para esto dedicaremos un post completo detallando un poco más el procedimiento.

Ahora mismo tengo varios servicio más funcionando pero ya los hemos contado en estas mismas páginas, el servidor de Zabbix, aunque está explicado para una Raspberry Pi 2 nos sirve perfectamente para esta nueva adquisición y por supuesto la virtualización mediante KVM que está más que explicada aquí, aquí, en este otro post, en éste también hay un poco, e incluso aquí. Ya sé que estos posts no están todos relacionados con el servidor en sí, pero nunca está de más revisarlos.

Mi servidor de VPN también está aquí, pero igual que con el servicio de Owncloud le dedicaremos un post más extenso al software de Softether.

Para terminar el 2015 os voy a recomendar el melocotonazo de Vetusta Morla, La Deriva de su disco homónimo aunque también está recogido en su doble CD en directo 15151, recogiendo el concierto con el que abrían su gira en el palacio de los deportes de Madrid y en el que la cerraron a finales del año que dejamos atrás.

Por cierto, Feliz Año a todos!!!