summaryrefslogtreecommitdiffstats
path: root/usr/sbin/pc-sysinstall/backend/functions-installpackages.sh
diff options
context:
space:
mode:
authorScott Ullrich <sullrich@pfsense.org>2010-12-17 23:43:04 -0500
committerScott Ullrich <sullrich@pfsense.org>2010-12-17 23:43:04 -0500
commite2912927e0ccf106ac6f160a76736e4aa90e624c (patch)
treed31b8ced297e836106b57491b8da8be5d70e1755 /usr/sbin/pc-sysinstall/backend/functions-installpackages.sh
parent9b8707c320efb46379ff9d25d9859d81d6410061 (diff)
downloadpfsense-e2912927e0ccf106ac6f160a76736e4aa90e624c.zip
pfsense-e2912927e0ccf106ac6f160a76736e4aa90e624c.tar.gz
Add new files
Diffstat (limited to 'usr/sbin/pc-sysinstall/backend/functions-installpackages.sh')
-rw-r--r--usr/sbin/pc-sysinstall/backend/functions-installpackages.sh125
1 files changed, 125 insertions, 0 deletions
diff --git a/usr/sbin/pc-sysinstall/backend/functions-installpackages.sh b/usr/sbin/pc-sysinstall/backend/functions-installpackages.sh
new file mode 100644
index 0000000..b8f383a
--- /dev/null
+++ b/usr/sbin/pc-sysinstall/backend/functions-installpackages.sh
@@ -0,0 +1,125 @@
+#!/bin/sh
+#-
+# Copyright (c) 2010 iXsystems, Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+# $FreeBSD: src/usr.sbin/pc-sysinstall/backend/functions-installpackages.sh,v 1.3 2010/08/24 06:11:46 imp Exp $
+
+# Functions which check and load any optional packages specified in the config
+
+. ${BACKEND}/functions.sh
+. ${BACKEND}/functions-parse.sh
+
+# Recursively determine all dependencies for this package
+determine_package_dependencies()
+{
+ local PKGNAME="${1}"
+ local DEPFILE="${2}"
+
+ grep "${PKGNAME}" "${DEPFILE}" >/dev/null
+ if [ "$?" -ne "0" ]
+ then
+ echo "${PKGNAME}" >> "${DEPFILE}"
+ get_package_dependencies "${PKGNAME}" "1"
+
+ local DEPS="${VAL}"
+ for d in ${DEPS}
+ do
+ determine_package_dependencies "${d}" "${DEPFILE}"
+ done
+ fi
+};
+
+# Fetch packages dependencies from a file
+fetch_package_dependencies()
+{
+ local DEPFILE
+ local DEPS
+ local SAVEDIR
+
+ DEPFILE="${1}"
+ DEPS=`cat "${DEPFILE}"`
+ SAVEDIR="${2}"
+
+ for d in ${DEPS}
+ do
+ get_package_short_name "${d}"
+ SNAME="${VAL}"
+
+ get_package_category "${SNAME}"
+ CATEGORY="${VAL}"
+
+ fetch_package "${CATEGORY}" "${d}" "${SAVEDIR}"
+ done
+};
+
+# Check for any packages specified, and begin loading them
+install_packages()
+{
+ # First, lets check and see if we even have any packages to install
+ get_value_from_cfg installPackages
+ if [ ! -z "${VAL}" ]
+ then
+ HERE=`pwd`
+ rc_nohalt "mkdir -p ${FSMNT}/${PKGTMPDIR}"
+ rc_nohalt "cd ${FSMNT}/${PKGTMPDIR}"
+
+ if [ ! -f "${CONFDIR}/INDEX" ]
+ then
+ get_package_index
+ fi
+
+ if [ ! -f "${CONFDIR}/INDEX.parsed" ]
+ then
+ parse_package_index
+ fi
+
+ # Lets start by cleaning up the string and getting it ready to parse
+ strip_white_space ${VAL}
+ PACKAGES=`echo ${VAL} | sed -e "s|,| |g"`
+ for i in $PACKAGES
+ do
+ if get_package_name "${i}"
+ then
+ PKGNAME="${VAL}"
+ DEPFILE="${FSMNT}/${PKGTMPDIR}/.${PKGNAME}.deps"
+
+ rc_nohalt "touch ${DEPFILE}"
+ determine_package_dependencies "${PKGNAME}" "${DEPFILE}"
+ fetch_package_dependencies "${DEPFILE}" "${FSMNT}/${PKGTMPDIR}"
+
+ # If the package is not already installed, install it!
+ if ! run_chroot_cmd "pkg_info -e ${PKGNAME}"
+ then
+ rc_nohalt "pkg_add -C ${FSMNT} ${PKGTMPDIR}/${PKGNAME}.tbz"
+ fi
+
+ rc_nohalt "rm ${DEPFILE}"
+ fi
+
+ rc_nohalt "cd ${HERE}"
+ done
+
+ rm -rf "${FSMNT}/${PKGTMPDIR}"
+ fi
+};
OpenPOWER on IntegriCloud