summaryrefslogtreecommitdiff
path: root/setup_native/scripts/install_solaris.sh
diff options
context:
space:
mode:
Diffstat (limited to 'setup_native/scripts/install_solaris.sh')
-rw-r--r--setup_native/scripts/install_solaris.sh364
1 files changed, 364 insertions, 0 deletions
diff --git a/setup_native/scripts/install_solaris.sh b/setup_native/scripts/install_solaris.sh
new file mode 100644
index 000000000000..624999f44f37
--- /dev/null
+++ b/setup_native/scripts/install_solaris.sh
@@ -0,0 +1,364 @@
+#!/bin/bash
+
+ADD="no"
+LINK="no"
+UPDATE="no"
+USAGE="Usage: $0 [-a] [-l] [-h] <pkg-source-dir> <office-installation-dir>"
+
+help()
+{
+ echo
+ echo "User Mode Installation script for developer and knowledgeable early access tester"
+ echo
+ echo "This installation method is not intended for use in a production environment!"
+ echo "Using this script is unsupported and completely at your own risk"
+ echo
+ echo "Usage:" $0 "<pkg-source-dir> <office-installation-dir> [-l]"
+ echo " <pkg-source-dir>: directory *only* containing the Solaris pkg packages to be installed"
+ echo " or language pack shell script containing the Solaris pkg packages"
+ echo " <office-installation-dir>: directory to where the office and the pkg database will get installed into"
+ echo
+ echo "Optional Parameter:"
+ echo " -a : add to an existing <office-installation-dir>"
+ echo " -l : create a link \"soffice\" in $HOME"
+ echo " -h : output this help"
+}
+
+try_to_unpack_languagepack_file()
+{
+ FILENAME=$PACKAGE_PATH
+
+ # Checking, if $FILENAME is a language pack.
+ # String "language package" has to exist in the shell script file.
+ # If this is no language pack, the installation is not supported
+
+ SEARCHSTRING=`head -n 10 $FILENAME | grep "language package"`
+
+ if [ ! -z "$SEARCHSTRING" ]
+ then
+ echo "First parameter $FILENAME is a language pack";
+ else
+ printf "\nERROR: First parameter $FILENAME is a file, but no language pack shell script.\n"
+ echo $USAGE
+ exit 2
+ fi
+
+ echo "Unpacking shell script $FILENAME"
+ # TAILLINE=`head -n 20 $FILENAME | sed --quiet 's/linenum=//p'`
+ TAILLINE=`head -n 20 $FILENAME | sed -n 's/linenum=//p'`
+
+ if [ -x "/usr/bin/mktemp" ] # available in Solaris 10
+ then
+ UNPACKDIR=`mktemp -d`
+ else
+ UNPACKDIR=/var/tmp/install_$$
+ mkdir $UNPACKDIR
+ fi
+
+ echo $UNPACKDIR
+ tail +$TAILLINE $FILENAME | gunzip | (cd $UNPACKDIR; tar xvf -)
+
+ # Setting the new package path, in which the packages exist
+ PACKAGE_PATH=$UNPACKDIR
+
+ # Setting variable UPDATE, because an Office installation has to exist, if a language pack shall be installed
+ UPDATE="yes"
+}
+
+pkg_error()
+{
+ # pkg command failed, check for admin log and report help
+ if [ -f /tmp/.ai.pkg.zone.lock-afdb66cf-1dd1-11b2-a049-000d560ddc3e ]
+ then
+ echo "####################################################################"
+ echo "# Installation failed due to stale administrative lock #"
+ echo "####################################################################"
+ printf "\nERROR: please remove the following file first:\n"
+ ls -l /tmp/.ai.pkg.zone.lock-afdb66cf-1dd1-11b2-a049-000d560ddc3e
+ fi
+ rm -f $GETUID_SO
+ exit 1
+}
+
+get_pkg_list()
+{
+ cd $1; ls -1
+}
+
+#
+# this script is for userland not for root
+#
+
+if [ $UID -eq 0 ]
+then
+ printf "\nThis script is for installation without administrative rights only\nPlease use pkgadd/patchadd to install as root\n"
+ help
+ exit 2
+fi
+
+while getopts "alh" VALUE
+do
+ echo $VALUE
+ case $VALUE in
+ a) ADD="yes"; break;;
+ h) help; exit 0;;
+ l) LINK="yes"; break;;
+ ?) echo $USAGE; exit 2;;
+ esac
+done
+shift `expr $OPTIND - 1`
+
+if [ $# != 2 ]
+then
+ echo $USAGE
+ exit 2
+fi
+
+# Determine whether this is a patch or a regular install set ..
+/bin/bash -c "ls $1/*/patchinfo >/dev/null 2>&1"
+if [ "$?" = 0 ]
+then
+ UPDATE="yes"
+ PATCH_PATH="$1"
+ PATCH_INFO_LIST=`/bin/bash -c "cd $1; ls */patchinfo"`
+ PATCH_LIST=`for i in ${PATCH_INFO_LIST}; do dirname $i; done`
+elif [ -f "$1/patchinfo" ]
+then
+ UPDATE="yes"
+ PATCH_PATH=`dirname "$1"`
+ PATCH_LIST=`basename "$1"`
+else
+ if [ -d "$1/packages" ]
+ then
+ PACKAGE_PATH="$1/packages"
+ else
+ PACKAGE_PATH=$1
+ fi
+
+ #
+ # If the first parameter is a shell script (download installation set), the packages have to
+ # be unpacked into temp directory
+ #
+ if [ -f "$PACKAGE_PATH" ]
+ then
+ try_to_unpack_languagepack_file
+ fi
+
+ #
+ # Create sed filter script for unwanted packages
+ #
+
+ cat > /tmp/userinstall_filer.$$ << EOF
+/SUNWadabas/d
+/^SUNWj[0-9]/d
+/-desktop-int/d
+/-shared-mime-info/d
+/-cde/d
+EOF
+
+ # Do not install gnome-integration package on systems without GNOME
+ pkginfo -q SUNWgnome-vfs
+ if [ $? -ne 0 ]
+ then
+
+ echo '/-gnome/d' >> /tmp/userinstall_filer.$$
+ fi
+
+ # pkgdep sorts the packages based on their dependencies
+ PKGDEP="`dirname $0`/pkgdep"
+ if [ ! -x $PKGDEP ]; then
+ PKGDEP="get_pkg_list"
+ fi
+
+ #
+ # Get the list of packages to install
+ #
+
+ PKG_LIST=`$PKGDEP $PACKAGE_PATH | sed -f /tmp/userinstall_filer.$$`
+ rm -f /tmp/userinstall_filer.$$
+
+ if [ -z "$PKG_LIST" ]
+ then
+ printf "\n$0: No packages found in $PACKAGE_PATH\n"
+ exit 2
+ fi
+
+ echo "Packages found:"
+ for i in $PKG_LIST ; do
+ echo $i
+ done
+fi
+
+INSTALL_ROOT=$2
+if [ "$UPDATE" = "yes" ]
+then
+ if [ ! -d ${INSTALL_ROOT}/var/sadm/install/admin ]
+ then
+ printf "\n$0: No package database in ${INSTALL_ROOT}.\n"
+ exit 2
+ fi
+else
+ if [ "$ADD" = "no" ]
+ then
+ rmdir ${INSTALL_ROOT} 2>/dev/null
+ if [ -d ${INSTALL_ROOT} ]
+ then
+ printf "\n$0: ${INSTALL_ROOT} exists and is not empty.\n"
+ exit 2
+ fi
+ fi
+ mkdir -p ${INSTALL_ROOT}/var/sadm/install/admin
+fi
+
+# Previous versions of this script did not write this file
+if [ ! -f ${INSTALL_ROOT}/var/sadm/install/admin/default ]
+then
+ cat > ${INSTALL_ROOT}/var/sadm/install/admin/default << EOF
+action=nocheck
+conflict=nocheck
+setuid=nocheck
+idepend=nocheck
+mail=
+EOF
+fi
+
+if [ ! "${INSTALL_ROOT:0:1}" = "/" ]; then
+ INSTALL_ROOT=`cd ${INSTALL_ROOT}; pwd`
+fi
+
+# This script must exist to make extension registration work
+# always overwrite to get the latest version.
+mkdir -p ${INSTALL_ROOT}/usr/lib
+cat > ${INSTALL_ROOT}/usr/lib/postrun << \EOF
+#!/bin/sh
+set -e
+
+# Override UserInstallation in bootstraprc for unopkg ..
+UserInstallation='$BRAND_BASE_DIR/../UserInstallation'
+export UserInstallation
+
+if [ -x /usr/bin/mktemp ]
+then
+ CMD=`/usr/bin/mktemp /tmp/userinstall.XXXXXX`
+else
+ CMD=/tmp/userinstall.$$; echo "" > $CMD
+fi
+
+sed -e 's|"/|"${PKG_INSTALL_ROOT}/|g' > $CMD
+/bin/sh -e $CMD
+rm -f $CMD
+EOF
+chmod +x ${INSTALL_ROOT}/usr/lib/postrun 2>/dev/null
+
+# create local tmp directory to install on S10
+LOCAL_TMP=
+if [ -x /usr/bin/mktemp ]
+then
+ LOCAL_TMP=`mktemp -d`
+ rmdir ${INSTALL_ROOT}/tmp 2>/dev/null
+ ln -s ${LOCAL_TMP} ${INSTALL_ROOT}/tmp
+fi
+
+#
+# the tail of the script contains a shared object for overloading the getuid()
+# and a few other calls
+#
+
+GETUID_SO=/tmp/getuid.so.$$
+linenum=???
+tail +$linenum $0 > $GETUID_SO
+
+#
+# Perform the installation
+#
+if [ "$UPDATE" = "yes" ]
+then
+ # restore original "bootstraprc" prior to patching
+ for i in ${PKG_LIST}; do
+ my_dir=${INSTALL_ROOT}`pkgparam -d ${PACKAGE_PATH} "$i" BASEDIR`
+ find "$my_dir" -type f -name bootstraprc.orig -exec sh -ce 'mv "$0" `dirname "$0"`/bootstraprc' {} \;
+ done
+
+ # copy INST_RELEASE file
+ if [ ! -f ${INSTALL_ROOT}/var/sadm/system/admin/INST_RELEASE ]
+ then
+ mkdir -p ${INSTALL_ROOT}/var/sadm/system/admin 2>/dev/null
+ cp -f /var/sadm/system/admin/INST_RELEASE ${INSTALL_ROOT}/var/sadm/system/admin/INST_RELEASE
+ fi
+
+ # The case UPDATE="yes" is valid for patch installation and for language packs.
+ # For patches the variable PKG_LIST is empty, for language packs it is not empty.
+ # Patches have to be installed with patchadd, language packs with pkgadd
+
+ if [ -z "${PKG_LIST}" ]
+ then
+ LD_PRELOAD_32=$GETUID_SO /usr/sbin/patchadd -R ${INSTALL_ROOT} -M ${PATCH_PATH} ${PATCH_LIST} 2>&1 | grep -v '/var/sadm/patch' || pkg_error
+ else
+ LD_PRELOAD_32=$GETUID_SO /usr/sbin/pkgadd -d ${PACKAGE_PATH} -R ${INSTALL_ROOT} ${PKG_LIST} >/dev/null || pkg_error
+ fi
+
+else
+
+ # Create BASEDIR directories to avoid manual user interaction
+ for i in ${PKG_LIST}; do
+ mkdir -m 0755 -p ${INSTALL_ROOT}`pkgparam -d ${PACKAGE_PATH} $i BASEDIR` 2>/dev/null
+ done
+
+ if [ ! "${INSTALL_ROOT:0:1}" = "/" ]; then
+ INSTALL_ROOT=`cd ${INSTALL_ROOT}; pwd`
+ fi
+
+ echo "####################################################################"
+ echo "# Installation of the found packages #"
+ echo "####################################################################"
+ echo
+ echo "Path to the packages : " $PACKAGE_PATH
+ echo "Path to the installation : " $INSTALL_ROOT
+
+ LD_PRELOAD_32=$GETUID_SO /usr/sbin/pkgadd -d ${PACKAGE_PATH} -R ${INSTALL_ROOT} ${PKG_LIST} >/dev/null || pkg_error
+fi
+
+rm -f $GETUID_SO
+rm -f /tmp/.ai.pkg.zone.lock*
+
+# remove local tmp directory
+if [ ! -z ${LOCAL_TMP} ]
+then
+ rm -f ${LOCAL_TMP}/.ai.pkg.zone.lock*
+ rmdir ${LOCAL_TMP}
+ rm -f ${INSTALL_ROOT}/tmp
+ mkdir ${INSTALL_ROOT}/tmp
+fi
+
+#
+# Create a link into the users home directory
+#
+
+if [ "$LINK" = "yes" ]
+then
+ rm -f $HOME/soffice 2>/dev/null
+ find `cd "$INSTALL_ROOT" && pwd` -name soffice -type f -perm -u+x -exec /bin/sh -ce 'ln -sf "$0" "$HOME/soffice" && echo "Creating link from $0 to $HOME/soffice"' {} \;
+fi
+
+# patch the "bootstraprc" to create a self-containing installation
+for i in ${PKG_LIST}; do
+ my_dir=${INSTALL_ROOT}`pkgparam -d ${PACKAGE_PATH} "$i" BASEDIR`
+ find "$my_dir" -type f -name bootstraprc -exec sh -ce 'test ! -f "$0".orig && mv "$0" "$0".orig && sed '\''s,^UserInstallation=$SYSUSERCONFIG.*,UserInstallation=$BRAND_BASE_DIR/../UserInstallation,'\'' "$0".orig > "$0"' {} \;
+done
+
+# if an unpack directory exists, it can be removed now
+if [ ! -z "$UNPACKDIR" ]
+then
+ # for i in ${PKG_LIST}; do
+ # cd $UNPACKDIR; rm -rf $i
+ # done
+ # rmdir $UNPACKDIR
+
+ rm -rf $UNPACKDIR
+ echo "Removed temporary directory $UNPACKDIR"
+fi
+
+echo
+echo "Installation done ..."
+exit 0
+