functions-packages.sh revision 211485
1#!/bin/sh 2#- 3# Copyright (c) 2010 iXsystems, Inc. All rights reserved. 4# 5# Redistribution and use in source and binary forms, with or without 6# modification, are permitted provided that the following conditions 7# are met: 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. 13# 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 24# SUCH DAMAGE. 25# 26# $FreeBSD: head/usr.sbin/pc-sysinstall/backend/functions-packages.sh 211485 2010-08-19 05:59:27Z imp $ 27 28# Functions which runs commands on the system 29 30. ${BACKEND}/functions.sh 31. ${BACKEND}/functions-parse.sh 32. ${BACKEND}/functions-ftp.sh 33 34 35get_package_index() 36{ 37 INDEX_FILE="INDEX" 38 USE_BZIP2=0 39 40 get_ftp_mirror 41 FTP_SERVER="${VAL}" 42 43 FTP_DIR="ftp://${FTP_SERVER}/pub/FreeBSD/releases/${FBSD_ARCH}/${FBSD_BRANCH}/packages" 44 45 if [ -f "/usr/bin/bzip2" ] 46 then 47 INDEX_FILE="${INDEX_FILE}.bz2" 48 USE_BZIP2=1 49 fi 50 51 fetch_file "${FTP_DIR}/${INDEX_FILE}" "${PKGDIR}/${INDEX_FILE}" "1" 52 53 HERE=`pwd` 54 cd "${PKGDIR}" 55 if [ -f "${INDEX_FILE}" ] && [ "${USE_BZIP2}" -eq "1" ] 56 then 57 bzip2 -d "${INDEX_FILE}" 58 fi 59 cd "${HERE}" 60}; 61 62parse_package_index() 63{ 64 INDEX_FILE="${PKGDIR}/INDEX" 65 66 exec 3<&0 67 exec 0<"${INDEX_FILE}" 68 69 while read -r line 70 do 71 PKGNAME="" 72 CATEGORY="" 73 PACKAGE="" 74 DESC="" 75 DEPS="" 76 i=0 77 78 SAVE_IFS="${IFS}" 79 IFS="|" 80 81 for part in ${line} 82 do 83 if [ "${i}" -eq "0" ] 84 then 85 PKGNAME="${part}" 86 87 elif [ "${i}" -eq "1" ] 88 then 89 PACKAGE=`basename "${part}"` 90 91 elif [ "${i}" -eq "3" ] 92 then 93 DESC="${part}" 94 95 elif [ "${i}" -eq "6" ] 96 then 97 CATEGORY=`echo "${part}" | cut -f1 -d' '` 98 99 elif [ "${i}" -eq "8" ] 100 then 101 DEPS="${part}" 102 fi 103 104 i=$((i+1)) 105 done 106 107 echo "${CATEGORY}|${PACKAGE}|${DESC}" >> "${INDEX_FILE}.parsed" 108 echo "${PACKAGE}|${PKGNAME}|${DEPS}" >> "${INDEX_FILE}.deps" 109 110 IFS="${SAVE_IFS}" 111 done 112 113 exec 0<&3 114}; 115 116show_package_file() 117{ 118 PKGFILE="${1}" 119 120 exec 3<&0 121 exec 0<"${PKGFILE}" 122 123 while read -r line 124 do 125 CATEGORY=`echo "${line}" | cut -f1 -d'|'` 126 PACKAGE=`echo "${line}" | cut -f2 -d'|'` 127 DESC=`echo "${line}" | cut -f3 -d'|'` 128 129 echo "${CATEGORY}/${PACKAGE}:${DESC}" 130 done 131 132 exec 0<&3 133}; 134 135show_packages_by_category() 136{ 137 CATEGORY="${1}" 138 INDEX_FILE="${PKGDIR}/INDEX.parsed" 139 TMPFILE="/tmp/.pkg.cat" 140 141 grep "^${CATEGORY}|" "${INDEX_FILE}" > "${TMPFILE}" 142 show_package_file "${TMPFILE}" 143 rm "${TMPFILE}" 144}; 145 146show_package_by_name() 147{ 148 CATEGORY="${1}" 149 PACKAGE="${2}" 150 INDEX_FILE="${PKGDIR}/INDEX.parsed" 151 TMPFILE="/tmp/.pkg.cat.pak" 152 153 grep "^${CATEGORY}|${PACKAGE}" "${INDEX_FILE}" > "${TMPFILE}" 154 show_package_file "${TMPFILE}" 155 rm "${TMPFILE}" 156}; 157 158show_packages() 159{ 160 show_package_file "${PKGDIR}/INDEX.parsed" 161}; 162 163get_package_dependencies() 164{ 165 PACKAGE="${1}" 166 LONG="${2:-0}" 167 RES=0 168 169 INDEX_FILE="${PKGDIR}/INDEX.deps" 170 REGEX="^${PACKAGE}|" 171 172 if [ "${LONG}" -ne "0" ] 173 then 174 REGEX="^.*|${PACKAGE}|" 175 fi 176 177 LINE=`grep "${REGEX}" "${INDEX_FILE}" 2>/dev/null` 178 DEPS=`echo "${LINE}"|cut -f3 -d'|'` 179 180 VAL="${DEPS}" 181 export VAL 182 183 if [ -z "${VAL}" ] 184 then 185 RES=1 186 fi 187 188 return ${RES} 189}; 190 191get_package_name() 192{ 193 PACKAGE="${1}" 194 RES=0 195 196 INDEX_FILE="${PKGDIR}/INDEX.deps" 197 REGEX="^${PACKAGE}|" 198 199 LINE=`grep "${REGEX}" "${INDEX_FILE}" 2>/dev/null` 200 NAME=`echo "${LINE}"|cut -f2 -d'|'` 201 202 VAL="${NAME}" 203 export VAL 204 205 if [ -z "${VAL}" ] 206 then 207 RES=1 208 fi 209 210 return ${RES} 211}; 212 213get_package_short_name() 214{ 215 PACKAGE="${1}" 216 RES=0 217 218 INDEX_FILE="${PKGDIR}/INDEX.deps" 219 REGEX="^.*|${PACKAGE}|" 220 221 LINE=`grep "${REGEX}" "${INDEX_FILE}" 2>/dev/null` 222 NAME=`echo "${LINE}"|cut -f1 -d'|'` 223 224 VAL="${NAME}" 225 export VAL 226 227 if [ -z "${VAL}" ] 228 then 229 RES=1 230 fi 231 232 return ${RES} 233}; 234 235get_package_category() 236{ 237 PACKAGE="${1}" 238 INDEX_FILE="${PKGDIR}/INDEX.parsed" 239 RES=0 240 241 LINE=`grep "|${PACKAGE}|" "${INDEX_FILE}" 2>/dev/null` 242 NAME=`echo "${LINE}"|cut -f1 -d'|'` 243 244 VAL="${NAME}" 245 export VAL 246 247 if [ -z "${VAL}" ] 248 then 249 RES=1 250 fi 251 252 return ${RES} 253}; 254 255fetch_package() 256{ 257 CATEGORY="${1}" 258 PACKAGE="${2}" 259 260 get_ftp_mirror 261 FTP_SERVER="${VAL}" 262 263 PACKAGE="${PACKAGE}.tbz" 264 if [ ! -f "${PKGTMPDIR}/${PACKAGE}" ] 265 then 266 PKGPATH="${CATEGORY}/${PACKAGE}" 267 FTP_PATH="ftp://${FTP_SERVER}/pub/FreeBSD/releases/${FBSD_ARCH}/${FBSD_BRANCH}/packages/${PKGPATH}" 268 fetch_file "${FTP_PATH}" "${PKGTMPDIR}/" "0" 269 fi 270}; 271