* Many small bugfixes.
* ~100 times speedup on gathering files for the initramfs.
* Separated code/data so that directories to include in the
initramfs is no longer hardcoded in the binary but included
in features.d/base.files.
* Change of syntax in features.d/* - directories whose name end
in / will have the whole tree rooted at that path included,
directories where the name does NOT end in / will cause only
that directory to be included and nothing below that path.
* Some cleanup, quoting fixes and similar.
---
..._speedup_data-code-sep_new-syntax_cleanup.patch | 666 +++++++++++++++++++++
main/mkinitfs/APKBUILD | 14 +-
main/mkinitfs/mkinitfs.pre-upgrade | 2 +-
main/mkinitfs/mkinitfs.trigger | 18 +-
4 files changed, 685 insertions(+), 15 deletions(-)
create mode 100644 main/mkinitfs/0003-mkinitfs-bugfixes_speedup_data-code-sep_new-syntax_cleanup.patch
diff --git a/main/mkinitfs/0003-mkinitfs-bugfixes_speedup_data-code-sep_new-syntax_cleanup.patch b/main/mkinitfs/0003-mkinitfs-bugfixes_speedup_data-code-sep_new-syntax_cleanup.patch
new file mode 100644
index 0000000..62de46b
--- /dev/null
+++ b/main/mkinitfs/0003-mkinitfs-bugfixes_speedup_data-code-sep_new-syntax_cleanup.patch
_at_@ -0,0 +1,666 @@
+diff -U3 -r mkinitfs-3.0.5/features.d/base.files mkinitfs-3.0.5-new/features.d/base.files
+--- mkinitfs-3.0.5/features.d/base.files 2016-06-15 12:57:27.000000000 +0200
++++ mkinitfs-3.0.5-new/features.d/base.files 2016-10-28 13:39:54.000000000 +0200
+_at_@ -1,3 +1,16 @@
++/bin
++/sbin
++/dev
++/proc
++/sys
++/run
++/tmp
++/etc/apk
++/lib/modules
++/media/floppy
++/media/cdrom
++/media/usb
++/mdev/
+ /bin/busybox
+ /bin/sh
+ /lib/mdev
+diff -U3 -r mkinitfs-3.0.5/features.d/base.modules mkinitfs-3.0.5-new/features.d/base.modules
+--- mkinitfs-3.0.5/features.d/base.modules 2016-06-15 12:57:27.000000000 +0200
++++ mkinitfs-3.0.5-new/features.d/base.modules 2016-10-28 13:43:42.000000000 +0200
+_at_@ -1,2 +1,2 @@
+ kernel/drivers/block/loop.ko
+-kernel/fs/overlayfs
++kernel/fs/overlayfs/
+diff -U3 -r mkinitfs-3.0.5/features.d/btrfs.modules mkinitfs-3.0.5-new/features.d/btrfs.modules
+--- mkinitfs-3.0.5/features.d/btrfs.modules 2016-06-15 12:57:27.000000000 +0200
++++ mkinitfs-3.0.5-new/features.d/btrfs.modules 2016-10-28 13:43:54.000000000 +0200
+_at_@ -1,3 +1,3 @@
+ kernel/arch/*/crypto/crc32*
+ kernel/crypto/crc32*
+-kernel/fs/btrfs
++kernel/fs/btrfs/
+diff -U3 -r mkinitfs-3.0.5/features.d/cdrom.modules mkinitfs-3.0.5-new/features.d/cdrom.modules
+--- mkinitfs-3.0.5/features.d/cdrom.modules 2016-06-15 12:57:27.000000000 +0200
++++ mkinitfs-3.0.5-new/features.d/cdrom.modules 2016-10-28 13:44:12.000000000 +0200
+_at_@ -1,2 +1,2 @@
+-kernel/drivers/cdrom
+-kernel/fs/isofs
++kernel/drivers/cdrom/
++kernel/fs/isofs/
+diff -U3 -r mkinitfs-3.0.5/features.d/cramfs.modules mkinitfs-3.0.5-new/features.d/cramfs.modules
+--- mkinitfs-3.0.5/features.d/cramfs.modules 2016-06-15 12:57:27.000000000 +0200
++++ mkinitfs-3.0.5-new/features.d/cramfs.modules 2016-10-28 13:44:18.000000000 +0200
+_at_@ -1 +1 @@
+-kernel/fs/cramfs
++kernel/fs/cramfs/
+diff -U3 -r mkinitfs-3.0.5/features.d/ext2.modules mkinitfs-3.0.5-new/features.d/ext2.modules
+--- mkinitfs-3.0.5/features.d/ext2.modules 2016-06-15 12:57:27.000000000 +0200
++++ mkinitfs-3.0.5-new/features.d/ext2.modules 2016-10-28 13:44:42.000000000 +0200
+_at_@ -1 +1 @@
+-kernel/fs/ext2
++kernel/fs/ext2/
+diff -U3 -r mkinitfs-3.0.5/features.d/ext3.modules mkinitfs-3.0.5-new/features.d/ext3.modules
+--- mkinitfs-3.0.5/features.d/ext3.modules 2016-06-15 12:57:27.000000000 +0200
++++ mkinitfs-3.0.5-new/features.d/ext3.modules 2016-10-28 13:44:50.000000000 +0200
+_at_@ -1 +1 @@
+-kernel/fs/ext3
++kernel/fs/ext3/
+diff -U3 -r mkinitfs-3.0.5/features.d/ext4.modules mkinitfs-3.0.5-new/features.d/ext4.modules
+--- mkinitfs-3.0.5/features.d/ext4.modules 2016-06-15 12:57:27.000000000 +0200
++++ mkinitfs-3.0.5-new/features.d/ext4.modules 2016-10-28 13:44:54.000000000 +0200
+_at_@ -1 +1 @@
+-kernel/fs/ext4
++kernel/fs/ext4/
+diff -U3 -r mkinitfs-3.0.5/features.d/f2fs.modules mkinitfs-3.0.5-new/features.d/f2fs.modules
+--- mkinitfs-3.0.5/features.d/f2fs.modules 2016-06-15 12:57:27.000000000 +0200
++++ mkinitfs-3.0.5-new/features.d/f2fs.modules 2016-10-28 13:45:43.000000000 +0200
+_at_@ -1 +1 @@
+-kernel/fs/f2fs
++kernel/fs/f2fs/
+diff -U3 -r mkinitfs-3.0.5/features.d/gfs2.modules mkinitfs-3.0.5-new/features.d/gfs2.modules
+--- mkinitfs-3.0.5/features.d/gfs2.modules 2016-06-15 12:57:27.000000000 +0200
++++ mkinitfs-3.0.5-new/features.d/gfs2.modules 2016-10-28 13:45:58.000000000 +0200
+_at_@ -1 +1 @@
+-kernel/fs/gfs2
++kernel/fs/gfs2/
+diff -U3 -r mkinitfs-3.0.5/features.d/jfs.modules mkinitfs-3.0.5-new/features.d/jfs.modules
+--- mkinitfs-3.0.5/features.d/jfs.modules 2016-06-15 12:57:27.000000000 +0200
++++ mkinitfs-3.0.5-new/features.d/jfs.modules 2016-10-28 13:46:04.000000000 +0200
+_at_@ -1 +1 @@
+-kernel/fs/jfs
++kernel/fs/jfs/
+diff -U3 -r mkinitfs-3.0.5/features.d/kms.modules mkinitfs-3.0.5-new/features.d/kms.modules
+--- mkinitfs-3.0.5/features.d/kms.modules 2016-06-15 12:57:27.000000000 +0200
++++ mkinitfs-3.0.5-new/features.d/kms.modules 2016-10-28 13:46:30.000000000 +0200
+_at_@ -1,5 +1,5 @@
+-kernel/drivers/char/agp
+-kernel/drivers/gpu
+-kernel/drivers/i2c
+-kernel/drivers/video
++kernel/drivers/char/agp/
++kernel/drivers/gpu/
++kernel/drivers/i2c/
++kernel/drivers/video/
+ kernel/arch/x86/video/fbdev.ko
+diff -U3 -r mkinitfs-3.0.5/features.d/mmc.modules mkinitfs-3.0.5-new/features.d/mmc.modules
+--- mkinitfs-3.0.5/features.d/mmc.modules 2016-06-15 12:57:27.000000000 +0200
++++ mkinitfs-3.0.5-new/features.d/mmc.modules 2016-10-28 13:47:25.000000000 +0200
+_at_@ -1 +1 @@
+-kernel/drivers/mmc
++kernel/drivers/mmc/
+diff -U3 -r mkinitfs-3.0.5/features.d/network.modules mkinitfs-3.0.5-new/features.d/network.modules
+--- mkinitfs-3.0.5/features.d/network.modules 2016-06-15 12:57:27.000000000 +0200
++++ mkinitfs-3.0.5-new/features.d/network.modules 2016-10-28 13:47:34.000000000 +0200
+_at_@ -1,2 +1,2 @@
+-kernel/drivers/net/ethernet
++kernel/drivers/net/ethernet/
+ kernel/net/packet/af_packet.ko
+diff -U3 -r mkinitfs-3.0.5/features.d/ocfs2.modules mkinitfs-3.0.5-new/features.d/ocfs2.modules
+--- mkinitfs-3.0.5/features.d/ocfs2.modules 2016-06-15 12:57:27.000000000 +0200
++++ mkinitfs-3.0.5-new/features.d/ocfs2.modules 2016-10-28 13:47:45.000000000 +0200
+_at_@ -1 +1 @@
+-kernel/fs/ocfs2
++kernel/fs/ocfs2/
+diff -U3 -r mkinitfs-3.0.5/features.d/reiserfs.modules mkinitfs-3.0.5-new/features.d/reiserfs.modules
+--- mkinitfs-3.0.5/features.d/reiserfs.modules 2016-06-15 12:57:27.000000000 +0200
++++ mkinitfs-3.0.5-new/features.d/reiserfs.modules 2016-10-28 13:49:47.000000000 +0200
+_at_@ -1 +1 @@
+-kernel/fs/reiserfs
++kernel/fs/reiserfs/
+diff -U3 -r mkinitfs-3.0.5/features.d/scsi.modules mkinitfs-3.0.5-new/features.d/scsi.modules
+--- mkinitfs-3.0.5/features.d/scsi.modules 2016-06-15 12:57:27.000000000 +0200
++++ mkinitfs-3.0.5-new/features.d/scsi.modules 2016-10-28 13:49:57.000000000 +0200
+_at_@ -1,2 +1,2 @@
+ kernel/drivers/scsi/*
+-kernel/drivers/message/fusion
++kernel/drivers/message/fusion/
+diff -U3 -r mkinitfs-3.0.5/features.d/squashfs.modules mkinitfs-3.0.5-new/features.d/squashfs.modules
+--- mkinitfs-3.0.5/features.d/squashfs.modules 2016-06-15 12:57:27.000000000 +0200
++++ mkinitfs-3.0.5-new/features.d/squashfs.modules 2016-10-28 13:50:02.000000000 +0200
+_at_@ -1 +1 @@
+-kernel/fs/squashfs
++kernel/fs/squashfs/
+diff -U3 -r mkinitfs-3.0.5/features.d/ubifs.modules mkinitfs-3.0.5-new/features.d/ubifs.modules
+--- mkinitfs-3.0.5/features.d/ubifs.modules 2016-06-15 12:57:27.000000000 +0200
++++ mkinitfs-3.0.5-new/features.d/ubifs.modules 2016-10-28 13:50:08.000000000 +0200
+_at_@ -1 +1 @@
+-kernel/fs/ubifs
++kernel/fs/ubifs/
+diff -U3 -r mkinitfs-3.0.5/features.d/usb.modules mkinitfs-3.0.5-new/features.d/usb.modules
+--- mkinitfs-3.0.5/features.d/usb.modules 2016-06-15 12:57:27.000000000 +0200
++++ mkinitfs-3.0.5-new/features.d/usb.modules 2016-10-28 13:50:33.000000000 +0200
+_at_@ -1,7 +1,7 @@
+-kernel/drivers/usb/host
+-kernel/drivers/usb/storage
+-kernel/drivers/hid/usbhid
++kernel/drivers/usb/host/
++kernel/drivers/usb/storage/
++kernel/drivers/hid/usbhid/
+ kernel/drivers/hid/hid-generic.ko
+ kernel/drivers/hid/hid-cherry.ko
+-kernel/fs/fat
+-kernel/fs/nls
++kernel/fs/fat/
++kernel/fs/nls/
+diff -U3 -r mkinitfs-3.0.5/features.d/virtio.modules mkinitfs-3.0.5-new/features.d/virtio.modules
+--- mkinitfs-3.0.5/features.d/virtio.modules 2016-06-15 12:57:27.000000000 +0200
++++ mkinitfs-3.0.5-new/features.d/virtio.modules 2016-10-28 13:50:41.000000000 +0200
+_at_@ -1,3 +1,3 @@
+ kernel/drivers/block/virtio*
+-kernel/drivers/virtio
++kernel/drivers/virtio/
+ kernel/drivers/net/virtio_net*
+diff -U3 -r mkinitfs-3.0.5/features.d/xfs.modules mkinitfs-3.0.5-new/features.d/xfs.modules
+--- mkinitfs-3.0.5/features.d/xfs.modules 2016-06-15 12:57:27.000000000 +0200
++++ mkinitfs-3.0.5-new/features.d/xfs.modules 2016-10-28 13:50:50.000000000 +0200
+_at_@ -1,4 +1,4 @@
+ kernel/arch/*/crypto/crc32*
+ kernel/arch/*/crypto/crc32*
+ kernel/crypto/crc32*
+-kernel/fs/xfs
++kernel/fs/xfs/
+diff -U3 -r mkinitfs-3.0.5/mkinitfs.in mkinitfs-3.0.5-new/mkinitfs.in
+--- mkinitfs-3.0.5/mkinitfs.in 2016-10-30 06:52:56.000000000 +0100
++++ mkinitfs-3.0.5-new/mkinitfs.in 2016-10-30 06:51:59.000000000 +0100
+_at_@ -4,64 +4,262 @@
+ sysconfdir=_at_sysconfdir@
+ datadir=_at_datadir@
+
+-config="$sysconfdir"/mkinitfs.conf
+-init="$datadir"/initramfs-init
+-fstab="$datadir"/fstab
+-passwd="$datadir"/passwd
+-group="$datadir"/group
++config="${sysconfdir}/mkinitfs.conf"
++init="${datadir}/initramfs-init"
++fstab="${datadir}/fstab"
++passwd="${datadir}/passwd"
++group="${datadir}/group"
++rootdir=''
+ basedir=''
+ tmpdir=''
+
+-startdir=$PWD
++# Print files and directories while recursivly resolving links and
++# printing the names of each link visited.
++resolve_links() {
++ local name=''
++ while read -r name; do
++ # *) Check for existance.
++ # *) If it's not a link we just output it and continue, nothing more to do.
++ #
++ # *) Iteratively resolve and print all link steps.
++ # *) If the final target is NOT a directory, just print the name.
++ # *) If it is a directory, everything below that directory will be
++ # searched and resolved.
++ if [ ! -e "$name" ]; then
++ echo "resolve_links: ${name}: No such file or directory." >&2
++ continue
++ fi
++ if [ ! -L "$name" ]; then
++ echo "${name}"
++ continue
++ fi
++ # Resolve links, all linked steps will be resolved and printed.
++ while [ -L "$name" ]; do
++ echo "$name"
++ local target="$(readlink "$name")"
++ if [ "$target" != "${target#/}" ]; then
++ # Absolute link, prefix with $basedir.
++ local name="${basedir%/}/${target#/}"
++ else
++ # Relative link, move to the directory of the link, get the
++ # resolved path for that directory and add the target name.
++ if [ -z "${target##*/*}" ]; then
++ cd -P "${name%/*}/${target%/*}"
++ else
++ cd -P "${name%/*}"
++ fi
++ local name="${PWD}/${target##*/}"
++ fi
++ done
++ if [ ! -d "$name" ]; then
++ echo "${name}"
++ continue
++ fi
++ #find "${name}" \! -type d -o \( -type d -empty \) | resolve_links
++ find "${name%/}" \! -type d -print -o \( -type d -links 2 -exec sh -c 'ls -A "{}" | grep -Eq "" || echo "{}"' \; \) | resolve_links
++ done
++}
++
++resolve_ldsos() {
++ local ld_library_path="$1"
++ shift
++ local accumulate=''
++ local last_seen_rpath=''
++ while read -r line; do
++ [ 2 -eq "${#line}" ] && continue
++ #echo "line is $line" >&2
++ case "$line" in
++ 0I*)
++ echo "${line#??}"
++ continue
++ ;;
++ 1R*)
++ [ "$line" = "$last_seen_rpath" ] && continue
++ local last_seen_rpath="$line"
++ local ld_library_path="${line#??}
++$ld_library_path"
++ #echo "ld_library_path is now = \"$ld_library_path\"" >&2
++ continue
++ ;;
++ 2N*)
++ local found='N'
++ local needed="${line#??}"
++ IFS=','
++ for lib in $needed; do
++ IFS='
++'
++ local lpath=''
++ for lpath in $ld_library_path; do
++ if [ -e "${lpath}/${lib}" ]; then
++ echo "${lpath}/${lib}"
++ #echo "Found library: ${lpath}/${lib}" >&2
++ local found='Y'
++ if [ -z "$accumulate" ]; then
++ local accumulate="${lpath}/${lib}"
++ else
++ local accumulate="$accumulate
++${lpath}/${lib}"
++ fi
++ break
++ fi
++ done
++ unset IFS
++ if [ 'Y' != "$found" ]; then
++ echo "resolve_ldso_deps: Warning: Cannot find library \"$lib\". Searched in \"$ld_library_path\"." >&2
++ fi
++ done
++ unset IFS
++ continue
++ ;;
++ esac
++ done
++ # No more libraries found.
++ if [ -z "$accumulate" ]; then
++ return
++ fi
++ #echo "Recursing on " >&2
++ #echo "$accumulate" | sort -u >&2
++ #echo "with ld_library_path=$ld_library_path" >&2
++ echo "$accumulate" | xargs scanelf -qF '#F0I%i
++1R%r
++2N%n' "$_at_" \
++ | sort -u \
++ | resolve_ldsos "$ld_library_path" "${lpath}/${lib}"
++}
++
++# Reads a list of filenames from stdin, figures out what ldso
++# dependencies there are for any ELFs found in the input and
++# outputs the list complemented by any dependencies found.
++resolve_ldso_deps() {
++ local basedir="$1"
++
++ scanelf >/dev/null 2>&1
++ local retcode=$?
++ # System doesn't have scanelf, system probably doesn't support shared libs
++ # so we just act like an empty filter and pass everything along.
++ if [ 126 -eq $retcode ] || [ 127 -eq $retcode ]; then
++ echo "No scanelf found, ldso dependencies will not be resolved." >&2
++ while read -r name; do
++ echo "$name"
++ done
++ return 0
++ fi
++
++ # Prepare, don't want to do this in a loop. This sets ld_library_path to a
++ # newline separated list of paths to search for ldso:s.
++ local ld_so_conf="${basedir%/}/etc/ld.so.conf"
++ local ld_library_path="$(echo "$LD_PRELOAD
++$LD_LIBRARY_PATH
++$([ -e "$ld_so_conf" ] && cat "$ld_so_conf")
++/lib
++/usr/lib
++/usr/local/lib" | sed -e '/^$/d' -e '/^#/d' -e 's/:/\
++/g' -e "s|^/|${basedir%/}/|" | sort -u)"
++
++ # So, we don't want to call scanelf for every filename we read as that is painfully
++ # slow. Try calling it 10k times on /bin/sh and you'll understand. Calling it once
++ # with 10k /bin/sh as arguments is blindingly fast though. First case is something
++ # like 178 secs on my i7, latter case is 0.2 secs. So, instead of calling it for
++ # every file we read, we sort out anything that is not a regular file and then let
++ # xargs accumulate as many args it can before running a scanelf on a bunch of files.
++ # We prefix the output from scanelf with 0I for interpreter, 1R for rpath and 2N
++ # for needed libraries. We then sort -u the result, echo any interpreters found,
++ # modify ld_library_path according to any rpaths found, and search ld_library_path
++ # for any needed libraries.
++ local regulars=''
++ local name=''
++ read -r regulars
++ while read -r name; do
++ echo "$name"
++ # Links we get are already resolved, we just want to check actual files.
++ if [ -L "$name" ] || [ ! -f "$name" ]; then
++ continue
++ fi
++ # Accumulate regular files.
++ local regulars="$regulars
++$name"
++ done
++
++ echo "$regulars" | xargs scanelf -qF '#F0I%i
++1R%r
++2N%n' "$_at_" \
++ | sort -u \
++ | resolve_ldsos "$ld_library_path" \
++ | resolve_links
++}
++
++# Expand config lines according to any globs they contain.
++# The line read should be a the name of a file to be included in the initramfs.
++# The line read should be a complete path, including any potential $basedir.
++# If the line ends in / everything below that path will be added.
++# If the line contains a globbing pattern it will be expanded and everything
++# matching the glob will be added.
++expand_globs() {
++ # This first loop expands globs in config lines.
++ local line=''
++ while read -r line; do
++ local file=''
++ IFS=''
++ for file in $line; do
++ echo "$file"
++ done
++ done | while read -r line; do
++ case "$line" in
++ */)
++ #find "${line%/}" \! -type d -o \( -type d -empty \)
++ find "${line%/}" \! -type d -print -o \( -type d -links 2 -exec sh -c 'ls -A "{}" | grep -Eq "" || echo "{}"' \; \)
++ ;;
++ *)
++ echo "$line"
++ ;;
++ esac
++ done
++}
+
+ feature_files() {
+ local dir="$1"
+ local suffix="$2"
+- local glob file
++ local f=''
+ for f in $features; do
+- if [ ! -f "$features_dir/$f.$suffix" ]; then
++ # Skip if there is no file for this feature with the selected suffix.
++ if [ ! -f "${features_dir}/${f}.${suffix}" ]; then
+ continue
+ fi
+- for glob in $(sed -e '/^$/d' -e '/^#/d' -e "s|^/*|$dir|" "$features_dir/$f.$suffix"); do
+- for file in $glob; do
+- if [ -d $file ]; then
+- find $file -type f
+- elif [ -e "$file" ]; then
+- echo $file
+- fi
+- done
+- done
++ # Remove comments, blank lines and translate paths to paths relative to $dir.
++ sed -e '/^$/d' -e '/^#/d' -e "s|^/*|${dir%/}/|" "${features_dir}/${f}.${suffix}" \
++ | expand_globs \
++ | resolve_links
+ done
+ }
+
+-initfs_base() {
+- local i= dirs= glob= file=
+- for i in dev proc sys sbin bin run .modloop lib/modules media/cdrom \
+- etc/apk media/floppy media/usb newroot; do
+- dirs="$dirs $tmpdir/$i"
+- done
+- mkdir -p $dirs
+
+- local oldpwd="$PWD"
+- cd "${basedir}"
+- lddtree -R "$basedir" -l --no-auto-root \
+- $(feature_files "$basedir" files) \
+- \
+- | sed -e "s|^$basedir||" | sort -u \
+- | cpio --quiet -pdm "$tmpdir" || return 1
++find_files() {
++ cd "$basedir" || return 1
++ # | xargs lddtree -R "$basedir" -l --no-auto-root \
++ # | resolve_ldso_deps "$basedir" \
++ feature_files "$basedir" files \
++ | resolve_ldso_deps "$basedir" \
++ | sed -e "s|^${basedir%/}/||" \
++ | sort -u
++ cd "$OLDPWD" || return 1
++}
+
++initfs_base() {
++ cd "$basedir" || return 1
++ find_files \
++ | cpio --quiet -pdm "$tmpdir" || return 1
+ # copy init
+- cd "$startdir"
+- install -m755 "$init" "$tmpdir"/init || return 1
++ install -m755 "$init" "${tmpdir}/init" || return 1
+ for i in "$fstab" "$passwd" "$group"; do
+- install -Dm644 "$i" "$tmpdir"/etc/${i##*/} || return 1
++ install -Dm644 "$i" "${tmpdir}/etc/${i##*/}" || return 1
+ done
+- cd "$oldpwd"
++ cd "$OLDPWD"
+ }
+
++
+ find_kmod_deps() {
+- awk -v prepend="/lib/modules/$kernel/" -v modulesdep="${basedir}lib/modules/$kernel/modules.dep" '
+-function recursedeps(k, j, dep) {
++ awk -v prepend="lib/modules/${kernel}/" -v modulesdep="${basedir}/lib/modules/$kernel/modules.dep" '
++function recursedeps(k, j, dep) {
+ if (k in visited)
+ return;
+ visited[k] = 1;
+_at_@ -95,55 +293,62 @@
+ }
+
+ find_kmods() {
+- local oldpwd="$PWD"
+ cd "$kerneldir" || return 1
+- for file in $(feature_files "${kerneldir}/" modules); do
+- echo ${file#${kerneldir%/}/}
+- done | find_kmod_deps
+- cd "$oldpwd"
++ feature_files "$kerneldir" modules \
++ | sed "s|${kerneldir%/}/||" \
++ | find_kmod_deps \
++ | sort -u
++ cd "$OLDPWD" || return 1
+ }
+
+ initfs_kmods() {
+- local glob= file= files= dirs=
+- rm -rf "$tmpdir"/lib/modules
+- # make sure we have modules.dep
+- if ! [ -f "$kerneldir"/modules.dep ]; then
+- depmod -b "${basedir}" $kernel
++ rm -rf "${tmpdir}/lib/modules"
++ # Make sure we have modules.dep.
++ if ! [ -f "${kerneldir}/modules.dep" ]; then
++ depmod -b "${basedir}" "$kernel"
+ fi
+- local oldpwd="$PWD"
+- cd "${basedir}"
+- for file in $(find_kmods); do
+- echo "${file#/}"
+- done | sort -u | cpio --quiet -pdm "$tmpdir" || return 1
++
++ cd "${basedir}" || return 1
++ find_kmods \
++ | cpio --quiet -pdm "$tmpdir" || return 1
++
++ local file=''
+ for file in modules.order modules.builtin; do
+- if [ -f "$kerneldir"/$file ]; then
+- cp "$kerneldir"/$file "$tmpdir"/lib/modules/$kernel/
++ if [ -f "${kerneldir}/$file" ]; then
++ cp "${kerneldir}/${file}" "${tmpdir}/lib/modules/${kernel}/"
+ fi
+ done
+- depmod $kernel -b "$tmpdir"
+- cd "$oldpwd"
++
++ depmod "$kernel" -b "$tmpdir"
++ cd "$OLDPWD" || return 1
+ }
+
++
+ initfs_firmware() {
+- rm -rf "$tmpdir"/lib/firmware
+- mkdir -p "$tmpdir"/lib/firmware
+- find "$tmpdir"/lib/modules -type f -name "*.ko" | xargs modinfo -F firmware | sort -u | while read FW; do
++ rm -rf "${tmpdir}/lib/firmware"
++ mkdir -p "${tmpdir}/lib/firmware"
++ find "${tmpdir}/lib/modules" -type f -name "*.ko" \
++ | xargs modinfo -F firmware \
++ | sort -u \
++ | while read FW; do
+ [ -e "${basedir}/lib/firmware/${FW}" ] && install -pD "${basedir}/lib/firmware/${FW}" "${tmpdir}/lib/firmware/${FW}"
+ done
+ return 0
+ }
+
++
+ initfs_apk_keys() {
+ # If the basedir has nothing to copy, and we're not asked to copy the host's keys, don't do anything.
+- if [ ! -d "${basedir}etc/apk/keys/" ] && [ -z "$hostkeys" ]; then
++ if [ ! -d "${basedir}/etc/apk/keys/" ] && [ -z "$hostkeys" ]; then
+ return
+ fi
+ mkdir -p "${tmpdir}/etc/apk/keys"
+ [ -n "$hostkeys" ] && cp "/etc/apk/keys/"* "${tmpdir}/etc/apk/keys/"
+- cp "${basedir}etc/apk/keys/"* "${tmpdir}/etc/apk/keys/"
++ cp "${basedir}/etc/apk/keys/"* "${tmpdir}/etc/apk/keys/"
+ }
+
+-initfs_cpio() {
++
++ initfs_cpio() {
+ if [ -n "$list_sources" ]; then
+ (cd "$tmpdir" && find . )
+ return
+_at_@ -203,7 +408,7 @@
+ shift $(( $OPTIND - 1 ))
+
+
+-. $(readlink -f "$config")
++. "$(cd -P "${config%/*}" ; echo "${PWD}/${config##*/}")"
+
+ # Override any options read from the config with what the
+ # user has specifed on the commandline.
+_at_@ -219,16 +424,16 @@
+ [ -n "$arg_tmpdir" ] && tmpdir="$arg_tmpdir"
+
+
+-rootdir="${rootdir%/}/"
+-[ "${rootdir}" = "${rootdir#/}" ] && rootdir="${PWD}/${rootdir}"
++rootdir="$(cd -P "${rootdir%/}/"; echo "${PWD}")"
+
+-features_dir=${features_dir:-"${rootdir%/}/${sysconfdir#/}/features.d"}
++features_dir="${features_dir:-"${rootdir%/}/${sysconfdir#/}/features.d"}"
++features_dir="$(cd -P "${features_dir}"; echo "${PWD}")"
+
+ if [ -n "$list_features" ]; then
+- for i in "$features_dir"/*.files "$features_dir"/*.modules; do
++ cd "$features_dir" || return 1
++ for i in *.files *.modules; do
+ [ -e "$i" ] || continue
+- local file=${i##*/}
+- echo ${file%.*}
++ echo "${i%.*}"
+ done | sort -u
+ exit 0
+ fi
+_at_@ -236,45 +441,47 @@
+ if [ -z "$basedir" ]; then
+ basedir="$rootdir"
+ else
+- [ "${basedir}" = "${basedir#/}" ] && basedir="${PWD}/${basedir}"
++ basedir="$(cd -P "${basedir}"; echo "${PWD}")"
+ fi
+
++init="$(cd -P "${init%/*}"; echo "${PWD}/${init##*/}")"
+
+-[ -n "$1" ] && kernel="$1"
+-[ -z "$kernel" ] && kernel=$(uname -r)
+-kerneldir="${basedir}lib/modules/$kernel"
+
++[ -n "$1" ] && kernel="$1"
++[ -z "$kernel" ] && kernel="$(uname -r)"
++kerneldir="${basedir%/}/lib/modules/${kernel}"
+ if [ ! -d "$kerneldir" ]; then
+ echo "$kerneldir does not exist or is not a directory"
+ exit 1
+ fi
+
+-kflavor=${kernel##*-}
+-[ "$kflavor" = "$kernel" ] && kflavor=vanilla
+-
+ if [ -z "$outfile" ]; then
+- outfile="${rootdir}boot/initramfs-${kernel}"
++ outfile="${rootdir%/}/boot/initramfs-${kernel}"
+ fi
+
++if [ -n "$DEBUG_FILES" ]; then
++ find_files
++ exit 0
++fi
+ if [ -n "$DEBUG_KMOD" ]; then
+ find_kmods
+ exit 0
+ fi
+
++
+ if [ -z "$tmpdir" ]; then
+- tmpdir=$(mktemp -d "${TMPDIR:-/tmp}/mkinitfs.XXXXXX")
++ tmpdir="$(mktemp -d "${TMPDIR:-/tmp}/mkinitfs.XXXXXX")" || exit
++ tmpdir="$(cd -P "$tmpdir" ; echo "$PWD")"
+ else
+- mkdir -p "$tmpdir"
+-fi
+-
+-tmpdir=$(readlink -f "$tmpdir")
+-if [ '/' == "$tmpdir" ] ; then
+- echo "tmpdir must not be /"
+- exit 1
+-fi
+-
+-if [ -z "$keeptmp" ]; then
+- [ -d "$tmpdir" ] && rm -rf "$tmpdir"
++ tmpdir="$(cd -P "$tmpdir" ; echo "$PWD")"
++ if [ '/' == "$tmpdir" ] ; then
++ echo "tmpdir must not be /"
++ exit 1
++ fi
++ if [ -z "$keeptmp" ]; then
++ [ -d "$tmpdir" ] && rm -rf "$tmpdir"
++ fi
++ mkdir -p "$tmpdir" || exit
+ fi
+
+ if [ -z "$list_sources" ] && [ -z "$quiet" ]; then
diff --git a/main/mkinitfs/APKBUILD b/main/mkinitfs/APKBUILD
index c75961c..2ba5c93 100644
--- a/main/mkinitfs/APKBUILD
+++ b/main/mkinitfs/APKBUILD
_at_@ -2,13 +2,13 @@
pkgname=mkinitfs
pkgver=3.0.5
_ver=${pkgver%_git*}
-pkgrel=5
+pkgrel=6
pkgdesc="Tool to generate initramfs images for Alpine"
url="http://git.alpinelinux.org/cgit/mkinitfs"
makedepends_build=""
makedepends_host="kmod-dev util-linux-dev cryptsetup-dev linux-headers"
makedepends="$makedepends_build $makedepends_host"
-depends="busybox apk-tools>=2.0 lddtree>=1.25"
+depends="busybox apk-tools>=2.0 scanelf"
install="$pkgname.pre-upgrade $pkgname.post-install $pkgname.post-upgrade"
triggers="$pkgname.trigger=/usr/share/kernel/*"
source="http://dev.alpinelinux.org/archive/$pkgname/$pkgname-$_ver.tar.xz
_at_@ -17,6 +17,7 @@ source="http://dev.alpinelinux.org/archive/$pkgname/$pkgname-$_ver.tar.xz
0001-group-sync-with-alpine-baselayout.patch
0001-mkinitfs-add-K-flag-to-copy-host-keys-to-new-initram.patch
0002-mkinitfs_cmdline-override_rootdir-support_honor-tmpdir.patch
+ 0003-mkinitfs-bugfixes_speedup_data-code-sep_new-syntax_cleanup.patch
"
arch="all"
license="GPL2"
_at_@ -37,16 +38,19 @@ a4227598291fa7338ad1128bfef3720c 0001-init-add-support-for-ttyMFD-and-ttyUSB-se
a74631b5f40001dd259a2a6ebcaec544 0001-init-dont-use-local-in-global-scope.patch
db888a1a502fe281bbe0b1add81bf62f 0001-group-sync-with-alpine-baselayout.patch
a46eb97de6742400ca04777a0a8478b2 0001-mkinitfs-add-K-flag-to-copy-host-keys-to-new-initram.patch
-fadbbb5e49ead2c6fd8d4e880c83bafa 0002-mkinitfs_cmdline-override_rootdir-support_honor-tmpdir.patch"
+fadbbb5e49ead2c6fd8d4e880c83bafa 0002-mkinitfs_cmdline-override_rootdir-support_honor-tmpdir.patch
+baef5ed6d50f5087135f84036a6f3ea6 0003-mkinitfs-bugfixes_speedup_data-code-sep_new-syntax_cleanup.patch"
sha256sums="3f13619f161c506796b91f2db17644eba25c2ffc923aa0c8fff0213d1f660aa4 mkinitfs-3.0.5.tar.xz
17547dbc77bd19d940550ea6243b44212d21a6797aee4202e4e22c31143bf9e6 0001-init-add-support-for-ttyMFD-and-ttyUSB-serial-consol.patch
7253cd8ebc1487e4bfb98d81edd68b24a4364e9fa8e48c73fc6903f2077b056e 0001-init-dont-use-local-in-global-scope.patch
17b8a04db505eea9e176da00f9389ca80f65ed88c0288f6785f9ab108164361a 0001-group-sync-with-alpine-baselayout.patch
8daccc844576f0b06fc9c15a30d750bfecda019b476a0be4cf9bcd7139e219cf 0001-mkinitfs-add-K-flag-to-copy-host-keys-to-new-initram.patch
-c24fb5b60a1bdd9d0888cd9ce76996fe5c45cb384b0e30a8837e3cf3724a7727 0002-mkinitfs_cmdline-override_rootdir-support_honor-tmpdir.patch"
+c24fb5b60a1bdd9d0888cd9ce76996fe5c45cb384b0e30a8837e3cf3724a7727 0002-mkinitfs_cmdline-override_rootdir-support_honor-tmpdir.patch
+042cc227a278cb43dd23383d6756a1682c00e9b7d27fed11ba1b7c6164cd0295 0003-mkinitfs-bugfixes_speedup_data-code-sep_new-syntax_cleanup.patch"
sha512sums="246f25ce3fb65ea19dbe611ad44a106930c28b2c7111908462d4a252433011280715b2cf87ee81cc6f0860679fd1d0a109d03040647498137e42b22ccc711662 mkinitfs-3.0.5.tar.xz
35b4cf3f74e394d87b321d335ec4dff6973bfd9a38cdc81609e21e025ee3fb9af7d2744cf9941531603df829af1f7fba433074915ba88a688d375cfe40dad07a 0001-init-add-support-for-ttyMFD-and-ttyUSB-serial-consol.patch
ca1bd66bc6d366dc74da389397f3e0d81b3afa21a534269230ab33f415e633b19ce54327b78713847461b67d6d23a85019c79e1fbbf1a964ee0bd26013ddf33f 0001-init-dont-use-local-in-global-scope.patch
2736650e0c06d47f2cd0dcc4a9c3d575b2b5284ee8d1aa0cccd45b5855ff6704171f5b7761b8c88536c8dca84943810e9332db9f2e03681f6355c5068a3a3092 0001-group-sync-with-alpine-baselayout.patch
712038089d3b58a3937549f25412803291690c992bd8e3002f02a46fc9c24903c94086704b5def3aecb422d46d7c501beeaa665000bc7da6ec20965e52eca5a1 0001-mkinitfs-add-K-flag-to-copy-host-keys-to-new-initram.patch
-81880870195b6c64d55570954be2c8e879f58f779ec165ae34504bac43b969dfcb79b0469ab96100df12fb17a7e7b362bb52bbc3402705a931cd41f7304c6d0d 0002-mkinitfs_cmdline-override_rootdir-support_honor-tmpdir.patch"
+81880870195b6c64d55570954be2c8e879f58f779ec165ae34504bac43b969dfcb79b0469ab96100df12fb17a7e7b362bb52bbc3402705a931cd41f7304c6d0d 0002-mkinitfs_cmdline-override_rootdir-support_honor-tmpdir.patch
+2b9c9ca7b28c33ccbe854449f5b879620f3bc9feca801a05f9ec8a70d46471bf835d1660a05f49b1d2d8b484175265fce53577269aff711e7a1563e8d4a0aa37 0003-mkinitfs-bugfixes_speedup_data-code-sep_new-syntax_cleanup.patch"
diff --git a/main/mkinitfs/mkinitfs.pre-upgrade b/main/mkinitfs/mkinitfs.pre-upgrade
index 0ece527..d49fb34 100644
--- a/main/mkinitfs/mkinitfs.pre-upgrade
+++ b/main/mkinitfs/mkinitfs.pre-upgrade
_at_@ -7,7 +7,7 @@ for i in files modules; do
case "$j" in
*.apk-new) continue;;
esac
- mv $j /etc/mkinitfs/features.d/${j##*/}.$i
+ mv "$j" "/etc/mkinitfs/features.d/${j##*/}.$i"
done
done
exit 0
diff --git a/main/mkinitfs/mkinitfs.trigger b/main/mkinitfs/mkinitfs.trigger
index cedf363..4db9b4a 100644
--- a/main/mkinitfs/mkinitfs.trigger
+++ b/main/mkinitfs/mkinitfs.trigger
_at_@ -3,16 +3,16 @@
for i in "$_at_"; do
# get last element in path
flavor=${i##*/}
- if ! [ -f "$i"/kernel.release ]; then
+ if ! [ -f "${i}/kernel.release" ]; then
# kernel was uninstalled
- rm -f $( readlink -f /boot/initramfs-$flavor ) \
- /boot/initramfs-$flavor /boot/vmlinuz-$flavor \
- /boot/$flavor /boot/$flavor.gz /$flavor /$flavor.gz
+ rm -f $(readlink -f "/boot/initramfs-$flavor") \
+ "/boot/initramfs-$flavor" "/boot/vmlinuz-$flavor" \
+ "/boot/$flavor" "/boot/${flavor}.gz" "/$flavor" "/${flavor}.gz"
continue
fi
- abi_release=$(cat "$i"/kernel.release)
- initfs=initramfs-$flavor
- mkinitfs -o /boot/$initfs $abi_release
+ abi_release=$(cat "${i}/kernel.release")
+ initfs="initramfs-$flavor"
+ mkinitfs -o "/boot/$initfs" "$abi_release"
done
# extlinux will use path relative partition, so if /boot is on a
_at_@ -23,8 +23,8 @@ fi
# cleanup unused initramfs
for i in /boot/initramfs-[0-9]*; do
- [ -f $i ] || continue
- if ! [ -f /boot/vmlinuz-${i#/boot/initramfs-} ]; then
+ [ -f "$i" ] || continue
+ if ! [ -f "/boot/vmlinuz-${i#/boot/initramfs-}" ]; then
rm "$i"
fi
done
--
2.10.0
--
A: Because it messes up the order in which people normally read text.
Q: Why is top-posting such a bad thing?
---
Unsubscribe: alpine-aports+unsubscribe_at_lists.alpinelinux.org
Help: alpine-aports+help_at_lists.alpinelinux.org
---
Received on Sun Nov 06 2016 - 00:34:21 GMT