Compare commits
158 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
9e8f172dc0 | ||
![]() |
89dcbbe92f | ||
![]() |
14310ca42f | ||
![]() |
dcbc74b01b | ||
![]() |
7843bc5277 | ||
![]() |
81babdedec | ||
![]() |
fe44aa1b14 | ||
![]() |
4ef5cdc120 | ||
![]() |
b59ae22885 | ||
![]() |
08961eef2a | ||
![]() |
96976e84e2 | ||
![]() |
15ff303dde | ||
![]() |
3b89c39889 | ||
![]() |
4e10601254 | ||
![]() |
53cece208a | ||
![]() |
68fefe6f94 | ||
![]() |
94c75a2a82 | ||
![]() |
34011ee53e | ||
![]() |
8eb08e5528 | ||
![]() |
d8f0e52ac7 | ||
![]() |
c60f4fc027 | ||
![]() |
d9bf0c38be | ||
![]() |
a34b1baa6c | ||
![]() |
e35e43c1c2 | ||
![]() |
0f0b8c8f90 | ||
![]() |
bf69beb6f3 | ||
![]() |
50192de38d | ||
![]() |
e671c3a06a | ||
![]() |
e3b2b02c7f | ||
![]() |
d3f542cc9d | ||
![]() |
95bbcaa855 | ||
![]() |
3464297288 | ||
![]() |
9b2497dffb | ||
![]() |
1851348709 | ||
![]() |
17cd55169c | ||
![]() |
7ee74e539d | ||
![]() |
829ed8ef5c | ||
![]() |
b6d52b504f | ||
![]() |
927428e6a5 | ||
![]() |
d86dfcd148 | ||
![]() |
31116110ff | ||
![]() |
4971a2c4eb | ||
![]() |
7c35556da4 | ||
![]() |
a1435c3d53 | ||
![]() |
9c54932f59 | ||
![]() |
81b59fbbd6 | ||
![]() |
c787ad30ab | ||
![]() |
e44c26f0fc | ||
![]() |
90054e4f1f | ||
![]() |
d8386b5d8f | ||
![]() |
5541b0c46f | ||
![]() |
b63e0c5040 | ||
![]() |
3b9b20d237 | ||
![]() |
44c9d019d8 | ||
![]() |
2e5265c80e | ||
![]() |
3cb0f01a1e | ||
![]() |
225e4b94cb | ||
![]() |
3e676eb12f | ||
![]() |
2257b800ac | ||
![]() |
290df2e1de | ||
![]() |
4be697e5c1 | ||
![]() |
08bdadbf31 | ||
![]() |
734739187b | ||
![]() |
1c4a51c39c | ||
![]() |
0aa2e5f728 | ||
![]() |
5e615f4eb4 | ||
![]() |
9e82732dd4 | ||
![]() |
0454dc247a | ||
![]() |
24f3463bff | ||
![]() |
095e1f37c4 | ||
![]() |
f4334e9bdf | ||
![]() |
838f22259a | ||
![]() |
b3480d31b0 | ||
![]() |
8dd7bb48fc | ||
![]() |
44d1688164 | ||
![]() |
a7d8fc280c | ||
![]() |
e9a84e0a21 | ||
![]() |
d09218823c | ||
![]() |
ae9bc0d72f | ||
![]() |
09ba1b289f | ||
![]() |
9f3c31cd8d | ||
![]() |
eb18a1fe29 | ||
![]() |
789668deb3 | ||
![]() |
e791d753be | ||
![]() |
e0e6d96d69 | ||
![]() |
ee18dd2b88 | ||
![]() |
09132c732a | ||
![]() |
f19063ac71 | ||
![]() |
a17440713a | ||
![]() |
bd03d374b7 | ||
![]() |
06e12e4ba8 | ||
![]() |
f059ce7682 | ||
![]() |
286685cb72 | ||
![]() |
7c62555bcf | ||
![]() |
2699d8ff7e | ||
![]() |
5a8f1aef55 | ||
![]() |
9c034dc326 | ||
![]() |
f8cad00948 | ||
![]() |
c128b969bb | ||
![]() |
f59664a01f | ||
![]() |
67f43d2124 | ||
![]() |
0ae5848245 | ||
![]() |
9f02b291ac | ||
![]() |
2b77ba0b75 | ||
![]() |
6f90be2971 | ||
![]() |
110063c585 | ||
![]() |
51d0a54555 | ||
![]() |
c31a80c9ed | ||
![]() |
79afb279c2 | ||
![]() |
3c8d3a6565 | ||
![]() |
01f9d0d9bf | ||
![]() |
3111988680 | ||
![]() |
1ebbe2eb7b | ||
![]() |
65d16d1914 | ||
![]() |
da5a44cfb7 | ||
![]() |
75b8b144a1 | ||
![]() |
1363167d65 | ||
![]() |
d15c15c8f5 | ||
![]() |
9288d21b9f | ||
![]() |
cafe6675c2 | ||
![]() |
fba4d28433 | ||
![]() |
b7774da97c | ||
![]() |
3c1a083e5c | ||
![]() |
0f294d90b2 | ||
![]() |
a2dbecfcd6 | ||
![]() |
604c09b1da | ||
![]() |
f9c8b3112a | ||
![]() |
bb75d16521 | ||
![]() |
ca8f1c1ba3 | ||
![]() |
94cc856cb8 | ||
![]() |
827a5b1a80 | ||
![]() |
393da0c370 | ||
![]() |
82fe4ea0a5 | ||
![]() |
ffbd37d784 | ||
![]() |
ab94a204e0 | ||
![]() |
6058b06b86 | ||
![]() |
26aea0299a | ||
![]() |
0a80cda0ea | ||
![]() |
6f0500ed4a | ||
![]() |
746135dd1e | ||
![]() |
a762dedb60 | ||
![]() |
a0c915b1e4 | ||
![]() |
99df3d22be | ||
![]() |
be98291caf | ||
![]() |
33782aebbf | ||
![]() |
55a12055c5 | ||
![]() |
25111d717e | ||
![]() |
819ea38651 | ||
![]() |
143420bc05 | ||
![]() |
986b12d391 | ||
![]() |
f81c864eed | ||
![]() |
aac3a0652a | ||
![]() |
a0eadcdc64 | ||
![]() |
e331e06a39 | ||
![]() |
7047294617 | ||
![]() |
1caaeaae1e | ||
![]() |
d63a4e285e | ||
![]() |
9a9c67d61b |
48
.travis.yml
Normal file
48
.travis.yml
Normal file
@@ -0,0 +1,48 @@
|
||||
language: generic
|
||||
sudo: required
|
||||
services:
|
||||
- docker
|
||||
env:
|
||||
matrix:
|
||||
- IMAGE=latest
|
||||
- IMAGE=latest TESTS=01
|
||||
- IMAGE=latest TESTS=12
|
||||
- IMAGE=latest TESTS=20
|
||||
- IMAGE=latest TESTS=50
|
||||
- IMAGE=latest TESTS=30
|
||||
- IMAGE=latest TESTS=31
|
||||
- IMAGE=latest TESTS=60
|
||||
- IMAGE=latest TESTS=70
|
||||
- IMAGE=latest TESTS=99
|
||||
- IMAGE=latest TESTS=02
|
||||
- IMAGE=latest TESTS=03
|
||||
- IMAGE=latest TESTS=04
|
||||
- IMAGE=latest TESTS=10
|
||||
- IMAGE=latest TESTS=11
|
||||
- IMAGE=29 TESTS=13
|
||||
- IMAGE=29 TESTS=14
|
||||
- IMAGE=latest TESTS=15
|
||||
- IMAGE=latest TESTS=17
|
||||
|
||||
before_script:
|
||||
- docker pull fedora:$IMAGE
|
||||
- |
|
||||
sudo modprobe kvm-intel nested=1 || :
|
||||
sudo modprobe kvm-amd nested=1 || :
|
||||
dmesg | tail || :
|
||||
- git fetch --tags --unshallow
|
||||
- |
|
||||
git describe --abbrev=0 --tags || :
|
||||
git describe --tags || :
|
||||
|
||||
script:
|
||||
- docker run --privileged -it -v $(pwd)/:/dracut fedora:$IMAGE /dracut/fedora-test.sh $IMAGE-$$ "$TESTS"
|
||||
|
||||
notifications:
|
||||
webhooks:
|
||||
urls:
|
||||
- https://webhooks.gitter.im/e/effa917ca3e0ed5fd00e
|
||||
on_success: change # options: [always|never|change] default: always
|
||||
on_failure: always # options: [always|never|change] default: always
|
||||
on_start: never # options: [always|never|change] default: always
|
||||
|
@@ -25,7 +25,7 @@ case "$COMMAND" in
|
||||
if [[ -f ${INITRD_IMAGE_PREGENERATED} ]]; then
|
||||
# we found an initrd at the same place as the kernel
|
||||
# use this and don't generate a new one
|
||||
cp --reflink=auto "$INITRD_IMAGE_PREGENERATED" "$BOOT_DIR_ABS/$INITRD" \
|
||||
cp "$INITRD_IMAGE_PREGENERATED" "$BOOT_DIR_ABS/$INITRD" \
|
||||
&& chown root:root "$BOOT_DIR_ABS/$INITRD" \
|
||||
&& chmod 0600 "$BOOT_DIR_ABS/$INITRD" \
|
||||
&& exit 0
|
||||
@@ -49,7 +49,7 @@ case "$COMMAND" in
|
||||
break
|
||||
fi
|
||||
done
|
||||
dracut ${noimageifnotneeded:+--noimageifnotneeded} "$BOOT_DIR_ABS/$INITRD" "$KERNEL_VERSION"
|
||||
dracut -f ${noimageifnotneeded:+--noimageifnotneeded} "$BOOT_DIR_ABS/$INITRD" "$KERNEL_VERSION"
|
||||
ret=$?
|
||||
;;
|
||||
remove)
|
||||
|
68
51-dracut-rescue-postinst.sh
Executable file
68
51-dracut-rescue-postinst.sh
Executable file
@@ -0,0 +1,68 @@
|
||||
#!/bin/bash
|
||||
|
||||
export LANG=C
|
||||
|
||||
KERNEL_VERSION="$1"
|
||||
KERNEL_IMAGE="$2"
|
||||
|
||||
[[ -f /etc/os-release ]] && . /etc/os-release
|
||||
|
||||
if [[ ! -f /etc/machine-id ]] || [[ ! -s /etc/machine-id ]]; then
|
||||
systemd-machine-id-setup
|
||||
fi
|
||||
|
||||
[[ -f /etc/machine-id ]] && read MACHINE_ID < /etc/machine-id
|
||||
|
||||
[[ $MACHINE_ID ]] || exit 1
|
||||
[[ -f $KERNEL_IMAGE ]] || exit 1
|
||||
|
||||
INITRDFILE="/boot/initramfs-0-rescue-${MACHINE_ID}.img"
|
||||
NEW_KERNEL_IMAGE="${KERNEL_IMAGE%/*}/vmlinuz-0-rescue-${MACHINE_ID}"
|
||||
|
||||
[[ -f $INITRDFILE ]] && [[ -f $NEW_KERNEL_IMAGE ]] && exit 0
|
||||
|
||||
dropindirs_sort()
|
||||
{
|
||||
suffix=$1; shift
|
||||
args=("$@")
|
||||
files=$(
|
||||
while (( $# > 0 )); do
|
||||
for i in ${1}/*${suffix}; do
|
||||
[[ -f $i ]] && echo ${i##*/}
|
||||
done
|
||||
shift
|
||||
done | sort -Vu
|
||||
)
|
||||
|
||||
for f in $files; do
|
||||
for d in "${args[@]}"; do
|
||||
if [[ -f "$d/$f" ]]; then
|
||||
echo "$d/$f"
|
||||
continue 2
|
||||
fi
|
||||
done
|
||||
done
|
||||
}
|
||||
|
||||
# source our config dir
|
||||
for f in $(dropindirs_sort ".conf" "/etc/dracut.conf.d" "/usr/lib/dracut/dracut.conf.d"); do
|
||||
[[ -e $f ]] && . "$f"
|
||||
done
|
||||
|
||||
[[ $dracut_rescue_image != "yes" ]] && exit 0
|
||||
|
||||
if [[ ! -f $INITRDFILE ]]; then
|
||||
dracut --no-hostonly -a "rescue" "$INITRDFILE" "$KERNEL_VERSION"
|
||||
((ret+=$?))
|
||||
fi
|
||||
|
||||
if [[ ! -f $NEW_KERNEL_IMAGE ]]; then
|
||||
cp "$KERNEL_IMAGE" "$NEW_KERNEL_IMAGE"
|
||||
((ret+=$?))
|
||||
fi
|
||||
|
||||
new-kernel-pkg --install "$KERNEL_VERSION" --kernel-image "$NEW_KERNEL_IMAGE" --initrdfile "$INITRDFILE" --banner "$NAME $VERSION_ID Rescue $MACHINE_ID"
|
||||
|
||||
((ret+=$?))
|
||||
|
||||
exit $ret
|
@@ -93,12 +93,12 @@ case "$COMMAND" in
|
||||
|
||||
[[ -d "$BOOT_DIR_ABS" ]] || mkdir -p "$BOOT_DIR_ABS"
|
||||
|
||||
if ! cp --reflink=auto "$KERNEL_IMAGE" "$BOOT_DIR_ABS/$KERNEL"; then
|
||||
if ! cp "$KERNEL_IMAGE" "$BOOT_DIR_ABS/$KERNEL"; then
|
||||
echo "Can't copy '$KERNEL_IMAGE to '$BOOT_DIR_ABS/$KERNEL'!" >&2
|
||||
fi
|
||||
|
||||
if [[ ! -f "$BOOT_DIR_ABS/$INITRD" ]]; then
|
||||
dracut --no-hostonly -a "rescue" "$BOOT_DIR_ABS/$INITRD" "$KERNEL_VERSION"
|
||||
dracut -f --no-hostonly -a "rescue" "$BOOT_DIR_ABS/$INITRD" "$KERNEL_VERSION"
|
||||
((ret+=$?))
|
||||
fi
|
||||
|
||||
|
16
AUTHORS
16
AUTHORS
@@ -14,20 +14,22 @@ Daniel Molkentin <dmolkentin@suse.com>
|
||||
Amerigo Wang <amwang@redhat.com>
|
||||
Thomas Renninger <trenn@suse.com>
|
||||
Lukas Nykryn <lnykryn@redhat.com>
|
||||
WANG Chao <chaowang@redhat.com>
|
||||
Alexander Tsoy <alexander@tsoy.me>
|
||||
Andrey Borzenkov <arvidjaar@gmail.com>
|
||||
Frederick Grose <fgrose@sugarlabs.org>
|
||||
WANG Chao <chaowang@redhat.com>
|
||||
Yu Watanabe <watanabe.yu+github@gmail.com>
|
||||
Andrey Borzenkov <arvidjaar@gmail.com>
|
||||
Hans de Goede <hdegoede@redhat.com>
|
||||
Peter Jones <pjones@redhat.com>
|
||||
Andreas Thienemann <andreas@bawue.net>
|
||||
Frederick Grose <fgrose@sugarlabs.org>
|
||||
Peter Robinson <pbrobinson@fedoraproject.org>
|
||||
Fabian Vogt <fvogt@suse.com>
|
||||
Kairui Song <kasong@redhat.com>
|
||||
John Reiser <jreiser@bitwagon.com>
|
||||
Luca Berra <bluca@vodka.it>
|
||||
Xunlei Pang <xlpang@redhat.com>
|
||||
Daniel Drake <drake@endlessm.com>
|
||||
Lubomir Rintel <lkundrak@v3.sk>
|
||||
Angelo "pallotron" Failla <pallotron@fb.com>
|
||||
Brian C. Lane <bcl@redhat.com>
|
||||
Ville Skyttä <ville.skytta@iki.fi>
|
||||
@@ -38,6 +40,7 @@ Brendan Germain <brendan.germain@nasdaqomx.com>
|
||||
Colin Walters <walters@verbum.org>
|
||||
Leho Kraav <leho@kraav.com>
|
||||
Moritz Maxeiner <moritz@ucworks.org>
|
||||
Nicolas Chauvet <kwizart@gmail.com>
|
||||
Ondrej Mosnacek <omosnace@redhat.com>
|
||||
Fabian Deutsch <fabiand@fedoraproject.org>
|
||||
Javier Martinez Canillas <javierm@redhat.com>
|
||||
@@ -45,7 +48,6 @@ Kamil Rytarowski <n54@gmx.com>
|
||||
Lidong Zhong <lidong.zhong@suse.com>
|
||||
Marc Grimme <grimme@atix.de>
|
||||
NeilBrown <neilb@suse.de>
|
||||
Nicolas Chauvet <kwizart@gmail.com>
|
||||
Peter Rajnoha <prajnoha@redhat.com>
|
||||
Radek Vykydal <rvykydal@redhat.com>
|
||||
Thorsten Behrens <tbehrens@suse.com>
|
||||
@@ -69,7 +71,6 @@ Dennis Gilmore <dennis@ausil.us>
|
||||
Jan Synacek <jsynacek@redhat.com>
|
||||
Jon Ander Hernandez <jonan.h@gmail.com>
|
||||
Juan RP <xtraeme@gmail.com>
|
||||
Kairui Song <kasong@redhat.com>
|
||||
Lance Albertson <lance@osuosl.org>
|
||||
Marcos Mello <marcosfrm@gmail.com>
|
||||
Marian Ganisin <mganisin@redhat.com>
|
||||
@@ -105,7 +106,6 @@ Julian Wolf <juwolf@suse.com>
|
||||
Koen Kooi <koen@dominion.thruhere.net>
|
||||
Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
|
||||
Kyle McMartin <kmcmarti@redhat.com>
|
||||
Lubomir Rintel <lkundrak@v3.sk>
|
||||
Lukas Wunner <lukas@wunner.de>
|
||||
Mike Snitzer <snitzer@redhat.com>
|
||||
Minfei Huang <mhuang@redhat.com>
|
||||
@@ -117,6 +117,7 @@ Robert Scheck <robert@fedoraproject.org>
|
||||
Stefan Berger <stefanb@us.ibm.com>
|
||||
Thomas Lange <lange@informatik.uni-koeln.de>
|
||||
Till Maas <opensource@till.name>
|
||||
Tony Asleson <tasleson@redhat.com>
|
||||
Vivek Goyal <vgoyal@redhat.com>
|
||||
Vladislav Bogdanov <bubble@hoster-ok.com>
|
||||
Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
|
||||
@@ -143,6 +144,7 @@ Derek Higgins <derekh@redhat.com>
|
||||
Duane Griffin <duaneg@dghda.com>
|
||||
Elan Ruusamäe <glen@delfi.ee>
|
||||
Enno Boland <g@s01.de>
|
||||
Eugene Syromiatnikov <esyr@redhat.com>
|
||||
Florian Albrechtskirchinger <falbrechtskirchinger@gmail.com>
|
||||
Florian Gamböck <mail@floga.de>
|
||||
François Cami <fcami@fedoraproject.org>
|
||||
@@ -205,11 +207,11 @@ Sullivan (CTR), Austin <austin.sullivan.ctr@progeny.net>
|
||||
Thilo Bangert <thilo.bangert@gmx.net>
|
||||
Thomas Blume <thomas.blume@suse.com>
|
||||
Tobias Geerinckx <tobias.geerinckx@gmail.com>
|
||||
Tobias Klauser <tklauser@distanz.ch>
|
||||
Tom Gundersen <teg@jklm.no>
|
||||
Tomasz Paweł Gajc <tpgxyz@gmail.com>
|
||||
Tomasz Torcz <tomek@pipebreaker.pl>
|
||||
Tong Li <tonli@redhat.com>
|
||||
Tony Asleson <tasleson@redhat.com>
|
||||
Vadim Kuznetsov <vadimk@gentoo.org>
|
||||
Vaughan Cao <vaughan.cao@oracle.com>
|
||||
Vratislav Podzimek <vpodzime@redhat.com>
|
||||
|
20
Makefile
20
Makefile
@@ -1,7 +1,7 @@
|
||||
-include dracut-version.sh
|
||||
|
||||
VERSION ?= $(shell [ -d .git ] && git describe --abbrev=0 --tags 2>/dev/null || echo $(DRACUT_VERSION))
|
||||
GITVERSION ?= $(shell [ -d .git ] && { v=$$(git describe --tags 2>/dev/null); [ -n "$$v" ] && [ $${v\#*-} != $$v ] && echo -$${v\#*-}; } )
|
||||
VERSION ?= $(shell [ -d .git ] && git describe --abbrev=0 --tags --always 2>/dev/null || echo $(DRACUT_VERSION))
|
||||
GITVERSION ?= $(shell [ -d .git ] && { v=$$(git describe --tags --always 2>/dev/null); [ -n "$$v" ] && [ $${v\#*-} != $$v ] && echo -$${v\#*-}; } )
|
||||
|
||||
-include Makefile.inc
|
||||
|
||||
@@ -40,7 +40,7 @@ man8pages = dracut.8 \
|
||||
|
||||
manpages = $(man1pages) $(man5pages) $(man7pages) $(man8pages)
|
||||
|
||||
.PHONY: install clean archive rpm testimage test all check AUTHORS doc dracut-version.sh
|
||||
.PHONY: install clean archive rpm srpm testimage test all check AUTHORS doc dracut-version.sh
|
||||
|
||||
all: dracut-version.sh dracut.pc dracut-install skipcpio/skipcpio
|
||||
|
||||
@@ -63,6 +63,9 @@ install/strv.o: install/strv.c install/strv.h install/util.h install/macro.h ins
|
||||
install/dracut-install: $(DRACUT_INSTALL_OBJECTS)
|
||||
$(CC) $(LDFLAGS) -o $@ $(DRACUT_INSTALL_OBJECTS) $(LDLIBS) $(KMOD_LIBS)
|
||||
|
||||
logtee: logtee.c
|
||||
$(CC) $(LDFLAGS) -o $@ $<
|
||||
|
||||
dracut-install: install/dracut-install
|
||||
ln -fs $< $@
|
||||
|
||||
@@ -213,6 +216,17 @@ rpm: dracut-$(VERSION).tar.xz syncheck
|
||||
--define "_rpmdir $$PWD" -ba dracut.spec; ) && \
|
||||
( mv "$$rpmbuild"/{,$$(arch)/}*.rpm $(DESTDIR).; rm -fr -- "$$rpmbuild"; ls $(DESTDIR)*.rpm )
|
||||
|
||||
srpm: dracut-$(VERSION).tar.xz syncheck
|
||||
rpmbuild=$$(mktemp -d -t rpmbuild-dracut.XXXXXX); src=$$(pwd); \
|
||||
cp dracut-$(VERSION).tar.xz "$$rpmbuild"; \
|
||||
LC_MESSAGES=C $$src/git2spec.pl $(VERSION) "$$rpmbuild" < dracut.spec > $$rpmbuild/dracut.spec; \
|
||||
(cd "$$rpmbuild"; \
|
||||
[ -f $$src/lgpl-2.1.txt ] && cp $$src/lgpl-2.1.txt . || wget https://www.gnu.org/licenses/lgpl-2.1.txt; \
|
||||
rpmbuild --define "_topdir $$PWD" --define "_sourcedir $$PWD" \
|
||||
--define "_specdir $$PWD" --define "_srcrpmdir $$PWD" \
|
||||
--define "_rpmdir $$PWD" -bs dracut.spec; ) && \
|
||||
( mv "$$rpmbuild"/*.src.rpm $(DESTDIR).; rm -fr -- "$$rpmbuild"; ls $(DESTDIR)*.rpm )
|
||||
|
||||
syncheck:
|
||||
@ret=0;for i in dracut-initramfs-restore.sh modules.d/*/*.sh; do \
|
||||
[ "$${i##*/}" = "module-setup.sh" ] && continue; \
|
||||
|
60
NEWS
60
NEWS
@@ -1,4 +1,62 @@
|
||||
dracut-047
|
||||
dracut-049
|
||||
==========
|
||||
lsinitrd:
|
||||
- record loaded kernel modules when hostonly mode is enabled
|
||||
lsinitrd $image -f */lib/dracut/loaded-kernel-modules.txt
|
||||
- allow to only unpack certain files
|
||||
|
||||
kernel-modules:
|
||||
- add gpio and pinctrl drivers for arm*/aarch64
|
||||
- add nfit
|
||||
|
||||
kernel-network-modules:
|
||||
- add vlan kernel modules
|
||||
|
||||
ifcfg/write-ifcfg.sh:
|
||||
- aggregate resolv.conf
|
||||
|
||||
livenet:
|
||||
- Enable OverlayFS overlay in sysroot.mount generator.
|
||||
|
||||
dmsquash-live:
|
||||
- Support a flattened squashfs.img
|
||||
|
||||
dracut-systemd:
|
||||
- Start systemd-vconsole-setup before dracut-cmdline-ask
|
||||
|
||||
iscsi:
|
||||
- do not install all of /etc/iscsi unless hostonly
|
||||
- start iscsid even w/o systemd
|
||||
|
||||
multipath:
|
||||
- fixed shutdown
|
||||
|
||||
network:
|
||||
- configure NetworkManager to use dhclient
|
||||
|
||||
mdraid:
|
||||
- fixed uuid handling ":" versus "-"
|
||||
|
||||
stratis:
|
||||
- Add additional binaries
|
||||
|
||||
new modules:
|
||||
- 00warpclock
|
||||
- 99squash
|
||||
Adds support for building a squashed initramfs
|
||||
- 35network-legacy
|
||||
the old 40network
|
||||
- 35network-manager
|
||||
alternative to 35network-legacy
|
||||
- 90kernel-modules-extra
|
||||
adds out-of-tree kernel modules
|
||||
|
||||
testsuite:
|
||||
- now runs on travis
|
||||
- support new qemu device options
|
||||
- even runs without kvm now
|
||||
|
||||
dracut-048
|
||||
==========
|
||||
|
||||
dracut.sh:
|
||||
|
@@ -2,6 +2,10 @@
|
||||
|
||||
dracut is an initramfs infrastructure.
|
||||
|
||||
## Travis
|
||||
|
||||
[](https://travis-ci.org/dracutdevs/dracut)
|
||||
|
||||
## CentOS CI
|
||||
|
||||
[](https://ci.centos.org/job/dracut-push-master/)
|
||||
@@ -23,4 +27,5 @@ dracut is an initramfs infrastructure.
|
||||
- Test 31: [](https://ci.centos.org/job/dracut-matrix-master/TESTS=31,label=dracut-ci-slave01/)
|
||||
- Test 40: [](https://ci.centos.org/job/dracut-matrix-master/TESTS=40,label=dracut-ci-slave01/)
|
||||
- Test 50: [](https://ci.centos.org/job/dracut-matrix-master/TESTS=50,label=dracut-ci-slave01/)
|
||||
- Test 60: [](https://ci.centos.org/job/dracut-matrix-master/TESTS=60,label=dracut-ci-slave01/)
|
||||
- Test 70: [](https://ci.centos.org/job/dracut-matrix-master/TESTS=70,label=dracut-ci-slave01/)
|
||||
|
@@ -676,6 +676,17 @@ get_ucode_file ()
|
||||
fi
|
||||
}
|
||||
|
||||
# Get currently loaded modules
|
||||
# sorted, and delimited by newline
|
||||
get_loaded_kernel_modules ()
|
||||
{
|
||||
local modules=( )
|
||||
while read _module _size _used _used_by; do
|
||||
modules+=( "$_module" )
|
||||
done <<< "$(lsmod | sed -n '1!p')"
|
||||
printf '%s\n' "${modules[@]}" | sort
|
||||
}
|
||||
|
||||
# Not every device in /dev/mapper should be examined.
|
||||
# If it is an LVM device, touch only devices which have /dev/VG/LV symlink.
|
||||
lvm_internal_dev() {
|
||||
|
@@ -150,6 +150,14 @@ dracut_module_included() {
|
||||
[[ " $mods_to_load $modules_loaded " == *\ $*\ * ]]
|
||||
}
|
||||
|
||||
dracut_no_switch_root() {
|
||||
>"$initdir/lib/dracut/no-switch-root"
|
||||
}
|
||||
|
||||
dracut_module_path() {
|
||||
echo ${dracutbasedir}/modules.d/??${1} | { read a b; echo "$a"; }
|
||||
}
|
||||
|
||||
if ! [[ $DRACUT_INSTALL ]]; then
|
||||
DRACUT_INSTALL=$(find_binary dracut-install)
|
||||
fi
|
||||
|
@@ -601,7 +601,7 @@ NFS
|
||||
mount nfs share from <server-ip>:/<root-dir>, if no server-ip is given, use
|
||||
dhcp next_server. If server-ip is an IPv6 address it has to be put in
|
||||
brackets, e.g. [2001:DB8::1]. NFS options can be appended with the prefix
|
||||
":" or "," and are seperated by ",".
|
||||
":" or "," and are separated by ",".
|
||||
|
||||
**root=**nfs:\[_<server-ip>_:]__<root-dir>__[:__<nfs-options>__], **root=**nfs4:\[_<server-ip>_:]__<root-dir>__[:__<nfs-options>__], **root=**__{dhcp|dhcp6}__::
|
||||
root=dhcp alone directs initrd to look at the DHCP root-path where NFS
|
||||
@@ -838,23 +838,24 @@ Booting live images
|
||||
Dracut offers multiple options for live booted images:
|
||||
|
||||
=====================
|
||||
SquashFS with read-only filesystem image::: The system will boot with a read
|
||||
only filesystem from the SquashFS and apply a writable device-mapper snapshot
|
||||
over the read only filesystem. Using this method ensures a relatively fast
|
||||
boot and lower RAM usage. Users **must be careful** to avoid writing too many
|
||||
blocks to the snapshot volume. Once the blocks of the snapshot overlay are
|
||||
exhausted, the root filesystem becomes read only and may cause application
|
||||
failures. The overlay file is marked 'Overflow', and a difficult recovery is
|
||||
required to repair and enlarge the overlay offline. Non-persistent overlays
|
||||
are sparse files in RAM that only consume content space as required blocks are
|
||||
allocated. They default to an apparent size of 32 GiB in RAM. The size can be
|
||||
adjusted with the **rd.live.overlay.size=** kernel command line option.
|
||||
SquashFS with read-only filesystem image::: The system will boot with a
|
||||
read-only filesystem from the SquashFS and apply a writable Device-mapper
|
||||
snapshot or an OverlayFS overlay mount for the read-only base filesystem. This
|
||||
method ensures a relatively fast boot and lower RAM usage. Users **must be
|
||||
careful** to avoid writing too many blocks to a snapshot volume. Once the
|
||||
blocks of the snapshot overlay are exhausted, the root filesystem becomes
|
||||
read-only and may cause application failures. The snapshot overlay file is
|
||||
marked 'Overflow', and a difficult recovery is required to repair and enlarge
|
||||
the overlay offline. Non-persistent overlays are sparse files in RAM that only
|
||||
consume content space as required blocks are allocated. They default to an
|
||||
apparent size of 32 GiB in RAM. The size can be adjusted with the
|
||||
**rd.live.overlay.size=** kernel command line option.
|
||||
+
|
||||
The filesystem structure is expected to be:
|
||||
The filesystem structure is traditionally expected to be:
|
||||
+
|
||||
[listing]
|
||||
--
|
||||
squashfs.img | Squashfs from LiveCD .iso downloaded via network
|
||||
squashfs.img | SquashFS from LiveCD .iso
|
||||
!(mount)
|
||||
/LiveOS
|
||||
|- rootfs.img | Filesystem image to mount read-only
|
||||
@@ -865,21 +866,35 @@ squashfs.img | Squashfs from LiveCD .iso downloaded via network
|
||||
... |
|
||||
--
|
||||
+
|
||||
Dracut uses this method of live booting by default. No additional command line
|
||||
options are required other than **root=live:<URL>** to specify the location
|
||||
of your squashed filesystem.
|
||||
For OverlayFS mount overlays, the filesystem structure may also be a direct
|
||||
compression of the root filesystem:
|
||||
+
|
||||
[listing]
|
||||
--
|
||||
squashfs.img | SquashFS from LiveCD .iso
|
||||
!(mount)
|
||||
/bin | Live filesystem
|
||||
/boot |
|
||||
/dev |
|
||||
... |
|
||||
--
|
||||
+
|
||||
Dracut uses one of the overlay methods of live booting by default. No
|
||||
additional command line options are required other than **root=live:<URL>** to
|
||||
specify the location of your squashed filesystem.
|
||||
+
|
||||
- The compressed SquashFS image can be copied during boot to RAM at
|
||||
`/run/initramfs/squashed.img` by using the **rd.live.ram=1** option.
|
||||
- A device with a persistent overlay can be booted read only by using the
|
||||
- A device with a persistent overlay can be booted read-only by using the
|
||||
**rd.live.overlay.readonly** option on the kernel command line. This will
|
||||
cause a temporary, writable overlay to be stacked over a read-only snapshot
|
||||
of the root filesystem.
|
||||
either cause a temporary, writable overlay to be stacked over a read-only
|
||||
snapshot of the root filesystem or the OverlayFS mount will use an additional
|
||||
lower layer with the root filesystem.
|
||||
+
|
||||
Uncompressed live filesystem image:::
|
||||
When the live system was installed with the '--skipcompress' option of the
|
||||
__livecd-iso-to-disk__ installation script for Live USB devices, the root
|
||||
filesystem image, `rootfs.img`, is expanded on installation and no SquashFS
|
||||
filesystem image, __rootfs.img__, is expanded on installation and no SquashFS
|
||||
is involved during boot.
|
||||
+
|
||||
- If **rd.live.ram=1** is used in this situation, the full, uncompressed
|
||||
@@ -887,12 +902,12 @@ root filesystem is copied during boot to `/run/initramfs/rootfs.img` in the
|
||||
`/run` tmpfs.
|
||||
+
|
||||
- If **rd.live.overlay=none** is provided as a kernel command line option,
|
||||
a writable, linear device-mapper target is created on boot with no overlay.
|
||||
a writable, linear Device-mapper target is created on boot with no overlay.
|
||||
|
||||
writable filesystem image:::
|
||||
Writable filesystem image:::
|
||||
The system will retrieve a compressed filesystem image, extract it to
|
||||
`/run/initramfs/fsimg/rootfs.img`, connect it to a loop device, create a
|
||||
writable, linear device-mapper target at `/dev/mapper/live-rw`, and mount that
|
||||
writable, linear Device-mapper target at `/dev/mapper/live-rw`, and mount that
|
||||
as a writable volume at `/`. More RAM is required during boot but the live
|
||||
filesystem is easier to manage if it becomes full. Users can make a filesystem
|
||||
image of any size and that size will be maintained when the system boots. There
|
||||
@@ -902,7 +917,7 @@ The filesystem structure is expected to be:
|
||||
+
|
||||
[listing]
|
||||
--
|
||||
rootfs.tgz | Compressed tarball containing fileystem image
|
||||
rootfs.tgz | Compressed tarball containing filesystem image
|
||||
!(unpack)
|
||||
/rootfs.img | Filesystem image at /run/initramfs/fsimg/
|
||||
!(mount)
|
||||
@@ -930,10 +945,11 @@ NOTE: There must be enough free RAM available to hold the complete image.
|
||||
This method is very suitable for diskless boots.
|
||||
|
||||
**root=**live:__<url>__::
|
||||
Boots a live image retrieved from __<url>__. Valid handlers: __http, https, ftp, torrent, tftp__.
|
||||
Boots a live image retrieved from __<url>__. Requires the dracut 'livenet'
|
||||
module. Valid handlers: __http, https, ftp, torrent, tftp__.
|
||||
+
|
||||
[listing]
|
||||
.Example
|
||||
.Examples
|
||||
--
|
||||
root=live:http://example.com/liveboot.img
|
||||
root=live:ftp://ftp.example.com/liveboot.img
|
||||
@@ -945,7 +961,7 @@ Enables debug output from the live boot process.
|
||||
|
||||
**rd.live.dir=**__<path>__::
|
||||
Specifies the directory within the boot device where the squashfs.img or
|
||||
rootfs.img can be found. By default, this is __LiveOS__.
|
||||
rootfs.img can be found. By default, this is `/LiveOS`.
|
||||
|
||||
**rd.live.squashimg=**__<filename of SquashFS image>__::
|
||||
Specifies the filename for a SquashFS image of the root filesystem.
|
||||
@@ -953,35 +969,52 @@ By default, this is __squashfs.img__.
|
||||
|
||||
**rd.live.ram=**1::
|
||||
Copy the complete image to RAM and use this for booting. This is useful
|
||||
when the image resides on, i.e., a DVD which needs to be ejected later on.
|
||||
when the image resides on, e.g., a DVD which needs to be ejected later on.
|
||||
|
||||
**rd.live.overlay=**__<devspec>__:__(<pathspec>|auto)__|__none__::
|
||||
Allow the usage of a permanent overlay.
|
||||
- _<devspec>_ specifies the path to a device with a mountable filesystem.
|
||||
- _<pathspec>_ is the path to a file within that filesystem, which shall be
|
||||
**rd.live.overlay={**__<devspec>__[:__{<pathspec>|auto}__]|__none__}::
|
||||
Manage the usage of a permanent overlay.
|
||||
+
|
||||
--
|
||||
* _<devspec>_ specifies the path to a device with a mountable filesystem.
|
||||
* _<pathspec>_ is the path to a file within that filesystem, which shall be
|
||||
used to persist the changes made to the device specified by the
|
||||
**root=live:__<url>__** option.
|
||||
- _none_ specifies no overlay when an uncompressed live root filesystem is
|
||||
available.
|
||||
If a persistent overlay is detected at the standard LiveOS path, the overlay &
|
||||
overlay type detected (whether Device-mapper or OverlayFS) will be used.
|
||||
+
|
||||
The default _pathspec_, when _auto_ or no _:<pathspec>_ is given, is
|
||||
`/<+++<b>rd.live.dir</b>+++>/overlay-<label>-<uuid>`, where _<label>_ is the
|
||||
device LABEL, and _<uuid>_ is the device UUID.
|
||||
* _none_ (the word itself) specifies that no overlay will be used, such as when
|
||||
an uncompressed, writable live root filesystem is available.
|
||||
+
|
||||
If a persistent overlay __is detected__ at the standard LiveOS path, the
|
||||
overlay & overlay type detected, whether Device-mapper or OverlayFS, will be
|
||||
used.
|
||||
--
|
||||
+
|
||||
[listing]
|
||||
.Example
|
||||
.Examples
|
||||
--
|
||||
rd.live.overlay=/dev/sdb1:persistent-overlay.img
|
||||
rd.live.overlay=UUID=99440c1f-8daa-41bf-b965-b7240a8996f4
|
||||
--
|
||||
|
||||
**rd.live.overlay.size=**__<size_MiB>__::
|
||||
Specifies a non-persistent overlay size in MiB. The default is _32768_.
|
||||
Specifies a non-persistent Device-mapper overlay size in MiB. The default is
|
||||
_32768_.
|
||||
|
||||
**rd.live.overlay.readonly=**1::
|
||||
Specifies a non-persistent, writable snapshot overlay to be stacked over a
|
||||
read-only snapshot of the root filesystem, `/dev/mapper/live-ro`, or a read-
|
||||
only loop device of a writable `rootfs.img`.
|
||||
This is used to boot with a normally read-write persistent overlay in a
|
||||
read-only mode. With this option, either an additional, non-persistent,
|
||||
writable snapshot overlay will be stacked over a read-only snapshot,
|
||||
`/dev/mapper/live‑ro`, of the base filesystem with the persistent overlay, or a
|
||||
read-only loop device, in the case of a writable __rootfs.img__, or an OverlayFS
|
||||
mount will use the persistent overlay directory linked at `/run/overlayfs‑r` as
|
||||
an additional lower layer along with the base root filesystem and apply a
|
||||
transient, writable upper directory overlay, in order to complete the booted
|
||||
root filesystem.
|
||||
|
||||
**rd.live.overlay.reset=**1::
|
||||
Specifies that a persistent overlay should be reset on boot. All root
|
||||
Specifies that a persistent overlay should be reset on boot. All previous root
|
||||
filesystem changes are vacated by this action.
|
||||
|
||||
**rd.live.overlay.thin=**1::
|
||||
@@ -992,25 +1025,25 @@ that memory is given back to the kernel when the filesystem does not claim it
|
||||
anymore.
|
||||
|
||||
**rd.live.overlay.overlayfs=**1::
|
||||
Enables the use of the **OverlayFS** kernel module, if available, to provide a
|
||||
Enables the use of the *OverlayFS* kernel module, if available, to provide a
|
||||
copy-on-write union directory for the root filesystem. OverlayFS overlays are
|
||||
directories of the files that have changed on the read-only base (lower)
|
||||
filesystem. The root filesystem is provided through a special overlay type
|
||||
mount that merges the lower and upper directories. If an OverlayFS upper
|
||||
directory is not present on the boot device, a tmpfs directory will be created
|
||||
at /run/overlayfs to provide temporary storage. Persistent storage can be
|
||||
at `/run/overlayfs` to provide temporary storage. Persistent storage can be
|
||||
provided on vfat or msdos formatted devices by supplying the OverlayFS upper
|
||||
directory within an embedded filesystem that supports the creation of trusted.*
|
||||
extended attributes and provides a valid d_type in readdir responses, such as
|
||||
with ext4 and xfs. On non-vfat-formatted devices, a persistent OverlayFS
|
||||
overlay can extend the available root filesystem storage up to the capacity of
|
||||
the LiveOS device.
|
||||
|
||||
the LiveOS disk device.
|
||||
+
|
||||
If a persistent overlay is detected at the standard LiveOS path, the overlay &
|
||||
overlay type detected (whether OverlayFS or Device-mapper) will be used.
|
||||
|
||||
overlay type detected, whether OverlayFS or Device-mapper, will be used.
|
||||
+
|
||||
The **rd.live.overlay.readonly** option, which allows a persistent overlayfs to
|
||||
be mounted read only through a higher level transient overlay directory, has
|
||||
be mounted read-only through a higher level transient overlay directory, has
|
||||
been implemented through the multiple lower layers feature of OverlayFS.
|
||||
|
||||
|
||||
|
@@ -212,7 +212,7 @@ check() should return with:
|
||||
|
||||
0:: Include the dracut module in the initramfs.
|
||||
|
||||
1:: Do not include the dracut module. The requirements are not fullfilled
|
||||
1:: Do not include the dracut module. The requirements are not fulfilled
|
||||
(missing tools, etc.)
|
||||
|
||||
255:: Only include the dracut module, if another module requires it or if
|
||||
@@ -255,8 +255,8 @@ not lead to an error.
|
||||
==== inst <src> [<dst>]
|
||||
|
||||
installs _one_ file <src> either to the same place in the initramfs or to an
|
||||
optional <dst>. inst with more than two arguments is treated the same as
|
||||
inst_multiple, all arguments are treated as files to install and none as
|
||||
optional <dst>. inst with more than two arguments is treated the same as
|
||||
inst_multiple, all arguments are treated as files to install and none as
|
||||
install destinations.
|
||||
|
||||
==== inst_hook <hookdir> <prio> <src>
|
||||
|
130
dracut.sh
130
dracut.sh
@@ -474,9 +474,6 @@ if [[ $append_args_l == "yes" ]]; then
|
||||
eval set -- "$TEMP"
|
||||
rearrange_params "$@"
|
||||
fi
|
||||
|
||||
# clean the temporarily used scratch-pad directory
|
||||
rm -rf $scratch_dir
|
||||
fi
|
||||
|
||||
unset PARMS_TO_STORE
|
||||
@@ -1376,7 +1373,7 @@ do_print_cmdline()
|
||||
for moddir in "$dracutbasedir/modules.d"/[0-9][0-9]*; do
|
||||
_d_mod=${moddir##*/}; _d_mod=${_d_mod#[0-9][0-9]}
|
||||
[[ ${_mods_to_print[$_d_mod]} ]] || continue
|
||||
module_cmdline "$_d_mod"
|
||||
module_cmdline "$_d_mod" "$moddir"
|
||||
done
|
||||
unset moddir
|
||||
}
|
||||
@@ -1457,14 +1454,14 @@ for moddir in "$dracutbasedir/modules.d"/[0-9][0-9]*; do
|
||||
dinfo "*** Including module: $_d_mod ***"
|
||||
fi
|
||||
if [[ $kernel_only == yes ]]; then
|
||||
module_installkernel "$_d_mod" || {
|
||||
module_installkernel "$_d_mod" "$moddir" || {
|
||||
dfatal "installkernel failed in module $_d_mod"
|
||||
exit 1
|
||||
}
|
||||
else
|
||||
module_install "$_d_mod"
|
||||
module_install "$_d_mod" "$moddir"
|
||||
if [[ $no_kernel != yes ]]; then
|
||||
module_installkernel "$_d_mod" || {
|
||||
module_installkernel "$_d_mod" "$moddir" || {
|
||||
dfatal "installkernel failed in module $_d_mod"
|
||||
exit 1
|
||||
}
|
||||
@@ -1492,6 +1489,9 @@ dinfo "*** Including modules done ***"
|
||||
|
||||
## final stuff that has to happen
|
||||
if [[ $no_kernel != yes ]]; then
|
||||
if [[ $hostonly ]]; then
|
||||
echo "$(get_loaded_kernel_modules)" > $initdir/lib/dracut/loaded-kernel-modules.txt
|
||||
fi
|
||||
|
||||
if [[ $drivers ]]; then
|
||||
hostonly='' instmods $drivers
|
||||
@@ -1747,6 +1747,122 @@ fi
|
||||
|
||||
dinfo "*** Creating image file '$outfile' ***"
|
||||
|
||||
if dracut_module_included "squash"; then
|
||||
if ! check_kernel_config CONFIG_SQUASHFS; then
|
||||
dfatal "CONFIG_SQUASHFS have to be enabled for dracut squash module to work"
|
||||
exit 1
|
||||
fi
|
||||
if ! check_kernel_config CONFIG_OVERLAY_FS; then
|
||||
dfatal "CONFIG_OVERLAY_FS have to be enabled for dracut squash module to work"
|
||||
exit 1
|
||||
fi
|
||||
if ! check_kernel_config CONFIG_DEVTMPFS; then
|
||||
dfatal "CONFIG_DEVTMPFS have to be enabled for dracut squash module to work"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
readonly squash_dir="${DRACUT_TMPDIR}/squashfs"
|
||||
readonly squash_img=$initdir/squash/root.img
|
||||
|
||||
# Currently only move "usr" "etc" to squashdir
|
||||
readonly squash_candidate=( "usr" "etc" )
|
||||
|
||||
mkdir -m 0755 -p $squash_dir
|
||||
for folder in "${squash_candidate[@]}"; do
|
||||
mv $initdir/$folder $squash_dir/$folder
|
||||
done
|
||||
|
||||
# Move some files out side of the squash image, including:
|
||||
# - Files required to boot and mount the squashfs image
|
||||
# - Files need to be accessable without mounting the squash image
|
||||
required_in_root() {
|
||||
local file=$1
|
||||
local _sqsh_file=$squash_dir/$file
|
||||
local _init_file=$initdir/$file
|
||||
|
||||
if [[ -e $_init_file ]]; then
|
||||
return
|
||||
fi
|
||||
|
||||
if [[ ! -e $_sqsh_file ]] && [[ ! -L $_sqsh_file ]]; then
|
||||
derror "$file is required to boot a squashed initramfs but it's not installed!"
|
||||
return
|
||||
fi
|
||||
|
||||
if [[ ! -d $(dirname $_init_file) ]]; then
|
||||
required_in_root $(dirname $file)
|
||||
fi
|
||||
|
||||
if [[ -L $_sqsh_file ]]; then
|
||||
cp --preserve=all -P $_sqsh_file $_init_file
|
||||
_sqsh_file=$(realpath $_sqsh_file 2>/dev/null)
|
||||
if [[ -e $_sqsh_file ]] && [[ "$_sqsh_file" == "$squash_dir"* ]]; then
|
||||
# Relative symlink
|
||||
required_in_root ${_sqsh_file#$squash_dir/}
|
||||
return
|
||||
fi
|
||||
if [[ -e $squash_dir$_sqsh_file ]]; then
|
||||
# Absolute symlink
|
||||
required_in_root ${_sqsh_file#/}
|
||||
return
|
||||
fi
|
||||
required_in_root ${module_spec#$squash_dir/}
|
||||
else
|
||||
if [[ -d $_sqsh_file ]]; then
|
||||
mkdir $_init_file
|
||||
else
|
||||
mv $_sqsh_file $_init_file
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
required_in_root etc/initrd-release
|
||||
|
||||
for module_spec in $squash_dir/usr/lib/modules/*/modules.*;
|
||||
do
|
||||
required_in_root ${module_spec#$squash_dir/}
|
||||
done
|
||||
|
||||
for dracut_spec in $squash_dir/usr/lib/dracut/*;
|
||||
do
|
||||
required_in_root ${dracut_spec#$squash_dir/}
|
||||
done
|
||||
|
||||
mv $initdir/init $initdir/init.stock
|
||||
mv $initdir/shutdown $initdir/shutdown.stock
|
||||
ln -s squash/init.sh $initdir/init
|
||||
ln -s squash/shutdown.sh $initdir/shutdown
|
||||
|
||||
# Reinstall required files for the squash image setup script.
|
||||
# We have moved them inside the squashed image, but they need to be
|
||||
# accessible before mounting the image.
|
||||
inst_multiple "echo" "sh" "mount" "modprobe" "mkdir"
|
||||
hostonly="" instmods "loop" "squashfs" "overlay"
|
||||
|
||||
# Only keep systemctl outsite if we need switch root
|
||||
if [[ ! -f "$initdir/lib/dracut/no-switch-root" ]]; then
|
||||
inst "systemctl"
|
||||
fi
|
||||
|
||||
for folder in "${squash_candidate[@]}"; do
|
||||
# Remove duplicated files in squashfs image, save some more space
|
||||
[[ ! -d $initdir/$folder/ ]] && continue
|
||||
for file in $(find $initdir/$folder/ -not -type d);
|
||||
do
|
||||
if [[ -e $squash_dir${file#$initdir} ]]; then
|
||||
mv $squash_dir${file#$initdir} $file
|
||||
fi
|
||||
done
|
||||
done
|
||||
|
||||
mksquashfs $squash_dir $squash_img -comp xz -b 64K -Xdict-size 100% &> /dev/null
|
||||
|
||||
if [[ $? != 0 ]]; then
|
||||
dfatal "dracut: Failed making squash image"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ $uefi = yes ]]; then
|
||||
readonly uefi_outdir="$DRACUT_TMPDIR/uefi"
|
||||
mkdir "$uefi_outdir"
|
||||
|
53
dracut.spec
53
dracut.spec
@@ -49,7 +49,7 @@ BuildRequires: docbook-style-xsl docbook-dtds libxslt
|
||||
%endif
|
||||
|
||||
%if 0%{?suse_version}
|
||||
-BuildRequires: docbook-xsl-stylesheets libxslt
|
||||
BuildRequires: docbook-xsl-stylesheets libxslt
|
||||
%endif
|
||||
|
||||
BuildRequires: asciidoc
|
||||
@@ -65,6 +65,13 @@ Provides: dracut-fips = %{version}-%{release}
|
||||
Obsoletes: dracut-fips-aesni <= 047
|
||||
Provides: dracut-fips-aesni = %{version}-%{release}
|
||||
|
||||
Obsoletes: dracut-kernel < 005
|
||||
Provides: dracut-kernel = %{version}-%{release}
|
||||
|
||||
Obsoletes: dracut < 030
|
||||
Obsoletes: dracut-norescue < 030
|
||||
Provides: dracut-norescue = %{version}-%{release}
|
||||
|
||||
Requires: bash >= 4
|
||||
Requires: coreutils
|
||||
Requires: cpio
|
||||
@@ -178,6 +185,16 @@ Requires: %{name} = %{version}-%{release}
|
||||
%description tools
|
||||
This package contains tools to assemble the local initrd and host configuration.
|
||||
|
||||
%package squash
|
||||
Summary: dracut module to build an initramfs with most files in a squashfs image
|
||||
Requires: %{name} = %{version}-%{release}
|
||||
Requires: squashfs-tools
|
||||
|
||||
%description squash
|
||||
This package provides a dracut module to build an initramfs, but store most files
|
||||
in a squashfs image, result in a smaller initramfs size and reduce runtime memory
|
||||
usage.
|
||||
|
||||
%prep
|
||||
%autosetup -n %{name}-%{version} -S git_am
|
||||
cp %{SOURCE1} .
|
||||
@@ -235,6 +252,8 @@ rm -fr -- $RPM_BUILD_ROOT/%{dracutlibdir}/modules.d/95qeth_rules
|
||||
rm -fr -- $RPM_BUILD_ROOT/%{dracutlibdir}/modules.d/95zfcp
|
||||
rm -fr -- $RPM_BUILD_ROOT/%{dracutlibdir}/modules.d/95zfcp_rules
|
||||
rm -fr -- $RPM_BUILD_ROOT/%{dracutlibdir}/modules.d/95znet
|
||||
%else
|
||||
rm -fr -- $RPM_BUILD_ROOT/%{dracutlibdir}/modules.d/00warpclock
|
||||
%endif
|
||||
|
||||
mkdir -p $RPM_BUILD_ROOT/boot/dracut
|
||||
@@ -259,10 +278,13 @@ rm -f -- $RPM_BUILD_ROOT%{_bindir}/lsinitrd
|
||||
%if 0%{?fedora} || 0%{?rhel}
|
||||
echo 'hostonly="no"' > $RPM_BUILD_ROOT%{dracutlibdir}/dracut.conf.d/02-generic-image.conf
|
||||
echo 'dracut_rescue_image="yes"' > $RPM_BUILD_ROOT%{dracutlibdir}/dracut.conf.d/02-rescue.conf
|
||||
|
||||
# FIXME: remove after F30
|
||||
mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/kernel/postinst.d
|
||||
install -m 0755 51-dracut-rescue-postinst.sh $RPM_BUILD_ROOT%{_sysconfdir}/kernel/postinst.d/51-dracut-rescue-postinst.sh
|
||||
%endif
|
||||
|
||||
%files
|
||||
%defattr(-,root,root,0755)
|
||||
%if %{with doc}
|
||||
%doc README HACKING TODO AUTHORS NEWS dracut.html dracut.png dracut.svg
|
||||
%endif
|
||||
@@ -313,11 +335,18 @@ echo 'dracut_rescue_image="yes"' > $RPM_BUILD_ROOT%{dracutlibdir}/dracut.conf.d/
|
||||
%endif
|
||||
%{dracutlibdir}/modules.d/00bash
|
||||
%{dracutlibdir}/modules.d/00systemd
|
||||
%ifnarch s390 s390x
|
||||
%{dracutlibdir}/modules.d/00warpclock
|
||||
%endif
|
||||
%if 0%{?fedora} || 0%{?rhel} || 0%{?suse_version}
|
||||
%{dracutlibdir}/modules.d/01fips
|
||||
%endif
|
||||
%{dracutlibdir}/modules.d/01systemd-initrd
|
||||
%{dracutlibdir}/modules.d/03modsign
|
||||
%{dracutlibdir}/modules.d/03rescue
|
||||
%{dracutlibdir}/modules.d/04watchdog
|
||||
%{dracutlibdir}/modules.d/05busybox
|
||||
%{dracutlibdir}/modules.d/06rngd
|
||||
%{dracutlibdir}/modules.d/10i18n
|
||||
%{dracutlibdir}/modules.d/30convertfs
|
||||
%{dracutlibdir}/modules.d/45url-lib
|
||||
@@ -329,6 +358,7 @@ echo 'dracut_rescue_image="yes"' > $RPM_BUILD_ROOT%{dracutlibdir}/dracut.conf.d/
|
||||
%{dracutlibdir}/modules.d/90dm
|
||||
%{dracutlibdir}/modules.d/90dmraid
|
||||
%{dracutlibdir}/modules.d/90kernel-modules
|
||||
%{dracutlibdir}/modules.d/90kernel-modules-extra
|
||||
%{dracutlibdir}/modules.d/90lvm
|
||||
%{dracutlibdir}/modules.d/90mdraid
|
||||
%{dracutlibdir}/modules.d/90multipath
|
||||
@@ -396,14 +426,10 @@ echo 'dracut_rescue_image="yes"' > $RPM_BUILD_ROOT%{dracutlibdir}/dracut.conf.d/
|
||||
%{_prefix}/lib/kernel/install.d/50-dracut.install
|
||||
%endif
|
||||
|
||||
%if 0%{?fedora} || 0%{?rhel} || 0%{?suse_version}
|
||||
%defattr(-,root,root,0755)
|
||||
%{dracutlibdir}/modules.d/01fips
|
||||
%endif
|
||||
|
||||
%files network
|
||||
%defattr(-,root,root,0755)
|
||||
%{dracutlibdir}/modules.d/02systemd-networkd
|
||||
%{dracutlibdir}/modules.d/35network-manager
|
||||
%{dracutlibdir}/modules.d/35network-legacy
|
||||
%{dracutlibdir}/modules.d/40network
|
||||
%{dracutlibdir}/modules.d/45ifcfg
|
||||
%{dracutlibdir}/modules.d/90kernel-network-modules
|
||||
@@ -421,19 +447,15 @@ echo 'dracut_rescue_image="yes"' > $RPM_BUILD_ROOT%{dracutlibdir}/dracut.conf.d/
|
||||
%{dracutlibdir}/modules.d/99uefi-lib
|
||||
|
||||
%files caps
|
||||
%defattr(-,root,root,0755)
|
||||
%{dracutlibdir}/modules.d/02caps
|
||||
|
||||
%files live
|
||||
%defattr(-,root,root,0755)
|
||||
%{dracutlibdir}/modules.d/99img-lib
|
||||
%{dracutlibdir}/modules.d/90dmsquash-live
|
||||
%{dracutlibdir}/modules.d/90dmsquash-live-ntfs
|
||||
%{dracutlibdir}/modules.d/90livenet
|
||||
|
||||
%files tools
|
||||
%defattr(-,root,root,0755)
|
||||
|
||||
%if %{with doc}
|
||||
%doc %{_mandir}/man8/dracut-catimages.8*
|
||||
%endif
|
||||
@@ -443,15 +465,18 @@ echo 'dracut_rescue_image="yes"' > $RPM_BUILD_ROOT%{dracutlibdir}/dracut.conf.d/
|
||||
%dir /var/lib/dracut
|
||||
%dir /var/lib/dracut/overlay
|
||||
|
||||
%files squash
|
||||
%{dracutlibdir}/modules.d/99squash
|
||||
|
||||
%files config-generic
|
||||
%defattr(-,root,root,0755)
|
||||
%{dracutlibdir}/dracut.conf.d/02-generic-image.conf
|
||||
|
||||
%files config-rescue
|
||||
%defattr(-,root,root,0755)
|
||||
%{dracutlibdir}/dracut.conf.d/02-rescue.conf
|
||||
%if 0%{?fedora} || 0%{?rhel}
|
||||
%{_prefix}/lib/kernel/install.d/51-dracut-rescue.install
|
||||
# FIXME: remove after F30
|
||||
%{_sysconfdir}/kernel/postinst.d/51-dracut-rescue-postinst.sh
|
||||
%endif
|
||||
|
||||
%changelog
|
||||
|
@@ -243,7 +243,7 @@ If your root partition is on a network drive, you have to have the network
|
||||
dracut modules installed to create a network aware initramfs image.
|
||||
|
||||
If you specify ip=dhcp on the kernel command line, then dracut asks a dhcp
|
||||
server about the ip adress for the machine. The dhcp server can also serve an
|
||||
server about the ip address for the machine. The dhcp server can also serve an
|
||||
additional root-path, which will set the root device for dracut. With this
|
||||
mechanism, you have static configuration on your client machine and a
|
||||
centralized boot configuration on your TFTP/DHCP server. If you can't pass a
|
||||
@@ -252,7 +252,7 @@ method described in <<Injecting>>.
|
||||
|
||||
==== Reducing the Image Size
|
||||
|
||||
To reduce the size of the initramfs, you should create it with by ommitting all
|
||||
To reduce the size of the initramfs, you should create it with by omitting all
|
||||
dracut modules, which you know, you don't need to boot the machine.
|
||||
|
||||
You can also specify the exact dracut and kernel modules to produce a very tiny
|
||||
|
61
fedora-test.sh
Executable file
61
fedora-test.sh
Executable file
@@ -0,0 +1,61 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -ex
|
||||
|
||||
[[ -d ${0%/*} ]] && cd ${0%/*}
|
||||
|
||||
RUN_ID="$1"
|
||||
TESTS=$2
|
||||
|
||||
dnf -y update --best --allowerasing &>/dev/null
|
||||
|
||||
dnf -y install --best --allowerasing \
|
||||
dash \
|
||||
asciidoc \
|
||||
mdadm \
|
||||
lvm2 \
|
||||
dmraid \
|
||||
cryptsetup \
|
||||
nfs-utils \
|
||||
nbd \
|
||||
dhcp-server \
|
||||
scsi-target-utils \
|
||||
iscsi-initiator-utils \
|
||||
strace \
|
||||
btrfs-progs \
|
||||
kmod-devel \
|
||||
gcc \
|
||||
bzip2 \
|
||||
xz \
|
||||
tar \
|
||||
wget \
|
||||
rpm-build \
|
||||
make \
|
||||
git \
|
||||
bash-completion \
|
||||
sudo \
|
||||
kernel \
|
||||
dhcp-client \
|
||||
/usr/bin/qemu-kvm \
|
||||
/usr/bin/qemu-system-$(uname -i) \
|
||||
e2fsprogs \
|
||||
$NULL &>/dev/null
|
||||
|
||||
./configure
|
||||
|
||||
NCPU=$(getconf _NPROCESSORS_ONLN)
|
||||
|
||||
if ! [[ $TESTS ]]; then
|
||||
make -j$NCPU all syncheck rpm logtee
|
||||
else
|
||||
make -j$NCPU all logtee
|
||||
|
||||
cd test
|
||||
|
||||
time sudo make \
|
||||
KVERSION=$(rpm -qa kernel --qf '%{VERSION}-%{RELEASE}.%{ARCH}\n' | sort -rn | head -1) \
|
||||
TEST_RUN_ID=$RUN_ID \
|
||||
${TESTS:+TESTS="$TESTS"} \
|
||||
-k V=2 \
|
||||
check
|
||||
fi
|
@@ -37,7 +37,7 @@ $tag=`git describe --abbrev=0 --tags` if not defined $tag;
|
||||
chomp($tag);
|
||||
my @patches=&create_patches($tag, $pdir);
|
||||
my $num=$#patches + 2;
|
||||
$tag=~s/[^0-9]+?([0-9]+)/$1/;
|
||||
$tag=~s/[^0-9]+?([0-9]+)/$1/ if $tag !~ /\b[0-9a-f]{5,40}\b/;
|
||||
my $release="$num.git$datestr";
|
||||
$release="1" if $num == 1;
|
||||
|
||||
|
@@ -1244,7 +1244,7 @@ static int install_dependent_modules(struct kmod_list *modlist)
|
||||
path = kmod_module_get_path(mod);
|
||||
|
||||
name = kmod_module_get_name(mod);
|
||||
if (arg_mod_filter_noname && (regexec(&mod_filter_noname, name, 0, NULL, 0) == 0)) {
|
||||
if ((path == NULL) || (arg_mod_filter_noname && (regexec(&mod_filter_noname, name, 0, NULL, 0) == 0))) {
|
||||
kmod_module_unref(mod);
|
||||
continue;
|
||||
}
|
||||
|
@@ -167,7 +167,7 @@ int safe_atoi(const char *s, int *ret_i);
|
||||
int safe_atollu(const char *s, unsigned long long *ret_u);
|
||||
int safe_atolli(const char *s, long long int *ret_i);
|
||||
|
||||
#if __WORDSIZE == 32
|
||||
#if LONG_MAX == INT_MAX
|
||||
static inline int safe_atolu(const char *s, unsigned long *ret_u) {
|
||||
assert_cc(sizeof(unsigned long) == sizeof(unsigned));
|
||||
return safe_atou(s, (unsigned*) ret_u);
|
||||
|
54
logtee.c
Normal file
54
logtee.c
Normal file
@@ -0,0 +1,54 @@
|
||||
#define _GNU_SOURCE
|
||||
#include <fcntl.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include <limits.h>
|
||||
|
||||
#define BUFLEN 4096
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
int fd;
|
||||
int len, slen;
|
||||
|
||||
if (argc != 2) {
|
||||
fprintf(stderr, "Usage: %s <file>\n", argv[0]);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
fd = open(argv[1], O_WRONLY | O_CREAT | O_TRUNC, 0644);
|
||||
if (fd == -1) {
|
||||
perror("open");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
fprintf(stderr, "Logging to %s: ", argv[1]);
|
||||
|
||||
slen = 0;
|
||||
|
||||
do {
|
||||
len = splice(STDIN_FILENO, NULL, fd, NULL,
|
||||
BUFLEN, SPLICE_F_MOVE);
|
||||
|
||||
if (len < 0) {
|
||||
if (errno == EAGAIN)
|
||||
continue;
|
||||
perror("tee");
|
||||
exit(EXIT_FAILURE);
|
||||
} else
|
||||
if (len == 0)
|
||||
break;
|
||||
slen += len;
|
||||
if ((slen/BUFLEN) > 0) {
|
||||
fprintf(stderr, ".");
|
||||
}
|
||||
slen = slen % BUFLEN;
|
||||
|
||||
} while (1);
|
||||
close(fd);
|
||||
fprintf(stderr, "\n");
|
||||
exit(EXIT_SUCCESS);
|
||||
}
|
@@ -34,11 +34,17 @@ OPTIONS
|
||||
**-k, --kver** _<kernel version>_::
|
||||
inspect the initramfs of <kernel version>.
|
||||
|
||||
**-m, --mod**::
|
||||
list dracut modules included of the initramfs image.
|
||||
|
||||
**--unpack**::
|
||||
unpack the initramfs to the current directory, instead of displaying the contents.
|
||||
If optional filenames are given, will only unpack specified files, else the whole image will be unpacked.
|
||||
Won't unpack anything from early cpio part.
|
||||
|
||||
**--unpackearly**::
|
||||
unpack the early microcode initramfs to the current directory, instead of displaying the contents.
|
||||
Same as --unpack, but only unpack files from early cpio part.
|
||||
|
||||
**-v, --verbose**::
|
||||
unpack verbosely
|
||||
|
30
lsinitrd.sh
30
lsinitrd.sh
@@ -28,7 +28,10 @@ usage()
|
||||
echo "-m, --mod list modules."
|
||||
echo "-f, --file <filename> print the contents of <filename>."
|
||||
echo "--unpack unpack the initramfs, instead of displaying the contents."
|
||||
echo " If optional filenames are given, will only unpack specified files,"
|
||||
echo " else the whole image will be unpacked. Won't unpack anything from early cpio part."
|
||||
echo "--unpackearly unpack the early microcode part of the initramfs."
|
||||
echo " Same as --unpack, but only unpack files from early cpio part."
|
||||
echo "-v, --verbose unpack verbosely."
|
||||
echo "-k, --kver <kernel version> inspect the initramfs of <kernel version>."
|
||||
echo
|
||||
@@ -159,8 +162,15 @@ list_files()
|
||||
|
||||
unpack_files()
|
||||
{
|
||||
$CAT "$image" 2>/dev/null | cpio -id --quiet $verbose
|
||||
((ret+=$?))
|
||||
if (( ${#filenames[@]} > 0 )); then
|
||||
for f in "${!filenames[@]}"; do
|
||||
$CAT "$image" 2>/dev/null | cpio -id --quiet $verbose $f
|
||||
((ret+=$?))
|
||||
done
|
||||
else
|
||||
$CAT "$image" 2>/dev/null | cpio -id --quiet $verbose
|
||||
((ret+=$?))
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
@@ -175,7 +185,10 @@ case $bin in
|
||||
CAT="cat --"
|
||||
is_early=$(cpio --extract --verbose --quiet --to-stdout -- 'early_cpio' < "$image" 2>/dev/null)
|
||||
if [[ "$is_early" ]]; then
|
||||
if [[ -n "$unpackearly" ]]; then
|
||||
if [[ -n "$unpack" ]]; then
|
||||
# should use --unpackearly for early CPIO
|
||||
:
|
||||
elif [[ -n "$unpackearly" ]]; then
|
||||
unpack_files
|
||||
elif (( ${#filenames[@]} > 0 )); then
|
||||
extract_files
|
||||
@@ -241,6 +254,17 @@ if [[ $SKIP ]]; then
|
||||
CAT=skipcpio
|
||||
fi
|
||||
|
||||
if (( ${#filenames[@]} > 1 )); then
|
||||
TMPFILE="$(mktemp -t --suffix=.cpio lsinitrd.XXXXXX)"
|
||||
$CAT "$image" 2>/dev/null > $TMPFILE
|
||||
trap "rm -f '$TMPFILE'" EXIT
|
||||
pre_decompress()
|
||||
{
|
||||
cat $TMPFILE
|
||||
}
|
||||
CAT=pre_decompress
|
||||
fi
|
||||
|
||||
ret=0
|
||||
|
||||
if [[ -n "$unpack" ]]; then
|
||||
|
@@ -18,7 +18,7 @@ DESCRIPTION
|
||||
version <kernel-version> by calling *dracut*.
|
||||
|
||||
[IMPORTANT]
|
||||
This version of mkinitrd is provided for compability with older
|
||||
This version of mkinitrd is provided for compatibility with older
|
||||
versions of mkinitrd. If a more fine grained control over the
|
||||
resulting image is needed, *dracut* should be called directly.
|
||||
|
||||
@@ -30,7 +30,7 @@ OPTIONS
|
||||
**-k** _<kernel_list>_::
|
||||
List of kernel images for which initrd files are created (relative
|
||||
to _boot_dir_), Image name should begin with the following string,
|
||||
defaults to _vmlinux_ on ppc/ppc64, _image_ on s390/s390x and _vmlinuz_
|
||||
defaults to _vmlinux_ on ppc/ppc64, _image_ on s390/s390x and _vmlinuz_
|
||||
for everything else.
|
||||
|
||||
**-i** _<initrd_list>_::
|
||||
@@ -51,7 +51,7 @@ OPTIONS
|
||||
|
||||
**-d** _<root_device>_::
|
||||
Root device, defaults to the device from which the root_dir is
|
||||
mounted; overwrites the rootdev enviroment variable if set
|
||||
mounted; overwrites the rootdev environment variable if set
|
||||
|
||||
**-s** _<size>_::
|
||||
Add splash animation and bootscreen to initrd.
|
||||
|
29
modules.d/00warpclock/module-setup.sh
Normal file
29
modules.d/00warpclock/module-setup.sh
Normal file
@@ -0,0 +1,29 @@
|
||||
#!/bin/bash
|
||||
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
|
||||
# ex: ts=8 sw=4 sts=4 et filetype=sh
|
||||
|
||||
# called by dracut
|
||||
check() {
|
||||
# hwclock does not exist on S390(x), bail out silently then
|
||||
local _arch=$(uname -m)
|
||||
[ "$_arch" = "s390" -o "$_arch" = "s390x" ] && return 1
|
||||
|
||||
[ -e /etc/localtime -a -e /etc/adjtime ] || return 1
|
||||
require_binaries /sbin/hwclock || return 1
|
||||
|
||||
return 255
|
||||
}
|
||||
|
||||
# called by dracut
|
||||
depends() {
|
||||
return 0
|
||||
}
|
||||
|
||||
# called by dracut
|
||||
install() {
|
||||
inst /usr/share/zoneinfo/UTC
|
||||
inst /etc/localtime
|
||||
inst /etc/adjtime
|
||||
inst_hook pre-trigger 00 "$moddir/warpclock.sh"
|
||||
inst /sbin/hwclock
|
||||
}
|
9
modules.d/00warpclock/warpclock.sh
Normal file
9
modules.d/00warpclock/warpclock.sh
Normal file
@@ -0,0 +1,9 @@
|
||||
#!/bin/sh
|
||||
|
||||
if test -e /etc/adjtime ; then
|
||||
while read line ; do
|
||||
if test "$line" = LOCAL ; then
|
||||
hwclock --systz
|
||||
fi
|
||||
done < /etc/adjtime
|
||||
fi
|
8
modules.d/01fips/fips-load-crypto.sh
Normal file
8
modules.d/01fips/fips-load-crypto.sh
Normal file
@@ -0,0 +1,8 @@
|
||||
#!/bin/sh
|
||||
|
||||
if ! fipsmode=$(getarg fips) || [ $fipsmode = "0" ]; then
|
||||
rm -f -- /etc/modprobe.d/fips.conf >/dev/null 2>&1
|
||||
else
|
||||
. /sbin/fips.sh
|
||||
fips_load_crypto || die "FIPS integrity test failed"
|
||||
fi
|
@@ -69,15 +69,8 @@ do_rhevh_check()
|
||||
return 0
|
||||
}
|
||||
|
||||
do_fips()
|
||||
fips_load_crypto()
|
||||
{
|
||||
local _v
|
||||
local _s
|
||||
local _v
|
||||
local _module
|
||||
|
||||
KERNEL=$(uname -r)
|
||||
|
||||
FIPSMODULES=$(cat /etc/fipsmodules)
|
||||
|
||||
info "Loading and integrity checking all crypto modules"
|
||||
@@ -102,6 +95,16 @@ do_fips()
|
||||
info "Self testing crypto algorithms"
|
||||
modprobe tcrypt || return 1
|
||||
rmmod tcrypt
|
||||
}
|
||||
|
||||
do_fips()
|
||||
{
|
||||
local _v
|
||||
local _s
|
||||
local _v
|
||||
local _module
|
||||
|
||||
KERNEL=$(uname -r)
|
||||
|
||||
info "Checking integrity of kernel"
|
||||
if [ -e "/run/initramfs/live/vmlinuz0" ]; then
|
||||
@@ -110,12 +113,16 @@ do_fips()
|
||||
do_rhevh_check /run/initramfs/live/isolinux/vmlinuz0 || return 1
|
||||
else
|
||||
BOOT_IMAGE="$(getarg BOOT_IMAGE)"
|
||||
|
||||
# Trim off any leading GRUB boot device (e.g. ($root) )
|
||||
BOOT_IMAGE="$(echo "${BOOT_IMAGE}" | sed 's/^(.*)//')"
|
||||
|
||||
BOOT_IMAGE_NAME="${BOOT_IMAGE##*/}"
|
||||
BOOT_IMAGE_PATH="${BOOT_IMAGE%${BOOT_IMAGE_NAME}}"
|
||||
|
||||
if [ -z "$BOOT_IMAGE_NAME" ]; then
|
||||
BOOT_IMAGE_NAME="vmlinuz-${KERNEL}"
|
||||
elif ! [ -e "/boot/${BOOT_IMAGE_PATH}/${BOOT_IMAGE}" ]; then
|
||||
elif ! [ -e "/boot/${BOOT_IMAGE_PATH}/${BOOT_IMAGE_NAME}" ]; then
|
||||
#if /boot is not a separate partition BOOT_IMAGE might start with /boot
|
||||
BOOT_IMAGE_PATH=${BOOT_IMAGE_PATH#"/boot"}
|
||||
#on some achitectures BOOT_IMAGE does not contain path to kernel
|
||||
@@ -126,13 +133,13 @@ do_fips()
|
||||
fi
|
||||
fi
|
||||
|
||||
BOOT_IMAGE_HMAC="/boot/${BOOT_IMAGE_PATH}.${BOOT_IMAGE_NAME}.hmac"
|
||||
BOOT_IMAGE_HMAC="/boot/${BOOT_IMAGE_PATH}/.${BOOT_IMAGE_NAME}.hmac"
|
||||
if ! [ -e "${BOOT_IMAGE_HMAC}" ]; then
|
||||
warn "${BOOT_IMAGE_HMAC} does not exist"
|
||||
return 1
|
||||
fi
|
||||
|
||||
sha512hmac -c "${BOOT_IMAGE_HMAC}" || return 1
|
||||
(cd "${BOOT_IMAGE_HMAC%/*}" && sha512hmac -c "${BOOT_IMAGE_HMAC}") || return 1
|
||||
fi
|
||||
|
||||
info "All initrd crypto checks done"
|
||||
|
@@ -12,7 +12,7 @@ depends() {
|
||||
|
||||
# called by dracut
|
||||
installkernel() {
|
||||
local _fipsmodules _mod
|
||||
local _fipsmodules _mod _bootfstype
|
||||
if [[ -f "${srcmods}/modules.fips" ]]; then
|
||||
_fipsmodules="$(cat "${srcmods}/modules.fips")"
|
||||
else
|
||||
@@ -24,7 +24,7 @@ installkernel() {
|
||||
_fipsmodules+="crc32c crct10dif ghash "
|
||||
|
||||
# Ciphers:
|
||||
_fipsmodules+="cipher_null des3_ede aes "
|
||||
_fipsmodules+="cipher_null des3_ede aes cfb "
|
||||
|
||||
# Modes/templates:
|
||||
_fipsmodules+="ecb cbc ctr xts gcm ccm authenc hmac cmac "
|
||||
@@ -47,6 +47,16 @@ installkernel() {
|
||||
echo "blacklist $_mod" >> "${initdir}/etc/modprobe.d/fips.conf"
|
||||
fi
|
||||
done
|
||||
|
||||
# with hostonly_default_device fs module for /boot is not installed by default
|
||||
if [[ $hostonly ]] && [[ "$hostonly_default_device" == "no" ]]; then
|
||||
_bootfstype=$(find_mp_fstype /boot)
|
||||
if [[ -n "$_bootfstype" ]]; then
|
||||
hostonly='' instmods $_bootfstype
|
||||
else
|
||||
dwarning "Can't determine fs type for /boot, FIPS check may fail."
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# called by dracut
|
||||
@@ -54,6 +64,7 @@ install() {
|
||||
local _dir
|
||||
inst_hook pre-trigger 01 "$moddir/fips-boot.sh"
|
||||
inst_hook pre-pivot 01 "$moddir/fips-noboot.sh"
|
||||
inst_hook pre-udev 01 "$moddir/fips-load-crypto.sh"
|
||||
inst_script "$moddir/fips.sh" /sbin/fips.sh
|
||||
|
||||
inst_multiple sha512hmac rmmod insmod mount uname umount
|
||||
|
@@ -38,13 +38,12 @@ install() {
|
||||
|
||||
ln_r "${systemdsystemunitdir}/initrd.target" "${systemdsystemunitdir}/default.target"
|
||||
|
||||
local VERSION=""
|
||||
local PRETTY_NAME=""
|
||||
if [ -e /etc/os-release ]; then
|
||||
. /etc/os-release
|
||||
VERSION+=" "
|
||||
PRETTY_NAME+=" "
|
||||
else
|
||||
VERSION=""
|
||||
PRETTY_NAME=""
|
||||
[[ -n ${VERSION} ]] && VERSION+=" "
|
||||
[[ -n ${PRETTY_NAME} ]] && PRETTY_NAME+=" "
|
||||
fi
|
||||
NAME=dracut
|
||||
ID=dracut
|
||||
|
39
modules.d/06rngd/module-setup.sh
Normal file
39
modules.d/06rngd/module-setup.sh
Normal file
@@ -0,0 +1,39 @@
|
||||
#!/bin/bash
|
||||
# vim: set tabstop=8 shiftwidth=4 softtabstop=4 expandtab smarttab colorcolumn=80:
|
||||
#
|
||||
# Copyright (c) 2019 Red Hat, Inc.
|
||||
# Author: Renaud Métrich <rmetrich@redhat.com>
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
|
||||
depends() {
|
||||
echo systemd
|
||||
return 0
|
||||
}
|
||||
|
||||
check() {
|
||||
# if there's no rngd binary, no go.
|
||||
require_binaries rngd || return 1
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
install() {
|
||||
inst rngd
|
||||
inst_simple "${moddir}/rngd.service" "${systemdsystemunitdir}/rngd.service"
|
||||
mkdir -p "${initdir}${systemdsystemunitdir}/sysinit.target.wants"
|
||||
ln -rfs "${initdir}${systemdsystemunitdir}/rngd.service" \
|
||||
"${initdir}${systemdsystemunitdir}/sysinit.target.wants/rngd.service"
|
||||
}
|
7
modules.d/06rngd/rngd.service
Normal file
7
modules.d/06rngd/rngd.service
Normal file
@@ -0,0 +1,7 @@
|
||||
[Unit]
|
||||
Description=Hardware RNG Entropy Gatherer Daemon
|
||||
DefaultDependencies=no
|
||||
Before=systemd-udevd.service
|
||||
|
||||
[Service]
|
||||
ExecStart=/usr/sbin/rngd -f
|
@@ -41,6 +41,12 @@ do_dhcp() {
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [ ! -e /run/NetworkManager/conf.d/10-dracut-dhclient.conf ]; then
|
||||
mkdir -p /run/NetworkManager/conf.d
|
||||
echo '[main]' > /run/NetworkManager/conf.d/10-dracut-dhclient.conf
|
||||
echo 'dhcp=dhclient' >>/run/NetworkManager/conf.d/10-dracut-dhclient.conf
|
||||
fi
|
||||
|
||||
while [ $_COUNT -lt $_DHCPRETRY ]; do
|
||||
info "Starting dhcp for interface $netif"
|
||||
dhclient "$@" \
|
||||
@@ -402,7 +408,11 @@ for p in $(getargs ip=); do
|
||||
esac
|
||||
|
||||
# If this option isn't directed at our interface, skip it
|
||||
[ -n "$dev" ] && [ "$dev" != "$netif" ] && continue
|
||||
if [ -n "$dev" ]; then
|
||||
[ "$dev" != "$netif" ] && continue
|
||||
else
|
||||
iface_is_enslaved "$netif" && continue
|
||||
fi
|
||||
|
||||
# Store config for later use
|
||||
for i in ip srv gw mask hostname macaddr mtu dns1 dns2; do
|
92
modules.d/35network-legacy/module-setup.sh
Executable file
92
modules.d/35network-legacy/module-setup.sh
Executable file
@@ -0,0 +1,92 @@
|
||||
#!/bin/bash
|
||||
|
||||
# called by dracut
|
||||
check() {
|
||||
local _program
|
||||
|
||||
require_binaries ip dhclient sed awk grep || return 1
|
||||
require_any_binary arping arping2 || return 1
|
||||
|
||||
return 255
|
||||
}
|
||||
|
||||
# called by dracut
|
||||
depends() {
|
||||
return 0
|
||||
}
|
||||
|
||||
# called by dracut
|
||||
installkernel() {
|
||||
return 0
|
||||
}
|
||||
|
||||
# called by dracut
|
||||
install() {
|
||||
local _arch _i _dir
|
||||
inst_multiple ip dhclient sed awk grep
|
||||
|
||||
inst_multiple -o arping arping2
|
||||
strstr "$(arping 2>&1)" "ARPing 2" && mv "$initdir/bin/arping" "$initdir/bin/arping2"
|
||||
|
||||
inst_multiple -o ping ping6
|
||||
inst_multiple -o teamd teamdctl teamnl
|
||||
inst_simple /etc/libnl/classid
|
||||
inst_script "$moddir/ifup.sh" "/sbin/ifup"
|
||||
inst_script "$moddir/dhclient-script.sh" "/sbin/dhclient-script"
|
||||
inst_simple -H "/etc/dhclient.conf"
|
||||
cat "$moddir/dhclient.conf" >> "${initdir}/etc/dhclient.conf"
|
||||
inst_hook pre-udev 60 "$moddir/net-genrules.sh"
|
||||
inst_hook cmdline 92 "$moddir/parse-ibft.sh"
|
||||
inst_hook cmdline 95 "$moddir/parse-vlan.sh"
|
||||
inst_hook cmdline 96 "$moddir/parse-bond.sh"
|
||||
inst_hook cmdline 96 "$moddir/parse-team.sh"
|
||||
inst_hook cmdline 97 "$moddir/parse-bridge.sh"
|
||||
inst_hook cmdline 98 "$moddir/parse-ip-opts.sh"
|
||||
inst_hook cmdline 99 "$moddir/parse-ifname.sh"
|
||||
inst_hook cleanup 10 "$moddir/kill-dhclient.sh"
|
||||
|
||||
# install all config files for teaming
|
||||
unset TEAM_MASTER
|
||||
unset TEAM_CONFIG
|
||||
unset TEAM_PORT_CONFIG
|
||||
unset HWADDR
|
||||
unset SUBCHANNELS
|
||||
for i in /etc/sysconfig/network-scripts/ifcfg-*; do
|
||||
[ -e "$i" ] || continue
|
||||
case "$i" in
|
||||
*~ | *.bak | *.orig | *.rpmnew | *.rpmorig | *.rpmsave)
|
||||
continue
|
||||
;;
|
||||
esac
|
||||
(
|
||||
. "$i"
|
||||
if ! [ "${ONBOOT}" = "no" -o "${ONBOOT}" = "NO" ] \
|
||||
&& [ -n "${TEAM_MASTER}${TEAM_CONFIG}${TEAM_PORT_CONFIG}" ]; then
|
||||
if [ -n "$TEAM_CONFIG" ] && [ -n "$DEVICE" ]; then
|
||||
mkdir -p $initdir/etc/teamd
|
||||
printf -- "%s" "$TEAM_CONFIG" > "$initdir/etc/teamd/${DEVICE}.conf"
|
||||
elif [ -n "$TEAM_PORT_CONFIG" ]; then
|
||||
inst_simple "$i"
|
||||
|
||||
HWADDR="$(echo $HWADDR | sed 'y/ABCDEF/abcdef/')"
|
||||
if [ -n "$HWADDR" ]; then
|
||||
ln_r "$i" "/etc/sysconfig/network-scripts/mac-${HWADDR}.conf"
|
||||
fi
|
||||
|
||||
SUBCHANNELS="$(echo $SUBCHANNELS | sed 'y/ABCDEF/abcdef/')"
|
||||
if [ -n "$SUBCHANNELS" ]; then
|
||||
ln_r "$i" "/etc/sysconfig/network-scripts/ccw-${SUBCHANNELS}.conf"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
)
|
||||
done
|
||||
|
||||
_arch=$(uname -m)
|
||||
|
||||
inst_libdir_file {"tls/$_arch/",tls/,"$_arch/",}"libnss_dns.so.*" \
|
||||
{"tls/$_arch/",tls/,"$_arch/",}"libnss_mdns4_minimal.so.*"
|
||||
|
||||
dracut_need_initqueue
|
||||
}
|
||||
|
52
modules.d/35network-manager/module-setup.sh
Executable file
52
modules.d/35network-manager/module-setup.sh
Executable file
@@ -0,0 +1,52 @@
|
||||
#!/bin/bash
|
||||
|
||||
# called by dracut
|
||||
check() {
|
||||
local _program
|
||||
|
||||
require_binaries sed grep || return 1
|
||||
|
||||
# do not add this module by default
|
||||
return 255
|
||||
}
|
||||
|
||||
# called by dracut
|
||||
depends() {
|
||||
return 0
|
||||
}
|
||||
|
||||
# called by dracut
|
||||
installkernel() {
|
||||
return 0
|
||||
}
|
||||
|
||||
# called by dracut
|
||||
install() {
|
||||
local _nm_version
|
||||
|
||||
_nm_version=$(NetworkManager --version)
|
||||
|
||||
inst_multiple sed grep
|
||||
|
||||
inst NetworkManager
|
||||
inst /usr/libexec/nm-initrd-generator
|
||||
inst_multiple -o teamd dhclient
|
||||
inst_hook cmdline 99 "$moddir/nm-config.sh"
|
||||
inst_hook initqueue/settled 99 "$moddir/nm-run.sh"
|
||||
inst_rules 85-nm-unmanaged.rules
|
||||
inst_libdir_file "NetworkManager/$_nm_version/libnm-device-plugin-team.so"
|
||||
|
||||
if [[ -x "$initdir/usr/sbin/dhclient" ]]; then
|
||||
inst /usr/libexec/nm-dhcp-helper
|
||||
elif ! [[ -e "$initdir/etc/machine-id" ]]; then
|
||||
# The internal DHCP client silently fails if we
|
||||
# have no machine-id
|
||||
systemd-machine-id-setup --root="$initdir"
|
||||
fi
|
||||
|
||||
# We don't install the ifcfg files from the host automatically.
|
||||
# But if the user chooses to include them, we pull in the machinery to read them.
|
||||
if ! [[ -d "$initdir/etc/sysconfig/network-scripts" ]]; then
|
||||
inst_libdir_file "NetworkManager/$_nm_version/libnm-settings-plugin-ifcfg-rh.so"
|
||||
fi
|
||||
}
|
7
modules.d/35network-manager/nm-config.sh
Executable file
7
modules.d/35network-manager/nm-config.sh
Executable file
@@ -0,0 +1,7 @@
|
||||
#!/bin/sh
|
||||
|
||||
if [ -n "$netroot" ] || [ -e /tmp/net.ifaces ]; then
|
||||
echo rd.neednet >> /etc/cmdline.d/35-neednet.conf
|
||||
fi
|
||||
|
||||
/usr/libexec/nm-initrd-generator -- $(getcmdline)
|
17
modules.d/35network-manager/nm-run.sh
Executable file
17
modules.d/35network-manager/nm-run.sh
Executable file
@@ -0,0 +1,17 @@
|
||||
#!/bin/sh
|
||||
|
||||
if getargbool 0 rd.debug -d -y rdinitdebug -d -y rdnetdebug; then
|
||||
/usr/sbin/NetworkManager --configure-and-quit=initrd --debug --log-level=trace
|
||||
else
|
||||
/usr/sbin/NetworkManager --configure-and-quit=initrd --no-daemon
|
||||
fi
|
||||
|
||||
for _i in /sys/class/net/*/
|
||||
do
|
||||
state=/run/NetworkManager/devices/$(cat $_i/ifindex)
|
||||
grep -q connection-uuid= $state 2>/dev/null || continue
|
||||
ifname=${_i##*/}
|
||||
sed -n 's/root-path/new_root_path/p;s/next-server/new_next_server/p' <$state >/tmp/dhclient.$ifname.dhcpopts
|
||||
source_hook initqueue/online $ifname
|
||||
/sbin/netroot $ifname
|
||||
done
|
@@ -2,17 +2,17 @@
|
||||
|
||||
# called by dracut
|
||||
check() {
|
||||
local _program
|
||||
|
||||
require_binaries ip dhclient sed awk grep || return 1
|
||||
require_any_binary arping arping2 || return 1
|
||||
|
||||
return 255
|
||||
}
|
||||
|
||||
# called by dracut
|
||||
depends() {
|
||||
echo "kernel-network-modules"
|
||||
echo -n "kernel-network-modules "
|
||||
# RHEL 8.1: Default to network-legacy unless the user chose
|
||||
# network-manager manually
|
||||
if ! dracut_module_included "network-manager" ; then
|
||||
echo "network-legacy"
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
@@ -24,74 +24,11 @@ installkernel() {
|
||||
# called by dracut
|
||||
install() {
|
||||
local _arch _i _dir
|
||||
inst_multiple ip dhclient sed awk grep
|
||||
|
||||
inst_multiple -o arping arping2
|
||||
strstr "$(arping 2>&1)" "ARPing 2" && mv "$initdir/bin/arping" "$initdir/bin/arping2"
|
||||
|
||||
inst_multiple -o ping ping6
|
||||
inst_multiple -o teamd teamdctl teamnl
|
||||
inst_simple /etc/libnl/classid
|
||||
inst_script "$moddir/ifup.sh" "/sbin/ifup"
|
||||
inst_script "$moddir/netroot.sh" "/sbin/netroot"
|
||||
inst_script "$moddir/dhclient-script.sh" "/sbin/dhclient-script"
|
||||
inst_simple "$moddir/net-lib.sh" "/lib/net-lib.sh"
|
||||
inst_simple -H "/etc/dhclient.conf"
|
||||
cat "$moddir/dhclient.conf" >> "${initdir}/etc/dhclient.conf"
|
||||
inst_hook pre-udev 50 "$moddir/ifname-genrules.sh"
|
||||
inst_hook pre-udev 60 "$moddir/net-genrules.sh"
|
||||
inst_hook cmdline 91 "$moddir/dhcp-root.sh"
|
||||
inst_hook cmdline 92 "$moddir/parse-ibft.sh"
|
||||
inst_hook cmdline 95 "$moddir/parse-vlan.sh"
|
||||
inst_hook cmdline 96 "$moddir/parse-bond.sh"
|
||||
inst_hook cmdline 96 "$moddir/parse-team.sh"
|
||||
inst_hook cmdline 97 "$moddir/parse-bridge.sh"
|
||||
inst_hook cmdline 98 "$moddir/parse-ip-opts.sh"
|
||||
inst_hook cmdline 99 "$moddir/parse-ifname.sh"
|
||||
inst_hook cleanup 10 "$moddir/kill-dhclient.sh"
|
||||
|
||||
# install all config files for teaming
|
||||
unset TEAM_MASTER
|
||||
unset TEAM_CONFIG
|
||||
unset TEAM_PORT_CONFIG
|
||||
unset HWADDR
|
||||
unset SUBCHANNELS
|
||||
for i in /etc/sysconfig/network-scripts/ifcfg-*; do
|
||||
[ -e "$i" ] || continue
|
||||
case "$i" in
|
||||
*~ | *.bak | *.orig | *.rpmnew | *.rpmorig | *.rpmsave)
|
||||
continue
|
||||
;;
|
||||
esac
|
||||
(
|
||||
. "$i"
|
||||
if ! [ "${ONBOOT}" = "no" -o "${ONBOOT}" = "NO" ] \
|
||||
&& [ -n "${TEAM_MASTER}${TEAM_CONFIG}${TEAM_PORT_CONFIG}" ]; then
|
||||
if [ -n "$TEAM_CONFIG" ] && [ -n "$DEVICE" ]; then
|
||||
mkdir -p $initdir/etc/teamd
|
||||
printf -- "%s" "$TEAM_CONFIG" > "$initdir/etc/teamd/${DEVICE}.conf"
|
||||
elif [ -n "$TEAM_PORT_CONFIG" ]; then
|
||||
inst_simple "$i"
|
||||
|
||||
HWADDR="$(echo $HWADDR | sed 'y/ABCDEF/abcdef/')"
|
||||
if [ -n "$HWADDR" ]; then
|
||||
ln_r "$i" "/etc/sysconfig/network-scripts/mac-${HWADDR}.conf"
|
||||
fi
|
||||
|
||||
SUBCHANNELS="$(echo $SUBCHANNELS | sed 'y/ABCDEF/abcdef/')"
|
||||
if [ -n "$SUBCHANNELS" ]; then
|
||||
ln_r "$i" "/etc/sysconfig/network-scripts/ccw-${SUBCHANNELS}.conf"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
)
|
||||
done
|
||||
|
||||
_arch=$(uname -m)
|
||||
|
||||
inst_libdir_file {"tls/$_arch/",tls/,"$_arch/",}"libnss_dns.so.*" \
|
||||
{"tls/$_arch/",tls/,"$_arch/",}"libnss_mdns4_minimal.so.*"
|
||||
|
||||
dracut_need_initqueue
|
||||
}
|
||||
|
||||
|
@@ -463,7 +463,7 @@ ip_to_var() {
|
||||
# ip=<ipv4-address> means anaconda-style static config argument cluster
|
||||
autoconf="$1"
|
||||
|
||||
if strstr "$autoconf" "*.*.*.*"; then
|
||||
if strglob "$autoconf" "*.*.*.*"; then
|
||||
# ip=<ipv4-address> means anaconda-style static config argument cluster:
|
||||
# ip=<ip> gateway=<gw> netmask=<nm> hostname=<host> mtu=<mtu>
|
||||
# ksdevice={link|bootif|ibft|<MAC>|<ifname>}
|
||||
@@ -745,6 +745,13 @@ iface_has_link() {
|
||||
iface_has_carrier "$@"
|
||||
}
|
||||
|
||||
iface_is_enslaved() {
|
||||
local _li
|
||||
_li=$(ip -o link show dev $1)
|
||||
strstr "$_li" " master " || return 1
|
||||
return 0
|
||||
}
|
||||
|
||||
find_iface_with_link() {
|
||||
local iface_path="" iface=""
|
||||
for iface_path in /sys/class/net/*; do
|
||||
|
@@ -46,7 +46,7 @@ if [ -z "$2" ]; then
|
||||
# we die. Otherwise we just warn
|
||||
if [ -z "$new_root_path" ] ; then
|
||||
[ -n "$BOOTDEV" ] && die "No dhcp root-path received for '$BOOTDEV'"
|
||||
warn "No dhcp root-path received for '$BOOTDEV' trying other interfaces if available"
|
||||
warn "No dhcp root-path received for '$netif' trying other interfaces if available"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
@@ -14,6 +14,7 @@ depends() {
|
||||
|
||||
# called by dracut
|
||||
install() {
|
||||
inst_binary sort
|
||||
inst_hook pre-pivot 85 "$moddir/write-ifcfg.sh"
|
||||
}
|
||||
|
||||
|
@@ -286,7 +286,10 @@ echo "files /etc/sysconfig/network-scripts" >> /run/initramfs/rwtab
|
||||
echo "files /var/lib/dhclient" >> /run/initramfs/rwtab
|
||||
{
|
||||
cp /tmp/net.* /run/initramfs/
|
||||
cp /tmp/net.$netif.resolv.conf /run/initramfs/state/etc/resolv.conf
|
||||
for i in /tmp/net.*.resolv.conf; do
|
||||
[ -f "$i" ] && cat "$i"
|
||||
done | sort -u > /run/initramfs/state/etc/resolv.conf
|
||||
[ -s /run/initramfs/state/etc/resolv.conf ] || rm -f /run/initramfs/state/etc/resolv.conf
|
||||
copytree /tmp/ifcfg /run/initramfs/state/etc/sysconfig/network-scripts
|
||||
cp /tmp/ifcfg-leases/* /run/initramfs/state/var/lib/dhclient
|
||||
} > /dev/null 2>&1
|
||||
|
@@ -1,7 +1,7 @@
|
||||
SUBSYSTEM!="block", GOTO="dm_end"
|
||||
ACTION!="add|change", GOTO="dm_end"
|
||||
# Also don't process disks that are slated to be a multipath device
|
||||
ENV{DM_MULTIPATH_DEVICE_PATH}=="?*", GOTO="dm_end"
|
||||
ENV{DM_MULTIPATH_DEVICE_PATH}=="1", GOTO="dm_end"
|
||||
|
||||
KERNEL!="dm-[0-9]*", GOTO="dm_end"
|
||||
ACTION=="add", GOTO="dm_end"
|
||||
|
@@ -5,7 +5,7 @@
|
||||
SUBSYSTEM!="block", GOTO="dm_end"
|
||||
ACTION!="add|change", GOTO="dm_end"
|
||||
# Also don't process disks that are slated to be a multipath device
|
||||
ENV{DM_MULTIPATH_DEVICE_PATH}=="?*", GOTO="dm_end"
|
||||
ENV{DM_MULTIPATH_DEVICE_PATH}=="1", GOTO="dm_end"
|
||||
|
||||
ENV{ID_FS_TYPE}=="linux_raid_member", GOTO="dm_end"
|
||||
|
||||
|
@@ -1,6 +1,6 @@
|
||||
#!/bin/sh
|
||||
|
||||
if [ -L /run/rootfsbase ] && [ -d /run/initramfs/live/updates -o -d /updates ]; then
|
||||
if [ -h /dev/root ] && [ -d /run/initramfs/live/updates -o -d /updates ]; then
|
||||
info "Applying updates to live image..."
|
||||
mount -o bind /run $NEWROOT/run
|
||||
# avoid overwriting symlinks (e.g. /lib -> /usr/lib) with directories
|
||||
|
@@ -18,12 +18,12 @@ fi
|
||||
case "$liveroot" in
|
||||
live:LABEL=*|LABEL=*) \
|
||||
root="${root#live:}"
|
||||
root="$(echo $root | sed 's,/,\\x2f,g')"
|
||||
root="${root//\//\\x2f}"
|
||||
root="live:/dev/disk/by-label/${root#LABEL=}"
|
||||
rootok=1 ;;
|
||||
live:CDLABEL=*|CDLABEL=*) \
|
||||
root="${root#live:}"
|
||||
root="$(echo $root | sed 's,/,\\x2f,g')"
|
||||
root="${root//\//\\x2f}"
|
||||
root="live:/dev/disk/by-label/${root#CDLABEL=}"
|
||||
rootok=1 ;;
|
||||
live:UUID=*|UUID=*) \
|
||||
@@ -54,8 +54,10 @@ GENERATOR_DIR="$2"
|
||||
[ -z "$GENERATOR_DIR" ] && exit 1
|
||||
[ -d "$GENERATOR_DIR" ] || mkdir "$GENERATOR_DIR"
|
||||
|
||||
getargbool 0 rd.live.overlay.readonly -d -y readonly_overlay && readonly_overlay="--readonly" || readonly_overlay=""
|
||||
getargbool 0 rd.live.overlay.overlayfs && overlayfs="yes"
|
||||
[ -e /xor_overlayfs ] && xor_overlayfs="yes"
|
||||
[ -e /xor_readonly ] && xor_readonly="--readonly"
|
||||
ROOTFLAGS="$(getarg rootflags)"
|
||||
{
|
||||
echo "[Unit]"
|
||||
@@ -64,7 +66,12 @@ ROOTFLAGS="$(getarg rootflags)"
|
||||
echo "Where=/sysroot"
|
||||
if [ "$overlayfs$xor_overlayfs" = "yes" ]; then
|
||||
echo "What=LiveOS_rootfs"
|
||||
echo "Options=${ROOTFLAGS},lowerdir=/run/rootfsbase,upperdir=/run/overlayfs,workdir=/run/ovlwork"
|
||||
if [ "$readonly_overlay$xor_readonly" = "--readonly" ]; then
|
||||
ovlfs=lowerdir=/run/overlayfs-r:/run/rootfsbase
|
||||
else
|
||||
ovlfs=lowerdir=/run/rootfsbase
|
||||
fi
|
||||
echo "Options=${ROOTFLAGS},${ovlfs},upperdir=/run/overlayfs,workdir=/run/ovlwork"
|
||||
echo "Type=overlay"
|
||||
_dev=LiveOS_rootfs
|
||||
else
|
||||
|
@@ -109,15 +109,15 @@ do_live_overlay() {
|
||||
|
||||
if [ -z "$overlay" ]; then
|
||||
pathspec="/${live_dir}/overlay-$l-$u"
|
||||
elif ( echo $overlay | grep -q ":" ); then
|
||||
elif strstr $overlay ":"; then
|
||||
# pathspec specified, extract
|
||||
pathspec=$( echo $overlay | sed -e 's/^.*://' )
|
||||
pathspec=${overlay##*:}
|
||||
fi
|
||||
|
||||
if [ -z "$pathspec" -o "$pathspec" = "auto" ]; then
|
||||
pathspec="/${live_dir}/overlay-$l-$u"
|
||||
fi
|
||||
devspec=$( echo $overlay | sed -e 's/:.*$//' )
|
||||
devspec=${overlay%%:*}
|
||||
|
||||
# need to know where to look for the overlay
|
||||
if [ -z "$setup" -a -n "$devspec" -a -n "$pathspec" -a -n "$overlay" ]; then
|
||||
@@ -137,7 +137,7 @@ do_live_overlay() {
|
||||
fi
|
||||
if [ -n "$overlayfs" ]; then
|
||||
unset -v overlayfs
|
||||
[ -n "$DRACUT_SYSTEMD" ] && reloadsysrootmountunit="yes"
|
||||
[ -n "$DRACUT_SYSTEMD" ] && reloadsysrootmountunit=":>/xor_overlayfs;"
|
||||
fi
|
||||
setup="yes"
|
||||
else
|
||||
@@ -146,10 +146,10 @@ do_live_overlay() {
|
||||
[ -d /run/initramfs/overlayfs/ovlwork ]; then
|
||||
ln -s /run/initramfs/overlayfs/overlayfs /run/overlayfs$opt
|
||||
ln -s /run/initramfs/overlayfs/ovlwork /run/ovlwork$opt
|
||||
if [ -z "$overlayfs" ]; then
|
||||
overlayfs="yes"
|
||||
[ -n "$DRACUT_SYSTEMD" ] && reloadsysrootmountunit="yes"
|
||||
if [ -z "$overlayfs" ] && [ -n "$DRACUT_SYSTEMD" ]; then
|
||||
reloadsysrootmountunit=":>/xor_overlayfs;"
|
||||
fi
|
||||
overlayfs="required"
|
||||
setup="yes"
|
||||
fi
|
||||
fi
|
||||
@@ -157,19 +157,24 @@ do_live_overlay() {
|
||||
[ -d /run/initramfs/overlayfs$pathspec/../ovlwork ]; then
|
||||
ln -s /run/initramfs/overlayfs$pathspec /run/overlayfs$opt
|
||||
ln -s /run/initramfs/overlayfs$pathspec/../ovlwork /run/ovlwork$opt
|
||||
if [ -z "$overlayfs" ]; then
|
||||
overlayfs="yes"
|
||||
[ -n "$DRACUT_SYSTEMD" ] && reloadsysrootmountunit="yes"
|
||||
if [ -z "$overlayfs" ] && [ -n "$DRACUT_SYSTEMD" ]; then
|
||||
reloadsysrootmountunit=":>/xor_overlayfs;"
|
||||
fi
|
||||
overlayfs="required"
|
||||
setup="yes"
|
||||
fi
|
||||
fi
|
||||
if [ -n "$overlayfs" ]; then
|
||||
modprobe overlay
|
||||
if [ $? != 0 ]; then
|
||||
if [ "$overlayfs" = required ]; then
|
||||
die "OverlayFS is required but not available."
|
||||
exit 1
|
||||
fi
|
||||
[ -n "$DRACUT_SYSTEMD" ] && reloadsysrootmountunit=":>/xor_overlayfs;"
|
||||
m='OverlayFS is not available; using temporary Device-mapper overlay.'
|
||||
info $m
|
||||
unset -v overlayfs setup
|
||||
[ -n "$reloadsysrootmountunit" ] && unset -v reloadsysrootmountunit
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -181,7 +186,7 @@ do_live_overlay() {
|
||||
m=' Unable to find a persistent overlay; using a temporary one.'
|
||||
m="$m"$'\n All root filesystem changes will be lost on shutdown.'
|
||||
m="$m"$'\n Press [Enter] to continue.'
|
||||
echo -e "\n\n\n\n${m}\n\n\n" > /dev/kmsg
|
||||
printf "\n\n\n\n${m}\n\n\n" > /dev/kmsg
|
||||
if [ -n "$DRACUT_SYSTEMD" ]; then
|
||||
if type plymouth >/dev/null 2>&1 && plymouth --ping ; then
|
||||
if getargbool 0 rhgb || getargbool 0 splash ; then
|
||||
@@ -203,6 +208,11 @@ do_live_overlay() {
|
||||
if [ -n "$overlayfs" ]; then
|
||||
mkdir -m 0755 /run/overlayfs
|
||||
mkdir -m 0755 /run/ovlwork
|
||||
if [ -n "$readonly_overlay" ] && ! [ -h /run/overlayfs-r ]; then
|
||||
info "No persistent overlay found."
|
||||
unset -v readonly_overlay
|
||||
[ -n "$DRACUT_SYSTEMD" ] && reloadsysrootmountunit="${reloadsysrootmountunit}:>/xor_readonly;"
|
||||
fi
|
||||
else
|
||||
dd if=/dev/null of=/overlay bs=1024 count=1 seek=$((overlay_size*1024)) 2> /dev/null
|
||||
if [ -n "$setup" -a -n "$readonly_overlay" ]; then
|
||||
@@ -250,14 +260,13 @@ do_live_overlay() {
|
||||
echo 0 $sz snapshot $base $over PO 8 | dmsetup create live-rw
|
||||
fi
|
||||
|
||||
# Create a device that always points to a ro base image
|
||||
if [ -n "$overlayfs" ]; then
|
||||
BASE_LOOPDUP=$(losetup -f --show -r $BASE_LOOPDEV)
|
||||
echo 0 $sz linear $BASE_LOOPDUP 0 | dmsetup create --readonly live-base
|
||||
else
|
||||
# Create a device for the ro base of overlayed file systems.
|
||||
if [ -z "$overlayfs" ]; then
|
||||
echo 0 $sz linear $BASE_LOOPDEV 0 | dmsetup create --readonly live-base
|
||||
fi
|
||||
ln -s $BASE_LOOPDEV /dev/live-base
|
||||
}
|
||||
# end do_live_overlay()
|
||||
|
||||
# we might have a genMinInstDelta delta file for anaconda to take advantage of
|
||||
if [ -e /run/initramfs/live/${live_dir}/osmin.img ]; then
|
||||
@@ -291,10 +300,21 @@ if [ -e "$SQUASHED" ]; then
|
||||
mkdir -m 0755 -p /run/initramfs/squashfs
|
||||
mount -n -t squashfs -o ro $SQUASHED_LOOPDEV /run/initramfs/squashfs
|
||||
|
||||
if [ -f /run/initramfs/squashfs/LiveOS/rootfs.img ]; then
|
||||
FSIMG="/run/initramfs/squashfs/LiveOS/rootfs.img"
|
||||
elif [ -f /run/initramfs/squashfs/LiveOS/ext3fs.img ]; then
|
||||
FSIMG="/run/initramfs/squashfs/LiveOS/ext3fs.img"
|
||||
if [ -d /run/initramfs/squashfs/LiveOS ]; then
|
||||
if [ -f /run/initramfs/squashfs/LiveOS/rootfs.img ]; then
|
||||
FSIMG="/run/initramfs/squashfs/LiveOS/rootfs.img"
|
||||
elif [ -f /run/initramfs/squashfs/LiveOS/ext3fs.img ]; then
|
||||
FSIMG="/run/initramfs/squashfs/LiveOS/ext3fs.img"
|
||||
fi
|
||||
elif [ -d /run/initramfs/squashfs/proc ]; then
|
||||
FSIMG=$SQUASHED
|
||||
if [ -z "$overlayfs" ] && [ -n "$DRACUT_SYSTEMD" ]; then
|
||||
reloadsysrootmountunit=":>/xor_overlayfs;"
|
||||
fi
|
||||
overlayfs="required"
|
||||
else
|
||||
die "Failed to find a root filesystem in $SQUASHED."
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
# we might have an embedded fs image to use as rootfs (uncompressed live)
|
||||
@@ -312,8 +332,8 @@ else
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -n "$FSIMG" ] ; then
|
||||
if [ -n "$writable_fsimg" ] ; then
|
||||
if [ -n "$FSIMG" ]; then
|
||||
if [ -n "$writable_fsimg" ]; then
|
||||
# mount the provided filesystem read/write
|
||||
echo "Unpacking live filesystem (may take some time)" > /dev/kmsg
|
||||
mkdir -m 0755 /run/initramfs/fsimg/
|
||||
@@ -336,9 +356,13 @@ if [ -n "$FSIMG" ] ; then
|
||||
setup=yes
|
||||
fi
|
||||
fi
|
||||
BASE_LOOPDEV=$(losetup -f --show $opt $FSIMG)
|
||||
sz=$(blockdev --getsz $BASE_LOOPDEV)
|
||||
if [ "$setup" == rw ]; then
|
||||
if [ "$FSIMG" = "$SQUASHED" ]; then
|
||||
BASE_LOOPDEV=$SQUASHED_LOOPDEV
|
||||
else
|
||||
BASE_LOOPDEV=$(losetup -f --show $opt $FSIMG)
|
||||
sz=$(blockdev --getsz $BASE_LOOPDEV)
|
||||
fi
|
||||
if [ "$setup" = rw ]; then
|
||||
echo 0 $sz linear $BASE_LOOPDEV 0 | dmsetup create live-rw
|
||||
else
|
||||
# Add a DM snapshot or OverlayFS for writes.
|
||||
@@ -346,8 +370,6 @@ if [ -n "$FSIMG" ] ; then
|
||||
fi
|
||||
fi
|
||||
|
||||
[ -e "$SQUASHED" ] && [ -z "$overlayfs" ] && umount -l /run/initramfs/squashfs
|
||||
|
||||
if [ -b "$OSMIN_LOOPDEV" ]; then
|
||||
# set up the devicemapper snapshot device, which will merge
|
||||
# the normal live fs image, and the delta, into a minimzied fs image
|
||||
@@ -355,7 +377,7 @@ if [ -b "$OSMIN_LOOPDEV" ]; then
|
||||
fi
|
||||
|
||||
if [ -n "$reloadsysrootmountunit" ]; then
|
||||
> /xor_overlayfs
|
||||
eval "$reloadsysrootmountunit"
|
||||
systemctl daemon-reload
|
||||
fi
|
||||
|
||||
@@ -363,33 +385,33 @@ ROOTFLAGS="$(getarg rootflags)"
|
||||
|
||||
if [ -n "$overlayfs" ]; then
|
||||
mkdir -m 0755 /run/rootfsbase
|
||||
if [ -n "$reset_overlay" ] && [ -L /run/overlayfs ]; then
|
||||
if [ -n "$reset_overlay" ] && [ -h /run/overlayfs ]; then
|
||||
ovlfs=$(readlink /run/overlayfs)
|
||||
info "Resetting the OverlayFS overlay directory."
|
||||
rm -r -- ${ovlfs}/* ${ovlfs}/.* >/dev/null 2>&1
|
||||
fi
|
||||
if [ -n "$readonly_overlay" ]; then
|
||||
mkdir -m 0755 /run/rootfsbase-r
|
||||
mount -r $FSIMG /run/rootfsbase-r
|
||||
mount -t overlay LiveOS_rootfs-r -oro,lowerdir=/run/overlayfs-r:/run/rootfsbase-r /run/rootfsbase
|
||||
if [ -n "$readonly_overlay" ] && [ -h /run/overlayfs-r ]; then
|
||||
ovlfs=lowerdir=/run/overlayfs-r:/run/rootfsbase
|
||||
else
|
||||
mount -r $FSIMG /run/rootfsbase
|
||||
ovlfs=lowerdir=/run/rootfsbase
|
||||
fi
|
||||
mount -r $FSIMG /run/rootfsbase
|
||||
if [ -z "$DRACUT_SYSTEMD" ]; then
|
||||
#FIXME What to link to /dev/root? Is it even needed?
|
||||
printf 'mount -t overlay LiveOS_rootfs -o%s,%s %s\n' "$ROOTFLAGS" \
|
||||
'lowerdir=/run/rootfsbase,upperdir=/run/overlayfs,workdir=/run/ovlwork' \
|
||||
"$ovlfs",upperdir=/run/overlayfs,workdir=/run/ovlwork \
|
||||
"$NEWROOT" > $hookdir/mount/01-$$-live.sh
|
||||
fi
|
||||
else
|
||||
ln -s /dev/mapper/live-rw /dev/root
|
||||
if [ -z "$DRACUT_SYSTEMD" ]; then
|
||||
[ -n "$ROOTFLAGS" ] && ROOTFLAGS="-o $ROOTFLAGS"
|
||||
printf 'mount %s /dev/mapper/live-rw %s\n' "$ROOTFLAGS" "$NEWROOT" > $hookdir/mount/01-$$-live.sh
|
||||
fi
|
||||
ln -s $BASE_LOOPDEV /run/rootfsbase
|
||||
fi
|
||||
[ -e "$SQUASHED" ] && umount -l /run/initramfs/squashfs
|
||||
|
||||
ln -s null /dev/root
|
||||
|
||||
need_shutdown
|
||||
|
||||
exit 0
|
||||
|
||||
|
@@ -22,7 +22,7 @@ installkernel() {
|
||||
|
||||
# called by dracut
|
||||
install() {
|
||||
inst_multiple umount dmsetup blkid dd losetup grep blockdev find
|
||||
inst_multiple umount dmsetup blkid dd losetup blockdev find
|
||||
inst_multiple -o checkisomd5
|
||||
inst_hook cmdline 30 "$moddir/parse-dmsquash-live.sh"
|
||||
inst_hook cmdline 31 "$moddir/parse-iso-scan.sh"
|
||||
|
@@ -20,12 +20,12 @@ modprobe -q loop
|
||||
case "$liveroot" in
|
||||
live:LABEL=*|LABEL=*) \
|
||||
root="${root#live:}"
|
||||
root="$(echo $root | sed 's,/,\\x2f,g')"
|
||||
root="${root//\//\\x2f}"
|
||||
root="live:/dev/disk/by-label/${root#LABEL=}"
|
||||
rootok=1 ;;
|
||||
live:CDLABEL=*|CDLABEL=*) \
|
||||
root="${root#live:}"
|
||||
root="$(echo $root | sed 's,/,\\x2f,g')"
|
||||
root="${root//\//\\x2f}"
|
||||
root="live:/dev/disk/by-label/${root#CDLABEL=}"
|
||||
rootok=1 ;;
|
||||
live:UUID=*|UUID=*) \
|
||||
@@ -57,6 +57,6 @@ info "root was $liveroot, is now $root"
|
||||
# make sure that init doesn't complain
|
||||
[ -z "$root" ] && root="live"
|
||||
|
||||
wait_for_dev -n /run/rootfsbase
|
||||
wait_for_dev -n /dev/root
|
||||
|
||||
return 0
|
||||
|
194
modules.d/90kernel-modules-extra/module-setup.sh
Executable file
194
modules.d/90kernel-modules-extra/module-setup.sh
Executable file
@@ -0,0 +1,194 @@
|
||||
#!/bin/bash
|
||||
|
||||
# called by dracut
|
||||
#
|
||||
# Parses depmod configuration and calls instmods for out-of-tree kernel
|
||||
# modules found. Specifically, kernel modules inside directories that
|
||||
# come from the following places are included (if these kernel modules
|
||||
# are present in modules.dep):
|
||||
# - "search" configuration option;
|
||||
# - "override" configuration option (matching an exact file name constructed
|
||||
# by concatenating the provided directory and the kernel module name);
|
||||
# - "external" configuration option (if "external" is a part of "search"
|
||||
# configuration).
|
||||
# (See depmod.d(5) for details.)
|
||||
#
|
||||
# This module has the following variables available for configuration:
|
||||
# - "depmod_modules_dep" - Path to the modules.dep file
|
||||
# ("$srcmods/modules.dep" by default);
|
||||
# - "depmod_module_dir" - Directory containing kernel modules ("$srcmods"
|
||||
# by default);
|
||||
# - "depmod_configs" - array of depmod configuration paths to parse
|
||||
# (as supplied to depmod -C, ("/run/depmod.d/"
|
||||
# "/etc/depmod.d/" "/lib/depmod.d/") by default).
|
||||
installkernel()
|
||||
{
|
||||
: "${depmod_modules_dep:=$srcmods/modules.dep}"
|
||||
: "${depmod_module_dir:=$srcmods}"
|
||||
|
||||
[[ -f "${depmod_modules_dep}" ]] || return 0
|
||||
|
||||
# Message printers with custom prefix
|
||||
local mod_name="kernel-modules-extra"
|
||||
prinfo() { dinfo " ${mod_name}: $*"; }
|
||||
prdebug() { ddebug " ${mod_name}: $*"; }
|
||||
|
||||
# Escape a string for usage as a part of extended regular expression.
|
||||
# $1 - string to escape
|
||||
re_escape() {
|
||||
printf "%s" "$1" | sed 's/\([.+?^$\/\\|()\[]\|\]\)/\\\0/'
|
||||
}
|
||||
|
||||
local OLDIFS
|
||||
local cfg
|
||||
local cfgs=()
|
||||
local search_list=""
|
||||
local overrides=()
|
||||
local external_dirs=()
|
||||
local e f
|
||||
|
||||
|
||||
## Gathering and sorting configuration file list
|
||||
|
||||
[ -n "${depmod_configs[@]-}" ] \
|
||||
|| depmod_configs=(/run/depmod.d/ /etc/depmod.d/ /lib/depmod.d/)
|
||||
|
||||
for cfg in "${depmod_configs[@]}"; do
|
||||
[ -e "$cfg" ] || {
|
||||
prdebug "configuration source \"$cfg\" does not exist"
|
||||
continue
|
||||
}
|
||||
|
||||
# '/' is used as a separator between configuration name and
|
||||
# configuration path
|
||||
if [ -d "$cfg" ]; then
|
||||
for f in "$cfg/"*; do
|
||||
[[ -e "$f" && ! -d "$f" ]] || {
|
||||
prdebug "configuration source" \
|
||||
"\"$cfg\" is ignored" \
|
||||
"(directory or doesn't exist)"
|
||||
continue
|
||||
}
|
||||
cfgs+=("$(basename "$f")/$f")
|
||||
done
|
||||
else
|
||||
cfgs+=("$(basename "$cfg")/$cfg")
|
||||
fi
|
||||
done
|
||||
|
||||
OLDIFS="$IFS"
|
||||
IFS=$'\n'
|
||||
LANG=C cfgs=($(printf '%s\n' "${cfgs[@]}" \
|
||||
| sort -u -k1,1 -t '/' | cut -f 2- -d '/'))
|
||||
IFS="$OLDIFS"
|
||||
|
||||
|
||||
## Parse configurations
|
||||
|
||||
for cfg in "${cfgs[@]}"; do
|
||||
prdebug "parsing configuration file \"$cfg\""
|
||||
|
||||
local k v mod kverpat path
|
||||
while read -r k v; do
|
||||
case "$k" in
|
||||
search)
|
||||
search_list="$search_list $v"
|
||||
prdebug "$cfg: added \"$v\" to the list of" \
|
||||
"search directories"
|
||||
;;
|
||||
override) # module_name kver_pattern dir
|
||||
read -r mod kverpat path <<<"$v"
|
||||
|
||||
if [[ ! "$mod" || ! "$kverpat" || ! "$path" ]]
|
||||
then
|
||||
prinfo "$cfg: ignoring incorrect" \
|
||||
"override option: \"$k $v\""
|
||||
continue
|
||||
fi
|
||||
|
||||
if [[ '*' = "$kverpat" \
|
||||
|| "$kernel" =~ "$kverpat" ]]
|
||||
then
|
||||
overrides+=("${path}/${mod}")
|
||||
|
||||
prdebug "$cfg: added override" \
|
||||
"\"${path}/${mod}\""
|
||||
else
|
||||
prdebug "$cfg: override \"$v\" is" \
|
||||
"ignored since \"$kverpat\"" \
|
||||
"doesn't match \"$kernel\""
|
||||
fi
|
||||
;;
|
||||
external) # kverpat dir
|
||||
read -r kverpat path <<<"$v"
|
||||
|
||||
if [[ ! "$kverpat" || ! "$path" ]]; then
|
||||
prinfo "$cfg: ignoring incorrect" \
|
||||
"external option: \"$k $v\""
|
||||
continue
|
||||
fi
|
||||
|
||||
if [[ '*' = "$kverpat" \
|
||||
|| "$kernel" =~ "$kverpat" ]]
|
||||
then
|
||||
external_dirs+=("$path")
|
||||
|
||||
prdebug "$cfg: added external" \
|
||||
"directory \"$path\""
|
||||
else
|
||||
prdebug "$cfg: external directory" \
|
||||
"\"$path\" is ignored since" \
|
||||
"\"$kverpat\" doesn't match " \
|
||||
"\"$kernel\""
|
||||
fi
|
||||
;;
|
||||
'#'*|'') # comments and empty strings
|
||||
;;
|
||||
include|make_map_files) # ignored by depmod
|
||||
;;
|
||||
*)
|
||||
prinfo "$cfg: unknown depmod configuration" \
|
||||
"option \"$k $v\""
|
||||
;;
|
||||
esac
|
||||
done < "$cfg"
|
||||
done
|
||||
|
||||
# "updates built-in" is the default search list
|
||||
: "${search_list:=updates}"
|
||||
|
||||
|
||||
## Build a list of regular expressions for grepping modules.dep
|
||||
|
||||
local pathlist=()
|
||||
for f in "${overrides[@]}"; do
|
||||
pathlist+=("^$(re_escape "$f")")
|
||||
done
|
||||
|
||||
for f in $(printf "%s" "$search_list"); do
|
||||
# Ignoring builtin modules
|
||||
[ "built-in" != "$f" ] || continue
|
||||
|
||||
if [ "external" = "$f" ]; then
|
||||
for e in "${external_dirs[@]}"; do
|
||||
pathlist+=("$(re_escape "${e%/}")/[^:]+")
|
||||
done
|
||||
fi
|
||||
|
||||
pathlist+=("$(re_escape "${f%/}")/[^:]+")
|
||||
done
|
||||
|
||||
|
||||
## Filter modules.dep, canonicalise the resulting filenames and supply
|
||||
## them to instmods.
|
||||
|
||||
[ 0 -lt "${#pathlist[@]}" ] || return 0
|
||||
|
||||
printf "^%s\.ko(\.gz|\.bz2|\.xz)?:\n" "${pathlist[@]}" \
|
||||
| (LANG=C grep -E -o -f - -- "$depmod_modules_dep" || exit 0) \
|
||||
| tr -d ':' \
|
||||
| (cd "$depmod_module_dir" || exit; xargs -r realpath -se --) \
|
||||
| instmods || return 1
|
||||
|
||||
return 0
|
||||
}
|
@@ -25,7 +25,7 @@ installkernel() {
|
||||
ohci-hcd ohci-pci \
|
||||
uhci-hcd \
|
||||
xhci-hcd xhci-pci xhci-plat-hcd \
|
||||
pinctrl-cherryview \
|
||||
"=drivers/pinctrl" \
|
||||
${NULL}
|
||||
|
||||
hostonly=$(optional_hostonly) instmods \
|
||||
@@ -41,7 +41,7 @@ installkernel() {
|
||||
yenta_socket scsi_dh_rdac scsi_dh_emc scsi_dh_alua \
|
||||
atkbd i8042 usbhid firewire-ohci pcmcia hv-vmbus \
|
||||
virtio virtio_blk virtio_ring virtio_pci virtio_scsi \
|
||||
"=drivers/pcmcia" =ide nvme vmd
|
||||
"=drivers/pcmcia" =ide nvme vmd nfit
|
||||
|
||||
if [[ "$(uname -m)" == arm* || "$(uname -m)" == aarch64 ]]; then
|
||||
# arm/aarch64 specific modules
|
||||
@@ -50,6 +50,7 @@ installkernel() {
|
||||
"=drivers/clk" \
|
||||
"=drivers/dma" \
|
||||
"=drivers/extcon" \
|
||||
"=drivers/gpio" \
|
||||
"=drivers/hwspinlock" \
|
||||
"=drivers/i2c/busses" \
|
||||
"=drivers/mfd" \
|
||||
|
@@ -28,7 +28,7 @@ installkernel() {
|
||||
=drivers/net/phy \
|
||||
=drivers/net/team \
|
||||
=drivers/net/ethernet \
|
||||
ecb arc4 bridge stp llc ipv6 bonding 8021q af_packet virtio_net xennet
|
||||
ecb arc4 bridge stp llc ipv6 bonding 8021q ipvlan macvlan af_packet virtio_net xennet
|
||||
hostonly="" instmods iscsi_ibft crc32c iscsi_boot_sysfs
|
||||
}
|
||||
|
||||
|
@@ -43,19 +43,36 @@ GENERATOR_DIR="$2"
|
||||
|
||||
[ -d "$GENERATOR_DIR" ] || mkdir "$GENERATOR_DIR"
|
||||
|
||||
getargbool 0 rd.live.overlay.readonly -d -y readonly_overlay && readonly_overlay="--readonly" || readonly_overlay=""
|
||||
getargbool 0 rd.live.overlay.overlayfs && overlayfs="yes"
|
||||
[ -e /xor_overlayfs ] && xor_overlayfs="yes"
|
||||
[ -e /xor_readonly ] && xor_readonly="--readonly"
|
||||
ROOTFLAGS="$(getarg rootflags)"
|
||||
{
|
||||
echo "[Unit]"
|
||||
echo "Before=initrd-root-fs.target"
|
||||
echo "[Mount]"
|
||||
echo "Where=/sysroot"
|
||||
echo "What=/dev/mapper/live-rw"
|
||||
[ -n "$ROOTFLAGS" ] && echo "Options=${ROOTFLAGS}"
|
||||
if [ "$overlayfs$xor_overlayfs" = "yes" ]; then
|
||||
echo "What=LiveOS_rootfs"
|
||||
if [ "$readonly_overlay$xor_readonly" = "--readonly" ]; then
|
||||
ovlfs=lowerdir=/run/overlayfs-r:/run/rootfsbase
|
||||
else
|
||||
ovlfs=lowerdir=/run/rootfsbase
|
||||
fi
|
||||
echo "Options=${ROOTFLAGS},${ovlfs},upperdir=/run/overlayfs,workdir=/run/ovlwork"
|
||||
echo "Type=overlay"
|
||||
_dev=LiveOS_rootfs
|
||||
else
|
||||
echo "What=/dev/mapper/live-rw"
|
||||
[ -n "$ROOTFLAGS" ] && echo "Options=${ROOTFLAGS}"
|
||||
_dev=$'dev-mapper-live\\x2drw'
|
||||
fi
|
||||
} > "$GENERATOR_DIR"/sysroot.mount
|
||||
|
||||
mkdir -p "$GENERATOR_DIR/dev-mapper-live\x2drw.device.d"
|
||||
mkdir -p "$GENERATOR_DIR/$_dev.device.d"
|
||||
{
|
||||
echo "[Unit]"
|
||||
echo "JobTimeoutSec=3000"
|
||||
echo "JobRunningTimeoutSec=3000"
|
||||
} > "$GENERATOR_DIR/dev-mapper-live\x2drw.device.d/timeout.conf"
|
||||
} > "$GENERATOR_DIR/$_dev.device.d/timeout.conf"
|
||||
|
@@ -7,7 +7,7 @@
|
||||
SUBSYSTEM!="block", GOTO="lvm_end"
|
||||
ACTION!="add|change", GOTO="lvm_end"
|
||||
# Also don't process disks that are slated to be a multipath device
|
||||
ENV{DM_MULTIPATH_DEVICE_PATH}=="?*", GOTO="lvm_end"
|
||||
ENV{DM_MULTIPATH_DEVICE_PATH}=="1", GOTO="lvm_end"
|
||||
KERNEL=="dm-[0-9]*", ACTION=="add", GOTO="lvm_end"
|
||||
ENV{ID_FS_TYPE}!="LVM?_member", GOTO="lvm_end"
|
||||
|
||||
|
@@ -1,7 +1,7 @@
|
||||
SUBSYSTEM!="block", GOTO="md_end"
|
||||
ACTION!="add|change", GOTO="md_end"
|
||||
# Also don't process disks that are slated to be a multipath device
|
||||
ENV{DM_MULTIPATH_DEVICE_PATH}=="?*", GOTO="md_end"
|
||||
ENV{DM_MULTIPATH_DEVICE_PATH}=="1", GOTO="md_end"
|
||||
|
||||
KERNEL!="md[0-9]*|md_d[0-9]*|md/*", KERNEL!="md*", GOTO="md_end"
|
||||
|
||||
|
@@ -9,7 +9,7 @@ KERNEL=="md*", ENV{ID_FS_TYPE}!="linux_raid_member", GOTO="md_end"
|
||||
KERNEL=="md*", ACTION!="change", GOTO="md_end"
|
||||
|
||||
# Also don't process disks that are slated to be a multipath device
|
||||
ENV{DM_MULTIPATH_DEVICE_PATH}=="?*", GOTO="md_end"
|
||||
ENV{DM_MULTIPATH_DEVICE_PATH}=="1", GOTO="md_end"
|
||||
|
||||
ENV{ID_FS_TYPE}=="ddf_raid_member|isw_raid_member|linux_raid_member", GOTO="md_try"
|
||||
GOTO="md_end"
|
||||
|
@@ -39,6 +39,9 @@ _md_force_run() {
|
||||
_offroot=$(strstr "$(mdadm --help-options 2>&1)" offroot && echo --offroot)
|
||||
|
||||
if [ -n "$_MD_UUID" ]; then
|
||||
_MD_UUID=$(str_replace "$_MD_UUID" "-" "")
|
||||
_MD_UUID=$(str_replace "$_MD_UUID" ":" "")
|
||||
|
||||
for _md in /dev/md[0-9_]*; do
|
||||
[ -b "$_md" ] || continue
|
||||
_UUID=$(
|
||||
@@ -50,6 +53,7 @@ _md_force_run() {
|
||||
)
|
||||
|
||||
[ -z "$_UUID" ] && continue
|
||||
_UUID=$(str_replace "$_UUID" ":" "")
|
||||
|
||||
# check if we should handle this device
|
||||
strstr " $_MD_UUID " " $_UUID " || continue
|
||||
|
@@ -1,6 +1,9 @@
|
||||
#!/bin/sh
|
||||
|
||||
MD_UUID=$(getargs rd.md.uuid -d rd_MD_UUID=)
|
||||
# normalize the uuid
|
||||
MD_UUID=$(str_replace "$MD_UUID" "-" "")
|
||||
MD_UUID=$(str_replace "$MD_UUID" ":" "")
|
||||
|
||||
if ( ! [ -n "$MD_UUID" ] && ! getargbool 0 rd.auto ) || ! getargbool 1 rd.md -d -n rd_NO_MD; then
|
||||
info "rd.md=0: removing MD RAID activation"
|
||||
@@ -12,10 +15,12 @@ else
|
||||
[ -e "$f" ] || continue
|
||||
while read line || [ -n "$line" ]; do
|
||||
if [ "${line%%UUID CHECK}" != "$line" ]; then
|
||||
for uuid in $MD_UUID; do
|
||||
printf 'ENV{ID_FS_UUID}=="%s", GOTO="md_uuid_ok"\n' "$(expr substr $uuid 1 8)-$(expr substr $uuid 9 4)-$(expr substr $uuid 13 4)-$(expr substr $uuid 17 4)-$(expr substr $uuid 21 12)"
|
||||
done;
|
||||
printf 'IMPORT{program}="/sbin/mdadm --examine --export $tempnode"\n'
|
||||
for uuid in $MD_UUID; do
|
||||
printf 'ENV{MD_UUID}=="%s", GOTO="md_uuid_ok"\n' $uuid
|
||||
printf 'ENV{ID_FS_UUID}=="%s", GOTO="md_uuid_ok"\n' $uuid
|
||||
printf 'ENV{MD_UUID}=="%s", GOTO="md_uuid_ok"\n' "$(expr substr $uuid 1 8):$(expr substr $uuid 9 8):$(expr substr $uuid 17 8):$(expr substr $uuid 25 8)"
|
||||
done;
|
||||
printf 'GOTO="md_end"\n'
|
||||
printf 'LABEL="md_uuid_ok"\n'
|
||||
@@ -26,11 +31,7 @@ else
|
||||
mv "${f}.new" "$f"
|
||||
done
|
||||
for uuid in $MD_UUID; do
|
||||
if strstr "$uuid" "-"; then
|
||||
# convert ID_FS_UUID to MD_UUID format
|
||||
uuid=$(str_replace "$uuid" "-" "")
|
||||
uuid="$(expr substr $uuid 1 8):$(expr substr $uuid 9 8):$(expr substr $uuid 17 8):$(expr substr $uuid 25 8)"
|
||||
fi
|
||||
uuid="$(expr substr $uuid 1 8):$(expr substr $uuid 9 8):$(expr substr $uuid 17 8):$(expr substr $uuid 25 8)"
|
||||
wait_for_dev "/dev/disk/by-id/md-uuid-${uuid}"
|
||||
done
|
||||
fi
|
||||
|
@@ -1,7 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
for i in $(multipath -l -v1); do
|
||||
if ! $(dmsetup table $i | sed -n '/.*queue_if_no_path.*/q1') ; then
|
||||
if ! dmsetup table $i | sed -n '/.*queue_if_no_path.*/q1' ; then
|
||||
dmsetup message $i 0 fail_if_no_path
|
||||
fi
|
||||
done
|
||||
|
@@ -2,7 +2,7 @@
|
||||
|
||||
# called by dracut
|
||||
check() {
|
||||
require_binaries stratisd-init thin_check thin_repair || return 1
|
||||
require_binaries stratisd-init thin_check thin_repair mkfs.xfs xfs_admin xfs_growfs || return 1
|
||||
return 255
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ installkernel() {
|
||||
# called by dracut
|
||||
install() {
|
||||
|
||||
inst_multiple stratisd-init thin_check thin_repair
|
||||
inst_multiple stratisd-init thin_check thin_repair mkfs.xfs xfs_admin xfs_growfs
|
||||
|
||||
if dracut_module_included "systemd"; then
|
||||
inst_simple "${moddir}/stratisd-init.service" "${systemdsystemunitdir}/stratisd-init.service"
|
||||
|
0
modules.d/95fcoe/cleanup-fcoe.sh
Normal file → Executable file
0
modules.d/95fcoe/cleanup-fcoe.sh
Normal file → Executable file
@@ -18,7 +18,7 @@
|
||||
# If it's not set we don't continue
|
||||
[ -z "$fcoe" ] && return
|
||||
|
||||
[ -e /sys/bus/fcoe/ctlr_create ] || modprobe -b -a fcoe || die "FCoE requested but kernel/initrd does not support FCoE"
|
||||
[ -e /sys/bus/fcoe/ctlr_create ] || modprobe -b -a fcoe || modprobe -b -a libfcoe || die "FCoE requested but kernel/initrd does not support FCoE"
|
||||
|
||||
initqueue --onetime modprobe -b -q bnx2fc
|
||||
|
||||
|
@@ -109,7 +109,7 @@ handle_netroot()
|
||||
arg=$(getarg rd.iscsi.in.password -d iscsi_in_password=)
|
||||
[ -n "$arg" ] && iscsi_in_password=$arg
|
||||
for p in $(getargs rd.iscsi.param -d iscsi_param); do
|
||||
iscsi_param="$iscsi_param $p"
|
||||
iscsi_param="$iscsi_param $p"
|
||||
done
|
||||
|
||||
parse_iscsi_root "$1" || return 1
|
||||
@@ -194,6 +194,12 @@ handle_netroot()
|
||||
sleep 1
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -z "$DRACUT_SYSTEMD" ]; then
|
||||
iscsid
|
||||
sleep 2
|
||||
fi
|
||||
|
||||
# FIXME $iscsi_protocol??
|
||||
|
||||
if [ "$root" = "dhcp" ] || [ "$netroot" = "dhcp" ]; then
|
||||
@@ -208,28 +214,31 @@ handle_netroot()
|
||||
echo "iscsi_lun=$iscsi_lun . /bin/mount-lun.sh " > $hookdir/mount/01-$$-iscsi.sh
|
||||
fi
|
||||
|
||||
### ToDo: Upstream calls systemd-run - Shall we, do we have to port this?
|
||||
|
||||
targets=$(iscsiadm -m discovery -t st -p $iscsi_target_ip:${iscsi_target_port:+$iscsi_target_port} | sed 's/^.*iqn/iqn/')
|
||||
[ -z "$targets" ] && echo "Target discovery to $iscsi_target_ip:${iscsi_target_port:+$iscsi_target_port} failed with status $?" && exit 1
|
||||
|
||||
for target in $iscsi_target_name; do
|
||||
case "$targets" in
|
||||
*$target*)
|
||||
EXTRA=""
|
||||
if [ -n "$iscsi_iface_name" ]; then
|
||||
$(iscsiadm -m iface -I $iscsi_iface_name --op=new)
|
||||
[ -n "$iscsi_initiator" ] && $(iscsiadm -m iface -I $iscsi_iface_name --op=update --name=iface.initiatorname --value=$iscsi_initiator)
|
||||
[ -n "$iscsi_netdev_name" ] && $(iscsiadm -m iface -I $iscsi_iface_name --op=update --name=iface.net_ifacename --value=$iscsi_netdev_name)
|
||||
COMMAND="iscsiadm -m node -T $target -p $iscsi_target_ip${iscsi_target_port:+:$iscsi_target_port} -I $iscsi_iface_name --op=update"
|
||||
else
|
||||
COMMAND="iscsiadm -m node -T $target -p $iscsi_target_ip${iscsi_target_port:+:$iscsi_target_port} --op=update"
|
||||
iscsiadm -m iface -I $iscsi_iface_name --op=new
|
||||
EXTRA=" ${iscsi_netdev_name:+--name=iface.net_ifacename --value=$iscsi_netdev_name} "
|
||||
EXTRA="$EXTRA ${iscsi_initiator:+--name=iface.initiatorname --value=$iscsi_initiator} "
|
||||
fi
|
||||
$($COMMAND --name=node.startup --value=onboot)
|
||||
[ -n "$iscsi_username" ] && $($COMMAND --name=node.session.auth.username --value=$iscsi_username)
|
||||
[ -n "$iscsi_password" ] && $($COMMAND --name=node.session.auth.password --value=$iscsi_password)
|
||||
[ -n "$iscsi_in_username" ] && $($COMMAND --name=node.session.auth.username_in --value=$iscsi_in_username)
|
||||
[ -n "$iscsi_in_password" ] && $($COMMAND --name=node.session.auth.password_in --value=$iscsi_in_password)
|
||||
[ -n "$iscsi_param" ] && for param in $iscsi_param; do $($COMMAND --name=${param%=*} --value=${param#*=}); done
|
||||
[ -n "$iscsi_param" ] && for param in $iscsi_param; do EXTRA="$EXTRA --name=${param%=*} --value=${param#*=}"; done
|
||||
|
||||
iscsiadm -m node -T $target \
|
||||
${iscsi_iface_name:+-I $iscsi_iface_name} \
|
||||
-p $iscsi_target_ip${iscsi_target_port:+:$iscsi_target_port} \
|
||||
--op=update \
|
||||
--name=node.startup --value=onboot \
|
||||
${iscsi_username:+ --name=node.session.auth.username --value=$iscsi_username} \
|
||||
${iscsi_password:+ --name=node.session.auth.password --value=$iscsi_password} \
|
||||
${iscsi_in_username:+--name=node.session.auth.username_in --value=$iscsi_in_username} \
|
||||
${iscsi_in_password:+--name=node.session.auth.password_in --value=$iscsi_in_password} \
|
||||
$EXTRA \
|
||||
$NULL
|
||||
;;
|
||||
*)
|
||||
;;
|
||||
|
@@ -4,7 +4,7 @@
|
||||
check() {
|
||||
local _rootdev
|
||||
# If our prerequisites are not met, fail anyways.
|
||||
require_binaries hostname iscsi-iname iscsiadm iscsid || return 1
|
||||
require_binaries iscsi-iname iscsiadm iscsid || return 1
|
||||
|
||||
# If hostonly was requested, fail the check if we are not actually
|
||||
# booting from root.
|
||||
@@ -206,10 +206,7 @@ cmdline() {
|
||||
install() {
|
||||
inst_multiple -o iscsiuio
|
||||
inst_libdir_file 'libgcc_s.so*'
|
||||
inst_multiple umount hostname iscsi-iname iscsiadm iscsid
|
||||
|
||||
ln -sf $systemdsystemunitdir/iscsid.socket $systemdsystemunitdir/sockets.target.wants/iscsid.socket
|
||||
ln -sf $systemdsystemunitdir/iscsiuio.socket $systemdsystemunitdir/sockets.target.wants/iscsiuio.socket
|
||||
inst_multiple umount iscsi-iname iscsiadm iscsid
|
||||
|
||||
inst_multiple -o \
|
||||
$systemdsystemunitdir/iscsid.socket \
|
||||
@@ -219,7 +216,11 @@ install() {
|
||||
$systemdsystemunitdir/sockets.target.wants/iscsid.socket \
|
||||
$systemdsystemunitdir/sockets.target.wants/iscsiuio.socket
|
||||
|
||||
[[ -d /etc/iscsi ]] && inst_dir $(/usr/bin/find /etc/iscsi)
|
||||
if [[ $hostonly ]]; then
|
||||
inst_dir $(/usr/bin/find /etc/iscsi)
|
||||
else
|
||||
inst_simple /etc/iscsi/iscsid.conf
|
||||
fi
|
||||
|
||||
# Detect iBFT and perform mandatory steps
|
||||
if [[ $hostonly_cmdline == "yes" ]] ; then
|
||||
@@ -243,6 +244,7 @@ install() {
|
||||
|
||||
mkdir -p "${initdir}/$systemdsystemunitdir/sockets.target.wants"
|
||||
for i in \
|
||||
iscsid.socket \
|
||||
iscsiuio.socket \
|
||||
; do
|
||||
ln_r "$systemdsystemunitdir/${i}" "$systemdsystemunitdir/sockets.target.wants/${i}"
|
||||
@@ -263,6 +265,23 @@ install() {
|
||||
echo "After=dracut-cmdline.service"
|
||||
echo "Before=dracut-initqueue.service"
|
||||
) > "${initdir}/$systemdsystemunitdir/iscsid.service.d/dracut.conf"
|
||||
|
||||
# The iscsi deamon does not need to wait for any storage inside initrd
|
||||
mkdir -p "${initdir}/$systemdsystemunitdir/iscsid.socket.d"
|
||||
(
|
||||
echo "[Unit]"
|
||||
echo "DefaultDependencies=no"
|
||||
echo "Conflicts=shutdown.target"
|
||||
echo "Before=shutdown.target sockets.target"
|
||||
) > "${initdir}/$systemdsystemunitdir/iscsid.socket.d/dracut.conf"
|
||||
mkdir -p "${initdir}/$systemdsystemunitdir/iscsiuio.socket.d"
|
||||
(
|
||||
echo "[Unit]"
|
||||
echo "DefaultDependencies=no"
|
||||
echo "Conflicts=shutdown.target"
|
||||
echo "Before=shutdown.target sockets.target"
|
||||
) > "${initdir}/$systemdsystemunitdir/iscsiuio.socket.d/dracut.conf"
|
||||
|
||||
fi
|
||||
inst_dir /var/lib/iscsi
|
||||
dracut_need_initqueue
|
||||
|
@@ -90,19 +90,13 @@ if [ -n "$iscsi_firmware" ]; then
|
||||
initqueue --unique --onetime --settled /sbin/iscsiroot online "iscsi:" "'$NEWROOT'"
|
||||
fi
|
||||
|
||||
if [ -z "$netroot" ] || ! [ "${netroot%%:*}" = "iscsi" ]; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
initqueue --unique --onetime --timeout /sbin/iscsiroot timeout "$netroot" "$NEWROOT"
|
||||
|
||||
initqueue --onetime modprobe --all -b -q qla4xxx cxgb3i cxgb4i bnx2i be2iscsi qedi
|
||||
|
||||
# ISCSI actually supported?
|
||||
if ! [ -e /sys/module/iscsi_tcp ]; then
|
||||
modprobe -b -q iscsi_tcp || die "iscsiroot requested but kernel/initrd does not support iscsi"
|
||||
fi
|
||||
|
||||
modprobe --all -b -q qla4xxx cxgb3i cxgb4i bnx2i be2iscsi
|
||||
|
||||
if [ -n "$netroot" ] && [ "$root" != "/dev/root" ] && [ "$root" != "dhcp" ]; then
|
||||
if ! getargbool 1 rd.neednet >/dev/null || ! getarg "ip="; then
|
||||
initqueue --unique --onetime --settled /sbin/iscsiroot dummy "'$netroot'" "'$NEWROOT'"
|
||||
@@ -113,14 +107,13 @@ if arg=$(getarg rd.iscsi.initiator -d iscsi_initiator=) && [ -n "$arg" ] && ! [
|
||||
iscsi_initiator=$arg
|
||||
echo "InitiatorName=$iscsi_initiator" > /run/initiatorname.iscsi
|
||||
ln -fs /run/initiatorname.iscsi /dev/.initiatorname.iscsi
|
||||
if ! [ -e /etc/iscsi/initiatorname.iscsi ]; then
|
||||
mkdir -p /etc/iscsi
|
||||
ln -fs /run/initiatorname.iscsi /etc/iscsi/initiatorname.iscsi
|
||||
if [ -n "$DRACUT_SYSTEMD" ]; then
|
||||
systemctl try-restart iscsid
|
||||
# FIXME: iscsid is not yet ready, when the service is :-/
|
||||
sleep 1
|
||||
fi
|
||||
rm -f /etc/iscsi/initiatorname.iscsi
|
||||
mkdir -p /etc/iscsi
|
||||
ln -fs /run/initiatorname.iscsi /etc/iscsi/initiatorname.iscsi
|
||||
if [ -n "$DRACUT_SYSTEMD" ]; then
|
||||
systemctl try-restart iscsid
|
||||
# FIXME: iscsid is not yet ready, when the service is :-/
|
||||
sleep 1
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -141,6 +134,11 @@ if [ -z $iscsi_initiator ] && [ -f /sys/firmware/ibft/initiator/initiator-name ]
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -z "$netroot" ] || ! [ "${netroot%%:*}" = "iscsi" ]; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
initqueue --unique --onetime --timeout /sbin/iscsiroot timeout "$netroot" "$NEWROOT"
|
||||
|
||||
for nroot in $(getargs netroot); do
|
||||
[ "${nroot%%:*}" = "iscsi" ] || continue
|
||||
|
@@ -1,7 +1,7 @@
|
||||
SUBSYSTEM!="block", GOTO="ps_end"
|
||||
ACTION!="add|change", GOTO="ps_end"
|
||||
# Also don't process disks that are slated to be a multipath device
|
||||
ENV{DM_MULTIPATH_DEVICE_PATH}=="?*", GOTO="ps_end"
|
||||
ENV{DM_MULTIPATH_DEVICE_PATH}=="1", GOTO="ps_end"
|
||||
|
||||
KERNEL=="cciss[0-9]*", IMPORT BLKID
|
||||
KERNEL=="nbd[0-9]*", IMPORT BLKID
|
||||
|
@@ -1,7 +1,7 @@
|
||||
SUBSYSTEM!="block", GOTO="pss_end"
|
||||
ACTION!="add|change", GOTO="pss_end"
|
||||
# Also don't process disks that are slated to be a multipath device
|
||||
ENV{DM_MULTIPATH_DEVICE_PATH}=="?*", GOTO="pss_end"
|
||||
ENV{DM_MULTIPATH_DEVICE_PATH}=="1", GOTO="pss_end"
|
||||
|
||||
ACTION=="change", KERNEL=="dm-[0-9]*", ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}!="1", GOTO="do_pss"
|
||||
KERNEL=="cciss[0-9]*", GOTO="do_pss"
|
||||
|
@@ -7,6 +7,8 @@ Description=dracut ask for additional cmdline parameters
|
||||
DefaultDependencies=no
|
||||
Before=dracut-cmdline.service
|
||||
After=systemd-journald.socket
|
||||
After=systemd-vconsole-setup.service
|
||||
Requires=systemd-vconsole-setup.service
|
||||
Wants=systemd-journald.socket
|
||||
ConditionPathExists=/usr/lib/initrd-release
|
||||
ConditionKernelCommandLine=|rd.cmdline=ask
|
||||
|
@@ -1060,7 +1060,7 @@ if ! command -v pidof >/dev/null 2>/dev/null; then
|
||||
debug_on
|
||||
return 1
|
||||
fi
|
||||
_exe=$(type -P "$1")
|
||||
_exe=$(command -v "$1")
|
||||
for i in /proc/*/exe; do
|
||||
[ -e "$i" ] || continue
|
||||
if [ -n "$_exe" ]; then
|
||||
|
@@ -63,13 +63,12 @@ install() {
|
||||
echo ro >> "${initdir}/etc/cmdline.d/base.conf"
|
||||
fi
|
||||
|
||||
local VERSION=""
|
||||
local PRETTY_NAME=""
|
||||
if [ -e /etc/os-release ]; then
|
||||
. /etc/os-release
|
||||
VERSION+=" "
|
||||
PRETTY_NAME+=" "
|
||||
else
|
||||
VERSION=""
|
||||
PRETTY_NAME=""
|
||||
[[ -n ${VERSION} ]] && VERSION+=" "
|
||||
[[ -n ${PRETTY_NAME} ]] && PRETTY_NAME+=" "
|
||||
fi
|
||||
NAME=dracut
|
||||
ID=dracut
|
||||
@@ -94,6 +93,9 @@ install() {
|
||||
|
||||
## save host_devs which we need bring up
|
||||
if [[ $hostonly_cmdline == "yes" ]]; then
|
||||
if [[ -n "${host_devs[@]}" ]]; then
|
||||
dracut_need_initqueue
|
||||
fi
|
||||
if [[ -f "$initdir/lib/dracut/need-initqueue" ]] || ! dracut_module_included "systemd"; then
|
||||
(
|
||||
if dracut_module_included "systemd"; then
|
||||
|
@@ -44,22 +44,22 @@ fsck_able() {
|
||||
;;
|
||||
ext?)
|
||||
type e2fsck >/dev/null 2>&1 &&
|
||||
_drv="_drv=e2fsck fsck_drv_com" &&
|
||||
_drv="fsck_drv_com e2fsck" &&
|
||||
return 0
|
||||
;;
|
||||
f2fs)
|
||||
type fsck.f2fs >/dev/null 2>&1 &&
|
||||
_drv="_drv=fsck.f2fs fsck_drv_com" &&
|
||||
_drv="fsck_drv_com fsck.f2fs" &&
|
||||
return 0
|
||||
;;
|
||||
jfs)
|
||||
type jfs_fsck >/dev/null 2>&1 &&
|
||||
_drv="_drv=jfs_fsck fsck_drv_com" &&
|
||||
_drv="fsck_drv_com jfs_fsck" &&
|
||||
return 0
|
||||
;;
|
||||
reiserfs)
|
||||
type reiserfsck >/dev/null 2>&1 &&
|
||||
_drv="_drv=reiserfsck fsck_drv_com" &&
|
||||
_drv="fsck_drv_com reiserfsck" &&
|
||||
return 0
|
||||
;;
|
||||
btrfs)
|
||||
@@ -70,12 +70,12 @@ fsck_able() {
|
||||
;;
|
||||
nfs*)
|
||||
# nfs can be a nop, returning success
|
||||
_drv="_drv=none :" &&
|
||||
_drv=":" &&
|
||||
return 0
|
||||
;;
|
||||
*)
|
||||
type fsck >/dev/null 2>&1 &&
|
||||
_drv="_drv=fsck fsck_drv_std" &&
|
||||
_drv="fsck_drv_std fsck" &&
|
||||
return 0
|
||||
;;
|
||||
esac
|
||||
@@ -97,6 +97,7 @@ fsck_drv_btrfs() {
|
||||
|
||||
# common code for checkers that follow usual subset of options and return codes
|
||||
fsck_drv_com() {
|
||||
local _drv="$1"
|
||||
local _ret
|
||||
local _out
|
||||
|
||||
|
9
modules.d/99squash/clear-squash.sh
Executable file
9
modules.d/99squash/clear-squash.sh
Executable file
@@ -0,0 +1,9 @@
|
||||
#!/bin/sh
|
||||
SQUASH_MNT_REC=/squash/mounts
|
||||
SQUASH_MNTS=( )
|
||||
|
||||
while read mnt; do
|
||||
SQUASH_MNTS+=( "$mnt" )
|
||||
done <<< "$(cat $SQUASH_MNT_REC)"
|
||||
|
||||
umount --lazy -- ${SQUASH_MNTS[@]}
|
7
modules.d/99squash/init.sh
Executable file
7
modules.d/99squash/init.sh
Executable file
@@ -0,0 +1,7 @@
|
||||
#!/bin/sh
|
||||
/squash/setup-squash.sh
|
||||
|
||||
exec /init.stock
|
||||
|
||||
echo "Something went wrong when trying to start original init executable!"
|
||||
exit 1
|
29
modules.d/99squash/module-setup.sh
Normal file
29
modules.d/99squash/module-setup.sh
Normal file
@@ -0,0 +1,29 @@
|
||||
#!/bin/bash
|
||||
|
||||
check() {
|
||||
return 255
|
||||
}
|
||||
|
||||
depends() {
|
||||
echo "bash systemd systemd-initrd"
|
||||
return 0
|
||||
}
|
||||
|
||||
installkernel() {
|
||||
hostonly="" instmods squashfs loop overlay
|
||||
}
|
||||
|
||||
install() {
|
||||
if ! type -P mksquashfs >/dev/null || ! type -P unsquashfs >/dev/null ; then
|
||||
derror "squash module requires squashfs-tools to be installed."
|
||||
return 1
|
||||
fi
|
||||
|
||||
inst_multiple kmod modprobe mount mkdir ln echo
|
||||
inst $moddir/setup-squash.sh /squash/setup-squash.sh
|
||||
inst $moddir/clear-squash.sh /squash/clear-squash.sh
|
||||
inst $moddir/init.sh /squash/init.sh
|
||||
|
||||
inst "$moddir/squash-mnt-clear.service" "$systemdsystemunitdir/squash-mnt-clear.service"
|
||||
ln_r "$systemdsystemunitdir/squash-mnt-clear.service" "$systemdsystemunitdir/initrd.target.wants/squash-mnt-clear.service"
|
||||
}
|
61
modules.d/99squash/setup-squash.sh
Executable file
61
modules.d/99squash/setup-squash.sh
Executable file
@@ -0,0 +1,61 @@
|
||||
#!/bin/sh
|
||||
PATH=/bin:/sbin
|
||||
|
||||
SQUASH_IMG=/squash/root.img
|
||||
SQUASH_MNT=/squash/root
|
||||
SQUASH_MNT_REC=/squash/mounts
|
||||
SQUASHED_MNT="usr etc"
|
||||
|
||||
echo $SQUASH_MNT > $SQUASH_MNT_REC
|
||||
|
||||
# Following mount points are neccessary for mounting a squash image
|
||||
|
||||
[ ! -d /proc/self ] && \
|
||||
mount -t proc -o nosuid,noexec,nodev proc /proc
|
||||
|
||||
[ ! -d /sys/kernel ] && \
|
||||
mount -t sysfs -o nosuid,noexec,nodev sysfs /sys
|
||||
|
||||
[ ! -e /dev/loop-control ] && \
|
||||
mount -t devtmpfs -o mode=0755,noexec,nosuid,strictatime devtmpfs /dev
|
||||
|
||||
# Need a loop device backend, overlayfs, and squashfs module
|
||||
modprobe loop
|
||||
if [ $? != 0 ]; then
|
||||
echo "Unable to setup loop module"
|
||||
fi
|
||||
|
||||
modprobe squashfs
|
||||
if [ $? != 0 ]; then
|
||||
echo "Unable to setup squashfs module"
|
||||
fi
|
||||
|
||||
modprobe overlay
|
||||
if [ $? != 0 ]; then
|
||||
echo "Unable to setup overlay module"
|
||||
fi
|
||||
|
||||
[ ! -d "$SQUASH_MNT" ] && \
|
||||
mkdir -m 0755 -p $SQUASH_MNT
|
||||
|
||||
# Mount the squashfs image
|
||||
mount -t squashfs -o ro,loop $SQUASH_IMG $SQUASH_MNT
|
||||
|
||||
if [ $? != 0 ]; then
|
||||
echo "Unable to mount squashed initramfs image"
|
||||
fi
|
||||
|
||||
for file in $SQUASHED_MNT; do
|
||||
lowerdir=$SQUASH_MNT/$file
|
||||
workdir=/squash/overlay-work/$file
|
||||
upperdir=/$file
|
||||
mntdir=/$file
|
||||
|
||||
mkdir -m 0755 -p $workdir
|
||||
mkdir -m 0755 -p $mntdir
|
||||
|
||||
mount -t overlay overlay -o\
|
||||
lowerdir=$lowerdir,upperdir=$upperdir,workdir=$workdir $mntdir
|
||||
|
||||
echo $mntdir >> $SQUASH_MNT_REC
|
||||
done
|
7
modules.d/99squash/shutdown.sh
Executable file
7
modules.d/99squash/shutdown.sh
Executable file
@@ -0,0 +1,7 @@
|
||||
#!/bin/sh
|
||||
/squash/setup-squash.sh
|
||||
|
||||
exec /shutdown.stock
|
||||
|
||||
echo "Something went wrong when trying to start original shutdown executable!"
|
||||
exit 1
|
20
modules.d/99squash/squash-mnt-clear.service
Normal file
20
modules.d/99squash/squash-mnt-clear.service
Normal file
@@ -0,0 +1,20 @@
|
||||
# This file is part of dracut.
|
||||
#
|
||||
|
||||
[Unit]
|
||||
Description=Cleanup squashfs mounts when switch root
|
||||
DefaultDependencies=no
|
||||
After=initrd.target
|
||||
After=dracut-initqueue.service dracut-pre-pivot.service
|
||||
Before=initrd-cleanup.service
|
||||
ConditionPathExists=/squash/root
|
||||
Conflicts=initrd-switch-root.target
|
||||
IgnoreOnIsolate=true
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
RemainAfterExit=yes
|
||||
StandardInput=null
|
||||
StandardOutput=syslog+console
|
||||
StandardError=syslog+console
|
||||
ExecStop=/squash/clear-squash.sh
|
@@ -1,15 +1,16 @@
|
||||
.PHONY: all check clean
|
||||
.PHONY: all check clean $(wildcard TEST-??-*)
|
||||
|
||||
check:
|
||||
$(wildcard TEST-??-*):
|
||||
@[ "$$EUID" == "0" ] || { echo "'check' must be run as root! Please use 'sudo'."; exit 1; }
|
||||
@{ ret=0; \
|
||||
for i in TEST-[0-9]*; do \
|
||||
[ -d $$i ] || continue ; \
|
||||
[ -f $$i/Makefile ] || continue ; \
|
||||
if [ -n "$$TESTS" ]; then t=$${i##TEST-}; t=$${t%%-*}; [ "$${TESTS#*$$t*}" != "$$TESTS" ] || continue; fi; \
|
||||
if [ -n "$$SKIP" ]; then t=$${i##TEST-}; t=$${t%%-*}; [ "$${SKIP#*$$t*}" != "$$SKIP" ] && continue; fi; \
|
||||
$(MAKE) -C $$i all ; ret=$$((ret + $$?)); \
|
||||
done; exit $$ret; }
|
||||
@{ \
|
||||
[ -d $@ ] || exit 0; \
|
||||
[ -f $@/Makefile ] || exit 0; \
|
||||
if [ -n "$$TESTS" ]; then t=$${$@##TEST-}; t=$${t%%-*}; [ "$${TESTS#*$$t*}" != "$$TESTS" ] || exit 0; fi; \
|
||||
if [ -n "$$SKIP" ]; then t=$${$@##TEST-}; t=$${t%%-*}; [ "$${SKIP#*$$t*}" != "$$SKIP" ] && exit 0; fi; \
|
||||
$(MAKE) -C $@ all ; \
|
||||
}
|
||||
|
||||
check: $(wildcard TEST-??-*)
|
||||
|
||||
clean:
|
||||
@for i in TEST-[0-9]*; do \
|
||||
|
@@ -15,7 +15,7 @@ test_run() {
|
||||
-net none \
|
||||
-watchdog i6300esb -watchdog-action poweroff \
|
||||
-no-reboot \
|
||||
-append "panic=1 root=LABEL=dracut rw systemd.log_level=debug systemd.log_target=console rd.retry=3 rd.debug console=ttyS0,115200n81 rd.shell=0 $DEBUGFAIL rd.memdebug=4" \
|
||||
-append "panic=1 systemd.crash_reboot root=LABEL=dracut rw systemd.log_level=debug systemd.log_target=console rd.retry=3 rd.debug console=ttyS0,115200n81 rd.shell=0 $DEBUGFAIL" \
|
||||
-initrd $TESTDIR/initramfs.testing || return 1
|
||||
grep -F -m 1 -q dracut-root-block-success $TESTDIR/result || return 1
|
||||
}
|
||||
@@ -46,8 +46,8 @@ test_setup() {
|
||||
[ -f ${_terminfodir}/l/linux ] && break
|
||||
done
|
||||
inst_multiple -o ${_terminfodir}/l/linux
|
||||
inst "$basedir/modules.d/40network/dhclient-script.sh" "/sbin/dhclient-script"
|
||||
inst "$basedir/modules.d/40network/ifup.sh" "/sbin/ifup"
|
||||
inst "$basedir/modules.d/35network-legacy/dhclient-script.sh" "/sbin/dhclient-script"
|
||||
inst "$basedir/modules.d/35network-legacy/ifup.sh" "/sbin/ifup"
|
||||
inst_multiple grep
|
||||
inst_simple /etc/os-release
|
||||
inst ./test-init.sh /sbin/init
|
||||
|
@@ -11,7 +11,7 @@ test_run() {
|
||||
-m 512M -smp 2 -nographic \
|
||||
-net none \
|
||||
-no-reboot \
|
||||
-append "panic=1 root=LABEL=dracut rw loglevel=77 systemd.log_level=debug systemd.log_target=console rd.retry=3 rd.info console=ttyS0,115200n81 selinux=0 init=/sbin/init rd.shell=0 $DEBUGFAIL" \
|
||||
-append "panic=1 systemd.crash_reboot root=LABEL=dracut rw loglevel=77 systemd.log_level=debug systemd.log_target=console rd.retry=3 rd.info console=ttyS0,115200n81 selinux=0 init=/sbin/init rd.shell=0 $DEBUGFAIL" \
|
||||
-initrd $TESTDIR/initramfs.testing
|
||||
grep -F -m 1 -q dracut-root-block-success $TESTDIR/root.ext3 || return 1
|
||||
}
|
||||
@@ -43,8 +43,8 @@ test_setup() {
|
||||
[ -f ${_terminfodir}/l/linux ] && break
|
||||
done
|
||||
inst_multiple -o ${_terminfodir}/l/linux
|
||||
inst "$basedir/modules.d/40network/dhclient-script.sh" "/sbin/dhclient-script"
|
||||
inst "$basedir/modules.d/40network/ifup.sh" "/sbin/ifup"
|
||||
inst "$basedir/modules.d/35network-legacy/dhclient-script.sh" "/sbin/dhclient-script"
|
||||
inst "$basedir/modules.d/35network-legacy/ifup.sh" "/sbin/ifup"
|
||||
inst_multiple grep
|
||||
inst_simple /etc/os-release
|
||||
inst ./test-init.sh /sbin/init
|
||||
|
@@ -22,7 +22,7 @@ client_run() {
|
||||
-net none \
|
||||
-watchdog i6300esb -watchdog-action poweroff \
|
||||
-no-reboot \
|
||||
-append "panic=1 root=LABEL=dracut $client_opts quiet rd.retry=3 rd.info console=ttyS0,115200n81 selinux=0 rd.debug rd.shell=0 $DEBUGFAIL" \
|
||||
-append "panic=1 systemd.crash_reboot root=LABEL=dracut $client_opts quiet rd.retry=3 rd.info console=ttyS0,115200n81 selinux=0 rd.debug rd.shell=0 $DEBUGFAIL" \
|
||||
-initrd $TESTDIR/initramfs.testing
|
||||
|
||||
if (($? != 0)); then
|
||||
@@ -73,8 +73,8 @@ test_setup() {
|
||||
[ -f ${_terminfodir}/l/linux ] && break
|
||||
done
|
||||
inst_multiple -o ${_terminfodir}/l/linux
|
||||
inst "$basedir/modules.d/40network/dhclient-script.sh" "/sbin/dhclient-script"
|
||||
inst "$basedir/modules.d/40network/ifup.sh" "/sbin/ifup"
|
||||
inst "$basedir/modules.d/35network-legacy/dhclient-script.sh" "/sbin/dhclient-script"
|
||||
inst "$basedir/modules.d/35network-legacy/ifup.sh" "/sbin/ifup"
|
||||
inst_multiple grep
|
||||
inst_simple ./fstab /etc/fstab
|
||||
inst_simple /etc/os-release
|
||||
|
@@ -23,7 +23,7 @@ client_run() {
|
||||
-m 512M -smp 2 -nographic \
|
||||
-net none \
|
||||
-no-reboot \
|
||||
-append "panic=1 root=LABEL=dracut $client_opts rd.retry=3 console=ttyS0,115200n81 selinux=0 $DEBUGOUT rd.shell=0 $DEBUGFAIL" \
|
||||
-append "panic=1 systemd.crash_reboot root=LABEL=dracut $client_opts rd.retry=3 console=ttyS0,115200n81 selinux=0 $DEBUGOUT rd.shell=0 $DEBUGFAIL" \
|
||||
-initrd $TESTDIR/initramfs.testing
|
||||
|
||||
if (($? != 0)); then
|
||||
@@ -79,8 +79,8 @@ test_setup() {
|
||||
[ -f ${_terminfodir}/l/linux ] && break
|
||||
done
|
||||
inst_multiple -o ${_terminfodir}/l/linux
|
||||
inst "$basedir/modules.d/40network/dhclient-script.sh" "/sbin/dhclient-script"
|
||||
inst "$basedir/modules.d/40network/ifup.sh" "/sbin/ifup"
|
||||
inst "$basedir/modules.d/35network-legacy/dhclient-script.sh" "/sbin/dhclient-script"
|
||||
inst "$basedir/modules.d/35network-legacy/ifup.sh" "/sbin/ifup"
|
||||
inst_multiple grep
|
||||
inst_simple ./fstab /etc/fstab
|
||||
rpm -ql systemd | xargs -r $DRACUT_INSTALL ${initdir:+-D "$initdir"} -o -a -l
|
||||
|
@@ -8,9 +8,9 @@ udevadm control --reload
|
||||
# save a partition at the beginning for future flagging purposes
|
||||
sfdisk /dev/sda <<EOF
|
||||
,4M
|
||||
,25M
|
||||
,25M
|
||||
,25M
|
||||
,41M
|
||||
,41M
|
||||
,41M
|
||||
EOF
|
||||
udevadm settle
|
||||
mdadm --create /dev/md0 --run --auto=yes --level=5 --raid-devices=3 /dev/sda2 /dev/sda3 /dev/sda4
|
||||
|
@@ -13,7 +13,7 @@ test_run() {
|
||||
-m 512M -smp 2 -nographic \
|
||||
-net none \
|
||||
-no-reboot \
|
||||
-append "panic=1 root=/dev/dracut/root rd.auto rw rd.retry=10 console=ttyS0,115200n81 selinux=0 rd.shell=0 $DEBUGFAIL" \
|
||||
-append "panic=1 systemd.crash_reboot root=/dev/dracut/root rd.auto rw rd.retry=10 console=ttyS0,115200n81 selinux=0 rd.shell=0 $DEBUGFAIL" \
|
||||
-initrd $TESTDIR/initramfs.testing
|
||||
grep -F -m 1 -q dracut-root-block-success $DISKIMAGE || return 1
|
||||
}
|
||||
@@ -22,7 +22,7 @@ test_setup() {
|
||||
DISKIMAGE=$TESTDIR/TEST-10-RAID-root.img
|
||||
# Create the blank file to use as a root filesystem
|
||||
rm -f -- $DISKIMAGE
|
||||
dd if=/dev/null of=$DISKIMAGE bs=1M seek=80
|
||||
dd if=/dev/null of=$DISKIMAGE bs=1M seek=128
|
||||
|
||||
kernel=$KVERSION
|
||||
# Create what will eventually be our root filesystem onto an overlay
|
||||
@@ -45,8 +45,8 @@ test_setup() {
|
||||
inst_multiple -o ${_terminfodir}/l/linux
|
||||
inst_simple /etc/os-release
|
||||
inst ./test-init.sh /sbin/init
|
||||
inst "$basedir/modules.d/40network/dhclient-script.sh" "/sbin/dhclient-script"
|
||||
inst "$basedir/modules.d/40network/ifup.sh" "/sbin/ifup"
|
||||
inst "$basedir/modules.d/35network-legacy/dhclient-script.sh" "/sbin/dhclient-script"
|
||||
inst "$basedir/modules.d/35network-legacy/ifup.sh" "/sbin/ifup"
|
||||
inst_multiple grep
|
||||
inst_multiple -o /lib/systemd/systemd-shutdown
|
||||
find_binary plymouth >/dev/null && inst_multiple plymouth
|
||||
|
@@ -12,7 +12,7 @@ test_run() {
|
||||
-m 512M -smp 2 -nographic \
|
||||
-net none \
|
||||
-no-reboot \
|
||||
-append "panic=1 root=/dev/dracut/root rw rd.auto=1 quiet rd.retry=3 rd.info console=ttyS0,115200n81 selinux=0 rd.debug rd.shell=0 $DEBUGFAIL" \
|
||||
-append "panic=1 systemd.crash_reboot root=/dev/dracut/root rw rd.auto=1 quiet rd.retry=3 rd.info console=ttyS0,115200n81 selinux=0 rd.debug rd.shell=0 $DEBUGFAIL" \
|
||||
-initrd $TESTDIR/initramfs.testing
|
||||
grep -F -m 1 -q dracut-root-block-success $TESTDIR/root.ext2 || return 1
|
||||
}
|
||||
@@ -41,8 +41,8 @@ test_setup() {
|
||||
[ -f ${_terminfodir}/l/linux ] && break
|
||||
done
|
||||
inst_multiple -o ${_terminfodir}/l/linux
|
||||
inst "$basedir/modules.d/40network/dhclient-script.sh" "/sbin/dhclient-script"
|
||||
inst "$basedir/modules.d/40network/ifup.sh" "/sbin/ifup"
|
||||
inst "$basedir/modules.d/35network-legacy/dhclient-script.sh" "/sbin/dhclient-script"
|
||||
inst "$basedir/modules.d/35network-legacy/ifup.sh" "/sbin/ifup"
|
||||
inst_multiple grep
|
||||
inst_simple /etc/os-release
|
||||
inst ./test-init.sh /sbin/init
|
||||
|
@@ -20,7 +20,7 @@ client_run() {
|
||||
-drive format=raw,index=3,media=disk,file=$TESTDIR/disk3.img.new \
|
||||
-net none \
|
||||
-no-reboot \
|
||||
-append "panic=1 $* systemd.log_target=kmsg loglevel=7 root=LABEL=root rw rd.retry=20 rd.info console=ttyS0,115200n81 log_buf_len=2M selinux=0 rd.debug rd.shell=0 $DEBUGFAIL " \
|
||||
-append "panic=1 systemd.crash_reboot $* systemd.log_target=kmsg loglevel=7 root=LABEL=root rw rd.retry=20 rd.info console=ttyS0,115200n81 log_buf_len=2M selinux=0 rd.debug rd.shell=0 $DEBUGFAIL " \
|
||||
-initrd $TESTDIR/initramfs.testing
|
||||
if ! grep -F -m 1 -q dracut-root-block-success $TESTDIR/root.ext2; then
|
||||
echo "CLIENT TEST END: $@ [FAIL]"
|
||||
@@ -59,9 +59,9 @@ test_setup() {
|
||||
# Create the blank file to use as a root filesystem
|
||||
rm -f -- $TESTDIR/root.ext2
|
||||
dd if=/dev/null of=$TESTDIR/root.ext2 bs=1M seek=40
|
||||
dd if=/dev/null of=$TESTDIR/disk1.img bs=1M seek=20
|
||||
dd if=/dev/null of=$TESTDIR/disk2.img bs=1M seek=20
|
||||
dd if=/dev/null of=$TESTDIR/disk3.img bs=1M seek=20
|
||||
dd if=/dev/null of=$TESTDIR/disk1.img bs=1M seek=35
|
||||
dd if=/dev/null of=$TESTDIR/disk2.img bs=1M seek=35
|
||||
dd if=/dev/null of=$TESTDIR/disk3.img bs=1M seek=35
|
||||
|
||||
kernel=$KVERSION
|
||||
# Create what will eventually be our root filesystem onto an overlay
|
||||
@@ -82,8 +82,8 @@ test_setup() {
|
||||
[ -f ${_terminfodir}/l/linux ] && break
|
||||
done
|
||||
inst_multiple -o ${_terminfodir}/l/linux
|
||||
inst "$basedir/modules.d/40network/dhclient-script.sh" "/sbin/dhclient-script"
|
||||
inst "$basedir/modules.d/40network/ifup.sh" "/sbin/ifup"
|
||||
inst "$basedir/modules.d/35network-legacy/dhclient-script.sh" "/sbin/dhclient-script"
|
||||
inst "$basedir/modules.d/35network-legacy/ifup.sh" "/sbin/ifup"
|
||||
inst_multiple grep
|
||||
inst_simple /etc/os-release
|
||||
inst ./test-init.sh /sbin/init
|
||||
|
@@ -9,9 +9,9 @@ udevadm control --reload
|
||||
# save a partition at the beginning for future flagging purposes
|
||||
sfdisk /dev/sda <<EOF
|
||||
,4M
|
||||
,25M
|
||||
,25M
|
||||
,25M
|
||||
,43M
|
||||
,43M
|
||||
,43M
|
||||
EOF
|
||||
udevadm settle
|
||||
printf test >keyfile
|
||||
|
@@ -20,7 +20,7 @@ test_run() {
|
||||
-m 512M -smp 2 -nographic \
|
||||
-net none \
|
||||
-no-reboot \
|
||||
-append "panic=1 root=/dev/dracut/root rw rd.auto rd.retry=20 console=ttyS0,115200n81 selinux=0 rd.debug rootwait $LUKSARGS rd.shell=0 $DEBUGFAIL" \
|
||||
-append "panic=1 systemd.crash_reboot root=/dev/dracut/root rw rd.auto rd.retry=20 console=ttyS0,115200n81 selinux=0 rd.debug rootwait $LUKSARGS rd.shell=0 $DEBUGFAIL" \
|
||||
-initrd $TESTDIR/initramfs.testing
|
||||
grep -F -m 1 -q dracut-root-block-success $TESTDIR/check-success.img || return 1
|
||||
echo "CLIENT TEST END: [OK]"
|
||||
@@ -34,7 +34,7 @@ test_run() {
|
||||
-m 512M -smp 2 -nographic \
|
||||
-net none \
|
||||
-no-reboot \
|
||||
-append "panic=1 root=/dev/dracut/root rw quiet rd.auto rd.retry=20 rd.info console=ttyS0,115200n81 selinux=0 rd.debug $DEBUGFAIL" \
|
||||
-append "panic=1 systemd.crash_reboot root=/dev/dracut/root rw quiet rd.auto rd.retry=20 rd.info console=ttyS0,115200n81 selinux=0 rd.debug $DEBUGFAIL" \
|
||||
-initrd $TESTDIR/initramfs.testing
|
||||
grep -F -m 1 -q dracut-root-block-success $TESTDIR/check-success.img || return 1
|
||||
echo "CLIENT TEST END: [OK]"
|
||||
@@ -48,7 +48,7 @@ test_run() {
|
||||
-m 512M -smp 2 -nographic \
|
||||
-net none \
|
||||
-no-reboot \
|
||||
-append "panic=1 root=/dev/dracut/root rw quiet rd.auto rd.retry=10 rd.info console=ttyS0,115200n81 selinux=0 rd.debug $DEBUGFAIL rd.luks.uuid=failme" \
|
||||
-append "panic=1 systemd.crash_reboot root=/dev/dracut/root rw quiet rd.auto rd.retry=10 rd.info console=ttyS0,115200n81 selinux=0 rd.debug $DEBUGFAIL rd.luks.uuid=failme" \
|
||||
-initrd $TESTDIR/initramfs.testing
|
||||
grep -F -m 1 -q dracut-root-block-success $TESTDIR/check-success.img && return 1
|
||||
echo "CLIENT TEST END: [OK]"
|
||||
@@ -59,7 +59,7 @@ test_run() {
|
||||
test_setup() {
|
||||
# Create the blank file to use as a root filesystem
|
||||
rm -f -- $TESTDIR/root.ext2
|
||||
dd if=/dev/null of=$TESTDIR/root.ext2 bs=1M seek=80
|
||||
dd if=/dev/null of=$TESTDIR/root.ext2 bs=1M seek=134
|
||||
|
||||
kernel=$KVERSION
|
||||
# Create what will eventually be our root filesystem onto an overlay
|
||||
@@ -81,8 +81,8 @@ test_setup() {
|
||||
[ -f ${_terminfodir}/l/linux ] && break
|
||||
done
|
||||
inst_multiple -o ${_terminfodir}/l/linux
|
||||
inst "$basedir/modules.d/40network/dhclient-script.sh" "/sbin/dhclient-script"
|
||||
inst "$basedir/modules.d/40network/ifup.sh" "/sbin/ifup"
|
||||
inst "$basedir/modules.d/35network-legacy/dhclient-script.sh" "/sbin/dhclient-script"
|
||||
inst "$basedir/modules.d/35network-legacy/ifup.sh" "/sbin/ifup"
|
||||
inst_multiple grep
|
||||
inst_simple /etc/os-release
|
||||
inst ./test-init.sh /sbin/init
|
||||
|
@@ -1,4 +1,7 @@
|
||||
#!/bin/sh
|
||||
|
||||
trap 'poweroff -f' EXIT
|
||||
|
||||
# don't let udev and this script step on eachother's toes
|
||||
for x in 61-dmraid-imsm.rules 64-md-raid.rules 65-md-incremental-imsm.rules 65-md-incremental.rules 64-lvm.rules 70-mdadm.rules 99-mount-rules; do
|
||||
rm -f -- "/etc/udev/rules.d/$x"
|
||||
@@ -29,9 +32,9 @@ sfdisk -g /dev/mapper/isw*Test0
|
||||
# save a partition at the beginning for future flagging purposes
|
||||
sfdisk --no-reread /dev/mapper/isw*Test0 <<EOF
|
||||
,4M
|
||||
,20M
|
||||
,20M
|
||||
,20M
|
||||
,28M
|
||||
,28M
|
||||
,28M
|
||||
EOF
|
||||
|
||||
udevadm settle
|
||||
@@ -55,20 +58,20 @@ mdadm --create /dev/md0 --run --auto=yes --level=5 --raid-devices=3 \
|
||||
# wait for the array to finish initailizing, otherwise this sometimes fails
|
||||
# randomly.
|
||||
mdadm -W /dev/md0
|
||||
set -e
|
||||
lvm pvcreate -ff -y /dev/md0
|
||||
lvm vgcreate dracut /dev/md0 && \
|
||||
lvm lvcreate -l 100%FREE -n root dracut && \
|
||||
lvm vgchange -ay && \
|
||||
mke2fs -L root /dev/dracut/root && \
|
||||
mkdir -p /sysroot && \
|
||||
mount /dev/dracut/root /sysroot && \
|
||||
cp -a -t /sysroot /source/* && \
|
||||
umount /sysroot && \
|
||||
lvm lvchange -a n /dev/dracut/root && \
|
||||
lvm vgcreate dracut /dev/md0
|
||||
lvm lvcreate -l 100%FREE -n root dracut
|
||||
lvm vgchange -ay
|
||||
mke2fs -L root /dev/dracut/root
|
||||
mkdir -p /sysroot
|
||||
mount /dev/dracut/root /sysroot
|
||||
cp -a -t /sysroot /source/*
|
||||
umount /sysroot
|
||||
lvm lvchange -a n /dev/dracut/root
|
||||
udevadm settle
|
||||
mdadm --detail --export /dev/md0 |grep -F MD_UUID > /tmp/mduuid
|
||||
. /tmp/mduuid
|
||||
echo "MD_UUID=$MD_UUID"
|
||||
{ echo "dracut-root-block-created"; echo MD_UUID=$MD_UUID;} > /dev/sda
|
||||
mdadm --wait-clean /dev/md0
|
||||
poweroff -f
|
||||
|
@@ -16,7 +16,7 @@ client_run() {
|
||||
-m 512M -smp 2 -nographic \
|
||||
-net none \
|
||||
-no-reboot \
|
||||
-append "panic=1 $* root=LABEL=root rw debug rd.retry=5 rd.debug console=ttyS0,115200n81 selinux=0 rd.info rd.shell=0 $DEBUGFAIL" \
|
||||
-append "panic=1 systemd.crash_reboot $* root=LABEL=root rw debug rd.retry=5 rd.debug console=ttyS0,115200n81 selinux=0 rd.info rd.shell=0 $DEBUGFAIL" \
|
||||
-initrd $TESTDIR/initramfs.testing
|
||||
if ! grep -F -m 1 -q dracut-root-block-success $TESTDIR/root.ext2; then
|
||||
echo "CLIENT TEST END: $@ [FAIL]"
|
||||
@@ -53,8 +53,8 @@ test_setup() {
|
||||
rm -f -- $TESTDIR/disk1
|
||||
rm -f -- $TESTDIR/disk2
|
||||
dd if=/dev/null of=$TESTDIR/root.ext2 bs=1M seek=1
|
||||
dd if=/dev/null of=$TESTDIR/disk1 bs=1M seek=80
|
||||
dd if=/dev/null of=$TESTDIR/disk2 bs=1M seek=80
|
||||
dd if=/dev/null of=$TESTDIR/disk1 bs=1M seek=104
|
||||
dd if=/dev/null of=$TESTDIR/disk2 bs=1M seek=104
|
||||
|
||||
kernel=$KVERSION
|
||||
# Create what will eventually be our root filesystem onto an overlay
|
||||
@@ -76,8 +76,8 @@ test_setup() {
|
||||
done
|
||||
inst_multiple -o ${_terminfodir}/l/linux
|
||||
inst_simple /etc/os-release
|
||||
inst "$basedir/modules.d/40network/dhclient-script.sh" "/sbin/dhclient-script"
|
||||
inst "$basedir/modules.d/40network/ifup.sh" "/sbin/ifup"
|
||||
inst "$basedir/modules.d/35network-legacy/dhclient-script.sh" "/sbin/dhclient-script"
|
||||
inst "$basedir/modules.d/35network-legacy/ifup.sh" "/sbin/ifup"
|
||||
inst_multiple grep
|
||||
inst ./test-init.sh /sbin/init
|
||||
find_binary plymouth >/dev/null && inst_multiple plymouth
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user