%global debug_package %{nil} %bcond_without check %global with_bundled 1 %global with_packit 1 %global __cargo_skip_build 0 %global __cargo_is_lib() false %global forgeurl https://github.com/fedora-iot/greenboot Version: 0.16.0 %forgemeta Name: greenboot Release: 0%{?dist} Summary: Generic Health Check Framework for systemd License: LGPLv2+ URL: %{forgeurl} Source: %{forgesource} %if ! 0%{?with_packit} %if "%{?commit}" != "" Source1: %{name}-%{commit}-vendor.tar.gz %else Source1: %{name}-%{version}-vendor.tar.gz %endif %endif ExcludeArch: s390x i686 %{power64} %if 0%{?rhel} && !0%{?eln} BuildRequires: rust-toolset %else BuildRequires: rust-packaging %endif BuildRequires: systemd-rpm-macros %{?systemd_requires} Requires: systemd >= 240 Requires: rpm-ostree # PAM is required to programmatically read motd messages from /etc/motd.d/* # This causes issues with RHEL-8 as the fix isn't there an el8 is on pam-1.3.x Requires: pam >= 1.4.0 # While not strictly necessary to generate the motd, the main use-case of this package is to display it on SSH login Recommends: openssh # List of bundled crates in vendor tarball, generated with: # cargo metadata --locked --format-version 1 | CRATE_NAME="greenboot" ./bundled-provides.jq Provides: bundled(crate(aho-corasick)) = 1.1.3 Provides: bundled(crate(anstream)) = 0.6.18 Provides: bundled(crate(anstyle)) = 1.0.10 Provides: bundled(crate(anstyle-parse)) = 0.2.6 Provides: bundled(crate(anstyle-query)) = 1.1.2 Provides: bundled(crate(anstyle-wincon)) = 3.0.7 Provides: bundled(crate(anyhow)) = 1.0.98 Provides: bundled(crate(arraydeque)) = 0.5.1 Provides: bundled(crate(async-trait)) = 0.1.88 Provides: bundled(crate(autocfg)) = 1.4.0 Provides: bundled(crate(base64)) = 0.21.7 Provides: bundled(crate(bitflags)) = 1.3.2 Provides: bundled(crate(bitflags)) = 2.9.0 Provides: bundled(crate(block-buffer)) = 0.10.4 Provides: bundled(crate(cfg-if)) = 1.0.0 Provides: bundled(crate(clap)) = 4.5.36 Provides: bundled(crate(clap_builder)) = 4.5.36 Provides: bundled(crate(clap_derive)) = 4.5.32 Provides: bundled(crate(clap_lex)) = 0.7.4 Provides: bundled(crate(colorchoice)) = 1.0.3 Provides: bundled(crate(config)) = 0.15.11 Provides: bundled(crate(const-random)) = 0.1.18 Provides: bundled(crate(const-random-macro)) = 0.1.16 Provides: bundled(crate(convert_case)) = 0.6.0 Provides: bundled(crate(cpufeatures)) = 0.2.17 Provides: bundled(crate(crunchy)) = 0.2.3 Provides: bundled(crate(crypto-common)) = 0.1.6 Provides: bundled(crate(digest)) = 0.10.7 Provides: bundled(crate(dlv-list)) = 0.5.2 Provides: bundled(crate(encoding_rs)) = 0.8.35 Provides: bundled(crate(env_logger)) = 0.10.2 Provides: bundled(crate(equivalent)) = 1.0.2 Provides: bundled(crate(errno)) = 0.3.11 Provides: bundled(crate(fastrand)) = 2.3.0 Provides: bundled(crate(foldhash)) = 0.1.5 Provides: bundled(crate(generic-array)) = 0.14.7 Provides: bundled(crate(getrandom)) = 0.2.15 Provides: bundled(crate(getrandom)) = 0.3.2 Provides: bundled(crate(glob)) = 0.3.2 Provides: bundled(crate(hashbrown)) = 0.14.5 Provides: bundled(crate(hashbrown)) = 0.15.2 Provides: bundled(crate(hashlink)) = 0.10.0 Provides: bundled(crate(heck)) = 0.5.0 Provides: bundled(crate(hermit-abi)) = 0.5.0 Provides: bundled(crate(humantime)) = 2.2.0 Provides: bundled(crate(indexmap)) = 2.9.0 Provides: bundled(crate(is-terminal)) = 0.4.16 Provides: bundled(crate(is_terminal_polyfill)) = 1.70.1 Provides: bundled(crate(itoa)) = 1.0.15 Provides: bundled(crate(json5)) = 0.4.1 Provides: bundled(crate(libc)) = 0.2.171 Provides: bundled(crate(linux-raw-sys)) = 0.9.4 Provides: bundled(crate(log)) = 0.4.27 Provides: bundled(crate(memchr)) = 2.7.4 Provides: bundled(crate(memoffset)) = 0.7.1 Provides: bundled(crate(nix)) = 0.26.4 Provides: bundled(crate(once_cell)) = 1.21.3 Provides: bundled(crate(ordered-multimap)) = 0.7.3 Provides: bundled(crate(pathdiff)) = 0.2.3 Provides: bundled(crate(pest)) = 2.8.0 Provides: bundled(crate(pest_derive)) = 2.8.0 Provides: bundled(crate(pest_generator)) = 2.8.0 Provides: bundled(crate(pest_meta)) = 2.8.0 Provides: bundled(crate(pin-utils)) = 0.1.0 Provides: bundled(crate(pretty_env_logger)) = 0.5.0 Provides: bundled(crate(proc-macro2)) = 1.0.94 Provides: bundled(crate(quote)) = 1.0.40 Provides: bundled(crate(r-efi)) = 5.2.0 Provides: bundled(crate(regex)) = 1.11.1 Provides: bundled(crate(regex-automata)) = 0.4.9 Provides: bundled(crate(regex-syntax)) = 0.8.5 Provides: bundled(crate(ron)) = 0.8.1 Provides: bundled(crate(rust-ini)) = 0.21.1 Provides: bundled(crate(rustix)) = 1.0.5 Provides: bundled(crate(ryu)) = 1.0.20 Provides: bundled(crate(serde)) = 1.0.219 Provides: bundled(crate(serde_derive)) = 1.0.219 Provides: bundled(crate(serde_json)) = 1.0.140 Provides: bundled(crate(serde_spanned)) = 0.6.8 Provides: bundled(crate(sha2)) = 0.10.8 Provides: bundled(crate(strsim)) = 0.11.1 Provides: bundled(crate(syn)) = 2.0.100 Provides: bundled(crate(tempfile)) = 3.19.1 Provides: bundled(crate(termcolor)) = 1.4.1 Provides: bundled(crate(thiserror)) = 2.0.12 Provides: bundled(crate(thiserror-impl)) = 2.0.12 Provides: bundled(crate(tiny-keccak)) = 2.0.2 Provides: bundled(crate(toml)) = 0.8.20 Provides: bundled(crate(toml_datetime)) = 0.6.8 Provides: bundled(crate(toml_edit)) = 0.22.24 Provides: bundled(crate(trim-in-place)) = 0.1.7 Provides: bundled(crate(typenum)) = 1.18.0 Provides: bundled(crate(ucd-trie)) = 0.1.7 Provides: bundled(crate(unicode-ident)) = 1.0.18 Provides: bundled(crate(unicode-segmentation)) = 1.12.0 Provides: bundled(crate(utf8parse)) = 0.2.2 Provides: bundled(crate(version_check)) = 0.9.5 Provides: bundled(crate(wasi)) = 0.11.0+wasi_snapshot_preview1 Provides: bundled(crate(wasi)) = 0.14.2+wasi_0.2.4 Provides: bundled(crate(winapi-util)) = 0.1.9 Provides: bundled(crate(windows-sys)) = 0.59.0 Provides: bundled(crate(windows-targets)) = 0.52.6 Provides: bundled(crate(windows_aarch64_gnullvm)) = 0.52.6 Provides: bundled(crate(windows_aarch64_msvc)) = 0.52.6 Provides: bundled(crate(windows_i686_gnu)) = 0.52.6 Provides: bundled(crate(windows_i686_gnullvm)) = 0.52.6 Provides: bundled(crate(windows_i686_msvc)) = 0.52.6 Provides: bundled(crate(windows_x86_64_gnu)) = 0.52.6 Provides: bundled(crate(windows_x86_64_gnullvm)) = 0.52.6 Provides: bundled(crate(windows_x86_64_msvc)) = 0.52.6 Provides: bundled(crate(winnow)) = 0.7.6 Provides: bundled(crate(wit-bindgen-rt)) = 0.39.0 Provides: bundled(crate(yaml-rust2)) = 0.10.1 %description %{summary}. %package default-health-checks Summary: Series of optional and curated health checks Requires: %{name} = %{version}-%{release} Requires: util-linux Requires: jq %description default-health-checks %{summary}. %prep %forgeautosetup %if ! 0%{?with_packit} tar xvf %{SOURCE1} %endif %if ! 0%{?with_bundled} %cargo_prep %else mkdir -p .cargo cat >.cargo/config << EOF [build] rustc = "%{__rustc}" rustdoc = "%{__rustdoc}" %if 0%{?rhel} && !0%{?eln} rustflags = %{__global_rustflags_toml} %else rustflags = "%{__global_rustflags_toml}" %endif [profile.rpm] inherits = "release" [install] root = "%{buildroot}%{_prefix}" [term] verbose = true [source.crates-io] replace-with = "vendored-sources" [source.vendored-sources] directory = "vendor" EOF %endif %if ! 0%{?with_bundled} %generate_buildrequires %cargo_generate_buildrequires %endif %build %cargo_build %install %cargo_install # `greenboot` should not be executed directly by users, so we move the binary mkdir -p %{buildroot}%{_libexecdir} mkdir -p %{buildroot}%{_libexecdir}/%{name} mv %{buildroot}%{_bindir}/greenboot %{buildroot}%{_libexecdir}/%{name}/%{name} install -Dpm0644 -t %{buildroot}%{_unitdir} \ usr/lib/systemd/system/*.service # add config mkdir -p %{buildroot}%{_exec_prefix}/lib/motd.d/ mkdir -p %{buildroot}%{_libexecdir}/%{name} install -Dpm0644 -t %{buildroot}%{_sysconfdir}/%{name} etc/greenboot/greenboot.conf mkdir -p %{buildroot}%{_sysconfdir}/%{name}/check/required.d mkdir %{buildroot}%{_sysconfdir}/%{name}/check/wanted.d mkdir %{buildroot}%{_sysconfdir}/%{name}/green.d mkdir %{buildroot}%{_sysconfdir}/%{name}/red.d mkdir -p %{buildroot}%{_prefix}/lib/%{name}/check/required.d mkdir %{buildroot}%{_prefix}/lib/%{name}/check/wanted.d mkdir %{buildroot}%{_prefix}/lib/%{name}/green.d mkdir %{buildroot}%{_prefix}/lib/%{name}/red.d mkdir -p %{buildroot}%{_unitdir} mkdir -p %{buildroot}%{_tmpfilesdir} install -DpZm 0755 usr/lib/greenboot/check/required.d/* %{buildroot}%{_prefix}/lib/%{name}/check/required.d install -DpZm 0755 usr/lib/greenboot/check/wanted.d/* %{buildroot}%{_prefix}/lib/%{name}/check/wanted.d %post %systemd_post greenboot-healthcheck.service %systemd_post greenboot-rollback.service %preun %systemd_preun greenboot-healthcheck.service %systemd_preun greenboot-rollback.service %postun %systemd_postun greenboot-healthcheck.service %systemd_postun greenboot-rollback.service %files %doc README.md %license LICENSE %dir %{_libexecdir}/%{name} %{_libexecdir}/%{name}/%{name} %{_unitdir}/greenboot-healthcheck.service %{_unitdir}/greenboot-rollback.service %{_sysconfdir}/%{name}/greenboot.conf %dir %{_prefix}/lib/%{name} %dir %{_prefix}/lib/%{name}/check %dir %{_prefix}/lib/%{name}/check/required.d %dir %{_prefix}/lib/%{name}/check/wanted.d %dir %{_prefix}/lib/%{name}/green.d %dir %{_prefix}/lib/%{name}/red.d %dir %{_sysconfdir}/%{name} %dir %{_sysconfdir}/%{name}/check %dir %{_sysconfdir}/%{name}/check/required.d %dir %{_sysconfdir}/%{name}/check/wanted.d %dir %{_sysconfdir}/%{name}/green.d %dir %{_sysconfdir}/%{name}/red.d %files default-health-checks %{_prefix}/lib/%{name}/check/required.d/01_repository_dns_check.sh %{_prefix}/lib/%{name}/check/wanted.d/01_update_platforms_check.sh %{_prefix}/lib/%{name}/check/required.d/02_watchdog.sh %changelog * Thu Sep 08 2022 Peter Robinson - 0.15.2-1 - The 0.15.2 release * Tue Aug 09 2022 Peter Robinson - 0.15.1-1 - Add conf during installation * Thu Jul 21 2022 Sayan Paul - 0.15.0-1 - The 0.15.0 release - Add service-monitor * Thu Nov 18 2021 Peter Robinson - 0.14.0-1 - The 0.14.0 release - Add watchdog-triggered boot check - Ensure all required health checks are run * Wed Nov 10 2021 Peter Robinson - 0.13.1-1 - Update to 0.13.1 * Mon Jul 26 2021 Jose Noguera - 0.12.0-1 - Update to 0.12.0 - Add ability to configure maximum number of boot attempts via env var and config file. - Add How does it work section to README. - Add CI via GitHub Actions and unit testing with BATS. - Add update platforms DNS resolution and connection checker as health checks out of the box * Sat Jan 16 2021 Peter Robinson - 0.11.0-2 - Make arch specific due to grub availability on s390x - Resolves: rhbz#1915241 * Thu Aug 13 2020 Christian Glombek - 0.11.0-1 - Update to 0.11.0 * Thu Jun 11 2020 Peter Robinson - 0.10.3-2 - Update changelog * Fri Jun 05 2020 Christian Glombek - 0.10.3-1 - Update to 0.10.3 * Wed Jun 03 2020 Christian Glombek - 0.10.2-1 - Update to 0.10.2 * Wed May 27 2020 Christian Glombek - 0.10-1 - Update to 0.10 * Mon May 04 2020 Christian Glombek - 0.9-2 - Added missing requires to grub2 and rpm-ostree-grub2 packages - Run %%setup quietly * Fri Apr 03 2020 Christian Glombek - 0.9-1 - Update to v0.9 - Update repo_owner * Wed Feb 05 2020 Christian Glombek - 0.8-1 - Update to v0.8 - Add guard against bootlooping in redboot-auto-reboot.service * Mon Apr 01 2019 Christian Glombek - 0.7-1 - Update to v0.7 - Rename ostree-grub2 subpackage to rpm-ostree-grub2 to be more explicit - Add auto-update-fallback meta subpackage * Wed Feb 13 2019 Christian Glombek - 0.6-1 - Update to v0.6 - Integrate with systemd's boot-complete.target - Rewrite motd sub-package and rename to status * Fri Oct 19 2018 Christian Glombek - 0.5-1 - Update to v0.5 * Tue Oct 02 2018 Christian Glombek - 0.4-2 - Spec Review * Thu Jun 14 2018 Christian Glombek - 0.4-1 - Initial Package