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 26ONLDCPIO=/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# 38if [ -h ${BASEDIR}/lib ] 39then 40 LIBBASE=usr/lib 41 ETCLIST="etc/lib/ld.so.1 etc/lib/libdl.so.1" 42else 43 LIBBASE=lib 44fi 45export LIBBASE 46 47 48build_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 64build_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 79build_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. 108build_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. 112LIBLIST=`build_liblist` 113FILELIST=`build_filelist` 114for file in $LIBLIST $FILELIST $ETCLIST 115do 116 echo $file 117done > ${SGSBACKUPDIR}.origfiles 118 119# 120# backup all existing SGStools. 121# 122echo "Backup up existing SGS tools to $SGSBACKUPDIR..." 123cd $BASEDIR 124cpio -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# 139echo "Installing new SGSTOOLS from $BASEDIR/$SGSDIR" 140 141prev_bindnow=$LD_BIND_NOW 142LD_BIND_NOW=1 143export LD_BIND_NOW 144 145cd $BASEDIR/$SGSDIR/lib 146find . -depth -print | cpio -o -O $ONLDCPIO 147cd $BASEDIR/$LIBBASE 148cpio -imdu < $ONLDCPIO 149rm -f $ONLDCPIO 150 151# 152# Then everything else 153# 154cd $BASEDIR/$SGSDIR 155find usr -depth -print | cpio -o -O $ONLDCPIO 156cd $BASEDIR 157cpio -imdu < $ONLDCPIO 158rm -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# 165if [ "${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 171fi 172 173LD_BIND_NOW=$prev_bindnow 174