Skip to content

Commit

Permalink
source installed: force boot into new kernel on Ubuntu
Browse files Browse the repository at this point in the history
Signed-off-by: Konstantin Olshanov <[email protected]>
  • Loading branch information
Konstantin Olshanov committed Oct 25, 2024
1 parent ed269b6 commit 8e6d4bc
Showing 1 changed file with 35 additions and 0 deletions.
35 changes: 35 additions & 0 deletions lisa/transformers/kernel_source_installer.py
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,27 @@ def install(self) -> str:

self._install_build_tools(node, runbook.build_deps)

# Ubuntu sort kernels by version. If installed kernel version is lower than default
# one extra steps needed to ensure boot into correct kernel.
if isinstance(node.os, Ubuntu):
result = node.execute(
"cat > /tmp/grub-lisa.cfg <<EOF\n" \
"GRUB_DEFAULT=saved\n" \
"GRUB_DISABLE_SUBMENU=y\n" \
"EOF\n",
shell=True
)
result.assert_exit_code()

result = node.execute(
f"cp /tmp/grub-lisa.cfg /etc/default/grub.d/99-lisa.cfg",
sudo=True,
)
result.assert_exit_code()

# grub.cfg will be regenerated later during make install, so
# no need to explicitly regenerate it now.

factory = subclasses.Factory[BaseLocation](BaseLocation)
source = factory.create_by_runbook(
runbook=runbook.location, node=node, parent_log=self._log
Expand Down Expand Up @@ -197,6 +218,20 @@ def install(self) -> str:
)
result.assert_exit_code()

if isinstance(node.os, Ubuntu):
result = node.execute("find /boot -name 'grub.cfg'", sudo=True)
result.assert_exit_code()

grub_config = result.stdout
result = node.execute(f"grep 'menuentry ' {grub_config}", sudo=True)
result.assert_exit_code()

for idx, menuentry in enumerate(result.stdout.splitlines()):
if kernel_version in menuentry:
node.execute(f"grub-set-default {idx}", sudo=True)
result.assert_exit_code()
break

return kernel_version

def _install_build(self, node: Node, code_path: PurePath) -> None:
Expand Down

0 comments on commit 8e6d4bc

Please sign in to comment.