diff options
author | Alex Xu (Hello71) <alex_y_xu@yahoo.ca> | 2020-11-11 07:55:00 -0500 |
---|---|---|
committer | Alex Xu (Hello71) <alex_y_xu@yahoo.ca> | 2020-11-11 08:09:28 -0500 |
commit | 3182b56e35e1a07c920ebded54fc55686ced99bf (patch) | |
tree | 33ed00cb3df1c00680dd1821034b47a5583823ef /make | |
parent | 9ac1d14079b3bd400a78d650d43fb8bad1d1e7a3 (diff) | |
download | minitramfs-3182b56e35e1a07c920ebded54fc55686ced99bf.tar.xz minitramfs-3182b56e35e1a07c920ebded54fc55686ced99bf.zip |
revamp module support, other refactoring
Diffstat (limited to 'make')
-rwxr-xr-x | make | 61 |
1 files changed, 6 insertions, 55 deletions
@@ -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 |