Un mediacenter con Serviio



Serviio è una applicazione che fornisce tutte le funzionalità tipiche di un media center. Di seguito vedremo come installarla su un server debian headless.

Per prima cosa dovremo installare Java: l'ultima versione attualmente disponibile di serviio richiede che sia installato java 8. Per l'installazione di java rimando ad un mio vecchio post.

Unaa volta installato java dovremo installare ffmpeg. La versione di ffmpeg che si trova nei repository debian è piuttosto vecchia quindi consiglio di prendere quella compilata staticamente per la propia architettura (32/64 bit) direttamente da qui.

Arrivati a questo punto possiamo scaricare Serviio da questo link.

L'installazione prevede di scompattare l'archivio scaricato in una directory a piacere. Nel caso si esegua un upgrade è sufficiente ricordarsi di portare la directory library dalla precedente versione, in questo modo non si perdono i riferimenti alle librerie che si sono condivise.

Se si vuole far partire serviio all'avvio del computer si può creare uno script di init. A questo link ne ho trovato uno che riporto qui per completezza: in

/etc/default

si deve creare il file con nome serviio con il seguente contenuto:

#########################################################
#- Daemon Script Configuration for Serviio Media Server
#- By Ian Laird
#- /etc/default/serviio
#########################################################
 
NAME="Serviio Media Server"
DAEMON="/opt/serviio-current/bin/serviio.sh"    ## Update this to point at serviio_root/bin/serviio.sh
SERVICE_ACCOUNT="gtrev"                       ## change to an appropriate username, DON'T RUN UNDER ROOT!

mentre in:

/etc/default

si deve inserire:

#!/bin/bash
#
#########################################################
#- Daemon script for Serviio media server
#- By Ian Laird; converted for Debian by Jacob Lundberg
#- /etc/init.d/serviio
#########################################################
#
### BEGIN INIT INFO
# Provides:          serviio
# Required-Start:    $local_fs $remote_fs $network $syslog
# Required-Stop:     $local_fs $remote_fs $network $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# X-Interactive:     true
# Short-Description: Start/stop serviio media server
# Description:       The Serviio media server makes your media available to
#                    all kinds of networked devices.
### END INIT INFO
 
 
. /lib/lsb/init-functions
 
if [ -f /etc/default/rcS ]; then
        . /etc/default/rcS
fi
 
 
DAEMON_STOP=" -stop"
NAME="$(basename $0)"
PIDFILE="/var/run/serviiod.pid"
TIMEOUT=10
 
if [ -f /etc/default/serviio ]; then
        . /etc/default/serviio
fi
 
[ -x "$DAEMON" ] || exit 0
 
 
running() {
        if [ "x$1" == "x" ]; then
                echo 0
                return 1
        fi
 
        PS=$(ps h -p $(echo $1 | sed -r 's/[\t \n]+/ -p /') | wc -l)
        echo $PS
 
        if [ $PS -gt 0 ]; then
                return 0
        else
                return 1
        fi
}
 
 
start() {
        log_daemon_msg "Starting Serviio media server daemon" "$NAME"
        start-stop-daemon --start -q -b -p "$PIDFILE" -m -c "${SERVICE_ACCOUNT}" -x "${DAEMON}"
        log_end_msg $?
}
 
stop() {
        log_daemon_msg "Stopping Serviio media server daemon" "$NAME"
        if [ -r "$PIDFILE" ]; then
                PIDS=$(pstree -p $(<"$PIDFILE") | awk -F'[\(\)]' '/^[A-Za-z0-9]/ { print $2" "$4; }')
                if running "$PIDS" > /dev/null; then
                        "${DAEMON}" "${DAEMON_STOP}"
                        for PID in $PIDS; do
                                if running $PID > /dev/null; then
                                        kill -TERM $PID
                                fi
                        done
                fi
                COUNTDOWN=$TIMEOUT
                while let COUNTDOWN--; do
                        if ! running "$PIDS" > /dev/null; then
                                break
                        fi
                        if [ $COUNTDOWN -eq 0 ]; then
                                for PID in $PIDS; do
                                        if running $PID > /dev/null; then
                                                kill -KILL $PID
                                        fi
                                done
                        else
                                echo -n .
                                sleep 1
                        fi
                done
        fi
 
        if running "$PIDS" > /dev/null; then
                log_end_msg 1
        else
                rm -f "$PIDFILE"
                log_end_msg $?
 
        fi
}
 
status() {
        echo -n "$NAME should be"
        if [ -r "$PIDFILE" ]; then
                echo -n " up with primary PID $(<"$PIDFILE")"
                PIDS=$(pstree -p $(<"$PIDFILE") | awk -F'[\(\)]' '/^[A-Za-z0-9]/ { print $2" "$4; }')
                RUNNING=$(running "$PIDS")
                if [[ $RUNNING && $RUNNING -gt 0 ]]; then
                        echo -n " and $RUNNING processes are running."
                else
                        echo -n " but it is not running."
                fi
        else
                echo -n " stopped."
        fi
        echo
}
 
 
case "${1:-}" in
        start)
                start
        ;;
        stop)
                stop
        ;;
        restart)
                stop
                start
        ;;
        status)
                status
        ;;
        *)
                log_success_msg "Usage: /etc/init.d/$NAME {start|stop|restart|status}"
                exit 1
        ;;
esac
 
exit 0

Dopo aver creato i file con il contenuto esposto si deve:

  # chmod 755 /etc/init.d/serviio
  # update-rc.d serviio defaults

In questo modo ad ogni riavvio della macchina il servizio ripartirà in automatico.

Per controllare serviio possiamo usare il suo client facendo attenzione che il client richiede che sia attivo il server X. Ovviamente nel caso in cui, come me, abbiate installato serviio in un server headless è sempre possibile connettersi al servizio dall'esterno. Bisognerà disporre di un computer che abbia l'ambiente grafico attivo: si dovrà scompattare l'archivio di serviio e modificare il file serviio-console.sh indicando l'IP del server che abbiamo prima configurato:

--- /tmp/serviio-console.sh     2015-03-26 23:14:55.916278243 +0100
+++ serviio-console.sh  2014-04-03 20:01:28.731745698 +0200
@@ -54,7 +54,7 @@
 SERVIIO_CONSOLE_CLASS_PATH="$SERVIIO_CONSOLE_HOME/lib/*:$SERVIIO_CONSOLE_HOME/config"
 
 # Setup Serviio specific properties
-JAVA_OPTS="-Dserviio.home=$SERVIIO_CONSOLE_HOME -Djava.net.preferIPv4Stack=true"
+JAVA_OPTS="-Dserviio.remoteHost=10.0.0.12 -Dserviio.home=$SERVIIO_CONSOLE_HOME -Djava.net.preferIPv4Stack=true"
 
 # For Cygwin, switch paths to Windows format before running java
 if $cygwin; then

e sarà sufficiente attivare la console:

gtrev@debian-laptop:~$ cd serviio/serviio-1.4.1.2/bin/
gtrev@debian-laptop:~/serviio/serviio-1.4.1.2/bin$ ./serviio-console.sh 

Programmazione: 

Gestione delle immagini iso da riga di comando

Esistono svariati programmi con interfaccia grafica che permettono la creazione e la masterizzazione di immagini ISO. Le stesse funzionalità si ritrovano anche in comandi eseguibili comodamente dalla riga di comando. Di seguito ne vediamo alcuni.

Se dobbiamo creare un'immagine ISO a partire da una directory a filesystem:

 root@debian:~# genisoimage -JR -o /tmp/test.iso /home/gtrev/foto/
I: -input-charset not specified, using utf-8 (detected in locale settings)
  4.24% done, estimate finish Wed Mar  4 22:33:52 2015
  8.48% done, estimate finish Wed Mar  4 22:33:40 2015
 12.71% done, estimate finish Wed Mar  4 22:33:36 2015
 16.96% done, estimate finish Wed Mar  4 22:33:34 2015
 21.19% done, estimate finish Wed Mar  4 22:33:38 2015
 25.42% done, estimate finish Wed Mar  4 22:33:36 2015
 29.66% done, estimate finish Wed Mar  4 22:33:35 2015
 33.91% done, estimate finish Wed Mar  4 22:33:37 2015
 38.14% done, estimate finish Wed Mar  4 22:33:36 2015
 42.38% done, estimate finish Wed Mar  4 22:33:38 2015
 46.61% done, estimate finish Wed Mar  4 22:33:37 2015
 50.84% done, estimate finish Wed Mar  4 22:33:36 2015
 55.08% done, estimate finish Wed Mar  4 22:33:36 2015
 59.32% done, estimate finish Wed Mar  4 22:33:37 2015
 63.55% done, estimate finish Wed Mar  4 22:33:36 2015
 67.79% done, estimate finish Wed Mar  4 22:33:36 2015
 72.03% done, estimate finish Wed Mar  4 22:33:37 2015
 76.27% done, estimate finish Wed Mar  4 22:33:36 2015
 80.50% done, estimate finish Wed Mar  4 22:33:36 2015
 84.75% done, estimate finish Wed Mar  4 22:33:37 2015
 88.99% done, estimate finish Wed Mar  4 22:33:36 2015
 93.22% done, estimate finish Wed Mar  4 22:33:36 2015
 97.46% done, estimate finish Wed Mar  4 22:33:37 2015
Total translation table size: 0
Total rockridge attributes bytes: 26712
Total directory bytes: 0
Path table size(bytes): 10
Max brk space used 42000
118014 extents written (230 MB)
root@debian:~# 

L'opzione -J indica di usare le estensioni Joliet, mentre l'opzione -R di usare quelle Rock Ridge.

Se dobbiamo montare un'immagine ISO il comando da usare è:

root@debian:~# mount -t iso9660 -o ro,loop,noauto debian-7.8.0-amd64-netinst.iso /tmp/iso

Se dobbiamo masterizzare un'immagine su un CD/DVD:

root@debian:~# growisofs -dvd-compat -Z /dev/sr0=/var/tmp/debian-7.8.0-amd64-netinst.iso 
Executing 'builtin_dd if=/var/tmp/debian-7.8.0-amd64-netinst.iso of=/dev/sr0 obs=32k seek=0'
/dev/sr0: "Current Write Speed" is 8.2x1352KBps.
     491520/232783872 ( 0.2%) @0.0x, remaining 31:30 RBU 100.0% UBU   0.0%
   10092544/232783872 ( 4.3%) @2.1x, remaining 2:34 RBU 100.0% UBU  98.6%
   26214400/232783872 (11.3%) @3.5x, remaining 1:18 RBU  99.9% UBU  98.6%
   42434560/232783872 (18.2%) @3.5x, remaining 1:02 RBU 100.0% UBU  98.6%
   58785792/232783872 (25.3%) @3.5x, remaining 0:50 RBU 100.0% UBU  99.0%
   75300864/232783872 (32.3%) @3.6x, remaining 0:41 RBU 100.0% UBU  98.6%
   91914240/232783872 (39.5%) @3.6x, remaining 0:36 RBU 100.0% UBU  98.6%
  108658688/232783872 (46.7%) @3.6x, remaining 0:30 RBU 100.0% UBU  98.6%
  125566976/232783872 (53.9%) @3.7x, remaining 0:26 RBU 100.0% UBU  98.6%
  137428992/232783872 (59.0%) @2.6x, remaining 0:23 RBU 100.0% UBU  98.6%
  152043520/232783872 (65.3%) @3.2x, remaining 0:19 RBU 100.0% UBU  98.1%
  169279488/232783872 (72.7%) @3.7x, remaining 0:15 RBU 100.0% UBU  98.6%
  186613760/232783872 (80.2%) @3.8x, remaining 0:10 RBU 100.0% UBU  98.6%
  204111872/232783872 (87.7%) @3.8x, remaining 0:06 RBU  85.4% UBU  98.1%
  221708288/232783872 (95.2%) @3.8x, remaining 0:02 RBU  33.0% UBU  98.6%
builtin_dd: 113664*2KB out @ average 3.2x1352KBps
/dev/sr0: flushing cache
/dev/sr0: updating RMA
/dev/sr0: closing disc
/dev/sr0: reloading tray
root@debian:~# 

Senza passare per l'immagine è possibile masterizzare direttamente un insieme di file con il comando:

root@debian:~#  growisofs -dvd-compat -Z /dev/sr0 -J -R /home/gtrev/foto

Se invece vogliamo creare un chiavetta USB da utilizzare per fare il boot della nostra immagine ISO di debian:

root@debian:~# dd if=/var/tmp/debian-7.8.0-amd64-netinst.iso of=/dev/sdb oflag=direct bs=1048576                                                                                                               
222+0 record dentro
222+0 record fuori
232783872 byte (233 MB) copiati, 60,0544 s, 3,9 MB/s
root@debian:~#

Programmazione: 

Restore dei pacchetti installati in debian

Quando si usa una distrubuzione linux è difficile che non ci si discosti mai dall'installazione iniziale: ci sarà quindi tutta una serie di programmi che vengono installati in momenti successivi e che vanno ad arricchire il nostro sistema.

Il problema che si pone è quindi, nel caso di una reinstallazione del sistema, di installare oltre alla distribuzione iniziale anche tutto questo insieme di pacchetti.

Per fare ciò debian mette a disposizione dei facili comandi. Vediamo come procedere.

Per prima cosa dovremo salvarci da qualche parte la lista dei pacchetti installati. Il comando da usare è quindi:

 # dpkg --get-selections > /tmp/packages.txt

Una seconda cosa da salvare è la lista dei repositori attivati. In debian questa lista si trova nel percorso:

 /etc/apt/sources.list
 /etc/apt/sources.list.d/

Una volta installata la nuova macchina dovremo preoccuparci di attivare tuti i repository dei pacchetti che avevamo precedentemente utilizzato e quindi sarà sufficiente eseguire i seguenti comandi:

 # dpkg --set-selections < /tmp/packages.txt
 # apt-get -y update
 # apt-get dselect-ugrade

Con questi comandi i pacchetti presenti nella lista verranno aggiornati oppure installati ex novo.

Programmazione: 

Pagine