X-Git-Url: https://git.grml.org/?p=grml-live.git;a=blobdiff_plain;f=remaster%2Fgrml-live-remaster;h=c480f03ca2b46a2703bfc22b31ad975dc505ed2b;hp=a42a18ea13ababf694d0a554f7635e5836fb1ff2;hb=5e5258375d0b2d006c44c65afbd48f398f0de6e4;hpb=1c5a0e78d19a8e881294e5b5e06d50d0e60613f6 diff --git a/remaster/grml-live-remaster b/remaster/grml-live-remaster index a42a18e..c480f03 100755 --- a/remaster/grml-live-remaster +++ b/remaster/grml-live-remaster @@ -1,39 +1,83 @@ #!/bin/sh # Filename: grml-live-remaster # Purpose: remaster a grml from the live cd -# Authors: grml-team (grml.org), (c) Michael Schierl , (c) Michael Prokop +# Authors: grml-team (grml.org), +# (c) Michael Schierl , +# (c) Michael Prokop , +# (c) Thorsten Glaser # Bug-Reports: see http://grml.org/bugs/ # License: This file is licensed under the GPL v2 or any later version. -# Latest change: Sun Feb 24 14:23:27 CET 2008 [mika] ################################################################################ # DISCLAIMER: # this script currently lacks LOTS of error checking code... any help welcome... ################################################################################ +# define function getfilesize before "set -e" +if stat --help >/dev/null 2>&1; then + getfilesize='stat -c %s' # GNU stat +else + getfilesize='stat -f %z' # BSD stat +fi + set -e # exit on any error -VERSION='0.0.2' +VERSION='0.0.3' +GRML_LIVE_EDITOR=${VISUAL:-${EDITOR:-vi}} # source core functions {{{ +if ! [ -r /etc/grml/lsb-functions ] || ! [ -r /etc/grml/script-functions ] ; then + echo "Error: could not read /etc/grml/lsb-functions and/or /etc/grml/script-functions." >&2 + echo "Error: $0 can run only in Grml live session. Exiting." >&2 + exit 1 +fi + . /etc/grml/lsb-functions . /etc/grml/script-functions # }}} +if ! isgrmlcd ; then + echo "Error: $0 can run only in Grml live session. Exiting." >&2 + exit 1 +fi + # make sure we have what we need {{{ -check4progs mkisofs mksquashfs || exit 1 +if check4progs mkisofs >/dev/null 2>&1 ; then + MKISO=mkisofs +fi + +if check4progs genisoimage >/dev/null 2>&1 ; then + MKISO=genisoimage +fi + +if [ -z "$MKISO" ] ; then + echo "Error: neither mkisofs nor genisoimage available. Exiting." >&2 + exit 1 +fi + +check4progs stat || exit 1 + +# allow overriding via environment: +if [ -z "$MKSQUASHFS" ] ; then + if which mksquashfs >/dev/null 2>&1 ; then + MKSQUASHFS=mksquashfs + else + echo "Error: mksquashfs is not available. Exiting." >&2 + exit 1 + fi +fi check4root || exit 1 # }}} -if [ x"$1" == x ]; then - echo "$0 - version $VERSION" - echo "" - echo "Usage: $0 destination.iso" - echo " destination.iso should point to a path that is on a hard disk," - echo " you might want to mount some swap partitions or swap files" - echo " first, because grml-live-remaster will need a lot ot RAM." - echo "" - echo "Please report bugs and feature requests: http://grml.org/bugs/" - exit -1 +if [ -z "$1" ]; then + echo "$0 - version $VERSION + +Usage: $0 destination.iso + destination.iso should point to a path that is on a hard disk, + you might want to mount some swap partitions or swap files + first, because grml-live-remaster will need a lot ot RAM. + +Please report bugs and feature requests: http://grml.org/bugs/" >&2 + exit 1 fi if [ ! -d /remaster ]; then @@ -69,7 +113,7 @@ for i in dev proc root sys tmp; do umount /remaster/chroot/$i done -$EDITOR /remaster/msg +${GRML_LIVE_EDITOR} /remaster/msg [ -d /remaster/iso ] || mkdir /remaster/iso @@ -97,7 +141,7 @@ sed 3,4d "${BOOTSTUFF}"/boot.msg \ sed 1,2d /remaster/msg >>/remaster/iso/boot/isolinux/boot.msg mkdir /remaster/iso/live -mksquashfs /remaster/chroot /remaster/iso/live/"$(basename $SQUASHFS_FILE)" +$MKSQUASHFS /remaster/chroot /remaster/iso/live/"$(basename $SQUASHFS_FILE)" umount /remaster/chroot /remaster/cdrom if [ -f /remaster/iso/boot/isolinux/isolinux.bin ] ; then @@ -108,10 +152,18 @@ else ISOLINUX_BOOTCAT=boot.cat fi -mkisofs -b $ISOLINUX -no-emul-boot -c $ISOLINUX_BOOTCAT \ - -boot-info-table -l -r -J -o "$1" /remaster/iso +$MKISO -b $ISOLINUX -no-emul-boot -c $ISOLINUX_BOOTCAT \ + -boot-info-table -boot-load-size 4 -no-pad \ + -l -r -J -o "$1" /remaster/iso +# pad for partition table +siz=$($getfilesize "$1") +cyls=$((siz / 512 / 32 / 16 + 1)) # C=$cyls H=16 S=32 (= 256 KiB units) +siz=$((cyls * 16 * 32 * 512)) # size after padding +dd if=/dev/zero bs=1 count=1 seek=$((siz - 1)) of="$1" 2>/dev/null rm -R /remaster/iso +# here is the place where we could apply bootgrub.mksh + echo "" echo "ISO generation complete:" ls --color -l "$1"