Bug 2481755

Summary: exit status 77 when updating memtest package
Product: [Fedora] Fedora Reporter: John Dodson <jwadodson>
Component: memtest86+Assignee: Jonathan Steffan <jonathansteffan>
Status: ASSIGNED --- QA Contact: Fedora Extras Quality Assurance <extras-qa>
Severity: medium Docs Contact:
Priority: unspecified    
Version: 44CC: aekoroglu, cdennett, jonathansteffan, jskarvad
Target Milestone: ---   
Target Release: ---   
Hardware: Unspecified   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: ---
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description John Dodson 2026-05-27 02:05:13 UTC
I recently got this error when updating with dnf...

>>> Running %posttrans scriptlet: memtest86+-0:8.10-1.fc44.x86_64
>>> Finished %posttrans scriptlet: memtest86+-0:8.10-1.fc44.x86_64
>>> Scriptlet output:
>>> /usr/lib64/memtest86+/memtest86+.kernel-install-plugin succeeded with exit status 77, not executing remaining executables.


Reproducible: Didn't try

Steps to Reproduce:
1. run dnf update (with metest86+ already installed)
2.
3.
Actual Results:
>>> Running %posttrans scriptlet: memtest86+-0:8.10-1.fc44.x86_64
>>> Finished %posttrans scriptlet: memtest86+-0:8.10-1.fc44.x86_64
>>> Scriptlet output:
>>> /usr/lib64/memtest86+/memtest86+.kernel-install-plugin succeeded with exit status 77, not executing remaining executables.


Expected Results:
No error.

Comment 1 Jonathan Steffan 2026-05-31 17:15:54 UTC
This is actually the intended exit code. We are using the kernel-install plumbing to manage the bootloader configuration. Exit code 77 short circuits the running of plugins successfully.

KERNEL_INSTALL_PLUGINS=%{_libdir}/%{name}/memtest86+.kernel-install-plugin \
kernel-install add %{version} %{_libdir}/%{name}/${MEMTEST_IMAGE}

The plugin code in memtest86+.kernel-install-plugin is specifically returning 77. I interpreted the docs (which appear to be down right now https://www.freedesktop.org/software/systemd/man/kernel-install.html) to ask for return code 77 to indicate success and don't proceed processing any other plugins.

We can likely return 0 as long as the setting of `KERNEL_INSTALL_PLUGINS` keeps all other plugins from running.

@jskarvad This exit code seemed the most appropriate as we only want to run our custom plugin. However, I think it's safe to switch to 0 to suppress this confusing output. What do you think?

Comment 2 John Dodson 2026-06-02 04:05:09 UTC
According to Fedora packaging guidelines <https://docs.fedoraproject.org/en-US/packaging-guidelines/Scriptlets/#_syntax> "All scriptlets MUST exit with the zero exit status."

Otherwise the rpm transaction effectively fails & dnf (if used) fails to appropriately record it's transaction as successful.

If that occurs in an upgrade/update where more than one package is being updated then that means everything has failed to dnf.
Not true perhaps in this case but that seems to be what rpm/dnf act like.

On the doc, https://www.freedesktop.org/software/systemd/man/kernel-install.html
I'm wondering, 6 bits ie. 77 (I'm old & assuming it's octal) is not really -1 in an 8 bit error mask or 16 or 32 or 64
(or 128 - when will we need 128 bit processors?) bit mask.

So what exactly is 77 supposed to mean?
Is this a typo in the doco?

I always (even in Version 6/7 when I started playing Unix) thought that exit status was,

        8-bit unsigned integer, allowing for values from 0 to 255 (dec).

I get that -1 (377) might be a useful exit code in some cases, but???
it ain't that in the above doc.

Maybe we need a bug filed against the manual or the kernel???

Comment 3 Jonathan Steffan 2026-06-02 05:25:55 UTC
(In reply to John Dodson from comment #2)
> According to Fedora packaging guidelines <https://docs.fedoraproject.org/en-US/packaging-guidelines/Scriptlets/#_syntax> "All scriptlets MUST exit with the zero exit status."

Technically, the scriptlet return code is 0 as returned by the kernel-install command. The plugin code is returning 77 to kernel-install, telling it to not continue processing plugins and that things were successful. This is where the log message comes from and why the transaction completes successfully.

I need to re-read the code and make sure that since we are setting a specific plugin it's safe to just return 0. This will stop the confusing transaction log message. When I originally wrote it, I went with what appeared to be the safest way to make sure we don't run any other plugins when calling kernel-install. All of that code makes a lot of assumptions that we are actually installing a kernel. I was also hedging against a `KERNEL_INSTALL_PLUGINS` behavior change that I might not notice.

Comment 4 John Dodson 2026-06-02 07:53:14 UTC
Ok, thanks, if the exit really is zero (to rpm/dnf) then it should be ok.

I really would though be questioning the 77 exit status, really does look like
a typo in the doc.
But if the message is just informational & the message is actually coming from kernel-install-plugin

>>> Scriptlet output:
>>> /usr/lib64/memtest86+/memtest86+.kernel-install-plugin succeeded with exit status 77, not executing remaining executables.

& the exit status really is 0

it should be ok & I'm sorry for bothering you.

At the moment I've removed memtest while trying to eliminate all errors that are
occurring when dnf does an upgrade (43->44) & getting things "back to normal"
with dnf in fc44.

I have found memtest useful in the past, so I'd like to feel confident before
putting it back that it won't result in dnf thinking it failed to be updated.