summaryrefslogtreecommitdiff
path: root/make
diff options
context:
space:
mode:
authorAlex Xu (Hello71) <alex_y_xu@yahoo.ca>2020-11-11 07:55:00 -0500
committerAlex Xu (Hello71) <alex_y_xu@yahoo.ca>2020-11-11 08:09:28 -0500
commit3182b56e35e1a07c920ebded54fc55686ced99bf (patch)
tree33ed00cb3df1c00680dd1821034b47a5583823ef /make
parent9ac1d14079b3bd400a78d650d43fb8bad1d1e7a3 (diff)
downloadminitramfs-3182b56e35e1a07c920ebded54fc55686ced99bf.tar.xz
minitramfs-3182b56e35e1a07c920ebded54fc55686ced99bf.zip
revamp module support, other refactoring
Diffstat (limited to 'make')
-rwxr-xr-xmake61
1 files changed, 6 insertions, 55 deletions
diff --git a/make b/make
index 9ce479c..461043f 100755
--- a/make
+++ b/make
@@ -1,9 +1,5 @@
#!/bin/sh
-#[ -n "$compressor" ] || compressor="lz4 --best --favor-decSpeed -l"
-[ -n "$compressor" ] || compressor="zstd -19 -c -T0"
-#[ -n "$compressor" ] || compressor="xz -c --check=crc32 --x86 --lzma2=preset=9e"
-
toppid=$$
die() {
fmt=$1
@@ -21,77 +17,32 @@ gen_cmd() {
# ignore builtins
[ "$cmd" != "$cmdp" ] || return
printf 'file %s %s 0755 0 0\n' "$cmdp" "$cmdp"
- ldd "$cmdp" | grep / | while read line; do
- tmp=${line% *}
- lib=/${tmp#*/}
- # don't bother with ld.so.conf
- printf 'file /lib64/%s %s 0755 0 0\n' "${lib##*/}" "$lib"
- done
+ ldd "$cmdp" | awk '/\// { if ($1~/^\//) file=$1; else file=$3; print "file " file " " file " 0755 0 0" }'
}
# generate the main file list
gen_cpio_list() {
sed -e '/^#/d' cpio_list.txt
- while read insmod mod args; do
- if [ "$insmod" = insmod ]; then
- printf 'file %s %s 0644 0 0\n' "$mod" "$mod"
- fi
- done < modules.sh
+ tr ' ' '\n' < modules.dep | sed -e "s/://;s:.*:file /lib/modules/$KERNVER/& /lib/modules/$KERNVER/& 0644 0 0:"
gen_cmd e2fsck
gen_cmd dropbear
- # cryptsetup argon2 uses pthread_cancel, glibc dlopens libgcc_s.so.1
- # ldd will find the correct libgcc_s.so.1 based on ld.so.conf
- export LD_PRELOAD=libgcc_s.so.1
gen_cmd cryptsetup
- # LD_PRELOAD unset at end of subshell
+ ldconfig -p | awk '$1 == "libgcc_s.so.1" { print "file " $4 " " $4 " 0755 0 0" }'
}
# filter the list and insert parent directory entries
gen_dir_ents() {
- while read type target args; do
- # re-print the original entry
- printf '%s %s %s\n' "$type" "$target" "$args"
- # print the necessary directory entries. duplicates will be
- # filtered by sort -u later
- while [ "${target%/*}" != '' ]; do
- target=${target%/*}
- printf 'dir %s 0755 0 0\n' "$target"
- done
- done
+ awk '{print; while (sub("/[^/]*$", "", $2) && $2) print "dir " $2 " 0755 0 0"; }'
}
# filter the list and generate the make dependency file
gen_depfile() {
deps='cpio_list.txt make'
- while read type target source args; do
- # re-print the original entry
- printf '%s %s %s %s\n' "$type" "$target" "$source" "$args"
- # accumulate the dependencies in a list to avoid make bugs.
- # there will be no duplicates since the list was previously sorted
- if [ "$type" != file ]; then
- continue
- fi
- case "$source" in
- /dev/*) continue
- esac
- deps="$deps $source"
- # avoid "No rule to make target" when deps disappear
- echo "$source:" >&3
- done
- echo "initramfs.img: $deps" >&3
+ awk -v d=/dev/fd/3 '$1 == "file" {print; deps=deps " " $3; print $3 ":" > d; } END { print "initramfs.img:" deps > d }'
}
if ! [ -e cpio_list.txt ] || ! [ -e gen_init_cpio ]; then
cd "${0%/*}"
fi
-trap 'test -L initramfs.img || test -f initramfs.img && rm -f initramfs.img; exit 1' HUP INT QUIT TERM EXIT
-
-gen_cpio_list | \
-gen_dir_ents | \
-sort -u | \
-gen_depfile 3>initramfs.d | \
-./gen_init_cpio -t 0 - | \
-$compressor > initramfs.img
-
-trap '' EXIT
+gen_cpio_list | gen_dir_ents | sort -u | gen_depfile 3>initramfs.d | ./gen_init_cpio -t 0 - | $COMPRESSOR > initramfs.img