=== modified file 'ChangeLog' --- ChangeLog 2011-01-13 21:25:56 +0000 +++ ChangeLog 2011-01-13 23:10:14 +0000 @@ -1,3 +1,10 @@ +2011-01-14 Szymon Janc + + Put grub-mkrescue generated image on diet (modules compression and + xorriso options). + + * util/grub-mkrescue.in: New option --diet. + 2011-01-13 Vladimir Serbinenko * grub-core/fs/zfs/zfsinfo.c (grub_cmd_zfs_bootfs): Quote bootpath and === modified file 'util/grub-mkrescue.in' --- util/grub-mkrescue.in 2010-10-18 20:50:01 +0000 +++ util/grub-mkrescue.in 2011-01-13 23:23:36 +0000 @@ -44,6 +44,7 @@ override_dir= grub_mkimage=${bindir}/`echo grub-mkimage | sed ${transform}` xorriso=xorriso +diet=no # Usage: usage # Print the usage. @@ -59,6 +60,7 @@ Make GRUB rescue image. --rom-directory=DIR save rom images in DIR [optional] --xorriso=FILE use FILE as xorriso [optional] --grub-mkimage=FILE use FILE as grub-mkimage + --diet 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,9 @@ do --xorriso=*) xorriso=`echo "${option}/" | sed 's/--xorriso=//'` ;; + --diet) + diet=yes ;; + *) source="${source} ${option} $@"; break ;; esac @@ -155,6 +160,41 @@ fi iso9660_dir=`mktemp -d "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` || exit 1 mkdir -p ${iso9660_dir}/boot/grub +decmod="" +decmod_dep="" +compressor="" +if [ "${diet}" = yes ]; then + # Disabled for now. + #compressor=`which xz || true` + if [ "$compressor" = "" ] ; then + compressor=`which gzip || true` + if [ "$compressor" != "" ] ; then + decmod="gzio" + compressor="$compressor --best --stdout" + fi + else + decmod="xzio" + compressor="$compressor --lzma2=dict=128KiB --check=none --stdout" + fi +fi + +find_decmod_dep() +{ + deps=`grep ^$1: /boot/grub/moddep.lst|sed s/"$1:"//` + if [ "$deps" = "" ] ; then + return ; + fi + + decmod_dep="$decmod_dep $deps" + + for i in $deps ;do find_decmod_dep $i ; done +} + +if [ "$decmod" != "" ]; then + find_decmod_dep $decmod + decmod_dep=`echo $decmod_dep|tr " " "\n"|sort|uniq|tr "\n" " "` +fi + process_input_dir () { input_dir="$1" @@ -162,7 +202,14 @@ process_input_dir () mkdir -p ${iso9660_dir}/boot/grub/${platform} for file in ${input_dir}/*.mod; do if test -f "$file"; then + modname=`basename $file .mod` + m=`echo $decmod $decmod_dep | tr " " "\n" | grep "^$modname$" || true`; + + if [ "$compressor" != "" ] && [ "$m" = "" ]; 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 @@ -207,7 +254,7 @@ EOF (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 + $decmod search iso9660 configfile normal memdisk tar $4 rm -rf ${memdisk_img} } @@ -257,7 +304,7 @@ 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 + $decmod 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 @@ -276,7 +323,7 @@ if test -e "${pc_dir}" ; then fi # build multiboot core.img -make_image "${multiboot_dir}" i386-multiboot "${iso9660_dir}/boot/multiboot.img" "ata at_keyboard" +make_image "${multiboot_dir}" i386-multiboot "${iso9660_dir}/boot/multiboot.img" "$decmod ata at_keyboard" if test -e "${efi64_dir}" || test -e "${efi32_dir}"; then efi_dir=`mktemp -d "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` || exit 1 @@ -293,17 +340,25 @@ if test -e "${efi64_dir}" || test -e "${ grub_mkisofs_arguments="${grub_mkisofs_arguments} --efi-boot efi.img" fi -make_image "${qemu_dir}" i386-qemu "${iso9660_dir}/boot/qemu.img" "ata at_keyboard" +make_image "${qemu_dir}" i386-qemu "${iso9660_dir}/boot/qemu.img" "$decmod ata at_keyboard" if [ -e "${iso9660_dir}/boot/qemu.img" ] && [ -d "${rom_directory}" ]; then cp "${iso9660_dir}/boot/qemu.img" "${rom_directory}/qemu.img" fi -make_image "${coreboot_dir}" i386-coreboot "${iso9660_dir}/boot/coreboot.elf" "ata at_keyboard" +make_image "${coreboot_dir}" i386-coreboot "${iso9660_dir}/boot/coreboot.elf" "$decmod ata at_keyboard" if [ -e "${iso9660_dir}/boot/coreboot.elf" ] && [ -d "${rom_directory}" ]; then cp "${iso9660_dir}/boot/coreboot.elf" "${rom_directory}/coreboot.elf" 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 [ "${diet}" = yes ]; then + if [ -e "${output_image}" ]; then + rm "${output_image}" || exit 1 + fi + "${xorriso}" -as mkisofs -graft-points -no-pad ${grub_mkisofs_arguments} --protective-msdos-label -o ${output_image} -r ${iso9660_dir} --sort-weight 0 / --sort-weight 1 /boot ${source} +else + "${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} +fi + rm -rf ${iso9660_dir} rm -f ${embed_img}