mirror of
https://github.com/ostreedev/ostree.git
synced 2024-12-21 13:34:34 +03:00
92b1a27202
In the OSTree model, executables go in `/usr`, state in `/var` and configuration in `/etc`. Software that lives in `/opt` however messes this up because it often mixes code *and* state, making it harder to manage. More generally, it's sometimes useful to have the OSTree commit contain code under a certain path, but still allow that path to be writable by software and the sysadmin at runtime (`/usr/local` is another instance). Add the concept of state overlays. A state overlay is an overlayfs mount whose upper directory, which contains unmanaged state, is carried forward on top of a lower directory, containing OSTree-managed files. In the example of `/usr/local`, OSTree commits can ship content there, all while allowing users to e.g. add scripts in `/usr/local/bin` when booted into that commit. Some reconciliation logic is executed whenever the base is updated so that newer files in the base are never shadowed by a copied up version in the upper directory. This matches RPM semantics when upgrading packages whose files may have been modified. For ease of integration, this is exposed as a systemd template unit which any downstream distro/user can enable. The instance name is the mountpath in escaped systemd path notation (e.g. `ostree-state-overlay@usr-local.service`). See discussions in https://github.com/ostreedev/ostree/issues/3113 for more details.
80 lines
2.8 KiB
Plaintext
80 lines
2.8 KiB
Plaintext
# Makefile for boot module
|
|
#
|
|
# Copyright (C) 2013 Colin Walters <walters@verbum.org>
|
|
#
|
|
# SPDX-License-Identifier: LGPL-2.0+
|
|
#
|
|
# 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, see <https://www.gnu.org/licenses/>.
|
|
|
|
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/boot/dracut/module-setup.sh
|
|
endif
|
|
if BUILDOPT_DRACUT_CONF
|
|
dracutconfdir = $(sysconfdir)/dracut.conf.d
|
|
dracutconf_DATA = src/boot/dracut/ostree.conf
|
|
endif
|
|
|
|
if BUILDOPT_MKINITCPIO
|
|
mkinitcpioinstalldir = $(prefix)/lib/initcpio/install
|
|
mkinitcpioinstall_SCRIPTS = src/boot/mkinitcpio/ostree
|
|
|
|
mkinitcpioconfdir = $(sysconfdir)
|
|
mkinitcpioconf_DATA = src/boot/mkinitcpio/ostree-mkinitcpio.conf
|
|
endif
|
|
|
|
if BUILDOPT_SYSTEMD
|
|
systemdsystemunit_DATA = src/boot/ostree-prepare-root.service \
|
|
src/boot/ostree-remount.service \
|
|
src/boot/ostree-boot-complete.service \
|
|
src/boot/ostree-finalize-staged.service \
|
|
src/boot/ostree-finalize-staged.path \
|
|
src/boot/ostree-finalize-staged-hold.service \
|
|
src/boot/ostree-state-overlay@.service \
|
|
$(NULL)
|
|
systemdtmpfilesdir = $(prefix)/lib/tmpfiles.d
|
|
dist_systemdtmpfiles_DATA = src/boot/ostree-tmpfiles.conf
|
|
|
|
# Allow the distcheck install under $prefix test to pass
|
|
AM_DISTCHECK_CONFIGURE_FLAGS += --with-systemdsystemunitdir='$${libdir}/systemd/system'
|
|
endif
|
|
|
|
if !BUILDOPT_BUILTIN_GRUB2_MKCONFIG
|
|
# We're using the system grub2-mkconfig generator
|
|
pkglibexec_SCRIPTS += src/boot/grub2/grub2-15_ostree
|
|
install-grub2-config-hook:
|
|
mkdir -p $(DESTDIR)$(grub2configdir)
|
|
ln -sf $(pkglibexecdir)/grub2-15_ostree $(DESTDIR)$(grub2configdir)/15_ostree
|
|
grub2configdir = $(sysconfdir)/grub.d
|
|
INSTALL_DATA_HOOKS += install-grub2-config-hook
|
|
else
|
|
# We're using our internal generator
|
|
ostree_boot_SCRIPTS += src/boot/grub2/ostree-grub-generator
|
|
endif
|
|
|
|
EXTRA_DIST += src/boot/dracut/module-setup.sh \
|
|
src/boot/dracut/ostree.conf \
|
|
src/boot/mkinitcpio \
|
|
src/boot/ostree-boot-complete.service \
|
|
src/boot/ostree-prepare-root.service \
|
|
src/boot/ostree-finalize-staged.path \
|
|
src/boot/ostree-remount.service \
|
|
src/boot/ostree-finalize-staged.service \
|
|
src/boot/ostree-finalize-staged-hold.service \
|
|
src/boot/ostree-state-overlay@.service \
|
|
src/boot/grub2/grub2-15_ostree \
|
|
src/boot/grub2/ostree-grub-generator \
|
|
$(NULL)
|