X-Git-Url: https://git.grml.org/?p=grml-debootstrap.git;a=blobdiff_plain;f=grml-debootstrap;h=2fb938112539f8df672e6d4e7a0f3d6b8a717ac5;hp=7a84794c7ceea8615f8ed2e752581203ffa8af38;hb=97eb00ef4965f57bb81972b87d0e2fa4fa1ec8d2;hpb=f5daf2d5d3f48c97070786591b263fc5d12fefcc diff --git a/grml-debootstrap b/grml-debootstrap index 7a84794..2fb9381 100755 --- a/grml-debootstrap +++ b/grml-debootstrap @@ -11,7 +11,7 @@ set -e # exit on any error # variables {{{ PN="$(basename $0)" -VERSION='0.34' +VERSION='0.40' MNTPOINT="/mnt/debootstrap.$$" # inside the chroot system locales might not be available, so use minimum: @@ -49,6 +49,7 @@ Bootstrap options: --nodebootstrap Skip debootstrap, only do configuration to the target. --grub Target for grub installation. Usage example: /dev/sda --arch Architecture to use. Currently only i386 is supported. + --filesystem Filesystem that should be used when target is a partition. --insecure Do not download and check Release file signatures. Configuration options: @@ -58,6 +59,8 @@ Configuration options: -d, --confdir Place of config files for debootstrap, defaults to /etc/debootstrap --packages Install packages defined in specified list file. + --nopackages Skip installation of packages defined in + /etc/debootstrap/packages --debconf Pre-seed packages using specified pre-seed db file. --keep_src_list Do not overwrite user provided apt sources.list. --hostname Hostname of Debian system. @@ -90,16 +93,9 @@ check4progs debootstrap dialog || exit 1 check4root || exit 1 # }}} -# source configuration file {{{ +# source main configuration file {{{ if [ -r /etc/debootstrap/config ] ; then - if [ -n "$CONFIGFILE" ] ; then - einfo "Using config file $CONFIGFILE." - if ! . "$CONFIGFILE" ; then - eerror "Error reading config file $CONFIGFILE" ; eend 1 ; exit 1 - fi - else - . /etc/debootstrap/config - fi + . /etc/debootstrap/config fi # }}} @@ -139,6 +135,7 @@ fi [ "$_opt_debopt" ] && DEBOOTSTRAP_OPT=$_opt_debopt [ "$_opt_interactive" ] && INTERACTIVE=1 [ "$_opt_config" ] && CONFIGFILE=$_opt_config +[ "$_opt_filesystem" ] && MKFS="mkfs.$_opt_filesystem" [ "$_opt_packages_set" ] && PACKAGES='yes' [ "$_opt_nopackages" ] && PACKAGES='' [ "$_opt_debconf_set" ] && DEBCONF='yes' @@ -168,6 +165,15 @@ fi } # }}} +# source specified configuration file {{{ +if [ -n "$CONFIGFILE" ] ; then + einfo "Reading specified config file $CONFIGFILE." + if ! . "$CONFIGFILE" ; then + eerror "Error reading config file $CONFIGFILE" ; eend 1 ; exit 1 + fi +fi +# }}} + # backwards compability checks {{{ if [ -n "$GROOT" ] ; then echo "Error: you seem to have \$GROOT configured." >&2 @@ -208,7 +214,7 @@ prompt_for_target() fi PARTITION_LIST=$(for i in $(echo $AVAILABLE_PARTITIONS) ; do - echo "$i $(vol_id --type $i 2>/dev/null || echo [no_filesystem_yet])" + echo "$i $(blkid -s TYPE -o value $i 2>/dev/null || echo [no_filesystem_yet])" done) TARGET=$(dialog --title "$PN" --single-quoted --stdout \ @@ -348,7 +354,7 @@ prompt_for_mirror() 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 + else # CHOOSE_MIRROR == local [ -n "$ISO" ] || ISO='/mnt/mirror' ISO="$(dialog --stdout --title "${PN}" --inputbox \ "Please enter directory name you would like to use for installing packages." \ @@ -389,7 +395,7 @@ AVAILABLE_PARTITIONS=$(LANG=C fdisk -l 2>/dev/null | \ gawk -v num=0 -v ORS=' ' '/^\/dev\// {print $1}') [ -n "$AVAILABLE_PARTITIONS" ] || echo "FIXME: no partitions available?" PARTITION_LIST=$(for i in $(echo $AVAILABLE_PARTITIONS) ; do - echo "$i $(vol_id --type $i 2>/dev/null || echo [no_filesystem_yet]) off" + echo "$i $(blkid -s TYPE -o value $i 2>/dev/null || echo [no_filesystem_yet]) off" done) dialog --title "$PN" --separate-output \ @@ -403,11 +409,17 @@ for i in $(cat $TMPFILE) ; do NUM_PARTITIONS=$((${NUM_PARTITIONS}+1)) done +# force metadata version 0.90 for lenny so old grub can boot from this array. +METADATA_VERSION="" +if [ $RELEASE = "lenny" ]; then + METADATA_VERSION="-e0" +fi + ERRORFILE=$(mktemp) set +e # TODO: better error handling? yes | mdadm --create "${TARGET}" --level="${RAIDLEVEL}" \ - --raid-devices="${NUM_PARTITIONS}" ${SELECTED_PARTITIONS} 1>/dev/null 2>$ERRORFILE + --raid-devices="${NUM_PARTITIONS}" ${METADATA_VERSION} ${SELECTED_PARTITIONS} >/dev/null 2>$ERRORFILE RC=$? set -e @@ -516,14 +528,14 @@ interactive_mode() { welcome_dialog + prompt_for_release + prompt_for_swraid prompt_for_target prompt_for_bootmanager - prompt_for_release - prompt_for_hostname prompt_for_password @@ -637,18 +649,18 @@ bailout(){ # make sure nothing is left inside chroot so we can unmount it [ -x "$MNTPOINT"/etc/init.d/ssh ] && "$MNTPOINT"/etc/init.d/ssh stop [ -x "$MNTPOINT"/etc/init.d/mdadm ] && "$MNTPOINT"/etc/init.d/mdadm stop - # ugly, but make sure we really don't leav anything (/proc /proc is intended) - for ARG in /sys -a /proc /proc ; do - [ -x "$MNTPOINT"/bin/umount ] && chroot "$MNTPOINT" umount $ARG 1>/dev/null 2>&1 || true + # ugly, but make sure we really don't leave anything (/proc /proc is intended) + for ARG in /sys /proc /proc ; do + [ -x "$MNTPOINT"/bin/umount ] && chroot "$MNTPOINT" umount $ARG >/dev/null 2>&1 || true done - umount "$MNTPOINT"/dev 1>/dev/null 2>&1 || true + umount "$MNTPOINT"/dev >/dev/null 2>&1 || true - [ -d "$MNTPOINT/$ISODIR" ] && umount "$MNTPOINT/$ISODIR" 1>/dev/null 2>&1 || true + [ -d "$MNTPOINT/$ISODIR" ] && umount "$MNTPOINT/$ISODIR" >/dev/null 2>&1 || true 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 $? + einfo "Unmounting $MNTPOINT" ; umount "$MNTPOINT" ; eend $? fi if [ -n "$STAGES" ] ; then @@ -701,7 +713,11 @@ mkfs() { # make sure /dev/disk/by-uuid/... is up2date, otherwise grub # will fail to detect the uuid in the chroot - blockdev --rereadpt "${TARGET%%[0-9]*}" + if echo "$TARGET" | grep -q "/dev/md" ; then + blockdev --rereadpt "${TARGET}" + else + blockdev --rereadpt "${TARGET%%[0-9]*}" + fi # give the system 2 seconds, otherwise we might run into # race conditions :-/ sleep 2 @@ -718,7 +734,7 @@ mkfs() { # modify filesystem settings {{{ tunefs() { - if [ -n "$TUNE2FS" ] ; then + if [ -n "$TUNE2FS" ] && echo "$MKFS" | grep -q "mkfs.ext" ; then einfo "Disabling automatic filesystem check on $TARGET via tune2fs" $TUNE2FS $TARGET eend $? @@ -862,6 +878,11 @@ preparechroot() { cp $VERBOSE /etc/network/interfaces $MNTPOINT/etc/network/interfaces fi + # install config file providing some example entries + if [ -r /etc/network/interfaces.examples -a ! -r "$MNTPOINT/etc/network/interfaces.examples" ] ; then + cp /etc/network/interfaces.examples "$MNTPOINT/etc/network/interfaces.examples" + fi + eend 0 } # }}}