X-Original-To: alpine-aports@lists.alpinelinux.org Received: from a.mx.borderless.se (ip-91-123-195-195.kna.citycloud.se [91.123.195.195]) by lists.alpinelinux.org (Postfix) with ESMTP id 128135C49F9 for ; Fri, 11 Nov 2016 15:41:07 +0000 (GMT) Received: from int.mx.borderless.se (localhost [127.0.0.1]) by a.mx.borderless.se (Postfix) with SMTP id 129032BC for ; Fri, 11 Nov 2016 16:41:04 +0100 (CET) Received: (qmail 1461 invoked from network); 5 Nov 2016 23:22:31 -0000 Received: from unknown (HELO borderlessmail) (127.0.0.1) by borderless.se with SMTP; 5 Nov 2016 23:22:31 -0000 Date: Sun, 6 Nov 2016 00:34:21 +0100 From: Linus =?iso-8859-1?Q?Sw=E4las?= To: alpine-aports@lists.alpinelinux.org Subject: [alpine-aports] [PATCH] main/mkinitfs: Bugfixes, speedup, data/code separation, new syntax, cleanup. Message-ID: <20161105233420.GA15352@borderlessmail> X-Mailinglist: alpine-aports Precedence: list List-Id: Alpine Development List-Unsubscribe: List-Post: List-Help: List-Subscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline "X-PGP-Key: https://www.borderless.se/public_keys/linus.swalas@borderless.se.pub.asc" * 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 @@ -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 +@@ -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 +@@ -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 +@@ -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 +@@ -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 +@@ -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 +@@ -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 +@@ -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 +@@ -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 +@@ -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 +@@ -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 +@@ -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 +@@ -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 +@@ -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 +@@ -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 +@@ -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 +@@ -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 +@@ -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 +@@ -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 +@@ -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 +@@ -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 +@@ -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 +@@ -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 +@@ -4,64 +4,262 @@ + sysconfdir=@sysconfdir@ + datadir=@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' "$@" \ ++ | 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' "$@" \ ++ | 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; +@@ -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 +@@ -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. +@@ -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 +@@ -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 @@ -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 @@ -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" @@ -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 @@ -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 @@ -3,16 +3,16 @@ for i in "$@"; 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 @@ -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@lists.alpinelinux.org Help: alpine-aports+help@lists.alpinelinux.org ---