Old:Debian MapServer/MapScript: differenze tra le versioni

m
nessun oggetto della modifica
mNessun oggetto della modifica
mNessun oggetto della modifica
Riga 1: Riga 1:
=Introduzione=
La creazione di un repository Debian personale pu� essere utile nel caso si vogliano rendere disponibili per l' installazione tramite l' [[Introduzione all' Apt System|APT System]] i pacchetti *.deb creati da noi. Il repository cos� creato pu� essere utilizzato all' interno della nostra LAN, oppure reso accessibile a un gran numero di utenti tramite internet.
Samba e' un diffusissimo software open source ideato nel 1991 da Andrew Tridgell e rilasciato sotto licenza GPL che permette la condivisione di risorse come directory e stampanti tra macchine windows e GNU/Linux (''UNIX''); si avvale sostanzialmente del protocollo SMB (''server message block'') originario microsoft e basato a sua volta sul protocollo  NetBios (''network basic input output system'') sviluppato da IBM nel 1984.  


Si sceglie solitamente l'uso di Samba per poter condividere file e stampanti in una rete mista (''macchine GNU/Linux, ms-windows, mac os..''), in modo da sfruttare un unico protocollo e un unico sistema di autenticazione.
Esistono fondamentalmente due diversi approcci alla creazione di un repository:
* '''Repository Automatico''': ha una struttura complessa, gestisce un pool di pacchetti e supporta architetture (i386, sparc, ecc...) multiple. A fronte di un maggior lavoro lato server permette un uso altamente automatizzato lato client;
* '''Repository Semplice''': gestisce una sola architettura. E' il pi� indicato per i piccoli repository, specie quelli personali, perch� richiede un minor lavoro lato-server.


=La suite=
In questa guida vedremo come realizzare il secondo tipo di repository.
Analizziamo i programmi che otteniamo dall' installazione della suite samba per Debian GNU/Linux:


<pre># apt-get update && apt-get install samba smbfs</pre>
=Repository semplice=
 
==La Struttura==
In breve:
Per prima cosa dovremo scegliere dove risieder� fisicamente il nostro repository. Una buona scelta pu� essere una directory all' interno della nostra home, come anche una directory all' interno di /usr/share. In questa guida creeremo il repository nella nostra home, ma sentitevi liberi di posizionarlo dove pi� vi aggrada.
;'''smbd''': questo demone e' sostanzialmente il cuore di samba; in ascolto sulla 445/tcp, gestisce le autenticazioni e da accesso ai filesystem e allo spooler di stampa.
<pre>
 
$ mkdir ~/debian
;'''nmbd''': questo demone in ascolto sulla 139/udp, rende note le risorse condivise tutte le volte che viene interrogato dai client. Per fare un esempio � quel demone che permette la visualizzazione dei serventi samba in Risorse di Rete nei sistemi ms-windows. E' il primo ad avviarsi dei due demoni.
</pre>
 
Ora dobbiamo creare le due sottodirectory ''binary'' e ''source'' che conterranno rispettivamente le versioni binarie e sorgenti dei nostri pacchetti:
;'''smbclient''': programma client a riga di comando quasi uguale a ftp (''smbclient trasferisce solo in binary mode''), dotato di diverse funzioni; tra le piu' importanti, quella di listare gli share messi in condivisione dai vari server samba in una rete.
<pre>
 
$ mkdir ~/debian/binary
;'''smbmount''' & '''smbumount''': utilizzati per montare/smontare filesystem condivisi.
$ mkdir ~/debian/source
 
</pre>
;'''smbpasswd''': strumento per la creazione utenti samba. Un utente samba dovra' essere anche un utente presente sulla macchina.
In questo modo avremo una struttura di questo tipo:
 
<pre>$ tree debian
;'''testparm''': strumento per la verifica del file '''/etc/samba/smb.conf.
debian
 
|-- binary
;'''nmblookup''':  risolve i nomi host di un domain samba (''NetBIOS name'') in indirizzi ip (es: nmblookup ''nomehost'').
`-- sources
 
=Configurazione del server=
==Sezione global==
Editiamo il file '''/etc/samba/smb.conf''':
<pre>
[global]
    allow hosts = 192.168.1.0/24   
    workgroup = debianizzati
    server string = server@debianizzati.org
    browsable = yes
    create mask = 0755
</pre>
</pre>


Con la sezione global all'interno del file smb.conf abbiamo impostato quei parametri che saranno il modello generale di tutte le eventuali sezioni che verranno.
==I file di indice==
Ultimata la creazione della struttura del repository e popolati binary e source (se abbiamo anche le versioni sorgenti) con i nostri pacchetti, dobbiamo creare i relativi file di indice. Questi file vengono scaricati da APT quando impartiamo il comando '''apt-get update''' e contengono la lista di tutti i pacchetti presenti in un repository. Quando effettuiamo la ricerca di un pacchetto o quando desideriamo installarlo, APT consulta questi file per stabilire in quale repository esso � contenuto.


Ad esempio se  nella successiva sezione, non specificassimo il parametro '''allow hosts''', verra' preso come riferimento '''192.168.1.0/24'''.
La creazione dei file di indice � ottenuta tramite due utilities: '''dpkg-scanpackages''' e '''dpkg-scansources'''. Il funzionamento dei due programmi � identico, ma il primo esamina i file binari ed il secondo quelli sorgenti.


Ok, in breve:<br>
Entrambi gli strumenti restituiscono i loro risultati sullo standard output (stdout): questo significa che di default vedremo l' output a schermo. Per questo motivo � necessario reindirizzare il risultato di scanpackages e scansources su file appositi. Per convenzione questi file sono compressi in formato gzip e chiamati '''Packages.gz''' all' interno di ''binary'' e '''Sources.gz''' all' interno di ''source''.
'''allow hosts''' = range di ip ai quali e' permesso l'accesso alla risorsa<br>
'''workgroup''' = nome del gruppo di lavoro<br>
'''server string''' = stringa che identifica il server<br>
'''browsable''' = rende visibile lo share<br>
'''create mask''' = determina i permessi dei file in condivisione<br>
 
{{Box|Nota|Per puntare a semplicita' e rapidita' di utilizzo, inseriremo solo pochi parametri essenziali per sezione, nel nostro smb.conf. Tuttavia i parametri previsti per questo file sono veramente tanti. Per una panoramica completa fate riferimento alla page (man5) di [http://www.samba.org/samba/docs/man/smb.conf.5.html Samba].
}}
==Condivisione di una directory==
Adesso sempre dentro il nostro smb.conf, creiamo la sezione specifica per la risorsa che vogliamo condividere.  In questo esempio condivideremo una directory.
<pre>
[shared]
    comment = Directory Shared
    path = /dir/da/condividere
    browsable = yes
    read only = yes
    public = yes
    create mask = 0755
</pre>


Altri parametri:<br>
Nell' esempio di questa guida il nostro repository contiene due pacchetti di tipo binario (apt e apt-best) ed un pacchetto di tipo sorgente (apt). Vedremo ora come creare i relativi file Packages.gz e Sources.gz
'''comment''' = commento per la directory<br>
'''path''' = percorso della dir condivisa<br>
'''public''' = rende la dir di libero accesso<br>
'''read only''' = setta i files della dir condivisa in sola lettura<br>


==Condivisione di una stampante==
La struttura del repository di esempio � questa:
Adesso analizziamo i parametri da aggiungere al file '''smb.conf''' per poter condividere una stampante.
Aggiungiamo alla sezione '''global''':
<pre>
[global]
    printing = [sistema di stampa utilizzato, es: cups, lprng..]
    load printers = yes
</pre>
Creiamo inoltre la sezione '''printers''' che fornira' i parametri di accesso alle nostre stampanti:
<pre>
<pre>
[printers]
$ tree debian
    path = /var/spool/samba
debian
     guest ok = yes
|-- binary
     printable = yes
|  |-- apt-best-0.3.deb
|  |-- apt-doc_0.5.28.6_all.deb
|  |-- apt-utils_0.5.28.6_i386.deb
|  |-- apt_0.5.28.6_i386.deb
|  |-- libapt-pkg-dev_0.5.28.6_i386.deb
|  `-- libapt-pkg-doc_0.5.28.6_all.deb
`-- source
     |-- apt_0.5.28.6.dsc
     `-- apt_0.5.28.6.tar.gz
</pre>
</pre>
{{Box|Nota|Debian non crea la directory /var/spool/samba. Questa directory e' adibita solo allo spool di stampa, volendo molti la sostituiscono con /tmp. Se decidete di crearla voi, per un corretto funzionamento impostatele i permessi: nobody:nobody con chmod -R 755.
Procediamo con la creazione del file Packages.gz:
}}
 
Dopodiche' scriviamo la sezione specifica per la nostra stampante (''es. una camon'').
<pre>
<pre>
[camon]
$ cd ~/debian
    comment = Camon Printer
$ dpkg-scanpackages binary /dev/null | gzip -9c > binary/Packages.gz
    path = /var/spool/samba
  apt apt-best apt-doc apt-utils libapt-pkg-dev libapt-pkg-doc
    browsable = yes
  Wrote 6 entries to output Packages file.
</pre>
$ ls ~/debian/binary/ |grep Packages
 
Packages.gz
==Condivisione di dispositivi di lettura (CD-ROM, DVD..)==
Poniamo come esempio di avere due pc e che solo uno dei due monti un lettore dvd. Bene, guardiamo come poter accedere ad un file che risiedesse su un supporto dvd, dalla macchina sprovvista di lettore:
<pre>
[dvd]
    comment = Lettore DVD-R
    preexec = mount /media/cdrom
    postexec = umount /media/cdrom
    path = /media/cdrom
    writable = no
</pre>
</pre>
Parametri supplementari al nostro smb.conf:<br>
e del file Sources.gz
'''preexec''' = permette di impostare un'azione che sara' eseguita una volta connessi alla risorsa<br>
'''postexec''' = in questo caso l'azione sara' eseguita quando la risorsa verra' sconnessa<br>
 
Al momento che dal client monteremo la risorsa condivisa (con smbmount o smbclient) sul server sentiremo montare il dvd, il quale contenuto sara' a nostra disposizione per trasferire file o, in caso di file audio/video, anche di streaming.
 
Bene, a questo punto il file puo' considerarsi sufficientemente configurato per i nostri scopi.
 
==Autenticazione==
Preoccupiamoci ora dell'accesso vero e proprio alle risorse messe in condivisione. Due sono i principali metodi di accesso. Possiamo creare un utente samba con smbpasswd, (''tenendo presente che un utente samba deve anche essere un utente presente sulla macchina'') ed attribuirgli poi una password di nostra scelta:
 
Creazione utente samba:
<pre>
<pre>
# smbpasswd -a utente
$ cd ~/debian
New SMB password: ****
$ dpkg-scansources source /dev/null | gzip -9c > source/Sources.gz
Retype new SMB password: ****
$ ls ~/debian/source/ |grep Sources
Sources.gz
</pre>
</pre>


Questi sono user e pass coi quali ci loggheremo nel momento in cui connetteremo le risorse condivise (''smbmount, smbclient'').
==I file di Release==
Se volete poter usare il pinning (''cfr.: [[APT uso avanzato: mixare releases diverse]]'') o permetterne l' uso agli utenti del vostro repository, una volta creati i file Packages.gz e Sources.gz, dovete necessariamente creare un file apposito in ciascuna directory del vostro repository.


Se volessimo inoltre consentire l'accesso a tutti gli utenti indistintamente, basterebbe inserire il parametro '''guest ok = yes''' nelle sezioni desiderate. Ad esempio nella sezione shared:
Questi file sono chiamati file '''Release''', sono normali file di testo ed hanno una struttura del tipo:
<pre>
<pre>
[shared]
Archive: archivio
    comment = Directory Shared
Component: componente
    path = /dir/da/condividere
Origin: origine
    browsable = yes
Label: etichetta
    read only = yes
Architecture: architettura
    public = yes
    create mask = 0755
    guest ok = yes
</pre>
</pre>
dove:
* archivio = '' l' archivio Debian a cui i pacchetti appartengono (ad es.: stable, testing. ecc...);
* componente = ''indica il tipo di componente (ad es.: main, contrib, non-free);
* origine = ''specifica il proprietario del repository'';
* etichetta = ''identifica il repository: potete inserire descrizioni, ecc...;
* architettura = ''l' architettura dei pacchetti contenuti nel repository (ad es.: i386, sparc, source, ecc...).
Vediamo i file Release per i repository di questa guida.


Cosi' facendo potremo loggarci come ospiti digitando solo invio come password.
Per l' archivio ''binary'' abbiamo:
 
Bene, riavviamo il server:
<pre>
<pre>
# /etc/init.d/samba restart
$ cat ~/debian/binary/Release
Stopping Samba daemons: nmbd smbd.
Archive: unstable
Starting Samba daemons: nmbd smbd.
Component: main
#
Origin: keltik
Label: Repository di esempio
Architecture: i386
</pre>
</pre>
 
e per quello ''source'':
Adesso testiamo la validita' del file /etc/samba/smb.conf col comando:
 
<pre>
<pre>
# testparm /etc/samba/smb.conf
$ cat ~/debian/source/Release
Load smb config files from /etc/samba/smb.conf
Archive: unstable
Processing section "[shared]"
Component: main
Processing section "[camon]"
Origin: keltik
Processing section "[dvd]"
Label: Repository di esempio
Loaded services file OK.
Architecture: source
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions
</pre>
</pre>
Premendo enter vedremo il resoconto del nostro file.


=Lato client=
==Uso del repository==
==Smbclient==
===Uso in locale===
Spostiamoci sul client:
Finalmente � venuto il momento di mettere alla prova il nostro repository.
<pre># apt-get install smbfs smbclient</pre>


Come detto in precedenza, smbclient e' un programma client ftp-like, utilizzato per l'accesso a un server samba. Guardiamo i suoi principali flags e le sue principali funzioni invece, una volta dentro al server.
Gi� fin d' ora possiamo utilizzarlo cos� com' � in locale sulla nostra macchina: tutto quello che dobbiamo fare consiste nell' aggiungere al nostro file /etc/apt/sources.list l' [[URI]] attraverso il quale reperire i pacchetti.


===Principali flags===
In questo esempio abbiamo creato il repository nella directory ~/debian e cio� nella directory ''debian'' all' interno della nostra home. Dovremo quindi aggiungere al file sources.list due linee cos� composte:  
(''Usare smbclient --help per uno screen completo''):
 
;'''smbclient -L ''hostname''''': lista tutti gli share di un determinato host. Ad esempio, dal nostro client facciamo richiesta di listare gli share del server (''come password digitiamo  quella dell'user creato con smbpasswd o solo invio''):
<pre>
<pre>
$ smbclient -L SERVER
deb file:///home/utente/debian binary/
Password: ****
deb-src file:///home/utente/debian source/
 
Domain=[debianizzati] OS=[Unix] Server=[Samba 3.0.14a-Debian]
 
        Sharename      Type      Comment
        ---------      ----      -------
        shared          Disk      Directory Shared
        camon          Disk      Camon Printer
        dvd            Disk      Lettore DVD-R
        IPC$            IPC      IPC Service (server@debianizzati.org)
        ADMIN$          IPC      IPC Service (server@debianizzati.org)
 
Domain=[debianizzati] OS=[Unix] Server=[Samba 3.0.14a-Debian]
 
        Server              Comment
        ---------            -------
        SERVER              server@debianizzati.org
        CLIENT              server@debianizzati.org
 
        Workgroup            Master
        ---------            -------
        debianizzati        SERVER
</pre>
</pre>
dove, alla parola ''utente'' dovete sostituire lo username dell' utente nella cui home risiede il repository.


Come si vede, nella colonna '''Sharename''' sono elencati i nomi degli share settati in smb.conf, quindi, la nostra directory shared,la nostra stampante e il nostro lettore DVD (''le sezioni [global] e [printers]  non sono visibili poiche' sono sezioni di parametri usate dal programma'').
Una volta fatto questo lanciate '''apt-get update''' per rigenerare la lista degli indici di APT.
Nella colonna '''Server ''' sono invece elencati gli hosts facenti parte del medesimo workgroup.
C'e' poi la colonna '''Workgroup''' che visualizza l'host con ruolo di domain master browser nella subnet.


;'''smbclient -U''': Con questo flag possiamo specificare l'username e l'eventule password per il login sulla macchina server.
Ora vediamo se il nostro repository funziona. Iniziamo con il cercare il pacchetto '''apt'''. Il comando da impartire �:
 
;'''smbclient -A''': Sostanzialmente uguale a -U ma possiamo dargli il path di un file dal quale attingere l'username e la password.
 
===Accesso al server===
<pre>
<pre>
$ smbclient //SERVER/shared
$ apt-cache show apt
Password: ****
Domain=[SERVER] OS=[Unix] Server=[Samba 3.0.14a-Debian]
smb: \>
</pre>
</pre>


Adesso siamo dentro al nostro server samba il cui hostname e' SERVER. Sostanzialmente il funzionamento smbclient e' il funzionamento di ftp, ma con in piu' degli utilissimi tools per il down/uploading dei files.
Se tutto ha funzionato dovremmo ottenere come risultato due diversi pacchetti: entrambi si chiamano apt, entrambi hanno numero di versione 0.5.28.6, ecc... Per capire se e quale proviene dal nostro repository dobbiamo andare a controllare la voce ''Filename:'''.
Alcuni input uguali a quelli di una shell di bash sono: '''ls''', '''cd''', '''rm''', '''rmdir''', '''exit''', coi quali ci sentiremo subito a casa nostra.
Otteniamo cmq una lista di comandi utili digitando '''help'''.


'''Download di un file con get'''.<br>
Nel caso del pacchetto proveniente dal repository ufficiale di Debian avremo:
Poniamo come esempio che il contenuto della directory condivisa sia un insieme di files immagine con diverse estensioni e una directory con dentro qualsiasi cosa:
<pre>
<pre>
smb: \> ls
[ ... omissis ...]
  .                       D            0  Tue Aug 23 23:57:51 2005
Filename: pool/main/a/apt/apt_0.5.28.6_i386.deb
  ..                     D            0  Wed Aug 17 03:05:20 2005
[ ... omissis ...]
  directory              D            0  Wed Aug 24 12:21:43 2005
  free_kevin.png                    42604  Mon Aug 22 12:19:34 2005
  pokemon.png                      43404  Mon Aug 22 15:15:11 2005
  dorothy_la_may.gif                46134  Mon Aug 21 21:16:00 2005
</pre>
</pre>
 
mentre per il pacchetto proveniente dal nostro repository avremo:
Scarichiamo il file free_kevin.png dalla macchina SERVER alla nostra macchina CLIENT, rinominandolo in kevin.png:
<pre>
<pre>
smb: \> get free_kevin.png  kevin.png
[ ... omissis ...]
getting file \ free_kevin.png of size 42604 as  kevin.png(1386.8 kb/s) (average 1386.8 kb/s)
Filename: binary/apt_0.5.28.6_i386.deb
[ ... omissis ...]
</pre>
</pre>


Il file sara' salvato nella directory dalla quale ci siamo connessi al server. Qualora il file non venisse rinominato manterrebbe il proprio nome.
Per fare in modo che il nostro repository sia usato come preferenziale rispetto agli altri possiamo inserire nel sources.list le linee ad esso relativo all' inizio del file, prima di tutti gli altri repositories.


===Alcune funzioni===
In questo modo, quando impartire il comando '''apt-get install nome_pacchetto''', APT provveder� ad installare quello fornito dal repository elencato per primo nel sources.list. Ecco l' esempio sempre relativo ad apt:
;'''lowercase''': abilita i files ad essere richiamati da get e mget utilizzando solo caratteri minuscoli. E' utile viste le difficolta' spesso trovate negli share msdos (''case insensitive'').
<pre>
<pre>
es. di abilitazione dei parametri
# apt-get install apt -s
smb: \> lowercase on
Lettura della lista dei pacchetti in corso... Fatto
smb: \> prompt on
Generazione dell'albero delle dipendenze in corso... Fatto
Pacchetti suggeriti:
  aptitude apt-doc
I seguenti pacchetti saranno aggiornati:
  apt
1 aggiornati, 0 installati, 0 da rimuovere e 1 non aggiornati.
Inst apt [0.5.28.6] (0.5.28.6 Repository di esempio:unstable)
Conf apt (0.5.28.6 Repository di esempio:unstable)
</pre>
</pre>
;'''prompt''': Impostando ''' prompt''' su '''on''' prima di ogni trasferimento ci verra' richiesta una conferma.
Nelle ultime due linee possiamo notare come la provenienza del pacchetto sia '''Repository di esempio:unstable''' come indicato nel nostro file '''Release'''.
;'''showconnect''': mostra l' //host/nome_risorsa in uso.
 
===Uso in rete (http)===
rendere disponibile in rete il repository che abbiamo appena creato � un' operazione estremamente semplice. Non dovremo fare altro che copiare la root del repository in una directory accessibile al nostro server web ed indicare l' [[URI]] corretto nei sources.list delle macchine che dovranno accedere ad esso.
 
Nel caso in cui stiamo usando Apache e la DocumentRoot sia /var/www sar� sufficiente impartire:
<pre>
<pre>
smb: \> showconnect
# cp -R /home/utente/debian/ /var/www/
//SERVER/shared
</pre>
</pre>


;'''stat nomefile''': Stampa a video i permessi di un file e offre in ordine temporale info sugli accessi ad esso:
Ora dobbiamo modificare i sources.list in modo che puntino a questo repository.
 
Poniamo che il server che mette a disposizione il repositry abbia il [[FQDN]] debian.prova.net. La sintassi da utilizzare nel sources.list � la seguente:
<pre>
<pre>
smb: \> stat  free_kevin.png
deb http://debian.prova.net/debian/ binary/
File: \free_kevin.png
deb-src http://debian.prova.net/debian/ source/
Size: 101              Blocks: 8      regular file
Inode: 810      Links: 1
Access: (0644/-rw-r--r--)      Uid: 1000      Gid: 1000
Access: 2005-08-24 00:10:39 +0200
Modify: 2005-08-24 00:10:51 +0200
Change: 2005-08-24 00:10:51 +0200
</pre>
</pre>
 
Dobbiamo fare '''estrema''' attenzione ai slash ("/") perch� hanno un uso preciso all' interno di sources.list. Nel nostro caso � '''necessario''' che sia l' URL (http://debian.prova.net/debian) sia l' archivio (binary o source) sia terminato con un "/", altrimenti otterremo un errore di questo tipo:
===Mask, mget e recurse===
Con il comando '''mget''' abilitiamo il dowload di tutti i file e directory in maniera ricorsiva. Tuttavia possiamo dare a tale comando un parametro (maschera) utilizzando '''mask''' .
Es. nella nostra directory mettiamo di voler scaricare tutti i file con estensione .png:
<pre>
<pre>
smb: \> mask *png
# apt-get update
smb: \> mget
E: La linea x in /etc/apt/sources.list (dist parse) non � corretta
</pre>
</pre>
In questo modo mget intendera' scaricare tutti i files con tale estensione presenti nella directory corrente.
Se abbiamo invece scritto correttamente, quando lanceremo apt-get update, vedremo APT dialogare con il nostro web server e reperire l' elenco dei nostri pacchetti:
Tuttavia con mget e' possibile modificare la maschera on-fly digitando semplicemente:
<pre>
smb: \> mget *png
</pre>
In questo modo la funzione mask, manterra' il suo valore di default che e' '*' (''cioe' tutto'').
La funzione '''recurse on''' attiva lo scanning & downloading (nel caso di una maschera) o il dowloading, accedendo anche a tutte le directory presenti nella dir da cui parte il comando.
 
==Smbmount & Smbumount==
Con '''smbmount''' invece montiamo una risorsa in un mountpoint a nostra scelta.
Montiamo la risorsa shared col comando:
<pre>$ smbmount //SERVER/shared  /path/del/mountpoint</pre>
 
(''come password digitiamo  quella dell'user creato con smbpasswd o solo invio'')
 
Cosi' facendo potremmo accedere alla risorsa condivisa, raggiungendo il mountpoint:
<pre>
<pre>
$ cd /path/del/mountpoint
# apt-get update
$ ls
Get:1 http://debian.prova.net binary/ Packages [1377B]
  directory  free_kevin.png  pokemon.png dorothy_la_may.gif
Get:2 http://debian.prova.net binary/ Release [97B]
Get:3 http://debian.prova.net source/ Sources [412B]
Get:4 http://debian.prova.net source/ Release [100B]
</pre>
</pre>
Per il test e l' ordine con cui i pacchetti vengono installati da APT, vi rimando alla lettura del [[#Uso_in_locale|paragrafo precedente]]


=Conclusioni=
Samba e' un software semplicemente straordinario. La sua anima, il file smb.conf e' in perfetto stile Linux; cioe', lo stesso file, puo' divenire enorme e strutturatissimo oppure snello e semplicissimo, a seconda (''e questo e' il vero stile linux'') di quello che un utente vuole.


-------
----
--[[Utente:Keltik|Keltik]] 09:20, Giu 26, 2005 (EDT)


Autore: [[Utente:Zmo.zmo|zmo]]
[[Categoria:Server]][[Categoria:Repository]]
[[Categoria:Networking]][[Categoria:Desktop]]
1 760

contributi