X-Git-Url: https://git.grml.org/?p=grml-debootstrap.git;a=blobdiff_plain;f=grml-debootstrap;h=26ddbf7c13558dcdb31ca21f79841fa52115d170;hp=a67e260b1c46051a1882b5b8542355e924678e38;hb=e2272afc468270922a68d0a091ec550e8e14bb6e;hpb=4040ae3e3763818f6002af85aec8e9ed7c905c56 diff --git a/grml-debootstrap b/grml-debootstrap index a67e260..26ddbf7 100755 --- a/grml-debootstrap +++ b/grml-debootstrap @@ -11,7 +11,7 @@ set -e # exit on any error # variables {{{ PN="$(basename $0)" -VERSION='0.23' +VERSION='0.27' MNTPOINT="/mnt/debootstrap.$$" # inside the chroot system locales might not be available, so use minimum: @@ -36,47 +36,43 @@ Usage: $PN [options] Bootstrap options: - -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 + -m, --mirror Mirror which should be used for apt-get/aptitude. + -i, --iso 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 Release of new Debian system (default: stable). + -t, --target Target partition (/dev/...) or directory. + -p, --mntpoint Mountpoint used for mounting the target system. + --debopt Extra parameters passed to the debootstrap. --interactive Use interactive mode (frontend). --nodebootstrap Skip debootstrap, only do configuration to the target. - --groot=device Root device for usage in grub, corresponds with + --groot Root device for usage in grub, corresponds with \$TARGET in grub syntax, like hd0,0 for /dev/sda1. - --grub=device Target for grub installation. Use grub syntax for + --grub Target for grub installation. Use grub syntax for specifying, like hd0 for /dev/sda. Configuration options: - -c, --config=file Use specified configuration file, defaults to + -c, --config Use specified configuration file, defaults to /etc/debootstrap/config - -d, --confdir=path Place of config files for debootstrap, defaults + -d, --confdir Place of config files for debootstrap, defaults to /etc/debootstrap - --packages[=f] Install packages defined in /packages. - Option arg: alternative package list file. - --debconf[=f] Pre-seed packages using /debconf-selections. - Option arg: alternative pre-seed db file. + --packages Install packages defined in specified list file. + --debconf Pre-seed packages using specified pre-seed db file. --keep_src_list Do not overwrite user provided apt sources.list. - --hostname=name Hostname of Debian system. - --password=pwd Use specified password as password for user root. - --bootappend=line Add specified appendline to kernel whilst booting. - --chroot-scripts[=f] Execute scripts from /chroot-scripts/ - Option arg: alternative chroot-scripts directory. - --scripts[=d] Execute scripts from /scripts/. - Option arg: alternative scripts directory. + --hostname Hostname of Debian system. + --password Use specified password as password for user root. + --bootappend Add specified appendline to kernel whilst booting. + --chroot-scripts Execute chroot scripts from specified directory. + --scripts Execute scripts from specified directory. Other options: - -v, --verbose Increase verbosity. - -h, --help Print this usage information and exit. - -V, --version Show summary of options and exit. + -v, --verbose Increase verbosity. + -h, --help Print this usage information and exit. + -V, --version Show summary of options and exit. Usage examples can be found in the grml-debootstrap manpage. -Send bugreports to the grml-team: bugs@grml.org || http://grml.org/bugs/ +Send bugreports to the grml-team: bugs (at) grml.org || http://grml.org/bugs/ " } @@ -133,25 +129,25 @@ fi } # }}} -[ "$_opt_mirror" ] && MIRROR=$_opt_mirror -[ "$_opt_iso" ] && ISO=$_opt_iso -[ "$_opt_release" ] && RELEASE=$_opt_release -[ "$_opt_target" ] && TARGET=$_opt_target -[ "$_opt_mntpoint" ] && MNTPOINT=$_opt_mntpoint -[ "$_opt_debopt" ] && DEBOOTSTRAP_OPT=$_opt_debopt -[ "$_opt_interactive" ] && INTERACTIVE=1 -[ "$_opt_config" ] && CONFIGFILE=$_opt_config -[ "$_opt_packages_set" ] && PACKAGES='yes' -[ "$_opt_debconf_set" ] && DEBCONF='yes' +[ "$_opt_mirror" ] && MIRROR=$_opt_mirror +[ "$_opt_iso" ] && ISO=$_opt_iso +[ "$_opt_release" ] && RELEASE=$_opt_release +[ "$_opt_target" ] && TARGET=$_opt_target +[ "$_opt_mntpoint" ] && MNTPOINT=$_opt_mntpoint +[ "$_opt_debopt" ] && DEBOOTSTRAP_OPT=$_opt_debopt +[ "$_opt_interactive" ] && INTERACTIVE=1 +[ "$_opt_config" ] && CONFIGFILE=$_opt_config +[ "$_opt_packages_set" ] && PACKAGES='yes' +[ "$_opt_debconf_set" ] && DEBCONF='yes' [ "$_opt_scripts_set" ] && SCRIPTS='yes' [ "$_opt_chroot_scripts_set" ] && CHROOT_SCRIPTS='yes' -[ "$_opt_keep_src_list" ] && KEEP_SRC_LIST='yes' -[ "$_opt_hostname" ] && HOSTNAME=$_opt_hostname -[ "$_opt_password" ] && ROOTPASSWORD=$_opt_password -[ "$_opt_bootappend" ] && BOOT_APPEND=$_opt_bootappend -[ "$_opt_groot" ] && GROOT=$_opt_groot -[ "$_opt_grub" ] && GRUB=$_opt_grub -[ "$_opt_verbose" ] && VERBOSE="-v" +[ "$_opt_keep_src_list" ] && KEEP_SRC_LIST='yes' +[ "$_opt_hostname" ] && HOSTNAME=$_opt_hostname +[ "$_opt_password" ] && ROOTPASSWORD=$_opt_password +[ "$_opt_bootappend" ] && BOOT_APPEND=$_opt_bootappend +[ "$_opt_groot" ] && GROOT=$_opt_groot +[ "$_opt_grub" ] && GRUB=$_opt_grub +[ "$_opt_verbose" ] && VERBOSE="-v" [ "$_opt_help" ] && { usage ; eend 0 @@ -181,7 +177,7 @@ prompt_for_target() AVAILABLE_PARTITIONS=$(LANG=C fdisk -l 2>/dev/null | \ sed 's/*//' | \ grep -v 'Extended$' | \ - gawk -v num=0 -v ORS=' ' '/^\/dev\// {print $1}') + gawk -v num=0 -v ORS=' ' '/^\/dev\// {print $1}'; echo /dev/md*); if [ -z "$AVAILABLE_PARTITIONS" ] ; then dialog --title "$PN" --trim \ @@ -258,12 +254,14 @@ prompt_for_bootmanager() # ask for Debian release {{{ prompt_for_release() { - RELEASE="$(dialog --stdout --title "${PN}" --default-item etch --menu \ + [ -n "$RELEASE" ] && DEFAULT_RELEASE="$RELEASE" || DEFAULT_RELEASE='lenny' + RELEASE="$(dialog --stdout --title "${PN}" --default-item $DEFAULT_RELEASE --menu \ "Please enter the Debian release you would like to use for installation:" \ - 0 50 3 \ - etch Debian/stable \ - lenny Debian/testing \ - sid Debian/unstable)" + 0 50 4 \ + etch Debian/old-stable \ + lenny Debian/stable \ + squeeze Debian/testing \ + sid Debian/unstable)" } # }}} @@ -272,7 +270,7 @@ prompt_for_hostname() { HOSTNAME="$(dialog --stdout --title "${PN}" --inputbox \ "Please enter the hostname you would like to use for installation:" \ - 0 0 grml)" + 0 0 $HOSTNAME)" } # }}} @@ -300,9 +298,25 @@ prompt_for_password() # 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 http://ftp.de.debian.org/debian)" + [ -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 } # }}} @@ -427,6 +441,19 @@ fi } # }}} +# user should recheck his configuration {{{ +# support full automatic installation: +checkforrun() { + dialog --timeout 10 --title "$PN" \ + --yesno "Do you want to stop at this stage? + +Notice: you are running ${PN} in non-interactive mode. +${PN} will install Debian ${RELEASE} on ${TARGET}. +Last chance to quit. Timeout of 10 seconds running.... + +Do you want to stop now?" 0 0 2>/dev/null +} + # make sure the user is aware of the used configuration {{{ checkconfiguration() { @@ -449,6 +476,8 @@ elif [ -n "$INTERACTIVE" ] ; then Using hostname $HOSTNAME" [ -n "$MIRROR" ] && INFOTEXT="$INFOTEXT Using mirror: $MIRROR" + [ -n "$ISO" ] && INFOTEXT="$INFOTEXT + Using ISO: $ISO" INFOTEXT="$INFOTEXT @@ -465,7 +494,7 @@ else # if not running automatic installation display configuration and prompt fo [ -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] " @@ -485,8 +514,7 @@ interactive_mode() 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 @@ -512,8 +540,6 @@ interactive_mode() fi prompt_for_mirror - - checkconfiguration } # run interactive mode if we didn't get the according configuration yet @@ -524,6 +550,8 @@ if [ -z "$TARGET" -o -n "$INTERACTIVE" ] ; then fi # }}} +checkconfiguration + # finally make sure at least $TARGET is set [the partition for the new system] {{{ if [ -n "$TARGET" ] ; then SHORT_TARGET="${TARGET##*/}" @@ -645,19 +673,6 @@ stage() { } # }}} -# user should recheck his configuration {{{ -# support full automatic installation: -checkforrun() { - dialog --timeout 10 --title "$PN" \ - --yesno "Do you want to stop at this stage? - -Notice: you are running ${PN} in non-interactive mode. -${PN} will install Debian ${RELEASE} on ${TARGET}. -Last chance to quit. Timeout of 10 seconds running.... - -Do you want to stop now?" 0 0 2>/dev/null -} - # create filesystem {{{ mkfs() { if [ -n "$MKFS" ] ; then @@ -738,9 +753,9 @@ preparechroot() { [ -n "$HOSTNAME" ] && echo "HOSTNAME=$HOSTNAME" >> $CHROOT_VARIABLES [ -n "$ISODIR" ] && echo "ISODIR=$ISO" >> $CHROOT_VARIABLES [ -n "$ISO" ] && echo "ISO=$ISO" >> $CHROOT_VARIABLES - [ -n "$MIRROR" ] && echo "CHROOTMIRROR=$MIRROR" >> $CHROOT_VARIABLES [ -n "$MIRROR" ] && echo "MIRROR=$MIRROR" >> $CHROOT_VARIABLES [ -n "$KEEP_SRC_LIST" ] && echo "KEEP_SRC_LIST=$KEEP_SRC_LIST" >> $CHROOT_VARIABLES + [ -n "$PACKAGES" ] && echo "PACKAGES=$PACKAGES" >> $CHROOT_VARIABLES [ -n "$ROOTPASSWORD" ] && echo "ROOTPASSWORD=$ROOTPASSWORD" >> $CHROOT_VARIABLES [ -n "$TARGET" ] && echo "TARGET=$TARGET" >> $CHROOT_VARIABLES [ -n "$TARGET_UUID" ] && echo "TARGET_UUID=$TARGET_UUID" >> $CHROOT_VARIABLES @@ -767,9 +782,11 @@ preparechroot() { cp $VERBOSE $_opt_debconf $MNTPOINT/etc/debootstrap/debconf-selections # copy scripts that should be executed inside the chroot: - _opt_chroot_scripts=${_opt_chroot_scripts:-$CONFFILES/chroot_scripts/} - [ -f $_opt_chroot_scripts -a "$CHROOT_SCRIPTS" = 'yes' ] && \ - cp -a $VERBOSE $_opt_chroot_scripts $MNTPOINT/etc/debootstrap/ + _opt_chroot_scripts=${_opt_chroot_scripts:-$CONFFILES/chroot-scripts/} + [ -d $_opt_chroot_scripts -a "$CHROOT_SCRIPTS" = 'yes' ] && { + mkdir -p $MNTPOINT/etc/debootstrap/chroot-scripts + cp -a $VERBOSE $_opt_chroot_scripts/* $MNTPOINT/etc/debootstrap/chroot-scripts/ + } # notice: do NOT use $CHROOT_VARIABLES inside chroot but statically file instead! cp $VERBOSE $CHROOT_VARIABLES $MNTPOINT/etc/debootstrap/variables @@ -782,7 +799,6 @@ preparechroot() { # provide system's /etc/hosts to the target: if ! [ -f "$MNTPOINT/etc/hosts" ] ; then cp $VERBOSE /etc/hosts $MNTPOINT/etc/hosts - sed -i "s#127.0.0.1 .*#127.0.0.1 localhost $HOSTNAME#" /etc/hosts fi # setup default locales @@ -812,8 +828,11 @@ preparechroot() { # execute all scripts in /etc/debootstrap/scripts/ {{{ execute_scripts() { - if [ -f $_opt_scripts -a "$SCRIPTS" = 'yes' ] ; then - for script in /etc/debootstrap/scripts/* ; do + # make sure we have $MNTPOINT available for our scripts + export MNTPOINT + if [ -d "$_opt_scripts" ] || [ "$SCRIPTS" = 'yes' ] ; then + [ -d "$_opt_scripts" ] && scripts="$_opt_scripts" || scripts="$CONFFILES/scripts/" + for script in ${scripts}/* ; do if [ -x "$script" ] ; then einfo "Executing script $script" $script ; eend $?