|
53 | 53 | utils_misc, |
54 | 54 | utils_net, |
55 | 55 | utils_package, |
| 56 | + utils_sys, |
56 | 57 | virt_vm, |
57 | 58 | ) |
58 | 59 |
|
@@ -214,16 +215,44 @@ def update_boot_option( |
214 | 215 | req_remove_args, session=session, remove_args=True |
215 | 216 | ) |
216 | 217 | else: |
217 | | - if not utils_package.package_install("grubby", session=session): |
218 | | - raise exceptions.TestError("Failed to install grubby package") |
219 | | - msg = "Update guest kernel option. " |
220 | | - cmd = "grubby --update-kernel=`grubby --default-kernel` " |
221 | | - if req_remove_args: |
222 | | - msg += " remove args: %s" % req_remove_args |
223 | | - cmd += '--remove-args="%s" ' % req_remove_args |
224 | | - if req_args: |
225 | | - msg += " add args: %s" % req_args |
226 | | - cmd += '--args="%s"' % req_args |
| 218 | + image_mode = utils_sys.is_image_mode(session=session) |
| 219 | + if image_mode: |
| 220 | + get_ostree_cmd = "cat /proc/cmdline | grep -o 'ostree=[^ ]*'" |
| 221 | + current_ostree = session.cmd_output(get_ostree_cmd).strip() |
| 222 | + if not current_ostree: |
| 223 | + raise exceptions.TestError("System not booted via ostree/bootc.") |
| 224 | + |
| 225 | + get_entry_cmd = "grep -l '%s' /boot/loader/entries/*.conf | grep -v rescue | head -n 1" % current_ostree |
| 226 | + target_entry = session.cmd_output(get_entry_cmd).strip() |
| 227 | + if not target_entry: |
| 228 | + raise exceptions.TestError("Fail to find active entry for %s" % current_ostree) |
| 229 | + LOG.info("Active boot entry identified: %s", target_entry) |
| 230 | + |
| 231 | + sed_cmds = [] |
| 232 | + if req_remove_args: |
| 233 | + for arg in req_remove_args.split(): |
| 234 | + sed_cmds.append("sed -i -E 's/\\b %s(=[^ ]*)?\\b//g' %s" % (arg, target_entry)) |
| 235 | + |
| 236 | + if req_args: |
| 237 | + sed_cmds.append("sed -i '/^options/ s/$/ %s/' %s" % (req_args, target_entry)) |
| 238 | + |
| 239 | + full_sed_script = " && ".join(sed_cmds) |
| 240 | + cmd = 'unshare -m /bin/bash -c "mount -o remount,rw /boot && %s"' % full_sed_script |
| 241 | + msg = "Modifying Bootc kernel args in %s by cmd '%s'" % (target_entry, cmd) |
| 242 | + else: |
| 243 | + if not utils_package.package_install("grubby", session=session): |
| 244 | + raise exceptions.TestError("Failed to install grubby package") |
| 245 | + cmd = "grubby --update-kernel=`grubby --default-kernel` " |
| 246 | + remove_opt = "--remove-args=" |
| 247 | + add_opt = "--args=" |
| 248 | + |
| 249 | + msg = "Update guest kernel option. " |
| 250 | + if req_remove_args: |
| 251 | + msg += " remove args: %s" % req_remove_args |
| 252 | + cmd += '%s"%s" ' % (remove_opt, req_remove_args) |
| 253 | + if req_args: |
| 254 | + msg += " add args: %s" % req_args |
| 255 | + cmd += '%s"%s"' % (add_opt, req_args) |
227 | 256 | if req_remove_args or req_args: |
228 | 257 | __run_cmd_and_handle_error( |
229 | 258 | msg, cmd, session, "Failed to modify guest kernel option" |
|
0 commit comments