diff options
author | Eric Hameleers <alien@slackware.com> | 2018-08-26 13:28:30 +0200 |
---|---|---|
committer | Eric Hameleers <alien@slackware.com> | 2018-08-26 13:28:30 +0200 |
commit | 0a888bf1a580e6b7b1113dc7db0359484da36078 (patch) | |
tree | 479b61fafe2070af9c52c70a22711cedeeb5211f /make_slackware_live.sh | |
parent | e103f0de308539e2bd0f53845d365e45fdf60ebc (diff) | |
download | liveslak-0a888bf1a580e6b7b1113dc7db0359484da36078.tar.gz liveslak-0a888bf1a580e6b7b1113dc7db0359484da36078.tar.xz |
Add zstd compression support for squashfs modules
This will provide compression ratios approaching those of xz,
while achieving decompression rations similar to lzo (5 times faster
than xz).
We will need to have a zstd package in Slackware first, and then
rebuild squashfs-tools to add zstd support.
Diffstat (limited to '')
-rwxr-xr-x | make_slackware_live.sh | 38 |
1 files changed, 31 insertions, 7 deletions
diff --git a/make_slackware_live.sh b/make_slackware_live.sh index 851af44..a20c809 100755 --- a/make_slackware_live.sh +++ b/make_slackware_live.sh @@ -227,17 +227,41 @@ ADD_CACERT=${ADD_CACERT:-"YES"} # the alternative is gzip (which adds ~30% to the initrd size). COMPR=${COMPR:-"xz --check=crc32"} +# What compressors are available? +SQ_COMP_AVAIL=(gzip lzma lzo xz zstd) + +# Compressor optimizations: +declare -A SQ_COMP_PARAMS_DEF +SQ_COMP_PARAMS_DEF[gzip]="" +SQ_COMP_PARAMS_DEF[lzma]="" +SQ_COMP_PARAMS_DEF[lzo]="" +SQ_COMP_PARAMS_DEF[xz]=""-b 512k -Xdict-size 100%" +SQ_COMP_PARAMS_DEF[zstd]="-b 512k -Xcompression-level 16" +declare -A SQ_COMP_PARAMS_OPT +SQ_COMP_PARAMS_OPT[gzip]="" +SQ_COMP_PARAMS_OPT[lzma]="" +SQ_COMP_PARAMS_OPT[lzo]="" +SQ_COMP_PARAMS_OPT[xz]=""-b 1M" +SQ_COMP_PARAMS_OPT[zstd]="-b 1M -Xcompression-level 19" + # What compression to use for the squashfs modules? -# Default is xz, alternatives are gzip, lzma, lzo: +# Default is xz, alternatives are gzip, lzma, lzo, zstd: SQ_COMP=${SQ_COMP:-"xz"} +# Test whether the compressor of choice is supported by the script: +if [[ ${SQ_COMP_AVAIL[*]} =~ ${SQ_COMP} ]]; then + echo "*** Compressor '${SQ_COMP}' not supported by $(basename $0 .sh)!" + echo "*** Select one of '${SQ_COMP_AVAIL[@]}'" + exit 1 +fi + # What compression parameters to use? # For our lean XFCE image we try to achieve max compression, # at the expense of runtime latency: if [ "$LIVEDE" = "XFCE" ] ; then - SQ_COMP_PARAMS=${SQ_COMP_PARAMS:-"-b 1M"} + SQ_COMP_PARAMS=${SQ_COMP_PARAMS:-"${SQ_COMP_PARAMS_OPT[${SQ_COMP}]}"} else - SQ_COMP_PARAMS=${SQ_COMP_PARAMS:-"-b 512k -Xdict-size 100%"} + SQ_COMP_PARAMS=${SQ_COMP_PARAMS:-"${SQ_COMP_PARAMS_DEF[${SQ_COMP}]}"} fi # Mount point where Live filesystem is assembled (no storage requirements): @@ -1147,13 +1171,13 @@ for SPS in ${SL_SERIES} ; do rm -rf ${LIVE_BOOT}/boot mv ${INSTDIR}/boot ${LIVE_BOOT}/ # Squash the boot files into a module as a safeguard: - mksquashfs ${LIVE_BOOT} ${LIVE_MOD_SYS}/0000-${DISTRO}_boot-${SL_VERSION}-${SL_ARCH}.sxz -noappend -comp ${SQ_COMP} -b 1M + mksquashfs ${LIVE_BOOT} ${LIVE_MOD_SYS}/0000-${DISTRO}_boot-${SL_VERSION}-${SL_ARCH}.sxz -noappend -comp ${SQ_COMP} ${SQ_COMP_PARAMS} fi fi # Squash the installed package series into a module: - mksquashfs ${INSTDIR} ${LIVE_MOD_SYS}/${MNUM}-${DISTRO}_${SPS}-${SL_VERSION}-${SL_ARCH}.sxz -noappend -comp ${SQ_COMP} -b 1M + mksquashfs ${INSTDIR} ${LIVE_MOD_SYS}/${MNUM}-${DISTRO}_${SPS}-${SL_VERSION}-${SL_ARCH}.sxz -noappend -comp ${SQ_COMP} ${SQ_COMP_PARAMS} rm -rf ${INSTDIR}/* # End result: we have our .sxz file and the INSTDIR is empty again, @@ -2191,7 +2215,7 @@ chroot ${LIVE_ROOTDIR} /etc/cron.daily/${LOCATE_BIN} 2>${DBGOUT} # Squash the configuration into its own module: umount ${LIVE_ROOTDIR} 2>${DBGOUT} || true -mksquashfs ${INSTDIR} ${LIVE_MOD_SYS}/0099-${DISTRO}_zzzconf-${SL_VERSION}-${SL_ARCH}.sxz -noappend -comp ${SQ_COMP} -b 1M +mksquashfs ${INSTDIR} ${LIVE_MOD_SYS}/0099-${DISTRO}_zzzconf-${SL_VERSION}-${SL_ARCH}.sxz -noappend -comp ${SQ_COMP} ${SQ_COMP_PARAMS} rm -rf ${INSTDIR}/* # End result: we have our .sxz file and the INSTDIR is empty again, @@ -2318,7 +2342,7 @@ cp -a ${LIVE_BOOT}/boot/vmlinuz-generic*-$KGEN ${LIVE_STAGING}/boot/generic mv ${LIVE_BOOT}/boot/initrd_${KVER}.img ${LIVE_STAGING}/boot/initrd.img # Squash the boot directory into its own module: -mksquashfs ${LIVE_BOOT} ${LIVE_MOD_SYS}/0000-${DISTRO}_boot-${SL_VERSION}-${SL_ARCH}.sxz -noappend -comp ${SQ_COMP} -b 1M +mksquashfs ${LIVE_BOOT} ${LIVE_MOD_SYS}/0000-${DISTRO}_boot-${SL_VERSION}-${SL_ARCH}.sxz -noappend -comp ${SQ_COMP} ${SQ_COMP_PARAMS} # Determine additional boot parameters to be added: if [ -z ${KAPPEND} ]; then |