-
Notifications
You must be signed in to change notification settings - Fork 400
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix(dracut-systemd): rootfs-generator cannot write outside of generat…
…or dir Although it was already documented in systemd.generator(7) that generators must not write to locations other than those passed as arguments, since systemd/systemd@ca6ce62d systemd executes generators in a mount namespace "sandbox", so now the hooks created by the rootfs-generator are lost. These hooks are created using the root= cmdline argument, so this patch moves the creation of these hooks to a cmdline hook. Fixes issue #2211 Fixes issue #2225
- Loading branch information
1 parent
acfa793
commit 86c8a5a
Showing
3 changed files
with
41 additions
and
19 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
#!/bin/sh | ||
|
||
type getarg > /dev/null 2>&1 || . /lib/dracut-lib.sh | ||
|
||
root=$(getarg root=) | ||
case "${root#block:}" in | ||
LABEL=* | UUID=* | PARTUUID=* | PARTLABEL=*) | ||
root="block:$(label_uuid_to_dev "$root")" | ||
rootok=1 | ||
;; | ||
/dev/nfs | /dev/root) # ignore legacy | ||
;; | ||
/dev/*) | ||
root="block:${root}" | ||
rootok=1 | ||
;; | ||
esac | ||
|
||
if [ "$rootok" = "1" ]; then | ||
root_dev="${root#block:}" | ||
root_name="$(str_replace "$root_dev" '/' '\x2f')" | ||
if ! [ -e "$hookdir/initqueue/finished/devexists-${root_name}.sh" ]; then | ||
|
||
# If a LUKS device needs unlocking via systemd in the initrd, assume | ||
# it's for the root device. In that case, don't block on it if it's | ||
# after remote-fs-pre.target since the initqueue is ordered before it so | ||
# it will never actually show up (think Tang-pinned rootfs). | ||
cat > "$hookdir/initqueue/finished/devexists-${root_name}.sh" << EOF | ||
if ! grep -q After=remote-fs-pre.target /run/systemd/generator/systemd-cryptsetup@*.service 2>/dev/null; then | ||
[ -e "$root_dev" ] | ||
fi | ||
EOF | ||
{ | ||
printf '[ -e "%s" ] || ' "$root_dev" | ||
printf 'warn "\"%s\" does not exist"\n' "$root_dev" | ||
} >> "$hookdir/emergency/80-${root_name}.sh" | ||
fi | ||
fi |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters