00systemd: check if systemd version is a number

The recent systemd upstream introduced a slightly modified version
string which included information about a git commit, which however
broke the version check in dracut. Unfortunately, the (( )) bash syntax
went along with it in certain cases and introduced a pretty nasty issue,
when the systemd would boot up but with slightly changed environment.

To prevent this from happening in the future, let's at least check if
the version parsed from the `systemd --version` output is a comparable
number.
master
Frantisek Sumsal 2019-01-04 16:51:15 +01:00 committed by Lukáš Nykrýn
parent 44f2fe5170
commit 53cb081b4c
1 changed files with 5 additions and 0 deletions

View File

@ -5,6 +5,11 @@ check() {
[[ $mount_needs ]] && return 1
if require_binaries $systemdutildir/systemd; then
SYSTEMD_VERSION=$($systemdutildir/systemd --version | { read a b a; echo $b; })
# Check if the systemd version is a valid number
if ! [[ $SYSTEMD_VERSION =~ ^[0-9]+$ ]]; then
dfatal "systemd version is not a number ($SYSTEMD_VERSION)"
exit 1
fi
(( $SYSTEMD_VERSION >= 198 )) && return 0
return 255
fi