Trasformare uno smartphone in un server con servizi su rete pubblica
Spesso si accumulano vecchi smartphone, danneggiati o non più utilizzati, in un cassetto. Con Termux, una shell Linux su Android, è possibile dare a questi dispositivi una nuova vita. Non trascurabile la possibilità di approfittando della sensoristica come gps, telecamere, microfono che tutti questi dispositivi hanno oltre ad una cerca potenza di calcolo, spesso non trascurabile, superiore a SBC (Single Board Computer) blasonati. Inoltre la batteria, della quale sono dotati, consente allo smartphone, se collegato ad un alimentatore, di avere un UPS.
L'obiettivo è avere un host con un servizio pubblico installato e la possibilità di riattivare tutto dopo un eventuale riavvio, schedulare dei processi ed essere raggiungibile su rete pubblica.
Con Termux si ha accesso, sotto vediamo come, a tutte le cartelle dello smartphone, anche se protette da password applicative.
Step 1 - Trasformare uno smartphone Android in un server Linux
Installare Termux
https://f-droid.org/repo/com.termux_1022.apk
Dare tutte le autorizzazioni di accesso all'app Termux
Step 2 - Installare SSHD
$ pkg update && pkg upgrade
$ pkg install openssh
Per conoscere l'ip del proprio dispositivo e potersi collegare in ssh da un PC per operare in maniera più comoda:
Per fare in modo che il servizio sshd parta ad ogni boot, nella dir /data/data/com.termux/files/home/.termux/boot creare i file script di avvio dei servizi, per sshd:
Che deve contenere:
#!/data/data/com.termux/files/usr/bin/sh
termux-wake-lock
sshd
Bisogna concedere a tale file i permessi di esecuzione:
Per conoscere il proprio username (da annotare) digitare:
A questo punto conviene impostare una password per l'utente che Termux ha creato:
Per esporre la shell, se lo smartphone è collegato ad una wi-fi, bisognerà impostare una regola di port-forwarding sul router in modo che esponga la porta 8022, che è dove gira ssh di default su termux.
Step 3 - Installare server Web
Installare Nginx per fare da server web:
$ pkg update && pkg upgrade
$ pkg install nginx
Per fare in modo che il servizio nginx parta ad ogni boot, nella dir /data/data/com.termux/files/home/.termux/boot creare i file script di avvio per nginx:
Che deve contenere:
#!/data/data/com.termux/files/usr/bin/sh
termux-wake-lock
nginx
Per modificare la pagina index:
$ nano $PREFIX/share/nginx/html/index.html
Ora conoscendo l'ip del proprio smartphone sulla propria rete locale basterà puntarlo con un browser e con il protocollo http sulla porta 8080:
Per esporre la pagina bisognerà impostare una regola di port-forwarding sul router, se lo smartphone è collegato ad una wi-fi, in modo che esponga la porta 8080.
Step 4 - Fare in modo che il servizio sia raggiungibile su rete pubblica
Per ottenere che i servizi che installo siano raggiungibili su rete pubblica ho creato un sotto dominio su duckdns.org.
Ho creato prima una directory per i log nella home:
Poi nel solito percorso di boot ho creato uno script per aggiornare l'ip dinamico, c:
/data/data/com.termux/files/home/.termux/boot/start-dnsupdate
Che deve contenere solo:
#!/data/data/com.termux/files/usr/bin/sh
echo url="https://www.duckdns.org/update?domains=[DOMINIO].duckdns.org&token=[TOKEN DI ACCESSO]&ip=" | curl -k -o ~/log/duckdns/duck.log -K -
Step 5 - Per poter schedulare dei processi
Ho installato cron per schedulare i processi e l'ho lanciato:
$ pkg update && pkg upgrade -y
$ pkg install cronie
$ crond
Ed ho aggiunto il solito script al .boot per far partire il processo automaticamente:
Che deve contenere:
#!/data/data/com.termux/files/usr/bin/sh
termux-wake-lock
crond
Ho impostato un processo cron che ogni giorno alle 2.30 esegue lo script di aggiornamento del DNS:
Inserendo la stringa:
30 2 * * * /data/data/com.termux/files/home/.termux/boot/start-dnsupdate >/data/data/com.termux/files/home/log/logdailycron.log 2>&1
Step 6 - Accedere al dispositivo
Termux per accedere al dispositivo ospite (telecamere, vibrazione, torcia, posizione ecc.) ha bisogno delle sue API.
Per installare termux-api usare il link seguente ed installarlo come app Android (non con pkg install):
https://f-droid.org/repo/com.termux.api_1002.apk
Dopo l'installazione riavviare il dispositivo per fare in modo che l'applicazione faccia partire il servizio necessario.
Esempi d'uso:
$ termux-battery-status
{ "present": true,
"technology": "Li-poly",
"health": "GOOD",
"plugged": "PLUGGED_AC",
"status": "NOT_CHARGING",
"temperature": 27.0,
"voltage": 4068,
"current": -123000,
"percentage": 87,
"level": 87,
"scale": 100,
"charge_counter": 469000
}
Tutte le API possibili li trovi qui.
Step 7 - Programmiamo con Python
Per l'applicazione web che voglio creare esiste uno script python che usa le termux-api chiamandole da shell, questo lo rende molto controllabile e quindi installo le librerie per python: $ apt install python make wget termux-exec clang libjpeg-turbo freetype ffmpeg -y
$ env INCLUDE="$PREFIX/include" LDFLAGS=" -lm" pip install Pillow
$ pkg install python-numpy
Dopo ho provato a lanciare lo script e funziona perfettamente.
Commenti
Posta un commento