summaryrefslogtreecommitdiffstats
path: root/build-initramfs.sh
diff options
context:
space:
mode:
authorJonathan Bauer2020-05-19 13:23:50 +0200
committerJonathan Bauer2020-05-19 13:23:50 +0200
commitea4c31e1734747c38bca22b4c4784fc0de22139d (patch)
treec8b0f4de999cb4dd247d5ae2b8ae927474217170 /build-initramfs.sh
parentpatches: backport workaround for dnbd3 in centos (diff)
downloadsystemd-init-ea4c31e1734747c38bca22b4c4784fc0de22139d.tar.gz
systemd-init-ea4c31e1734747c38bca22b4c4784fc0de22139d.tar.xz
systemd-init-ea4c31e1734747c38bca22b4c4784fc0de22139d.zip
build-initramfs.sh: support CentOS-7 again
Diffstat (limited to 'build-initramfs.sh')
-rwxr-xr-xbuild-initramfs.sh23
1 files changed, 22 insertions, 1 deletions
diff --git a/build-initramfs.sh b/build-initramfs.sh
index dcf52636..2b31f55b 100755
--- a/build-initramfs.sh
+++ b/build-initramfs.sh
@@ -34,6 +34,14 @@ use_systemd_in_initramfs='no'
declare -rg _repo_dir="${_root_dir}/systemd-init"
declare -rg _dracut_dir="${_root_dir}/dracut"
+# Autodetect the kmod version present on the system to decide which dracut version to get
+# * v47 requires kmod >= 23 (Available in Ubuntu 18.04)
+# * v46 works with kmod == 20 (CentOS 7.5 only provides kmod v20)
+declare -g _dracut_version="046"
+if [ "$(pkg-config --modversion libkmod)" -ge 23 ]; then
+ _dracut_version="047"
+fi
+
declare -A core_repo=(
[handler]="git"
[path]="$_repo_dir"
@@ -44,7 +52,7 @@ declare -A core_repo=(
declare -A core_dracut=(
[handler]="http"
[path]="$_dracut_dir"
- [url]="https://www.kernel.org/pub/linux/utils/boot/dracut/dracut-047.tar.gz"
+ [url]="https://www.kernel.org/pub/linux/utils/boot/dracut/dracut-${_dracut_version}.tar.gz"
)
declare -A module_dnbd3=(
@@ -90,6 +98,19 @@ declare -A override
bootstrap() {
for module in "${!core_@}" "${!module_@}"; do
declare -n _ref="$module"
+ if [ "$?" -ne 0 ]; then
+ echo "Only bash >= 4.3 supports namerefs." \
+ "You are running ${BASH_VERSION}." \
+ "Falling back to using evil eval..."
+ eval 'declare -A _ref=(' \
+ '[handler]=${'$module'[handler]}' \
+ '[path]=${'$module'[path]}' \
+ '[url]=${'$module'[url]}' \
+ '[branch]=${'$module'[branch]}' \
+ '[commit]=${'$module'[commit]}' \
+ ')'
+ # phew that was ugly....
+ fi
if [ -n "$(ls -A "${_ref[path]}" 2> /dev/null)" ]; then
echo "'${_ref[path]}' not empty, skipping..."
continue