ASSEGNARE IP STATICO A SCHEDA RASPBERRY
CREARE UN’ IMMAGINE (BACKUP) DELLA SCHEDA
ATTIVARE COPIA/INCOLLA TRA SISTEMI OPERATIVI DIVERSI
Formattare la scheda con SDFormatter settando ADJUSTMENT su ON
Copiare in radice i files da NOOBS (unzippati) ultima versione
Inserire la scheda sul Raspberry e dare tensione
Settare (in baso a destra) la tastiera
Configurare (in alto a destra) la connessione wifi
Selezionare il sistema operativo da installare ed avviare
Su Preferenze à Raspberry configuration .--> Interfaces: Controllare che sia abilitato il SSH
Su Preferenze à Raspberry configuration .--> Localization: Eseguire tutti i settaggi
AGGIORNAMENTO (consigliato periodicamente ma può durare molto)
Da Terminale digitare:
sudo apt-get update
sudo apt-get upgrade
--------------------------------------------------------------
Da Terminale digitare:
sudo apt-get install tightvncserver
vncserver :1 (da eseguire ad ogni reboot)
sarà chiesta una PWD max 8 caratteri (caratteri in eccesso saranno troncati) e la conferma
alla domanda successiva rispondere “n”
Per rendere automatico al boot l’avvio del servizio (esempio su porta 1):
aprire il file rc.local digitando il comando:
sudo nano /etc/rc.local
quindi il seguente prima della linea ‘exit 0’:
su - pi -c '/usr/bin/tightvncserver :1'
Salvare ed uscire (ctrl + x quindi y)
Riavviare il PI con il comando:
sudo reboot
Per conferma dell’attivazione de VNC sulla porta 1 digitando
vncserver :1
si ottiene la risposta “A VNC server is already running at :1”
Per interrompere il servizio digitare il commando (sulla porta 1):
vncserver -kill :1
Per riattivare il servizio digitare il commando (sulla porta 1specificando risoluzione e size caratteri):
vncserver :1 –geometry 1024x600 –depth 24
Installare sul PC o tablet o smartphone il Client appropriato per il relativo sistema operativo (ad esempio da realvnc website ).
ASSEGNARE IP STATICO A SCHEDA RASPBERRY
Aprire il file interfaces con il comando da terminale:
sudo nano /etc/network/interfaces
ed editarlo in questo modo:
iface lo inet loopback
allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
auto wlan0
iface wlan0 inet static
address 192.168.1.200
gateway 192.168.1.1
netmask 255.255.255.0
auto eth0
iface eth0 inet static
address 192.168.1.200
gateway 192.168.1.1
netmask 255.255.255.0
in cui
address: Indrizzo ip statico da assegnare al raspberry.
gateway: Indirizzo ip corrispondente al router della propria rete
netmask: sempre 255.255.255.0
Il eth0 vale per le connessione wired (via cavo) mentre quello sotto wlan0 varlgono per i collegamenti wireless (senza fili).
-----------------------------------------------------------------------------------------------------------------------------
Utilizzare il software Win32 Disk Imager (Vedi à)
Inserire la scheda SD in un lettore collegato al PC. (Windows segnalerà, con ogni probabilità, che la SD necessita di essere “riparata” in quanto Windows non è in grado di leggere le partizioni Linux utilizzate sul Raspberry. Ignorare quindi questo Warning)
Assegnare un nome e una collocazione al file Immagine (.img)
Leggi esegue la copia da Dispositivo a File immagine (Backup)
Scrivi ripristina una immagine sul Dispositivo. (Restore)
ATTIVARE COPIA/INCOLLA TRA SISTEMI OPERATIVI DIVERSI (ES. DA WINDOWS)
Installare ‘autocutsel’ con:
sudo apt-get install autocutsel
quindi aprire /home/pi/.vnc/xstartup con:
nano /home/pi/.vnc/xstartup
ed inserire la linea di codice in grassetto come segue:
#!/bin/sh
xrdb $HOME/.Xresources
xsetroot -solid grey
autocutsel -fork
#x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
#x-window-manager &
# Fix to make GNOME work
export XKL_XMODMAP_DISABLE=1
/etc/X11/Xsession
La funzione sarà attiva al riavvio di vncserver
(stop vncserver con. vncserver –kill :1)
(riavvia vncserver con: vncserver :1 –geometry 1024x600 –depth 24)
NB: se si arresta il VNC, il riavvio non potrà essere effettuato dal Client (essendo esso disconnesso) ma solo dal Server (che necessita quindi della tastiera) oppure con un reboot se il VNC è configurato per partire in automatico.
Uno script in PHP residente su Server individua l’IP esterno e lo scrive su un file di testo sullo stesso Server.
Uno script Python si occupa di lanciare ad intervalli regolari il suddetto script PHP e a gestire i transitori senza Rete. Questi i listati:
IP_detect.php collocato in /X_user/IP/ e lanciabile con www.sito.xxx/X_user/IP/IP_detect.php scrive l’IP in www.sito.xx/public/IP/IP.txt
#!/usr/bin/php
<?php
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip0 = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip0 = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$ip0 = $_SERVER['REMOTE_ADDR'];
}
ob_start();
$data = $ip0.":80";
$fp = fopen("../../public/IP/IP.txt", "w");
fwrite($fp, $data);
fclose($fp);
?>
IpCheck.py lancia ad intervalli lo script precedente su Server, scrive l'IP e gestisce i transitori
#!/usr/bin/python
#lancia ad intervalli lo script su server e scrive l'IP #in un file di testo remoto accessibile da web
import time
import requests
import os
url = 'http://www.isolatiberina.it/X_user/IP/IP_detect.php';
while True: # ciclo infinito
query = {'field': "IP"}
try:
os.path.basename(url)
res = requests.post(url, data=query)
print(res.text)
time.sleep(5) #intervallo in secondi tra due scansioni (suggested 300)
continue
except:
print "errorcode 0x80070002"
time.sleep(30) #delay in secondi prima di ritentare la connessione
Questi invece i comandi per IP detection da inserire in un eventuale script python:
ip0=$(curl icanhazip.com) # individua l’IP e lo memorizza nella variabile ip0
echo "$ip0" # display della variabile
Tra i vari metodi il più semplice è quello di usare Crontab che serve ad eseguire operazioni pianificate.
Crontab è una tabella, una "agenda" dei lavori che vengono controllati dal comando Cron con sintassi:
sudo crontab -e
Si apre un file di testo con alcune righe di commento (precedute da # )
Va aggiunta in fondo al file questa riga di comando:
@reboot python /percorso/programma.py &
Questo dice a Cron che al Reboot deve eseguire programma.py con Python. La “&” alla fine della riga indica il comando viene eseguito in background, e che il boot può prosegue senza attendere il programma.
Creare uno script di inizializzazione in /etc/init.d che chiamiamo AutoStart e registrarlo usando
update-rc.d
in questo modo l’applicazione viene avviato e arrestata automaticamente all’avvio e allo spegnimento del sistema.
Creiamo lo script con
sudo nano /etc/init.d/AutoStart
e mettiamo gli script da lanciare in /usr/local/bin/ con ad esempio
sudo nano /usr/local/bin/IpCheck
Questo un possibile listato:
#! /bin/sh
# /etc/init.d/AutoStart
### BEGIN INIT INFO
# Provides: noip
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Simple script to start a program at boot
# Description: A simple script start / stop a program a boot / shutdown.
### END INIT INFO
# If you want a command to always run, put it here
# Carry out specific functions when asked to by the system
case "$1" in
start)
echo "Starting IpCheck"
# run application you want to start
python /usr/local/bin/IpCheck
;;
stop)
echo "Stopping IpCheck"
# kill application you want to stop
killall IpCheck
;;
*)
echo "Usage: /etc/init.d/AutoStart {start|stop}"
exit 1
;;
esac
exit 0
Rendiamo ora lo script eseguibile digitando,sempre da terminale:
sudo chmod 755 /etc/init.d/AutoStart |
|||||
|
|||||
Proviamo ad avviare lo script con:
sudo /etc/init.d/AutoStart start |
e successivamente a stopparlo con:
sudo /etc/init.d/AutoStart stop |
Concludiamo registrando lo script per partire all’avvio. Per registrare lo script da eseguire all’avvio e spegnimento , eseguire il seguente comando:
sudo update-rc.d AutoStart defaults |
Nel caso si volesse rimuovere l’avvio dello script appena creato bastera digitare:
sudo update-rc.d –f AutoStart remove |
Questo è tutto!
aprire il file rc.local e digitare il comando:
sudo nano /etc/rc.local
quindi il seguente prima della linea ‘exit 0’:
su - pi -c '/usr/local/bin/AutoStart :2'
# Scrive un file.
out_file = open("test.txt","w")
out_file.write(myip)
out_file.close()
# Legge un file.
in_file = open("test.txt","r")
text = in_file.read()
in_file.close()
print 'il mio IP ', text