+# helper functions {{{
+stage() {
+ if grep -q done "$STAGES/$1" 2>/dev/null ; then
+ echo " * Notice: stage $1 has been executed already, skipping execution therefore."
+ return 1
+ else
+ echo "$2" > "$STAGES/$1"
+ return 0
+ fi
+}
+# }}}
+
+# define chroot mirror {{{
+chrootmirror() {
+ if [ -n "$CHROOTMIRROR" ] ; then
+ echo "deb $CHROOTMIRROR $RELEASE main contrib non-free" > /etc/apt/sources.list
+ fi
+}
+# }}}
+
+# set up grml repository {{{
+grmlrepos() {
+ if [ -n "$GRMLREPOS" ] ; then
+ echo 'deb http://grml.org/repos/ ./' >> /etc/apt/sources.list
+ fi
+}
+# }}}
+
+# set up kernel-img.conf {{{
+kernelimg_conf() {
+ if ! [ -r /etc/kernel-img.conf ] ; then
+ echo "Setting up /etc/kernel-img.conf"
+ cat > /etc/kernel-img.conf << EOF
+# Kernel Image management overrides
+# See kernel-img.conf(5) for details
+do_initrd = Yes
+do_symlinks = Yes
+EOF
+ fi
+}
+# }}}
+
+# create default devices {{{
+makedev() {
+ if ! [ -r /dev/hda20 ] ; then
+ echo "Creating generic devices in /dev - this might take a while..."
+ cd /dev && MAKEDEV generic
+ fi
+}
+# }}}
+
+# install additional packages {{{
+packages() {
+ if [ "$PACKAGES" = 'yes' ] ; then
+ if ! [ -r /etc/debootstrap/packages ] ; then
+ echo "Error: /etc/debootstrap/packages not found, exiting."
+ exit 1
+ else
+ apt-get update
+ apt-get --force-yes -y install $(cat /etc/debootstrap/packages) $GRMLPACKAGES
+ fi
+ fi
+}
+# }}}
+
+# sarge specific stuff: mkinitrd {{{
+mkinitrd() {
+ if [ "$RELEASE" = 'sarge' ] ; then
+ sed -i "s#ROOT=probe#ROOT=$TARGET#" /etc/mkinitrd/mkinitrd.conf
+ fi
+}
+# }}}
+
+# install kernel packages {{{
+kernel() {
+ # do not override $KERNEL if set via config file
+ if [ -z "$KERNEL" ] ; then
+ if [ "$ARCH" = 'i386' ] ; then
+ KERNEL='2.6-686'
+ elif [ "$ARCH" = 'amd64' ] ; then
+ KERNEL='2.6-amd64'
+ fi
+ fi
+
+ if [ -n "$KERNEL" ] ; then