X-Git-Url: https://git.grml.org/?p=grml-debootstrap.git;a=blobdiff_plain;f=grml-debootstrap;h=86677382f1c4258d070b48cae74ce087397c419f;hp=4b46eaa8f94d37c4f4059e9b19a4511dd43ed3b9;hb=a9697fb1f06fdf687045eef8381e7b01620ce45a;hpb=06fc8bd266ad5f2ca4f28af7ae636f5db3c3bc57 diff --git a/grml-debootstrap b/grml-debootstrap index 4b46eaa..8667738 100755 --- a/grml-debootstrap +++ b/grml-debootstrap @@ -20,12 +20,13 @@ DEBCONF='yes' DEBIAN_FRONTEND='noninteractive' DEBOOTSTRAP='debootstrap' EXTRAPACKAGES='yes' +FALLBACK_MIRROR='http://cdn.debian.net/debian' FORCE='' HOSTNAME='grml' INITRD='yes' INSTALL_NOTES='/etc/debootstrap/install_notes' LOCALES='yes' -MIRROR='http://cdn.debian.net/debian' +MIRROR="$FALLBACK_MIRROR" MKFS='mkfs.ext3' PACKAGES='yes' PRE_SCRIPTS='yes' @@ -142,7 +143,7 @@ einfon() { eerror() { [ "${RC_ENDCOL}" != "yes" ] && [ "${LAST_E_CMD}" = "ebegin" ] && echo - printf " ${BAD}*${NORMAL} $*\n" + printf " ${BAD}*${NORMAL} $*\n" >&2 LAST_E_CMD=eerror return 0 } @@ -689,11 +690,13 @@ elif [ -n "$INTERACTIVE" ] ; then [ -n "$RELEASE" ] && INFOTEXT="$INFOTEXT Using release: $RELEASE" [ -n "$HOSTNAME" ] && INFOTEXT="$INFOTEXT - Using hostname $HOSTNAME" + Using hostname: $HOSTNAME" [ -n "$MIRROR" ] && INFOTEXT="$INFOTEXT Using mirror: $MIRROR" [ -n "$ISO" ] && INFOTEXT="$INFOTEXT Using ISO: $ISO" + [ -n "$ARCH" ] && INFOTEXT="$INFOTEXT + Using arch: $ARCH" INFOTEXT="$INFOTEXT @@ -704,7 +707,7 @@ Is this ok for you? Notice: selecting 'No' will exit ${PN}." [ $? -eq 0 ] || bailout 0 else # if not running automatic installation display configuration and prompt for execution: - einfo "$PN - Please recheck configuration before execution:" + einfo "$PN [${VERSION}] - Please recheck configuration before execution:" echo echo " Target: $TARGET" @@ -718,9 +721,10 @@ else # if not running automatic installation display configuration and prompt fo fi [ -n "$RELEASE" ] && echo " Using release: $RELEASE" - [ -n "$MIRROR" ] && echo " Using mirror: $MIRROR" [ -n "$HOSTNAME" ] && echo " Using hostname: $HOSTNAME" + [ -n "$MIRROR" ] && echo " Using mirror: $MIRROR" [ -n "$ISO" ] && echo " Using ISO: $ISO" + [ -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}." @@ -774,6 +778,17 @@ if [ -z "$TARGET" -o -n "$INTERACTIVE" ] ; then fi # }}} +# architecture setup {{{ +if [ -n "$ARCH" ] ; then + ARCHCMD="--arch $ARCH" + ARCHINFO=" (${ARCH})" +else + ARCH="$(dpkg --print-architecture)" + ARCHCMD="--arch $ARCH" + ARCHINFO=" (${ARCH})" +fi +# }}} + checkconfiguration # finally make sure at least $TARGET is set [the partition for the new system] {{{ @@ -825,24 +840,13 @@ else fi # }}} -# architecture setup {{{ -if [ -n "$ARCH" ] ; then - ARCHCMD="--arch $ARCH" - ARCHINFO=" (${ARCH})" -else - ARCH="$(dpkg --print-architecture)" - ARCHCMD="--arch $ARCH" - ARCHINFO=" (${ARCH})" -fi -# }}} - # make sure we have the right syntax when using an iso image {{{ if [ -n "$ISO" ] ; then case $ISO in file*) # do nothing ;; *) - ISO=file:$1 + ISO=file:$ISO ;; esac fi @@ -850,6 +854,12 @@ ISODIR=${ISO##file:} ISODIR=${ISODIR%%/} # }}} +# Debian ISOs do not contain signed Release files {{{ +if [ -n "$ISO" ] ; then + DEBOOTSTRAP_OPT="$DEBOOTSTRAP_OPT --no-check-gpg" +fi +# }}} + # create filesystem {{{ mkfs() { if [ -n "$DIRECTORY" ] ; then @@ -942,7 +952,7 @@ prepare_vm() { # if dm-mod isn't available then kpartx will fail with # "Is device-mapper driver missing from kernel? [...]" - if ! kpartx -av $TARGET >/dev/null 2>&1 ; then + if ! kpartx -av $TARGET >/dev/null 2>&1 || ! grep -q device-mapper /proc/misc >/dev/null 2>&1 ; then einfo "Device-mapper not ready yet, trying to load dm-mod module." modprobe dm-mod ; eend $? fi @@ -1008,6 +1018,9 @@ finalize_vm() { rm -f "${MNTPOINT}/tmp/core.img" einfo "Updating grub configuration file." + if [ -n "$BOOT_APPEND" ] ; then + sed -i "/GRUB_CMDLINE_LINUX_DEFAULT/ s#\"\$# ${BOOT_APPEND}\"#" "${MNTPOINT}"/etc/default/grub + fi chroot "${MNTPOINT}" update-grub umount "${MNTPOINT}"/proc @@ -1032,19 +1045,34 @@ debootstrap_system() { fi if grep -q "$MNTPOINT" /proc/mounts || [ -n "$DIRECTORY" ] ; then - einfo "Running $DEBOOTSTRAP $DEBOOTSTRAP_OPT for release ${RELEASE}${ARCHINFO} using ${MIRROR}${ISO}" - if [ -n "$MIRROR" ] ; then - einfo "Executing: $DEBOOTSTRAP $ARCHCMD $KEYRING $DEBOOTSTRAP_OPT $RELEASE $MNTPOINT $MIRROR" - $DEBOOTSTRAP $ARCHCMD $KEYRING $DEBOOTSTRAP_OPT $RELEASE $MNTPOINT $MIRROR - else - einfo "Executing: $DEBOOTSTRAP $ARCHCMD $KEYRING $DEBOOTSTRAP_OPT $RELEASE $MNTPOINT $ISO" - $DEBOOTSTRAP $ARCHCMD $KEYRING $DEBOOTSTRAP_OPT $RELEASE $MNTPOINT $ISO - fi - eend $? + : else - eerror "Error: $MNTPOINT not mounted, can not continue." - eend 1 + eerror "Error: $MNTPOINT not mounted, can not continue." + eend 1 ; exit 1 fi + + if [ -n "$ISO" ] ; then + einfo "Running $DEBOOTSTRAP $DEBOOTSTRAP_OPT for release ${RELEASE}${ARCHINFO} using ${ISO}" + einfo "Executing: $DEBOOTSTRAP $ARCHCMD $KEYRING $DEBOOTSTRAP_OPT $RELEASE $MNTPOINT $ISO" + $DEBOOTSTRAP $ARCHCMD $KEYRING $DEBOOTSTRAP_OPT $RELEASE $MNTPOINT $ISO + RC=$? + else + einfo "Running $DEBOOTSTRAP $DEBOOTSTRAP_OPT for release ${RELEASE}${ARCHINFO} using ${MIRROR}" + einfo "Executing: $DEBOOTSTRAP $ARCHCMD $KEYRING $DEBOOTSTRAP_OPT $RELEASE $MNTPOINT $MIRROR" + $DEBOOTSTRAP $ARCHCMD $KEYRING $DEBOOTSTRAP_OPT $RELEASE $MNTPOINT $MIRROR + RC=$? + fi + + if [ $RC -ne 0 ] ; then + if [ -r "$MNTPOINT/debootstrap/debootstrap.log" ] && \ + [ -s "$MNTPOINT/debootstrap/debootstrap.log" ] ; then + einfo "Presenting last ten lines of debootstrap.log:" + tail -10 $MNTPOINT/debootstrap/debootstrap.log + einfo "End of debootstrap.log" + fi + fi + + eend $RC } # }}} @@ -1064,6 +1092,7 @@ preparechroot() { [ -n "$DEBIAN_FRONTEND" ] && echo "DEBIAN_FRONTEND=\"$DEBIAN_FRONTEND\"" >> $CHROOT_VARIABLES [ -n "$DEBOOTSTRAP" ] && echo "DEBOOTSTRAP=\"$DEBOOTSTRAP\"" >> $CHROOT_VARIABLES [ -n "$EXTRAPACKAGES" ] && echo "EXTRAPACKAGES=\"$EXTRAPACKAGES\"" >> $CHROOT_VARIABLES + [ -n "$FALLBACK_MIRROR" ] && echo "FALLBACK_MIRROR=\"$FALLBACK_MIRROR\"" >> $CHROOT_VARIABLES [ -n "$FORCE" ] && echo "FORCE=\"$FORCE\"" >> $CHROOT_VARIABLES [ -n "$GRMLREPOS" ] && echo "GRMLREPOS=\"$GRMLREPOS\"" >> $CHROOT_VARIABLES [ -n "$GRUB" ] && echo "GRUB=\"$GRUB\"" >> $CHROOT_VARIABLES @@ -1203,18 +1232,29 @@ execute_scripts() { # execute chroot-script {{{ chrootscript() { if ! [ -r "$MNTPOINT/bin/chroot-script" ] ; then - mount_target + mount_target fi - if [ -x "$MNTPOINT/bin/chroot-script" ] ; then - einfo "Executing chroot-script now" - mount --bind /dev "$MNTPOINT"/dev - chroot "$MNTPOINT" /bin/chroot-script ; RC=$? - umount "$MNTPOINT"/dev - eend $RC + if ! [ -x "$MNTPOINT/bin/chroot-script" ] ; then + eerror "Fatal: $MNTPOINT/bin/chroot-script could not be found." + eend 1 else - eerror "Fatal: $MNTPOINT/bin/chroot-script could not be found." - eend 1 + einfo "Executing chroot-script now" + mount --bind /dev "$MNTPOINT"/dev + chroot "$MNTPOINT" /bin/chroot-script ; RC=$? + umount "$MNTPOINT"/dev + eend $RC + fi + + # finally get rid of chroot-script again, there's no good reason to + # keep it on the installed system + if grep -q GRML_CHROOT_SCRIPT_MARKER "${MNTPOINT}/bin/chroot-script" ; then + einfo "Removing chroot-script again" + rm -f "${MNTPOINT}/bin/chroot-script" + eend $? + else + einfo "Keeping chroot-script as string GRML_CHROOT_SCRIPT_MARKER could not be found" + eend 0 fi } # }}}