fe58c46ead
The existing implementation would handle kernel differences just fine but a bit too automatically: if it sees xz support, that's what will end up being used (and if there's -Xbcj binary compression filter available for the target platform, it will be applied unequivocally either). It's perfectly suitabe for getting fine-tuned release images but is also a bit too resource-consuming while developing the image configuration which has no business with its compression. The one and only knob is SQUASHFS (see doc/variables.txt); to give an idea of the differences, here are some numbers for a mostly-binary (43% as per 99-elf-stats) webkiosk livecd and a rather less so (18%) flightgear one on a dual quad-core X5570 node (each mksquashfs run used up all the cores): SQUASHFS | live-webkiosk.iso | live-flightgear.iso ---------+-------------------+--------------------- fast | 3:30 / 130M | 5:11 / 852M normal * | 3:37 / 100M | 5:35 / 688M tight | 3:50 / 98M | 6:47 / 683M Thus if the knob isn't fiddled with, the defaults will allow for a reasonably fast build of a pretty slim image; if one is building a release or if a particular image is very sensitive being close to the media capacity then just add SQUASHFS=tight and see it a percent or two down on size. Please note that lzo/gzip-compressed images are also quicker to uncompress thus further helping with test iterations. Thanks to led@ and glebfm@ for helpful hints and questions.
62 lines
1.9 KiB
Makefile
62 lines
1.9 KiB
Makefile
# step 4: build stage1 subprofile (installer bootstrap)
|
|
|
|
ifndef GLOBAL_BUILDDIR
|
|
$(error GLOBAL_BUILDDIR not defined)
|
|
endif
|
|
|
|
include $(GLOBAL_BUILDDIR)/distcfg.mk
|
|
include $(GLOBAL_BUILDDIR)/functions.mk
|
|
include $(MKIMAGE_PREFIX)/config.mk
|
|
|
|
ifndef BOOTLOADER
|
|
$(error BOOTLOADER not defined)
|
|
endif
|
|
GLOBAL_BOOTLOADER := $(BOOTLOADER)
|
|
|
|
MKI_PACK_RESULTS = data
|
|
PROPAGATOR_VERSION = ALT Linux
|
|
PROPAGATOR_MAR_MODULES = ./modules
|
|
PROPAGATOR_INITFS = ./initfs
|
|
COPY_TREE = ./files
|
|
|
|
include $(MKIMAGE_PREFIX)/targets.mk
|
|
|
|
# here we try and come up with the installer kernel/modules, if any;
|
|
# only a single kernel might be needed (STAGE1_KFLAVOUR sets explicitly);
|
|
# kernel image copied from instrumental chroot into .work/syslinux/alt0/
|
|
|
|
STAGE1_KFLAVOUR ?= $(lastword $(KFLAVOURS))
|
|
|
|
# propagator needed iff stage1 kernel installed (not for e.g. syslinux.iso)
|
|
ifneq "$(STAGE1_KFLAVOUR)" ""
|
|
BUILD_PROPAGATOR = build-propagator
|
|
INFO_STAGE1_KFLAVOUR := $(STAGE1_KFLAVOUR)
|
|
CHROOT_PACKAGES_REGEXP := $(call kpackages, \
|
|
$(STAGE1_KMODULES_REGEXP),$(STAGE1_KFLAVOUR))
|
|
endif
|
|
|
|
CHROOT_PACKAGES_REGEXP += $(STAGE1_PACKAGES_REGEXP)
|
|
CHROOT_PACKAGES = $(STAGE1_PACKAGES) $(SYSTEM_PACKAGES)
|
|
|
|
# pass for use/stage2
|
|
GLOBAL_SQUASHFS := $(SQUASHFS)
|
|
|
|
# scripts prepare bootloader configuration, too
|
|
# NB: we pass tested squashfs options for ../stage2/Makefile to include
|
|
all: | debug prepare-workdir copy-tree run-scripts $(BUILD_PROPAGATOR) \
|
|
copy-$(BOOTLOADER) $(COPY_SQUASHCFG) pack-image $(GLOBAL_CLEAN_WORKDIR)
|
|
@if [ -s $(OUTDIR)/squashcfg.mk ]; then \
|
|
cp $(OUTDIR)/squashcfg.mk $(GLOBAL_BUILDDIR)/; \
|
|
fi
|
|
|
|
debug:
|
|
@if [ -n "$(GLOBAL_VERBOSE)" ]; then \
|
|
echo "** BRANDING: $(BRANDING)"; \
|
|
echo "** IMAGE_INIT_LIST: $(IMAGE_INIT_LIST)"; \
|
|
echo "** STAGE1_PACKAGES: $(STAGE1_PACKAGES)"; \
|
|
echo "** STAGE1_PACKAGES_REGEXP: $(STAGE1_PACKAGES_REGEXP)"; \
|
|
echo "** CHROOT_PACKAGES: $(CHROOT_PACKAGES)"; \
|
|
echo "** CHROOT_PACKAGES_REGEXP: $(CHROOT_PACKAGES_REGEXP)"; \
|
|
echo "** BOOTLOADER: $(BOOTLOADER)"; \
|
|
fi
|