# Filename: /etc/debootstrap/chroot-script
# Purpose: script executed in chroot when installing Debian via grml-debootstrap
# Authors: grml-team (grml.org), (c) Michael Prokop <mika@grml.org>
-# Bug-Reports: see http://grml.org/bugs/
+# Bug-Reports: see https://grml.org/bugs/
# License: This file is licensed under the GPL v2.
################################################################################
# GRML_CHROOT_SCRIPT_MARKER - do not remove this line unless you want to keep
# define chroot mirror {{{
chrootmirror() {
- if [ -n "$KEEP_SRC_LIST" ] ; then
- echo "KEEP_SRC_LIST has been set, skipping chrootmirror stage."
+ if [ "$KEEP_SRC_LIST" = "yes" ] ; then
+ echo "KEEP_SRC_LIST has been enabled, skipping chrootmirror stage."
return
fi
# add security.debian.org:
case "$RELEASE" in
unstable|sid|lenny) ;; # no security pool available
- *)
+ squeeze|wheezy|jessie|stretch|buster)
echo "Adding security.debian.org to sources.list."
echo "deb http://security.debian.org ${RELEASE}/updates $COMPONENTS" >> /etc/apt/sources.list
;;
+ *)
+ # bullseye and newer releases use a different repository layout, see
+ # https://lists.debian.org/debian-devel-announce/2019/07/msg00004.html
+ echo "Adding security.debian.org/debian-security to sources.list."
+ echo "deb http://security.debian.org/debian-security ${RELEASE}-security $COMPONENTS" >> /etc/apt/sources.list
+ ;;
esac
}
# }}}
# remove local chroot mirror {{{
remove_chrootmirror() {
- if [ -n "$KEEP_SRC_LIST" ] ; then
- echo "KEEP_SRC_LIST has been set, skipping remove_chrootmirror stage."
+ if [ "$KEEP_SRC_LIST" = "yes" ] ; then
+ echo "KEEP_SRC_LIST has been enabled, skipping remove_chrootmirror stage."
return
fi
}
# }}}
-# check available backports release version {{{
-checkbackports() {
- wget -q -O/dev/null "http://backports.debian.org/debian-backports/dists/${1}-backports/Release"
-}
-# }}}
-
# feature to provide Debian backports repos {{{
backportrepos() {
- if [ -n "$BACKPORTREPOS" ] ; then
- if ! checkbackports "$RELEASE" ; then
- echo "Backports for ${RELEASE} are not available." >&2
- exit 1
- else
- # user might have provided their own apt sources.list
- if ! grep -q backports /etc/apt/sources.list.d/backports.list 2>/dev/null ; then
- cat >> /etc/apt/sources.list.d/backports.list << EOF
+ if [ -n "$BACKPORTREPOS" ] ; then
+ cat >> /etc/apt/sources.list.d/backports.list << EOF
# debian backports: ${RELEASE}-backports repository:
-deb http://backports.debian.org/debian-backports ${RELEASE}-backports main
-deb-src http://backports.debian.org/debian-backports ${RELEASE}-backports main
+deb ${MIRROR} ${RELEASE}-backports main
+deb-src ${MIRROR} ${RELEASE}-backports main
EOF
- fi
- fi
- fi
+ fi
}
# }}}
# helper function for fstab() {{{
createfstab(){
echo "Setting up /etc/fstab"
+ cat > /etc/fstab <<EOF
+# /etc/fstab - created by grml-debootstrap on $(date)
+# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
+# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
+#
+# After editing this file, run 'systemctl daemon-reload' to update systemd
+# units generated from this file.
+#
+EOF
+
if [ -n "$TARGET_UUID" ] ; then
- echo "/dev/disk/by-uuid/${TARGET_UUID} / auto defaults,errors=remount-ro 0 1" > /etc/fstab
+ local rootfs_mount_options=",errors=remount-ro"
+ case "${FILESYSTEM}" in
+ f2fs)
+ # errors=remount-ro is unsupported, see https://github.com/grml/grml-debootstrap/issues/163
+ rootfs_mount_options=""
+ ;;
+ esac
+
+ echo "/dev/disk/by-uuid/${TARGET_UUID} / auto defaults${rootfs_mount_options} 0 1" >> /etc/fstab
else
echo "Warning: couldn't identify target UUID for rootfs, your /etc/fstab might be incomplete."
fi
echo "Mounting $EFI on /boot/efi"
mount "$EFI" /boot/efi || return 1
+ # if efivarfs kernel module is loaded, but efivars isn't,
+ # then we need to mount efivarfs for efibootmgr usage
+ if ! ls /sys/firmware/efi/efivars/* &>/dev/null ; then
+ echo "Mounting efivarfs on /sys/firmware/efi/efivars"
+ mount -t efivarfs efivarfs /sys/firmware/efi/efivars
+ fi
+
echo "Invoking efibootmgr"
efibootmgr || return 1
+
+ umount /sys/firmware/efi/efivars &>/dev/null || true
+
}
# grub configuration/installation {{{
for device in $SELECTED_PARTITIONS ; do
GRUB="${device%%[0-9]}"
echo "Installing grub on ${GRUB}:"
- grub-install --no-floppy "$GRUB"
+ if ! grub-install --no-floppy "$GRUB" ; then
+ echo "Error: failed to execute 'grub-install --no-floppy $GRUB'." >&2
+ exit 1
+ fi
+
done
rm -f /boot/grub/device.map
else
echo "Installing grub on ${GRUB}:"
case "$RELEASE" in
lenny|squeeze|wheezy)
- grub-install --no-floppy "$(readlink -f "${GRUB}")"
+ local grub_dev
+ grub_dev="$(readlink -f "${GRUB}")"
+ if ! grub-install --no-floppy "${grub_dev}" ; then
+ echo "Error: failed to execute 'grub-install --no-floppy ${grub_dev}'." >&2
+ exit 1
+ fi
rm -f /boot/grub/device.map
;;
*)
echo "(hd0) ${GRUB}" > /boot/grub/device.map
- grub-install "(hd0)"
+ if ! grub-install "(hd0)" ; then
+ echo "Error: failed to execute 'grub-install (hd0)'." >&2
+ exit 1
+ fi
rm /boot/grub/device.map
;;
esac
return 1
fi
+ if [ -n "${BOOT_APPEND}" ] ; then
+ echo "Adding BOOT_APPEND configuration ['${BOOT_APPEND}'] to /etc/default/grub."
+ sed -i "/GRUB_CMDLINE_LINUX_DEFAULT/ s#\"\$# ${BOOT_APPEND}\"#" /etc/default/grub
+ fi
+
mountpoint /boot/efi &>/dev/null && umount /boot/efi
$UPDATEGRUB