[RoLUG] relazione tecnica[long]

Ferdinando Pucci rolug@lists.linux.it
Sat, 12 Oct 2002 14:07:41 +0200


Ciao, ho ridato un'occhiata alla rel. tecnica del linuxday, visto che molti nn l'hanno ancora vista 
la ripropongo, cosi ci si puo discutere ancora.
Premessa: prevedo un target under30, soprattutto under20, quindi punto alle basi (anche perche non saprei molto di piu =),
ho cercato di mettere l'auditore in condizione di entrare nell'ottica del nostro SO, nn sono andato a fondo su
molti argomenti interessanti perche nn ho intenzione di fare un intervento di + di mezzora, sarebbe palloso visto 
il target. Quindi:
ore             evento
15              inizio
15.30max        relazione filosofica (la sta scrivendo diego)
16              relazione tecn.
17max           inizio install.party
ok?
buona lettura...

INTRODUZIONE A LINUX
copiata poco, scritta molto, riarranggiata di piu

Autore:Pucci Ferdinando
E-mail:Bam_H1@libero.it
Web:rovigo.linux.it

1. intro
2. distribuzioni
 2.1 installazione
 2.2 boot loader 
3. S.O.
 3.1 kernel
 3.2 codici sorgente e sicurezza
 3.3 pacchetti di applicazioni
 3.4 demoni
4. multiutenza
 4.1 runlevel
 4.2 root VS utente
 4.3 permessi
 4.4 desktop manager VS windows manager
5. shell
 5.1 caratteristiche
 5.2 potenzialita'
6. manuali

1.INTRO
GNU/Linux e un sistema operativo che mette a disposizione degli utenti
di personal computer la potenza dei sistemi Unix; quello che comunemente si
indica con Linux e l'unione del kernel, il cui nome e proprio
Linux, e delle librerie e programmi di sistema sviluppati originariamente
dal progetto GNU che, cronologicamente, precedono la nascita del kernel stesso.
Il kernel e stato sviluppato originariamente da Linus Torvalds, che
oggi detiene il copyright sul nome "Linux"; Torvalds continua a coordinare 
l'attivita degli sviluppatori del kernel, che e' rilasciato con licenza
GNU Public License (GPL). 
I tool del progetto GNU insieme con il kernel formano il sistema operativo GNU/Linux;
fatte queste precisazioni, nel seguito verra usato il
termine Linux per indicare il sistema operativo GNU/Linux. 
Il kernel Linux non e l'unico kernel per i sistemi operativi basati
sui tools GNU, essendo attivo il progetto Hurd (Debian GNU/Hurd).
La comunita Linux ha recentemente visto l'ingresso di colossi
dell'informatica quali IBM, che stanno
contribuendo a legittimare il successo di un prodotto che e il risultato
di un modello di sviluppo aperto che ha dato frutti forse insperati.
La conoscenza (anche solo potenziale) delle cose
che ormai fanno parte della nostra vita quotidiana e' una garanzia di liberta.

2. DISTRO
Molte ditte di software hanno assemblato il kernel, i tools GNU e i programmi applicativi disponibili 
per il sistema operativo Linux creando le proprie distribuzioni; fra le molte esistenti, ricordiamo la Slackware,
la prima a raggiungere un buon livello di diffusione, la Debian, la distribuzione che meglio incarna lo spirito
del software libero, Red Hat, Mandrake, Suse e molte altre anche di nuova concezione.
Le varie distribuzioni differiscono fra di loro per le versioni e la quantita dei
programmi installati, per i vari tools che assistono l'utente e l'amministratore nella
manutenzione del sistema e per alcune differenze nella configurazione del 
sistema operativo. Non e praticamente possibile fare una classifica della qualita delle
maggiori distribuzioni, in quanto ognuna di essa si focalizza su un particolare tipo 
di utilizzo, ma  non  esclude comunque gli altri. 
Redhat e Mandrake spesso sono considerate piu facili e piu "simili a windows" perche offrono tools automatici 
di installazione e configurazione del sistema, che non richiedono profonda conoscenza dei file e degli script 
di configurazione. Questo naturalmente ha dei pro e dei contro: vantaggi per l'utente alle prime armi, 
che non avendo esperienza in ambiente Unix si trovera spiazzato di fronte all'organizzazione 
del file-system ed alla quantita di file di configurazione. D'altra parte questi tools automatici tendono 
a "nascondere" cio che c'e sotto, e quindi non permettono la configurazione piu fine del sistema.
Slackware e Debian (soprattutto la prima) non offrono nulla di tutto cio, 
ed hanno quindi come target utenti che sono gia in possesso
di conoscenze Unix; loro potranno "plasmare" il proprio SO sulla base del loro hardware e delle loro 
esigenze, come vedremo oltre.
E' comunque necessario tenere presente che Linux, come ogni
sistema Unix, e un sistema che richiede un certo sforzo prima che se ne
possa apprendere la potenzialita; questa iniziale difficolta e presto 
ripagata quando si cominciano ad intravvedere le possibilita che vengono
messe a disposizione, veramente molte.
Ogni distribuzione Linux contiene molti piu programmi rispetto a quelli
che un utente utilizzera nella propria attivita. Durante l'installazione,
si puo scegliere l'uso generale che si intendera fare del pc (server web, workstation, DNS...)
in modo che linux installi solo cio che e necessario per quel tipo di lavoro. Questa e ja una prima
personalizzazione del sistema, ne vedremo altre in seguito. 
Per es se si sceglie un'installazione tipo server il sistema conterra almeno il server HTTP Apache, un server FTP, sara 
configurato per poter essere utilizzato da firewall, e moltissime altre cose. Se si utilizza il computer 
quale workstation, si troveranno gia installati programmi per il
collegamento a Internet via modem, uno o piu browser, un client per IRC, eccetera.
Se si hanno un po piu di conoscenze si puo anche scegliere manualmente i singoli pacchetti software da installare, 
che sono cmq aggiungibili durante l'uso quotidiano della nostra linuxbox.
Nell'installare linux possiamo scegliere se usare tutto il disco fisso oppure tenere il sistema operativo precedente.
Nel secondo caso a grandi linee occorre: 
-deframmentare il disco da windows (per rimediare al caos del filesystem windows, il FAT32)
-creargli attorno una partizione primaria (con programmi come GNUparted)
-col rimanente spazio creare la partizione per linux
La deframmentazione si fa da windows, la durata dipende dallo stato e dallo spazio dell'harddisk, mentre
al partizionamento ci puo pensare l'installazione (con Mandrake e Redhat) e dura 30 min circa.
In questo modo avremo due (o piu) sistemi 
operativi sul nostro pc. Al momento dell'installazione, linux
si occupera di mettere al punto giusto dell'harddisk un boot loader, per es LILO (LInux LOader), GRUB. Esso, ad ogni boot,
ci presentera un prompt dove potremo effettuare la scelta del SO da usare quando accendiamo il pc.
Per es se voglio usare un prog su linux che ho scoperto funzionare meglio di uno su windows avvio linux, 
se non ho ancora configurato il masterizzatore e devo master 1 cd avvio windows...
E' inoltre possibile tenere piu partizioni nell'hardisk (fino a 64 su disco IDE, fino a 16 su disco SCSI).

3. S.O.
Un sistema operativo e l'insieme dei programmi di sistema (che garantiscono il
funzionamento di base del sistema) e del kernel (nucleo). 
Un sistema operativo puo essere schematicamente diviso in cinque strati, a 
partire dal piu vicino all'utente:
-l'interprete dei comandi (o shell): permette l'attivazione dei programmi di sistema ma anche dei prog utente
-il gestore del filesystem
-il gestore delle periferiche
-il gestore della memoria
-il gestore dei processi
Gli ultimi quattro strati costituiscono il kernel del sistema.
Linux e il nome del kernel, al sistema operativo si dovrebbe dare il nome 
"GNU/Linux" perche i programmi di sistema sono stati sviluppati dal progetto GNU.
Nella filosofia di UNIX questi programmi, sebbene semplici se presi isolatamente, devono cooperare per rendere
potente il sistema.
Generalmente i kernel standard vanno bene per la maggior parte degli utenti e dei pc, ma se vogliamo le massime
prestazioni dobbiamo fare di piu.
Una operazione opzionale che si puo fare e' la ricompilazione del kernel. In questo modo si puo
modificare il nucleo del SO per adattarlo un po di piu al proprio hardware e fare del nostro computer un vero "personal" computer.
Per es se non possiedo una porta usb, non mi serve che tra i gestori delle periferiche ce ne sia uno che gestisca
l'host usb, oppure, posso far sapere al kernel che ho un pentium 2 e lui si ottimizzera per questa architettura hardware,
posso addirittura emulare un host SCSI ed usare un driver SCSI per il lettore el masterizzatore ATAPI!
Ricompilare significa creare un file binario (gli eseguibili windows per es) da un file ASCII (un file di testo): 
il file ASCII contiene il codice in C scritto dal programmatore (linguaggio umano, o quasi...), 
il file binario e quello che l'hardware puo usare (linguaggio macchina).
Abbiamo visto che l'enorme vantaggio dell'avere il codice sorgente e di poter personalizzare ed ottimizzare il kernel,
ma non e finita qua: grazie alla licenza GPL e possibile modificare a piacimento il codice per trovare soluzioni
ancora + personalizzate o per rimediare ad eventuali errori di programmazione che fanno andare in tilt il programma
in certe occasioni. Ovviamente occorre conoscere il linguaggio del codice sorgente e sapere cosa si sta facendo, 
ma e cmq uno stimolo avere una possibilita in piu per risolvere i problemi cazzo!
Ovviamente possiamo mettere le mani oltre che nel kernel, in tutti gli script di linux, dagli script di boot a 
quelli delle operazioni pianificate, ed in tutti i programmi coperti da copyleft. Quest'ultima alternativa e' sicuramente
piu abbordabile.
La possibilita' di poter leggere i sorgenti e soprattutto di poterli liberamente modificare permette a tutti i programmatori
che ne sono capaci di proporre le proprie modifiche per migliorare il programma; ognuno puo proporre le soluzioni che ritiene
migliori, ma alla fine saranno gli utenti a decidere. Questo modello di sviluppo permette una continua revisione di tutto il 
codice dell'applicazione da parte di moltissimi sviluppatori appassionati, garantendo quindi la massima sicurezza. In questo
campo e' sufficiente notare i tempi di correzione dei bug di sicurezza: mentre per i programmi open source bastano solitamente
poche ore per avere a disposizione la correzione di una data vulnerabilita', nel software proprietario spesso non sono 
sufficienti diverse settimane, poiche' gli unici a poter modificare i sorgenti sono i dipendenti della software house 
(che spesso affrontano il loro lavoro in modo svogliato, spinti unicamente da ragioni economiche; gli sviluppatori 
open source invece sono guidati essenzialmente dalla passione per la programmazione e per ottenere la 
stima dai loro colleghi, e questo rappresenta una fortissima 
motivazione, in genere superiore a qualsiasi somma di denaro... o quasi).
Il software per linux lo possiamo trovare in pacchetti sotto varie forme, secondo la modalita' con cui e' archiviato.
Redhat, Mandrake e Suse utilizzano un sistema di archiviazione e gestione dei pacchetti chiamato rpm (redhat packet manager).
E' il sistema piu diffuso, permette di tenere traccia dei file che un pacchetto 
ci fornisce e di compiere varie operazioni su di esso: per es
ci puo dire se per installarlo occorre un'altro pacchetto software (cosiddetta dipendenza), lo disinstalla, lo aggiorna...
Un tool utile e' urpmi, che cerca di fornire agli archivi rpm le operazioni avanzate tipiche di apt di Debian, 
un sistema piu evoluto e piu complesso, che, oltre alle suddette funzionalita, organizza i pacchetti
installati (o da installare, o addirittura mezzi installati) secondo vari criteri, risolve da solo le dipendenze, 
divide un pacchetto in piu parti (per metterli in floppy per es), e molto altro.
Una nuova distro sta sviluppandosi rapidamente, la Gentoo, basata esclusivamente sui pacchetti sorgente, che dovranno 
essere compilati tutti al momento dell'installazione (che al momento durerebbe piu di un giorno!). La Gentoo
permette di ottimizzare al top il SO per il proprio processore, previa conoscenza del hardware posseduto.
Il sistema su cui si basa e' chiamato Portage, simile ai Ports della FreeBSD, un'altro SO Open Source.
Molti dei tools GNU sono raccolti a gruppi sotto un nome comune a costituire un demone. I demoni sono dei programmi 
di sistema che forniscono un servizio all'utente: l'audio, i font, la connessione internet ... sono servizi
gestiti dai rispettivi demoni, servizi che possiamo decidere se far avviare automaticamente al boot o meno, 
in modo da personalizzare ulteriormente (ed alleggerire notevolmente) la nostra distro.
Per es possiamo non far avviare il demone della stampa perche non usiamo molto la stampante, e cosi via.


4. MULTIUTENZA
Dopo l'avvio dal boot loader di linux, il processo di INIT (inizializzazione del sistema) accede al runlevel 5
per default, dove si avvia il server grafico (l'X). Il runlevel altro non e che il nome di una sequenza di operazioni
che linux compie all'avvio od allo spegnimento. Ci sono 7 runlevel, 4 per avviare linux in diversi modi, 1 di halt
ed 1 di reboot (il runlevel 4 non e usato).
I 4 runlevel d'avvio sono:
-runlevel 1: modalita testo (cioe senza la grafica, visivamente e come un prompt dos a tutto schermo) monoutente
-runlevel 2: modalita testo multiutente senza possibilita di scambiare file con la rete
-runlevel 3: modalita testo multiutente completa
-runlevel 5: modalita grafica multiutente
Quando diamo il comando di spegnimento del sistema linux entra nel runlevel 0, se invece vogliamo un reboot linux 
scegliera il runlevel 6. Il runlevel 4 non e usato. Ma cosa vuol dire multiutente?
Linux e un sistema operativo multiutente, ovvero permette l'accesso contemporaneo di piu utenti al sistema stesso, 
un po come un sito web (un server) visitato da piu persone contemporaneamente. 
Essendo un sistema multiutente diventa necessario evitare che un utente possa avere accesso indiscriminato 
ai file di sistema od a quelli degli altri utenti. Inoltre, in situazione di multiutenza, puo essere richiesta 
la contabilizzazione delle risorse impiegate dai vari utenti nel sistema; per es una parte di harddisk (quota) 
utilizzabile da ognuno, una frazione della banda max per la connessione in rete di ogni utente ... Questo per 
non permettere a nessuno di usurpare le risorse di sistema che devono essere equamente condivise nelle situazioni
di multiutenza. Quindi ragioni di sicurezza e di contabilizzazione, rendono necessaria l'identificazione 
degli utenti che accedono al sistema. L'identificazione viene ottenuta attribuendo ad ogni utente un proprio 
nome nel sistema ed una password, e facendo precedere l'accesso al sistema da parte di 
un qualunque utente da una fase iniziale di collegamento e riconoscimento in cui nome e passwd 
vengono verificati. Questa fase viene chiamata "login", ed e presente in tutti i runlevel di avvio a parte l'1.
Linux infatti funziona ad account: si aggiunge un account per ogni utente che ha intenzione di usare quel pc. 
Questa struttura ad account (tipica dei supercomputer dei film!) consente ad un solo utente di fare qls cosa,
il cosiddetto root, o amministratore di sistema. La password dell'utente root e molto importante per la sicurezza
del sistema, visto che si puo far qls cosa una volta loggati come root. Se avviamo nel runlevel 1, automaticamente
ci troviamo come root a gestire il pc.
Agli utenti normali sono negate certe azioni o comandi,
e la loro liberta, al contrario di root, e definita dai permessi: sono il modo di rendere linux un SO molto 
piu sicuro di windows.
Qls file di un filesystem linux (comprese le directory che sono un tipo speciale di file) ha 3 serie di 3 permessi 
(esclusi suid, sgid e sticky-bit) che indicano se quel file e: 
-leggibile
-scrivibile
-eseguibile
da:
-l'utente proprietario di quel file
-il gruppo a cui appartiene
-tutti gli altri utenti (a parte root che se ne infischia dei permessi, anche perche puo cambiarli in qls momento!)
Il gruppo e il nome di un insieme di utenti, insieme che puo essere anche vuoto, cioe nessun utente (registrato
con un account) appartiene a quel gruppo. Ogni file quindi ha un proprietario ed un gruppo di appartenenza, 
verso i quali potra essere leggibile, scrivibile od eseguibile. Con questi accorgimenti i dati di ogni utente 
sono al sicuro da occhi indiscreti ed il sistema non puo essere danneggiato da un utente mascalzone.
Appena loggati quindi abbiamo a disposizione il pc come windows ce l'ha fatto conoscere (runlevel 5).
Il sever grafico X fornisce le risorse ai desktop manager ed ai windows manager per funzionare; la differenza tra 
questi due tipi di gestori grafici sta nel fatto che i windows manager non amministrano i file e le applicazioni
(che quindi dovranno essere gestiti via shell), non hanno le icone desktop, la barra di stato e nemmeno un pulsante di avvio.
Forniscono solo supporto finestre per i programmi avviati ed un semplice menu a tendina personalizzabile. Nomi famosi di 
windows manager sono Blackbox, Windowmaker, Enlightenment, Afterstep ... I desktop manager invece sono simili a windows
(che oltre ad essere il nome del SO M$ e anche il nome del desktop manager), sono infatti dei sistemi di gestione 
dei file e delle applicazioni linux programmati in modo object oriented: i file e le operazioni possibili su di essi 
sono rappresentati come icone su cui si agisce con il mouse, cliccandole, selezionandole, spostandole e sovrapponendole. 
Dunque i desktop manager sono shell grafiche, in quanto fanno quello che nei windows manager si fa con la shell. 
Di desktop manager ne troviamo due, GNOME, arrivato alla seconda ver, e KDE, arrivato alla terza.
Da menzionare il browser web Konqueror che fa anche da gestore file, cioe aprendo nella sua finestra una nostra dir,
possiamo agire sui file come coi desktop manager.

5. SHELL	
La shell di Linux (e degli ambienti UNIX in generale) e un elemento fondamentale del sistema operativo.
Solo chi sa usare correttamente questo ambiente puo dire di conoscere linux, altrimenti e un ignaro utilizzatore.
Le caratteristiche della shell sono:
-iterazione con il sistema operativo
-programmabilita
-interfaccia a caratteri
La shell e un interprete a linea di comando, permette di interagire con il sistema operativo impartendogli dei comandi,
fino a creare un programma vero e proprio, generalmente detto script.
Per comandi si intendono tutti i programmi forniti dal sistema operativo (anche i piu semplici 
come "echo") e dalle applicazioni successivamente installate.
Uno script e invece il susseguirsi di comandi all'interno di strutture di controllo (if/else, cicli for, switch...).
Nella definizione si dice che: "la shell e un interprete a linea di comando", questo significa che e essa stessa un programma 
che interpreta altri programmi (un comando altro non e che il nome di un programma). 
Ci possono essere vari modi di interpretare i programmi e quindi vari tipi di shell.
Infatti esistono varie shell, ma le caratteristiche fondamentali -iterazione con il sistema, programmabilita, 
interfaccia a caratteri-
rimangono per tutte uguali. Le shell piu famose sono: bash ( Bourne Again Shell), ash, csh e molte altre. 
Per programmabilita si intende che l'interprete offre un certo numero di strutture di controllo, costanti e 
variabili tipiche di ogni linguaggio di programmazione. Questa caratteristica ci permette di scrivere un programma per
automatizzare un'operazione che intendiamo fare piu volte, per fare una ricerca complessa all'interno di certi tipi di file,
ect...La programmabilita si avvale anche delle regex, le espressioni regolari, la cui potenza ci permette di trovare 
facilissimamente un certo modello di testo.
E' evidente quindi l'enorme potenziale della shell, il vero cuore del SO linux!
Ovviamente per programmare occorre un'interfaccia a caratteri in cui poter scrivere.
Molti ambienti di tipo visuale, quali windows e macOS hanno delle utility con l'obbiettivo di fornire qualcosa di simile, 
non arrivando mai alle potenzialita della shell linux, non per l'incapacita di creare un interprete cosi potente, 
ma per come sono creati i programmi applicativi. Nell'ambiente unix (e quindi in linux), fin dall'inizio era presente la shell, 
anzi era il solo modo per interagire con il sistema operativo; i programmi erano (e sono) creati con la shell. 
Ogni programma linux e caricato dalla shell, anche se noi lo avviamo da un desktop manager, 
ed ha una notevole flessibilita offrendo la possibilita di essere parametrizzato.
Attraverso la parametrizzazione e possibile guidare un'applicazione linux, nell'input, nell'esecuzione e nell'output. 
Una pratica comune e quella di creare delle "pipe". Dei "tubi" tra applicazioni, l'output di una e l'input per un'altra, 
e questo si puo fare solo attraverso la shell.
Se si guardano i parametri di caricamento di un qualsiasi programma se ne trovano almeno una decina, per permettere
il controllo totale sull'applicazione che si sta lanciando. Tutto questo non 
vale per i sistemi operativi basati solo sull'interfaccia grafica, i cui utenti possono solo usufruire superficialmente 
delle applicazioni ed al presentarsi di limitazioni tecniche ne subiscono la frustrazione.
Se dovessi scegliere uno degli elementi distintivi tra un sistema linux e gli altri, la shell sarebbe uno tra quelli 
fondamentali.

6. MANUALI
Il bello di linux, sotto certi punti di vista, sono i manuali. Non occorre fare corsi di computer costosi, comprare
centinaia di fascicoli in edicola, basta aprire con la shell i manuali della propria distribuzione per sapere 
esattamente come fare qlc. Per es il software appena installato e' ja preconfigurato, ma per usarlo al meglio
e' necessario sforzarsi di capirne il funzionamento attraverso la documentazione fornita assieme ad ogni sistema linux.
Questa operazione e' spesso snobbata da molti, che vanno prima a cercare in internet
magari spammando i ng o assillando i poveri fraquentatori di chat informatiche (che puntualmente li kikkano!).
Occorre tanta pazienza, buona volonta e una foto di bill per insultarlo meglio se si continua a nn capire le cose!
Ovviamente l'inglese e' d'obbligo anche se molti manuali sono ja stati tradotti in italiano. 
Una autorevole fonte di sapere informatico ci giunge dagli Appunti di Informatica Libera, di Daniele Giacomini; 
una vera enciclopedia (pensate che e' suddivisa in volumi!!) in italiano, consultabile in rete o scaricabile gratis 
in diversi formati. Vi troviamo spiegato un'infinita di argomenti, da quelli che avete appena sentito ad altri molto
piu complessi.
Comportandosi da bravi autodidatti ci si ritrova con un bagaglio di cultura informatica notevole senza rendersene conto!
E questo solo grazie a linux!

sono gradite correzioni ortografiche, sintattiche e tecniche!