SVN: geninitrd/trunk/geninitrd
glen
glen at pld-linux.org
Tue Dec 21 20:02:50 CET 2010
Author: glen
Date: Tue Dec 21 20:02:50 2010
New Revision: 12018
Modified:
geninitrd/trunk/geninitrd
Log:
- if image compress failed (for whatever reason), retry with gzip
Modified: geninitrd/trunk/geninitrd
==============================================================================
--- geninitrd/trunk/geninitrd (original)
+++ geninitrd/trunk/geninitrd Tue Dec 21 20:02:50 2010
@@ -870,6 +870,31 @@
echo gzip
}
+# compresses kernel image image
+# in function so we could retry with other compressor on failure
+compress_image() {
+ local compressor="$1" IMAGE="$2" target="$3" tmp
+ tmp=$(mktemp "$target".XXXXXX) || die "mktemp failed"
+
+ case "$compressor" in
+ xz)
+ # don't use -9 here since kernel won't understand it
+ xz --format=xz --check=crc32 --lzma2=preset=6e,dict=1MiB < "$IMAGE" > "$tmp" || return $?
+ ;;
+ lzma)
+ xz --format=lzma -9 < "$IMAGE" > "$tmp" || return $?
+ ;;
+ bzip2)
+ bzip2 -9 < "$IMAGE" > "$tmp" || return $?
+ ;;
+ gzip)
+ gzip -9 < "$IMAGE" > "$tmp" || return $?
+ ;;
+ esac
+
+ mv -f "$tmp" "$target"
+}
+
if [ -r /etc/sysconfig/geninitrd ]; then
. /etc/sysconfig/geninitrd
fi
@@ -1367,28 +1392,19 @@
fi
if ! is_no "$COMPRESS"; then
- tmp=$(mktemp "$target".XXXXXX) || die "mktemp failed"
compressor=$(find_compressor "$COMPRESS")
debug "Compressing $target with $compressor"
# TODO: the image name (specified from kernel.spec) already contains
# extension, which is .gz most of the time.
- case "$compressor" in
- xz)
- # don't use -9 here since kernel won't understand it
- xz --format=xz --check=crc32 --lzma2=preset=6e,dict=1MiB < "$IMAGE" > "$tmp" || die "Compress failed, out of memory?" $?
- ;;
- lzma)
- xz --format=lzma -9 < "$IMAGE" > "$tmp" || die "Compress failed, out of memory?" $?
- ;;
- bzip2)
- bzip2 -9 < "$IMAGE" > "$tmp" || die "Compress failed" $?
- ;;
- gzip)
- gzip -9 < "$IMAGE" > "$tmp" || die "Compress failed" $?
- ;;
- esac
- mv -f "$tmp" "$target"
+ compress_image "$compressor" "$IMAGE" "$target" || {
+ if [ $compressor != gzip ]; then
+ warn "Could not compress with $compressor, retrying with gzip"
+ compress_image gzip "$IMAGE" "$target" || die "compress failed with gzip" $?
+ else
+ die "Could not compress image with $compressor"
+ fi
+ }
else
cp -a "$IMAGE" "$target"
fi
More information about the pld-cvs-commit
mailing list