Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 186 - (show annotations) (download) (as text)
Tue Aug 16 23:23:33 2005 UTC (18 years, 8 months ago) by niro
File MIME type: application/x-sh
File size: 14772 byte(s)
fixed version, source now ${MLIBDIR}/version

1 #!/bin/sh
2 # Magellan Linux Installer (mage.sh)
3 # $Header: /home/cvsd/magellan-cvs/magellan-src/mage/usr/lib/mage/mage3.sh,v 1.18 2005-08-16 23:23:33 niro Exp $
4
5 ##configuration -> mage.rc
6 #PKGDIR="/usr/src/packages"
7 PKGSUFFIX="mpk"
8 #BUILDDIR="/usr/src"
9 #INSTALLDB="/var/ALXInstDB"
10 #MAGEDIR="/usr/src/mage-0.2"
11 MAGENAME="$2"
12 #PKGNAME="`basename $2 .mage`"
13 MLIBDIR=/usr/lib/mage
14 MAGEVERSION="$( < ${MLIBDIR}/version)"
15
16 ## nur für tests -> normalerweise in /etc/rc.d/init.d/functions
17 COLRED="\033[1;6m\033[31m"
18 COLGREEN="\033[1;6m\033[32m"
19 COLBLUE="\033[1;6m\033[34m"
20 COLDEFAULT="\033[0m"
21
22 # default path
23 PATH="${PATH}:${MLIBDIR}"
24
25 # export the default C locale
26 export LC_ALL=C
27
28 ##functions
29 if [ -f /etc/mage.rc ]
30 then
31 source /etc/mage.rc
32 else
33 echo "Your /etc/mage.rc is missing. Aborting."
34 exit 1
35 fi
36
37 #virtualdb locations
38 VIRTUALDB_DEFAULTS=/etc/mage-profile/virtuals.defaults
39 VIRTUALDB_FILE=${INSTALLDB}/virtuals
40
41 #fix small problems
42 [ ! -e ${VIRTUALDB_FILE} ] && touch ${VIRTUALDB_FILE}
43
44 if [ ! -e ${VIRTUALDB_DEFAULTS} -a "$1" != "update" ]
45 then
46 echo
47 echo "Please choose an profile from the mage tree."
48 echo "ln -snf ${MAGEDIR}/profiles/profilename /etc/mage-profile"
49 exit 1
50 fi
51
52
53 #loads functions
54 source ${MLIBDIR}/mage3.functions.sh
55
56 #############DIALOGE##############
57 showversion() {
58 echo -en "Magellan Package Manager v${MAGEVERSION} "
59 echo -e "-- Niels Rogalla (niro@magellan-linux.de)"
60 }
61
62 print_usage(){
63 showversion
64 echo -e "\nUsage: (basename $0) [option] pkgname ..."
65 echo "Options:"
66 echo -e "\tpretend - pretends dependencies of a package"
67 echo -e "\tsrcpretend - pretends dependencies of a package (build from source)"
68 echo -e "\tinstall - installs a package"
69 echo -e "\tsrcinstall - installs a package from source"
70 echo -e "\tuninstall - removes a package"
71 echo -e "\tupdate - updates mage-tree"
72 echo -e "\tsearch - searches mage-tree for a package"
73 echo -e "\tclean - removes *all* downloaded packages"
74 echo -e "\tunpack - unpacks a package"
75 echo -e "\tdownload - downloads a package"
76 echo -e "\tkeepfiles - prevents files from uninstalling"
77 echo -e "\tinject - inject a package to fake dependencies"
78 echo -e "\treminjected - removes *all* fake packages"
79 echo -e "\tversion - prints version info"
80 echo
81 echo -e "Other:"
82 echo -e "NOINSTALL=yes $(basename $0) srcinstall PACKAGE"
83 echo -e "Builds a Package with its dependencies, but won't install anything."
84 echo
85 echo -e "BOOTSTRAP=yes $(basename $0) srcinstall PACKAGE"
86 echo -e "Force an bootstrap build for a Package."
87 echo -e "Works only for packages wich take use of that (like glibc and binutils),"
88 echo -e "by any other this feature will simple be ignored."
89 echo
90 echo -e "USE_UNSTABLE=true $(basename $0) [src]install PACKAGE"
91 echo -e "Overrides stable packages; you can install packages that are marked unstable."
92 echo
93 }
94
95 run_etc_update() {
96 if [ ${PROTECT_COUNT} -eq 0 ]
97 then
98 return 0
99 fi
100
101 echo
102 echo "Important:"
103 echo "${PROTECT_COUNT} protected file(s) were installed."
104 echo
105 echo "Please run 'etc-update' to update your configuration files."
106 echo
107 }
108
109 mage_install_virtual(){
110 echo -e "\nInstallation of Package: ${COLGREEN}$PKGNAME${COLDEFAULT}\n"
111
112 export -f preinstall 2> /dev/null
113 if [ "$?" == "0" ]
114 then
115 echo -e "\nRunning Preinstall ... \n"
116 preinstall
117 unset preinstall
118 fi
119
120 #creates fake db entry
121 install_database_entry ${PKGNAME} ${PKGTYPE}
122
123 export -f postinstall 2> /dev/null
124 if [ "$?" == "0" ]
125 then
126 echo -e "\nRunning Postinstall ... \n"
127 postinstall
128 unset postinstall
129 fi
130
131 #check for virtuals and PROVIDE
132 # if so install it to virtualdb
133 register_virtual_pkg
134
135 ${MLIBDIR}/env-rebuild.sh
136 echo -e "\nPackage '${PKGNAME/-${ARCH}/}' sucessfully installed.\n"
137
138 #unsets virtual state of packages
139 unset PKGTYPE
140 return 0
141 }
142
143
144 register_virtual_pkg(){
145 #first check if this pkg is an virtual_pkg
146 #echo "DEB: PKGNAME=${PKGNAME}"
147
148 if [ -e ${BUILDDIR}/virtuals/virtuals.${PKGNAME/-${ARCH}/} ]
149 then
150 #add it
151 source ${BUILDDIR}/virtuals/virtuals.${PKGNAME/-${ARCH}/}
152 virtuals_add ${DB_VIRTUAL_NAME} ${DB_PKG_NAME}
153
154 #than clean up
155 unset DB_VIRTUAL_NAME DB_PKG_NAME
156 rm ${BUILDDIR}/virtuals/virtuals.${PKGNAME/-${ARCH}/}
157 fi
158
159 if [ -n "${PROVIDE}" ]
160 then
161 # wander through all provides
162 local my_provides
163 for my_provides in ${PROVIDE}
164 do
165 local my_pgk
166 #cut arch
167 my_pkg=${PKGNAME/-${ARCH}/}
168 #cut version & build
169 my_pkg=${my_pkg%-*-*}
170
171 virtuals_add ${my_provides} ${CATEGORIE}/${my_pkg}
172 done
173 unset PROVIDE
174 unset my_provides
175 fi
176 }
177
178 unregister_virtual_pkg(){
179 if [ -n "${PROVIDE}" ]
180 then
181 local my_pgk
182 local my_cat
183 local directory
184 local x
185
186 #cut arch
187 my_pkg=${PKGNAME/-${ARCH}/}
188
189 #cut version & build
190 my_pkg=${my_pkg%-*-*}
191 my_cat=$(dirname ${my_pkg})
192
193 #check if this was the last one or if any other exists
194 for directory in ${INSTALLDB}/${my_cat}/*
195 do
196 # continue if not a directory,
197 # or the same PNAME-PVER-PBUILD
198 if [ ! -d "${directory}" ]
199 then
200 continue
201 fi
202
203 #check if $directory is the same as $my_pkg
204 x=$(basename ${directory})
205 if [[ ${my_cat}/${x%-*-*} = ${my_pkg} ]]
206 then
207 # break here
208 echo "==== another version of ${my_pkg} exists, not deleting ${VIRTUAL_NAME} ..."
209 return 0
210 fi
211 done
212
213 #virtuals_del ${PROVIDE} ${CATEGORIE}/${my_pkg}
214
215 # wander through all provides
216 local my_provides
217 for my_provides in ${PROVIDE}
218 do
219 #my_pkg has already the categorie -> ex my_pkg=x11-base/xfree
220 virtuals_del ${my_provides} ${my_pkg}
221 done
222
223 unset PROVIDE
224 unset my_provides
225 fi
226 }
227
228 mage_install_sources() {
229
230 #creates fake db entry
231 install_database_entry ${PKGNAME} ${PKGTYPE}
232
233 #check for virtuals and PROVIDE
234 # if so install it to virtualdb
235 register_virtual_pkg
236
237 echo
238 echo -e "This Package is a Source Package."
239 echo
240 echo -e "Only 'srcinstall' works with this type of packages"
241 echo -en "If you have done a srcinstall before, "
242 echo -e "you will find the files in /usr/src."
243 echo
244
245 #nice timer (4 seconds)
246 # local x
247 # declare -i x=4
248 # echo -en "Continues in 4s ..."
249 # while [ ${x} -gt 0 ]
250 # do
251 # i=${x}+1
252 # echo -en "\b\b\b\b\b\b${x}s ..."
253 # #beeper
254 # echo -en "\a"
255 # sleep 1
256 # done
257 # echo
258
259 sleep 1
260 xtitleclean
261 }
262
263 mage_install() {
264 local MAGEFILE
265 local PKGTARBALL
266
267 MAGEFILE=$1
268
269 source ${MAGEFILE}
270
271 #abbruch wenn schon installiert
272 if [ -e ${INSTALLDB}/${PKGNAME/-${ARCH}/} ]
273 then
274 echo -en "\n${COLRED}Package '${PKGNAME/-${ARCH}/}'" \
275 echo -e "already installed. Installation Aborted.${COLDEFAULT}\n"
276 exit 3
277 fi
278
279 xtitle "[ Installing ${PKGNAME/-${ARCH}/} ]"
280
281 if [ "${PKGTYPE}" == "virtual" ]
282 then
283 mage_install_virtual
284 return 0
285 fi
286
287 if [ "${PKGTYPE}" == "sources" ]
288 then
289 mage_install_sources
290 return 0
291 fi
292
293 if [ ! -e ${PKGDIR}/${PKGNAME}.${PKGSUFFIX} ]
294 then
295 echo -en "\nPrefetching needed Packages for "
296 echo -e "${COLGREEN}${PKGNAME/-${ARCH}/}${COLDEFAULT}...\n"
297 getpackages
298 fi
299
300 echo -e "\nInstallation of Package: ${COLGREEN}${PKGNAME/-${ARCH}/}${COLDEFAULT}\n"
301 #( build_unpackpkg ) | echo -e "Unpacking Package ...\n"
302
303 echo -en "Unpacking Package ..."
304 build_unpackpkg
305 echo "done"
306
307 ##preinstall scripte
308 export -f preinstall 2> /dev/null
309 if [ "$?" == "0" ]
310 then
311 echo -e "\nRunning Preinstall ... \n"
312 preinstall
313 unset preinstall
314 fi
315
316 #install of package
317 if [ "$VERBOSE" == "off" ]
318 then
319 #spinner disabled
320 #touch /var/tmp/proz
321 #build_doinstall|spin_processbar
322
323 echo -en "Processing ... "
324 build_doinstall ${PKGNAME}
325 echo "done"
326 fi
327
328 if [ "$VERBOSE" == "on" ]
329 then
330 #build_doinstall
331 build_doinstall ${PKGNAME}
332 fi
333
334 #postinstall scripte
335 export -f postinstall 2> /dev/null
336 if [ "$?" == "0" ]
337 then
338 echo -e "\nRunning Postinstall ... \n"
339 postinstall
340 unset postinstall
341 fi
342
343 #install database entry
344 install_database_entry ${PKGNAME}
345
346 #cleanup
347 if [ -d ${BUILDDIR}/${PKGNAME} ]
348 then
349 rm -rf ${BUILDDIR}/${PKGNAME}
350 fi
351
352
353 #check for virtuals and PROVIDE
354 # if so install it to virtualdb
355 register_virtual_pkg
356
357
358 #update mtimes of packages and db_entries
359 update_mtime
360
361 #rebuilds toplevel info node
362 echo -en "\n>>>> Rebuilding top-level info node ... "
363 ${MLIBDIR}/mkinfodir /usr/share/info > /usr/share/info/dir \
364 && echo "done" || echo "false"
365
366 #rebuilds the enviroment with the content of /etc/env.d
367 ${MLIBDIR}/env-rebuild.sh
368
369 xtitleclean
370
371 echo -e "\nPackage '${PKGNAME/-${ARCH}/}' sucessfully installed.\n"
372 }
373
374 mage_uninstall() {
375 # #installdbhome #packagedir #magefile
376 #source ${INSTALLDB}/$(basename ${MAGENAME} .mage)/$(basename ${MAGENAME})
377 #source ${INSTALLDB}/${CATEGORIE}/$(basename ${MAGENAME} .mage)/$(basename ${MAGENAME})
378
379 local UNINST_MAGEFILE CAT_PKGNAME
380
381 CAT_PKGNAME=$1
382
383 #trim pkgname from CAT_PKGNAME to get magefile name
384 UNINST_MAGEFILE="$(echo ${CAT_PKGNAME}| cut -d / -f2).mage"
385
386 #then source it
387 source ${INSTALLDB}/${CAT_PKGNAME}/${UNINST_MAGEFILE}
388
389 #fix for mage-0.3.6-r5
390 #PKGNAME=${PKGNAME/-${ARCH}/}
391 PKGNAME=${CAT_PKGNAME}
392
393 #if [ ! -e ${INSTALLDB}/${PKGNAME/-${ARCH}/} ]
394 if [ ! -e ${INSTALLDB}/${CAT_PKGNAME} ]
395 then
396 echo -e "\nPackage '${PKGNAME}' is not installed. Uninstallation Aborted.\n"
397 exit 3
398 fi
399
400 echo -e "\nUninstall of Package:\t${COLRED}${PKGNAME}${COLDEFAULT}\n"
401
402 if [ -z "${MAGE_UNINSTALL_TIMEOUT}" ]
403 then
404 MAGE_UNINSTALL_TIMEOUT=5
405 fi
406
407 for ((i=0; i < MAGE_UNINSTALL_TIMEOUT; i++))
408 do
409 timeout=$(expr ${MAGE_UNINSTALL_TIMEOUT} - ${i})
410 echo -e "Starting in ${COLRED} ${timeout}" \
411 "${COLDEFAULT} seconds ... ( [CTRL+C] to abort )"
412 sleep 1
413 #moves the cursor up
414 echo -en \\033[A
415 done
416
417 #moves the cursor up
418 echo -en \\033[A
419 #min. 30 spaces needed for clearing up the rest of the line
420 echo -e "\nUninstall ${COLRED}started${COLDEFAULT} ..." \
421 " \n"
422 sleep 1
423
424
425 ##preremove scripte
426 export -f preremove 2> /dev/null
427 if [ "$?" == "0" ]
428 then
429 echo -e "\nRunning Preremove ... \n"
430 preremove
431 unset preremove
432 fi
433
434 #runs uninstall
435 build_douninstall ${PKGNAME}
436
437 #postremove scripte
438 export -f postremove 2> /dev/null
439 if [ "$?" == "0" ]
440 then
441 echo -e "\nRunning Postremove ... \n"
442 postremove
443 unset postremove
444 fi
445
446 #remove database entry
447 remove_database_entry ${PKGNAME}
448
449 #check for PROVIDE
450 # if so uninstall it from virtualdb
451 unregister_virtual_pkg
452
453 #rebuilds toplevel info node
454 echo -en "\n>>>> Rebuilding top-level info node ... "
455 ${MLIBDIR}/mkinfodir /usr/share/info > /usr/share/info/dir \
456 && echo "done" || echo "false"
457
458 #rebuilds the enviroment with the content of /etc/env.d
459 ${MLIBDIR}/env-rebuild.sh
460
461 echo -e "\nPackage '${PKGNAME}' sucessfully removed.\n"
462 }
463
464
465 case "$1" in
466 download)
467 choppkgname
468 getcategorie
469 get_highest_magefile || exit 1
470 source ${MAGEFILE}
471 getpackages
472 ;;
473
474 pretend)
475 choppkgname
476 getcategorie
477 get_highest_magefile || exit 1
478 ${MLIBDIR}/depwanderer.sh pretend ${MAGEFILE}
479 #abort already installed
480 if [ "$?" == "3" ]
481 then
482 echo -en "Package "
483 echo -en "${COLRED}$(basename ${MAGEFILE} .mage)${COLDEFAULT}"
484 echo -e " already installed."
485 fi
486 ;;
487
488 srcpretend)
489 choppkgname
490 getcategorie
491 get_highest_magefile || exit 1
492 ${MLIBDIR}/depwanderer.sh srcpretend ${MAGEFILE}
493 #abort already installed
494 if [ "$?" == "3" ]
495 then
496 echo -en "Package "
497 echo -en "${COLRED}$(basename ${MAGEFILE} .mage)${COLDEFAULT}"
498 echo -e " already installed."
499 fi
500 ;;
501
502 install)
503 #counter for protected files
504 declare -i PROTECT_COUNT=0
505 choppkgname
506 getcategorie
507 get_highest_magefile || exit 1
508 ALLDEPS="$(/usr/lib/mage/depwanderer.sh install ${MAGEFILE})"
509 #abort already installed
510 if [ "$?" == "3" ]
511 then
512 echo -en "Package "
513 echo -en "${COLRED}$(basename ${MAGEFILE} .mage)${COLDEFAULT}"
514 echo -e " already installed."
515 echo -e "Installation aborted."
516 exit 0
517 fi
518 for i in ${ALLDEPS}
519 do
520 #first unset all vars to be safe
521 unset PKGNAME
522 unset STATE
523 unset DESCRIPTION
524 unset HOMEPAGE
525 unset DEPEND
526 unset SDEPEND
527 unset PROVIDE
528 unset PKGTYPE
529 unset preinstall
530 unset postinstall
531
532 #then source an evtl new generated profile
533 [ -e /etc/profile ] && source /etc/profile
534
535 #than install
536 MY_CAT_FIX="$(dirname ${i})"
537 CATEGORIE="$(basename ${MY_CAT_FIX%/*})"
538 mage_install ${i}
539 done
540 run_etc_update
541 ;;
542
543 srcinstall)
544 #counter for protected files
545 declare -i PROTECT_COUNT=0
546 choppkgname
547 getcategorie
548 get_highest_magefile || exit 1
549 ALLDEPS="$(/usr/lib/mage/depwanderer.sh srcinstall ${MAGEFILE})"
550 #abort already installed
551 if [ "$?" == "3" ]
552 then
553 echo -en "Package "
554 echo -en "${COLRED}$(basename ${MAGEFILE} .mage)${COLDEFAULT}"
555 echo -e " already installed."
556 echo -e "Installation aborted."
557 exit 0
558 fi
559 for i in ${ALLDEPS}
560 do
561 #first unset all vars to be safe
562 unset PKGNAME
563 unset STATE
564 unset DESCRIPTION
565 unset HOMEPAGE
566 unset DEPEND
567 unset SDEPEND
568 unset PROVIDE
569 unset PKGTYPE
570 unset preinstall
571 unset postinstall
572
573 #then source an evtl new generated profile
574 [ -e /etc/profile ] && source /etc/profile
575
576 #than srcinstall
577 MY_CAT_FIX="$(dirname ${i})"
578 CATEGORIE="$(basename ${MY_CAT_FIX%/*})"
579 #builds the package from source
580 ${MLIBDIR}/sourceinstall.sh ${i} || exit 1
581 done
582 run_etc_update
583 ;;
584
585 uninstall)
586 RESULT=$(get_magefile_to_uninstall ${MAGENAME})
587 #get_magefile_to_uninstall ${MAGENAME}
588 #echo $?
589 #read
590 case $? in
591 0)
592 #MAGENAME=${RESULT}
593 #mage_uninstall
594 mage_uninstall ${RESULT}
595 ;;
596 1)
597 echo "No package found named '${RESULT}'."
598 exit 1
599 ;;
600 2)
601 echo -e ${COLRED}"Warning: More than one package found ..."${COLDEFAULT}
602 echo
603 echo "Please select the package you want to uninstall:"
604 echo
605 declare -i i=0
606 declare -i USERSEL=0
607 for x in ${RESULT}
608 do
609 echo -e "\t${COLBLUE}[${i}] ${COLGREEN}$(basename ${x})${COLDEFAULT}"
610 SELECTION[${i}]=${x}
611 i=${i}+1
612 done
613 echo
614 echo -n "Choose a number: "
615 read USERSEL
616
617 if [ ${USERSEL} -ge 0 -a ${USERSEL} -le ${i} ]
618 then
619 #the correct magefile
620 #MAGENAME="${SELECTION[${USERSEL}]}/$(basename ${SELECTION[${USERSEL}]}).mage"
621 MAGENAME="${SELECTION[${USERSEL}]}"
622 mage_uninstall ${MAGENAME}
623 else
624 echo "Wrong input. Uninstall abortet ..."
625 exit 1
626 fi
627 #echo
628 #echo "Uninstallation Aborted."
629 #exit 1
630 ;;
631 esac
632 ;;
633
634 search)
635 ${MLIBDIR}/pkgsearch.sh ${MAGENAME}
636 ;;
637
638 unpack)
639 build_unpackpkg
640 ;;
641
642 update)
643 syncmage
644 ;;
645 clean)
646 cleanpkg
647 ;;
648 keepfiles)
649 keepfiles "$2" "$3"
650 ;;
651 inject)
652 injectpkg "$2"
653 ;;
654 reminjected)
655 reminjected
656 ;;
657 version)
658 showversion
659 ;;
660 *)
661 print_usage
662 ;;
663 esac

Properties

Name Value
svn:executable *