summaryrefslogtreecommitdiff
path: root/experiments/03_20251130_leaving_initramfs/Makefile
blob: c55cc00a6d0c7dbfceffe09eec16b567de61fcf7 (plain)
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
special_dirs := proc sys
_special_dirs := $(patsubst %,initramfs/%,$(special_dirs))

pkgs := $(wildcard pkgs/*.deb)
pkgs_dirs := $(patsubst %.deb,%,$(pkgs))
pkgs_content := $(patsubst %.deb,%/data.tar.xz,$(pkgs))
pkgs_unpacked := $(patsubst pkgs/%/data.tar.xz,initramfs/%.unpack,$(pkgs_content))

all : initrd.cpio.gz

initrd.cpio.gz : clean_initramfs initramfs unpack $(_special_dirs) links initramfs/init
	cd initramfs && find . | cpio -o -H newc | gzip > ../initrd.cpio.gz

initramfs :
	mkdir initramfs

initramfs/init : init
	cp $< $@
	chmod 0755 $@

unpack : $(pkgs_unpacked)

initramfs/%.unpack : pkgs/%/data.tar.xz initramfs
	tar xf $< -C initramfs

$(_special_dirs) :
	mkdir -p $@

%/data.tar.xz : %.deb %
	ar x $< --output "$(@D)"

pkgs/% : pkgs/%.deb
	mkdir $@

links :
	ln -s usr/bin    	initramfs/bin
	ln -s usr/sbin   	initramfs/sbin
	ln -s usr/lib    	initramfs/lib
	ln -s usr/lib64  	initramfs/lib64
#	ln -s bin/sh     	initramfs/init
	ln -s /proc/mounts	initramfs/etc/mtab

clean_initramfs :
	rm -rf initramfs

clean : clean_initramfs
	rm -rf $(pkgs_dirs)
	rm initrd.cpio.gz

.PHONY : all clean clean_initramfs unpack links
.SECONDARY :
.DEFAULT : all