[ -n "$INSTALL_NOTES" ] || INSTALL_NOTES='/etc/debootstrap/install_notes'
[ -n "$LOCALES" ] || LOCALES='yes'
[ -n "$MIRROR" ] || MIRROR="$FALLBACK_MIRROR"
-[ -n "$MKFS" ] || MKFS='mkfs.ext3'
+[ -n "$MKFS" ] || MKFS='mkfs.ext4'
[ -n "$PACKAGES" ] || PACKAGES='yes'
[ -n "$PRE_SCRIPTS" ] || PRE_SCRIPTS='yes'
[ -n "$RECONFIGURE" ] || RECONFIGURE='console-data'
[ -n "$TUNE2FS" ] || TUNE2FS='tune2fs -c0 -i0'
[ -n "$UPGRADE_SYSTEM" ] || UPGRADE_SYSTEM='yes'
[ -n "$VMSIZE" ] || VMSIZE="2G"
+[ -n "$FIXED_DISK_IDENTIFIERS" ] || FIXED_DISK_IDENTIFIERS="no"
# inside the chroot system locales might not be available, so use minimum:
export LANG=C
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.)
+ --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).
Other options:
-v, --verbose Increase verbosity.
+ --debug Execute in very verbose way.
-h, --help Print this usage information and exit.
-V, --version Show summary of options and exit.
[ "$_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
[ "$_opt_grub" ] && GRUB=$_opt_grub
[ "$_opt_arch" ] && ARCH=$_opt_arch
[ "$_opt_insecure" ] && echo "Warning: --insecure is deprecated, continuing anyway."
[ "$_opt_force" ] && FORCE=$_opt_force
[ "$_opt_verbose" ] && VERBOSE="-v"
+[ "$_opt_debug" ] && DEBUG="true"
+
+if [ "$DEBUG" = "true" ] ; then
+ set -x
+fi
[ "$_opt_help" ] && {
usage ; eend 0
fi
# }}}
+# It is not possible to build amd64 on i686. {{{
+CURRENT_ARCH="$(uname -m)"
+if [ "$CURRENT_ARCH" != "x86_64" ] ; then
+ if [ "$ARCH" = "amd64" ] ; then
+ eerror "It is not possible to build amd64 on $CURRENT_ARCH." ; eend 1
+ bailout 1
+ fi
+fi
+# }}}
+
checkconfiguration
# finally make sure at least $TARGET is set [the partition for the new system] {{{
MKFS=''
TUNE2FS=''
FSCK=''
- GRUB=''
# make sure we normalise the path to an absolute directory name so something like:
# mkdir -p foo/a bar/a; (cd foo; grml-debootstrap -t a)&; (cd bar; grml-debootstrap -t a)&; wait
# works
einfo "Running $MKFS on $TARGET"
$MKFS $TARGET ; RC=$?
+ if [ "$FIXED_DISK_IDENTIFIERS" = "yes" ] ; then
+ if ! echo "$MKFS" | grep -q "mkfs.ext" ; then
+ eerror "Not changing disk uuid for $TARGET because $MKFS doesn't seem to match for ext{2,3,4} file system"
+ eend 1
+ bailout 1
+ else
+ einfo "Changing disk uuid for $TARGET to fixed (non-random) value using tune2fs"
+ tune2fs "$TARGET" -U 26ada0c0-1165-4098-884d-aafd2220c2c6
+ eend $?
+ fi
+ fi
+
# make sure /dev/disk/by-uuid/... is up2date, otherwise grub
# will fail to detect the uuid in the chroot
if echo "$TARGET" | grep -q "/dev/md" ; then
qemu-img create -f raw "${TARGET}" "${VMSIZE}"
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"
- parted -s "${TARGET}" 'mkpart primary ext3 2M -1'
+ if [ "$FIXED_DISK_IDENTIFIERS" = "yes" ] ; then
+ einfo "Adjusting disk signature to a fixed (non-random) value"
+ MBRTMPFILE=$(mktemp)
+ dd if="${TARGET}" of="${MBRTMPFILE}" bs=512 count=1
+ echo -en "\x41\x41\x41\x41\x41" | dd of="${MBRTMPFILE}" conv=notrunc seek=440 bs=1
+ dd if="${MBRTMPFILE}" of="${TARGET}" conv=notrunc
+ eend $?
+ fi
+ parted -s "${TARGET}" 'mkpart primary ext4 2M -1'
# if dm-mod isn't available then kpartx will fail with
# "Is device-mapper driver missing from kernel? [...]"
[ -n "$MIRROR" ] && echo "MIRROR=\"$MIRROR\"" >> $CHROOT_VARIABLES
[ -n "$MKFS" ] && echo "MKFS=\"$MKFS\"" >> $CHROOT_VARIABLES
[ -n "$NOPASSWORD" ] && echo "NOPASSWORD=\"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
[ -n "$RECONFIGURE" ] && echo "RECONFIGURE=\"$RECONFIGURE\"" >> $CHROOT_VARIABLES
[ -d $CONFFILES/usr ] && cp $VERBOSE -a -L $CONFFILES/usr/* $MNTPOINT/usr/
[ -d $CONFFILES/var ] && cp $VERBOSE -a -L $CONFFILES/var/* $MNTPOINT/var/
- # copy local network setup to chroot
- if [ -r /etc/network/interfaces -a ! -r "${MNTPOINT}"/etc/network/interfaces ] ; then
- [ -d $MNTPOINT/etc/network ] || mkdir $MNTPOINT/etc/network
- cp $VERBOSE /etc/network/interfaces $MNTPOINT/etc/network/interfaces
+ # network setup
+ DEFAULT_INTERFACES="# /etc/network/interfaces - generated by grml-debootstrap
+
+# Include files from /etc/network/interfaces.d when using
+# ifupdown v0.7.44 or newer:
+#source-directory /etc/network/interfaces.d
+
+auto lo
+iface lo inet loopback
+
+allow-hotplug eth0
+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 "Setting up Virtual Machine, installing default /etc/network/interfaces"
+ echo "$DEFAULT_INTERFACES" > "${MNTPOINT}/etc/network/interfaces"
+ eend $?
+ elif [ -r /etc/network/interfaces ] ; then
+ einfo "Copying /etc/network/interfaces from host to target system"
+ cp $VERBOSE /etc/network/interfaces "${MNTPOINT}/etc/network/interfaces"
+ eend $?
+ else
+ ewarn "Couldn't read /etc/network/interfaces, installing default /etc/network/interfaces"
+ echo "$DEFAULT_INTERFACES" > "${MNTPOINT}/etc/network/interfaces"
+ eend $?
fi
# install config file providing some example entries
else
einfo "Executing chroot-script now"
mount --bind /dev "$MNTPOINT"/dev
- chroot "$MNTPOINT" /bin/chroot-script ; RC=$?
+ if [ "$DEBUG" = "true" ] ; then
+ chroot "$MNTPOINT" /bin/sh -x /bin/chroot-script ; RC=$?
+ else
+ chroot "$MNTPOINT" /bin/chroot-script ; RC=$?
+ fi
umount "$MNTPOINT"/dev
eend $RC
fi