En esta entrada algo offtopic indico cómo instalar y configurar un equipo para descargar ficheros en formato torrent
usando Transmission.
Los ficheros descargados se comparten vía Samba para el resto de equipos de casa (linux, Mac y Windows).
Tengo un equipo en casa que uso para descargar ficheros de internet usando BitTorrent. Hasta ahora, el equipo -un viejo Optiplex GX 260- ejecutaba Windows 7 con 2 Gb de memoria. El equipo iba extremadamente lento, por lo que hacía tiempo que me rondaba por la cabeza instalar Linux y Transmission en modo headless.
Instalación del sistema operativo
El equipo es 32 bits, de manera que he tenido que instalar Ubuntu Server 17.10, al ser la última versión de 32 bits ofrecida por Canonical.
Durante la instalación, he seleccionado únicamente la opción de instalar el servidor OpenSSH.
Configuración de IP fija
El método para configurar la red se cambió en Ubuntu 17.10, pasando a utilizar NetPlan.
NetPlan permite configurar la red a través de ficheros yaml en /etc/netplan/*.yaml
.
En primer lugar, hacemos una copia de srguridad:
sudo cp /etc/netplan/01-netcfg.yaml /etc/netplan/01-netcfg.yaml.original
Editamos el fichero y lo cambiamos por:
# This file describes the network interfaces available on your system
# For more information, see netplan(5).
network:
version: 2
renderer: networkd
ethernets:
ens33:
dhcp4: no
addresses: [192.168.1.101/24]
gateway4: 192.168.1.1
nameservers:
addresses: [1.1.1.1,1.0.0.1]
Usamos los DNS de CloudFlare.
Al finalizar, guardamos los cambios y aplicamos mediante sudo netplan appy
. Los cambios tienen efecto inmediatamente.
Automontaje del disco de datos
El equipo de descargas tiene dos discos: uno para el sistema (/dev/sda
) y otro para los ficheros descargados (/dev/sdb
).
Al tratarse de un disco reutilizado, uso sudo fdisk /dev/sab
para eliminar las particiones existentes en el disco. He creado una nueva partición primaria de tipo Linux.
A continuación, creamos el sistema de ficheros formateando el disco sudo mkfs.ext4 /dev/sdb1
. Una vez ha finalizado el formateo, reiniciamos el equipo.
Antes de modificar el fichero /etc/fstab
, hacemos una copia de seguridad:
sudo cp /etc/fstab /etc/fstab.original
Obtenemos el UUID del segundo disco mediante el comando blkid:
$ sudo blkid
/dev/sda1: UUID="6ceae456-bfba-433c-94e0-b09ec8e29f00" TYPE="ext4" PARTUUID="f561a758-01"
/dev/sdb1: UUID="22432f7a-a810-482f-9836-2179ebf47493" TYPE="ext4" PARTUUID="25f625f5-01"
Creamos el punto de montaje: sudo mkdir /samba
.
Creamos la entrada en el fichero /etc/fstab
:
...
# / was on /dev/sda1 during installation
UUID=6ceae456-bfba-433c-94e0-b09ec8e29f00 / ext4 errors=remount-ro 0 1
/swapfile none swap sw 0 0
UUID=22432f7a-a810-482f-9836-2179ebf47493 /samba ext4 defaults 0 0
Validamos que todo funciona mediante el comando sudo mount -a
.
Instalación de samba
Instalamos Samba:
sudo apt install samba
El comando instala tanto el servidor Samba como el servidor NetBIOS de Samba (que no necesitamos). Por seguridad, lo paramos y lo deshabilitamos.
$ sudo systemctl stop nmbd.service
$ sudo systemctl disable nmbd.service
Synchronizing state of nmbd.service with SysV service script with /lib/systemd/systemd-sysv-install.
...
Paramos el servicio de Samba mientras realizamos la configuración.
sudo systemctl stop smbd
Obtener interfaces locales
Antes de empezar la configuración de Samba, necesitamos conocer cuáles son las interfaces locales presentes en el sistema. Para ello, usamos el comando ip link
:
$ ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
link/ether 00:15:5d:01:64:7d brd ff:ff:ff:ff:ff:ff
Configuración global de Samba
La configuración de Samba la realizamos a través del fichero /etc/samba/smb.conf
.
Antes de realizar cualquier modificación en el fichero de configuración, creamos una copia de seguridad:
sudo mv /etc/samba/smb.conf /etc/samba/smb.conf.original
Creamos un fichero de configuración de Samba sudo touch /etc/samba/smb.conf
y lo editamos con nuestro editor preferido con el siguiente contenido:
[global]
server string = sambashare
server role = standalone server
interfaces = lo eth0
bind interfaces only = yes
disable netbios = yes
smb ports = 445
log file = /var/log/samba/smb.log
max log size = 10000
Llamamos a nuestro servidor sambashare
y lo configuramos como un servidor aislado (standalone) (que no forma parte de un Dominio). Nuestro servidor recibirá tráfico por las interfaces lo
y eth0
únicamente. Esto es útil si tienes otras interfaces presentes (como docker0
, por ejemplo).
Siempre que se edita el fichero
smb.conf
, es conveniente ejecutartestparm
para validar que la configuración es correcta.
$ testparm
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions
# Global parameters
[global]
bind interfaces only = Yes
interfaces = lo eth0
server string = sambashare
log file = /var/log/samba/smb.log
max log size = 10000
disable netbios = Yes
smb ports = 445
server role = standalone server
idmap config * : backend = tdb
Creando la carpeta compartida
Como carpeta compartida, usaremos /samba/public
.
Para crear esta carpeta:
sudo mkdir -p /samba/public
Para que los usuarios dentro del grupo sambashare
tengan permisos sobre esta carpeta, cambiamos el propietario:
El grupo
sambashare
se crea durante la instalación de Samba.
sudo chown -R :sambashare /samba
sudo chmod 2770 /samba/public
Para facilitarnos el trabajo, podemos añadir el usuario actual
operador
al gruposambashare
para poder listar el contenido de la carpeta/samba/public
:sudo usermod --append -G sambashare operador
(es necesario volver a hacer login para que los cambios sean efectivos).Es importante incluir el parámetro
-a
o-—append
para añadir el grupo sambashare a los grupos en los que está incluido el usuario. En caso contrario, eliminamos todos los grupos y sólo dejamos el grupo indicado (eliminamos el usuario del grupo sudoers, por ejemplo, y dejamos de tener la posibilidad de elevar permisos). Ref: usermod(8) - Linux man page.
Creando el usuario Samba
Este es el usuario remote
con el que se validan los clientes remotos.
Al crear el usuario, se solicita una contraseña para el usuario.
$ sudo adduser --no-create-home --shell /usr/bin/nologin --ingroup sambashare remote
Adding user `remote' ...
Adding new user `remote' (1001) with group `sambashare' ...
Not creating home directory `/home/remote'.
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for remote
Enter the new value, or press ENTER for the default
Full Name []: Remote User
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] y
Samba gestiona su propia base de datos de usuarios, por lo que tenemos que añadir el usuario recién creado a esta base de datos para que el usuario pueda hacer login en Samba (y habilitarlo).
El password que se requiere para Samba puede ser diferente del creado en el paso anterior.
$ sudo smbpasswd -a remote
New SMB password:
Retype new SMB password:
Added user remote.
$ sudo smbpasswd -e remote
Enabled user remote.
Configuración del share
Ahora que tenemos el usuario creado y la carpeta para compartir, configuramos el share en Samba.
Abrimos de nuevo el fichero de configuración /etc/samba/smb.conf
con nuestro editor favorito y añadimos la información del share public
:
...
[public]
path = /samba/public
browseable = yes
read only = no
force create mode = 0660
force directory mode = 2770
valid users = @sambashare
Como valid users especificamos los usuarios del grupo sambashare
; de esta forma será más sencillo gestionar quién tiene acceso a la carpeta /samba/public
.
Los permisos de las carpetas creadas 2770
indican que las nuevas carpetas se crearán con los mismos permisos que la carpeta superior.
Instalación de Transmission (headless)
sudo apt install transmission-daemon
El interfaz web se encuentra en el paquete
transmission-common
que se ha instalado contransmission-daemon
.
El servicio se arranca automáticamente. Lo detenemos para poder hacer cambios en la configuración de Transmission.
sudo systemctl stop transmission-daemon
Obtener el usuario con el que se ejecuta Transmission
Una de las cosas que necesitaremos más adelante, es conocer el usuario con el que se ejecuta el servicio transmission-daemon
. Podemos obtener esta información del fichero de configuración del servicio:
$ cat /etc/init/transmission-daemon.conf
start on (filesystem and net-device-up IFACE=lo)
stop on runlevel [!2345]
# give time to send info to trackers
kill timeout 30
setuid debian-transmission
setgid debian-transmission
respawn
...
Como vemos, el usuario y el grupo con el que se ejecuta transmission-daemon
es el usuario debian-transmission
.
También podemos obtener esta información del fichero /etc/init.d/transmission-daemon
:
$ cat /etc/init.d/transmission-daemon
...
NAME=transmission-daemon
DAEMON=/usr/bin/$NAME
USER=debian-transmission
STOP_TIMEOUT=30
...
Añadimos el usuario al grupo sambashare
para que tenga acceso al share public
(que será donde dejaremos los ficheros completados descargados).
sudo usermod -aG sambashare debian-transmission
Configuración de Transmission
La configuración de Transmission se realiza a través del fichero /etc/transmission-daemon/settings.json
Como siempre, es mejor hacer una copia antes de empezar a modificarlo:
sudo cp /etc/transmission-daemon/settings.json /etc/transmission-daemon/settings.json.original
El objetivo es que Transmission deje los ficheros descargados en la carpeta public
, de manera que modificaremos el parámetro:
...
"download-dir": "/samba/public",
...
Otros parámetros a modificar
"ratio-limit-enabled": true,
(false
por defecto). Finaliza la compartición cuando se alcanza el ratio definido."ratio-limit": 1.5000,
(2 por defecto). Límite de compartición por archivo."rpc-whitelist": "127.0.0.1,192.168.1.*",
(por defecto sólo permite 127.0.0.1) Habilitar la conexión remota (al interfaz web)"incomplete-dir-enabled": true,
Los ficheros incompletos se almacenan en la carpeta especificada en incomplete-dir."incomplete-dir": "/var/lib/transmission-daemon/downloads"
La carpeta para las descargas incompletas esdownloads
con minúsculas, ya que por defecto se especificaDownloads
que no existe, generando un error de “Acceso denegado”.
Arrancando los servicios
Arrancamos Samba y Transmission:
sudo systemctl start smbd
sudo systemctl start transmission-daemon
Puedes verificar que Samba funciona accediendo al share compartido (usando el usuario remote
).
Para validar que Transmission funciona, accede a http://192.168.1.123:9091 usando las credenciales transmission
(como usuario y password usados por defecto).
Resumen
Después de seguir estos pasos debes tener un servidor Linux con Ubuntu Server instalado con un share compartido accesible desde otros ordenadores en la red local.
Además, el servidor ejecuta Transmission para descargar ficheros vía BitTorrent. Los ficheros descargados se copian al recurso compartido /samba/public
.
La gestión de Transmission se realiza desde la interfaz web a través de http://IP-Servidor:9091.
Referencias
- Configuración de Ubuntu Server
- Samba
- Transmission