diff --git a/cookbooks/base/Makefile b/cookbooks/base/Makefile index d0638b2..56af166 100644 --- a/cookbooks/base/Makefile +++ b/cookbooks/base/Makefile @@ -1,10 +1,11 @@ -# Include common Makefile -include ../../scripts/common.mk -SYSTEMD_MAIN_UNIT_NAMES += var-lib-virtiofs-data.mount +SYSTEMD_MAIN_UNIT_NAMES := var-lib-virtiofs-data.mount SYSTEMD_MAIN_UNIT_NAMES += rpm-ostree-install-qemu-guest-agent.service SYSTEMD_MAIN_UNIT_NAMES += install-fastfetch.service +# Include common Makefile +include ../../scripts/common.mk + pre-requisites:: @set -Eeuo pipefail; \ for tool in rpm-ostree; do \ diff --git a/scripts/butane.blocklist b/scripts/butane.blocklist index 5680439..4a5b4b9 100644 --- a/scripts/butane.blocklist +++ b/scripts/butane.blocklist @@ -10,3 +10,4 @@ /etc/tmpfiles.d /etc/sysctl.d /etc/profile.d +/etc/sysconfig diff --git a/scripts/common.mk b/scripts/common.mk index fc0676c..4f17499 100644 --- a/scripts/common.mk +++ b/scripts/common.mk @@ -83,7 +83,12 @@ SYSTEMD_UNIT_NAMES := $(wildcard *.service *.target *.timer *.mount) SYSTEMD_TIMER_NAMES := $(wildcard *.timer) # The main systemd units will be enabled and started after installation. -SYSTEMD_MAIN_UNIT_NAMES := $(wildcard *.target) +SYSTEMD_MAIN_UNIT_NAMES ?= $(wildcard *.target) +SYSTEMD_START_UNITS = $(SYSTEMD_MAIN_UNIT_NAMES) + +# Generated systemd units (quadlets) cannot be enabled. +# That's why we filter them out from the list of units to be enabled. +SYSTEMD_ENABLE_UNITS = $(filter-out $(QUADLET_UNIT_NAMES),$(SYSTEMD_MAIN_UNIT_NAMES)) # Configuration files CONFIG_FILES := $(shell find config/ -mindepth 1 \! -path "config/examples/*" \! -path "config/examples" 2>/dev/null) @@ -255,28 +260,28 @@ install-files-pre:: # This target can be extended by Makefiles sourcing this one. install-files-post:: -# Generated systemd units (quadlets) cannot be enabled. -# That's why we filter them out from the list of units to be enabled. -install-actions uninstall: ENABLE_UNITS = $(filter-out $(QUADLET_UNIT_NAMES),$(SYSTEMD_MAIN_UNIT_NAMES) $(SYSTEMD_TIMER_NAMES)) -install-actions uninstall: START_UNITS = $(SYSTEMD_MAIN_UNIT_NAMES) - # Perform post-installation actions such as enabling and starting units. install-actions: install-actions-pre systemctl daemon-reload - systemd-analyze --generators=true verify $(QUADLET_UNIT_NAMES) $(SYSTEMD_UNIT_NAMES) @run() { echo $$*; "$$@"; }; \ set -Eeuo pipefail; \ + if [[ ! "$(QUADLET_UNIT_NAMES)" =~ ^[[:space:]]*$$ ]]; then \ + run systemd-analyze --generators=true verify $(QUADLET_UNIT_NAMES); \ + fi; \ + if [[ ! "$(SYSTEMD_UNIT_NAMES)" =~ ^[[:space:]]*$$ ]]; then \ + run systemd-analyze --generators=true verify $(SYSTEMD_UNIT_NAMES); \ + fi; \ if [ -f /etc/tmpfiles.d/$(PROJECT_NAME).conf ]; then \ run systemd-tmpfiles --create /etc/tmpfiles.d/$(PROJECT_NAME).conf; \ fi; \ if [ -f /etc/sysctl.d/$(PROJECT_NAME).conf ]; then \ run sysctl -q -p /etc/sysctl.d/$(PROJECT_NAME).conf; \ fi ; \ - if [ -n "$(ENABLE_UNITS)" ]; then \ - run systemctl enable $(ENABLE_UNITS); \ + if [ -n "$(SYSTEMD_ENABLE_UNITS)" ]; then \ + run systemctl enable $(SYSTEMD_ENABLE_UNITS); \ fi ; \ - if [ -n "$(START_UNITS)" ]; then \ - run systemctl start $(START_UNITS); \ + if [ -n "$(SYSTEMD_START_UNITS)" ]; then \ + run systemctl start $(SYSTEMD_START_UNITS); \ fi $(MAKE) install-actions-post @@ -314,11 +319,11 @@ uninstall: FILES_TO_REMOVE := $(shell echo $(TARGET_FILES) $(TARGET_EXAMPLE_FILE uninstall: pre-requisites uninstall-pre @run() { echo $$*; "$$@"; }; \ set -Eeuo pipefail; \ - if [ -n "$(ENABLE_UNITS)" ]; then \ - run systemctl disable $(ENABLE_UNITS) || true; \ + if [ -n "$(SYSTEMD_ENABLE_UNITS)" ]; then \ + run systemctl disable $(SYSTEMD_ENABLE_UNITS) || true; \ fi ; \ - if [ -n "$(START_UNITS)" ]; then \ - run systemctl stop $(START_UNITS) || true; \ + if [ -n "$(SYSTEMD_START_UNITS)" ]; then \ + run systemctl stop $(SYSTEMD_START_UNITS) || true; \ fi @run() { echo $$*; "$$@"; }; \ set -Eeuo pipefail; \ @@ -360,7 +365,8 @@ pytest: pre-requisites build/$(PROJECT_NAME).tar.gz build/$(PROJECT_NAME).bu build/$(PROJECT_NAME)-examples.bu: export PROJECT_NAME := $(PROJECT_NAME) build/$(PROJECT_NAME).tar.gz build/$(PROJECT_NAME).bu build/$(PROJECT_NAME)-examples.bu: export TARGET_CHROOT := $(TARGET_CHROOT) build/$(PROJECT_NAME).tar.gz build/$(PROJECT_NAME).bu build/$(PROJECT_NAME)-examples.bu: export BUTANE_BLOCKLIST := $(BUTANE_BLOCKLIST) -build/$(PROJECT_NAME).tar.gz build/$(PROJECT_NAME).bu build/$(PROJECT_NAME)-examples.bu: export SYSTEMD_MAIN_UNIT_NAMES := $(SYSTEMD_MAIN_UNIT_NAMES) +build/$(PROJECT_NAME).tar.gz build/$(PROJECT_NAME).bu build/$(PROJECT_NAME)-examples.bu: export SYSTEMD_ENABLE_UNITS := $(SYSTEMD_ENABLE_UNITS) +build/$(PROJECT_NAME).tar.gz build/$(PROJECT_NAME).bu build/$(PROJECT_NAME)-examples.bu: export SYSTEMD_START_UNITS := $(SYSTEMD_START_UNITS) build/$(PROJECT_NAME).tar.gz build/$(PROJECT_NAME).bu build/$(PROJECT_NAME)-examples.bu: export SYSTEMD_TIMER_NAMES := $(SYSTEMD_TIMER_NAMES) build/$(PROJECT_NAME).tar.gz build/$(PROJECT_NAME).bu build/$(PROJECT_NAME)-examples.bu &: @if [ -z "$(TARGET_CHROOT)" ]; then \ diff --git a/scripts/generate-butane-spec.sh b/scripts/generate-butane-spec.sh index c4a7844..32fde10 100755 --- a/scripts/generate-butane-spec.sh +++ b/scripts/generate-butane-spec.sh @@ -70,7 +70,7 @@ cat >> "$OUTPUT" <<"EOF" systemd: units: EOF -for unit in ${SYSTEMD_MAIN_UNIT_NAMES}; do +for unit in ${SYSTEMD_ENABLE_UNITS}; do cat >> "$OUTPUT" <> "$metadata_file" fi -if [ -n "${SYSTEMD_MAIN_UNIT_NAMES}" ]; then - echo "systemd_main_units:" >> "$metadata_file" - for unit in ${SYSTEMD_MAIN_UNIT_NAMES}; do +if [ -n "${SYSTEMD_START_UNITS}" ]; then + echo "systemd_start_units:" >> "$metadata_file" + for unit in ${SYSTEMD_START_UNITS}; do echo "- $unit" done >> "$metadata_file" else - echo "systemd_main_units: []" >> "$metadata_file" + echo "systemd_start_units: []" >> "$metadata_file" +fi +if [ -n "${SYSTEMD_ENABLE_UNITS}" ]; then + echo "systemd_enable_units:" >> "$metadata_file" + for unit in ${SYSTEMD_ENABLE_UNITS}; do + echo "- $unit" + done >> "$metadata_file" +else + echo "systemd_enable_units: []" >> "$metadata_file" fi # Convert metadata.yaml to metadata.json yq -o json "$metadata_file" > "$tmp_dir/metadata.json"