ref: e52743306a5686f79a30e62cfb02c450bf71db3f
parent: e95fe8f4fadcf6b496ba8198f091fe04d16ec203
author: Carlo Landmeter <clandmeter@alpinelinux.org>
date: Sat Feb 24 06:26:49 CST 2018
mkinitfs: add xz compression support
--- a/mkinitfs.in
+++ b/mkinitfs.in
@@ -12,6 +12,8 @@
startdir=$PWD
+initfscomp=gzip
+
feature_files() {
local dir="$1"
local suffix="$2"
@@ -147,16 +149,26 @@
fi
rm -f $outfile
umask 0022
- (cd "$tmpdir" && find . | sort | cpio --quiet -o -H newc | gzip -9) > $outfile
+ (cd "$tmpdir" && find . | sort | cpio --quiet -o -H newc | $comp) > $outfile
}
+cmd_exists() {
+ local cmd="$1"
+ if ! command -v "$cmd" >/dev/null 2>&1; then
+ echo "Command \"$cmd\" is not available."
+ exit 1
+ fi
+}
+
usage() {
cat <<EOF
usage: mkinitfs [-hkKLln] [-b basedir] [-c configfile] [-F features] [-f fstab]
- [-i initfile ] [-o outfile] [-P featuresdir] [-t tempdir] [kernelversion]"
+ [-C initramfs compression] [-i initfile] [-o outfile]
+ [-P featuresdir] [-t tempdir] [kernelversion]
options:
-b prefix files and kernel modules with basedir
-c use configfile instead of $config
+ -C initramfs compression (gzip|xz defaults to $initfscomp)
-f use fstab instead of $fstab
-F use specified features
-h print this help
@@ -178,10 +190,11 @@
# main
features_dirs=${features_dir:-"${basedir%/:-}/${sysconfdir#/}/features.d"}
-while getopts "b:c:f:F:hi:kKLlno:P:qt:" opt; do
+while getopts "b:c:C:f:F:hi:kKLlno:P:qt:" opt; do
case "$opt" in
b) basedir="$OPTARG";;
c) config="$OPTARG";;
+ C) initfscomp="$OPTARG";;
F) myfeatures="$OPTARG";;
f) fstab="$OPTARG";;
h) usage;;
@@ -256,6 +269,12 @@
if [ -z "$list_sources" ] && [ -z "$quiet" ]; then
echo "==> initramfs: creating $outfile"
fi
+
+case "$initfscomp" in
+ gzip) comp="gzip -9" ;;
+ xz) cmd_exists xz; comp="xz -C crc32 -T 0" ;;
+ *) echo "Initramfs compression \"$initfscomp\" not supported!"; exit 1 ;;
+esac
initfs_base \
&& initfs_kmods \