summaryrefslogtreecommitdiffstats
path: root/packer/provision
diff options
context:
space:
mode:
authorC.J. Collier <cjcollier@linuxfoundation.org>2017-03-30 20:47:34 -0700
committerC.J. Collier <cjcollier@linuxfoundation.org>2017-03-30 21:10:53 -0700
commit5a3c31ca725c506003dfa2cb3a374872f10a970d (patch)
tree72e847643aadd95f1696e709182ddc82c1eaca87 /packer/provision
parent2d0c8fd46b3c234ee6dfa127de7741165e4be0a5 (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')
-rw-r--r--packer/provision/baseline.sh12
1 files changed, 10 insertions, 2 deletions
diff --git a/packer/provision/baseline.sh b/packer/provision/baseline.sh
index aaf1fa10..82edb3fe 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