mirror of
https://github.com/systemd/systemd.git
synced 2024-12-22 17:35:35 +03:00
kernel-install: create the entry directory only if $BOOT/$MACHINE_ID exists
Things are currently fairly ugly in Fedora: we create $BOOT/$MACHINE_ID/$KERNEL_VERSION/, and then 20-grub.install that is installed by grub2-common.rpm wants to remove that directory before 50-dracut.install get a chance to run. 50-dracut.install checks for the presence of that directory to decide where to install the kernel. So let's make the creation of the directory conditional. Previous commit changes bootctl install to create $BOOT/$MACHINE_ID, and this commit makes kernel-install not create it. In effect, the entry directory will only be created if 'bootctl install' or something else created the parent directory. https://bugzilla.redhat.com/show_bug.cgi?id=1648907
This commit is contained in:
parent
341890de86
commit
cf73f65089
@ -67,17 +67,20 @@
|
||||
<term><command>add <replaceable>KERNEL-VERSION</replaceable> <replaceable>KERNEL-IMAGE</replaceable> [<replaceable>INITRD-FILE</replaceable> ...]</command></term>
|
||||
<listitem>
|
||||
<para>This command expects a kernel version string and a path to a kernel image file as
|
||||
arguments. <command>kernel-install</command> creates the directory
|
||||
<filename>/boot/<replaceable>MACHINE-ID</replaceable>/<replaceable>KERNEL-VERSION</replaceable>/</filename>
|
||||
and calls the executables from <filename>/usr/lib/kernel/install.d/*.install</filename> and
|
||||
arguments. <command>kernel-install</command> calls the executables from
|
||||
<filename>/usr/lib/kernel/install.d/*.install</filename> and
|
||||
<filename>/etc/kernel/install.d/*.install</filename> with the following arguments:
|
||||
|
||||
<programlisting>add <replaceable>KERNEL-VERSION</replaceable> <filename>/boot/<replaceable>MACHINE-ID</replaceable>/<replaceable>KERNEL-VERSION</replaceable>/</filename> <replaceable>KERNEL-IMAGE</replaceable> [<replaceable>INITRD-FILE</replaceable> ...]</programlisting>
|
||||
</para>
|
||||
|
||||
<para>Two default plugins execute the following operations in this case:</para>
|
||||
<para>Three default plugins execute the following operations in this case:</para>
|
||||
|
||||
<itemizedlist>
|
||||
<listitem><para><filename>00-entry-directory.install</filename> creates the directory
|
||||
<filename>/boot/<replaceable>MACHINE-ID</replaceable>/<replaceable>KERNEL-VERSION</replaceable>/</filename>
|
||||
if <filename>/boot/<replaceable>MACHINE-ID</replaceable>/</filename> already exists.
|
||||
</para></listitem>
|
||||
|
||||
<listitem><para><filename>50-depmod.install</filename> runs
|
||||
<citerefentry><refentrytitle>depmod</refentrytitle><manvolnum>8</manvolnum></citerefentry> for the
|
||||
@ -94,7 +97,11 @@
|
||||
<filename>/boot/loader/entries/<replaceable>MACHINE-ID</replaceable>-<replaceable>KERNEL-VERSION</replaceable>.conf</filename>.
|
||||
The title of the entry is the <replaceable>PRETTY_NAME</replaceable> parameter specified in
|
||||
<filename>/etc/os-release</filename> or <filename>/usr/lib/os-release</filename> (if the former is
|
||||
missing), or "Linux <replaceable>KERNEL-VERSION</replaceable>", if unset.</para></listitem>
|
||||
missing), or "Linux <replaceable>KERNEL-VERSION</replaceable>", if unset.</para>
|
||||
|
||||
<para>If the entry directory
|
||||
<filename>/boot/<replaceable>MACHINE-ID</replaceable>/<replaceable>KERNEL-VERSION</replaceable>/</filename>
|
||||
does not exist, this plugin does nothing.</para></listitem>
|
||||
</itemizedlist>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
32
src/kernel-install/00-entry-directory.install
Normal file
32
src/kernel-install/00-entry-directory.install
Normal file
@ -0,0 +1,32 @@
|
||||
#!/bin/bash
|
||||
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
|
||||
# ex: ts=8 sw=4 sts=4 et filetype=sh
|
||||
|
||||
COMMAND="$1"
|
||||
KERNEL_VERSION="$2"
|
||||
ENTRY_DIR_ABS="$3"
|
||||
KERNEL_IMAGE="$4"
|
||||
INITRD_OPTIONS_START="5"
|
||||
|
||||
if ! [[ $KERNEL_INSTALL_MACHINE_ID ]]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [[ $COMMAND != add ]]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# If the boot dir exists (e.g. $ESP/<machine-id>),
|
||||
# create the entry directory ($ESP/<machine-id>/<kernel-version>).
|
||||
# This is the only function of this plugin.
|
||||
MACHINE_ID_DIR="${ENTRY_DIR_ABS%/*}"
|
||||
if ! [ -d "$MACHINE_ID_DIR" ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ]; then
|
||||
echo "+mkdir -v -p $ENTRY_DIR_ABS"
|
||||
exec mkdir -v -p "$ENTRY_DIR_ABS"
|
||||
else
|
||||
exec mkdir -p "$ENTRY_DIR_ABS"
|
||||
fi
|
@ -125,11 +125,6 @@ case $COMMAND in
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mkdir -p "$ENTRY_DIR_ABS" || {
|
||||
echo "Could not create boot directory '$ENTRY_DIR_ABS'." >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
for f in "${PLUGINS[@]}"; do
|
||||
if [[ -x $f ]]; then
|
||||
[ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && \
|
||||
|
@ -4,7 +4,8 @@ install_data('kernel-install',
|
||||
install_mode : 'rwxr-xr-x',
|
||||
install_dir : bindir)
|
||||
|
||||
install_data('50-depmod.install',
|
||||
install_data('00-entry-directory.install',
|
||||
'50-depmod.install',
|
||||
'90-loaderentry.install',
|
||||
install_mode : 'rwxr-xr-x',
|
||||
install_dir : kernelinstalldir)
|
||||
|
Loading…
Reference in New Issue
Block a user