venerdì 21 maggio 2010

FreeBSD: swap space

Ho scoperto sulla mia pelle che FreeBSD è molto piu' ingordo di memoria (e di conseguenza di swap space) che un sistema Linux. Negli ultimi anni mi ero abituato infatti a ridurre al minimo l'area di swap dei sistemi Linux, visto che bene o male tutti i processi riuscivano ad eseguire senza toccare quasi lo swap. Invece qualche giorno fa, su una macchina FreeBSD 8 con 2GB di RAM e 1 GB di swap sono stato letteralmente sbalzato fuori dal sistema che non riusciva piu' a swappare.
La soluzione nel mio caso è stata semplice: avendo ancora dello spazio disco disponibile ho deciso di creare una nuova partizione di swap ben piu' grossa. Avrei potuto optare per un file di swap, ma non ho mai apprezzato molto l'uso dei file di swap preferendo di gran lunga l'uso di una intera partizione.
Decido quindi di avviare sysinstall per configurare le mie partizioni, dapprima con fdisk e poi con bsdlabel ma la partizione non appare disponibile. Allora mi rimbocco le maniche e uso gli stessi comandi da linea di comando, ma ancora nulla: la partizione non viene etichettata correttamente. Devo quindi usare il live cd, riavviare, ed editare le partizioni a sistema "fermo", e il trucco funziona! All'avvio però il sistema appare senza area di swap! Indago un po' e scopro che il poliedrico sysinstall non aveva editato /etc/fstab, che quindi puntava ancora alla vecchia partizione di swap che nel frattempo avevo rimosso. Aggiustando manualmente la tavola delle partizioni da montare ha risolto tutti i problemi.

Haiku

Qualche giorno fa ho scoperto un nuovo sistema operativo: Haiku.
Haiku è un figlio OpenSource dell'allora BeOS, il sistema operativo creato da Be Inc. per il loro appliance hardware.
L'interfaccia utente di Haiku mi ricorda molto i primi Apple che vedevo in ufficio da mio padre, con quello stile a finestre multiple e icone sicuramente non accattivanti come le ultime SVG. In effetti se si legge la storia del progetto si scopre che BeOS è stato usato per qualche Apple, fino a quando la Apple, con un atteggiamento protezionista, non ha reso nascosti alcuni dettagli relativi ai chip della famiglia G3 così da rendere il porting di BeOS difficile (chiaramente Steve Jobbs era già salito a bordo).
Il cuore del sistema non è basato su Linux, ma è uno Unix-like, che da quello che capisco non ha nulla a che fare con il ramo BSD.
La caratteristica fondamentale di Haiku è quella di fornire un'insieme di API coerente e un layer che mascheri ogni libreria usata nel sistema. Sostanzialmente Haiku fornisce API con le quali interagire con il sistema stesso, delegando poi le eventuali azioni ad una libreria o ad una chiamata di sistema (qualcosa di simile al rapporto JDBC-Driver). Se da un lato questo significa scrivere applicazioni che eseguono naturalmente al meglio che il sistema puo' offrire, dall'altro significa vincolare i programmatori a non usare quegli hack interni delle API di libreria che potrebbero dare un incremento di performance. E' una scelta sicuramente coraggiosa e radicale, ma che mi trova d'accordo: ormai il mondo OpenSource sta diventando una sorta di mess con i suoi molteplici progetti e le API che cambiano spesso da una release all'altra radicalmente. Meglio quindi avere una sorta di "bianco/nero" del sistema operativo che fornisca un'API consistente e portabile.
Allego uno screenshot di una mia macchina virtuale che esegue Haiku.

FreeBSD: mount di share SMB

Il mount di share samba (SMBFS) in FreeBSD è radicalmente differente da quanto avviene su un sistema Linux. Anzitutto non è presente il classico programma smbmount, bensì il suo sostituto mount_smbfs. Fosse solo la differenza sul nome il gioco sarebbe facile: qualsiasi script scritto in modo decente sarebbe facilmente portabile. Però cambiano anche le opzioni e il modo di interagire con username e password.
Anzitutto occorre creare un file ~/.nsmb oppure il file globale (valido per tutto il sistema) /etc/nsmb all'interno del quale mettere i parametri di connessione alle varie share. Se all'inizio questo sistema sembra un po' scomodo, alla lunga si rivela molto utile. L'unica accortezza da seguire è quella di mettere sempre, in tale file, i nomi delle share, dei server e degli utenti in maiuscolo. Le altre opzioni, password, ecc., devono invece essere case sensitive.
Quindi tale file deve includere una o piu' sezioni del tipo:


[SERVER:SHARE:USER]
password=myPassword

dove ovviamente SERVER corrisponde al nome netbios del server, SHARE al nome della share e USER (opzionale) al nome dell'utente usato per la connessione.
Infine è possibile montare la share con il comando:


mount_smbfs //user@server/share /mountpoint

Vodafone UMTS e connessioni IPSec

Sono letteralmente diventato matto nel tentativo di far funzionare una connessione IPSec da un client mobile (Shrew) verso una box pfSense. Il problema, scoperto dopo diversi tentativi, è che la Vodafone blocca il traffico UDP, forse pensando che possa servire per fare un peer-to-peer illegale. Siccome IPSec necessita di UDP nella fase 1 (IKE), quello che succedeva era il nulla: nessun traffico raggiungeva la box pfSense.
La soluzione allora è stata cambiare da IPSec a OpenVPN, che può funzionare arbitrariamente su UDP o TCP, e infatti la connessione via TCP funziona anche con chiavetta Vodafone!

sabato 8 maggio 2010

pfSense & VPN: Failed to get sainfo

Qualora dovesse apparire nei log di pfSense il messaggio Failed to get sainfo quando si tenta di avviare un tunnel VPN occorre ricontrollare la fase 2 della creazione del tunnel. Se tutti i parametri della fase 2 combaciano fra i due concentratori VPN, allora è probabile che ci sia un problema nella definizione delle reti locale/remote o della relativa sottomaschera di rete.
Per individuare con esattezza l'errore occorre disabilitare IPSEC nella relativa schermata di configurazione, effettuare il login shell sulla macchina pfSense ed avvaire il comando:
racoon -F -d -v -f /var/etc/racoon.conf
che altro non fa che avviare ipsec con le informazioni di configurazione. A questo punto, quando si inizia a creare il tunnel si vedrà un messaggio simile al seguente:
 010-05-07 10:23:08: DEBUG: getsainfo pass #2
2010-05-07 10:23:08: DEBUG: check and compare ids : value mismatch (IPv4_subnet)
che indica che le due reti definite fra i due endpoint sono differenti da quelle che ci si aspetta nel tunnel.
Una volta corretto il problema, è possibile testare il tunnel direttamente dalla macchina pfSense con il comando:
ping -S