Prosody – un server XMPP scritto in Lua


Prosody è un server XMPP/Jabber scritto in Lua con lo scopo di essere semplice e leggero. Prosody usa meno risorse rispetto ad altri progetti simili ed è progettato per essere semplice da configurare ed usare. Ejabberd o OpenFire potrebbero essere progetti più mirati per applicazioni più grandi, ma per la maggior parte degli utilizzi su piccola scala Prosody è la soluzione più efficiente in termini di risorse.

Installazione

L’installazione di Prosody su Ubuntu e Debian è facilitata dalla messa a disposizione di una repository dedicata per Ubuntu lucid, precise, trusty, utopic, vivid e Debian sid, squeeze, wheezy, jessie.

E’ addirittura compatibile con il sistema operativo Raspbian, basterà usare il nome in codice wheezy.

Per aggiungere la repository basta digitare il seguente comando nella console dei comandi.

Dove il comando lsb_release -sc ritornerà il nome in codice della distribuzione utilizzata.

Assicurati di cambiare tale stringa con wheezy nel caso in cui lo vuoi installare su una RaspberryPi.

Una volta aggiunta la definizione bisogna scaricare la relativa chiave pubblica con il comando

Aggiorniamo le definizioni e procediamo con l’installazione di Prosody.

Un minimo di configurazione

Il file di configurazione di Prosody si trova in /etc/prosody/prosody.cfg.lua ed utilizza la sintassi Lua; nulla di particolare, le direttive saranno intuitive da scrivere.

Per specificare a quali host il server fa riferimento bisogna utilizzare la direttiva VirtualHost, io per esempio ho aggiunto

ovviamente dopo aver configurato una box vagrant e aggiunto un record statico nel file /etc/hosts.

Impostando invece la direttiva allow_registration a true si abilita la creazione di nuovi account.

Infine è possibile specificare gli account amministratori tramite la tabella admins, per esempio

L’aggiunta di nuovi utenti avviene tramite il comando prosodyctl:

Una volta applicata questa configurazione elementare è necessario riavviare il server.

Connessione tramite Pidgin

Per testare la corretta installazione di Prosody faremo uso di Pidgin, un client di messaggistica istantanea che supporta il protocollo XMPP.

Per aggiungere un nuovo account basta andare nella sezione apposita dalla barra degli strumenti e configurare il client come nella seguente immagine.

prosody-account

Per questa installazione basica è necessario disabilitare la connessione SSL dalla sezione Avanzate

prosody-account-avanzate

Una volta aggiunti un paio di account di prova è possibile testare il corretto funzionamento del server.

pidgin-chat

Conclusioni

Abbiamo appena completato una installazione elementare di Prosody, non adatta ad essere utilizzata sulla rete Internet pubblica, questo articolo serve come trampolino per la configurazione finale di un client XMPP che funziona tramite browser web, ovvero Kaiwa.


Come sincronizzare calendari e contatti usando gli standard CardDAV e CalDAV con Baïkal su Ubuntu 14.04


Con il numero crescente di persone che utilizzano diversi dispositivi (smartphone, computer, tablet ecc) la necessità di mantenere tutto sincronizzato aumenta.

Gli standard CalDAV e CardDAV forniscono un modo veloce e facile per mantenere sincronizzate le nostre attività e i nostri contatti.

In questo tutorial vedremo come sincronizzare calendari e contatti da un server che si controlla, usando una installazione di Baïkal: un server CalDAV e CardDAV scritto in PHP.

Prerequisiti

Per poter seguire questo tutorial è necessario disporre di una macchina con sopra installato Ubuntu 14.04 di cui si ha accesso SSH (per un test locale si può usare Vagrant), di un account con privilegi di amministrazione e di un dominio per l’accesso al server (durante il test locale è consigliabile impostare un dominio fittizio tramite il file /etc/hosts).

Si installeranno anche le dipendenze utilizzate da Baïkal e configurato un certificato SSL.

Installazione di Baïkal

Per iniziare installeremo le dipendenze del pacchetto, scaricheremo l’archivio di installazione procedendo con l’estrazione.

In questo tutorial si utilizzerà la versione 0.2.7 ma è consigliabile controllare il sito ufficiale per l’uscita di nuove versioni.

Assumendo una installazione pulita di Ubuntu procediamo con l’aggiornamento delle definizioni delle repository.

Per poter installare Baïkal dobbiamo avere a disposizione un ambiente quasi LAMP, al posto di MySQL utilizzeremo SQLite.

Questo software comunque supporta anche Nginx come webserver e MySQL come gestore database.

Ora che l’ambiente di base è stato installato possiamo procedere con il download del server procedendo con l’installazione.

Per prima cosa spostiamoci in /var/www

Scarichiamo la versione 0.2.7

Ed estraiamo l’archivio utilizzando l’utility tar

Procediamo ora con alcune operazioni di routine, per prima cosa eliminiamo l’archivio baikal-regular-0.2.7.tgz scaricato tramite il comando rm

E rinominiamo la cartella baikal-regular nel nome dominio utilizzato, per esempio dav.example.com

Ripristiniamo i permessi utenti e gruppo a www-data

Configurare Apache

La nostra applicazione è ora installata, dobbiamo ora configurare un VirtualHost di Apache.

Baïkal ci rende la vita facile includendo nei file di progetto un file di configurazione template per Apache.

Ci basterà copiare tale file nella cartella sites-available e modificarlo secondo i parametri a disposizione.

Utilizzando un editor di testo come vim possiamo modificare il file dav_example_com.conf e sostituire dav.example.com con il nome dominio che punterà al web server.

E’ ora necessario configurare un certificato SSL. E’ possibile comprare un certificato SSL oppure crearne uno.

Una volta generato / scaricato il certificato SSL assumiamo che siano stati spostati nella cartella /etc/apache2/ssl e che i file siano chiamati apache.crt e apache.key.

E’ necessario ora comunicare ad Apache come usare il certificato SSL. Creiamo il file dav_example_com-ssl.conf e copiamo il contenuto proposto

Ovviamente non dimentichiamoci di sostituire dav.example.com e i nomi dei file del certificato con i nomi reali a nostra disposizione.

Abbiamo quasi finito. Le configurazioni per Apache sono terminate, ora abbiamo bisogno di abilitare il modulo rewrite, abilitare i siti e riavviare Apache.

Per abilitare il modulo rewrite utilizziamo l’utility a2enmod

Utilizzando invece il comando a2ensite abilitiamo i due VirtualHost configurati

E infine riavviamo Apache

Configurare Baïkal

Prima di procedere con l’installazione da browser è necessario lanciare un ultimo comando dalla console dei comandi atto alla creazione del file ENABLE_INSTALL.

Possiamo ora aprire il browser sul dominio configurato per iniziare l’installazione, per esempio https://dav.example.com.

baikal-wizard

Verrà mostrata una schermata con diverse opzioni. Impostiamo il fuso orario tramite il menu a tendina e creiamo una password per l’amministrazione, le altre configurazioni possono rimanere alterate.

Una volta cliccato su Save changes è necessario scegliere SQLite, non è necessario porre modifiche al parametro visualizzato.

baikal-database-setup

Cliccando di nuovo su Save changes è possibile iniziare ad usare Baïkal cliccando su Start using Baïkal.

baikal-installation-completed

Creazione utenti

Una volta installato l’applicazione è necessario creare gli utenti e collegarli per avviare la sincronizzazione.

Per creare un utente bisogna accedere alla interfaccia di amministrazione utilizzando l’utente admin e la password scelta durante l’installazione.

La prima pagina dell’applicazione è la Dashboard. Mostra cosa è abilitato e fornisce alcune statistiche basilari come il numero degli utenti, calendari e contatti.

Per creare un utente:

  1. In cima alla pagina, clicchiamo su Users and resources
  2. Ora clicchiamo sul pulsante a destra + Add user
  3. Compiliamo i campi e clicchiamo sul pulsante Save changes

Conclusioni

E’ ora possibile iniziare la sincronizzazione dei calendari e dei contatti. E’ possibile utilizzare qualsiasi client CalDAV e CardDAV per la connessione al server, bisogna utilizzare il nome dominio configurato come hostname. Nota alcuni client necessitano che come username deve essere fornito la email dell’utente.


RocketChat – una chat open source sviluppata con Meteor


RocketChat mira a fornire una soluzione open source per creare una chat per team di collaborazione, si ispira a Slack che è una delle soluzioni più famose del momento.

E’ sviluppata utilizzando la tecnologia Node.JS e MongoDB sfruttando la libreria Meteor, una libreria basata su Node.JS per lo sviluppo di applicazioni web.

Caratteristiche

Seppure il progetto è ancora alle prime fasi esso già mette a disposizione le seguenti caratteristiche.

  • BYOS (bring your own server) – ovvero la possibilità di installazione su un server privato
  • Stanze Multiple
  • Messaggi diretti
  • Gruppi privati
  • Stanze pubbliche
  • Notifiche Desktop
  • Menzioni
  • Avatar
  • Markdown
  • Emojis
  • Trascrizioni / Cronologia
  • Internazionalizzazione I18n

La roadmap per la versione 1.0 prevederà:

  • Allega immagini
  • Caricamento file
  • Ricerca test
  • API REST
  • Integrazione con Hubot
  • Messaggistica Off-the-Record (OTR)
  • Autenticazione LDAP / Kerberos
  • XMPP Multi-user chat (MUC)
  • Segnalazione WebRTC
  • Applicazione mobile nativa
  • Applicazione desktop nativa

Per chi fosse interessato anche ad altre alterative segnalo anche Let’s chat.

Installazione di RocketChat

Per prima cosa bisogna aver installato git:

RocketChat si basa su Node.JS per cui installiamolo tramite la repository:

Aggiorniamo le definizioni di repository e installiamo Node.js:

Come gestore database RocketChat fa utilizzo di MongoDB:

E per finire come ultima dipendenza installiamo Meteor:

Una volta installato Meteor scarichiamo la repository di progetto:

Ed entriamo nella cartella Rocket.Chat:

Per iniziare il build e l’inizializzazione dell’applicazione digitiamo:

RocketChat-run

Il processo creerà l’utente di default admin@admin con password admin.

L’applicazione sarà disponibile presso http://localhost:3000 o http://:3000

RocketChat

Conclusioni

Sebbene il progetto sia ancora alle prime fasi ritengo che gli sviluppatori propongono una soluzione valida ed open source per le chat progettate appositamente per team di sviluppo o team di collaborazione.

Con il progresso tecnologico e l’avvento di Internet non è raro trovare aziende i cui componenti sono sparsi per il globo. Avere gli strumenti adatti è una strategia vincente per la gestione e produttività del team.


Come installare ngrok con un certificato self-signed


Abbiamo visto come tramite ngrok sia possibile aprire tunnel locali per esporre un servizio web su Internet.

ngrok di base è un servizio hosted, è possibile usufruire in modo gratuito dell’infrastruttura messa a disposizione dell’autore.

Poiché è disponibile il sorgente del progetto vedremo come compilarli per poter includere un certificato self-signed nel pacchetto.

La ricompilazione del pacchetto non è necessaria nel caso in cui si abbia a disposizione di un certificato wildcard rilasciato da una Certification Authority.

Compilare ngrok

I passaggi illustrati sono stati eseguiti su una installazione pulita di Ubuntu 14.04 LTS su una box Vagrant (nulla toglie di eseguire i passaggi sul vostro computer o server).

ngrok è stato sviluppato utilizzando il linguaggio di programmazione Go, installiamo i componenti base di supporto per la compilazione del sorgente.

Cloniamo la repository del progetto per prepararci alla compilazione.

Prima di passare alla compilazione generiamo il certificato self-signed da includere nei binari che andremo a produrre.

Per facilitare l’inserimento dei comandi definiremo una variabile nella sessione corrente di bash.

Dove miodominio.com è il nome dominio che legheremo al server, vedremo in seguito questo aspetto.

Una volta generato il certificato copiamolo della cartella assets/client/tls/.

E iniziamo la compilazione del server e del client tramite il comando

ngrok-compiled

Avviare il server

Per avviare il server è sufficiente eseguire:

Bisogna prestare attenzione che device.key e device.crt sono i file generati durante la creazione del certificato.

Ovviamente tramite le direttive -httpAddr e -httpsAddr è possibile scegliere le porte da associare ad un collegamento http e https rispettivamente.

Avviare il client

Per avviare il client è necessario informare il programma di voler connettersi ad un servizio che utilizza un certificato non firmato da una certification authority.

L’utilizzo di ngrok da ora è come descritto nel precedente articolo.

Configurazione del dominio

Per poter legare un dominio al server è necessario che il server DNS supporti il wildcard per le definizioni delle zone.

Personalmente ho utilizzato Cloudflare poiché lo supporta insieme ad un dominio registrato tramite freenom.

Una volta integrato il dominio a Cloudflare bisogna far puntare un record A all’indirizzo IP del server principale e creare un record CNAME wildcard.

ngrok-cloudflare-cname

In base al nome dominio base scelto (dominio secondo livello, terzo livello ecc) è possibile creare record CNAME in modo tale da legare le stringhe alfanumeriche generate da ngrok ad un livello di dominio interessato.

Ngrok Dominio Base HostName Ngrok Tunnel Url
miodominio.com * [stringa-generata].miodominio.com
tunnel.miodominio.com *.tunnel [stringa-generata].tunnel.miodominio.com
ngrok.miodominio.com *.ngrok [stringa-generata].ngrok.miodominio.com
tunnel.ngrok.miodominio.com *.tunnel.ngrok [stringa-generata].tunnel.ngrok.miodominio.com

Il valore della colonna HostName è ciò che andrebbe inserito nel campo CNAME, la sintassi potrebbe variare in base al servizio usato.

Nota bene, il certificato wildcard deve corrispondere allo schema usato.

Avvio di un server tramite certificato rilasciato da una CA

Se si ha a disposizione un certificato wildcard rilasciato da una certification authority non è necessario ricompilare i sorgenti.

Avvio del server

Dove -tlsKey e -tlsCrt sono i file del certificato rilasciato dal certification authority e -domain è il nome dominio.

Avvio del client

Anche in questo caso bisogna usare un file di configurazione per istruire al client verso quale server connettersi.


Vagrant – configurazione di rete


Abbiamo visto come Vagrant sia uno strumento valido per la gestione di macchine virtuali, abbiamo visto come, attraverso un semplice script bash, sia possibile effettuare il provisioning di una box.

In questo articolo vedremo come gestire il lato networking tramite il Vagrantfile.

Vagrant offre diverse opzioni per la connessione di una macchina virtuale alla rete. Tutte le reti sono configurate nel file Vagrantfile, già discusso nei precedenti articoli, utilizzando la chiamata a metodo config.vm.network.

Per esempio la definizione di un inoltro di porta è definito come:

Ogni tipologia di rete ha un identificatore come :forwarded_port visto nell’esempio, a seguire una serie di argomenti che possono differire in base alla tipologia di rete. Nel caso inoltro porte sono richiesti due argomenti: la porta del sistema ospite seguito dalla porta della macchina locale.

E’ possibile definire anche più reti effettuando più chiamate config.vm.network dentro il file Vagrantfile.

Il significato può variare in base al provider specificato, ma in genere l’ordine specifica l’ordine in cui le reti vengono abilitate.

Le reti vengono automaticamente configurate e abilitate dopo essere state definite nel Vagrantfile durante le fasi vagrant up o vagrant reload.

Inoltro porte

L’inoltro delle porte facilitano l’accesso di una porta sulla macchina locale e inoltrare tutto il traffico verso una porta definita sul sistema ospite, sia TCP che UDP.

Per esempio: se la macchina ospite sta eseguendo un server web che resta in ascolto sulla porta 80 è possibile associare tale porta ad una porta arbitraria sulla macchina locale. Aprendo il browser su localhost:8080 verrà mostrato il sito web configurato sulla macchina virtuale.

Definire l’inoltro di una porta

La configurazione per un inoltro porta richiede due parametri, la porta per il sistema ospite e la porta per la macchina locale.

Ciò permetterà di accedere la porta 80 sul sistema ospite tramite la porta 8080 della macchina locale.

Altri parametri supportati sono:

  • guest (intero) – La porta sul sistema ospite da esporre sulla macchina locale.
  • guest_ip (stringa) – L’indirizzo IP del sistema ospite da legare alla porta. Se non specificato la porta sarà legata ad ogni interfaccia di rete. Di default è vuoto.
  • host (intero) – La porta sul sistema locale da usare per accedere alla porta sul sistema ospite. Deve essere un numero più grande di 1024 a meno che Vagrant non sia eseguito con i privilegi da amministratore.
  • host_ip (stringa) – L’indirizzo IP del sistema locale da legare alla porta inoltrata. Se non specificato verrà legato ad ogni IP. Di default è vuoto.
  • protocol (stringa) – UDP o TCP. Specifica il protocollo associato alla porta inoltrata. Di default è TCP.

Di default ogni porta definita inoltrerà solo traffico TCP. Attraverso la direttiva protocol:'udp' è possibile abilitare il traffico UDP. Se una data porta necessita di ascoltare sulla stessa porta entrambi i protocollo, è necessario definire la porta due volte specificando il protocollo.

Correggere le collisioni

Durante l’esecuzione di più macchine Vagrant è comune creare involontariamente definizioni di inoltro porte che collidono (due istanze che inoltrano alla porta 8080, per esempio). Vagrant include un meccanismo per catturare e correggere le collisioni automaticamente.

La correzione automatica delle collisioni deve essere manualmente abilitata per ogni porta inoltrata.

Il parametro :auto_correct impostato a true indica a Vagrant di correggere automaticamente qualsiasi collisione.

Durante vagrant up o vagrant reload, Vagrant mostrerà le informazioni su eventuali collisioni catturate e correzioni eseguite.

Reti private

Le reti private permettono l’accesso alla macchina ospita usando indirizzi che non sono accessibili da Internet.

Più macchine dentro la stessa rete privata possono comunicare tra loro.

DHCP

Il modo più veloce per usare una rete privata è di assegnare l’IP tramite DHCP.

Verrà assegnato automaticamente un indirizzo IP dallo spazio indirizzi riservato. L’indirizzo IP può essere determinato usando vagrant ssh per accedere alla macchina virtuale e usare il comando ifconfig (per sistemi GNU/Linux).

IP statico

E’ possibile specificare anche un indirizzo IP statico per la macchina.

E’ compito dell’utente scegliere l’indirizzo IP.

Disabilitare la configurazione automatica

Se si ha la necessità di configurare l’interfaccia di rete manualmente è possibile disabilitare tale caratteristica specificando auto_config:

Reti pubbliche

Il significato di una rete pubblica varia in base al provider scelto. L’idea è che mentre le reti private non devono mai permettere l’accesso pubblico alla macchina, le reti pubbliche lo permettono.

DHCP

Il modo più facile per usare una rete pubblica è di permettere l’assegnazione dell’IP tramite DHCP.

IP statico

In base alla configurazione effettuata è possibile assegnare l’indirizzo IP manualmente alla interfaccia bridged. Viene usata la clausola :ip alla definizione di rete.

Interfaccia di rete di default

Se è presente più di una interfaccia di rete, Vagrant richiede la scelta di una interfaccia di rete di default.

Viene specificato usando la clausola :bridge alla definizione di rete.

La stringa identifica l’interfaccia desiderata e deve corrispondere esattamente con il nome di una interfaccia disponibile.


GistBox e Astral – due applicazioni web per GitHub


Sebbene non effettui molti push nell’arco di una giornata utilizzo molto assiduamente GitHub, per seguire sviluppatori, progetti o leggere codice per scoprire come un determinato problema venga risolto dalla comunità.

Ho apprezzato in particolar modo il sistema di starring e il servizio Gist. Girovagando per la rete ho trovato due particolari applicazioni web che aiutano a gestire al meglio queste due caratteristiche di GitHub.

GistBox

GistBox permette di catalogare e gestire in modo più organizzato e semplice i Gist caricati sul proprio account GitHub.

  • Collaborazione in team – permette di condividere snippet di codice fra gruppi
  • gistbox-team-group

  • Tag colorati – è possibile assegnare colori ai singoli tag per raffinare il modo in cui si catagola
  • gistbox-tag

  • Ricerce e filtri
  • Editor di codice per svariati linguaggi con supporto alla colorazione di sintassi
  • gistbox-editor

  • Scorciatoie da tastiera per aumentare la produttività
  • gistbox-shortcut

  • Vista file a scomparsa
  • gistbox-file

Dispone anche di un estensione web clipper per Chrome che consente di catturare e importare velocemente pezzi di codice o testo trovati sul web.

Astral

Ogni repository su Github può essere messa tra i preferiti cliccando sulla icona a forma di stella “star”.

Tuttavia la gestione delle star non è tra le più comode a mio parere, dopo svariate ricerche ho trovato Astral, una applicazione web che permette di gestire in modo facile ed intuitivo le star di GitHub.

Tra le caratteristiche principali troviamo:

  • Tag – permette di assegnare una o più etichetta ad ogni repository
  • astral-tags

  • Ricerca e filtri – è possibile cercare le repository tramite keywork e filtrare il risultato attraverso l’uso dei tag
  • astral-search

  • Leggimi – i file di README sono automaticamente mostrati per consultare in modo facile e veloce la presentazione della repository.
  • astral-readme

Caratteristiche che ho trovato molto utile è quella di attivare l’autotag delle repository in modo tale da avere già le repository etichettate in base al linguaggio usato.

astral-settings

Conclusioni

Sebbene siano app semplici e non indispensabili sono comunque un esempio di come le API di un servizio possano essere sfruttare per aggiungere valore alla piattaforma.

Personalmente apprezzo sempre queste tipologie di applicazioni di nicchia ben curate nella loro semplicità e funzionalità.


ngrok – tunnel sicuri su localhost


ngrok è uno strumento che permette di aprire tunnel sulla rete per poter esporre un servizio installato sulla macchina locale su Internet.

Durante lo sviluppo di una applicazione web o tcp è necessario poterla provare per testarne le funzionalità o mostrarla ad un potenziale cliente, grazie ad ngrok non è necessario configurare firewall, inoltrare porte o altro, con un semplice comando si apre un tunnel ed il servizio viene esposto automaticamente su Internet.

ngrok è uno strumento open-source e disponibile in versione hosted online, tuttavia avendo disponibile i sorgenti è possibile creare una propria istanza privata dell’applicazione.

Sebbene sia disponibile la versione 2.0 dell’applicazione tratterò la versione 1.x poiché completamente open source.

Caratteristiche di ngrok

  • E’ possibile esporre qualsiasi servizio http dietro una rete NAT o firewall su Internet attraverso un sottodominio di ngrok.com
  • E’ possibile esporre qualsiasi servizio tcp dietro una NAT o firewall su Internet su una porta casuale di ngrok.com
  • E’ possibile ispezionare tutte le richieste/risposte http trasmesse sul tunnel
  • E’ possibile rispondere a qualsiasi richiesta che è stata trasmessa sul tunnell

ngork è utile per condividere temporaneamente un sito web che sta girando solamente sulla macchina locale di sviluppo, mostrare un’app in un contest senza distribuirla, distribuire qualsiasi servizio che consuma webhooks (callback HTTP), debug e studio di qualsiasi servizio web attraverso l’ispezione del traffico HTTP e l’esecuzione di servizi di rete su macchine che risiedono dietro un firewall.

Installazione ed utilizzo

ngrok è multipiattaforma, è disponibile per Linux, Windows, Mac OS X, FreeBSD e architettura Linux/ARM.

Una volta scaricato l’archivio .zip ed estratto, digitando:

verranno mostrate i comandi che è possibile impartire all’applicazione.

ngork-help

Esporre un webserver locale su Internet

Assumendo che abbiamo installato Apache, poiché il webserver opera sulla porta 80 bisogna digitare:

ngrok-apache

Dall’immagine si può notare che è stato creato il tunnel correttamente, è possibile accederlo sia tramite http che https.

Introspezione del traffico

ngork cattura tutto il traffico HTTP che vi passa attraverso e fornisce una interfaccia web in tempo reale dove è possibile visionare le richieste in dettaglio.

Una volta avviato ngork, aprendo http://localhost:4040 è possibile accedere a tale interfaccia.

Effettuando una richiesta al tunnel è possibile vedere le informazioni dettagliate riguardante la richiesta includendo il tempo, la durata, gli header, form e parametri della query e anche l’accesso ai byte grezzi inviati.

ngrok-instrospezione

Controllo di sintassi XML/JSON

ngrok ha uno speciale supporto per i formati dati di interscambio più comuni in uso sul web. Qualsiasi dato in formato JSON o XML viene automaticamente formattato e controllato per errori di sintassi.

ngrok-syntax-checking

Rispondere alle richieste

ngrok permette di rispondere a qualsiasi richiesta http fatta attraverso un tunnel.

ngrok-replay

Protezione del tunnel tramite password

Di default i tunnel creati non richiedono l’autenticazione attraverso username o password. Ciò significa che qualsiasi utente che conosce o può intuire l’URL del tunnel può fare richieste.

E’ possibile mettere in sicurezza il tunnel attraverso una username e password usando l’opzione -httpauth durante la creazione del tunnel.

Ciò forzerà l’utilizzo di credenziali di accesso ad ogni richiesta tramite l’autenticazione base HTTP.

Richiedere un sottodominio specifico

ngrok assegna un nome casuale in esadecimale come https://3a4bfceb.ngrok.com ai tunnel creati.

E’ possibile anche scegliere un nome personalizzato usando l’opzione -subdomain.

Inoltro di servizi TCP

ngrok permette anche di esporre un servizio tcp su Internet. Utilizzando questa caratteristica gli strumenti di debug e introspezione saranno più primitivi poiché ngrok non sa come trattare questi dati.

Inoltro di servizi non locali

ngork può essere usato anche per inoltrare traffico a servizi dietro una NAT o firewall anche quando questi servizi non sono sulla stessa macchina.

Il file di configurazione di ngrok

Il file di configurazione di ngork è opzionale e formattato usando il formato YAML e permette di usare caratteristiche più avanzate come:

  1. Avvio di più tunnel insieme.
  2. Connessione ad un server personale ngork.
  3. La configurazione di parametri particolari.
  4. Il file di configurazione è caricato di default da ~/.ngrok ma è possibile sovrascrivere il percorso tramite il parametro -config a linea di comando.

Avvio di più tunnel insieme

Per avviare più di un tunnel è necessario configurare ognuno nel file di configurazione usando i gli appropriati parametri.

I parametri dei tunnel richiedono un dizionario di nomi per la configurazione dei tunnel.

Per esempio, definiamo la configurazione di tre tunnel diversi: il primo sarà un tunnel per un sito in sviluppo che viene raggiunto solo tramite https e dispone di autenticazione, il secondo servirà per l’accesso remoto alla macchina tramite la porta 22 e infine l’ultimo tunnel servirà per mostrare i progetti personali.

I tre tunnel definiti possono essere avviati simultaneamente usando il comando ngork start seguiti dai nomi dei tunnel da avviare:

Configurazione del tunnel

Ogni tunnel configurato può specificare cinque parametri: proto, subdomain, auth, hostname e remote_port.

Ogni tunnel deve avere il parametro proto definito che è un dizionario di protocolli per l’indirizzo di inoltro locale.

Il parametro auth è opzionale ed è usato per l’autenticazione dei tunnel http/https.

Il parametro remote_port è opzionale e server per legare sul server remoto la porta opzionale, è usato solo per i tunnel tcp.

ngork usa il nome del tunnel come sottodominio o hostname per il tunnel creato, ma può essere sovrascritto:

Una volta avviato il client inoltrerà esempio.ngrok.com -> 127.0.0.1:8080.

Per i tunnel TCP si può richiedere una specifica porta dal server tramite il parametro remote_port. Se non specificato, il server assegnerà una porta causale.

Altre opzioni di configurazione

Il file di configurazione ngrok consente di impostare parametri poco comuni.

Per esempio può essere specificato l’authtoken usato durante la validazione su ngrok.com usando il parametro auth_token.

E’ possibile cambiare l’indirizzo che ngrok usa per legare il servizio di introspezione utilizzando il parametro inspect_addr:

Connessione ad un server ngork personale

ngrok supporta la connessione ad un server non ospitato da ngrok.com. Per prima cosa bisogna installare un server, vedremo in seguito come eseguire questa operazione.

Una volta avviato il server ngrokd è necessario configurare due parametri per permettere ad ngork di connettersi in modo sicuro al server installato.

Il parametro server_addr è l’indirizzo del server personale e trust_host_root_certs per rendere la connessione TLS fidata.

Eseguire ngrok da proxy

Può essere configurato per poter essere eseguito dietro ad un server proxy http usando il parametro http_proxy:


HSTR – la cronologia della shell a portata di mano


Durante l’utilizzo della linea di comandi spesso ci si può ritrovare nella situazione in cui si ha bisogno di rieseguire un comando scritto poco prima, il classico metodo è quello di premere il tasto “feccetta su” e scorrere la cronologia per trovare il comando digitato.

Hstr è uno strumento a linea di comando che aiuta il completamento dei comandi dalla cronologia. E’ pensato per rendere il completamento più semplice ed efficiente rispetto al comando Ctrl-r.

E’ un progetto opensource ospitato su GitHub creato dall’utente dvorka.

hstr uso

Come installare hstr

Per installare hstr, abbreviato hh, su Ubuntu ci serviremo della repository ufficiale:

Aggiorniamo le definizioni ed installiamo hstr

Per attivare hstr basterà eseguire

eseguendo solo hh --show-configuration verrà mostrato la configurazione di default.

hh --show-config

E’ possibile personalizzare a proprio piacimento il comportamento di hh, nella repository di progetto è possibile vedere quali parametri possono essere personalizzati.

Di default hstr si attiva alla pressione di Ctrl-r durante la scrittura di un comando.

E’ disponibile anche il manuale utente tramite man hh

hstr - man page

Comandi principali

Una volta installato hstr è possibile avviarlo tramite Ctrl-r oppure digitando hh, non è necessario aver scritto qualcosa nella shell, premendo Ctrl-r mentre si digita un pezzo di comando l’utility mostrerà i possibili modi di completare il comando basandosi sulla cronologia precedente

hstr - example

Una volta avviato hh è possibile muoversi nella cronologia usando i tasti freccia su e giù, con il tasto canc si elimina una voce e con i tasti Ctrl-f si aggiunge un comando nei favoriti.

Eseguendo la combinazione Ctrl-/ (Ctrl-shift-/) è possibile visualizzare tre tipi di liste in ordine: cronologico, uso più frequente e preferiti.

Conclusioni

Sebbene esista già un meccanismo simile già integrato nella console, (Ctrl-r avvia la ricerca inversa) personalmente ritengo hstr uno strumento valido per l’utilizzo della cronologia della console dei comandi in modo facile è intuitivo, per chi come me esegue gran parte dei comandi tramite shell questa piccola utility darà un tocco di freschezza alle proprie sessioni su console.


Seafile – Cloud Storage Open Source e Self Hosted


Seafile è un sistema di archiviazione cloud open source con le caratteristiche di protezione privacy e supporto per gruppi di lavoro.

Le collezioni di file sono chiamate librerie e ogni libreria può essere sincronizzata separatamente. Una libreria può anche essere crittografata attraverso una password scelta dall’utente.

Seafile permette anche agli utenti di creare gruppi e facilita la condivisione dei file tra i gruppi stessi.

Caratteristiche di Seafile

Seafile dispone delle seguenti caratteristiche:

Sincronizzazione file

  • Sincronizzazione selettiva dei file delle librerie. Ogni libreria può essere sincronizzata separatamente.
  • Gestione della correttezza dei conflitti dei file basata sulla storia invece che sul timestamp.
  • Trasferimento solo per i file che non sono nel server, i trasferimenti incompleti posso essere ripresi.
  • Sincronizzazione con due o più server.
  • Sincronizzazione con le cartelle esistenti.
  • Sincronizzazione delle sottocartelle.

File sharing e collaborazione

  • Condivisione dei file tra utenti o gruppi.
  • Condivisione delle sottocartelle tra utenti o gruppi.
  • Download tramite link protetti da password.
  • Link per upload.
  • Controllo della versione tramite numeri di revisione configurabili.
  • Ripristino dei file cancellati dal cestino, storia o istantanee.

Protezione privacy

  • Crittografia di librerie tramite password scelta dall’utente.
  • Crittografia lato client quando viene usato la sincronizzazione desktop.

Meccanismo interno

Il modello di controllo di versione di Seafile è basato su Git, ma è semplificato per la sincronizzazione automatica per cui non richiede che Git sia installato.

Ogni libreria di Seafile si comporta come una repository di Git. Ha la sua storia unica che consiste in una lista di commit. Un commit punta alla radice dell’istantanea del file system.

Una istantanea consiste in cartelle e file. I file sono divisi ulteriormente in blocchi per rendere il trasferimento dei file più efficiente e ottimizzare l’uso del disco.

Le differenze da Git sono:

  • Automatic synchronization.Sincronizzazione automatica.
  • I client non salvano la storia del file, così evitano l’overhead di salvare più dati. Git non è efficiente per il salvataggio di grandi file come immagini.
  • I file sono divisi ulteriormente in blocchi per rendere il trasferimento dei file più efficiente e ottimizzare l’uso del disco.
  • Il trasferimento dei file può essere messo in pausa e ripreso.
  • Supporto per diversi tipi di archiviazione su lato server.
  • Supporto per il download da più blocchi server per accelerare il trasferimento dei file.
  • Risoluzione dei conflitti più user-friendly (Seafile aggiunge il nome utente come suffisso per i file in conflitto).
  • Gestione progressiva dei file durante la modifica mentre l’auto-sincronizzazione è attiva. Git non è stato progettato per funzionare in questi casi.

seafile-dashboard

Installazione di Seafile

Prima di procedere con il download del pacchetto server è necessario installare alcune dipendenze:

Una volta installate le dipendenze scarichiamo il pacchetto del server, per installare le ultime versioni guarda qui:

Tramite lo strumento tar estraiamo il pacchetto appena scaricato:

Entriamo nella directory estratta:

E lanciamo lo script di installazione:

seafile-setup

Dopo alcuni controlli sulle dipendenze ci verrà chiesto di dare un nome al server.

seafile-server-name

Successivamente bisogna specificare a quale indirizzo IP o nome dominio il server fa riferimento:

Chiederà di specificare le porte per il server ccnet.

Una directory per il salvataggio dei dati.

La porta TCP presso il quale il server si metterà in ascolto.

La porta TCP presso il quale il web server si metterà in ascolto.

Mostrerà un riepilogo dei dati inseriti fin ora.

seafile-configuration

L’installazione procederà fornendo alcune informazioni finali generate durante l’installazione.

Per avviare il server bisogna eseguire dalla cartella principale di progetto:

Per avviare l’interfaccia web invece:

Al primo avvio di seahub verranno chieste alcune informazioni per la configurazione di un account amministratore per l’interfaccia web.

seafile-seahub-admin

Una volta avviato seafile e seahub è possibile collegarsi all’interfaccia ed iniziare ad usare l’applicazione.


Come installare Laravel Homestead


Laravel Homestead è una box per Vagrant pre-configurata che fornisce un ambiente di sviluppo ideale senza richiedere l’installazione di PHP, HHVM, un web server e qualsiasi altro software sulla macchina locale.

Le box di Vagrant sono completamente usa e getta, se qualcosa va male è sempre possibile distruggere e ricreare la macchina virtuale.

Software incluso

  • Ubuntu 14.04
  • PHP 5.6
  • HHVM
  • Nginx
  • MySQL
  • Postgres
  • Node (Con Bower, Grunt e Gulp)
  • Redis
  • Memcached
  • Beanstalkd
  • Laravel Envoy
  • Fabric + HipChat Extension
  • Blackfire Profiler

Vagrant Box

Prima di eseguire l’ambiente Laravel Homestead bisogna installare VirtualBox e Vagrant.

Per aggiungere la box di Laravel Homestead:

Installare Laravel Homestead

Una volta che la box è stata aggiunta a Vagrant è possible installare lo strumento a riga di comando di Laravel Homestead tramite il comando composer global:

Assicuriamoci di inserire il percorso della cartella ~/.composer/vendor/bin nel PATH di sistema in modo tale che l’eseguibile homestead sia trovato per l’esecuzione.

Una volta installato lo strumento a riga di comando è necessario eseguire il comando inizializzazione per creare il file di configurazione Homestead.yaml

Il file Homestead.yaml viene posizionato nella cartella ~/.homestead. E’ possibile modificare tale file attraverso:

Configurazione del provider

La chiave provider nel file Homestead.yaml indica quale provider Vagrant deve usare: virtualbox o vmware_fusion.

Configurazione della chiave SSH

Bisogna modificare il file Homestead.yaml per configurare il percorso alla chiave pubblica SSH così come le cartelle che si vogliano condividere tra la macchina principale e Homestead.

Se non si ha a disposizione una chiave SSH è possibile generare una coppia di chiavi SSH tramite:

Una volta configurata la chiave SSH bisogna specificare il percorso della chiave nella proprietà authorize.

Configurazione delle cartelle condivise

La proprietà folders del file Homestead.yaml elenca tutte le cartelle che si vogliono condividere con Laravel Homestead. Non appena i file contenuti in queste cartelle saranno sincronizzati tra la macchina locale e Laravel Homestead automaticamente.

Per abilitare NFS basta specificarlo nel file di configurazione come mostrato:

Configurazione dei siti Nginx

La proprietà sites permette di associare facilmente un “dominio” ad una cartella nell’ambiente Homestead. Una configurazione di esempio è fornita nel file Homestead.yaml

Si può abilitare HHVM per quasiasi sito usando l’opzione hhvm:

Ogni sito sarà accessibile tramite HTTP attraverso la porta 8000 e HTTPS tramite la porta 44300.

Alias Bash

Per aggiungere alias bash alla box Homestead è necessario aggiungerli al file degli alias nella cartella ~/.homestead.

Avvio della box

Una volta configurato il file Homestead.yaml secondo le proprie preferenze è possibile usare homestead up per avviare la macchina virtuale e homestead ssh per accedervi in SSH.

Vagrant avvierà la macchina virtuale e configurerà le cartelle condivise e i siti Nginx automaticamente.

Per distruggere la macchina è necessario usare il domando vagrant destroy --force

Per far funzionare correttamente la macchina virtuale è necessario aggiungere al file /etc/hosts l’indirizzo ip della macchina virtuale:

L’indirizzo IP mostrato è quello impostato nel file Homestead.yaml. Una volta aggiunto il dominio al file hosts è possibile accedere al sito tramite il browser.

http://homestead.app


Virtual Host Nginx – Come configurarli


Su Ubuntu, Nginx segue lo schema ordinario per le configurazioni (come Apache). Ecco i file e le cartelle che si trovano in /etc/nginx:

  • /etc/nginx/conf.d
  • /etc/nginx/sites-available
  • /etc/nginx/sites-enabled
  • /etc/nginx/nginx.conf

Le cartelle sites-available e sites-enabled funzionano allo stesso modo come con Apache.

Per una introduzione su come installare Nginx clicca qui.

I server configurati (virtual host nginx) risiedono nella cartella sites-available

Le configurazioni possono essere abilitati creando link simbolici dalla cartella sites-available alla cartella sites-enabled.

nginx-vhosts

A differenza di Apache, il pacchetto Ubuntu di Nginx non include alcuna utility come a2ensite e a2dissite.

Effettuando una ricerca sul web ho trovato questo pratico script:

Basta inserirlo nella cartella /usr/bin/nginx_modsite, per utilizzarlo:

  • sudo nginx_modsite -l per vializzare tutti i siti
  • sudo nginx_modsite -e test_website per abilitare “test_website”
  • sudo nginx_modsite -d test_website per disabilitare “test_website”

Virtual Host Nginx

A differenza di Apache, Nginx non fa distinzione tra vitual host basati su IP e virtual host basati su nome. Tutto funziona come un virtual host basato su nome.

Il seguente listato è la configurazione di default con cui Nginx viene installato:

Ecco il significato di ogni singola direttiva:

  • Listen – Per prima cosa notiamo che ascolta sulla porta 80 e si definisce anche come server di default per le richieste sulla porta 80. Se nessun header HTTP combacia con un virtual host configurato Nginx utilizzerà questo virtual host di default. E’ possibile definire diversi host di default. Per esempio un default_server sulla porta 8080: listen 8080 default_server è diverso da sito default sulla porta 80: listen 80 default_server ascolta anche la porta 80 su una interfaccia ipv6, se abilitata sul server.
  • root – Qui viene definita la cartella radice dei documenti. Qui è dove i file vengono prelevati, è equivalente alla direttiva Apache DocumentRoot.
  • index – La direttiva index definisce quali file il server proverà a leggere se non ne è specificato alcuno, è equivalente alla direttiva Apache DirectoryIndex.
  • server_name – E’ il nome host che Nginx dovrebbe usare per controllare l’header Host. Poiché è un server di default, questo sito correntemente verrà caricato se nessun altro host viene trovato. E’ possibile usare diversi nomi, come server_name www.example.com example.com. E’ possibile anche utilizzare caratteri wildcard su un nome server all’inizio o alla fine come per esempio server_name *.example.com. E’ possibile utilizzare anche una espressione regolare come ˆ(.*)\.example\.com$, ha il beneficio di catturare e usare porzioni del testo estratto tramite l’espressione regolare.
  • charset – E’ consigliato usare sempre UTF-8.
  • location – Nginx può usare un blocco locazione insieme ad un percorso file o espressione regolare per far corrispondere URL o file per gestirli in modo diverso. In questo esempio qualsiasi locazione viene catturata, successivamente la direttiva try_files cercherà di trovare un file nell’ordine in cui gli schemi sono stati specificati. Di default cerca di usare un URL esplicito per trovare un file, seguito da un nome di una cartella e infine risponde con un errore 404 se non viene trovato alcuna corrispondenza.

Ethersheet – collaborazione realtime su foglio di calcolo


Ethersheet è uno strumento open source per collaborare su fogli di calcolo in modo facile, veloce e sicuro.

In passato ho mostrato un progetto simile, chiamato Etherpad, che permette la collaborazione su documenti di testo.

Caratteristiche

  • Collaborazione su fogli di calcolo in real time
  • Ogni foglio di calcolo può contenere più sottofogli
  • Importazione ed esportazione di dati tramite il formato CSV

Una piccola nota negativa: al momento supporta poche funzioni.

Installazione di Ethersheet

Per prima cosa bisogna installare Node.js per poter provare l’applicazione.

Successivamente bisogna installare git, ci servirà per scaricare l’ultima versione di Ethersheet:

Scarichiamo ora l’ultima versione di Ethersheet tramite la repository di GitHub:

Entriamo nella cartella della repository:

Eseguiamo ora l’installazione:

Creiamo un file di configurazione di default:

Prima di avviare l’applicazione è necessario creare un database MySQL, se non si ha installato MySQL:

Importiamo lo schema del database che si trova in examples/

Una volta configurato il file config.js secondo i parametri del database

ethersheet-configjs

E’ possibile avviare Ethersheet tramite:

che sara disponibile presso http://indirizzo_ip:8080

Calcolo di PI

Mostro un piccolo esempio di come sia facile ed intuitivo utilizzare questa applicazione.

La creazione di un foglio di calcolo è semplice, basta inserire il nome.

ethersheet-create

Si presenterà la familiare griglia di un qualsiasi programma di foglio di calcolo.

Si genererà anche nella barra degli indirizzi l’indirizzo da fornire agli altri per iniziare la collaborazione online, per esempio http://indirizzo_ip:8080/s/pi

Per calcolare la costante matematica Pi Greco basta inserire in qualsiasi cella la seguente formula =product(4, atan(1))

ethersheet-pi

Lascio a voi la scoperta delle funzionalità di Ethersheet.