Merge pull request #349 from cevich/fix_apt_get
cirrus: Add retry/timeout function for apt-get
This commit is contained in:
commit
4d9afdc93f
|
|
@ -56,6 +56,16 @@ OS_RELEASE_VER="$(source /etc/os-release; echo $VERSION_ID | cut -d '.' -f 1)"
|
||||||
# Combined to ease soe usage
|
# Combined to ease soe usage
|
||||||
OS_REL_VER="${OS_RELEASE_ID}-${OS_RELEASE_VER}"
|
OS_REL_VER="${OS_RELEASE_ID}-${OS_RELEASE_VER}"
|
||||||
|
|
||||||
|
# Working with apt under Debian/Ubuntu automation is a PITA, make it easy
|
||||||
|
# Avoid some ways of getting stuck waiting for user input
|
||||||
|
export DEBIAN_FRONTEND=noninteractive
|
||||||
|
# Short-cut for frequently used base command
|
||||||
|
export SUDOAPTGET='sudo -E apt-get -q --yes'
|
||||||
|
# Short list of packages or quick-running command
|
||||||
|
SHORT_APTGET="timeout_attempt_delay_command 24s 5 30s $SUDOAPTGET"
|
||||||
|
# Long list / long-running command
|
||||||
|
LONG_APTGET="timeout_attempt_delay_command 300s 5 30s $SUDOAPTGET"
|
||||||
|
|
||||||
# Pass in a list of one or more envariable names; exit non-zero with
|
# Pass in a list of one or more envariable names; exit non-zero with
|
||||||
# helpful error message if any value is empty
|
# helpful error message if any value is empty
|
||||||
req_env_var() {
|
req_env_var() {
|
||||||
|
|
@ -104,3 +114,33 @@ bad_os_id_ver() {
|
||||||
echo "Unknown/Unsupported distro. $OS_RELEASE_ID and/or version $OS_RELEASE_VER for $(basename $0)"
|
echo "Unknown/Unsupported distro. $OS_RELEASE_ID and/or version $OS_RELEASE_VER for $(basename $0)"
|
||||||
exit 42
|
exit 42
|
||||||
}
|
}
|
||||||
|
|
||||||
|
timeout_attempt_delay_command() {
|
||||||
|
TIMEOUT=$1
|
||||||
|
ATTEMPTS=$2
|
||||||
|
DELAY=$3
|
||||||
|
shift 3
|
||||||
|
CMD=$(echo "$@" | tr --squeeze-repeats '\r\n\v\t' ' ')
|
||||||
|
STDOUTERR=$(mktemp -p '' $(basename $0)_XXXXX)
|
||||||
|
req_env_var ATTEMPTS DELAY
|
||||||
|
echo "Retrying $ATTEMPTS times with a $DELAY delay, and $TIMEOUT timeout for command: $CMD"
|
||||||
|
for (( COUNT=1 ; COUNT <= $ATTEMPTS ; COUNT++ ))
|
||||||
|
do
|
||||||
|
echo "##### (attempt #$COUNT)" &>> "$STDOUTERR"
|
||||||
|
if timeout --foreground $TIMEOUT $CMD &>> "$STDOUTERR"
|
||||||
|
then
|
||||||
|
echo "##### (success after #$COUNT attempts)" &>> "$STDOUTERR"
|
||||||
|
break
|
||||||
|
else
|
||||||
|
echo "##### (failed with exit: $?)" &>> "$STDOUTERR"
|
||||||
|
sleep $DELAY
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
cat "$STDOUTERR"
|
||||||
|
rm -f "$STDOUTERR"
|
||||||
|
if (( COUNT > $ATTEMPTS ))
|
||||||
|
then
|
||||||
|
echo "##### (exceeded $ATTEMPTS attempts)"
|
||||||
|
exit 125
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,9 +17,11 @@ case "$OS_REL_VER" in
|
||||||
;;
|
;;
|
||||||
ubuntu-19)
|
ubuntu-19)
|
||||||
echo "Setting up $OS_RELEASE_ID $OS_RELEASE_VER" # STUB: Add VM setup instructions here
|
echo "Setting up $OS_RELEASE_ID $OS_RELEASE_VER" # STUB: Add VM setup instructions here
|
||||||
|
$SHORT_APTGET update # Fetch latest package metadata
|
||||||
;;
|
;;
|
||||||
ubuntu-18)
|
ubuntu-18)
|
||||||
echo "Setting up $OS_RELEASE_ID $OS_RELEASE_VER" # STUB: Add VM setup instructions here
|
echo "Setting up $OS_RELEASE_ID $OS_RELEASE_VER" # STUB: Add VM setup instructions here
|
||||||
|
$SHORT_APTGET update # Fetch latest package metadata
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
bad_os_id_ver
|
bad_os_id_ver
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue