curtin-dev team mailing list archive
-
curtin-dev team
-
Mailing list archive
-
Message #02857
[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:
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..67e9a52 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,41 +44,60 @@ 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' % target_arch)
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)
@@ -397,7 +417,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..38e46a6 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.debian
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