1 #!/bin/bash 2 3 ARCH=`uname -p` 4 if [ $ARCH != "sparc" ]; then 5 ARCH=x86 6 fi 7 ALL_PRODUCTS="jds=JDS Common Packages 8 jds-src=Sources for JDS Common Packages 9 gnome=GNOME 2.17 Desktop 10 gnome-src=GNOME 2.17 Source 11 mozilla=Mozilla 1.7 Web Browser 12 mozilla-src=Mozilla Source 13 firefox=Firefox Web Browser 14 firefox-src=Firefox Source 15 thunderbird=Thunderbird Email and News Client 16 thunderbird-src=Thunderbird Source 17 idn 18 idn-src 19 evolution=Evolution Email and Calendar 20 evolution-src=Evolution Source 21 glow=Integrated Collaboration Environment 22 jai=Java Advanced Imaging 23 jai-iio=Java Advanced Imaging 24 java=Java Runtime Environment 25 java-src 26 javaapps=Java Applications 27 javaapps-src=Java Applications Sources 28 java3d 29 jcs 30 jdk=Java Development Kit 31 jdic=Java Desktop Integration Components 32 jdnc=Java Desktop Network Components 33 jinput=Java Controller API 34 joal=Java bindings for OpenAL API 35 jogl=Java bindings for OpenGL API 36 l10n=Globalization Tools 37 l10n-src=Globalization Tools Sources 38 l10nmessages=Localized Messages 39 iiim=Input Method Switcher 40 iiim-src=Input Method Switcher Sources 41 muscle 42 plugins=Third Party Browser Plugins 43 plugins-src 44 scs-client 45 staroffice=StarOffice office suite 46 starsuite=StarSuite office suite 47 so-sdk=StarOffice Software Development Kit 48 updater 49 netbeans 50 javahelp 51 xserver=X.org server 52 nodist=Extra packages for JDS developers 53 nodist-src=Extra sources for JDS developers 54 apoc-daemon=APOC Daemon 55 apoc-daemon-src=APOC Daemon Sources 56 apoc-sol-$ARCH=APOC Configuration Manager 57 apoc-sol-$ARCH-src=APOC Configuration Manager Sources" 58 59 ALL_PATCHDIRS="patches-xserver=X server patches 60 patches-mozilla=Patches required for the Mozilla Web browser 61 patches-gnome=Patches required for the GNOME Desktop" 62 63 PKGADD=/usr/sbin/pkgadd 64 PATCHADD=/usr/sbin/patchadd 65 PKGRM=/usr/sbin/pkgrm 66 PKGINFO=/usr/bin/pkginfo 67 ADMIN=/tmp/.pkg.$$.admin 68 ADMIN_CREATED=no 69 70 MYNAME="$0" 71 MYDIR=`dirname $0` 72 MYDIR=`( cd $MYDIR; pwd )` 73 MYNAME=$(basename $0) 74 MYARGS="$*" 75 LOGFILE=/var/sadm/install/logs/jds-install.log.$$ 76 INFOFILE=$MYDIR/.pkginfo 77 SYSTEM=`uname -s` 78 ARCH=`uname -p` 79 RELEASE=`uname -r` 80 KERNELID=`uname -v` 81 82 # ask "question" variable_name "default answer" 83 ask () { 84 echo -n "$1" 85 if [ ! -z $3 ]; then 86 echo -n " [$3]: " 87 else 88 echo -n ": " 89 fi 90 91 read -e val 92 if [ "x$val" = x ]; then 93 eval "$2=\"$3\"" 94 else 95 eval "$2=\"$val\"" 96 fi 97 } 98 99 # ask_yes_no "question" variable_name "default answer" 100 ask_yes_no () { 101 yes_no_repeat=yes 102 while [ $yes_no_repeat = yes ]; do 103 yes_no_repeat=no 104 ask "${@}" 105 eval "the_ans=\"\$$2\"" 106 echo "$the_ans" | grep -i "^`l10n_print yes`$" > /dev/null 107 if [ $? = 0 ]; then 108 eval "$2=yes" 109 return 110 fi 111 echo "$the_ans" | grep -i "^`l10n_print no`$" > /dev/null 112 if [ $? = 0 ]; then 113 eval "$2=no" 114 return 115 fi 116 l10n_print "Please answer yes or no" 117 yes_no_repeat=yes 118 done 119 } 120 121 get_req () { 122 test -r $INFOFILE && \ 123 grep -i "^$1[ ]*=[ ]*" $INFOFILE | cut -f2 -d= | tr -d ' ' 124 } 125 126 REQ_SYSTEM=`get_req system` 127 REQ_ARCH=`get_req arch` 128 REQ_RELEASE=`get_req release` 129 REQ_KERNELID=`get_req kernelid` 130 131 version_lower () { 132 declare -a version1 133 declare -a version2 134 135 IFS=' ' 136 for n in `echo $1 | sed -e 's/Generic/999999/' | tr -cs "[0-9]" "[ *]"`; do 137 version1=(${version1[*]} $n) 138 done 139 for n in `echo $2 | sed -e 's/Generic/999999/' | tr -cs "[0-9]" "[ *]"`; do 140 version2=(${version2[*]} $n) 141 done 142 143 typeset -i n=0 144 while /bin/true; do 145 if [ -n "${version1[$n]}" ]; then 146 if [ -n "${version2[$n]}" ]; then 147 if [ ${version1[$n]} -lt ${version2[$n]} ]; then 148 return 0 149 else 150 if [ ${version1[$n]} -gt ${version2[$n]} ]; then 151 return 1 152 fi 153 fi 154 else 155 return 1 156 fi 157 else 158 if [ -n "${version2[$n]}" ]; then 159 return 0 160 fi 161 return 1 162 fi 163 typeset n=$n+1 164 done 165 } 166 167 usage () { 168 echo "%s [options]" "$0" 169 l10n_print "Install the Java Desktop System, GNOME 2.17, Solaris Edition" 170 l10n_print " -h, --help display this help" 171 l10n_print " --quiet, -q less verbose operation." 172 l10n_print " --force, -f ignore any errors and continue." 173 l10n_print " --ignore, -i ignore file conflicts and continue." 174 l10n_print " -n non-interactive installation." 175 l10n_print " -R rootdir install into an alternative root directory." 176 l10n_print " -p prod1,prod2,..." 177 l10n_print " select products for installation" 178 l10n_print " -a install all products" 179 l10n_print " --nopatch don't install OS patches" 180 l10n_print " --accept accept the license terms" 181 l10n_print " --tmpdir dir create temporary files in dir instead of /tmp" 182 exit 1 183 } 184 185 QUIET=no 186 FORCE=no 187 IGNORE_CONFLICT=no 188 INTERACTIVE=yes 189 ROOTDIR= 190 PRODUCTS= 191 NO_PATCHES=no 192 BASE_TEMPDIR=/tmp 193 LICENSE_ACCEPTED=yes 194 195 process_options () { 196 while [ $# != 0 ]; do 197 case "$1" in 198 --help | -h ) 199 usage 200 ;; 201 --quiet | -q ) 202 QUIET=yes 203 ;; 204 --force | -f ) 205 FORCE=yes 206 ;; 207 --ignore | -i ) 208 IGNORE_CONFLICT=yes 209 ;; 210 -R ) 211 shift 212 ROOTDIR=$1 213 if [ "x$ROOTDIR" = x ]; then 214 l10n_print "Option %s requires an argument" "-R" 215 usage 216 fi 217 ;; 218 -n ) 219 INTERACTIVE=no 220 ;; 221 -a ) 222 select_all_products 223 unselect_all_srcs 224 unselect_product nodist 225 ;; 226 --accept ) 227 LICENSE_ACCEPTED=yes 228 ;; 229 -p ) 230 shift 231 PRODUCTS="$1" 232 if [ "x$PRODUCTS" = x ]; then 233 l10n_print "Option %s requires an argument" "-R" 234 usage 235 fi 236 ;; 237 --tmpdir ) 238 shift 239 BASE_TEMPDIR="$1" 240 if [ "x$BASE_TEMPDIR" = x ]; then 241 l10n_print "Option %s requires an argument" "--tmpdir" 242 usage 243 fi 244 ;; 245 --nopatch ) 246 NO_PATCHES=yes 247 ;; 248 * ) 249 l10n_print "Error: %s: invalid argument" "$1" 250 usage 251 ;; 252 esac 253 shift 254 done 255 } 256 257 logrun () { 258 status_file=/tmp/.command_status.$$ 259 rm -f $status_file 260 echo "running $*" >> $LOGFILE 261 echo "*** command output follows ***" >> $LOGFILE 262 if [ "x$QUIET" = xno ]; then 263 ( "${@}" 2>&1 ; echo $? > $status_file ) | tee -a $LOGFILE 264 else 265 ( "${@}" 2>&1 ; echo $? > $status_file ) >> $LOGFILE 266 fi 267 echo "*** command output ends ***" >> $LOGFILE 268 status=`cat $status_file` 269 rm -f $status_file 270 return $status 271 } 272 273 backup () { 274 if [ -e "$1" ]; then 275 backup "$1~" 276 l10n_print "Saving file %s as %s~" "$1" "$1" 277 mv "$1" "$1~" || msg_fatal "Failed to back up file %s" "$1" 278 fi 279 } 280 281 clean_up () { 282 if [ "x$ADMIN_CREATED" = xyes ]; then 283 rm -f $ADMIN 284 fi 285 cd / 286 rm -rf $TEMPDIR 287 } 288 289 clean_up_and_abort () { 290 clean_up 291 l10n_print "Interrupted." 292 exit 1 293 } 294 295 TEXTDOMAIN=install-jds 296 l10n_print () { 297 l10n_msg=`TEXTDOMAINDIR="$MYDIR"/.install gettext -d "$TEXTDOMAIN" "$1"` 298 shift 299 printf "$l10n_msg\n" "${@}" 300 } 301 302 msg_fatal () { 303 msg_log "${@}" 304 l10n_print "${@}" 1>&2 305 clean_up 306 exit 1 307 } 308 309 msg_error () { 310 msg_log "${@}" 311 l10n_print "${@}" 1>&2 312 if [ $FORCE = no ]; then 313 if [ "x$INTERACTIVE" = xyes ]; then 314 ask_yes_no "`l10n_print 'Would you like to continue?'`" ans \ 315 `l10n_print "no"` 316 if [ "x$ans" = xno ]; then 317 clean_up 318 exit 1 319 fi 320 WARNINGS=yes 321 else 322 clean_up 323 exit 1 324 fi 325 else 326 WARNINGS=yes 327 fi 328 } 329 330 msg_log () { 331 test -f $LOGFILE || return 332 log_arg1="$1" 333 shift 334 printf "$log_arg1\n" "${@}" >> $LOGFILE 335 } 336 337 WARNINGS=no 338 msg_warning () { 339 l10n_print "${@}" 340 WARNINGS=yes 341 } 342 343 # check_disk_space directory minsize(kB) 344 check_disk_space () { 345 dir_to_check="$ROOTDIR$1" 346 while [ ! -d $dir_to_check ]; do 347 dir_to_check="`dirname $dir_to_check`" 348 done 349 freespace=`df -k "$dir_to_check" | awk '!/Filesystem/ {print $4}'` 350 if [ $freespace -le $2 ]; then 351 return 1 352 fi 353 354 return 0 355 } 356 357 # so_disk_space_check prodname 358 so_disk_space_check () { 359 # Need large tmp area (>=1GB) for StarOffice/StarSuite installation. 360 check_disk_space $TEMPDIR 1048576 || \ 361 msg_error "Your %s directory has less than 1GB free.\nYou need to specify an alternative temp dir with the --tmpdir switch." "$BASE_TEMPDIR" 362 } 363 364 init () { 365 USER_IS_ROOT=0 366 /usr/bin/id | /usr/bin/grep '^uid=0(' > /dev/null 2>&1 367 368 if [ $? != 0 ]; then 369 msg_fatal "Only root can install this product." 370 fi 371 372 if [ $FORCE = no ]; then 373 trap clean_up_and_abort HUP INT TERM 374 else 375 trap clean_up_and_abort HUP INT TERM ERR 376 fi 377 378 trap clean_up QUIT EXIT 379 } 380 381 write_admin () { 382 backup "$ADMIN" 383 ADMIN_CREATED=yes 384 cat > $ADMIN << EOF 385 mail= 386 instance=unique 387 runlevel=nocheck 388 setuid=nocheck 389 action=nocheck 390 partial=quit 391 idepend=nocheck 392 rdepend=nocheck 393 space=quit 394 EOF 395 396 if [ $IGNORE_CONFLICT = no ]; then 397 cat >> $ADMIN << EOF_2 398 conflict=quit 399 EOF_2 400 else 401 cat >> $ADMIN << EOF_3 402 conflict=nocheck 403 EOF_3 404 fi 405 } 406 407 declare -a MOUNT_POINTS 408 declare -a MP_SUMS 409 disk_usage_init () { 410 mps=`df -kl | grep '^/' | awk '{print $6}' | sort -r` 411 IFS=" 412 " 413 typeset -i i=0 414 for mp in $mps; do 415 MOUNT_POINTS[$i]="$mp" 416 MP_SUMS[$i]=0 417 typeset i=$i+1 418 done 419 MOUNT_POINT_COUNT=$i 420 } 421 422 # disk_usage_add <dir> <size> 423 disk_usage_add () { 424 typeset -i i=0 425 while [ $i -lt $MOUNT_POINT_COUNT ]; do 426 mpname=${MOUNT_POINTS[$i]} 427 case $1 in 428 ${mpname}* ) 429 mpsize=${MP_SUMS[$i]} 430 mpsize=`expr $mpsize + $2` 431 MP_SUMS[$i]=$mpsize 432 break 433 ;; 434 esac 435 typeset i=$i+1 436 done 437 } 438 439 disk_usage_check () { 440 typeset -i i=0 441 while [ $i -lt $MOUNT_POINT_COUNT ]; do 442 mpname=${MOUNT_POINTS[$i]} 443 mpsize=${MP_SUMS[$i]} 444 mpsize=`expr $mpsize + $mpsize` 445 if [ $mpsize -gt 0 ]; then 446 check_disk_space $mpname $mpsize || \ 447 msg_error "Your %s filesystem has less than %s kB free\nYou will not be able to install JDS." "$ROOTDIR$mpname" "$mpsize" 448 fi 449 typeset i=$i+1 450 done 451 } 452 453 #install_pkgs <dir> 454 install_product () { 455 ORDERFILE=$MYDIR/$1/.pkgorder 456 if [ -r $ORDERFILE ]; then 457 export IFS=' ' 458 ALL_PKGS=$(echo $(cat $ORDERFILE | sed -e 's/$/.tar.gz/')) 459 else 460 ALL_PKGS=$(cd $MYDIR/$1; find . -name '*.tar.gz' -print -o -name '*.tgz' -print) 461 fi 462 463 if [ -z "$ALL_PKGS" ]; then 464 msg_error "No packages found." 465 return 466 fi 467 468 msg_log "Starting installation of %s at %s" "$1" "`LANG=C LC_ALL=C date`" 469 IFS=' 470 ' 471 472 # Remove old Mozilla 1.x packages. 473 if [ $1 == 'firefox' -o $1 == 'thunderbird' ]; then 474 moz_pkgs="SUNWmozspell 475 SUNWmozpsm 476 SUNWmoznss-devel 477 SUNWmoznss 478 SUNWmoznspr-devel 479 SUNWmozmail 480 SUNWmozjs-debugger 481 SUNWmozilla-devel 482 SUNWmozgm 483 SUNWmozdom-inspector 484 SUNWmozchat 485 SUNWmozilla 486 SUNWmoznspr 487 SUNWmoznav 488 SUNWthunderbird-devel" 489 for moz_pkg in $moz_pkgs; do 490 is_installed "$moz_pkg" && remove_pkg "$moz_pkg" 491 done 492 fi 493 494 # Remove evolution-socs-connect packages as they are incompatible with 495 # evolution-jescs (connector for Java Enterprise System Calendar Server) 496 if [ $1 == 'evolution' ]; then 497 evo_pkgs="SUNWevolution-socs-connect 498 SUNWevolution-socs-connect-share" 499 for evo_pkg in $evo_pkgs; do 500 is_installed "$evo_pkg" && remove_pkg "$evo_pkg" 501 done 502 fi 503 504 logrun mkdir -p $TEMPDIR || \ 505 msg_fatal "ERROR: Failed to create temporary directory %s" "$TEMPDIR" 506 cd $TEMPDIR 507 for pkg in $ALL_PKGS; do 508 if [ ! -r $MYDIR/$1/$pkg ]; then 509 msg_error "ERROR: cannot read file %s" "$pkg" 510 continue 511 fi 512 logrun sh -c "gunzip -c $MYDIR/$1/$pkg | /bin/tar xf -" 513 if [ $? != 0 ]; then 514 msg_error "ERROR: Failed to unpack %s" "$pkg" 515 continue 516 fi 517 pkg0=$(basename $pkg) 518 pkg0=$(echo "$pkg0" | sed -e 's/\.tar.gz$//' -e 's/\.tgz$//') 519 if [ ! -d $pkg0 ]; then 520 msg_error "ERROR: Package %s not found in %s" "$pkg0" "$pkg" 521 continue 522 fi 523 if [ "x$QUIET" = xno ]; then 524 l10n_print "Installing package %s" "$pkg0" 525 fi 526 msg_log "Installing package $pkg0" 527 if [ "x$ROOTDIR" != "x" ]; then 528 logrun $PKGADD -R "$ROOTDIR" -a $ADMIN -n -d $TEMPDIR $pkg0 || \ 529 msg_error "ERROR: Failed to install package %s" "$pkg0" 530 else 531 logrun $PKGADD -a $ADMIN -n -d $TEMPDIR $pkg0 || \ 532 msg_error "ERROR: Failed to install package %s" "$pkg0" 533 fi 534 logrun rm -rf $TEMPDIR/$pkg0 535 done 536 } 537 538 remove_pkg () { 539 if [ "x$QUIET" = xno ]; then 540 l10n_print "Uninstalling %s" "$1" 541 fi 542 msg_log "Uninstalling %s" "$1" 543 if [ "x$ROOTDIR" != x ]; then 544 logrun $PKGRM -R "$ROOTDIR" -a $ADMIN -n "$1"'.*' || \ 545 msg_error "ERROR: Failed to remove package %s" "$1" 546 else 547 logrun $PKGRM -a $ADMIN -n "$1"'.*' || \ 548 msg_error "ERROR: Failed to remove package %s" "$1" 549 fi 550 } 551 552 is_installed () { 553 $PKGINFO -q "$1.*" 554 } 555 556 remove_always () { 557 pkgs_to_remove="`cat $MYDIR/$1/.remove-always`" 558 559 IFS=" 560 " 561 for glob in "$pkgs_to_remove"; do 562 pkgs=$(cd $MYDIR/$1; echo $glob) 563 for pkg in $pkgs; do 564 pkg=`basename $pkg` 565 pkg=`basename $pkg .tar.gz` 566 pkg=`basename $pkg .tgz` 567 is_installed "$pkg" && remove_pkg "$pkg" 568 done 569 done 570 } 571 572 remove_if_older () { 573 pkgs_to_remove="`cat $MYDIR/$1/.remove-if-older`" 574 575 IFS=" 576 " 577 for glob in $pkgs_to_remove; do 578 pkgs=$(cd $MYDIR/$1; echo "$glob") 579 for pkg in $pkgs; do 580 pkg=`basename $pkg .tar.gz` 581 pkg=`basename $pkg .tgz` 582 remove_pkg $pkg 583 done 584 done 585 } 586 587 main_menu () { 588 while /bin/true; do 589 clear 590 echo ",--------------------------------------------------------------------------" 591 echo "| 1) " `l10n_print "Default Installation"` 592 echo "| 2) " `l10n_print "Custom Installation"` 593 echo "|" 594 echo "| X) " `l10n_print "Exit"` 595 echo "|" 596 ask '`---> '"`l10n_print 'Please select:'`" "menu_sel" "1" 597 case $menu_sel in 598 1) 599 if [ "x$PRODUCTS" = x ]; then 600 select_all_products 601 unselect_all_srcs 602 unselect_product nodist 603 fi 604 do_install || return $? 605 break 606 ;; 607 2) 608 custom_menu || return $? 609 ;; 610 x|X) 611 return 2 612 ;; 613 *) 614 l10n_print "Invalid selection" 615 sleep 1 616 esac 617 done 618 return 0 619 } 620 621 custom_menu () { 622 while /bin/true; do 623 clear 624 echo ",--------------------------------------------------------------------------" 625 echo "| 1) " `l10n_print "Install All Products"` 626 echo "| 2) " `l10n_print "Select Products to Install"` 627 if [ ! -z "$PATCHDIRS" ]; then 628 echo "| 3) " `l10n_print "Select Patches to Install"` 629 fi 630 echo "|" 631 echo "| I) " `l10n_print "Start Installation"` 632 echo "| X) " `l10n_print "Exit"` 633 echo "|" 634 ask '`---> '"`l10n_print 'Please select:'`" "menu_sel" "I" 635 case $menu_sel in 636 1) 637 select_all_products 638 unselect_all_srcs 639 unselect_product nodist 640 select_all_patches 641 do_install || return $? 642 return 1 643 ;; 644 2) 645 select_product_menu || return $? 646 ;; 647 3) 648 if [ ! -z "$PATCHDIRS" ]; then 649 select_patchdir_menu || return $? 650 else 651 l10n_print "Invalid selection" 652 sleep 1 653 fi 654 ;; 655 i|I) 656 do_install || return $? 657 return 1 658 ;; 659 x|X) 660 return 2 661 ;; 662 *) 663 l10n_print "Invalid selection" 664 sleep 1 665 esac 666 done 667 return 0 668 } 669 670 so_menu () { 671 while /bin/true; do 672 clear 673 echo ",--------------------------------------------------------------------------" 674 echo "| 1) StarOffice" 675 echo "| 2) StarSuite" 676 echo "|" 677 echo "| X) " `l10n_print "Exit"` 678 echo "|" 679 ask '`---> '"`l10n_print 'Please select:'`" "menu_sel" "1" 680 case $menu_sel in 681 1) 682 unselect_product starsuite 683 return 0 684 ;; 685 2) 686 unselect_product staroffice 687 return 0 688 ;; 689 x|X) 690 return 2 691 ;; 692 *) 693 l10n_print "Invalid selection" 694 sleep 1 695 esac 696 done 697 return 0 698 } 699 700 select_patchdir_menu () { 701 IFS=, 702 while /bin/true; do 703 clear 704 echo ",--------------------------------------------------------------------------" 705 typeset -i N=1 706 707 for pdir in $PATCHDIRS; do 708 pname=`echo "$ALL_PATCHDIRS" | grep "^$pdir=" | cut -f2- -d= | cut -c-60` 709 n=`echo " $N" | sed -e 's/^.*\(..\)$/\1/'` 710 pn=$(echo $pdir | cut -f2 -d-) 711 eval "plist=\"\$ALL_${pn}_PATCHES\"" 712 eval "patch_${N}_list=\"$plist\"" 713 patches_are_selected "$plist" 714 res=$? 715 if [ $res = 0 ]; then 716 echo "| $n) [x] $pname" 717 eval "patch_${N}_selected=1" 718 elif [ $res = 1 ]; then 719 echo "| $n) [:] $pname" 720 eval "patch_${N}_selected=0" 721 else 722 echo "| $n) [ ] $pname" 723 eval "patch_${N}_selected=0" 724 fi 725 typeset N=$N+1 726 done 727 echo "|" 728 echo "| A) " `l10n_print "Select All"` 729 echo "| U) " `l10n_print "Unselect All"` 730 echo "|" 731 echo "| S) " `l10n_print "Select individual patches"` 732 echo "| I) " `l10n_print "Start Installation"` 733 echo "| R) " `l10n_print "Return to previous menu"` 734 echo "| X) " `l10n_print "Exit"` 735 echo "|" 736 ask '`---> '"`l10n_print 'Enter item to select/unselect:'`" "menu_sel" "R" 737 case $menu_sel in 738 i|I) 739 do_install || return $? 740 return 1 741 ;; 742 x|X) 743 return 2 744 ;; 745 r|R) 746 return 0 747 ;; 748 a|A) 749 select_all_patches 750 ;; 751 s|S) 752 select_patch_menu || return $? 753 ;; 754 u|U) 755 PATCHES= 756 ;; 757 *) 758 eval "the_patches=\$patch_${menu_sel}_list" 759 if [ -z "$the_patches" ]; then 760 l10n_print "Invalid selection" 761 sleep 1 762 else 763 eval "is_sel=\$patch_${menu_sel}_selected" 764 if [ "x$is_sel" = x1 ]; then 765 unselect_patches "$the_patches" 766 else 767 select_patches "$the_patches" 768 fi 769 fi 770 esac 771 done 772 } 773 774 PATCH_INFO_LOADED=no 775 load_patch_info () { 776 test "x$PATCH_INFO_LOADED" = "xyes" && return 777 IFS=, 778 for p in $1; do 779 test -z "$p" && continue 780 mkdir -p $TEMPDIR/patchdesc 781 cd $TEMPDIR/patchdesc 782 unzip $MYDIR/$p */README.* > /dev/null 2>&1 783 dummy=`basename $p .zip` 784 pdesc=`grep '^Synopsis:' */README.* | head -1 | cut -f2- -d:` \ 785 > /dev/null 2>&1 786 if [ "x$pdesc" = x ]; then 787 pdesc="Patch $dummy" 788 fi 789 dummy=`echo $dummy | cut -f1 -d-` 790 eval "PATCH_DESC_${dummy}=\"$pdesc\"" 791 cd / 792 rm -rf $TEMPDIR/patchdesc 793 cd $TEMPDIR 794 done 795 PATCH_INFO_LOADED=yes 796 } 797 798 select_patch_menu () { 799 load_patch_info "$ALL_PATCHES" 800 IFS=, 801 while /bin/true; do 802 clear 803 echo ",--------------------------------------------------------------------------" 804 typeset -i N=1 805 806 for ps in $ALL_PATCHES; do 807 test -z "$ps" && continue 808 pbn=`basename $ps` 809 pnum=`basename $pbn .zip` 810 pbn=`echo $pbn | cut -f1 -d-` 811 eval "pname=\$PATCH_DESC_${pbn}" 812 pcat=`echo "$ps" | cut -f1 -d/ | cut -f2 -d-` 813 n=`echo " $N" | sed -e 's/^.*\(..\)$/\1/'` 814 pn=$(echo $pdir | cut -f2 -d-) 815 eval "patch_${N}_name=\"$ps\"" 816 patch_is_selected "$ps" 817 res=$? 818 if [ $res = 0 ]; then 819 echo "| $n) [x] ($pcat) $pnum: $pname" 820 eval "patch_${N}_selected=1" 821 else 822 echo "| $n) [ ] ($pcat) $pnum: $pname" 823 eval "patch_${N}_selected=0" 824 fi 825 typeset N=$N+1 826 done 827 echo "|" 828 echo "| A) " `l10n_print "Select All"` 829 echo "| U) " `l10n_print "Unselect All"` 830 echo "|" 831 echo "| I) " `l10n_print "Start Installation"` 832 echo "| R) " `l10n_print "Return to previous menu"` 833 echo "| X) " `l10n_print "Exit"` 834 echo "|" 835 ask '`---> '"`l10n_print 'Enter item to select/unselect:'`" "menu_sel" "R" 836 case $menu_sel in 837 i|I) 838 do_install || return $? 839 return 1 840 ;; 841 x|X) 842 return 2 843 ;; 844 r|R) 845 return 0 846 ;; 847 a|A) 848 select_all_patches 849 ;; 850 s|S) 851 select_patch_menu || return $? 852 ;; 853 u|U) 854 PATCHES= 855 ;; 856 *) 857 eval "the_patch=\$patch_${menu_sel}_name" 858 if [ -z "$the_patch" ]; then 859 l10n_print "Invalid selection" 860 sleep 1 861 else 862 eval "is_sel=\$patch_${menu_sel}_selected" 863 if [ "x$is_sel" = x1 ]; then 864 unselect_patches "$the_patch" 865 else 866 select_patches "$the_patch" 867 fi 868 fi 869 esac 870 done 871 } 872 873 select_product_menu () { 874 IFS=" 875 " 876 save_PR="$PRODUCTS" 877 select_all_products 878 AP="$PRODUCTS" 879 PRODUCTS="$save_PR" 880 while /bin/true; do 881 clear 882 echo ",--------------------------------------------------------------------------" 883 typeset -i N=1 884 885 for prod in $AP; do 886 prodname=`echo "$ALL_PRODUCTS" | grep "^$prod=" | cut -f2- -d= | cut -c-60` 887 if [ -z "$prodname" ]; then 888 prodname=$prod 889 fi 890 n=`echo " $N" | sed -e 's/^.*\(..\)$/\1/'` 891 eval "prod_${N}_name=\"$prod\"" 892 product_is_selected $prod 893 if [ $? = 0 ]; then 894 echo "| $n) [x] "`l10n_print "$prodname"` 895 eval "prod_${N}_selected=1" 896 else 897 echo "| $n) [ ] "`l10n_print "$prodname"` 898 eval "prod_${N}_selected=0" 899 fi 900 typeset N=$N+1 901 done 902 echo "|" 903 echo "| A) " `l10n_print "Select All"` 904 echo "| U) " `l10n_print "Unselect All"` 905 echo "|" 906 echo "| I) " `l10n_print "Start Installation"` 907 echo "| R) " `l10n_print "Return to previous menu"` 908 echo "| X) " `l10n_print "Exit"` 909 echo "|" 910 ask '`---> '"`l10n_print 'Enter item to select/unselect:'`" "menu_sel" "R" 911 case $menu_sel in 912 i|I) 913 do_install || return $? 914 return 1 915 ;; 916 x|X) 917 return 2 918 ;; 919 r|R) 920 return 0 921 ;; 922 a|A) 923 select_all_products 924 ;; 925 u|U) 926 PRODUCTS= 927 ;; 928 *) 929 eval "the_name=\$prod_${menu_sel}_name" 930 if [ -z "$the_name" ]; then 931 l10n_print "Invalid selection" 932 sleep 1 933 else 934 eval "is_sel=\$prod_${menu_sel}_selected" 935 if [ "x$is_sel" = x1 ]; then 936 unselect_product $the_name 937 else 938 select_product $the_name 939 fi 940 fi 941 esac 942 done 943 } 944 945 install_patch () { 946 mkdir -p $TEMPDIR/patchinst || return 1 947 rm -rf $TEMPDIR/patchinst/* || return 1 948 cd $TEMPDIR/patchinst || return 1 949 unzip $MYDIR/$1 > /dev/null 2>&1 || return 1 950 if [ "x$QUIET" = xno ]; then 951 l10n_print "Installing patch %s" "$1" 952 fi 953 IFS=" " 954 if [ "x$ROOTDIR" = x ]; then 955 logrun $PATCHADD * || return 1 956 else 957 logrun $PATCHADD -R "$ROOTDIR" * || return 1 958 fi 959 rm -rf $TEMPDIR/patchinst/* || return 1 960 cd / 961 } 962 963 do_install_patches () { 964 IFS=, 965 if [ ! -z "$PATCHES" ]; then 966 l10n_print "Installing required patches..." 967 fi 968 for p in $PATCHES; do 969 test -z "$p" && continue 970 # Skip if patch already applied. 971 patchnum=`basename $p .zip` 972 # Remove 'T' t-patch prefix if present. showrev doesn't show it. 973 patchnum=`echo $patchnum | sed 's/^T//'` 974 if [ -z "`showrev -p | awk '{print $2}' | /usr/bin/grep -s $patchnum`" ]; then 975 install_patch $p || \ 976 msg_error "Failed to install patch %s" "$p" 977 fi 978 done 979 } 980 981 do_install () { 982 if [ "x$PRODUCTS" = x -a "x$PATCHES" = x ]; then 983 msg_fatal "No products selected." 984 fi 985 so=ok 986 product_is_selected staroffice && product_is_selected starsuite && \ 987 so=not_ok 988 if [ x$so = xnot_ok ]; then 989 if [ "x$INTERACTIVE" = "xyes" ]; then 990 so_menu || return $? 991 else 992 msg_fatal "You cannot select both StarOffice and StarSuite" 993 fi 994 fi 995 996 l10n_print "Checking for sufficient disk space..." 997 disk_usage_init 998 IFS=, 999 for prod in $PRODUCTS; do 1000 test -z "$prod" && continue 1001 if [ ! -r "$prod/.pkgsize" ]; then 1002 msg_warning "WARNING: disk space usage information missing from directory %s" "$prod" 1003 continue 1004 fi 1005 exec < "$prod/.pkgsize" 1006 while read line; do 1007 the_dir=`echo "$line" | cut -f3- -d' '` 1008 the_size=`echo "$line" | cut -f2 -d' '` 1009 disk_usage_add "$ROOTDIR$the_dir" "$the_size" 1010 done 1011 exec <& 1 1012 done 1013 1014 clear 1015 product_is_selected staroffice && so_disk_space_check StarOffice 1016 product_is_selected starsuite && so_disk_space_check StarSuite 1017 1018 disk_usage_check 1019 1020 l10n_print "Removing older versions of JDS packages..." 1021 1022 l10n_print "Determining package installation order..." 1023 1024 backup $LOGFILE 1025 echo "JDS Installation Log opened at `LANG=C LC_ALL=C date`" > $LOGFILE 1026 1027 do_install_patches 1028 1029 IFS=, 1030 for prod in $PRODUCTS; do 1031 test -z "$prod" && continue 1032 if [ ! -d "$MYDIR/$prod" ]; then 1033 msg_warning "Product %s not found in the install image" "$prod" 1034 continue 1035 fi 1036 prodname=`echo "$ALL_PRODUCTS" | grep "^$prod=" | cut -f2- -d=` 1037 if [ -z "$prodname" ]; then 1038 prodname=$prod 1039 fi 1040 if [ "x$QUIET" = xno ]; then 1041 echo 1042 echo ------------------------------------------------- 1043 fi 1044 lprodname=$(l10n_print "$prodname") 1045 l10n_print "Installing Product \"%s\"" "$lprodname" 1046 if [ -r "$MYDIR/$prod/.remove-always" ]; then 1047 remove_always $prod 1048 fi 1049 # if [ -r "$MYDIR/$prod/.remove-if-older" ]; then 1050 # remove_if_older $prod 1051 # fi 1052 install_product $prod 1053 done 1054 } 1055 1056 product_is_selected () { 1057 echo ",$PRODUCTS," | grep ",$1," > /dev/null 2>&1 1058 } 1059 1060 # Examine LANG variable to determine whether to select StarOffice or StarSuite. 1061 staroffice_or_starsuite() { 1062 if [ -n "$LANG" ] 1063 then 1064 # Japan, China, Taiwan and Korean get StarSuite. 1065 case `echo $LANG | cut -c1,2` in 1066 ja|zh|tw|ko) return 0;; 1067 esac 1068 fi 1069 1070 # If not set assume it is not Asian and therefore use StarOffice. 1071 return 1 1072 } 1073 1074 select_product () { 1075 test -z "$1" && return 1 1076 product