[elbe-devel] [PATCH 1/3] init Makefile.mako: Add COW logic for initvm
Olivier Dion
dion at linutronix.de
Tue Jun 9 05:18:29 CEST 2020
Rewrote the rules and dependencies and added support for COW images.
Also moved the generation of the initvm-tree into Python.
The 'all' rule depends on the initvm image 'initvm.img'. This image
depends on the base image 'initvm-base.img' which in turn depends on
'initrd-preseeded.gz'.
The latter is the merge of the base initrd 'initrd.gz' and the
'initrd-tree' generated in Python.
Signed-off-by: Olivier Dion <dion at linutronix.de>
---
elbepack/init/Makefile.mako | 89 ++++++++++++++++++-------------------
1 file changed, 44 insertions(+), 45 deletions(-)
diff --git a/elbepack/init/Makefile.mako b/elbepack/init/Makefile.mako
index 87ec10ad..ee41fcf0 100644
--- a/elbepack/init/Makefile.mako
+++ b/elbepack/init/Makefile.mako
@@ -49,55 +49,42 @@ interpreter_v_minor = int(prj.text('interpreterversion',
key='interpreterversion').split('.')[1])
fwd = ""
if prj.has("portforwarding"):
- for f in prj.node("portforwarding"):
- fwd += ",hostfwd=%s::%s-:%s" % (f.text("proto"),
- f.text("host"),
- f.text("buildenv"))
+ for f in prj.node("portforwarding"):
+ fwd += ",hostfwd=%s::%s-:%s" % (f.text("proto"),
+ f.text("host"),
+ f.text("buildenv"))
%>
-all: .stamps/stamp-install-initial-image
-
-.elbe-gen/initrd-preseeded.gz: .elbe-in/*
- rm -rf tmp-tree
- mkdir tmp-tree
- cp .elbe-in/*.cfg tmp-tree/
- -cp .elbe-in/apt.conf tmp-tree/
- mkdir -p tmp-tree/etc/apt
- -cp .elbe-in/apt.conf tmp-tree/etc/apt
- mkdir -p tmp-tree/usr/lib/post-base-installer.d
- cp .elbe-in/init-elbe.sh tmp-tree/
- cp .elbe-in/source.xml tmp-tree/
- cp .elbe-in/initrd-cdrom.gz tmp-tree/
- cp .elbe-in/vmlinuz tmp-tree/
-% if opt.devel:
- cp .elbe-in/elbe-devel.tar.bz2 tmp-tree/
-% endif
- mkdir -p tmp-tree/usr/share/keyrings
- -cp .elbe-in/*.gpg tmp-tree/usr/share/keyrings
- mkdir -p tmp-tree/usr/lib/base-installer.d
- echo 'mkdir -p /target/etc/apt/trusted.gpg.d/; cp /usr/share/keyrings/elbe-keyring.gpg /target/etc/apt/trusted.gpg.d/' > tmp-tree/usr/lib/base-installer.d/10copyelbekeyring
- chmod 755 tmp-tree/usr/lib/base-installer.d/*
- mkdir -p .elbe-gen
- gzip -cd .elbe-in/initrd.gz >.elbe-gen/initrd-preseeded
- cd tmp-tree && find . | cpio -H newc -o --append -F ../.elbe-gen/initrd-preseeded
- gzip -9f .elbe-gen/initrd-preseeded
- rm -rf tmp-tree
-.stamps/stamp-create-buildenv-img buildenv.img: .elbe-gen/initrd-preseeded.gz
- qemu-img create -f ${img} buildenv.img ${imgsize}
- mkdir -p .stamps
- touch .stamps/stamp-create-buildenv-img
+GEN=.elbe-gen
+IN=.elbe-in
+
+INITRD=$(GEN)/initrd-preseeded.gz
+VMLINUZ=$(IN)/vmlinuz
+
+INITRD_FILES=$(shell find $(IN)/initrd-tree -type f)
+
+BASE=initvm-base.img
+INITVM=initvm.img
+
+CLEAN=$(BASE) $(INITVM) $(GEN)
-.stamps/stamp-install-initial-image: .stamps/stamp-create-buildenv-img
+all: $(INITVM)
+
+$(INITVM): $(BASE)
+ qemu-img create -f ${img} -F ${img} -b $< $@
+
+$(BASE): $(INITRD)
+ qemu-img create -f ${img} $@ ${imgsize}
@ echo $(INTERPRETER)
@ $(INTERPRETER) -M $(MACHINE) \
-device virtio-rng-pci \
- -drive file=buildenv.img,if=$(HD_TYPE),bus=1,unit=0 \
+ -drive file=$@,if=$(HD_TYPE),bus=1,unit=0 \
% if prj.has("mirror/cdrom"):
-drive file=${prj.text("mirror/cdrom")},if=$(CDROM_TYPE),media=cdrom,bus=1,unit=0 \
% endif
- -kernel .elbe-in/vmlinuz \
- -initrd .elbe-gen/initrd-preseeded.gz \
+ -kernel $(VMLINUZ) \
+ -initrd $(INITRD) \
-append 'root=/dev/$(HD_NAME) debconf_priority=critical console=$(CONSOLE) DEBIAN_FRONTEND=text' \
-no-reboot \
-nographic \
@@ -106,6 +93,8 @@ all: .stamps/stamp-install-initial-image
-m $(MEMSIZE) \
-smp $(SMP) \
-usb \
+ -enable-kvm \
+ -cpu host \
|| ( echo; \
echo "------------------------------------------------------------------"; \
echo "kvm failed to start"; \
@@ -117,14 +106,20 @@ all: .stamps/stamp-install-initial-image
false \
)
- mkdir -p .stamps
- touch .stamps/stamp-install-initial-image
+$(INITRD): $(INITRD_FILES)
+ mkdir -p $(IN)/initrd-tree/usr/lib/base-installer.d
+ echo 'mkdir -p /target/etc/apt/trusted.gpg.d/; cp /usr/share/keyrings/elbe-keyring.gpg /target/etc/apt/trusted.gpg.d/' > $(IN)/initrd-tree/usr/lib/base-installer.d/10copyelbekeyring
+ chmod 755 $(IN)/initrd-tree/usr/lib/base-installer.d/*
+ mkdir -p .elbe-gen
+ gzip -cd $(IN)/initrd.gz > $(GEN)/initrd-preseeded
+ cd $(IN)/initrd-tree && find . | cpio -H newc -o --append -F ../../$(GEN)/initrd-preseeded
+ gzip -9f $(GEN)/initrd-preseeded
run:
$(INTERPRETER) -M $(MACHINE) \
-device virtio-rng-pci \
-device virtio-net-pci,netdev=user.0 \
- -drive file=buildenv.img,if=$(HD_TYPE),bus=1,unit=0 \
+ -drive file=$(INITVM),if=$(HD_TYPE),bus=1,unit=0 \
-no-reboot \
% if ((interpreter_v_major == 2) and (interpreter_v_minor >= 8)) or (interpreter_v_major > 2):
-netdev user,ipv4,id=user.0${fwd} \
@@ -132,6 +127,7 @@ run:
-netdev user,id=user.0${fwd} \
% endif
% if opt.nesting:
+ -enable-kvm \
-cpu host \
% endif
-m $(MEMSIZE) \
@@ -142,7 +138,7 @@ run-con:
$(INTERPRETER) -M $(MACHINE) \
-device virtio-rng-pci \
-device virtio-net-pci,netdev=user.0 \
- -drive file=buildenv.img,if=$(HD_TYPE),bus=1,unit=0 \
+ -drive file=$(INITVM),if=$(HD_TYPE),bus=1,unit=0 \
-no-reboot \
% if ((interpreter_v_major == 2) and (interpreter_v_minor >= 8)) or (interpreter_v_major > 2):
-netdev user,ipv4,id=user.0${fwd} \
@@ -150,6 +146,7 @@ run-con:
-netdev user,id=user.0${fwd} \
% endif
% if opt.nesting:
+ -enable-kvm \
-cpu host \
% endif
-m $(MEMSIZE) \
@@ -158,7 +155,9 @@ run-con:
-smp $(SMP)
clean:
- rm -fr .stamps/stamp* buildenv.img .elbe-vm .elbe-gen
+ rm -fr $(CLEAN)
distclean: clean
- echo clean
+ @echo clean
+
+.PHONY: all clean distclean run run-con
--
2.27.0
More information about the elbe-devel
mailing list