On Thu, Aug 03, 2017 at 06:26:47PM -0400, trondd wrote:
> Stuart Henderson <s...@spacehopper.org> wrote:
> 
> > Ah, perhaps the change to disk behaviour wasn't reflected in calculations 
> > then..
> 
> I got it figured out.
> 
> In the checkfs function, the 'eval $(stat...)' command stores a list of disk
> devices and creates a variable named for each device to store the size of the
> files in the patch to be installed there.  It uses :+ to accumulate the sizes 
> of
> multiple files.  But since ksh creates variales as global by default, these 
> are
> not cleared between patches and :+ takes an existing value if the variable 
> already
> exists.  So the value stored in these variables will continue to accumulate.
> 
> A simple solution seems to be to mark these variables local.  Ksh will clean 
> them
> up between calls to checkfs.

Very good find.
Just applied your patch on current, thanks.

> Tim.
> 
> 
> Index: syspatch.sh
> ===================================================================
> RCS file: /cvs/src/usr.sbin/syspatch/syspatch.sh,v
> retrieving revision 1.120
> diff -u -p -r1.120 syspatch.sh
> --- syspatch.sh       2 Aug 2017 05:58:29 -0000       1.120
> +++ syspatch.sh       3 Aug 2017 21:59:13 -0000
> @@ -91,7 +91,7 @@ checkfs()
>       # - nonexistent files (i.e. syspatch is installing new files)
>       # - broken interpolation due to bogus devices like remote filesystems
>       eval $(cd / &&
> -             stat -qf "_dev=\"\${_dev} %Sd\" %Sd=\"\${%Sd:+\${%Sd}\+}%Uz\"" \
> +             stat -qf "_dev=\"\${_dev} %Sd\"; local 
> %Sd=\"\${%Sd:+\${%Sd}\+}%Uz\"" \
>                       ${_files}) 2>/dev/null || _ret=$?
>       set -e
>       [[ ${_ret} == 127 ]] && sp_err "Remote filesystem, aborting" 
> 

-- 
Antoine

Reply via email to