Hi Antoine,
Antoine Jacoutot wrote on Mon, Dec 07, 2020 at 09:48:36AM +0100:
> On Sun, Dec 06, 2020 at 10:52:37PM +0100, Alexander Hall wrote:
>> On December 6, 2020 8:13:26 PM GMT+01:00, Antoine Jacoutot wrote:
>>> On Sun, Dec 06, 2020 at 05:20:31PM +0000, Stuart Henderson wrote:
>>>> On 2020/12/06 16:39, Otto Moerbeek wrote:
>>>>> On Sun, Dec 06, 2020 at 03:31:19PM +0000, SW wrote:
>>>>>> On 06/12/2020 14:32, Otto Moerbeek wrote:
>>>>>>> On Sun, Dec 06, 2020 at 02:19:05PM +0000, SW wrote:
>>>>>>>> I've been looking to have syspatch give me a quick indication
>>>>>>>> of whether a reboot is likely to be required. As a quick and
>>>>>>>> dirty check, I've just been treating "Were patches applied?"
>>>>>>>> as the indicator.
>>>>>>>> The following diff will cause syspatch to exit when applying
>>>>>>>> patches with status code 0 only if patches were actually applied.
>>>>>>>> My biggest concern is that it does cause a change in behaviour,
>>>>>>>> so perhaps this either needs making into an option or a different
>>>>>>>> approach entirely?
[...]
>>>>>>> I don't this is correct since it maks syspatch exit 1 on "no
>>>>>>> patches applied".
>>>>>> That's precisely the idea- from previous discussion with a couple
>>>>>> of people there didn't seem to be an easy (programmatic) way to
>>>>>> figure out whether syspatch had done anything or not.
>>>>> exit code 1 normally used for error conditions. A system being
>>>>> up-to-date is not an error condition.
>>>>>> Doing this would be a bit of a blunt way of handling things, and
>>>>>> perhaps it would be better gated behind a flag, but is there a
>>>>>> better way to make a scripted update work automatically
>>>>>> (including rebooting as necessary)?
>>>> How about the same exit codes as acme-client? They seem fairly
>>>> reasonable - 0=updated, 1=failure, 2=no change.
>>> I wouldn't object to that.
>> So that'd boil down to
>> $_PATCH_APPLIED || exit 4
>> or
>> $_PATCH_APPLIED && exit
>> exit 4
>> ...if the explicit exit feels better instead of just running to the
>> end of the script.
>> But maybe this script prefers some more verbosity... :-)
> Something like this?
I'm on the fence whether regarding an up-to-date system as an error
condition makes sense; i neither like the idea nor object to it.
But if you decide to head into that direction, i suggest to try
and make the documentation more precise. "No patch is available"
sounds as if the OpenBSD project did not yet provide a single
patch for the release in question.
> Index: syspatch.8
> ===================================================================
> RCS file: /cvs/src/usr.sbin/syspatch/syspatch.8,v
> retrieving revision 1.21
> diff -u -p -r1.21 syspatch.8
> --- syspatch.8 25 Jul 2020 15:45:44 -0000 1.21
> +++ syspatch.8 7 Dec 2020 08:47:48 -0000
> @@ -64,6 +64,7 @@ of installed patches.
> .El
> .Sh EXIT STATUS
> .Ex -std syspatch
> +2 indicates that no patch is available.
To describe your proposed implementation, i think you would have
to say something like:
2 indicates that no additional patch was installed.
But i doubt that is what you actually intend to do.
> .Sh SEE ALSO
> .Xr signify 1 ,
> .Xr installurl 5 ,
> Index: syspatch.sh
> ===================================================================
> RCS file: /cvs/src/usr.sbin/syspatch/syspatch.sh,v
> retrieving revision 1.166
> diff -u -p -r1.166 syspatch.sh
> --- syspatch.sh 27 Oct 2020 17:42:05 -0000 1.166
> +++ syspatch.sh 7 Dec 2020 08:47:48 -0000
> @@ -248,7 +248,8 @@ must be run manually to install the new
> fi
> fi
>
> - ${_PATCH_APPLIED} && echo "Errata can be reviewed under ${_PDIR}"
> + ${_PATCH_APPLIED} && echo "Errata can be reviewed under ${_PDIR}" ||
> + return 2
This doesn't appear to work unless i screwed up my testing.
Even if _PATCH_APPLIED==false, syspatch still exits 0 for me.
The return value of the trap function doesn't appear to affect
the exit status of the script.
If i change "return 2" to "exit 2", (and insert a debugging statement
echo _PATCH_APPLIED = ${_PATCH_APPLIED}
right before the "${_PATCH_APPLIED} && ..." test), then i see
the following potentially unintended behaviour:
# /usr/sbin/syspatch -r ; echo $?
Reverting patch 007_xmaplen
_PATCH_APPLIED = false
2
That means -r would never again succeed? And now:
# /usr/sbin/syspatch -c ; echo $?
007_xmaplen
_PATCH_APPLIED = false
2
# /usr/sbin/syspatch -l ; echo $?
001_bgpd
002_icmp6
003_tmux
004_wg
005_unwind
006_rpki
_PATCH_APPLIED = false
2
So listing patches is an error when new patches are available?
# /usr/sbin/syspatch ; echo $?
Get/Verify syspatch68-007_xmaplen... 100% |*************| 4547 KB 00:00
Installing patch 007_xmaplen
_PATCH_APPLIED = true
Errata can be reviewed under /var/syspatch
0
That is the only test result matching what i think you might intend.
But now, this still happens:
# /usr/sbin/syspatch -c ; echo $?
_PATCH_APPLIED = false
2
# /usr/sbin/syspatch -l ; echo $?
001_bgpd
002_icmp6
003_tmux
004_wg
005_unwind
006_rpki
007_xmaplen
_PATCH_APPLIED = false
2
Listing patches is an error no matter whether or not patches are
available, no matter whether these patches are already installed
or not?
I doubt the patch is ready for commit in its present state.
Yours,
Ingo