diff options
author | Simon Rettberg | 2021-07-08 10:48:44 +0200 |
---|---|---|
committer | Simon Rettberg | 2021-07-08 10:48:44 +0200 |
commit | d0332747e49a6c1f3879211210c1252458323c50 (patch) | |
tree | 06fe4529d52af6a4f9bc932f6185a874ab5d4c11 /core | |
parent | setup_target: Install all required packages at once at the start (diff) | |
download | mltk-d0332747e49a6c1f3879211210c1252458323c50.tar.gz mltk-d0332747e49a6c1f3879211210c1252458323c50.tar.xz mltk-d0332747e49a6c1f3879211210c1252458323c50.zip |
setup_target: Don't try to install packages already installed
Diffstat (limited to 'core')
-rwxr-xr-x | core/bin/setup_target | 10 | ||||
-rw-r--r-- | core/includes/packagemanager.inc | 24 |
2 files changed, 31 insertions, 3 deletions
diff --git a/core/bin/setup_target b/core/bin/setup_target index ebb8218e..ae96b691 100755 --- a/core/bin/setup_target +++ b/core/bin/setup_target @@ -72,6 +72,7 @@ unset_required_vars () { # Install all the packages from all selected modules in current target install_all_packages () { local module file config + declare -a missing declare -A packages dupcheck packages=() for module in "${!MODULE_PATHS[@]}"; do @@ -97,9 +98,12 @@ install_all_packages () { dupcheck["$file"]=1 done done - pinfo "Making sure required packages are installed..." - pdebug "List: ${!packages[*]}" - install_packages "${!packages[@]}" + missing=( $( filter_installed_packages "${!packages[@]}" ) ) + if [ "${#missing[@]}" -gt 0 ]; then + pinfo "Making sure required packages are installed..." + pinfo "Potentially missing: ${missing[*]}" + install_packages "${missing[@]}" + fi unset_required_vars } diff --git a/core/includes/packagemanager.inc b/core/includes/packagemanager.inc index 1e5b236d..f50455a2 100644 --- a/core/includes/packagemanager.inc +++ b/core/includes/packagemanager.inc @@ -83,6 +83,30 @@ list_packet_files() { } # +# Pass list of packages, returns filtered list, with packages removed +# that are already installed +# +filter_installed_packages() { + local i + if [ "$PACKET_HANDLER" == "dpkg" ]; then + declare -A existing + for i in $( dpkg -l "$@" 2> /dev/null | awk '$1 == "ii" {print $2}' ); do + existing["$i"]=1 + done + for i in "$@"; do + [ -n "${existing["${i}"]}" ] || [ -n "${existing["${i}:${AMD64_X86}"]}" ] || echo "$i" + done + elif [ "$PACKET_HANDLER" == "rpm" ]; then + for i in "$@"; do + rpm --quiet -q "$i" &> /dev/null || echo "$i" + done + else + pwarning "'Don't know how to determine installation status of packages for $PACKET_HANDLER" + echo "$@" + fi +} + +# # install individual package depending on package manager # install_packages() { |