Home

Diavoli e Pinguini

Nozioni in pillole sulle caratteristiche di alcune distribuzioni BSD e Linux

Marco Bisetto
logo BLUG BLUG
Belluno — 24 aprile 2004

logo Debian
Debian

Sommario

Debian

Debian è una distribuzione di Linux non commerciale, tutti i contenuti possono essere liberamente copiati e distribuiti. Ciò è vantaggioso, ha permesso tra l'altro la nascita di altri progetti che usano Debian come base (Knoppix, eduKnoppix, Morphix,...), ma ci sono alcune controindicazioni. Esistono software commerciali con restrizioni sulla distribuzione, tra cui ad esempio alcuni plugin di mozilla, compresa la java virtual machine , che non possono essere inseriti nella distribuzione, e vanno installati separatamente.

Installazione di una base

Per installare la base si può utilizzare un CD. Sul sito di Debian ci sono istruzioni per trovare o creare CD di Debian.

È vantaggioso creare un Minimal CD , e installare via rete. Così si utilizzano pacchetti aggiornati all'ultimo minuto, e non si sprecano risorse, poiché vengono scaricati solo i pacchetti selezionati.

Durante l'installazione viene chiesto quale mirror utilizzare per mantenere aggiornati i pacchetti. All'indirizzo http://ftp.it.debian.org/ si trova una lista dei mirror italiani. È preferibile sceglierne uno all'interno della rete del proprio provider.

/etc/apt/sources.list

Debian si basa su un sistema di gestione dei pacchetti denominato apt . Nel file /etc/apt/sources.list apt memorizza i dati dei luoghi da cui scaricare i pacchetti aggiornati. Eccone un esempio:

deb http://ftp.it.debian.org/debian stable main contrib
non-free
deb http://ftp.it.debian.org/debian-non-US stable/non-US main
contrib non-free

La distribuzione si divide in tre rami: [http://www.it.debian.org/releases/]

Esiste un archivio separato non-US , in cui si trovano i pacchetti che contengono codice con crittografia forte, i cui server si trovano fuori dagli USA, per evitare problemi con le restrizioni sull'esportazione di tale software dagli Stati Uniti.

Un'ulteriore divisione prevede tre aree: main , contrib , non-free ; che si caratterizzano in base al tipo di licenza. Il software contenuto nell'area main utilizza licenza GPL o simile, ed è quindi propriamente software libero, mentre la sezione non-free contiene software che può essere distribuito liberamente, ma il cui utilizzo può comportare restrizioni in alcuni casi. L'area contrib contiene software che di per sé è libero, ma che per poter funzionare si appoggia ad altri componenti presenti nell'area non-free .

Installare e rimuovere con dselect

Dopo aver eseguito la prima installazione, e aver ottenuto un sistema funzionante, si possono aggiungere o rimuovere componenti a volontà.

dselect gestisce l'installazione dei pacchetti. Il metodo d'accesso utilizzato più comunemente è apt ; l'operazione di update va eseguita per aggiornare la lista dei pacchetti disponibili; quindi si procede con la selezione dei pacchetti da installare; infine si esegue l'installazione.

Dselect — schermata iniziale

Debian `dselect' package handling frontend.

 * 0. [A]ccess    Choose the access method to use.
           
   1. [U]pdate    Update list of available packages, if possible.
   2. [S]elect    Request which packages you want on your system.
   3. [I]nstall   Install and upgrade wanted packages.
   4. [C]onfig    Configure any packages that are unconfigured.
   5. [R]emove    Remove unwanted software.
   6. [Q]uit      Quit dselect.

Move around with ^P and ^N, cursor keys, initial letters, or
digits;
Press <enter> to confirm selection.   ^L redraws screen.

Version 1.10.20 (i386).
Copyright (C) 1994-1996 Ian Jackson.
Copyright (C) 2000,2001 Wichert Akkerman.
This is free software; see the GNU General Public Licence version 2
or later for copying conditions.  There is NO warranty.  See
dselect --licence for details.

dselect — schermata selezione

Nella schermata di selezione si vede una lista dei pacchetti, con una sintesi dello stato d'installazione e delle caratteristiche. Sulla sinistra compaiono quattro colonne EIOM che indicano rispettivamente:

E
eventuale presenza di errori
I
stato d'installazione attuale
O
stato d'installazione nel passato
M
stato richiesto

Gli stati d'installazione di solito assumono i seguenti valori:

*
installato [ installed ]
-
rimosso [ removed ]
_
non installato [ not installed ]

Un pacchetto non installato è completamente assente dal sistema, mentre di un pacchetto rimosso rimangono eventuali file di configurazione, che possono essere riutilizzati qualora lo si reinstalli.

dselect - inspection of package states (avail., priority)       verbose:v help:?
EIOM Pri Section  Package      Inst.ver    Avail.ver   Description
 *** Xtr sound    aumix        2.8-6       2.8-6       Simple text-based mixer c
    ------- Up-to-date Extra packages in section utils -------
 *** Xtr utils    fileutils    5.0.91-2    5.0.91-2    The GNU file management u
 *** Xtr utils    shellutils   5.0.91-2    5.0.91-2    The GNU shell programming
 *** Xtr utils    textutils    5.0.91-2    5.0.91-2    The GNU text file process
    --- Available packages (not currently installed) ---
    ----- Available Important packages -----
    ------- Available Important packages in section base -------
 --- Imp base     klogd        1.4.1-10    1.4.1-10    Kernel Logging Daemon    
 --- Imp base     sysklogd     1.4.1-10    1.4.1-10    System Logging Daemon
    ------- Available Important packages in section libs -------
  __ Imp libs     console-tool <none>      0.2.3-23.3  Shared libraries for Linu
  __ Imp libs     libsasl2-mod <none>      2.1.15-6    Pluggable Authentication
klogd        removed (configs remain) ;  remove (was: remove).  Important
klogd - Kernel Logging Daemon
The klogd daemon listens to kernel message sources and is responsible for
prioritizing and processing operating system messages.  The klogd daemon
can run as a client of syslogd or optionally as a standalone program.
Klogd can now be used to decode EIP addresses if it can determine a
System.map file.
description of klogd

Premendo il tasto + si richiede l'installazione [ install ] del pacchetto selezionato (compare il simbolo * nella colonna M ). Premendo il tasto - se ne richiede la rimozione [ remove ] (compare il simbolo - nella colonna M ).

Installare a linea di comando con apt

Debian è composta da parecchie migliaia di pacchetti, in continuo aumento. Nonostante la classificazione in sezioni, scorrerli tutti alla ricerca di qualcosa può risultare tedioso. Vengono in aiuto gli strumenti a linea di comando, che possono essere facilmente abbinati ai potenti metodi di ricerca sulle stringhe offerti dagli unix.

apt-cache search

Si può cercare una stringa all'interno delle descrizioni o i nomi dei pacchetti.

biso@atlas:~/presdist$ apt-cache search xkb
fookb-plainx - An Xkb state indicator -- plain X version.
fookb-wmaker - An Xkb state indicator -- WindowMaker version.
libxkbd0 - A compact window keyboard (Development files)
libxklavier7 - X Keyboard Extension high-level API
nonlock - Thai (and other) Keyboard swithcher using XKB
xbase-clients - miscellaneous X clients
xiterm+thai - x-terminal program with Thai languague support
xkbd - A compact window keyboard (Development files)
xkbd-dev - A compact window keyboard (Development files)
xlibs - X Window System client libraries metapackage and XKB data
xlibs-data - X Window System client data
xlibs-static-dev - X Window System client library development files
xxkb - Keyboard state indicator and switcher for xkb
keyboard-led-applet - GNOME keyboard LED applet
libxkbsel-dev - Tool for defining, selecting, and indicating XKB
keyboards.
xkbsel - Tool for defining, selecting, and indicating XKB
keyboards.
xkbsel-gnome - Tool for defining, selecting, and indicating XKB
keyboards.
biso@atlas:~/presdist$

apt-get update

Senza la necessità di lanciare dselect, è possibile aggiornare la lista dei pacchetti installabili.

1 atlas:~# apt-get update
Get:1 http://aptproxy sarge/main Packages
Get:2 http://aptproxy sarge/main Release [81B]
           
Get:3 http://aptproxy sarge/contrib Packages
           
Get:4 http://aptproxy sarge/contrib Release [84B]
           
Get:5 http://aptproxy sarge/non-free Packages
           
Get:6 http://aptproxy sarge/non-free Release [85B]
           
Hit http://aptproxy sarge/non-US/main Packages
           
Hit http://aptproxy sarge/non-US/main Release
           
Hit http://aptproxy sarge/non-US/contrib Packages
           
99% [Waiting for headers]
10.2kB/s 0s
.
.
.
Fetched 3100kB in 1m28s (34.9kB/s)
Reading Package Lists... Done
2 atlas:~#

apt-get install

Scelto il pacchetto che si desidera, può essere facilmente installato con una sola riga di comando. Oltre al pacchetto voluto verranno automaticamente selezionati e installati tutti i pacchetti da cui dipende, in modo da garantirne un corretto funzionamento.

2 atlas:~# apt-get install xkbsel
Reading Package Lists... Done
Building Dependency Tree... Done
The following NEW packages will be installed:
  xkbsel
0 upgraded, 1 newly installed, 0 to remove and 31 not upgraded.
Need to get 95.6kB of archives.
After unpacking 308kB of additional disk space will be used.
Get:1 http://aptproxy woody/main xkbsel 0.13-10 [95.6kB]
Fetched 95.6kB in 0s (277kB/s)
Selecting previously deselected package xkbsel.
(Reading database ... 65095 files and directories currently
installed.)
Unpacking xkbsel (from .../xkbsel_0.13-10_i386.deb) ...
Setting up xkbsel (0.13-10) ...

3 atlas:~#

apt-get upgrade

Analogamente si può eseguire l'upgrade di tutti i pacchetti per i quali esistono nuove versioni.

3 atlas:~# apt-get upgrade
Reading Package Lists... Done
Building Dependency Tree... Done
The following packages have been kept back:
  gnumeric nemesis
The following packages will be upgraded:
  dictionaries-common fontconfig gaim gdb gimageview gnumeric-doc
libatm1
  libdevmapper1.00 libeel2-2 libeel2-data libfontconfig1
libfontconfig1-dev
  libgtkglext1 libhtml-parser-perl libperl5.6 libxml2 libxslt1
libxslt1.1 lsof
  makedev man-db ntp ntp-doc ntp-server ntp-simple ntpdate portmap
ssh ucf
29 upgraded, 0 newly installed, 0 to remove and 2 not upgraded.
Need to get 15.4MB of archives.
After unpacking 2504kB of additional disk space will be used.
Do you want to continue? [Y/n]
Get:1 http://aptproxy sarge/main man-db 2.4.2-14 [576kB]
Get:2 http://aptproxy woody-proposed-updates/main libperl5.6
5.6.1-8.7 [348kB]
Get:3 http://aptproxy sarge/main makedev 2.3.1-66 [38.8kB]
Get:4 http://aptproxy sarge/main dictionaries-common 0.22.8 [145kB]
Get:5 http://aptproxy sarge/main gdb 6.1-1 [2528kB]
Get:6 http://aptproxy sarge/main lsof 4.71-1 [319kB]
.
.
.
Get:25 http://aptproxy sarge/main ntp 1:4.2.0a-8 [377kB]
           
Get:26 http://aptproxy sarge/main ntp-doc 1:4.2.0a-8 [870kB]
           
91% [26 ntp-doc 163364/870kB 18%]
44.1kB/s 29s


Fetched 15.4MB in 56s (273kB/s)
           
Preconfiguring packages ...
(Reading database ... 65125 files and directories currently
installed.)
Preparing to replace man-db 2.4.2-13 (using
.../man-db_2.4.2-14_i386.deb) ...
Unpacking replacement man-db ...
Preparing to replace libperl5.6 5.6.1-8.6 (using
.../libperl5.6_5.6.1-8.7_i386.deb) ...
Unpacking replacement libperl5.6 ...
Preparing to replace makedev 2.3.1-65 (using
.../makedev_2.3.1-66_all.deb) ...
Unpacking replacement makedev ...
Preparing to replace dictionaries-common 0.22.5 (using
.../dictionaries-common_0.22.8_all.deb) ...
remove/dictionaries-common: Ignoring emacsen flavour emacs
remove/dictionaries-common: Purging byte-compiled files for flavour
emacs21
Unpacking replacement dictionaries-common ...
Preparing to replace gdb 5.3-2 (using
.../archives/gdb_6.1-1_i386.deb) ...
Unpacking replacement gdb ...

Setting up ntp-server (4.2.0a-8) ...
Installing new version of config file /etc/init.d/ntp-server ...

Configuration file `/etc/ntp.conf'
 ==> Modified (by you or by a script) since installation.
 ==> Package distributor has shipped an updated version.
   What would you like to do about it ?  Your options are:
    Y or I  : install the package maintainer's version
    N or O  : keep your currently-installed version
      D     : show the differences between the versions
      Z     : background this process to examine the situation
 The default action is to keep your current version.
*** ntp.conf (Y/I/N/O/D/Z) [default=N] ?
Starting NTP server: ntpd.

Setting up ntp-simple (4.2.0a-8) ...

4 atlas:~#

dpkg; apt-cache: ottenere informazioni

dpkg --list

Uno strumento di livello più basso, dpkg , permette di eseguire molteplici operazioni. Per esempio si può rapidamente verificare lo stato d'installazione di uno o più pacchetti.

biso@atlas:~/presdist$ dpkg --list xkbsel
Desired=Unknown/Install/Remove/Purge/Hold
|
Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed
|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err:
uppercase=bad)
||/ Name           Version        Description
+++-==============-==============-============================================
ii  xkbsel         0.13-10        Tool for defining, selecting, and
indicating
biso@atlas:~/presdist$

apt-cache show

biso@atlas:~/presdist$ apt-cache show xkbsel
Package: xkbsel
Priority: optional
Section: x11
Installed-Size: 301
Maintainer: Milan Zamazal <pdm@debian.org>
Architecture: i386
Version: 0.13-10
Depends: xbase-clients, libc6 (>= 2.2.4-4), libxaw7 (>>
4.1.0), xlibs (>> 4.1.0)
Filename: pool/main/x/xkbsel/xkbsel_0.13-10_i386.deb
Size: 95596
MD5sum: 4de4b87e9307764ee20922ed327088f4
Description: Tool for defining, selecting, and indicating XKB
keyboards.
 xkbsel is a framework for defining, selecting, and indicating XKB
keyboard
 mappings, without the need to modify X11 distribution in any way.
 .
 This package contains the xkbsel basic files and binaries,
including the
 Athena keyboard switching applet.
 .
 Homepage: http://www.penguin.cz/~stano/sk/xkbsel.html

biso@atlas:~/presdist$

dpkg --listfiles

Dato il nome di un pacchetto, è possibile verificare tutti i file che esso installa nel sistema.

biso@atlas:~/presdist$ dpkg --listfiles xkbsel
/.
/usr
/usr/lib
/usr/lib/menu
/usr/lib/menu/xkbsel
/usr/share
/usr/share/man
/usr/share/man/man5
/usr/share/man/man5/xkbsel.5.gz
/usr/share/man/man1
/usr/share/man/man1/xkbsel.1.gz
/usr/share/man/man1/xkbsel-aw.1.gz
/usr/share/man/man1/xkbseldb.1.gz
/usr/share/xkbsel
/usr/share/xkbsel/compat
/usr/share/xkbsel/compat/group_led
/usr/share/xkbsel/keymap
/usr/share/xkbsel/keymap/cssk
/usr/share/xkbsel/symbols
/usr/share/xkbsel/symbols/cssk_dual
/usr/share/xkbsel/symbols/cssk_ibm
/usr/share/locale
/usr/share/locale/sk
/usr/share/locale/sk/LC_MESSAGES
/usr/share/locale/sk/LC_MESSAGES/xkbsel.mo
/usr/share/doc
/usr/share/doc/xkbsel
/usr/share/doc/xkbsel/protocol.txt.gz
/usr/share/doc/xkbsel/ABOUT-NLS.gz
/usr/share/doc/xkbsel/copyright
/usr/share/doc/xkbsel/AUTHORS
/usr/share/doc/xkbsel/TODO
/usr/share/doc/xkbsel/README
/usr/share/doc/xkbsel/NEWS
/usr/share/doc/xkbsel/changelog.Debian.gz
/usr/bin
/usr/bin/xkbseldb
/usr/bin/xkbsel
/usr/bin/xkbsel-aw
/var
/var/lib
/var/lib/xkbsel
/var/lib/xkbsel/compiled
/etc
/etc/xkbsel
/etc/xkbsel/xkbsel.conf

biso@atlas:~/presdist$

dpkg --search

Dato il nome di un file, è possibile risalire a ritroso al pacchetto da cui è stato installato.

biso@atlas:~/presdist$ type ls
ls is aliased to `ls --color=auto'
biso@atlas:~/presdist$ type -P ls
/bin/ls
biso@atlas:~/presdist$ dpkg --search /bin/ls
coreutils: /bin/ls

Quindi si possono ottenere informazioni sullo stato d'installazione del pacchetto.

biso@atlas:~/presdist$ dpkg --list coreutils
Desired=Unknown/Install/Remove/Purge/Hold
|
Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed
|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err:
uppercase=bad)
||/ Name           Version        Description
+++-==============-==============-============================================
ii  coreutils      5.0.91-2       The GNU core utilities
biso@atlas:~/presdist$

Inoltre è semplice risalire alla descrizione completa e alle dipendenze, comprendendo completamente come il file che avevamo individuato si integra nel sistema.

biso@atlas:~/presdist$ apt-cache show coreutils
Package: coreutils
Essential: yes
Priority: required
Section: base
Installed-Size: 6732
Maintainer: Michael Stone <mstone@debian.org>
Architecture: i386
Version: 5.0.91-2
Replaces: textutils, shellutils, fileutils, stat, debianutils
(<= 2.3.1)
Provides: textutils, shellutils, fileutils
Pre-Depends: libacl1 (>= 2.2.11-1), libattr1 (>= 2.4.4-1),
libc6 (>= 2.3.2-1)
Conflicts: stat
Filename: pool/main/c/coreutils/coreutils_5.0.91-2_i386.deb
Size: 2441244
MD5sum: abff427c3109ea078bd21a8d61a95070
Description: The GNU core utilities
 This package contains the essential basic system utilities.
 .
 Specifically, this package includes:
 basename cat chgrp chmod chown chroot cksum comm cp csplit cut
date dd df dir
 dircolors dirname du echo env expand expr factor false fmt fold
groups head
 hostid id install join link ln logname ls md5sum mkdir mkfifo
mknod mv nice nl
 nohup od paste pathchk pinky pr printenv printf ptx pwd readlink
rm rmdir
 sha1sum seq shred sleep sort split stat stty sum sync tac tail tee
test touch
 tr true tsort tty uname unexpand uniq unlink users vdir wc who
whoami yes

biso@atlas:~/presdist$

apt-proxy: salvare banda

Capita spesso di voler installare su più computer, o reinstallare più volte gli stessi pacchetti. Sarebbe uno spreco abominevole scaricarli ogni volta da Internet, si tratta di download che complessivamente si aggirano sul gigabyte di dati. Una scelta intelligente consiste nell'installare subito su un computer il pacchetto apt-proxy . apt-proxy va configurato modificando il file /etc/apt-proxy/apt-proxy.conf . Eccone un esempio:

# Configuration for apt-proxy

APT_PROXY_CACHE=/var/cache/apt-proxy

add_backend /debian/                                    $APT_PROXY_CACHE/debian/                        +http://ftp.bononia.it/debian/                  http://debian.nettuno.it/debian/

add_backend /debian-non-US/                             $APT_PROXY_CACHE/non-US/                        +http://ftp.bononia.it/debian-non-US/           http://debian.nettuno.it/debian-non-US/

add_backend /security/                                  $APT_PROXY_CACHE/security/                      +http://security.debian.org/debian-security/    http://non-us.debian.org/debian-security/

CLEANUP_DAYS=14
MAX_VERSIONS=2
BACKEND_FREQ=240
RSYNC_TIMEOUT=30
WGET_TIMEOUT=30

Collateralmente sarà in seguito facile eseguire un backup di /var/cache/apt-proxy/ , ottenendo così un proprio archivio personalizzato di Debian, contenente soltanto i pacchetti generalmente utilizzati.

Dopo l'avvio di apt-proxy, bisognerà opportunamente modificare /etc/apt/sources.list in modo da cercare i pacchetti da installare sul proprio proxy invece che su Internet. In una rete locale dove il server che agisce da proxy abbia hostname aptproxy , la risultante lista potrebbe apparire come la seguente:

deb http://aptproxy:9999/debian/ sarge main contrib non-free
deb http://aptproxy:9999/debian-non-US/ sarge/non-US main contrib
non-free

stable, testing, sid: stabilità o aggiornamento

La versione stabile di Debian — il cui nome proprio attuale è woody — di solito viene aggiornata solo quando vengono scovati bug o vulnerabilità da eliminare, quindi il software in essa contenuto tende a una naturale obsolescenza.

Testing — ovvero sarge — nonostante il nome poco rassicurante, può essere considerata stabile quanto la media del software in circolazione, ed è adatta per un uso quotidiano. Talvolta però si percepisce un vuoto troppo grande tra il vecchio software della stable e le versioni in rapido sviluppo presenti in testing. Ciò causa alcuni svantaggi da tenere in considerazione:

binari o sorgenti: praticità o flessibilità

Debian è sostanzialmente una distribuzione composta da binari precompilati. Capita spesso di aver bisogno di un programma per svolgere un determinato compito. Grazie a Internet, ad apt-cache search e apt-get install, usare un nuovo programma di cui nemmeno si immaginava l'esistenza, aggiornato all'ultimissima versione da un manutentore chissadove nel mondo, spesso è più semplice e rapido che bere un caffè. Favoloso! Questo è probabilmente uno dei maggiori punti di forza di Debian, dotata di oltre diecimila pacchetti, eccezion fatta per quei casi particolari come java, di cui già si era accennato.

Anche se nella stragrande maggioranza dei casi le opzioni scelte dai manutentori del pacchetto ci soddisfano, il software libero non sarebbe degno di tale nome se non potessimo personalizzare quando serve. Compilare dai sorgenti richiede certamente molto più tempo e pazienza, e quando il programma dev'essere integrato in una distribuzione mediamente complicata come Debian, può esserci un sovraccarico di lavoro.

automatico o manuale: due modi diversi per complicarsi la vita

Alcune installazioni sono pensate per inserire il CD nel computer, riavviare, premere N volte <Invio> , eseguire un balletto propiziatorio intorno alla sedia, e avere un sistema funzionante — si spera! Debian non è una di queste, anche se lo sono alcune derivate, come Knoppix. Alcuni automatismi sono presenti, ma talvolta il sistema d'installazione pone domande che richiedono una conoscenza almeno sommaria del funzionamento interno. Si gode di questa scelta non estremista quando bisogna personalizzare, o se qualcosa non funziona, in quanto gli script sono ancora abbastanza umanamente comprensibili da poterli capire e modificare in tempi ragionevoli.

Per tutto il resto...

http://www.it.debian.org/
Buon divertimento!