# variables {{{
PN="$(basename $0)"
-VERSION='0.27'
+VERSION='0.28'
MNTPOINT="/mnt/debootstrap.$$"
# inside the chroot system locales might not be available, so use minimum:
-m, --mirror <URL> Mirror which should be used for apt-get/aptitude.
-i, --iso <mnt> Mountpoint where a Debian ISO is mounted to, for use
instead of fetching packages from a mirror.
- -r, --release <name> Release of new Debian system (default: stable).
- -t, --target <target> Target partition (/dev/...) or directory.
- -p, --mntpoint <mnt> Mountpoint used for mounting the target system.
- --debopt <params> Extra parameters passed to the debootstrap.
+ -r, --release <name> Release of new Debian system (default: lenny).
+ -t, --target <target> Target partition (/dev/...) or directory where the
+ system should be installed to.
+ -p, --mntpoint <mnt> Mountpoint used for mounting the target system,
+ has no effect if -t is given and represents a directory.
+ --debopt <params> Extra parameters passed to the debootstrap command.
--interactive Use interactive mode (frontend).
--nodebootstrap Skip debootstrap, only do configuration to the target.
--groot <device> Root device for usage in grub, corresponds with
AVAILABLE_PARTITIONS=$(LANG=C fdisk -l 2>/dev/null | \
sed 's/*//' | \
grep -v 'Extended$' | \
- gawk -v num=0 -v ORS=' ' '/^\/dev\// {print $1}'; echo /dev/md*);
+ gawk -v num=0 -v ORS=' ' '/^\/dev\// {print $1}'; ls /dev/md* 2>/dev/null || true);
if [ -z "$AVAILABLE_PARTITIONS" ] ; then
dialog --title "$PN" --trim \
prompt_for_bootmanager()
{
ADDITIONAL_PARAMS=""
- for device in sda hda; do
- if [ /dev/$device != ${TARGET%[0-9]} ]; then
+
+ if echo "$TARGET" | grep -q "/dev/md" ; then
+ MBRPART="all disks of Software RAID $TARGET"
+ else
+ # figure out whole disk device
+ found=
+ for device in /dev/disk/by-id/*
+ do
+ [ $(readlink -f $device) = ${TARGET} ] || continue
+ found=1
+ break
+ done
+ [ -n "$found" ] && MBRDISK=$(echo ${device}|sed -e 's/-part[0-9][0-9]*$//')
+ if [ -e "$MBRDISK" ]; then
+ MBRDISK=$(readlink -f $MBRDISK)
+ else
+ # fall back to old behaviour
+ MBRDISK=$(echo ${TARGET} | sed -e 's/[0-9][0-9]*$/')
+ fi
+
+ MBRPART="MBR of $MBRDISK"
+ fi
+
+ for device in cciss/c0d0 sda hda; do
+ if [ /dev/$device != ${MBRDISK} ]; then
grep -q $device /proc/partitions && \
- ADDITIONAL_PARAMS=:$device:"install bootmanager grub into MBR of /dev/${device}"
+ ADDITIONAL_PARAMS="$ADDITIONAL_PARAMS:$device:install bootmanager grub into MBR of /dev/$device"
fi
done
ADDITIONAL_PARAMS=${ADDITIONAL_PARAMS#:}
OIFS="$IFS"; IFS=:
- if echo $TARGET | grep -q "/dev/md" ; then
- MBRPART="all disks of Software RAID $TARGET"
- else
- MBRPART="MBR of ${TARGET%[0-9]}"
- fi
-
GETMBR=$(dialog --stdout --title "$PN" --default-item mbr \
--menu "Where do you want to install the bootmanager grub?" 0 0 0 \
mbr "install bootmanager into $MBRPART" \
case "$GETMBR" in
mbr)
# /dev/md0: has to be installed in MBR of /dev/md0 and not in /dev/md:
- if echo $TARGET | grep -q "*md*" ; then
- BOOT_PARTITION="${TARGET}"
+ if echo "$TARGET" | grep -q "/dev/md" ; then
+ BOOT_PARTITION="$TARGET"
else
- BOOT_PARTITION="${TARGET%[0-9]}"
+ BOOT_PARTITION="$MBRDISK"
fi
;;
partition)
einfo "$PN - Please recheck configuration before execution:"
echo
echo " Target: $TARGET"
- case "$MNTPOINT" in "$TARGET") ;; *) echo " Mount point: $MNTPOINT" ;; esac
- [ -n "$GRUB" ] && echo " Install grub: $GRUB" || echo " Install grub: no"
- [ -n "$RELEASE" ] && echo " Using release: $RELEASE"
- [ -n "$MIRROR" ] && echo " Using mirror: $MIRROR"
- [ -n "$ISO" ] && echo " Using ISO: $ISO"
- case "$MNTPOINT" in "$TARGET") ;; *) echo " Important! Continuing will delete all data from ${TARGET}!" ;; esac
- echo
+
+ # do not display if MNTPOINT is the default one
+ case "$MNTPOINT" in /mnt/debootstrap*) ;; *) echo " Mount point: $MNTPOINT" ;; esac
+
+ [ -n "$GRUB" ] && echo " Install grub: $GRUB" || echo " Install grub: no"
+ [ -n "$RELEASE" ] && echo " Using release: $RELEASE"
+ [ -n "$MIRROR" ] && echo " Using mirror: $MIRROR"
+ [ -n "$HOSTNAME" ] && echo " Using hostname: $HOSTNAME"
+ [ -n "$ISO" ] && echo " Using ISO: $ISO"
+
+ echo " Important! Continuing will delete all data from ${TARGET}!"
+
+ echo
einfon "Is this ok for you? [y/N] "
read a
if ! [ "$a" = 'y' -o "$a" = 'Y' ] ; then
[ -x "$MNTPOINT"/bin/umount ] && chroot "$MNTPOINT" umount /proc 1>/dev/null 2>&1
[ -x "$MNTPOINT"/bin/umount ] && chroot "$MNTPOINT" umount /proc 1>/dev/null 2>&1
[ -d "$MNTPOINT/$ISODIR" ] && umount "$MNTPOINT/$ISODIR" 1>/dev/null 2>&1
- einfo "Unmounting $MNTPOINT" ; umount "$MNTPOINT" ; eend $?
+
+ if [ -n "$DIRECTORY" ] ; then
+ einfo "Not unmounting $MNTPOINT as you requested me to install into a directory of your own choice." ; eend 0
+ else
+ einfo "Unmounting $MNTPOINT" ; umount "$MNTPOINT" ; eend $?
+ fi
if [ -n "$STAGES" ] ; then
echo -n "Removing stages directory ${STAGES}: "
# create filesystem {{{
mkfs() {
- if [ -n "$MKFS" ] ; then
- einfo "Running $MKFS on $TARGET"
- $MKFS $TARGET
- TARGET_UUID="$(vol_id -u $TARGET 2>/dev/null || echo '')"
- eend $?
+ if [ -n "$DIRECTORY" ] ; then
+ einfo "Running grml-debootstrap on a directory, skipping mkfs stage."
+ else
+ if grep -q "$TARGET" /proc/mounts ; then
+ eerror "$TARGET already mounted, exiting to avoid possible damage. (Manually unmount $TARGET)" ; eend 1
+ exit 1
+ fi
+
+ if [ -n "$MKFS" ] ; then
+ einfo "Running $MKFS on $TARGET"
+ $MKFS $TARGET
+ TARGET_UUID="$(vol_id -u $TARGET 2>/dev/null || echo '')"
+ eend $?
+ fi
+
fi
}
# }}}
einfo "Running grml-debootstrap on a directory, nothing to mount."
else
if grep -q $TARGET /proc/mounts ; then
- eerror "$TARGET already mounted, exiting."
+ ewarn "$TARGET already mounted, continuing anyway." ; eend 0
else
[ -d "$MNTPOINT" ] || mkdir -p "$MNTPOINT"
einfo "Mounting $TARGET to $MNTPOINT"
# install main chroot {{{
debootstrap_system() {
- if ! grep -q $MNTPOINT /proc/mounts ; then
- mount_target
- fi
if [ "$_opt_nodebootstrap" ]; then
einfo "Skipping debootstrap as requested."
return
fi
- if grep -q $MNTPOINT /proc/mounts || [ -n "$DIRECTORY" ] ; then
+
+ if grep -q "$MNTPOINT" /proc/mounts || [ -n "$DIRECTORY" ] ; then
einfo "Running $DEBOOTSTRAP $DEBOOTSTRAP_OPT for release ${RELEASE}${ARCHINFO} using ${MIRROR}${ISO}"
- [ -n "$MIRROR" ] && $DEBOOTSTRAP $ARCHCMD $DEBOOTSTRAP_OPT $RELEASE $MNTPOINT $MIRROR || \
- $DEBOOTSTRAP $ARCHCMD $DEBOOTSTRAP_OPT $RELEASE $MNTPOINT $ISO
+ if [ -n "$MIRROR" ] ; then
+ $DEBOOTSTRAP $ARCHCMD $DEBOOTSTRAP_OPT $RELEASE $MNTPOINT $MIRROR
+ else
+ $DEBOOTSTRAP $ARCHCMD $DEBOOTSTRAP_OPT $RELEASE $MNTPOINT $ISO
+ fi
eend $?
else
eerror "Error: $MNTPOINT not mounted, can not continue."
cp $VERBOSE $CONFFILES/chroot-script $MNTPOINT/bin/chroot-script
chmod 755 $MNTPOINT/bin/chroot-script
- mkdir $MNTPOINT/etc/debootstrap/
+ [ -d "$MNTPOINT"/etc/debootstrap/ ] || mkdir "$MNTPOINT"/etc/debootstrap/
# make sure we have our files for later use via chroot-script
cp $VERBOSE $CONFFILES/config $MNTPOINT/etc/debootstrap/
eend $?
fi
fi
+
if grep -q "$MNTPOINT" /proc/mounts ; then
if [ -n "$PARTITION" ] ; then
einfo "Unmount $MNTPOINT"