Example AWS SFengine Script
The following is an example of an Sfengine script for AWS.
#!/bin/sh ### BEGIN INIT INFO # Provides: sfengine # Required-Start: $network nfs syslog docker # Required-Stop: # Default-Start: 3 4 5 # Default-Stop: 1 2 # Short-Description: Engine Daemon makes this host part of TIBCO Silver Fabric private cloud # and makes this host part of Broker Rngine inventory. ### END INIT INFO /bin/rm /var/log/sfengine.log echo "$0 $1" >> /var/log/sfengine.log MAC_ADDR=`/sbin/ifconfig -a | grep ether | awk 'NR==1 {print $2}'` echo "Mac Address: $MAC_ADDR" >> /var/log/sfengine.log IP=($(curl http://169.254.169.254/latest/meta-data/network/interfaces/macs/$MAC_ADDR/local-ipv4s)) PRIVATE_IPV4S= for ip in ${IP[@]}; do PRIVATE_IPV4S="$PRIVATE_IPV4S $ip" done for ip in ${IP[@]:1}; do echo "Adding IP: $ip" >> /var/log/sfengine.log ip addr add dev eth0 $ip/24 done # get local-hostname from aws meta-data web service HOSTNAME=`curl http://169.254.169.254/latest/meta-data/public-hostname` if [ "${HOSTNAME:0:5}" == "<?xml" ] then LOCALIP=`curl http://169.254.169.254/latest/meta-data/local-ipv4` echo "Local IP: $LOCALIP" >> /var/log/sfengine.log REVERSE=`nslookup $LOCALIP | grep name | awk -F '=' '{print $2}'` echo "Reverse Lookup of Local IP: $REVERSE" >> /var/log/sfengine.log if [ "$REVERSE" == "" ] then HOSTNAME=`curl http://169.254.169.254/latest/meta-data/hostname` else if [ "${REVERSE: -1}" == "." ] then HOSTNAME="${REVERSE%.}" echo "${HOSTNAME}" HOSTNAME="${HOSTNAME//[[:blank:]]/}" fi fi fi echo "Setting hostname: $HOSTNAME" >> /var/log/sfengine.log hostname $HOSTNAME rm -f /etc/hostname echo "${HOSTNAME}" >> /etc/hostname HOSTNAME=`hostname` echo "Hostname: $HOSTNAME" >> /var/log/sfengine.log export HOSTNAME AMI_ID=`curl http://169.254.169.254/latest/meta-data/ami-id` INSTANCE_TYPE=`curl http://169.254.169.254/latest/meta-data/instance-type` INSTANCE_ID=`curl http://169.254.169.254/latest/meta-data/instance-id` PUBLIC_HOSTNAME=${HOSTNAME} PUBLIC_IPV4=`curl http://169.254.169.254/latest/meta-data/public-ipv4` ZONE=`curl http://169.254.169.254/latest/meta-data/placement/availability-zone` MAC=`curl http://169.254.169.254/latest/meta-data/network/interfaces/macs/` VPC_SUBNET_ID=`curl http://169.254.169.254/latest/meta-data/network/interfaces/macs/$MAC/subnet-id` if [ "${VPC_SUBNET_ID:0:5}" == "<?xml" ] then VPC_SUBNET_ID="" fi if [ "${PUBLIC_IPV4:0:5}" == "<?xml" ] then PUBLIC_IPV4=`curl http://169.254.169.254/latest/meta-data/local-ipv4` fi USER_DATA="`curl http://169.254.169.254/latest/user-data`" BROKER_OPTIONS=$(echo $USER_DATA | awk -F',' '{print $1}') if [ "${BROKER_OPTIONS:0:5}" == "<?xml" ] then BROKER_OPTIONS="" fi echo "Broker options: $BROKER_OPTIONS " >> /var/log/sfengine.log RESOURCES_NFS_OPTIONS=$(echo $USER_DATA | awk -F',' '{print $2}') echo "Resources nfs mount options: $RESOURCES_NFS_OPTIONS " >> /var/log/sfengine.log RESOURCES_NFS_MOUNT=$(echo $USER_DATA | awk -F',' '{print $3}') echo "Resources nfs local mount point: $RESOURCES_NFS_MOUNT " >> /var/log/sfengine.log DATA_NFS_OPTIONS=$(echo $USER_DATA | awk -F',' '{print $4}') echo "Data nfs options: $DATA_NFS_OPTIONS " >> /var/log/sfengine.log DATA_NFS_MOUNT=$(echo $USER_DATA | awk -F',' '{print $5}') echo "Data nfs mount: $DATA_NFS_MOUNT " >> /var/log/sfengine.log RESOURCES2_NFS_OPTIONS=$(echo $USER_DATA | awk -F',' '{print $6}') echo "Resource2 nfs options: $RESOURCES2_NFS_OPTIONS " >> /var/log/sfengine.log RESOURCES2_NFS_MOUNT=$(echo $USER_DATA | awk -F',' '{print $7}') echo "Resource2 nfs mount: $RESOURCES2_NFS_MOUNT " >> /var/log/sfengine.log GROUP=$(echo $USER_DATA | awk -F',' '{print $8}') echo "Group: $GROUP " >> /var/log/${PROG_NAME}.log ASSET_MGR_ID=$(echo $USER_DATA | awk -F',' '{print $9}') echo "Asset Manager Id: $ASSET_MGR_ID " >> /var/log/${PROG_NAME}.log DSENGINE=/opt/DSEngine echo "DSEngine install dir is $DSENGINE " >> /var/log/sfengine.log cd $DSENGINE # Check for missing shell script ENGINE_SH=engine.sh test -x $ENGINE_SH || { echo "$ENGINE_SH not installed"; if [ "$1" = "stop" ]; then exit 0; else exit 5; fi; } # Check for existence of needed config file ENGINE_CONFIG=configure.sh test -x $ENGINE_CONFIG || { echo "$ENGINE_CONFIG not existing"; if [ "$1" = "stop" ]; then exit 0; else exit 6; fi; } # init status of this service rc=0 if [ "$1" == "start" -o "$1" == "restart" ] then if [ "${BROKER_OPTIONS}" != "" ] then ## Configure engine echo "$DSENGINE/$ENGINE_CONFIG ${BROKER_OPTIONS}" >> /var/log/sfengine.log $DSENGINE/$ENGINE_CONFIG ${BROKER_OPTIONS} >> /var/log/sfengine.log 2>&1 chown -R fabric:fabric $DSENGINE else echo "Error: no broker options found" >> /var/log/sfengine.log exit 6 fi fi case "$1" in start) echo "Starting engine " >> /var/log/sfengine.log # mount resources directory if [ "${RESOURCES_NFS_OPTIONS}" != "" ] then ## NFS resources directory if [ "${RESOURCES_NFS_MOUNT}" != "" ] then echo "Mounting ${RESOURCES_NFS_OPTIONS} " >> /var/log/sfengine.log mkdir -p $RESOURCES_NFS_MOUNT chown -R fabric $RESOURCES_NFS_MOUNT chgrp -R fabric $RESOURCES_NFS_MOUNT mount -t nfs ${RESOURCES_NFS_OPTIONS} ${RESOURCES_NFS_MOUNT} fi else ## local resources directory mkdir -p /mnt/resources chown -R fabric /mnt/resources chgrp -R fabric /mnt/resources rm -rf ./resources ln -s /mnt/resources ./resources fi if [ "${DATA_NFS_OPTIONS}" != "" ] then ## NFS resources directory if [ "${DATA_NFS_MOUNT}" != "" ] then mkdir -p $DATA_NFS_MOUNT chown -R fabric $DATA_NFS_MOUNT chgrp -R fabric $DATA_NFS_MOUNT echo "Mounting ${DATA_NFS_OPTIONS} " >> /var/log/sfengine.log mount -t nfs ${DATA_NFS_OPTIONS} ${DATA_NFS_MOUNT} fi fi if [ "${RESOURCES2_NFS_OPTIONS}" != "" ] then ## NFS resources directory if [ "${RESOURCES2_NFS_MOUNT}" != "" ] then mkdir -p $RESOURCES2_NFS_MOUNT chown -R fabric $RESOURCES2_NFS_MOUNT chgrp -R fabric $RESOURCES2_NFS_MOUNT echo "Mounting ${RESOURCES2_NFS_OPTIONS} " >> /var/log/sfengine.log mount -t nfs ${RESOURCES2_NFS_OPTIONS} ${RESOURCES2_NFS_MOUNT} fi fi ## cleanup /bin/rm -rf work data profiles boot.log .#dsDirID ## setup engine session properties rm -rf ./engine-session.properties echo "ec2AmiId=$AMI_ID" >> ./engine-session.properties echo "ec2InstanceType=$INSTANCE_TYPE" >> ./engine-session.properties echo "ec2InstanceId=$INSTANCE_ID" >> ./engine-session.properties echo "ec2PublicHostname=$PUBLIC_HOSTNAME" >> ./engine-session.properties echo "ec2PublicIpv4=$PUBLIC_IPV4" >> ./engine-session.properties echo "ec2Zone=$ZONE" >> ./engine-session.properties echo "ec2PrivateIpv4s=$PRIVATE_IPV4S" >> ./engine-session.properties echo "DockerEnabled=true" >> ./engine-session.properties echo "DockerVersionInfo=`docker -v`" >> ./engine-session.properties if [ "$VPC_SUBNET_ID" != "" ] then echo "vpcSubnetId=$VPC_SUBNET_ID" >> ./engine-session.properties fi if [ "$GROUP" != "" ] then echo "Group=$GROUP" >> ./engine-session.properties fi if [ "$ASSET_MGR_ID" != "" ] then echo "AssetManagerId=$ASSET_MGR_ID" >> ./engine-session.properties fi echo "alternateRoutingAddress=$PUBLIC_HOSTNAME" >> ./engine-session.properties echo "alternateRedirectAddress=$PUBLIC_HOSTNAME" >> ./engine-session.properties ## Start engine echo "$DSENGINE/$ENGINE_SH start" >> /var/log/sfengine.log su --session-command="$DSENGINE/$ENGINE_SH start" fabric >> /var/log/sfengine.log 2>&1 # Remember status and be verbose [ $? -ne 0 ] && rc=1 while [ ! -f profiles/${HOSTNAME}/pid.${HOSTNAME} ] do sleep 1 done cp "profiles/${HOSTNAME}/pid.${HOSTNAME}" /opt/sfengine.pid ;; stop) echo "Stopping engine " >> /var/log/sfengine.log ## Stop engine su --session-command="$DSENGINE/$ENGINE_SH stop" fabric >> /var/log/sfengine.log 2>&1 # umount nfs directories if [ "$RESOURCES_NFS_MOUNT" != "" ] then umount $RESOURCES_NFS_MOUNT fi if [ "$DATA_NFS_MOUNT" != "" ] then umount $DATA_NFS_MOUNT fi if [ "$RESOURCES2_NFS_MOUNT" != "" ] then umount $RESOURCES2_NFS_MOUNT fi # Remember status and be verbose [ $? -ne 0 ] && rc=1 rm -f /opt/sfengine.pid ;; restart) ## Stop the service and regardless of whether it was ## running or not, start it again. $0 stop $0 start # Remember status and be quiet [ $? -ne 0 ] && rc=1 ;; reload) ## does not support reload: rc=3 ;; status) echo "Checking for service engine " >> /var/log/sfengine.log ## Check status with checkproc(8), if process is running ## checkproc will return with exit status 0. # Return value is slightly different for the status command: # 0 - service up and running # 1 - service dead, but /var/run/ pid file exists # 2 - service dead, but /var/lock/ lock file exists # 3 - service not running (unused) # 4 - service status unknown :-( # 5--199 reserved (5--99 LSB, 100--149 distro, 150--199 appl.) # NOTE: checkproc returns LSB compliant status values. checkproc engine [ $? -ne 0 ] && rc=1 ;; *) ## If no parameters are given, print which are avaiable. echo "Usage: $0 {start|stop|status|restart|reload}" rc=1 ;; esac exit $rc
Copyright © Cloud Software Group, Inc. All rights reserved.