/[d-i]/people/ninou/Makefile
ViewVC logotype

Contents of /people/ninou/Makefile

Parent Directory Parent Directory | Revision Log Revision Log


Revision 41579 - (show annotations) (download)
Thu Oct 12 12:25:25 2006 UTC (6 years, 7 months ago) by sferriol-guest
File size: 28192 byte(s)
resolved template translation issue
1 #!/usr/bin/make -f
2 #
3 # Debian Installer system makefile.
4 # Copyright 2001-2003 by Joey Hess <joeyh@debian.org> and the d-i team.
5 # Licensed under the terms of the GPL.
6 #
7 # This makefile builds a debian-installer system and bootable images from
8 # a collection of udebs which it downloads from a Debian archive. See
9 # README for details.
10 #
11 #
12 # General layout of our build directory hierarchy
13 #
14 # build/config/[<subarch>/][<medium>/][<flavour>/]<leaf-config>
15 # build/tmp/[<subarch>/][<medium>/][<flavour>/]<build-area>
16 # build/dest/[<subarch>/][<medium>/][<flavour>-]<images>
17 #
18 # Items in brackets can be left out if they are superfluous.
19 #
20 # These following <image> names are conventional.
21 #
22 # For small changeable media (floppies and the like):
23 # - boot.img, root.img, driver.img
24 #
25 # For single bootable images (e.g. tftp boot images):
26 # - boot.img
27 #
28 # For compressed single bootable images (harddisk or hd emulation):
29 # - boot.img.gz
30 #
31 # If those are not bootable:
32 # - root.img.gz
33 #
34 # Raw kernel images:
35 # - vmlinux or vmlinuz
36 #
37 # Example:
38 #
39 # dest/
40 # |-- cdrom-boot.img
41 # |-- floppy
42 # | |-- access
43 # | | |-- boot.img
44 # | | |-- drivers.img
45 # | | `-- root.img
46 # | |-- boot.img
47 # | |-- cd-drivers.img
48 # | |-- net-drivers.img
49 # | `-- root.img
50 # |-- hd-media-boot.img.gz
51 # `-- netboot
52 # |-- initrd.gz
53 # `-- vmlinuz
54 #
55
56 # Add to PATH so dpkg will always work, and so local programs will be found.
57 PATH := util:$(PATH):/usr/sbin:/sbin
58
59 # We don't want this to be run each time we re-enter.
60 ifndef DEB_HOST_ARCH
61 DEB_HOST_ARCH = $(shell dpkg-architecture -qDEB_HOST_ARCH)
62 DEB_HOST_GNU_CPU = $(shell dpkg-architecture -qDEB_HOST_GNU_CPU)
63 DEB_HOST_GNU_SYSTEM = $(shell dpkg-architecture -qDEB_HOST_GNU_SYSTEM)
64 export DEB_HOST_ARCH DEB_HOST_GNU_CPU DEB_HOST_GNU_SYSTEM
65 endif
66
67 # We loop over all needed combinations of ARCH, SUBARCH, MEDIUM, FLAVOUR
68 # via recursive make calls. ARCH is constant, we don't support
69 # crosscompiling.
70 ARCH = $(DEB_HOST_ARCH)
71
72 # By default, we just advertise what we can do.
73 .PHONY: all
74 all: list
75
76 # Globally useful variables.
77 targetstring = $(patsubst _%,%,$(if $(SUBARCH),_$(SUBARCH),)$(if $(MEDIUM),_$(MEDIUM),)$(if $(FLAVOUR),_$(FLAVOUR),))
78 targetdirs = $(subst _,/,$(targetstring))
79
80
81 # Configurations for the varying ARCH, SUBARCH, MEDIUM, FLAVOUR.
82 # For simplicity, we use a similiar tree layout for config/, tmp/
83 # and dest/.
84 #
85 # Cheap trick: if one of the variables isn't defined, we run in
86 # a non-existing file and ignore it.
87 include config/common
88 include config/dir
89 -include config/local
90 -include config/$(ARCH).cfg
91 -include config/$(ARCH)/$(SUBARCH).cfg
92 -include config/$(ARCH)/$(SUBARCH)/$(MEDIUM).cfg
93 -include config/$(ARCH)/$(SUBARCH)/$(MEDIUM)/$(FLAVOUR).cfg
94
95 export KEYRING
96
97 # Useful command sequences
98 define submake
99 $(MAKE) --no-print-directory
100 endef
101
102 define recurse_once
103 @set -e; $(submake) $(1)_$(2)
104 endef
105
106 define recurse_many
107 @set -e; $(foreach var,$($(1)_SUPPORTED),$(submake) $(2)_$(3) $(1)=$(var);)
108 endef
109
110 define recurse
111 $(if $($(1)_SUPPORTED),$(call recurse_many,$(1),$(2),$(3)),$(call recurse_once,$(2),$(3)))
112 endef
113
114 define genext2fs
115 genext2fs -d $(TREE) -b `expr $$(du -s $(TREE) | cut -f 1) + $$(expr $$(find $(TREE) | wc -l) \* 2)` -r 0
116 endef
117
118 define mkinitramfs
119 (cd $(TREE) && find . | cpio --quiet -o -H newc) >
120 endef
121
122 define e2fsck
123 e2fsck -fy
124 endef
125
126 define mkcramfs
127 mkcramfs -z $(TREE)
128 endef
129
130 # Define MKFS_JFFS2 in the config file for your target.
131 # For example: MKFS_JFFS2 = mkfs.jffs2 -f -p -b -e 0x20000
132 define mkjffs2
133 $(MKFS_JFFS2) -d $(TREE) -o
134 endef
135
136 # A generic recursion rule
137 .PHONY: all_%
138 all_%:
139 @install -d $(STAMPS)
140 $(call recurse,SUBARCH,subarch,$*)
141
142 .PHONY: subarch_%
143 subarch_%:
144 $(call recurse,MEDIUM,medium,$*)
145
146 .PHONY: medium_%
147 medium_%:
148 $(call recurse,FLAVOUR,flavour,$*)
149
150 .PHONY: flavour_%
151 flavour_%:
152 $(if $(targetstring),@$(submake) _$*)
153
154 # Validate a targetstring, echo env variables for valid ones
155 .PHONY: validate_%
156 validate_%:
157 @set -e; \
158 SUBARCH= var='$(subst _, ,$(subst validate_,,$@))'; \
159 tmp=$$(echo $$var |sed 's/[ ].*$$//'); \
160 [ -z '$(SUBARCH_SUPPORTED)' ] || [ -z "$$tmp" ] || [ -z "$$(echo $(SUBARCH_SUPPORTED) |grep -w $$tmp)" ] || SUBARCH=$$tmp; \
161 $(submake) medium_validate SUBARCH=$$SUBARCH var="$$var"
162
163 .PHONY: medium_validate
164 medium_validate:
165 @set -e; \
166 MEDIUM= var="$(strip $(patsubst $(SUBARCH)%,%,$(var)))"; \
167 tmp=$$(echo $$var |sed 's/[ ].*$$//'); \
168 [ -z '$(MEDIUM_SUPPORTED)' ] || [ -z "$$tmp" ] || [ -z "$$(echo $(MEDIUM_SUPPORTED) |grep -w $$tmp)" ] || MEDIUM=$$tmp; \
169 $(submake) flavour_validate MEDIUM=$$MEDIUM var="$$var"
170
171 .PHONY: flavour_validate
172 flavour_validate:
173 @set -e; \
174 FLAVOUR= var="$(strip $(patsubst $(MEDIUM)%,%,$(var)))"; \
175 tmp=$$(echo $$var |sed 's/[ ].*$$//'); \
176 [ -z '$(FLAVOUR_SUPPORTED)' ] || [ -z "$$tmp" ] || [ -z "$$(echo $(FLAVOUR_SUPPORTED) |grep -w $$tmp)" ] || FLAVOUR=$$tmp; \
177 $(submake) finish_validate FLAVOUR=$$FLAVOUR var="$$var"
178
179 .PHONY: finish_validate
180 finish_validate:
181 @set -e; \
182 var="$(strip $(patsubst $(FLAVOUR)%,%,$(var)))"; \
183 if [ -z "$$var" ]; then \
184 echo SUBARCH=$$SUBARCH MEDIUM=$$MEDIUM FLAVOUR=$$FLAVOUR; \
185 else \
186 echo SUBARCH= MEDIUM= FLAVOUR=; \
187 fi;
188
189
190 # List all targets useful for direct invocation.
191 .PHONY: list
192 list:
193 @echo "Useful targets:"
194 @echo
195 @echo "list"
196 @echo "all_build"
197 @echo "all_rebuild"
198 @echo "stats"
199 @echo "all_clean"
200 @echo "reallyclean"
201 @echo
202 @$(submake) all_list
203
204 .PHONY: _list
205 _list:
206 @set -e; \
207 echo build_$(targetstring); \
208 echo stats_$(targetstring); \
209 $(if $(findstring $(MEDIUM),$(WRITE_MEDIA)),echo write_$(targetstring);) \
210 echo clean_$(targetstring); \
211 echo rebuild_$(targetstring); \
212 echo demo_$(targetstring); \
213 echo shell_$(targetstring); \
214 echo uml_$(targetstring); \
215 echo qemu_$(targetstring); \
216 echo
217
218
219 # Clean all targets.
220 .PHONY: reallyclean
221 reallyclean: all_clean
222 rm -rf $(APTDIR) $(APTDIR).udeb $(APTDIR).deb $(BASE_DEST) $(BASE_TMP) $(SOURCEDIR) $(DEBUGUDEBDIR)
223 rm -f sources.list sources.list.udeb $(LOCALUDEBDIR)/Packages.gz $(LOCALUDEBDIR)/Packages
224 rm -rf $(UDEBDIR) $(STAMPS)
225
226 # For manual invocation, we provide a generic clean rule.
227 .PHONY: clean_%
228 clean_%:
229 @$(submake) _clean $(shell $(submake) $(subst clean_,validate_,$@))
230 update-manifest
231
232 # The general clean rule.
233 .PHONY: _clean
234 _clean: tree_umount
235 @[ -n "$(SUBARCH) $(MEDIUM) $(FLAVOUR)" ] || { echo "invalid target"; false; }
236 -rm -f $(STAMPS)tree-unpack-$(targetstring)-stamp $(STAMPS)tree-$(targetstring)-stamp $(STAMPS)extra-$(targetstring)-stamp $(STAMPS)get_udebs-$(targetstring)-stamp
237 rm -f $(TEMP)/diskusage.txt
238 rm -f $(TEMP)/all.utf
239 rm -f $(TEMP)/unifont.bdf $(TREE)/lib/unifont.bgf
240 rm -f pkg-lists/standard-udebs pkg-lists/kernel-module-udebs
241 rm -rf $(TARGET)
242 rm -rf $(TEMP)
243
244 # all_build is provided automagically, but for manual invocation
245 # we provide a generic build rule.
246 .PHONY: build_%
247 build_%:
248 @install -d $(STAMPS)
249 @$(submake) _build $(shell $(submake) $(subst build_,validate_,$@))
250
251 # The general build rule.
252 .PHONY: _build
253 _build:
254 @[ -n "$(SUBARCH) $(MEDIUM) $(FLAVOUR)" ] || { echo "invalid target"; false; }
255 @$(submake) tree_umount $(EXTRATARGETS) $(TARGET)
256
257 # Convenience rules to clean and build.
258 .PHONY: rebuild_%
259 rebuild_%:
260 @$(submake) clean_$(subst rebuild_,,$@) build_$(subst rebuild_,,$@)
261
262 .PHONY: _rebuild
263 _rebuild:
264 @$(submake) _clean _build
265
266 # Run before releasing built files.
267 release:
268 egrep '^[[:space:]]' $(BASE_DEST)/MANIFEST.udebs | \
269 sed 's/^[[:space:]]*//' | sort | uniq > $(BASE_DEST)/udeb.list
270 rm -f $(BASE_DEST)/MD5SUMS
271 cd $(BASE_DEST) && md5sum `find . -type f` > MD5SUMS
272
273 # The general tree target.
274 $(STAMPS)tree-unpack-$(targetstring)-stamp: $(STAMPS)get_udebs-$(targetstring)-stamp
275 dh_testroot
276 cd .. && dpkg-checkbuilddeps
277 @rm -f $@
278
279 # This build cannot be restarted, because dpkg gets confused.
280 rm -rf $(TREE)
281 # Set up the basic files [u]dpkg needs.
282 mkdir -p $(DPKGDIR)/info
283 touch $(DPKGDIR)/status
284 # Create a tmp tree
285 mkdir -p $(TREE)/tmp
286 # Only dpkg needs this stuff, so it can be removed later.
287 mkdir -p $(DPKGDIR)/updates/
288 touch $(DPKGDIR)/available
289
290 # Unpack the udebs with dpkg. This command must run as root
291 # or fakeroot.
292 echo -n > $(TEMP)/diskusage.txt
293 set -e; \
294 oldsize=0; oldblocks=0; oldcount=0; for udeb in $(UDEBDIR)/*.udeb ; do \
295 if [ -f "$$udeb" ]; then \
296 pkg=`basename $$udeb` ; \
297 dpkg $(DPKG_UNPACK_OPTIONS) --log=/dev/null --root=$(TREE) --unpack $$udeb ; \
298 newsize=`du -bs $(TREE) | awk '{print $$1}'` ; \
299 newblocks=`du -s $(TREE) | awk '{print $$1}'` ; \
300 newcount=`find $(TREE) -type f | wc -l | awk '{print $$1}'` ; \
301 usedsize=`echo $$newsize - $$oldsize | bc`; \
302 usedblocks=`echo $$newblocks - $$oldblocks | bc`; \
303 usedcount=`echo $$newcount - $$oldcount | bc`; \
304 version=`dpkg-deb --info $$udeb | grep '^ *Version:' | sed 's/^ *//' | awk '{print $$2}'` ; \
305 echo " $$usedsize B - $$usedblocks blocks - $$usedcount files from $$pkg (version $$version)" >>$(TEMP)/diskusage.txt;\
306 oldsize=$$newsize ; \
307 oldblocks=$$newblocks ; \
308 oldcount=$$newcount ; \
309 fi; \
310 done
311 sort -n < $(TEMP)/diskusage.txt > $(TEMP)/diskusage.txt.new && \
312 mv $(TEMP)/diskusage.txt.new $(TEMP)/diskusage.txt
313 grep-dctrl -nsPackage,Version,Architecture '' $(TREE)/var/lib/dpkg/status | \
314 perl -nle '$$p = $$_; $$v = <>; chomp $$v; $$a = <>; chomp $$a; <>; print "$$p $$v $$a"' | \
315 sort > $(TEMP_UDEB_LIST)
316
317 # Clean up after dpkg.
318 rm -rf $(DPKGDIR)/updates
319 rm -f $(DPKGDIR)/available $(DPKGDIR)/*-old $(DPKGDIR)/lock
320
321 ifdef EXTRAFILES
322 # Copy in any extra files.
323 set -e; \
324 for file in $(EXTRAFILES); do \
325 mkdir -p $(TREE)/`dirname $$file`; \
326 cp -a $$file $(TREE)/$$file; \
327 done
328 endif
329
330 ifdef KERNELVERSION
331 # Set up modules.dep, ensure there is at least one standard dir (kernel
332 # in this case), so depmod will use its prune list for archs with no
333 # modules.
334 set -e; \
335 $(foreach VERSION,$(KERNELVERSION), \
336 sysmap_name=; sysmap_opt=; \
337 if [ -n "$(VERSIONED_SYSTEM_MAP)" ]; then \
338 [ ! -e $(TREE)/boot/System.map-$(VERSION) ] || sysmap_name="$(TREE)/boot/System.map-$(VERSION)"; \
339 else \
340 [ ! -e $(TREE)/boot/System.map ] || sysmap_name="$(TREE)/boot/System.map"; \
341 fi; \
342 [ -z "$$sysmap_name" ] || sysmap_opt="-F $$sysmap_name"; \
343 if [ -d $(TREE)/lib/modules/$(VERSION) ]; then \
344 mkdir -p $(TREE)/lib/modules/$(VERSION)/kernel; \
345 $(shell choose-subarch-env $(VERSION)) depmod $$sysmap_opt -q -a -b $(TREE)/ $(VERSION); \
346 fi; \
347 [ -z "$$sysmap_name" ] || mv $$sysmap_name $(TEMP);)
348
349 # These files depmod makes are used by hotplug, if it's being used;
350 # otherwise, we shouldn't need them. Some files aren't even used by
351 # hotplug, so never include them.
352 if [ -d $(TREE)/etc/udev ] || [ -d $(TREE)/etc/hotplug ]; then \
353 find $(TREE)/lib/modules/ -name 'modules*' \
354 -not -name modules.dep -not -name modules.alias \
355 -not -name 'modules.*map' \
356 -not -type d | xargs rm -f; \
357 else \
358 find $(TREE)/lib/modules/ -name 'modules*' \
359 -not -name modules.dep -not -type d | xargs rm -f; \
360 fi
361
362 # These files are used to build special kernel images for some
363 # subarchitectures. Move them out of the way.
364 $(foreach VERSION,$(KERNELVERSION), \
365 if [ -d $(TREE)/usr/lib/kernel-image-$(VERSION) ]; then \
366 mv $(TREE)/usr/lib/kernel-image-$(VERSION) \
367 $(TEMP)/lib; \
368 fi; \
369 if [ -d $(TREE)/usr/lib/linux-image-$(VERSION) ]; then \
370 mv $(TREE)/usr/lib/linux-image-$(VERSION) \
371 $(TEMP)/lib; \
372 fi;)
373 endif
374
375 ifdef KERNELNAME
376 # Move the kernel image out of the way.
377 $(foreach name,$(KERNELNAME), \
378 mv -f $(TREE)/boot/$(name) $(TEMP)/$(name);)
379 rmdir $(TREE)/boot/
380 endif
381
382 ifdef PRESEED
383 # Copy in preseed file.
384 cp -a $(PRESEED) $(TREE)/preseed.cfg
385 endif
386 ifdef PRESEED_SUITE
387 # Add suite preseed file.
388 if [ -e "$(TREE)/preseed.cfg" ]; then \
389 cat $(PRESEED_SUITE) >> $(TREE)/preseed.cfg; \
390 else \
391 cp -a $(PRESEED_SUITE) $(TREE)/preseed.cfg; \
392 fi
393 endif
394
395 ifneq (,$(wildcard $(KEYRING)))
396 mkdir -p $(TREE)/usr/share/keyrings
397 cp -a $(KEYRING) $(TREE)/usr/share/keyrings/archive.gpg
398 endif
399
400 # Create an lsb release file.
401 if [ ! -e $(TREE)/etc/lsb-release ]; then \
402 set -e; \
403 mkdir -p $(TREE)/etc; \
404 echo 'DISTRIB_ID=$(LSB_DISTRIB_ID)' > $(TREE)/etc/lsb-release; \
405 echo 'DISTRIB_DESCRIPTION=$(LSB_DISTRIB_DESCRIPTION)' >> $(TREE)/etc/lsb-release; \
406 echo 'DISTRIB_RELEASE=$(LSB_DISTRIB_RELEASE)' >> $(TREE)/etc/lsb-release; \
407 echo 'X_INSTALLATION_MEDIUM=$(MEDIUM)' >> $(TREE)/etc/lsb-release; \
408 fi
409
410 @touch $@
411
412
413 $(STAMPS)tree-$(targetstring)-stamp: $(STAMPS)tree-unpack-$(targetstring)-stamp
414 # Create a dev tree.
415 mkdir -p $(TREE)/dev
416 # Always needed, in case devfs is not mounted on boot.
417 mknod $(TREE)/dev/console c 5 1
418 mknod $(TREE)/dev/null c 1 3
419
420 mkdir -p $(EXTRAUDEBSDIR)
421 mkdir -p $(EXTRAUDEBSDPKGDIR)/info $(EXTRAUDEBSDPKGDIR)/updates
422 touch $(EXTRAUDEBSDPKGDIR)/status $(EXTRAUDEBSDPKGDIR)/available
423 ifdef EXTRADRIVERS
424 # Unpack the udebs of additional driver disks, so mklibs runs on them too.
425 dpkg $(DPKG_UNPACK_OPTIONS) --log=/dev/null --root=$(EXTRAUDEBSDIR) --unpack \
426 $(wildcard $(foreach dir,$(EXTRADRIVERS),$(dir)/*.udeb))
427 endif
428 ifdef EXTRAUDEBS
429 # Get and unpack extra udebs too.
430 get-packages udeb $(EXTRAUDEBS)
431 dpkg $(DPKG_UNPACK_OPTIONS) --log=/dev/null --root=$(EXTRAUDEBSDIR) --unpack \
432 $(foreach udeb,$(EXTRAUDEBS),$(UDEBDIR)/$(udeb).udeb)
433 endif
434
435 # Library reduction. Existing libs from udebs are put in the udeblibs
436 # directory and mklibs is made to use those in preference to the
437 # system libs.
438 rm -rf $(TEMP)/udeblibs
439 ifndef ONLY_KLIBC
440 mkdir -p $(TEMP)/udeblibs
441 -cp -a `find $(EXTRAUDEBSDIR)/lib -name '*.so.*'` $(TEMP)/udeblibs
442 -cp -a `find $(TREE)/lib -name '*.so.*'` $(TEMP)/udeblibs
443 mkdir -p $(TREE)/lib
444 $(MKLIBS) -L $(TREE)/usr/lib -L $(TEMP)/udeblibs -v -d $(TREE)/lib --root=$(TREE) \
445 `find $(TEMP) -type f -a \( -perm +0111 -o -name '*.so' -o -name '*.so.*' \) | grep -v udeblibs`
446 rm -rf $(TEMP)/udeblibs
447 endif
448
449 # Add missing symlinks for libraries
450 /sbin/ldconfig -n $(TREE)/lib $(TREE)/usr/lib
451
452 # Remove any libraries that are present in both usr/lib and lib,
453 # from lib. These were unnecessarily copied in by mklibs, and
454 # we want to use the ones in usr/lib instead since they came
455 # from udebs. Only libdebconfclient0 has this problem so far.
456 set -e; \
457 for lib in `find $(TREE)/usr/lib/ -name "lib*" -type f -printf "%f\n" | cut -d . -f 1 | sort | uniq`; do \
458 rm -f $(TREE)/lib/$$lib.*; \
459 done
460
461 # Reduce status file to contain only the elements we care about.
462 egrep -i '^((Status|Provides|Depends|Package|Version|Description|installer-menu-item|Description-..):|$$)' \
463 $(DPKGDIR)/status > $(DPKGDIR)/status.new
464 mv $(DPKGDIR)/status.new $(DPKGDIR)/status
465
466 # Add a dummy entry for the debian installer itself to the status
467 # file, giving the overall version of this build.
468 echo "Package: debian-installer" >> $(DPKGDIR)/status
469 echo "Status: install ok installed" >> $(DPKGDIR)/status
470 echo "Version: $(subst _,-,$(targetstring))-$(BUILD_DATE)" >> $(DPKGDIR)/status
471 echo "Description: debian installation image" >> $(DPKGDIR)/status
472 echo >> $(DPKGDIR)/status
473
474 ifdef DROP_LANG
475 # Remove languages from the templates.
476 # Not ideal, but useful if you're very tight on space.
477 set -e; \
478 for FILE in $$(find $(TREE)/var/lib/dpkg -name "*.templates"); do \
479 perl -e 'my $$status=0; my $$drop=shift; while (<>) { if (/^[A-Z]/ || /^$$/) { if (/^(Choices|Description|Indices|Default)-($$drop)/) { $$status = 0 } else { $$status = 1 } } print if ($$status); }' ${DROP_LANG} < $$FILE > temp; \
480 mv temp $$FILE; \
481 done
482 endif
483
484 # Strip all kernel modules, just in case they haven't already been
485 set -e; \
486 for module in `find $(TREE)/lib/modules/ -name '*.o' -o -name '*.ko'`; do \
487 strip -R .comment -R .note -g $$module; \
488 done
489
490 # Remove some unnecessary dpkg files.
491 set -e; \
492 for file in `find $(TREE)/var/lib/dpkg/info -name '*.md5sums' -o \
493 -name '*.postrm' -o -name '*.prerm' -o -name '*.preinst' -o \
494 -name '*.list'`; do \
495 if echo $$file | grep -qv '\.list'; then \
496 echo "** Removing unnecessary control file $$file"; \
497 fi; \
498 rm $$file; \
499 done
500
501 # Collect the used UTF-8 strings, to know which glyphs to include in
502 # the font.
503 cat needed-characters/*.utf > $(TEMP)/all.utf
504 if [ -n "`find $(EXTRAUDEBSDPKGDIR)/info/ -name \\*.templates`" ]; then \
505 cat $(EXTRAUDEBSDPKGDIR)/info/*.templates >> $(TEMP)/all.utf; \
506 fi
507 if [ -n "`find $(DPKGDIR)/info/ -name \\*.templates`" ]; then \
508 cat $(DPKGDIR)/info/*.templates >> $(TEMP)/all.utf; \
509 fi
510
511 # Remove extra udebs now that we're done with them.
512 rm -rf $(EXTRAUDEBSDIR)
513
514 # Tree target ends here. Whew!
515 @touch $@
516
517 # Get the list of udebs to install.
518 # HACK Alert: pkg-lists/ is still sorted by TYPE instead of a dir hierarchy.
519 UDEBS = $(shell set -e; get-packages udeb update >&2; pkg-list $(TYPE) "$(DRIVER_FOR)" $(KERNEL_FLAVOUR) $(KERNELMAJOR) "$(SUBARCH)" $(KERNELIMAGEVERSION)) $(EXTRAS)
520
521 # Get all required udebs and put them in UDEBDIR.
522 $(STAMPS)get_udebs-$(targetstring)-stamp: sources.list.udeb
523 dh_testroot
524 @rm -f $@
525 get-packages udeb $(UDEBS)
526 @touch $@
527
528 # Auto-generate a sources.list.type
529 sources.list.udeb:
530 (set -e; \
531 echo "# This file is automatically generated, edit $@.local instead."; \
532 echo "deb copy:$(shell pwd)/ $(LOCALUDEBDIR)/"; \
533 if [ "$(MIRROR)x" != "x" ]; then \
534 echo "deb $(MIRROR) $(SUITE) $(UDEB_COMPONENTS)"; \
535 else \
536 grep '^deb[ \t]' $(SYSTEM_SOURCES_LIST) \
537 |grep -v '^deb[ \t]cdrom:' \
538 |grep -v '\(non-US\|non-us.debian.org\|security.debian.org\)' \
539 |grep '[ \t]main' \
540 |awk '{print $$1 " " $$2}' \
541 |sed "s,/* *$$, $(SUITE) $(UDEB_COMPONENTS)," \
542 |sed "s,^deb file,deb copy," \
543 |perl -ne 'print unless $$seen{$$_}; $$seen{$$_}=1' ; \
544 fi) > $@
545
546
547 # Font generation.
548 #
549 # Use the UTF-8 locale in installation-locale. This target shouldn't
550 # be called when it is not present anyway.
551 # The locale must be generated after installing the package locales
552 $(TREE)/lib/unifont.bgf: $(TEMP)/all.utf
553 set -e; \
554 CHARMAP=`LOCPATH=$(LOCALE_PATH) LC_ALL=C.UTF-8 locale charmap`; \
555 if [ UTF-8 != "$$CHARMAP" ]; then \
556 echo "error: Trying to build unifont.bgf without installation-locale!"; \
557 echo "(Alternatively, installation-locale may have been built against"; \
558 echo "a version of glibc with a different locale data format.)"; \
559 exit 1; \
560 fi
561 LOCPATH=$(LOCALE_PATH) LC_ALL=C.UTF-8 reduce-font /usr/src/unifont.bdf < $(TEMP)/all.utf > $(TEMP)/unifont.bdf
562 bdftobogl -b $(TEMP)/unifont.bdf > $@.tmp
563 mv $@.tmp $@
564
565 # Create a compressed image of the root filesystem.
566 $(TEMP_INITRD): $(STAMPS)tree-$(targetstring)-stamp arch_tree
567 # Only build the font if we have installation-locale
568 if [ -d "$(LOCALE_PATH)/C.UTF-8" ] && [ -e /usr/src/unifont.bdf ]; then \
569 $(submake) $(TREE)/lib/unifont.bgf; \
570 fi
571 install -d $(TEMP)
572
573 case $(INITRD_FS) in \
574 ext2) \
575 $(genext2fs) $(TEMP)/initrd; \
576 $(e2fsck) $(TEMP)/initrd || true; \
577 gzip -v9f $(TEMP)/initrd; \
578 ;; \
579 cramfs) \
580 $(mkcramfs) $(TEMP)/initrd; \
581 gzip -v9f $(TEMP)/initrd; \
582 ;; \
583 initramfs) \
584 $(mkinitramfs) $(TEMP)/initrd; \
585 gzip -v9f $(TEMP)/initrd; \
586 ;; \
587 jffs2) \
588 $(mkjffs2) $(TEMP_INITRD); \
589 ;; \
590 *) \
591 echo "Unsupported filesystem type"; \
592 exit 1 ;; \
593 esac
594
595 # Create the images for dest/. Those are the targets called from config.
596
597 $(INITRD): $(TEMP_INITRD)
598 install -m 644 -D $< $@
599 update-manifest $@ $(MANIFEST-INITRD) $(UDEB_LISTS)
600
601 $(RAMDISK): $(TEMP_INITRD)
602 install -m 644 -D $< $@
603 update-manifest $@ $(MANIFEST-RAMDISK) $(UDEB_LISTS)
604
605 # raw kernel images
606 $(KERNEL): TEMP_REAL_KERNEL = $(TEMP)/$(shell echo ./$@ |sed 's,$(SOME_DEST)/$(EXTRANAME),,')
607 $(KERNEL):
608 @$(MAKE) $(STAMPS)tree-unpack-$(targetstring)-stamp $(TEMP_REAL_KERNEL)
609 install -m 644 -D $(TEMP_REAL_KERNEL) $@
610 update-manifest $@ $(MANIFEST-KERNEL)
611
612 # bootable images
613 $(BOOT): $(TEMP_BOOT)
614 install -m 644 -D $(TEMP_BOOT)$(GZIPPED) $@
615 update-manifest $@ $(MANIFEST-BOOT) $(UDEB_LISTS)
616
617 $(TEMP_KERNEL): $(STAMPS)tree-unpack-$(targetstring)-stamp
618
619 $(TEMP_BOOT): $(TEMP_INITRD) $(TEMP_KERNEL) $(TEMP_BOOT_SCREENS) arch_boot
620
621 # non-bootable root images
622 $(ROOT): $(TEMP_ROOT)
623 install -m 644 -D $(TEMP_ROOT)$(GZIPPED) $@
624 update-manifest $@ $(MANIFEST-ROOT) $(UDEB_LISTS)
625
626 $(TEMP_ROOT): $(TEMP_INITRD) arch_root
627
628 # miniature ISOs with only a boot image
629 $(MINIISO): $(TEMP_MINIISO)
630 install -m 644 -D $(TEMP_MINIISO) $@
631 update-manifest $@ $(MANIFEST-MINIISO) $(UDEB_LISTS)
632
633 $(TEMP_MINIISO): $(TEMP_BOOT_SCREENS) arch_miniiso
634
635 # various kinds of information, for use on debian-cd isos
636 $(DEBIAN_CD_INFO): $(TEMP_BOOT_SCREENS) $(TEMP_CD_INFO_DIR)
637 (cd $(TEMP_CD_INFO_DIR); tar czf - .) > $@
638 update-manifest $@ $(MANIFEST-DEBIAN_CD_INFO)
639
640 # a directory full of files for netbooting
641 $(NETBOOT_DIR): $(NETBOOT_DIR_TARGETS) $(TEMP_BOOT_SCREENS) $(TEMP_NETBOOT_DIR)
642 rm -rf $(SOME_DEST)/$(EXTRANAME)/debian-installer
643 mkdir -p $(SOME_DEST)/$(EXTRANAME)/debian-installer
644 cp -a $(TEMP_NETBOOT_DIR)/debian-installer/* $@
645 $(foreach link,$(NETBOOT_DIR_LINKS), \
646 rm -f $@/../$(link); \
647 cp -a $(TEMP_NETBOOT_DIR)/$(link) $@/..; \
648 )
649 update-manifest $@ $(MANIFEST-NETBOOT_DIR) $(UDEB_LISTS)
650
651 # a tarball for netbooting
652 $(NETBOOT_TAR): $(TEMP_NETBOOT_DIR)
653 (cd $(TEMP_NETBOOT_DIR); tar czf - .) > $@
654 update-manifest $@ $(MANIFEST-NETBOOT_TAR) $(UDEB_LISTS)
655
656 $(TEMP_BOOT_SCREENS): arch_boot_screens
657 $(TEMP_CD_INFO_DIR): arch_cd_info_dir
658 $(TEMP_NETBOOT_DIR): arch_netboot_dir
659
660 $(MISC): TEMP_REAL_MISC = $(shell echo ./$@ |sed 's,$(SOME_DEST)/$(EXTRANAME),,')
661 $(MISC):
662 install -m 644 $(TEMP_REAL_MISC) $(SOME_DEST)/$(EXTRANAME)
663 update-manifest \
664 $(SOME_DEST)/$(EXTRANAME)$(shell basename $(TEMP_REAL_MISC)) \
665 $(MANIFEST-MISC)
666
667 # Other images, e.g. driver floppies. Those are simply handled as flavours
668 $(EXTRA): $(TEMP_EXTRA)
669 install -m 644 -D $(TEMP_EXTRA)$(GZIPPED) $@
670 update-manifest $@ $(MANIFEST-EXTRA) $(UDEB_LISTS)
671
672 $(TEMP_EXTRA): $(STAMPS)extra-$(targetstring)-stamp
673 install -d $(shell dirname $@)
674 install -d $(TREE)
675 set -e; case $(INITRD_FS) in \
676 ext2) \
677 genext2fs -d $(TREE) -b $(IMAGE_SIZE) -r 0 $@ ; \
678 $(e2fsck) $@ || true ;; \
679 cramfs) \
680 $(mkcramfs) $@ ;; \
681 *) \
682 echo "Unsupported filesystem type"; \
683 exit 1 ;; \
684 esac
685 $(if $(GZIPPED),gzip -v9f $(TEMP_EXTRA))
686
687 $(STAMPS)extra-$(targetstring)-stamp: $(STAMPS)get_udebs-$(targetstring)-stamp
688 @rm -f $@
689 mkdir -p $(TREE)
690 echo -n > $(TEMP)/diskusage.txt
691 echo -n > $(TEMP_UDEB_LIST)
692
693 set -e; \
694 for file in $(UDEBS); do \
695 cp $(UDEBDIR)/$$file* $(TREE) ; \
696 done
697 for udeb in $(TREE)/*.udeb ; do \
698 if [ -f "$$udeb" ]; then \
699 pkg=`basename $$udeb` ; \
700 usedsize=`du -bs $$udeb | awk '{print $$1}'` ; \
701 usedblocks=`du -s $$udeb | awk '{print $$1}'` ; \
702 usedcount=1 ; \
703 version=`dpkg-deb --info $$udeb | grep '^Version:' | awk '{print $$2}'` ; \
704 arch=`dpkg-deb --info $$udeb | grep Architecture: | awk '{print $$2}'` ; \
705 echo " $$usedsize B - $$usedblocks blocks - $$usedcount files used by pkg $$pkg (version $$version)" >>$(TEMP)/diskusage.txt; \
706 echo "$$pkg $$version $$arch" >> $(TEMP_UDEB_LIST); \
707 fi; \
708 done
709 sort -n < $(TEMP)/diskusage.txt > $(TEMP)/diskusage.txt.new && \
710 mv $(TEMP)/diskusage.txt.new $(TEMP)/diskusage.txt
711 echo $(UDEBS) > $(TREE)/udeb_include
712 makelabel $(DISK_LABEL) $(BUILD_DATE) > $(TREE)/disk.lbl
713 @touch $@
714
715 # Get a list of all the standard priority udebs, excluding kernel stuff.
716 pkg-lists/standard-udebs:
717 get-packages udeb update
718 grep-dctrl -FPriority -e 'required|standard|important' \
719 -sPackage apt.udeb/state/lists/*_Packages* | \
720 grep -v kernel-image | grep -v -- -modules | \
721 cut -d " " -f 2 > $@
722
723 # Get a list of all kernel modules matching the kernel version.
724 pkg-lists/kernel-module-udebs:
725 get-packages udeb update
726 > $@
727 $(foreach VERSION,$(KERNELVERSION), \
728 grep-dctrl -P -e '.*-modules-$(VERSION)-$(KERNEL_FLAVOUR)' \
729 -sPackage apt.udeb/state/lists/*_Packages* | \
730 cut -d " " -f 2 >> $@;)
731
732 # The kernel version changes from build to build, so always regen the file.
733 .PHONY: pkg-lists/kernel-module-udebs
734
735 # Write (floppy) images
736 .PHONY: write_%
737 write_%:
738 @install -d $(STAMPS)
739 @$(submake) _write $(shell $(submake) $(subst write_,validate_,$@))
740
741 .PHONY: _write
742 _write: _build
743 sudo dd if=$(TARGET) of=$(FLOPPYDEV) bs=$(FLOPPY_SIZE)k
744
745 # If you're paranoid (or things are mysteriously breaking..),
746 # you can check the floppy to make sure it wrote properly.
747 .PHONY: checkedwrite_%
748 checkedwrite_%:
749 @install -d $(STAMPS)
750 @$(submake) _checkedwrite $(shell $(submake) $(subst checkedwrite_,validate_,$@))
751
752 .PHONY: _checkedwrite
753 _checkedwrite: _write
754 sudo cmp $(FLOPPYDEV) $(TARGET)
755
756
757 # Generate statistics for all previously built images.
758 .PHONY: stats
759 stats:
760 @echo "Image size stats"
761 @echo
762 $(submake) all_stats
763
764 # For manual invocation we provide a generic stats rule.
765 .PHONY: stats_%
766 stats_%:
767 @$(submake) _stats $(shell $(submake) $(subst stats_,validate_,$@))
768
769 .PHONY: _stats
770 _stats:
771 @[ ! -f $(TEMP)/diskusage.txt ] || $(submake) general-stats
772
773 TOTAL_SZ = $(shell expr $(shell du -bs $(TREE) | cut -f 1) / 1024)
774 LIBS_SZ = $(shell [ -d $(TREE)/lib ] && du -hs --exclude=modules $(TREE)/lib |cut -f 1)
775 MODULES_SZ = $(shell [ -d $(TREE)/lib/modules ] && du -hs $(TREE)/lib/modules |cut -f 1)
776 ifeq ($(TEMP_INITRD),)
777 INITRD_SZ = 0
778 else
779 INITRD_SZ = $(shell expr \( $(shell [ -f $(TEMP_INITRD) ] && du -bs $(TEMP_INITRD) |cut -f 1) + 0 \) / 1024)
780 endif
781 ifeq ($(TEMP_KERNEL),)
782 KERNEL_SZ = 0
783 else
784 KERNEL_SZ = $(shell expr \( $(foreach kern,$(TEMP_KERNEL),$(shell [ -f $(kern) ] && du -bs $(kern) |cut -f 1)) + 0 \) / 1024)
785 endif
786 ifeq ($(TARGET),$(ROOT))
787 # image without a kernel
788 KERNEL_SZ = 0
789 endif
790 .PHONY: general-stats
791 general-stats:
792 @echo "System stats for $(targetstring)"
793 @echo "-------------------------"
794 @printf "Total system size: $(TOTAL_SZ)k"
795 ifneq ($(LIBS_SZ)$(MODULES_SZ),)
796 @echo " ($(LIBS_SZ) libs, $(MODULES_SZ) kernel modules)"
797 else
798 @echo
799 endif
800 @echo "Initrd size: $(INITRD_SZ)k"
801 @echo "Kernel size: $(KERNEL_SZ)k"
802 ifdef FLOPPY_SIZE
803 ifneq ($(INITRD_SZ),0)
804 @echo "Free space: $(shell expr $(FLOPPY_SIZE) - $(KERNEL_SZ) - $(INITRD_SZ))k"
805 else
806 @echo "Free space: $(shell expr $(FLOPPY_SIZE) - $(KERNEL_SZ) - $(TOTAL_SZ))k"
807 endif
808 endif
809 @echo "Disk usage per package:"
810 @sed 's/^/ /' < $(TEMP)/diskusage.txt
811
812 .PHONY: tree_mount
813 tree_mount: $(STAMPS)tree-$(targetstring)-stamp
814 -@sudo /bin/mount -t proc proc $(TREE)/proc
815 -@if [ -e $(TREE)/usr/bin/update-dev ]; then \
816 sudo chroot $(TREE) /usr/bin/update-dev; \
817 else \
818 sudo /bin/mount -t devfs dev $(TREE)/dev; \
819 fi
820
821 .PHONY: tree_umount
822 tree_umount:
823 -@[ ! -L $(TREE)/proc/self ] || [ ! -c $(TREE)/dev/tty ] || sudo /bin/umount $(TREE)/proc
824
825 # For manual invocation, we provide a demo rule. This starts the
826 # d-i demo from the tree in tmp.
827 .PHONY: demo_%
828 demo_%:
829 @set -e; \
830 export SUBARCH=; \
831 export FLAVOUR=; \
832 export MEDIUM=$(subst demo_,,$@); \
833 $(submake) _demo
834
835 .PHONY: _demo
836 _demo: $(TARGET)
837 @$(submake) tree_mount; \
838 [ -f questions.dat ] && cp -f questions.dat $(TREE)/var/lib/cdebconf/ ; \
839 sudo chroot $(TREE) bin/sh -c "export DEBCONF_DEBUG=5 ; /usr/bin/debconf-loadtemplate debian /var/lib/dpkg/info/*.templates; exec /usr/share/debconf/frontend /usr/bin/main-menu" ; \
840 $(submake) tree_umount
841
842 # For a shell into a d-i chroot.
843 .PHONY: shell_%
844 shell_%:
845 @export SUBARCH=; \
846 export FLAVOUR=; \
847 export MEDIUM=$(subst shell_,,$@); \
848 $(submake) _shell
849
850 .PHONY: _shell
851 _shell: $(TREE)
852 @$(submake) tree_mount; \
853 sudo chroot $(TREE) bin/sh; \
854 $(submake) tree_umount
855
856 # For running a d-i image in UML.
857 .PHONY: uml_%
858 uml_%:
859 @set -e; \
860 export SUBARCH=; \
861 export FLAVOUR=; \
862 export MEDIUM=$(subst uml_,,$@); \
863 $(submake) _uml
864
865 .PHONY: _uml
866 _uml: $(TARGET)
867 -linux initrd=$(INITRD) root=/dev/rd/0 ramdisk_size=8192 con=fd:0,fd:1 devfs=mount
868
869 # For running a d-i image in qemu.
870 .PHONY: qemu_%
871 qemu_%:
872 @set -e; \
873 export SUBARCH=; \
874 export FLAVOUR=; \
875 export MEDIUM=$(subst qemu_,,$@); \
876 $(submake) _qemu $(shell $(submake) $(subst qemu_,validate_,$@))
877
878 .PHONY: _qemu
879 _qemu: $(TARGET)
880 @case "$(MEDIA_TYPE)" in \
881 floppy) \
882 $(QEMU) -fda $(BOOT); \
883 ;; \
884 CD-ROM) \
885 $(QEMU) -cdrom $(BOOT); \
886 ;; \
887 *) \
888 echo "Sorry, don't know how to handle media type '$(MEDIA_TYPE)'" >&2; \
889 exit 1; \
890 esac

  ViewVC Help
Powered by ViewVC 1.1.5