summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorSimon Rettberg2021-07-08 10:48:44 +0200
committerSimon Rettberg2021-07-08 10:48:44 +0200
commitd0332747e49a6c1f3879211210c1252458323c50 (patch)
tree06fe4529d52af6a4f9bc932f6185a874ab5d4c11 /core
parentsetup_target: Install all required packages at once at the start (diff)
downloadmltk-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-xcore/bin/setup_target10
-rw-r--r--core/includes/packagemanager.inc24
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() {