Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

executable file 174 lines (140 sloc) 5.091 kb
#!/bin/sh
# Filename: grml-live-remaster
# Purpose: remaster a grml from the live cd
# Authors: grml-team (grml.org),
# (c) Michael Schierl <schierlm@gmx.de>,
# (c) Michael Prokop <mika@grml.org>,
# (c) Thorsten Glaser <tg@mirbsd.org>
# Bug-Reports: see http://grml.org/bugs/
# License: This file is licensed under the GPL v2 or any later version.
################################################################################
# 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.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 {{{
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 [ -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
mkdir -p /remaster/chroot /remaster/tmp /remaster/cdrom
mount -t tmpfs tmpfs /remaster/tmp
echo "#:# edit the following two lines to change the boot message" \
>/remaster/msg
echo "#:#" >>/remaster/msg
if [ -r /live/image/boot/isolinux/boot.msg ] ; then
sed 1,2d /live/image/boot/isolinux/boot.msg >>/remaster/msg
else
sed 1,2d /live/image/boot.msg >>/remaster/msg
fi
fi
SQUASHFS_FILE="$(find /live/image/live -name \*.squashfs | head -1)"
if ! grep -q "/remaster/cdrom squashfs" /proc/mounts ; then
mount -t squashfs "$SQUASHFS_FILE" /remaster/cdrom -o ro,loop
fi
if ! grep -q "aufs /remaster/chroot" /proc/mounts ; then
mount -t aufs aufs /remaster/chroot -o br:/remaster/tmp=rw:/remaster/cdrom=rr
fi
for i in dev proc root sys tmp; do
mount --bind /$i /remaster/chroot/$i
done
echo "Now edit the contents of the live CD in this chrooted shell:"
chroot /remaster/chroot
for i in dev proc root sys tmp; do
umount /remaster/chroot/$i
done
${GRML_LIVE_EDITOR} /remaster/msg
[ -d /remaster/iso ] || mkdir /remaster/iso
for i in /live/image/*; do
if [ ! $i = /live/image/live ]; then
cp -R $i /remaster/iso
fi
done
if [ -r /remaster/iso/boot/isolinux/boot.msg ] ; then
rm /remaster/iso/boot/isolinux/boot.msg
fi
# make sure we support usb sticks as well:
if [ -d /live/image/boot/isolinux ] ; then
BOOTSTUFF=/live/image/boot/isolinux
else
BOOTSTUFF=/live/image
fi
[ -d /remaster/iso/boot/isolinux ] || mkdir -p /remaster/iso/boot/isolinux
sed 3,4d "${BOOTSTUFF}"/boot.msg \
>/remaster/iso/boot/isolinux/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)"
umount /remaster/chroot /remaster/cdrom
if [ -f /remaster/iso/boot/isolinux/isolinux.bin ] ; then
ISOLINUX=boot/isolinux/isolinux.bin
ISOLINUX_BOOTCAT=boot/isolinux/boot.cat
else
ISOLINUX=isolinux.bin
ISOLINUX_BOOTCAT=boot.cat
fi
$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"
echo "If you want to customize your ISO, just call grml-live-remaster again."
## END OF FILE #################################################################
# vim: ai filetype=sh expandtab
Jump to Line
Something went wrong with that request. Please try again.