fake-uname: fix gcc argument order and improve preloaded shared library master
authorMichael Prokop <mika@grml.org>
Thu, 29 Apr 2021 22:25:44 +0000 (00:25 +0200)
committerMichael Prokop <mika@grml.org>
Fri, 30 Apr 2021 11:22:57 +0000 (13:22 +0200)
This includes recent changes as integrated at
https://github.com/sipwise/deployment-iso

Makefile:

- Fix gcc argument order: newer gcc versions have become more picky on
  their argument order, due to the --as-needed default, and require the
  libraries to be linked to, to be passed after the code/objects that
  use them, otherwise they will get dropped as unused. This change is
  required for compiling with gcc v10.2.1-6 as present on
  Debian/bullseye (otherwise fails to execute with `undefined symbol:
  dlsym`)
- Add `make check` target to run some basic tests
- Also get rid of *.o *.so files in clean target, adjust targets
  accordingly to always clean and then build fake-uname.so afterwards
- Mark as serial-only via .NOTPARALLEL

fake-uname.c:

- Use hidden visibility by default, and export the symbol explicitly.
- Resolve real_uname() only once.
- Return early if the real_uname() fails, to avoid acting on bogus data.
- Call dlerror() before dlsym() to clear any previous errors.
- Compute the release member size from the utsname struct instead of
  hard-coding it.
- Always NUL-terminate the relese buffer, so protect against very long
  environment strings.
- Make various variables into const.

Acked-by: Guillem Jover <gjover@sipwise.com>
Thanks: Guillem Jover

chroot-script
config
debian/changelog
grml-debootstrap
grml-debootstrap.8.txt
packer/Makefile
packer/debian64.json
packer/fake-uname.c

index a5f92c4..b0737ca 100755 (executable)
@@ -75,8 +75,8 @@ askpass() {
 
 # 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
 
@@ -129,8 +129,8 @@ chrootmirror() {
 
 # 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
 
@@ -481,7 +481,15 @@ createfstab(){
 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
diff --git a/config b/config
index 6477acf..b5104f0 100644 (file)
--- a/config
+++ b/config
@@ -73,8 +73,8 @@
 
 # Debian release that should be installed.
 # Supported values: lenny, squeeze, wheezy, jessie, stretch, buster, bullseye, sid
-# Default: 'buster'
-# RELEASE='buster'
+# Default: 'bullseye'
+# RELEASE='bullseye'
 
 # Define components that should be used within sources.list.
 # Default: 'main'
index 81cd810..06db69b 100644 (file)
@@ -1,3 +1,42 @@
+grml-debootstrap (0.96) unstable; urgency=medium
+
+  * [181ec9a] Use shorter fs label for EFI partition to not break with
+    recent dosfstools (Closes: #987014)
+
+ -- Michael Prokop <mika@grml.org>  Mon, 19 Apr 2021 16:36:17 +0200
+
+grml-debootstrap (0.95) unstable; urgency=medium
+
+  * [3f28b11] Properly handle KEEP_SRC_LIST option when set to 'no'
+  * [fa2ce1b] Do not enable escape characters on dumb terminals
+  * [01b5b0f] Support F2FS in VMs by including f2fs driver in grub-
+    mkimage. Thanks to Paul Menzel for bugreport and bugfix
+  * [1537613] F2FS filesystem doesn't support errors=remount-ro mount
+    option
+
+ -- Michael Prokop <mika@grml.org>  Fri, 22 Jan 2021 11:56:34 +0100
+
+grml-debootstrap (0.94) unstable; urgency=medium
+
+  The "waiting for bullseye, 2021 + vaccinations" release
+
+  [ Chris Hofstaedtler ]
+  * [5c7f7fa] d/control: Set Rules-Requires-Root: no
+  * [2617a47] d/control: fix Vcs-Git field name
+  * [2e6b03e] d/rules: remove dh_make template header
+
+  [ Michael Prokop ]
+  * [8f673fa] Fix shellcheck issue SC2174
+  * [622ca58] Improve EFI detection by checking for /sys/firmware/efi.
+    Thanks to Darshaka Pathirana for reporting and feedback
+  * [1475b08] packer: make template compatible with recent packer
+    versions. Thanks to Darshaka Pathirana for reporting
+  * [208a600] packer: use latest VBoxGuestAdditions (6.1.16) + Grml stable
+    release (2020.06)
+  * [9506ba5] Use bullseye as default Debian release
+
+ -- Michael Prokop <mika@grml.org>  Wed, 23 Dec 2020 17:34:26 +0100
+
 grml-debootstrap (0.93) unstable; urgency=medium
 
   * New release (without code changes) to fix Debian policy issue
index 52adf78..d62cd2c 100755 (executable)
@@ -72,7 +72,7 @@ MNTPOINT="/mnt/debootstrap.$$"
 [ -n "$POST_SCRIPTS" ] || POST_SCRIPTS='yes'
 [ -n "$PRE_SCRIPTS" ] || PRE_SCRIPTS='yes'
 [ -n "$RECONFIGURE" ] || RECONFIGURE='console-data'
-[ -n "$RELEASE" ] || RELEASE='buster'
+[ -n "$RELEASE" ] || RELEASE='bullseye'
 [ -n "$RM_APTCACHE" ] || RM_APTCACHE='yes'
 [ -n "$SCRIPTS" ] || SCRIPTS='no' # deprecated, replaced by POST_SCRIPTS
 [ -n "$SECURE" ] || SECURE='yes'
@@ -103,7 +103,7 @@ Bootstrap options:
   -m, --mirror <URL>     Mirror which should be used for apt-get/aptitude.
   -i, --iso <mnt>        Mountpoint where a Debian ISO is mounted to, for use
                          instead of fetching packages from a mirror.
-  -r, --release <name>   Release of new Debian system (default: buster).
+  -r, --release <name>   Release of new Debian system (default: bullseye).
   -t, --target <target>  Target partition (/dev/...) or directory where the
                          system should be installed to.
   -p, --mntpoint <mnt>   Mountpoint used for mounting the target system,
@@ -183,10 +183,18 @@ fi
 # }}}
 
 # early helper functions {{{
-GOOD='\e[32;01m'
-BAD='\e[31;01m'
-WARN='\e[33;01m'
-NORMAL='\e[0m'
+# skip colors when running within a dumb terminal
+if [ "${TERM}" = "dumb" ] ; then
+  GOOD=
+  BAD=
+  WARN=
+  NORMAL=
+else
+  GOOD='\e[32;01m'
+  BAD='\e[31;01m'
+  WARN='\e[33;01m'
+  NORMAL='\e[0m'
+fi
 
 einfo() {
   einfon "$1\\n"
@@ -386,7 +394,7 @@ while :; do
     shift; _opt_debopt="$1"
     ;;
   --filesystem)        # Filesystem that should be used
-    shift; _opt_filesystem="$1"
+    shift; _opt_filesystem="$1" ; FILESYSTEM="${_opt_filesystem}"
     ;;
   --interactive)       # Use interactive mode (frontend)
     _opt_interactive=T
@@ -779,7 +787,7 @@ prompt_for_bootmanager()
 # ask for Debian release {{{
 prompt_for_release()
 {
-  [ -n "$RELEASE" ] && DEFAULT_RELEASE="$RELEASE" || DEFAULT_RELEASE='buster'
+  [ -n "$RELEASE" ] && DEFAULT_RELEASE="$RELEASE" || DEFAULT_RELEASE='bullseye'
   RELEASE="$(dialog --stdout --title "${PN}" --default-item $DEFAULT_RELEASE --menu \
             "Please enter the Debian release you would like to use for installation:" \
             0 50 8 \
@@ -972,7 +980,7 @@ format_efi_partition() {
     einfo "EFI partition $EFI seems to have a FAT filesystem, not modifying." ; eend 0
   else
     einfo "EFI partition $EFI doesn't seem to be formatted, creating filesystem."
-    mkfs.fat -F32 -n "EFI System Partition" "$EFI"
+    mkfs.fat -F32 -n "EFI" "$EFI"
     RC=$?
     if [ $RC -eq 0 ] ; then
       eend 0
@@ -987,14 +995,18 @@ format_efi_partition() {
 
 # check for EFI support or try to enable it {{{
 efi_support() {
-  if lsmod | grep -q efivars ; then
+  local efivars_loaded=false
+  if modprobe efivars &>/dev/null ; then
+    efivars_loaded=true
+  fi
+
+  if [ -d /sys/firmware/efi ] ; then
     einfo "EFI support detected." ; eend 0
     return 0
   fi
 
-  if modprobe efivars &>/dev/null ; then
-    einfo "EFI support enabled now." ; eend 0
-    return 0
+  if ! [ -d /sys/firmware/efi ] && [ "${efivars_loaded:-}" = "true" ] ; then
+    einfo "EFI support detected, but system seems to be running in BIOS mode."
   fi
 
   return 1
@@ -1158,7 +1170,7 @@ fi
 # Support for generic release codenames is unavailable. {{{
 if [ "$RELEASE" = "stable" ] || [ "$RELEASE" = "testing" ] ; then
    eerror "Generic release codenames (stable, testing) are unsupported. \
-Please use specific codenames such as stretch or buster." ; eend 1
+Please use specific codenames such as buster or bullseye." ; eend 1
    bailout 1
 fi
 # }}}
@@ -1519,7 +1531,16 @@ if [[ -z "${GRUB}" ]] || ! dd if="${GRUB}" bs=512 count=1 2>/dev/null | cat -v |
       ;;
   esac
   dd if="${MNTPOINT}/usr/lib/grub/i386-pc/boot.img" of="${ORIG_TARGET}" conv=notrunc bs=440 count=1
-  chroot "${MNTPOINT}" grub-mkimage -O i386-pc -p "(hd0,msdos1)/boot/grub" -o /tmp/core.img biosdisk part_msdos ext2
+  case "${_opt_filesystem}" in
+    f2fs)
+      chroot "${MNTPOINT}" grub-mkimage -O i386-pc -p "(hd0,msdos1)/boot/grub" -o /tmp/core.img biosdisk part_msdos f2fs
+      ;;
+      # NOTE - we might need to distinguish between further filesystems
+      *)
+      chroot "${MNTPOINT}" grub-mkimage -O i386-pc -p "(hd0,msdos1)/boot/grub" -o /tmp/core.img biosdisk part_msdos ext2
+      ;;
+  esac
+
   dd if="${MNTPOINT}/tmp/core.img" of="${ORIG_TARGET}" conv=notrunc seek=1
   rm -f "${MNTPOINT}/tmp/core.img"
 fi
@@ -1650,6 +1671,7 @@ preparechroot() {
   [ -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 "$FILESYSTEM" ]          && echo "FILESYSTEM='$(sed "s,','\\\\'',g" <<<"${FILESYSTEM}")'"                   >> "$CHROOT_VARIABLES"
   [ -n "$FORCE" ]               && echo "FORCE='$(sed "s,','\\\\'',g" <<<"${FORCE}")'"                             >> "$CHROOT_VARIABLES"
   [ -n "$GRMLREPOS" ]           && echo "GRMLREPOS='$(sed "s,','\\\\'',g" <<<"${GRMLREPOS}")'"                     >> "$CHROOT_VARIABLES"
   [ -n "$GRUB" ]                && echo "GRUB='$(sed "s,','\\\\'',g" <<<"${GRUB}")'"                               >> "$CHROOT_VARIABLES"
index 111ca97..b572f5c 100644 (file)
@@ -219,7 +219,7 @@ Options and environment variables
 
     Specify release of new Debian system. Supported releases names: lenny,
     squeeze, wheezy, jessie, stretch, buster, bullseye and sid. Corresponding with configuration
-    variable RELEASE. Default release: buster
+    variable RELEASE. Default release: bullseye
 
 *--remove-configs*::
 
@@ -294,7 +294,7 @@ Usage examples
 
   grml-debootstrap --target /dev/sda1 --grub /dev/sda
 
-Install default Debian release (buster) on /dev/sda1 and install bootmanager GRUB in MBR (master boot record) of /dev/sda.
+Install default Debian release (bullseye) on /dev/sda1 and install bootmanager GRUB in MBR (master boot record) of /dev/sda.
 
   grml-debootstrap --release stretch --target /dev/sda1 --grub /dev/sda --hostname debian01 --password changeme
 
@@ -307,32 +307,32 @@ Install Debian unstable/sid on /dev/sda6 and install bootmanager GRUB in MBR (ma
 
   DEBOOTSTRAP=mmdebstrap grml-debootstrap --target /dev/sda1 --grub /dev/sda
 
-Install default Debian release (buster) on /dev/sda1 and install bootmanager GRUB in MBR (master boot record) of /dev/sda.
+Install default Debian release (bullseye) on /dev/sda1 and install bootmanager GRUB in MBR (master boot record) of /dev/sda.
 Use mmdebstrap instead of default debootstrap tool for bootstrapping.
 
   grml-debootstrap --target /dev/mapper/vg0-rootfs --grub /dev/sda
 
-Install default Debian release (buster) on LVM device /dev/mapper/vg0-rootfs and install bootmanager GRUB in MBR (master boot record) of /dev/sda.
+Install default Debian release (bullseye) on LVM device /dev/mapper/vg0-rootfs and install bootmanager GRUB in MBR (master boot record) of /dev/sda.
 
   grml-debootstrap --efi /dev/sda1 --target /dev/sda2 --grub /dev/sda
 
-Install default Debian release (buster) on /dev/sda2 and install bootmanager GRUB in MBR (master boot record) of /dev/sda.
+Install default Debian release (bullseye) on /dev/sda2 and install bootmanager GRUB in MBR (master boot record) of /dev/sda.
 Use /dev/sda1 as EFI partition (requires EFI support in booted system).
 
   mount /dev/sda1 /data/chroot
   grml-debootstrap --target /data/chroot
 
-Install default Debian release (buster) in directory /data/chroot (without any bootloader).
+Install default Debian release (bullseye) in directory /data/chroot (without any bootloader).
 
   grml-debootstrap --target /dev/sda3 --grub /dev/sda  --mirror ftp://ftp.tugraz.at/mirror/debian
 
-Install default Debian release (buster) on /dev/sda3 and install bootmanager GRUB in MBR (master boot record) of /dev/sda.
+Install default Debian release (bullseye) on /dev/sda3 and install bootmanager GRUB in MBR (master boot record) of /dev/sda.
 Use specified mirror instead of the default (http://deb.debian.org/debian) one.
 
   mount /dev/sda1 /mnt/sda1
   grml-debootstrap --vmfile --vmsize 3G --target /mnt/sda1/qemu.img
 
-Install default debian release (buster) in a Virtual Machine file with 3GB disk size (including GRUB as bootmanager in MBR of the virtual disk file):
+Install default debian release (bullseye) in a Virtual Machine file with 3GB disk size (including GRUB as bootmanager in MBR of the virtual disk file):
 
   mount -o loop ./debian-CD-1.iso /media/cdrom
   grml-debootstrap --target /dev/sda1 --grub /dev/sda --iso /media/cdrom
@@ -404,7 +404,7 @@ Where do you want to install grub to? Usage example: grub=/dev/sda
 
   release=...
 
-Specify release of new Debian system. Defaults to Debian buster. Supported
+Specify release of new Debian system. Defaults to Debian bullseye. Supported
 releases: lenny, squeeze, wheezy, jessie, stretch, buster, bullseye and sid. Usage example: release=stretch
 
   mirror=...
index 6a94be0..9d60c35 100644 (file)
@@ -1,43 +1,57 @@
 GRML_DEBOOTSTRAP_VERSION=latest
 GRML_DEBOOTSTRAP_LOCAL_PATH=$(shell pwd)/local_dir
 
-compile: fake-uname.so
+CFLAGS ?= -ggdb -O2 -Wall -Wextra -Wno-unused-parameter
+CFLAGS += -fPIC -fvisibility=hidden
+LDLIBS ?=
+LDLIBS += -ldl
+
+PLUGIN = fake-uname.so
+
+$(PLUGIN): fake-uname.c
+       $(CC) $(CFLAGS) $(LDFLAGS) $< $(LDLIBS) -o $@ -shared
+
+UNAME_CHECK = LD_PRELOAD="$(CURDIR)/$(PLUGIN)" uname
+
+check: $(PLUGIN)
+       echo "$(UNAME_CHECK)"
+       test "0.0.0" = "$(shell $(UNAME_CHECK) -r)"
+       test "1.2.3" = "$(shell UTS_RELEASE="1.2.3" $(UNAME_CHECK) -r)"
 
 install:
        cd .. && make DESTDIR=packer/local_dir install
 
 clean:
+       $(RM) *.o *.so
        rm -rf local_dir
 
-fake-uname.so:
-       gcc -shared -fPIC -ldl fake-uname.c -o fake-uname.so
-
 # Debian 11
-bullseye: fake-uname.so clean install
+bullseye: clean fake-uname.so install
        packer build -var debian_version=$@ -var grml_debootstrap_version=$(GRML_DEBOOTSTRAP_VERSION) -var grml_debootstrap_local_path=$(GRML_DEBOOTSTRAP_LOCAL_PATH) debian64.json
 
 # Debian 10
-buster: fake-uname.so clean install
+buster: clean fake-uname.so install
        packer build -var debian_version=$@ -var grml_debootstrap_version=$(GRML_DEBOOTSTRAP_VERSION) -var grml_debootstrap_local_path=$(GRML_DEBOOTSTRAP_LOCAL_PATH) debian64.json
 
 # Debian 9
-stretch: fake-uname.so clean install
+stretch: clean fake-uname.so install
        packer build -var debian_version=$@ -var grml_debootstrap_version=$(GRML_DEBOOTSTRAP_VERSION) -var grml_debootstrap_local_path=$(GRML_DEBOOTSTRAP_LOCAL_PATH) debian64.json
 
 # Debian 8
-jessie: fake-uname.so clean install
+jessie: clean fake-uname.so install
        packer build -var debian_version=$@ -var grml_debootstrap_version=$(GRML_DEBOOTSTRAP_VERSION) -var grml_debootstrap_local_path=$(GRML_DEBOOTSTRAP_LOCAL_PATH) debian64.json
 
 # Debian 7
-wheezy: fake-uname.so clean install
+wheezy: clean fake-uname.so install
        packer build -var debian_version=$@ -var grml_debootstrap_version=$(GRML_DEBOOTSTRAP_VERSION) -var grml_debootstrap_local_path=$(GRML_DEBOOTSTRAP_LOCAL_PATH) debian64.json
 
 # Debian 6.0
-squeeze: fake-uname.so clean install
+squeeze: clean fake-uname.so install
        packer build -var debian_version=$@ -var grml_debootstrap_version=$(GRML_DEBOOTSTRAP_VERSION) -var grml_debootstrap_local_path=$(GRML_DEBOOTSTRAP_LOCAL_PATH) debian64.json
 
 # Debian 5.0
-lenny: fake-uname.so clean install
+lenny: clean fake-uname.so install
        packer build -var debian_version=$@ -var grml_debootstrap_version=$(GRML_DEBOOTSTRAP_VERSION) -var grml_debootstrap_local_path=$(GRML_DEBOOTSTRAP_LOCAL_PATH) debian64.json
 
 .PHONY: compile bullseye buster stretch jessie wheezy squeeze lenny
+.NOTPARALLEL:
index 1e684a1..a2d1779 100644 (file)
@@ -1,78 +1,82 @@
 {
-  "variables": {
-    "grml_type": "grml64-full",
-    "grml_version": "2020.06-rc1",
-    "grml_iso_checksum": "b28b54e55fc5fe1569e0201e918da49be0885646",
-    "debian_version": "buster",
-    "grml_debootstrap_version": "latest",
-    "grml_debootstrap_local_path": "doesnotexist"
-  },
-
   "builders": [
-  {
-    "type": "virtualbox-iso",
-    "vm_name": "{{ user `grml_type` }}_{{ user `grml_version` }}",
-    "guest_os_type": "Debian_64",
-    "hard_drive_interface": "sata",
-    "iso_url": "http://download.grml.org/devel/{{ user `grml_type` }}_{{ user `grml_version` }}.iso",
-    "iso_checksum": "{{ user `grml_iso_checksum` }}",
-    "iso_checksum_type": "sha1",
-    "ssh_wait_timeout": "20m",
-    "ssh_username": "root",
-    "ssh_password": "grml",
-    "output_directory": "{{ user `grml_type` }}_output",
-    "headless": false,
-    "boot_wait": "5s",
-    "boot_command": [
-      "<tab> ssh=grml <enter>"
-    ],
-    "shutdown_command": "shutdown -h now",
-    "guest_additions_url": "https://download.virtualbox.org/virtualbox/6.1.10/VBoxGuestAdditions_6.1.10.iso",
-    "guest_additions_sha256": "62a0c6715bee164817a6f58858dec1d60f01fd0ae00a377a75bbf885ddbd0a61",
-    "vboxmanage": [
-      ["modifyvm", "{{.Name}}", "--memory", "1024"]
-    ]
-  }
+    {
+      "boot_command": [
+        "<tab> ssh=grml <enter>"
+      ],
+      "boot_wait": "5s",
+      "guest_additions_sha256": "65d22a9f1fcf690d77be99d549149ec9129e2a728ddd9202df436ed9593ba520",
+      "guest_additions_url": "https://download.virtualbox.org/virtualbox/6.1.20/VBoxGuestAdditions_6.1.20.iso",
+      "guest_os_type": "Debian_64",
+      "hard_drive_interface": "sata",
+      "headless": false,
+      "iso_checksum": "sha1:{{ user `grml_iso_checksum` }}",
+      "iso_url": "http://download.grml.org/{{ user `grml_type` }}_{{ user `grml_version` }}.iso",
+      "output_directory": "{{ user `grml_type` }}_output",
+      "shutdown_command": "shutdown -h now",
+      "ssh_password": "grml",
+      "ssh_timeout": "20m",
+      "ssh_username": "root",
+      "type": "virtualbox-iso",
+      "vboxmanage": [
+        [
+          "modifyvm",
+          "{{.Name}}",
+          "--memory",
+          "1024"
+        ]
+      ],
+      "vm_name": "{{ user `grml_type` }}_{{ user `grml_version` }}"
+    }
+  ],
+  "post-processors": [
+    {
+      "override": {
+        "virtualbox": {
+          "output": "debian64_{{ user `debian_version` }}.box"
+        }
+      },
+      "type": "vagrant"
+    }
   ],
-    "provisioners": [
+  "provisioners": [
     {
-      "type": "file",
+      "destination": "/tmp/fake-uname.so",
       "source": "fake-uname.so",
-      "destination": "/tmp/fake-uname.so"
+      "type": "file"
     },
     {
-      "type": "file",
+      "destination": "/tmp/debian64.bats",
       "source": "debian64.bats",
-      "destination": "/tmp/debian64.bats"
+      "type": "file"
     },
     {
-      "type": "shell",
-      "inline": "mkdir -vp /tmp/grml-debootstrap/"
+      "inline": "mkdir -vp /tmp/grml-debootstrap/",
+      "type": "shell"
     },
     {
-      "type": "file",
+      "destination": "/tmp/grml-debootstrap/",
       "source": "{{ user `grml_debootstrap_local_path` }}/",
-      "destination": "/tmp/grml-debootstrap/"
+      "type": "file"
     },
     {
-      "type": "shell",
       "environment_vars": [
-       "GRML_DEBOOTSTRAP_VERSION={{ user `grml_debootstrap_version` }}",
-       "DEBIAN_VERSION={{ user `debian_version` }}"
+        "GRML_DEBOOTSTRAP_VERSION={{ user `grml_debootstrap_version` }}",
+        "DEBIAN_VERSION={{ user `debian_version` }}"
       ],
       "scripts": [
         "debian64_provision.sh"
-        ]
+      ],
+      "type": "shell"
     }
   ],
-    "post-processors": [
-    {
-      "type": "vagrant",
-      "override": {
-        "virtualbox": {
-          "output": "debian64_{{ user `debian_version` }}.box"
-        }
-      }
-    }
-  ]
+  "variables": {
+    "debian_version": "bullseye",
+    "grml_debootstrap_local_path": "doesnotexist",
+    "grml_debootstrap_version": "latest",
+    "grml_iso_checksum": "80ccb1bc1eb6116e9094a332d58a3715f2160ab1",
+    "grml_type": "grml64-full",
+    "grml_version": "2020.06"
+  }
 }
+
index 7bbcb24..d71a4f4 100644 (file)
 #define RTLD_NEXT      ((void *) -1l)
 #endif
 
-typedef int (*uname_t) (struct utsname * buf);
+#define SYMBOL_EXPORT __attribute__((visibility("default")))
+
+typedef int uname_func(struct utsname *buf);
 
 static void *get_libc_func(const char *funcname)
 {
   void *func;
   char *error;
 
+  /* Clear any previous errors. */
+  dlerror();
   func = dlsym(RTLD_NEXT, funcname);
-  if ((error = dlerror()) != NULL) {
-    fprintf(stderr, "Can't locate libc function `%s' error: %s", funcname, error);
+  error = dlerror();
+  if (error != NULL) {
+    fprintf(stderr, "Cannot locate libc function '%s' error: %s",
+            funcname, error);
     _exit(EXIT_FAILURE);
   }
   return func;
 }
 
-int uname(struct utsname *buf)
+int SYMBOL_EXPORT uname(struct utsname *buf)
 {
+  static uname_func *real_uname;
+  const char *release;
   int ret;
-  char *env = NULL;
-  uname_t real_uname = (uname_t) get_libc_func("uname");
 
-  ret = real_uname((struct utsname *) buf);
-  strncpy(buf->release, ((env = getenv("UTS_RELEASE")) == NULL) ? UTS_RELEASE : env, 65);
+  if (real_uname == NULL)
+    real_uname = (uname_func *)get_libc_func("uname");
+
+  ret = real_uname(buf);
+  if (ret < 0)
+    return ret;
+
+  release = getenv("UTS_RELEASE");
+  if (release == NULL)
+    release = UTS_RELEASE;
+  strncpy(buf->release, release, sizeof(buf->release) - 1);
+  buf->release[sizeof(buf->release) - 1] = '\0';
+
   return ret;
 }