Costruire un home-server con Linux Ubuntu 11.10

Spesso si desidera avere in casa un server per la condivisione dei file tra i membri della famiglia, per fare il backup dei propri documenti, per realizzare un server DLNA o DAAP in modo da fruire dei propri contenuti multimediali (foto, filmati e musica). Proviamo quindi a configurare un server ad hoc per questi scopi basandoci sull’ultima distribuzione Linux Ubuntu Server 11.10.

Per perseguire questo obiettivo, dobbiamo procurarci i seguenti software:

  • Linux Ubuntu Server 11.10
  • Shairport4w
  • Twonky Server 7.0.7

Seguite i capitoli Linux Ubuntu Server 11.10 e Twonky Server 7.0.7 di questo articolo che vi spiegano come recuperare il software e come configurarlo.

Per completare il tutto con servizi aggiuntivi, potete acquistare un dominio tutto vostro presso i numerosi provider (DynDNS, Aruba, Mister Domain, ecc…). Io ho acquistato il dominio gieffe.name per pochi euro l’anno e sarà su questo che verterà l’articolo. Ovviamente, con le dovute modifiche del caso, potrete adattarlo alle vostre esigenze

Ci prefiggiamo di installare su tale server una serie di servizi che ci consentiranno di avere numerose funzionalità e comodità nella rete:

  • DNS e DHCP: ci permetterà di avere un server DNS tutto nostro che soddisfi le richieste di accesso ai servizi della nostra LAN; sarà comodissimo soprattutto se sono presenti diversi dispositivi a casa vostra (stampanti, lettori blu-ray, altri PC, ecc…
  • NTP: buona norma è che tutti i dispositivi di networking della casa abbiano l’ora sincronizzata con un server centrale… perché non usare il nostro server Ubuntu per farlo?
  • CUPS: per chi ha dispositivi Apple mobili (iPhone e iPad) offriamo la possibilità di stampare i documenti attivando la funzionalità Airprint integrata in CUPS!
  • DAAP: sfruttiamo al massimo i nostri iTunes, attivando la libreria condivisa sul nostro server Ubuntu.
  • Airplay: immergiamoci nella tecnologia Airplay di Apple, che ci consente di avere musica in ogni stanza!
  • DLNA: attiviamo le funzionalità di Twonky Server per sfruttare i nostri dispositivi DLNA in rete. Per pochi euro, avremmo la possibilità di non alzarci dal divano e di scegliere cosa vedere di volta in volta semplicemente scorrendo la lista dei film con il nostro telecomando!

Linux Ubuntu Server 11.10

Dapprima procuriamoci la ISO necessaria ad installare il sistema operativo.

Da questo link http://www.ubuntu.com/download/ubuntu/download scegliete la versione (32bit o 64bit) che più si adatta alle vostre esigenze, anche se, per motivi di compatibilità verso Twonky Server 7.0.7, vi consiglio la versione a 32bit.

Procedete con l’installazione del sistema operativo vero e proprio (che esula da questo articolo), per il quale ci sono numerosi articoli a disposizione. Ricordatevi di selezionare solo i pacchetti OpenSSH Server e Samba Server durante l’installazione. Fate riferimento alla documentazione ufficiale, se ne avrete bisogno; la trovate qui:

https://help.ubuntu.com/11.10/serverguide/C/installing-from-cd.html

Per comodità, ho scelto come hostname del mio server il nome nas.gieffe.name, un po’ per ricordare che di un NAS alla fin fine si tratta! Adeguate il nome del vostro server come più vi pare e piace. Infine ho deciso di assegnargli l’IP 192.168.1.4/24.

Installato Ubuntu? Fatto? Bene… cominciamo.

DNS e DHCP

Assicuratevi di aver disabilitato i servizi DHCP sul vostro router e sui vari altri eventuali server presenti in casa. Impostate quindi un IP statico sul server Ubuntu. Per fare questo, è sufficiente editare il file /etc/network/interfaces in modo analogo a quanto segue:


# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
        address 192.168.1.4
        netmask 255.255.255.0
        network 192.168.1.0
        broadcast 192.168.1.255
        gateway 192.168.1.1
        # dns-* options are implemented by the resolvconf package, if installed
        dns-search gieffe.name

Ora passiamo alla configurazione del file /etc/resolv.conf, in modo che il vostro server (e di conseguenza anche i client) possano risolvere gli hostname diversi dal proprio e del vostro server Ubuntu.

Infatti Dnsmasq (il software che useremo per implementare i servizi DNS e DHCP) utilizzerà proprio i nameserver (DNS) impostati nel file resolv.conf per risolvere (si chiama operazione di forward) i nomi pubblici!

Per un’ottima configurazione, utilizzeremo per la risoluzione degli hostname il nostro server Ubuntu come server primario, seguito dai DNS pubblici di DynDNS, presso il quale potete attivare un dominio. Vi consiglio di farlo… potrete avere anche un vostro server Web pubblico!

Il file /etc/resolv.conf sarà fatto più o meno così:


domain gieffe.name
search gieffe.name
nameserver 192.168.1.4
nameserver 216.146.35.35
nameserver 216.146.36.36

Adattatelo ovviamente al vostro caso!

Passiamo quindi all’installazione di Dnsmasq; da una shell bash del server Ubuntu, eseguiamo il comando:

administrator@nas:~$ sudo apt-get install dnsmasq

Dnsmasq installa entrambe i servizi DNS e DHCP. Configuriamo ora il servizio affinché possa rispondere a tutte le richieste DHCP di tutti i client della rete e invii loro informazioni sul DNS da usare, che appunto sarà il nostro server Ubuntu.

Il file di configurazione di Dnsmasq (/etc/dnsmasq.conf) è abbastanza complesso; in ogni caso, è anche ben commentato, perciò non dovreste avere difficoltà a modificare altri parametri di vostro gradimento. Potete editare il file con il seguente comando:

administrator@nas:~$ sudo vi /etc/dnsmasq.conf

Se non volete usare vi come editor per i file di configurazione, perché magari lo trovate ostico, c’è anche nano. Vedete voi quale si adatta meglio al vostro modo di operare!

I punti importanti per noi saranno i seguenti (ricercateli con l’editor di testo e sostituite i valori corretti):


#non eseguire il forward di nomi senza un punto o senza la parte di dominio
domain-needed

#non eseguire il forward delle classi appartenenti alle sottoreti private
bogus-priv

#imposta Dnsmasq affinché usi l'elenco dei nameserver in resolv.conf
#    nell'ordine che appare nel file, e non a caso
strict-order

#per semplificare il file /etc/hosts, abilitiamo il completamento automatico
#    del dominio
expand-hosts

#imposta il nome del dominio che hai scelto per la tua LAN
domain=gieffe.name

#imposta il range degli indirizzi IP che verranno rilasciati ai client
#    DHCP, comprensivo della sottorete e del lease a 12 ore
dhcp-range=192.168.1.32,192.168.1.63,255.255.255.0,12h

#imposta l'IP del gateway che verrà passato ai client DHCP
dhcp-option=option:router,192.168.1.1

#imposta l'IP del server NTP che verrà passsato ai client DHCP
dhcp-option=option:ntp-server,192.168.1.4

#rende il server Ubuntu l'"authoritative" DHCP server sulla LAN
#    (e in questo caso è l'unico)
dhcp-authoritative

A questo punto, potete modificare il vostro file /etc/hosts inserendo gli IP e relativo hostname di tutti gli apparati di networking che avete in casa. Ad esempio il mio è diventato:

 

# Localhost
127.0.0.1	localhost
192.168.1.4     nas nas.gieffe.name

# Networking
192.168.1.1	firewall
192.168.1.2	airportextreme
192.168.1.3	storage
192.168.1.5	bd-390
192.168.1.6	bd-c5500

# Server
192.168.1.16	printer
192.168.1.17	dc
192.168.1.18	backup
192.168.1.19	mediaportal

# Desktop
192.168.1.128	matrix
192.168.1.129	htpc
192.168.1.130	imac

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Dnsmasq è ora configurato come DHCP e DNS server per la votra LAN. Basta solo un riavvio tramite il comando:

administrator@nas:~$ sudo service dnsmasq restart

NTP

E’ importante avere i server della propria LAN con l’ora impostata correttamente, magari sincronizzata con l’orario nazionale; per cui attiviamo sul server Ubuntu anche il servizio NTP, del quale sono già stati informati dell’esistenza i nuovi client DHCP, da quando abbiamo concluso la configurazione e abbiamo riavviato i servizi DNS e DHCP.

Installiamo il servizio NTP tramite il comando:

administrator@nas:~$ sudo apt-get install ntp

e editiamo poi il file /etc/ntp.conf, in modo da inserire i server NTP dell’Istituto Nazionale di Ricerca Metrologica (INRIM) (raggiungibile all’URL http://www.inrim.it, che rappresentano i server ufficiali NTP di riferimento per l’ora italiana. Il file è lungo, ma la parte che ci interessa è questa:


# Specify one or more NTP servers.

# Use servers from the NTP Pool Project. Approved by Ubuntu Technical Board
# on 2011-02-08 (LP: #104525). See http://www.pool.ntp.org/join.html for
# more information.
server ntp1.inrim.it
server ntp2.inrim.it

Riavviate il servizio dopo la modifica tramite il comando seguente ed il vostro server NTP è configurato:

administrator@nas:~$ sudo service ntp restart

CUPS

Per chi possiede apparati Apple (tipo iPhone e iPad) ha piacere stampare qualche documento ogni tanto. Purtroppo gli apparati iOS come unica tecnologia di stampa, usano lo standard Airprint di Apple.

Tuttavia, l’ultima versione di CUPS (distribuita proprio con Linux Ubuntu Server 11.10) contiene proprio le funzionalità di Airprint! E quindi, usiamole!

Dapprima installiamo i package di CUPS (di solito già presente con l’installazione standard), tramite i soliti comandi:

administrator@nas:~$ sudo apt-get update
administrator@nas:~$ sudo apt-get upgrade
administrator@nas:~$ sudo apt-get install cups

Eseguiamo una copia di backup del file di configurazione. Nel servizio CUPS infatti è integrato un server di amministrazione che ci aiuterà a configurare le stampanti di rete e renderle disponibili ai dispositivi mobile Apple, ma il file di configurazione deve essere modificato. Diamo perciò i seguenti comandi:

administrator@nas:~$ sudo cp /etc/cups/cupsd.conf /etc/cups/cupsd.conf.original
administrator@nas:~$ sudo chmod a-w /etc/cups/cupsd.conf.original

Come default in Ubuntu, il server CUPS esegue il bind del servizio solo sull’interfaccia di rete di loopback (con indirizzo IP 127.0.0.1). Dobbiamo perciò dire al server CUPS di eseguire il listening anche sull’interfaccia di rete fisica del nostro server (quella che ho scelto avere l’IP 192.168.1.4 nel mio caso). Per fare questo, va editato il file /etc/cups/cupsd.conf di modo che la direttiva Listen appaia come segue:


Listen localhost:631
Listen /var/run/cups/cups.sock
Listen 192.168.1.4:631      # Listen on the LAN interface, Port 631 (IPP)

La Web Interface che consente l’amministrazione del server CUPS è poi blindata. Nessuno può entrare se prima non modifichiamo il file di configurazione aggiungendo per lo meno la nostra rete tra gli host che possono accedere al servizio. Applichiamo quindi anche queste modifiche al file /etc/cups/cupsd.conf, aggiungendo le righe evidenziate in grassetto:


# Restrict access to the server...
<Location />
  Order allow,deny
  Allow From 192.168.1.0/24
</Location>

# Restrict access to the admin pages...
<Location /admin>
  Order allow,deny
  Allow From 192.168.1.0/24
</Location>

# Restrict access to configuration files...
<Location /admin/conf>
  AuthType Default
  Require user @SYSTEM
  Order allow,deny
  Allow From 192.168.1.0/24
</Location>

 

A questo punto aprite un browser all’URL https://192.168.1.4:631/admin e vi ritrovate con l’interfaccia di amministrazione di CUPS. Una volta lì, potete scegliere di aggiungere la vostra stampante e di renderla disponibile a tutti i sistemi. Fatto questo, ritroverete la stampante disponibile anche sui vostri dispositivi mobile Apple!

DAAP

I dispositivi sui quali è stato installato iTunes, cercano librerie presenti nella LAN che seguono lo standard DAAP. Inoltre, i dispositivi mobile Apple sono dotati di una tecnologia che consente di controllare la riproduzione di contenuti musicali su dispositivi che integrano Airplay tramite il software Remote.

Linux Ubuntu Server 11.10 viene distribuito con un package che fornisce le funzionalità DAAP. Il package distribuito si chiama forked-daapd. Procediamo all’installazione con il solito comando:

administrator@nas:~$ sudo apt-get install forked-daapd

Tuttavia, il package attualmente distribuito contiene una incompatibilità con le nuove versioni di Tunes (dalla 5 in poi). Ho studiato un thread su GitHub che tratta di tale incompatibilità e ho preparato un package ricompilato con la patch. Preleviamolo dal link http://www.gieffe.name/download/forked-daapd_0.19-1ubuntu1_i386.deb tramite il comando:

administrator@nas:~$ wget http://www.gieffe.name/download/forked-daapd_0.19-1ubuntu1_i386.deb

Una volta scaricato (prestate attenzione alla versione 32bit o 64bit! Sceglietela in funzione della scelta iniziale del sistema operativo), per installare la patch, rimuoviamo il package precedentemente installato e installiamo il package locale tramite i comandi:

administrator@nas:~$ sudo apt-get remove forked-daapd
administrator@nas:~$ sudo dpkg -i forked-daapd_0.19-1ubuntu1_i386.deb

Purtroppo d’ora in poi dovrete fare attenzione agli upgrade. Se eseguite l’upgrade con il classico comando sudo apt-get upgrade, rischiate di risovrascrivere la versione corretta.

A questo punto modifichiamo il file di configurazione del server DAAP per rendere disponibile la nostra libreria musicale ai dispositivi mobile Apple o sui PC/Mac sui quali è stato installato iTunes. Eseguendo il comando seguente, potrete specificare nel file di configurazione il path dove si trovano i vostri file musicali:

administrator@nas:~$ sudo vi /etc/forked-daapd.conf

che nel mio caso diventa:


general {
	# Username
	uid = "daapd"
	logfile = "/var/log/forked-daapd.log"
	# Database location
#	db_path = "/var/cache/forked-daapd/songs3.db"
	# Available levels: fatal, log, warning, info, debug, spam
	loglevel = log
	# Admin password for the non-existent web interface
	admin_password = "unused"
	# Enable/disable IPv6
	ipv6 = no
}

# Library configuration
library {
	# Name of the library as displayed by the clients
	# %h: hostname, %v: version
	name = "My Music on %h"
	# TCP port to listen on. Default port is 3689 (daap)
	port = 3689
	# Password for the library. Optional.
#	password = ""

	# Directories to index
	directories = { "/mnt/externalhd-1TB-01/Music" }
	# Directories containing compilations
	# Matches anywhere in the path (not a regexp, though)
	compilations = { "Compilation" }

	# Should iTunes metadata override ours?
#	itunes_overrides = true

	# Formats: mp4a, mp4v, mpeg, alac, flac, mpc, ogg, wma, wmal, wmav, aif, wav
	# Formats that should never be transcoded
#	no_transcode = { "alac", "mp4a" }
	# Formats that should always be transcoded
#	force_transcode = { "ogg", "flac" }
}

# Local audio output
audio {
	# AirTunes name - used in the speaker list in Remote
	nickname = "Computer"
	# Audio device name for local audio output
#	card = "default"
	# Mixer channel to use for volume control - ALSA/Linux only
	# If not set, PCM will be used if available, otherwise Master.
#	mixer = ""
}

# Airport Express device
#apex "ApEx" {
	# AirTunes password
#	password = "s1kr3t"
#}

Eseguite il riavvio del servizio tramite il comando:

administrator@nas:~$ sudo service forked-daapd restart

Dopo il riavvio dovreste vedere nel vostro iTunes apparire la libreria, che pian piano si popolerà di tutti i contenuti musicali. 🙂

Airplay

Per utilizzare anche la funzionalità di Airplay presente nel servizio DAAP appena installato, dobbiamo fare in modo che l’utente daapd (con cui viene eseguito il processo del servizio DAAP) appartenga anche al gruppo audio, poiché deve poter generare uno strema audio che verrà rediretto al dispositivo Airplay prescelto. Per fare questo, dapprima installiamo il package ALSA, che offrirà le funzionalità di audio streaming, tramite il comando:

administrator@nas:~$ sudo apt-get install alsa-base alsa-tools

ed infine aggiungiamo l’utente daapd al gruppo audio:

administrator@nas:~$ sudo adduser daapd audio

OK… riavviamo il server DAAP con il comando:

administrator@nas:~$ sudo service forked-daapd restart

Tramite iTunes ora potete ridirigere l’output dei vostri file multimediali su tutti i dispositivi Airplay presenti nella vostra rete!

Se avete installato nel vostro iPad o iPhone l’app Remote distribuita gratuitamente dalla Apple (ulteriori informazioni le trovate qui: http://www.apple.com/itunes/remote), riuscirete a controllare lo streaming audio dal vostro dispositivo mobile Apple, ridirezionando lo streaming audio sul vostro dispositivo di riproduzione Airplay preferito, portando la musica in ogni punto della vostra casa!

Per attivare la funzionalità su Remote, è sufficiente (come descritto nella home page del progetto: https://github.com/jasonmc/forked-daapd) creare un file nella cartella dove sono presenti i file musicali con estensione .remote e contentente il nome del dispositivo seguito da un a capo e dal codice che compare nel dispositivo. Nel mio caso, ho creato il file /mnt/externalhd-1TB-01/Music/ipad.remote con il seguente contenuto:


Giovanni Fontanel's iPad
5364

e dopo pochi secondi Remote ha cominciato a caricare la libreria!

Supponiamo ora di voler riprodurre una o più canzoni sul nostro PC… sì, proprio sul PC dal quale state leggendo questo articolo (o perlomeno la maggioranza di voi lo sta facendo)!! Per farlo, sarà sufficiente installare Shairport4w (eccovi l’URL di progetto http://sourceforge.net/projects/shairport4w). Vi rimando ai numerosi articoli presenti sul Web per l’installazione… provvederò al più presto a scrivere un articolo in italiano per l’occasione.

Se invece volete riprodurre la vostra musica in cucina, in camera, in bagno… nessun problema. Acquistando un Airport Express (con tecnologia Airplay integrata) e un paio di casse, porterete la musica dove volete! Fate riferimento all’articolo Apple: http://www.apple.com/it/airportexpress.

Twonky Server 7.0.7

Per creare un server DLNA, ho scelto Twonky Server, un prodotto installato anche su numerosi dispositivi “preconfezionati” (tipo il NAS della QNAP) e che non mi ha dato mai problemi con i client DLNA che ho avuto modo di provare (un lettore BluRay della LG ed uno della Samsung). Purtroppo tale prodotto non è gratuito, tuttavia il costo veramente irrisorio (attorno ai €10,00) e l’ottimo servizio di assistenza che ho avuto modo di provare (purtroppo sui server a 64bit funziona solo in emulazione 32bit), lo rendono comunque molto appetibile!

DLNA

Per cui, sborsate i soldi e scaricate dal seguente link il software con il classico comando wget (fate riferimento comunque alla pagina di download per recuperare l’URL della versione più aggiornata: http://twonky.com/products/twonkylinux/downloads.aspx).

administrator@nas:~$ wget http://twonky.com/upfiles/twonky-i386-glibc-2.2.5-special-7.0.7.sh

e cominciamo l’installazione. Diamo i seguenti comandi che eseguiranno l’installazione vera e propria:

administrator@nas:~$ chmod 744 twonky-i386-glibc-2.2.5-special-7.0.7.sh
administrator@nas:~$ sudo ./twonky-i386-glibc-2.2.5-special-7.0.7.sh

Poiché il server parte ma senza le directory corrette, ci troviamo una serie di log alla console che ci avvisano dell’errore. Potete tranquillamente chiudere il processo di installazione con un CTRL+C. Tranquilli, il tutto è andato a buon fine. Se volete, potete procedere con l’installazione manuale dal file zip, ma non ne vedo il motivo. Sistemiamo subito l’errore creando le cartelle corrette tramite i seguenti comandi:

administrator@nas:~$ sudo mkdir /var/twonky
administrator@nas:~$ sudo mkdir /var/twonky/TwonkyServer

Conclusa l’installazione, dobbiamo modificare un paio di configurazioni per far ripartire il servizio DLNA allo startup del server Ubuntu. Eseguiamo quindi i seguenti comandi:

administrator@nas:~$ sudo /etc/init.d/twonkyserver stop
administrator@nas:~$ sudo rm /etc/init.d/twonkyserver

Creiamo il file /etc/init/twonkyserver.conf per il bootstrap:

administrator@nas:~$ sudo vi /etc/init/twonkyserver.conf

che editiamo come segue:


# Mostly Raymond Day's work, thanks for the suggestion.
# If your going to run Twonkyserver as a daemon,
# append the -D to the command line at the bottom.
# Not currently running as a daemon to support
# transcoding. The default is with a -D so feel
# free to add it if you don't intend to use
# transcoding.
 
description "TonkyMedia UPnP Server"
 
start on (local-filesystems and net-device-up IFACE!=lo)
stop on runlevel [!2345]
 
exec /usr/local/twonky/twonkyserver

Diamo l’ultima serie di comandi per rendere operativo il server allo startup (inclusa la creazione di alcune directory di default che poi potremo eliminare):

administrator@nas:~$ sudo ln -s /lib/init/upstart-job /etc/init.d/twonkyserver
administrator@nas:~$ sudo service twonkyserver start

A questo punto, il server DLNA è attivo! Possiamo cominciare la configurazione tramite la Web Interface raggiungibile all’URL http://nas.gieffe.name:9000/.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *