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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
special_dirs := proc sys
_special_dirs := $(patsubst %,initramfs/%,$(special_dirs))
pkgs := $(wildcard pkgs\.base/*.deb)
pkgs_dirs := $(patsubst %.deb,%,$(pkgs))
pkgs_content := $(patsubst %.deb,%/data.tar.xz,$(pkgs))
pkgs_unpacked := $(patsubst pkgs.base/%/data.tar.xz,initramfs/%.unpack,$(pkgs_content))
pkgs_sl := $(wildcard pkgs\.sl/*.deb)
pkgs_sl_dirs := $(patsubst %.deb,%,$(pkgs_sl))
pkgs_sl_content := $(patsubst %.deb,%/data.tar.xz,$(pkgs_sl))
pkgs_sl_unpacked := $(patsubst pkgs.sl/%/data.tar.xz,pkg_store/%.unpack,$(pkgs_sl_content))
all : initrd.cpio.gz store
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 $@
pkg_store :
mkdir $@
store : pkg_store $(pkgs_sl_unpacked)
unpack : $(pkgs_unpacked)
# echo "========================================"
# echo "$(pkgs)"
# echo "$(pkgs_dirs)"
# echo "$(pkgs_content)"
# echo "$(pkgs_unpacked)"
# echo "========================================"
initramfs/%.unpack : pkgs.base/%/data.tar.xz initramfs
tar xf $< -C initramfs
pkg_store/%.unpack : pkgs.sl/%/data.tar.xz pkg_store
mkdir -p pkg_store/$(*F)
tar xf $< -C pkg_store/$(*F)
$(_special_dirs) :
mkdir -p $@
%/data.tar.xz : %.deb %
ar x $< --output "$(@D)"
pkgs.base/% : pkgs.base/%.deb
mkdir $@
pkgs.sl/% : pkgs.sl/%.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 -rf $(pkgs_sl_dirs)
rm initrd.cpio.gz
.PHONY : all clean clean_initramfs unpack links store
.SECONDARY :
.DEFAULT : all
|