1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
|
:B~ Exemples
1~examples Exemples
En aquest capítol s'inclouen exemples de construccions per a casos d'ús
específics amb sistemes en viu. Si s'és nou en la construcció d'imatges en
viu pròpies, us suggerim mirar els tres tutorials en seqüència, ja que cada
un ensenya noves tècniques que ajuden a utilitzar i entendre els exemples
restants.
2~using-the-examples Ús dels exemples
per a utilitzar aquests exemples es necessita un sistema de construcció que
compleixi les exigències enumerades a {Requisits}#requirements y que tingui
live-build instal·lat com es descriu a {Instal·lació de
live-build}#installing-live-build.
Cal notar que, per a abreujar, en aquests exemples no s'especifica un mirall
local per a utilitzar en la construcció. Es poden accelerar les descàrregues
considerablement si s'utilitza un mirall local. Es pot especificar les
opcions quan s'utilitza #{lb config}#, com es descriu a {Miralls de
distribució utilitzats en temps de
construcció}#distribution-mirrors-build-time, o per a major comoditat,
establir el valor predeterminat per al sistema de construcció en el fitxer
#{/etc/live/build.conf}#. Només cal crear aquest fitxer i establir a les
variables al mirall preferit. Tots els altres miralls que s'utilitzin en la
construcció adoptaran valors per defecte segons aquests valors. Per exemple:
code{
LB_MIRROR_BOOTSTRAP="http://mirror/debian/"
LB_MIRROR_CHROOT_SECURITY="http://mirror/debian-security/"
LB_MIRROR_CHROOT_BACKPORTS="http://mirror/debian-updates/"
}code
2~tutorial-1 Tutorial 1: Una imatge per defecte
*{Cas d'ús:}* Crear una primera imatge senzilla, aprenent els conceptes bàsics de live-build.
En aquest tutorial, anem a construir una imatge ISO híbrida per defecte que
contingui només els paquets de base (no té Xorg) i altres paquets de suport
de sistema en viu, com un primer exercici en l'ús de live-build.
No pot ser més senzill que això:
code{
$ mkdir tutorial1 ; cd tutorial1 ; lb config
}code
Examinar el contingut del directori #{config/}# si es vol. Es veurà
emmagatzemada aquí una configuració en esquelet, a punt per a ser
personalitzada o, en aquest cas, per a ser utilitzada immediatament per a
construir una imatge per defecte.
Ara, com a superusuari, construir la imatge, guardant un log del que es
construeix amb #{tee}#.
code{
# lb build 2>&1 | tee build.log
}code
Suposant que tot va bé, després d'una estona, el directori actual contindrà
una #{live-image-i386.hybrid.iso}#. Aquesta imatge ISO híbrida es pot
arrencar en una màquina virtual tal com s'explica a {Provar una imatge ISO
amb Qemu}#testing-iso-with-qemu i {Provar una imatge ISO amb
VirtualBox}#testing-iso-with-virtualbox, o bé copiada a un dispositiu USB
com es descriu a {Gravar una imatge ISO en un medi físic}#burning-iso-image
i {Copiar una imatge ISO híbrida en un dispositiu
USB}#copying-iso-hybrid-to-usb, respectivament.
2~tutorial-2 Tutorial 2: Una utilitat de navegador web
*{Cas d'ús:}* Crear una imatge d'una utilitat de navegador web, aprenent a aplicar personalitzacions.
En aquest tutorial, anem a crear una imatge adequada per al seu ús com a una
utilitat de navegador web, que serveix com introducció a la personalització
de les imatges de sistemes en viu.
code{
$ mkdir tutorial2
$ cd tutorial2
$ lb config
$ echo "task-lxde-desktop iceweasel" >> config/package-lists/my.list.chroot
}code
La nostra elecció de LXDE per a aquest exemple reflecteix el nostre desig
d'oferir un entorn d'escriptori mínim, ja que l'objectiu de la imatge és
l'únic ús que tenim al cap, el navegador web. Podríem anar encara més lluny
i oferir una configuració per defecte per al navegador web a
#{config/includes.chroot/etc/iceweasel/profile/}#, o paquets addicionals de
suport per a la visualització de diversos tipus de contingut web, però
deixem això com a un exercici per al lector.
Construir la imatge, de nou com a superusuari, guardant un log com al
{Tutorial 1}#tutorial-1:
code{
# lb build 2>&1 | tee build.log
}code
Un cop més, verificar que la imatge està bé i provar-la, com al {Tutorial
1}#tutorial-1.
2~tutorial-3 Tutorial 3: Una imatge personalitzada
*{Cas d'ús:}* Crear un projecte per a construir una imatge personalitzada, que contingui el programari favorit per a portar en una memòria USB allà on es vagi i que evolucionarà en revisions successives tal i com les necessitats i les preferències canvien.
Com la nostra imatge personalitzada canviarà durant un nombre de revisions i
volem fer un seguiment d'aquests canvis, provar coses experimentals i
possiblement revertir-les si les coses no surten bé, anem a mantenir la
nostra configuració en el popular sistema de control de versions
#{git}#. També utilitzarem les millors pràctiques de configuració automàtica
mitjançant scripts #{auto}# com s'explica a {Gestió d'una
configuració}#managing-a-configuration.
3~ Primera revisió
code{
$ mkdir -p tutorial3/auto
$ cp /usr/share/doc/live-build/examples/auto/* tutorial3/auto/
$ cd tutorial3
}code
Editar #{auto/config}# de la manera següent:
code{
#!/bin/sh
lb config noauto \
--architectures i386 \
--linux-flavours 686-pae \
"${@}"
}code
Executar #{lb config}# per a crear l'arbre de configuració, utilitzant el
script #{auto/config}# que s'acaba de crear:
code{
$ lb config
}code
Ara, omplir la llista local de paquets:
code{
$ echo "task-lxde-desktop iceweasel xchat" >> config/package-lists/my.list.chroot
}code
En primer lloc, amb #{--architectures i386}# s'assegura que al nostre
sistema de construcció #{amd64}# podem construir una versió de 32 bits
adequada per al seu ús en la majoria de màquines. En segon lloc, fem servir
#{--linux-flavours 686-pae}# perquè no creiem que utilitzarem aquesta imatge
en sistemes molt més vells. En tercer lloc, hem triat la tasca metapaquet
/{lxde}/ per a donar-nos un escriptori mínim. I, finalment, hem afegit dos
paquets inicials favorits: /{iceweasel}/ i /{xchat}/.
Ara, construir la imatge:
code{
# lb build
}code
Tenir en compte que a diferència dels dos primers tutorials, ja no s'ha
d'escriure #{2>&1 | tee build.log}# ja que ara s'inclou al script
#{auto/build}#.
Quan s'ha provat la imatge (com al {Tutorial 1}#tutorial-1) i s'està
satisfet del seu funcionament, és el moment d'iniciar el repositòri #{git}#,
afegint només els scripts auto que s'han creat, i llavors fer el primer
lliurament:
code{
$ git init
$ cp /usr/share/doc/live-build/examples/gitignore .gitignore
$ git add .
$ git commit -m "Initial import."
}code
3~ Segona revisió
En aquesta revisió, anem a netejar després de la primera construcció, afegir
el paquet /{vlc}/ a la nostra configuració, reconstruir, provar i fer el
lliurament.
L'ordre #{lb clean}# netejarà tots els fitxers generats en la construcció
anterior a excepció del cache, el que estalvia haver de tornar a descarregar
els paquets. Això assegura que el #{lb build}# següent tornarà a executar
totes les etapes per a regenerar els fitxers de la nostra nova configuració.
code{
# lb clean
}code
Ara afegim el paquet /{vlc}/ al llistat de paquets local a
#{config/package-lists/my.list.chroot}#:
code{
$ echo vlc >> config/package-lists/my.list.chroot
}code
Construir de nou:
code{
# lb build
}code
Provar, i quan s'estigui satisfet, fer el lliurament de la propera revisió:
code{
$ git commit -a -m "Adding vlc media player."
}code
Per descomptat, es possible fer canvis més complicats en la configuració,
potser afegint fitxers en els subdirectoris de #{config/}#. Quan es fa un
lliurament de les noves revisions, s'ha de tenir cura de no editar a mà o
incloure en el lliurament els fitxers de nivell superior de #{config}# que
contenen variables #{LB_*}#, ja que són productes de construcció també, i
sempre són netejats per #{lb clean}# i tornats a crear per #{lb config}# a
través dels seus respectius scripts #{auto}#.
Hem arribat al final de la nostra sèrie de tutorials. Molts més tipus de
personalització són possibles, amb les poques característiques explorades en
aquests senzills exemples, es poden crear una varietat gairebé infinita
d'imatges diferents. Els exemples que queden d'aquesta secció tracten
diferents casos d'ús extrets de les experiències recollides dels usuaris de
sistemes en viu.
2~ Un client per a un quiosc VNC
*{Cas d'ús:}* Crear una imatge amb live-build per a connectar-se directament a un servidor VNC al arrencar.
Fer un directori de treball i crear una configuració d'esquelet en el seu
interior, desactivant els «recommends» per a fer un sistema mínim. I a
continuació, crear dues llistes inicials de paquets: La primera generada per
un script proporcionat per live-build anomenat #{Packages}# (veure {Generar
llistes de paquets}#generated-package-lists), i la segona incloent-hi
/{xorg}/, /{gdm3}/, /{metacity}/ i /{xvnc4viewer}/.
code{
$ mkdir vnc-kiosk-client
$ cd vnc-kiosk-client
$ lb config -a i386 -k 686-pae --apt-recommends false
$ echo '! Packages Priority standard' > config/package-lists/standard.list.chroot
$ echo "xorg gdm3 metacity xvnc4viewer" > config/package-lists/my.list.chroot
}code
Com s'explica a {Afinar APT per a estalviar
espai}#tweaking-apt-to-save-space pot ser que s'hagi de tornar a afegir
alguns paquets recomanats per a fer que la imatge funcioni correctament.
Una manera fàcil d'enumerar els recommends és utilitzar /{apt-cache}/. Per
exemple:
code{
$ apt-cache depends live-config live-boot
}code
En aquest exemple, ens vam assabentar que havíem de tornar a incloure
diversos paquets recomanats per live-config i live-boot: #{user-setup}#
perquè funcioni l'autologin i #{sudo}# com a programa essencial per a apagar
el sistema. A més, podria ser útil afegir #{live-tools}# per a poder copiar
la imatge en la memòria RAM i #{eject}# per a expulsar, finalment, el medi
en viu. Per tant:
code{
$ echo "live-tools user-setup sudo eject" > config/package-lists/recommends.list.chroot
}code
Després, crear el directori #{/etc/skel}# a #{config/includes.chroot}# i
posar un fitxer #{.xsession}# personalitzat per a l'usuari per defecte que
posarà en marxa /{metacity}/ i iniciarà /{xvncviewer}/, connectant al port
#{5901}# d'un servidor ubicat a #{192.168.1.2}#:
code{
$ mkdir -p config/includes.chroot/etc/skel
$ cat > config/includes.chroot/etc/skel/.xsession << EOF
#!/bin/sh
/usr/bin/metacity &
/usr/bin/xvncviewer 192.168.1.2:1
exit
EOF
}code
Construir la imatge:
code{
# lb build
}code
Gaudir-ne.
2~ Una imatge bàsica per a un dispositiu USB de 128MB
*{Cas d'ús:}* Crear una imatge per defecte amb alguns components eliminats per tal que càpiga en una clau USB de 128MB amb un petit espai de sobres per a utilitzar-lo com millor us sembli.
Al optimitzar una imatge per a adaptar-la a una mida determinada, cal
comprendre la compensació que s'estan fent entre la mida i la
funcionalitat. En aquest exemple, retallem tant només per a donar cabuda a
material addicional dins d'una mida de 128MB, però sense fer res per a
destruir la integritat dels paquets continguts, com la depuració de les
dades de localització a través del paquet /{localepurge}/ o altres
optimitzacions "intrusives". De particular interès, utilitzem
#{--debootstrap-options}# per a crear un sistema mínim des de zero.
code{
$ lb config --apt-indices false --apt-recommends false --debootstrap-options "--variant=minbase" --firmware-chroot false --memtest none
}code
Per a fer que la imatge funcioni correctament, hem de tornar a afegir, com a
mínim, dos paquets recomanats, que es queden fora per l'opció
#{--apt-recommends false}#. Veure { Afinar APT per a estalviar
espai}#tweaking-apt-to-save-space
code{
$ echo "user-setup sudo" > config/package-lists/recommends.list.chroot
}code
Ara, crear la imatge de la forma habitual:
code{
# lb build 2>&1 | tee build.log
}code
En el sistema de l'autor en el moment d'escriure això, la configuració
anterior produeix una imatge de 110MB. Això es compara favorablement amb la
imatge de 192MB produïda per la configuració per defecte del {Tutorial
1}#tutorial-1.
Deixar els índexs d'APT amb #{--apt-indices false}# permet estalviar una
bona quantitat d'espai, el desavantatge és que es necessita fer #{apt-get
update}# abans d'utilitzar apt en el sistema en viu. Deixar els paquets
recomanats amb #{--apt-recommends false}# estalvia una mica d'espai
addicional, a costa d'ometre alguns paquets que d'una altra manera es podria
esperar que hi fossin. #{--debootstrap-options "--variant=minbase"}#
preinstal·la un sistema mínim des del principi. Al no incloure
automàticament paquets de firmware amb #{--firmware-chroot false}# també es
guanya una mica d'espai. I finalment, #{--memtest none}# impedeix la
instal·lació d'un comprovador de memòria.
*{Nota:}* Un sistema mínim es pot aconseguir també fent servir un script ganxo, com ara el #{stripped.hook.chroot}# de #{/usr/share/doc/live-build/examples/hooks}#. Es pot guanyar petites quantitats addicionals d'espai i produir una imatge de 91MB. No obstant, el script ganxo aconsegueix això eliminant documentació i altres fitxers dels paquets instal·lats al sistema. Això viola la integritat dels paquets i com és comenta a l'encapçalament del script, pot tenir conseqüències imprevistes. És per això que l'ús d'un /{debootstrap}/ mínim és el mètode recomanat per a aconseguir aquest objectiu.
2~ Un escriptori GNOME localitzat i amb instal·lador
*{Cas d'ús:}* Crear una imatge amb l'escriptori GNOME, localitzat per Suïssa i que inclogui un instal·lador.
Volem fer una imatge ISO híbrida per a l'arquitectura i386 fent servir el
nostre escriptori preferit, en aquest cas GNOME, que conté tots els mateixos
paquets que serien instal·lats per l'instal·lador estàndard de Debian per a
GNOME.
El nostre primer problema és descobrir els noms de les tasques del
llenguatge apropiades. En l'actualitat, live-build no ens pot ajudar amb
això. Tot i que es podria tenir sort i trobar-ho per assaig i error, hi ha
una eina, #{grep-dctrl}#, per extreure les descripcions de les tasques de
tasksel-data. Per a preparar-ho tot, assegurar-se de tenir totes dues coses:
code{
# apt-get install dctrl-tools tasksel-data
}code
Ara podem buscar les tasques apropiades, primer amb:
code{
$ grep-dctrl -FTest-lang de /usr/share/tasksel/descs/debian-tasks.desc -sTask
Task: german
}code
Mitjançant aquesta ordre, es descobreix que la tasca s'anomena, amb
suficient claredat, german. Ara, per a trobar les tasques relacionades:
code{
$ grep-dctrl -FEnhances german /usr/share/tasksel/descs/debian-tasks.desc -sTask
Task: german-desktop
Task: german-kde-desktop
}code
En el moment d'arrencar es generarà la variant regional *{de_CH.UTF-8}* i es
seleccionarà la disposició del teclat *{ch}*. Ara posarem les peces
juntes. Recordant de {Ús dels metapaquets}#using-metapackages que els
metapaquets tenen el prefix #{task-}#, simplement especificar aquests
paràmetres del llenguatge a l'arrencada, i després afegir els paquets de
prioritat estàndard i tots els metapaquets descoberts a la nostra llista de
paquets de la següent manera:
code{
$ mkdir live-gnome-ch
$ cd live-gnome-ch
$ lb config \
-a i386 \
--bootappend-live "boot=live components locales=de_CH.UTF-8 keyboard-layouts=ch" \
--debian-installer live
$ echo '! Packages Priority standard' > config/package-lists/standard.list.chroot
$ echo task-gnome-desktop task-german task-german-desktop >> config/package-lists/desktop.list.chroot
$ echo debian-installer-launcher >> config/package-lists/installer.list.chroot
}code
Tenir en compte que s'ha inclòs el paquet /{debian-installer-launcher}/ per
a llançar l'instal·lador des de l'escriptori en viu. El nucli #{586}#, que
actualment és necessari perquè el llançador funcioni correctament, s'inclou
per defecte.
|