Realizzazione di una propria variante di NLNX

NLNX esiste con lo scopo di poter essere adattato facilmente alle proprie esigenze, aggiungendo e togliendo pacchetti a seconda dei bisogni. È possibile fare questo da una copia di NLNX installata secondo la procedura normale su una partizione di un disco fisso.

Si osservi che la modifica eventuale del kernel, seguita dalla sua installazione, deve essere completata con l'aggiornamento delle due versioni del disco RAM iniziale.

Modifica dei pacchetti applicativi installati

In generale, può essere conveniente partire da un'edizione di NLNX abbastanza completa, usando il programma orphaner per disinstallare tutto ciò che non serve. Il programma orphaner va usato con l'opzione -a, per visualizzare l'elenco di tutti i pacchetti la cui rimozione non comporta problemi di dipendenze. Naturalmente si devono lasciare i programmi che servono per riprodurre il DVD.

orphaner -a[Invio]

.--------------------Orphaner (r487)-----------------------.
| Select packages for removal or cancel to quit:           |
| .-----------(+)----------------------------------------. |
| |      [ ] myspell-sl           main/text              | |
| |      [ ] nlnx-80              main/text              | |
| |      [ ] nlnx-ko              main/text              | |
| |      [ ] nlnx-ok              main/text              | |
| |      [ ] nmapfe               main/net               | |
| |      [ ] nrg2iso              main/otherosfs         | |
| |      [ ] ntfsprogs            main/otherosfs         | |
| `----------.(+)----------------------------------------' |
|----------------------------------------------------------|
|    <   OK   >   <Simulate>   < Cancel >   <  Help  >     |
`----------------------------------------------------------'

Riquadro u51.2. Pacchetti specifici di NLNX.

NLNX potrebbe includere dei pacchetti Debian realizzati appositamente, per ricordare le dipendenze principali dell'edizione standard. Si tratta dei pacchetti il cui nome inizia per nlnx-.

Quando si tenta di adattare NLNX, questi pacchetti possono essere di intralcio, pertanto si possono rimuovere, senza temere effetti collaterali, a parte il fatto di non avere più riferimenti su cosa è indispensabile e su cosa invece è di intralcio o crea conflitti.

Eventualmente, si possono modificare gli stessi pacchetti intervenendo nel contenuto delle directory /etc/nlnx/debian-packages/*/, ricompilandoli attraverso lo script /etc/nlnx/debian-packages/make-nlnx-packages. I file dei pacchetti generati si ottengono nella directory personale dell'utente root:

cd /etc/nlnx/debian-packages/[Invio]

./make-nlnx-packages[Invio]

cd /root[Invio]

dpkg -i nlnx-..._i386.deb[Invio]

Creazione del file-immagine della versione live

Una volta fatte le modifiche che si desiderano, si può usare il comando nlnxrc nlnx make, senza argomenti, il quale innesta il file system principale nella directory /RO-FS/RW-FS/ ed esegue le altre operazioni necessarie, dopo aver ottenuto alcune informazioni indispensabili:

nlnxrc nlnx make[Invio]

.--------------------------NLNX---------------------------.
| Please note that producing the new disc or image file   |
| requires a lot of virtual memory (so you need a lot of  |
| swap space) and a lot of free space inside "/tmp/".     |
|                                                         |
| Is it ok? Should I continue?                            |
|                                                         |
|---------------------------------------------------------|
|                 < Yes >         < No  >                 |
`---------------------------------------------------------'

Come avverte il riquadro iniziale, prima di poter avviare la procedura di creazione del nuovo disco o file-immagine, occorre verificare di avere abbastanza memoria virtuale e spazio su disco.

Dopo l'avvertimento iniziale si passa all'indicazione dell'edizione:

┌───────NLNX release─────────┐
│ Please insert the NLNX     │
│ release identification     │
│ string:                    │
│ ┌────────────────────────┐ │
│ │2010.02.22              │ │
│ └────────────────────────┘ │
├────────────────────────────┤
│   <  OK  >  <Cancel>       │
└────────────────────────────┘

Viene quindi chiesto di specificare il percorso del file-immagine da creare. Quanto predefinito corrisponde a un file nella directory /root/:

┌────────NLNX image file───────────┐
│ Please insert the NLNX image     │
│ file pathname:                   │
│ ┌──────────────────────────────┐ │
│ │/root/nlnx-2010.02.22.img     │ │
│ └──────────────────────────────┘ │
├──────────────────────────────────┤
│       <  OK  >    <Cancel>       │
└──────────────────────────────────┘

A questo punto vengono fatte delle richieste che riguardano la configurazione locale iniziale del sistema che si va a creare. Si comincia con la lingua per il funzionamento da console:

.---------Console language selection-----------.
| Please select your language for the console: |
| .------------------------------------------. |
| |   en_US  default or previous selection   | |
| |   aa_DJ                                  | |
| |   af_ZA                                  | |
| |   br_FR                                  | |
| |   bs_BA                                  | |
| |   ca_ES                                  | |
| |   cs_CZ                                  | |
| |   da_DK                                  | |
| |   de_AT                                  | |
| |   de_BE                                  | |
| |   de_CH                                  | |
| |   de_DE                                  | |
| `---v(+)-----------------------------------' |
|----------------------------------------------|
|           <  OK  >      <Cancel>             |
`----------------------------------------------'

Il carattere usato per la console:

.--------------------------Console font selection----------------------------.
| Please select your console font:                                           |
| .------------------------------------------------------------------------. |
| | LatArCyrHeb-16+.psf.gz  previous_value                                 | |
| | LatArCyrHeb-08.psf.gz   /usr/share/consolefonts/LatArCyrHeb-08.psf.gz  | |
| | LatArCyrHeb-14.psf.gz   /usr/share/consolefonts/LatArCyrHeb-14.psf.gz  | |
| | LatArCyrHeb-16.psf.gz   /usr/share/consolefonts/LatArCyrHeb-16.psf.gz  | |
| | LatArCyrHeb-16+.psf.gz  /usr/share/consolefonts/LatArCyrHeb-16+.psf.gz | |
| | LatArCyrHeb-19.psf.gz   /usr/share/consolefonts/LatArCyrHeb-19.psf.gz  | |
| `------------------------------------------------------------------------' |
|----------------------------------------------------------------------------|
|                       <  OK  >            <Cancel>                         |
`----------------------------------------------------------------------------'

La mappa per la tastiera durante l'utilizzo della console:

.--------------------Console keyboard map selection-------------------.
| Please select your console keyboard map:                            |
| .-----------------------------------------------------------------. |
| |it-xorg        previous_value                                    | |
| |azerty         /usr/share/keymaps/i386/azerty/azerty.kmap.gz     | |
| |be2-latin1     /usr/share/keymaps/i386/azerty/be2-latin1.kmap.gz | |
| |be-latin1      /usr/share/keymaps/i386/azerty/be-latin1.kmap.gz  | |
| |fr             /usr/share/keymaps/i386/azerty/fr.kmap.gz         | |
| |fr-latin0      /usr/share/keymaps/i386/azerty/fr-latin0.kmap.gz  | |
| |fr-latin1      /usr/share/keymaps/i386/azerty/fr-latin1.kmap.gz  | |
| |fr-latin9      /usr/share/keymaps/i386/azerty/fr-latin9.kmap.gz  | |
| |fr-pc          /usr/share/keymaps/i386/azerty/fr-pc.kmap.gz      | |
| |fr-x11         /usr/share/keymaps/i386/azerty/fr-x11.kmap.gz     | |
| |mac-usb-be     /usr/share/keymaps/i386/azerty/mac-usb-be.kmap.gz | |
| |mac-usb-fr     /usr/share/keymaps/i386/azerty/mac-usb-fr.kmap.gz | |
| |mac-usb-it     /usr/share/keymaps/i386/azerty/mac-usb-it.kmap.gz | |
| |wangbe         /usr/share/keymaps/i386/azerty/wangbe.kmap.gz     | |
| |ANSI-dvorak    /usr/share/keymaps/i386/dvorak/ANSI-dvorak.kmap.gz| |
| |dvorak-classic /usr/share/keymaps/i386/dvorak/dvorak-classic.kmap| |
| `v(+)-------------------------------------------------------------' |
|---------------------------------------------------------------------|
|                    <  OK  >            <Cancel>                     |
`---------------------------------------------------------------------'

La lingua per il funzionamento in modo grafico:

.------------X language selection---------------.
| Please select your language for the X         |
| graphical environment.                        |
| Please note that if there will be an          |
| environment variable LANG_FOR_X defined, it   |
| will override this selection.                 |
| .---^(+)------------------------------------. |
| |   pa_IN.UTF-8           UTF-8             | |
| |   pl_PL.UTF-8           UTF-8             | |
| |   pt_BR.UTF-8           UTF-8             | |
| |   pt_PT.UTF-8           UTF-8             | |
| |   ro_RO.UTF-8           UTF-8             | |
| |   ru_RU.UTF-8           UTF-8             | |
| |   ru_UA.UTF-8           UTF-8             | |
| |   se_NO.UTF-8           UTF-8             | |
| |   sid_ET.UTF-8          UTF-8             | |
| |   sk_SK.UTF-8           UTF-8             | |
| `---v(+)------------------------------------' |
|-----------------------------------------------|
|           <  OK  >      <Cancel>              |
`-----------------------------------------------'

Il fuso orario:

.------------------Time zone selection---------------------.
| Please select your time zone:                            |
| .------------------------------------------------------. |
| |   Europe/Rome              previous_value            | |
| |   Africa/Abidjan           Africa/Abidjan            | |
| |   Africa/Accra             Africa/Accra              | |
| |   Africa/Addis_Ababa       Africa/Addis_Ababa        | |
| |   Africa/Algiers           Africa/Algiers            | |
| |   Africa/Asmera            Africa/Asmera             | |
| |   Africa/Bamako            Africa/Bamako             | |
| |   Africa/Bangui            Africa/Bangui             | |
| |   Africa/Banjul            Africa/Banjul             | |
| |   Africa/Bissau            Africa/Bissau             | |
| |   Africa/Blantyre          Africa/Blantyre           | |
| |   Africa/Brazzaville       Africa/Brazzaville        | |
| `---v(+)-----------------------------------------------' |
|----------------------------------------------------------|
|                <  OK  >          <Cancel>                |
`----------------------------------------------------------'

Il numero massimo di pagine stampabili per volta:

┌──Set max lpr/lp printable pages────┐
│ Please insert how many pages are   │
│ allowed to be printed for any      │
│ single print; if you enter zero or │
│ you leave blank, there is no       │
│ limit:                             │
│ ┌────────────────────────────────┐ │
│ │15                              │ │
│ └────────────────────────────────┘ │
├────────────────────────────────────┤
│       <  OK  >    <Cancel>         │
└────────────────────────────────────┘

Infine viene chiesto che tipo di parola d'ordine usare per l'utente root e il nome dell'elaboratore:

.-----------root password selection--------------.
| Please, select the root password to be used:   |
| .--------------------------------------------. |
| |   nlnx     the default NLNX password       | |
| |   current  copy the current password       | |
| |   x        disable root password at all!   | |
| `--------------------------------------------' |
|------------------------------------------------|
|           <  OK  >      <Cancel>               |
`------------------------------------------------'
┌─────────hostname───────────┐
│ Please insert the hostname │
│ to be used:                │
│ ┌────────────────────────┐ │
│ │nlnx                    │ │
│ └────────────────────────┘ │
├────────────────────────────┤
│   <  OK  >  <Cancel>       │
└────────────────────────────┘

I file /etc/passwd e /etc/group vengono copiati nell'immagine del disco eliminando prima le utenze con numero UID da 1 000 a 29 999 (si osservi che gli utenti tizio e gli altri previsti per NLNX hanno numeri UID inferiori); di conseguenza il file /etc/shadow viene ricreato, usando la parola d'ordine scelta per l'utente root, mentre per tutte le altre utenze standard (tizio, caio,... martino, calpurnio, e anche user, admin0, admin1,... admin9) viene usata la parola d'ordine standard: «nlnx».

Come si comprende, le utenze amministrative standard sono rese operative e questo per consentire di avere anche un'utenza root priva di parola d'ordine e quindi inutilizzabile.

La possibilità di disabilitare del tutto le parole d'ordine di root riguarda soprattutto la didattica, quando si vuole produrre un sistema su DVD live, oppure su unità a memoria solida USB, oppure ancora avviato direttamente dalla rete, senza l'intenzione di dare a utenti poco esperti la disponibilità di un'arma letale.

Lo script usato per la masterizzazione, prima della preparazione dei dati si occupa di sistemare alcune cose, come la cancellazione della directory temporanea e la creazione di una directory etc/ adatta. Successivamente, la preparazione dei dati richiede un certo tempo:

...
[/etc/script/nlnxrc] "RW-FS/usr/share/dpatch"
[/etc/script/nlnxrc] "RW-FS/usr/share/dpkg"
[/etc/script/nlnxrc] "RW-FS/usr/share/dvdauthor"
[/etc/script/nlnxrc] "RW-FS/usr/share/dwww"
[/etc/script/nlnxrc] "RW-FS/usr/share/e2fsprogs"
[/etc/script/nlnxrc] "RW-FS/usr/share/emacs"
[/etc/script/nlnxrc] "RW-FS/usr/share/emacs21"
[/etc/script/nlnxrc] "RW-FS/usr/share/emoticons"
[/etc/script/nlnxrc] "RW-FS/usr/share/enchant"
[/etc/script/nlnxrc] "RW-FS/usr/share/enscript"
[/etc/script/nlnxrc] "RW-FS/usr/share/espeak-data"
[/etc/script/nlnxrc] "RW-FS/usr/share/et"
[/etc/script/nlnxrc] "RW-FS/usr/share/evince"
[/etc/script/nlnxrc] "RW-FS/usr/share/festival"
[/etc/script/nlnxrc] "RW-FS/usr/share/ffmpeg"
[/etc/script/nlnxrc] "RW-FS/usr/share/file"
[/etc/script/nlnxrc] "RW-FS/usr/share/file-roller"
[/etc/script/nlnxrc] "RW-FS/usr/share/fonts"
[/etc/script/nlnxrc] "RW-FS/usr/share/foomatic"
[/etc/script/nlnxrc] "RW-FS/usr/share/freecad"
[/etc/script/nlnxrc] "RW-FS/usr/share/fvwm"
...

Identificazione dell'edizione

L'edizione standard di NLNX è identificata dalla data di realizzazione, o di pubblicazione:

2012.12.31

Eventualmente, la mancanza del giorno indica la prima edizione del mese, mentre la mancanza anche del mese, indica che si tratta della prima edizione di quell'anno.

Le derivazioni di NLNX è bene siano identificabili come tali, possibilmente utilizzando un nome completamente diverso; tuttavia, se non gli si cambia il nome, è importante che già dalla stringa di edizione si capisca che si tratta di una variante, usando una forma abbastanza differente, che, possibilmente, consenta di intendere la natura della modifica o il contesto per il quale la derivazione è stata realizzata.

Ricompilazione del kernel

Il kernel standard di NLNX è fatto per gestire le situazioni più comuni; tuttavia ci sono componenti che non sono incluse, nemmeno come moduli. Per questo motivo, di norma sono presenti i sorgenti che sono serviti per la preparazione dei kernel utilizzati.

I sorgenti si trovano precisamente a partire da /usr/src/. Prima di passare alla configurazione con make menuconfig (o altro comando simile), conviene copiare il file di configurazione del kernel standard, che si trova nella directory /boot/. Per esempio, ipotizzando un kernel 2.6.23.9, si tratta di eseguire i passaggi seguenti:

cp /boot/config-2.6.23.9 /usr/src/linux-2.6.23.9/.config[Invio]

cd /usr/src/linux-2.6.23.9[Invio]

make menuconfig[Invio]

Al termine, una volta salvata una nuova configurazione, si passa alla compilazione, con l'aiuto di nlnxrc:

nlnxrc kernel make[Invio]

.-----kernel revision--------.
| Please insert the kernel   |
| revision (must contain at  |
| least a number):           |
| .------------------------. |
| |                        | |
| `------------------------' |
|----------------------------|
|   <  OK  >  <Cancel>       |
`----------------------------'

Viene richiesto di inserire una stringa di identificazione della revisione del kernel che deve contenere obbligatoriamente almeno un numero. Si potrebbe inserire qualcosa di simile all'esempio seguente:

01mio[Invio]

Si osservi che si possono usare solo numeri e lettere (prima le cifre numeriche e poi le lettere alfabetiche). Se la stringa fornita non è accettabile, si ottiene una segnalazione di errore e occorre ripetere il comando.

Al termine, se tutto funziona come previsto, si ottengono alcuni pacchetti Debian nella directory personale dell'utente root. Seguendo l'esempio, si ottiene precisamente il file /root/linux-image-2.6.23.9_nl01mio_i386.deb e si dovrebbero ottenere i file relativi ai moduli aggiuntivi, tra cui, per esempio, /root/ndiswrapper-modules-2.6.23.9_3.3-3+nl01mio_i386.deb (ma questi moduli non sono indispensabili). Per installare i vari pacchetti si usa normalmente il programma dpkg:

cd /root[Invio]

dpkg -i linux-image-2.6.23.9_nl01mio_i386.deb[Invio]

dpkg -i ndiswrapper-modules-2.6.23.9_1.51-1+nl01mio_i386.deb[Invio]

dpkg -i kqemu-modules-2.6.23.9_1.3.0+nl01mio_i386.deb[Invio]

...

L'installazione del kernel comporta l'aggiornamento dei collegamenti simbolici previsti nella directory radice: vmlinuz e vmlinuz.old. Purtroppo non è detto che rispecchino le proprie intenzioni ed eventualmente vanno modificati a mano. Dopo questa verifica, si può procedere alla ricostruzione del disco RAM iniziale, nelle sue due versioni, costituite dai file: nlnxrd.img e onlnxrd.img.

nlnxrc initrd make[Invio]

È molto importante ricordare di ricostruire sempre le immagini dei dischi RAM iniziali con il comando nlnxrc initrd make, immediatamente dopo l'installazione di un kernel, perché diversamente diventa impossibile avviare il sistema! Inoltre occorre procedere a fare una copia dei file aggiornati nella partizione di avvio: i due kernel, presumibilmente nei nomi abbreviati vmlinuz e vmlinuz.old, e i file nlnxrd.img e onlnxrd.img.

Quando viene creato un nuovo DVD live, con il comando nlnxrc nlnx make, viene utilizzato sempre il kernel che risulta attivo, secondo quanto riportato dal comando uname -a; eventualmente si può controllare:

uname -a[Invio]

Linux nlnx 2.6.23.9 #1 PREEMPT Dec 13 10:38:52 CET 2007 \
  \i686 GNU/Linux

Installazione di software non libero

Esiste del software che, a vario titolo, non è libero, ma del quale si può avere bisogno. Per aggiungere questo software a una versione installata di NLNX, conviene cercare delle versioni realizzate appositamente in formato di pacchetti Debian, in modo da non complicarsi troppo le cose. Naturalmente, occorre ricordare che se si installa del software non libero, non è possibile produrre una derivazione di NLNX da ridistribuire.

Una volta raccolti i pacchetti Debian da aggiungere alla propria installazione, è sufficiente utilizzare dpkg con l'opzione -i, come nell'esempio seguente, indicando l'elenco di tutti i file da installare:

dpkg -i msttcorefonts_2.3_all.deb \
  \        cabextract_1.2-2_i386.deb
[Invio]

(Lettura del database ...)
Spacchetto ...
Spacchetto ...
Configuro ...
Configuro ...

L'esempio mostra specificatamente l'installazione dei pacchetti attraverso cui vengono poi prelevati e installati i caratteri tipografici usati da MS-Windows, i quali non sono liberi. Questi pacchetti, di per sé, sarebbero liberi, ma msttcorefonts installa automaticamente i caratteri che non sono altrettanto liberi. L'installazione di msttcorefonts (e di ciò da cui questo dipende) consente di utilizzare tipi di carattere come «Arial» e altri, che diventano indispensabili per visualizzare correttamente certi file di MS-Office, specialmente quando l'incolonnamento delle voci è stata fatta imprudentemente con l'uso di sequenze di spazi orizzontali.

«a2» 2013.11.11 --- Copyright © Daniele Giacomini -- appunti2@gmail.com http://informaticalibera.net