venerdì 21 novembre 2014

Monitorare IO del disco su Linux

il metodo piu' semplice per monitorare la lettura/scrittura su disco risulta essere il comando iostat (utile piu' che altro perche' sempre installato di default)

con lo switch -m i dati vengono espressi in un formato umanamente leggibile (megabyte al posto di blocchi)

------------------------------------------------
Linux 2.6.32-504.1.3.el6.x86_64 (localhost) 21/11/2014 _x86_64_ (8 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
                   6,86      0,00    1,52         23,19    0,00      68,43

Device:            tps    MB_read/s    MB_wrtn/s    MB_read    MB_wrtn

sda              53,99         0,12                0,75                602       3866
------------------------------------------------
nella riga sda si leggono i valori instantanei di lettura/scrittura e di seguito quelli cumulativi


Per avere pero' un'idea piu' precisa di quale e' il programma che genera traffico su disco e' molto utile il programma in Python iotop (link)
con una interfaccia ncurses ed in tempo reale e' possibile monitorare in dettaglio la fase di IO su disco

Recuperare database YUM su Centos 7

Mentre cercavo di fare l'installazione di un pacchetto con yum la macchina e' andata incontro ad un reboot effettuato da un altro amministratore. Il risultato finale e' stato che dopo il riavvio il database degli rpm era corrotto con il seguente messaggio 

DB_RUNRECOVERY: Fatal error, run database recovery

per risolvere il problema si deve ricostruire l'indice dei pacchetti (come indicato a questo link) mediante i seguenti comandi

cd /var/lib/rpm 
rm -f __db* 
db_verify Packages
rpm -v --rebuilddb

venerdì 14 novembre 2014

Estimote RSSI

A seguito del precedente post ho ripetuto la prova anche con un Estimote



Valore medio RSSI: -67.1
St.Deviation : 1.95
Scarto massimo positivo : 2.15
Scarto massimo negativo : -3.84


venerdì 7 novembre 2014

Evadere da un proxy server 2 (la vendetta)

In un precedente post avevo scritto dei tentativi falliti di evadere dal http proxy server aziendale


Ovviamente non mi sono scoraggiato ed ho trovato un nuovo software Shellinabox che crea un server http su cui instrada una shell ssh mediante una interfaccia Ajax....poteva essere la soluzione per fregare il server proxy che instrada solo connessioni http legittime
si installa tramite il classico
apt-get install shellinabox

poi si edita il file di configurazione per il bucare il server proxy su una porta permessa (la 443 https)
nano /etc/default/shellinabox
in giallo l'ip della macchina

# TCP port that shellinboxd's webserver listens on 
SHELLINABOX_PORT=443

 # specify the IP address of a destination SSH server 
SHELLINABOX_ARGS="--o-beep -s /:SSH:150.xxx.xxx.xxx"

a questo punto si creano le chiavi per la connessione SSL

cd /var/lib/shellinabox
openssl genrsa -des3 -out server.key 1024
openssl req -new -key server.key -out server.csr
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
cat server.crt server.key > certificate.pem


si riavvia il servizio per le nuove impostazioni
service shellinabox reload

e si fa puntare il browser del client interno all'http proxy all'indirizzo https://150.xxxx.xxx.xxx, si accettano le eccezioni del certificato SSL e ci si trova di fronte alla shell ssh


Come si vede il login di root non e' permesso (nonostante il server ssh abbia PermitLoginRoot Yes) ma cio' puo' essere positivo
Si puo' obbiettare sulla falla di sicurezza che questo servizio puo' creare ed in questo senso puo' essere intelligente metterlo su una macchina destinata solo a fare da ponte verso l'esterno senza servizi critici e di produzione installati

in conclusione Missione Compiuta

mercoledì 5 novembre 2014

martedì 4 novembre 2014

Trilaterazione 2D con beacon


L'algoritmo di trilaterazione e' una tecnica che permette di individuare la posizione di un punto sconosciuto conosciuto le distanze dello stesso da punti quotati. La versione 3D e' alla base del posizionamento GPS ma quello che mi interessa e' la sua versione 2D per cercare di poter fare posizionamento indoor mediante antenne WiFi o beacons

Su questo argomento esiste una vasta letterature ingegneristica con risultati che vanno da ottimi a pessimi.

Nell'immagine viene riportato il metodo di calcolo (non ricordo la fonte)
Per semplicita' uno dei punti di riferimento e' in (0,0) mentre un altro e' sull'asse X (d,0). Il terzo punto e' in (i,j) mentre le distanze del punto incognito sono  rispettivamente R1, R2 ed R3



Per la prova ho usato tre beacons. Ho quindi realizzato una curva di taratura (per quanto possibile) che mi convertisse il valore di RSSI in metri

La prova e' stata effettuata creando una griglia regolare di 5x5 m e 3x3 m ed effettuando misure su alcuni nodi. In blu sono riportati i valori reali ed in rosso le posizioni calcolate
Importante: per ogni posizione e' stato preso il valore istantaneo di RSSI senza effettuare medie  di lunga durata perche' il tentativo era di tracciare il percorso di una persona in movimento

Risultati griglia 5x5

Risultati griglia 3x3 m

E' evidente che la prova ha avuto un esito decisamente negativo. L'algoritmo di calcolo di trilaterazione funziona, cio' che difetta e' la stabilita' del segnale dei beacons e l'impossibilita' di avere una legge affidabile per convertire i valori di RSSI in distanze

lunedì 3 novembre 2014

RSSI vs Distanza per CC2540/CC2541/Gimbal10

Giusto per prova ho messo in grafico i valori di RSSI e distanza per vedere se si trova una legge semplice per calcolare la distanza (non mi interessa se la legge di correlazione ha un senso fisico, solo che abbia un buon fit)

I valori sono mediati su molte misure (altrimenti si osservano le fluttuazioni del post precedente)

 Come indicazione generale si riesce a calcolare discretamente la distanza per valori inferiori al 1.5 m. CC2540 e' quello per cui i valori di RSSI vanno rapidamente a -100 e quindi sono indicati solo per una prossimita' molto stretta