summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStamatis Katsaounis <[email protected]>2023-10-17 19:11:54 +0000
committerServer Team CI Bot <[email protected]>2023-10-17 19:11:54 +0000
commit64b2744dc4c7c57e18beb46423cf6b563ccd76ab (patch)
treee8dfe236c0af468c23da19179c40bd898582e264
parent7c18bf6a24297ed465a341a1f53875b61c878d6b (diff)
Add support for Oracle Linux
-rw-r--r--curtin/commands/install_grub.py4
-rw-r--r--curtin/distro.py6
-rw-r--r--pylintrc2
-rw-r--r--tests/unittests/test_commands_install_grub.py114
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],
diff --git a/pylintrc b/pylintrc
index 7a509177..3557c40f 100644
--- a/pylintrc
+++ b/pylintrc
@@ -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):