La personalització més bàsica d'un sistema Debian viu pot ser la selecció dels paquets que seran inclosos en la imatge. Aquest capítol explica les diverses opcions de live-build per personalitzar la instaŀlació de paquets durant la construcció. Les opcions més importants que influeixen en els paquets que estan disponibles per ser instaŀlats en la imatge són les àrees de distribució i el arxiu. Per garantir velocitats de descàrrega decents, s'ha de triar un mirall de distribució proper. També es pot incloure repositoris de backports, paquets experimentals o personalitzats, o incloure paquets directament com si fossin fitxers. Es poden definir llistes pròpies de paquets, utilitzar llistes predefinides, utilitzar tasques de tasksel, o una combinació d'aquests tres mètodes. Finalment, una sèrie d'opcions donen un cert control sobre apt o si es prefereix aptitude, quan s'instaŀlen els paquets durant la construcció. Això pot ser útil si s'utilitza un proxy, es vol desactivar la instaŀlació de paquets recomanats per estalviar espai, o hi ha la necessitat de controlar quines versions dels paquets s'instaŀlen mitjançant la tècnica pinning d'APT, per nomenar algunes possibilitats.
La distribució que es tria té una gran importància en els paquets que estan disponibles per incloure en una imatge en viu. Només cal especificar el nom en clau, que per defecte és wheezy per a la versió wheezy de live-build. Qualsevol distribució disponible a l'arxiu de Debian pot ser especificada pel seu nom en clau aquí. (Veure Termes per més detalls.) L'opció --distribution no només influeix en l'origen dels paquets dins l'arxiu, sinó que també instrueix a live-build per comportar-se segons sigui necessari per a construir cada distribució compatible. Per exemple, per construir la distribució unstable, sid, s'ha d'especificar:
$ lb config --distribution sid
A l'arxiu de la distribució, les àrees d'arxiu són les divisions principals de l'arxiu. A Debian, es tracta de main, contrib i non-free. Només main conté el programari que és part de la distribució Debian, pel que és el valor per defecte. Un o més valors es poden especificar, per exemple:
$ lb config --archive-areas "main contrib"
És dona suport experimental a alguns derivats de Debian a través de l'opció --mode. Per defecte, aquesta opció està establerta en debian, tot i que se estigui construint en un sistema que no sigui Debian. Si s'especifica --mode ubuntu o --mode emdebian, s'utilitzen els noms de distribució i les àrees dels arxius dels derivats especificats en lloc dels de Debian. El «mode» també modifica el comportament de live-build per adaptar-lo als derivats.
Nota: Els projectes per als quals aquests modes s'han afegit són els principals responsables de donar suport als usuaris d'aquestes opcions. El projecte Debian Live, al seu torn, dona suport de desenvolupament només sobre una base de millor esforç, basada en les informacions proporcionades pels projectes derivats ja que nosaltres no desenvolupem ni donem suport a aquests derivats.
L'arxiu de Debian es replica a través d'una àmplia xarxa de miralls a tot el món perquè la gent en cada regió pugui triar un mirall proper amb la millor velocitat de descàrrega. Cadascuna de les opcions --mirror-* governa quin mirall de distribució s'utilitzara en les diverses etapes de la construcció. Recordar de Etapes de la construcció que l'etapa bootstrap es quan el chroot s'omple inicialment per debootstrap amb un sistema mínim i l'etapa chroot és quan s'utilitza el chroot per a la construcció de sistema d'fitxers del sistema en viu. D'aquesta manera, s'utilitzan els miralls corresponents per a aquestes etapes, i més tard, durant l'etapa binary s'utilitzan els valors --mirror-binary i --mirror-binary-security substituint qualsevol mirall utilitzat en una etapa anterior.
Per establir els miralls de la distrubució utilitzats en temps de construcció perquè apuntin a una rèplica local, és suficient establir --mirror-bootstrap, --mirror-chroot-security i --mirror-chroot-backports de la manera següent.
$ lb config --mirror-bootstrap http://localhost/debian/ \
--mirror-chroot-security http://localhost/debian-security/ \
--mirror-chroot-backports http://localhost/debian-backports/
El mirall per al chroot, especificat per l'opció --mirror-chroot, per defecte pren el mateix valor que --mirror-bootstrap
Les opcions --mirror-binary* governen els miralls de distribució coŀlocats a la imatge binària. Aquestes poden ser utilitzades per instaŀlar paquets addicionals mentre s'executa el sistema en viu. Els valors per defecte utilitzan cdn.debian.net, un servei que tria un mirall geogràficament a prop en funció del número IP de l'usuari. Aquesta és una opció adequada quan no es pot predir quin serà el millor mirall per tots els usuaris. O es pot especificar els valors propis com es mostra en l'exemple següent. Una imatge construïda a partir d'aquesta configuració només seria convenient per als usuaris en una xarxa on "mirror" és abastable.
$ lb config --mirror-binary http://mirror/debian/ \
--mirror-binary-security http://mirror/debian-security/
És possible afegir més repositoris, ampliant les opcions de paquets més enllà dels disponibles en la pròpia distribució de destinació. Aquests poden ser, per exemple, per backports, experimentals o paquets personalitzats. Per configurar repositoris addicionals, crear els fitxers config/archives/your-repository.list.chroot, i/o config/archives/your-repository.list.binary. Igual que amb les opcions --mirror-* aquest regeix els repositoris utilitzats en l'étapa chroot durant la construcció de la imatge, i a l'étapa binary, és a dir, per ser utilitzades quan s'executa el sistema en viu.
Per exemple, config/archives/live.list.chroot permet d'instaŀlar paquets des del repositori de instantànies de debian live en el moment de creació del sistema viu.
deb http://live.debian.net/ sid-snapshots main contrib non-free
Si s'afegeix la mateixa línia a config/archives/live.list.binary, el repositori sera afegit al directori /etc/apt/sources.list.d/ del sistema viu.
Si aquests fitxers existeixen, seran utilitzats de forma automàtica.
També s'ha de posar la clau GPG utilitzada per signar el repositori en fitxers config/archives/your-repository.key.{binary,chroot}.
Nota: alguns repositoris preconfigurats de paquets estan disponibles per facilitar la selecció a través de l'opció --archives, per exemple, per habilitar instantànies en viu, una ordre simple és suficient per activar-ho:
$ lb config --archives live.debian.net
Hi ha una sèrie de formes de triar els paquets que live-build instaŀlarà en la imatge, que abasta una varietat de necessitats diferents. Es pot simplement anomenar paquets individualment per instaŀlar en una llista de paquets. També es pot optar per llistes predefinides de paquets, o utilitzar les tasques d'APT. I, finalment, es poden coŀlocar paquets com si fossin fitxers dins del arbre config/, que és un mètode que s'adapta perfectament a fer proves amb paquets nous o experimentals abans de afegirlos a un repositori.
Les llistes de paquets són una forma eficaç d'expressar quins paquets han de ser instaŀlats. La sintaxi de la llista suporta els fitxers inclosos i seccions condicionals que fa que sigui fàcil de construir llistes a partir d'altres llistes i adaptar-ler per al propi ús en múltiples configuracions. Es poden utilitzar llistes predefinides de paquets, proporcionant una selecció de paquets de forma modular de cada un dels principals entorns d'escriptori i algunes llistes per a fins especials, així com llistes estàndard a partir de les que es basen altres. També es pot proporcionar llistes pròpies de paquets, o utilitzar una combinació d'ambdós.
Nota: El comportament de live-build a l'hora d'especificar un paquet que no existeix està determinat per la elecció que es faci de l'eina APT. Veure Elegir apt or aptitude per més detalls.
La forma més senzilla d'utilitzar les llistes consisteix a especificar una o més llistes predefinides amb l'opció --package-lists. Per exemple:
$ lb config --package-lists "gnome rescue"
La ubicació per defecte de les llistes en el sistema és /usr/share/live/build/package-lists/. Per determinar els paquets en una llista donada, llegir el fitxer corresponent, prestant atenció als fitxers inclosos i els condicionals com es descriu a les següents seccions.
Es poden completar les llistes predefinides mitjançant les llistes locals de paquets emmagatzemades a config/package-lists/.
Les llistes de paquets que es troben en aquest directori han de tenir el sufix .list per ser processades, i a més a més un sufix d'etapa adicional .chroot o .binary per indicar per a quina etapa és la llista.
Nota: Si no s'especifica el sufix d'etapa, la llista s'utilitzarà per a ambdues etapes. Normalment, s'especifica .list.chroot de manera que els paquets només s'instaŀlaran al sistema de fitxers en viu i no hi haura una còpia extra del .deb en els medis.
Per crear una llista per a l'etapa binary, crear un fitxer amb el sufix .list.binary a config/package-lists/. Aquests paquets no s'instaŀlan al sistema de fitxers en viu però s'inclouen en els medis en viu a pool/. Un ús típic d'aquesta llista seria amb una de les variants del instaŀlador non-live. Com s'ha esmentat anteriorment, si es vol que aquesta llista sigui la mateixa que la llista de l'etapa chroot, simplement utilitzar el sufix .list.
Les llistes de paquets que s'inclouen amb live-build fan un ús extensiu dels includes. Es poden consultar al directori /usr/share/live/build/package-lists/ ja que serveixen com a bons exemples de com escriure llistes pròpies.
Per exemple, per fer una llista que inclogui la llista predefinida gnome més iceweasel, crear config/package-lists/my.list.chroot amb el contingut:
#include <gnome>
iceweasel
Qualsevol de les variables de configuració de live-build emmagatzemades a config/* (menys el prefix LB_) poden ser utilitzades en sentències condicionals en les llistes de paquets. En general, això significa qualsevol opció lb config en lletres majuscules i amb guions canviats a guions baixos. Però a la pràctica, només tenen sentit les que influeixen en la selecció de paquets, com ara DISTRIBUTION, ARCHITECTURES o ARCHIVE_AREAS.
Per exemple, per instaŀlar ia32-libs si s'especifica --architectures amd64:
#if ARCHITECTURES amd64
ia32-libs
#endif
És possible fer un test d'un qualsevol d'un nombre de valors, per exemple per instaŀlar memtest86+ si s'especifica --architectures i386 o --architectures amd64:
#if ARCHITECTURES i386 amd64
memtest86+
#endif
També es pot provar amb variables que poden contenir més d'un valor, per exemple, per instaŀlar vrms si s'especifica o contrib o non-free a través de l'opció --archive-areas:
#if ARCHIVE_AREAS contrib non-free
vrms
#endif
Un condicional pot envoltar una directiva #include:
#if ARCHITECTURES amd64
#include <gnome-full>
#endif
No és possible el anidament dels condicionals.
L'instaŀlador de Debian ofereix al usuari opcions d'una sèrie de llistes de paquets preseleccionats, cadascuna centrada en un tipus particular de sistema, o una tasca per a la qual es pot utilitzar un sistema, com "Graphical desktop environment", "Mail server" o "Laptop". Aquestes llistes es diuen "tasks" (tasques) i son suportades per APT a través de l'opció "Task:" es poden especificar una o més tasques a live-build posant-les en una llista a config/task-lists/, com en l'exemple següent.
$ lb config
$ echo "mail-server file-server" >> config/task-lists/my.list.chroot
Es poden llistar les principals tasques disponibles al instaŀlador de Debian amb tasksel --list-tasks al sistema viu. El contingut de qualsevol tasca, fins i tot les no estan incloses en aquesta llista, poden ser examinades amb tasksel --task-packages.
Les tasques d'escriptori i el llenguatge són casos especials que necessiten una mica de planificació i configuració extra. Les imatges en viu són diferentes de les imatges de l'instaŀlador de Debian en aquest sentit. A l'instaŀlador de Debian, si el medi es va preparar per obtenir un tipus entorn d'escriptori en particular, la tasca corresponent s'instaŀlarà automàticament. Per tant hi ha tasques internes gnome-desktop, kde-desktop, lxde-desktop and xfce-desktop cap de les quals s'ofereixen al menú de tasksel. De la mateixa manera, no hi ha cap entrada de menú per a les tasques de les llengües, però l'elecció del idioma de l'usuari durant la instaŀlació influeix en la selecció de les tasques de llengües corresponents.
En el desenvolupament d'una imatge en viu d'escriptori, la imatge sol arrencar directament a un escriptori de treball, les opcions d'escriptori i de llengua han estat fetes en temps de construcció, no en temps d'execució com en el cas del instaŀlador de Debian. Això no vol dir que una imatge en viu no es pugui construir per donar suport a diversos equips d'escriptori o diversos idiomes i oferir a l'usuari una opció, però això no és el comportament de live-build per defecte.
Com que no hi ha cap ajust automàtic per les tasques de llengua que incloguin coses com ara fonts específiques per a una llengua o paquets de mètode d'entrada, si es vol, cal especificar-ho en la configuració. Per exemple, una imatge d'escriptori GNOME que contingui suport per al japonés podrie incloure les següents tasques:
$ 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
Com les tasques d'escriptori són "internes" per a cada tasca d'escriptori inclosa en la imatge, el valor corresponent, si aquest és diferent del valor per defecte, "gnome", s'ha de fer servir la variable de preconfiguració "tasksel/desktop" o en cas contrari tasksel no la reconeixerà i no la instaŀlarà. Així:
$ lb config
$ echo 'tasksel tasksel/desktop multiselect kde' >> config/preseed/my.preseed.chroot
Aquest paràmetre pot tenir diversos valors, per exemple "lxde xfce" en lloc de "kde".
Si bé està en contra de la filosofia de Debian Live, de vegades pot ser necessària la construcció d'un sistema en viu amb versions modificades dels paquets que es troben al arxiu de Debian. Pot ser per modificar or donar suport a funcions addicionals, les llengües o les marques, o fins i tot per eliminar elements dels paquets existents que són indesitjables. De la mateixa manera, es poden utilitzar paquets de tercers per afegir alguna funcionalitat personalitzada i/o propietària.
Aquesta secció no cobreix l'assessorament en matèria de construcció o manteniment de paquets modificats. Però el métode de Joachim Breitner's 'How to fork privately' a ‹http://www.joachim-breitner.de/blog/archives/282-How-to-fork-privately.html› pot ser d'interès. La creació de paquets personalitzats es tracta a Debian New Maintainers' Guide at ‹http://www.debian.org/doc/maint-guide/› i en altres llocs.
Hi ha dues formes d'instaŀlar paquets personalitzats modificats:
Utilitzar packages.chroot és més fàcil d'aconseguir i útil per a personalitzacions "ràpides", però té una sèrie d'inconvenients, mentre que l'ús d'un repositori APT personalitzat és més costós en la quantitat de temps necessari.
Per instaŀar un paquet personalitzat, només s'ha de copiar al directori config/packages.chroot/. Els paquets que es troben dins d'aquest directori s'instaŀlaran automàticament en el sistema en viu durant la construcció - no cal especificar res més en cap altre lloc.
Els paquets han de ser nomenats en la forma prescrita. Una manera simple de fer això és utilitzar dpkg-name.
Utilitzar packages.chroot per a la instaŀlació de paquets personalitzats té els seus desavantatges:
A diferència de packages.chroot, quan s'utilitza un repositori APT personalitzat s'ha d'assegurar que s'especifiquen els paquets en un altre lloc. Veure Selecció dels paquets a instaŀlar per més detalls.
Si bé crear un repositori APT per instaŀlar paquets personalitzats pot semblar un esforç innecessari, la infraestructura pot ser fàcilment reutilitzada en una data posterior per oferir actualitzacions dels paquets modificats.
live-build utilitza APT per instaŀlar tots els paquets al sistema en viu per tant, heretarà els comportaments d'aquest programa. Un exemple rellevant és que (assumint una configuració per defecte) si es dóna el cas que un paquet està disponible en dos repositoris diferents, amb diferents números de versió, APT triarà per instaŀlar el paquet amb la versió més alta.
A causa d'això, s'aconsella augmentar el nombre de versió dels paquets personalitzats als fixers debian/changelog per assegurar-se que la versió modificada és la que s'instaŀla en lloc d'una dels repositoris oficials de Debian. Això també es pot aconseguir mitjançant l'alteració de les preferències d'APT del sistema en viu - veure APT pinning per més informació.
Es pot configurar APT a través d'una sèrie d'opcions que només s'apliquen en temps de construcció. (La configuració d'APT al sistema en funcionament en viu es pot fer de forma normal per als continguts del sistema en viu, és a dir, mitjançant la inclusió de les configuracions adequades a través de config/includes.chroot/.) Per obtenir una llista completa, buscar les opcions que comencen amb apt a la pàgina del manual de lb_config.
Es pot optar per utilitzar apt o aptitude a l'hora d'instaŀlar paquets en temps de construcció. Quina utilitat s'usa es configura gràcies al argument --apt de lb config. Escollir el mètode d'implementació per al comportament preferit durant la instaŀlació de paquets, la diferència notable és la forma en que es manegen els paquets que falten.
Una configuració típica d'APT és per fer front a la construcció d'una imatge darrere d'un proxy. Es pot especificar el proxy per APT amb les opcions --apt-ftp-proxy o --apt-http-proxy segons sigui necessari, per exemple,
$ lb config --apt-http-proxy http://proxy/
Pot ser necessari estalviar espai en els medis destinats a la imatge, en aquest cas una o altra o ambdós de les següentes opcions poden ser d'interès.
Si no es vol incloure els índexs d'APT en la imatge, es poden omitir amb:
$ lb config --apt-indices false
Això no influirà en les entrades de /etc/apt/sources.list, sinó simplement si /var/lib/apt conté els fitxers dels índexs o no. El desavantatge és que APT necessita aquests índexs per tal d'operar en el sistema en viu, així que abans d'executar per exemple apt-cache search o apt-get install, l'usuari primer ha fer un apt-get update per crear aquests índexs.
Si es considera que la instaŀlació de tots els paquets recomanats infla massa la imatge, es pot desactivar aquesta opció per defecte d'APT amb:
$ lb config --apt-recommends false
El desavantatge aquí és que si no s'instaŀlen els paquets recomanats per un paquet determinat, és a dir, "els paquets que es troben junts amb aquest en totes les instaŀlacions a menys que siguin inusuals" (Debian Policy Manual, secció 7.2), els paquets que en realitat són necessaris poden ser omesos. Per tant, suggerim revisar la diferència que desactivar els paquets recomanats té en la llista de paquets (veure el fitxer binary.packages generat per lb build) i tornar a incloure a la llista els paquets que falten que haurien de ser instaŀlats. D'altra banda, si només es vol un petit nombre de paquets recomanats deixats de banda, es pot deixar els paquets recomanats activat i establir una prioritat pin d'APT negativa en els paquets seleccionats per impedir la seva instaŀlació, com s'explica a APT pinning.
Si no hi ha una opció lb config per modificar el comportament d'APT tal i com es necessita, utilitzar --apt-options o --aptitude-options per passar alguna opció a través de l'eina APT configurada. Consultar les pàgines del manual de apt i aptitude per a més detalls.
Com a referència, llegir primer la pàgina del manual apt_preferences(5). Es pot configurar APT pinning tant pel temps de construcció, o bé per temps d'execució. En el primer cas, crear config/chroot_apt/preferences. Per aquest últim cas, crear config/includes.chroot/etc/apt/preferences.
Suposem que s'està construint un sistema en viu wheezy però es necessita que tots els paquets en viu que acaben en la imatge binària s'instaŀlin desde sid en temps de construcció. Cal afegir sid a les fonts d'APT i fer un pin de manera que només els paquets que es vol s'instaŀlin en el moment de la construcció i tots els altres es preguin de la distribució de destinació, wheezy. El que segueix aconseguira això:
$ echo "deb http://mirror/debian sid main" > config/archives/sid.list.chroot
$ cat >> config/chroot_apt/preferences << END
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: Es poden usar comodins en els noms dels paquets (per exemple, Package: live-*) amb la versió 0.8.14 o superior d'Apt. Això significa que funciona amb wheezy utilitzant:
$ lb config --distribution wheezy
Una prioritat pin negativa evitarà que un paquet s'instaŀli, com en el cas que no es vulgui un paquet que és recomanat per un altre paquet. Suposem que s'està construint una imatge LXDE amb --package-lists lxde però no es desitja que al usuari se li demani que guardi les contrasenyes wifi al clauer. Aquesta llista inclou gdm, que depèn de gksu, que al seu torn recomana gnome-keyring. Si es vol omitir el paquet recomanat gnome-keyring això es pot fer mitjançant l'addició de les següents línies al config/chroot_apt/preferences:
Package: gnome-keyring
Pin: version *
Pin-Priority: -1