Add option --vm to install VMs into LVs and such
[grml-debootstrap.git] / grml-debootstrap
index 06200d8..3e77319 100755 (executable)
@@ -77,9 +77,11 @@ Bootstrap options:
 
 Options for Virtual Machine deployment:
 
-      --vmfile           Set up a Virtual Machine (raw format) instead of installing
+      --vm               Set up a Virtual Machine, instead of plainly installing
                          to a partition or directory, to be combined with --target,
-                         like: --vmfile --target /mnt/sda1/qemu.img
+                         like: --vm --target /dev/mapper/your-vm-disk
+      --vmfile           Like --vm, but install into a file (raw format).
+                         Example: --vmfile --target /mnt/sda1/qemu.img
       --vmsize <size>    Use specified size for size of VM file (default: 2G).
                          Syntax as supported by qemu-img, like: --vmsize 3G
 
@@ -93,10 +95,12 @@ Configuration options:
                              instead of using /etc/debootstrap/packages.
       --nopackages         Skip installation of packages defined in
                              /etc/debootstrap/packages
+      --nokernel           Skip installation of default kernel images.
       --nointerfaces       Do not copy /etc/network/interfaces from host system
                            to target system.
                            (This option is automatically enabled when using --vmfile.)
-      --nokernel           Skip installation of default kernel images.
+      --defaultinterfaces  Install a default /etc/network/interfaces file (enabling
+                           DHCP for eth0) instead of taking over config from host system.
       --debconf <file>     Pre-seed packages using specified pre-seed db file.
       --grmlrepos          Enable Grml's Debian repository (deb.grml.org).
       --backportrepos      Enable Debian's backports repository (backports.debian.org).
@@ -313,7 +317,8 @@ fi
 [ "$_opt_iso" ]                 && ISO=$_opt_iso
 [ "$_opt_release" ]             && RELEASE=$_opt_release
 [ "$_opt_target" ]              && TARGET=$_opt_target
-[ "$_opt_vmfile" ]              && VIRTUAL=1
+[ "$_opt_vm" ]                  && VIRTUAL=1
+[ "$_opt_vmfile" ]              && VMFILE=1 && VIRTUAL=1
 [ "$_opt_vmsize" ]              && VMSIZE=$_opt_vmsize
 [ "$_opt_mntpoint" ]            && MNTPOINT=$_opt_mntpoint
 [ "$_opt_debopt" ]              && DEBOOTSTRAP_OPT=$_opt_debopt
@@ -332,6 +337,7 @@ fi
 [ "$_opt_hostname" ]            && HOSTNAME=$_opt_hostname
 [ "$_opt_password" ]            && ROOTPASSWORD=$_opt_password
 [ "$_opt_nopassword" ]          && NOPASSWORD='yes'
+[ "$_opt_defaultinterfaces" ]   && DEFAULTINTERFACES="true"
 [ "$_opt_nointerfaces" ]        && NOINTERFACES="true"
 [ "$_opt_nokernel" ]            && NOKERNEL="true"
 [ "$_opt_bootappend" ]          && BOOT_APPEND=$_opt_bootappend
@@ -737,7 +743,9 @@ else # if not running automatic installation display configuration and prompt fo
    [ -n "$ARCH" ]     && echo "   Using arch:      $ARCH"
    if [ -n "$VIRTUAL" ] ; then
       echo "   Deploying as Virtual Machine."
-      [ -n "$VMSIZE" ] && echo "   Using Virtual Disk file with size of ${VMSIZE}."
+      if [ -n "$VMSIZE" -a -n "$VMFILE" ]; then
+         echo "   Using Virtual Disk file with size of ${VMSIZE}."
+      fi
    fi
 
    if [ ! -t 0 -a -z "$ROOTPASSWORD" -a -z "$NOPASSWORD" ] ; then
@@ -971,18 +979,25 @@ mount_target() {
 # prepare VM image for usage with debootstrap {{{
 prepare_vm() {
   if [ -z "$VIRTUAL" ] ; then
-     return 0 # be quite by intention
+     return 0 # be quiet by intention
   fi
 
-  if [ -b "$TARGET" ] ; then
+  if [ -b "$TARGET" -a -n "$VMFILE" ] ; then
      eerror "Error: specified virtual disk target ($TARGET) is an existing block device."
      eend 1
      bailout 1
   fi
+  if [ ! -b "$TARGET" -a -z "$VMFILE" ] ; then
+     eerror "Error: specified virtual disk target ($TARGET) does not exist yet."
+     eend 1
+     bailout 1
+  fi
 
   ORIG_TARGET="$TARGET" # store for later reuse
 
-  qemu-img create -f raw "${TARGET}" "${VMSIZE}"
+  if [ -n "$VMFILE" ]; then
+    qemu-img create -f raw "${TARGET}" "${VMSIZE}"
+  fi
   echo 4 66 | /usr/share/grml-debootstrap/bootgrub.mksh -A | dd of="$TARGET" conv=notrunc
   dd if=/dev/zero bs=1 conv=notrunc count=64 seek=446 of="$TARGET"
   if [ "$FIXED_DISK_IDENTIFIERS" = "yes" ] ; then
@@ -1153,7 +1168,6 @@ preparechroot() {
   [ -n "$MIRROR" ]              && echo "MIRROR=\"$MIRROR\""                           >> $CHROOT_VARIABLES
   [ -n "$MKFS" ]                && echo "MKFS=\"$MKFS\""                               >> $CHROOT_VARIABLES
   [ -n "$NOPASSWORD" ]          && echo "NOPASSWORD=\"true\""                          >> $CHROOT_VARIABLES
-  [ -n "$NOINTERFACES" ]        && echo "NOINTERFACES=\"true\""                        >> $CHROOT_VARIABLES
   [ -n "$NOKERNEL" ]            && echo "NOKERNEL=\"true\""                            >> $CHROOT_VARIABLES
   [ -n "$PACKAGES" ]            && echo "PACKAGES=\"$PACKAGES\""                       >> $CHROOT_VARIABLES
   [ -n "$PRE_SCRIPTS" ]         && echo "PRE_SCRIPTS=\"$PRE_SCRIPTS\""                 >> $CHROOT_VARIABLES
@@ -1247,8 +1261,12 @@ iface eth0 inet dhcp
 
   if [ -n "$NOINTERFACES" ] ; then
     einfo "Not installing /etc/network/interfaces as requested via --nointerfaces option" ; eend 0
+  elif [ -n "$DEFAULT_INTERFACES" ] ; then
+    einfo "Installing default /etc/network/interfaces as requested via --defaultinterfaces options."
+    echo "$DEFAULT_INTERFACES" > "${MNTPOINT}/etc/network/interfaces"
+    eend $?
   elif [ -n "$VIRTUAL" ] ; then
-    einfo "Installing into Virtual Machine, installing default /etc/network/interfaces"
+    einfo "Setting up Virtual Machine, installing default /etc/network/interfaces"
     echo "$DEFAULT_INTERFACES" > "${MNTPOINT}/etc/network/interfaces"
     eend $?
   elif [ -r /etc/network/interfaces ] ; then