-VERSION=0.0
+VERSION=0.1
GITVERSION=$(shell [ -d .git ] && git rev-list --abbrev-commit -n 1 HEAD |cut -b 1-8)
+prefix = /usr
+libdir = ${prefix}/lib
+pkglibdir = ${libdir}/dracut
+sysconfdir = ${prefix}/etc
+sbindir = ${prefix}/sbin
+
modules.d/99base/switch_root: switch_root.c
gcc -o modules.d/99base/switch_root switch_root.c
.PHONY: install clean archive rpm testimage test all check
install:
- mkdir -p $(DESTDIR)/usr/lib/dracut
- mkdir -p $(DESTDIR)/sbin
- mkdir -p $(DESTDIR)/etc
- mkdir -p $(DESTDIR)/usr/lib/dracut/modules.d
- install -m 0755 dracut $(DESTDIR)/sbin/dracut
- install -m 0644 dracut.conf $(DESTDIR)/etc/dracut.conf
- install -m 0755 dracut-functions $(DESTDIR)/usr/lib/dracut/dracut-functions
- cp -arx modules.d $(DESTDIR)/usr/lib/dracut/
+ mkdir -p $(DESTDIR)$(pkglibdir)
+ mkdir -p $(DESTDIR)$(sbindir)
+ mkdir -p $(DESTDIR)$(sysconfdir)
+ mkdir -p $(DESTDIR)$(pkglibdir)/modules.d
+ install -m 0755 dracut $(DESTDIR)$(sbindir)/dracut
+ install -m 0755 modules.d/99base/switch_root $(DESTDIR)$(sbindir)/switch_root
+ install -m 0644 dracut.conf $(DESTDIR)$(sysconfdir)/dracut.conf
+ install -m 0755 dracut-functions $(DESTDIR)$(pkglibdir)/dracut-functions
+ cp -arx modules.d $(DESTDIR)$(pkglibdir)
+ rm $(DESTDIR)$(pkglibdir)/modules.d/99base/switch_root
clean:
rm -f *~
make -C test check
testimage: all
- ./dracut -v -l -f test-$(shell uname -r).img $(shell uname -r)
+ ./dracut -l -f test-$(shell uname -r).img $(shell uname -r)
@echo wrote test-$(shell uname -r).img
[[ $dracutmodules_l ]] && dracutmodules=$dracutmodules_l
[[ $omit_dracutmodules_l ]] && omit_dracutmodules=$omit_dracutmodules_l
[[ $drivers_l ]] && drivers=$drivers_l
+[[ $dracutbasedir ]] || dracutbasedir=/usr/lib/dracut
-[[ $allowlocal && -f "$(dirname $0)/dracut-functions" ]] && dsrc="$(dirname $0)" || dsrc=/usr/lib/dracut
+[[ $allowlocal && -f "$(dirname $0)/dracut-functions" ]] && dsrc="$(dirname $0)" || dsrc=$dracutbasedir
if [[ -f $dsrc/dracut-functions ]]; then
. $dsrc/dracut-functions
exit 1
fi
-hookdirs="cmdline pre-udev netroot pre-mount pre-pivot mount emergency"
+hookdirs="cmdline pre-udev pre-trigger netroot pre-mount pre-pivot mount emergency"
readonly initdir=$(mktemp -d -t initramfs.XXXXXX)
trap 'rm -rf "$initdir"' 0 # clean up after ourselves no matter how we die.
# Log initrd creation.
if ! [[ $dracutlogfile ]]; then
[[ $dsrc = /usr/lib/dracut ]] && \
- dracutlogfile=/var/log/dracut/log || \
+ dracutlogfile=/var/log/dracut.log || \
dracutlogfile=/tmp/dracut.log
+ [[ -w "$dracutlogfile" ]] || dracutlogfile=/tmp/dracut.log
>"$dracutlogfile"
fi
dwarning() {
echo "W: $@" >&2
- echo "W: $@" >>"$dracutlogfile"
+ [[ -w "$dracutlogfile" ]] && echo "W: $@" >>"$dracutlogfile"
}
dinfo() {
[[ $beverbose ]] && echo "I: $@" >&2
- echo "I: $@" >>"$dracutlogfile"
+ [[ -w "$dracutlogfile" ]] && echo "I: $@" >>"$dracutlogfile"
}
derror() {
echo "E: $@" >&2
- echo "E: $@" >>"$dracutlogfile"
+ [[ -w "$dracutlogfile" ]] && echo "E: $@" >>"$dracutlogfile"
}
# $1 = file to copy to ramdisk
--- /dev/null
+# Sample dracut config file
+
+# Specific list of dracut modules to use
+#dracutmodules=""
+
+# Dracut modules to omit
+#omit_dracutmodules=""
+
+# Additional kernel modules to install
+#drivers=""
-# define gittag f8a22bfb
+# define gittag 2c02c831
%define replace_mkinitrd 0
Name: dracut
-Version: 0.0
+Version: 0.1
%if %{defined gittag}
Release: 1.git%{gittag}%{?dist}
%define dashgittag -%{gittag}
Summary: Initramfs generator using udev
Group: System Environment/Base
License: GPLv2
-URL: http://fedoraproject.org/wiki/Initrdrewrite
+URL: http://apps.sourceforge.net/trac/dracut/wiki
Source0: dracut-%{version}%{?dashgittag}.tar.bz2
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
Requires: udev
%endif
%description
-dracut is an attempt to build a new, event-driven initramfs infrastructure
-based around udev.
-
+dracut is a new, event-driven initramfs infrastructure based around udev.
%prep
%setup -q -n %{name}-%{version}%{?dashgittag}
%install
rm -rf $RPM_BUILD_ROOT
-make install DESTDIR=$RPM_BUILD_ROOT
+make install DESTDIR=$RPM_BUILD_ROOT sbindir=/sbin sysconfdir=/etc
%if 0%{?replace_mkinitrd}
ln -s dracut $RPM_BUILD_ROOT/sbin/mkinitrd
ln -s dracut/dracut-functions $RPM_BUILD_ROOT/usr/libexec/initrd-functions
%endif
+#mkdir -p $RPM_BUILD_ROOT/sbin
+#mv $RPM_BUILD_ROOT/%{_prefix}/lib/dracut/modules.d/99base/switch_root $RPM_BUILD_ROOT/sbin
+
%clean
rm -rf $RPM_BUILD_ROOT
%defattr(-,root,root,-)
%doc README HACKING TODO COPYING
/sbin/dracut
+/sbin/switch_root
%if 0%{?replace_mkinitrd}
/sbin/mkinitrd
/usr/libexec/initrd-functions
%endif
-%dir /usr/lib/dracut
-/usr/lib/dracut/dracut-functions
-/usr/lib/dracut/modules.d
+%dir %{_prefix}/lib/dracut
+%{_prefix}/lib/dracut/dracut-functions
+%{_prefix}/lib/dracut/modules.d
%config(noreplace) /etc/dracut.conf
+++ /dev/null
-ACTION=="add", SUBSYSTEM=="graphics", KERNEL=="fb[0-9]*", RUN+="/bin/plymouth --show-splash"
ACTION!="add|change", GOTO="luks_end"
KERNEL!="sr*", IMPORT{program}="vol_id --export $tempnode"
-ENV{ID_FS_TYPE}=="crypto_LUKS", RUN+="cryptroot-ask $env{DEVNAME} luks-$env{ID_FS_UUID}"
+ENV{ID_FS_TYPE}=="crypto_LUKS", RUN+="/sbin/cryptroot-ask $env{DEVNAME} luks-$env{ID_FS_UUID}"
LABEL="luks_end"
#!/bin/bash
. "$moddir"/plymouth-populate-initrd
-inst_hook pre-udev 10 "$moddir"/plymouth-prep.sh
inst_hook pre-pivot 90 "$moddir"/plymouth-newroot.sh
+inst_hook pre-trigger 10 "$moddir"/plymouth-pretrigger.sh
inst_hook emergency 50 "$moddir"/plymouth-emergency.sh
inst "$moddir"/cryptroot-ask.sh /sbin/cryptroot-ask
# Include KMS capable drm drivers
instmods $modname
fi
done
-inst_rules "$moddir/52-plymouth-start.rules"
#!/bin/sh
if [ -x /bin/plymouth ]; then
- /bin/plymouth --show-splash
/bin/plymouth --newroot=$NEWROOT
fi
+++ /dev/null
-#!/bin/sh
-
-[ -c /dev/null ] || mknod /dev/null c 1 3
-mknod /dev/zero c 1 5
-mknod /dev/systty c 4 0
-mknod /dev/tty c 5 0
-[ -c /dev/console ] || mknod /dev/console c 5 1
-[ -c /dev/ptmx ] || mknod /dev/ptmx c 5 2
-mknod /dev/fb c 29 0
-mknod /dev/tty0 c 4 0
-mknod /dev/tty1 c 4 1
-mknod /dev/tty2 c 4 2
-mknod /dev/tty3 c 4 3
-mknod /dev/tty4 c 4 4
-mknod /dev/tty5 c 4 5
-mknod /dev/tty6 c 4 6
-mknod /dev/tty7 c 4 7
-mknod /dev/tty8 c 4 8
-mknod /dev/tty9 c 4 9
-mknod /dev/tty10 c 4 10
-mknod /dev/tty11 c 4 11
-mknod /dev/tty12 c 4 12
-mknod /dev/ttyS0 c 4 64
-mknod /dev/ttyS1 c 4 65
-mknod /dev/ttyS2 c 4 66
-mknod /dev/ttyS3 c 4 67
-/lib/udev/console_init tty0
-
-[ -x /bin/plymouthd ] && /bin/plymouthd
-
--- /dev/null
+#!/bin/sh
+
+# first trigger graphics subsystem
+udevadm trigger --attr-match=class=0x030000
+# first trigger graphics and tty subsystem
+udevadm trigger --subsystem-match=graphics --subsystem-match=tty >/dev/null 2>&1
+# add nomatch for full trigger
+echo " --subsystem-nomatch=graphics --subsystem-nomatch=tty " >> /tmp/udevtriggeropts
+
+udevadm settle --timeout=30 >/dev/null 2>&1
+[ -c /dev/null ] || mknod /dev/null c 1 3
+[ -c /dev/zero ] || mknod /dev/zero c 1 5
+[ -c /dev/systty ] || mknod /dev/systty c 4 0
+[ -c /dev/fb ] || mknod /dev/fb c 29 0
+[ -c /dev/hvc0 ] || mknod /dev/hvc0 c 229 0
+
+[ -x /bin/plymouthd ] && /bin/plymouthd
+
+/lib/udev/console_init tty0
+/bin/plymouth --show-splash
+
udevd --daemon
getarg rdudevinfo && udevadm control --log_priority=info
getarg rdudevdebug && udevadm control --log_priority=debug
-udevadm trigger >/dev/null 2>&1
+
+source_all pre-trigger
+
+# then the rest
+[ -f /tmp/udevtriggeropts ] && udevtriggeropts=$(while read line; do echo $line;done < /tmp/udevtriggeropts)
+udevadm trigger $udevtriggeropts >/dev/null 2>&1
udevadm settle --timeout=30 >/dev/null 2>&1
# pre-mount happens before we try to mount the root filesystem,
inst "$moddir/init" "/init"
# Bail out if switch_root does not exist
if [ ! -x "$moddir/switch_root" ]; then
- derror "ERROR: $moddir/switch_root does not exist."
- exit 1
+ # assume it is installed in the standard path
+ dracut_install switch_root
+else
+ inst "$moddir/switch_root" "/sbin/switch_root"
fi
-inst "$moddir/switch_root" "/sbin/switch_root"
inst "$moddir/dracut-lib" "/lib/dracut-lib"
inst_hook pre-pivot 50 "$moddir/selinux-loadpolicy.sh"