diff --git a/Makefile-dracut.am b/Makefile-dracut.am new file mode 100644 index 00000000..92a48955 --- /dev/null +++ b/Makefile-dracut.am @@ -0,0 +1,30 @@ +# Makefile for dracut module +# +# Copyright (C) 2013 Colin Walters +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + +if BUILDOPT_DRACUT +# Not using $(libdir) here is intentional, dracut modules go in prefix/lib +dracutmoddir = $(prefix)/lib/dracut/modules.d/98ostree +dracutmod_SCRIPTS = src/dracut/module-setup.sh +dracutmod_DATA = src/dracut/ostree-prepare-root.service + +dracutconfdir = $(sysconfdir)/dracut.conf.d +dracutconf_DATA = src/dracut/ostree.conf +endif + +EXTRA_DIST += $(dracutmod_DATA) $(dracutmod_SCRIPTS) diff --git a/Makefile.am b/Makefile.am index 0ad12e47..722ac770 100644 --- a/Makefile.am +++ b/Makefile.am @@ -86,6 +86,7 @@ include Makefile-ostree.am include Makefile-switchroot.am include Makefile-triggers.am include Makefile-tests.am +include Makefile-dracut.am # Docbook generation copied from systemd/Makefile.am diff --git a/configure.ac b/configure.ac index 8acf7dac..5e822210 100644 --- a/configure.ac +++ b/configure.ac @@ -146,6 +146,12 @@ AC_ARG_ENABLE(grub2-hook, enable_grub2_hook=${grub2_hook_default}) AM_CONDITIONAL(ENABLE_GRUB2_HOOK, test $enable_grub2_hook != no) +AC_ARG_WITH(dracut, + AS_HELP_STRING([--with-dracut], + [Install dracut module (default: no)]),, + [with_dracut=no]) +AM_CONDITIONAL(BUILDOPT_DRACUT, test x$with_dracut = xyes) + AC_CONFIG_FILES([ Makefile embedded-dependencies/Makefile @@ -164,4 +170,5 @@ echo " documentation: $enable_documentation kernel updates integration: $enable_kernel_updates GRUB2 hook: $enable_grub2_hook + dracut: $with_dracut " diff --git a/src/dracut/module-setup.sh b/src/dracut/module-setup.sh new file mode 100755 index 00000000..b2af7726 --- /dev/null +++ b/src/dracut/module-setup.sh @@ -0,0 +1,41 @@ +#!/bin/bash +# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- +# ex: ts=8 sw=4 sts=4 et filetype=sh +# +# Copyright (C) 2013 Colin Walters +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + +check() { + if [[ -x $systemdutildir/systemd ]] && [[ -x /usr/sbin/ostree-prepare-root ]]; then + return 255 + fi + + return 1 +} + +depends() { + return 0 +} + +install() { + dracut_install ostree-prepare-root + inst_simple "$moddir/ostree-prepare-root.service" "${systemdsystemunitdir}/ostree-prepare-root.service" + mkdir -p "${initdir}${systemdsystemconfdir}/initrd-switch-root.target.wants" + ln_r "${systemdsystemunitdir}/ostree-prepare-root.service" \ + "${systemdsystemconfdir}/initrd-switch-root.target.wants/ostree-prepare-root.service" +} + diff --git a/src/dracut/ostree-prepare-root.service b/src/dracut/ostree-prepare-root.service new file mode 100644 index 00000000..230c856b --- /dev/null +++ b/src/dracut/ostree-prepare-root.service @@ -0,0 +1,32 @@ +# Copyright (C) 2013 Colin Walters +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + +[Unit] +Description=OSTree Prepare OS/ +DefaultDependencies=no +ConditionKernelCommandLine=ostree +ConditionPathExists=/etc/initrd-release +OnFailure=emergency.service +After=initrd-switch-root.target +Before=initrd-switch-root.service + +[Service] +Type=oneshot +ExecStart=/usr/sbin/ostree-prepare-root /sysroot +StandardInput=null +StandardOutput=syslog +StandardError=syslog+console diff --git a/src/dracut/ostree.conf b/src/dracut/ostree.conf new file mode 100755 index 00000000..3d86ec4c --- /dev/null +++ b/src/dracut/ostree.conf @@ -0,0 +1,18 @@ +# Copyright (C) 2013 Colin Walters +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + +add_dracutmodules+="ostree"