Debian -->
[ document manifest ]
<< previous TOC next >>
< ^ >

Manuale di Debian Live

Utente

8. Personalizzare l'installazione dei pacchetti

Probabilmente la personalizzazione basilare di un sistema Debian Live è la scelta dei pacchetti da includere nell'immagine. Questo capitolo vi guiderà tra le varie opzioni in fase di costruzione per personalizzare l'installazione dei pacchetti di live-build. Le ampie scelte che influenzano quali pacchetti siano disponibili da installare nell'immagine sono le aree di distribuzione e archivio. Per essere sicuri di avere una ragionevole velocità di scaricamento, dovreste usare un mirror a voi vicino. Si possono inoltre aggiungere i propri repository per pacchetti di backport, sperimentali o personalizzati, o aggiungere i pacchetti direttamente come file. È possibile definire una propria lista di pacchetti da includere, usarne una predefinita di live-build, usare task di tasksel, o una combinazione di tutti e tre. Infine una serie di opzioni fornisce un certo controllo su apt, o aptitude se si preferisce, in fase di compilazione quando i pacchetti sono installati. Ciò può tornare utile se si usa un proxy, se si vuole disabilitare l'installazione dei pacchetti raccomandati per risparmiare spazio o controllare quali versioni dei pacchetti vengono installate con il pinning, giusto per citare alcune possibilità.

8.1 Sorgenti dei pacchetti

8.1.1 Distribuzione, le aree di archivio e le modalità

La distribuzione che viene scelta ha un ampio impatto su quali pacchetti siano disponibili per essere inclusi nell'immagine live. Specificare il nome in codice, il predefinito per la versione Wheezy di live-build è wheezy; qualsiasi attuale distribuzione mantenuta negli archivi Debian può essere qui specificata con il suo nome in codice. (Per ulteriori dettagli consultare il Glossario). L'opzione --distribution non solo influenza la sorgente dei pacchetti nell'archivio, ma indica a live-build di comportarsi secondo la necessità per compilare ciascuna distribuzione supportata. Ad esempio se si vuole costruire un rilascio *unstable*, Sid, specificare:

$ lb config --distribution sid

All'interno dell'archivio dei pacchetti, le aree sono le principali divisioni dello stesso. In Debian queste sono main, contrib e non-free; soltanto main contiene il software che è parte di Debian, perciò questa è la predefinita. Possono essere specificati uno o più valori:

$ lb config --archive-areas "main contrib"

Attraverso l'opzione --mode è disponibile un supporto sperimentale per alcune derivate di Debian; per impostazione predefinita, questa opzione è impostata su debian, anche se si sta costruendo un sistema diverso da Debian. Se si specifica --mode ubuntu o --mode emdebian, saranno gestiti i nomi della distribuzione e le aree di archivio per la derivata specificata e non quelli di Debian. La modalità cambia anche il comportamento di live-build per adattarlo alle derivate.

Nota: i progetti per i quali sono state aggiunte tali modalità sono i principali responsabili nel supportare gli utenti di queste opzioni. Il progetto Debian Live, a sua volta, fornisce sostegno allo sviluppo solamente sulla base dell'impegno migliore, sui feedback dei progetti derivati così come non sviluppiamo o sosteniamo queste derivate.

8.1.2 Mirror delle distribuzioni

The Debian archive is replicated across a large network of mirrors around the world so that people in each region can choose a nearby mirror for best download speed. Each of the --parent-mirror-* options governs which distribution mirror is used at various stages of the build. Recall from Stages of the build that the *bootstrap* stage is when the chroot is initially populated by debootstrap with a minimal system, and the *chroot* stage is when the chroot used to construct the live system's filesystem is built. Thus, the corresponding mirror switches are used for those stages, and later, in the *binary* stage, the --parent-mirror-binary and --parent-mirror-binary-security values are used, superceding any mirrors used in an earlier stage.

8.1.3 Mirror delle distribuzioni usati in fase di compilazione

To set the distribution mirrors used at build time to point at a local mirror, it is sufficient to set --parent-mirror-bootstrap, --parent-mirror-chroot-security and --parent-mirror-chroot-backports as follows.

$ lb config --parent-mirror-bootstrap http://localhost/debian/ \
             --parent-mirror-chroot-security http://localhost/debian-security/ \
      --parent-mirror-chroot-backports http://localhost/debian-backports/

The chroot mirror, specified by --parent-mirror-chroot, defaults to the --parent-mirror-bootstrap value.

8.1.4 Mirror delle distribuzioni usate durante l'esecuzione

The --parent-mirror-binary* options govern the distribution mirrors placed in the binary image. These may be used to install additional packages while running the live system. The defaults employ cdn.debian.net, a service that chooses a geographically close mirror based on the user's IP number. This is a suitable choice when you cannot predict which mirror will be best for all of your users. Or you may specify your own values as shown in the example below. An image built from this configuration would only be suitable for users on a network where "mirror" is reachable.

$ lb config --parent-mirror-binary http://mirror/debian/ \
             --parent-mirror-binary-security http://mirror/debian-security/

8.1.5 Repository addizionali

You may add more repositories, broadening your package choices beyond what is available in your target distribution. These may be, for example, for backports, experimental or custom packages. To configure additional repositories, create config/archives/your-repository.list.chroot, and/or config/archives/your-repository.list.binary files. As with the --parent-mirror-* options, these govern the repositories used in the *chroot* stage when building the image, and in the *binary* stage, i.e. for use when running the live system.

For example, config/archives/live.list.chroot allows you to install packages from the debian live snapshot repository at live system build time.

deb http://live.debian.net/ sid-snapshots main contrib non-free

If you add the same line to config/archives/live.list.binary, the repository will be added to your live system's /etc/apt/sources.list.d/ directory.

Se il file esiste, saranno prelevati automaticamente.

You should also put the GPG key used to sign the repository into config/archives/your-repository.gpg.{binary,chroot} files.

Note: some preconfigured package repositories are available for easy selection through the --archives option, e.g. for enabling live snapshots, a simple command is enough to enable it:

$ lb config --archives live.debian.net

8.2 Scegliere i pacchetti da installare

There are a number of ways to choose which packages live-build will install in your image, covering a variety of different needs. You can simply name individual packages to install in a package list. You can also choose predefined lists of packages, or use APT tasks. And finally, you may place package files in your config/ tree, which is well suited to testing of new or experimental packages before they are available from a repository.

8.2.1 Elenchi di pacchetti

Gli elenchi di pacchetti sono un potente mezzo per esprimere quali pacchetti devono essere installati. La sintassi gestisce file inclusi e sezioni condizionali rendendo semplice la creazione di elenchi da altri elenchi e adattarli per l'uso in molteplici configurazioni. Si può usare un elenco predefinito fornendo una selezione modulare dei pacchetti da ciascuno dei principali ambienti desktop e alcuni elenchi per uso speciale, così come elenchi standard sui quali vi si basano altri. È inoltre possibile fornire i propri elenchi o usare una combinazione di entrambi.

Note: The behaviour of live-build when specifying a package that does not exist is determined by your choice of APT utility. See Choosing apt or aptitude for more details.

8.2.2 Elenchi predefiniti di pacchetti

The simplest way to use lists is to specify one or more predefined lists with the --package-lists option. For example:

$ lb config --package-lists "gnome rescue"

The default location for the list files on your system is /usr/share/live/build/package-lists/. To determine the packages in a given list, read the corresponding file, paying attention to included files and conditionals as described in the following sections.

8.2.3 Elenchi locali dei pacchetti

You may supplement the predefined lists using local package lists stored in config/package-lists/.

Package lists that exist in this directory need to have a .list suffix in order to be processed, and then an additional stage suffix, .chroot or .binary to indicate which stage the list is for.

Note: If you don't specify the stage suffix, the list will be used for both stages. Normally, you want to specify .list.chroot so that the packages will only be installed in the live filesystem and not have an extra copy of the .deb placed on the media.

8.2.4 Elenchi locali di pacchetti binari

To make a binary stage list, place a file suffixed with .list.binary in config/package-lists/. These packages are not installed in the live filesystem, but are included on the live media under pool/. You would typically use such a list with one of the non-live installer variants. As mentioned above, if you want this list to be the same as your chroot stage list, simply use the .list suffix by itself.

8.2.5 Estendere un'elenco di pacchetti usando gli include

The package lists that are included with live-build make extensive use of includes. Refer to these in the /usr/share/live/build/package-lists/ directory, as they serve as good examples of how to write your own lists.

For example, to make a list that includes the predefined gnome list plus iceweasel, create config/package-lists/my.list.chroot with the following contents:

#include <gnome>
iceweasel

8.2.6 Usare condizioni all'interno degli elenchi di pacchetti

Ognuna delle variabili di configurazione di live-build situate in config/* (senza il prefisso LB_) possono essere utilizzate per istruzioni condizionali nell'elenco dei pacchetti. In genere questo significa qualsiasi opzione di lb config in maiuscolo e con trattini cambiati in trattini bassi; ma in pratica è la sola ad influenzare la selezione dei pacchetti che abbia senso, come DISTRIBUTION, ARCHITECTURE o ARCHIVE_AREAS.

Per esempio, per installare ia32-libs se è specificata --architecture amd64:

#if ARCHITECTURE amd64
ia32-libs
#endif

Si può verificare per ognuna di una serie di valori, ad esempio per installare memtest86+ specificando sia --architecture i386 sia --architecture amd64:

#if ARCHITECTURE i386 amd64
memtest86+
#endif

È possibile provare altre variabili che contengano più di un valore, ad esempio per installare vrms specificando sia da contrib sia da non-free tramite --archive-areas:

#if ARCHIVE_AREAS contrib non-free
vrms
#endif

Una condizione può coinvolegere una direttiva #include:

#if ARCHITECTURE amd64
#include
#endif

Le condizioni nidificate non sono supportate.

8.2.7 Task

The Debian Installer offers the user choices of a number of preselected lists of packages, each one focused on a particular kind of system, or task a system may be used for, such as "Graphical desktop environment", "Mail server" or "Laptop". These lists are called "tasks" and are supported by APT through the "Task:" field. You can specify one or more tasks in live-build by putting them in a list in config/task-lists/, as in the example below.

$ lb config
$ echo "mail-server file-server" >> config/task-lists/my.list.chroot

I task principali disponibili nell'installatore Debian possono essere elencati nel sistema live con tasksel --list-tasks. I contenuti di ogni task, inclusi quelli non inclusi in questo elenco, possono essere esaminati con tasksel --task-packages.

8.2.8 Task per desktop e lingua

Desktop and language tasks are special cases that need some extra planning and configuration. Live images are different from Debian Installer images in this respect. In the Debian Installer, if the medium was prepared for a particular desktop environment flavour, the corresponding task will be automatically installed. Thus, there are internal gnome-desktop, kde-desktop, lxde-desktop and xfce-desktop tasks, none of which are offered in tasksel's menu. Likewise, there are no menu entries for tasks for languages, but the user's language choice during the install influences the selection of corresponding language tasks.

When developing a desktop live image, the image typically boots directly to a working desktop, the choices of both desktop and default language having been made at build time, not at run time as in the case of the Debian Installer. That's not to say that a live image couldn't be built to support multiple desktops or multiple languages and offer the user a choice, but that is not live-build' s default behaviour.

Because there is no provision made automatically for language tasks, which include such things as language-specific fonts and input-method packages, if you want them, you need to specify them in your configuration. For example, a GNOME desktop image containing support for Japanese might include these tasks:

$ lb config
$ echo "gnome-desktop desktop standard laptop" >> config/task-lists/my.list.chroot
$ echo "japanese japanese-desktop japanese-gnome-desktop" >> config/task-lists/my.list.chroot

Since desktop tasks are "internal" tasks, for every desktop flavour task included in the image, the corresponding value, if it differs from the default, "gnome", must be preseeded in the "tasksel/desktop" debconf variable or else tasksel will not recognize and install it. Thus:

$ lb config
$ echo 'tasksel tasksel/desktop multiselect kde' >> config/preseed/my.preseed.chroot

This parameter can take multiple values, e.g. "lxde xfce" instead of "kde".

8.3 Installare pacchetti modificati o di terze parti

Nonostante sia contro la filosofia di Debian Live, a volte può essere necessario creare un sistema live con versioni modificate dei pacchetti nel repository Debian. Questo per modificare o gestire funzionalità aggiuntive, lingue e marchi, o anche rimuovere elementi non desiderati da pacchetti esistenti. Allo stesso modo, i pacchetti di "terze parti" possono essere utilizzati per aggiungere funzionalità proprietarie o su misura.

Questa sezione non tratta la compilazione e il mantenimento di pacchetti modificati. Può comunque essere interessante leggere "How to fork privately" di Joachim Breitner: ‹http://www.joachim-breitner.de/blog/archives/282-How-to-fork-privately.html› La creazione di pacchetti su misura è esposta nella "Guida per il nuovo Maintainer" all'indirizzo ‹http://www.debian.org/doc/maint-guide/› e altrove.

Ci sono due modi per installare pacchetti personalizzati:

  • packages.chroot
  • Utilizzare repository APT personalizzati
  • Using packages.chroot is simpler to achieve and useful for "one-off" customizations but has a number of drawbacks, whilst using a custom APT repository is more time-consuming to set up.

    8.3.1 Using packages.chroot to install custom packages

    To install a custom package, simply copy it to the config/packages.chroot/ directory. Packages that are inside this directory will be automatically installed into the live system during build - you do not need to specify them elsewhere.

    I pacchetti devono essere nominati nel modo prescritto, un metodo semplice per farlo è usare dpkg-name.

    Using packages.chroot for installation of custom packages has disadvantages:

  • non è possibile usare secure APT
  • You must install all appropriate packages in the config/packages.chroot/ directory.
  • non si presta a salvare le configurazioni di Debian Live nel controllo di versione.
  • 8.3.2 Utilizzare un repository APT per installare pacchetti personalizzati

    Unlike using packages.chroot, when using a custom APT repository you must ensure that you specify the packages elsewhere. See Choosing packages to install for details.

    Sebbene creare un repository APT possa sembrare uno sforzo inutile, l'infrastruttura può facilmente essere riutilizzata in un secondo momento per offrire aggiornamenti dei pacchetti modificati.

    8.3.3 Pacchetti personalizzati e APT

    live-build utilizza APT per installare tutti i pacchetti nel sistema live in modo da ereditare i comportamenti di questo programma. Un esempio rilevante è che (considerando una configurazione predefinita) dato un pacchetto disponibile in due repository differenti con numeri di versione diversi, APT sceglie di installare quello con il numero di versione più alto.

    A causa di questo si può voler incrementare il numero della versione nei file debian/changelog dei pacchetti personalizzati per accertare che la propria versione avrà la precedenza sui repository Debian ufficiali. È anche ottenibile modificando le preferenze del APT pinning del sistema live, si veda APT pinning per maggiori informazioni.

    8.4 Configurare APT in fase di costruzione

    You can configure APT through a number of options applied only at build time. (APT configuration used in the running live system may be configured in the normal way for live system contents, that is, by including the appropriate configurations through config/includes.chroot/.) For a complete list, look for options starting with apt in the lb_config man page.

    8.4.1 Scegliere apt o aptitude

    Per installare pacchetti in fase di compilazione si può optare sia per apt sia per aptitude, l'argomento --apt di lb config determina quale usare. Sceglie il metodo implementando il comportamento preferito per l'installazione dei pacchetti, la notevole differenza è come vengono gestiti quelli mancanti.

  • apt: se viene specificato un pacchetto mancante, l'installazione avrà esito negativo; questo è l'impostazine predefinita.
  • aptitude: se viene specificato un pacchetto mancante, l'installazione avrà successo.
  • 8.4.2 Utilizzare un proxy con APT

    Una configurazione di APT spesso richiesta è di amministrare la creazione di un'immagine dietro un proxy, lo si può specificare con le opzioni --apt-ftp-proxy o --apt-http-proxy secondo necessità:

    $ lb config --apt-http-proxy http://proxy/

    8.4.3 Modificare APT per risparmiare spazio

    Si può aver bisogno di risparmiare dello spazio sul supporto dell'immagine, in tal caso una o entrambe delle seguenti opzioni possono essere d'interesse.

    È possibile non includere gli indici di APT con:

    $ lb config --apt-indices false

    Questo non influenzerà le voci in /etc/apt/sources.list, determina solo se /var/lib/apt contiene o meno i file degli indici. Il compromesso è che APT necessita di quegli indici per operar enel sistema live, perciò prima di eseguire apt-cache search o apt-get install, per esempio, l'utente deve usare prima apt-get update per crearli.

    In caso si trovi che l'installazione dei pacchetti raccomandati appesantisca troppo l'immagine, si può disabilitare l'opzione predefinita di APT con:

    $ lb config --apt-recommends false

    Qui il compromesso è dato dal fatto che se non si installano i raccomandati per un certo pacchetto, ovvero "pacchetti che si trovano assieme a questo eccetto in installazioni non usuali" (Debian Policy Manual, paragrafo 7.2), saranno omessi alcuni di quelli realmente necessari. Si suggerisce pertanto di verificare la differenza ottenuta nel proprio elenco di pacchetti disabilitando i raccomandati (vedere il file binary.packages generato da lb build) e includere nuovamente in esso quelli omessi che si desiderano installare. In alternativa, se si desidera lasciare un modesto numero di raccomandati, li si lasci abilitati e si assegni ad APT un pin di priorità negativo sui pacchetti selezionati affinché non vengano installati, come spiegato in APT pinning.

    8.4.4 Passare opzioni ad apt o aptitude

    Se non c'è un'opzione di lb config per modificare il comportamento di APT nel modo desiderato, si usi --apt-options o --aptitude-options per passare opzioni tramite il proprio strumento APT. Consultare il manuale di apt e aptitude per i dettagli.

    8.4.5 APT pinning

    For background, please first read the apt_preferences(5) man page. APT pinning can be configured either for build time, or else for run time. For the former, create config/chroot_apt/preferences. For the latter, create config/includes.chroot/etc/apt/preferences.

    Nell'ipotesi di creare un sistema live Wheezy e avendo la necessità di installare da Sid tutti i pacchetti live destinati all'immagine binaria questa fase, bisogna aggiungere Sid alle fonti di APT e farne il pinning affinché verranno installati da lì solo i pacchetti voluti, mentre per tutti gli altri si attingerà dalla distribuzione principale, Wheezy. Quanto segue servirà allo scopo:

    $ echo "deb http://mirror/debian sid main" > config/archives/sid.list.chroot
    $ cat >> config/chroot_apt/preferences < Package: live-boot live-boot-initramfs-tools live-config live-config-sysvinit
    Pin: release n=sid
    Pin-Priority: 600

    Package: *
    Pin: release n=sid
    Pin-Priority: 1
    END

    Nota: con la versione 0.8.14 o superiore di Apt si possono utilizzare wildcard nei nomi dei pacchetti (Package: live-*). Ciò significa che funziona con Wheezy usando:

    $ lb config --distribution wheezy

    Negative pin priorities will prevent a package from being installed, as in the case where you do not want a package that is recommended by another package. Suppose you are building an LXDE image using --package-lists lxde option, but don't want the user prompted to store wifi passwords in the keyring. This list includes gdm, which depends on gksu, which in turn recommends gnome-keyring. So you want to omit the recommended gnome-keyring package. This can be done by adding the following stanza to config/chroot_apt/preferences:

    Package: gnome-keyring
    Pin: version *
    Pin-Priority: -1


    [ document manifest ]
    << previous TOC next >>
    < ^ >