I finished my Lotus/IBM/HCL software life in 2020.
Tuesday, 26 September 2006
Linux desktop - IBM szoftverek
Monday, 11 September 2006
Egy kis kitérő, ha még nem vagy elég fáradt
Kunpeszi Gerzson
(Gabriel García Márquez: Egy előre bejelentett gyilkosság krónikája című könyvének hangulata indította bennem azokat a gondolatokat, amelyeket itt papírra vetek. Hogy miért, azt nem tudom, de azt ajánlom, hogy minden szúró-vágó szerszámot távolíts el a közeledből mielőtt olvasni kezded.)
Wednesday, 6 September 2006
Lotus Domino szerver indítóóóóó script linyukszra
A megoldás sima bash parancsokat használ és két részből áll.
Az rc_domino_script-et az /opt/ibm/lotus könyvtárba kell másolni és futtatási jogot kell adni rá a root és notes usernek (lehet máshová is másolni, a domino scriptben csak át kell írni az elérési útját). Az alábbi cuccot dobd át egy rc_domino_script nevű fájlba
-----------------------------------------------------------------------------------------------
#!/bin/sh
########################################################################
# Start/Stop Script for Domino on xLinux/zLinux/AIX/Solaris
# 2005-2006 written by Daniel Nashed, feedback domino_unix@nashcom.de
# Version 1.4 02.04.2006
########################################################################
# determine notes/os level user
DOMINO_USER=$LOGNAME
# IBM WebSphere Application Server / Portal configuration for HTTP plugin
WAS_PLUGIN_CONFIG_FILE=/opt/IBM/WebSphere/Plugins/config/webserver1/plugin-cfg.xml
export WAS_PLUGIN_CONFIG_FILE
# --- configuration per domino partition ---
if [ $DOMINO_USER = notes ]; then
LOTUS=/opt/ibm/lotus
DOMINO_DATA_PATH=/local/notesdata
# DOMINO_LANG=de_DE
DOMINO_SHUTDOWN_TIMEOUT=600
DOMINO_CONFIGURED="yes"
elif [ $DOMINO_USER = notes1 ]; then
# ... cloned section for each domino partition ...
DOMINO_CONFIGURED="yes"
else
echo "Domino Server for '$DOMINO_USER' not configured"
exit 1
fi
export DOMINO_USER
export LOTUS
export DOMINO_DATA_PATH
export DOMINO_LANG
export DOMINO_START_SCRIPT
export DOMINO_SHUTDOWN_TIMEOUT
# determine architecture and platform
if [ `uname` = AIX ]; then
LARCH=ibmpow
PLATFORM_NAME=AIX
elif [ `uname` = SunOS ]; then
if [ `uname -p` = sparc ]; then
LARCH=sunspa
PLATFORM_NAME=Solaris
else
LARCH=sunx86
PLATFORM_NAME=Solaris/x86
fi
elif [ `uname` = Linux ]; then
LARCH=linux
UNAME=`uname -m`
if [ $UNAME = s390 ]; then
PLATFORM_NAME=zLinux
elif [ $UNAME = s390x ]; then
PLATFORM_NAME=zLinux
else
PLATFORM_NAME=xLinux
fi
# query linux distribution
if [ ${LARCH} = "linux" ]; then
if [ -e /etc/SuSE-release ] ; then
LINUX_DISTRIBUTION=suse
elif [ -e /etc/redhat-release ] ; then
LINUX_DISTRIBUTION=redhat
else
LINUX_DISTRIBUTION=unknown
fi
fi
fi
if [ -z "$LARCH" ]; then
echo "Unknown platform `uname`"
exit 1
fi
export LARCH
export PLATFORM_NAME
# shell script variable definitions
# --- configuration begin ---
# domino language settings
if [ -z "$DOMINO_LANG" ]; then
DOMINO_LANG=de_DE
export DOMINO_LANG
fi
# domino shutdown timeout in seconds
if [ -z "$DOMINO_SHUTDOWN_TIMEOUT" ]; then
DOMINO_SHUTDOWN_TIMEOUT=600
export DOMINO_SHUTDOWN_TIMEOUT
fi
# set domino binary directory
if [ -z "$LOTUS" ]; then
LOTUS=/opt/lotus
export LOTUS
fi
# base directory for domino server partitions
DOMINO_DATA_PATH_BASE=/local/domino
# enable to use the Java Controller
#USE_JAVA_CONTROLLER="yes"
# Broadcast a shutdown message to all users of the Domino Server
#BROADCAST_SHUTDOWN_MESSAGE="yes"
# SLES8 Linux Tuning
#SUSE_DOMINO_PTHREAD_EXTENSION="yes"
SUSE_TUNING_DIR=/opt/dominowrap/domino6
# compress command used e.g. for log file compression
COMPRESS_COMMAND="gzip --best"
PS_COMMAND="ps"
# enable script debug output
#DEBUG_MODE="yes"
# --- configuration end ---
# additional internal script variables
SCRIPT_NAME=$0
PARAM=$1
DOMINO_BIN=$LOTUS/bin/server
if [ "$DEBUG_MODE" = "yes" ] ; then
NSD_BIN="$LOTUS/bin/nsd -debug"
else
NSD_BIN=$LOTUS/bin/nsd
fi
if [ -z "$DOMINO_INSDIR" ]; then
DOMINO_INSDIR=$LOTUS
export DOMINO_INSDIR
fi
# set notes exec directory for domino c-api add-on software
Notes_ExecDirectory=$LOTUS/notes/latest/$LARCH
export Notes_ExecDirectory
# export lib search path per platform
if [ ${LARCH} = "ibmpow" ]; then
LIBPATH=$Notes_ExecDirectory
export LIBPATH
fi
if [ ${LARCH} = "sunspa" ]; then
LD_LIBRARY_PATH=$Notes_ExecDirectory
export LD_LIBRARY_PATH
fi
if [ ${LARCH} = "linux" ]; then
LD_LIBRARY_PATH=$Notes_ExecDirectory
export LD_LIBRARY_PATH
fi
if [ ${LARCH} = "linux" ]; then
PS_COMMAND="ps -w"
fi
# check if data path has been already set. else set it based on user-name and base directory.
if [ -z "$DOMINO_DATA_PATH" ]; then
DOMINO_DATA_PATH=$DOMINO_DATA_PATH_BASE/$DOMINO_USER/notesdata # path for server data directory
export DOMINO_DATA_PATH
fi
# general environment parameters
DOMINO_SERVER=$DOMINO_USER # Name of Domino Server
DOMINO_INI_PATH=$DOMINO_DATA_PATH/notes.ini
PATH=$DOMINO_DATA_PATH:$LOTUS/bin:$Notes_ExecDirectory:$Notes_ExecDirectory/res/C:$PATH
export DOMINO_SERVER
export DOMINO_INI_PATH
export PATH
# check if log path has been already set. else set it based on user-name and base directory.
if [ -z "$DOMINO_OUTPUT_LOG" ]; then
DOMINO_OUTPUT_LOG=$DOMINO_DATA_PATH/$DOMINO_SERVER.log # Output file for server console
export DOMINO_OUTPUT_LOG
fi
if [ -z "$DOMINO_INPUT_FILE" ]; then
DOMINO_INPUT_FILE=$DOMINO_DATA_PATH/$DOMINO_USER.input # Input file for server console
export DOMINO_INPUT_FILE
fi
if [ "$USE_JAVA_CONTROLLER" = "yes" ] ; then
JAVE_CONTROLLER_STRING="-jc -c"
fi
if [ "$LINUX_DISTRIBUTION" = "suse" ] ; then
if [ "$SUSE_DOMINO_PTHREAD_EXTENSION" = "yes" ] ; then
LD_PRELOAD=$SUSE_TUNING_DIR/libpthread.so:$SUSE_TUNING_DIR/librt.so:$LD_PRELOAD
export LD_PRELOAD
fi
fi
# environment settings needed for Domino servers
LANG=$DOMINO_LANG
export LANG
# helper functions
function stop_monitor
{
kill -9 $MONITOR_PID > /dev/null
echo "Live Console closed."
echo
echo
exit 0
}
function DebugText
{
if [ "$DEBUG_MODE" = "yes" ] ; then
echo $1 $2 $3 $4 $5
fi
}
function usage
{
echo "Usage: `basename $SCRIPT_NAME` { start | stop | stopjc | restart | status | monitor | info | nsd | fullnsd | kill | archivelog | setenv }"
}
function errmsg
{
echo $1 >&2
}
function cleanup_domino_server_old_style
{
# Kill all domino processes but keep the java controller
for pid in `$PS_COMMAND -fu $DOMINO_USER | grep "$LOTUS" | grep -v "$SCRIPT_NAME" | grep -v "grep" | grep -v " -jc" | awk '{ print $2 }'`; do
kill -9 $pid
done
# Clean up IPC if the Domino Server terminated abnormally
rm -f $DOMINO_DATA/~notes.lck
if [ ${LARCH} = "ibmpow" ]; then
mems=`ipcs -m | grep "$DOMINO_USER" | grep ^m | awk '{ print $2 }'`
sems=`ipcs -s | grep "$DOMINO_USER" | grep ^s | awk '{ print $2 }'`
mqs=`ipcs -q | grep "$DOMINO_USER" | grep ^q | awk '{ print $2 }'`
fi
if [ ${LARCH} = "sunspa" ]; then
# todo
mems=
sems=
mqs=
fi
if [ ${LARCH} = "linux" ]; then
mems=`ipcs -m | grep "$DOMINO_USER" | grep ^0x | awk '{ print $2 }'`
sems=`ipcs -s | grep "$DOMINO_USER" | grep ^0x | awk '{ print $2 }'`
mqs=`ipcs -q | grep "$DOMINO_USER" | grep ^0x | awk '{ print $2 }'`
fi
for j in $mems; do if [ -n "$j" ]; then ipcrm -m $j; fi; done
for j in $sems; do if [ -n "$j" ]; then ipcrm -s $j; fi; done
for j in $mqs; do if [ -n "$j" ]; then ipcrm -q $j; fi; done
}
function cleanup_domino_server
{
cd $DOMINO_DATA_PATH
$NSD_BIN -kill
}
function cleanup_java_controller
{
# Kill java controller process
for pid in `$PS_COMMAND -fu $DOMINO_USER | grep "$LOTUS" | grep -v "$SCRIPT_NAME" | grep -v "grep" | grep " -jc" | awk '{ print $2 }'`; do
kill -9 $pid
done
if [ -e $DOMINO_DATA_PATH/.jsc_lock ]; then
rm $DOMINO_DATA_PATH/.jsc_lock
fi
}
function domino_is_running
{
DOMINO_RUNNING=`$PS_COMMAND -fu $DOMINO_USER | grep "$LOTUS" | grep "server" | grep -v " -jc"`
DebugText "DOMINO_USER:" $DOMINO_USER
DebugText "DOMINO_RUNNING:" $DOMINO_RUNNING
if [[ -n $DOMINO_RUNNING ]] ; then
DebugText "Domino is running"
return 1
else
DebugText "Domino is NOT running"
return 0
fi
}
function domino_status_check
{
domino_is_running
if [ $? -eq 1 ] ; then
echo "Domino Server is running ($DOMINO_SERVER)"
return 0
else
echo "Domino Server is NOT running ($DOMINO_SERVER)"
return 3
fi
}
function java_controller_is_running
{
JAVA_CONTROLLER_RUNNING=`$PS_COMMAND -fu $DOMINO_USER | grep "$LOTUS" | grep "server" | grep -v "grep" | grep " -jc"`
if [[ -n $JAVA_CONTROLLER_RUNNING ]] ; then
DebugText "Java Controller is running"
return 1
else
DebugText "Java Controller is NOT running"
return 0
fi
}
function shutdown_domino_server
{
cd $DOMINO_DATA_PATH
$DOMINO_BIN -q >> $DOMINO_OUTPUT_LOG 2>&1 &
count=0
domino_is_running
while [ $? -eq 1 ] ; do
sleep 10
count=`expr $count + 1`
seconds=`expr $count "*" 10`
echo " ... waiting $seconds seconds"
# Terminate Domino Server if still running
if [ "$seconds" -eq "$DOMINO_SHUTDOWN_TIMEOUT" ] ; then
echo "Domino Server is still running after $seconds seconds"
echo " ... now for the ungraceful method"
cleanup_domino_server
echo "Domino Server ($DOMINO_SERVER) TERMINATED"
exit
fi
domino_is_running
done
}
function shutdown_java_controller
{
echo y | $DOMINO_BIN -jc -q >> $DOMINO_OUTPUT_LOG 2>&1 &
echo $DOMINO_BIN -jc -q
count=0
java_controller_is_running
while [ $? -eq 1 ] ; do
sleep 10
count=`expr $count + 1`
if [ $count -eq 10 ] ; then
# kill java controller and lock file
cleanup_java_controller
fi
java_controller_is_running
done
}
function shutdown_broadcast_message
{
if [ "$BROADCAST_SHUTDOWN_MESSAGE" = "yes" ] ; then
$DOMINO_BIN -c ' BROADCAST "(!) Domino Server will be stopped now"' >> $DOMINO_OUTPUT_LOG 2>&1
fi
}
# --- sanity check for server environment ---
# check if script is executed with root user
if [ "$DOMINO_USER" = "root" ]; then
errmsg "Run the Domino Server as a notes user - exiting "
exit 1
fi
# check rights to execute domino binaries
if [ ! -x $DOMINO_BIN ] ; then
errmsg "Cannot access server command ($DOMINO_BIN) - exiting"
exit 1
fi
# check notes-data directory
if [ ! -d $DOMINO_DATA_PATH ] ; then
errmsg "Cannot access notes data directory ($DOMINO_DATA_PATH) - exiting"
exit 1
fi
# check right to write to notes.ini
if [ ! -w $DOMINO_INI_PATH ] ; then
errmsg "Cannot write to notes.ini ($DOMINO_INI_PATH) - exiting"
exit 1
fi
if [ "$LINUX_DISTRIBUTION" = "suse" ] ; then
# init suse rc
. /etc/rc.status
# reset status of this service
rc_reset
else
#dummy functions for non-suse platforms
function rc_status
{
return 0
}
function rc_check
{
return 0
}
function rc_exit
{
return 0
}
fi
# --- main script logic ---
case "$PARAM" in
start)
domino_is_running
if [ $? -eq 1 ] ; then
errmsg "Domino Server is already running - exiting"
exit 1
fi
if [ -e $DOMINO_DATA_PATH/domino_disabled ] ; then
errmsg "Domino Server is disabled for Maintenance"
exit 1
fi
cd $DOMINO_DATA_PATH
# cleanup
# terminate java controlle before restarting domino server with java controller
if [ "$USE_JAVA_CONTROLLER" = "yes" ] ; then
java_controller_is_running
if [ $? -eq 1 ] ; then
shutdown_java_controller
fi
fi
#empty the input file
cat /dev/null > $DOMINO_INPUT_FILE
# for servers using Notes passwords,
# replace the previous line with the following line.
# cat .secure_hidden_passwd > $DOMINO_INPUT_FILE
# move log-file and compress it
DOMINO_OUTPUT_LOG_BACKUP=$DOMINO_OUTPUT_LOG.`date +"%y%m%d_%H%M%S"`
if [ -r $DOMINO_OUTPUT_LOG ] ; then
mv $DOMINO_OUTPUT_LOG $DOMINO_OUTPUT_LOG_BACKUP >/dev/null
$COMPRESS_COMMAND $DOMINO_OUTPUT_LOG_BACKUP >/dev/null &
fi
echo "Starting Domino for $PLATFORM_NAME ($DOMINO_SERVER)"
echo "---- environment info ----" > $DOMINO_OUTPUT_LOG
set >> $DOMINO_OUTPUT_LOG
if [ ${LARCH} = "ibmpow" ]; then
# AIX platform tuning parameters
echo "---- ulimit soft info ----" >> $DOMINO_OUTPUT_LOG
ulimit -a >> $DOMINO_OUTPUT_LOG
echo "---- ulimit hard info ----" >> $DOMINO_OUTPUT_LOG
ulimit -a -H >> $DOMINO_OUTPUT_LOG
echo "---- no info ----" >> $DOMINO_OUTPUT_LOG
no -a >> $DOMINO_OUTPUT_LOG
fi
if [ ${LARCH} = "sunspa" ]; then
# Solaris platform tuning parameters
echo "---- ulimit soft info ----" >> $DOMINO_OUTPUT_LOG
ulimit -a >> $DOMINO_OUTPUT_LOG
echo "---- ulimit hard info ----" >> $DOMINO_OUTPUT_LOG
ulimit -a -H >> $DOMINO_OUTPUT_LOG
fi
if [ ${LARCH} = "linux" ]; then
# Linux platform tuning parameters
if [ -z "$Notes_SHARED_DPOOLSIZE" ]; then
export Notes_SHARED_DPOOLSIZE=20971520
fi
echo "---- ulimit soft info ----" >> $DOMINO_OUTPUT_LOG
ulimit -a >> $DOMINO_OUTPUT_LOG
echo "---- ulimit hard info ----" >> $DOMINO_OUTPUT_LOG
ulimit -a -H >> $DOMINO_OUTPUT_LOG
fi
echo "---- end of info messages ----" >> $DOMINO_OUTPUT_LOG
echo >> $DOMINO_OUTPUT_LOG
$DOMINO_BIN $JAVE_CONTROLLER_STRING < $DOMINO_INPUT_FILE >> $DOMINO_OUTPUT_LOG 2>&1 &
echo "done PID is $!"
# remember status and be verbose
rc_status -v
;;
archivelog)
DOMINO_OUTPUT_LOG_BACKUP=$DOMINO_OUTPUT_LOG.`date +"%y%m%d_%H%M%S"`
# copy log-file and compress
if [ -r $DOMINO_OUTPUT_LOG ] ; then
# copy log file
cp $DOMINO_OUTPUT_LOG $DOMINO_OUTPUT_LOG_BACKUP >/dev/null
# empty log file
cat /dev/null > $DOMINO_OUTPUT_LOG
echo "--- moved log file to '$DOMINO_OUTPUT_LOG_BACKUP' ---" >> $DOMINO_OUTPUT_LOG
# compress log file
$COMPRESS_COMMAND $DOMINO_OUTPUT_LOG_BACKUP >/dev/null
echo "archived log file to '$DOMINO_OUTPUT_LOG_BACKUP'"
else
echo "no log file to archive"
fi
# remember status and be verbose
rc_status -v
;;
stop)
echo "Stopping Domino for $PLATFORM_NAME ($DOMINO_SERVER)"
echo " ... waiting for shutdown to complete"
shutdown_broadcast_message
shutdown_domino_server
echo "Domino for $PLATFORM_NAME ($DOMINO_SERVER) shutdown completed"
# remember status and be verbose
rc_status -v
;;
stopjc)
# stop domino server before stoping java controller
domino_is_running
if [ $? -eq 1 ] ; then
echo "Stopping Domino for $PLATFORM_NAME ($DOMINO_SERVER)"
echo " ... waiting for shutdown to complete"
shutdown_broadcast_message
shutdown_domino_server
fi
echo "Stopping Java Controler for $PLATFORM_NAME ($DOMINO_SERVER)"
shutdown_java_controller
echo "Java Controler for $PLATFORM_NAME ($DOMINO_SERVER) shutdown completed"
# remember status and be verbose
rc_status -v
;;
monitor)
if [ ! -r $DOMINO_OUTPUT_LOG ] ; then
errmsg "Cannot read server-log ($DOMINO_OUTPUT_LOG) - exiting"
exit 1
fi
if [ ! -w $DOMINO_INPUT_FILE ] ; then
errmsg "Cannot write server-input-file ($DOMINO_INPUT_FILE) - exiting"
exit 1
fi
echo
echo "--- Live Console for $DOMINO_SERVER ---"
echo
echo "To stop console, always ctrl+c."
echo
echo
sleep 2
tail -f $DOMINO_OUTPUT_LOG &
MONITOR_PID=$!
trap "stop_monitor" 1 2 3
while true
do
read var
echo $var >> $DOMINO_INPUT_FILE
done
;;
restart)
# Stop the service and regardless of whether it was running or not, start it again.
$0 stop "$2" "$3"
$0 start "$2" "$3"
# remember status and be quiet
rc_status
;;
fullnsd)
# run NSD
echo "Running full NSD for ($DOMINO_SERVER)"
cd $DOMINO_DATA_PATH
$NSD_BIN
;;
nsd)
# run NSD -nomemcheck
echo "Running NSD -nomemcheck for ($DOMINO_SERVER)"
cd $DOMINO_DATA_PATH
$NSD_BIN -info
;;
info)
# run NSD -info
echo "Running NSD -info for ($DOMINO_SERVER)"
cd $DOMINO_DATA_PATH
$NSD_BIN -info
;;
kill)
# run NSD -kill
echo "Running NSD -kill for ($DOMINO_SERVER)"
cd $DOMINO_DATA_PATH
$NSD_BIN -kill
;;
status)
domino_status_check
# remember status and be verbose
rc_status -v
;;
setenv)
# just set the environment
exit 0
;;
test)
set
;;
*)
usage
exit 1
;;
esac
rc_exit
A másik fájlt az /etc/init.d -be kell tenni. A root futtatási joggal kell rendelkezzen a fájlra vonatkozóan. Az alábbi cuccot dobd át egy domino nevű fájlba
-------------------------------------------------------------------------------------------
#!/bin/sh
########################################################################
# Start/Stop Script for Domino on xLinux/zLinux/AIX/Solaris
# 2005 written by Daniel Nashed, feedback domino_unix@nashcom.de
# Version 1.4 02.04.2006
########################################################################
# chkconfig: 2345 66 19
# description: Lotus Domino Server
### BEGIN INIT INFO
# Provides: rc_domino
# Required-Start: $remote_fs $syslog $network
# Required-Stop: $remote_fs $syslog
# Default-Start: 3 5
# Default-Stop: 0 1 2 6
# Short-Description: IBM Lotus Domino Server (notes)
# Description: IBM Lotus Domino Server (notes)
# Start/Stop Script for xLinux/zLinux/AIX/Solaris
# 2005 written by Daniel Nashed (domino_unix@nashcom.de)
### END INIT INFO
# set default user to "notes" if no user is specified
if [ -z "$DOMINO_USER" ]; then
DOMINO_USER=notes
fi
DOMINO_START_SCRIPT=/opt/ibm/lotus/rc_domino_script
SWITCH_USER=0
# starting a server always needs a switch to a separate run-time environment
if [ "$LOGNAME" = "$DOMINO_USER" ] ; then
if [ "$1" = "start" ] ; then
SWITCH_USER=1
fi
if [ "$1" = "restart" ] ; then
SWITCH_USER=1
fi
else
SWITCH_USER=1
fi
if [ "$SWITCH_USER" = "0" ] ; then
$DOMINO_START_SCRIPT "$1"
else
echo switching to $DOMINO_USER
su - $DOMINO_USER -c "$DOMINO_START_SCRIPT '$1' "
fi
Ezt követően ki kell adni a következő parancsot, hogy a rendszer automatikusan elindítsa/leállítsa a dominot bootoláskor:
chkconfig domino on
Standard indítás linuxon - nemm boot időben:
service domino start
Leállítás: ugyanez a stop paraméterrel.
Amit kivettem goyrsan a script működéséből:
root userként beállít egy-két dolgot majd notes userre vált és meghívja az rc_domino_scriptet, mely már az új user ID alatt elindítja a server binaryt.
Tandberg és IBM együttműködés. Friss és ropogós
Tandberg will deliver the video conference client for IBM Lotus Sametime 7.5 which makes it possible to carry out video conferences directly from the PC. Ken Bisconti, vice president in Lotus Software products, says the collaboration with Tandberg is an important step in their plans of integrating Lotus Sametime with leading suppliers in the communication industry.