summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Estabrook <jestabro@vyos.io>2023-11-09 14:34:24 -0600
committerJohn Estabrook <jestabro@vyos.io>2023-11-16 12:53:36 -0600
commitbd701768796d6ebb03ca943faf96d1dbea030edd (patch)
tree44513ae5d8110581926278f541897b8d6a5936e2
parentfc5dc00a3892fa26d03213854ea5091d6b0c2c18 (diff)
downloadvyos-1x-bd701768796d6ebb03ca943faf96d1dbea030edd.tar.gz
vyos-1x-bd701768796d6ebb03ca943faf96d1dbea030edd.zip
image: T4516: ensure compatibility with legacy RAID 1 installs
-rw-r--r--data/templates/grub/grub_common.j25
-rw-r--r--data/templates/grub/grub_compat.j211
-rw-r--r--python/vyos/system/compat.py19
-rw-r--r--src/system/grub_update.py13
4 files changed, 30 insertions, 18 deletions
diff --git a/data/templates/grub/grub_common.j2 b/data/templates/grub/grub_common.j2
index 78df3f48c..278ffbf2c 100644
--- a/data/templates/grub/grub_common.j2
+++ b/data/templates/grub/grub_common.j2
@@ -18,5 +18,6 @@ function setup_serial {
setup_serial
-# find root device
-#search --no-floppy --fs-uuid --set=root ${root_uuid}
+{% if search_root %}
+{{ search_root }}
+{% endif %}
diff --git a/data/templates/grub/grub_compat.j2 b/data/templates/grub/grub_compat.j2
index 935172005..887d5d0bd 100644
--- a/data/templates/grub/grub_compat.j2
+++ b/data/templates/grub/grub_compat.j2
@@ -45,9 +45,14 @@ serial --unit=0 --speed=115200
{% endif %}
terminal_output --append serial
terminal_input serial console
-{% if efi %}
-insmod efi_gop
-insmod efi_uga
+{% for mod in modules %}
+insmod {{ mod }}
+{% endfor %}
+{% if root %}
+set root={{ root }}
+{% endif %}
+{% if search_root %}
+{{ search_root }}
{% endif %}
{% for v in versions %}
diff --git a/python/vyos/system/compat.py b/python/vyos/system/compat.py
index aa9b0b4b5..319c3dabf 100644
--- a/python/vyos/system/compat.py
+++ b/python/vyos/system/compat.py
@@ -86,6 +86,12 @@ def filter_unparsed(grub_path: str) -> str:
return filtered
+def get_search_root(unparsed: str) -> str:
+ unparsed_lines = unparsed.splitlines()
+ search_root = next((x for x in unparsed_lines if 'search' in x), '')
+ return search_root
+
+
def sanitize_boot_opts(boot_opts: str) -> str:
"""Sanitize boot options from console and init
@@ -269,18 +275,21 @@ def grub_cfg_fields(root_dir: str = '') -> dict:
fields = {'default': 0, 'timeout': 5}
# 'default' and 'timeout' from legacy grub.cfg
fields |= grub.vars_read(grub_cfg_main)
+
fields['tools_version'] = SYSTEM_CFG_VER
menu_entries = update_version_list(root_dir)
fields['versions'] = menu_entries
+
default = get_default(menu_entries, root_dir)
if default is not None:
fields['default'] = default
- p = Path('/sys/firmware/efi')
- if p.is_dir():
- fields['efi'] = True
- else:
- fields['efi'] = False
+ modules = grub.modules_read(grub_cfg_main)
+ fields['modules'] = modules
+
+ unparsed = filter_unparsed(grub_cfg_main).splitlines()
+ search_root = next((x for x in unparsed if 'search' in x), '')
+ fields['search_root'] = search_root
return fields
diff --git a/src/system/grub_update.py b/src/system/grub_update.py
index da1986e9d..366a85344 100644
--- a/src/system/grub_update.py
+++ b/src/system/grub_update.py
@@ -55,7 +55,10 @@ if __name__ == '__main__':
vyos_menuentries = compat.parse_menuentries(grub_cfg_main)
vyos_versions = compat.find_versions(vyos_menuentries)
unparsed_items = compat.filter_unparsed(grub_cfg_main)
-
+ # compatibilty for raid installs
+ search_root = compat.get_search_root(unparsed_items)
+ common_dict = {}
+ common_dict['search_root'] = search_root
# find default values
default_entry = vyos_menuentries[int(vars['default'])]
default_settings = {
@@ -66,11 +69,6 @@ if __name__ == '__main__':
}
vars.update(default_settings)
- # print(f'vars: {vars}')
- # print(f'modules: {modules}')
- # print(f'vyos_menuentries: {vyos_menuentries}')
- # print(f'unparsed_items: {unparsed_items}')
-
# create new files
grub_cfg_vars = f'{root_dir}/{grub.CFG_VYOS_VARS}'
grub_cfg_modules = f'{root_dir}/{grub.CFG_VYOS_MODULES}'
@@ -81,8 +79,7 @@ if __name__ == '__main__':
Path(image.GRUB_DIR_VYOS).mkdir(exist_ok=True)
grub.vars_write(grub_cfg_vars, vars)
grub.modules_write(grub_cfg_modules, modules)
- # Path(grub_cfg_platform).write_text(unparsed_items)
- grub.common_write()
+ grub.common_write(grub_common=common_dict)
render(grub_cfg_menu, grub.TMPL_GRUB_MENU, {})
render(grub_cfg_options, grub.TMPL_GRUB_OPTS, {})