From 5a3c31ca725c506003dfa2cb3a374872f10a970d Mon Sep 17 00:00:00 2001 From: "C.J. Collier" Date: Thu, 30 Mar 2017 20:47:34 -0700 Subject: [PATCH] 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 --- packer/provision/baseline.sh | 12 ++++++++++-- 1 file 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 -- 2.16.6