Deleted Added
full compact
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};