← Back to team overview

curtin-dev team mailing list archive

[Merge] ~alexsander-souza/curtin:fix_sles_bios_mode into curtin:master

 

Alexsander de Souza has proposed merging ~alexsander-souza/curtin:fix_sles_bios_mode into curtin:master with ~alexsander-souza/curtin:fix_has_calls_use as a prerequisite.

Commit message:
fix GRUB package name for SUSE

Requested reviews:
  Server Team CI bot (server-team-bot): continuous-integration
  curtin developers (curtin-dev)

For more details, see:
https://code.launchpad.net/~alexsander-souza/curtin/+git/curtin/+merge/443443
-- 
Your team curtin developers is requested to review the proposed merge of ~alexsander-souza/curtin:fix_sles_bios_mode into curtin:master.
diff --git a/curtin/commands/install_grub.py b/curtin/commands/install_grub.py
index 38bf71a..03b4670 100644
--- a/curtin/commands/install_grub.py
+++ b/curtin/commands/install_grub.py
@@ -26,12 +26,13 @@ CMD_ARGUMENTS = (
 GRUB_MULTI_INSTALL = '/usr/lib/grub/grub-multi-install'
 
 
-def get_grub_package_name(target_arch, uefi, rhel_ver=None):
+def get_grub_package_name(target_arch, uefi, rhel_ver=None, osfamily=None):
     """Determine the correct grub distro package name.
 
     :param: target_arch: string specifying the target system architecture
     :param: uefi: boolean indicating if system is booted via UEFI or not
     :param: rhel_ver: string specifying the major Redhat version in use.
+    :param: osfamily: string specifying the target os family
     :returns: tuple of strings, grub package name and grub target name
     """
     if target_arch is None:
@@ -43,43 +44,64 @@ def get_grub_package_name(target_arch, uefi, rhel_ver=None):
     if 'ppc64' in target_arch:
         return ('grub-ieee1275', 'powerpc-ieee1275')
     if uefi:
-        if target_arch == 'amd64':
-            grub_name = 'grub-efi-%s' % target_arch
-            grub_target = "x86_64-efi"
-        elif target_arch == 'x86_64':
-            # centos 7+, no centos6 support
-            # grub2-efi-x64 installs a signed grub bootloader
-            grub_name = "grub2-efi-x64"
-            grub_target = "x86_64-efi"
-        elif target_arch == 'aarch64':
-            # centos 7+, no centos6 support
-            # grub2-efi-aa64 installs a signed grub bootloader
-            grub_name = "grub2-efi-aa64"
-            grub_target = "arm64-efi"
-        elif target_arch == 'arm64':
-            grub_name = 'grub-efi-%s' % target_arch
-            grub_target = "arm64-efi"
-        elif target_arch == 'i386':
-            grub_name = 'grub-efi-ia32'
-            grub_target = 'i386-efi'
-        elif target_arch == 'riscv64':
-            grub_name = 'grub-efi-riscv64'
-            grub_target = 'riscv64-efi'
+        if osfamily == distro.DISTROS.redhat:
+            if target_arch == 'x86_64':
+                # centos 7+, no centos6 support
+                # grub2-efi-x64 installs a signed grub bootloader
+                grub_name = "grub2-efi-x64"
+                grub_target = "x86_64-efi"
+            elif target_arch == 'aarch64':
+                # centos 7+, no centos6 support
+                # grub2-efi-aa64 installs a signed grub bootloader
+                grub_name = "grub2-efi-aa64"
+                grub_target = "arm64-efi"
+            else:
+                raise ValueError('Unsupported RHEL version: %s', rhel_ver)
+        elif osfamily == distro.DISTROS.suse:
+            if target_arch == 'x86_64':
+                grub_target = "x86_64-efi"
+            elif target_arch == 'aarch64':
+                grub_target = "arm64-efi"
+            else:
+                raise ValueError('Unsupported SUSE arch: %s', target_arch)
+            grub_name = 'grub2-%s' % grub_target
         else:
-            raise ValueError('Unsupported UEFI arch: %s' % target_arch)
+            if target_arch == 'amd64':
+                grub_name = 'grub-efi-%s' % target_arch
+                grub_target = "x86_64-efi"
+            elif target_arch == 'arm64':
+                grub_name = 'grub-efi-%s' % target_arch
+                grub_target = "arm64-efi"
+            elif target_arch == 'i386':
+                grub_name = 'grub-efi-ia32'
+                grub_target = 'i386-efi'
+            elif target_arch == 'riscv64':
+                grub_name = 'grub-efi-riscv64'
+                grub_target = 'riscv64-efi'
+            else:
+                raise ValueError('Unsupported UEFI arch %s for OS %s' %
+                                 (target_arch, osfamily))
     else:
         grub_target = 'i386-pc'
-        if target_arch in ['i386', 'amd64']:
-            grub_name = 'grub-pc'
-        elif target_arch == 'x86_64':
-            if rhel_ver == '6':
-                grub_name = 'grub'
-            elif rhel_ver in ['7', '8', '9']:
-                grub_name = 'grub2-pc'
+        if osfamily == distro.DISTROS.redhat:
+            if target_arch == 'x86_64':
+                if rhel_ver == '6':
+                    grub_name = 'grub'
+                elif rhel_ver in ['7', '8', '9']:
+                    grub_name = 'grub2-pc'
+                else:
+                    raise ValueError('Unsupported RHEL version: %s', rhel_ver)
+            elif target_arch == 'i386':
+                grub_name = 'grub-pc'
             else:
-                raise ValueError('Unsupported RHEL version: %s', rhel_ver)
+                raise ValueError('Unsupported RHEL arch: %s', target_arch)
+        elif osfamily == distro.DISTROS.suse:
+            grub_name = 'grub2-i386-pc'
+        elif target_arch in ['i386', 'amd64']:
+            grub_name = 'grub-pc'
         else:
-            raise ValueError('Unsupported arch: %s' % target_arch)
+            raise ValueError('Unsupported arch %s for OS %s' %
+                             (target_arch, osfamily))
 
     return (grub_name, grub_target)
 
@@ -397,7 +419,9 @@ def install_grub(devices, target, uefi=None, grubcfg=None):
                 if distroinfo.family == distro.DISTROS.redhat else None)
 
     check_target_arch_machine(target, arch=target_arch, uefi=uefi)
-    grub_name, grub_target = get_grub_package_name(target_arch, uefi, rhel_ver)
+    grub_name, grub_target = get_grub_package_name(target_arch, uefi,
+                                                   rhel_ver=rhel_ver,
+                                                   osfamily=distroinfo.family)
     grub_conf = get_grub_config_file(target, distroinfo.family)
     new_params = get_carryover_params(distroinfo)
     prepare_grub_dir(target, grub_conf)
diff --git a/tests/unittests/test_commands_install_grub.py b/tests/unittests/test_commands_install_grub.py
index ab52505..00004d7 100644
--- a/tests/unittests/test_commands_install_grub.py
+++ b/tests/unittests/test_commands_install_grub.py
@@ -16,120 +16,191 @@ class TestGetGrubPackageName(CiTestCase):
         target_arch = 'ppc64le'
         uefi = False
         rhel_ver = None
+        osfamily = distro.DISTROS.debian
         self.assertEqual(
             ('grub-ieee1275', 'powerpc-ieee1275'),
-            install_grub.get_grub_package_name(target_arch, uefi, rhel_ver))
+            install_grub.get_grub_package_name(target_arch, uefi, rhel_ver,
+                                               osfamily))
 
     def test_uefi_debian_amd64(self):
         target_arch = 'amd64'
         uefi = True
         rhel_ver = None
+        osfamily = distro.DISTROS.debian
         self.assertEqual(
             ('grub-efi-amd64', 'x86_64-efi'),
-            install_grub.get_grub_package_name(target_arch, uefi, rhel_ver))
+            install_grub.get_grub_package_name(target_arch, uefi, rhel_ver,
+                                               osfamily))
 
     def test_uefi_rhel7_amd64(self):
         target_arch = 'x86_64'
         uefi = True
         rhel_ver = '7'
+        osfamily = distro.DISTROS.redhat
         self.assertEqual(
             ('grub2-efi-x64', 'x86_64-efi'),
-            install_grub.get_grub_package_name(target_arch, uefi, rhel_ver))
+            install_grub.get_grub_package_name(target_arch, uefi, rhel_ver,
+                                               osfamily))
 
     def test_uefi_rhel8_amd64(self):
         target_arch = 'x86_64'
         uefi = True
         rhel_ver = '8'
+        osfamily = distro.DISTROS.redhat
         self.assertEqual(
             ('grub2-efi-x64', 'x86_64-efi'),
-            install_grub.get_grub_package_name(target_arch, uefi, rhel_ver))
+            install_grub.get_grub_package_name(target_arch, uefi, rhel_ver,
+                                               osfamily))
+
+    def test_uefi_suse_amd64(self):
+        target_arch = 'x86_64'
+        uefi = True
+        rhel_ver = None
+        osfamily = distro.DISTROS.suse
+        self.assertEqual(
+            ('grub2-x86_64-efi', 'x86_64-efi'),
+            install_grub.get_grub_package_name(target_arch, uefi, rhel_ver,
+                                               osfamily))
 
     def test_uefi_rhel7_arm64(self):
         target_arch = 'aarch64'
         uefi = True
         rhel_ver = '7'
+        osfamily = distro.DISTROS.redhat
         self.assertEqual(
             ('grub2-efi-aa64', 'arm64-efi'),
-            install_grub.get_grub_package_name(target_arch, uefi, rhel_ver))
+            install_grub.get_grub_package_name(target_arch, uefi, rhel_ver,
+                                               osfamily))
 
     def test_uefi_rhel8_arm64(self):
         target_arch = 'aarch64'
         uefi = True
         rhel_ver = '8'
+        osfamily = distro.DISTROS.redhat
         self.assertEqual(
             ('grub2-efi-aa64', 'arm64-efi'),
-            install_grub.get_grub_package_name(target_arch, uefi, rhel_ver))
+            install_grub.get_grub_package_name(target_arch, uefi, rhel_ver,
+                                               osfamily))
 
     def test_uefi_debian_arm64(self):
         target_arch = 'arm64'
         uefi = True
         rhel_ver = None
+        osfamily = distro.DISTROS.debian
         self.assertEqual(
             ('grub-efi-arm64', 'arm64-efi'),
-            install_grub.get_grub_package_name(target_arch, uefi, rhel_ver))
+            install_grub.get_grub_package_name(target_arch, uefi, rhel_ver,
+                                               osfamily))
+
+    def test_uefi_suse_arm64(self):
+        target_arch = 'aarch64'
+        uefi = True
+        rhel_ver = None
+        osfamily = distro.DISTROS.suse
+        self.assertEqual(
+            ('grub2-arm64-efi', 'arm64-efi'),
+            install_grub.get_grub_package_name(target_arch, uefi, rhel_ver,
+                                               osfamily))
 
     def test_uefi_debian_i386(self):
         target_arch = 'i386'
         uefi = True
         rhel_ver = None
+        osfamily = distro.DISTROS.debian
         self.assertEqual(
             ('grub-efi-ia32', 'i386-efi'),
-            install_grub.get_grub_package_name(target_arch, uefi, rhel_ver))
+            install_grub.get_grub_package_name(target_arch, uefi, rhel_ver,
+                                               osfamily))
 
     def test_debian_amd64(self):
         target_arch = 'amd64'
         uefi = False
         rhel_ver = None
+        osfamily = distro.DISTROS.debian
         self.assertEqual(
             ('grub-pc', 'i386-pc'),
-            install_grub.get_grub_package_name(target_arch, uefi, rhel_ver))
+            install_grub.get_grub_package_name(target_arch, uefi, rhel_ver,
+                                               osfamily))
 
     def test_rhel6_amd64(self):
         target_arch = 'x86_64'
         uefi = False
         rhel_ver = '6'
+        osfamily = distro.DISTROS.redhat
         self.assertEqual(
             ('grub', 'i386-pc'),
-            install_grub.get_grub_package_name(target_arch, uefi, rhel_ver))
+            install_grub.get_grub_package_name(target_arch, uefi, rhel_ver,
+                                               osfamily))
 
     def test_rhel7_amd64(self):
         target_arch = 'x86_64'
         uefi = False
         rhel_ver = '7'
+        osfamily = distro.DISTROS.redhat
         self.assertEqual(
             ('grub2-pc', 'i386-pc'),
-            install_grub.get_grub_package_name(target_arch, uefi, rhel_ver))
+            install_grub.get_grub_package_name(target_arch, uefi, rhel_ver,
+                                               osfamily))
 
     def test_rhel8_amd64(self):
         target_arch = 'x86_64'
         uefi = False
         rhel_ver = '8'
+        osfamily = distro.DISTROS.redhat
         self.assertEqual(
             ('grub2-pc', 'i386-pc'),
-            install_grub.get_grub_package_name(target_arch, uefi, rhel_ver))
+            install_grub.get_grub_package_name(target_arch, uefi, rhel_ver,
+                                               osfamily))
+
+    def test_suse_amd64(self):
+        target_arch = 'x86_64'
+        uefi = False
+        rhel_ver = None
+        osfamily = distro.DISTROS.suse
+        self.assertEqual(
+            ('grub2-i386-pc', 'i386-pc'),
+            install_grub.get_grub_package_name(target_arch, uefi, rhel_ver,
+                                               osfamily))
 
     def test_debian_i386(self):
         target_arch = 'i386'
         uefi = False
         rhel_ver = None
+        osfamily = distro.DISTROS.debian
         self.assertEqual(
             ('grub-pc', 'i386-pc'),
-            install_grub.get_grub_package_name(target_arch, uefi, rhel_ver))
+            install_grub.get_grub_package_name(target_arch, uefi, rhel_ver,
+                                               osfamily))
+
+    def test_suse_i386(self):
+        target_arch = 'i386'
+        uefi = False
+        rhel_ver = None
+        osfamily = distro.DISTROS.suse
+        self.assertEqual(
+            ('grub2-i386-pc', 'i386-pc'),
+            install_grub.get_grub_package_name(target_arch, uefi, rhel_ver,
+                                               osfamily))
 
     def test_invalid_rhel_version(self):
+        osfamily = distro.DISTROS.redhat
         with self.assertRaises(ValueError):
             install_grub.get_grub_package_name('x86_64', uefi=False,
-                                               rhel_ver='5')
+                                               rhel_ver='5', osfamily=osfamily)
 
     def test_invalid_arch(self):
+        osfamily = distro.DISTROS.debian
         with self.assertRaises(ValueError):
             install_grub.get_grub_package_name(self.random_string(),
-                                               uefi=False, rhel_ver=None)
+                                               uefi=False, rhel_ver=None,
+                                               osfamily=osfamily)
 
     def test_invalid_arch_uefi(self):
+        osfamily = distro.DISTROS.debian
         with self.assertRaises(ValueError):
             install_grub.get_grub_package_name(self.random_string(),
-                                               uefi=True, rhel_ver=None)
+                                               uefi=True, rhel_ver=None,
+                                               osfamily=osfamily)
 
 
 class TestGetGrubConfigFile(CiTestCase):
@@ -1095,7 +1166,8 @@ class TestInstallGrub(CiTestCase):
         self.m_distro_get_distroinfo.assert_called_with(target=self.target)
         self.m_distro_get_architecture.assert_called_with(target=self.target)
         self.assertEqual(0, self.m_distro_rpm_get_dist_id.call_count)
-        self.m_get_grub_package_name.assert_called_with('amd64', uefi, None)
+        self.m_get_grub_package_name.assert_called_with('amd64', uefi, None,
+                                                        'debian')
         self.m_get_grub_config_file.assert_called_with(self.target,
                                                        self.distroinfo.family)
         self.m_get_carryover_params.assert_called_with(self.distroinfo)
@@ -1136,7 +1208,8 @@ class TestInstallGrub(CiTestCase):
         self.m_distro_get_distroinfo.assert_called_with(target=self.target)
         self.m_distro_get_architecture.assert_called_with(target=self.target)
         self.assertEqual(0, self.m_distro_rpm_get_dist_id.call_count)
-        self.m_get_grub_package_name.assert_called_with('amd64', uefi, None)
+        self.m_get_grub_package_name.assert_called_with('amd64', uefi, None,
+                                                        'debian')
         self.m_get_grub_config_file.assert_called_with(self.target,
                                                        self.distroinfo.family)
         self.m_get_carryover_params.assert_called_with(self.distroinfo)
@@ -1178,7 +1251,8 @@ class TestInstallGrub(CiTestCase):
         self.m_distro_get_distroinfo.assert_called_with(target=self.target)
         self.m_distro_get_architecture.assert_called_with(target=self.target)
         self.assertEqual(0, self.m_distro_rpm_get_dist_id.call_count)
-        self.m_get_grub_package_name.assert_called_with('amd64', uefi, None)
+        self.m_get_grub_package_name.assert_called_with('amd64', uefi, None,
+                                                        'debian')
         self.m_get_grub_config_file.assert_called_with(self.target,
                                                        self.distroinfo.family)
         self.m_get_carryover_params.assert_called_with(self.distroinfo)

Follow ups