Skip to content

Instantly share code, notes, and snippets.

@nivag
Last active December 19, 2015 02:18
Show Gist options
  • Save nivag/5881528 to your computer and use it in GitHub Desktop.
Save nivag/5881528 to your computer and use it in GitHub Desktop.
This installs WildFly (or JBoss) Java Enterprise AppServer from a zip (or tar) file into a development environment under Linux, and converts it to using the PostgreSQL database. I have appended terminal output from a recent run. I would like it to be able to add admin & test users as part of the process, instead of interactively later. So if any…
#!/bin/bash
# wildfly_setup.sh
#
# This Code is subject to the terms of the Mozilla Public License,
# v. 2.0. If a copy of the MPL was not distributed with this file, You can
# obtain one at http://mozilla.org/MPL/2.0/.
#
# Copyright Gavin C. Flower
# gavinflower@archidevsys.co.nz
#
echo '>>> '
echo '>>> This script converts WildFly to use PostgreSQL instead of the default,'
echo '>>> and to have separate data stores for system and application use:'
echo '>>> JBossSysDS and JBossDevDS - these are to replace the use of ExampleDS.'
echo '>>> '
echo '>>> Also to set up appropriate directories for development, note that a '
echo '>>> timestamped copy of the directory is made after changing files, and '
echo '>>> any file changed also has a timestamped backup in the same directory.'
echo '>>> '
echo '>>> Additionally there are changes to other parameters such as the amount '
echo '>>> of RAM allocated to the JVM.'
echo '>>> '
echo '>>> Optionally, a suffix string can be provided as an argument, so that'
echo '>>> when the input file has been used, it gets renamed by adding the'
echo '>>> supplied suffix.'
echo '>>> '
set -o nounset # eror if undefined varaible accessed
EMPTY_STRING=''
AUTHOR='Gavin C. Flower'
INPUT_FILE_SUFFIX_TO_BE_ADDED=${1-$EMPTY_STRING}
JB_PREFIX='wildfly'
JB_SEPA='-'
JB_SEPB='.'
JB_VERSION_MAJOR='8'
JB_VERSION_MINOR='0'
JB_VERSION_PATCH='0'
JB_VERSION_SUFFIX='Beta2-SNAPSHOT'
JB_VERSION_MM=$JB_VERSION_MAJOR$JB_SEPB$JB_VERSION_MINOR
JB_VERSION=$JB_VERSION_MM$JB_SEPB$JB_VERSION_PATCH
##JB_COMPRESS_SUFFIX='tar.gz'
JB_COMPRESS_SUFFIX='zip'
##JB_INPUT_FILE="$JB_PREFIX$JB_SEPA$JB_VERSION$JB_SEPB$JB_VERSION_SUFFIX$JB_SEPB$JB_COMPRESS_SUFFIX"
WF8X='8.x'
JB_INPUT_FILE="$JB_PREFIX$JB_SEPA$WF8X$JB_SEPB$JB_COMPRESS_SUFFIX"
JB_DIR_REL="$JB_PREFIX$JB_SEPA$JB_VERSION$JB_SEPB$JB_VERSION_SUFFIX"
JB_SRC_DIR_PARENT=$(pwd)
JB_SRC_DIR="$JB_SRC_DIR_PARENT/$JB_DIR_REL"
JDBC_DIR='/usr/local/java'
JDBC_JAR='postgresql.jar'
JDBC_JAR_PATH="$JDBC_DIR/$JDBC_JAR"
BASE_DST_DIR='/usr/local/java'
JB_DST_DIR="$BASE_DST_DIR/$JB_DIR_REL"
JB_SYMBOLIC_REL="$JB_PREFIX$JB_SEPA$JB_VERSION_MM"
JB_SYMBOLIC_DIR="$BASE_DST_DIR/$JB_SYMBOLIC_REL"
JBOSS_USER='jboss'
function name_value
{
VAR_NAME_010=$1
echo "$VAR_NAME_010=[${!VAR_NAME_010}]"
}
function padded_name_value
{
VAR_NAME_020=$1
PADDING_SIZE_020=25
FORMAT_020="%${PADDING_SIZE_020}s=[%s]\n"
printf $FORMAT_020 $VAR_NAME_020 "${!VAR_NAME_020}"
}
function XXX_name_value
{
XXX_030=$1
VAR_030=$2
PREAMBLE_030=$3
POSTAMBLE_030=$4
NAME_VALUE_030=$(name_value $VAR_030)
echo "==>$XXX_030 $PREAMBLE_030$NAME_VALUE_030$POSTAMBLE_030"
}
function info
{
XXX_name_value "INFO" $1 "${2-$EMPTY_STRING}" "${3-$EMPTY_STRING}"
}
function fatal
{
XXX_name_value "FATAL" $1 "${2-$EMPTY_STRING}" "${3-$EMPTY_STRING}"
echo ' ABORTING'
exit -1
}
function check_return_code
{
RETURN_CODE_38=$1
TEXT_38=${2-$EMPTY_STRING}
if [ "x$RETURN_CODE_38" != "x0" ]
then
echo -n '==> @ line '
caller 0
fatal RETURN_CODE_38 TEXT_38
fi
}
function can_read
{
VAR_NAME_040=$1
if [ ! -r ${!VAR_NAME_040} ]
then
fatal $VAR_NAME_040 '' ' is not readable'
fi
}
function can_write
{
VAR_NAME_050=$1
if [ ! -w ${!VAR_NAME_050} ]
then
fatal $VAR_NAME_050 '' ' is not writeable'
fi
}
function can_execute
{
VAR_NAME_060=$1
if [ ! -x ${!VAR_NAME_060} ]
then
fatal $VAR_NAME_060 '' ' is not executeable'
fi
}
function mode_check
{
MODE_070=$1
VAR_NAME_070=$2
if [ ! -z $MODE_070 ]
then
case $MODE_070 in
r)
can_read $VAR_NAME_070
;;
w)
can_write $VAR_NAME_070
;;
x)
can_execute $VAR_NAME_070
;;
rw | wr)
can_read $VAR_NAME_070
can_write $VAR_NAME_070
;;
*)
echo '+++++++++++++ Programming error <=='
exit -1
esac
fi
}
function directory_exists
{
VAR_NAME_080=$1
MODE_080=${2-'r'}
if [ ! -d ${!VAR_NAME_080} ]
then
fatal $VAR_NAME_080 '' ' does not exist, or is not a directory'
else
mode_check $MODE_080 $VAR_NAME_080
padded_name_value $VAR_NAME_080
fi
}
function file_exists
{
VAR_NAME_090=$1
MODE_090=${2-'r'}
if [ ! -f ${!VAR_NAME_090} ]
then
fatal $VAR_NAME_090 '' ' does not exist, or is not a file'
else
mode_check $MODE_090 $VAR_NAME_090
padded_name_value $VAR_NAME_090
fi
}
##########################
## Now do some work!!! ##
##########################
padded_name_value JBOSS_USER
#grep "^${JBOSS_USER}:" /etc/passwd
#RC=$? ; check_return_code $RC
#
#if [ -z $(id -u $JBOSS_USER 2> /dev/null) ]
#then
# fatal JBOSS_USER '' ' is not defined'
#else
# if [ "x$USER" != "x$JBOSS_USER" ]
# then
# fatal USER '' " should be [$JBOSS_USER]"
# fi
#fi
file_exists JDBC_JAR_PATH
can_read JDBC_JAR_PATH
file_exists JB_INPUT_FILE
can_read JB_INPUT_FILE
directory_exists JB_SRC_DIR_PARENT rw
if [ -d $JB_SRC_DIR ]
then
rm -rf $JB_SRC_DIR
fi
case $JB_COMPRESS_SUFFIX in
tar.gz)
tar xzvf $JB_INPUT_FILE > /dev/null
RC=$? ; check_return_code $RC
;;
zip)
unzip $JB_INPUT_FILE > /dev/null
RC=$? ; check_return_code $RC
;;
*)
echo '+++++++++++++ Unsupported File Suffix <=='
exit -1
esac
if [ x$INPUT_FILE_SUFFIX_TO_BE_ADDED != "x" ]
then
padded_name_value INPUT_FILE_SUFFIX_TO_BE_ADDED
INPUT_FILE_NEW_NAME="$JB_INPUT_FILE $JB_INPUT_FILE$INPUT_FILE_SUFFIX_TO_BE_ADDED"
padded_name_value INPUT_FILE_NEW_NAME
mv $INPUT_FILE_NEW_NAME
RC=$? ; check_return_code $RC "Renaming Failed"
fi
directory_exists JB_SRC_DIR rw
find $JB_DIR_REL -name '*.bat' -delete
RC=$? ; check_return_code $RC
directory_exists BASE_DST_DIR rw
padded_name_value JB_DST_DIR
# allow filename expansion to include files beginning with a dot,
# like '.installation'
shopt -s dotglob
if [ -d $JB_DST_DIR ]
then
rm -rf $JB_DST_DIR*
RC=$? ; check_return_code $RC
fi
mkdir $JB_DST_DIR
RC=$? ; check_return_code $RC
mv $JB_DIR_REL/* $JB_DST_DIR/.
RC=$? ; check_return_code $RC
rmdir $JB_DIR_REL
RC=$? ; check_return_code $RC
BACKUP_DATE_TIME=$(date +".%Y%m%d-%H%M%S")
padded_name_value BACKUP_DATE_TIME
MODULES_DIR="$JB_DST_DIR/modules"
directory_exists MODULES_DIR rw
MODULES_POSTGRESQL_DIR="$MODULES_DIR/org/postgresql/main"
mkdir -p $MODULES_POSTGRESQL_DIR
RC=$? ; check_return_code $RC
directory_exists MODULES_POSTGRESQL_DIR rw
MODULES_JDBC_JAR="$MODULES_POSTGRESQL_DIR/$JDBC_JAR"
ln -s $JDBC_JAR_PATH $MODULES_JDBC_JAR
RC=$? ; check_return_code $RC
file_exists MODULES_JDBC_JAR
POSTGRESQL_MODULE="$MODULES_POSTGRESQL_DIR/module.xml"
cat > $POSTGRESQL_MODULE <<END-OF-HERE-DOCUMENT
<?xml version="1.0" encoding="UTF-8"?>
<!--
- added by $AUTHOR $BACKUP_DATE_TIME
-->
<module xmlns="urn:jboss:module:1.0" name="org.postgresql">
<resources>
<resource-root path="$JDBC_JAR"/>
</resources>
<dependencies>
<module name="javax.api"/>
<module name="javax.transaction.api"/>
<module name="javax.servlet.api" optional="true"/>
</dependencies>
</module>
END-OF-HERE-DOCUMENT
RC=$? ; check_return_code $RC
file_exists POSTGRESQL_MODULE
BIN_FILES_WITH_JAVA_SIZES=`grep -r -l '\-Xmx' $JB_DST_DIR/*`
for BIN_FILE_WITH_JAVA_SIZES in $BIN_FILES_WITH_JAVA_SIZES
do
file_exists BIN_FILE_WITH_JAVA_SIZES wr
sed -i$BACKUP_DATE_TIME -n '
{
s/Xms64m/Xms2g/
s/Xmx512m/Xmx2g/
s/MaxPermSize=256m/MaxPermSize=1g/
p
}
' $BIN_FILE_WITH_JAVA_SIZES
RC=$? ; check_return_code $RC
done
CONF_FILES_WITH_DATASOURCES=`grep -r -l '<datasources' $JB_DST_DIR/*`
for DATASOURCE_CONF_FILE in $CONF_FILES_WITH_DATASOURCES
do
file_exists DATASOURCE_CONF_FILE wr
sed -i$BACKUP_DATE_TIME -n '
{
/<datasources/,/datasources>/c\
<datasources>\
<datasource jndi-name="java:jboss/datasources/JBossSysDS"\
enabled="true"\
use-java-context="true"\
pool-name="JBossSysDS">\
<connection-url>jdbc:postgresql://localhost:5432/jboss_sys_db</connection-url>\
<driver-class>org.postgresql.Driver</driver-class>\
<driver>postgresql-jdbc4</driver>\
<pool>\
<min-pool-size>2</min-pool-size>\
<max-pool-size>20</max-pool-size>\
<prefill>true</prefill>\
</pool>\
<security>\
<user-name>jboss_sys</user-name>\
<password>!jboss_sys!</password>\
</security>\
<validation>\
<check-valid-connection-sql>SELECT 1</check-valid-connection-sql>\
</validation>\
</datasource>\
<datasource jndi-name="java:jboss/datasources/JBossDevDS"\
enabled="true"\
use-java-context="true"\
pool-name="JBossDevDS">\
<connection-url>jdbc:postgresql://localhost:5432/jboss_dev_db</connection-url>\
<driver-class>org.postgresql.Driver</driver-class>\
<driver>postgresql-jdbc4</driver>\
<pool>\
<min-pool-size>2</min-pool-size>\
<max-pool-size>20</max-pool-size>\
<prefill>true</prefill>\
</pool>\
<security>\
<user-name>jboss_dev</user-name>\
<password>!jboss_dev!</password>\
</security>\
<validation>\
<check-valid-connection-sql>SELECT 1</check-valid-connection-sql>\
</validation>\
</datasource>\
<drivers>\
<driver name="postgresql-jdbc4" module="org.postgresql">\
<xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class>\
</driver>\
</drivers>\
</datasources>
p
}
' $DATASOURCE_CONF_FILE
RC=$? ; check_return_code $RC
done
FILES_WITH_EXAMPLEDS=`grep -r -l 'ExampleDS' $JB_DST_DIR/*`
for EXAMPLEDS_FILE in $FILES_WITH_EXAMPLEDS
do
file_exists EXAMPLEDS_FILE wr
sed -i$BACKUP_DATE_TIME -n '
{
s/ExampleDS/JBossSysDS/
p
}
' $EXAMPLEDS_FILE
RC=$? ; check_return_code $RC
done
MGMT_TEXT='Adding mgmt-user=bossman pasword=Qwe_&7'
info MGMT_TEXT
DOMAIN_MGMNT_USERS_PROPERTIES_FILE="$JB_DST_DIR/domain/configuration/mgmt-users.properties"
file_exists DOMAIN_MGMNT_USERS_PROPERTIES_FILE
cp $DOMAIN_MGMNT_USERS_PROPERTIES_FILE $DOMAIN_MGMNT_USERS_PROPERTIES_FILE$BACKUP_DATE_TIME
RC=$? ; check_return_code $RC
cat >> $DOMAIN_MGMNT_USERS_PROPERTIES_FILE <<END-OF-HERE-DOCUMENT
bossman=e24234547891f034d4071b3f9cfa9c17
END-OF-HERE-DOCUMENT
RC=$? ; check_return_code $RC
STANDALONE_MGMNT_USERS_PROPERTIES_FILE="$JB_DST_DIR/standalone/configuration/mgmt-users.properties"
file_exists STANDALONE_MGMNT_USERS_PROPERTIES_FILE
cp $STANDALONE_MGMNT_USERS_PROPERTIES_FILE $STANDALONE_MGMNT_USERS_PROPERTIES_FILE$BACKUP_DATE_TIME
RC=$? ; check_return_code $RC
cat >> $STANDALONE_MGMNT_USERS_PROPERTIES_FILE <<END-OF-HERE-DOCUMENT
bossman=e24234547891f034d4071b3f9cfa9c17
END-OF-HERE-DOCUMENT
RC=$? ; check_return_code $RC
# make a copy after applying changes, but before it gets used for the first time
JB_DST_DIR_BACKUP=$JB_DST_DIR$BACKUP_DATE_TIME
cp -R $JB_DST_DIR $JB_DST_DIR_BACKUP
RC=$? ; check_return_code $RC
directory_exists JB_DST_DIR_BACKUP rw
chown -R $JBOSS_USER:$JBOSS_USER $JB_DST_DIR*
RC=$? ; check_return_code $RC
chmod -R g=u $JB_DST_DIR*
RC=$? ; check_return_code $RC
padded_name_value JB_SYMBOLIC_DIR
if [ -h $JB_SYMBOLIC_DIR ]
then
rm $JB_SYMBOLIC_DIR
RC=$? ; check_return_code $RC
fi
ln -s $JB_DST_DIR $JB_SYMBOLIC_DIR
RC=$? ; check_return_code $RC
echo "===>DEBUG planned stop @ line $LINENO +++++++++++++++++++++++++" ; exit -1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment