[ -n "$DEBCONF" ] || DEBCONF='yes'
[ -n "$DEBIAN_FRONTEND" ] || DEBIAN_FRONTEND='noninteractive'
[ -n "$DEBOOTSTRAP" ] || DEBOOTSTRAP='debootstrap'
-[ -n "$DEFAULT_LANGUAGE" ] || DEFAULT_LANGUAGE='en_US:en'
-[ -n "$DEFAULT_LOCALES" ] || DEFAULT_LOCALES='en_US.UTF-8'
[ -n "$DISK_IDENTIFIER" ] || DISK_IDENTIFIER='26ada0c0-1165-4098-884d-aafd2220c2c6'
[ -n "$EXTRAPACKAGES" ] || EXTRAPACKAGES='yes'
[ -n "$FALLBACK_MIRROR" ] || FALLBACK_MIRROR='http://deb.debian.org/debian'
[ -n "$HOSTNAME" ] || HOSTNAME='grml'
[ -n "$INITRD" ] || INITRD='yes'
[ -n "$INSTALL_NOTES" ] || INSTALL_NOTES='/etc/debootstrap/install_notes'
-[ -n "$LOCALES" ] || LOCALES='yes'
[ -n "$MIRROR" ] || MIRROR="$FALLBACK_MIRROR"
[ -n "$MKFS" ] || MKFS='mkfs.ext4'
[ -n "$MKFS_OPTS" ] || MKFS_OPTS=''
--hostname <name> Hostname of Debian system.
--nopassword Do not prompt for the root password.
--password <pwd> Use specified password as password for user root.
+ --sshcopyid Use locally available public keys to authorise root login on the target system.
--bootappend <line> Add specified appendline to kernel whilst booting.
--chroot-scripts <d> Execute chroot scripts from specified directory.
--pre-scripts <dir> Execute scripts from specified directory (before chroot-scripts).
# }}}
# cmdline handling {{{
-CMDLINE_OPTS=mirror:,iso:,release:,target:,mntpoint:,debopt:,defaultinterfaces,interactive,nodebootstrap,nointerfaces,nokernel,nopackages,filesystem:,config:,confdir:,packages:,chroot-scripts:,scripts:,post-scripts:,pre-scripts:,debconf:,vm,vmfile,vmsize:,keep_src_list,hostname:,password:,nopassword,grmlrepos,backportrepos,bootappend:,grub:,efi:,arch:,insecure,verbose,help,version,force,debug,contrib,non-free,remove-configs
+CMDLINE_OPTS=mirror:,iso:,release:,target:,mntpoint:,debopt:,defaultinterfaces,interactive,nodebootstrap,nointerfaces,nokernel,nopackages,filesystem:,config:,confdir:,packages:,chroot-scripts:,scripts:,post-scripts:,pre-scripts:,debconf:,vm,vmfile,vmsize:,keep_src_list,hostname:,password:,nopassword,grmlrepos,backportrepos,bootappend:,grub:,efi:,arch:,insecure,verbose,help,version,force,debug,contrib,non-free,remove-configs,sshcopyid
_opt_temp=$(getopt --name grml-debootstrap -o +m:i:r:t:p:c:d:vhV --long \
$CMDLINE_OPTS -- "$@")
--nopassword) # Skip password dialog
_opt_nopassword=T
;;
+ --sshcopyid) # Use locally available public keys to authorise root login on the target system
+ _opt_sshcopyid=T
+ ;;
--grmlrepos) # Enable Grml repository
_opt_grmlrepos=T
;;
[ "$_opt_defaultinterfaces" ] && USE_DEFAULT_INTERFACES="true"
[ "$_opt_nointerfaces" ] && NOINTERFACES="true"
[ "$_opt_nokernel" ] && NOKERNEL="true"
+[ "$_opt_sshcopyid" ] && SSHCOPYID="true"
[ "$_opt_bootappend" ] && BOOT_APPEND=$_opt_bootappend
[ "$_opt_grub" ] && GRUB=$_opt_grub
[ "$_opt_efi" ] && EFI=$_opt_efi
[ "$_opt_contrib" ] && COMPONENTS="$COMPONENTS contrib"
[ "$_opt_non_free" ] && COMPONENTS="$COMPONENTS non-free"
+# variable checks
+if [ -n "${LOCALES:-}" ] ; then
+ ewarn "Deprecation NOTE: LOCALES handling is deprecated, please customize locale handling via post scripts instead."
+fi
+
+if [ -n "${DEFAULT_LOCALES:-}" ] ; then
+ ewarn "Deprecation NOTE: DEFAULT_LOCALES handling is deprecated, please customize locale handling via post scripts instead."
+fi
+
+if [ -n "${DEFAULT_DEFAULT_LANGUAGE:-}" ] ; then
+ ewarn "Deprecation NOTE: DEFAULT_DEFAULT_LANGUAGE handling is deprecated, please customize locale handling via post scripts instead."
+fi
+
+if [ -r "${CONFFILES:-}"/locale.gen ] ; then
+ ewarn "Deprecation NOTE: ${CONFFILES}/locale.gen handling is deprecated, please customize locale handling via post scripts instead."
+fi
+
# command line option checks
if [ "$_opt_scripts_set" ] ; then
ewarn "Deprecation NOTE: --scripts option is deprecated, please switch to --post-scripts instead."
[ -n "$DEBCONF" ] && echo "DEBCONF='$(sed "s,','\\\\'',g" <<<"${DEBCONF}")'" >> "$CHROOT_VARIABLES"
[ -n "$DEBIAN_FRONTEND" ] && echo "DEBIAN_FRONTEND='$(sed "s,','\\\\'',g" <<<"${DEBIAN_FRONTEND}")'" >> "$CHROOT_VARIABLES"
[ -n "$DEBOOTSTRAP" ] && echo "DEBOOTSTRAP='$(sed "s,','\\\\'',g" <<<"${DEBOOTSTRAP}")'" >> "$CHROOT_VARIABLES"
- [ -n "$DEFAULT_LOCALES" ] && echo "DEFAULT_LOCALES='$(sed "s,','\\\\'',g" <<<"${DEFAULT_LOCALES}")'" >> "$CHROOT_VARIABLES"
- [ -n "$DEFAULT_LANGUAGE" ] && echo "DEFAULT_LANGUAGE='$(sed "s,','\\\\'',g" <<<"${DEFAULT_LANGUAGE}")'" >> "$CHROOT_VARIABLES"
[ -n "$EXTRAPACKAGES" ] && echo "EXTRAPACKAGES='$(sed "s,','\\\\'',g" <<<"${EXTRAPACKAGES}")'" >> "$CHROOT_VARIABLES"
[ -n "$EFI" ] && echo "EFI='$(sed "s,','\\\\'',g" <<<"${EFI}")'" >> "$CHROOT_VARIABLES"
[ -n "$FALLBACK_MIRROR" ] && echo "FALLBACK_MIRROR='$(sed "s,','\\\\'',g" <<<"${FALLBACK_MIRROR}")'" >> "$CHROOT_VARIABLES"
[ -n "$ISODIR" ] && echo "ISODIR='$(sed "s,','\\\\'',g" <<<"${ISO}")'" >> "$CHROOT_VARIABLES"
[ -n "$ISO" ] && echo "ISO='$(sed "s,','\\\\'',g" <<<"${ISO}")'" >> "$CHROOT_VARIABLES"
[ -n "$KEEP_SRC_LIST" ] && echo "KEEP_SRC_LIST='$(sed "s,','\\\\'',g" <<<"${KEEP_SRC_LIST}")'" >> "$CHROOT_VARIABLES"
- [ -n "$LOCALES" ] && echo "LOCALES='$(sed "s,','\\\\'',g" <<<"${LOCALES}")'" >> "$CHROOT_VARIABLES"
[ -n "$MIRROR" ] && echo "MIRROR='$(sed "s,','\\\\'',g" <<<"${MIRROR}")'" >> "$CHROOT_VARIABLES"
[ -n "$MKFS" ] && echo "MKFS='$(sed "s,','\\\\'',g" <<<"${MKFS}")'" >> "$CHROOT_VARIABLES"
[ -n "$NOPASSWORD" ] && echo "NOPASSWORD=\"true\"" >> "$CHROOT_VARIABLES"
# make sure we can access network [relevant for cdebootstrap/mmdebstrap]
[ -f "${MNTPOINT}"/etc/resolv.conf ] || cp $VERBOSE /etc/resolv.conf "${MNTPOINT}"/etc/resolv.conf
- # setup default locales
- [ -n "$LOCALES" ] && cp $VERBOSE "${CONFFILES}"/locale.gen "${MNTPOINT}"/etc/locale.gen
-
# MAKEDEV is just a forking bomb crap, let's do it on our own instead :)
( cd "${MNTPOINT}"/dev && tar zxf /etc/debootstrap/devices.tar.gz )
# add dhcp setting for Predictable Network Interface Names
if [ -x /bin/udevadm ]; then
- for interface in $(udevadm info -e | sed -n -e 's/E: ID_NET_NAME_PATH=\([^$*]\)/\1/p'); do
- DEFAULT_INTERFACES="${DEFAULT_INTERFACES}
+ tmpfile=$(mktemp)
+ for interface in /sys/class/net/*; do
+ udevadm info --query=all --path="${interface}" > "${tmpfile}"
+ # skip virtual devices, like bridges, vboxnet,...
+ if grep -q 'P: /devices/virtual/net/' "${tmpfile}" ; then
+ continue
+ fi
+
+ # iterate over possible naming policies by precedence (see udev/net/link-config.c),
+ # use and stop on first match to have same behavior as udev's link_config_apply()
+ for property in ID_NET_NAME_FROM_DATABASE ID_NET_NAME_ONBOARD ID_NET_NAME_SLOT ID_NET_NAME_PATH ID_NET_NAME_MAC ; do
+ if grep -q "${property}" "${tmpfile}" ; then
+ interface=$(grep "${property}" "${tmpfile}" | sed -n -e "s/E: ${property}=\([^\$*]\)/\1/p")
+ DEFAULT_INTERFACES="${DEFAULT_INTERFACES}
allow-hotplug ${interface}
iface ${interface} inet dhcp
"
+ break
+ fi
+ done
done
+ rm -f "${tmpfile}"
fi
if [ -n "$NOINTERFACES" ] ; then
einfo "Not installing /etc/network/interfaces as requested via --nointerfaces option" ; eend 0
elif [ -n "$USE_DEFAULT_INTERFACES" ] ; then
einfo "Installing default /etc/network/interfaces as requested via --defaultinterfaces options."
+ mkdir -p "${MNTPOINT}/etc/network"
echo "$DEFAULT_INTERFACES" > "${MNTPOINT}/etc/network/interfaces"
eend $?
elif [ -n "$VIRTUAL" ] ; then
einfo "Setting up Virtual Machine, installing default /etc/network/interfaces"
+ mkdir -p "${MNTPOINT}/etc/network"
echo "$DEFAULT_INTERFACES" > "${MNTPOINT}/etc/network/interfaces"
eend $?
elif [ -r /etc/network/interfaces ] ; then
einfo "Copying /etc/network/interfaces from host to target system"
+ mkdir -p "${MNTPOINT}/etc/network"
cp $VERBOSE /etc/network/interfaces "${MNTPOINT}/etc/network/interfaces"
eend $?
else
ewarn "Couldn't read /etc/network/interfaces, installing default /etc/network/interfaces"
+ mkdir -p "${MNTPOINT}/etc/network"
echo "$DEFAULT_INTERFACES" > "${MNTPOINT}/etc/network/interfaces"
eend $?
fi
# install config file providing some example entries
if [ -r /etc/network/interfaces.examples ] && [ ! -r "$MNTPOINT/etc/network/interfaces.examples" ] ; then
- cp /etc/network/interfaces.examples "$MNTPOINT/etc/network/interfaces.examples"
+ mkdir -p "${MNTPOINT}/etc/network"
+ cp /etc/network/interfaces.examples "$MNTPOINT/etc/network/interfaces.examples"
+ fi
+
+ if [ -n "${SSHCOPYID}" ] ; then
+ if ssh-add -L >/dev/null 2>&1 ; then
+ einfo "Use locally available public keys to authorise root login on the target system as requested via --sshcopyid option."
+ mkdir -p "${MNTPOINT}"/root/.ssh
+ chmod 0700 "${MNTPOINT}"/root/.ssh
+ if ssh-add -L >> "${MNTPOINT}"/root/.ssh/authorized_keys ; then
+ eend 0
+ else
+ eerror "Error: executing 'ssh-add -L' failed."
+ eend 1
+ bailout 1
+ fi
+ else
+ eerror "Could not open a connection to your authentication agent or the agent has no identites."
+ eend 1
+ bailout 1
+ fi
fi
if [ -d /run/udev ] ; then