miércoles, diciembre 04, 2013

Transmission: Configurar Daemon en fedora 19


Este tutorial está basado en el manual que publicó Daniel Gibbs para fedora 17 :

Comenzamos instalando el demonio de transmission:
# yum install transmission-daemon

Y los clientes remotos:

# yum install transmission-remote-cli
# yum install transmission-remote-gtk

También nos ayudará instalar el cliente GTK normal para crear un fichero de configuración. Los ficheros de configuración son comunes para todas las versiones del software (gtk, qt, cli, daemon):

# yum install transmission-gtk

La configuración puede realizarse a mano pero es más cómodo empezar con una configración pre creada desde el GUI especificando los puertos que queremos y demás parámetros una vez creada la podemos copiar al directorio por defecto donde Fedora pone la configuración del demonio:

# rpm -ql transmission-daemon
...
/var/lib/transmission

Si lo configuramos previamente con el cliente GTK tendremos una config válida en el $HOME/user que habremos modificado al gusto:

# ll /home/user/.config/transmission/

drwxrwxr-x.   blocklists
drwxrwxr-x.   resume
-rw-------.          settings.json
-rw-------.          stats.json
drwxrwxr-x.   torrents

Antes arrancamos el demonio para que genere una configuración automática:

# systemctl start transmission-daemon.service
# systemctl stop transmission-daemon.service

Copiamos la config al directorio del Daemon:

# cp /home/user/.config/transmission/settings.json /var/lib/transmission/.config/transmission
# chown transmission:transmission /var/lib/transmission/.config/transmission/settings.json

Y la editamos al gusto:

- Añadimos la blocklist recomendada por Daniel (info) no tengo mucha info sobre el tema así que dejo la recomendada:

"blocklist-url": "http://list.iblocklist.com/?list=bt_level1&fileformat=p2p&archiveformat=gz",

- Modifico los directorios de descargas:

"download-dir": "/misc/btorrent/download",
"incomplete-dir": "/misc/btorrent/download",
"recent-download-dir-1": "/misc/btorrent/download",
"recent-download-dir-1": "/misc/btorrent/download",

- Configuro el puerto de p2p:

"peer-port": 12345,

 - Configuro opciones RPC para habilitar el cliente Web embebido:

    "rpc-authentication-required": true,
    "rpc-bind-address": "0.0.0.0",
    "rpc-enabled": true,
    "rpc-password": "password",                                        
    "rpc-port": 9091,
    "rpc-url": "/transmission/",
    "rpc-username": "user",
    "rpc-whitelist": "127.0.0.1",
    "rpc-whitelist-enabled": true,

Arrancamos:

# systemctl start transmission-daemon.service

Verificamos:

# ps -ef | grep transmis
transmi+  3781     1  0 23:43 ?        00:00:00 /usr/bin/transmission-daemon -f --log-error

Vemos que no arrancaron correctamente los puertos P2P:

# lsof -a -i -n -P -p 3781
COMMAND    PID         USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
transmiss 3974 transmission    9u  IPv4 1159896      0t0  TCP *:9091 (LISTEN)
transmiss 3974 transmission   10u  IPv4 1159897      0t0  TCP *:12345 (LISTEN)
transmiss 3974 transmission   11u  IPv6 1159899      0t0  TCP *:12345 (LISTEN)
transmiss 3974 transmission   12u  IPv4 1159900      0t0  UDP *:12345

Probamos la interfaz web:

http://localhost:9091/

Ojo, al arrancar verifica que la password (rpc-password) está en claro y la cambia por un hash, para modificar la contraseña se pone la contraseña que deseemos y al arrancar la volverá a encriptar.



-



martes, diciembre 03, 2013

Linux jukebox 6th round: Montando todo en USB

Usaremos el USB del 1st round, de tal manera que podamos arrancar con dsl o con slitaz en función de la necesidad usaremos YUMI añadiendo la ISO generada, slitaz es una de las distribuciones reconocidas por el gestor de arranque por lo que la añade sin problemas.

Verificamos que arranca correctamente pero no coje la configuración de lenguaje, montamos el USB y modificamos a mano el fichero Z:\multiboot\menu\slitaz.cfg :

# Simple Menu Created by Lance http://www.pendrivelinux.com for YUMI - (Your USB Multiboot Installer)
menu title Slitaz Boot Menu
menu background yumi.png
MENU TABMSG http://www.pendrivelinux.com
MENU WIDTH 72
MENU MARGIN 10

MENU VSHIFT 3

MENU HSHIFT 6
MENU ROWS 15

MENU TABMSGROW 20
MENU TIMEOUTROW 22
menu color title 1;36;44 #66A0FF #00000000 none

menu color hotsel 30;47 #C00000 #DDDDDDDD

menu color sel 30;47 #000000 #FFFFFFFF
menu color border 30;44 #D00000 #00000000 std
menu color scrollbar 30;44 #DDDDDDDD #00000000 none

default live


label live

menu label ^Run Slitaz from this USB

kernel /multiboot/slitaz/boot/bzImage

append initrd=/multiboot/slitaz/boot/rootfs.gz rw root=/dev/null vga=normal autologin lang=en kmap=es



MENU SEPARATOR
label <-- Back to Main Menu

kernel vesamenu.c32

append /multiboot/syslinux.cfg


Aún nos quedan algunos pasos:

Sistema:
- Datos persistentes
- Samba
- UPnP

Jukebox:
- Interfaz web más productiva.
- Interfaz para dispositivos moviles
- Interfaz gráfica ¿?
- Conexión a bbdd (freedb, musicbrainz, etc)

Ampliaciones:
- Convertir jukebox en mediacenter
- Convertir mediacenter en consola juegos (emuladores)






Linux jukebox 5th round: Hacking slitaz

Una vez generada la ISO y viendo que cumple las funcionalidades básicas empezamos a realizar modificaciones en la misma para personalizarla.

Primero borramos la iso generada:

# cd distro
# rm slitaz-base.iso

Realizamos las modificaciones:

1. Configuración idioma y teclado, arrancará con la configuració por defecto en lugar de preguntar:

# cd jukebox/distro/rootcd/boot/isolinux/
# vi isolinux.cfg
display isolinux.msg
label slitaz
kernel /boot/bzImage
append initrd=/boot/rootfs.gz rw root=/dev/null vga=normal autologin lang=en kmap=es

include common.cfg

2. Añadimos los clientes web:

# cd jukebox/distro/rootfs/var/www/
# tar -xzvf /home/tux/phpmpreloaded-1.1c.tar.gz
# tar -xzvf /home/tux/relaxx-070.tar.gz

3. Añadimos demonios en arranque (mpd lighttpd dropbear):

# cd jukebox/distro/rootfs/etc
# vi rcS.conf

RUN_DAEMONS="dbus hald firewall slim mpd lighttpd dropbear"

Como mpd no tiene un script en init.d debemos añadirlo:

# cd jukebox/distro/rootfs/etc/init.d

# cat mpd

#!/bin/sh
# /etc/init.d/lighttpd: Start, stop and restart web server on SliTaz,
# at boot time or with the command line. Daemons options are configured
# with /etc/daemons.conf
#
. /etc/init.d/rc.functions
. /etc/daemons.conf

NAME=mpd
DESC="music player daemon"
DAEMON=/usr/sbin/mpd
OPTIONS=$MPD_OPTIONS
PIDFILE=/var/run/mpd.pid
KILL_OPTION=--kill

case "$1" in
start)
if [ -f $PIDFILE ] ; then
echo "$NAME already running."
exit 1
fi
echo -n "Starting $DESC: $NAME... "
$DAEMON $OPTIONS
status
;;
stop)
if [ ! -f $PIDFILE ] ; then
echo "$NAME is not running."
exit 1
fi
echo -n "Stopping $DESC: $NAME... "
$DAEMON $KILL_OPTION
rm $PIDFILE
status
;;
restart)
if [ ! -f $PIDFILE ] ; then
echo "$NAME is not running."
exit 1
fi
echo -n "Restarting $DESC: $NAME... "
$DAEMON $KILL_OPTION
rm $PIDFILE
sleep 2
$DAEMON $OPTIONS
status
;;
*)
echo ""
echo -e "\033[1mUsage:\033[0m /etc/init.d/`basename $0` [start|stop|restart]"
echo ""
exit 1
;;
esac

exit 0

4. Añadimos el usuario tux usamos chroot para ello:

# cd jukebux/distro/rootfs
# chroot .
root@slitaz:/# adduser tux
adduser: /home/tux: File exists
Changing password for tux
New password:
Bad password: too short
Retype password:
Password for tux changed by root
root@slitaz:/# exit
# cd jukebox/rootfs/home/tux
# mkdir .mpd
# mkdir .mpd/playlists
# mkdir music
# cd jukebox/rootfs/home
# chown -R tux:tux tux

Hay que añadir el usuario al grupo audio:

# cd jukebox/rootfs/etc
# vi group
audio:x:20:tux

Regeneramos el rootfs:

# rm jukebox/distro/rootcd/boot
# cd jukebox/distro/rootfs
# find . -print | cpio -o -H newc | gzip -9 > ../rootcd/boot/rootfs.gz

Por último generamos la iso:

# tazlito gen-iso

Linux jukebox 4th round: Web client

Vamos a instalar y configurar el cliente web, los clientes web disponibles para mpd son PHP por lo que precisaremos un servidor con soporte de este lenguaje.

Probamos lighttpd ya que el consumo de memoria y CPU son menores que apache.

Instalamos lighttpd y sus módulos:
root@slitaz:/home/tux/jukebox# tazpkg get-install lighttpd
root@slitaz:/home/tux/jukebox# tazpkg get-install lighttpd-modules
root@slitaz:~# tazpkg get-install php

Probamos el cliente phpMpReloaded que incluye varios clientes PHP:

# cd /var/www
# tar -xzvf /home/tux/phpmpreloaded-1.1c.tar.gz

Tambien probamos un cliente ajax relaxx con una interfaz mas depurada:
# cd /var/www
# tar -xzvf /home/tux/relaxx-070.tar.gz

Problemas:
- Los clientes web en local solo conectan cuando esta en play ¿?. Sin embargo, si el cliente web está en otro host funciona correctamente ¿?
- Relaxx no vé ciertos tipos de ficheros (.ogg) ¿?

A pesar de los problemas los añadimos a la distro (distro-packages.list) :

lighttpd-1.4.26
lighttpd-modules-1.4.26
php-5.2.11

Además añadimos soporte para ntfs ya que el disco externo está en ese form
ato de fs:

ntfsprogs-2.0.0

Añadimos tambien el cliente curses ncmpcpp:
ncmpcpp-0.5

Linux Jukebox 3rd round: Creando ISO SliTaz con mpd

La distribución bajada precisa 160Mb de RAM mínimos, vamos a intentar generar una primera versión básica usaremos la herramienta tazlito:

root@slitaz:~# tazlito list-flavors --recharge
Connecting to mirror.slitaz.org (94.23.60.116:80) - 100% |*************************************************************| 833 --:--:-- ETA List of flavors ================================================================================ Name ISO Rootfs Description ================================================================================ base 6.9M 13.1M Minimal set of packages to boot
core-3in1 31.5M 105.6M SliTaz core system with justx and base alternatives
core 26.0M 86.0M Core system with a full featured desktop.

firefox 29.0M 92.0M Small desktop Mozilla Firefox.

justx 29.0M 97.5M Very small desktop with X only

loram-cdrom-sqfs 30.0M 7.7M SliTaz loram system (/usr on cdrom)
loram-cdrom 88.1M 7.5M SliTaz loram system (/usr on cdrom) loram-http 7.0M 7.9M SliTaz loram system (/usr on web)
loram 30.0M 32.2M SliTaz loram system (all in RAM)

xvesa 29.0M 97.5M Core system with a full featured desktop (use tinyX server).


Creamos un arbol para crear la iso:

mkdir jukebox

mkdir jukebox/distro

mkdir jukebox/packages

Y generamos una configuración:

root@slitaz:/home/tux/jukebox# tazlito configure
Configuring : /home/tux/jukebox/tazlito.conf
================================================================================ ISO name : jukebox
Volume name : jkb Packages
repository : /home/tux/jukebox/packages

Distro path : /home/tux/jukebox/distro
================================================================================ Config file is ready to use. You can now extract an ISO or generate a distro.

A continuación bajamos un flavor:

tux@slitaz:~/jukebox$ tazlito get flavor base
Connecting to mirror.slitaz.org (94.23.60.116:80)

base.flavor 100% |*************************************************************| 11562 --:--:-- ETA Cleaning distro... [ OK ]
Extracting flavor base.flavor... Creating distro-packages.list... [ OK ]

Adding rootcd... Updating tazlito.conf... [ OK ]


Hacemos la primera prueba:

tazlito gen-distro

Arranca perfectamente en un entorno virtualizado con 128Mb de RAM, pero no tenemos X ni sonido, tenemos que añadir algunos paquetes adicionales.

Limpiamos la distro:

tazlito clean-distro

Empezamos con el sonido:

Podemos bajar el mpd al directorio packages:

root@slitaz:/home/tux/jukebox/packages# tazpkg get mpd

Mirar sus dependencias e ir bajando todas:

root@slitaz:/home/tux/jukebox/packages# tazpkg depends mpd

Pero es más rápido añadir el paquete mpc a la lista distro-packages.list y al regenerar la distro bajará todos los paquetes necesarios, añadimos algún paquete adicional.

echo alsa-utils-1.0.21
>> distro-packages.list
echo linux-sound-2.6.30.6 >> distro-packages.list
echo mpc-0.19 >> distro-packages.list


tazlito gen-distro

Vamos a probarlo, copiamos un mp3 y arrancamos mpd:

tux@slitaz:~$ mkdir .mpd
tux@slitaz:~$ mkdir .mpd/playlists

tux@slitaz:~$ mkdir .mpd/database
tux@slitaz:~$ mkdir .mpd/log

Descomentamos la linea del puerto:

port "6600"

Y recreamos la BBDD:

tux@slitaz:~$ mpd --create-db
output: No "audio_output" defined in config file

output: Attempt to detect audio output device
output: Attempting to detect a alsa audio device
output: Successfully detected a alsa audio device

Y listo, ya tenemos funcionando nuestro juke con mpd.

Aún faltan algunos pasos para tener algo funcional pero ya pita!.













Linux Jukebox 2nd Round: SliTaz + mpd

Tras el primer intento con éxito de montar el Jukebox con DSL y Xmms, la cosa se nos queda algo corta y queremos ir algo más allá.

Los requisitos nuevos son:

- Gestión a distancia del Jukebox: Usando un movil wifi como mando a distancia.
- Streaming de audio: Para poder crear un canal adicional.

Para esta ampliación probaré con mpd, este daemon no está incluido entre los paquetes de DSL así que para montar algo rápido buscamos una distribución que cubra los requisitos del 1er round, de momento probamos con SliTaz ya que incluye mpd/mpc entre sus paquetes.

SliTaz tiene unos requerimientos de memoria superiores a los requisitos especificados pero de momento vamos a montar una maqueta virtualizada para ver las necesidades finales y si el enfoque es el adecuado intentaremos "adelgazar" la instalación.

Probamos la maqueta en un entorno virtualizado arrancando la ISO y posteriormente la volcamos a disco virtual (256MB), SliTaz trae de serie una interfaz (SliTaz installer) que hace prácticamente todo:

1. Creamos la partición (asignamos todo el disco disponible y la marcamos como vfat).
2. Ejecutamos el instalador y le indicamos la partición, le indicamos que formatee con vfat.
3. Al reiniciar arrancaremos ya desde el disco nuevo, podemos verificar que los cambios son persistentes.

Tras la instalación comenzamos la instalación, primero actualizamos la lista de paquetes de los mirror:

tazpkg recharge

Y buscamos el paquete que nos interesa:

tazpkg list-mirror | grep mpd

Lo instalamos:

tazpkg get-install mpd
tazpkg get-install mpc


Listo, copiamos un disco para probar y tras trastear un poco con los controles de volumen ya pita:

tux@slitaz:~$ mpd
output: No "audio_output" defined in config file

output: Attempt to detect audio output device

output: Attempting to detect a alsa audio device

output: Successfully detected a alsa audio device


tux@slitaz:~$ mpc update
Updating DB (#1) ...

volume:100% repeat: off random: off single: off consume: off


tux@slitaz:~$ mpc listall

CoolJerks/1.SoulTeller.mp3

CoolJerks/2.ICantTurnYouLoose.mp3

CoolJerks/3.GoodOldMan.mp3
CoolJerks/4.YourSilhouette.mp3


tux@slitaz:~$ mpc listall | mpc add

tux@slitaz:~$ mpc playlist
CoolJerks/1.SoulTeller.mp3
CoolJerks/2.ICantTurnYouLoose.mp3
CoolJerks/3.GoodOldMan.mp3
CoolJerks/4.YourSilhouette.mp3

tux@slitaz:~$ mpc play

CoolJerks/1.SoulTeller.mp3

[playing] #1/4 0:00/2:20 (0%)

volume:100% repeat: off random: off single: off consume: off


tux@slitaz:~$ mpc next

CoolJerks/2. ICantTurnYouLoose.mp3
[playing] #2/4 0:01/2:18 (0%)

volume:100% repeat: off random: off single: off consume: off

Ok, parece que esto es lo que queremos, tenemos múltiples clientes ricos y web que nos permitirán gestionar nuestro juke de forma remota.