1 # 2 # CDDL HEADER START 3 # 4 # The contents of this file are subject to the terms of the 5 # Common Development and Distribution License (the "License"). 6 # You may not use this file except in compliance with the License. 7 # 8 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 # or http://www.opensolaris.org/os/licensing. 10 # See the License for the specific language governing permissions 11 # and limitations under the License. 12 # 13 # When distributing Covered Code, include this CDDL HEADER in each 14 # file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 # If applicable, add the following below this CDDL HEADER, with the 16 # fields enclosed by brackets "[]" replaced with your own identifying 17 # information: Portions Copyright [yyyy] [name of copyright owner] 18 # 19 # CDDL HEADER END 20 # 21 # 22 # Copyright 2009 Sun Microsystems, Inc. All rights reserved. 23 # Use is subject to license terms. 24 # 25 26 ONLDCPIO=/tmp/SUNWonld.cpio.$$ 27 28 29 # 30 # This script handles the installation of the new sgstools on 31 # both Solaris10 systems (which libraries moved to '/lib') and 32 # pre Solaris10 systems where libraries reside under '/usr/lib'. 33 # 34 # We test to deterine if '/lib' is a symlink (pre Solaris10) or a 35 # directory (Solaris10 & later). We key off of that for 36 # everything below. 37 # 38 if [ -h ${BASEDIR}/lib ] 39 then 40 LIBBASE=usr/lib 41 ETCLIST="etc/lib/ld.so.1 etc/lib/libdl.so.1" 42 else 43 LIBBASE=lib 44 fi 45 export LIBBASE 46 47 48 build_liblist () 49 { 50 # 51 # Build '/lib' file list for backing up 52 # 53 cd $BASEDIR/$SGSDIR/lib 54 find . \( -type f -o -type l \) -print | sed 's/^\.\///'g | 55 while read file 56 do 57 if [ \( -f $BASEDIR/$LIBBASE/$file \) -o \ 58 \( -h $BASEDIR/$LIBBASE/$file \) ]; then 59 echo $LIBBASE/$file 60 fi 61 done 62 } 63 64 build_filelist() 65 { 66 # 67 # Build rest of files 68 # 69 cd $BASEDIR/$SGSDIR 70 find usr \( -type f -o -type l \) -print | while read file 71 do 72 if [ \( -f $BASEDIR/$file \) -o \ 73 \( -h $BASEDIR/$file \) ]; then 74 echo $file 75 fi 76 done 77 } 78 79 build_newitemsfile () 80 { 81 rm -f ${SGSBACKUPDIR}.newfiles 82 83 # Build a list of files/directories that this package is going 84 # add to the system that do not already exist. 85 cd $BASEDIR/$SGSDIR/lib 86 find . -depth -print | sed 's/^\.\///'g | while read file 87 do 88 # Built in /bin/sh test lacks -e 89 /usr/bin/test \! -e "$BASEDIR/$LIBBASE/$file" 90 if [ $? = 0 ]; then 91 echo $LIBBASE/$file >> ${SGSBACKUPDIR}.newfiles 92 fi 93 done 94 95 cd $BASEDIR/$SGSDIR 96 find usr -depth -print | while read file 97 do 98 /usr/bin/test \! -e "$BASEDIR/$file" 99 if [ $? = 0 ]; then 100 echo $file >> ${SGSBACKUPDIR}.newfiles 101 fi 102 done 103 } 104 105 # Generate a file containing the names of the files and directories 106 # that are being added (as opposed to being replaced) to the system. 107 # These items will need to be explicitly removed at uninstall. 108 build_newitemsfile 109 110 # Generate a file containing the names of the original files backed 111 # up from the system. These items will be moved back at uninstall. 112 LIBLIST=`build_liblist` 113 FILELIST=`build_filelist` 114 for file in $LIBLIST $FILELIST $ETCLIST 115 do 116 echo $file 117 done > ${SGSBACKUPDIR}.origfiles 118 119 # 120 # backup all existing SGStools. 121 # 122 echo "Backup up existing SGS tools to $SGSBACKUPDIR..." 123 cd $BASEDIR 124 cpio -pdm $BASEDIR/$SGSBACKUPDIR < ${SGSBACKUPDIR}.origfiles 125 126 127 # 128 # Overwrite SGSTOOLS onto existing system. We use CPIO 129 # because it unlinks a file and then creates a new one 130 # instead of copying over an existing inode. This is 131 # required when updating libraries (and the run-time linker) 132 # which are currently being used. 133 # 134 135 136 # 137 # First '/lib' components 138 # 139 echo "Installing new SGSTOOLS from $BASEDIR/$SGSDIR" 140 141 prev_bindnow=$LD_BIND_NOW 142 LD_BIND_NOW=1 143 export LD_BIND_NOW 144 145 cd $BASEDIR/$SGSDIR/lib 146 find . -depth -print | cpio -o -O $ONLDCPIO 147 cd $BASEDIR/$LIBBASE 148 cpio -imdu < $ONLDCPIO 149 rm -f $ONLDCPIO 150 151 # 152 # Then everything else 153 # 154 cd $BASEDIR/$SGSDIR 155 find usr -depth -print | cpio -o -O $ONLDCPIO 156 cd $BASEDIR 157 cpio -imdu < $ONLDCPIO 158 rm -f $ONLDCPIO 159 160 161 # 162 # Populate '/etc/lib' directories on systems with the 163 # run-time linker installed under '/usr/lib/ld.so.1' 164 # 165 if [ "${ETCLIST}x" != "x" ]; then 166 cp $BASEDIR/usr/lib/ld.so.1 $BASEDIR/etc/lib/ld.so.1.onld 167 cp $BASEDIR/usr/lib/libdl.so.1 $BASEDIR/etc/lib/libdl.so.1.onld 168 cd $BASEDIR/etc/lib 169 mv ld.so.1.onld ld.so.1 170 mv libdl.so.1.onld libdl.so.1 171 fi 172 173 LD_BIND_NOW=$prev_bindnow