lib/deploy: Add .img to end of initramfs in /usr/lib/modules

Follow up to <https://github.com/ostreedev/ostree/pull/1079>; I was working on
the rpm-ostree updates for this, and I think it's more consistent if we have
`.img` here, since that's a closer match to the "remove $kver" that results in
`vmlinuz`. Also just best practice to have file suffix types where they make
sense.

The astute reader might notice this sneaks in a change where we'd crash if the
legacy bootdir didn't have an initramfs...yeah, should probably have test
coverage of that.

Closes: #1095
Approved by: jlebon
This commit is contained in:
Colin Walters 2017-08-18 20:51:10 -04:00 committed by Atomic Bot
parent 7b3e55a3f4
commit 1e5b06be5b
4 changed files with 36 additions and 19 deletions

View File

@ -45,7 +45,7 @@ distinguish it from the concept of a deployment.
First, the tree must include a kernel (and optionally an initramfs). The First, the tree must include a kernel (and optionally an initramfs). The
current standard locations for these are `/usr/lib/modules/$kver/vmlinuz` and current standard locations for these are `/usr/lib/modules/$kver/vmlinuz` and
`/usr/lib/modules/$kver/initramfs`. The "boot checksum" will be computed `/usr/lib/modules/$kver/initramfs.img`. The "boot checksum" will be computed
automatically. This follows the current Fedora kernel layout, and is automatically. This follows the current Fedora kernel layout, and is
the current recommended path. However, older versions of libostree don't the current recommended path. However, older versions of libostree don't
support this; you may need to also put kernels in the previous (legacy) support this; you may need to also put kernels in the previous (legacy)

View File

@ -994,13 +994,27 @@ get_kernel_from_tree_usrlib_modules (int deployment_dfd,
g_clear_object (&in); g_clear_object (&in);
(void) close (fd); fd = -1; (void) close (fd); fd = -1;
/* Look for an initramfs, but it's optional */ /* Look for an initramfs, but it's optional; since there wasn't any precedent
if (!ot_openat_ignore_enoent (ret_layout->boot_dfd, "initramfs", &fd, error)) * for this, let's be a bit conservative and support both `initramfs.img` and
return FALSE; * `initramfs`.
*/
const char *initramfs_paths[] = {"initramfs.img", "initramfs"};
const char *initramfs_path = NULL;
for (guint i = 0; i < G_N_ELEMENTS(initramfs_paths); i++)
{
initramfs_path = initramfs_paths[i];
if (!ot_openat_ignore_enoent (ret_layout->boot_dfd, initramfs_path, &fd, error))
return FALSE;
if (fd != -1)
break;
else
initramfs_path = NULL;
}
if (fd != -1) if (fd != -1)
{ {
ret_layout->initramfs_srcpath = g_strdup ("initramfs"); g_assert (initramfs_path);
ret_layout->initramfs_namever = g_strdup_printf ("initramfs-%s", kver); ret_layout->initramfs_srcpath = g_strdup (initramfs_path);
ret_layout->initramfs_namever = g_strdup_printf ("initramfs-%s.img", kver);
in = g_unix_input_stream_new (fd, FALSE); in = g_unix_input_stream_new (fd, FALSE);
if (!ot_gio_splice_update_checksum (NULL, in, checksum, cancellable, error)) if (!ot_gio_splice_update_checksum (NULL, in, checksum, cancellable, error))
return FALSE; return FALSE;
@ -1108,9 +1122,10 @@ get_kernel_from_tree_legacy_layouts (int deployment_dfd,
g_assert (initramfs_checksum != NULL); g_assert (initramfs_checksum != NULL);
if (strcmp (kernel_checksum, initramfs_checksum) != 0) if (strcmp (kernel_checksum, initramfs_checksum) != 0)
return glnx_throw (error, "Mismatched kernel checksum vs initrd"); return glnx_throw (error, "Mismatched kernel checksum vs initrd");
ret_layout->bootcsum = g_steal_pointer (&kernel_checksum);
} }
ret_layout->bootcsum = g_steal_pointer (&kernel_checksum);
*out_layout = g_steal_pointer (&ret_layout); *out_layout = g_steal_pointer (&ret_layout);
return TRUE; return TRUE;
} }

View File

@ -381,14 +381,15 @@ setup_os_repository () {
cd ${test_tmpdir} cd ${test_tmpdir}
mkdir osdata mkdir osdata
cd osdata cd osdata
mkdir -p usr/bin ${bootdir} usr/lib/modules/3.6.0 usr/share usr/etc kver=3.6.0
mkdir -p usr/bin ${bootdir} usr/lib/modules/${kver} usr/share usr/etc
kernel_path=${bootdir}/vmlinuz kernel_path=${bootdir}/vmlinuz
initramfs_path=${bootdir}/initramfs initramfs_path=${bootdir}/initramfs.img
# /usr/lib/modules just uses "vmlinuz", since the version is in the module # /usr/lib/modules just uses "vmlinuz", since the version is in the module
# directory name. # directory name.
if [[ $bootdir != usr/lib/modules/* ]]; then if [[ $bootdir != usr/lib/modules/* ]]; then
kernel_path=${kernel_path}-3.6.0 kernel_path=${kernel_path}-${kver}
initramfs_path=${initramfs_path}-3.6.0 initramfs_path=${bootdir}/initramfs-${kver}.img
fi fi
echo "a kernel" > ${kernel_path} echo "a kernel" > ${kernel_path}
echo "an initramfs" > ${initramfs_path} echo "an initramfs" > ${initramfs_path}
@ -472,8 +473,9 @@ os_repository_new_commit ()
branch=${3:-testos/buildmaster/x86_64-runtime} branch=${3:-testos/buildmaster/x86_64-runtime}
echo "BOOT ITERATION: $boot_checksum_iteration" echo "BOOT ITERATION: $boot_checksum_iteration"
cd ${test_tmpdir}/osdata cd ${test_tmpdir}/osdata
if test -f usr/lib/modules/3.6.0/vmlinuz; then kver=3.6.0
bootdir=usr/lib/modules/3.6.0 if test -f usr/lib/modules/${kver}/vmlinuz; then
bootdir=usr/lib/modules/${kver}
else else
if test -d usr/lib/ostree-boot; then if test -d usr/lib/ostree-boot; then
bootdir=usr/lib/ostree-boot bootdir=usr/lib/ostree-boot
@ -483,10 +485,10 @@ os_repository_new_commit ()
fi fi
rm ${bootdir}/* rm ${bootdir}/*
kernel_path=${bootdir}/vmlinuz kernel_path=${bootdir}/vmlinuz
initramfs_path=${bootdir}/initramfs initramfs_path=${bootdir}/initramfs.img
if [[ $bootdir != usr/lib/modules/* ]]; then if [[ $bootdir != usr/lib/modules/* ]]; then
kernel_path=${kernel_path}-3.6.0 kernel_path=${kernel_path}-${kver}
initramfs_path=${initramfs_path}-3.6.0 initramfs_path=${bootdir}/initramfs-${kver}.img
fi fi
echo "new: a kernel ${boot_checksum_iteration}" > ${kernel_path} echo "new: a kernel ${boot_checksum_iteration}" > ${kernel_path}
echo "new: an initramfs ${boot_checksum_iteration}" > ${initramfs_path} echo "new: an initramfs ${boot_checksum_iteration}" > ${initramfs_path}

View File

@ -39,10 +39,10 @@ for test_bootdir in "boot" "usr/lib/ostree-boot"; do
assert_file_has_content sysroot/boot/loader/entries/ostree-testos-0.conf 'options.* root=LABEL=MOO' assert_file_has_content sysroot/boot/loader/entries/ostree-testos-0.conf 'options.* root=LABEL=MOO'
assert_file_has_content sysroot/boot/loader/entries/ostree-testos-0.conf 'options.* quiet' assert_file_has_content sysroot/boot/loader/entries/ostree-testos-0.conf 'options.* quiet'
assert_file_has_content sysroot/boot/ostree/testos-${bootcsum}/vmlinuz-3.6.0 'a kernel' assert_file_has_content sysroot/boot/ostree/testos-${bootcsum}/vmlinuz-3.6.0 'a kernel'
assert_file_has_content sysroot/boot/ostree/testos-${bootcsum}/initramfs-3.6.0 'an initramfs' assert_file_has_content sysroot/boot/ostree/testos-${bootcsum}/initramfs-3.6.0.img 'an initramfs'
# kernel/initrams should also be in the tree's /boot with the checksum # kernel/initrams should also be in the tree's /boot with the checksum
assert_file_has_content sysroot/ostree/deploy/testos/deploy/${rev}.0/$test_bootdir/vmlinuz-3.6.0-${bootcsum} 'a kernel' assert_file_has_content sysroot/ostree/deploy/testos/deploy/${rev}.0/$test_bootdir/vmlinuz-3.6.0-${bootcsum} 'a kernel'
assert_file_has_content sysroot/ostree/deploy/testos/deploy/${rev}.0/$test_bootdir/initramfs-3.6.0-${bootcsum} 'an initramfs' assert_file_has_content sysroot/ostree/deploy/testos/deploy/${rev}.0/$test_bootdir/initramfs-3.6.0.img-${bootcsum} 'an initramfs'
assert_file_has_content sysroot/ostree/deploy/testos/deploy/${rev}.0/etc/os-release 'NAME=TestOS' assert_file_has_content sysroot/ostree/deploy/testos/deploy/${rev}.0/etc/os-release 'NAME=TestOS'
assert_file_has_content sysroot/ostree/boot.1/testos/${bootcsum}/0/etc/os-release 'NAME=TestOS' assert_file_has_content sysroot/ostree/boot.1/testos/${bootcsum}/0/etc/os-release 'NAME=TestOS'
${CMD_PREFIX} ostree admin status ${CMD_PREFIX} ostree admin status
@ -64,7 +64,7 @@ rev=$(${CMD_PREFIX} ostree --repo=sysroot/ostree/repo rev-parse testos/buildmast
${CMD_PREFIX} ostree admin deploy --karg=root=LABEL=MOO --karg=quiet --os=testos testos:testos/buildmaster/x86_64-runtime ${CMD_PREFIX} ostree admin deploy --karg=root=LABEL=MOO --karg=quiet --os=testos testos:testos/buildmaster/x86_64-runtime
assert_file_has_content sysroot/boot/loader/entries/ostree-testos-0.conf 'options.* root=LABEL=MOO' assert_file_has_content sysroot/boot/loader/entries/ostree-testos-0.conf 'options.* root=LABEL=MOO'
assert_file_has_content sysroot/boot/ostree/testos-${bootcsum}/vmlinuz-3.6.0 'a kernel' assert_file_has_content sysroot/boot/ostree/testos-${bootcsum}/vmlinuz-3.6.0 'a kernel'
assert_file_has_content sysroot/boot/ostree/testos-${bootcsum}/initramfs-3.6.0 'an initramfs' assert_file_has_content sysroot/boot/ostree/testos-${bootcsum}/initramfs-3.6.0.img 'an initramfs'
# Note this bootcsum shouldn't be the modules one # Note this bootcsum shouldn't be the modules one
assert_not_streq "${bootcsum}" "${usrlib_modules_bootcsum}" assert_not_streq "${bootcsum}" "${usrlib_modules_bootcsum}"
echo "ok kernel in /usr/lib/modules and /usr/lib/ostree-boot" echo "ok kernel in /usr/lib/modules and /usr/lib/ostree-boot"