3 # Copyright (c) 2010 iXsystems, Inc. All rights reserved.
5 # Redistribution and use in source and binary forms, with or without
6 # modification, are permitted provided that the following conditions
8 # 1. Redistributions of source code must retain the above copyright
9 # notice, this list of conditions and the following disclaimer.
10 # 2. Redistributions in binary form must reproduce the above copyright
11 # notice, this list of conditions and the following disclaimer in the
12 # documentation and/or other materials provided with the distribution.
14 # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15 # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17 # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18 # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20 # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28 # Functions which runs commands on the system
30 . ${BACKEND}/functions.sh
31 . ${BACKEND}/functions-parse.sh
32 . ${BACKEND}/functions-ftp.sh
35 get_package_index_by_ftp()
44 if [ -f "/usr/bin/bzip2" ]
46 INDEX_FILE="${INDEX_FILE}.bz2"
50 INDEX_PATH="${CONFDIR}/${INDEX_FILE}"
51 fetch_file "${FTP_SERVER}/${INDEX_FILE}" "${INDEX_PATH}" "1"
52 if [ -f "${INDEX_PATH}" ] && [ "${USE_BZIP2}" -eq "1" ]
54 bzip2 -d "${INDEX_PATH}"
58 get_package_index_by_fs()
62 INDEX_FILE="${CDMNT}/packages/INDEX"
63 fetch_file "${INDEX_FILE}" "${CONFDIR}/" "0"
66 get_package_index_size()
68 if [ -f "${CONFDIR}/INDEX" ]
70 SIZE=`ls -l ${CONFDIR}/INDEX | awk '{ print $5 }'`
75 FTPDIR="/pub/FreeBSD/releases/${FBSD_ARCH}/${FBSD_BRANCH}"
76 FTPPATH="ftp://${FTPHOST}${FTPDIR}/packages"
78 fetch -s "${FTPPATH}/INDEX.bz2"
86 if [ -z "${INSTALLMODE}" ]
91 FTPDIR="/pub/FreeBSD/releases/${FBSD_ARCH}/${FBSD_BRANCH}"
92 FTPPATH="ftp://${FTPHOST}${FTPDIR}/packages"
94 get_package_index_by_ftp "${FTPPATH}"
97 get_value_from_cfg ftpHost
100 exit_err "ERROR: Install medium was set to ftp, but no ftpHost was provided!"
105 get_value_from_cfg ftpDir
108 exit_err "ERROR: Install medium was set to ftp, but no ftpDir was provided!"
112 FTPPATH="ftp://${FTPHOST}${FTPDIR}"
114 case "${INSTALLMEDIUM}" in
115 usb|dvd) get_package_index_by_fs ;;
116 ftp) get_package_index_by_ftp "${FTPPATH}" ;;
126 parse_package_index()
128 INDEX_FILE="${PKGDIR}/INDEX"
131 exec 0<"${INDEX_FILE}"
153 PACKAGE=`basename "${part}"`
161 CATEGORY=`echo "${part}" | cut -f1 -d' '`
171 echo "${CATEGORY}|${PACKAGE}|${DESC}" >> "${INDEX_FILE}.parsed"
172 echo "${PACKAGE}|${PKGNAME}|${DEPS}" >> "${INDEX_FILE}.deps"
184 echo "Available Packages:"
191 CATEGORY=`echo "${line}" | cut -f1 -d'|'`
192 PACKAGE=`echo "${line}" | cut -f2 -d'|'`
193 DESC=`echo "${line}" | cut -f3 -d'|'`
195 echo "${CATEGORY}/${PACKAGE}:${DESC}"
201 show_packages_by_category()
204 INDEX_FILE="${PKGDIR}/INDEX.parsed"
205 TMPFILE="/tmp/.pkg.cat"
207 grep "^${CATEGORY}|" "${INDEX_FILE}" > "${TMPFILE}"
208 show_package_file "${TMPFILE}"
212 show_package_by_name()
216 INDEX_FILE="${PKGDIR}/INDEX.parsed"
217 TMPFILE="/tmp/.pkg.cat.pak"
219 grep "^${CATEGORY}|${PACKAGE}" "${INDEX_FILE}" > "${TMPFILE}"
220 show_package_file "${TMPFILE}"
226 show_package_file "${PKGDIR}/INDEX.parsed"
229 get_package_dependencies()
235 INDEX_FILE="${PKGDIR}/INDEX.deps"
240 REGEX="^.*|${PACKAGE}|"
243 LINE=`grep "${REGEX}" "${INDEX_FILE}" 2>/dev/null`
244 DEPS=`echo "${LINE}"|cut -f3 -d'|'`
261 INDEX_FILE="${PKGDIR}/INDEX.deps"
264 LINE=`grep "${REGEX}" "${INDEX_FILE}" 2>/dev/null`
265 NAME=`echo "${LINE}"|cut -f2 -d'|'`
277 get_package_short_name()
282 INDEX_FILE="${PKGDIR}/INDEX.deps"
283 REGEX="^.*|${PACKAGE}|"
285 LINE=`grep "${REGEX}" "${INDEX_FILE}" 2>/dev/null`
286 NAME=`echo "${LINE}"|cut -f1 -d'|'`
298 get_package_category()
301 INDEX_FILE="${PKGDIR}/INDEX.parsed"
304 LINE=`grep "|${PACKAGE}|" "${INDEX_FILE}" 2>/dev/null`
305 NAME=`echo "${LINE}"|cut -f1 -d'|'`
317 fetch_package_by_ftp()
323 get_value_from_cfg ftpHost
326 exit_err "ERROR: Install medium was set to ftp, but no ftpHost was provided!"
330 get_value_from_cfg ftpDir
333 exit_err "ERROR: Install medium was set to ftp, but no ftpDir was provided!"
337 PACKAGE="${PACKAGE}.tbz"
338 FTP_SERVER="ftp://${FTPHOST}${FTPDIR}"
340 if [ ! -f "${SAVEDIR}/${PACKAGE}" ]
342 PKGPATH="${CATEGORY}/${PACKAGE}"
343 FTP_PATH="${FTP_HOST}/packages/${PKGPATH}"
344 fetch_file "${FTP_PATH}" "${SAVEDIR}/" "0"
348 fetch_package_by_fs()
354 PACKAGE="${PACKAGE}.tbz"
355 if [ ! -f "${SAVEDIR}/${PACKAGE}" ]
357 fetch_file "${CDMNT}/packages/${CATEGORY}/${PACKAGE}" "${SAVEDIR}/" "0"
367 case "${INSTALLMEDIUM}" in
368 usb|dvd) fetch_package_by_fs "${CATEGORY}" "${PACKAGE}" "${SAVEDIR}" ;;
369 ftp) fetch_package_by_ftp "${CATEGORY}" "${PACKAGE}" "${SAVEDIR}" ;;