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