functions-packages.sh revision 211486
1210036Simp#!/bin/sh 2210036Simp#- 3210036Simp# Copyright (c) 2010 iXsystems, Inc. All rights reserved. 4210036Simp# 5210036Simp# Redistribution and use in source and binary forms, with or without 6210036Simp# modification, are permitted provided that the following conditions 7210036Simp# are met: 8210036Simp# 1. Redistributions of source code must retain the above copyright 9210036Simp# notice, this list of conditions and the following disclaimer. 10210036Simp# 2. Redistributions in binary form must reproduce the above copyright 11210036Simp# notice, this list of conditions and the following disclaimer in the 12210036Simp# documentation and/or other materials provided with the distribution. 13210036Simp# 14210036Simp# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15210036Simp# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16210036Simp# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17210036Simp# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18210036Simp# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19210036Simp# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20210036Simp# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21210036Simp# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22210036Simp# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23210036Simp# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24210036Simp# SUCH DAMAGE. 25210036Simp# 26210036Simp# $FreeBSD: head/usr.sbin/pc-sysinstall/backend/functions-packages.sh 211486 2010-08-19 06:01:25Z imp $ 27210036Simp 28210036Simp# Functions which runs commands on the system 29210036Simp 30210036Simp. ${BACKEND}/functions.sh 31210036Simp. ${BACKEND}/functions-parse.sh 32210036Simp. ${BACKEND}/functions-ftp.sh 33210036Simp 34210036Simp 35211486Simpget_package_index_by_ftp() 36210036Simp{ 37211486Simp local INDEX_FILE 38211486Simp local FTP_SERVER 39211486Simp 40211486Simp FTP_SERVER="${1}" 41210036Simp INDEX_FILE="INDEX" 42210036Simp USE_BZIP2=0 43210036Simp 44210036Simp if [ -f "/usr/bin/bzip2" ] 45210036Simp then 46210036Simp INDEX_FILE="${INDEX_FILE}.bz2" 47210036Simp USE_BZIP2=1 48210036Simp fi 49210036Simp 50211486Simp INDEX_PATH="${CONFDIR}/${INDEX_FILE}" 51211486Simp fetch_file "${FTP_SERVER}/${INDEX_FILE}" "${INDEX_PATH}" "1" 52211486Simp if [ -f "${INDEX_PATH}" ] && [ "${USE_BZIP2}" -eq "1" ] 53211486Simp then 54211486Simp bzip2 -d "${INDEX_PATH}" 55211486Simp fi 56211486Simp}; 57211485Simp 58211486Simpget_package_index_by_fs() 59211486Simp{ 60211486Simp local INDEX_FILE 61211486Simp 62211486Simp INDEX_FILE="${CDMNT}/packages/INDEX" 63211486Simp fetch_file "${INDEX_FILE}" "${CONFDIR}/" "0" 64211486Simp}; 65211486Simp 66211486Simpget_package_index() 67211486Simp{ 68211486Simp RES=0 69211486Simp 70211486Simp if [ -z "${INSTALLMODE}" ] 71210036Simp then 72211486Simp get_ftp_mirror 73211486Simp FTPHOST="${VAL}" 74211486Simp 75211486Simp FTPDIR="/pub/FreeBSD/releases/${FBSD_ARCH}/${FBSD_BRANCH}" 76211486Simp FTPPATH="ftp://${FTPHOST}${FTPDIR}/packages" 77211486Simp 78211486Simp get_package_index_by_ftp "${FTPPATH}" 79211486Simp 80211486Simp else 81211486Simp get_value_from_cfg ftpHost 82211486Simp if [ -z "$VAL" ] 83211486Simp then 84211486Simp exit_err "ERROR: Install medium was set to ftp, but no ftpHost was provided!" 85211486Simp fi 86211486Simp FTPHOST="${VAL}" 87211486Simp 88211486Simp get_value_from_cfg ftpDir 89211486Simp if [ -z "$VAL" ] 90211486Simp then 91211486Simp exit_err "ERROR: Install medium was set to ftp, but no ftpDir was provided!" 92211486Simp fi 93211486Simp FTPDIR="${VAL}" 94211486Simp 95211486Simp FTPPATH="ftp://${FTPHOST}${FTPDIR}" 96211486Simp 97211486Simp case "${INSTALLMEDIUM}" in 98211486Simp usb|dvd) get_package_index_by_fs 99211486Simp ;; 100211486Simp ftp) get_package_index_by_ftp "${FTPPATH}" 101211486Simp ;; 102211486Simp *) RES=1 103211486Simp ;; 104211486Simp esac 105211486Simp 106210036Simp fi 107211486Simp 108211486Simp return ${RES} 109211485Simp}; 110210036Simp 111210036Simpparse_package_index() 112210036Simp{ 113210036Simp INDEX_FILE="${PKGDIR}/INDEX" 114210036Simp 115210036Simp exec 3<&0 116210036Simp exec 0<"${INDEX_FILE}" 117210036Simp 118210036Simp while read -r line 119210036Simp do 120211485Simp PKGNAME="" 121210036Simp CATEGORY="" 122210036Simp PACKAGE="" 123210036Simp DESC="" 124211485Simp DEPS="" 125210036Simp i=0 126210036Simp 127210036Simp SAVE_IFS="${IFS}" 128210036Simp IFS="|" 129210036Simp 130210036Simp for part in ${line} 131210036Simp do 132211485Simp if [ "${i}" -eq "0" ] 133210036Simp then 134211485Simp PKGNAME="${part}" 135211485Simp 136211485Simp elif [ "${i}" -eq "1" ] 137211485Simp then 138210036Simp PACKAGE=`basename "${part}"` 139210036Simp 140210036Simp elif [ "${i}" -eq "3" ] 141210036Simp then 142210036Simp DESC="${part}" 143210036Simp 144210036Simp elif [ "${i}" -eq "6" ] 145210036Simp then 146210036Simp CATEGORY=`echo "${part}" | cut -f1 -d' '` 147211485Simp 148211485Simp elif [ "${i}" -eq "8" ] 149211485Simp then 150211485Simp DEPS="${part}" 151210036Simp fi 152210036Simp 153210036Simp i=$((i+1)) 154210036Simp done 155210036Simp 156210036Simp echo "${CATEGORY}|${PACKAGE}|${DESC}" >> "${INDEX_FILE}.parsed" 157211485Simp echo "${PACKAGE}|${PKGNAME}|${DEPS}" >> "${INDEX_FILE}.deps" 158211485Simp 159210036Simp IFS="${SAVE_IFS}" 160210036Simp done 161210036Simp 162210036Simp exec 0<&3 163211485Simp}; 164210036Simp 165210036Simpshow_package_file() 166210036Simp{ 167210036Simp PKGFILE="${1}" 168210036Simp 169211486Simp echo "Available Packages:" 170211486Simp 171210036Simp exec 3<&0 172210036Simp exec 0<"${PKGFILE}" 173210036Simp 174210036Simp while read -r line 175210036Simp do 176210036Simp CATEGORY=`echo "${line}" | cut -f1 -d'|'` 177210036Simp PACKAGE=`echo "${line}" | cut -f2 -d'|'` 178210036Simp DESC=`echo "${line}" | cut -f3 -d'|'` 179210036Simp 180210036Simp echo "${CATEGORY}/${PACKAGE}:${DESC}" 181210036Simp done 182210036Simp 183210036Simp exec 0<&3 184211485Simp}; 185210036Simp 186210036Simpshow_packages_by_category() 187210036Simp{ 188210036Simp CATEGORY="${1}" 189210036Simp INDEX_FILE="${PKGDIR}/INDEX.parsed" 190210036Simp TMPFILE="/tmp/.pkg.cat" 191210036Simp 192210036Simp grep "^${CATEGORY}|" "${INDEX_FILE}" > "${TMPFILE}" 193210036Simp show_package_file "${TMPFILE}" 194210036Simp rm "${TMPFILE}" 195211485Simp}; 196210036Simp 197210036Simpshow_package_by_name() 198210036Simp{ 199210036Simp CATEGORY="${1}" 200210036Simp PACKAGE="${2}" 201210036Simp INDEX_FILE="${PKGDIR}/INDEX.parsed" 202210036Simp TMPFILE="/tmp/.pkg.cat.pak" 203210036Simp 204210036Simp grep "^${CATEGORY}|${PACKAGE}" "${INDEX_FILE}" > "${TMPFILE}" 205210036Simp show_package_file "${TMPFILE}" 206210036Simp rm "${TMPFILE}" 207211485Simp}; 208210036Simp 209210036Simpshow_packages() 210210036Simp{ 211210036Simp show_package_file "${PKGDIR}/INDEX.parsed" 212211485Simp}; 213211485Simp 214211485Simpget_package_dependencies() 215211485Simp{ 216211485Simp PACKAGE="${1}" 217211485Simp LONG="${2:-0}" 218211485Simp RES=0 219211485Simp 220211485Simp INDEX_FILE="${PKGDIR}/INDEX.deps" 221211485Simp REGEX="^${PACKAGE}|" 222211485Simp 223211485Simp if [ "${LONG}" -ne "0" ] 224211485Simp then 225211485Simp REGEX="^.*|${PACKAGE}|" 226211485Simp fi 227211485Simp 228211485Simp LINE=`grep "${REGEX}" "${INDEX_FILE}" 2>/dev/null` 229211485Simp DEPS=`echo "${LINE}"|cut -f3 -d'|'` 230211485Simp 231211485Simp VAL="${DEPS}" 232211485Simp export VAL 233211485Simp 234211485Simp if [ -z "${VAL}" ] 235211485Simp then 236211485Simp RES=1 237211485Simp fi 238211485Simp 239211485Simp return ${RES} 240211485Simp}; 241211485Simp 242211485Simpget_package_name() 243211485Simp{ 244211485Simp PACKAGE="${1}" 245211485Simp RES=0 246211485Simp 247211485Simp INDEX_FILE="${PKGDIR}/INDEX.deps" 248211485Simp REGEX="^${PACKAGE}|" 249211485Simp 250211485Simp LINE=`grep "${REGEX}" "${INDEX_FILE}" 2>/dev/null` 251211485Simp NAME=`echo "${LINE}"|cut -f2 -d'|'` 252211485Simp 253211485Simp VAL="${NAME}" 254211485Simp export VAL 255211485Simp 256211485Simp if [ -z "${VAL}" ] 257211485Simp then 258211485Simp RES=1 259211485Simp fi 260211485Simp 261211485Simp return ${RES} 262211485Simp}; 263211485Simp 264211485Simpget_package_short_name() 265211485Simp{ 266211485Simp PACKAGE="${1}" 267211485Simp RES=0 268211485Simp 269211485Simp INDEX_FILE="${PKGDIR}/INDEX.deps" 270211485Simp REGEX="^.*|${PACKAGE}|" 271211485Simp 272211485Simp LINE=`grep "${REGEX}" "${INDEX_FILE}" 2>/dev/null` 273211485Simp NAME=`echo "${LINE}"|cut -f1 -d'|'` 274211485Simp 275211485Simp VAL="${NAME}" 276211485Simp export VAL 277211485Simp 278211485Simp if [ -z "${VAL}" ] 279211485Simp then 280211485Simp RES=1 281211485Simp fi 282211485Simp 283211485Simp return ${RES} 284211485Simp}; 285211485Simp 286211485Simpget_package_category() 287211485Simp{ 288211485Simp PACKAGE="${1}" 289211485Simp INDEX_FILE="${PKGDIR}/INDEX.parsed" 290211485Simp RES=0 291211485Simp 292211485Simp LINE=`grep "|${PACKAGE}|" "${INDEX_FILE}" 2>/dev/null` 293211485Simp NAME=`echo "${LINE}"|cut -f1 -d'|'` 294211485Simp 295211485Simp VAL="${NAME}" 296211485Simp export VAL 297211485Simp 298211485Simp if [ -z "${VAL}" ] 299211485Simp then 300211485Simp RES=1 301211485Simp fi 302211485Simp 303211485Simp return ${RES} 304211485Simp}; 305211485Simp 306211486Simpfetch_package_by_ftp() 307211485Simp{ 308211485Simp CATEGORY="${1}" 309211485Simp PACKAGE="${2}" 310211486Simp SAVEDIR="${3}" 311211485Simp 312211486Simp get_value_from_cfg ftpHost 313211486Simp if [ -z "$VAL" ] 314211486Simp then 315211486Simp exit_err "ERROR: Install medium was set to ftp, but no ftpHost was provided!" 316211486Simp fi 317211486Simp FTPHOST="${VAL}" 318211485Simp 319211486Simp get_value_from_cfg ftpDir 320211486Simp if [ -z "$VAL" ] 321211486Simp then 322211486Simp exit_err "ERROR: Install medium was set to ftp, but no ftpDir was provided!" 323211486Simp fi 324211486Simp FTPDIR="${VAL}" 325211486Simp 326211485Simp PACKAGE="${PACKAGE}.tbz" 327211486Simp FTP_SERVER="ftp://${FTPHOST}${FTPDIR}" 328211486Simp 329211486Simp if [ ! -f "${SAVEDIR}/${PACKAGE}" ] 330211485Simp then 331211485Simp PKGPATH="${CATEGORY}/${PACKAGE}" 332211486Simp FTP_PATH="${FTP_HOST}/packages/${PKGPATH}" 333211486Simp fetch_file "${FTP_PATH}" "${SAVEDIR}/" "0" 334211485Simp fi 335211485Simp}; 336211486Simp 337211486Simpfetch_package_by_fs() 338211486Simp{ 339211486Simp CATEGORY="${1}" 340211486Simp PACKAGE="${2}" 341211486Simp SAVEDIR="${3}" 342211486Simp 343211486Simp PACKAGE="${PACKAGE}.tbz" 344211486Simp if [ ! -f "${SAVEDIR}/${PACKAGE}" ] 345211486Simp then 346211486Simp fetch_file "${CDMNT}/packages/${CATEGORY}/${PACKAGE}" "${SAVEDIR}/" "0" 347211486Simp fi 348211486Simp}; 349211486Simp 350211486Simpfetch_package() 351211486Simp{ 352211486Simp CATEGORY="${1}" 353211486Simp PACKAGE="${2}" 354211486Simp SAVEDIR="${3}" 355211486Simp 356211486Simp case "${INSTALLMEDIUM}" in 357211486Simp usb|dvd) 358211486Simp fetch_package_by_fs "${CATEGORY}" "${PACKAGE}" "${SAVEDIR}" 359211486Simp ;; 360211486Simp ftp) 361211486Simp fetch_package_by_ftp "${CATEGORY}" "${PACKAGE}" "${SAVEDIR}" 362211486Simp ;; 363211486Simp esac 364211486Simp}; 365