Monitorare una pagina web con Raspberry Pi

Lo scopo di questo progetto è ricevere una mail quando una pagina web statica viene aggiornata e quindi cambia. Avremo bisogno di server web che ci consenta di inviare la mail sotto richiesta della Raspberry che controllerà la pagina continuamente rispettando un intervallo di tempo da noi specificato. La guida si divide quindi in due parti, il lato server che si occuperà di inviare la mail (cosa che può svolgere anche la raspberry ma in questa guida per semplicità utilizzo un dominio linux vero e proprio) e un lato locale rappresentato dalla raspberry in sé che controllerà la pagina. Iniziamo subito!

Lato server

Il nostro server deve inviare una mail non appena viene caricata una pagina che chiameremo mail.php. Potremmo utilizzare la funzione mail() in php ma la nostra mail verrebbe subito gettata nella posta indesiderata, utilizzeremo una libreria php vera e propra nota come PHPmailer che utilizzerà un server SMTP vero e proprio, per esempio quello della nostra casella di posta di Yahoo! (o di qualsiasi altra casella di posta vogliate, il nostro obiettivo è far si che la mail non cada nello spam)

  1. Scarichiamo l’archivio zip da GitHub nel link precedente, decomprimiamolo e carichiamo tutti i file sul server in una cartella phpmailer/ che si troverà all’interno di una cartella che chiameremo da ora raspberry/. Quindi la nostra libreria si troverà in http://ilmiosito.com/raspberry/phpmailer
  2. Ora in /raspberry creiamo un file denominato mail.php e scriviamo quanto segue, trovate sopra ogni riga la funzione corrispettiva:

    Ogni qualvolta accederemo all’indirizzo http://ilmiosito.com/raspberry/mail.php una mail verrà inviata all’indirizzo [email protected] da [email protected] sfruttando le credenziali di quest’ultimo indirizzo, nella pagina verrà visualizzato il messaggio “OK” se tutto è andato a buon fine. Il nostro server è pronto, passiamo alla raspberry!

Lato locale

Il file check_page_loop.sh

Dobbiamo controllare se una pagina web statica cambia nel tempo come possiamo fare velocemente? Calcoliamo l’impronta della sua sorgente e controlliamo se cambia, se cambia la pagina è diversa ed è stata quindi aggiornata con nuovi contenuti. Iniziamo quindi a scrivere il file check_page_loop.sh. Ci servirà il pacchetto w3m, se non è già installato installiamolo prima di continuare la guida (sudo apt-get install w3m)

  1. Impronta originale. Prima di avviare il ciclo otteniamo l’impronta attuale della pagina in questo modo:

    La curl scarica la pagina e la w3m scrive l’output della pagina (non la sorgente, l’output è come visualizzata) nel file page.txt, la cat apre il file di cui viene calcolata l’impronta md5 e scritta nel file stored_digest.txt e infine viene cancellato il file temporaneo page.txt. Questa è l’impronta di riferimento che utilizzeremo per capire, in un ciclo, se la pagina ha subito variazioni, quindi immagazziniamola subito in una variabile chiamata STORED_DIGEST
  2. Il while. Ora possiamo avviare il ciclo while che principalmente compie la medesima azione del codice precedente ma immagazzina l’impronta in un’altra variabile:

    Le differenze con il codice precedente sono ovviamente la presenza del ciclo while (che verrà poi chiuso con l’istruzione done) e il fatto che la nuova impronta verrà immagazzinata in ACTUAL_DIGEST.
  3. Prendiamo una decisione. Ora confrontando le due impronte dobbiamo decidere se inviare la mail oppure no, con un if stabiliamo che se sono diverse -> invia mail altrimenti no:

    Per inviare la mail basta aprire la pagina creata in precedenza con la wget che ci salverà l’output in mail.php, file che possiamo eliminare e terminare con break il ciclo, quindi l’intero programma.

    4. Prendiamoci una pausa. Prima però di chiudere il ciclo facciamo passare un intervallo di tempo prima di controllare nuovamente la pagina, usiamo la sleep:

    Vediamo il file conclusivo corredato di echo nel file log.txt

Il file start_daemon.sh

Ora dobbiamo avviare il programma in background magari via ssh e senza necessità di tenere il terminale aperto, sfruttiamo la funzione nohup che permette di avviare lo script senza che venga interrotto con CTRL+C. Scriviamo per comodità il comando nel file start_daemon.sh:

Il file stop_daemon.sh

E anche il relativo file per fermare il programma, denominato stop_daemon.sh:

Il file di log sarà log.txt ma comunque la funzione scrive automaticamente l’output in nohup.out

Conclusioni

Ora è tutto pronto, basterà connettersi via ssh alla raspberry e avviare lo script ./start_daemon.sh e premere CTRL+C, vedremo il file di log popolarsi e riceveremo una mail all’aggiornamento della pagina-

Accedere via FTP alla Raspberry Pi o Linux

Sicuramente una delle funzionalità più utili per un server è l’accesso FTP. Abilitarlo sulla Raspberry o sul linux in generale è semplicissimo con vsftpd.

Installazione

Innanzi tutto installiamo il pacchetto:

Configurazione

Per configurarlo innanzitutto fermiamo il demone

ed editiamo il file /etc/vsftpd.conf (anche da terminale con il comando nano)

Eliminando tutte le linee di commento restiamo con i parametri di configurazione principali

Le sole righe di configurazione che ci interessano sono la 3 che commentandola disabilita l’accesso anonimo, la 5 che abilita il login con le credenziali e la 6 che abilita la scrittura di file via ftp.

Creare una torrentbox con Raspberry Pi

In questo articolo vedremo come configurare da zero una Raspberry Pi che funzioni da torrentbox, ovvero installeremo un client torrent che ci consente di scaricare contenuti via torrent su Hard Disk esterno. Prima di entrare nel vivo della guida è bene seguire queste operazioni preliminari per rendere l’ambiente di Raspbian più confortevole all’uso che dobbiamo farne.

In questa guida è stato utilizzato un hard disk da 320Gb autoalimentato, formattato in NTFS da windows, unito a una Raspberry Pi 2 con Raspbian appena installato. Nell’hard disk, denominato “HD320G” è presente una cartella “Transmission” in cui vengono archiviati i download completati e in essa una cartella “_part” in cui vengono archiviati download incompleti. 

Operazioni Preliminari

  • Effettuiamo il login. Utilizzando “pi” come username e “raspberry” come password;
  • Avviamo l’interfaccia grafica. Digitando startx dopo aver fatto il login;
  • Configuriamo alcune opzioni utili. Digitiamo raspi-config nel terminale e settiamo l’avvio automatico del desktop (Enable boot to Desktop/Scratch -> Desktop login as user ‘pi’ at the graphical interface), nel settaggio Overclock scegliamo Pi2 oppure Turbo (per rendere più agevole l’utilizzo del client torrent), nelle Advanced Options attiviamo l’SSH (opzione molto utile in seguito che ci consentirà di comunicare con la raspberry via terminale ma da un altro pc);

    Lo script raspi-config ci consente di settare facilmente tutti i parametri della Raspberry Pi

    Lo script raspi-config ci consente di settare facilmente tutti i parametri della Raspberry Pi

  • Alimentazione dell’hard disk esterno. Raspberry e hard disk esterni autoalimentati non vanno molto d’accordo, l’energia erogata non è sufficiente ad alimentarli. Per ovviare a questo problema oltre all’opportunità di scegliere un hard disk con alimentazione a parte, oppure di prendere un hub usb alimentato (scelte che consiglio vivamente) è possibile procedere via software e settare il nostro mini-computer per erogare più energia nelle porte usb. Procediamo in questo modo dal desktop della Raspberry. Apriamo il terminale e andiamo a modificare il file /boot/config.txt in questo modo:

    Ci si aprirà un editor di testo, modifichiamo il file aggiungendo in fondo la stringa di seguito e salviamo.

    Se prima di questo settaggio il nostro hard disk non si accendeva vedrete ora che funzionerà correttamente ma non sarete ancora in grado di scriverci dentro, seguite il prossimo punto.
  • Installare le utility per ntfs. Linux, Raspbian per la precisione, non ha un supporto nativo all’NTFS per questo dovremo installare un pacchetto che ci consentirà di avere accesso completo alla nostro hdd. Sempre da terminale:
  • Montiamo l’hard disk. La funzione di automount (non appena si collega l’hard disk) che possiede raspbian dà problemi perché non consente la scrittura da parte di altri programmi, in particolar modo al client torrent che installeremo. Nel mio caso, ho l’hard disk HD320G “automontato” in media/HD320G, con il comando lsblk verifichiamo quale sia il suo indirizzo nel formato /dev/sd..

    Nel mio caso (e sicuramente anche nel vostro se non avete altri supporti di memorizzazione collegati) si tratta di /dev/sda1 quindi tutto ciò che dobbiamo fare è smontarlo e rimontarlo con ntfs-3g creando una cartella hdd_ext (oppure il nome che desiderate) in media con mkdir, in questo modo:

    Ora è tutto pronto per scrivere correttamente nel nostro HDD esterno.

    Ovviamente ad ogni accensione della raspberry dobbiamo rieseguire questi comandi, per far ciò automaticamente possiamo innanzitutto creare uno script bash in /home/pi magari denominato startup.sh che sarà composto in questo modo, per esempio:

    e renderlo automaticamente avviantesi citandolo nel file /etc/init.d/rc.local, scrivendo nell’ultima riga del suddetto file:

    Da notare nello script startup.sh che la riga 15 è strettamente necessaria (vedi articolo dedicato) mentre le righe 3 e 13 ci saranno più chiare proseguendo nella guida.

Installiamo e configuriamo Transmission

Ora che abbiamo reso il nostro Raspbian un ambiante confortevole bisogna installare il nostro client torrent: Transmission. Intalleremo una versione “demone” senza interfaccia grafica (almeno da desktop) perché il nostro obiettivo è lasciare accesa la Raspberry senza un monitor, né mouse e né tastiera ma con solo l’hdd collegato. Tuttavia il pregio di questo programma è che esso possiede una comoda interfaccia web per cui potremo sapere come vanno i nostri download solamente digitando l’indirizzo IP della nostra macchina, ovunque noi fossimo.

Installazione

Configurazione

Per procedere alla configurazione fermiamo il demone (operazione strettamente necessaria altrimenti le modifiche non avranno effetto) ed apriamo il file di configurazione sito in /etc/transmission-daemon/

Ecco come si presenterà il file di configurazione settings.json, con evidenziate le righe che ci interessano

Alle righe 15 e 23 bisogna scrivere gli indirizzi delle nostre cartelle, alla riga 24 attiviamo la cartella ci cache, alla riga 47 attiviamo l’interfaccia web e alla riga 45 la settiamo che possiamo accedervi senza una password. E’ importante settare la riga 53 su “false“. Altrimenti non saremo in grado di accedere all’interfaccia web.

Operazioni Finali

A questo punto settiamo il nostro nome utente (nel mio caso “pi”) come proprietario dei file di settaggio (Ond’evitare problemi di permessi):

E riavviamo transmission

A questo punto possiamo accedere all’interfaccia web di Transmission da qualsiasi pc della nostra rete locale digitando l’ip della raspberry e la porta: es 192.168.0.7:9091. Ecco come si presenta l’interfaccia:

L'interfaccia web-based di transmission-daemon sulla Raspberry Pi

L’interfaccia web-based di transmission-daemon sulla Raspberry Pi

Da qui possiamo aggiungere, rimuovere (attraverso l’icona blu in alto a sinistra) o controllare torrent e magnet-link.

IP Blocking

Come ultimissima precauzione finale aggiungiamo una grande lista di IP che verranno bloccati soprattutto per i filtri AntiP2P imposti dai gestori. Quindi nell’interfaccia web di Transmission clicchiamo sulla chiave inglese poi Peers poi Enable Blocklist e aggiungiamo questo link

Poi Update come nella figura sottostante

La pagina Peers di Transmission - Web

La pagina Peers di Transmission – Web

Commentate con i vostri dubbi, i vostri pensieri e le vostre correzioni!