Subversion Repositories livecd

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

#!/bin/bash
# Insert/remove files (modules) into/from CD filesystem (iso)
# Author: Tomas M. <http://www.linux-live.org>
#

if [ "$2" = "" ]; then
   echo
   echo "Add or remove files from ISO filesystem specified by 'source'"
   echo "Usage: $0 [ options ] iso_source /path/new.iso"
   echo
   echo " The options are"
   echo " -r <file|dir>             ... remove a file from the ISO"
   echo "                               (path is relative to the ISO root)"
   echo " -a <path_in_iso=file|dir> ... add a file to the ISO, save it to 'path_in_iso'"
   echo "                               (path_in_iso is relative to the ISO root"
   echo "                               and if ommited, defaults to root /)"
   echo
   echo " For example, to remove vmlinuz from the ISO and place new slax.ico to the root"
   echo " (from the file /home/tom/slax.ico), execute the following command:"
   echo " $0 -r /vmlinuz -a /slax.ico=/home/tom/slax.ico /slax-orig.iso /new.iso"
   echo
   exit
fi

CDNAME="OwnLiveCD"
ISOLINUXBIN=/tmp/isolinux$$.bin

while [ ! "$3" = "" ]; do
   if [ "$1" = "-r" ]; then EXCLUDE="$EXCLUDE -x $DATADIR/$2"; fi
   if [ "$1" = "-a" ]; then GRAFT="$GRAFT `echo \"$2=$2\" | cut -d \"=\" -f 1-2`"; fi
   shift; shift
done

# mount iso if not already mounted
if [ ! -d "$DATADIR" ]; then
   DATADIR=/tmp/livecd_data$$
   mkdir -p "$DATADIR"
   mount -o loop "$1" "$DATADIR"
fi

# isolinux.bin is changed during the ISO creation,
# so we need to restore it from the backup.
gunzip -c $DATADIR/isolinux.bin.gz >$ISOLINUXBIN

mkisofs -o "$2" -v -J -R -D -A "$CDNAME" -V "$CDNAME" \
-no-emul-boot -boot-info-table -boot-load-size 4 \
-x "$DATADIR/isolinux.bin" -x "$DATADIR/isolinux.boot" $EXCLUDE \
-b isolinux.bin -c isolinux.boot \
-graft-points isolinux.bin=$ISOLINUXBIN $GRAFT "$DATADIR"

# cleanup all temporary files and directories
rm $ISOLINUXBIN
umount "$DATADIR" 2>/dev/null >/dev/null
if [ "$?" = "0" ]; then rmdir $DATADIR; fi