@@ -57,7 +57,7 @@ if ! [[ $kernel ]]; then
57
57
export kernel
58
58
fi
59
59
60
- srcmods=" /lib/modules/$kernel /"
60
+ srcmods=" $dracutsysrootdir /lib/modules/$kernel /"
61
61
62
62
[[ $drivers_dir ]] && {
63
63
if ! command -v kmod & > /dev/null && vercmp " $( modprobe --version | cut -d' ' -f3) " lt 3.7; then
@@ -79,17 +79,21 @@ export srcmods
79
79
export hookdirs
80
80
}
81
81
82
+ DRACUT_LDD=${DRACUT_LDD:- ldd}
83
+ DRACUT_TESTBIN=${DRACUT_TESTBIN:-/ bin/ sh}
84
+ DRACUT_LDCONFIG=${DRACUT_LDCONFIG:- ldconfig}
85
+
82
86
. $dracutbasedir /dracut-functions.sh
83
87
84
88
# Detect lib paths
85
89
if ! [[ $libdirs ]] ; then
86
- if [[ " $( ldd /bin/sh ) " == * /lib64/* ]] & > /dev/null \
87
- && [[ -d /lib64 ]]; then
90
+ if [[ " $( $DRACUT_LDD $dracutsysrootdir$DRACUT_TESTBIN ) " == * /lib64/* ]] & > /dev/null \
91
+ && [[ -d $dracutsysrootdir /lib64 ]]; then
88
92
libdirs+=" /lib64"
89
- [[ -d /usr/lib64 ]] && libdirs+=" /usr/lib64"
93
+ [[ -d $dracutsysrootdir /usr/lib64 ]] && libdirs+=" /usr/lib64"
90
94
else
91
95
libdirs+=" /lib"
92
- [[ -d /usr/lib ]] && libdirs+=" /usr/lib"
96
+ [[ -d $dracutsysrootdir /usr/lib ]] && libdirs+=" /usr/lib"
93
97
fi
94
98
95
99
libdirs+=" $( ldconfig_paths) "
@@ -168,23 +172,34 @@ elif ! [[ $DRACUT_INSTALL ]] && [[ -x $dracutbasedir/install/dracut-install ]];
168
172
DRACUT_INSTALL=$dracutbasedir /install/dracut-install
169
173
fi
170
174
171
- if ! [[ -x $DRACUT_INSTALL ]]; then
175
+ # Test if dracut-install is a standalone executable with no options.
176
+ # E.g. DRACUT_INSTALL may be set externally as:
177
+ # DRACUT_INSTALL="valgrind dracut-install"
178
+ # or
179
+ # DRACUT_INSTALL="dracut-install --debug"
180
+ # in which case the string cannot be tested for being executable.
181
+ DRINSTALLPARTS=0
182
+ for i in $DRACUT_INSTALL ; do
183
+ DRINSTALLPARTS=$(( $DRINSTALLPARTS + 1 ))
184
+ done
185
+
186
+ if [[ $DRINSTALLPARTS = 1 ]] && ! [[ -x $DRACUT_INSTALL ]]; then
172
187
dfatal " dracut-install not found!"
173
188
exit 10
174
189
fi
175
190
176
191
if [[ $hostonly == " -h" ]]; then
177
192
if ! [[ $DRACUT_KERNEL_MODALIASES ]] || ! [[ -f " $DRACUT_KERNEL_MODALIASES " ]]; then
178
193
export DRACUT_KERNEL_MODALIASES=" ${DRACUT_TMPDIR} /modaliases"
179
- $DRACUT_INSTALL ${srcmods: +--kerneldir " $srcmods " } --modalias > " $DRACUT_KERNEL_MODALIASES "
194
+ $DRACUT_INSTALL ${dracutsysrootdir : +-r " $dracutsysrootdir " } ${ srcmods: +--kerneldir " $srcmods " } --modalias > " $DRACUT_KERNEL_MODALIASES "
180
195
fi
181
196
fi
182
197
183
198
[[ $DRACUT_RESOLVE_LAZY ]] || export DRACUT_RESOLVE_DEPS=1
184
199
inst_dir () {
185
200
[[ -e ${initdir} /" $1 " ]] && return 0 # already there
186
- $DRACUT_INSTALL ${initdir: +-D " $initdir " } -d " $@ "
187
- (( $? != 0 )) && derror FAILED: $DRACUT_INSTALL ${initdir: +-D " $initdir " } -d " $@ " || :
201
+ $DRACUT_INSTALL ${dracutsysrootdir : +-r " $dracutsysrootdir " } ${ initdir: +-D " $initdir " } -d " $@ "
202
+ (( $? != 0 )) && derror FAILED: $DRACUT_INSTALL ${dracutsysrootdir : +-r " $dracutsysrootdir " } ${ initdir: +-D " $initdir " } -d " $@ " || :
188
203
}
189
204
190
205
inst () {
@@ -194,8 +209,8 @@ inst() {
194
209
shift
195
210
fi
196
211
[[ -e ${initdir} /" ${2:- $1 } " ]] && return 0 # already there
197
- $DRACUT_INSTALL ${initdir: +-D " $initdir " } ${loginstall: +-L " $loginstall " } ${DRACUT_RESOLVE_DEPS: +-l} ${DRACUT_FIPS_MODE: +-f} ${_hostonly_install: +-H} " $@ "
198
- (( $? != 0 )) && derror FAILED: $DRACUT_INSTALL ${initdir: +-D " $initdir " } ${loginstall: +-L " $loginstall " } ${DRACUT_RESOLVE_DEPS: +-l} ${DRACUT_FIPS_MODE: +-f} ${_hostonly_install: +-H} " $@ " || :
212
+ $DRACUT_INSTALL ${dracutsysrootdir : +-r " $dracutsysrootdir " } ${ initdir: +-D " $initdir " } ${loginstall: +-L " $loginstall " } ${DRACUT_RESOLVE_DEPS: +-l} ${DRACUT_FIPS_MODE: +-f} ${_hostonly_install: +-H} " $@ "
213
+ (( $? != 0 )) && derror FAILED: $DRACUT_INSTALL ${dracutsysrootdir : +-r " $dracutsysrootdir " } ${ initdir: +-D " $initdir " } ${loginstall: +-L " $loginstall " } ${DRACUT_RESOLVE_DEPS: +-l} ${DRACUT_FIPS_MODE: +-f} ${_hostonly_install: +-H} " $@ " || :
199
214
}
200
215
201
216
inst_simple () {
@@ -206,8 +221,8 @@ inst_simple() {
206
221
fi
207
222
[[ -e ${initdir} /" ${2:- $1 } " ]] && return 0 # already there
208
223
[[ -e $1 ]] || return 1 # no source
209
- $DRACUT_INSTALL ${initdir: +-D " $initdir " } ${loginstall: +-L " $loginstall " } ${_hostonly_install: +-H} " $@ "
210
- (( $? != 0 )) && derror FAILED: $DRACUT_INSTALL ${initdir: +-D " $initdir " } ${loginstall: +-L " $loginstall " } ${_hostonly_install: +-H} " $@ " || :
224
+ $DRACUT_INSTALL ${dracutsysrootdir : +-r " $dracutsysrootdir " } ${ initdir: +-D " $initdir " } ${loginstall: +-L " $loginstall " } ${_hostonly_install: +-H} " $@ "
225
+ (( $? != 0 )) && derror FAILED: $DRACUT_INSTALL ${dracutsysrootdir : +-r " $dracutsysrootdir " } ${ initdir: +-D " $initdir " } ${loginstall: +-L " $loginstall " } ${_hostonly_install: +-H} " $@ " || :
211
226
}
212
227
213
228
inst_symlink () {
@@ -218,15 +233,15 @@ inst_symlink() {
218
233
fi
219
234
[[ -e ${initdir} /" ${2:- $1 } " ]] && return 0 # already there
220
235
[[ -L $1 ]] || return 1
221
- $DRACUT_INSTALL ${initdir: +-D " $initdir " } ${loginstall: +-L " $loginstall " } ${DRACUT_RESOLVE_DEPS: +-l} ${DRACUT_FIPS_MODE: +-f} ${_hostonly_install: +-H} " $@ "
222
- (( $? != 0 )) && derror FAILED: $DRACUT_INSTALL ${initdir: +-D " $initdir " } ${loginstall: +-L " $loginstall " } ${DRACUT_RESOLVE_DEPS: +-l} ${DRACUT_FIPS_MODE: +-f} ${_hostonly_install: +-H} " $@ " || :
236
+ $DRACUT_INSTALL ${dracutsysrootdir : +-r " $dracutsysrootdir " } ${ initdir: +-D " $initdir " } ${loginstall: +-L " $loginstall " } ${DRACUT_RESOLVE_DEPS: +-l} ${DRACUT_FIPS_MODE: +-f} ${_hostonly_install: +-H} " $@ "
237
+ (( $? != 0 )) && derror FAILED: $DRACUT_INSTALL ${dracutsysrootdir : +-r " $dracutsysrootdir " } ${ initdir: +-D " $initdir " } ${loginstall: +-L " $loginstall " } ${DRACUT_RESOLVE_DEPS: +-l} ${DRACUT_FIPS_MODE: +-f} ${_hostonly_install: +-H} " $@ " || :
223
238
}
224
239
225
240
inst_multiple () {
226
241
local _ret
227
- $DRACUT_INSTALL ${initdir: +-D " $initdir " } -a ${loginstall: +-L " $loginstall " } ${DRACUT_RESOLVE_DEPS: +-l} ${DRACUT_FIPS_MODE: +-f} " $@ "
242
+ $DRACUT_INSTALL ${dracutsysrootdir : +-r " $dracutsysrootdir " } ${ initdir: +-D " $initdir " } -a ${loginstall: +-L " $loginstall " } ${DRACUT_RESOLVE_DEPS: +-l} ${DRACUT_FIPS_MODE: +-f} " $@ "
228
243
_ret=$?
229
- (( $_ret != 0 )) && derror FAILED: $DRACUT_INSTALL ${initdir: +-D " $initdir " } -a ${loginstall: +-L " $loginstall " } ${DRACUT_RESOLVE_DEPS: +-l} ${DRACUT_FIPS_MODE: +-f} ${_hostonly_install: +-H} " $@ " || :
244
+ (( $_ret != 0 )) && derror FAILED: $DRACUT_INSTALL ${dracutsysrootdir : +-r " $dracutsysrootdir " } ${ initdir: +-D " $initdir " } -a ${loginstall: +-L " $loginstall " } ${DRACUT_RESOLVE_DEPS: +-l} ${DRACUT_FIPS_MODE: +-f} ${_hostonly_install: +-H} " $@ " || :
230
245
return $_ret
231
246
}
232
247
@@ -243,8 +258,9 @@ dracut_instmods() {
243
258
done
244
259
245
260
$DRACUT_INSTALL \
261
+ ${dracutsysrootdir: +-r " $dracutsysrootdir " } \
246
262
${initdir: +-D " $initdir " } ${loginstall: +-L " $loginstall " } ${hostonly: +-H} ${omit_drivers: +-N " $omit_drivers " } ${srcmods: +--kerneldir " $srcmods " } -m " $@ "
247
- (( $? != 0 )) && (( $_silent == 0 )) && derror FAILED: $DRACUT_INSTALL ${initdir: +-D " $initdir " } ${loginstall: +-L " $loginstall " } ${hostonly: +-H} ${omit_drivers: +-N " $omit_drivers " } ${srcmods: +--kerneldir " $srcmods " } -m " $@ " || :
263
+ (( $? != 0 )) && (( $_silent == 0 )) && derror FAILED: $DRACUT_INSTALL ${dracutsysrootdir : +-r " $dracutsysrootdir " } ${ initdir: +-D " $initdir " } ${loginstall: +-L " $loginstall " } ${hostonly: +-H} ${omit_drivers: +-N " $omit_drivers " } ${srcmods: +--kerneldir " $srcmods " } -m " $@ " || :
248
264
}
249
265
250
266
inst_library () {
@@ -255,24 +271,24 @@ inst_library() {
255
271
fi
256
272
[[ -e ${initdir} /" ${2:- $1 } " ]] && return 0 # already there
257
273
[[ -e $1 ]] || return 1 # no source
258
- $DRACUT_INSTALL ${initdir: +-D " $initdir " } ${loginstall: +-L " $loginstall " } ${DRACUT_RESOLVE_DEPS: +-l} ${DRACUT_FIPS_MODE: +-f} ${_hostonly_install: +-H} " $@ "
259
- (( $? != 0 )) && derror FAILED: $DRACUT_INSTALL ${initdir: +-D " $initdir " } ${loginstall: +-L " $loginstall " } ${DRACUT_RESOLVE_DEPS: +-l} ${DRACUT_FIPS_MODE: +-f} ${_hostonly_install: +-H} " $@ " || :
274
+ $DRACUT_INSTALL ${dracutsysrootdir : +-r " $dracutsysrootdir " } ${ initdir: +-D " $initdir " } ${loginstall: +-L " $loginstall " } ${DRACUT_RESOLVE_DEPS: +-l} ${DRACUT_FIPS_MODE: +-f} ${_hostonly_install: +-H} " $@ "
275
+ (( $? != 0 )) && derror FAILED: $DRACUT_INSTALL ${dracutsysrootdir : +-r " $dracutsysrootdir " } ${ initdir: +-D " $initdir " } ${loginstall: +-L " $loginstall " } ${DRACUT_RESOLVE_DEPS: +-l} ${DRACUT_FIPS_MODE: +-f} ${_hostonly_install: +-H} " $@ " || :
260
276
}
261
277
262
278
inst_binary () {
263
- $DRACUT_INSTALL ${initdir: +-D " $initdir " } ${loginstall: +-L " $loginstall " } ${DRACUT_RESOLVE_DEPS: +-l} ${DRACUT_FIPS_MODE: +-f} " $@ "
264
- (( $? != 0 )) && derror FAILED: $DRACUT_INSTALL ${initdir: +-D " $initdir " } ${loginstall: +-L " $loginstall " } ${DRACUT_RESOLVE_DEPS: +-l} ${DRACUT_FIPS_MODE: +-f} " $@ " || :
279
+ $DRACUT_INSTALL ${dracutsysrootdir : +-r " $dracutsysrootdir " } ${ initdir: +-D " $initdir " } ${loginstall: +-L " $loginstall " } ${DRACUT_RESOLVE_DEPS: +-l} ${DRACUT_FIPS_MODE: +-f} " $@ "
280
+ (( $? != 0 )) && derror FAILED: $DRACUT_INSTALL ${dracutsysrootdir : +-r " $dracutsysrootdir " } ${ initdir: +-D " $initdir " } ${loginstall: +-L " $loginstall " } ${DRACUT_RESOLVE_DEPS: +-l} ${DRACUT_FIPS_MODE: +-f} " $@ " || :
265
281
}
266
282
267
283
inst_script () {
268
- $DRACUT_INSTALL ${initdir: +-D " $initdir " } ${loginstall: +-L " $loginstall " } ${DRACUT_RESOLVE_DEPS: +-l} ${DRACUT_FIPS_MODE: +-f} " $@ "
269
- (( $? != 0 )) && derror FAILED: $DRACUT_INSTALL ${initdir: +-D " $initdir " } ${loginstall: +-L " $loginstall " } ${DRACUT_RESOLVE_DEPS: +-l} ${DRACUT_FIPS_MODE: +-f} " $@ " || :
284
+ $DRACUT_INSTALL ${dracutsysrootdir : +-r " $dracutsysrootdir " } ${ initdir: +-D " $initdir " } ${loginstall: +-L " $loginstall " } ${DRACUT_RESOLVE_DEPS: +-l} ${DRACUT_FIPS_MODE: +-f} " $@ "
285
+ (( $? != 0 )) && derror FAILED: $DRACUT_INSTALL ${dracutsysrootdir : +-r " $dracutsysrootdir " } ${ initdir: +-D " $initdir " } ${loginstall: +-L " $loginstall " } ${DRACUT_RESOLVE_DEPS: +-l} ${DRACUT_FIPS_MODE: +-f} " $@ " || :
270
286
}
271
287
272
288
inst_fsck_help () {
273
289
local _helper=" /run/dracut/fsck/fsck_help_$1 .txt"
274
- $DRACUT_INSTALL ${initdir: +-D " $initdir " } ${loginstall: +-L " $loginstall " } ${DRACUT_RESOLVE_DEPS: +-l} ${DRACUT_FIPS_MODE: +-f} " $2 " $_helper
275
- (( $? != 0 )) && derror $DRACUT_INSTALL ${initdir: +-D " $initdir " } ${loginstall: +-L " $loginstall " } ${DRACUT_RESOLVE_DEPS: +-l} ${DRACUT_FIPS_MODE: +-f} " $2 " $_helper || :
290
+ $DRACUT_INSTALL ${dracutsysrootdir : +-r " $dracutsysrootdir " } ${ initdir: +-D " $initdir " } ${loginstall: +-L " $loginstall " } ${DRACUT_RESOLVE_DEPS: +-l} ${DRACUT_FIPS_MODE: +-f} " $2 " $_helper
291
+ (( $? != 0 )) && derror $DRACUT_INSTALL ${dracutsysrootdir : +-r " $dracutsysrootdir " } ${ initdir: +-D " $initdir " } ${loginstall: +-L " $loginstall " } ${DRACUT_RESOLVE_DEPS: +-l} ${DRACUT_FIPS_MODE: +-f} " $2 " $_helper || :
276
292
}
277
293
278
294
# Use with form hostonly="$(optional_hostonly)" inst_xxxx <args>
@@ -369,12 +385,12 @@ inst_rule_group_owner() {
369
385
370
386
for i in $( sed -nr ' s/.*OWNER=?"([^ "]+).*/\1/p' " $1 " ) ; do
371
387
if ! grep -Eq " ^$i :" " $initdir /etc/passwd" 2> /dev/null; then
372
- grep -E " ^$i :" /etc/passwd 2> /dev/null >> " $initdir /etc/passwd"
388
+ grep -E " ^$i :" $dracutsysrootdir /etc/passwd 2> /dev/null >> " $initdir /etc/passwd"
373
389
fi
374
390
done
375
391
for i in $( sed -nr ' s/.*GROUP=?"([^ "]+).*/\1/p' " $1 " ) ; do
376
392
if ! grep -Eq " ^$i :" " $initdir /etc/group" 2> /dev/null; then
377
- grep -E " ^$i :" /etc/group 2> /dev/null >> " $initdir /etc/group"
393
+ grep -E " ^$i :" $dracutsysrootdir /etc/group 2> /dev/null >> " $initdir /etc/group"
378
394
fi
379
395
done
380
396
}
@@ -394,7 +410,7 @@ inst_rules() {
394
410
inst_dir " $_target "
395
411
for _rule in " $@ " ; do
396
412
if [ " ${_rule#/ } " = " $_rule " ]; then
397
- for r in ${udevdir} /rules.d ${hostonly: +/ etc/ udev/ rules.d} ; do
413
+ for r in $dracutsysrootdir $ {udevdir} /rules.d ${hostonly: +$dracutsysrootdir / etc/ udev/ rules.d} ; do
398
414
[[ -e $r /$_rule ]] || continue
399
415
_found=" $r /$_rule "
400
416
inst_rule_programs " $_found "
@@ -403,7 +419,7 @@ inst_rules() {
403
419
inst_simple " $_found "
404
420
done
405
421
fi
406
- for r in ' ' $dracutbasedir /rules.d/; do
422
+ for r in ' ' $dracutsysrootdir$ dracutbasedir /rules.d/; do
407
423
# skip rules without an absolute path
408
424
[[ " ${r} $_rule " != /* ]] && continue
409
425
[[ -f ${r} $_rule ]] || continue
@@ -525,15 +541,15 @@ inst_libdir_file() {
525
541
for _i in " $@ " ; do
526
542
for _f in " $_dir " /$_i ; do
527
543
[[ " $_f " =~ $_pattern ]] || continue
528
- [[ -e " $_f " ]] && _files+=" $_f "
544
+ [[ -e " $dracutsysrootdir$ _f " ]] && _files+=" $_f "
529
545
done
530
546
done
531
547
done
532
548
else
533
549
for _dir in $libdirs ; do
534
550
for _i in " $@ " ; do
535
551
for _f in " $_dir " /$_i ; do
536
- [[ -e " $_f " ]] && _files+=" $_f "
552
+ [[ -e " $dracutsysrootdir$ _f " ]] && _files+=" $_f "
537
553
done
538
554
done
539
555
done
@@ -947,6 +963,7 @@ instmods() {
947
963
948
964
$DRACUT_INSTALL \
949
965
${initdir: +-D " $initdir " } \
966
+ ${dracutsysrootdir: +-r " $dracutsysrootdir " } \
950
967
${loginstall: +-L " $loginstall " } \
951
968
${hostonly: +-H} \
952
969
${omit_drivers: +-N " $omit_drivers " } \
@@ -960,6 +977,7 @@ instmods() {
960
977
derror " FAILED: " \
961
978
$DRACUT_INSTALL \
962
979
${initdir: +-D " $initdir " } \
980
+ ${dracutsysrootdir: +-r " $dracutsysrootdir " } \
963
981
${loginstall: +-L " $loginstall " } \
964
982
${hostonly: +-H} \
965
983
${omit_drivers: +-N " $omit_drivers " } \
0 commit comments