Mostrando entradas con la etiqueta slitaz linux jukebox mpd. Mostrar todas las entradas
Mostrando entradas con la etiqueta slitaz linux jukebox mpd. Mostrar todas las entradas

martes, diciembre 03, 2013

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.