On Thu, Nov 16, 2023 at 05:04:09PM -0500, Dusty Mabe wrote:
On 11/16/23 04:23, Coiby Xu wrote:
> Resolves:
https://bugzilla.redhat.com/show_bug.cgi?id=2247940
>
> Currently, CoreOS image fails to be built. This is because since commit
> 00c37d8c ("spec: Drop special handling for IA64 machines"), the last
> command is now kdump-migrate-action.sh and it fails to run in such
> invocation environment. Thus the %post scriptlet returns a non-zero
> exit code which breaks package installation,
>
> Running scriptlet: kexec-tools-2.0.27-4.fc40.ppc64le
> /proc/ is not mounted. This is not a supported mode of operation. Please fix your
invocation environment to mount /proc/ and /sys/ properly. Proceeding anyway. Your mileage
may vary.
> servicelog_notify: is not supported on the Unknown platform
> warning: %post(kexec-tools-2.0.27-4.fc40.ppc64le) scriptlet failed, exit status
1
> Error in POSTIN scriptlet in rpm package kexec-tools
>
> Quoting [1],
>> Non-zero exit codes from scriptlets can break installs/upgrades/erases
>> such that no further actions will be taken for that package in a
>> transaction (see Ordering), which may for example prevent an old version
>> of a package from being erased on upgrades, ...
>>
>> All scriptlets MUST exit with the zero exit status. Because RPM in its
>> default configuration does not execute shell scriptlets with the -e
>> argument to the shell, excluding explicit exit calls (frowned upon with
>> a non-zero argument!), the exit status of the last command in a
>> scriptlet determines its exit status...
>>
>> Usually the most important bit is to apply this to the last command
>> executed in a scriptlet, or to add a separate command such as plain “:”
>> or “exit 0” as the last one in a scriptlet.
>
> Following the above suggestion, add a separate command ":" as the last
> one to the %post scriptlet.
>
> [1]
https://docs.fedoraproject.org/en-US/packaging-guidelines/Scriptlets/
>
> Reported-by: Colin Walters <walters(a)redhat.com>
> Cc: Dusty Mabe <dustymabe(a)redhat.com>
> Cc: Philipp Rudo <prudo(a)redhat.com>
> Fixes: 00c37d8c ("spec: Drop special handling for IA64 machines")
> Signed-off-by: Coiby Xu <coxu(a)redhat.com>
> ---
> kexec-tools.spec | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/kexec-tools.spec b/kexec-tools.spec
> index cb1a408c..19b0b69d 100644
> --- a/kexec-tools.spec
> +++ b/kexec-tools.spec
> @@ -271,6 +271,7 @@ touch /etc/kdump.conf
> servicelog_notify --remove --command=/usr/lib/kdump/kdump-migrate-action.sh
2>/dev/null
> servicelog_notify --add --command=/usr/lib/kdump/kdump-migrate-action.sh
--match='refcode="#MIGRATE" and serviceable=0' --type=EVENT
--method=pairs_stdin >/dev/null
> %endif
> +:
I usually see people use `mycommmand || :` when they are explicitly OK with a command
failing. I don't often
see it just added at the end of a scriptlet, but maybe I don't see that many spec
files or I'm not paying attention.
Indeed, `mycommmand || :` is more common but some packages like
arpwatch [2] added ":" to the end. Anyway I think the guidance is clear
about the message "all scriptlets MUST exit with the zero exit status"
and adding ":" as the last command is the one of the recommended method.
One benefit is it can help prevent this problem this patch tries to
address because the command servicelog_notify may also be moved or there
is a new command inserted in the scriptlet.
With that being said, is it really OK that this command would fail? what does
`servicelog_notify` do? Why is it
only done for powerpc? Should we somehow make that command run in a different place that
would work for ostree
or non-ostree systems?
According to commit 71b7a2f4 ("kdump/ppc64: rebuild initramfs image
after migration"), the purpose of servicelog_notify to rebuild the kdump
initrd after partition migration (LPM) which is ppc-only. Personally, I
think it's OK to fail in the case of pre-built image and it's a
also separate issue. Hi Hari, do you have any comment?
[2]
https://src.fedoraproject.org/rpms/arpwatch/blob/rawhide/f/arpwatch.spec
Dusty
--
Best regards,
Coiby