Blame 0007-Backup-and-restore-run-initramfs-via-systemd-service.patch

Harald Hoyer 9d87a2
From 4cfd24d1799fafacf6624c9638454de93dd6f331 Mon Sep 17 00:00:00 2001
Harald Hoyer 77c7b4
From: Harald Hoyer <harald@redhat.com>
Harald Hoyer 77c7b4
Date: Fri, 10 Feb 2012 09:37:18 +0100
Harald Hoyer 77c7b4
Subject: [PATCH] Backup and restore /run/initramfs via systemd services
Harald Hoyer 77c7b4
Harald Hoyer 77c7b4
This saves the space /run/initramfs is taking for the shutdown
Harald Hoyer 77c7b4
---
Harald Hoyer 77c7b4
 Makefile                   |   16 ++++++++++++++--
Harald Hoyer 77c7b4
 dracut-backup.service      |   15 +++++++++++++++
Harald Hoyer 77c7b4
 dracut-initramfs-backup.sh |   22 ++++++++++++++++++++++
Harald Hoyer 77c7b4
 dracut-restore.service     |   18 ++++++++++++++++++
Harald Hoyer 9d87a2
 dracut.spec                |   13 ++++++++++++-
Harald Hoyer 9d87a2
 5 files changed, 81 insertions(+), 3 deletions(-)
Harald Hoyer 77c7b4
 create mode 100644 dracut-backup.service
Harald Hoyer 77c7b4
 create mode 100644 dracut-initramfs-backup.sh
Harald Hoyer 77c7b4
 create mode 100644 dracut-restore.service
Harald Hoyer 77c7b4
Harald Hoyer 77c7b4
diff --git a/Makefile b/Makefile
Harald Hoyer 77c7b4
index 8d7b7d6..09e87c8 100644
Harald Hoyer 77c7b4
--- a/Makefile
Harald Hoyer 77c7b4
+++ b/Makefile
Harald Hoyer 77c7b4
@@ -40,6 +40,7 @@ install: doc
Harald Hoyer 77c7b4
 	mkdir -p $(DESTDIR)$(sysconfdir)/dracut.conf.d
Harald Hoyer 77c7b4
 	install -m 0755 dracut-functions $(DESTDIR)$(pkglibdir)/dracut-functions
Harald Hoyer 77c7b4
 	install -m 0755 dracut-logger $(DESTDIR)$(pkglibdir)/dracut-logger
Harald Hoyer 77c7b4
+	install -m 0755 dracut-initramfs-backup.sh $(DESTDIR)$(pkglibdir)/dracut-initramfs-backup
Harald Hoyer 77c7b4
 	cp -arx modules.d $(DESTDIR)$(pkglibdir)
Harald Hoyer 77c7b4
 	install -m 0644 dracut.8 $(DESTDIR)$(mandir)/man8/dracut.8
Harald Hoyer 77c7b4
 	install -m 0644 dracut-catimages.8 $(DESTDIR)$(mandir)/man8/dracut-catimages.8
Harald Hoyer 77c7b4
@@ -47,6 +48,15 @@ install: doc
Harald Hoyer 77c7b4
 	install -m 0644 dracut.conf.5 $(DESTDIR)$(mandir)/man5/dracut.conf.5
Harald Hoyer 77c7b4
 	install -m 0644 dracut.cmdline.7 $(DESTDIR)$(mandir)/man7/dracut.cmdline.7
Harald Hoyer 77c7b4
 	ln -s dracut.cmdline.7 $(DESTDIR)$(mandir)/man7/dracut.kernel.7
Harald Hoyer 77c7b4
+	if [ -n "$(systemdsystemunitdir)" ]; then \
Harald Hoyer 77c7b4
+		mkdir -p $(DESTDIR)$(systemdsystemunitdir); \
Harald Hoyer 77c7b4
+		install -m 0644 dracut-backup.service $(DESTDIR)$(systemdsystemunitdir); \
Harald Hoyer 77c7b4
+		install -m 0644 dracut-restore.service $(DESTDIR)$(systemdsystemunitdir); \
Harald Hoyer 77c7b4
+		mkdir -p $(DESTDIR)$(systemdsystemunitdir)/sysinit.target.wants; \
Harald Hoyer 77c7b4
+		mkdir -p $(DESTDIR)$(systemdsystemunitdir)/reboot.target.wants; \
Harald Hoyer 77c7b4
+		ln -s ../dracut-backup.service $(DESTDIR)$(systemdsystemunitdir)/sysinit.target.wants/dracut-backup.service; \
Harald Hoyer 77c7b4
+		ln -s ../dracut-restore.service $(DESTDIR)$(systemdsystemunitdir)/reboot.target.wants/dracut-restore.service; \
Harald Hoyer 77c7b4
+	fi
Harald Hoyer 77c7b4
 
Harald Hoyer 77c7b4
 clean:
Harald Hoyer 77c7b4
 	$(RM) *~
Harald Hoyer 77c7b4
@@ -77,12 +87,14 @@ rpm: dracut-$(VERSION).tar.bz2
Harald Hoyer 77c7b4
 	( mv "$$rpmbuild"/noarch/*.rpm .; mv "$$rpmbuild"/*.src.rpm .;rm -fr "$$rpmbuild"; ls *.rpm )
Harald Hoyer 77c7b4
 
Harald Hoyer 77c7b4
 syncheck:
Harald Hoyer 77c7b4
-	@ret=0;for i in dracut-logger modules.d/99base/init modules.d/*/*.sh; do \
Harald Hoyer 77c7b4
+	@ret=0;for i in dracut-initramfs-backup.sh dracut-logger \
Harald Hoyer 77c7b4
+                        modules.d/99base/init modules.d/*/*.sh; do \
Harald Hoyer 77c7b4
                 [ "$${i##*/}" = "module-setup.sh" ] && continue; \
Harald Hoyer 77c7b4
                 [ "$${i##*/}" = "caps.sh" ] && continue; \
Harald Hoyer 77c7b4
 		dash -n "$$i" ; ret=$$(($$ret+$$?)); \
Harald Hoyer 77c7b4
 	done;exit $$ret
Harald Hoyer 77c7b4
-	@ret=0;for i in dracut modules.d/02caps/caps.sh modules.d/*/module-setup.sh; do \
Harald Hoyer 77c7b4
+	@ret=0;for i in mkinitrd-dracut.sh dracut modules.d/02caps/caps.sh \
Harald Hoyer 77c7b4
+	                modules.d/*/module-setup.sh; do \
Harald Hoyer 77c7b4
 		bash -n "$$i" ; ret=$$(($$ret+$$?)); \
Harald Hoyer 77c7b4
 	done;exit $$ret
Harald Hoyer 77c7b4
 
Harald Hoyer 77c7b4
diff --git a/dracut-backup.service b/dracut-backup.service
Harald Hoyer 77c7b4
new file mode 100644
Harald Hoyer 77c7b4
index 0000000..69110eb
Harald Hoyer 77c7b4
--- /dev/null
Harald Hoyer 77c7b4
+++ b/dracut-backup.service
Harald Hoyer 9d87a2
@@ -0,0 +1,15 @@
Harald Hoyer 77c7b4
+#  This file is part of systemd.
Harald Hoyer 77c7b4
+#
Harald Hoyer 77c7b4
+#  systemd is free software; you can redistribute it and/or modify it
Harald Hoyer 77c7b4
+#  under the terms of the GNU General Public License as published by
Harald Hoyer 77c7b4
+#  the Free Software Foundation; either version 2 of the License, or
Harald Hoyer 77c7b4
+#  (at your option) any later version.
Harald Hoyer 77c7b4
+
Harald Hoyer 77c7b4
+[Unit]
Harald Hoyer 77c7b4
+Description=Save /run/initramfs
Harald Hoyer 77c7b4
+ConditionPathExists=/run/initramfs
Harald Hoyer 77c7b4
+
Harald Hoyer 77c7b4
+[Service]
Harald Hoyer 77c7b4
+ExecStart=/usr/lib/dracut/dracut-initramfs-backup backup
Harald Hoyer 77c7b4
+Type=oneshot
Harald Hoyer 77c7b4
+RemainAfterExit=yes
Harald Hoyer 77c7b4
diff --git a/dracut-initramfs-backup.sh b/dracut-initramfs-backup.sh
Harald Hoyer 77c7b4
new file mode 100644
Harald Hoyer 77c7b4
index 0000000..7320d40
Harald Hoyer 77c7b4
--- /dev/null
Harald Hoyer 77c7b4
+++ b/dracut-initramfs-backup.sh
Harald Hoyer 77c7b4
@@ -0,0 +1,22 @@
Harald Hoyer 77c7b4
+#!/bin/sh
Harald Hoyer 77c7b4
+# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
Harald Hoyer 77c7b4
+# ex: ts=8 sw=4 sts=4 et filetype=sh
Harald Hoyer 77c7b4
+
Harald Hoyer 77c7b4
+set -e
Harald Hoyer 77c7b4
+cd /run/initramfs
Harald Hoyer 77c7b4
+
Harald Hoyer 77c7b4
+if [ "x$1" = "xbackup" ]; then
Harald Hoyer 77c7b4
+    compress="gzip"
Harald Hoyer 77c7b4
+    command -v pigz > /dev/null 2>&1 && compress="pigz"
Harald Hoyer 77c7b4
+    find . |cpio -H newc -o --quiet \
Harald Hoyer 77c7b4
+        | pigz > /var/lib/initramfs/_run_initramfs-backup.cpio.gz
Harald Hoyer 77c7b4
+    mv -f /var/lib/initramfs/_run_initramfs-backup.cpio.gz \
Harald Hoyer 77c7b4
+        /var/lib/initramfs/run_initramfs-backup.cpio.gz
Harald Hoyer 77c7b4
+    rm -fr etc bin lib lib64 sbin shutdown tmp usr var
Harald Hoyer 77c7b4
+    > .backuped
Harald Hoyer 77c7b4
+elif [ "x$1" = "xrestore" ]; then
Harald Hoyer 77c7b4
+    [ -f .backuped -a -f /var/lib/initramfs/run_initramfs-backup.cpio.gz ] || exit 1
Harald Hoyer 77c7b4
+    zcat /var/lib/initramfs/run_initramfs-backup.cpio.gz  | cpio -id >/dev/null 2>&1
Harald Hoyer 77c7b4
+    rm .backuped
Harald Hoyer 77c7b4
+    rm -f /var/lib/initramfs/run_initramfs-backup.cpio.gz
Harald Hoyer 77c7b4
+fi
Harald Hoyer 77c7b4
diff --git a/dracut-restore.service b/dracut-restore.service
Harald Hoyer 77c7b4
new file mode 100644
Harald Hoyer 77c7b4
index 0000000..3a07efe
Harald Hoyer 77c7b4
--- /dev/null
Harald Hoyer 77c7b4
+++ b/dracut-restore.service
Harald Hoyer 77c7b4
@@ -0,0 +1,18 @@
Harald Hoyer 77c7b4
+#  This file is part of systemd.
Harald Hoyer 77c7b4
+#
Harald Hoyer 77c7b4
+#  systemd is free software; you can redistribute it and/or modify it
Harald Hoyer 77c7b4
+#  under the terms of the GNU General Public License as published by
Harald Hoyer 77c7b4
+#  the Free Software Foundation; either version 2 of the License, or
Harald Hoyer 77c7b4
+#  (at your option) any later version.
Harald Hoyer 77c7b4
+
Harald Hoyer 77c7b4
+[Unit]
Harald Hoyer 77c7b4
+Description=Restore /run/initramfs
Harald Hoyer 77c7b4
+After=getty@tty1.service prefdm.service
Harald Hoyer 77c7b4
+Before=reboot.service
Harald Hoyer 77c7b4
+DefaultDependencies=no
Harald Hoyer 77c7b4
+ConditionPathExists=/run/initramfs/.backuped
Harald Hoyer 77c7b4
+
Harald Hoyer 77c7b4
+[Service]
Harald Hoyer 77c7b4
+ExecStart=/usr/lib/dracut/dracut-initramfs-backup restore
Harald Hoyer 77c7b4
+Type=oneshot
Harald Hoyer 77c7b4
+RemainAfterExit=yes
Harald Hoyer 77c7b4
\ No newline at end of file
Harald Hoyer 77c7b4
diff --git a/dracut.spec b/dracut.spec
Harald Hoyer 9d87a2
index 1b0b76b..6efd553 100644
Harald Hoyer 77c7b4
--- a/dracut.spec
Harald Hoyer 77c7b4
+++ b/dracut.spec
Harald Hoyer 77c7b4
@@ -27,6 +27,7 @@ Source0: http://www.kernel.org/pub/linux/utils/boot/dracut/dracut-%{version}.tar
Harald Hoyer 77c7b4
 
Harald Hoyer 77c7b4
 BuildArch: noarch
Harald Hoyer 77c7b4
 BuildRequires: dash bash git
Harald Hoyer 77c7b4
+
Harald Hoyer 77c7b4
 %if 0%{?fedora} || 0%{?rhel} > 6
Harald Hoyer 77c7b4
 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
Harald Hoyer 77c7b4
 %endif
Harald Hoyer 77c7b4
@@ -51,6 +52,10 @@ Obsoletes: nash <= 6.0.93
Harald Hoyer 77c7b4
 Obsoletes: libbdevid-python <= 6.0.93
Harald Hoyer 77c7b4
 %endif
Harald Hoyer 77c7b4
 
Harald Hoyer 77c7b4
+%if 0%{?fedora} > 16 || 0%{?rhel} > 6
Harald Hoyer 77c7b4
+BuildRequires: systemd-units
Harald Hoyer 77c7b4
+%endif
Harald Hoyer 77c7b4
+
Harald Hoyer 77c7b4
 %if 0%{?suse_version} > 9999
Harald Hoyer 77c7b4
 Obsoletes: mkinitrd < 2.6.1
Harald Hoyer 77c7b4
 Provides: mkinitrd = 2.6.1
Harald Hoyer 77c7b4
@@ -161,7 +166,8 @@ rm -rf $RPM_BUILD_ROOT
Harald Hoyer 77c7b4
 make install DESTDIR=$RPM_BUILD_ROOT \
Harald Hoyer 77c7b4
      libdir=%{_prefix}/lib \
Harald Hoyer 77c7b4
      bindir=%{_bindir} \
Harald Hoyer 77c7b4
-     sysconfdir=/etc mandir=%{_mandir}
Harald Hoyer 77c7b4
+     sysconfdir=/etc mandir=%{_mandir} \
Harald Hoyer 77c7b4
+     systemdsystemunitdir=%{_unitdir}
Harald Hoyer 77c7b4
 
Harald Hoyer 77c7b4
 echo %{name}-%{version}-%{release} > $RPM_BUILD_ROOT/%{dracutlibdir}/modules.d/10rpmversion/dracut-version
Harald Hoyer 77c7b4
 
Harald Hoyer 9d87a2
@@ -217,6 +223,7 @@ rm -rf $RPM_BUILD_ROOT
Harald Hoyer 9d87a2
 %dir %{dracutlibdir}/modules.d
Harald Hoyer 9d87a2
 %{dracutlibdir}/dracut-functions
Harald Hoyer 9d87a2
 %{dracutlibdir}/dracut-logger
Harald Hoyer 9d87a2
+%{dracutlibdir}/dracut-initramfs-backup
Harald Hoyer 9d87a2
 %config(noreplace) /etc/dracut.conf
Harald Hoyer 9d87a2
 %if 0%{?fedora} || 0%{?suse_version} || 0%{?rhel} > 6
Harald Hoyer 9d87a2
 %config /etc/dracut.conf.d/01-dist.conf
Harald Hoyer 9d87a2
@@ -266,6 +273,10 @@ rm -rf $RPM_BUILD_ROOT
Harald Hoyer 77c7b4
 %config(noreplace) /etc/logrotate.d/dracut_log
Harald Hoyer 77c7b4
 %attr(0644,root,root) %ghost %config(missingok,noreplace) %{_localstatedir}/log/dracut.log
Harald Hoyer 77c7b4
 %dir %{_sharedstatedir}/initramfs
Harald Hoyer 77c7b4
+%if 0%{?fedora} > 16 || 0%{?rhel} > 6
Harald Hoyer 77c7b4
+%{_unitdir}/*.service
Harald Hoyer 77c7b4
+%{_unitdir}/*/*.service
Harald Hoyer 77c7b4
+%endif
Harald Hoyer 77c7b4
 
Harald Hoyer 77c7b4
 %files network
Harald Hoyer 77c7b4
 %defattr(-,root,root,0755)