13 luglio 2017

tutorial: come avviare server teamspeak e xmpp sul raspberry pi 3


Benvenuti!
Questo tutorial vi aiuterà a creare un server per la gestione di un sistema di comunicazione istantanea (sia vocale che testuale) con l'ausilio di un raspberry pi 3 (qui trovate tutti i miei focus sul dispositivo).

Nota: il presente articolo contiene una infarinatura generale ed alcuni dettagli sono stati tralasciati. Se volete approfondire, non esitate a lasciare un commento o a contattarmi sui canali social.

Prima di addentrarci, vi riporto il video di supporto a questa guida che ho pubblicato sul mio canale YouTube:


Inoltre vi segnalo che nella pagina dedicata troverete tutti i tutorial da me pubblicati.


1. l'attrezzatura minima per iniziare


Per avviare e utilizzare server di chat occorrono:
  • un raspberry pi 3 + una microSD + un alimentatore (da almeno 2A)
  • un PC o smartphone o tablet
  • Raspbian OS
  • una connessione ad internet + un router

Per quanto riguarda il primo punto non occorre altro: utilizzeremo il raspberry pi 3 sempre da remoto, quindi non sarà necessario utilizzare alcuna periferica collegata al pi. Sarà invece indispensabile avere un alimentatore che eroghi in uscita almeno 2A.
Per l'utilizzo finale sfrutteremo il raspberry pi a mo' di server tramite client dedicati installati su PC, smartphone o tablet.
Serve commentare il quarto punto (=D)?


2. TeamSpeak vs XMPP


L'idea alla base di questo focus è quella di creare un server privato, in esecuzione sul raspberry pi 3, che ci consenta di gestire chat tra più utenti. Esistono tanti protocolli di messaggistica istantanea, proprietari ed open-source: in questo tutorial prenderemo in esame due alternative, appartenenti proprio a questi due mondi.

TeamSpeak 3

TeamSpeak è un software VoIP costruito per essere sicuro, per fornire una qualità vocale ottimale, per essere scalabile e personalizzabile. Giunto alla versione 3, spesso è utilizzato come tool di comunicazione nell'online gaming, ma è in voga anche in ambiti come quello educativo (vedi i corsi online) e training, nel mondo lavorativo, etc. Si basa sul concetto classico di server centrale dedicato e client che si collegano ad esso al fine di scambiare messaggi (testuali o vocali) con gli altri client anch'essi collegati allo stesso server. TeamSpeak è un software proprietario, rilasciato con licenza freeware, quindi è possibile installarlo su Windows, Linux, Mac, BSD (per quest'ultimo esiste solo la parte server), e ci sono client per praticamente ogni sistema operativo (generalmente gratuiti), anche mobile come iOS ed Android (anche se per queste due piattaforme le app sono a pagamento). In generale, la parte server può essere utilizzata gratuitamente fino a 32 utenti simultanei; per un uso non-commerciale esistono licenze non-profit che permettono l'accesso fino a 512 utenti contemporanei, e questi 512 slot disponibili possono essere suddivisi fino ad un massimo di 2 istanze virtuali del server.

Ricapitolando: TeamSpeak è uno dei tool di comunicazione più utilizzati (soprattutto nel mondo gaming) ed offre una marea di funzioni. La creazione di un server TeamSpeak è sì gratuita ma ci sono alcuni limiti d'uso dovuti alla licenza proprietaria con il quale è fornito; in più, come vedremo, tirar su un server TeamSpeak su raspberry pi richiede l'installazione di un tool di virtualizzazione di sistemi x86 su piattaforma ARM che può aggiungere costi.

XMPP

XMPP è un protocollo completamente open-source basato sul linguaggio XML. Il bello di essere completamente aperto e soprattutto utilizzando un approccio di sviluppo anch'esso aperto è che permette a chiunque di tirar su un proprio servizio XMPP ed interoperare con gli altri nodi della rete. Nei primi anni 2000 (e fino a non troppo tempo fa) molti dei servizi di messaggistica istantanea più diffusi erano compatibili con XMPP, ad esempio Google Talk (che proprio in questo periodo è stato definitivamente chiuso da BigG, peccato!) ma anche AIM, Facebook Chat, e Skype in qualche modo erano compatibili. A differenza di TeamSpeak, XMPP funziona alla stregua delle email: non c'è un server centralizzato che controlla tutto, ma chiunque può avere un proprio server XMPP e, proprio come accade per le email, gli account utente (chiamati JID) sono del tipo nomeutente@dominio, dove il dominio corrisponde al server al quale ci si registra (ad esempio un JID può essere utente@domino.com, insomma esattamente come accade con gli indirizzi email).

Ricapitolando: XMPP è un protocollo di comunicazione completamente aperto e decentralizzato, chiunque lo può implementare e può creare server e client compatibili. Nel caso specifico del raspberry pi esistono delle implementazioni server già pronte all'uso facilmente configurabili e senza limiti sul numero di utenti e quant'altro. Probabilmente le funzioni disponibili rispetto a protocolli più complessi (come quello TeamSpeak) sono minori, e la configurazione può richiedere qualche smanettamento, ma nel complesso con pochi e semplici passaggi a costo zero (o più o meno, come vedremo tra poco) si può tirar su un server di messaggistica istantanea. Esso inoltre è estendibile tramite plugin o estensioni di terze parti.


3. configurazione dei server su raspberry pi


Fatte le dovute premesse, vediamo come configurare i due server sul raspberry pi. Il primo passaggio è quello di avere Raspbian OS installato, accessibile da remoto via SSH ed aggiornato (sudo apt-get update e poi sudo apt-get upgrade && sudo apt-get dist-upgrade). Vi consiglio inoltre di cambiare la password di default dell'utente pi, soprattutto se pensate di esporre su internet il vostro server di messaggistica (in caso potete sfruttare l'utility con il comando sudo raspi-config nell'apposita sezione di cambio password).

TeamSpeak 3

L'installazione di TeamSpeak 3 su raspberry pi in teoria non sarebbe possibile poiché il software che gestisce il server è distribuito in binario (per via della licenza proprietaria) e compilato solamente per architetture x86: i raspberry pi come sappiamo sfruttano invece SoC ARM...
Tempo fa sia qui sul blog che sul mio canale YouTube vi ho parlato di un tool, chiamato ExaGear, che permette di eseguire software compilato per architetture x86 su raspberry pi (e non solo), e proprio grazie ad esso potremo lanciare i binari di TeamSpeak anche sul pi 3!

Una volta installato e configurato ExaGear Desktop, come vi ho fatto vedere nei focus a lui dedicati, entrando nella sua shell x86 potrete scaricare il pacchetto di TeamSpeak server (reperibile dal sito ufficiale) e scompattarlo. L'idea è quella di lanciare il server con un utente a lui dedicato piuttosto che come root o come utente "pi" generico, questi tutti i passi da seguire:
  • aggiungere un utente dedicato con sudo adduser teamspeak
  • impostare la password con sudo passwd teamspeak
  • creare la cartella in cui installare TeamSpeak con sudo mkdir /usr/local/teamspeak
  • darne il controllo all'utente appena creato con sudo chown teamspeak /usr/local/teamspeak
  • cambiare utente con su teamspeak
  • spostarsi nella cartella appena creata con cd /usr/local/teamspeak
  • scaricare i binari del server con wget http://dl.4players.de/ts/releases/3.0.13.7/teamspeak3-server_linux_x86-3.0.13.7.tar.bz2 (nota: file aggiornato alla stesura della guida, controllare nella pagina ufficiale per versioni più aggiornate)
  • estrarre il pacchetto con tar -xvjf teamspeak3-server_linux_x86-3.0.13.7.tar.bz2
  • eliminare il file scaricato con rm teamspeak3-server_linux_x86-3.0.13.7.tar.bz2

Una volta completate le operazioni indicate, sarà sufficiente lanciare lo script di configurazione iniziale (./ts3server_minimal_runscript.sh) che creerà l'utente di amministrazione e la password per l'accesso. Terminata questa configurazione che può richiede qualche minuto sarete pronti a lanciare il server vero e proprio!

Nota: annotate loginname, password e token che vengono generati dallo script appena lanciato e mostrati a schermo.

Per lanciare TeamSpeak 3 Server sarà sufficiente premere CTRL+C per terminare il runscript.sh appena concluso e digitare ./ts3server_startscript.sh start che si occuperà di creare una nuova istanza del server.
A questo punto tramite uno qualsiasi dei client TeamSpeak, semplicemente indicando l'indirizzo IP assegnato al vostro raspberry pi, un utente a vostra scelta e la password di accesso che era stata generata in fase di configurazione iniziale, potrete collegarvi e chattare con i vostri amici, colleghi o chiunque altro effettui il login sullo stesso server.

Nota: configurato in questo modo, ovviamente, il server ed i client dovranno necessariamente essere sotto la stessa rete. Ciò non toglie che impostando un indirizzo statico al raspberry pi e configurando il vostro router in modo che possa redirezionare le richieste dall'esterno a quell'indirizzo statico possiate accedere anche via Internet al server TeamSpeak, e quindi creare una vera e propria chat di messaggistica istantanea. Ricordatevi ovviamente i limiti imposti dalla licenza d'uso: di base massimo 32 utenti, fino a 512 con licenza non-profit.
Inoltre, ExaGear, il tool che abbiamo visto ci consente di eseguire TeamSpeak su raspberry pi, non è gratuito e, sebbene il costo della licenza sia diminuito proprio in questi giorni, è un'altra variabile da tenere in considerazione.

XMPP

Creare un server XMPP su Raspberry Pi è decisamente semplice, infatti ci sono già alcune implementazioni pronte all'uso e installabili direttamente dai repository di Raspbian OS senza la necessità di avere a disposizione software di supporto o librerie che non siano già incluse nel sistema operativo o direttamente recuperate dai repository in automatico.

Una delle implementazioni XMPP disponibili out-of-the-box è Prosody che è molto leggero ed anche facilmente configurabile:
  • con il comando sudo apt-get install prosody il sistema si occuperà di installare il server e di metterlo a disposizione per le nostre specifiche configurazioni
  • il file /etc/prosody/prosody.cfg.lua contiene tutte le variabili da configurare, e potrete modificarlo ad esempio tramite nano o vim.tiny
Tra le voci presenti, di particolare importanza sono: VirtualHost, admins, e poco altro. Nel file dovrete indicare il nome del vostro server (che come anticipato è indispensabile perché fa parte dello JID di ogni utente che si registrerà su di esso), quali sono gli utenti con i permessi di amministrazione, e qualche altra opzione secondaria (come la possibilità di accettare o meno nuove registrazioni di utenti).
Cercate quindi la sezione del file che contiene i VirtualHost e aggiungete il vostro dominio (io ho utilizzato l'hostname del raspberry pi, che con molta originalità è raspberrypi, che per gli scopi di questa guida va più che bene). Altri parametri su cui ha senso soffermarsi sono:
  • admins = {"admin@domain.com"}  # lista degli account con i permessi di amministrazione
  • allow_registration = true  # "true" per accettare registrazioni di utenti dai client
  • welcome_message = "Welcome $user"  # messaggio di benvenuto da mostrare agli utenti
  • registration_watchers = {"admin@domain.com"}  # account da informare in caso di nuove registrazioni

Una volta effettuate tutte le configurazioni del caso, con il comando sudo /etc/init.d/prosody restart potete riavviare Prosody. Prosody mette a disposizione anche un tool, prosodyctl, che consente di gestire gli utenti, cosa che ha poco senso se permettete la registrazione di nuovi utenti direttamente dai client, mentre è indispensabile se volete configurare e gestire manualmente tutti gli utenti accettati sul vostro server.

Nota: nella configurazione di Prosody è anche possibile impostare o meno i certificati SSL per aumentare la sicurezza nelle comunicazioni, cosa che è fondamentale se pensate di esporre il vostro server sul web, mentre è trascurabile se lo terrete in rete locale. Ovviamente le chiavi SSL possono essere generate in modo certificato (a pagamento) o senza certificazione (in modo gratuito); di base ne viene fornita una coppia non certificata e già pronta all'uso.

Una volta terminata la configurazione iniziale e riavviato Prosody, potrete lanciare un qualsiasi client compatibile con XMPP (e ce ne sono una infinità per qualsiasi sistema operativo Windows, Mac o Linux, ma anche mobile, vista la natura open della piattaforma). C'è soltanto un problema di cui tenere conto: come detto i JID richiedono la presenza del dominio (ad esempio il generico raspberrypi che io ho impiegato a mo' di VirtualHost). Questo dominio deve essere raggiungibile dal client che richiede di collegarsi al server, il che significa fondamentalmente 2 cose:
  1. o che abbiate un dominio realmente esistente raggiungibile via Internet che in qualche modo redirezioni sul vostro raspberry pi (es: dominio.com)
  2. oppure che mappiate manualmente il dominio specificato in VirtualHost con l'indirizzo IP del server XMPP (che sia quello interno assegnato al pi, o che sia quello reale a cui risponde il vostro router il quale poi redirezionerà la richiesta al pi stesso) nel file hosts presente su ogni PC del client che vuole connettersi.
    Ad esempio: se il raspberry pi è associato all'indirizzo IP 192.168.1.5 e raspberrypi è il nome del VirtualHost che è impostato sul file di configurazione di Prosody allora sul file hosts di ogni PC sul quale viene eseguito il client XMPP che vorrà connettersi al vostro server quell'indirizzo IP dovrà essere mappato con l'host raspberrypi
Una volta che la connessione tra client e server avviene senza intoppi, potrete loggarvi con il vostro utente (o, se non esiste, eventualmente crearne uno nuovo) così da poter contattare qualsiasi altro utente di cui conosciate il JID (non necessariamente associato al vostro server) e scambiare con lui messaggi e qualsiasi altra funzione supportata.


4. conclusioni e ultime note


TeamSpeak e XMPP sono due valide soluzioni (una proprietaria e l'altra completamente open-source) per creare server privati o pubblici di comunicazione istantanea (sia vocale che testuale). I due mondi hanno i loro pro (es: sicurezza e semplicità d'uso per TeamSpeak vs decentralizzazione e libertà per XMPP) e contro (es: costi e limiti di licenza per TeamSpeak vs configurazione e qualche limite di funzioni per XMPP) e sta a voi scegliere la soluzione che più si avvicina alle vostre esigenze.

Bene: come indicato ad inizio guida, alcuni aspetti sono stati appositamente lasciati in secondo piano, ma se siete interessati ad approfondirli non esitate a contattarmi nei commenti di questo tutorial o del video ad esso correlato, oppure sui canali social!

Spero che la guida vi sia stata utile. Al prossimo tutorial!

Nessun commento:

Posta un commento