Blog recenti

Da Wiki di NetBSD Italia.

2009 July 28 11:01:13 CEST
Scritto da: Clamiax
Blog di Clamiax
Discussione

Guardare i commit e' istruttivo

Proprio cosi'. Sono stato illuminato grazie a due banali commit effettuati su NetBSD Changes. In genere utilizzo i commit piu' importanti per allestire delle notizie tecniche sul wiki (vedi in basso). In effetti, anche solo questo e' sufficiente per incrementare lievemente le mie competenze relative ai sorgenti del sistema, a come vengono gestiti e quali file toccare in alcune occasioni; di certo non tutte visto che i campi applicativi e le possibili modifiche sono pressoche' infinite. Tuttavia, piu' passa il tempo e piu' ci si fa' un'idea piu' o meno chiara della situazione all'interno di src. Tra l'altro, quando ci sono piu' commit relativi alla stessa modifica, ci si rende chiaramente conto di cosa bisogna toccare quando si mettono le mani a quella categoria di sorgenti ed eventualmente come funziona quel supporto specifico. Mi piace definire questo sistema come kernel watching learning (KWL).

Oggi ad esempio, motivo che mi ha spinto a bloggare, ho appreso due concetti banali se vogliamo, ma comunque indispensabili in alcuni casi.

Innanzi tutto appare chiaro che se bisogna caricare un supporto dalla radice del kernel (la cosiddetta root) basta includere una chiamata a config_rootfound() direttamente in src/sys/kern/init_main.c, possibilmente all'interno di un #ifdef NOMESUPPORTO, come nel seguente codice (rimosso nel commit #1.396), facendo in modo che il kernel carichi tale supporto integrato come se fosse uno pseudo-device (non disattivabile dal file di configurazione del kernel in fase di compilazione):

#if NGPIOSIM > 0  	 
         config_rootfound("gpiosim", NULL); 	 
#endif

Inoltre, sembra conseguenziale il fatto che ogni chiamata a config_rootfound() puo' essere rimpiazzata da uno pseudo-device, allegerendo cosi' la radice del kernel; probabilmente e' per questo che dopo il commit #1.396, non c'e' piu' alcuna chiamata a tale funzione in init_main.c.

Un altro dato meno importante ma altrettanto utile e' relativo al commit #1.317) che mostra chiaramente come aggiungere un nuovo supporto PCI al kernel:

# Marvell Serial-ATA Host Controller
attach  mvsata at pci with mvsata_pci
file    dev/pci/mvsata_pci.c            mvsata_pci

Naturalmente il file mvsata_pci.c dev'essere presente altrimenti non solo non avrebbe senso il commit ma ci sarebbe anche un errore in fase di compilazione a causa del file mancante. Qualora si decidesse di includere un nuovo supporto ata(4), bastera' includere il file sorgente con un nome rilevante nella directory dev/ata/ ed aggiungere (almeno) le direttive attach e file all'interno del file dev/ata/files.ata. La logica vale per qualsiasi altro tipo di supporto. Grandioso! Chi avrebbe mai pensato che un kernel, per quanto complesso, avesse delle caratteristiche cosi' semplici? Ovviamente questo non basta ad essere kernel hackers ma avere una buona infarinatura, una visione generale, puo' semplificare la vita nella risoluzione dei problemi e magari, un giorno, nella scrittura del nostro primo supporto per il kernel.

Happy commit! :-)

Notizie tecniche

Commit relativi

Voce: Utente:Clamiax/BlogEntry: 2009 July 28 11:01:13 CEST

2009 June 28 20:07:15 CEST
Scritto da: Clamiax
Blog di Clamiax
Discussione

Eccoci qua, ancora una volta. Va' benissimo anche senza audio e/o senza ACPI. Tutto sommato potro' benissimo fare a meno del supporto ACPI in favore di qualche Ogg Vorbis di BSDTalk di tanto in tanto.

Ma questo maledettissimo rumore proprio non lo sopporto piu'! Mi privo letteralmente di stentare un briciolo di uptime(1) e di stare volentieri al PC per questo insopportabile e continuo, monotono, martellante ronzio della ventola che gira a velocita' folla per raffreddare i core della CPU che si aggirano entrambi intorno ai 60 gradi. Mi costringe a passare ore su un laptop con GNU/Linux! SNAFU.

Tutto questo perche', per qualche bizzarro motivo, il supporto per l'Intel Enanched Speedstep Technology, che e' regolarmente supportato dalla mia CPU, non e' gestito da NetBSD. Non che il sistema non implementi tale tecnologia; semplicemente la mia versione non e' supportata (?). Stento a credere a quello che io stesso sto' dicendo...

Giusto perche' nessuno e' stato ancora in grado di aiutarmi mi sono sentito in dovere, dopo qualche consiglio del buon vecchio amico leot, di rompere un po' i cosiddetti coglioni in giro per la comunita'. Il risultato dopo estenuanti videopoker ore di ricerche e discussioni su #NetBSD@Freenode e' stato questo post su netbsd-users.

Che la comunita' me la mandi buona!

Voce: Utente:Clamiax/BlogEntry: 2009 June 28 20:07:15 CEST

2009 June 11 10:02:23 CEST
Scritto da: Clamiax
Blog di Clamiax
Discussione

E' evidente che qualcuno nel BSD-paradise ce l'ha con me. Avevo risolto tutto, era tutto funzionante, l'orgasmo geek stava finalmente invadendo per l'ennesima volta il mio ego e il mio hardware. Era troppo bello per essere vero. Infatti, di punto in bianco, il signor azalia(4) ha pensato bene di venire a guastare la festa attaccando brighe col supporto acpi(4). L'effetto principale e' che l'audio semplicemente non funziona. O meglio, funziona la riproduzione di un qualsiasi file con un qualsiasi riproduttore si blocca in un ciclo infinito subito dopo l'avvio, ripetendo ininterrottamente il primo secondo del file.

A questo punto, dopo il doveroso tentativo di avviare il sistema passando al comando boot del bootloader l'opzione -2 (disabilitando il supporto ACPI), mi ritrovo con l'audio che funziona e l'ACPI disabilitato. Inoltre, per una serie di bizzarri motivi, non posso disabilitare l'ACPI direttamente dal file di configurazione del kernel essendo costretto a impostare in /boot.cfg la flag -2 di default. Al di la' del fatto che non posso spegnere la macchina in maniera normale (cioe' come si farebbe con qualsiasi altro sistema operativo) c'e' l'anomalia del kernel, che piu' che un'anomalia sembrerebbe una collezione di sviste:

  • per compilare e' necessario l'intero albero dei sorgenti (inclusi quelli delle architetture diverse da quella del sistema host)
  • non e' possibile disabilitare il supporto ACPI a causa di errori di compilazione
  • non e' possibile, forse a causa del punto precedente, disabilitare solamente il supporto noapic (che per quello che ho capito e' il vero artefice della lite fra i due supporti) lasciando l'ACPI attivo.

Insomma, una serie di considerazioni tecniche e in qualche modo etiche che per me sono inaccettabili. Per questo motivo, aihme', vi scrivo da un sistema FreeBSD (non pensavate davvero che avrei rimesso GNU/Linux!?) col quale non ho avuto assolutamente alcun problema eccetto per l'estrema scomodita' (pratica e mentale) causata dalla (il)logicita' del sistema. Una delle cose divertenti e' che ho dovuto caricare il modulo snd_hda per poter utilizzare l'audio ed e' stato necessario resettare lo stato del kernel relativo a kern.securelevel, il quale se impostato a 2 non consente la configurazione di X11 a causa dell'impossibilita' di caricare i moduli dei driver video. Apparte questo, non c'e' stato verso di disabilitare il cosiddetto boot selector (quello che su NetBSD compare qualora ci fosse il file /boot.cfg per intenderci) lasciando il normale prompt del loader. In compenso ho trovato un ottima infrastruttura per la gestione della tastiera in console; e' veramente potente questa impostazione. Qualsiasi spiegazione sarebbe inutile di fronte alla disarmante autoesplicazione del file per la keymap:

#                                                         alt
# scan                       cntrl          alt    alt   cntrl lock
# code  base   shift  cntrl  shift  alt    shift  cntrl  shift state
# ------------------------------------------------------------------
  000   nop    nop    nop    nop    nop    nop    nop    nop     O  
  001   esc    esc    esc    esc    esc    esc    debug  esc     O
  002   '1'    '!'    nop    nop    '1'    '!'    nop    nop     O
  [ ... ]

Per invertire caps lock e backspace non ho dovuto fare altro che invertire i numeri (scan code) delle relative righe (ovvero 014 e 058) e utilizzare questo nuovo layout come predefinito. Non e' stato possibile utilizzare il layout dvorak normale e poi apportare solo questa modifica come si fa su NetBSD ad esempio, tramite la direttiva mapfile di wscons.conf(4). Tuttavia e' stato piuttosto comodo creare il layout dvoraky (la variante dvorakx gia' c'e') e utilizzarlo semplicemente come layout predefinito. Potrebbe essere istruttivo dare un'occhiata alla keymap del layout dvorak classico per farsi un'idea piu' ampia.

Per concludere sottolineo solamente che mi piacerebbe capire perche' il backspace su ELinks non funziona. I misteri della fede...

Ad ogni modo, complessivamente non mi lamento. Aspettero' anzioso che azalia e ACPI facciano pace per tornare nuovamente e definitivamente a NetBSD, stavolta sul PC primario.

Voce: Utente:Clamiax/BlogEntry: 2009 June 11 10:02:23 CEST

2009 April 21 12:59:03 CEST
Scritto da: Philbsd
Blog di Philbsd
Discussione

Buon giorno!!!!

Sono Philbsd (alias Pietro) sono un fortunato/sfortunato possessore di imac che l'altro giorno ha deciso di cambiare os, passando da una debian@linux a Netbsd.. Fortunato perché ha un bello schermo e un hardware abbastanza potente (calcolando che ha 7 anni di vita) Sfortunato perché non ha i driver della scheda video (eccetto i vecchi nv), e perchè molti pacchetti non si compilano sul powerpc (troppi problemi e pochi sviluppatori) ..

Voce: Utente:Philbsd/BlogEntry: 2009 April 21 12:59:03 CEST

2008 December 25 23:42:13 CET
Scritto da: Leot
Blog di Leot
Discussione

Meno di una settimana fa ho aggiunto su pkgsrc-wip frozen-bubble-2.2.0.

Su pkgsrc c'è già games/frozen-bubble ma una versione datata, la 1.0.0.

Tuttavia a differenza della versione 1.0.0 la 2.2.0 necessita di devel/SDL_Pango con una patch.

Per semplificare la vita dell'utente e del potenziale tester ho anche aggiunto wip/SDL_Pango che altro non è che devel/SDL_Pango con l'apposito PATCHFILES (molto comoda e potente... più usi pkgsrc e più te ne innamori).

Attualmente il pacchetto necessita ancora di qualche revisione, quindi: se avete qualche minuto libero, vi piace questo gioco e non avete installato devel/SDL_Pango vi prego di provarlo, magari tramite il canale #NetBSD-it ci possiamo metter d'accordo per qualche partita in rete (no, non significa cazzeggiare, è puro testing questo ;-)).

Per ora c'è il freeze per pkgsrc-2008Q4... quindi spero che riusciremo ad aggiornare games/frozen-bubble importando wip/frozen-bubble per pkgsrc-2009Q1.

Vi ringrazio in anticipo, buon divertimento e buon Natale!

Voce: Utente:Leot/BlogEntry: 2008 December 25 23:42:13 CET

2008 November 26 21:37:36 CET
Scritto da: Leot
Blog di Leot
Discussione

Gli utenti NetBSD, soprattutto gli utenti che utilizzano NetBSD su dispositivi portatili, hanno spesso l'esigenza che, per ragioni di privacy, i loro dati rimangano loro.

Da poco tempo ho avuto questa esigenza anche io, nella /home non ho nulla di personale, eccetto dei file di configurazione che hanno password in chiaro (vedere mail/msmtp, wip/fdm e probabilmente molti altri programmi). Chiunque abbia accesso alla macchina, basta che avvii in single-user mode (senza sapere nessuna password) e diventa padrone della macchina (e dei dati).

Perciò ho deciso di fare una piccola /home (600MB circa) criptata, mentre i miei documenti (non personali) /home/leot/documents non criptati (8GB circa).

Per criptare la /home su NetBSD abbiamo diverse alternative, o utilizziamo filesystem in user-space come filesystems/fuse-cryptofs o filesystems/fuse-encfs tramite refuse(3) (presente dalla 5.0) oppure il nativo cgd(4).

Dato che cgd(4) è presete dalla 2.0, abilitato anche in GENERIC (e quindi parte integrante del sistema operativo) e ben documentato ho scelto quest'ultimo.

La configurazione non è stata difficile grazie all'ottima documentazione ed alla semplicità di cgdconfig(8).

Prima di tutto tramite disklabel(8) individuo la partizione da criptare (che verrà ovviamente sovrascritta, quindi prima di provare cgd(4) effettuate sempre un backup):

# disklabel wd0

La partizione da criptare è la wd0h, siccome è vuota (prima di cgd(4) la partizione da 8GB era montata come /home, mentre quella da 600MB non era neache montata) inizio subito a preparare la partizione criptata, come tipo di filesystem impostiamo ccd in modo tale da distinguerla facilmente dalle altre non criptate:

 # disklabel -i wd0
 partition> h
 Filesystem type [?] [4.2BSD]: ccd
 Start offset ('x' to start after partition 'x') [30008.1c, 30248127s, 14769.6M]: 
 Partition size ('$' for all remaining) [1263.94c, 1274049s, 622.094M]: 
 partition> W
 Label disk [n]? y
 partition> Q
 

Il risultato sarà la seguente partizione:

# disklabel wd0 | grep " h:"
 h:   1274049  30248127        ccd                     # (Cyl.  30008*- 31271)

Ora tramite cgdconfig(8) creiamo il file di configurazione necessario (tramite il flag -g) e impostiamo la password che cripterà la nostra wd0h:

# cgdconfig -g -V disklabel -o /etc/cgd/wd0h aes-cbc 256
# cgdconfig -V re-enter cgd0 /dev/wd0h

Infine creiamo la partizione cgd0h tramite disklabel(8), questa partizione dovrà avere le stesse dimensioni di wd0h:

# disklabel -e -I cgd0
# /dev/rcgd0d:
type: cgd
disk: cgd
label: fictitious
[...]
#        size    offset     fstype [fsize bsize cpg/sgs]
d:   1274049         0     unused      0     0        # (Cyl.      0 - 622*)
h:   1274049         0     4.2BSD      0     0     0  # (Cyl.      0 - 622*)

Ecco fatto, ora gli ultimi ritocchi: fstab(5) e rc.conf(5).

# ${EDITOR} /etc/fstab
[...]
/dev/cgd0h  /home                 ffs  rw,softdep        1 2
/dev/wd0g   /home/leot/documents  ffs  rw,softdep,union  1 2
[...]
# ${EDITOR} /etc/rc.conf
[...]
cgd=YES
[...]

Perfetto! Al prossimo riavvio avremo la /home criptata mentre la /home/leot/documents non criptata. Quindi tutti i file presenti su /home/leot saranno criptati (eccetto quelli nella subdirectory documents/).

Ora ad ogni riavvio ci verrà chiesta la password per montare automaticamente le partizioni cgd(4).

Buon divertimento con cgd(4)!

Voce: Utente:Leot/BlogEntry: 2008 November 26 21:37:36 CET

2008 November 12 21:40:10 CET
Scritto da: Leot
Blog di Leot
Discussione

Devo ammettere che la scheda azalia(4) presente nell'Eee PC ha molti mixer configurabili tramite mixerctl(1) e dato che questo pomeriggio volevo provare i microfoni dell'Eee PC, sia quello interno vicino alla webcam, che il supporto del microfono esterno ho deciso di condividere gli "appunti" tramite questo post.

Prima di tutto per registare l'audio dal microfono possiamo utilizzare il classico audiorecord(1) semplicemente in questo modo:

$ audiorecord hello_neeetbsd.wav

Per concludere la registrazione basta interrompere il programma con C-c (Control + c).

Per ascoltare ciò che abbiamo registrato:

$ audioplay hello_neeetbsd.wav

Se il volume del microfono fosse troppo basso si può impostare un volume più alto in questo modo:

$ mixerctl -w record.volume=224,224

Ricordo che record.volume influenzerà il volume sia del microfono interno (da qui in poi imic) che quello di un eventuale microfono esterno (mic).

Inoltre di default entrambi i microfoni sono abilitati (provate a verificarlo soffiando su imic), per disabilitarli:

$ mixerctl -w mix.mix0b.imic.mute=on
$ mixerctl -w mix.mix0b.mic.mute=on

Riguardo al volume delle casse o eventuali cuffie è come al solito outputs.master. Da notare che questo valore viene modificato anche dalla combinazione di tasti Fn + F7 (disattiva/attiva l'audio), Fn + F8 (diminuisce il volume di 3), Fn + F9 (alza il volume di 3).

Una volta che abbiamo trovato le nostre impostazioni preferite possiamo salvare il tutto e fare in modo che il sistema rc(8) avvii automaticamente le nostre impostazioni preferite:

# mixerctl -a > /etc/mixerctl.conf
# echo "mixerctl=YES" >> /etc/rc.conf

Questo è tutto, buon ascolto con NetBSD!

Voce: Utente:Leot/BlogEntry: 2008 November 12 21:40:10 CET

2008 November 11 23:11:29 CET
Scritto da: Leot
Blog di Leot
Discussione

Meno di una settimana fa ho ricevuto un Eee PC 900.

Una volta scartato dalla scatola l'ho acceso ed ho provato il GNU/Linux preinstallato.

Insoddisfatto del GNU/Linux (piuttosto restrittivo secondo me) ho installato NetBSD su questo netbook direttamente nel disco SSD, in modo da essere a mio agio ovunque (o quasi). :-)

Il primo problema che è subito venuto alla luce è stato: come installerò NetBSD? (l'Eee PC non ha un lettore CD o DVD).

Nell'ottima pagina relativa a NetBSD sui netbook ho letto che uno tra i possibili metodi era quello di fare il boot tramite scheda di rete. Questo metodo mi è sembrato a prima vista un po' troppo invasivo e quindi ho optato per altri metodi.

Questo netbook ha infatti 3 porte USB 2.0 e uno lettore di card SD, e dando un occhiata veloce al BIOS ho subito visto che il boot da questi dispositivi era supportato.

Ho quindi preso una chiavetta USB (dovrebbe bastare una da qualche decina di MB, perché tanto la scheda lii(4) è supportata anche dal kernel di installazione, nel mio caso era da 1GB) dove ho estratto l'immagine ISO di NetBSD 5.0_BETA seguendo questa utilissima guida.

L'installazione è stata molto veloce ed al primo boot ho subito messo a posto rc.conf(5) e tramite pkg_add(1) ho installato i vari pacchetti di cui ho bisogno (generati tramite pkgtools/pkg_tarup ed il target package di pkgsrc sulla mia workstation principale con NetBSD 4.0.1), per quanto riguarda i driver per X.org modulare la scheda dell'Eee PC è una scheda che ha bisogno dei driver x11/xf86-video-intel.

La scheda wireless sull'Eee PC è una ath(4), tuttavia per farla funzionare correttamente necessita di questa patch, per applicarla:

$ cd /usr/src/
$ ftp http://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/atheee.patch
$ patch < atheee.patch

L'Eee PC 900 ha anche la funzionalità di poter attaccare e staccare a caldo la scheda wireless semplicemente premendo il tasto Fn ed F2 (risulta particolarmente utile disabilitare la scheda wireless quando si utilizza la batteria ma non si ha bisogno della scheda wireless). NetBSD supporta questa funzionalità, ma per poterla sfruttare bisogna sfruttare un'altra patch scritta da jmcneill@ e proveniente da OpenBSD:

$ cd /usr/src/sys/dev/pci/
$ ftp http://ftp.netbsd.org/pub/NetBSD/misc/jmcneill/ppb-hotplug.patch
$ patch < ppb-hotplug.patch

Una volta applicate queste due patch ho ricompilato il kernel, adattandolo all'hardware del netbook.

Una volta cp(1)iato il kernel appena compilato su /netbsd, fatto il backup del kernel GENERIC su /onetbsd ed adattato boot.cfg(5) alle modifiche ho riavviato il sistema.

Sia col kernel GENERIC che con il kernel più o meno ottimizzato all'Eee PC 900 il tempo di boot è equivalente (se non inferiore) a quello del GNU/Linux preinstallato (da boot(8) al login 12 secondi circa).

Una volta provata la scheda ath(4), ho iniziato a provare il lettore di card SD. Per abilitarlo basta andare sul BIOS (premendo F2), Advanced, Onboard Devices Configuration, e controllare che sia abilitato Onboard CardReader (di default è abilitato), per uscire e salvare dal BIOS basta premere F10 e confermare, NetBSD rileverà la card SD come sd0, basta quindi utilizzare mount(8) (di solito) su /dev/sd0a o /dev/sd0e per montare le schede SD.

La scheda audio è una scheda azalia(4), e per farla funzionare non necessitiamo di modificare nulla.

Riguardo allo stato della batteria e la temperatura basta utilizzare envstat(8):

$ envstat
                     Current  CritMax  CritMin  CritCap     Unit
[acpiacad0]
       connected:        OFF
[acpibat0]
         present:         ON
      design cap:      5.200                                  Ah
   last full cap:      0.100                                  Ah
      technology:          1
  design voltage:      8.400                                   V
        warn cap:      0.020                                  Ah  (20.00%)
         low cap:      0.010                                  Ah  (10.00%)
         voltage:      7.598                                   V
     charge rate:        N/A
  discharge rate:     -0.001                                   A
          charge:      0.070                                  Ah  (70.00%)
        charging:        OFF
    charge state:     NORMAL
[acpitz0]
     temperature:     52.000                                degC

Per quanto riguarda l'uscita VGA invece potrebbe risultare utile x11(xrandr), per abilitare l'uscita VGA per clonare lo schermo:

$ xrandr --output VGA --auto

Per spegnere il monitor dell'Eee PC ed utilizzare solo quello collegato all'uscita:

$ xrandr --output LVDS --off

Insomma che dire, per qualsiasi utente NetBSD medio che vuole avere NetBSD sempre con se, un Eee PC, dato i prezzi non troppo alti, ed il supporto hardware di NetBSD potrebbe risultare una buona scelta, buon divertimento con NetBSD!

Voce: Utente:Leot/BlogEntry: 2008 November 11 23:11:29 CET

2008 October 27 21:40:04 CET
Scritto da: Leot
Blog di Leot
Discussione

Non troppe settimane fa su #netbsd-it ho chiesto il client sia FTP che SFTP utilizzato e di cui si era soddisfatti per provarlo ed utilizzarlo.

Allora Claudio mi consigliò di provare net/lftp.

È piuttosto buono e mi sono trovato subito bene. Dopo un po' di tempo che lo utilizzo però scopro che net/lftp è un datato, in pkgsrc c'è infatti la versione 3.5.11. pkgsrc/doc/TODO mi conferma ciò e ieri inizio a lavorarci su per aggiornarlo alla versione 3.7.3 (l'ultima stabile).

Mi sono imbattuto in un problema che non mi era mai capitato: le patch. Aggiornare il Makefile ed il distinfo è un bazzecola ma capire le patch ed il perché vengono utilizzate non è sempre semplice.

Allora ho iniziato a capirle (grazie anche a joerg@ su #pkgsrc) e commentarle per poi finire l'aggiornamento con un PR: pkg/39809.

Morale della storia: se le patch non sono chiare, commentatele! :-)

Voce: Utente:Leot/BlogEntry: 2008 October 27 21:40:04 CET

2008 October 27 21:38:37 CET
Scritto da: Leot
Blog di Leot
Discussione

Poche settimane fa e l'altro ieri ho aggiunto wip/dmenu e wip/dwm. Oltre al fatto che i rispettivi x11/dmenu e wm/dwm sono abbastanza datati essi utilizzano delle patch che spingono inevitabilmente il MAINTAINER (o chi per lui) ad ogni nuovo aggiornamento a rigenerare tutte le patch.

Per risolvere questo problema ed eliminare le patch il framework SUBST fa al caso nostro.

Se avete 5 minuti liberi e siete utenti x11/dmenu e/o wm/dwm vi prego di dare un occhiata a wip/dmenu e/o wip/dwm e perché no migliorarli. Grazie.

Voce: Utente:Leot/BlogEntry: 2008 October 27 21:38:37 CET

Strumenti personali
Strumenti