diff --git a/.gitignore b/.gitignore index ff6ff1a..1b0f045 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -SOURCES/libostree-2022.6.tar.xz +SOURCES/libostree-2023.1.tar.xz diff --git a/.ostree.metadata b/.ostree.metadata index 7909886..e7e889b 100644 --- a/.ostree.metadata +++ b/.ostree.metadata @@ -1 +1 @@ -0e80da51128314cbc8255ac4abc570b470478190 SOURCES/libostree-2022.6.tar.xz +2ee58148c225e78587affa8eaf58e431fdfeb468 SOURCES/libostree-2023.1.tar.xz diff --git a/SOURCES/0001-Add-an-always-on-inode64-feature.patch b/SOURCES/0001-Add-an-always-on-inode64-feature.patch new file mode 100644 index 0000000..e6bf870 --- /dev/null +++ b/SOURCES/0001-Add-an-always-on-inode64-feature.patch @@ -0,0 +1,57 @@ +From 333c01659781cb5d956476f5b4cd3366a6f2d81d Mon Sep 17 00:00:00 2001 +From: Colin Walters +Date: Thu, 20 Jul 2023 09:13:43 -0400 +Subject: [PATCH] Add an always-on `inode64` feature + +As I (and others) will be backporting the fix in +https://github.com/ostreedev/ostree/pull/2874/commits/de6fddc6adee09a93901243dc7074090828a1912 +pretty far, I want a way for sysadmins and OS builders to +be able to reliably see when their version of ostree has this fix +(Because comparing version numbers isn't portable). +--- + configure.ac | 5 ++++- + tests/basic-test.sh | 7 ++++++- + tests/inst/src/repobin.rs | 5 ++++- + 3 files changed, 14 insertions(+), 3 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 0e45aa87..9de69551 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -82,7 +82,10 @@ AM_COND_IF([BUILDOPT_TSAN], + LT_PREREQ([2.2.4]) + LT_INIT([disable-static]) + +-OSTREE_FEATURES="" ++dnl We have an always-on feature now to signify the fix for ++dnl https://github.com/ostreedev/ostree/pull/2874/commits/de6fddc6adee09a93901243dc7074090828a1912 ++dnl "commit: fix ostree deployment on 64-bit inode fs" ++OSTREE_FEATURES="inode64" + AC_SUBST([OSTREE_FEATURES]) + + GLIB_TESTS +diff --git a/tests/basic-test.sh b/tests/basic-test.sh +index e2a7d70c..0a50ae2f 100644 +--- a/tests/basic-test.sh ++++ b/tests/basic-test.sh +@@ -19,7 +19,7 @@ + + set -euo pipefail + +-echo "1..$((90 + ${extra_basic_tests:-0}))" ++echo "1..$((91 + ${extra_basic_tests:-0}))" + + CHECKOUT_U_ARG="" + CHECKOUT_H_ARGS="-H" +@@ -41,6 +41,11 @@ fi + # This should be dynamic now + assert_not_has_dir repo/uncompressed-objects-cache + ++if ! $OSTREE --version | grep -q -e '- inode64'; then ++ fatal missing inode64 feature ++fi ++echo "ok inode64 feature" ++ + validate_checkout_basic() { + (cd $1; + assert_has_file firstfile diff --git a/SOURCES/0001-commit-fix-ostree-deployment-on-64-bit-inode-fs.patch b/SOURCES/0001-commit-fix-ostree-deployment-on-64-bit-inode-fs.patch new file mode 100644 index 0000000..3e5f6d3 --- /dev/null +++ b/SOURCES/0001-commit-fix-ostree-deployment-on-64-bit-inode-fs.patch @@ -0,0 +1,55 @@ +From 5df15fffc36593a57131921997569e4b8de4015f Mon Sep 17 00:00:00 2001 +From: Abylay Ospan +Date: Tue, 6 Jun 2023 02:13:14 +0000 +Subject: [PATCH] commit: fix ostree deployment on 64-bit inode fs + +This commit addresses a bug that was causing ostree deployment +to become corrupted on the large fs, when any package was installed using +'rpm-ostree install'. + +In such instances, multiple files were assigned the same inode. For +example, the '/home' directory and a regular file 'pkg-get' were +assigned the same inode (2147484070), making the deployment unusable. + +A root cause analysis was performed, running the process under gdb, +which revealed a lossy conversion from guint64 to guint32, for example +6442451366 converted to 2147484070: + +(gdb) p name +$10 = 0x7fe9224d2d70 "home" + +(gdb) p inode +$73 = 6442451366 + +(gdb) s + device=66311, modifier=0x7fe914791840) at +src/libostree/ostree-repo-commit.c:1590 + +The conversion resulted in entirely independent files potentially +receiving the same inode. + +The issue was discovered on PoC machine equipped with a large NVME +(3.4TB), but the bug can be easily reproduced using `cosa run -m 4000 +--qemu-size +3TB', followed by installation of any package using +`rpm-ostree install`. The resulting deployment will be unusable due to +many files being "corrupted" by the aforementioned issue. +--- + src/libostree/ostree-repo-commit.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/libostree/ostree-repo-commit.c b/src/libostree/ostree-repo-commit.c +index 7f668b7d..81efdeea 100644 +--- a/src/libostree/ostree-repo-commit.c ++++ b/src/libostree/ostree-repo-commit.c +@@ -1581,7 +1581,7 @@ static const char * + devino_cache_lookup (OstreeRepo *self, + OstreeRepoCommitModifier *modifier, + guint32 device, +- guint32 inode) ++ guint64 inode) + { + OstreeDevIno dev_ino_key; + OstreeDevIno *dev_ino_val; +-- +2.40.1 + diff --git a/SPECS/ostree.spec b/SPECS/ostree.spec index 1cdcfa3..2ad507d 100644 --- a/SPECS/ostree.spec +++ b/SPECS/ostree.spec @@ -7,12 +7,17 @@ Summary: Tool for managing bootable, immutable filesystem trees Name: ostree -Version: 2022.6 -Release: 3%{?dist} +Version: 2023.1 +Release: 6%{?dist} Source0: https://github.com/ostreedev/%{name}/releases/download/v%{version}/libostree-%{version}.tar.xz Source1: ostree-readonly-sysroot-migration Source2: ostree-readonly-sysroot-migration.service +# https://github.com/ostreedev/ostree/pull/2874/commits/de6fddc6adee09a93901243dc7074090828a1912 +Patch0: 0001-commit-fix-ostree-deployment-on-64-bit-inode-fs.patch +# https://github.com/ostreedev/ostree/pull/2946 +Patch1: 0001-Add-an-always-on-inode64-feature.patch + License: LGPLv2+ URL: https://ostree.readthedocs.io/en/latest/ @@ -178,6 +183,18 @@ find %{buildroot} -name '*.la' -delete %endif %changelog +* Mon Jul 24 2023 Colin Walters - 2023.1-6 +- Resolves: rhbz#2224105 + +* Wed Jul 19 2023 Colin Walters - 2023.1-4 +- Backport https://github.com/ostreedev/ostree/pull/2874/commits/de6fddc6adee09a93901243dc7074090828a1912 + Resolves: rhbz#2224081 + +* Thu Feb 23 2023 Colin Walters - 2023.1-2 +- Update to 2023.1 + Resolves: rhbz#2172898 + xref https://issues.redhat.com/browse/COS-2069 + * Thu Feb 9 2023 Sayan Paul - 2022.6-3 - Resolves: rhbz#2167344