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 247734 2013-03-03 23:01:46Z jpaetzel $ |
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 --- 5 unchanged lines hidden (view full) --- 40 FTP_SERVER="${1}" 41 INDEX_FILE="INDEX" 42 USE_BZIP2=0 43 44 if [ -f "/usr/bin/bzip2" ] 45 then 46 INDEX_FILE="${INDEX_FILE}.bz2" 47 USE_BZIP2=1 |
48 INDEX_PATH="${INDEXFILE}.bz2" 49 else 50 INDEX_PATH="${INDEXFILE}" |
51 fi 52 |
53 fetch_file "${FTP_SERVER}/${INDEX_FILE}" "${INDEX_PATH}" "1" 54 if [ -f "${INDEX_PATH}" ] && [ "${USE_BZIP2}" -eq "1" ] 55 then 56 bzip2 -d "${INDEX_PATH}" 57 fi 58}; 59 60get_package_index_by_fs() 61{ |
62 if [ "$INSTALLMEDIUM" = "local" ] ; then 63 INDEXFILE="${LOCALPATH}/packages/INDEX" 64 else 65 INDEXFILE="${CDMNT}/packages/INDEX" 66 fi |
67}; 68 69get_package_index_size() 70{ |
71 if [ -f "${INDEXFILE}" ] |
72 then |
73 SIZE=`ls -l ${INDEXFILE} | awk '{ print $5 }'` |
74 else 75 get_ftp_mirror 76 FTPHOST="${VAL}" 77 78 FTPDIR="/pub/FreeBSD/releases/${FBSD_ARCH}/${FBSD_BRANCH}" 79 FTPPATH="ftp://${FTPHOST}${FTPDIR}/packages" 80 81 fetch -s "${FTPPATH}/INDEX.bz2" --- 10 unchanged lines hidden (view full) --- 92 FTPHOST="${VAL}" 93 94 FTPDIR="/pub/FreeBSD/releases/${FBSD_ARCH}/${FBSD_BRANCH}" 95 FTPPATH="ftp://${FTPHOST}${FTPDIR}/packages" 96 97 get_package_index_by_ftp "${FTPPATH}" 98 99 else |
100 |
101 case "${INSTALLMEDIUM}" in |
102 usb|dvd|local) get_package_index_by_fs ;; 103 ftp) get_value_from_cfg ftpHost 104 if [ -z "$VAL" ]; then 105 exit_err "ERROR: Install medium was set to ftp, but no ftpHost was provided!" 106 fi 107 FTPHOST="${VAL}" 108 109 get_value_from_cfg ftpDir 110 if [ -z "$VAL" ]; then 111 exit_err "ERROR: Install medium was set to ftp, but no ftpDir was provided!" 112 fi 113 FTPDIR="${VAL}" 114 FTPPATH="ftp://${FTPHOST}${FTPDIR}" 115 get_package_index_by_ftp "${FTPPATH}" ;; 116 sftp) ;; 117 *) RES=1 ;; |
118 esac 119 120 fi 121 122 return ${RES} 123}; 124 125parse_package_index() 126{ |
127 echo_log "Building package dep list.. Please wait.." |
128 INDEX_FILE="${PKGDIR}/INDEX" 129 130 exec 3<&0 |
131 exec 0<"${INDEXFILE}" |
132 133 while read -r line 134 do 135 PKGNAME="" 136 CATEGORY="" 137 PACKAGE="" 138 DESC="" 139 DEPS="" --- 112 unchanged lines hidden (view full) --- 252 253 return ${RES} 254}; 255 256get_package_name() 257{ 258 PACKAGE="${1}" 259 RES=0 |
260 local PKGPTH |
261 |
262 # If we are on a local medium, we can parse the Latest/ directory 263 if [ "${INSTALLMEDIUM}" != "ftp" ] ; then 264 case "${INSTALLMEDIUM}" in 265 usb|dvd) PKGPTH="${CDMNT}/packages" ;; 266 *) PKGPTH="${LOCALPATH}/packages" ;; 267 esac 268 269 # Check the /Latest dir for generic names, then look for specific version in All/ 270 if [ -e "${PKGPTH}/Latest/${PACKAGE}.${PKGEXT}" ] ; then 271 NAME=`ls -al ${PKGPTH}/Latest/${PACKAGE}.${PKGEXT} 2>/dev/null | cut -d '>' -f 2 | rev | cut -f1 -d'/' | rev | tr -s ' '` 272 else 273 NAME=`ls -al ${PKGPTH}/All/${PACKAGE}.${PKGEXT} 2>/dev/null | cut -d '>' -f 2 | rev | cut -f1 -d'/' | rev | tr -s ' '` 274 fi 275 export VAL="${NAME}" 276 else 277 # Doing remote fetch, we we will look up, but some generic names like 278 # "perl" wont work, since we don't know the default version 279 INDEX_FILE="${PKGDIR}/INDEX.deps" 280 REGEX="^${PACKAGE}|" |
281 |
282 LINE=`grep "${REGEX}" "${INDEX_FILE}" 2>/dev/null` 283 NAME=`echo "${LINE}"|cut -f2 -d'|'` |
284 |
285 export VAL="${NAME}" 286 fi |
287 288 if [ -z "${VAL}" ] 289 then 290 RES=1 291 fi |
292 return ${RES} 293}; 294 295get_package_short_name() 296{ 297 PACKAGE="${1}" 298 RES=0 299 --- 47 unchanged lines hidden (view full) --- 347 348 get_value_from_cfg ftpDir 349 if [ -z "$VAL" ] 350 then 351 exit_err "ERROR: Install medium was set to ftp, but no ftpDir was provided!" 352 fi 353 FTPDIR="${VAL}" 354 |
355 PACKAGE="${PACKAGE}.${PKGEXT}" |
356 FTP_SERVER="ftp://${FTPHOST}${FTPDIR}" 357 358 if [ ! -f "${SAVEDIR}/${PACKAGE}" ] 359 then 360 PKGPATH="${CATEGORY}/${PACKAGE}" 361 FTP_PATH="${FTP_HOST}/packages/${PKGPATH}" 362 fetch_file "${FTP_PATH}" "${SAVEDIR}/" "0" 363 fi 364}; 365 |
366fetch_package() 367{ 368 CATEGORY="${1}" 369 PACKAGE="${2}" 370 SAVEDIR="${3}" 371 |
372 # Fetch package, but skip if installing from local media |
373 case "${INSTALLMEDIUM}" in |
374 usb|dvd|local) return ;; |
375 ftp) fetch_package_by_ftp "${CATEGORY}" "${PACKAGE}" "${SAVEDIR}" ;; 376 sftp) ;; 377 esac 378}; |
379 380bootstrap_pkgng() 381{ 382 # Check if we need to boot-strap pkgng 383 if run_chroot_cmd "which pkg-static" >/dev/null 2>/dev/null 384 then 385 return 386 fi 387 local PKGPTH 388 389 # Ok, lets boot-strap this sucker 390 echo_log "Bootstraping pkgng.." 391 fetch_package "Latest" "pkg" "${PKGDLDIR}" 392 393 # Figure out real location of "pkg" package 394 case "${INSTALLMEDIUM}" in 395 usb|dvd|local) PKGPTH="${PKGTMPDIR}/Latest/pkg.${PKGEXT}" ;; 396 *) PKGPTH="${PKGTMPDIR}/pkg.${PKGEXT}" ;; 397 esac 398 rc_halt "pkg -c ${FSMNT} add ${PKGPTH}" ; run_chroot_cmd "pkg2ng" 399} 400 401get_package_location() 402{ 403 case "${INSTALLMEDIUM}" in 404 usb|dvd) rc_halt "mount_nullfs ${CDMNT}/packages ${FSMNT}${PKGTMPDIR}" 405 PKGDLDIR="${FSMNT}${PKGTMPDIR}/All" ;; 406 local) rc_halt "mount_nullfs ${LOCALPATH}/packages ${FSMNT}${PKGTMPDIR}" 407 PKGDLDIR="${FSMNT}${PKGTMPDIR}/All" ;; 408 *) PKGDLDIR="${FSMNT}${PKGTMPDIR}" ;; 409 esac 410 export PKGDLDIR 411} |