From 1b55c4b8ec62db084fb494c7936551753c5be2df Mon Sep 17 00:00:00 2001 From: Tagada <36127788+Tagadda@users.noreply.github.com> Date: Mon, 18 May 2020 22:22:28 +0200 Subject: [PATCH] Please package_linter about helpers --- scripts/ynh_apt | 221 ------------------------------------------------ 1 file changed, 221 deletions(-) diff --git a/scripts/ynh_apt b/scripts/ynh_apt index 781e2c2..9b0b4ad 100644 --- a/scripts/ynh_apt +++ b/scripts/ynh_apt @@ -1,214 +1,5 @@ #!/bin/bash -# Check if apt is free to use, or wait, until timeout. -# -# [internal] -# -# usage: ynh_wait_dpkg_free -# | exit: Return 1 if dpkg is broken -# -# Requires YunoHost version 3.3.1 or higher. -ynh_wait_dpkg_free() { - local try - set +o xtrace # set +x - # 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 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 - # Check if dpkg hasn't been interrupted and is fully available. - # See this for more information: https://sources.debian.org/src/apt/1.4.9/apt-pkg/deb/debsystem.cc/#L141-L174 - local dpkg_dir="/var/lib/dpkg/updates/" - - # For each file in $dpkg_dir - while read dpkg_file <&9 - do - # Check if the name of this file contains only numbers. - if echo "$dpkg_file" | grep --perl-regexp --quiet "^[[:digit:]]+$" - then - # If so, that a remaining of dpkg. - ynh_print_err "E: dpkg was interrupted, you must manually run 'sudo dpkg --configure -a' to correct the problem." - set -o xtrace # set -x - return 1 - fi - done 9<<< "$(ls -1 $dpkg_dir)" - set -o xtrace # set -x - return 0 - fi - done - echo "apt still used, but timeout reached !" - set -o xtrace # set -x -} - -# Check either a package is installed or not -# -# example: ynh_package_is_installed --package=yunohost && echo "ok" -# -# usage: ynh_package_is_installed --package=name -# | arg: -p, --package= - the package name to check -# -# Requires YunoHost version 2.2.4 or higher. -ynh_package_is_installed() { - # Declare an array to define the options of this helper. - local legacy_args=p - local -A args_array=( [p]=package= ) - local package - # Manage arguments with getopts - ynh_handle_getopts_args "$@" - - ynh_wait_dpkg_free - dpkg-query --show --showformat='${Status}' "$package" 2>/dev/null \ - | grep --count "ok installed" &>/dev/null -} - -# Get the version of an installed package -# -# example: version=$(ynh_package_version --package=yunohost) -# -# usage: ynh_package_version --package=name -# | arg: -p, --package= - the package name to get version -# | ret: the version or an empty string -# -# Requires YunoHost version 2.2.4 or higher. -ynh_package_version() { - # Declare an array to define the options of this helper. - local legacy_args=p - local -A args_array=( [p]=package= ) - local package - # Manage arguments with getopts - ynh_handle_getopts_args "$@" - - if ynh_package_is_installed "$package" - then - dpkg-query --show --showformat='${Version}' "$package" 2>/dev/null - else - echo '' - fi -} - -# APT wrapper for non-interactive operation -# -# [internal] -# -# usage: ynh_apt update -# -# Requires YunoHost version 2.4.0.3 or higher. -ynh_apt() { - ynh_wait_dpkg_free - LC_ALL=C DEBIAN_FRONTEND=noninteractive apt-get --assume-yes --quiet -o=Dpkg::Use-Pty=0 $@ -} - -# Update package index files -# -# usage: ynh_package_update -# -# Requires YunoHost version 2.2.4 or higher. -ynh_package_update() { - ynh_apt update -} - -# Install package(s) -# -# usage: ynh_package_install name [name [...]] -# | arg: name - the package name to install -# -# Requires YunoHost version 2.2.4 or higher. -ynh_package_install() { - ynh_apt --no-remove --option Dpkg::Options::=--force-confdef \ - --option Dpkg::Options::=--force-confold install $@ -} - -# Remove package(s) -# -# usage: ynh_package_remove name [name [...]] -# | arg: name - the package name to remove -# -# Requires YunoHost version 2.2.4 or higher. -ynh_package_remove() { - ynh_apt remove $@ -} - -# Remove package(s) and their uneeded dependencies -# -# usage: ynh_package_autoremove name [name [...]] -# | arg: name - the package name to remove -# -# Requires YunoHost version 2.2.4 or higher. -ynh_package_autoremove() { - ynh_apt autoremove $@ -} - -# Purge package(s) and their uneeded dependencies -# -# usage: ynh_package_autopurge name [name [...]] -# | arg: name - the package name to autoremove and purge -# -# Requires YunoHost version 2.7.2 or higher. -ynh_package_autopurge() { - ynh_apt autoremove --purge $@ -} - -# Build and install a package from an equivs control file -# -# [internal] -# -# example: generate an empty control file with `equivs-control`, adjust its -# content and use helper to build and install the package: -# ynh_package_install_from_equivs /path/to/controlfile -# -# usage: ynh_package_install_from_equivs controlfile -# | arg: controlfile - path of the equivs control file -# -# Requires YunoHost version 2.2.4 or higher. -ynh_package_install_from_equivs () { - local controlfile=$1 - - # retrieve package information - local pkgname=$(grep '^Package: ' $controlfile | cut --delimiter=' ' --fields=2) # Retrieve the name of the debian package - local pkgversion=$(grep '^Version: ' $controlfile | cut --delimiter=' ' --fields=2) # And its version number - [[ -z "$pkgname" || -z "$pkgversion" ]] \ - && ynh_die --message="Invalid control file" # Check if this 2 variables aren't empty. - - # Update packages cache - ynh_package_update - - # Build and install the package - local TMPDIR=$(mktemp --directory) - - # Force the compatibility level at 10, levels below are deprecated - echo 10 > /usr/share/equivs/template/debian/compat - - # Note that the cd executes into a sub shell - # 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_wait_dpkg_free - cp "$controlfile" "${TMPDIR}/control" - (cd "$TMPDIR" - LC_ALL=C equivs-build ./control 1> /dev/null - dpkg --force-depends --install "./${pkgname}_${pkgversion}_all.deb" 2>&1) - - ynh_package_install --fix-broken || \ - { # If the installation failed - # (the following is ran inside { } to not start a subshell otherwise ynh_die wouldnt exit the original process) - # Get the list of dependencies from the deb - local dependencies="$(dpkg --info "$TMPDIR/${pkgname}_${pkgversion}_all.deb" | grep Depends | \ - sed 's/^ Depends: //' | sed 's/,//g')" - # Fake an install of those dependencies to see the errors - # The sed command here is, Print only from '--fix-broken' to the end. - ynh_package_install $dependencies --dry-run | sed --quiet '/--fix-broken/,$p' >&2 - ynh_die --message="Unable to install dependencies"; } - [[ -n "$TMPDIR" ]] && rm --recursive --force $TMPDIR # Remove the temp dir. - - # check if the package is actually installed - ynh_package_is_installed "$pkgname" -} - # Define and install dependencies with a equivs control file # # This helper can/should only be called once per app @@ -321,18 +112,6 @@ ynh_add_app_dependencies () { ynh_install_app_dependencies "${current_dependencies}${package}" } -# Remove fake package and its dependencies -# -# Dependencies will removed only if no other package need them. -# -# usage: ynh_remove_app_dependencies -# -# Requires YunoHost version 2.6.4 or higher. -ynh_remove_app_dependencies () { - local dep_app=${app//_/-} # Replace all '_' by '-' - ynh_package_autopurge ${dep_app}-ynh-deps # Remove the fake package and its dependencies if they not still used. -} - #================================================= # Install packages from an extra repository properly.