Magellan Linux

Contents of /trunk/mage/usr/lib/mage/mage4.sh

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1780 - (show annotations) (download) (as text)
Mon Mar 12 23:21:12 2012 UTC (12 years, 1 month ago) by niro
File MIME type: application/x-sh
File size: 13021 byte(s)
-added option 'print-features'
1 #!/bin/bash
2 # Magellan Linux Installer (mage.sh)
3 # $Header: /home/cvsd/magellan-cvs/magellan-src/mage/usr/lib/mage/mage4.sh,v 1.17 2008-06-16 09:29:57 niro Exp $
4
5 # default die function
6 die()
7 {
8 echo -e ${COLRED}"Exited ${BASH_SOURCE} at line no ${BASH_LINENO}."${COLDEFAULT}
9 echo -e ${COLRED}"$@"${COLDEFAULT}
10 exit 1
11 }
12
13 # include all needed files
14 [ -f /etc/mage.rc.global ] && \
15 source /etc/mage.rc.global || \
16 die "/etc/mage.rc.global missing"
17
18 [ -f ${MAGERC} ] && source ${MAGERC} || \
19 die "Your ${MAGERC} is missing. Aborting."
20
21 [ -f ${MLIBDIR}/mage4.functions.sh ] && \
22 source ${MLIBDIR}/mage4.functions.sh || \
23 die "mage functions missing"
24
25 # export default path
26 export PATH="${PATH}:${MLIBDIR}"
27
28 # export the default C locale
29 export LC_ALL=C
30
31 # sanity checks
32 [ ! -e ${VIRTUALDB_FILE} ] && touch ${VIRTUALDB_FILE}
33
34 if [ ! -e ${VIRTUALDB_DEFAULTS} ] && [[ $1 != update ]] && [[ $1 != update-tarball ]]
35 then
36 echo
37 echo "Please choose an profile from the mage tree."
38 echo "ln -snf ${MAGEDIR}/profiles/profilename /etc/mage-profile"
39 exit 1
40 fi
41
42 # default messages
43 showversion()
44 {
45 local MAGEVERSION="$(< ${MLIBDIR}/version)"
46
47 echo -en "Magellan Package Manager v${MAGEVERSION} "
48 echo -e "-- Niels Rogalla (niro@magellan-linux.de)"
49 }
50
51 print_usage()
52 {
53 #showversion
54 #echo
55 echo "Usage: $(basename $0) [option] pkgname ..."
56 echo "Options:"
57 echo " pretend - pretends dependencies of a package"
58 echo " srcpretend - pretends dependencies of a package (build from source)"
59 echo " install - installs a package"
60 echo " srcinstall - installs a package from source"
61 echo " uninstall - removes a package"
62 echo " update - updates the mage-tree via rsync"
63 echo " update-tarball - updates the mage-tree via a tarball"
64 echo " uppretend - pretend dependencies for a system upgrade"
65 echo " upgrade - runs a complete system upgrade"
66 echo " srcuppretend - pretend dependencies for a system upgrade from source"
67 echo " srcupgrade - runs a complete system upgrade from source"
68 echo " search - searches mage-tree for a package"
69 echo " clean - removes *all* downloaded packages"
70 echo " unpack - unpacks *all* needed package for 'foo'"
71 echo " download - downloads *all* needed packages for 'foo'"
72 echo " print-features - prints all enabled mage-features"
73 echo " version - prints version info"
74 echo " regen-mage-tree - regenerates the whole mage database (for devs only)"
75 echo
76 echo "Other options:"
77 # echo "NOINSTALL=yes $(basename $0) srcinstall PACKAGE"
78 # echo "Builds a Package with its dependencies, but won't install anything."
79 # echo
80 echo "MAGE_DISTRIBUTION=unstable $(basename $0) [src]install PACKAGE"
81 echo "Overrides stable packages; you can install packages that are marked unstable."
82 echo
83 echo "MAGE_DISTRIBUTION=testing $(basename $0) [src]install PACKAGE"
84 echo "Overrides stable packages; you can install packages that are marked testing."
85 echo
86 echo "NOCOLORS=true $(basename $0) [src]install PACKAGE"
87 echo "Disables all colors in the messages."
88 echo
89 }
90
91
92 showversion
93 echo
94
95 # install method
96 METHOD="$1"
97
98 # initial unversionized packagename, gets overridden later on
99 MAGENAME="$2"
100
101 if [[ ${METHOD} != upgrade ]] &&
102 [[ ${METHOD} != srcupgrade ]] &&
103 [[ ${METHOD} != uppretend ]] &&
104 [[ ${METHOD} != srcuppretend ]] &&
105 [[ ${METHOD} != update ]] &&
106 [[ ${METHOD} != update-tarball ]] &&
107 [[ ${METHOD} != clean ]] &&
108 [[ ${METHOD} != version ]] &&
109 [[ ${METHOD} != search ]] &&
110 [[ ${METHOD} != regen-mage-tree ]] &&
111 [[ ${METHOD} != print-features ]]
112 then
113 [[ -z ${METHOD} ]] || [[ -z ${MAGENAME} ]] && print_usage && exit 1
114 fi
115
116 # set PKGDIR and BUILDDIR to MROOT
117 if [[ -n ${MROOT} ]]
118 then
119 PKGDIR=${MROOT}/${PKGDIR}
120 BUILDDIR=${MROOT}/${BUILDDIR}
121 fi
122
123 # before anything run mage_setup
124 mage_setup || die "error in mage_setup()"
125
126 # load supported mage features
127 load_mage_features
128
129 case ${METHOD} in
130 download)
131 # first of all get the right pkg which going to be installed
132 PCAT="$(pname2pcat ${MAGENAME})"
133
134 # package does not exists
135 [ -z "${PCAT}" ] && die "Package '${MAGENAME}' does not exist."
136
137 # source the highest magefile of this pkg
138 PKGNAME=$(get_value_from_magefile PKGNAME $(get_highest_magefile ${PCAT} ${MAGENAME}))
139
140 # package is masked
141 [ -z "${PKGNAME}" ] && die "Package '${MAGENAME}' is masked and not available for installation."
142
143 # convert PKGNAME to PNAME/PVER/PBUILD
144 # we're working *only* with these three vars from here on
145 PNAME="$(pkgname2pname ${PKGNAME})"
146 PVER="$(pkgname2pver ${PKGNAME})"
147 PBUILD="$(pkgname2pbuild ${PKGNAME})"
148
149 # get all dependencies of this package
150 ALLDEPS="$(${MLIBDIR}/depwalker.sh \
151 --method install \
152 --pcat ${PCAT} \
153 --pname ${PNAME} \
154 --pver ${PVER} \
155 --pbuild ${PBUILD})"
156 fetch_packages ${ALLDEPS} || die "fetching packages"
157 md5sum_packages ${ALLDEPS} || die "md5 sum packages"
158 ;;
159
160 srcdownload)
161 # first of all get the right pkg which going to be installed
162 PCAT="$(pname2pcat ${MAGENAME})"
163
164 # package does not exists
165 [ -z "${PCAT}" ] && die "Package '${MAGENAME}' does not exist."
166
167 # source the highest magefile of this pkg
168 PKGNAME=$(get_value_from_magefile PKGNAME $(get_highest_magefile ${PCAT} ${MAGENAME}))
169
170 # package is masked
171 [ -z "${PKGNAME}" ] && die "Package '${MAGENAME}' is masked and not available for installation."
172
173 # convert PKGNAME to PNAME/PVER/PBUILD
174 # we're working *only* with these three vars from here on
175 PNAME="$(pkgname2pname ${PKGNAME})"
176 PVER="$(pkgname2pver ${PKGNAME})"
177 PBUILD="$(pkgname2pbuild ${PKGNAME})"
178
179 # get all dependencies of this package
180 ALLDEPS="$(${MLIBDIR}/depwalker.sh \
181 --method srcinstall \
182 --pcat ${PCAT} \
183 --pname ${PNAME} \
184 --pver ${PVER} \
185 --pbuild ${PBUILD})"
186 fetch_packages ${ALLDEPS} || die "fetching packages"
187 ;;
188
189 pretend|srcpretend)
190 # first of all get the right pkg which going to be installed
191 PCAT="$(pname2pcat ${MAGENAME})"
192
193 # package does not exists
194 [ -z "${PCAT}" ] && die "Package '${MAGENAME}' does not exist."
195
196 # source the highest magefile of this pkg
197 PKGNAME=$(get_value_from_magefile PKGNAME $(get_highest_magefile ${PCAT} ${MAGENAME}))
198
199 # package is masked
200 [ -z "${PKGNAME}" ] && die "Package '${MAGENAME}' is masked and not available for installation."
201
202 # convert PKGNAME to PNAME/PVER/PBUILD
203 # we're working *only* with these three vars from here on
204 PNAME="$(pkgname2pname ${PKGNAME})"
205 PVER="$(pkgname2pver ${PKGNAME})"
206 PBUILD="$(pkgname2pbuild ${PKGNAME})"
207
208 # abort if already installed
209 if is_installed ${PCAT}/${PNAME}-${PVER}-${PBUILD}
210 then
211 echo -en "Package "
212 echo -en "${COLRED}${PNAME}-${PVER}-${PBUILD}${COLDEFAULT}"
213 echo -e " already installed."
214 exit 3
215 fi
216 # get all dependencies of this package
217 ${MLIBDIR}/depwalker.sh \
218 --method ${METHOD} \
219 --pcat ${PCAT} \
220 --pname ${PNAME} \
221 --pver ${PVER} \
222 --pbuild ${PBUILD}
223 ;;
224
225 install)
226 have_root_privileges || die "You must be root to run this operation."
227
228 # first of all get the right pkg which going to be installed
229 PCAT="$(pname2pcat ${MAGENAME})"
230
231 # package does not exists
232 [ -z "${PCAT}" ] && die "Package '${MAGENAME}' does not exist."
233
234 # source the highest magefile of this pkg
235 PKGNAME=$(get_value_from_magefile PKGNAME $(get_highest_magefile ${PCAT} ${MAGENAME}))
236
237 # package is masked
238 [ -z "${PKGNAME}" ] && die "Package '${MAGENAME}' is masked and not available for installation."
239
240 # convert PKGNAME to PNAME/PVER/PBUILD
241 # we're working *only* with these three vars from here on
242 PNAME="$(pkgname2pname ${PKGNAME})"
243 PVER="$(pkgname2pver ${PKGNAME})"
244 PBUILD="$(pkgname2pbuild ${PKGNAME})"
245
246 if is_installed ${PCAT}/${PNAME}-${PVER}-${PBUILD}
247 then
248 echo -en "Package "
249 echo -en "${COLRED}${PCAT}/${PNAME}-${PVER}-${PBUILD}${COLDEFAULT}"
250 echo -e " already installed."
251 exit 3
252 fi
253
254 # get all dependencies of this package
255 ALLDEPS="$(${MLIBDIR}/depwalker.sh \
256 --method ${METHOD} \
257 --pcat ${PCAT} \
258 --pname ${PNAME} \
259 --pver ${PVER} \
260 --pbuild ${PBUILD})"
261
262 # first fetch all packages
263 fetch_packages ${ALLDEPS} || die "fetching packages"
264 md5sum_packages ${ALLDEPS} || die "md5 sum packages"
265 unpack_packages ${ALLDEPS} || die "unpacking packages"
266 install_packages ${ALLDEPS} || die "installing packages"
267 ;;
268
269 srcinstall)
270 have_root_privileges || die "You must be root to run this operation."
271
272 # first of all get the right pkg which going to be installed
273 PCAT="$(pname2pcat ${MAGENAME})"
274
275 # package does not exists
276 [ -z "${PCAT}" ] && die "Package '${MAGENAME}' does not exist."
277
278 # source the highest magefile of this pkg
279 PKGNAME=$(get_value_from_magefile PKGNAME $(get_highest_magefile ${PCAT} ${MAGENAME}))
280
281 # package is masked
282 [ -z "${PKGNAME}" ] && die "Package '${MAGENAME}' is masked and not available for installation."
283
284 # convert PKGNAME to PNAME/PVER/PBUILD
285 # we're working *only* with these three vars from here on
286 PNAME="$(pkgname2pname ${PKGNAME})"
287 PVER="$(pkgname2pver ${PKGNAME})"
288 PBUILD="$(pkgname2pbuild ${PKGNAME})"
289
290 if is_installed ${PCAT}/${PNAME}-${PVER}-${PBUILD}
291 then
292 echo -en "Package "
293 echo -en "${COLRED}${PCAT}/${PNAME}-${PVER}-${PBUILD}${COLDEFAULT}"
294 echo -e " already installed."
295 exit 3
296 fi
297
298 # get all dependencies of this package
299 ALLDEPS="$(${MLIBDIR}/depwalker.sh \
300 --method ${METHOD} \
301 --pcat ${PCAT} \
302 --pname ${PNAME} \
303 --pver ${PVER} \
304 --pbuild ${PBUILD})"
305
306 install_packages --src-install ${ALLDEPS} || die "src-installing packages"
307 ;;
308
309 uninstall)
310 have_root_privileges || die "You must be root to run this operation."
311
312 ALLDEPS="$(get_uninstall_candidates --pname ${MAGENAME})"
313 if [ -z "${ALLDEPS}" ]
314 then
315 die "No package installed named '${MAGENAME}'."
316 fi
317 uninstall_packages ${ALLDEPS}
318 ;;
319
320 uppretend|srcuppretend)
321 ${MLIBDIR}/depwalker.sh \
322 --method ${METHOD} \
323 --pcat ${METHOD} \
324 --pname ${METHOD} \
325 --pver ${METHOD} \
326 --pbuild ${METHOD}
327 ;;
328
329 upgrade)
330 have_root_privileges || die "You must be root to run this operation."
331
332 # get all dependencies of *all* installed packages
333 # fake pcat,pname,pver,pbuild ...
334 ALLDEPS="$(${MLIBDIR}/depwalker.sh \
335 --method ${METHOD} \
336 --pcat ${METHOD} \
337 --pname ${METHOD} \
338 --pver ${METHOD} \
339 --pbuild ${METHOD})"
340
341 # first fetch all packages
342 fetch_packages ${ALLDEPS} || die "fetching packages"
343 md5sum_packages ${ALLDEPS} || die "md5 sum packages"
344 unpack_packages ${ALLDEPS} || die "unpacking packages"
345 install_packages ${ALLDEPS} || die "installing packages"
346 ;;
347
348 srcupgrade)
349 have_root_privileges || die "You must be root to run this operation."
350
351 # get all dependencies of *all* installed packages
352 # fake pcat,pname,pver,pbuild ...
353 ALLDEPS="$(${MLIBDIR}/depwalker.sh \
354 --method ${METHOD} \
355 --pcat ${METHOD} \
356 --pname ${METHOD} \
357 --pver ${METHOD} \
358 --pbuild ${METHOD})"
359
360 install_packages --src-install ${ALLDEPS} || die "src-installing packages"
361 ;;
362
363 search)
364 pkgsearch "${MAGENAME}"
365 ;;
366
367 unpack)
368 have_root_privileges || die "You must be root to run this operation."
369
370 # first of all get the right pkg which going to be installed
371 PCAT="$(pname2pcat ${MAGENAME})"
372
373 # package does not exists
374 [ -z "${PCAT}" ] && die "Package '${MAGENAME}' does not exist."
375
376 # source the highest magefile of this pkg
377 PKGNAME=$(get_value_from_magefile PKGNAME $(get_highest_magefile ${PCAT} ${MAGENAME}))
378
379 # package is masked
380 [ -z "${PKGNAME}" ] && die "Package '${MAGENAME}' is masked and not available for installation."
381
382 # convert PKGNAME to PNAME/PVER/PBUILD
383 # we're working *only* with these three vars from here on
384 PNAME="$(pkgname2pname ${PKGNAME})"
385 PVER="$(pkgname2pver ${PKGNAME})"
386 PBUILD="$(pkgname2pbuild ${PKGNAME})"
387
388 # get all dependencies of this package
389 ALLDEPS="$(${MLIBDIR}/depwalker.sh \
390 --method install \
391 --pcat ${PCAT} \
392 --pname ${PNAME} \
393 --pver ${PVER} \
394 --pbuild ${PBUILD})"
395 fetch_packages ${ALLDEPS} || die "fetching packages"
396 md5sum_packages ${ALLDEPS} || die "md5 sum packages"
397 unpack_packages ${ALLDEPS} || die "unpacking packages"
398 ;;
399
400 update)
401 have_root_privileges || die "You must be root to run this operation."
402 syncmage
403 ;;
404
405 update-tarball)
406 have_root_privileges || die "You must be root to run this operation."
407 syncmage_tarball
408 ;;
409
410 clean)
411 have_root_privileges || die "You must be root to run this operation."
412 cleanpkg
413 ;;
414
415 version)
416 # showversion
417 exit 0
418 ;;
419
420 regen-mage-tree)
421 have_root_privileges || die "You must be root to run this operation."
422
423 if [ -z "${SMAGESCRIPTSDIR}" ] || [ ! -d "${SMAGESCRIPTSDIR}" ]
424 then
425 echo "SMAGESCRIPTSDIR not found. Check your mage.rc or check out smage repos."
426 exit 1
427 fi
428 for i in $(find ${SMAGESCRIPTSDIR} -type f -name "*.smage2")
429 do
430 smage2 only-regen-tree "${i}"
431 done
432 ;;
433
434 print-features)
435 mprintfeatures
436 ;;
437
438 *)
439 print_usage
440 ;;
441 esac

Properties

Name Value
svn:executable *