# 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
# ask for Debian mirror {{{
prompt_for_mirror()
{
- MIRROR="$(dialog --stdout --title "${PN}" --inputbox \
- "Please enter Debian mirror you would like to use for installing packages." \
- 0 0 $MIRROR)"
+ [ -n "$ISO" ] && DEFAULT_MIRROR='local' || DEFAULT_MIRROR='net'
+
+ CHOOSE_MIRROR=$(dialog --stdout --title "$PN" --default-item $DEFAULT_MIRROR \
+ --menu "Where do you want to install from?" 0 0 0 \
+ net "install via network (downloading from mirror)" \
+ local "install from local directory/mirror"
+ )
+
+ if [ "$CHOOSE_MIRROR" = 'net' ] ; then
+ [ -n "$MIRROR" ] || MIRROR='ftp://ftp.de.debian.org/debian'
+ MIRROR="$(dialog --stdout --title "${PN}" --inputbox \
+ "Please enter Debian mirror you would like to use for installing packages." \
+ 0 0 $MIRROR)"
+ else # CHROOT_VARIABLES == local
+ [ -n "$ISO" ] || ISO='/mnt/mirror'
+ ISO="$(dialog --stdout --title "${PN}" --inputbox \
+ "Please enter directory name you would like to use for installing packages." \
+ 0 0 $ISO)"
+ fi
}
# }}}
Using hostname $HOSTNAME"
[ -n "$MIRROR" ] && INFOTEXT="$INFOTEXT
Using mirror: $MIRROR"
+ [ -n "$ISO" ] && INFOTEXT="$INFOTEXT
+ Using ISO: $ISO"
INFOTEXT="$INFOTEXT
[ -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"
+ [ -n "$ISO" ] && echo " Using ISO: $ISO"
case "$MNTPOINT" in "$TARGET") ;; *) echo " Important! Continuing will delete all data from ${TARGET}!" ;; esac
echo
einfon "Is this ok for you? [y/N] "
prompt_for_swraid
- # do not prompt for partition dialog if swraid has been configured already
- [ -n "$TARGET" ] || prompt_for_target
+ prompt_for_target
prompt_for_bootmanager
[ -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
+ 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
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"