wait for dpkg locks
[distro-functions] / src / package-manager-abstractions
index 6936c9271e33bd4f6123bcd724ae694de5030365..f70bf1d01772d3d403c4a6f45d38d40f45429681 100644 (file)
@@ -62,11 +62,21 @@ elif command -v apt-get &>/dev/null; then
         fi
     }
     pi() {
+        if dpkg -s -- "$@" &>/dev/null; then
+            return 0
+        fi
+        while fuser /var/lib/dpkg/lock &>/dev/null; do sleep 1; done
         pupdate
         local s; [[ $EUID != 0 ]] && s=sudo
-        $s apt-get -y install --purge --auto-remove "$@"
+        $s $PI_PREFIX apt-get -y install --purge --auto-remove "$@"
     }
+
     pi-nostart() {
+        if dpkg -s -- "$@" &>/dev/null; then
+            return 0
+        fi
+        while fuser /var/lib/dpkg/lock &>/dev/null; do sleep 1; done
+        pupdate
         local s; [[ $EUID != 0 ]] && s=sudo
         local f=/usr/sbin/policy-rc.d
         $s dd of=$f <<EOF
@@ -74,7 +84,7 @@ elif command -v apt-get &>/dev/null; then
 exit 101
 EOF
         $s chmod +x $f
-        pi "$@"
+        $s apt-get -y install --purge --auto-remove "$@"
         $s rm $f
     }
     pf() {
@@ -93,11 +103,13 @@ EOF
     }
     pu() {
         local s; [[ $EUID != 0 ]] && s=sudo
+        while fuser /var/lib/dpkg/lock &>/dev/null; do sleep 1; done
         $s apt-get -y remove --purge --auto-remove  "$@"
         # seems slightly redundant, but it removes more stuff sometimes.
         $s apt-get -y autoremove
     }
     pup() { # upgrade
+        while fuser /var/lib/dpkg/lock &>/dev/null; do sleep 1; done
         pupdate
         local s; [[ $EUID != 0 ]] && s=sudo
         $s apt-get -y dist-upgrade --purge --auto-remove "$@"
@@ -126,6 +138,7 @@ EOF
             apt-file find -x "$file"\$
         else
             apt-file find -x /"$file"\$
+            update-alternatives --list "$file" 2>/dev/null
         fi
     }
     pkgfiles() {