diff options
author | C.J. Collier <cjcollier@linuxfoundation.org> | 2017-03-30 20:47:34 -0700 |
---|---|---|
committer | C.J. Collier <cjcollier@linuxfoundation.org> | 2017-03-30 21:10:53 -0700 |
commit | 5a3c31ca725c506003dfa2cb3a374872f10a970d (patch) | |
tree | 72e847643aadd95f1696e709182ddc82c1eaca87 /packer/provision/baseline.sh | |
parent | 2d0c8fd46b3c234ee6dfa127de7741165e4be0a5 (diff) |
Correct lock check failures
* fuser can take multiple filenames and return the lock status
atomically
- This eliminates a race condition we were experiencing
* if the file was locked, run the lock check again. Otherwise, just
run apt-get directly
Change-Id: I00eb6e0fa6bdf223eadfcade05f4a4f00745750f
Signed-off-by: C.J. Collier <cjcollier@linuxfoundation.org>
Diffstat (limited to 'packer/provision/baseline.sh')
-rw-r--r-- | packer/provision/baseline.sh | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/packer/provision/baseline.sh b/packer/provision/baseline.sh index aaf1fa100..82edb3fe7 100644 --- a/packer/provision/baseline.sh +++ b/packer/provision/baseline.sh @@ -122,7 +122,10 @@ EOF i=0 tput sc -while [ fuser /var/lib/dpkg/lock >/dev/null 2>&1 || fuser /var/lib/apt/lists/lock >/dev/null 2>&1 ]; do +LOCKFILES="/var/lib/dpkg/lock /var/lib/apt/lists/lock" +WASLOCKED=0 +while [ fuser ${LOCKFILES} >/dev/null 2>&1 ]; do + WASLOCKED=$? case $(($i % 4)) in 0 ) j="-" ;; 1 ) j="\\" ;; @@ -135,7 +138,12 @@ while [ fuser /var/lib/dpkg/lock >/dev/null 2>&1 || fuser /var/lib/apt/lists/loc ((i=i+1)) done -/usr/bin/apt-get "$@" +if [ $WASLOCKED==0 ] +then + /usr/bin/apt-get "$@" +else + exec /usr/local/bin/apt-get "$@" +fi EOF chmod +x /usr/local/bin/apt-get |