Hello, especially those who add some kind of tweaks to poudriere :)
In my case, I try to make it a hook script first, so it is not affected by
errexit of shell.
However, when modifying poudriere to incorporate the codes, some tmpfs are not
mounted depending on USE_TMPFS value, so poudriere exits with an error when
trying to handle them.
So I will post a revised version of the hook script that includes ideas to
counteract that, including this one.
The file should be placed in a location that will be erased by
poudriere-logclean. That would require another step to collect the results...
I don't know if multiple concurrent executions of it will occur, but even if it
does, it has been changed to work exclusively.
And I am trying to use jq to get and add numbers.
If you see a point that you think is an interesting idea, cut it out and use it
:)
Regards.
Below is the script.
#!/bin/sh
case "${0##*/}" in
pkgbuild.sh)
case "${1}" in # (
success|failed)
if ! [ ${LOCKF_HOOK_TMPFS:+1} ] ; then
shopt="${-}"
LOCKF_HOOK_TMPFS=1 lockf -k "${LOG}/.tmpfs.log" /bin/sh
${shopt:+"-${-}"} "${0}" ${1+"${@}"}
elif [ ${MY_JOBID:+1} ] ; then
# jq was installed by package textproc/jq
if JQ=$(which jq 2>&${OUTPUT_REDIRECTED_STDERR:-2}) ;
then
realpath=$(realpath
"${MASTERMNT}/../${MY_JOBID}/")
pour_xo_sauce_on_df=$(
mount -t tmpfs -p |
cut -f 2 -w |
grep -e "^${realpath}" |
xargs df -b --libxo json |
${JQ} -c -r
'[.["storage-system-information"].filesystem[].["used-blocks"]]|add//-0'
)
tmpfs_at_end=$(
echo "${pour_xo_sauce_on_df}" |
awk '{ x += $0; } END { printf "%s %.2f
%s", "TMPFS:", x*512/(1024**3), "GiB" }'
)
elif ! tmpfs_at_end="$(env BLOCKSIZE=512 df -t tmpfs \
${MASTERMNT}/../${MY_JOBID}/ \
${MASTERMNT}/../${MY_JOBID}/.p/ \
${MASTERMNT}/../${MY_JOBID}/usr/local/ \
2>/dev/null | tail -3 \
| awk '{ tmpfs_use += $3; } END {
printf "%s %.2f %s", "TMPFS:", tmpfs_use*512/(1024**3), "GiB" }')" ; then
tmpfs_at_end="TMPFS: -0. GiB"
fi
if true ; then
# output to stdout
echo "${2} | ${3}: ${tmpfs_at_end}"
>&${OUTPUT_REDIRECTED_STDOUT:-1}
fi
if false ; then
# output to stderr
echo "${2} | ${3}: ${tmpfs_at_end}"
>&${OUTPUT_REDIRECTED_STDERR:-2}
fi
if true && [ ${OUTPUT_REDIRECTED:-0} -eq 1 ] ; then
# output to ${LOG}/logs/${3}.log file
echo "${tmpfs_at_end}" >&2
fi
if true ; then
# append to file
echo "${2} | ${3}: ${tmpfs_at_end}"
>>"${LOG}/.tmpfs.log"
fi
fi
;; # (
*)
esac
;; # (
*)
esac
return 0
# end of script