AngoLinux

Il laboratorio Versione 2002

- A cura del Prof. Stefano Salvi -


Configurazione Hardware
Partizionamento
Perchè sprecare 500 MB per una partizione di servizio?
La scelta della versione di Linux
La scelta dei pacchetti
Gli utenti e le password
L'hardware esterno

Configurazione Hardware

Rispetto alle precedenti esperienze (relative a qualche anno fà), il laboratorio ha subito una radicale trasformazione:

  • Sono state abbandonate le macchine diskless (sia DOS che Linux)
  • L'hardware è stato aggiornato prima con dei Pentium II a 350 MHz, con disco da 4GByte e 64 MB di RAM (laboratorio 'A') quindi con Pentium III a 600 MHz con 128 MB di RAM e disco da 8GB (laboratorio 'B') (entrambi i laboratori son attualmente in funzione)
  • Si è adottata una soluzione dual boot con Windows 98 e due partizioni di Linux (una di produzione ed una di servizio, per poter intervenire in caso di inconvenienti)

Partizionamento

Per prima cosa sono state create le opportune partizioni (ad esempio nel laboratorio 'B'):
hda1VFat 323 GBPartizione Windows
hda2Estesa6,6 GB hda5256 MBLinux SwapArea di Swap di Linux, il doppio della RAM instllata
hda6500 MBExt 2Partizione di 'servizio' di Linux
hda72,2 GBExt 2Partizione principale di Linux
 3,6 GBLiberoSpazio libero, per compatibilità parziale con Laboratorio 'A'

Per scegliere la partizione da avviare, si è installato il boot loader LILO.

Perchè sprecare 500 MB per una partizione di servizio?

La partizione di servizio contiene una installazione minima di Linux, in grado di connettersi in rete.

Questa partizione contiene tutti i tool per:

  • Formattare una partizione
  • Riparare una partizione
  • Copiare file da un'altra macchina tramite la rete (nfs o FTP)
  • ripristinare completamente il contenuto di una partizione (Linux o Windows) recuperando i dati dalla rete o da un secondo hard disk installato

Utilizzando questa partizione è quindi possibile eseguire la prima installazione della partizione di lavoro, oppure riparare una partizione di lavoro nella quale siano stati fatti dei guai. Occorre ricordare che gli studenti hanno l'accesso di root alle macchine.

Inoltre, se una macchina viene spenta senza prima dare un comando halt o simile, la partizione di servizio risulta estremamente utile per eseguire un fsck su una partizione di produzione con errori.

Si potrebbe in alternativa utilizzare un 'CD live' con un file system adeguato, ma questo non potrebbe contenere i dati di configurazione della rete della singola macchina.

Non si esclude di individuare in futuro un metodo per realizzare un simile CD live che si adatti bene alla nostra architettura.

La scelta della versione di Linux

La scelta della distribuzione di Linux è caduta su Debian. Debian è la distribuzione GNU, con una politica molto restrittiva riguardo alla licenza dei pacchetti.

In realtà non è questa la motivazione della scelta, sebbene questa politica non mi dispiaccia affatto. In alcuni casi, come nella scelta del paccheto per sviluppo Java - il JDK della Sun - ho fatto scelte diverse.

Debian è anche conocsiuta come la distribuzione più stabile sul mercato. Questo è certamente un argomento molto forte. Purtroppo questa stabilità ha portato al fatto che la corrente distribuzione stabile (Debian 2.2, detta Potato) è stata rilasciata il 14 Agosto 2002. Da allora sono stati pubblicati sei aggiornamenti (attualmente la versione corrente è la 2.2r6), che pero' hanno solo corretto bachi e problemi di sicurezza, senza aggiornare i pacchetti.

Attualmente anche con Linux utilizziamo estesamente l'interfaccia grafica. Negli ultimi due anni i pacchetti hanno avuto uno sviluppo molto importante, in quanto molto del lavoro si è attualmente spostato sull'interfaccia.

In particolare sia le suote di sviluppo sia i pacchetti di office si sono enormemente sviluppati in quest'ultimo periodo.

Ho quindi valutato di adottare per il nuovo laboratorio la futura versione (in stato di testing, quindi, si presumeva, già stabile e molto vicina alla fase di freeze, vale a dire del test finale della distribuzione su CD), nome in codice Woody.

Dopo una serie di prove, visto anche che il tanto agognato freeze e seguente rilascio di Woodycontinuava a farsi attendere, ho alla fine deciso di adottare la versione unstable, di nome Sid. Questa versione comprende le ultime versioni dei pacchetti, comunque ritenute stabili. Malgrado sia chiamata unstable (instabile) presenta comunque una stabilità che nulla ha da invidiare alle altre distribuzioni di grido.

Un argomento a favore della scelta di Debian è il metodo di gestione dei pacchetti che consente di installare o rimuovere pacchetti con un ottimo livello di dettaglio (tanti pacchetti, ognuno con un preciso componente) direttamente in linea, senza dover fermare la macchina e fare operazioni di 'reinstallazione'. La gestione delle dipendenze è ottima: i pacchetti necessari per l'installazione di un nuovo pacchetto vengono individuati in maniera automatica e molto precisa.

Per finire, la struttura delle directory di confiurazione e di avvio (l'albero /etc) è molto ben organizzata e molto chiara. È relativamente facile manutenere una cnfigurazione del sistema, ed anche replicarla, modificandola con semplici script, da una macchina all'altra.

La scelta dei pacchetti

Ai tempi del laboratorio diskless, l'interfaccia d'uso del sistema era l'interfaccia carattere. Attualmete una scelta del genere non è più proponibile, se si vuole presentare il sistema come utilizzabile.

Sò che mi tirerò addosso le ire di tutti i fan di Emacs, ma è molto più semplice programmare utilizzando un ambiente integrato grafico che vi, gcc, make e gdb direttamente.

Inoltre, una parte del programma và svolta utilizzando un foglio elettronico, ed i fogli elettronici con interfaccia console nopn sono molto usabili.

Le attività che verranno svolte sulle macchine saranno:

  • Sviluppo di fogli di calcolo
  • Attività con programmi specifici (automi per la programmazione degli automi, appunto)
  • Programmazione Assembler 8051
  • Programmazione Assembler x86
  • (in prospettiva) Programmazione PIC
  • Programmazione C/C++
  • Programmazione Java
  • Programmazione PHP
  • Editing di pagine WEB
  • Programmazione SQL
  • Editing di immagini, per creazione di siti Web
  • Consultazione di documentazioni in Internet o Intranet

Come interfaccia grafica si è scelto Gnome, sotto XFree4, con window maneger Sawfish.

Per quanto riguarda l'editing HTML, si è scelto di non adottare un editor grafico, ma di editare l'HTML a mano, anche perchè questo prepara alla scrittura degli script.

Sviluppo di fogli di calcolo
Dato che l'interfaccia scelta è Gnome, il foglio elettronico utilizzato è GNumeric
Attività con programmi specifici (automi per la programmazione degli automi, appunto)
Il programma automi è un programma sviluppato internamente, per la simulazione degli automi. Partendo da una descrizione testuale dell'automa, realizza una finestra con i controlli dell'automa stesso, in grado di emularlo.
Fintantochè il programma non avrà un editor incorporato per le tabelle, useremo GNotepad+ o Gedit per editare la definizione delle tabelle
La home page del programma Automi è http://www.salvi.mn.it/stefano/software/automi/
Programmazione Assembler 8051
Anche in questo caso viene utilizzato pcmon, un programma autopordotto che ha funzione di:
  • Editor
  • Loader seriale sulla scheda target
  • debugger simbolico
  • emulatore
  • assemblatore (tramite un assemblatore esterno)

Per assemblare i programmi viene usato l'assembler esterno as31.

Programmazione Assembler x86
Per la programmazione assemble X86 si è optato per utilizzare gas, l'assemblatore del gcc. Questo consente sia di vedere una seconda sintassi per l'assembler, sia di prepararsi alla programmazione mista c-assembler, utilizzando l'assembler in linea (che appunto è gas)
(in prospettiva) Programmazione PIC
Attualmente la programmazione del microcontrollore PIC non fà parte del programma di Sistemi, però diversi studenti lo usano per le tesine di quinta. Si è scelto di installare vari strumenti già inclusi nella distribuzione Debian rigruardo a questo micro e il programmatore Ponyprog.
Programmazione C/C++
La programmazione in C (più che in C++, per il corso di Sistemi) è la parte fondamentale del lavoro. Si è scelto di utilizzare anjuta come ambiente di sviluppo, in quanto già molto completo e abbastanza stabile. Sembra nettamente all'altezza di prodotti concorrenti sotto Windows, come il Borland C 5 utilizzato in altre materie.
Programmazione Java
Per la programmazione Java si è scelto il JDK della Javasoft (già disponibile come pacchetto .deb) in quanto la controparte open source (jikes, kaffe ecc.) non è risultata completa, almeno per lo sviluppo degli applet (sono stati riscontrati problemi con AppletViewer)
Programmazione PHP
La programmazione in PHP stà a cavallo tra Informatica (come ionterfaccia tra Web e database) e sistemi (architetture distribuite, architetture three thier).
La programmazione viene eseguita con comune editor ( GNotepad+ o Gedit) e l'esecuzione viene ottenuta tramite un server Apache con inteprete PHP4 sulle singole macchine.
Editing di pagine WEB
L'editing di pagine Web non è propriamente curricolare, ma ricorre nelle aree di progetto. Come detto in precedenza, si è privilegiato l'editing diretto del codice, anche perchè spesso la problematica non è quella di produrre pagine direttamente in HTML, ma di trasformare testi diversi in pagine HTML, inserendoli in pagine campione.
Quest'ultimo lavoro non può essere svolto agevolmente tramite editor grafici.
Programmazione SQL
In realtà questa parte riguarda più il programma di Informatica che di Sistemi.
Sulle macchine è comunque installato PostgreSQL. Questa scelta è stata in realtà dettata dal fatto che PostgreSQL è parte delle distribuzioni Debian, ma si è poi dimostrata valida, in quanto Postress è una delle implementazioni libere di SQL più complete.
Postgress è installato anche sul server, e spesso viene utilizzato da lì. Viene utilizzato in maniera interattiva con psql, tramite ODBC da Visual Basic (spiace, ma siamo praticamente obbligati ad usarlo, spinti dalla pressione del territorio), oppure da PHP, nella programmazione di pagine attive.
Editing di immagini, per creazione di siti Web
Nella specializzazione di Informatica molto spesso capita di dover produrre documenti HTML, sia tecnici che non. Ad esempio, la produzione del Giornalino d'Istituto, così come alcuni documenti di carattere culturale sono delegati alla specializzazione di Informatica, svolti sotto forma di area di progetto.
Naturalmente questi lavori coinvolgono parecchio lavoro di editing fotografico. Attualmente lo scanner non viene ancora gestito sotto Linux, con SANE, ma l'editing viene spesso svolto con GIMP.
Consultazione di documentazioni in Internet o Intranet
Ovviamente non è possibile strutturare una workstation di questo tipo priva di un browswe WEB. Dato che si produrranno pagine HTML, occorrerà un mezzo per verificarle. Parte della documentazione che gli studenti usano è pubblicata sul sito intranet della scuola ed altra viene consultata sulla rete.
La scelta del browser è caduta su Mozilla che è sembrato abbastanza completo e stabile, anche per la visualizzazione di applet (che fanno parte a loro volta del corso di Sistemi).
L'alternativa Galeon, sebbene leggermente più leggera, non è stata presa in considerazione perchè giudicata non ancora matura al tempo dell'installazione.

Gli utenti e le password

I ragazzi in laboratorio lavorano normalmente in gruppi di due studenti.
Ogni gruppo ha a disposizione un suo login ed una sua area di lavoro (home). Inoltre anche gli insegnanti hanno a disposizione un loro login.
Nel sistema troveremo quindi un login per ogni gruppo di ogni classe, più i login degli insegnanti.
Per consentire agli insegnanti ed ai gruppi di non essre legati ad una particolare macchina, le home sono immagazzinate su di un server e vengono montate in nfs. Il laboratorio è servito da un server Linux Reh Rat 7.2, che oltre a conenere le home directroy delle partizioni Linux, ospita un server Samba che serve le macchine in Win98 e consente la condivisione delle stampanti di rete, oltre a fungere da router per la connessione alle altre risorse dell'Istituto e ad Internet. Questo server serve tre laboratori, dotati di macchine dual boot. I tre laboratori condividono le stesse directory degli utenti. Il server possiede quindi una directory /home_linux nella quale vengono create le directory home degli utenti Linux. Per fare delle prove individuali di laboratorio è però invece necessario rendere le macchine indipendenti ed eliminare le risorse condivise.
Per prima cosa è stato creato nelle workstaition un utente plab la cui home directory è in root (/) invece che in home. Tramite il file /etc/fstab di ogni singola workstaiton nella directory /plab viene montata tramite nfs la directory /plab/<nome macchina>.
Sul server è quindi presente una directroy /plab che contiene una diversa sottodirectory per ognuna delle workstation dei tre laboratori. In questa maniera è estremamente agevole raccogliere i risultati a prova finita, ed anche preparare il laboratorio per il prossimo turno, se la prova si svolge in due turni.
Resta il problema di evitare che gli studenti possano 'condividere' i risultati delle prove tramite le home directory comuni.
Tenendo conto che è possibile che in un laboratorio si svolga una prova, mentre in un altro si svolge la normale attività, è stato predisposto un link simbolico per ogni laboratorio, che punta alla directory comune /home_linux. In pratica la situazione egrave la seguente:

/home_380 -> /home_linux
/home_550 -> /home_linux
/home_363 -> /home_linux
Nel file /etc/exports del server la directory /home_linux non viene esportata. Vengono esportate invece le singole directory /home_380, /home_550 e /home_363, ma ciascuna visibile solamente agli IP del relativo laboratorio. In questo modo, se si elimina o rinomina uno dei tre symlink, il rispettivo laboratorio non potrà più monate una directory comune. Per finire, le directory in /plab sono esportate singolarmente, ognuna visibile solo alla relativa macchina. Questo consente di avere un ambiente realtivamente sicuro per le prove di laboratorio.

Si è visto nel tempo che serve ogni tanto fare qualche ritocco alle configurazioni delle macchine. A questo scopo sono stati predisposti due meccanismi:

  1. È stata creata una directory /usr/global montata in nfs readonly sul server.
  2. È stato aggiunto uno script alla sequenza di avvio, che verifica se ci sono aggiornamenti da fare.
La directory /usr/global possiede le seguenti sottodirectory:
/usr/global/bin
è inserita nella variabile PATH e contiene eseguibili aggiuntivi
/usr/global/sbin
è inserita nella variabile PATH di root e contiene eseguibili aggiuntivi per il superutente
/usr/global/lib
è inserita nel percorso di ricerca delle librerie e contiene librerie aggiuntive
/usr/global/man
è inserita nella percorso di ricerca delle pagine di manuale e contiene pagine di manuale aggiuntive
/usr/global/script
Viene scandita dallo script di cui al punto 2. Contiene degli script che vengono eseguiti all'avvio, per riconfigurare le workstation
Lo script di avvio a sua volta scandisce la directory /usr/global/script e, se trova degli script che non ha ancora eseguito, li esegue.
Questi due meccanismi, insieme, consentono sia rendere un programma disponibile immediatamente alle workstation, sia di installare nuovi programmi sulle workstation o modificarne la configurazione.

Per quanto riguarda l'autentica delgi utenti, si è optato per utilizzare OpenLDAP, tramite PAM.
Sul server del laboratorio è stato attivato il server LDAP, mentre le workstation sono state configurate per autenticarsi su LDAP prima che tramite /etc/passwd, e per modificare le password nella directory LDAP tramite il comando passwd. In questo modo la gestione delle password è centralizza ed una modifica della password di un gruppo fatta da una workstation si rispecchia su tutte le altre.
Per poter aggiungere e togliere nuovi utenti, creando la directory nella home condivisa e creando l'utente nella directory LDAP invece che nel file /etc/passwd si sono dovuti modificare gli script adduser e deluser. Questi comandi, in Debian sono due script PERL, che eseguono alcune operazioni e richiamano alcuni comandi esterni. Sono stati modificati utilizzando la libreria libnet-ldap-perl, per interfacciarsi con il server LDAP.
Gli script sono stati modificati estendendo i parametri di configurazione, per poter scegliere se aggiornare LDAP e per creare anche una riga in /etc/passwd oltre all'entry in LDAP. La configurazione di LDAP /etc/pam_ldap.conf e /etc/ldap_secret in modo da non dover duplicare la configurazione rispetto a quella di PAM.

L'hardware esterno

Due argomenti del programma richiedono dell'hardware esterno per essere svolti correttamente.

  • La parte (svolta tra terza e quarta) sul microcontrollore, che prevede un cross-sviluppo su di un processore 8051 richiede una scheda a microporcessore esterna
  • La parte di quarta sull'interfacciamento prevede dell'hardware nesterno da interfacciare.
Per la parte sul controllore 8051, dopo una serie di tentativi di autocostruzione di schede, che hanno dato origine a schede assolutamente inaffidabili, ci siamo rivolti ad un prodotto commerciale. La nostra scelta è caduta sulla scheda GPC F2 della Grifo di S. Giorgio in Piano, associata con la scheda periferica TI/O 16. La scelta è caduta su questa coppia di schede in quanto consentono di fare le operazioni di base, utilizzando un normale processore 8032 e non un derivato.
La scheda GPC F2 monta una EPROM da 32K con un monitor in linguaggio macchina ed una RAM da 64 K. Gli indirizzi bassi della RAM (da 0000H a 7fffH) sono visibili nello spazio XDATA del processore, mentre i restanti 32K (da 8000H fino al limite dell'I/O mappato, F9FFH) sono condivisi tra XDATA e CODE, in modo da poter ospitare dei programmi scaricati tramite il Monitor ed eseguirli.
La scheda prevede due LED connessi direttamente a due piedini del port P1. P1.2 è connesso al LED rosso e ad un cicalino piezoelettrico, P1.5 è connesso al LED giallo (ed alla tensione di programmazione della EPROM).
Oltre a questi LED, la scheda mette a disposizione un'interfaccia RS232, un'interfaccia parallela a 24 bit realizzata con un PPI 8255, 8 di questi bit sono connessi ad uno zoccolo interno con un dip switch, mentre gli altri 16 sono connessi al connettore esterno. Troviamo poi due timer 82C54 ed un Real Time Clock 6242b.
Il connettore di I/O esterno a 16 bit può essere connesso alla schedina TI/O 16, che visualizza lo stato dei sedici pin e consente di usarli come input, tramite 16 pulsanti.
In alternativa al TI/O 16, sono stati reperiti sul mercato del surplus dei display Citizen H2010, che sono dei display grafici LCD da 200x16 pixel. Questo display monta i controller Hitachi HD44102 e HD44103. Tramite una semplice scheda di interfaccia questo display, insieme con quattro tasti, può essere connesso al connettore di interfaccia della scheda.
Per alimentare la scheda, si è realizzata una piccola schedina con un regolatore ed il tasto di reset, per poter alimentare la scheda con un economico alimentatore da parete da 1A.

Per quanto riguarda l'interfacciamento, invece, si è optato per utilizzare l'I/O già incorporato nel PC, vale a dire l'interfaccia parallela.
Questa interfaccia mette a disposizione due porte in uscita (03f8H, ad 8 bit e 03faH, a quattro bit) ed una in ingresso (03f9H, a 5 bit).
Conettendo dei LED alle porte in uscita e dei bottoni alla porta in ingresso è possibile fare una serie di esperimenti. A questo scopo si è realizzata una schedina da connettere alla parallela.
Ci sono poche osservazioni da fare.

  • Scrivendo un valore 1 su di un qualunque bit di uscita si accende il rispettivo LED.
  • Per garantire un valore 1 sugli ingressi, quando i tasti sono rilasciati, si è usata una resistenza da una delle uscite di controllo. Se si pongono ad 1 le uscite del port di controllo (all'indirizzo 03faH), la corrente fluirà attraverso le resistenze forzando stabilmente ad 1 gli ingressi.
  • Su alcune porte parallele si legge un valore 1 anche senza resistenza o con la resistenza indicata e l'uscita relativa a 0, ma la resistenza connessa e l'uscita ad 1 garantiscono un livello stabile.
  • Gli ingressi sono connessi ai bit dal 3 al 7 della porta 03f9H.
  • Una lettura della porta 03f9H ritorna 1 per ogni tasto rialsciato, eccetto ACK (bit 7) e 0 per ogni tasto premuto (sempre eccetto ACK - bit 7)
  • Se il pulsante ACK è rilasicato, si legge un valore 0 sul bit 7 del port 03f9H, se è premuto si legge un valore 1.
  • Il valore dei bit da 0 a 2 del port 03f9H non è determinato, quindi và scartato e non vanno fatte ipotesi sul loro valore.

Schemi:

  • Basetta con i LED per esperimenti con l'interfaccia parallela leds.png (17.435 byte)
  • Alimentatore per scheda GPC F2 alim.png (17.254 byte)
  • Interfaccia per display Citizen H2010H display.png (13.680 byte)

[Home Page dell'ITIS "Fermi"] [Indice Angolinux] [Precedente] [Successivo]

© Ing. Stefano Salvi - Released under GPL licence