summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xcore/bin/setup_target48
-rw-r--r--core/includes/packagemanager.inc112
2 files changed, 53 insertions, 107 deletions
diff --git a/core/bin/setup_target b/core/bin/setup_target
index 04417efd..ebb8218e 100755
--- a/core/bin/setup_target
+++ b/core/bin/setup_target
@@ -63,14 +63,52 @@ initial_checks () {
detect_distribution
}
+unset_required_vars () {
+ for VARNAME in ${!REQUIRED_*}; do
+ unset $VARNAME
+ done
+}
+
+# Install all the packages from all selected modules in current target
+install_all_packages () {
+ local module file config
+ declare -A packages dupcheck
+ packages=()
+ for module in "${!MODULE_PATHS[@]}"; do
+ unset_required_vars
+ config="${MODULE_PATHS["$module"]}/module.conf"
+ for file in $SYS_VERSIONS; do
+ if [ -e "${config}.${file}" ]; then
+ validate_config "${config}.${file}"
+ . "${config}.${file}"
+ break
+ fi
+ done
+ dupcheck=()
+ for file in $REQUIRED_INSTALLED_PACKAGES; do
+ [ -n "${dupcheck["$file"]}" ] && continue
+ packages["$file"]+=" $module"
+ dupcheck["$file"]=1
+ done
+ for file in $REQUIRED_CONTENT_PACKAGES; do
+ [ "${file:0:1}" = "@" ] && continue
+ [ -n "${dupcheck["$file"]}" ] && continue
+ packages["$file"]+=" $module"
+ dupcheck["$file"]=1
+ done
+ done
+ pinfo "Making sure required packages are installed..."
+ pdebug "List: ${!packages[*]}"
+ install_packages "${!packages[@]}"
+ unset_required_vars
+}
+
#
# generic function to read the config file of the current $MODULE
#
read_config () {
# unset previous variables from other config files
- for VARNAME in ${!REQUIRED_*}; do
- unset $VARNAME
- done
+ unset_required_vars
local MODULE_CONFIG="${MODULE_DIR}/module.conf"
@@ -313,6 +351,7 @@ generate_target() {
shift
TARGET_DIR="$( readlink -f "${TARGETS_BASEDIR}/${TARGET}" )"
scan_target "$TARGET_DIR"
+ install_all_packages
if [[ "$TARGET" == *@* ]]; then
VARNAME="${TARGET#*@}"
TARGET="${TARGET%@*}"
@@ -451,10 +490,7 @@ process_module() {
pdebug "## Reading .build of $MODULE"
. "${CORE_DIR}/includes/clean_module_funcs.inc" # Clean all hooks, in case the module doesn't define them all
read_build # Read all the hooks from the module
- # Install module's dependencies
- pdebug "## Installing dependencies"
cd "${MODULE_DIR}" || perror "cd to '${MODULE_DIR}' failed."
- install_dependencies
# update kernel version variables before running a module, as the last one might have been the kernel...
get_kernel_version
# Execute load-hook before anything else
diff --git a/core/includes/packagemanager.inc b/core/includes/packagemanager.inc
index 5b798c22..1e5b236d 100644
--- a/core/includes/packagemanager.inc
+++ b/core/includes/packagemanager.inc
@@ -22,7 +22,7 @@ list_content_packages() {
done
}
-list_content_package(){
+list_content_package() {
#[ -z "$EXTRA_PACKAGES" ] || pinfo "Listing additional packages: $EXTRA_PACKAGES"
[ $# -gt 2 ] && perror "'list_content_package' accepts max 2 args. $# given."
local OP="-e"
@@ -83,110 +83,20 @@ list_packet_files() {
}
#
-# Convenience function
-#
-# install all dependencies of a module
-# goes through all package as given in the variable REQUIRED_INSTALLED_PACKAGES
-install_dependencies() {
- [ -z "${REQUIRED_INSTALLED_PACKAGES}${REQUIRED_CONTENT_PACKAGES}" ] && return
- # add all REQUIRED_CONTENT_PACKAGES that are not tagged as optional
- local TO_INSTALL="$REQUIRED_INSTALLED_PACKAGES"
- for pkg in $REQUIRED_CONTENT_PACKAGES ; do
- if [ "${pkg:0:1}" != "@" ]; then
- TO_INSTALL="$TO_INSTALL $pkg"
- fi
- done
- install_packages "$TO_INSTALL"
-}
-
-#
-# install given packet through system's packet manager
-# uses PACKET_HANDLER as determined in helper/system.inc
-#
-install_packages() {
- [ $# -eq 0 ] && perror "Sanity check failed: no argument given to install_package"
- local PACKAGE_LIST="$@"
- local INSTALLED_PACKAGES=""
- local LRET=""
-
- for PKG in ${PACKAGE_LIST}; do
- # check if installed:
- # this is done mainly for performance reasons, even though
- # reinstalling all packages is a valid possibility too...
- if [ "x$PACKET_HANDLER" == "xdpkg" ]; then
- dpkg -l ${PKG} > /dev/null 2>&1
- LRET=$?
- elif [ "x$PACKET_HANDLER" == "xrpm" ]; then
- rpm -ql "${PKG}" > /dev/null 2>&1
- LRET=$?
- else
- perror "No packet manager / handler determined, this should not happen!"
- fi
-
- if [ "x$LRET" == "x0" ]; then
- # check if it is completly installed, not just leftover configuration files
- if [ "x$PACKET_HANDLER" == "xdpkg" ]; then
- local INSTALL_STATUS=$(dpkg -l "${PKG}" | grep "${PKG}" | cut -c1-2)
- if [[ $INSTALL_STATUS != "ii" ]]; then
- pinfo "$PKG is either missing or a meta-package! Installing it to be sure..."
- install_package "${PKG}"
- else
- # package installed
- pdebug "${PKG} installed!"
- fi
- elif [ "x$PACKET_HANDLER" == "xrpm" ]; then
- # TODO: blindly install again for now
- rpm -q "${PKG}" >/dev/null 2>&1 || install_package "${PKG}"
- fi
- else
- # package not installed
- pdebug "$PKG not installed!"
- install_package $PKG
- fi
- done
- [ ! -z "$INSTALLED_PACKAGES" ] && pinfo "New packages installed: ${INSTALLED_PACKAGES}"
-}
-
-#
# install individual package depending on package manager
#
-install_package() {
- if [ "$#" -ne 1 ]; then
- perror "Only call install_package with one argument!"
- fi
-
- if [ "x$PACKET_MANAGER" == "xapt" ]; then
- apt-get install -y ${PKG}
- local IRET=$?
- if [ "x$IRET" == "x0" ]; then
- # $PGK was installed successfully
- INSTALLED_PACKAGES+="$PKG "
- else
- # PKG was not installed
- # TODO error handling
- perror "install_packages: apt-get failed with '$IRET' for package '$PKG'"
+install_packages() {
+ if [ "$PACKET_MANAGER" == "apt" ]; then
+ if ! apt-get install --no-install-recommends -y "$@"; then
+ perror "install_packages: apt-get failed, see log"
fi
- elif [ "x$PACKET_MANAGER" == "xzypper" ]; then
- zypper --no-refresh --non-interactive install --force-resolution ${PKG}
- local IRET=$?
- if [ "x$IRET" == "x0" ]; then
- # $PGK was installed successfully
- INSTALLED_PACKAGES+="$PKG "
- else
- # PKG was not installed
- # TODO error handling
- perror "install_packages: zypper failed with '$IRET' for package '$PKG'"
+ elif [ "$PACKET_MANAGER" == "zypper" ]; then
+ if ! zypper --no-refresh --non-interactive install --force-resolution "$@"; then
+ perror "install_packages: zypper failed, see log"
fi
- elif [ "x$PACKET_MANAGER" == "xyum" ]; then
- yum --assumeyes install ${PKG}
- local IRET=$?
- if [ "x$IRET" == "x0" ]; then
- # $PGK was installed successfully
- INSTALLED_PACKAGES+="$PKG "
- else
- # PKG was not installed
- # TODO error handling
- perror "install_packages: yum failed with '$IRET' for package '$PKG'"
+ elif [ "$PACKET_MANAGER" == "yum" ]; then
+ if ! yum --assumeyes install "$@"; then
+ perror "install_packages: yum failed, see log"
fi
else
perror "No packet manager determined, this should not happen!"