diff --git a/.gitignore b/.gitignore index 888f9aa..2d75bcf 100644 --- a/.gitignore +++ b/.gitignore @@ -82,3 +82,4 @@ /libostree-2020.5.tar.xz /libostree-2020.6.tar.xz /libostree-2020.7.tar.xz +/libostree-2020.8.tar.xz diff --git a/0001-deploy-Remove-deployment-bootcsum-assertion.patch b/0001-deploy-Remove-deployment-bootcsum-assertion.patch deleted file mode 100644 index 639bb01..0000000 --- a/0001-deploy-Remove-deployment-bootcsum-assertion.patch +++ /dev/null @@ -1,278 +0,0 @@ -From aa2a2783ea71d956db41f0f874d596752e47449f Mon Sep 17 00:00:00 2001 -From: Colin Walters -Date: Thu, 24 Sep 2020 19:28:31 +0000 -Subject: [PATCH] deploy: Remove deployment bootcsum assertion - -When support for devicetree was added, it created a problem -because old and new ostree versions would compute different -checksums for the "boot data". The scenario here is: - -- Have system with ostree < 2020.4 -- Reboot into system with ostree 2020.5 -- Try to perform an operation that would retain - that previous booted deployment (common) - -Currently ostree iterates over all the deployments -that will be retained and calls `install_deployment_kernel()`, -even for the booted one (which is a bit silly), but -just to verify that all boot data for the targeted -deployments are installed. - -This then re-computes the checksum and we'd trip this -assertion. - -In practice though, we don't strictly require them to match; -the only thing that will happen if they don't is that we'll -end up with another copy of the kernel/initramfs - and -that only temporarily until the previous deployment -gets GC'd. - -Longer term, I think what we really want to do anyways -is probably closer to like a little ostree repo for `/boot` -so that we can e.g. still hardlink kernels there even if -the initramfs changes, or hardlink both kernel/initramfs -if just the devicetree changes, etc. - -Closes: https://github.com/ostreedev/ostree/issues/2154 ---- - Makefile-tests.am | 1 + - src/libostree/ostree-sysroot-deploy.c | 67 ++++++++++++++------------ - src/libostree/ostree-sysroot-private.h | 1 + - src/libostree/ostree-sysroot.c | 1 + - tests/test-osupdate-dtb.sh | 62 ++++++++++++++++++++++++ - 5 files changed, 101 insertions(+), 31 deletions(-) - create mode 100755 tests/test-osupdate-dtb.sh - -diff --git a/Makefile-tests.am b/Makefile-tests.am -index a4179377..eb110dad 100644 ---- a/Makefile-tests.am -+++ b/Makefile-tests.am -@@ -105,6 +105,7 @@ _installed_or_uninstalled_test_scripts = \ - tests/test-admin-deploy-nomerge.sh \ - tests/test-admin-deploy-none.sh \ - tests/test-admin-deploy-bootid-gc.sh \ -+ tests/test-osupdate-dtb.sh \ - tests/test-admin-instutil-set-kargs.sh \ - tests/test-admin-upgrade-not-backwards.sh \ - tests/test-admin-pull-deploy-commit.sh \ -diff --git a/src/libostree/ostree-sysroot-deploy.c b/src/libostree/ostree-sysroot-deploy.c -index 3f337a50..d97d96a8 100644 ---- a/src/libostree/ostree-sysroot-deploy.c -+++ b/src/libostree/ostree-sysroot-deploy.c -@@ -1028,7 +1028,8 @@ _ostree_kernel_layout_new (void) - - /* See get_kernel_from_tree() below */ - static gboolean --get_kernel_from_tree_usrlib_modules (int deployment_dfd, -+get_kernel_from_tree_usrlib_modules (OstreeSysroot *sysroot, -+ int deployment_dfd, - OstreeKernelLayout **out_layout, - GCancellable *cancellable, - GError **error) -@@ -1137,37 +1138,41 @@ get_kernel_from_tree_usrlib_modules (int deployment_dfd, - g_clear_object (&in); - glnx_close_fd (&fd); - -- /* Check for /usr/lib/modules/$kver/devicetree first, if it does not -- * exist check for /usr/lib/modules/$kver/dtb/ directory. -- */ -- if (!ot_openat_ignore_enoent (ret_layout->boot_dfd, "devicetree", &fd, error)) -- return FALSE; -- if (fd != -1) -- { -- ret_layout->devicetree_srcpath = g_strdup ("devicetree"); -- ret_layout->devicetree_namever = g_strdup_printf ("devicetree-%s", kver); -- in = g_unix_input_stream_new (fd, FALSE); -- if (!ot_gio_splice_update_checksum (NULL, in, &checksum, cancellable, error)) -- return FALSE; -- } -- else -+ /* Testing aid for https://github.com/ostreedev/ostree/issues/2154 */ -+ const gboolean no_dtb = (sysroot->debug_flags & OSTREE_SYSROOT_DEBUG_TEST_NO_DTB) > 0; -+ if (!no_dtb) - { -- struct stat stbuf; -- /* Check for dtb directory */ -- if (!glnx_fstatat_allow_noent (ret_layout->boot_dfd, "dtb", &stbuf, 0, error)) -+ /* Check for /usr/lib/modules/$kver/devicetree first, if it does not -+ * exist check for /usr/lib/modules/$kver/dtb/ directory. -+ */ -+ if (!ot_openat_ignore_enoent (ret_layout->boot_dfd, "devicetree", &fd, error)) - return FALSE; -- -- if (errno == 0 && S_ISDIR (stbuf.st_mode)) -+ if (fd != -1) - { -- /* devicetree_namever set to NULL indicates a complete directory */ -- ret_layout->devicetree_srcpath = g_strdup ("dtb"); -- ret_layout->devicetree_namever = NULL; -- -- if (!checksum_dir_recurse(ret_layout->boot_dfd, "dtb", &checksum, cancellable, error)) -+ ret_layout->devicetree_srcpath = g_strdup ("devicetree"); -+ ret_layout->devicetree_namever = g_strdup_printf ("devicetree-%s", kver); -+ in = g_unix_input_stream_new (fd, FALSE); -+ if (!ot_gio_splice_update_checksum (NULL, in, &checksum, cancellable, error)) - return FALSE; - } -- } -+ else -+ { -+ struct stat stbuf; -+ /* Check for dtb directory */ -+ if (!glnx_fstatat_allow_noent (ret_layout->boot_dfd, "dtb", &stbuf, 0, error)) -+ return FALSE; - -+ if (errno == 0 && S_ISDIR (stbuf.st_mode)) -+ { -+ /* devicetree_namever set to NULL indicates a complete directory */ -+ ret_layout->devicetree_srcpath = g_strdup ("dtb"); -+ ret_layout->devicetree_namever = NULL; -+ -+ if (!checksum_dir_recurse(ret_layout->boot_dfd, "dtb", &checksum, cancellable, error)) -+ return FALSE; -+ } -+ } -+ } - g_clear_object (&in); - glnx_close_fd (&fd); - -@@ -1336,7 +1341,8 @@ get_kernel_from_tree_legacy_layouts (int deployment_dfd, - * initramfs there, so we need to look in /usr/lib/ostree-boot first. - */ - static gboolean --get_kernel_from_tree (int deployment_dfd, -+get_kernel_from_tree (OstreeSysroot *sysroot, -+ int deployment_dfd, - OstreeKernelLayout **out_layout, - GCancellable *cancellable, - GError **error) -@@ -1345,7 +1351,7 @@ get_kernel_from_tree (int deployment_dfd, - g_autoptr(OstreeKernelLayout) legacy_layout = NULL; - - /* First, gather from usr/lib/modules/$kver if it exists */ -- if (!get_kernel_from_tree_usrlib_modules (deployment_dfd, &usrlib_modules_layout, cancellable, error)) -+ if (!get_kernel_from_tree_usrlib_modules (sysroot, deployment_dfd, &usrlib_modules_layout, cancellable, error)) - return FALSE; - - /* Gather the legacy layout */ -@@ -1761,7 +1767,7 @@ install_deployment_kernel (OstreeSysroot *sysroot, - - /* Find the kernel/initramfs/devicetree in the tree */ - g_autoptr(OstreeKernelLayout) kernel_layout = NULL; -- if (!get_kernel_from_tree (deployment_dfd, &kernel_layout, -+ if (!get_kernel_from_tree (sysroot, deployment_dfd, &kernel_layout, - cancellable, error)) - return FALSE; - -@@ -1771,7 +1777,6 @@ install_deployment_kernel (OstreeSysroot *sysroot, - - const char *osname = ostree_deployment_get_osname (deployment); - const char *bootcsum = ostree_deployment_get_bootcsum (deployment); -- g_assert_cmpstr (kernel_layout->bootcsum, ==, bootcsum); - g_autofree char *bootcsumdir = g_strdup_printf ("ostree/%s-%s", osname, bootcsum); - g_autofree char *bootconfdir = g_strdup_printf ("loader.%d/entries", new_bootversion); - g_autofree char *bootconf_name = g_strdup_printf ("ostree-%d-%s.conf", -@@ -2711,7 +2716,7 @@ sysroot_initialize_deployment (OstreeSysroot *self, - return FALSE; - - g_autoptr(OstreeKernelLayout) kernel_layout = NULL; -- if (!get_kernel_from_tree (deployment_dfd, &kernel_layout, -+ if (!get_kernel_from_tree (self, deployment_dfd, &kernel_layout, - cancellable, error)) - return FALSE; - -diff --git a/src/libostree/ostree-sysroot-private.h b/src/libostree/ostree-sysroot-private.h -index fa1e5336..1af2fd27 100644 ---- a/src/libostree/ostree-sysroot-private.h -+++ b/src/libostree/ostree-sysroot-private.h -@@ -38,6 +38,7 @@ typedef enum { - /* This is a temporary flag until we fully drop the explicit `systemctl start - * ostree-finalize-staged.service` so that tests can exercise the new path unit. */ - OSTREE_SYSROOT_DEBUG_TEST_STAGED_PATH = 1 << 3, -+ OSTREE_SYSROOT_DEBUG_TEST_NO_DTB = 1 << 4, /* https://github.com/ostreedev/ostree/issues/2154 */ - } OstreeSysrootDebugFlags; - - typedef enum { -diff --git a/src/libostree/ostree-sysroot.c b/src/libostree/ostree-sysroot.c -index b211fea7..e412ea4d 100644 ---- a/src/libostree/ostree-sysroot.c -+++ b/src/libostree/ostree-sysroot.c -@@ -190,6 +190,7 @@ ostree_sysroot_init (OstreeSysroot *self) - { "test-fifreeze", OSTREE_SYSROOT_DEBUG_TEST_FIFREEZE }, - { "no-xattrs", OSTREE_SYSROOT_DEBUG_NO_XATTRS }, - { "test-staged-path", OSTREE_SYSROOT_DEBUG_TEST_STAGED_PATH }, -+ { "no-dtb", OSTREE_SYSROOT_DEBUG_TEST_NO_DTB }, - }; - - self->debug_flags = g_parse_debug_string (g_getenv ("OSTREE_SYSROOT_DEBUG"), -diff --git a/tests/test-osupdate-dtb.sh b/tests/test-osupdate-dtb.sh -new file mode 100755 -index 00000000..9e0c4686 ---- /dev/null -+++ b/tests/test-osupdate-dtb.sh -@@ -0,0 +1,62 @@ -+#!/bin/bash -+# -+# Copyright (C) 2020 Red Hat, Inc. -+# -+# 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, write to the -+# Free Software Foundation, Inc., 59 Temple Place - Suite 330, -+# Boston, MA 02111-1307, USA. -+ -+set -euo pipefail -+ -+. $(dirname $0)/libtest.sh -+ -+echo "1..1" -+ -+# Exports OSTREE_SYSROOT so --sysroot not needed. -+kver="3.6.0" -+modulesdir="usr/lib/modules/${kver}" -+setup_os_repository "archive" "syslinux" ${modulesdir} -+ -+cd ${test_tmpdir} -+os_repository_new_commit "test" "test with device tree directory" -+ -+devicetree_path=osdata/${modulesdir}/dtb/asoc-board.dtb -+devicetree_overlay_path=osdata/${modulesdir}/dtb/overlays/overlay.dtbo -+ -+mkdir -p osdata/${modulesdir}/dtb -+echo "a device tree" > ${devicetree_path} -+mkdir -p osdata/${modulesdir}/dtb/overlays -+echo "a device tree overlay" > ${devicetree_overlay_path} -+ -+${CMD_PREFIX} ostree --repo=testos-repo commit --tree=dir=osdata/ -b testos/buildmaster/x86_64-runtime -+${CMD_PREFIX} ostree --repo=sysroot/ostree/repo pull-local --remote=testos testos-repo testos/buildmaster/x86_64-runtime -+${CMD_PREFIX} ostree --repo=sysroot/ostree/repo remote add --set=gpg-verify=false testos file://$(pwd)/testos-repo testos/buildmaster/x86_64-runtime -+${CMD_PREFIX} env OSTREE_SYSROOT_DEBUG=${OSTREE_SYSROOT_DEBUG},no-dtb ostree admin deploy --os=testos testos:testos/buildmaster/x86_64-runtime -+assert_has_file sysroot/boot/ostree/testos-${bootcsum}/vmlinuz-3.6.0 -+assert_not_has_file sysroot/boot/ostree/testos-${bootcsum}/dtb/asoc-board.dtb 'a device tree' -+assert_streq $(ls sysroot/boot/ostree | wc -l) 1 -+assert_streq $(find sysroot/boot/ostree -name '*.dtb' | wc -l) 0 -+${CMD_PREFIX} ostree --repo=testos-repo commit --tree=dir=osdata/ -b testos/buildmaster/x86_64-runtime -+env OSTREE_SYSROOT_DEBUG=${OSTREE_SYSROOT_DEBUG},no-dtb ${CMD_PREFIX} ostree admin upgrade --os=testos -+${CMD_PREFIX} ostree --repo=testos-repo commit --tree=dir=osdata/ -b testos/buildmaster/x86_64-runtime -+${CMD_PREFIX} ostree admin upgrade --os=testos -+assert_streq $(ls sysroot/boot/ostree | wc -l) 2 -+# Note that the bootcsum computed by the test suite doesn't include devicetree -+# And currently we end up installing the dtb for the *previous* deployment -+# too which is a bug - in the future this should be fixed to assert 1. -+assert_streq $(find sysroot/boot/ostree -name '*.dtb' | wc -l) 2 -+ -+echo "ok update with no dtb to dtb" --- -2.26.2 - diff --git a/0001-gcc11.patch b/0001-gcc11.patch deleted file mode 100644 index 7a5e041..0000000 --- a/0001-gcc11.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 267e8eb3849a539704c480512b135400c7e49309 Mon Sep 17 00:00:00 2001 -From: rpm-build -Date: Fri, 30 Oct 2020 11:40:03 -0600 -Subject: [PATCH] gcc11 - -gcc-11 ---- - src/libostree/ostree-enumtypes.c.template | 2 +- - src/libostree/ostree-sysroot-upgrader.c | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/src/libostree/ostree-enumtypes.c.template b/src/libostree/ostree-enumtypes.c.template -index 751c458..89ad32a 100644 ---- a/src/libostree/ostree-enumtypes.c.template -+++ b/src/libostree/ostree-enumtypes.c.template -@@ -36,7 +36,7 @@ - GType - _@enum_name@_get_type (void) - { -- static volatile gsize the_type__volatile = 0; -+ static gsize the_type__volatile = 0; - - if (g_once_init_enter (&the_type__volatile)) - { -diff --git a/src/libostree/ostree-sysroot-upgrader.c b/src/libostree/ostree-sysroot-upgrader.c -index 4681335..ea68674 100644 ---- a/src/libostree/ostree-sysroot-upgrader.c -+++ b/src/libostree/ostree-sysroot-upgrader.c -@@ -682,7 +682,7 @@ ostree_sysroot_upgrader_deploy (OstreeSysrootUpgrader *self, - GType - ostree_sysroot_upgrader_flags_get_type (void) - { -- static volatile gsize g_define_type_id__volatile = 0; -+ static gsize g_define_type_id__volatile = 0; - - if (g_once_init_enter (&g_define_type_id__volatile)) - { --- -2.28.0 - diff --git a/0001-lib-deploy-Don-t-leak-fd-when-checksumming-dtbs.patch b/0001-lib-deploy-Don-t-leak-fd-when-checksumming-dtbs.patch deleted file mode 100644 index ca089e0..0000000 --- a/0001-lib-deploy-Don-t-leak-fd-when-checksumming-dtbs.patch +++ /dev/null @@ -1,33 +0,0 @@ -From b3dc074f5ed6d3a1e40dbc1e3315a518512d3c63 Mon Sep 17 00:00:00 2001 -From: Jonathan Lebon -Date: Wed, 7 Oct 2020 14:44:25 -0400 -Subject: [PATCH] lib/deploy: Don't leak fd when checksumming dtbs - -Likely the root of https://bugzilla.redhat.com/show_bug.cgi?id=1886149. ---- - src/libostree/ostree-sysroot-deploy.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/src/libostree/ostree-sysroot-deploy.c b/src/libostree/ostree-sysroot-deploy.c -index 1c4fb5dc..7b7ba5e9 100644 ---- a/src/libostree/ostree-sysroot-deploy.c -+++ b/src/libostree/ostree-sysroot-deploy.c -@@ -272,13 +272,13 @@ checksum_dir_recurse (int dfd, - } - else - { -- int fd; -+ glnx_autofd int fd = -1; - - if (!ot_openat_ignore_enoent (dfditer.fd, d_name, &fd, error)) - return FALSE; - if (fd != -1) - { -- g_autoptr(GInputStream) in = g_unix_input_stream_new (fd, FALSE); -+ g_autoptr(GInputStream) in = g_unix_input_stream_new (glnx_steal_fd (&fd), TRUE); - if (!ot_gio_splice_update_checksum (NULL, in, checksum, cancellable, error)) - return FALSE; - } --- -2.26.2 - diff --git a/0001-ostree-prepare-root-print-st_dev-and-st_ino-as-64-bi.patch b/0001-ostree-prepare-root-print-st_dev-and-st_ino-as-64-bi.patch deleted file mode 100644 index 462cf38..0000000 --- a/0001-ostree-prepare-root-print-st_dev-and-st_ino-as-64-bi.patch +++ /dev/null @@ -1,30 +0,0 @@ -From dec9eab2030a212b3713379af9d74c625ecce137 Mon Sep 17 00:00:00 2001 -From: Jonathan Lebon -Date: Thu, 15 Oct 2020 12:05:34 -0400 -Subject: [PATCH] ostree-prepare-root: print st_dev and st_ino as 64-bit ints - -This matches what systemd does and should work fine on all platforms. - -Possibly resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1888436 ---- - src/switchroot/ostree-prepare-root.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/src/switchroot/ostree-prepare-root.c b/src/switchroot/ostree-prepare-root.c -index 6351babb..6bc2c374 100644 ---- a/src/switchroot/ostree-prepare-root.c -+++ b/src/switchroot/ostree-prepare-root.c -@@ -152,8 +152,8 @@ resolve_deploy_path (const char * root_mountpoint) - "MESSAGE_ID=" SD_ID128_FORMAT_STR, - SD_ID128_FORMAT_VAL(OSTREE_PREPARE_ROOT_DEPLOYMENT_MSG), - "DEPLOYMENT_PATH=%s", resolved_path, -- "DEPLOYMENT_DEVICE=%u", stbuf.st_dev, -- "DEPLOYMENT_INODE=%u", stbuf.st_ino, -+ "DEPLOYMENT_DEVICE=%" PRIu64, (uint64_t) stbuf.st_dev, -+ "DEPLOYMENT_INODE=%" PRIu64, (uint64_t) stbuf.st_ino, - NULL); - #endif - return deploy_path; --- -2.26.2 - diff --git a/ostree.spec b/ostree.spec index 6a02c88..2a4f6c4 100644 --- a/ostree.spec +++ b/ostree.spec @@ -7,15 +7,12 @@ Summary: Tool for managing bootable, immutable filesystem trees Name: ostree -Version: 2020.7 -Release: 4%{?dist} +Version: 2020.8 +Release: 1%{?dist} Source0: https://github.com/ostreedev/%{name}/releases/download/v%{version}/libostree-%{version}.tar.xz License: LGPLv2+ URL: https://ostree.readthedocs.io/en/latest/ -Patch0: 0001-ostree-prepare-root-print-st_dev-and-st_ino-as-64-bi.patch -Patch1: 0001-gcc11.patch - BuildRequires: git # We always run autogen.sh BuildRequires: autoconf automake libtool @@ -170,6 +167,10 @@ find %{buildroot} -name '*.la' -delete %endif %changelog +* Wed Nov 18 08:42:24 UTC 2020 Luca BRUNO - 2020.8-1 +- New upstream version +- https://github.com/ostreedev/ostree/releases/tag/v2020.8 + * Fri Oct 30 2020 Jeff Law - 2020.7-4 - Fix volatile issues exposed by gcc-11 diff --git a/sources b/sources index b06d6fd..5d8f754 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (libostree-2020.7.tar.xz) = f42dca3c9e1810c0421ab99588f27c625733b71ef811534b66e0c0c4afafbad5bf475e08feaf87c2f8414c38f127fd344adbb57a4b75001077aedbfe92af3706 +SHA512 (libostree-2020.8.tar.xz) = 2523f5742c4472f8e64614bb99edc5aec1a8f8a837b54f67efba9760aefc3385014e1296c9246ac81b361f4588deb4794768a231bf8f338c24a14255ab63da04