diff --git a/.bootc.metadata b/.bootc.metadata deleted file mode 100644 index 88b54ca..0000000 --- a/.bootc.metadata +++ /dev/null @@ -1,2 +0,0 @@ -f845ad2a14b147102fd407cff8c75f46f18485e6 SOURCES/bootc-1.1.5-vendor.tar.zstd -77fd4b2f65b52577b0f8a3c6679b04ce5eff47ac SOURCES/bootc-1.1.5.tar.zstd diff --git a/.gitignore b/.gitignore index b24879c..df4a31b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ -SOURCES/bootc-1.1.5-vendor.tar.zstd -SOURCES/bootc-1.1.5.tar.zstd +bootc-1.1.6-vendor.tar.zstd +bootc-1.1.6.tar.zstd diff --git a/0001-store-Really-remove-empty-etc-resolv.conf-and-etc-ho.patch b/0001-store-Really-remove-empty-etc-resolv.conf-and-etc-ho.patch new file mode 100644 index 0000000..26f7449 --- /dev/null +++ b/0001-store-Really-remove-empty-etc-resolv.conf-and-etc-ho.patch @@ -0,0 +1,127 @@ +From 7473ffd0bd0e30aecfd1af67f3ef7a69af4a4645 Mon Sep 17 00:00:00 2001 +From: Colin Walters +Date: Wed, 5 Mar 2025 12:58:07 -0500 +Subject: [PATCH] store: Really remove empty /etc/resolv.conf and /etc/hostname + +The previous change here was a no-op for two reasons: + +- It's actually usr/etc at this point +- We were operating on the wrong rootfs + +Fixes: https://github.com/containers/bootc/pull/1096/commits/57bd0dc9835669274696998386a547afb6709ff5 +Signed-off-by: Colin Walters +--- + ostree-ext/src/container/store.rs | 32 +++++++++++--------- + tests/booted/readonly/011-test-resolvconf.nu | 23 ++++++++++++++ + 2 files changed, 40 insertions(+), 15 deletions(-) + create mode 100644 tests/booted/readonly/011-test-resolvconf.nu + +diff --git a/ostree-ext/src/container/store.rs b/ostree-ext/src/container/store.rs +index 71a9824..2b3f5df 100644 +--- a/ostree-ext/src/container/store.rs ++++ b/ostree-ext/src/container/store.rs +@@ -466,7 +466,7 @@ fn timestamp_of_manifest_or_config( + /// Automatically clean up files that may have been injected by container + /// builds. xref https://github.com/containers/buildah/issues/4242 + fn cleanup_root(root: &Dir) -> Result<()> { +- const RUNTIME_INJECTED: &[&str] = &["etc/hostname", "etc/resolv.conf"]; ++ const RUNTIME_INJECTED: &[&str] = &["usr/etc/hostname", "usr/etc/resolv.conf"]; + for ent in RUNTIME_INJECTED { + if let Some(meta) = root.symlink_metadata_optional(ent)? { + if meta.is_file() && meta.size() == 0 { +@@ -1055,6 +1055,8 @@ impl ImageImporter { + .with_context(|| format!("Checking out layer {commit}"))?; + } + ++ let root_dir = td.open_dir(rootpath)?; ++ + let modifier = + ostree::RepoCommitModifier::new(ostree::RepoCommitModifierFlags::CONSUME, None); + modifier.set_devino_cache(&devino); +@@ -1062,8 +1064,7 @@ impl ImageImporter { + // the derived layers include custom policy. Just relabel everything + // in this case. + if have_derived_layers { +- let rootpath = td.open_dir(rootpath)?; +- let sepolicy = ostree::SePolicy::new_at(rootpath.as_raw_fd(), cancellable)?; ++ let sepolicy = ostree::SePolicy::new_at(root_dir.as_raw_fd(), cancellable)?; + tracing::debug!("labeling from merged tree"); + modifier.set_sepolicy(Some(&sepolicy)); + } else if let Some(base) = base_commit.as_ref() { +@@ -1074,7 +1075,7 @@ impl ImageImporter { + unreachable!() + } + +- cleanup_root(&td)?; ++ cleanup_root(&root_dir)?; + + let mt = ostree::MutableTree::new(); + repo.write_dfd_to_mtree( +@@ -1965,23 +1966,24 @@ mod tests { + #[test] + fn test_cleanup_root() -> Result<()> { + let td = cap_tempfile::TempDir::new(cap_std::ambient_authority())?; +- ++ let usretc = "usr/etc"; + cleanup_root(&td).unwrap(); +- td.create_dir("etc")?; +- td.write("etc/hostname", b"hostname")?; ++ td.create_dir_all(usretc)?; ++ let usretc = &td.open_dir(usretc)?; ++ usretc.write("hostname", b"hostname")?; + cleanup_root(&td).unwrap(); +- assert!(td.try_exists("etc/hostname")?); +- td.write("etc/hostname", b"")?; ++ assert!(usretc.try_exists("hostname")?); ++ usretc.write("hostname", b"")?; + cleanup_root(&td).unwrap(); +- assert!(!td.try_exists("etc/hostname")?); ++ assert!(!td.try_exists("hostname")?); + +- td.symlink_contents("../run/systemd/stub-resolv.conf", "etc/resolv.conf")?; ++ usretc.symlink_contents("../run/systemd/stub-resolv.conf", "resolv.conf")?; + cleanup_root(&td).unwrap(); +- assert!(td.symlink_metadata("etc/resolv.conf")?.is_symlink()); +- td.remove_file("etc/resolv.conf")?; +- td.write("etc/resolv.conf", b"")?; ++ assert!(usretc.symlink_metadata("resolv.conf")?.is_symlink()); ++ usretc.remove_file("resolv.conf")?; ++ usretc.write("resolv.conf", b"")?; + cleanup_root(&td).unwrap(); +- assert!(!td.try_exists("etc/resolv.conf")?); ++ assert!(!usretc.try_exists("resolv.conf")?); + + Ok(()) + } +diff --git a/tests/booted/readonly/011-test-resolvconf.nu b/tests/booted/readonly/011-test-resolvconf.nu +new file mode 100644 +index 0000000..a5f8fe9 +--- /dev/null ++++ b/tests/booted/readonly/011-test-resolvconf.nu +@@ -0,0 +1,23 @@ ++use std assert ++use tap.nu ++ ++tap begin "verify there's not an empty /etc/resolv.conf in the image" ++ ++let st = bootc status --json | from json ++ ++let booted_ostree = $st.status.booted.ostree.checksum; ++ ++# ostree ls should probably have --json and a clean way to not error on ENOENT ++let resolvconf = ostree ls $booted_ostree /usr/etc | split row (char newline) | find resolv.conf ++if ($resolvconf | length) > 0 { ++ let parts = $resolvconf | first | split row -r '\s+' ++ let ty = $parts | first | split chars | first ++ # If resolv.conf exists in the image, currently require it in our ++ # test suite to be a symlink (which is hopefully to the systemd/stub-resolv.conf) ++ assert equal $ty 'l' ++ print "resolv.conf is a symlink" ++} else { ++ print "No resolv.conf found in commit" ++} ++ ++tap ok +-- +2.48.1 + diff --git a/SPECS/bootc.spec b/SPECS/bootc.spec deleted file mode 100644 index ca20d1b..0000000 --- a/SPECS/bootc.spec +++ /dev/null @@ -1,200 +0,0 @@ -%bcond_without check -%if 0%{?rhel} >= 10 || 0%{?fedora} > 41 - %bcond_without ostree_ext -%else - %bcond_with ostree_ext -%endif - -%if 0%{?rhel} - %bcond_without rhsm -%else - %bcond_with rhsm -%endif - -Name: bootc -Version: 1.1.5 -Release: 1%{?dist} -Summary: Bootable container system - -# Apache-2.0 -# Apache-2.0 OR BSL-1.0 -# Apache-2.0 OR MIT -# Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT -# BSD-3-Clause -# MIT -# MIT OR Apache-2.0 -# Unlicense OR MIT -License: Apache-2.0 AND BSD-3-Clause AND MIT AND (Apache-2.0 OR BSL-1.0) AND (Apache-2.0 OR MIT) AND (Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT) AND (Unlicense OR MIT) -URL: https://github.com/containers/bootc -Source0: %{url}/releases/download/v%{version}/bootc-%{version}.tar.zstd -Source1: %{url}/releases/download/v%{version}/bootc-%{version}-vendor.tar.zstd - -# https://fedoraproject.org/wiki/Changes/EncourageI686LeafRemoval -ExcludeArch: %{ix86} - -BuildRequires: libzstd-devel -BuildRequires: make -BuildRequires: ostree-devel -BuildRequires: openssl-devel -%if 0%{?rhel} -BuildRequires: rust-toolset -%else -BuildRequires: cargo-rpm-macros >= 25 -%endif -BuildRequires: systemd -# For tests -BuildRequires: skopeo ostree - -# Backing storage tooling https://github.com/containers/composefs/issues/125 -Requires: composefs -# For OS updates -Requires: ostree -Requires: skopeo -Requires: podman -# For bootloader updates -Recommends: bootupd - -# A made up provides so that rpm-ostree can depend on it -%if %{with ostree_ext} -Provides: ostree-cli(ostree-container) -%endif - -%description -%{summary} - -# (-n because we don't want the subpackage name to start with bootc-) -%package -n system-reinstall-bootc -Summary: Utility to reinstall the current system using bootc -Requires: podman -# The reinstall subpackage intentionally does not require bootc, as it pulls in many unnecessary dependencies - -%description -n system-reinstall-bootc -This package provides a utility to simplify reinstalling the current system to a given bootc image. - -%prep -%autosetup -p1 -a1 -# Default -v vendor config doesn't support non-crates.io deps (i.e. git) -cp .cargo/vendor-config.toml . -%cargo_prep -N -cat vendor-config.toml >> .cargo/config.toml -rm vendor-config.toml - -%build -# Build the main bootc binary -%if 0%{?fedora} || 0%{?rhel} >= 10 - %cargo_build %{?with_rhsm:-f rhsm} -%else - %cargo_build %{?with_rhsm:--features rhsm} -%endif - -# Build the system reinstallation CLI binary -%global cargo_args -p system-reinstall-bootc -%cargo_build - -%cargo_vendor_manifest -# https://pagure.io/fedora-rust/rust-packaging/issue/33 -sed -i -e '/https:\/\//d' cargo-vendor.txt -%cargo_license_summary -%{cargo_license} > LICENSE.dependencies - -%install -%make_install INSTALL="install -p -c" -%if %{with ostree_ext} -make install-ostree-hooks DESTDIR=%{?buildroot} -%endif - -%if %{with check} -%check -%cargo_test -%endif - -%files -%license LICENSE-MIT -%license LICENSE-APACHE -%license LICENSE.dependencies -%license cargo-vendor.txt -%doc README.md -%{_bindir}/bootc -%{_prefix}/lib/bootc/ -%{_prefix}/lib/systemd/system-generators/* -%if %{with ostree_ext} -%{_prefix}/libexec/libostree/ext/* -%endif -%{_unitdir}/* -%{_docdir}/bootc/* -%{_mandir}/man*/bootc* - -%files -n system-reinstall-bootc -%{_bindir}/system-reinstall-bootc - -%changelog -* Mon Feb 10 2025 Joseph Marrero - 1.1.5-1 -- Update to 1.1.5 -- Resolves: #RHEL-77733 - -* Thu Jan 23 2025 John Eckersberg - 1.1.4-2 -- Cherry pick patches for bootc-status-updated -- Resolves: #RHEL-72862 - -* Tue Jan 14 2025 Joseph Marrero - 1.1.4-1 -- Update to 1.1.4 - Resolves: #RHEL-72862 - -* Thu Nov 07 2024 Joseph Marrero - 1.1.2-1 -- Update to 1.1.2 - Resolves: #RHEL-66258 - -* Thu Oct 17 2024 Joseph Marrero - 1.1.0-1 -- Update to 1.1.0 - Resolves: #RHEL-63018 - -* Fri Aug 16 2024 Colin Walters - 0.1.15-1 -- Update to 0.1.15 - Resolves: #RHEL-50625 - -* Thu Jul 25 2024 Joseph Marrero - 0.1.14-1 -- Update to 0.1.14 - Resolves: #RHEL-50625, #RHEL-45325, #RHEL-36003 - -* Fri Jun 28 2024 Colin Walters - 0.1.13-2 -- Update to 0.1.13 - -* Tue Jun 25 2024 Colin Walters - 0.1.12-3 -- Update to 0.1.12 - -* Wed May 15 2024 Colin Walters - 0.1.11-2 -- Update to 0.1.11 - -* Fri Apr 26 2024 Colin Walters - 0.1.10-2 -- Release 0.1.10 - -* Mon Apr 08 2024 Colin Walters - 0.1.9-4 -- Correct JIRA link - Resolves: #RHEL-30878 - -* Thu Mar 28 2024 Colin Walters - 0.1.9-3 -- Backport rollback - Related: #RHEL-30466 - -* Wed Mar 27 2024 Colin Walters - 0.1.9-2 -- https://github.com/containers/bootc/releases/tag/v0.1.9 - Resolves: #RHEL-30466 - -* Tue Mar 19 2024 Colin Walters - 0.1.8-2 -- https://github.com/containers/bootc/releases/tag/v0.1.8 - -* Wed Feb 14 2024 Colin Walters - 0.1.7-4 -- https://github.com/containers/bootc/releases/tag/v0.1.7 - -* Tue Jan 23 2024 Colin Walters - 0.1.6-2 -- https://github.com/containers/bootc/releases/tag/v0.1.6 - -* Fri Jan 12 2024 Joseph Marrero - 0.1.5-1 -- Update to https://github.com/containers/bootc/releases/tag/v0.1.5 - -* Thu Jan 11 2024 Colin Walters - 0.1.4-3 -- Loosen composefs requirement until it makes it into c9s - -* Mon Dec 11 2023 Colin Walters - 0.1.4-2 -- Initial import from fedora - diff --git a/bootc.spec b/bootc.spec new file mode 100644 index 0000000..9c57fea --- /dev/null +++ b/bootc.spec @@ -0,0 +1,277 @@ +## START: Set by rpmautospec +## (rpmautospec version 0.6.5) +## RPMAUTOSPEC: autorelease, autochangelog +%define autorelease(e:s:pb:n) %{?-p:0.}%{lua: + release_number = 2; + base_release_number = tonumber(rpm.expand("%{?-b*}%{!?-b:1}")); + print(release_number + base_release_number - 1); +}%{?-e:.%{-e*}}%{?-s:.%{-s*}}%{!?-n:%{?dist}} +## END: Set by rpmautospec + +%bcond_without check +%if 0%{?rhel} >= 10 || 0%{?fedora} > 41 + %bcond_without ostree_ext +%else + %bcond_with ostree_ext +%endif + +%if 0%{?rhel} + %bcond_without rhsm +%else + %bcond_with rhsm +%endif + +Name: bootc +Version: 1.1.6 +Release: %{autorelease} +Summary: Bootable container system + +# Apache-2.0 +# Apache-2.0 OR BSL-1.0 +# Apache-2.0 OR MIT +# Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +# BSD-3-Clause +# MIT +# MIT OR Apache-2.0 +# Unlicense OR MIT +License: Apache-2.0 AND BSD-3-Clause AND MIT AND (Apache-2.0 OR BSL-1.0) AND (Apache-2.0 OR MIT) AND (Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT) AND (Unlicense OR MIT) +URL: https://github.com/containers/bootc +Source0: %{url}/releases/download/v%{version}/bootc-%{version}.tar.zstd +Source1: %{url}/releases/download/v%{version}/bootc-%{version}-vendor.tar.zstd + +Patch0: 0001-store-Really-remove-empty-etc-resolv.conf-and-etc-ho.patch + +# https://fedoraproject.org/wiki/Changes/EncourageI686LeafRemoval +ExcludeArch: %{ix86} + +BuildRequires: libzstd-devel +BuildRequires: make +BuildRequires: ostree-devel +BuildRequires: openssl-devel +%if 0%{?rhel} +BuildRequires: rust-toolset +%else +BuildRequires: cargo-rpm-macros >= 25 +%endif +BuildRequires: systemd +# For tests +BuildRequires: skopeo ostree + +# Backing storage tooling https://github.com/containers/composefs/issues/125 +Requires: composefs +# For OS updates +Requires: ostree +Requires: skopeo +Requires: podman +# For bootloader updates +Recommends: bootupd + +# A made up provides so that rpm-ostree can depend on it +%if %{with ostree_ext} +Provides: ostree-cli(ostree-container) +%endif + +%description +%{summary} + +# (-n because we don't want the subpackage name to start with bootc-) +%package -n system-reinstall-bootc +Summary: Utility to reinstall the current system using bootc +Recommends: podman +# The reinstall subpackage intentionally does not require bootc, as it pulls in many unnecessary dependencies + +%description -n system-reinstall-bootc +This package provides a utility to simplify reinstalling the current system to a given bootc image. + +%global system_reinstall_bootc_install_podman_path %{_prefix}/lib/system-reinstall-bootc/install-podman + +%prep +%autosetup -p1 -a1 +# Default -v vendor config doesn't support non-crates.io deps (i.e. git) +cp .cargo/vendor-config.toml . +%cargo_prep -N +cat vendor-config.toml >> .cargo/config.toml +rm vendor-config.toml + +%build +# Build the main bootc binary +%if 0%{?fedora} || 0%{?rhel} >= 10 + %cargo_build %{?with_rhsm:-f rhsm} +%else + %cargo_build %{?with_rhsm:--features rhsm} +%endif + +# Build the system reinstallation CLI binary +%global cargo_args -p system-reinstall-bootc +export SYSTEM_REINSTALL_BOOTC_INSTALL_PODMAN_PATH=%{system_reinstall_bootc_install_podman_path} +%if 0%{?fedora} || 0%{?rhel} >= 10 + # In cargo-rpm-macros, the cargo_build macro does flag processing, + # so we need to pass '--' to signify that cargo_args is not part + # of the macro args + %cargo_build -- %cargo_args +%else + # Older macros from rust-toolset do *not* do flag processing, so + # '--' would be passed through to cargo directly, which is not + # what we want. + %cargo_build %cargo_args +%endif + +%cargo_vendor_manifest +# https://pagure.io/fedora-rust/rust-packaging/issue/33 +sed -i -e '/https:\/\//d' cargo-vendor.txt +%cargo_license_summary +%{cargo_license} > LICENSE.dependencies + +%install +%make_install INSTALL="install -p -c" +%if %{with ostree_ext} +make install-ostree-hooks DESTDIR=%{?buildroot} +%endif +mkdir -p %{buildroot}/%{dirname:%{system_reinstall_bootc_install_podman_path}} +cat >%{?buildroot}/%{system_reinstall_bootc_install_podman_path} < - 1.1.6-2 +- Backport https://github.com/containers/bootc/pull/1167 + +* Mon Mar 03 2025 Colin Walters - 1.1.6-1 +- Update to 1.1.6 + +* Wed Feb 19 2025 John Eckersberg - 1.1.5-2 +- resync specfile from upstream + +* Mon Feb 10 2025 Joseph Marrero Corchado - 1.1.5-1 +- Rebase to bootc 1.1.5 + +* Thu Jan 23 2025 John Eckersberg - 1.1.4-3 +- Cherry pick patch for bootc-status-updated-onboot + +* Tue Jan 21 2025 Colin Walters - 1.1.4-2 +- Cherry pick patch for bootc-status-updated + +* Wed Jan 15 2025 Joseph Marrero Corchado - 1.1.4-1 +- Release bootc 1.1.4 + +* Fri Jan 03 2025 Colin Walters - 1.1.3-4 +- Reapply "Flip bcond ostree_ext on" + +* Fri Jan 03 2025 Colin Walters - 1.1.3-3 +- Revert "Flip bcond ostree_ext on" + +* Thu Jan 02 2025 Colin Walters - 1.1.3-2 +- Flip bcond ostree_ext on + +* Thu Jan 02 2025 Colin Walters - 1.1.3-1 +- Update to 1.1.3 + +* Thu Jan 02 2025 Colin Walters - 1.1.2-2 +- Add a bcond with ostree_ext + +* Thu Nov 07 2024 Joseph Marrero Corchado - 1.1.2-1 +- Upgrade to 1.1.2 + +* Tue Oct 29 2024 Troy Dawson - 1.1.0-2 +- Bump release for October 2024 mass rebuild: + +* Thu Oct 17 2024 Joseph Marrero Corchado - 1.1.0-1 +- Upgrade to 1.1.0 + +* Fri Sep 20 2024 Joseph Marrero Corchado - 0.1.16-2 +- rebuild + +* Thu Sep 12 2024 Colin Walters - 0.1.16-1 +- https://github.com/containers/bootc/releases/tag/v0.1.16 + +* Fri Aug 16 2024 Colin Walters - 0.1.15-1 +- Update to 0.1.15 + +* Thu Jul 25 2024 Joseph Marrero - 0.1.14-1 +- Update to 0.1.14 + +* Fri Jun 28 2024 Colin Walters - 0.1.13-1 +- Update to 0.1.13 + +* Wed Jun 26 2024 Wei Shi - 0.1.12-2 +- Add gating test for c10s + +* Tue Jun 25 2024 Colin Walters - 0.1.12-1 +- Release 0.1.12 + +* Mon Jun 24 2024 Troy Dawson - 0.1.11-2 +- Bump release for June 2024 mass rebuild + +* Sat Jun 08 2024 Colin Walters - 0.1.11-1 +- bootc: Update to 0.1.11 + +* Thu Feb 01 2024 Yaakov Selkowitz - 0.1.6-3 +- Update Rust macro usage + +* Tue Jan 23 2024 Colin Walters - 0.1.6-2 +- Update %%files section + +* Tue Jan 23 2024 Colin Walters - 0.1.6-1 +- https://github.com/containers/bootc/releases/tag/v0.1.6 + +* Tue Jan 23 2024 Fedora Release Engineering - 0.1.5-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Fri Jan 19 2024 Fedora Release Engineering - 0.1.5-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Tue Dec 19 2023 Colin Walters - 0.1.5-1 +- https://github.com/containers/bootc/releases/tag/v0.1.5 + +* Mon Dec 11 2023 Colin Walters - 0.1.4-3 +- ExcludeArch: %%{ix86} + +* Tue Dec 05 2023 Colin Walters - 0.1.4-2 +- Requires: composefs + +* Fri Nov 10 2023 Colin Walters - 0.1.4-1 +- Update to 0.1.4 + +* Wed Nov 08 2023 Yaakov Selkowitz - 0.1.3-2 +- Fix build with rust-toolset + +* Mon Nov 06 2023 Colin Walters - 0.1.3-1 +- local build + +* Tue Oct 24 2023 Colin Walters - 0.1.2-3 +- Add Recommends: bootupd + +* Sat Oct 21 2023 Colin Walters - 0.1.2-2 +- Add a requirement on skopeo + +* Sat Oct 21 2023 Colin Walters - 0.1.2-1 +- Initial import +## END: Generated by rpmautospec diff --git a/sources b/sources new file mode 100644 index 0000000..96823fe --- /dev/null +++ b/sources @@ -0,0 +1,2 @@ +SHA512 (bootc-1.1.6-vendor.tar.zstd) = 9fcd7356a1c97e704dd0b0f1aa2bc6929da65fd59a38031cf398bd3a1f8e5bb73d6b410a07a52767d41055785fbeeb0c31688a939ae2f5278e5dbc68ee700aa2 +SHA512 (bootc-1.1.6.tar.zstd) = 977a26e4739ba623389c51efa7122ab14b2efd7ca15d210a0eb51918ec52492c70286396f7fc25ab0615038939c0c0890fad116126b0076748c7f40c9a912f41