From 6cce6e94ef2280c52c00929789c452c02187d641 Mon Sep 17 00:00:00 2001 From: Natanael Copa Date: Thu, 3 Sep 2009 09:41:30 +0000 Subject: alpine.mk: support build iso from non-alpine environments Only thing required is a working apk-tools and mkinitfs --- alpine.mk | 56 +++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 37 insertions(+), 19 deletions(-) diff --git a/alpine.mk b/alpine.mk index c6aa3d3..d12f5ee 100755 --- a/alpine.mk +++ b/alpine.mk @@ -15,7 +15,7 @@ ISO_LINK ?= $(ALPINE_NAME).iso ISO_DIR := $(DESTDIR)/isofs ISO_PKGDIR := $(ISO_DIR)/apks -APK_OPTS := $(addprefix --repository ,$(APK_REPOS)) +APK_OPTS := $(addprefix --repository ,$(APK_REPOS)) --keys-dir /etc/apk/keys find_apk_ver = $(shell apk search $(APK_OPTS) $(1) | sort | uniq) find_apk_file = $(addsuffix .apk,$(call find_apk_ver,$(1))) @@ -29,12 +29,6 @@ KERNEL_PKGNAME ?= linux-$(KERNEL_FLAVOR) KERNEL_NAME := $(KERNEL_FLAVOR) KERNEL_APK := $(call get_apk,$(KERNEL_PKGNAME)) -XTABLES_ADDONS_APK:= $(call get_apk,xtables-addons-$(KERNEL_FLAVOR)) -DAHDI_LINUX_APK := $(call get_apk,dahdi-linux-$(KERNEL_FLAVOR)) -ISCSITARGET_APK := $(call get_apk,iscsitarget-$(KERNEL_FLAVOR)) -MOD_APKS := $(KERNEL_APK) $(XTABLES_ADDONS_APK) $(DAHDI_LINUX_APK) \ - $(ISCSITARGET_APK) - KERNEL := $(word 3,$(subst -, ,$(notdir $(KERNEL_APK))))-$(word 2,$(subst -, ,$(notdir $(KERNEL_APK)))) ALPINEBASELAYOUT_APK := $(call find_apk,alpine-baselayout) @@ -92,15 +86,17 @@ $(APK_FILES): MODLOOP := $(ISO_DIR)/boot/$(KERNEL_NAME).cmg MODLOOP_DIR := $(DESTDIR)/modloop MODLOOP_DIRSTAMP := $(DESTDIR)/stamp.modloop +MODLOOP_PKGS := $(KERNEL_PKGNAME) $(addsuffix -$(KERNEL_FLAVOR), dahdi-linux iscsitarget xtables-addons) modloop: $(MODLOOP) -$(MODLOOP_DIRSTAMP): $(MOD_APKS) +$(MODLOOP_DIRSTAMP): + @echo "==> modloop: Unpacking kernel modules"; @rm -rf $(MODLOOP_DIR) @mkdir -p $(MODLOOP_DIR)/lib/modules/ - @for i in $(MOD_APKS); do \ - echo "==> modloop: prepare modules $$i";\ - tar -C $(MODLOOP_DIR) -xzf "$$i"; \ + @for i in $(MODLOOP_PKGS); do \ + apk fetch $(APK_OPTS) --stdout $$i \ + | tar -C $(MODLOOP_DIR) -xz; \ done @rm -rf $(addprefix $(MODLOOP_DIR)/lib/modules/*/, source build) @depmod $(KERNEL) -b $(MODLOOP_DIR) @@ -111,6 +107,9 @@ $(MODLOOP): $(MODLOOP_DIRSTAMP) @mkdir -p $(dir $(MODLOOP)) @mkcramfs $(MODLOOP_DIR)/lib $(MODLOOP) +clean-modloop: + @rm -rf $(MODLOOP_DIR) $(MODLOOP_DIRSTAMP) $(MODLOOP) + # # Initramfs rules # @@ -118,12 +117,30 @@ $(MODLOOP): $(MODLOOP_DIRSTAMP) INITFS := $(ISO_DIR)/boot/$(KERNEL_NAME).gz INITFS_DIR := $(DESTDIR)/initfs +INITFS_TMP := $(DESTDIR)/tmp.initfs +INITFS_DIRSTAMP := $(DESTDIR)/stamp.initfs INITFS_FEATURES := ata base bootchart cdrom cramfs ext3 ide floppy raid scsi usb +INITFS_PKGS := $(MODLOOP_PKGS) alpine-base initfs: $(INITFS) -$(INITFS): $(shell mkinitfs -F "$(INITFS_FEATURES)" -l $(KERNEL)) - @mkinitfs -F "$(INITFS_FEATURES)" \ - -t $(INITFS_DIR) -o $@ $(KERNEL) + +$(INITFS_DIRSTAMP): + @rm -rf $(INITFS_DIR) $(INITFS_TMP) + @mkdir -p $(INITFS_DIR) $(INITFS_TMP) + @for i in `apk fetch $(APK_OPTS) --simulate -R $(INITFS_PKGS) 2>&1\ + | sed 's:^Downloading ::; s:-[0-9].*::' | sort | uniq`; do \ + apk fetch $(APK_OPTS) --stdout $$i \ + | tar -C $(INITFS_DIR) -zx || exit 1; \ + done + @touch $@ + +#$(INITFS): $(shell mkinitfs -F "$(INITFS_FEATURES)" -l $(KERNEL)) +$(INITFS): $(INITFS_DIRSTAMP) + @mkinitfs -F "$(INITFS_FEATURES)" -t $(INITFS_TMP) \ + -b $(INITFS_DIR) -o $@ $(KERNEL) + +clean-initfs: + @rm -rf $(INITFS) $(INITFS_DIRSTAMP) $(INITFS_DIR) # # Vserver template rules @@ -137,7 +154,8 @@ vstemplate: $(VSTEMPLATE) $(VSTEMPLATE): @$(SUDO) rm -rf "$(VSTEMPLATE_DIR)" @$(SUDO) mkdir -p "$(VSTEMPLATE_DIR)" - @$(SUDO) apk add --initdb --root $(VSTEMPLATE_DIR) alpine-baselayout openrc busybox + @$(SUDO) apk add $(APK_OPTS) --initdb --root $(VSTEMPLATE_DIR) \ + alpine-base @cd $(VSTEMPLATE_DIR) && $(SUDO) tar -jcf $@ * # @@ -188,12 +206,12 @@ $(ISO_PKGDIR)/APKINDEX.tar.gz: $(APK_FILES) @apk index -o $@ $(ISO_PKGDIR)/*.apk @abuild-sign $@ -$(ISO_KERNEL): $(KERNEL_APK) +$(ISO_KERNEL): @echo "==> iso: install kernel $(KERNEL)" @mkdir -p $(dir $(ISO_KERNEL)) - @tar -C $(ISO_DIR) -xzf $(KERNEL_APK) boot + @apk fetch $(APK_OPTS) --stdout $(KERNEL_PKGNAME) \ + | tar -C $(ISO_DIR) -xz boot @rm -rf $(ISO_DIR)/.[A-Z]* $(ISO_DIR)/.[a-z]* $(ISO_DIR)/lib - @touch $(ISO_KERNEL) $(ISOFS_DIRSTAMP): $(MODLOOP) $(INITFS) $(ISOLINUX_CFG) $(ISOLINUX_BIN) $(ISO_KERNEL) $(ISO_REPOS_DIRSTAMP) $(SYSLINUX_CFG) @echo "$(ALPINE_NAME)-$(ALPINE_RELEASE) $(BUILD_DATE)" \ @@ -237,7 +255,7 @@ MBRPATH := /usr/share/syslinux/mbr.bin $(USBIMG): $(ISOFS_DIRSTAMP) @echo "==> Generating $@" @mformat -C -v 'ALPINE' -c 16 -h 64 -n 32 -i $(USBIMG) \ - -t $$(($(USBIMG_SIZE) / 1200)) :: + -t $$(($(USBIMG_SIZE) / 1000)) :: @syslinux $(USBIMG) @mcopy -i $(USBIMG) $(ISO_DIR)/* $(ISO_DIR)/.[a-z]* :: @mcopy -i $(USBIMG) /dev/zero ::/zero 2>/dev/null || true -- cgit v1.2.3