Last active
December 19, 2015 02:18
-
-
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…
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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