mirror of
https://github.com/ostreedev/ostree.git
synced 2025-01-03 05:18:24 +03:00
Add sysroot.bootprefix
option
This is a follow up to
0ced9fde76
"sysroot: Support /boot on root or as seperate filesystem for syslinux and u-boot"
What we should have done at the time is changed our bootloader entries
to be prefixed with `/boot`. This means that the GRUB2 BLS support
will Just Work.
For now, I'm making this option default to off out of a lot of
conservatism. I think in the future we should flip this on by default.
This commit is contained in:
parent
eed9e9f335
commit
10e465c3c4
@ -98,6 +98,7 @@ _installed_or_uninstalled_test_scripts = \
|
||||
tests/test-admin-upgrade-endoflife.sh \
|
||||
tests/test-admin-upgrade-systemd-update.sh \
|
||||
tests/test-admin-deploy-syslinux.sh \
|
||||
tests/test-admin-deploy-bootprefix.sh \
|
||||
tests/test-admin-deploy-2.sh \
|
||||
tests/test-admin-deploy-karg.sh \
|
||||
tests/test-admin-deploy-switch.sh \
|
||||
|
@ -415,6 +415,15 @@ License along with this library. If not, see <https://www.gnu.org/licenses/>.
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><varname>bootprefix</varname></term>
|
||||
<listitem><para>A boolean value; defaults to false. If set to true, the bootloader entries
|
||||
generated will include <literal>/boot</literal> as a prefix. This will likely be turned
|
||||
on by default in the future.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
</variablelist>
|
||||
|
||||
</refsect1>
|
||||
|
@ -225,6 +225,7 @@ struct OstreeRepo {
|
||||
gchar **repo_finders;
|
||||
OstreeCfgSysrootBootloaderOpt bootloader; /* Configure which bootloader to use. */
|
||||
GHashTable *bls_append_values; /* Parsed key-values from bls-append-except-default key in config. */
|
||||
gboolean enable_bootprefix; /* If true, prepend bootloader entries with /boot */
|
||||
|
||||
OstreeRepo *parent_repo;
|
||||
};
|
||||
|
@ -3549,6 +3549,11 @@ reload_sysroot_config (OstreeRepo *self,
|
||||
g_hash_table_replace (self->bls_append_values, key, value);
|
||||
}
|
||||
|
||||
if (!ot_keyfile_get_boolean_with_default (self->config, "sysroot",
|
||||
"bootprefix", FALSE,
|
||||
&self->enable_bootprefix, error))
|
||||
return FALSE;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -1856,6 +1856,8 @@ install_deployment_kernel (OstreeSysroot *sysroot,
|
||||
|
||||
OstreeRepo *repo = ostree_sysroot_repo (sysroot);
|
||||
|
||||
const char *bootprefix = repo->enable_bootprefix ? "/boot/" : "/";
|
||||
|
||||
/* Install (hardlink/copy) the kernel into /boot/ostree/osname-${bootcsum} if
|
||||
* it doesn't exist already.
|
||||
*/
|
||||
@ -1936,7 +1938,7 @@ install_deployment_kernel (OstreeSysroot *sysroot,
|
||||
* /boot itself and drop the boocsum dir concept entirely. */
|
||||
|
||||
g_autofree char *destpath =
|
||||
g_strdup_printf ("/" _OSTREE_SYSROOT_BOOT_INITRAMFS_OVERLAYS "/%s.img", checksum);
|
||||
g_strdup_printf ("%s%s/%s.img", bootprefix, _OSTREE_SYSROOT_BOOT_INITRAMFS_OVERLAYS, checksum);
|
||||
const char *rel_destpath = destpath + 1;
|
||||
|
||||
/* lazily allocate array and create dir so we don't pollute /boot if not needed */
|
||||
@ -2032,7 +2034,7 @@ install_deployment_kernel (OstreeSysroot *sysroot,
|
||||
|
||||
g_autofree char *version_key = g_strdup_printf ("%d", n_deployments - ostree_deployment_get_index (deployment));
|
||||
ostree_bootconfig_parser_set (bootconfig, OSTREE_COMMIT_META_KEY_VERSION, version_key);
|
||||
g_autofree char * boot_relpath = g_strconcat ("/", bootcsumdir, "/", kernel_layout->kernel_namever, NULL);
|
||||
g_autofree char * boot_relpath = g_strconcat (bootprefix, bootcsumdir, "/", kernel_layout->kernel_namever, NULL);
|
||||
ostree_bootconfig_parser_set (bootconfig, "linux", boot_relpath);
|
||||
|
||||
val = ostree_bootconfig_parser_get (bootconfig, "options");
|
||||
@ -2041,7 +2043,7 @@ install_deployment_kernel (OstreeSysroot *sysroot,
|
||||
if (kernel_layout->initramfs_namever)
|
||||
{
|
||||
g_autofree char * initrd_boot_relpath =
|
||||
g_strconcat ("/", bootcsumdir, "/", kernel_layout->initramfs_namever, NULL);
|
||||
g_strconcat (bootprefix, bootcsumdir, "/", kernel_layout->initramfs_namever, NULL);
|
||||
ostree_bootconfig_parser_set (bootconfig, "initrd", initrd_boot_relpath);
|
||||
|
||||
if (overlay_initrds)
|
||||
@ -2061,7 +2063,7 @@ install_deployment_kernel (OstreeSysroot *sysroot,
|
||||
|
||||
if (kernel_layout->devicetree_namever)
|
||||
{
|
||||
g_autofree char * dt_boot_relpath = g_strconcat ("/", bootcsumdir, "/", kernel_layout->devicetree_namever, NULL);
|
||||
g_autofree char * dt_boot_relpath = g_strconcat (bootprefix, bootcsumdir, "/", kernel_layout->devicetree_namever, NULL);
|
||||
ostree_bootconfig_parser_set (bootconfig, "devicetree", dt_boot_relpath);
|
||||
}
|
||||
else if (kernel_layout->devicetree_srcpath)
|
||||
@ -2070,7 +2072,7 @@ install_deployment_kernel (OstreeSysroot *sysroot,
|
||||
* want to point to a whole directory of device trees.
|
||||
* See: https://github.com/ostreedev/ostree/issues/1900
|
||||
*/
|
||||
g_autofree char * dt_boot_relpath = g_strconcat ("/", bootcsumdir, "/", kernel_layout->devicetree_srcpath, NULL);
|
||||
g_autofree char * dt_boot_relpath = g_strconcat (bootprefix, bootcsumdir, "/", kernel_layout->devicetree_srcpath, NULL);
|
||||
ostree_bootconfig_parser_set (bootconfig, "fdtdir", dt_boot_relpath);
|
||||
}
|
||||
|
||||
|
35
tests/test-admin-deploy-bootprefix.sh
Executable file
35
tests/test-admin-deploy-bootprefix.sh
Executable file
@ -0,0 +1,35 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Copyright (C) 2022 Colin Walters <walters@verbum.org>
|
||||
#
|
||||
# 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, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
. $(dirname $0)/libtest.sh
|
||||
|
||||
# Exports OSTREE_SYSROOT so --sysroot not needed.
|
||||
setup_os_repository "archive" "syslinux"
|
||||
|
||||
${CMD_PREFIX} ostree --repo=sysroot/ostree/repo pull-local --remote=testos testos-repo testos/buildmain/x86_64-runtime
|
||||
${CMD_PREFIX} ostree --repo=sysroot/ostree/repo config set sysroot.bootprefix 'true'
|
||||
${CMD_PREFIX} ostree admin deploy --karg=root=LABEL=root --os=testos testos:testos/buildmain/x86_64-runtime
|
||||
assert_file_has_content_literal sysroot/boot/loader/entries/ostree-1-testos.conf 'linux /boot/ostree/testos-'
|
||||
assert_file_has_content_literal sysroot/boot/loader/entries/ostree-1-testos.conf 'initrd /boot/ostree/testos-'
|
||||
|
||||
tap_ok "bootprefix"
|
||||
|
||||
tap_end
|
Loading…
Reference in New Issue
Block a user