diff options
| author | Stamatis Katsaounis <[email protected]> | 2023-10-17 19:11:54 +0000 |
|---|---|---|
| committer | Server Team CI Bot <[email protected]> | 2023-10-17 19:11:54 +0000 |
| commit | 64b2744dc4c7c57e18beb46423cf6b563ccd76ab (patch) | |
| tree | e8dfe236c0af468c23da19179c40bd898582e264 | |
| parent | 7c18bf6a24297ed465a341a1f53875b61c878d6b (diff) | |
Add support for Oracle Linux
| -rw-r--r-- | curtin/commands/install_grub.py | 4 | ||||
| -rw-r--r-- | curtin/distro.py | 6 | ||||
| -rw-r--r-- | pylintrc | 2 | ||||
| -rw-r--r-- | tests/unittests/test_commands_install_grub.py | 114 |
4 files changed, 120 insertions, 6 deletions
diff --git a/curtin/commands/install_grub.py b/curtin/commands/install_grub.py index 2faa2c63..285e6a59 100644 --- a/curtin/commands/install_grub.py +++ b/curtin/commands/install_grub.py @@ -290,8 +290,8 @@ def gen_uefi_install_commands(grub_name, grub_target, grub_cmd, update_nvram, install_cmds.append(['dpkg-reconfigure', grub_name]) install_cmds.append(['update-grub']) elif distroinfo.family == distro.DISTROS.redhat: - # RHEL distros uses 'redhat' for bootid - if bootid == 'rhel': + # RHEL and OL distros uses 'redhat' for bootid + if bootid in ['rhel', 'ol']: bootid = 'redhat' loader = find_efi_loader(target, bootid) if loader: diff --git a/curtin/distro.py b/curtin/distro.py index f6081126..3284b696 100644 --- a/curtin/distro.py +++ b/curtin/distro.py @@ -20,7 +20,7 @@ from .log import LOG DistroInfo = namedtuple('DistroInfo', ('variant', 'family')) DISTRO_NAMES = ['arch', 'centos', 'debian', 'fedora', 'freebsd', 'gentoo', - 'opensuse', 'redhat', 'rhel', 'sles', 'suse', 'ubuntu', + 'ol', 'opensuse', 'redhat', 'rhel', 'sles', 'suse', 'ubuntu', 'rocky'] @@ -34,8 +34,8 @@ DISTROS = distro_enum(*DISTRO_NAMES) OS_FAMILIES = { DISTROS.debian: [DISTROS.debian, DISTROS.ubuntu], - DISTROS.redhat: [DISTROS.centos, DISTROS.fedora, DISTROS.redhat, - DISTROS.rhel, DISTROS.rocky], + DISTROS.redhat: [DISTROS.centos, DISTROS.fedora, DISTROS.ol, + DISTROS.redhat, DISTROS.rhel, DISTROS.rocky], DISTROS.gentoo: [DISTROS.gentoo], DISTROS.freebsd: [DISTROS.freebsd], DISTROS.suse: [DISTROS.opensuse, DISTROS.sles, DISTROS.suse], @@ -7,7 +7,7 @@ jobs=0 # List of members which are set dynamically and missed by pylint inference # system, and so shouldn't trigger E1101 when accessed. Python regular # expressions are accepted. -generated-members=redhat,centos,fedora,debian,suse,opensuse,sles,arch,ubuntu,rhel,freebsd,gentoo,rocky +generated-members=redhat,centos,fedora,debian,suse,ol,opensuse,sles,arch,ubuntu,rhel,freebsd,gentoo,rocky # List of module names for which member attributes should not be checked # (useful for modules/projects where namespaces are manipulated during runtime diff --git a/tests/unittests/test_commands_install_grub.py b/tests/unittests/test_commands_install_grub.py index 8fbf12e0..0289c4ba 100644 --- a/tests/unittests/test_commands_install_grub.py +++ b/tests/unittests/test_commands_install_grub.py @@ -1010,6 +1010,120 @@ class TestGenUefiInstallCommands(CiTestCase): grub_name, grub_target, grub_cmd, update_nvram, distroinfo, devices, self.target)) + def test_ol_install(self): + self.m_os_release.return_value = {'ID': 'ol'} + distroinfo = install_grub.distro.get_distroinfo() + grub_name = 'grub2-efi-x64' + grub_target = 'x86_64-efi' + grub_cmd = 'grub2-install' + update_nvram = True + devices = ['/dev/disk-a-part1'] + disk = '/dev/disk-a' + part = '1' + self.m_get_disk_part.return_value = (disk, part) + + expected_install = [ + ['efibootmgr', '-v'], + [grub_cmd, '--target=%s' % grub_target, + '--efi-directory=/boot/efi', + '--bootloader-id=redhat', '--recheck'], + ] + expected_post = [ + ['grub2-mkconfig', '-o', '/boot/grub2/grub.cfg'], + ['efibootmgr', '-v'] + ] + self.assertEqual( + (expected_install, expected_post), + install_grub.gen_uefi_install_commands( + grub_name, grub_target, grub_cmd, update_nvram, distroinfo, + devices, self.target)) + + def test_ol_install_existing(self): + # simulate existing bootloaders already installed in target system + # by touching the files grub would have installed, including shim + def _enable_loaders(bootid): + efi_path = 'boot/efi/EFI' + target_efi_path = os.path.join(self.target, efi_path) + loaders = [ + os.path.join(target_efi_path, bootid, 'shimx64.efi'), + os.path.join(target_efi_path, 'BOOT', 'BOOTX64.EFI'), + os.path.join(target_efi_path, bootid, 'grubx64.efi'), + ] + for loader in loaders: + util.ensure_dir(os.path.dirname(loader)) + with open(loader, 'w+') as fh: + fh.write('\n') + + self.m_os_release.return_value = {'ID': 'ol'} + distroinfo = install_grub.distro.get_distroinfo() + _enable_loaders("redhat") + grub_name = 'grub2-efi-x64' + grub_target = 'x86_64-efi' + grub_cmd = 'grub2-install' + update_nvram = True + devices = ['/dev/disk-a-part1'] + disk = '/dev/disk-a' + part = '1' + self.m_get_disk_part.return_value = (disk, part) + + expected_loader = '/EFI/redhat/shimx64.efi' + expected_install = [ + ['efibootmgr', '-v'], + ['efibootmgr', '--create', '--write-signature', + '--label', 'redhat', '--disk', disk, '--part', part, + '--loader', expected_loader], + ] + expected_post = [ + ['grub2-mkconfig', '-o', '/boot/efi/EFI/redhat/grub.cfg'], + ['efibootmgr', '-v'] + ] + + self.assertEqual( + (expected_install, expected_post), + install_grub.gen_uefi_install_commands( + grub_name, grub_target, grub_cmd, update_nvram, distroinfo, + devices, self.target)) + + def test_ol_install_existing_no_nvram(self): + # verify grub install command is not executed if update_nvram is False + # on ol. + def _enable_loaders(bootid): + efi_path = 'boot/efi/EFI' + target_efi_path = os.path.join(self.target, efi_path) + loaders = [ + os.path.join(target_efi_path, bootid, 'shimx64.efi'), + os.path.join(target_efi_path, 'BOOT', 'BOOTX64.EFI'), + os.path.join(target_efi_path, bootid, 'grubx64.efi'), + ] + for loader in loaders: + util.write_file(loader, content="") + + self.m_os_release.return_value = {'ID': 'ol'} + distroinfo = install_grub.distro.get_distroinfo() + _enable_loaders("redhat") + grub_name = 'grub2-efi-x64' + grub_target = 'x86_64-efi' + grub_cmd = 'grub2-install' + update_nvram = False + devices = ['/dev/disk-a-part1'] + disk = '/dev/disk-a' + part = '1' + self.m_get_disk_part.return_value = (disk, part) + + expected_install = [ + ['efibootmgr', '-v'], + ] + expected_post = [ + ['grub2-mkconfig', '-o', '/boot/efi/EFI/redhat/grub.cfg'], + ['efibootmgr', '-v'] + ] + + self.assertEqual( + (expected_install, expected_post), + install_grub.gen_uefi_install_commands( + grub_name, grub_target, grub_cmd, update_nvram, distroinfo, + devices, self.target)) + class TestGenInstallCommands(CiTestCase): |
