← Back to team overview

curtin-dev team mailing list archive

[Merge] ~dbungert/curtin:lp-1992990-riscv-flash-kernel into curtin:master

 

Dan Bungert has proposed merging ~dbungert/curtin:lp-1992990-riscv-flash-kernel into curtin:master.

Commit message:
kernel: use FK_FORCE to ensure flash-kernel runs

Requested reviews:
  curtin developers (curtin-dev)

For more details, see:
https://code.launchpad.net/~dbungert/curtin/+git/curtin/+merge/431598
-- 
Your team curtin developers is requested to review the proposed merge of ~dbungert/curtin:lp-1992990-riscv-flash-kernel into curtin:master.
diff --git a/curtin/commands/curthooks.py b/curtin/commands/curthooks.py
index 4001166..03a53b1 100644
--- a/curtin/commands/curthooks.py
+++ b/curtin/commands/curthooks.py
@@ -352,6 +352,15 @@ def setup_kernel_img_conf(target):
 
 
 def install_kernel(cfg, target):
+    def install(pkg):
+        env = os.environ.copy()
+        # recent flash_kernel has checks to prevent it running in cases like
+        # containers or chroots, but we actually want that as curtin
+        # is mostly or always doing chroot installs.  LP: #1992990
+        env["FK_FORCE"] = "yes"
+        env["FK_FORCE_CONTAINER"] = "yes"
+        distro.install_packages([pkg], target=target, env=env)
+
     kernel_cfg = cfg.get('kernel', {'package': None,
                                     'fallback-package': "linux-generic",
                                     'mapping': {}})
@@ -367,13 +376,13 @@ def install_kernel(cfg, target):
 
     # Machines using flash-kernel may need additional dependencies installed
     # before running. Run those checks in the ephemeral environment so the
-    # target only has required packages installed.  See LP:1640519
+    # target only has required packages installed.  See LP: #1640519
     fk_packages = get_flash_kernel_pkgs()
     if fk_packages:
         distro.install_packages(fk_packages.split(), target=target)
 
     if kernel_package:
-        distro.install_packages([kernel_package], target=target)
+        install(kernel_package)
         return
 
     # uname[2] is kernel name (ie: 3.16.0-7-generic)
@@ -390,7 +399,7 @@ def install_kernel(cfg, target):
         LOG.warn("Couldn't detect kernel package to install for %s."
                  % kernel)
         if kernel_fallback is not None:
-            distro.install_packages([kernel_fallback], target=target)
+            install(kernel_fallback)
         return
 
     package = "linux-{flavor}{map_suffix}".format(
@@ -401,13 +410,13 @@ def install_kernel(cfg, target):
             LOG.debug("Kernel package '%s' already installed", package)
         else:
             LOG.debug("installing kernel package '%s'", package)
-            distro.install_packages([package], target=target)
+            install(package)
     else:
         if kernel_fallback is not None:
             LOG.info("Kernel package '%s' not available.  "
                      "Installing fallback package '%s'.",
                      package, kernel_fallback)
-            distro.install_packages([kernel_fallback], target=target)
+            install(kernel_fallback)
         else:
             LOG.warn("Kernel package '%s' not available and no fallback."
                      " System may not boot.", package)
diff --git a/tests/unittests/test_curthooks.py b/tests/unittests/test_curthooks.py
index 5ca0b8c..194dd49 100644
--- a/tests/unittests/test_curthooks.py
+++ b/tests/unittests/test_curthooks.py
@@ -69,22 +69,29 @@ class TestCurthooksInstallKernel(CiTestCase):
         kernel_package = self.kernel_cfg.get('kernel', {}).get('package', {})
         self.mock_get_flash_kernel_pkgs.return_value = 'u-boot-tools'
 
-        curthooks.install_kernel(self.kernel_cfg, self.target)
+        with patch.dict(os.environ, clear=True):
+            curthooks.install_kernel(self.kernel_cfg, self.target)
 
-        inst_calls = [
-            call(['u-boot-tools'], target=self.target),
-            call([kernel_package], target=self.target)]
+            env = {'FK_FORCE': 'yes', 'FK_FORCE_CONTAINER': 'yes'}
 
-        self.mock_instpkg.assert_has_calls(inst_calls)
+            inst_calls = [
+                call(['u-boot-tools'], target=self.target),
+                call([kernel_package], target=self.target, env=env)]
+
+            self.mock_instpkg.assert_has_calls(inst_calls)
 
     def test__installs_kernel_package(self):
         kernel_package = self.kernel_cfg.get('kernel', {}).get('package', {})
         self.mock_get_flash_kernel_pkgs.return_value = None
 
-        curthooks.install_kernel(self.kernel_cfg, self.target)
+        with patch.dict(os.environ, clear=True):
+            curthooks.install_kernel(self.kernel_cfg, self.target)
+
+            env = {'FK_FORCE': 'yes', 'FK_FORCE_CONTAINER': 'yes'}
+
+            self.mock_instpkg.assert_called_with(
+                [kernel_package], target=self.target, env=env)
 
-        self.mock_instpkg.assert_called_with(
-            [kernel_package], target=self.target)
 
 
 class TestEnableDisableUpdateInitramfs(CiTestCase):

Follow ups