Contents of /trunk/mage/usr/lib/mage/mage3.functions.sh
Parent Directory | Revision Log
Revision 178 -
(show annotations)
(download)
(as text)
Sun Jul 31 15:28:53 2005 UTC (18 years, 9 months ago) by niro
File MIME type: application/x-sh
File size: 31013 byte(s)
Sun Jul 31 15:28:53 2005 UTC (18 years, 9 months ago) by niro
File MIME type: application/x-sh
File size: 31013 byte(s)
minclude: only verbose when MAGEDBUG=on
1 | #!/bin/bash |
2 | # Magellan Linux Installer Functions (mage.functions.sh) |
3 | # $Header: /home/cvsd/magellan-cvs/magellan-src/mage/usr/lib/mage/mage3.functions.sh,v 1.14 2005-07-31 15:28:53 niro Exp $ |
4 | |
5 | mage_setup() { |
6 | install -d $INSTALLDB |
7 | } |
8 | |
9 | fatal_error() { |
10 | #$1 is the missing file |
11 | echo -e "\nFatal Error: Package seemed to be corrupt." |
12 | echo -e "$1 was not found in ${PKGNAME}" |
13 | exit 1 |
14 | } |
15 | |
16 | build_unpackpkg() { |
17 | tar xjmf ${PKGDIR}/${PKGNAME}.${PKGSUFFIX} -C ${BUILDDIR} |
18 | } |
19 | |
20 | update_mtime() { |
21 | local M_MTIME |
22 | DB_ENTRY=${INSTALLDB}/${CATEGORIE}/${PKGNAME/-${ARCH}/} |
23 | |
24 | #forcing mtime to same value |
25 | echo |
26 | echo -n ">>>> Forcing mtime to the same value ..." |
27 | #find ${BUILDDIR}/${PKGNAME}/binfiles \ |
28 | # -exec touch -m -r ${BUILDDIR}/${PKGNAME}/.mtime '{}' ';' \ |
29 | # && echo done || echo false |
30 | |
31 | |
32 | #get new M_MTIME from .mtime |
33 | M_MTIME=$(stat -c %Y ${DB_ENTRY}/.mtime) |
34 | |
35 | #updating .files db entries; only if not empty, or they get killed |
36 | if [ -e "${DB_ENTRY}/.files" ] |
37 | then |
38 | if [ -n "$(cat ${DB_ENTRY}/.files)" ] |
39 | then |
40 | #make backup |
41 | mv ${DB_ENTRY}/.files \ |
42 | ${DB_ENTRY}/.files-old |
43 | |
44 | #sets fieldseperator to "§" instead of " " |
45 | IFS=§ |
46 | |
47 | #update |
48 | while read pathto posix user group mtime md5sum |
49 | do |
50 | echo "${pathto}§${posix}§${user}§${group}§${M_MTIME}§${md5sum}" \ |
51 | >> ${DB_ENTRY}/.files |
52 | touch -c -m -r ${DB_ENTRY}/.mtime ${pathto} |
53 | done < ${DB_ENTRY}/.files-old |
54 | |
55 | #remove old list |
56 | rm -f ${DB_ENTRY}/.files-old |
57 | |
58 | #very important: unsetting the '§' fieldseperator |
59 | unset IFS |
60 | fi |
61 | else |
62 | fatal_error .files |
63 | fi |
64 | |
65 | |
66 | #updating .symlink db entries; only if not empty, or they get killed |
67 | if [ -e "${DB_ENTRY}/.symlinks" ] |
68 | then |
69 | if [ -n "$(cat ${DB_ENTRY}/.symlinks)" ] |
70 | then |
71 | #make backup |
72 | mv ${DB_ENTRY}/.symlinks \ |
73 | ${DB_ENTRY}/.symlinks-old |
74 | |
75 | #sets fieldseperator to "§" instead of " " |
76 | IFS=§ |
77 | |
78 | #update |
79 | while read pathto posix link mtime |
80 | do |
81 | echo "${pathto}§${posix}§${link}§${M_MTIME}" \ |
82 | >> ${DB_ENTRY}/.symlinks |
83 | touch -c -m -r ${DB_ENTRY}/.mtime ${pathto} |
84 | done < ${DB_ENTRY}/.symlinks-old |
85 | |
86 | #remove old list |
87 | rm -f ${DB_ENTRY}/.symlinks-old |
88 | |
89 | #very important: unsetting the '§' fieldseperator |
90 | unset IFS |
91 | fi |
92 | else |
93 | fatal_error .symlinks |
94 | fi |
95 | } |
96 | |
97 | ################################################### |
98 | # function install_direcories # |
99 | # install_direcories $PKGNAME # |
100 | ################################################### |
101 | install_directories() { |
102 | local PKGNAME |
103 | PKGNAME=$1 |
104 | |
105 | if [ -e ${BUILDDIR}/${PKGNAME}/.dirs ] |
106 | then |
107 | |
108 | #sets fieldseperator to "§" instead of " " |
109 | IFS=§ |
110 | |
111 | while read pathto posix user group |
112 | do |
113 | if [ ! -z "$pathto" ] |
114 | then |
115 | if [ "$VERBOSE" == "on" ] |
116 | then |
117 | echo -e "\t>>> DIR: $pathto" |
118 | fi |
119 | install -m $posix -o $user -g $group -d "$pathto" |
120 | fi |
121 | done < ${BUILDDIR}/${PKGNAME}/.dirs |
122 | |
123 | #very important: unsetting the '§' fieldseperator |
124 | unset IFS |
125 | else |
126 | fatal_error .dir |
127 | fi |
128 | } |
129 | |
130 | |
131 | ################################################### |
132 | # function install_files # |
133 | # install_files $PKGNAME # |
134 | ################################################### |
135 | install_files(){ |
136 | local PKGNAME |
137 | local RETVAL |
138 | local COUNTER |
139 | local FILENAME |
140 | local DESTINATION |
141 | |
142 | PKGNAME=$1 |
143 | |
144 | if [ -e ${BUILDDIR}/${PKGNAME}/.files ] |
145 | then |
146 | #sets fieldseperator to "§" instead of " " |
147 | IFS=§ |
148 | |
149 | while read pathto posix user group mtime md5sum |
150 | do |
151 | if [ ! -z "${pathto}" ] |
152 | then |
153 | if [ "${VERBOSE}" == "on" ] |
154 | then |
155 | echo -e "\t>>> FILE: ${pathto}" |
156 | fi |
157 | ### kleiner notfall fix ### |
158 | if [ ! -d "$(dirname "${pathto}")" ] |
159 | then |
160 | install -d "$(dirname "${pathto}")" |
161 | fi |
162 | |
163 | #when file exists, check if protected |
164 | if [ -e "${pathto}" ] |
165 | then |
166 | is_config_protected "${pathto}" |
167 | RETVAL=$? |
168 | |
169 | # 0 - not protected # |
170 | # 1 - error # |
171 | # 2 - protected # |
172 | # 3 - protected but masked # |
173 | |
174 | case ${RETVAL} in |
175 | #file is not protected - overwrite it |
176 | 0|3) |
177 | FILE="$pathto" |
178 | install -m ${posix} -o ${user} -g ${group} \ |
179 | ${BUILDDIR}/${PKGNAME}/binfiles/"$FILE" \ |
180 | "$pathto" |
181 | ;; |
182 | |
183 | #file is protected - write backup file |
184 | # "._cfg${COUNTER}_{FILENAME} |
185 | 2) |
186 | #moves the cursor up |
187 | echo -en \\033[A |
188 | echo -e "${COLRED}! prot ${COLDEFAULT} === FILE: $pathto" |
189 | FILENAME="$(basename "${pathto}")" |
190 | FILE="$pathto" |
191 | COUNTER=$(count_protected_files "${FILE}") |
192 | DESTINATION="$(dirname "$pathto")/._cfg${COUNTER}_${FILENAME}" |
193 | install -m ${posix} -o ${user} -g ${group} \ |
194 | ${BUILDDIR}/${PKGNAME}/binfiles/"$FILE" \ |
195 | "${DESTINATION}" |
196 | |
197 | #set run_etc_update=true |
198 | PROTECT_COUNT=${PROTECT_COUNT}+1 |
199 | ;; |
200 | esac |
201 | else |
202 | #install file because it does not exists |
203 | FILE="$pathto" |
204 | install -m ${posix} -o ${user} -g ${group} \ |
205 | ${BUILDDIR}/${PKGNAME}/binfiles/$FILE \ |
206 | "$pathto" |
207 | fi |
208 | |
209 | #not needed anymore ? |
210 | #if [ ! -z $user ] |
211 | #then |
212 | # chown $user:$group $FILE ### <---- test |
213 | #fi |
214 | fi |
215 | done < ${BUILDDIR}/${PKGNAME}/.files |
216 | |
217 | #very important: unsetting the '§' fieldseperator |
218 | unset IFS |
219 | else |
220 | fatal_error .files |
221 | fi |
222 | } |
223 | |
224 | |
225 | ################################################### |
226 | # function install_symlinks # |
227 | # install_symlinks $PKGNAME # |
228 | ################################################### |
229 | install_symlinks() { |
230 | local PKGNAME |
231 | PKGNAME=$1 |
232 | |
233 | if [ -e ${BUILDDIR}/${PKGNAME}/.symlinks ] |
234 | then |
235 | #sets fieldseperator to "§" instead of " " |
236 | IFS=§ |
237 | |
238 | while read pathto posix link mtime |
239 | do |
240 | if [ ! -z "$pathto" ] |
241 | then |
242 | if [ "$VERBOSE" == "on" ] |
243 | then |
244 | echo -e "\t>>> LINK: $pathto" |
245 | fi |
246 | ln -snf $link "$pathto" |
247 | fi |
248 | done < ${BUILDDIR}/${PKGNAME}/.symlinks |
249 | |
250 | #very important: unsetting the '§' fieldseperator |
251 | unset IFS |
252 | else |
253 | fatal_error .symlinks |
254 | fi |
255 | } |
256 | |
257 | |
258 | ################################################### |
259 | # function install_blockdevices # |
260 | # install_blockdevices $PKGNAME # |
261 | ################################################### |
262 | install_blockdevices() { |
263 | local PKGNAME |
264 | PKGNAME=$1 |
265 | |
266 | if [ -e ${BUILDDIR}/${PKGNAME}/.pipes ] |
267 | then |
268 | #sets fieldseperator to "§" instead of " " |
269 | IFS=§ |
270 | |
271 | while read pathto posix |
272 | do |
273 | if [ ! -z "$pathto" ] |
274 | then |
275 | if [ "$VERBOSE" == "on" ] |
276 | then |
277 | echo -e "\t>>> PIPE: $pathto" |
278 | fi |
279 | mkfifo -m $posix "$pathto" |
280 | fi |
281 | done < ${BUILDDIR}/${PKGNAME}/.pipes |
282 | |
283 | #very important: unsetting the '§' fieldseperator |
284 | unset IFS |
285 | else |
286 | fatal_error .pipes |
287 | fi |
288 | } |
289 | |
290 | |
291 | ################################################### |
292 | # function install_characterdevices # |
293 | # install_characterdevices $PKGNAME # |
294 | ################################################### |
295 | install_characterdevices() { |
296 | local PKGNAME |
297 | PKGNAME=$1 |
298 | |
299 | if [ -e ${BUILDDIR}/${PKGNAME}/.char ] |
300 | then |
301 | #sets fieldseperator to "§" instead of " " |
302 | IFS=§ |
303 | |
304 | while read pathto posix |
305 | do |
306 | if [ ! -z "$pathto" ] |
307 | then |
308 | if [ "$VERBOSE" == "on" ] |
309 | then |
310 | echo -e "\t>>> CHAR: $pathto" |
311 | fi |
312 | mknode -m $posix -c "$pathto" |
313 | fi |
314 | done < ${BUILDDIR}/${PKGNAME}/.char |
315 | |
316 | #very important: unsetting the '§' fieldseperator |
317 | unset IFS |
318 | else |
319 | fatal_error .char |
320 | fi |
321 | |
322 | #very important: unsetting the '§' fieldseperator |
323 | unset IFS |
324 | } |
325 | |
326 | |
327 | ################################################### |
328 | # function build_doinstall # |
329 | # build_doinstall $PKGNAME # |
330 | # NOTE: this is an wrapper do install packages # |
331 | ################################################### |
332 | build_doinstall() { |
333 | #this is only a wrapper |
334 | |
335 | # NOTE: |
336 | # !! we use § as field seperator !! |
337 | # doing so prevent us to get errors by filenames with spaces |
338 | |
339 | local PKGNAME |
340 | PKGNAME=$1 |
341 | |
342 | install_directories ${PKGNAME} |
343 | install_files ${PKGNAME} |
344 | install_symlinks ${PKGNAME} |
345 | install_blockdevices ${PKGNAME} |
346 | install_characterdevices ${PKGNAME} |
347 | } |
348 | |
349 | |
350 | ################################################### |
351 | # function install_database_entry # |
352 | # install_database_entry $PKGNAME $PKGTYPE # |
353 | # PKGTYPE can be "virtual", "sources" or nothing # |
354 | ################################################### |
355 | install_database_entry(){ |
356 | local PKGNAME |
357 | local PKGTYPE |
358 | |
359 | PKGNAME=$1 |
360 | PKGTYPE=$2 |
361 | |
362 | #add package to database |
363 | install -d ${INSTALLDB}/${CATEGORIE}/${PKGNAME/-${ARCH}/} |
364 | |
365 | #install mage-file to database |
366 | install -m 0644 -o root -g root \ |
367 | ${MAGEFILE} \ |
368 | ${INSTALLDB}/${CATEGORIE}/${PKGNAME/-${ARCH}/} |
369 | |
370 | # create fake file descriptors |
371 | # used by virtual and source packages |
372 | touch ${INSTALLDB}/${CATEGORIE}/${PKGNAME/-${ARCH}/}/.dirs |
373 | touch ${INSTALLDB}/${CATEGORIE}/${PKGNAME/-${ARCH}/}/.symlinks |
374 | touch ${INSTALLDB}/${CATEGORIE}/${PKGNAME/-${ARCH}/}/.files |
375 | touch ${INSTALLDB}/${CATEGORIE}/${PKGNAME/-${ARCH}/}/.pipes |
376 | touch ${INSTALLDB}/${CATEGORIE}/${PKGNAME/-${ARCH}/}/.char |
377 | touch ${INSTALLDB}/${CATEGORIE}/${PKGNAME/-${ARCH}/}/.mtime |
378 | |
379 | #put category to database |
380 | echo ${CATEGORIE} > ${INSTALLDB}/${CATEGORIE}/${PKGNAME/-${ARCH}/}/.categorie |
381 | |
382 | #install PKGTYPE specific files |
383 | case ${PKGTYPE} in |
384 | virtual) |
385 | touch ${INSTALLDB}/${CATEGORIE}/${PKGNAME/-${ARCH}/}/.virtual |
386 | ;; |
387 | |
388 | sources) |
389 | touch ${INSTALLDB}/${CATEGORIE}/${PKGNAME/-${ARCH}/}/.sources |
390 | ;; |
391 | |
392 | *) |
393 | # normal packages needs these files |
394 | cp -f ${BUILDDIR}/${PKGNAME}/.{char,dirs,files,pipes,symlinks,mtime} \ |
395 | ${INSTALLDB}/${CATEGORIE}/${PKGNAME/-${ARCH}/} |
396 | ;; |
397 | esac |
398 | } |
399 | |
400 | |
401 | ################################################### |
402 | # function remove_database_entry # |
403 | # remove_database_entry $PKGNAME $PKGTYPE # |
404 | # PKGTYPE can be "virtual", "sources" or nothing # |
405 | ################################################### |
406 | remove_database_entry(){ |
407 | local PKGNAME |
408 | local PKGTYPE |
409 | |
410 | PKGNAME=$1 |
411 | PKGTYPE=$2 |
412 | |
413 | #removes database entry |
414 | if [ -d ${INSTALLDB}/${PKGNAME} ] |
415 | then |
416 | rm -rf ${INSTALLDB}/${PKGNAME} |
417 | fi |
418 | } |
419 | |
420 | |
421 | ################################################### |
422 | # function compare_mtime # |
423 | # compare_mtime $PKGNAME /path/to/file # |
424 | # # |
425 | # returns: # |
426 | # 0=delete me # |
427 | # 1=keep me # |
428 | # # |
429 | # compares mtime of given files in packages # |
430 | ################################################### |
431 | compare_mtime(){ |
432 | local DBDIR |
433 | local pathto |
434 | local x |
435 | |
436 | DBDIR=$1 |
437 | pathto=$2 |
438 | |
439 | M_MTIME=$(stat -c %Y ${INSTALLDB}/${DBDIR}/.mtime) |
440 | |
441 | #if $pathto is a symlink than compare linked binary |
442 | if [ -L ${pathto} ] |
443 | then |
444 | #readlink -f resolves full path of linked file |
445 | x=$(stat -c %Y "$(readlink -f "${pathto}")") |
446 | else |
447 | x=$(stat -c %Y "${pathto}") |
448 | fi |
449 | |
450 | if [ "${M_MTIME}" -eq "${x}" ] |
451 | then |
452 | #echo "delete me: ${pathto}" |
453 | return 0 |
454 | else |
455 | #echo "keep me : ${pathto}" |
456 | return 1 |
457 | fi |
458 | } |
459 | |
460 | |
461 | ################################################### |
462 | # function remove_symlinks # |
463 | # remove_symlinks $PKGNAME # |
464 | ################################################### |
465 | remove_symlinks() { |
466 | local PKGNAME |
467 | local RETVAL |
468 | |
469 | PKGNAME=$1 |
470 | |
471 | if [ -e ${INSTALLDB}/${PKGNAME}/.symlinks ] |
472 | then |
473 | #sets fieldseperator to "§" instead of " " |
474 | IFS=§ |
475 | |
476 | while read pathto posix link mtime |
477 | do |
478 | if [ ! -z "$pathto" ] |
479 | then |
480 | if [ -L "$pathto" ] |
481 | then |
482 | compare_mtime ${PKGNAME} "${pathto}" |
483 | RETVAL=$? |
484 | # 0=delete me # |
485 | # 1=keep me # |
486 | case ${RETVAL} in |
487 | 0) |
488 | echo -e "\t<<< LINK: $pathto" |
489 | rm "$pathto" |
490 | ;; |
491 | 1) |
492 | echo -e "${COLRED}! mtime${COLDEFAULT} === LINK: $pathto" |
493 | ;; |
494 | esac |
495 | else |
496 | echo -e "${COLRED}! exist${COLDEFAULT} === LINK: $pathto" |
497 | fi |
498 | fi |
499 | done < ${INSTALLDB}/${PKGNAME}/.symlinks |
500 | |
501 | #very important: unsetting the '§' fieldseperator |
502 | unset IFS |
503 | else |
504 | fatal_error .symlinks |
505 | fi |
506 | } |
507 | |
508 | |
509 | ################################################### |
510 | # function remove_files # |
511 | # remove_files $PKGNAME # |
512 | ################################################### |
513 | remove_files() { |
514 | local PKGNAME |
515 | local RETVAL |
516 | |
517 | PKGNAME=$1 |
518 | |
519 | #uninstall of files |
520 | if [ -e ${INSTALLDB}/${PKGNAME}/.files ] |
521 | then |
522 | #sets fieldseperator to "§" instead of " " |
523 | IFS=§ |
524 | |
525 | while read pathto posix user group mtime md5sum |
526 | do |
527 | if [ ! -z "$pathto" ] |
528 | then |
529 | if [ -e "$pathto" ] |
530 | then |
531 | compare_mtime ${PKGNAME} "${pathto}" |
532 | RETVAL=$? |
533 | # 0=delete me # |
534 | # 1=keep me # |
535 | case ${RETVAL} in |
536 | 0) |
537 | echo -e "\t<<< FILE: $pathto" |
538 | rm "$pathto" |
539 | ;; |
540 | 1) |
541 | echo -e "${COLRED}! mtime${COLDEFAULT} === FILE: $pathto" |
542 | ;; |
543 | esac |
544 | else |
545 | echo -e "${COLRED}! exist${COLDEFAULT} === FILE: $pathto" |
546 | fi |
547 | fi |
548 | done < ${INSTALLDB}/${PKGNAME}/.files |
549 | |
550 | #very important: unsetting the '§' fieldseperator |
551 | unset IFS |
552 | else |
553 | fatal_error .files |
554 | fi |
555 | } |
556 | |
557 | |
558 | ################################################### |
559 | # function remove_blockdevices # |
560 | # remove_blockdevices $PKGNAME # |
561 | ################################################### |
562 | remove_blockdevices() { |
563 | local PKGNAME |
564 | PKGNAME=$1 |
565 | |
566 | if [ -e ${INSTALLDB}/${PKGNAME}/.pipes ] |
567 | then |
568 | #sets fieldseperator to "§" instead of " " |
569 | IFS=§ |
570 | |
571 | while read pathto posix |
572 | do |
573 | if [ ! -z "$pathto" ] |
574 | then |
575 | echo -e "\t<<< PIPE: $pathto" |
576 | rm "$pathto" |
577 | fi |
578 | done < ${INSTALLDB}/${PKGNAME}/.pipes |
579 | |
580 | #very important: unsetting the '§' fieldseperator |
581 | unset IFS |
582 | else |
583 | fatal_error .pipes |
584 | fi |
585 | } |
586 | |
587 | |
588 | ################################################### |
589 | # function remove_characterdevices # |
590 | # remove_characterdevices $PKGNAME # |
591 | ################################################### |
592 | remove_characterdevices() { |
593 | local PKGNAME |
594 | PKGNAME=$1 |
595 | |
596 | if [ -e ${INSTALLDB}/${PKGNAME}/.char ] |
597 | then |
598 | #sets fieldseperator to "§" instead of " " |
599 | IFS=§ |
600 | |
601 | while read pathto posix |
602 | do |
603 | if [ ! -z "$pathto" ] |
604 | then |
605 | echo -e "\t<<< CHAR: $pathto" |
606 | rm "$pathto" |
607 | fi |
608 | done < ${INSTALLDB}/${PKGNAME}/.char |
609 | |
610 | #very important: unsetting the '§' fieldseperator |
611 | unset IFS |
612 | else |
613 | fatal_error .char |
614 | fi |
615 | } |
616 | |
617 | |
618 | ################################################### |
619 | # function remove_direcories # |
620 | # remove_direcories $PKGNAME # |
621 | ################################################### |
622 | remove_directories() { |
623 | local PKGNAME |
624 | PKGNAME=$1 |
625 | |
626 | #uninstall of dirs ## added small hack to fix dirs |
627 | # must be reverse -> smage2 doesn't sort them |
628 | if [ -e ${INSTALLDB}/${PKGNAME}/.dirs ] |
629 | then |
630 | |
631 | #sort directory order |
632 | mv ${INSTALLDB}/${PKGNAME}/.dirs ${INSTALLDB}/${PKGNAME}/.dirs_old |
633 | cat ${INSTALLDB}/${PKGNAME}/.dirs_old | sort > ${INSTALLDB}/${PKGNAME}/.dirs |
634 | |
635 | #sets fieldseperator to "§" instead of " " |
636 | IFS=§ |
637 | |
638 | while read pathto posix |
639 | do |
640 | if [ ! -z "$pathto" ] |
641 | then |
642 | if [ -e "$pathto" ] |
643 | then |
644 | echo -e "\t<<< DIR: $pathto" |
645 | rmdir "$pathto" &> /dev/null |
646 | if [ "$?" -ne "0" ] |
647 | then |
648 | #moves the cursor up |
649 | echo -en \\033[A |
650 | echo -e "${COLRED}! empty${COLDEFAULT} === DIR: $pathto" |
651 | fi |
652 | else |
653 | echo -e "${COLRED}! exist${COLDEFAULT} === DIR: $pathto" |
654 | fi |
655 | fi |
656 | done < ${INSTALLDB}/${PKGNAME}/.dirs |
657 | |
658 | #very important: unsetting the '§' fieldseperator |
659 | unset IFS |
660 | else |
661 | fatal_error .dirs |
662 | fi |
663 | } |
664 | |
665 | |
666 | ################################################### |
667 | # function build_douninstall # |
668 | # build_douninstall $PKGNAME # |
669 | # NOTE: this is an wrapper do remove packages # |
670 | ################################################### |
671 | build_douninstall() { |
672 | #this is only a wrapper |
673 | |
674 | # NOTE: |
675 | # !! we use § as field seperator !! |
676 | # doing so prevent us to get errors by filenames with spaces |
677 | |
678 | local PKGNAME |
679 | PKGNAME=$1 |
680 | |
681 | remove_symlinks ${PKGNAME} |
682 | remove_files ${PKGNAME} |
683 | remove_blockdevices ${PKGNAME} |
684 | remove_characterdevices ${PKGNAME} |
685 | remove_directories ${PKGNAME} |
686 | } |
687 | |
688 | getpackages() { |
689 | if [ -z "$MIRRORS" ] |
690 | then |
691 | echo "You have no mirrors defined. Please edit your /etc/mage.rc." |
692 | exit 1 |
693 | fi |
694 | |
695 | local i |
696 | for i in $MIRRORS |
697 | do |
698 | wget \ |
699 | --passive-ftp \ |
700 | --tries 3 \ |
701 | --continue \ |
702 | --progress bar \ |
703 | --directory-prefix=${PKGDIR} \ |
704 | ${i}/packages/${PKGNAME}.${PKGSUFFIX} |
705 | if [ "$?" == "0" ] |
706 | then |
707 | break |
708 | else |
709 | continue |
710 | fi |
711 | done |
712 | } |
713 | |
714 | syncmage() { |
715 | if [ -z "$RSYNC" ] |
716 | then |
717 | echo "You have no rsync-mirrors defined. Please edit your /etc/mage.rc." |
718 | exit 1 |
719 | fi |
720 | |
721 | local i |
722 | for i in $RSYNC |
723 | do |
724 | rsync \ |
725 | --recursive \ |
726 | --links \ |
727 | --perms \ |
728 | --times \ |
729 | --devices \ |
730 | --timeout=600 \ |
731 | --verbose \ |
732 | --compress \ |
733 | --progress \ |
734 | --stats \ |
735 | --delete \ |
736 | --delete-after \ |
737 | $i $MAGEDIR |
738 | if [ "$?" == "0" ] |
739 | then |
740 | break |
741 | else |
742 | continue |
743 | fi |
744 | done |
745 | |
746 | #clean up backup files (foo~) |
747 | find ${MAGEDIR} -name *~ -exec rm '{}' ';' |
748 | |
749 | # check if an newer mage version is available |
750 | is_newer_mage_version_available |
751 | } |
752 | |
753 | cleanpkg(){ |
754 | if [ -d "$PKGDIR" ] |
755 | then |
756 | echo -n "Removing downloaded packages... " |
757 | rm -rf ${PKGDIR}/* |
758 | echo "done." |
759 | fi |
760 | } |
761 | |
762 | ################################################### |
763 | # function keepfiles # |
764 | # keepfiles "$CATEGORIE/$PNAME" "$filename" # |
765 | # note wildchars allowed # |
766 | ################################################### |
767 | keepfiles() { |
768 | local name |
769 | local keep |
770 | name="`echo $1| cut -d '/' -f2`" |
771 | keep="$2" |
772 | |
773 | DELPKG="`find ${INSTALLDB} -name ${name}*.mage`" |
774 | DELDIR="${INSTALLDB}/$(basename ${DELPKG} .mage)" |
775 | cp ${DELDIR}/.files ${DELDIR}/.files-orig |
776 | sed "s:${keep}::" \ |
777 | ${DELDIR}/.files-orig > ${DELDIR}/.files |
778 | rm ${DELDIR}/.files-orig |
779 | } |
780 | |
781 | |
782 | ################################################### |
783 | # function injectpkg # |
784 | # injectpkg "$CATEGORIE/$PNAME" # |
785 | # note wildchars allowed # |
786 | ################################################### |
787 | injectpkg() { |
788 | local name |
789 | local categorie |
790 | local magename |
791 | name="`echo $1| cut -d '/' -f2`" |
792 | categorie="`echo $1| cut -d '/' -f1`" |
793 | |
794 | INJPKG="`find ${MAGEDIR} -name ${name}-*.mage`" |
795 | for i in ${INJPKG} |
796 | do |
797 | magename="$(basename ${INJPKG} .mage)" |
798 | echo -e "Injecting fake package for ${COLBLUE}${categorie}${COLDEFAULT}/${COLGREEN}${magename}${COLDEFAULT}" |
799 | install -d ${INSTALLDB}/${magename} |
800 | touch ${INSTALLDB}/${magename}/{.injected,.files,.dirs,.symlinks,.pipes,.char} |
801 | |
802 | #installs magefile |
803 | install -m 0644 -o root -g root \ |
804 | ${MAGEDIR}/${categorie}/${magename}.mage \ |
805 | ${INSTALLDB}/${magename} |
806 | done |
807 | } |
808 | |
809 | ################################################### |
810 | # function reminjected # |
811 | # reminjected # |
812 | # note: removes all injected packages # |
813 | ################################################### |
814 | reminjected() { |
815 | DELINJ="`find ${INSTALLDB} -name .injected`" |
816 | for i in ${DELINJ} |
817 | do |
818 | magename=$(dirname ${i}) |
819 | if [ -d "${magename}" ] |
820 | then |
821 | # small fix to protect the mage-db deleting itself, that is not so funny :) |
822 | if [ "${magename}" != "${INSTALLDB}" ] |
823 | then |
824 | echo -e "removing fake package ${COLRED}${magename#${INSTALLDB}/*}${COLDEFAULT}" |
825 | rm -rf ${magename} |
826 | fi |
827 | fi |
828 | done |
829 | } |
830 | |
831 | |
832 | xtitle() { |
833 | if [ ${TERM} == "xterm" ] |
834 | then |
835 | echo -ne "\033]0;Mage: $1\007" |
836 | fi |
837 | return 0 |
838 | } |
839 | |
840 | |
841 | xtitleclean() { |
842 | if [ ${TERM} == "xterm" ] |
843 | then |
844 | echo -ne "\033]0;\007" |
845 | fi |
846 | return 0 |
847 | } |
848 | |
849 | |
850 | spin_processbar() { |
851 | |
852 | # does not works as it should -- disabled |
853 | # you musst add and remove a tempfile outside this funktion |
854 | # to leave this funktion ... |
855 | |
856 | # before you call this function do this: |
857 | # |
858 | # touch /var/tmp/proz |
859 | # build_doinstall|spin_processbar |
860 | |
861 | echo -en "Processing: " |
862 | while [ -f /var/tmp/proz ] |
863 | do |
864 | echo -en "-\b" |
865 | sleep 0.01 |
866 | echo -en "\\ \b\b" |
867 | sleep 0.01 |
868 | echo -en "|\b" |
869 | sleep 0.01 |
870 | echo -en "/\b" |
871 | sleep 0.01 |
872 | done |
873 | echo "done" |
874 | return 0 |
875 | |
876 | # when you want to leave the funktion do |
877 | # something like this: |
878 | # |
879 | # #remove spinner tempfile |
880 | # if [ "$VERBOSE" == "off" ] |
881 | # then |
882 | # if [ -f /var/tmp/proz ] |
883 | # then |
884 | # rm /var/tmp/proz |
885 | # fi |
886 | # fi |
887 | |
888 | } |
889 | |
890 | |
891 | #cuts full pathnames or versioniezed names down to basename |
892 | choppkgname(){ |
893 | #we want this only if full name was used |
894 | if [ -n "$(echo ${MAGENAME}|fgrep .mage)" ] |
895 | then |
896 | #cuts ARCH and PBUILD |
897 | #ARCH comes from /etc/mage.rc |
898 | MAGENAME=$(echo ${MAGENAME} |sed -e "s:-${ARCH}-r*.::g") |
899 | |
900 | #cuts version number |
901 | MAGENAME=$(basename ${MAGENAME%-*} .mage) |
902 | fi |
903 | } |
904 | |
905 | |
906 | # get_categorie $PKGNAME, returns CATEGORIE |
907 | # ret 0=ok, 1=not_found |
908 | getcategorie(){ |
909 | for CAT in ${MAGEDIR}/* |
910 | do |
911 | if [ -d ${CAT}/${MAGENAME} ] |
912 | then |
913 | #debug only |
914 | if [ "$MAGEDEBUG" == "on" ] |
915 | then |
916 | echo "$MAGENAME found -> $CAT/$MAGENAME" |
917 | echo "categorie = $(basename ${CAT})" |
918 | fi |
919 | CATEGORIE=$(basename ${CAT}) |
920 | fi |
921 | done |
922 | |
923 | #package does not exists |
924 | if [ -z "$CATEGORIE" ] |
925 | then |
926 | echo -e "Package "${COLRED}"\"${MAGENAME}\""${COLDEFAULT}" does not exists." |
927 | exit 1 |
928 | fi |
929 | } |
930 | |
931 | |
932 | #check_stable_package /path/to/foo.mage |
933 | # returns 0=stable 1=unstable |
934 | check_stable_package(){ |
935 | #be sure no previous $STATES exists |
936 | unset STATE |
937 | |
938 | source $1 |
939 | |
940 | #if USE_UNSTABLE=true this must be prevented |
941 | if [ "${USE_UNSTABLE}" != "true" ] |
942 | then |
943 | if [ "${STATE}" != "stable" ] |
944 | then |
945 | return 1 |
946 | else |
947 | if [ "${STATE}" == "old" ] |
948 | then |
949 | return 1 |
950 | fi |
951 | fi |
952 | fi |
953 | |
954 | #unset the sourced varibales; |
955 | #we'll got bad problems later on if we don't do this |
956 | unset PKGNAME |
957 | unset STATE |
958 | unset DESCRIPTION |
959 | unset HOMEPAGE |
960 | unset DEPEND |
961 | unset SDEPEND |
962 | unset PROVIDE |
963 | unset PKGTYPE |
964 | unset preinstall |
965 | unset postinstall |
966 | |
967 | return 0 |
968 | } |
969 | |
970 | |
971 | #get_highest_magefile ${CATEGORIE} ${PKGNAME} |
972 | #fake at moment returns only stable pkgs (must set to be one) |
973 | # return $HIGHEST_MAGEFILE |
974 | get_highest_magefile(){ |
975 | unset HIGHEST_MAGEFILE |
976 | #CATEGORIE=$1 |
977 | #PKGNAME=$2 |
978 | |
979 | for i in ${MAGEDIR}/${CATEGORIE}/${MAGENAME}/* |
980 | do |
981 | #we exclude subdirs (for stuff like a md5sum dir) |
982 | if [ ! -d ${i} ] |
983 | then |
984 | check_stable_package ${i} |
985 | if [ "$?" == "0" ] |
986 | then |
987 | HIGHEST_MAGEFILE=${i} |
988 | #for debug only |
989 | if [ "$MAGEDEBUG" == "on" ] |
990 | then |
991 | echo "HIGHEST_MAGEFILE=${HIGHEST_MAGEFILE}" |
992 | fi |
993 | fi |
994 | fi |
995 | done |
996 | |
997 | # stop here if HIGHEST_MAGEFILE is zero |
998 | # this package must be unstable or old |
999 | if [ -z "${HIGHEST_MAGEFILE}" ] |
1000 | then |
1001 | echo |
1002 | echo -n "All packages named " |
1003 | echo -en ${COLRED}\""${PKGNAME%-*-*-*}\""${COLDEFAULT} |
1004 | echo -n " are marked " |
1005 | echo -en ${COLRED}"*UNSTABLE*"${COLDEFAULT} |
1006 | echo "." |
1007 | echo "You need to declare USE_UNSTABLE=true to install this." |
1008 | echo |
1009 | echo "Example:" |
1010 | echo " USE_UNSTABLE=true mage install ${PKGNAME%-*-*-*}" |
1011 | echo |
1012 | echo "Be warned that these packages are not stable and may cause serious problems." |
1013 | echo "You should know what you are doing, so don't complain about any damage." |
1014 | echo |
1015 | return 1 |
1016 | fi |
1017 | |
1018 | MAGEFILE=${HIGHEST_MAGEFILE} |
1019 | return 0 |
1020 | } |
1021 | |
1022 | |
1023 | ################################################### |
1024 | # function is_config_protected # |
1025 | # is_config_protected /path/to/file # |
1026 | # # |
1027 | # returns: # |
1028 | # 0 - not protected # |
1029 | # 1 - error # |
1030 | # 2 - protected # |
1031 | # 3 - protected but masked # |
1032 | # # |
1033 | ################################################### |
1034 | is_config_protected() { |
1035 | local EXPFILE |
1036 | local TEST |
1037 | local PROTECTED |
1038 | local IFS |
1039 | |
1040 | EXPFILE=$1 |
1041 | |
1042 | #to be safe; it may be '§' |
1043 | IFS=' ' |
1044 | |
1045 | #check ob in config protect |
1046 | for i in ${CONFIG_PROTECT} |
1047 | do |
1048 | #ersetzen von $i nur wenn am anfang der variable |
1049 | TEST="${EXPFILE/#${i}/Protected}" |
1050 | if [ "${TEST}" != "${EXPFILE}" ] |
1051 | then |
1052 | #setzen das es protected ist |
1053 | PROTECTED=TRUE |
1054 | |
1055 | #check ob nicht doch maskiert |
1056 | for x in ${CONFIG_PROTECT_MASK} |
1057 | do |
1058 | TEST="${EXPFILE/#${x}/Protect_Masked}" |
1059 | if [ "${TEST}" != "${EXPFILE}" ] |
1060 | then |
1061 | PROTECTED=MASKED |
1062 | fi |
1063 | done |
1064 | fi |
1065 | done |
1066 | |
1067 | unset IFS |
1068 | |
1069 | case ${PROTECTED} in |
1070 | TRUE) |
1071 | #echo "I'm protected" |
1072 | return 2 |
1073 | ;; |
1074 | MASKED) |
1075 | #echo "I'm protected, but masked - delete me" |
1076 | return 3 |
1077 | ;; |
1078 | *) |
1079 | #echo "delete me" |
1080 | return 0 |
1081 | ;; |
1082 | esac |
1083 | } |
1084 | |
1085 | |
1086 | ################################################### |
1087 | # function count_protected_files # |
1088 | # count_protected_files /path/to/file # |
1089 | # # |
1090 | # note: prints number of protected files # |
1091 | # exp: 0012 # |
1092 | ################################################### |
1093 | count_protected_files() { |
1094 | ${MLIBDIR}/writeprotected "$1" |
1095 | } |
1096 | |
1097 | |
1098 | #call with 'get_magefile_to_uninstall SEARCHSTRING' |
1099 | #returns /path/to/magefile |
1100 | get_magefile_to_uninstall() { |
1101 | local RESULT |
1102 | local SSTRING |
1103 | local i |
1104 | local x |
1105 | local z |
1106 | |
1107 | SSTRING=$1 |
1108 | |
1109 | for i in ${INSTALLDB}/*/* |
1110 | do |
1111 | #echo ${i} |
1112 | #to be sure |
1113 | if [ -d ${i} ] |
1114 | then |
1115 | #echo "DEBUG: stripped i: $(basename ${i%-*-*})" |
1116 | if [ $(basename ${i%-*-*}) == ${SSTRING} ] |
1117 | then |
1118 | #RESULT="${RESULT} ${i}" |
1119 | CATEGORIE=$(< ${i}/.categorie) |
1120 | #echo ${CATEGORIE}/$(basename ${RESULT}) |
1121 | RESULT="${RESULT} ${CATEGORIE}/$(basename ${i})" |
1122 | fi |
1123 | fi |
1124 | done |
1125 | |
1126 | if [ -n "${RESULT}" ] |
1127 | then |
1128 | #check if ONE package was found and not more |
1129 | declare -i x=0 |
1130 | for i in ${RESULT} |
1131 | do |
1132 | x=${x}+1 |
1133 | done |
1134 | if [ ${x} -eq 1 ] |
1135 | then |
1136 | #echo "jo ich uninstall $(basename ${RESULT}) ..." |
1137 | #the mage file |
1138 | #echo "${RESULT}/$(basename ${RESULT}).mage" |
1139 | |
1140 | #gets categorie of the package |
1141 | #CATEGORIE=$(< ${i}/.categorie) |
1142 | #echo ${CATEGORIE}/$(basename ${RESULT}) |
1143 | echo "${RESULT}" |
1144 | return 0 |
1145 | else |
1146 | #echo "More than one package found ..." |
1147 | echo "${RESULT}" |
1148 | return 2 |
1149 | fi |
1150 | else |
1151 | #echo "No package found named '${SSTRING}'." |
1152 | echo "${SSTRING}" |
1153 | return 1 |
1154 | fi |
1155 | } |
1156 | |
1157 | |
1158 | # reads virtualdb file |
1159 | #$1 = virtualname; $2 commands: showpkgs, showline |
1160 | #return 0 == installed -> shows installed pkg as well |
1161 | #return 1 == not installed |
1162 | virtuals_read() { |
1163 | local VIRTUAL_NAME COMMAND VIRT_LINE line x i |
1164 | |
1165 | VIRTUAL_NAME=$1 |
1166 | COMMAND=$2 |
1167 | |
1168 | # parse file to get virtual_name line |
1169 | IFS=$'\n' |
1170 | for line in $(< ${VIRTUALDB_FILE}) |
1171 | do |
1172 | IFS=$' ' |
1173 | for x in ${line} |
1174 | do |
1175 | if [ "${x}" == "${VIRTUAL_NAME}" ] |
1176 | then |
1177 | VIRT_LINE="${line}" |
1178 | |
1179 | if [ "${COMMAND}" == "showline" ] |
1180 | then |
1181 | #give out the non stripped line |
1182 | echo "${line}" |
1183 | fi |
1184 | fi |
1185 | done |
1186 | |
1187 | IFS=$'\n' |
1188 | done |
1189 | |
1190 | unset IFS |
1191 | |
1192 | #now read the packages linked to VIRTUAL_NAME and output them |
1193 | if [ -n "${VIRT_LINE}" ] |
1194 | then |
1195 | if [ "${COMMAND}" == "showpkgs" ] |
1196 | then |
1197 | declare -i x=0 |
1198 | for i in ${VIRT_LINE} |
1199 | do |
1200 | if [ ${x} -ge 1 ] |
1201 | then |
1202 | echo "${i}" |
1203 | fi |
1204 | ((x++)) |
1205 | done |
1206 | fi |
1207 | return 0 |
1208 | fi |
1209 | return 1 |
1210 | } |
1211 | |
1212 | |
1213 | #add pkg to virtualdb |
1214 | # $1 == virtualname $2= pkgname |
1215 | # retvals: 0=ok,added; 1=error; 3=pkg already in virtual |
1216 | virtuals_add(){ |
1217 | local VIRTUAL_NAME PKG_NAME OLD_LINE line i |
1218 | |
1219 | VIRTUAL_NAME=$1 |
1220 | PKG_NAME=$2 |
1221 | |
1222 | |
1223 | if virtuals_read ${VIRTUAL_NAME} |
1224 | then |
1225 | #make shure ${PKG_NAME} is *not* in ${VIRTUAL_NAME} already |
1226 | for i in $(virtuals_read ${VIRTUAL_NAME} showpkgs) |
1227 | do |
1228 | if [ "${i}" == ${PKG_NAME} ] |
1229 | then |
1230 | echo "==== ${PKG_NAME} already linked with ${VIRTUAL_NAME} ..." |
1231 | return 3 |
1232 | fi |
1233 | done |
1234 | |
1235 | echo ">>>> Updating ${VIRTUAL_NAME} with ${PKG_NAME} in virtual database ..." |
1236 | OLD_LINE="$(virtuals_read ${VIRTUAL_NAME} showline)" |
1237 | |
1238 | #make a backup |
1239 | mv ${VIRTUALDB_FILE} ${VIRTUALDB_FILE}.old |
1240 | |
1241 | IFS=$'\n' |
1242 | for line in $(< ${VIRTUALDB_FILE}.old) |
1243 | do |
1244 | #if the right line, append ${PKG_NAME}, else do nothing |
1245 | if [ "${line}" == "${OLD_LINE}" ] |
1246 | then |
1247 | echo "${line} ${PKG_NAME}" >> ${VIRTUALDB_FILE} |
1248 | else |
1249 | echo "${line}" >> ${VIRTUALDB_FILE} |
1250 | fi |
1251 | done |
1252 | |
1253 | unset IFS |
1254 | else |
1255 | echo ">>>> Adding ${PKG_NAME} as ${VIRTUAL_NAME} to virtual database ..." |
1256 | echo "${VIRTUAL_NAME} ${PKG_NAME}" >> ${VIRTUALDB_FILE} \ |
1257 | && echo "ok" || echo "false" |
1258 | fi |
1259 | |
1260 | return 0 |
1261 | } |
1262 | |
1263 | #deletes pakages from virtual database |
1264 | #$1 virtualname; $2 pkgname |
1265 | virtuals_del() { |
1266 | |
1267 | local VIRTUAL_NAME PKG_NAME OLD_LINE METHOD line i x PKG_INSTALLED |
1268 | |
1269 | VIRTUAL_NAME=$1 |
1270 | PKG_NAME=$2 |
1271 | |
1272 | #first check if exists |
1273 | if virtuals_read ${VIRTUAL_NAME} |
1274 | then |
1275 | #get method -> delall or update and check if ${PKG_NAME} exists in ${VIRTUAL_NAME} |
1276 | declare -i x=0 |
1277 | for i in $(virtuals_read ${VIRTUAL_NAME} showpkgs) |
1278 | do |
1279 | if [ "${i}" == "${PKG_NAME}" ] |
1280 | then |
1281 | PKG_INSTALLED=true |
1282 | fi |
1283 | ((x++)) |
1284 | done |
1285 | |
1286 | #abort if not installed |
1287 | if [ "${PKG_INSTALLED}" != "true" ] |
1288 | then |
1289 | echo "!!!! ${PKG_NAME} does not exists in ${VIRTUAL_NAME}." |
1290 | return 0 |
1291 | fi |
1292 | |
1293 | if [ ${x} -ge 2 ] |
1294 | then |
1295 | METHOD=update |
1296 | else |
1297 | METHOD=delall |
1298 | fi |
1299 | |
1300 | #get the complete line |
1301 | OLD_LINE="$(virtuals_read ${VIRTUAL_NAME} showline)" |
1302 | |
1303 | #make a backup |
1304 | mv ${VIRTUALDB_FILE} ${VIRTUALDB_FILE}.old |
1305 | |
1306 | #parse virtualdb |
1307 | IFS=$'\n' |
1308 | for line in $(< ${VIRTUALDB_FILE}.old) |
1309 | do |
1310 | if [ "${line}" == "${OLD_LINE}" ] |
1311 | then |
1312 | #delall or update? |
1313 | case ${METHOD} in |
1314 | update) |
1315 | echo "<<<< Unlinking ${PKG_NAME} from ${VIRTUAL_NAME} in virtual database ..." |
1316 | #del PKG_NAME from line |
1317 | echo "${line/ ${PKG_NAME}/}" >> ${VIRTUALDB_FILE} |
1318 | ;; |
1319 | delall) |
1320 | echo "<<<< Deleting ${VIRTUAL_NAME} in virtual database ..." |
1321 | #continue; do not write anything |
1322 | continue |
1323 | ;; |
1324 | esac |
1325 | else |
1326 | echo "${line}" >> ${VIRTUALDB_FILE} |
1327 | fi |
1328 | done |
1329 | unset IFS |
1330 | else |
1331 | echo "!!!! ${VIRTUAL_NAME} does not exists in virtual database." |
1332 | fi |
1333 | } |
1334 | |
1335 | # gets real pkgname from virtuals.default |
1336 | #$1=VIRTUAL_NAME; returns PKG_NAME |
1337 | default_virtualname_to_pkgname(){ |
1338 | local VIRTUAL_NAME PKG_NAME db_virtualname db_pkgname |
1339 | |
1340 | VIRTUAL_NAME=$1 |
1341 | |
1342 | while read db_virtualname db_pkgname |
1343 | do |
1344 | if [ "${db_virtualname}" == "${VIRTUAL_NAME}" ] |
1345 | then |
1346 | PKG_NAME="${db_pkgname}" |
1347 | fi |
1348 | done << EOF |
1349 | $(< ${VIRTUALDB_DEFAULTS}) |
1350 | EOF |
1351 | |
1352 | if [ -n "${PKG_NAME}" ] |
1353 | then |
1354 | echo "${PKG_NAME}" |
1355 | fi |
1356 | } |
1357 | |
1358 | minclude() { |
1359 | local i |
1360 | |
1361 | if [ -n "$@" ] |
1362 | then |
1363 | for i in $@ |
1364 | do |
1365 | [[ ${MAGEDEBUG} = on ]] && \ |
1366 | echo "--- Including ${MAGEDIR}/include/${i}.minc" |
1367 | source ${MAGEDIR}/include/${i}.minc |
1368 | done |
1369 | echo |
1370 | fi |
1371 | } |
1372 | |
1373 | sminclude() { |
1374 | local i |
1375 | |
1376 | if [ -n "$@" ] |
1377 | then |
1378 | for i in $@ |
1379 | do |
1380 | echo "--- Including ${SMAGESCRIPTSDIR}/include/${i}.sminc" |
1381 | source ${SMAGESCRIPTSDIR}/include/${i}.sminc |
1382 | done |
1383 | echo |
1384 | fi |
1385 | } |
1386 | |
1387 | # checks if an newer mage version is available |
1388 | is_newer_mage_version_available() { |
1389 | local newest_mage |
1390 | local installed_mage |
1391 | |
1392 | newest_mage="$( CATEGORIE=app-mage MAGENAME=mage get_highest_magefile;echo $(basename ${MAGEFILE} .mage) )" |
1393 | installed_mage="$(magequery -n mage | cut -d' ' -f5)" |
1394 | |
1395 | if [[ ${newest_mage} > ${installed_mage} ]] |
1396 | then |
1397 | echo |
1398 | echo -en ${COLRED}"An update for your packetmanager is available. "${COLDEFAULT} |
1399 | echo -e ${COLBLUE}"[ ${newest_mage} ]"${COLDEFAULT} |
1400 | echo "It is recommened to install this newer version" |
1401 | echo "or your current system installation may brake." |
1402 | echo |
1403 | echo -en "Please update mage by running " |
1404 | echo -e ${COLGREEN}"'mage install mage'"${COLDEFAULT} |
1405 | echo |
1406 | fi |
1407 | } |
1408 |
Properties
Name | Value |
---|---|
svn:executable | * |