]> git.proxmox.com Git - mirror_zfs.git/commitdiff
Avoid here-documents in systemd mount generator
authorlorenz <lhuedepohl@users.noreply.github.com>
Wed, 8 Jan 2020 01:03:00 +0000 (02:03 +0100)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Wed, 8 Jan 2020 01:03:00 +0000 (17:03 -0800)
On some systems - openSUSE, for example - there is not yet a writeable
temporary file system available, so bash bails out with an error,

  'cannot create temp file for here-document: Read-only file system',

on the here documents in zfs-mount-generator. The simple fix is to
change these into a multi-line echo statement.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-By: Richard Laager <rlaager@wiktel.com>
Reviewed-by: George Melikov <mail@gmelikov.ru>
Signed-off-by: Lorenz Hüdepohl <dev@stellardeath.org>
Closes #9802

etc/systemd/system-generators/zfs-mount-generator.in

index 850396fb6c2ea58d91ddfa8ee0161f8c816c7f32..066896009e94805db978540d3593e8b08343b362 100755 (executable)
@@ -104,8 +104,13 @@ process_line() {
       fi
 
       # Generate the key-load .service unit
-      cat > "${dest_norm}/${keyloadunit}" << EOF
-# Automatically generated by zfs-mount-generator
+      #
+      # Note: It is tempting to use a `<<EOF` style here-document for this, but
+      #   bash requires a writable /tmp or $TMPDIR for that. This is not always
+      #   available early during boot.
+      #
+      echo \
+"# Automatically generated by zfs-mount-generator
 
 [Unit]
 Description=Load ZFS key for ${dataset}
@@ -120,8 +125,7 @@ ${pathdep}
 Type=oneshot
 RemainAfterExit=yes
 ExecStart=${keyloadcmd}
-ExecStop=@sbindir@/zfs unload-key '${dataset}'
-EOF
+ExecStop=@sbindir@/zfs unload-key '${dataset}'"   > "${dest_norm}/${keyloadunit}"
     fi
     # Update the dependencies for the mount file to require the
     # key-loading unit.
@@ -235,8 +239,11 @@ EOF
 
   # Create the .mount unit file.
   # By ordering before zfs-mount.service, we avoid race conditions.
-  cat > "${dest_norm}/${mountfile}" << EOF
-# Automatically generated by zfs-mount-generator
+  #
+  # (Do not use `<<EOF`-style here-documents for this, see warning above)
+  #
+  echo \
+"# Automatically generated by zfs-mount-generator
 
 [Unit]
 SourcePath=${cachefile}
@@ -249,8 +256,7 @@ Wants=${wants}
 Where=${p_mountpoint}
 What=${dataset}
 Type=zfs
-Options=defaults${opts},zfsutil
-EOF
+Options=defaults${opts},zfsutil" > "${dest_norm}/${mountfile}"
 
   # Finally, create the appropriate dependency
   ln -s "../${mountfile}" "${req_dir}"