#!/sbin/sh # ************************************************************* # # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. # # ************************************************************* . /lib/svc/share/smf_include.sh #The start method is used for installing and updating the #extensions. The service keeps a list #(share/extensions/install/installed) of the extensions which were #already installed. During installation, the bundled extensions are #copied to the install folder (share/extensions/install). Finally this #service, which is part of the office installation package, will be #started and the start "method" of this script is called. Then all #extensions in the "install" folder are checked if they are already #installed by reading the list "installed". Because the list is empty #at this time, all the extensions will be installed. # #If this service is restarted then the script checks if there is an #extensions which is not yet installed, that is there is no entry for #it in the 'installed' file. Only if this is the case then that #extensions will be installed and its path is added to 'installed'. # #In case of an update, new versions of existing extensions and #completely new extensions may be copied to the 'install' folder. Also #a new 'installed' file will be copied which replaces the existing #file. The new 'installed' file does not contain any entries of #installed extensions. Therefore the next time when the start method is #run all extensions contained in share/extensions/install will be #installed. #Create the folder which contains the temporary user installation INSTDIR=`/usr/bin/mktemp -d "/tmp/userinstall.XXXXXX"` OOO_BASE_DIR="/opt/openoffice/basis${OOOBASEVERSION}" case "$1" in 'start') EXTENSIONDIR=/opt/openoffice${OOOBRANDPACKAGEVERSION}/share/extension/install for FILE in $EXTENSIONDIR/*.oxt do #We check if the file exist, because if there is no extension #then $FILE will contain "<..>/*.oxt" if [ -f "$FILE" ]; then #Determine if this extension is already installed. We do #that by checking the file "installed" which contains a #list of all installed extensions including the full path EXTENSIONFILE=`basename $FILE` INSTALLED=`sed -n "/$EXTENSIONFILE/p" $EXTENSIONDIR/installed` if [ -z "$INSTALLED" ]; then #We have not found the name of the extension in the #list. That is, it has not been installed (with unopkg) yet. #Therefore we do it now. echo installing $FILE /opt/openoffice${OOOBRANDPACKAGEVERSION}/program/unopkg add --shared --bundled "$FILE" '-env:UserInstallation=file://$INSTDIR' '-env:UNO_JAVA_JFW_INSTALL_DATA=$OOO_BASE_DIR/share/config/javasettingsunopkginstall.xml' '-env:JFW_PLUGIN_DO_NOT_CHECK_ACCESSIBILITY=1' #Let us remember that this extensions has been installed #by adding the path name of the extension to the file #installed echo $FILE >> $EXTENSIONDIR/installed fi fi done #Now check for extensions which need to be uninstalled #(unopkg). This is the case if the list of extensions in the file #installed contains the name of an extension which does not exist #in the the folder <..>/share/extension/install. # LINE="" # NEWCONTENT="" # REMOVED="" # LIST=`cat $EXTENSIONDIR/installed` # #remove blank lines # LIST=`echo "$LIST" | sed '/^[:blank:]*$/d'` # echo "$LIST" | while [ 1 ] # do # read LINE || break # if [ ! -f "$LINE" ]; then # #The extension file has been removed from # #share/extension/install. Now we remove the installed # #extension # echo removing `basename $LINE` # /opt/openoffice${OOOBRANDPACKAGEVERSION}/program/unopkg remove --shared --bundled "`basename $LINE`" '-env:UserInstallation=file://$INSTDIR' '-env:UNO_JAVA_JFW_INSTALL_DATA=$OOO_BASE_DIR/share/config/javasettingsunopkginstall.xml' '-env:JFW_PLUGIN_DO_NOT_CHECK_ACCESSIBILITY=1' # REMOVED=1 # else # NEWCONTENT+=$LINE # NEWCONTENT+="\n" # fi # done # #Write the new list to the file "installed". It now has all names # #remove which refered to previously removed extensions (removed # #from .../share/extension/install) # if [ "$REMOVED" ]; then # #remove the last empty line # NEWCONTENT=`echo "$NEWCONTENT" | sed '/^[:space:]*$/d'` # echo "$NEWCONTENT" > $EXTENSIONDIR/installed # fi ;; 'stop') echo "#### stop ####" ;; *) echo "Usage: $0 { start | stop }" exit 1 ;; esac exit $SMF_EXIT_OK