SW: add mmdebstrap to GRML_FULL + GRML_SMALL master
authorMichael Prokop <mika@grml.org>
Sun, 2 Aug 2020 11:07:32 +0000 (13:07 +0200)
committerMichael Prokop <mika@grml.org>
Sun, 2 Aug 2020 11:08:23 +0000 (13:08 +0200)
It requires only ~250kB of disk space and it's much faster
than debootstrap and we plan to use it as default within
grml-debootstrap anyway.

Thanks: Helmut Grohne for the suggestion

41 files changed:
README.md
debian/changelog
debian/compat [deleted file]
debian/control
debian/grml-live.docs
debian/grml-live.maintscript
debian/grml-live.manpages
docs/grml-live.txt
etc/grml/fai/config/files/etc/apt/sources.list.d/debian.list/DEBIAN_STABLE
etc/grml/fai/config/files/etc/cloud/cloud.cfg.d/42_grml.cfg/GRMLBASE [new file with mode: 0644]
etc/grml/fai/config/files/etc/initramfs-tools/conf.d/xz-compress/GRMLBASE
etc/grml/fai/config/files/etc/network/interfaces/GRMLBASE
etc/grml/fai/config/files/etc/sudoers/GRMLBASE
etc/grml/fai/config/package_config/GRMLBASE
etc/grml/fai/config/package_config/GRML_FULL
etc/grml/fai/config/package_config/GRML_SMALL
etc/grml/fai/config/scripts/DEBORPHAN/10-whitelist [new file with mode: 0755]
etc/grml/fai/config/scripts/GRMLBASE/40-deborphan [deleted file]
etc/grml/fai/config/scripts/GRMLBASE/50-lvm
etc/grml/fai/config/scripts/GRMLBASE/51-cloud-init [new file with mode: 0755]
etc/grml/fai/config/scripts/GRMLBASE/52-mdadm
etc/grml/fai/config/scripts/GRMLBASE/80-initramfs
etc/grml/fai/config/scripts/GRMLBASE/98-clean-chroot
etc/grml/grml-live.conf
grml-live
templates/EFI/debian/BOOT/README [new file with mode: 0644]
templates/EFI/debian/BOOT/grubx64.efi.signed [new file with mode: 0644]
templates/EFI/debian/BOOT/shimx64.efi.signed [new file with mode: 0644]
templates/EFI/ubuntu/BOOT/README [moved from templates/EFI/BOOT/README with 82% similarity]
templates/EFI/ubuntu/BOOT/grubx64.efi.signed [moved from templates/EFI/BOOT/grubx64.efi.signed with 94% similarity]
templates/EFI/ubuntu/BOOT/shimx64.efi.signed [moved from templates/EFI/BOOT/shimx64.efi.signed with 100% similarity]
templates/GRML/LICENSE.txt
templates/boot/grub/%SHORT_NAME%_options.cfg
templates/boot/grub/addons.cfg
templates/boot/grub/grml-theme/sb-theme.txt [new file with mode: 0644]
templates/boot/grub/grml-theme/theme.txt
templates/boot/grub/grmlenv.cfg [deleted file]
templates/boot/grub/header.cfg
templates/boot/grub/netboot.cfg [new file with mode: 0644]
templates/boot/isolinux/grml.cfg
templates/secureboot/grub.cfg

index 12d6a91..218b1bb 100644 (file)
--- a/README.md
+++ b/README.md
@@ -25,4 +25,5 @@ of an installed `grml-live` package:
     # export SCRIPTS_DIRECTORY=$(pwd)/scripts
     # export LIVE_CONF=$(pwd)/etc/grml/grml-live.conf
     # export TEMPLATE_DIRECTORY=$(pwd)/templates
+    # ln -s ../../../grml-live-grml/templates/boot/addons templates/boot/  # optional
     # ./grml-live -s sid -a amd64 -c GRMLBASE,GRML_FULL,AMD64
index cf14de6..74b3ae0 100644 (file)
@@ -1,3 +1,126 @@
+grml-live (0.37.0) unstable; urgency=medium
+
+  * Fixes:
+    - [b090c76] scripts/GRMLBASE/52-mdadm: unconditionally clear
+      64-md-raid-assembly.rules
+    - [5c3e795] Store logfiles also when FAI's dirinstall fails
+    - [67df700] GRUB: don't display BIOS only addons when running
+      in EFI mode
+    - [bf7faea] /e/n/i: move sourcing of /etc/network/interfaces.d/
+      to begin of file
+  * Features:
+    - [7430221] Support usage of boot/addons via symlink to
+      corresponding git repository
+    - [f625781] Be more verbose about boot addons installation
+    - [257dba7] Support EFI capable ipxe.efi boot addon
+    - [871fc96] Provide setup files for EFI boot in netboot package
+  * Software related changes:
+    - [f814855] SW: add grub-efi-amd64-signed + shim-signed to
+      GRML_FULL (AMD64 only)
+
+ -- Michael Prokop <mika@grml.org>  Sat, 18 Jul 2020 22:02:21 +0200
+
+grml-live (0.36.0) unstable; urgency=medium
+
+  * Fixes:
+    - [8772657] Do not depend on /proc for calculating runtime
+  * Software related changes:
+    - [6542652] add tmate to GRML_SMALL + GRML_FULL
+    - [4b6fd81] add qrencode to GRML_SMALL and GRML_FULL
+  * Features:
+    - [518eb39] Refresh Secure Boot support, supporting new
+      'debian' method. Thanks to Jordan Uggla for feedback
+
+ -- Michael Prokop <mika@grml.org>  Wed, 24 Jun 2020 11:34:03 +0200
+
+grml-live (0.35.4) unstable; urgency=medium
+
+  [ Darshaka Pathirana ]
+  * [d56d6fa] Add boot option pnet (Predictable Network Interface Names)
+
+  [ Michael Prokop ]
+  * [950b6bb] Adjust layout of "Predictable Network Interface Names" boot
+    option
+
+ -- Michael Prokop <mika@grml.org>  Fri, 05 Jun 2020 13:34:01 +0200
+
+grml-live (0.35.3) unstable; urgency=medium
+
+  * Software related changes:
+    - [cb7d1f2] add wireguard to GRML_FULL
+  * Fixes:
+    - [6b2e23d] GRMLBASE/98-clean-chroot: avoid warning messages
+      with resolvconf <1.80
+    - [397c7e7] Use debootstrap with --no-merged-usr by default
+    - [b4b524c] No longer refer to sources.grml.org
+
+ -- Michael Prokop <mika@grml.org>  Wed, 03 Jun 2020 16:47:04 +0200
+
+grml-live (0.35.2) unstable; urgency=medium
+
+  * Software related changes:
+    - [1ec1cfe] add avahi-utils to GRML_FULL
+  * Features:
+    - [a28b1c2] etc/network/interfaces/GRMLBASE: support
+      /etc/network/interfaces.d/* in /e/n/i (for cloud-init support)
+
+ -- Michael Prokop <mika@grml.org>  Thu, 28 May 2020 17:34:05 +0200
+
+grml-live (0.35.1) unstable; urgency=medium
+
+  * Fixes:
+    - [ba45725] deborphan: add workaround for transitional package dnsutils
+    - [3140b83] deborphan: drop deprecated packages
+    - [f37fcf9] Move scripts/GRMLBASE/40-deborphan towards DEBORPHAN class
+      as file 10-whitelist
+    - [87be754] DEBORPHAN/10-whitelist: highlight when dnsutils gets added
+      to whitelist
+    - [cd7c095] DEBORPHAN/10-whitelist: provide workaround for Debian bug
+      #929273
+    - [cb6179f] DEBORPHAN/10-whitelist: rework fix for broken keep file
+      handling of deborphan
+
+  * Documentation:
+    - [856efb5] docs: update ISO sizes and disk requirements, we no
+      longer provide support for file-rc
+
+  * Software related changes:
+    - [bda859c] add fdisk to GRMLBASE
+
+ -- Michael Prokop <mika@grml.org>  Wed, 20 May 2020 17:13:24 +0200
+
+grml-live (0.35.0) unstable; urgency=medium
+
+  * Fixes:
+    - [e5e4578] GRMLBASE/98-clean-chroot: get rid of /wget-log* files
+    - [acf12d4] GRMLBASE/98-clean-chroot: fix resolvconf symlink
+      handling + get rid of resolvconf workarounds
+    - [ef6dc82] DEBIAN_STABLE: use buster-backports instead of
+      stretch-backports
+    - [31cd53a] scripts/GRMLBASE/50-lvm: unconditionally clear
+      69-lvm-metad.rules file. Thanks to Dr. András Korn
+    - [2ece298] initramfs xz-compress: use default xz compression level.
+      Thanks to Dr. András Korn
+    - [e1e107a] GRMLBASE/80-initramfs: no longer set CRYPTSETUP=y
+    - [c557940] sudoers: set Defaults secure_path to have sane
+      default settings
+
+  * New features:
+    - [3fc930d] Initial cloud-init support
+
+  * Debian packaging:
+    - [914ab11] Bump Standards-Version to 4.5.0
+    - [b47433a] Bump Debian compat version to 12, using
+      debhelper-compat approach
+    - [0edda67] Execute 'wrap-and-sort -a -t -s' on debian/
+
+  * Software related changes:
+    - [422c49b] SW: add radvd
+    - [fbb0edd] SW: drop hfsprogs from GRML_FULL
+    - [95f7765] SW: add cloud-init to GRML_FULL
+
+ -- Michael Prokop <mika@grml.org>  Tue, 12 May 2020 16:34:01 +0200
+
 grml-live (0.34.4) unstable; urgency=medium
 
   [ Michael Prokop ]
diff --git a/debian/compat b/debian/compat
deleted file mode 100644 (file)
index ec63514..0000000
+++ /dev/null
@@ -1 +0,0 @@
-9
index 46b0032..1d92b4f 100644 (file)
@@ -2,11 +2,13 @@ Source: grml-live
 Section: grml
 Priority: optional
 Maintainer: Michael Prokop <mika@grml.org>
-Build-Depends: debhelper (>= 10)
-Build-Depends-Indep: asciidoc,
-                     docbook-xsl,
-                     xsltproc
-Standards-Version: 4.3.0
+Build-Depends:
+ debhelper-compat (= 12),
+Build-Depends-Indep:
+ asciidoc,
+ docbook-xsl,
+ xsltproc,
+Standards-Version: 4.5.0
 Homepage: https://grml.org/grml-live/
 Vcs-git: git://git.grml.org/grml-live.git
 Vcs-Browser: https://git.grml.org/?p=grml-live.git
@@ -15,29 +17,32 @@ Bugs: mailto:bugs@grml.org
 
 Package: grml-live
 Architecture: all
-Depends: bc,
-         bzip2,
-         dosfstools,
-         fai-client (>= 3.4.0),
-         fai-server (>= 3.4.0),
-         isolinux (>= 3:6.03+dfsg-5+deb8u1~),
-         memtest86+,
-         mksh,
-         moreutils,
-         mtools,
-         pciutils,
-         rsync,
-         squashfs-tools (>= 1:4.2-0~bpo60),
-         syslinux,
-         xorriso,
-         ${misc:Depends}
-Recommends: grml-live-db,
-            grub-pc-bin,
-            imagemagick,
-            ipxe,
-            syslinux-utils
-Suggests: fai-doc,
-          grml-live-addons
+Depends:
+ bc,
+ bzip2,
+ dosfstools,
+ fai-client (>= 3.4.0),
+ fai-server (>= 3.4.0),
+ isolinux (>= 3:6.03+dfsg-5+deb8u1~),
+ memtest86+,
+ mksh,
+ moreutils,
+ mtools,
+ pciutils,
+ rsync,
+ squashfs-tools (>= 1:4.2-0~bpo60),
+ syslinux,
+ xorriso,
+ ${misc:Depends},
+Recommends:
+ grml-live-db,
+ grub-pc-bin,
+ imagemagick,
+ ipxe,
+ syslinux-utils,
+Suggests:
+ fai-doc,
+ grml-live-addons,
 Description: build system for creating a Grml (based) Linux live system
  This package provides the build system for creating a Debian /
  Grml based Linux live system (also known as live cd). It is
@@ -45,13 +50,15 @@ Description: build system for creating a Grml (based) Linux live system
 
 Package: grml-live-db
 Architecture: all
-Depends: grml-live,
-         libdbd-sqlite3-perl,
-         libdbi-perl,
-         libtimedate-perl,
-         sqlite3,
-         ${misc:Depends}
-Recommends: perl-doc
+Depends:
+ grml-live,
+ libdbd-sqlite3-perl,
+ libdbi-perl,
+ libtimedate-perl,
+ sqlite3,
+ ${misc:Depends},
+Recommends:
+ perl-doc,
 Description: log package build information of grml-live to database
  This package provides a database layer for storing build
  information about grml-live builds in a sqlite3 database.
index 66f2ad4..de4be2b 100644 (file)
@@ -1,2 +1,2 @@
-docs/grml-live.html
 docs/grml-live-remaster.html
+docs/grml-live.html
index cd7cba6..5ab930d 100644 (file)
@@ -1,3 +1,4 @@
 rm_conffile /etc/grml/fai/config/files/etc/apt/grml.key/GRMLBASE 0.32.3~
-rm_conffile /etc/grml/fai/config/scripts/GRMLBASE/36-cpufrequtils 0.33.0~
 rm_conffile /etc/grml/fai/config/files/etc/systemd/system/serial-getty@ttyS0.service.d/override.conf/GRMLBASE 0.33.2~
+rm_conffile /etc/grml/fai/config/scripts/GRMLBASE/36-cpufrequtils 0.33.0~
+rm_conffile /etc/grml/fai/config/scripts/GRMLBASE/40-deborphan 0.35.0~
index f98382d..c36743b 100644 (file)
@@ -1,2 +1,2 @@
-docs/grml-live.8
 docs/grml-live-remaster.8
+docs/grml-live.8
index 455889f..f3751c7 100644 (file)
@@ -336,9 +336,8 @@ selected. The following classes are predefined:
 was the init system used by Grml until and including stable release 2014.11,
 starting with beginning of 2016 Grml switched to systemd instead. If you want to
 build a live system in the old style using file-rc instead of systemd then enable
-this class. Please notice that support for file-rc is no longer being actively
-maintained (the Grml team happily accepts patches though) and file-rc (upstream
-wise) might disappear too.
+this class. Please notice that the Grml team no longer provides support for it
+though.
 
 * FRESHCLAM: execute freshclam (if it's present) to update clamav definitions
 (increases resulting ISO size ~70MB). By default it's skipped to avoid bigger
@@ -355,9 +354,9 @@ CLASS file choosing the kernel package you want to use (and don't forget to
 include your CLASS in the arguments of grml-live's -c... command line option).
 
 * GRML_FULL: full featured Grml, also known as the "normal", full grml as
-introduced in December 2011 (~600MB ISO size).
+introduced in December 2011 (~750 ISO size).
 
-* GRML_SMALL: minimum sized Grml version, known as grml-small (~300MB ISO
+* GRML_SMALL: minimum sized Grml version, known as grml-small (~360MB ISO
 size).
 
 * LATEX: LaTeX(-related) packages like auctex, texlive,...
@@ -485,9 +484,9 @@ please send us a bug report then). Check out <<deploy-on-debian,How do I deploy
 grml-live on a plain Debian installation>> for details how to set up grml-live
 on a plain, original Debian system.
 
-* enough free disk space; at least 1.5GB are required for a minimal grml-live
-run (\~850MB for the chroot [$CHROOT_OUTPUT], \~300MB for the build target
-[$BUILD_OUTPUT], \~30MB for the netboot files and \~300MB for the resulting ISO
+* enough free disk space; at least ~2GB are required for a minimal grml-live
+run (\~1GB for the chroot [$CHROOT_OUTPUT], \~400MB for the build target
+[$BUILD_OUTPUT], \~35MB for the netboot files and \~350MB for the resulting ISO
 [$ISO_OUTPUT] plus some temporary files), if you plan to use GRML_FULL you
 should have at least 4GB of total free disk space
 
index 3072559..2e0674e 100644 (file)
@@ -7,5 +7,5 @@
   deb-src http://security.debian.org/ stable/updates main contrib
 
 # backports:
-  deb     http://ftp.debian.org/debian/ stretch-backports main contrib non-free
-  deb-src http://ftp.debian.org/debian/ stretch-backports main contrib non-free
+  deb     http://ftp.debian.org/debian/ buster-backports main contrib non-free
+  deb-src http://ftp.debian.org/debian/ buster-backports main contrib non-free
diff --git a/etc/grml/fai/config/files/etc/cloud/cloud.cfg.d/42_grml.cfg/GRMLBASE b/etc/grml/fai/config/files/etc/cloud/cloud.cfg.d/42_grml.cfg/GRMLBASE
new file mode 100644 (file)
index 0000000..646e4e2
--- /dev/null
@@ -0,0 +1,28 @@
+# cloud-init configuration for Grml live system.
+#
+# This file was deployed via grml-live's
+# ${GRML_FAI_CONFIG}/config/scripts/GRMLBASE/51-cloud-init script, using
+# ${GRML_FAI_CONFIG}/config/files/etc/cloud/cloud.cfg.d/42_grml.cfg/GRMLBASE
+
+system_info:
+   # This will affect which distro class gets used
+   distro: debian
+   # Default user name + that default users groups (if added/used)
+   default_user:
+     name: grml
+     lock_passwd: True
+     gecos: Grml
+     groups: [adm, audio, cdrom, dialout, dip, floppy, netdev, plugdev, sudo, video]
+     sudo: ["ALL=(ALL) NOPASSWD:ALL"]
+     shell: /bin/zsh
+   # Other config here will be given to the distro class and/or path classes
+   paths:
+      cloud_dir: /var/lib/cloud/
+      templates_dir: /etc/cloud/templates/
+      upstart_dir: /etc/init/
+   package_mirrors:
+     - arches: [default]
+       failsafe:
+         primary: http://deb.debian.org/debian
+         security: http://security.debian.org/
+   ssh_svcname: ssh
index 4e6b5b3..3631ac8 100644 (file)
@@ -3,7 +3,7 @@
 
 # this is a workaround to pass custom options to the xz compression
 xz() {
-    command xz -8 --check=crc32
+    command xz --check=crc32
 }
 
 # enable XZ compression, reducing initramfs size from ~17MB to ~12MB
index 9f1df7b..dae8e21 100644 (file)
@@ -2,6 +2,12 @@
 # ${GRML_FAI_CONFIG}/config/scripts/GRMLBASE/35-network script, using
 # ${GRML_FAI_CONFIG}/config/files/etc/network/interfaces/GRMLBASE
 
+# interfaces(5) file used by ifup(8) and ifdown(8)
+
+# Include files from /etc/network/interfaces.d:
+source /etc/network/interfaces.d/*
+
 # The loopback interface
 auto lo
 iface lo inet loopback
+
index f52c892..7a46342 100644 (file)
@@ -20,6 +20,9 @@ root    ALL=(ALL) ALL
 # WARNING: Never allow external access to the $USERNAME user!!!
 $USERNAME    ALL=NOPASSWD: ALL
 
+# Path used for every command run from sudo
+Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
+
 # allow editing of files with editor:
 # $USERNAME ALL=NOPASSWD: sudoedit
 
index dcdd137..d75f4b6 100644 (file)
@@ -10,6 +10,7 @@ deborphan
 dmidecode
 efibootmgr
 eject
+fdisk
 file
 gpm
 grml2usb
index dfb99ce..4ba4aed 100644 (file)
@@ -104,7 +104,6 @@ e2fsprogs
 exfat-fuse
 exfat-utils
 genisoimage
-hfsprogs
 hfsutils
 jfsutils
 ntfs-3g
@@ -133,6 +132,7 @@ cdebootstrap
 crosshurd
 debootstrap
 kexec-tools
+mmdebstrap
 rinse
 
 # iscsi (target) support
@@ -148,10 +148,12 @@ vblade
 # networking
 atftp
 avahi-daemon
+avahi-utils
 bind9-host
 bridge-utils
 cdpr
 cifs-utils
+cloud-init
 comgt
 dnsmasq
 dnsutils
@@ -198,11 +200,13 @@ ssmping
 tcpdump
 tcptraceroute
 telnet
+tmate
 tshark
 tsocks
 uml-utilities
 usb-modeswitch
 vlan
+wireguard
 wireshark
 wvdial
 
@@ -280,6 +284,7 @@ mawk
 mc
 patch
 pv
+qrencode
 screen
 sed
 tmux
@@ -353,3 +358,7 @@ linux-cpupower
 PACKAGES install AMD64
 linux-image-amd64
 linux-cpupower
+
+# EFI PXE boot support in grml-terminalserver
+grub-efi-amd64-signed
+shim-signed
index ecf3fc6..293be14 100644 (file)
@@ -53,6 +53,7 @@ lsscsi
 mawk
 mbr
 memtester
+mmdebstrap
 mount
 mtools
 mtr-tiny
@@ -72,6 +73,7 @@ pppoeconf
 procps
 psmisc
 qemu-guest-agent
+qrencode
 rdnssd
 reiserfsprogs
 rfkill
@@ -87,6 +89,7 @@ sysvinit-utils
 tar
 tcpdump
 telnet
+tmate
 tree
 tsocks
 tzdata
diff --git a/etc/grml/fai/config/scripts/DEBORPHAN/10-whitelist b/etc/grml/fai/config/scripts/DEBORPHAN/10-whitelist
new file mode 100755 (executable)
index 0000000..a689fec
--- /dev/null
@@ -0,0 +1,27 @@
+#!/bin/bash
+# Filename:      ${GRML_FAI_CONFIG}/config/scripts/DEBORPHAN/10-whitelist
+# Purpose:       whitelist packages to keep with deborphan
+# Authors:       grml-team (grml.org), (c) Michael Prokop <mika@grml.org>
+# Bug-Reports:   see http://grml.org/bugs/
+# License:       This file is licensed under the GPL v2 or any later version.
+################################################################################
+
+set -u
+set -e
+
+# workaround for dnsutils transitional package, we can drop this as soon as the
+# bind9-dnsutils package is available in all our supported Debian releases
+if [[ -r "${target}/usr/share/doc/dnsutils" ]] && [ -x "${target}/usr/bin/deborphan" ] ; then
+  echo "Adding dnsutils to deborphan whitelist"
+  # workaround for https://bugs.debian.org/929273 ("fseek on /var/lib/deborphan/keep: Invalid argument")
+  if ! [ -f "${target}"/var/lib/deborphan/keep ] ; then
+    printf 'dnsutils\n' > "${target}"/var/lib/deborphan/keep
+  elif grep -q '^dnsutils$' "${target}"/var/lib/deborphan/keep ; then
+    : # entry already present, avoid duplicates
+  else
+    printf 'dnsutils\n' >> "${target}"/var/lib/deborphan/keep
+  fi
+fi
+
+## END OF FILE #################################################################
+# vim:ft=sh expandtab ai tw=80 tabstop=4 shiftwidth=2
diff --git a/etc/grml/fai/config/scripts/GRMLBASE/40-deborphan b/etc/grml/fai/config/scripts/GRMLBASE/40-deborphan
deleted file mode 100755 (executable)
index b465379..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/bash
-# Filename:      ${GRML_FAI_CONFIG}/config/scripts/GRMLBASE/40-deborphan
-# Purpose:       configure packages for deborphan (usually exception rules)
-# Authors:       grml-team (grml.org), (c) Michael Prokop <mika@grml.org>
-# Bug-Reports:   see http://grml.org/bugs/
-# License:       This file is licensed under the GPL v2 or any later version.
-################################################################################
-
-set -u
-set -e
-
-if [ -r $target/lib/shadowfs/liblogfs.so -a -x $target/usr/bin/deborphan ] ; then
-   $ROOTCMD deborphan --add-keep shadowfs || /bin/true
-fi
-
-if [ -r $target/usr/bin/bsdtar -a -x $target/usr/bin/deborphan ] ; then
-   $ROOTCMD deborphan --add-keep bsdtar || /bin/true
-fi
-
-if [ -r $target/usr/bin/ewfinfo -a -x $target/usr/bin/deborphan ] ; then
-   $ROOTCMD deborphan --add-keep libewf1 || /bin/true
-fi
-
-if [ -r $target/usr/lib/libstdc++-libc6.2-2.so.3 -a -x $target/usr/bin/deborphan ] ; then
-   $ROOTCMD deborphan --add-keep libstdc++2.10-glibc2.2 || /bin/true
-fi
-
-## END OF FILE #################################################################
-# vim:ft=sh expandtab ai tw=80 tabstop=4 shiftwidth=2
index 4cecce4..9ec8199 100755 (executable)
@@ -9,11 +9,6 @@
 set -u
 set -e
 
-if ! [ -r "${target}/lib/udev/rules.d/69-lvm-metad.rules" ] ; then
-  echo "File /lib/udev/rules.d/69-lvm-metad.rules doesn't exist, skipping execution of script."
-  exit 0
-fi
-
 echo "Clearing /lib/udev/rules.d/69-lvm-metad.rules to avoid automatic LVM scanning"
 echo '# this file was generated by grml-live script GRMLBASE/50-lvm' > "${target}/lib/udev/rules.d/69-lvm-metad.rules"
 
diff --git a/etc/grml/fai/config/scripts/GRMLBASE/51-cloud-init b/etc/grml/fai/config/scripts/GRMLBASE/51-cloud-init
new file mode 100755 (executable)
index 0000000..017408d
--- /dev/null
@@ -0,0 +1,18 @@
+#!/bin/bash
+# Filename:      ${GRML_FAI_CONFIG}/config/scripts/GRMLBASE/51-cloud-init
+# Purpose:       configure cloud-init package
+# Authors:       grml-team (grml.org), (c) Michael Prokop <mika@grml.org>
+# Bug-Reports:   see http://grml.org/bugs/
+# License:       This file is licensed under the GPL v2 or any later version.
+################################################################################
+
+set -u
+set -e
+
+# NOTE: this file is relevant only with cloud-init package installed,
+# though we install it unconditionally via GRMLBASE class to have it
+# available and configured as shipped by Grml ISOs
+fcopy -v /etc/cloud/cloud.cfg.d/42_grml.cfg
+
+## END OF FILE #################################################################
+# vim:ft=sh expandtab ai tw=80 tabstop=4 shiftwidth=2
index 1bceb58..625065f 100755 (executable)
@@ -9,11 +9,6 @@
 set -u
 set -e
 
-if ! [ -r "${target}/lib/udev/rules.d/64-md-raid-assembly.rules" ] ; then
-  echo "File /lib/udev/rules.d/64-md-raid-assembly.rules doesn't exist, skipping execution of script."
-  exit 0
-fi
-
 echo "Removing /lib/udev/rules.d/64-md-raid-assembly.rules to avoid automatic mdadm scanning"
 echo '# this file was generated by grml-live script GRMLBASE/52-mdadm' > "${target}/lib/udev/rules.d/64-md-raid-assembly.rules"
 
index a56a579..82cf083 100755 (executable)
@@ -20,8 +20,8 @@ fi
 echo "Rebuilding initramfs"
 
 for initrd in "$(basename $target/boot/vmlinuz-*)" ; do
-    if ! CRYPTSETUP=y $ROOTCMD update-initramfs -k "${initrd##vmlinuz-}" -c ; then
-        echo "Creating fresh initrd did not work, trying update instead:"
-        CRYPTSETUP=y $ROOTCMD update-initramfs -k "${initrd##vmlinuz-}" -u
+    if ! $ROOTCMD update-initramfs -k "${initrd##vmlinuz-}" -c ; then
+        echo "Creating fresh initramfs did not work, trying update instead:"
+        $ROOTCMD update-initramfs -k "${initrd##vmlinuz-}" -u
     fi
 done
index f293e91..a00ebd6 100755 (executable)
@@ -189,7 +189,20 @@ else
   echo "Setting up resolvconf"
   rm -f "${target}"/etc/resolvconf/resolv.conf.d/original
   rm -f "${target}"/etc/resolv.conf
-  ln -s /run/resolvconf/resolv.conf "${target}"/etc/resolv.conf
+
+  # avoid "/etc/resolvconf/update.d/libc: Warning: /etc/resolv.conf is not a
+  # symbolic link to /etc/resolvconf/run/resolv.conf" for resolvconf versions
+  # before 1.80
+  RESOLVCONF_VERSION=$($ROOTCMD dpkg-query -W -f='${Version}\n' resolvconf || true)
+  echo "-> Identified resolvconf version '${RESOLVCONF_VERSION}'"
+  if dpkg --compare-versions "${RESOLVCONF_VERSION}" lt 1.80 ; then
+    echo "-> Installing resolvconf symlink for versions <1.80"
+    ln -s /etc/resolvconf/run/resolv.conf "${target}"/etc/resolv.conf
+  else
+    echo "-> Installing resolvconf symlink for versions >=1.80"
+    ln -s /run/resolvconf/resolv.conf "${target}"/etc/resolv.conf
+  fi
+
 fi
 
 # make sure we don't leak any mdadm configurations
index c069563..06e1e6c 100644 (file)
 # HYBRID_METHOD='grub2'     # use manifold with GRUB 2
 # HYBRID_METHOD='manifold'  # use manifold with ISOLINUX (default)
 
-# By default Secure Boot is enabled using the approach from Ubuntu.
-# Currently only the Ubuntu approach is supported, which is restricted
-# to loading Linux kernels and using a minimal version of GRUB.
-# If unset defaults to "ubuntu"
-# SECURE_BOOT='disable'         # do not enable Secure Boot
-# SECURE_BOOT="ubuntu"          # use approach from Ubuntu
+# Secure Boot method that should be used (amd64 only).
+# If unset defaults to "disabled" (which means no Secure Boot will be present)
+# The following approaches are supported:
+# debian: use the Debian GRUB version which requires a signed kernel,
+#         this is the recommended way to use Secure Boot with Grml
+# ubuntu: use an older Ubuntu GRUB version which doesn't require a signed kernel,
+#         though has a limited feature set only and requires customized GRUB
+#         templates (the files shipped templates/boot/grub/ don't work as such)
+# SECURE_BOOT='disable'         # do not enable Secure Boot (default)
+# SECURE_BOOT='debian'          # use approach from Debian
+# SECURE_BOOT='ubuntu'          # use approach from Ubuntu
 
 # Binary that should be used for creating the squashfs file.
 # Defaults to the executable matching the kernel version, falls back to mksquashfs.
index daa4da9..e0d55f4 100755 (executable)
--- a/grml-live
+++ b/grml-live
@@ -184,6 +184,24 @@ umount_all() {
 }
 # }}}
 
+# store logfiles {{{
+store_logfiles() {
+  # move fai logs into grml_logs directory
+  mkdir -p "$LOG_OUTPUT"/fai/
+  cp -r "$CHROOT_OUTPUT"/var/log/fai/"$HOSTNAME"/last/* "$LOG_OUTPUT"/fai/
+  rm -rf "$CHROOT_OUTPUT"/var/log/fai
+
+  # store copy of autogenerated configuration file
+  cp ${GRML_FAI_CONFIG}/nfsroot.conf "$LOG_OUTPUT"/fai/
+
+  # copy fai package list
+  cp "$CHROOT_OUTPUT"/var/log/install_packages.list "$LOG_OUTPUT"/fai/
+  # fixup owners
+  chown root:adm "$LOG_OUTPUT"/fai/*
+  chmod 664 "$LOG_OUTPUT"/fai/*
+}
+# }}}
+
 # clean exit {{{
 bailout() {
   rm -f /var/run/fai/fai_softupdate_is_running \
@@ -493,6 +511,7 @@ if [ -z "$FORCE" ] ; then
    [ -n "$ARCH" ]                && echo "  Architecture:      $ARCH"
    [ -n "$BOOT_METHOD" ]         && echo "  Boot method:       $BOOT_METHOD"
    [ -n "$HYBRID_METHOD" ]       && echo "  Hybrid method:     $HYBRID_METHOD"
+   [ -n "$SECURE_BOOT" ]         && echo "  Secure Boot:       $SECURE_BOOT"
    [ -n "$TEMPLATE_DIRECTORY" ]  && echo "  Template files:    $TEMPLATE_DIRECTORY"
    [ -n "$CHROOT_INSTALL" ]      && echo "  Install files from directory to chroot:  $CHROOT_INSTALL"
    [ -n "$BOOTID" ]              && echo "  Boot identifier:   $BOOTID"
@@ -579,7 +598,8 @@ if [ -n "$CONFIG" ] ; then
    fi
 fi
 
-start_seconds=$(cut -d . -f 1 /proc/uptime)
+SECONDS=unknown
+start_seconds="$(date +%s)"
 log "------------------------------------------------------------------------------"
 log "Starting grml-live [${GRML_LIVE_VERSION}] run on $(date)"
 log "Using local config file: $LOCAL_CONFIG"
@@ -678,7 +698,7 @@ if [ -z "$FAI_DEBOOTSTRAP" ] ; then
 fi
 
 if [ -z "$FAI_DEBOOTSTRAP_OPTS" ] ; then
-  FAI_DEBOOTSTRAP_OPTS="--exclude=info,tasksel,tasksel-data --include=aptitude --arch $ARCH"
+  FAI_DEBOOTSTRAP_OPTS="--exclude=info,tasksel,tasksel-data --include=aptitude --arch $ARCH --no-merged-usr"
 fi
 
 # create backup of old (not yet automatically generated) config file
@@ -743,9 +763,10 @@ else
       RC="$PIPESTATUS" # notice: bash-only
 
       if [ "$RC" != 0 ] ; then
-         log    "Error: critical error while executing fai [exit code ${RC}]. Exiting."
-         eerror "Error: critical error while executing fai [exit code ${RC}]. Exiting." ; eend 1
-         bailout 1
+        store_logfiles  # ensure to have logfiles available even if building failed
+        log    "Error: critical error while executing fai [exit code ${RC}]. Exiting."
+        eerror "Error: critical error while executing fai [exit code ${RC}]. Exiting." ; eend 1
+        bailout 1
       fi
 
       # provide inform fai about the ISO we build, needs to be provided
@@ -757,19 +778,7 @@ else
 
       FORCE_ISO_REBUILD=true
 
-      # move fai logs into grml_logs directory
-      mkdir -p "$LOG_OUTPUT"/fai/
-      cp -r "$CHROOT_OUTPUT"/var/log/fai/"$HOSTNAME"/last/* "$LOG_OUTPUT"/fai/
-      rm -rf "$CHROOT_OUTPUT"/var/log/fai
-
-      # store copy of autogenerated configuration file
-      cp ${GRML_FAI_CONFIG}/nfsroot.conf "$LOG_OUTPUT"/fai/
-
-      # copy fai package list
-      cp "$CHROOT_OUTPUT"/var/log/install_packages.list "$LOG_OUTPUT"/fai/
-      # fixup owners
-      chown root:adm "$LOG_OUTPUT"/fai/*
-      chmod 664 "$LOG_OUTPUT"/fai/*
+      store_logfiles
 
       umount_all
 
@@ -917,32 +926,58 @@ grub_setup() {
       log   "Generated 64-bit EFI image $BOOTX64"
       einfo "Generated 64-bit EFI image $BOOTX64" ; eend 0
     else
-      log   "Secure Boot is enabled [mode: $SECURE_BOOT]"
-      einfo "Secure Boot is enabled [mode: $SECURE_BOOT]" ; eend 0
+      case "${SECURE_BOOT}" in
+        disable*)
+          log   "Secure Boot is disabled [mode: ${SECURE_BOOT}]"
+          einfo "Secure Boot is disabled [mode: ${SECURE_BOOT}]" ; eend 0
+          ;;
+        debian|ubuntu)
+          log   "Secure Boot is enabled [mode: ${SECURE_BOOT}]"
+          einfo "Secure Boot is enabled [mode: ${SECURE_BOOT}]" ; eend 0
+
+          local GRUBCFG_TEMPLATE="${TEMPLATE_DIRECTORY}/secureboot/grub.cfg"
+          local GRUBCFG_TMP=$(mktemp)
+
+          if ! [ -r "${GRUBCFG_TEMPLATE}" ] ; then
+            log    "Secure Boot template for GRUB [${GRUBCFG_TEMPLATE}] not found."
+            eerror "Secure Boot template for GRUB [${GRUBCFG_TEMPLATE}] not found." ; eend 1
+            bailout 54
+          fi
 
-      if [ "${SECURE_BOOT}" = "ubuntu" ] ; then
-        local GRUBCFG_TEMPLATE="${TEMPLATE_DIRECTORY}/secureboot/grub.cfg"
-        local GRUBCFG_TMP=$(mktemp)
+          cp "${GRUBCFG_TEMPLATE}" "${GRUBCFG_TMP}"
+          adjust_boot_files "${GRUBCFG_TMP}"
 
-        if ! [ -r "${GRUBCFG_TEMPLATE}" ] ; then
-          log    "Secure Boot template for GRUB [${GRUBCFG_TEMPLATE}] not found."
-          eerror "Secure Boot template for GRUB [${GRUBCFG_TEMPLATE}] not found." ; eend 1
-          bailout 54
-        fi
+          mmd -i "${CHROOT_OUTPUT}/${EFI_IMG}" ::boot      || bailout 55
+          mmd -i "${CHROOT_OUTPUT}/${EFI_IMG}" ::boot/grub || bailout 55
+          mcopy -i "${CHROOT_OUTPUT}/${EFI_IMG}" "${GRUBCFG_TMP}" ::boot/grub/grub.cfg || bailout 56
 
-        cp "${GRUBCFG_TEMPLATE}" "${GRUBCFG_TMP}"
-        adjust_boot_files "${GRUBCFG_TMP}"
+          rm "${GRUBCFG_TMP}"
 
-        mmd -i "${CHROOT_OUTPUT}/${EFI_IMG}" ::EFI/ubuntu || bailout 55
-        mcopy -i "${CHROOT_OUTPUT}/${EFI_IMG}" "${GRUBCFG_TMP}" ::EFI/ubuntu/grub.cfg || bailout 56
-        rm "${GRUBCFG_TMP}"
+          if [ -r "${TEMPLATE_DIRECTORY}/EFI/${SECURE_BOOT}/BOOT/grubx64.efi.signed" ] ; then
+            mcopy -i "${CHROOT_OUTPUT}/${EFI_IMG}" "${TEMPLATE_DIRECTORY}/EFI/${SECURE_BOOT}/BOOT/grubx64.efi.signed" ::EFI/BOOT/grubx64.efi >/dev/null || bailout 57
+          else
+            log    "Secure Boot GRUB binary '${TEMPLATE_DIRECTORY}/EFI/${SECURE_BOOT}/BOOT/grubx64.efi.signed' not found."
+            eerror "Secure Boot GRUB binary '${TEMPLATE_DIRECTORY}/EFI/${SECURE_BOOT}/BOOT/grubx64.efi.signed' not found." ; eend 1
+            bailout 57
+          fi
 
-        mcopy -i "${CHROOT_OUTPUT}/${EFI_IMG}" "${TEMPLATE_DIRECTORY}"/EFI/BOOT/grubx64.efi.signed ::EFI/BOOT/grubx64.efi >/dev/null || bailout 57
-        mcopy -i "${CHROOT_OUTPUT}/${EFI_IMG}" "${TEMPLATE_DIRECTORY}"/EFI/BOOT/shimx64.efi.signed ::EFI/BOOT/bootx64.efi >/dev/null || bailout 58
+          if [ -r "${TEMPLATE_DIRECTORY}/EFI/${SECURE_BOOT}/BOOT/shimx64.efi.signed" ] ; then
+            mcopy -i "${CHROOT_OUTPUT}/${EFI_IMG}" "${TEMPLATE_DIRECTORY}/EFI/${SECURE_BOOT}/BOOT/shimx64.efi.signed" ::EFI/BOOT/bootx64.efi >/dev/null || bailout 58
+          else
+            log    "Secure Boot GRUB binary '${TEMPLATE_DIRECTORY}/EFI/${SECURE_BOOT}/BOOT/shimx64.efi.signed' not found."
+            eerror "Secure Boot GRUB binary '${TEMPLATE_DIRECTORY}/EFI/${SECURE_BOOT}/BOOT/shimx64.efi.signed' not found." ; eend 1
+            bailout 57
+          fi
 
-        log   "Generated 64-bit Secure Boot (ubuntu) EFI image ${CHROOT_OUTPUT}/${EFI_IMG}"
-        einfo "Generated 64-bit Secure Boot (ubuntu) EFI image ${CHROOT_OUTPUT}/${EFI_IMG}" ; eend 0
-      fi
+          log   "Generated 64-bit Secure Boot (${SECURE_BOOT}) EFI image ${CHROOT_OUTPUT}/${EFI_IMG}"
+          einfo "Generated 64-bit Secure Boot (${SECURE_BOOT}) EFI image ${CHROOT_OUTPUT}/${EFI_IMG}" ; eend 0
+          ;;
+        *)
+          log   "Secure Boot method '${SECURE_BOOT}' is unsupported."
+          error "Secure Boot method '${SECURE_BOOT}' is unsupported." ; eend 1
+          bailout 59
+          ;;
+      esac
     fi
   fi
 
@@ -1088,12 +1123,16 @@ if [ "$ARCH" = i386 ] || [ "$ARCH" = amd64 ] ; then
       log   "Skipping installation of boot addons as requested via \$NO_ADDONS."
       einfo "Skipping installation of boot addons as requested via \$NO_ADDONS."; eend 0
     else
-      if ! [ -d "$TEMPLATE_DIRECTORY"/boot/addons ] ; then
+      if ! [ -r "$TEMPLATE_DIRECTORY"/boot/addons ] ; then
         log   "Boot addons not found, skipping therefore. (Consider installing package grml-live-addons)"
         ewarn "Boot addons not found, skipping therefore. (Consider installing package grml-live-addons)" ; eend 0
       else
+        log   "Installing boot addons."
+        einfo "Installing boot addons."
+
         # copy addons from system packages or grml-live-addons
         copy_addon_file ipxe.lkrn /usr/lib/ipxe addons
+        copy_addon_file ipxe.efi /usr/lib/ipxe addons
         copy_addon_file pci.ids /usr/share/misc addons
         copy_addon_file memtest86+.bin /boot addons
 
@@ -1110,6 +1149,8 @@ if [ "$ARCH" = i386 ] || [ "$ARCH" = amd64 ] ; then
 
         copy_addon_file memdisk /usr/lib/syslinux addons
 
+        eend 0
+
         # make memtest filename FAT16/8.3 compatible
         mv "${BUILD_OUTPUT}/boot/addons/memtest86+.bin" \
           "${BUILD_OUTPUT}/boot/addons/memtest"
@@ -1189,8 +1230,7 @@ if [ "$ARCH" = i386 ] || [ "$ARCH" = amd64 ] ; then
     # adjust all variables in the templates with the according distribution information
     adjust_boot_files "${BUILD_OUTPUT}"/boot/isolinux/*.cfg \
       "${BUILD_OUTPUT}"/boot/isolinux/*.msg \
-      "${BUILD_OUTPUT}"/boot/grub/* \
-      "${BUILD_OUTPUT}"/boot/ubuntu/*
+      "${BUILD_OUTPUT}"/boot/grub/*
 
     for param in ARCH DATE DISTRI_INFO DISTRI_NAME DISTRI_SPLASH GRML_NAME SQUASHFS_NAME \
       RELEASE_INFO SHORT_NAME VERSION ; do
@@ -1626,6 +1666,53 @@ create_netbootpackage() {
     eoutdent
   fi
 
+  # don't include shim + grubnetx64 + grub files in i386 netboot packages,
+  # as those don't make much sense there
+  if [ "$ARCH" = amd64 ] ; then
+    if ! [ -r "${BUILD_OUTPUT}/boot/grub/netboot.cfg" ] ; then
+      log   "File ${BUILD_OUTPUT}/boot/grub/netboot.cfg not found."
+      ewarn "File ${BUILD_OUTPUT}/boot/grub/netboot.cfg not found."
+      eindent
+      log   "Hint: Are you using custom templates which do not provide grub.cfg?"
+      ewarn "Hint: Are you using custom templates which do not provide grub.cfg?" ; eend 0
+      eoutdent
+    else
+      cp "${BUILD_OUTPUT}/boot/grub/netboot.cfg" "${WORKING_DIR}/grub.cfg"
+      adjust_boot_files "${WORKING_DIR}/grub.cfg"
+
+      if [ -r "${CHROOT_OUTPUT}"/usr/lib/shim/shimx64.efi.signed ] ; then
+        log "Installing ${CHROOT_OUTPUT}/usr/lib/shim/shimx64.efi.signed as shim.efi in netboot package"
+        cp "${CHROOT_OUTPUT}"/usr/lib/shim/shimx64.efi.signed "${WORKING_DIR}"/shim.efi
+      elif [ -r "${CHROOT_OUTPUT}"/usr/lib/shim/shimx64.efi ] ; then
+        log "Installing ${CHROOT_OUTPUT}/usr/lib/shim/shimx64.efi as shim.efi in netboot package"
+        cp "${CHROOT_OUTPUT}"/usr/lib/shim/shimx64.efi "${WORKING_DIR}"/shim.efi
+      else
+        log   "No shimx64.efi for usage with PXE boot found (shim-signed not present?)"
+        ewarn "No shimx64.efi for usage with PXE boot found (shim-signed not present?)" ; eend 0
+      fi
+
+      if [ -r /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed ] ; then
+        log "Installing /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed as grubx64.efi in netboot package"
+        cp /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed "${WORKING_DIR}"/grubx64.efi
+      elif [ -r /usr/lib/grub/x86_64-efi/monolithic/grubnetx64.efi ] ; then
+        log "Installing /usr/lib/grub/x86_64-efi/monolithic/grubnetx64.efi as grubx64.efi in netboot package"
+        cp /usr/lib/grub/x86_64-efi/monolithic/grubnetx64.efi "${WORKING_DIR}"/grubx64.efi
+      else
+        log   "No grubnetx64.efi for usage with PXE boot found (grub-efi-amd64-signed not present?)"
+        ewarn "No grubnetx64.efi for usage with PXE boot found (grub-efi-amd64-signed not present?)." ; eend 0
+      fi
+
+      if [ -r "${CHROOT_OUTPUT}"/usr/share/grub/unicode.pf2 ] ; then
+        log "Installing ${CHROOT_OUTPUT}/usr/share/grub/unicode.pf2 as grub/fonts/unicode.pf2 in netboot package"
+        mkdir -p "${WORKING_DIR}"/grub/fonts/
+        cp "${CHROOT_OUTPUT}"/usr/share/grub/unicode.pf2 "${WORKING_DIR}"/grub/fonts/
+      else
+        log   "No unicode.pf2 for usage with PXE boot found (grub-common not present?)"
+        ewarn "No unicode.pf2 for usage with PXE boot found (grub-common not present?)" ; eend 0
+      fi
+    fi
+  fi
+
   if tar -C "$OUTPUTDIR" -jcf "${OUTPUT_FILE}" "grml_netboot_package_${GRML_NAME}_${VERSION}" ; then
     (
       cd $(dirname "${OUTPUT_FILE}")
@@ -1692,7 +1779,10 @@ fi
 # }}}
 
 # finalize {{{
-[ -n "$start_seconds" ] && SECONDS="$[$(cut -d . -f 1 /proc/uptime)-$start_seconds]" || SECONDS="unknown"
+if [ -n "${start_seconds}" ] ; then
+  end_seconds="$(date +%s)"
+  SECONDS="$(( end_seconds - start_seconds ))"
+fi
 log "Successfully finished execution of $PN [$(date) - running ${SECONDS} seconds]"
 
 dpkg_to_db # make sure we catch the last log line as well, therefore execute between log + einfo
diff --git a/templates/EFI/debian/BOOT/README b/templates/EFI/debian/BOOT/README
new file mode 100644 (file)
index 0000000..ea5f86f
--- /dev/null
@@ -0,0 +1,7 @@
+# debian approach:
+shimx64.efi.signed = /usr/lib/shim/shimx64.efi.signed                  from http://ftp.de.debian.org/debian/pool/main/s/shim-signed/shim-signed_1.33+15+1533136590.3beb971-7_amd64.deb
+grubx64.efi.signed = /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed from http://ftp.de.debian.org/debian/pool/main/g/grub-efi-amd64-signed/grub-efi-amd64-signed_1+2.02+dfsg1+20_amd64.deb
+# NOTE:
+# shimx64.efi.signed ends up as /EFI/BOOT/bootx64.efi inside [grml_cd]/boot/efi.img, and
+# grubx64.efi.signed ends up as /EFI/BOOT/grubx64.efi inside [grml_cd]/boot/efi.img, whereas
+# [grml_cd]/boot/efi.img is used as `boot/efi.img` inside `xorriso -as mkisofs [...] -e boot/efi.img -no-emul-boot [...]` ISO generation [inside grml_cd directory]
diff --git a/templates/EFI/debian/BOOT/grubx64.efi.signed b/templates/EFI/debian/BOOT/grubx64.efi.signed
new file mode 100644 (file)
index 0000000..01c10b4
Binary files /dev/null and b/templates/EFI/debian/BOOT/grubx64.efi.signed differ
diff --git a/templates/EFI/debian/BOOT/shimx64.efi.signed b/templates/EFI/debian/BOOT/shimx64.efi.signed
new file mode 100644 (file)
index 0000000..131ca45
Binary files /dev/null and b/templates/EFI/debian/BOOT/shimx64.efi.signed differ
similarity index 82%
rename from templates/EFI/BOOT/README
rename to templates/EFI/ubuntu/BOOT/README
index 6e0ed87..eaa0172 100644 (file)
@@ -1,6 +1,6 @@
 # ubuntu approach:
 shimx64.efi.signed = /usr/lib/shim/shimx64.efi.signed                   from http://de.archive.ubuntu.com/ubuntu/pool/main/s/shim-signed/shim-signed_1.34.9+13-0ubuntu2_amd64.deb
-grubx64.efi.signed = /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed from http://de.archive.ubuntu.com/ubuntu/pool/main/g/grub2-signed/grub-efi-amd64-signed_1.93+2.02-2ubuntu8_amd64.deb
+grubx64.efi.signed = /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed  from http://de.archive.ubuntu.com/ubuntu/pool/main/g/grub2-signed/grub-efi-amd64-signed_1.93+2.02-2ubuntu8_amd64.deb
 # NOTE:
 # shimx64.efi.signed ends up as /EFI/BOOT/bootx64.efi inside [grml_cd]/boot/efi.img, and
 # grubx64.efi.signed ends up as /EFI/BOOT/grubx64.efi inside [grml_cd]/boot/efi.img, whereas
similarity index 94%
rename from templates/EFI/BOOT/grubx64.efi.signed
rename to templates/EFI/ubuntu/BOOT/grubx64.efi.signed
index d502e5f..e68f734 100644 (file)
Binary files a/templates/EFI/BOOT/grubx64.efi.signed and b/templates/EFI/ubuntu/BOOT/grubx64.efi.signed differ
index 84836cc..535d704 100644 (file)
@@ -1,6 +1,6 @@
 ==================================================================
-The grml software collection and all included programs that are
-authored by the grml-team, are subject to the terms and conditions
+The Grml software collection and all included programs that are
+authored by the Grml team, are subject to the terms and conditions
 of the GNU GENERAL PUBLIC LICENSE Version 2 or any later version,
 as quoted herein.
 
@@ -8,9 +8,6 @@ Please note that this license does NOT automatically apply to
 third-party programs included on this CD. Check
 /usr/share/doc/*/copyright* and other supplied license files
 of each software package carefully for more information.
-
-Information regarding the sources of this ISO can be found at
-http://sources.grml.org/
 ==================================================================
 
                    GNU GENERAL PUBLIC LICENSE
index d3a2193..5d36e7f 100644 (file)
@@ -1,4 +1,12 @@
 submenu "%GRML_NAME% - advanced options  ->" --class=submenu {
+menuentry "%GRML_NAME% - enable Predictable Network Interface Names" {
+    set gfxpayload=keep
+    echo 'Loading kernel...'
+    linux  /boot/%SHORT_NAME%/vmlinuz apm=power-off boot=live live-media-path=/live/%GRML_NAME%/ bootid=%BOOTID% nomce "${loopback}" "${kernelopts}" 
+    echo 'Loading initrd...'
+    initrd /boot/%SHORT_NAME%/initrd.img
+}
+
 menuentry "%GRML_NAME% - enable persistency mode" {
     set gfxpayload=keep
     echo 'Loading kernel...'
index 130ab05..3b515d8 100644 (file)
@@ -1,65 +1,82 @@
 submenu "Addons ->" --class=submenu {
-menuentry "Memory test (memtest86+)" {
-    insmod linux16
-    linux16 /boot/addons/memtest
-}
+
+if [ "${grub_platform}" != "efi" ] ; then
+    menuentry "Memory test (memtest86+)" {
+        insmod linux16
+        linux16 /boot/addons/memtest
+    }
+fi
 
 menuentry "iPXE - boot via network/PXE" {
-    insmod linux16
-    linux16 /boot/addons/ipxe.lkrn
+    if [ "${grub_platform}" == "efi" ] ; then
+        chainloader /boot/addons/ipxe.efi
+    else
+        insmod linux16
+        linux16 /boot/addons/ipxe.lkrn
+    fi
 }
 
 menuentry "Netboot.xyz" {
-    insmod linux16
-    linux16 /boot/addons/netboot.xyz.lkrn
-}
-
-menuentry "GRUB - all in one image" {
-    insmod linux16
-    linux16  /boot/addons/memdisk
-    initrd16 /boot/addons/allinone.img
+    if [ "${grub_platform}" == "efi" ] ; then
+        chainloader /boot/addons/netboot.xyz.efi
+    else
+        insmod linux16
+        linux16 /boot/addons/netboot.xyz.lkrn
+    fi
 }
 
-menuentry "FreeDOS" {
-    insmod linux16
-    linux16  /boot/addons/memdisk
-    loopback balder /boot/addons/balder10.imz
-    initrd16 (balder)+2880
-}
-
-if [ ${iso_path} ] ; then
-    # assume loopback.cfg boot
-    menuentry "MirOS bsd4grml (via loopback)" {
-        multiboot   /boot/addons/bsd4grml/ldbsd.com
-        module      /boot/addons/bsd4grml/bsd.rd bsd
-        module      /boot/addons/bsd4grml/loopback.0 boot.cfg
-        module      /boot/addons/bsd4grml/loopback.1 boot.1
-        module      /boot/addons/bsd4grml/loopback.2 boot.2
-        module      /boot/addons/bsd4grml/loopback.3 boot.3
-        module      /boot/addons/bsd4grml/loopback.4 boot.4
-        module      /boot/addons/bsd4grml/loopback.5 boot.5
-        module      /boot/addons/bsd4grml/loopback.6 boot.6
+if [ "${grub_platform}" != "efi" ] ; then
+    menuentry "Netboot.xyz" {
+        insmod linux16
+        linux16 /boot/addons/netboot.xyz.lkrn
     }
-else
-    # assume grub.cfg boot
-    menuentry "MirOS bsd4grml (regular method)" {
-        multiboot   /boot/addons/bsd4grml/ldbsd.com
+
+    menuentry "GRUB - all in one image" {
+        insmod linux16
+        linux16  /boot/addons/memdisk
+        initrd16 /boot/addons/allinone.img
     }
 
-    menuentry "MirOS bsd4grml (fallback method)" {
-        multiboot   /boot/addons/bsd4grml/ldbsd.com
-        module      /boot/addons/bsd4grml/bsd.rd bsd.rd
-        module      /boot/addons/bsd4grml/boot.1 boot.1
-        module      /boot/addons/bsd4grml/boot.2 boot.2
-        module      /boot/addons/bsd4grml/boot.3 boot.3
-        module      /boot/addons/bsd4grml/boot.4 boot.4
-        module      /boot/addons/bsd4grml/boot.5 boot.5
-        module      /boot/addons/bsd4grml/boot.6 boot.6
-        module      /boot/addons/bsd4grml/boot.cfg boot.cfg
-        module      /boot/grub/grub.img grub.img
+    menuentry "FreeDOS" {
+        insmod linux16
+        linux16  /boot/addons/memdisk
+        loopback balder /boot/addons/balder10.imz
+        initrd16 (balder)+2880
     }
-fi
 
+    if [ ${iso_path} ] ; then
+        # assume loopback.cfg boot
+        menuentry "MirOS bsd4grml (via loopback)" {
+            multiboot   /boot/addons/bsd4grml/ldbsd.com
+            module      /boot/addons/bsd4grml/bsd.rd bsd
+            module      /boot/addons/bsd4grml/loopback.0 boot.cfg
+            module      /boot/addons/bsd4grml/loopback.1 boot.1
+            module      /boot/addons/bsd4grml/loopback.2 boot.2
+            module      /boot/addons/bsd4grml/loopback.3 boot.3
+            module      /boot/addons/bsd4grml/loopback.4 boot.4
+            module      /boot/addons/bsd4grml/loopback.5 boot.5
+            module      /boot/addons/bsd4grml/loopback.6 boot.6
+        }
+    else
+        # assume grub.cfg boot
+        menuentry "MirOS bsd4grml (regular method)" {
+            multiboot   /boot/addons/bsd4grml/ldbsd.com
+        }
+
+        menuentry "MirOS bsd4grml (fallback method)" {
+            multiboot   /boot/addons/bsd4grml/ldbsd.com
+            module      /boot/addons/bsd4grml/bsd.rd bsd.rd
+            module      /boot/addons/bsd4grml/boot.1 boot.1
+            module      /boot/addons/bsd4grml/boot.2 boot.2
+            module      /boot/addons/bsd4grml/boot.3 boot.3
+            module      /boot/addons/bsd4grml/boot.4 boot.4
+            module      /boot/addons/bsd4grml/boot.5 boot.5
+            module      /boot/addons/bsd4grml/boot.6 boot.6
+            module      /boot/addons/bsd4grml/boot.cfg boot.cfg
+            module      /boot/grub/grub.img grub.img
+        }
+    fi # iso_path
+fi # efi mode
 }
 
 menuentry "Boot OS of first partition on first disk" {
diff --git a/templates/boot/grub/grml-theme/sb-theme.txt b/templates/boot/grub/grml-theme/sb-theme.txt
new file mode 100644 (file)
index 0000000..f9d5335
--- /dev/null
@@ -0,0 +1,45 @@
+# This is the theme to be used in Secure Boot mode
+
+title-text: ""
+title-color: "#FFFFFF"
+desktop-image: "black.png"
+message-color:  "#FFFFFF"
+
++ image {
+  file = "grml-logo.png"
+  left = 45%
+  top = 2%
+}
++ boot_menu {
+  left = 15%
+  width = 70%
+  top = 16%
+  height = 36%
+  item_color = "#FFFFFF"
+  selected_item_color = "orange"
+  item_spacing = 4
+  item_height = 12
+  border_color = "#FFFFFF"
+}
+
+
+# Show an informational message.
++ vbox {
+  top = 55%
+  left = 20%
+  + label {text = "Running in Secure Boot mode" color = "white" align = "left"}
+  + label {text = ""}
+  + label {text = "Press ENTER to boot or E to edit menu entry " color = "white"}
+  + label {text = "Press C to enter the Grub commandline" color = "white"}
+}
+
++ progress_bar {
+   id = "__timeout__"
+   top = 75%
+   left = 20%
+   text_color = "#FFFFFF"
+   fg_color = "orange"
+   bg_color = #66B
+   border_color = #006
+   text = "@TIMEOUT_NOTIFICATION_LONG@"
+}
index ef8af04..3a7be37 100644 (file)
@@ -1,7 +1,9 @@
+# This is the default GRUB theme of Grml
+
 title-text: ""
 title-color: "#FFFFFF"
 desktop-image: "black.png"
-message-color: "#FFFFFF"
+message-color:  "#FFFFFF"
 
 + image {
   file = "grml-logo.png"
@@ -9,29 +11,27 @@ message-color:       "#FFFFFF"
   top = 2%
 }
 + boot_menu {
-               left = 15%
-               width = 70%
-               top = 16%
-               height = 36%
-               item_color = "#FFFFFF"
-               selected_item_color = "orange"
-               item_spacing = 4
-               item_height = 12
-               border_color = "#FFFFFF"
-
+  left = 15%
+  width = 70%
+  top = 16%
+  height = 36%
+  item_color = "#FFFFFF"
+  selected_item_color = "orange"
+  item_spacing = 4
+  item_height = 12
+  border_color = "#FFFFFF"
 }
 
 
 # Show an informational message.
 + vbox {
-               top = 55%
-               left = 20%
-               + label {text = "Press ENTER to boot or E to edit menu entry " color = "white" align = "left"}
-               + label {text = "Press C to enter the Grub commandline" color = "white"}
+  top = 55%
+  left = 20%
+  + label {text = "Press ENTER to boot or E to edit menu entry " color = "white" align = "left"}
+  + label {text = "Press C to enter the Grub commandline" color = "white"}
 }
 
-+ progress_bar
-{
++ progress_bar {
    id = "__timeout__"
    top = 75%
    left = 20%
@@ -40,5 +40,4 @@ message-color:        "#FFFFFF"
    bg_color = #66B
    border_color = #006
    text = "@TIMEOUT_NOTIFICATION_LONG@"
-
 }
diff --git a/templates/boot/grub/grmlenv.cfg b/templates/boot/grub/grmlenv.cfg
deleted file mode 100644 (file)
index ef37872..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-# this is a simple test to identify whether it looks like the Secure Boot enabled/signed
-# GRUB is running or if it's a full featured GRUB version, the former doesn't
-# fail with invalid usage, while the later will fail with "error: device name required."
-if probe ; then
-  echo "It looks like Secure Boot is enabled."
-  set grml_secureboot=true
-  export grml_secureboot
-else
-  echo "It looks like Secure Boot is NOT enabled."
-  set grml_secureboot=false
-  export grml_secureboot
-fi
index fe6382d..bf79d81 100644 (file)
@@ -8,7 +8,17 @@ if loadfont /boot/grub/ascii.pf2 ; then
    terminal_output gfxterm
 fi
 
-if [ -f /boot/grub/grml-theme/theme.txt ] ; then
+if [ "${grml_secureboot}" = "true" ] ; then
+  if [ -f /boot/grub/grml-theme/sb-theme.txt ] ; then
+    set theme=/boot/grub/grml-theme/sb-theme.txt
+    export theme
+  else
+    set menu_color_normal=white/black
+    set menu_color_highlight=black/orange
+    export menu_color_normal
+    export menu_color_highlight
+  fi
+elif [ -f /boot/grub/grml-theme/theme.txt ] ; then
   set theme=/boot/grub/grml-theme/theme.txt
   export theme
 else
diff --git a/templates/boot/grub/netboot.cfg b/templates/boot/grub/netboot.cfg
new file mode 100644 (file)
index 0000000..66375dd
--- /dev/null
@@ -0,0 +1,27 @@
+# GRUB PXE configuration file
+
+# adjust according to your needs
+#set timeout=300
+
+insmod png
+set gfxmode=auto
+insmod gfxterm
+terminal_output gfxterm
+
+loadfont unicode
+
+set menu_color_normal=white/black
+set menu_color_highlight=black/yellow
+
+menuentry "%GRML_NAME% Standard (%VERSION%, %ARCH%)" {
+    set gfxpayload=keep
+    echo 'Loading kernel...'
+    linux  vmlinuz root=/dev/nfs rw nfsroot=192.168.0.1:/live/image boot=live live-media-path=/live/%GRML_NAME%/ bootid=%BOOTID% apm=power-off nomce net.ifnames=0 noprompt noeject 
+    echo 'Loading initrd...'
+    initrd initrd.img
+}
+
+menuentry "Boot OS of first partition on first disk" {
+    set root=(hd0,1)
+    chainloader +1
+}
index dd19d4d..17560a2 100644 (file)
@@ -13,6 +13,16 @@ label debug
                                         bootup sequence.
   endtext
 
+label pnet
+  menu label %GRML_NAME% - Enable Predictable ^Network Interface Names
+  kernel /boot/%SHORT_NAME%/vmlinuz
+  append initrd=/boot/%SHORT_NAME%/initrd.img boot=live live-media-path=/live/%GRML_NAME%/ bootid=%BOOTID% apm=power-off vga=791 nomce 
+
+  text help
+                                        Boot Grml with Predictable
+                                        Network Interface Names.
+  endtext
+
 label nofb
   menu label %GRML_NAME% - Dis^able Framebuffer
   kernel /boot/%SHORT_NAME%/vmlinuz
index f98e37e..0fc7e26 100644 (file)
@@ -1,3 +1,6 @@
+# Secure Boot support
+# We are supposed to end up in this file only when running with enabled Secure Boot
+
 set grml_orig_prefix=$prefix
 export grml_orig_prefix
 set grml_orig_root=$root
@@ -5,104 +8,36 @@ export grml_orig_root
 
 search.file %BOOT_FILE% root
 set prefix=($root)/boot/grub/
-source ($root)/boot/grub/grmlenv.cfg
 
-if [ "$grml_secureboot" = false ] ; then
-  configfile /boot/grub/grub.cfg
-  # if that fails we need to fallback, but how?
+# this is a simple test to identify whether GRUB is running in Secure Boot mode
+# or not; "wrmsr" is in the list of disabled_mods of GRUB and is supposed to be
+# invoked with two arguments (and if not fails with exit code 18), but when
+# running under Secure Boot it fails with: "error: Secure Boot forbits loading
+# module from [...]/boot/grub/x86_64-efi/wrmsr.mod" + returns with exit code 30
+wrmsr
+if [ $? = 30 ] ; then
+  echo "It looks like Secure Boot is enabled."
+  set grml_secureboot=true
+  export grml_secureboot
 else
-  if [ "$grml_orig_prefix" != "" ] ; then
-    set prefix=$grml_orig_prefix
-  fi
-
-  # this is basically a copy of templates/boot/grub/header.cfg but to avoid
-  # failures due to Secure Boot restrictions and sourcing addons.cfg via
-  # /boot/grub/loopback.cfg (and then showing entries that are at the wrong
-  # position as well as don't work at all) we have to specify the appropriate
-  # config here
-  set timeout=20
-  if loadfont /boot/grub/ascii.pf2 ; then
-    set gfxmode=auto
-    insmod efi_gop
-    insmod efi_uga
-    insmod gfxterm
-    insmod png
-    terminal_output gfxterm
-  fi
-
-  if [ -f /boot/grub/%GRML_NAME%-theme/theme.txt ] ; then
-    set theme=/boot/grub/%GRML_NAME%-theme/theme.txt
-    export theme
-  elif [ -f /boot/grub/grml-theme/theme.txt ] ; then
-    set theme=/boot/grub/grml-theme/theme.txt
-    export theme
-  else
-    set menu_color_normal=white/black
-    set menu_color_highlight=black/light-gray
-    set color_normal=white/black
-  fi
-
-  menuentry "Boot %GRML_NAME% in normal mode (release %VERSION%, Secure Boot enabled)" {
-      set gfxpayload=keep
-      echo 'Loading kernel...'
-      linux   /boot/%SHORT_NAME%/vmlinuz apm=power-off boot=live live-media-path=/live/%GRML_NAME%/ bootid=%BOOTID% "${loopback}" "${kernelopts}" nomce net.ifnames=0 
-      echo 'Loading initrd...'
-      initrd  /boot/%SHORT_NAME%/initrd.img
-  }
-
-  menuentry "Boot %GRML_NAME% - enable persistency" {
-      set gfxpayload=keep
-      echo 'Loading kernel...'
-      linux   /boot/%SHORT_NAME%/vmlinuz apm=power-off boot=live live-media-path=/live/%GRML_NAME%/ bootid=%BOOTID% "${loopback}" "${kernelopts}" nomce net.ifnames=0 persistence 
-      echo 'Loading initrd...'
-      initrd  /boot/%SHORT_NAME%/initrd.img
-  }
-
-  menuentry "Boot %GRML_NAME% - copy %GRML_NAME% to RAM" {
-      set gfxpayload=keep
-      echo 'Loading kernel...'
-      linux   /boot/%SHORT_NAME%/vmlinuz apm=power-off boot=live live-media-path=/live/%GRML_NAME%/ bootid=%BOOTID% "${loopback}" "${kernelopts}" nomce net.ifnames=0 toram=%GRML_NAME%.squashfs 
-      echo 'Loading initrd...'
-      initrd  /boot/%SHORT_NAME%/initrd.img
-  }
+  echo "It looks like Secure Boot is NOT enabled."
+  set grml_secureboot=false
+  export grml_secureboot
+fi
 
-  menuentry "Boot %GRML_NAME% - copy whole medium to RAM" {
-      set gfxpayload=keep
-      echo 'Loading kernel...'
-      linux   /boot/%SHORT_NAME%/vmlinuz apm=power-off boot=live live-media-path=/live/%GRML_NAME%/ bootid=%BOOTID% "${loopback}" "${kernelopts}" nomce net.ifnames=0 toram 
-      echo 'Loading initrd...'
-      initrd  /boot/%SHORT_NAME%/initrd.img
-  }
+if [ -e /boot/grub/grub.cfg ] ; then
+  configfile /boot/grub/grub.cfg
+else
+  echo "ERROR: It looks like SecureBoot is enabled but reading GRUB configuration failed.
 
-  menuentry "Boot %GRML_NAME% - disable framebuffer/kernel mode setting" {
-      set gfxpayload=keep
-      echo 'Loading kernel...'
-      linux   /boot/%SHORT_NAME%/vmlinuz apm=power-off boot=live live-media-path=/live/%GRML_NAME%/ bootid=%BOOTID% "${loopback}" "${kernelopts}" nomce net.ifnames=0 video=vesafb:off cirrus.modeset=0 i915.modeset=0 mgag200.modeset=0 nomodeset nouveau.modeset=0 radeon.modeset=0 
-      echo 'Loading initrd...'
-      initrd  /boot/%SHORT_NAME%/initrd.img
-  }
+Please execute the following commands and provide the output to the Grml team:
 
-  menuentry "Boot %GRML_NAME% - enable forensic mode" {
-      set gfxpayload=keep
-      echo 'Loading kernel...'
-      linux   /boot/%SHORT_NAME%/vmlinuz apm=power-off boot=live live-media-path=/live/%GRML_NAME%/ bootid=%BOOTID% "${loopback}" "${kernelopts}" nomce net.ifnames=0 read-only nofstab noraid nodmraid nolvm noautoconfig noswap raid=noautodetect 
-      echo 'Loading initrd...'
-      initrd  /boot/%SHORT_NAME%/initrd.img
-  }
+echo \$prefix
+echo \$root
+echo \$grml_orig_prefix
+echo \$grml_orig_root
+search.file /boot/grub/grub.cfg
 
-  menuentry "Boot %GRML_NAME% - enable serial console" {
-      set gfxpayload=keep
-      echo 'Loading kernel...'
-      linux   /boot/%SHORT_NAME%/vmlinuz apm=power-off boot=live live-media-path=/live/%GRML_NAME%/ bootid=%BOOTID% "${loopback}" "${kernelopts}" nomce net.ifnames=0 video=vesafb:off console=tty1 console=ttyS0,9600n8 
-      echo 'Loading initrd...'
-      initrd  /boot/%SHORT_NAME%/initrd.img
-  }
+Hint: Create a screenshot or a picture with your digital camera or mobile phone."
 
-  menuentry "Boot %GRML_NAME% - debug mode" {
-      set gfxpayload=keep
-      echo 'Loading kernel...'
-      linux   /boot/%SHORT_NAME%/vmlinuz apm=power-off boot=live live-media-path=/live/%GRML_NAME%/ bootid=%BOOTID% "${loopback}" "${kernelopts}" nomce net.ifnames=0 initcall verbose debug=vc systemd.log_level=debug systemd.log_target=kmsg log_buf_len=1M 
-      echo 'Loading initrd...'
-      initrd  /boot/%SHORT_NAME%/initrd.img
-  }
 fi