=== modified file 'ChangeLog' --- ChangeLog 2012-01-30 00:18:02 +0000 +++ ChangeLog 2012-01-30 00:20:12 +0000 @@ -1,8 +1,18 @@ +<<<<<<< TREE 2012-01-30 Vladimir Serbinenko * grub-core/io/lzopio.c (uncompress_block): Fix use of incorrect variable. +======= +2012-01-29 Szymon Janc + + Put grub-mkrescue generated image on diet (modules compression and + xorriso options). + + * util/grub-mkrescue.in: New option --compress. + +>>>>>>> MERGE-SOURCE 2012-01-29 Vladimir Serbinenko * grub-core/lib/posix_wrap/string.h (memchr): New function. === modified file 'grub-core/boot/i386/pc/diskboot.S' --- grub-core/boot/i386/pc/diskboot.S 2011-07-06 18:05:26 +0000 +++ grub-core/boot/i386/pc/diskboot.S 2012-01-30 00:20:27 +0000 @@ -83,7 +83,7 @@ /* the maximum is limited to 0x7f because of Phoenix EDD */ xorl %eax, %eax - movb $0x7f, %al + movb $0x1, %al /* how many do we really want to read? */ cmpw %ax, 8(%di) /* compare against total number of sectors */ === modified file 'util/grub-mkrescue.in' --- util/grub-mkrescue.in 2012-01-24 12:17:36 +0000 +++ util/grub-mkrescue.in 2012-01-30 00:47:25 +0000 @@ -44,6 +44,7 @@ grub_mkimage="${bindir}/`echo grub-mkimage | sed ${transform}`" xorriso=xorriso +compress=no # Usage: usage # Print the usage. @@ -52,13 +53,14 @@ Usage: $self [OPTION] SOURCE... Make GRUB rescue image. - -h, --help print this message and exit - -v, --version print the version information and exit - -o, --output=FILE save output in FILE [required] - --modules=MODULES pre-load specified modules MODULES - --rom-directory=DIR save rom images in DIR [optional] - --xorriso=FILE use FILE as xorriso [optional] - --grub-mkimage=FILE use FILE as grub-mkimage + -h, --help print this message and exit + -v, --version print the version information and exit + -o, --output=FILE save output in FILE [required] + --modules=MODULES pre-load specified modules MODULES + --rom-directory=DIR save rom images in DIR [optional] + --xorriso=FILE use FILE as xorriso [optional] + --grub-mkimage=FILE use FILE as grub-mkimage + --compress[=no,nopad,xz,gz,lzo] apply size reducing measures [optional] $self generates a bootable rescue image with specified source files, source directories, or mkisofs options listed by: xorriso -as mkisofs -help @@ -133,6 +135,11 @@ --xorriso=*) xorriso=`echo "${option}" | sed 's/--xorriso=//'` ;; + --compress) + compress=`argument $option "$@"`; shift ;; + --compress=*) + compress=`echo "${option}" | sed 's/--compress=//'` ;; + *) source="${source} ${option} $@"; break ;; esac @@ -155,6 +162,26 @@ iso9660_dir=`mktemp -d "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` || exit 1 mkdir -p ${iso9660_dir}/boot/grub +decmod="" +compressor="" +if [ x"${compress}" != xno ] && [ x"${compress}" != xnopad ]; then + case x"$compress" in + xgz) + compressor=`which gzip || true` + decmod="gzio" + compressor="$compressor --best --stdout";; + xxz) + compressor=`which xz || true` + decmod="xzio gcry_crc" + compressor="$compressor --lzma2=dict=128KiB --check=none --stdout";; + xlzo) + compressor=`which lzop || true` + decmod="lzopio adler32 gcry_crc" + compressor="$compressor -9 -c";; + esac +fi +export decmod + process_input_dir () { input_dir="$1" @@ -162,7 +189,12 @@ mkdir -p ${iso9660_dir}/boot/grub/${platform} for file in "${input_dir}/"*.mod "${input_dir}/"efiemu32.o "${input_dir}/"efiemu64.o; do if test -f "$file"; then + modname=`basename $file .mod` + if [ "$compressor" != "" ] ; then + `$compressor $file > ${iso9660_dir}/boot/grub/${platform}/$modname".mod"` + else cp -f "$file" ${iso9660_dir}/boot/grub/${platform}/ + fi fi done for file in ${pkglib_DATA}; do @@ -189,26 +221,26 @@ echo "Enabling $2 support ..." - memdisk_img=`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` || exit 1 - memdisk_dir=`mktemp -d "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` || exit 1 - mkdir -p ${memdisk_dir}/boot/grub + memdisk_img="`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"`" || exit 1 + memdisk_dir="`mktemp -d "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"`" || exit 1 + mkdir -p "${memdisk_dir}"/boot/grub - cat << EOF > ${memdisk_dir}/boot/grub/grub.cfg + cat << EOF > "${memdisk_dir}/boot/grub/grub.cfg" search --fs-uuid --set=root ${iso_uuid} set prefix=(\${root})/boot/grub/${platform} source \$prefix/grub.cfg EOF - (for i in $(cat ${source_directory}/partmap.lst) ${modules} ; do + (for i in $(cat "${source_directory}/partmap.lst") ${modules} ; do echo "insmod $i" done ; \ echo "source /boot/grub/grub.cfg") \ - > ${iso9660_dir}/boot/grub/${platform}/grub.cfg + > "${iso9660_dir}/boot/grub/${platform}/grub.cfg" (cd "${memdisk_dir}"; tar -cf - boot) > "${memdisk_img}" - rm -rf ${memdisk_dir} - $grub_mkimage -O ${platform} -d "${source_directory}" -m "${memdisk_img}" -o "$3" --prefix='(memdisk)/boot/grub' \ - search iso9660 configfile normal memdisk tar $4 - rm -rf ${memdisk_img} + rm -rf "${memdisk_dir}" + "$grub_mkimage" -O ${platform} -d "${source_directory}" -m "${memdisk_img}" -o "$3" --prefix='(memdisk)/boot/grub' \ + $decmod search iso9660 configfile normal memdisk tar $4 + rm -rf "${memdisk_img}" } if [ "${override_dir}" = "" ] ; then @@ -257,23 +289,20 @@ if test -e "${pc_dir}" ; then echo "Enabling BIOS support ..." core_img=`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` || exit 1 - $grub_mkimage -O i386-pc -d ${pc_dir}/ -o ${core_img} --prefix=/boot/grub/i386-pc \ - iso9660 biosdisk - cat ${pc_dir}/cdboot.img ${core_img} > ${iso9660_dir}/boot/grub/i386-pc/eltorito.img - - embed_img=`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` || exit 1 - cat ${pc_dir}/boot.img ${core_img} > ${embed_img} - - rm -f ${core_img} + "$grub_mkimage" -O i386-pc -d ${pc_dir}/ -o ${core_img} --prefix=/boot/grub/i386-pc \ + $decmod iso9660 biosdisk + cat "${pc_dir}/cdboot.img" "${core_img}" > "${iso9660_dir}/boot/grub/i386-pc/eltorito.img" + + rm -f "${core_img}" (for i in $(cat ${pc_dir}/partmap.lst) ${modules} ; do echo "insmod $i" done ; \ echo "source /boot/grub/grub.cfg") \ - > ${iso9660_dir}/boot/grub/i386-pc/grub.cfg + > "${iso9660_dir}/boot/grub/i386-pc/grub.cfg" grub_mkisofs_arguments="${grub_mkisofs_arguments} -b boot/grub/i386-pc/eltorito.img -no-emul-boot -boot-info-table \ - --embedded-boot ${embed_img}" + -grub-boot ${pc_dir}/boot.img" fi # build multiboot core.img @@ -308,7 +337,12 @@ fi # build iso image -"${xorriso}" -as mkisofs -graft-points ${grub_mkisofs_arguments} --protective-msdos-label -o ${output_image} -r ${iso9660_dir} --sort-weight 0 / --sort-weight 1 /boot ${source} +if [ x"$compress" != xno ]; then + sizeopts=-no-pad +else + sizeopts= +fi +"${xorriso}" -as mkisofs $sizeopts -graft-points ${grub_mkisofs_arguments} --protective-msdos-label -o "${output_image}" -r "${iso9660_dir}" --sort-weight 0 / --sort-weight 1 /boot ${source} rm -rf ${iso9660_dir} rm -f ${embed_img}