functions-packages.sh (211487) | functions-packages.sh (211730) |
---|---|
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 unchanged lines hidden (view full) --- 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# | 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 unchanged lines hidden (view full) --- 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 211487 2010-08-19 06:02:31Z imp $ | 26# $FreeBSD: head/usr.sbin/pc-sysinstall/backend/functions-packages.sh 211730 2010-08-24 06:11:46Z 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_by_ftp() 36{ | 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_by_ftp() 36{ |
37 local INDEX_FILE 38 local FTP_SERVER | 37 local INDEX_FILE 38 local FTP_SERVER |
39 | 39 |
40 FTP_SERVER="${1}" 41 INDEX_FILE="INDEX" 42 USE_BZIP2=0 | 40 FTP_SERVER="${1}" 41 INDEX_FILE="INDEX" 42 USE_BZIP2=0 |
43 | 43 |
44 if [ -f "/usr/bin/bzip2" ] 45 then 46 INDEX_FILE="${INDEX_FILE}.bz2" 47 USE_BZIP2=1 48 fi | 44 if [ -f "/usr/bin/bzip2" ] 45 then 46 INDEX_FILE="${INDEX_FILE}.bz2" 47 USE_BZIP2=1 48 fi |
49 | 49 |
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" ] 53 then 54 bzip2 -d "${INDEX_PATH}" 55 fi | 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" ] 53 then 54 bzip2 -d "${INDEX_PATH}" 55 fi |
56}; 57 58get_package_index_by_fs() 59{ | 56}; 57 58get_package_index_by_fs() 59{ |
60 local INDEX_FILE | 60 local INDEX_FILE |
61 | 61 |
62 INDEX_FILE="${CDMNT}/packages/INDEX" 63 fetch_file "${INDEX_FILE}" "${CONFDIR}/" "0" | 62 INDEX_FILE="${CDMNT}/packages/INDEX" 63 fetch_file "${INDEX_FILE}" "${CONFDIR}/" "0" |
64}; 65 66get_package_index_size() 67{ | 64}; 65 66get_package_index_size() 67{ |
68 if [ -f "${CONFDIR}/INDEX" ] 69 then 70 SIZE=`ls -l ${CONFDIR}/INDEX | awk '{ print $5 }'` 71 else 72 get_ftp_mirror 73 FTPHOST="${VAL}" | 68 if [ -f "${CONFDIR}/INDEX" ] 69 then 70 SIZE=`ls -l ${CONFDIR}/INDEX | awk '{ print $5 }'` 71 else 72 get_ftp_mirror 73 FTPHOST="${VAL}" |
74 | 74 |
75 FTPDIR="/pub/FreeBSD/releases/${FBSD_ARCH}/${FBSD_BRANCH}" 76 FTPPATH="ftp://${FTPHOST}${FTPDIR}/packages" | 75 FTPDIR="/pub/FreeBSD/releases/${FBSD_ARCH}/${FBSD_BRANCH}" 76 FTPPATH="ftp://${FTPHOST}${FTPDIR}/packages" |
77 | 77 |
78 fetch -s "${FTPPATH}/INDEX.bz2" 79 fi | 78 fetch -s "${FTPPATH}/INDEX.bz2" 79 fi |
80}; 81 82get_package_index() 83{ | 80}; 81 82get_package_index() 83{ |
84 RES=0 | 84 RES=0 |
85 | 85 |
86 if [ -z "${INSTALLMODE}" ] 87 then 88 get_ftp_mirror 89 FTPHOST="${VAL}" | 86 if [ -z "${INSTALLMODE}" ] 87 then 88 get_ftp_mirror 89 FTPHOST="${VAL}" |
90 | 90 |
91 FTPDIR="/pub/FreeBSD/releases/${FBSD_ARCH}/${FBSD_BRANCH}" 92 FTPPATH="ftp://${FTPHOST}${FTPDIR}/packages" | 91 FTPDIR="/pub/FreeBSD/releases/${FBSD_ARCH}/${FBSD_BRANCH}" 92 FTPPATH="ftp://${FTPHOST}${FTPDIR}/packages" |
93 | 93 |
94 get_package_index_by_ftp "${FTPPATH}" | 94 get_package_index_by_ftp "${FTPPATH}" |
95 | 95 |
96 else 97 get_value_from_cfg ftpHost 98 if [ -z "$VAL" ] 99 then 100 exit_err "ERROR: Install medium was set to ftp, but no ftpHost was provided!" 101 fi 102 FTPHOST="${VAL}" | 96 else 97 get_value_from_cfg ftpHost 98 if [ -z "$VAL" ] 99 then 100 exit_err "ERROR: Install medium was set to ftp, but no ftpHost was provided!" 101 fi |
103 | 102 |
104 get_value_from_cfg ftpDir 105 if [ -z "$VAL" ] 106 then 107 exit_err "ERROR: Install medium was set to ftp, but no ftpDir was provided!" 108 fi 109 FTPDIR="${VAL}" | 103 FTPHOST="${VAL}" |
110 | 104 |
111 FTPPATH="ftp://${FTPHOST}${FTPDIR}" | 105 get_value_from_cfg ftpDir 106 if [ -z "$VAL" ] 107 then 108 exit_err "ERROR: Install medium was set to ftp, but no ftpDir was provided!" 109 fi |
112 | 110 |
113 case "${INSTALLMEDIUM}" in 114 usb|dvd) get_package_index_by_fs 115 ;; 116 ftp) get_package_index_by_ftp "${FTPPATH}" 117 ;; 118 *) RES=1 119 ;; 120 esac | 111 FTPDIR="${VAL}" 112 FTPPATH="ftp://${FTPHOST}${FTPDIR}" |
121 | 113 |
122 fi | 114 case "${INSTALLMEDIUM}" in 115 usb|dvd) get_package_index_by_fs ;; 116 ftp|sftp) get_package_index_by_ftp "${FTPPATH}" ;; 117 *) RES=1 ;; 118 esac |
123 | 119 |
124 return ${RES} | 120 fi 121 122 return ${RES} |
125}; 126 127parse_package_index() 128{ | 123}; 124 125parse_package_index() 126{ |
129 INDEX_FILE="${PKGDIR}/INDEX" | 127 INDEX_FILE="${PKGDIR}/INDEX" |
130 | 128 |
131 exec 3<&0 132 exec 0<"${INDEX_FILE}" | 129 exec 3<&0 130 exec 0<"${INDEX_FILE}" |
133 | 131 |
134 while read -r line 135 do 136 PKGNAME="" 137 CATEGORY="" 138 PACKAGE="" 139 DESC="" 140 DEPS="" 141 i=0 | 132 while read -r line 133 do 134 PKGNAME="" 135 CATEGORY="" 136 PACKAGE="" 137 DESC="" 138 DEPS="" 139 i=0 |
142 | 140 |
143 SAVE_IFS="${IFS}" 144 IFS="|" | 141 SAVE_IFS="${IFS}" 142 IFS="|" |
145 | 143 |
146 for part in ${line} 147 do 148 if [ "${i}" -eq "0" ] 149 then 150 PKGNAME="${part}" | 144 for part in ${line} 145 do 146 if [ "${i}" -eq "0" ] 147 then 148 PKGNAME="${part}" |
151 | 149 |
152 elif [ "${i}" -eq "1" ] 153 then 154 PACKAGE=`basename "${part}"` | 150 elif [ "${i}" -eq "1" ] 151 then 152 PACKAGE=`basename "${part}"` |
155 | 153 |
156 elif [ "${i}" -eq "3" ] 157 then 158 DESC="${part}" | 154 elif [ "${i}" -eq "3" ] 155 then 156 DESC="${part}" |
159 | 157 |
160 elif [ "${i}" -eq "6" ] 161 then 162 CATEGORY=`echo "${part}" | cut -f1 -d' '` | 158 elif [ "${i}" -eq "6" ] 159 then 160 CATEGORY=`echo "${part}" | cut -f1 -d' '` |
163 | 161 |
164 elif [ "${i}" -eq "8" ] 165 then 166 DEPS="${part}" 167 fi | 162 elif [ "${i}" -eq "8" ] 163 then 164 DEPS="${part}" 165 fi |
168 | 166 |
169 i=$((i+1)) 170 done | 167 i=$((i+1)) 168 done |
171 | 169 |
172 echo "${CATEGORY}|${PACKAGE}|${DESC}" >> "${INDEX_FILE}.parsed" 173 echo "${PACKAGE}|${PKGNAME}|${DEPS}" >> "${INDEX_FILE}.deps" | 170 echo "${CATEGORY}|${PACKAGE}|${DESC}" >> "${INDEX_FILE}.parsed" 171 echo "${PACKAGE}|${PKGNAME}|${DEPS}" >> "${INDEX_FILE}.deps" |
174 | 172 |
175 IFS="${SAVE_IFS}" 176 done | 173 IFS="${SAVE_IFS}" 174 done |
177 | 175 |
178 exec 0<&3 | 176 exec 0<&3 |
179}; 180 181show_package_file() 182{ | 177}; 178 179show_package_file() 180{ |
183 PKGFILE="${1}" | 181 PKGFILE="${1}" |
184 | 182 |
185 echo "Available Packages:" | 183 echo "Available Packages:" |
186 | 184 |
187 exec 3<&0 188 exec 0<"${PKGFILE}" | 185 exec 3<&0 186 exec 0<"${PKGFILE}" |
189 | 187 |
190 while read -r line 191 do 192 CATEGORY=`echo "${line}" | cut -f1 -d'|'` 193 PACKAGE=`echo "${line}" | cut -f2 -d'|'` 194 DESC=`echo "${line}" | cut -f3 -d'|'` | 188 while read -r line 189 do 190 CATEGORY=`echo "${line}" | cut -f1 -d'|'` 191 PACKAGE=`echo "${line}" | cut -f2 -d'|'` 192 DESC=`echo "${line}" | cut -f3 -d'|'` |
195 | 193 |
196 echo "${CATEGORY}/${PACKAGE}:${DESC}" 197 done | 194 echo "${CATEGORY}/${PACKAGE}:${DESC}" 195 done |
198 | 196 |
199 exec 0<&3 | 197 exec 0<&3 |
200}; 201 202show_packages_by_category() 203{ | 198}; 199 200show_packages_by_category() 201{ |
204 CATEGORY="${1}" 205 INDEX_FILE="${PKGDIR}/INDEX.parsed" 206 TMPFILE="/tmp/.pkg.cat" | 202 CATEGORY="${1}" 203 INDEX_FILE="${PKGDIR}/INDEX.parsed" 204 TMPFILE="/tmp/.pkg.cat" |
207 | 205 |
208 grep "^${CATEGORY}|" "${INDEX_FILE}" > "${TMPFILE}" 209 show_package_file "${TMPFILE}" 210 rm "${TMPFILE}" | 206 grep "^${CATEGORY}|" "${INDEX_FILE}" > "${TMPFILE}" 207 show_package_file "${TMPFILE}" 208 rm "${TMPFILE}" |
211}; 212 213show_package_by_name() 214{ | 209}; 210 211show_package_by_name() 212{ |
215 CATEGORY="${1}" 216 PACKAGE="${2}" 217 INDEX_FILE="${PKGDIR}/INDEX.parsed" 218 TMPFILE="/tmp/.pkg.cat.pak" | 213 CATEGORY="${1}" 214 PACKAGE="${2}" 215 INDEX_FILE="${PKGDIR}/INDEX.parsed" 216 TMPFILE="/tmp/.pkg.cat.pak" |
219 | 217 |
220 grep "^${CATEGORY}|${PACKAGE}" "${INDEX_FILE}" > "${TMPFILE}" 221 show_package_file "${TMPFILE}" 222 rm "${TMPFILE}" | 218 grep "^${CATEGORY}|${PACKAGE}" "${INDEX_FILE}" > "${TMPFILE}" 219 show_package_file "${TMPFILE}" 220 rm "${TMPFILE}" |
223}; 224 225show_packages() 226{ | 221}; 222 223show_packages() 224{ |
227 show_package_file "${PKGDIR}/INDEX.parsed" | 225 show_package_file "${PKGDIR}/INDEX.parsed" |
228}; 229 230get_package_dependencies() 231{ | 226}; 227 228get_package_dependencies() 229{ |
232 PACKAGE="${1}" 233 LONG="${2:-0}" 234 RES=0 | 230 PACKAGE="${1}" 231 LONG="${2:-0}" 232 RES=0 |
235 | 233 |
236 INDEX_FILE="${PKGDIR}/INDEX.deps" 237 REGEX="^${PACKAGE}|" | 234 INDEX_FILE="${PKGDIR}/INDEX.deps" 235 REGEX="^${PACKAGE}|" |
238 | 236 |
239 if [ "${LONG}" -ne "0" ] 240 then 241 REGEX="^.*|${PACKAGE}|" 242 fi | 237 if [ "${LONG}" -ne "0" ] 238 then 239 REGEX="^.*|${PACKAGE}|" 240 fi |
243 | 241 |
244 LINE=`grep "${REGEX}" "${INDEX_FILE}" 2>/dev/null` 245 DEPS=`echo "${LINE}"|cut -f3 -d'|'` | 242 LINE=`grep "${REGEX}" "${INDEX_FILE}" 2>/dev/null` 243 DEPS=`echo "${LINE}"|cut -f3 -d'|'` |
246 | 244 |
247 VAL="${DEPS}" 248 export VAL | 245 VAL="${DEPS}" 246 export VAL |
249 | 247 |
250 if [ -z "${VAL}" ] 251 then 252 RES=1 253 fi | 248 if [ -z "${VAL}" ] 249 then 250 RES=1 251 fi |
254 | 252 |
255 return ${RES} | 253 return ${RES} |
256}; 257 258get_package_name() 259{ | 254}; 255 256get_package_name() 257{ |
260 PACKAGE="${1}" 261 RES=0 | 258 PACKAGE="${1}" 259 RES=0 |
262 | 260 |
263 INDEX_FILE="${PKGDIR}/INDEX.deps" 264 REGEX="^${PACKAGE}|" | 261 INDEX_FILE="${PKGDIR}/INDEX.deps" 262 REGEX="^${PACKAGE}|" |
265 | 263 |
266 LINE=`grep "${REGEX}" "${INDEX_FILE}" 2>/dev/null` 267 NAME=`echo "${LINE}"|cut -f2 -d'|'` | 264 LINE=`grep "${REGEX}" "${INDEX_FILE}" 2>/dev/null` 265 NAME=`echo "${LINE}"|cut -f2 -d'|'` |
268 | 266 |
269 VAL="${NAME}" 270 export VAL | 267 VAL="${NAME}" 268 export VAL |
271 | 269 |
272 if [ -z "${VAL}" ] 273 then 274 RES=1 275 fi | 270 if [ -z "${VAL}" ] 271 then 272 RES=1 273 fi |
276 | 274 |
277 return ${RES} | 275 return ${RES} |
278}; 279 280get_package_short_name() 281{ | 276}; 277 278get_package_short_name() 279{ |
282 PACKAGE="${1}" 283 RES=0 | 280 PACKAGE="${1}" 281 RES=0 |
284 | 282 |
285 INDEX_FILE="${PKGDIR}/INDEX.deps" 286 REGEX="^.*|${PACKAGE}|" | 283 INDEX_FILE="${PKGDIR}/INDEX.deps" 284 REGEX="^.*|${PACKAGE}|" |
287 | 285 |
288 LINE=`grep "${REGEX}" "${INDEX_FILE}" 2>/dev/null` 289 NAME=`echo "${LINE}"|cut -f1 -d'|'` | 286 LINE=`grep "${REGEX}" "${INDEX_FILE}" 2>/dev/null` 287 NAME=`echo "${LINE}"|cut -f1 -d'|'` |
290 | 288 |
291 VAL="${NAME}" 292 export VAL | 289 VAL="${NAME}" 290 export VAL |
293 | 291 |
294 if [ -z "${VAL}" ] 295 then 296 RES=1 297 fi | 292 if [ -z "${VAL}" ] 293 then 294 RES=1 295 fi |
298 | 296 |
299 return ${RES} | 297 return ${RES} |
300}; 301 302get_package_category() 303{ | 298}; 299 300get_package_category() 301{ |
304 PACKAGE="${1}" 305 INDEX_FILE="${PKGDIR}/INDEX.parsed" 306 RES=0 | 302 PACKAGE="${1}" 303 INDEX_FILE="${PKGDIR}/INDEX.parsed" 304 RES=0 |
307 | 305 |
308 LINE=`grep "|${PACKAGE}|" "${INDEX_FILE}" 2>/dev/null` 309 NAME=`echo "${LINE}"|cut -f1 -d'|'` | 306 LINE=`grep "|${PACKAGE}|" "${INDEX_FILE}" 2>/dev/null` 307 NAME=`echo "${LINE}"|cut -f1 -d'|'` |
310 | 308 |
311 VAL="${NAME}" 312 export VAL | 309 VAL="${NAME}" 310 export VAL |
313 | 311 |
314 if [ -z "${VAL}" ] 315 then 316 RES=1 317 fi | 312 if [ -z "${VAL}" ] 313 then 314 RES=1 315 fi |
318 | 316 |
319 return ${RES} | 317 return ${RES} |
320}; 321 322fetch_package_by_ftp() 323{ | 318}; 319 320fetch_package_by_ftp() 321{ |
324 CATEGORY="${1}" 325 PACKAGE="${2}" 326 SAVEDIR="${3}" | 322 CATEGORY="${1}" 323 PACKAGE="${2}" 324 SAVEDIR="${3}" |
327 | 325 |
328 get_value_from_cfg ftpHost 329 if [ -z "$VAL" ] 330 then 331 exit_err "ERROR: Install medium was set to ftp, but no ftpHost was provided!" 332 fi 333 FTPHOST="${VAL}" | 326 get_value_from_cfg ftpHost 327 if [ -z "$VAL" ] 328 then 329 exit_err "ERROR: Install medium was set to ftp, but no ftpHost was provided!" 330 fi 331 FTPHOST="${VAL}" |
334 | 332 |
335 get_value_from_cfg ftpDir 336 if [ -z "$VAL" ] 337 then 338 exit_err "ERROR: Install medium was set to ftp, but no ftpDir was provided!" 339 fi 340 FTPDIR="${VAL}" | 333 get_value_from_cfg ftpDir 334 if [ -z "$VAL" ] 335 then 336 exit_err "ERROR: Install medium was set to ftp, but no ftpDir was provided!" 337 fi 338 FTPDIR="${VAL}" |
341 | 339 |
342 PACKAGE="${PACKAGE}.tbz" 343 FTP_SERVER="ftp://${FTPHOST}${FTPDIR}" | 340 PACKAGE="${PACKAGE}.tbz" 341 FTP_SERVER="ftp://${FTPHOST}${FTPDIR}" |
344 | 342 |
345 if [ ! -f "${SAVEDIR}/${PACKAGE}" ] 346 then 347 PKGPATH="${CATEGORY}/${PACKAGE}" 348 FTP_PATH="${FTP_HOST}/packages/${PKGPATH}" 349 fetch_file "${FTP_PATH}" "${SAVEDIR}/" "0" 350 fi | 343 if [ ! -f "${SAVEDIR}/${PACKAGE}" ] 344 then 345 PKGPATH="${CATEGORY}/${PACKAGE}" 346 FTP_PATH="${FTP_HOST}/packages/${PKGPATH}" 347 fetch_file "${FTP_PATH}" "${SAVEDIR}/" "0" 348 fi |
351}; 352 353fetch_package_by_fs() 354{ | 349}; 350 351fetch_package_by_fs() 352{ |
355 CATEGORY="${1}" 356 PACKAGE="${2}" 357 SAVEDIR="${3}" | 353 CATEGORY="${1}" 354 PACKAGE="${2}" 355 SAVEDIR="${3}" |
358 | 356 |
359 PACKAGE="${PACKAGE}.tbz" 360 if [ ! -f "${SAVEDIR}/${PACKAGE}" ] 361 then 362 fetch_file "${CDMNT}/packages/${CATEGORY}/${PACKAGE}" "${SAVEDIR}/" "0" 363 fi | 357 PACKAGE="${PACKAGE}.tbz" 358 if [ ! -f "${SAVEDIR}/${PACKAGE}" ] 359 then 360 fetch_file "${CDMNT}/packages/${CATEGORY}/${PACKAGE}" "${SAVEDIR}/" "0" 361 fi |
364}; 365 366fetch_package() 367{ | 362}; 363 364fetch_package() 365{ |
368 CATEGORY="${1}" 369 PACKAGE="${2}" 370 SAVEDIR="${3}" | 366 CATEGORY="${1}" 367 PACKAGE="${2}" 368 SAVEDIR="${3}" |
371 | 369 |
372 case "${INSTALLMEDIUM}" in 373 usb|dvd) 374 fetch_package_by_fs "${CATEGORY}" "${PACKAGE}" "${SAVEDIR}" 375 ;; 376 ftp) 377 fetch_package_by_ftp "${CATEGORY}" "${PACKAGE}" "${SAVEDIR}" 378 ;; 379 esac | 370 case "${INSTALLMEDIUM}" in 371 usb|dvd) fetch_package_by_fs "${CATEGORY}" "${PACKAGE}" "${SAVEDIR}" ;; 372 ftp|sftp) fetch_package_by_ftp "${CATEGORY}" "${PACKAGE}" "${SAVEDIR}" ;; 373 esac |
380}; | 374}; |