Skip to content

Instantly share code, notes, and snippets.

@hyphop
Last active July 16, 2021 11:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hyphop/63c0f28795a799d8a350376bc9ad788c to your computer and use it in GitHub Desktop.
Save hyphop/63c0f28795a799d8a350376bc9ad788c to your computer and use it in GitHub Desktop.
advanced XZ compression (XZE)

xze - advanced xz packer (suitable for mt decompression + padding + meta)

This script just simple bash script, for demonstrate basic ideas realisation. I thinks its will be useful recommendations for all distros which use xz/lzma image compression

Why ?

  • fast mt compression
  • fast mt decompression
  • same hi compression levels
  • optional embedded meta
  • soc friendly (possible to write lzma compressed image on the fly from clouds on maximum speed for exmaple via Krescue just one min
  • single thread not optimized lzma decompresssion dramaticly slow for any arm board
  • easy to check image integrity without full decompression
  • easy for automate
  • same xz/lzma standards without any changes
  • more ... ./xze --help

how-to and examples

cd 

# download 
wget https://armbian.lane-fu.com/Armbian_21.08.0-trunk_Khadas-edge_hirsute_current_5.10.47_cinnamon_desktop.img.xz

# move 
mv Armbian_21.08.0-trunk_Khadas-edge_hirsute_edge_5.12.14_cinnamon_desktop.img.xz \
 Armbian_21.08.0-trunk_Khadas-edge_hirsute_edge_5.12.14_cinnamon_desktop.img.xz.org

# print info
ls -l1 Armbian_21.08.0-trunk_Khadas-edge_hirsute_edge_5.12.14_cinnamon_desktop.img.xz.org
# -rw-rw-r-- 1 master master 1473849720 Jul  5 22:33 Armbian_21.08.0-trunk_Khadas-edge_hirsute_edge_5.12.14_cinnamon_desktop.img.xz.org

# check mt decompress
time pixz -dc < Armbian_21.08.0-trunk_Khadas-edge_hirsute_edge_5.12.14_cinnamon_desktop.img.xz.org > /dev/null 
# slow becouse not suitable for mt
#real	1m6.722s
#user	1m5.769s
#sys	0m1.013s

xz -l Armbian_21.08.0-trunk_Khadas-edge_hirsute_edge_5.12.14_cinnamon_desktop.img.xz.org
#Strms  Blocks   Compressed Uncompressed  Ratio  Check   Filename
#   1      20  1,405.6 MiB  3,060.0 MiB  0.459  CRC32   Armbian_21.08.0-trunk_Khadas-edge_hirsute_edge_5.12.14_cinnamon_desktop.img.xz.org

# download compress script
wget https://raw.githubusercontent.com/khadas/krescue/master/tools/xze

# progressive mt compression / make possible mt decompress + add meta 
time /bin/bash ./xze Armbian_21.08.0-trunk_Khadas-edge_hirsute_edge_5.12.14_cinnamon_desktop.img \
	--meta \
	label=Armbian \
	builder=Armbian \
	date="$(TZ= date)" \
	match=BOARD=Edge \
	link=https://armbian.lane-fu.com/ \
	duration=60 \
	desc="Armbian_21.08.0-trunk_Khadas-edge_hirsute_edge_5.12.14_cinnamon_desktop"

# make faster compress and next decompress via `pixz`
#real	1m49.684s
#user	13m7.487s
#sys	0m3.430s

# check sizes - very similar 
ls -l1 Arm*.xz*
#-rw-rw-r-- 1 master master 1478062080 Jul 16 12:36 Armbian_21.08.0-trunk_Khadas-edge_hirsute_edge_5.12.14_cinnamon_desktop.img.xz
#-rw-rw-r-- 1 master master 1473849720 Jul  5 22:33 Armbian_21.08.0-trunk_Khadas-edge_hirsute_edge_5.12.14_cinnamon_desktop.img.xz.org
# `./xze -8` compression level - smallest size 
ls -l1 Arm*.xz
#-rw-rw-r-- 1 master master 1448652800 Jul 16 19:06 Armbian_21.08.0-trunk_Khadas-#edge_hirsute_edge_5.12.14_cinnamon_desktop.img.xz

# compare new decompression time 
time pixz -dc < Armbian_21.08.0-trunk_Khadas-edge_hirsute_edge_5.12.14_cinnamon_desktop.img.xz > /dev/null
#real	0m7.086s
#user	1m21.178s
#sys	0m1.754s

# YES just 7 sec 

META USAGE

./xze Armbian_21.08.0-trunk_Khadas-edge_hirsute_edge_5.12.14_cinnamon_desktop.img.xz 
# or same 
tail -c4096 Armbian_21.08.0-trunk_Khadas-edge_hirsute_edge_5.12.14_cinnamon_desktop.img.xz | xz -dc
#

Strms  Blocks   Compressed Uncompressed  Ratio  Check   Filename
    2      35  1,409.6 MiB  3,060.0 MiB  0.461  CRC64   Armbian_21.08.0-trunk_Khadas-edge_hirsute_edge_5.12.14_cinnamon_desktop.img.xz
[i] blocks: 35 // 1,409.6*MiB // 3,060.0*MiB
##META_FILE##
FILE: Armbian_21.08.0-trunk_Khadas-edge_hirsute_edge_5.12.14_cinnamon_desktop.img.xz
UNPACKED_SIZE: 3208642560
PACKED_SIZE: 1478057984
FILE_SIZE: 1478062080
##META-FILE##

##KRESCUE_META##
type:xz
label: Armbian
builder: Armbian
date: Fri 16 Jul 2021 04:35:06 AM UTC
match: BOARD=Edge
link: https://armbian.lane-fu.com/
duration: 60
desc: Armbian_21.08.0-trunk_Khadas-edge_hirsute_edge_5.12.14_cinnamon_desktop
image: Armbian_21.08.0-trunk_Khadas-edge_hirsute_edge_5.12.14_cinnamon_desktop.img
asd=asd
##KRESCUE-META##
##KRESCUE##END

More

about

Have any questions or suggestion plz buzz me ##hyphop##

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment