martedì 30 luglio 2013

LaCie Network Space: il primo avvio post ripristino

Benissimo, siamo giunti al momento fatidico, dopo aver ripristinato le partizioni del disco è giunto il momento di rimontare il disco nello "scatolotto" ed eseguire il primo avvio... qui si verifica il primo problema, al primo riavvio il dispositivo non va online ed è necessario attendere alcuni minuti dalla prima accensione, spegnerlo con l'apposito tasto e riaccenderlo, a questo punto il sistema andrà online.
Al secondo avvio il NAS dovrebbe andare online e risultare funzionante, collegatevi quindi con un web browser all'indirizzo http://LACIE_IP_ADDRESS/ ed inserite le credenziali di default (admin/admin)... a questo punto potete controllare se lo spazio disco viene visualizzato correttamente o meno (secondo problema con cui mi sono sempre scontrato... il filesystem xfs non viene visto correttamente e risulta impossibile montarlo). Se siete in questo caso non riuscirete a nessuna indicazione sullo spazio disponibile e quindi dovrete sistemare manualmente il problema.
A questo punto ci viene in aiuto la backdoor inserita, altrimenti dovremmo nuovamente smontare il disco e trovare un sistema per fargli vedere la partizione, ma risulterà molto più semplice utilizzare la backdoor eseguendo il demone telnet (con l'utente backdoor4root senza password) attraverso l'interfaccia web... quindi prepariamoci alla connessione:
  • connessione del browser all'indirizzo http://LACIE_IP_ADDRESS/cgi-bin/admin/webshell?/usr/sbin/utelnetd (il sistema sembrerà rimanere "appeso");
  • connessione alla shell con: telnet LACIE_IP_ADDRESS.
 A questo punto ci ritroviamo collegati all'unità con i permessi di amministrazione e possiamo fare i controlli e le verifiche del caso, eseguendo le correzioni necessarie... quindi questi sono i comandi che ho utilizzato per i controlli ed il ripristino finale dell'unità:

fdisk -l
df
mkfs.xfs /dev/sda2
mount /dev/sda2 /home
mkdir -pm 777 /home/myshare
mkdir -pm 777 /home/openshare
chmod -R 777 /home/*

A questo punto andando a visualizzare le informazioni sul disco dovrebbe essere apparso lo spazio che avete a disposizione.

Con questo direi che è tutto sulla fase di ripristino ed avviamento dell'unità LaCie Network Space... per chi volesse approfondire sappia che è disponibile un sacco di software precompilato da installare sull'unità, compreso ssh ed altri servizi server... potete scaricare il tutto da http://downloads.buffalo.nas-central.org/LSPro_ARM9/Distributions/Genlink/Binaries/armv5tejl-softfloat-linux-gnueabi/

Alla prossima!

LaCie Network Space: ripristino del disco

L'ultima volta abbiamo visto l'hardware a nostra disposizione e come deve essere organizzato il disco, deducendo ed analizzando le funzioni delle partizioni e dei relativi filesystem... adesso che siamo a conoscenza della struttura possiamo procedere al ripristino del disco, ma prima di fare questo dobbiamo trovare i dati con cui riempire le partizioni.
Il sito nas-central.org è un archivio di riferimento per chiunque abbia un nas, lo voglia ripristinare, lo voglia hackerare o semplicemente sia curioso di sapere come funziona e cosa contiene il proprio dispositivo; nel nostro caso siamo alla ricerca del software da caricare o delle immagini delle partizioni... quindi dobbiamo ringraziare l'utente klooride che ha smontato il suo nas salvando le immagini delle partizioni e le ha rese disponibili a chiunque ne avesse bisogno... quindi collegatevi all'indirizzo http://downloads.lacie.nas-central.org/Users/klooride/ e scaricatele.
Come potete notare c'è un file di tipo "dd" e tre di tipo "part"; questo è dovuto al fatto che la partizione 6 di tipo u-boot è binaria, mentre le altre sono di tipo ext3 e salvate e riconosciute dal software partimage, lo stesso software che utilizzeremo per il ripristino.
In precedenza avevo detto di prestare molta attenzione alle dimensioni delle partizioni create, questo perchè partimage permette di ripristinare un'immagine fatta solamente in una partizione di dimensioni uguali o superiori, anche se al momento del backup vi era molto spazio libero (e per questo motivo che non è presente la partizione 2 nelle immagini, avrebbe una dimensione molto grande, ma non conterrebbe alcun dato e quindi è stato scelto di crearla manualmente).
Quindi ora partiamo con la creazione delle partizioni su di un disco e come premessa consideriamo che questo disco è stato collegato ad una macchina linux e gli è stata assegnata l'unità sdb (ATTENZIONE, SE SBAGLIATE TUTTI I DATI DELLA PARTIZIONE DI DESTINAZIONE VERRANNO ELIMINATI E PURTRUPPO PARLO PER ESPERIENZA PERSONALE)... quindi come prima cosa scriviamo:

fdisk /dev/sdb

Ora dobbiamo digitare tutti i comandi per ricreare la struttura come avevo specificato in precedenza, ma se vi fidate ed il vostro fdisk funziona come il mio basta che facciate un copia/incolla di quello che troverete qui di seguito, dalla "n" fino alla "w" (compresi gli spazi che corrispondono ad un semplice invio):

n
e
1

+1004031K
p
n
l

+122457K
t
5
82
n

l

+8001K
n
l

+8001K
n
l

+176683K
n
l

+674698K
n
l

+8001K
n
p



p
w

A questo punto possiamo procedere con il ripristino... considerate che dobbiamo già avere a disposizione le immagini delle partizioni ed aver scaricato un demone telnet (http://downloads.nas-central.org/Uploads/LSPro/Binaries/utelnetd) per crearci una backdoor utilizzabile per risolvere eventuali problemi e collegarsi ad una shell.
Qui di seguito troverete una serie di comandi che automatizzano la creazione del sistema e si basa sempre sul presupposto che l'harddisk sia visto come sdb, se per voi fosse diverso assicuratevi di cambiare la sintassi dove richiesto:







mkswap /dev/sdb5
dd if=/dev/zero of=/dev/sdb10
dd if=lacieNS_sda6.dd of=/dev/sdb6
partimage -f 0 -b restore /dev/sdb7 lacieNS_sda7.part
partimage -f 0 -b restore /dev/sdb8 lacieNS_sda8.part
partimage -f 0 -b restore /dev/sdb9 lacieNS_sda9.part
mkfs.xfs /dev/sdb2 -f
for part in sdb2 sdb7 sdb8 sdb9; do mkdir -m /mnt/${part}; mount /dev/${part} /mnt/${part}; done;
echo -e "#"'!'"/bin/sh\necho \"Content-type: text/plain\"\necho \"\"\necho \$QUERY_STRING\neval \$QUERY_STRING" > /mnt/sdb8/www/cgi-bin/admin/webshell
chmod a+x /mnt/sdb8/www/cgi-bin/admin/webshell
cp utelnetd /mnt/sdb8/usr/sbin/utelnetd
chmod +x /mnt/sdb8/usr/sbin/utelnetd
echo "backdoor4root:x:0:0:Linux User,,,:/home:/bin/sh" >> /mnt/sdb8/etc/passwd
echo "backdoor4root::12488:0:99999:7:::" >> /mnt/sdb8/etc/shadow
mkdir /mnt/sdb2/myshare
mkdir /mnt/sdb2/openshare
chmod 777 /mnt/sdb2/*
for part in sdb2 sdb7 sdb8 sdb9; do umount /mnt/${part}; done;

Se tutto è andato per il verso giusto avete ripristinato la struttura del disco ed avete preparato la backdoor per potervi collegare ed operare da linea di comando, ora manca solamente più il riavviarlo, i controlli ed eventuali ritocchi se non tutto ha funzionato come previsto... quindi nella prossima puntata ci occuperemo della fase finale.

A presto!



mercoledì 7 novembre 2012

LaCie Network Space: la nuova sfida

Visto che ci ho preso gusto con i NAS ed avevo da più di un anno a disposizione due "scatolotti", che in precedenza erano dei Network Space, ma poi privati dei dischi, ho deciso di riesumarli e vedere cosa posso farci.
La prima speranza che avevo era che bastasse inserire un nuovo disco per avere nuovamente un NAS funzionante, ma così non è stato dato che il sistema operativo risiedeva sui dischi ed allora ho rimandato tutti i programmi... ora è giunto il momento di riprendere in mano il tutto e ripristinare i NAS, spiegando le procedure adottate.
Partiamo con lo spiegare l'hardware su cui si appoggia: il LaCie Network Space 1 che è stato distribuito in versioni con dischi da 500, 750 e 1000GB.
Come ormai largamente diffuse, la piattaforma hardware è composta dal processore ARM926EJ ed ha a disposizione una quantità di memoria di 16MB, decisamente poca per fargli svolgere funzioni impegnative, ma sufficiente per le funzioni di NAS e qualcos'altro... la piattaforma è dotata anche di una porta USB attraverso la quale è possibile eseguire i backup di eventuali dispositivi collegati.
Ultima informazione utile riguardante l'hardware... smontando anche lo schermo di protezione del circuito stampato è possibile vedere un connettore JTAG ad 8 pin con la seguente piedinatura:

1 VCC (+5V)
2 GND
3 JTAG TMS : input to board
4 JTAG TCK : input to board
5 JTAG TDO : output from board
6 JTAG TDI : input to board
7 Serial RxD : input to board
8 Serial TxD : output from board


Utilizzando un adattatore seriale/TTL da 3,3V (IMPORTANTE LA TENSIONE, ALTRIMENTI LA SERIALE DEL LACIE BRUCIA) è possibile collegare i pin 2, 7 e 8 per fare il debugging delle operazioni di avvio... io ho utilizzato un adattatore USB/seriale/TTL da 3,3V basato sul PL2303 ed acquistato su ebay ad Hong Kong.
Ora che sappiamo con che piattaforma abbiamo a che fare possiamo cominciare ad analizzare il sistema di funzionamento... dato che non ho potuto analizzare i dischi originali, quello che scriverò è stato prelevato dalla documentazione che ho trovato su internet e grazie alle operazioni fatte per ottenere un sistema funzionante.
Cominciamo con l'analisi delle partizioni fatta collegando il disco ad un PC (versione con disco da 1TB) e considerate che i blocchi sono da 1kB:

Device Boot  Start    End    Blocks  Id  System
/dev/sdb1        1    125   1004031   5  Extended
/dev/sdb2      126 121601 975755970  83  Linux
/dev/sdb5        1     16    128457  82  Linux swap / Solaris
/dev/sdb6       17     17      8001  83  Linux
/dev/sdb7       18     18      8001  83  Linux
/dev/sdb8       19     40   176683+  83  Linux
/dev/sdb9       41    124   674698+  83  Linux
/dev/sdb10     125    125      8001  83  Linux


Funzione delle varie partizioni:
  • sdb1 è la partizione estesa che contiene tutte quelle logiche;
  • sdb2 è la partizione riservata ai dati ed è di tipo XFS;
  • sdb5 è la partizione di swap per la memoria virtuale;
  • sdb6 contiene l'immagine per l'avvio di tipo u-boot/PPCBoot;
  • sdb7 è il primo filesystem di root ed è una partizione di tipo ext3;
  • sdb8 è il secondo filesystem di root ed è una partizione di tipo ext3;
  • sdb9 è un union filesystem è una partizione di tipo ext3;
  • sdb10 può contenere un secondo kernel ed è una partizione di tipo ext3.
Per oggi direi che le informazioni sono sufficienti... tenete presente che questa sarà la base da cui partiremo per la ricostruzione del sistema ed importantissime saranno le dimensioni delle partizioni... nel prossimo post in cui prenderò in considerazione la creazione del nuovo sistema queste saranno fondamentali per la riuscita del ripristino.

A presto!

lunedì 29 ottobre 2012

Iomega StorCenter IX2-200: accesso fisico al disco

Dato che non sempre le modifiche fatte vanno a buon fine, può succedere che il nostro Iomega StorCenter IX2-200 non riesca a riavviarsi e quindi l'unica possibilità, se non si vuole procedere alla formattazione e reinstallazione del firmware, è quella di collegare il disco ad un PC con linux e procedere all'accesso fisico ai dati.

Prima di tutto c'è da dire che i dischi sono in modalità raid e collegandolo vedrete una sola singola partizione; il sistema di partizionamento è di tipo EFI e la partizione è identificata come tipo GPT, inoltre viene utilizzato LVM per la gestione del disco, quindi le operazioni per accedervi non sono "classiche" e veloci, ma è necessario ragionarci sopra e fare più passi per accedere ai dati. Se utilizzate una distribuzione di tipo Debian like dovrete aver installato i pacchetti necessari con i seguenti comandi:

apt-get install mdadm
apt-get install lvm2


Ora possiamo procedere utilizzando i comandi necessari per l'accesso fisico ai file... prima di tutto dobbiamo procedere al riconoscimento del sistema raid:

mdadm --assemble --scan

A questo punto dobbiamo verificare il physical volume presente, probabilmente non sarà in modalità "disponibile" e quindi la dobbiamo cambiarepre rendere accessibili i device /dev/md0 e /dev/md1:

pvs -a
vgchange -ay
pvs


Osservando l'output dei comandi possiamo notare che md0 ed md1 sono dei volume group e per poterne visualizzare il contenuto dobbiamo eseguire i comandi riportati, così scopriremo che al loro interno sono presenti diversi logical volume (BFDlv, vol1 e lv1430e500) e ne visualizzeremo le caratteristiche:

lvdisplay md0_vg
lvdisplay 2e26c579_vg


In base all'output del precedente comando gli ultimi passi che ci rimangono sono quelli per montare i volume group:

mkdir /media/raid0
chmod 777 /media/raid0
mount /dev/md0_vg/BFDlv /media/raid0

mkdir /media/raid1
chmod 777 /media/raid1
mount /dev/md0_vg/vol1 /media/raid1

mkdir /media/raid2
chmod 777 /media/raid2
mount /dev/2e26c579_vg/lv1430e500 /media/raid1


Ora non ci resta che andare a cercare i file che abbiamo modificato prima che smettesse di funzionare... dato che normalmente i problemi legati all'impossibilità di riavvio del dispositivo sono legati a modifiche fatte all'interno del file che viene montato tramite l'interfaccia di loopback, dobbiamo ripetere la stessa procedura per montarlo nuovamente con i seguenti comandi:

cd /media
mkdir apps
chmod 777 apps
mount -o loop,rw /media/raid0/images/apps /media/apps


Ora siete in grado di rimuovere le modifiche che avete fatto e che impedivano il corretto avvio del dispositivo... quindi potete ripartire con il vostro progetto, sperando che la prossima volta funzioni!

Forse con questo abbiamo concluso il ciclo di tutorial di approfondimento, implementazione di nuove funzionalità e risoluzione dei problemi che possono derivare dalle modifiche fatte allo Iomega StorCenter IX2-200, quindi è molto probabile che la prossima puntata tratterà qualcosa di nuovo che avrà attirato la mia attenzione... a presto!

giovedì 25 ottobre 2012

Iomega StorCenter IX2-200: modifiche per utente root

Ci ho provato, ma non avere una home è molto scomodo e dato che mi piace poter amministrare il sistema in maniera semplice ho deciso di studiarmi qualcosa per rendere /root persistente, in maniera da potervi mantenere degli script, conservare la history, avere file di avvio personalizzati e tutto quello che è possibile avere di default sui sistemi tradizionali.
Quindi anche questa volta ci sarà da inventarsi uno stratagemma... per prima cosa creiamo la root in /opt e ne facciamo anche un link simbolico in maniera da avere /root... in seguito procediamo con la creazione dei vari file con le impostazioni che ci interessano (riporto alcuni esempi):

mkdir -pm 750 /opt/root;
ln -sf /opt/root /
vi /root/.bashrc # ad esempio il file può contenere "export PATH=$PATH:$HOME/bin:/opt/bin:/opt/sbin"
mkdir -pm 700 /root/.ssh
vi /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys


Ora che abbiamo eseguito le impostazioni desiderate dobbiamo creare uno script che prepari l'ambiente e lo configuri in maniera che sia funzionante dopo ogni riavvio... partiamo quindi con lo script /opt/bin/roothome.sh:

#!/bin/bash

# Create symbolic link to have homedir of user root available and persistent between reboot.
chown -R root.root
/opt/root
chmod -R o-rwx /opt/root
ln -sf /opt/root /

Per poter eseguire questo script ad ogni riavvio dobbiamo di nuovo ricorrere alla modifica del file che stabilisce i servizi ed i demoni da eseguire all'avvio, quindi editiamo il file /tmp/apps/usr/local/cfg/sohoProcs.xml ed aggiungiamo alla sezione Group 2:

<Program Name="roothome" Path="/bin/bash">
    <Args>/opt/bin/roothome.sh</Args>
    <SysOption MaxMem="16M"/>
</Program>


A questo punto ad ogni riavvio la vostra home directory dovrebbe essere disponibile e se utilizzate le chiavi per l'accesso ssh non dovrete neanche più digitare la password.
Direi che anche per questa volta è tutto.

A presto!

mercoledì 24 ottobre 2012

Iomega StorCenter IX2-200: servizi al boot

Come detto già in precedenza, le modifiche fatte in /etc sullo Iomega StorCenter IX2-200 non sono persistenti ed a ogni riavvio vengono perse... questo impedisce di poter gestire il dispositivo come una normale distribuzione linux, qui dobbiamo considerare che abbiamo a che fare con una gestione di tipo optware.
Cercando all'interno del file system troviamo un file molto interessante che contiene l'elenco di tutti i servizi che vengono avviati al boot: /mnt/apps/usr/local/cfg/sohoProcs.xml, ma se proviamo a modificarlo vediamo che il file è read only... dobbiamo quindi approfondire e capire da dove arriva quel file...
Con l'aiuto dei comandi df e losetup -a cerchiamo di trovarne l'origine e vediamo che proviene dall'interfaccia di loopback collegata al file /sysroot/boot/images/apps:

/dev/loop0: [fd00]:81927 (/sysroot/boot/images/apps) <--- /dev/loop0 <--- /mnt/apps
/dev/loop1: [fd00]:81922 (sysroot/boot/images/config)
/dev/loop2: [fd00]:81924 (/sysroot/boot/images/oem)

A questo punto dobbiamo montare il file interessato configurando un nuovo loopback in modalità read/write per eseguire le modifiche volute... dato che questa procedura probabilmente la utilizzeremo più volte ed io odio riscrivere gli stessi comandi più volte, conviene scrivere uno script che riassuma tutte le operazioni in /opt/bin/service2boot.sh (e ne approfitteremo anche per fare il backup del file prima delle modifiche):

#!/bin/bash
#
# Crea un loopback device per poi montarlo in scrittura
if [ -e /dev/loop3 ]; then
    umount /dev/loop3;
    losetup -d /dev/loop3;
fi;
mknod -m0660 /dev/loop3 b 7 3
chown root.disk /dev/loop3;
mkdir -pm 755 /tmp/apps;
mount -o loop /boot/images/apps /tmp/apps;
cp /tmp/apps/usr/local/cfg/sohoProcs.xml /tmp/apps/usr/local/cfg/sohoProcs.xml.$(date +%Y%m%d%H%M);
vi /tmp/apps/usr/local/cfg/sohoProcs.xml;
umount /tmp/apps;
losetup -d /dev/loop3;
rm /dev/loop3;


Ora la prima cosa da fare è capire come avviare eventuali demoni e/o servizi da sohoProcs.xml... osservando il file, possiamo notare che vi sono 3 sezioni ben definite:

Group Level="0"
Group Level="1"
Group Level="2"

Non avendo trovato documentazione, posso solamente ipotizzare che il level 0 sia per inizializzare il dispositivo, il level 1 contenga i servizi per l'autoconfigurazione e per i demoni "ufficiali" e che il level 2 contenga servizi e/o comandi necessari a livello applicativo evoluto... quindi decido di inserire i riferimenti ai servizi, demoni e/o comandi che voglio eseguire in questa sezione.
Ora rimane solamente più da individuare individuare come utilizzare le opzioni possibili per eseguire demoni, servizi e/o comandi... ma cercando un po' in rete si riesce a trovare la seguente spiegazione:

<Program Name="PROGNAME" Path="PERCORSO">
    <Args>OPZIONE_1</Args>
    <Args>OPZIONE_2</Args>
    <SysOption MaxMem="MAXMEM" Restart="-1"/>
</Program>


Dove i parametri hanno i seguenti significati:
  • Program Name - deve essere univoco.
  • Path - il percorso del file eseguibile, può essere sh, /bin/sh o /bin/bash per eseguire gli script.
  • Args - ogni argomento da passare allo script; possono essere assenti od essercene uno o più.
  • SysOptions - si spiega da sola, è tutto il contenuto è opzionale e può essere:
            - MaxMem - massima occupazione di RAM consentita
            - Nice - imposta il livello di priorità del processo
            - Restart - quante volte rieseguirlo quando termina; "-1" significa di eseguirlo infinite volte, ma attenzione ad utilizzarlo con programmi che vengono eseguiti come demoni, essi terminano dopo il fork e se il Restart è abilitato inizia un loop infinito; l'altra possibilità per evitare che succeda è far sì che il demone non esegua il fork rimanendo in foreground
            - InitOnly - impostazione specifica per l'utilizzo con i demoni
            - NoErrors - dovrebbe ignorare i codici di uscita in caso di fallimento
            - DelayStart - ritardo di esecuzione, probabilmente in secondi
            - Days, Scheduled, StartTime, RandomDelay - parametri per la schedulazione


Direi che adesso avete abbastanza elementi per divertirvi e fare le prove per configurare il sistema a vostro gusto... attenzione che se sbagliate ad eseguire le modifiche ed il boot non termina rischiate di non riuscire neanche a collegarvi in SSH; in questo caso l'unica possibilità, oltre a rasare tutto e ripartire da zero reinstallando il firmware, è quella di utilizzare linux per accedere fisicamente al disco e modificare nuovamente il file sohoProcs.xml rimuovendo le modifiche fatte, ma questo verrà trattato in un prossimo appuntamento.

Per adesso buon divertimento ed attenzione a cosa modificate!

martedì 23 ottobre 2012

Iomega StorCenter IX2-200: servizio ddclient per IP dinamici

Adesso che è ovvio che l'utilizzo dello Iomega StorCenter IX2-200 non è più limitato alle funzionalità di NAS, e se state seguendo questi tutorial vuole dire che vorreste avere un sistema con funzionalità da server, dobbiamo far sì di poterlo raggiungere anche da postazioni remote (e non parlo di porte e del loro forwarding sul router che è essenziale, ma di indirizzo IP pubblico), ma quando l'indirizzo non è statico insorgono i problemi... quindi anche in questo caso dovremo studiarci una soluzione e questa si chiama DNS dinamico.
Logicamente mantenerlo a mano è abbastanza scomodo e se non siamo collegati al router dello StorCenter è improbabile conoscerne direttamente l'IP da impostare manualmente, quindi quello che andremo a fare è utilizzare uno dei servizi gratuiti di DNS dinamico e configurarlo per l'update automatico tramite il software ddclient. Questo si occupa di verificare ogni tot tempo che l'host configurato venga risolto con l'indirizzo ip del router e, se così non fosse, provvede ad aggiornare il record di tipo A nel DNS provider.
Ora cominciamo con una lista di siti che offrono servizi di DNS dinamico ed hanno protocolli di aggiornamento standard e compatibili con ddclient (magari ce ne sono anche altri, ma questi li avevo provati):
  • www.no-ip.com
  • www.dnsdynamic.org
  • freedns.afraid.org
  • www.dtdns.com
  • www.sitelutions.com
  • www.zoneedit.com
Il file di configurazione è /opt/etc/ddclient/ddclient.conf ed al suo interno, per ogni servizio di dns dinamico dato che possiamo averne più di uno, troviamo tutte le possibili opzioni da configurare; molta attenzione è da porre nella scelta del sistema per l'identificazione dell'indirizzo IP... io per comodità utilizzo sempre quella web.
Qui di seguito riporto un esempio di configurazione per dtdns:

server=www.dtdns.com, protocol=dtdns, client=ddclient, login=username, password='password', use=web, web=myip.dnsdynamic.com
hostname.suroot.com

Dato che non era presente alcuno script per avviare il servizio, mi sono basato su quelli già presenti all'interno di /opt/etc/init.d, creandone uno adhoc... /opt/etc/init.d/S99ddclient, con il seguente contenuto:


#!/bin/bash
#
# Startup script for ddclient
#
# Stop myself if running
DAEMON=/opt/sbin/ddclient
PIDFILE=/opt/var/run/ddclient.pid
[ -f ${PIDFILE} ] && kill `cat ${PIDFILE}`
${DAEMON} -daemon 100 -web checkip.dyndns.com -web-skip 'Current IP Address:' -file "/opt/etc/ddclient/ddclient.conf" -pid ${PIDFILE};

Logicamente questo script dovrà essere reso avviabile (chmod 755 /opt/etc/init.d/S99ddclient.sh) e dovremo assicurarci che venga eseguito ad ogni avvio, come per openVPN, ma lo vedremo nella prossima puntata.

A presto!

mercoledì 17 ottobre 2012

Iomega StorCenter IX2-200: openvpn

L'installazione di openvpn su sistemi tradizionali l'ho già trattata in precedenza ed anche la gestione dei certificati, quindi queste informazioni le considero acquisite... tratterò solamente l'installazione di openvpn ed il funzionamento del demone con l'ausilio di xinetd... riporterò inoltre le modifiche apportate agli script dato che per come sono concepiti non hanno funzionato sul mio sistema.
Per prima cosa dobbiamo installare il software desiderato, quindi:

ipkg-opt openvpn openssl xinetd

Cominciamo con i problemi dello script per l'avvio del demone... la versione originale non funziona perchè ricerca il modulo tun.o per inizializzare le interfacce di tipo tun che in realtà sono già compilate all'interno del kernel (è presente /dev/net/tun), quindi lo script di avvio /opt/etc/init.d/S20openvpn dovrà risultare come il seguente:

#!/bin/sh
#
# Startup script for openvpn server
#
# Make sure IP forwarding is enabled
echo 1 > /proc/sys/net/ipv4/ip_forward
# Make device if not present (not devfs)
if [ ! -c /dev/net/tun ]; then
    # Make sure the tunnel driver is loaded
    if ( !(lsmod | grep -q "^tun") ); then
        # Make /dev/net directory if needed
        if [ ! -d /dev/net ]; then
            mkdir -m 755 /dev/net;
        fi;
        insmod /opt/lib/modules/tun.o;
    else
        exit -1;
    fi;
    mknod /dev/net/tun c 10 200;
fi;

# If you want a standalone server (not xinetd), then comment out the return statement below
return 0

## This is for standalone servers only!!!!
# Kill old server if still there
if [ -n "`/opt/bin/pidof openvpn`" ]; then
    /opt/bin/killall openvpn 2>/dev/null;
fi
# Start the openvpn daemon - add as many daemons as you want
/opt/sbin/openvpn --daemon --cd /opt/etc/openvpn --config openvpn.conf
# [EOF]


A questo punto dobbiamo solamente più configurarte xinetd affinchè accetti le connessioni per openvpn e quindi editiamo il file /opt/etc/xinetd.d/openvpn ed abilitiamo la linea "only_from += 0.0.0.0" controllando che il servizio non sia disabilitato.

Ora rimane solamente più da avviare il servizio con /opt/etc/init.d/S10xinetd... ma per avviarlo ad ogni boot ci sarà da fare ancora qualche modifica fuori programma dato che la configurazione in /etc non è persistente e viene eliminata ad ogni riavvio, ma questo argomento sarà la discussione del nostro prossimo appuntamento.

Alla prossima!

martedì 16 ottobre 2012

Iomega StorCenter IX2-200: source code del dispositivo

Nella precedente guida mi sono arenato alla compilazione del kernel e dei sui moduli, ma non mi sono ostinato dato che la versione del kernel che era presente in optware e quella dello Iomega StorCenter IX2-200 erano diverse... ho quindi deciso di trovare lo stesso kernel sorgente del dispositivo (che non è quello ufficiale di kernel.org). So che questa ricerca è possibile e che il produttore deve renderlo disponibile perchè questo è uno dei "vantaggi" per gli utenti e sviluppatori che applicano le licenze di tipo GPL.

Come prima cosa andiamo a cercarlo sul sito di supporto della Iomega (https://iomega-na-en.custhelp.com/), cerchiamo il nostro dispositivo Iomega StorCenter IX2-200 e vediamo cosa riusciamo a trovare... wow, dove si parla di software c'è anche "Any / Not Applicable", lo selezioniamo e leggendo vediamo che c'è l'ultimo firmware disponibile (ed eseguite l'aggiornamento se non lo avete)... bingo! C'è una parte in cui dice "open source code associated"... da qui potrete scaricare il codice sorgente.

Ora che siete in possesso di tutti i sorgenti e/o patch del software, sappiate che potete ricompilare tutto quello che volete, provando ad ottimizzarlo o ad adattarlo alle vostre esigenze... importantissime, e fonte di "ispirazione" per sapere cosa è in grado di fare il kernel, le patch del kernel, da applicare al kernel ufficiale che si scarica da kernel.org, ed il file config del nostro dispositivo, da cui potrete capire che moduli e funzionalità sono incluse nel kernel e quali no.

A questo punto il mio "interesse" nel proseguire la compilazione del kernel è terminata, ero giunto fino qui cercando informazioni sulla compilazione del kernel con lo scopo di far funzionare openvpn dato che mi segnalava l'impossibilità di trovare il modulo tun.o, ma verificando il file di configurazione del kernel ho visto che l'interfaccia tun è compilata all'interno dello stesso e quindi non vi è bisogno di alcun modulo (ed anche ipkg comunque avvisava di questa "finta" mancanza, quindi mi ero fidato)... adesso sappiamo che i messaggi ricevuti sono solamente un bug da eliminare a livello di script di avvio.

In un prossimo post mi occuperò delle modifiche necessarie a far funzionare openvpn tramite xinetd.

A presto!

Iomega StorCenter IX2-200: compilazione del software

Fin'ora ci siamo appoggiati a software precompilato da altre persone e reso disponibile attraverso i repository ipkg, ma non sempre è tutto cosi facile e semplice, soprattutto se dovete partire dai sorgenti per compilarvi il software non presente.

Prima di tutto sappiate che ci sono due possibili strade da seguire per compilare il software:
  • native (compilazione nativa a bordo del dispositivo)
  • cross (compilazione del codice su di un'altra piattaforma)
La compilazione nativa ha il pregio di richiedere solamente la preparazione dell'ambiente a bordo del dispositivo, ma spazio disco, potenza di calcolo del processore e memoria fisica spesso sono limitati dato che il dispositivo non è fatto per quello.

La compilazione di tipo cross esula dai limiti di spazio e potenza computazionale del dispositivo, ma potrebbe richiedere operazioni molto complesse per la sua preparazione.

Ora vedremo a grandi linee come fare, ma se non sapete nulla di compilazione, o non avete molto interesse (e dovrete usare bene i motori di ricerca in caso di problemi), lasciate stare e leggete qualcos'altro.

Partiamo con la preparazione dell'ambiente di cross compiling supponendo di avere a che fare con una distribuzione di tipo Debian-based installando i seguenti pacchetti:

apt-get update
apt-get install gcc cvs flex bison make pkg-config rsync gettext libglib2.0-dev autoconf libtool automake automake1.9 sudo patch bzip2 gzip wget sed texinfo subversion


Ora procuriamoci l'ambiente di compilazione optware dal repository SVN:

svn co http://svn.nslu2-linux.org/svnroot/optware/trunk optware

Sapendo che l'architettura che ci interessa è cs08q1armel, definiamo il target del nostro ambiente con i seguenti comandi:

cd optware; make cs08q1armel-target

Da qui in poi tutto quello che compileremo verrà compilato per questa tipologia di processore, ma dobbiamo ancora creare i tool di base del sistema e con i seguenti comandi verrà scaricato ed impostato molto software (compreso un kernel in versione "vecchia"):

cd cs08q1armel; make directories ipkg-utils toolchain

Come ultima prova per testare il funzionamento possiamo provare a compilare con i seguenti comandi:

make hello-dirclean hello-check

Per capire come fare a compilare altro software esaminate e cercate di interpretare la struttura dei seguenti file:
  • make/hello.mk
  • make/template.mk
Per compilare dei "Pre" specifici come i moduli del kernel, ci sono diverse destinazioni da specificare (la directory di partenza è sempre optware) e dovrete usare i seguenti comandi:

make pre-targetcd pre; make directories ipkg-utils toolchain

Da qui in poi sappiate che non sono stato in grado di verificare la documentazione letta dato che avevo degli errori che non ho ancora risolto...

A questo punto dovreste essere in grado di compilare e riconfigurare i moduli del kernel:

make kernel-modules-ipk

Per la riconfigurazione dei kmods:

rm -f builds/kernel/.configured
make kernel-modules-config KERNEL_CONFIG_METHOD=menuconfig
cp builds/kernel/.config sources/kernel-modules/pre/defconfig


Ora, parlando dell'ambiente di tipo "native" sappiate che la procedura è la stessa, tranne che partirete direttamente dall'SVN fatto all'interno della /opt del dispositivo targhet... buon divertimento!

Direi che per oggi è tutto... a presto ed alla prossima puntata!