84d72b131b
https://github.com/ostreedev/ostree/issues/2154 https://bugzilla.redhat.com/show_bug.cgi?id=1880499
247 lines
9.0 KiB
Diff
247 lines
9.0 KiB
Diff
From 9f26774b49bf2a2c5f7a4eb9fe89965513266142 Mon Sep 17 00:00:00 2001
|
|
From: Jonathan Lebon <jonathan@jlebon.com>
|
|
Date: Fri, 18 Sep 2020 17:11:01 -0400
|
|
Subject: [PATCH] Revert "deploy: support devicetree directory"
|
|
|
|
This reverts commit 5f08649f51fe15dcbf034b408a0770d3de3c9658.
|
|
|
|
It breaks systems which previously already had an (ignored) `dtb/`
|
|
directory. See https://github.com/ostreedev/ostree/issues/2154.
|
|
|
|
Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1880499
|
|
---
|
|
src/libostree/ostree-bootloader-uboot.c | 4 -
|
|
src/libostree/ostree-sysroot-deploy.c | 125 ++----------------------
|
|
tests/test-admin-deploy-uboot.sh | 30 +-----
|
|
3 files changed, 9 insertions(+), 150 deletions(-)
|
|
|
|
diff --git a/src/libostree/ostree-bootloader-uboot.c b/src/libostree/ostree-bootloader-uboot.c
|
|
index 7e23001e..1b1e9b35 100644
|
|
--- a/src/libostree/ostree-bootloader-uboot.c
|
|
+++ b/src/libostree/ostree-bootloader-uboot.c
|
|
@@ -144,10 +144,6 @@ create_config_from_boot_loader_entries (OstreeBootloaderUboot *self,
|
|
if (val)
|
|
g_ptr_array_add (new_lines, g_strdup_printf ("fdt_file%s=/boot%s", index_suffix, val));
|
|
|
|
- val = ostree_bootconfig_parser_get (config, "fdtdir");
|
|
- if (val)
|
|
- g_ptr_array_add (new_lines, g_strdup_printf ("fdtdir%s=/boot%s", index_suffix, val));
|
|
-
|
|
val = ostree_bootconfig_parser_get (config, "options");
|
|
if (val)
|
|
{
|
|
diff --git a/src/libostree/ostree-sysroot-deploy.c b/src/libostree/ostree-sysroot-deploy.c
|
|
index 0e02d1f2..4beface9 100644
|
|
--- a/src/libostree/ostree-sysroot-deploy.c
|
|
+++ b/src/libostree/ostree-sysroot-deploy.c
|
|
@@ -216,79 +216,6 @@ dirfd_copy_attributes_and_xattrs (int src_parent_dfd,
|
|
return TRUE;
|
|
}
|
|
|
|
-static gint
|
|
-str_sort_cb (gconstpointer name_ptr_a, gconstpointer name_ptr_b)
|
|
-{
|
|
- const gchar *name_a = *((const gchar **) name_ptr_a);
|
|
- const gchar *name_b = *((const gchar **) name_ptr_b);
|
|
-
|
|
- return g_strcmp0 (name_a, name_b);
|
|
-}
|
|
-
|
|
-static gboolean
|
|
-checksum_dir_recurse (int dfd,
|
|
- const char *path,
|
|
- OtChecksum *checksum,
|
|
- GCancellable *cancellable,
|
|
- GError **error)
|
|
-{
|
|
- g_auto(GLnxDirFdIterator) dfditer = { 0, };
|
|
- g_autoptr (GPtrArray) d_entries = g_ptr_array_new_with_free_func (g_free);
|
|
-
|
|
- if (!glnx_dirfd_iterator_init_at (dfd, path, TRUE, &dfditer, error))
|
|
- return FALSE;
|
|
-
|
|
- while (TRUE)
|
|
- {
|
|
- struct dirent *dent;
|
|
-
|
|
- if (!glnx_dirfd_iterator_next_dent (&dfditer, &dent, cancellable, error))
|
|
- return FALSE;
|
|
-
|
|
- if (dent == NULL)
|
|
- break;
|
|
-
|
|
- g_ptr_array_add (d_entries, g_strdup (dent->d_name));
|
|
- }
|
|
-
|
|
- /* File systems do not guarantee dir entry order, make sure this is
|
|
- * reproducable
|
|
- */
|
|
- g_ptr_array_sort(d_entries, str_sort_cb);
|
|
-
|
|
- for (gint i=0; i < d_entries->len; i++)
|
|
- {
|
|
- const gchar *d_name = (gchar *)g_ptr_array_index (d_entries, i);
|
|
- struct stat stbuf;
|
|
-
|
|
- if (!glnx_fstatat (dfditer.fd, d_name, &stbuf,
|
|
- AT_SYMLINK_NOFOLLOW, error))
|
|
- return FALSE;
|
|
-
|
|
- if (S_ISDIR (stbuf.st_mode))
|
|
- {
|
|
- if (!checksum_dir_recurse(dfditer.fd, d_name, checksum, cancellable, error))
|
|
- return FALSE;
|
|
- }
|
|
- else
|
|
- {
|
|
- int fd;
|
|
-
|
|
- 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);
|
|
- if (!ot_gio_splice_update_checksum (NULL, in, checksum, cancellable, error))
|
|
- return FALSE;
|
|
- }
|
|
- }
|
|
-
|
|
- }
|
|
-
|
|
- return TRUE;
|
|
-}
|
|
-
|
|
static gboolean
|
|
copy_dir_recurse (int src_parent_dfd,
|
|
int dest_parent_dfd,
|
|
@@ -1137,9 +1064,6 @@ 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)
|
|
@@ -1150,23 +1074,6 @@ get_kernel_from_tree_usrlib_modules (int deployment_dfd,
|
|
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);
|
|
@@ -1820,23 +1727,14 @@ install_deployment_kernel (OstreeSysroot *sysroot,
|
|
|
|
if (kernel_layout->devicetree_srcpath)
|
|
{
|
|
- /* If devicetree_namever is set a single device tree is deployed */
|
|
- if (kernel_layout->devicetree_namever)
|
|
+ g_assert (kernel_layout->devicetree_namever);
|
|
+ if (!glnx_fstatat_allow_noent (bootcsum_dfd, kernel_layout->devicetree_namever, &stbuf, 0, error))
|
|
+ return FALSE;
|
|
+ if (errno == ENOENT)
|
|
{
|
|
- if (!glnx_fstatat_allow_noent (bootcsum_dfd, kernel_layout->devicetree_namever, &stbuf, 0, error))
|
|
- return FALSE;
|
|
- if (errno == ENOENT)
|
|
- {
|
|
- if (!install_into_boot (repo, sepolicy, kernel_layout->boot_dfd, kernel_layout->devicetree_srcpath,
|
|
- bootcsum_dfd, kernel_layout->devicetree_namever,
|
|
- cancellable, error))
|
|
- return FALSE;
|
|
- }
|
|
- }
|
|
- else
|
|
- {
|
|
- if (!copy_dir_recurse(kernel_layout->boot_dfd, bootcsum_dfd, kernel_layout->devicetree_srcpath,
|
|
- sysroot->debug_flags, cancellable, error))
|
|
+ if (!install_into_boot (repo, sepolicy, kernel_layout->boot_dfd, kernel_layout->devicetree_srcpath,
|
|
+ bootcsum_dfd, kernel_layout->devicetree_namever,
|
|
+ cancellable, error))
|
|
return FALSE;
|
|
}
|
|
}
|
|
@@ -1948,15 +1846,6 @@ install_deployment_kernel (OstreeSysroot *sysroot,
|
|
g_autofree char * boot_relpath = g_strconcat ("/", bootcsumdir, "/", kernel_layout->devicetree_namever, NULL);
|
|
ostree_bootconfig_parser_set (bootconfig, "devicetree", boot_relpath);
|
|
}
|
|
- else if (kernel_layout->devicetree_srcpath)
|
|
- {
|
|
- /* If devicetree_srcpath is set but devicetree_namever is NULL, then we
|
|
- * want to point to a whole directory of device trees.
|
|
- * See: https://github.com/ostreedev/ostree/issues/1900
|
|
- */
|
|
- g_autofree char * boot_relpath = g_strconcat ("/", bootcsumdir, "/", kernel_layout->devicetree_srcpath, NULL);
|
|
- ostree_bootconfig_parser_set (bootconfig, "fdtdir", boot_relpath);
|
|
- }
|
|
|
|
/* Note this is parsed in ostree-impl-system-generator.c */
|
|
g_autofree char *ostree_kernel_arg = g_strdup_printf ("ostree=/ostree/boot.%d/%s/%s/%d",
|
|
diff --git a/tests/test-admin-deploy-uboot.sh b/tests/test-admin-deploy-uboot.sh
|
|
index e3163cb0..8ea37fe9 100755
|
|
--- a/tests/test-admin-deploy-uboot.sh
|
|
+++ b/tests/test-admin-deploy-uboot.sh
|
|
@@ -25,11 +25,9 @@ set -euo pipefail
|
|
. $(dirname $0)/libtest.sh
|
|
|
|
# Exports OSTREE_SYSROOT so --sysroot not needed.
|
|
-kver="3.6.0"
|
|
-modulesdir="usr/lib/modules/${kver}"
|
|
-setup_os_repository "archive" "uboot" ${modulesdir}
|
|
+setup_os_repository "archive" "uboot"
|
|
|
|
-extra_admin_tests=2
|
|
+extra_admin_tests=1
|
|
|
|
. $(dirname $0)/admin-test.sh
|
|
|
|
@@ -54,27 +52,3 @@ assert_file_has_content sysroot/boot/uEnv.txt "kernel_image2="
|
|
assert_file_has_content sysroot/boot/uEnv.txt "kernel_image3="
|
|
|
|
echo "ok merging uEnv.txt files"
|
|
-
|
|
-cd ${test_tmpdir}
|
|
-os_repository_new_commit "uboot 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}
|
|
-
|
|
-bootcsum=$(
|
|
- (echo "new: a kernel uboot test" && echo "new: an initramfs uboot test" &&
|
|
- cat ${devicetree_path} ${devicetree_overlay_path} ) |
|
|
- sha256sum | cut -f 1 -d ' ')
|
|
-
|
|
-${CMD_PREFIX} ostree --repo=testos-repo commit --tree=dir=osdata/ -b testos/buildmaster/x86_64-runtime
|
|
-${CMD_PREFIX} ostree admin upgrade --os=testos
|
|
-assert_file_has_content sysroot/boot/uEnv.txt "fdtdir="
|
|
-assert_file_has_content sysroot/boot/ostree/testos-${bootcsum}/dtb/asoc-board.dtb 'a device tree'
|
|
-assert_file_has_content sysroot/boot/ostree/testos-${bootcsum}/dtb/overlays/overlay.dtbo 'a device tree overlay'
|
|
-
|
|
-echo "ok deploying fdtdir"
|
|
--
|
|
2.26.2
|
|
|