From b67105f04bf0d7e52649040ccca277b40ae21bc0 Mon Sep 17 00:00:00 2001 From: Maniack Crudelis Date: Tue, 6 Nov 2018 01:00:57 +0100 Subject: [PATCH 1/3] [enh] Wait for dpkg lock to be free --- data/helpers.d/package | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/data/helpers.d/package b/data/helpers.d/package index db3b50e0e..3ac93a9db 100644 --- a/data/helpers.d/package +++ b/data/helpers.d/package @@ -1,3 +1,26 @@ +# Check if apt is free to use, or wait, until timeout. +# +# [internal] +# +# usage: ynh_is_dpkg_free +ynh_is_dpkg_free() { + local try + # With seq 1 17, timeout will be almost 30 minutes + for try in `seq 1 17` + do + # Check if /var/lib/dpkg/lock is used by another process + if sudo lsof /var/lib/dpkg/lock > /dev/null + then + echo "apt is already in use..." + # Sleep an exponential time at each round + sleep $(( try * try )) + else + break + fi + done + echo "apt still used, but timeout reached !" +} + # Check either a package is installed or not # # example: ynh_package_is_installed 'yunohost' && echo "ok" @@ -5,6 +28,7 @@ # usage: ynh_package_is_installed name # | arg: name - the package name to check ynh_package_is_installed() { + ynh_is_dpkg_free dpkg-query -W -f '${Status}' "$1" 2>/dev/null \ | grep -c "ok installed" &>/dev/null } @@ -30,6 +54,7 @@ ynh_package_version() { # # usage: ynh_apt update ynh_apt() { + ynh_is_dpkg_free DEBIAN_FRONTEND=noninteractive sudo apt-get -y $@ } @@ -105,6 +130,7 @@ ynh_package_install_from_equivs () { # Create a fake deb package with equivs-build and the given control file # Install the fake package without its dependencies with dpkg # Install missing dependencies with ynh_package_install + ynh_is_dpkg_free (cp "$controlfile" "${TMPDIR}/control" && cd "$TMPDIR" \ && equivs-build ./control 1>/dev/null \ && sudo dpkg --force-depends \ From eb8792376c1ec41a894b4f0963f0477bf2312354 Mon Sep 17 00:00:00 2001 From: "ljf (zamentur)" Date: Tue, 20 Nov 2018 20:47:36 +0100 Subject: [PATCH 2/3] [enh] Better name ynh_wait_dpkg_free --- data/helpers.d/package | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/data/helpers.d/package b/data/helpers.d/package index 3ac93a9db..22adb9b15 100644 --- a/data/helpers.d/package +++ b/data/helpers.d/package @@ -2,8 +2,8 @@ # # [internal] # -# usage: ynh_is_dpkg_free -ynh_is_dpkg_free() { +# usage: ynh_wait_dpkg_free +ynh_wait_dpkg_free() { local try # With seq 1 17, timeout will be almost 30 minutes for try in `seq 1 17` @@ -28,7 +28,7 @@ ynh_is_dpkg_free() { # usage: ynh_package_is_installed name # | arg: name - the package name to check ynh_package_is_installed() { - ynh_is_dpkg_free + ynh_wait_dpkg_free dpkg-query -W -f '${Status}' "$1" 2>/dev/null \ | grep -c "ok installed" &>/dev/null } @@ -54,7 +54,7 @@ ynh_package_version() { # # usage: ynh_apt update ynh_apt() { - ynh_is_dpkg_free + ynh_wait_dpkg_free DEBIAN_FRONTEND=noninteractive sudo apt-get -y $@ } @@ -130,7 +130,7 @@ ynh_package_install_from_equivs () { # Create a fake deb package with equivs-build and the given control file # Install the fake package without its dependencies with dpkg # Install missing dependencies with ynh_package_install - ynh_is_dpkg_free + ynh_wait_dpkg_free (cp "$controlfile" "${TMPDIR}/control" && cd "$TMPDIR" \ && equivs-build ./control 1>/dev/null \ && sudo dpkg --force-depends \ From 98ae285c91ac1309e9963362c59e107c1d0b7fb5 Mon Sep 17 00:00:00 2001 From: ljf Date: Tue, 20 Nov 2018 22:48:35 +0100 Subject: [PATCH 3/3] [enh] Add lsof dependencies in case we decide to remove mariadb --- debian/control | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/control b/debian/control index be63436da..1f4995195 100644 --- a/debian/control +++ b/debian/control @@ -26,7 +26,7 @@ Depends: ${python:Depends}, ${misc:Depends} , metronome , rspamd (>= 1.6.0), redis-server, opendkim-tools , haveged, fake-hwclock - , equivs + , equivs, lsof Recommends: yunohost-admin , openssh-server, ntp, inetutils-ping | iputils-ping , bash-completion, rsyslog, etckeeper