diff --git a/README.md b/README.md index eb239bf..6eaa4dd 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,28 @@ The installer requires an internet connection. The first run will take longer du 2. Go to location of downloaded installer and extract it. -3. Start first script by using terminal and typing `./mysql_start.sh` inside extracted folder. +3. Optional: adjust default configuration in `installer.properties` before the first run. + When the scripts ask `Use default configuration values? [Y/n]` and you answer `Y` or press Enter, + values from this file will be used. This makes it possible to prepare installer defaults for a + specific usage without editing shell scripts. + + Available properties: + * `MYSQL_HOST` + * `MYSQL_PORT` + * `MYSQL_DATABASE` + * `MYSQL_USERNAME` + * `MYSQL_PASSWORD` + * `MYSQL_ROOT_PASSWORD` + * `TOMCAT_PORT` + * `TOMCAT_USERNAME` + * `TOMCAT_PASSWORD` + * `DATABASE_HOST` + * `DATABASE_PORT` + * `DATABASE_NAME` + * `DATABASE_USERNAME` + * `DATABASE_PASSWORD` + +4. Start first script by using terminal and typing `./mysql_start.sh` inside extracted folder. Script will ask for some basic information to make configuration run correctly. Below is an example of the data that can be entered: * Port: 3306 @@ -28,7 +49,7 @@ The installer requires an internet connection. The first run will take longer du After providing the information you should wait for the line confirming the correct setup of the database: `~/linux-installer-1.2.0/mysql/server/bin/mysqld: ready for connections. Version: '8.0.x' socket: '/tmp/mysql.sock' port: 3306 MySQL Community Server - GPL.` -4. Start second terminal in the same folder and run `./tomcat_start.sh` script. +5. Start second terminal in the same folder and run `./tomcat_start.sh` script. Similar to first script you will have to provide some information, example below: * Enter port: 8080 @@ -40,7 +61,7 @@ The installer requires an internet connection. The first run will take longer du * Enter database password: root After that you should be able to access Scada-LTS via web browser by typing in search bar `localhost:8080/Scada-LTS` -5. If there is a problem with permissions: +6. If there is a problem with permissions: ```` -bash: ./mysql_start.sh: Permission denied @@ -55,7 +76,7 @@ chmod +x Scada-LTS_vx.x.x.x_Installer_vx.x.x_Setup/*.sh chmod +x Scada-LTS_vx.x.x.x_Installer_vx.x.x_Setup/**/*.jar ```` -6. ❗ If there is MySQL error: `libaio.so.1: cannot open shared object file` +7. ❗ If there is MySQL error: `libaio.so.1: cannot open shared object file` When starting MySQL, the following error may appear: @@ -92,7 +113,7 @@ Use the path from the previous command and create a symbolic link: sudo ln -s /lib/aarch64-linux-gnu/libaio.so.1t64 /lib/aarch64-linux-gnu/libaio.so.1 ``` -7. After restarting the system, we execute these two scripts similarly, in this order, first we start the installed database: +8. After restarting the system, we execute these two scripts similarly, in this order, first we start the installed database: ```` ./mysql_start.sh ```` diff --git a/installer.properties b/installer.properties new file mode 100644 index 0000000..4987b32 --- /dev/null +++ b/installer.properties @@ -0,0 +1,19 @@ +# Default installer configuration. +# Change these values before first run to adjust the generated MySQL and Tomcat configuration. + +MYSQL_HOST=localhost +MYSQL_PORT=3306 +MYSQL_DATABASE=scadalts +MYSQL_USERNAME=root +MYSQL_PASSWORD=root +MYSQL_ROOT_PASSWORD=root + +TOMCAT_PORT=8080 +TOMCAT_USERNAME=tcuser +TOMCAT_PASSWORD=tcuser + +DATABASE_HOST=localhost +DATABASE_PORT=3306 +DATABASE_NAME=scadalts +DATABASE_USERNAME=root +DATABASE_PASSWORD=root diff --git a/mysql/mysql_install.sh b/mysql/mysql_install.sh index 8506542..7cdb446 100755 --- a/mysql/mysql_install.sh +++ b/mysql/mysql_install.sh @@ -6,6 +6,7 @@ JAVA_HOME=$4; MYSQL_VERSION="${MYSQL_MAJOR_VERSION}.${MYSQL_MINOR_VERSION}.${MYSQL_PATCH_VERSION}"; MYSQL_INSTALLER_HOME=$(dirname "$(realpath "$0")"); +CONFIG_FILE="${INSTALLER_CONFIG:-${MYSQL_INSTALLER_HOME}/../installer.properties}"; export MYSQL_HOME="${MYSQL_INSTALLER_HOME}/server"; export SHELL_HOME="${MYSQL_INSTALLER_HOME}/client"; export DATADIR="$MYSQL_HOME/data"; @@ -23,6 +24,7 @@ MYSQL_DATABASE="" MYSQL_USERNAME=""; MYSQL_PASSWORD=""; MYSQL_ROOT_PASSWORD=""; +USE_DEFAULT_CONFIGURATION=""; MACHINE_TYPE=$(uname -m); @@ -33,6 +35,24 @@ PORT_REGEX='^((6553[0-5])|(655[0-2][0-9])|(65[0-4][0-9]{2})|(6[0-4][0-9]{3})|([1 HOSTNAME_REGEX="^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$|^(localhost)|^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)+([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$"; USERNAME_REGEX='^[a-zA-Z0-9_-]+$'; +read_property() { + local key="$1"; + local default_value="$2"; + local value=""; + + if [ -f "${CONFIG_FILE}" ]; then + value=$(grep -E "^[[:space:]]*${key}[[:space:]]*=" "${CONFIG_FILE}" | tail -n 1 | cut -d '=' -f 2-); + value="${value#"${value%%[![:space:]]*}"}"; + value="${value%"${value##*[![:space:]]}"}"; + fi + + if [ -n "${value}" ]; then + printf '%s' "${value}"; + else + printf '%s' "${default_value}"; + fi +} + if ! command -v wget &> /dev/null then echo "wget could not be found then MySQL Community Server version ${MYSQL_VERSION} installation stop"; @@ -90,6 +110,27 @@ if [ ! -d "${SERVER_BIN_DIR}" ] && [ ! -z "${SERVER_MYSQL_DEST}" ]; then cp -a "${MY_CNF}" "${COPIED_MY_CNF}"; cp -a "${INIT_SCHEMA}" "${COPIED_INIT_SCHEMA}"; + while [ -z "${USE_DEFAULT_CONFIGURATION}" ] + do + echo -n "[MySQL Community Server] Use default configuration values? [Y/n]: "; + read -r USE_DEFAULT_CONFIGURATION; + + if [ -z "${USE_DEFAULT_CONFIGURATION}" ] || [ "${USE_DEFAULT_CONFIGURATION}" = "Y" ] || [ "${USE_DEFAULT_CONFIGURATION}" = "y" ]; then + USE_DEFAULT_CONFIGURATION="Y"; + MYSQL_HOST=$(read_property "MYSQL_HOST" "localhost"); + MYSQL_PORT=$(read_property "MYSQL_PORT" "3306"); + MYSQL_DATABASE=$(read_property "MYSQL_DATABASE" "scadalts"); + MYSQL_USERNAME=$(read_property "MYSQL_USERNAME" "root"); + MYSQL_PASSWORD=$(read_property "MYSQL_PASSWORD" "root"); + MYSQL_ROOT_PASSWORD=$(read_property "MYSQL_ROOT_PASSWORD" "root"); + elif [ "${USE_DEFAULT_CONFIGURATION}" = "N" ] || [ "${USE_DEFAULT_CONFIGURATION}" = "n" ]; then + USE_DEFAULT_CONFIGURATION="N"; + else + USE_DEFAULT_CONFIGURATION=""; + echo "[MySQL Community Server] Please answer Y or n."; + fi + done + while [ -z "${MYSQL_HOST}" ] || ! [[ ${MYSQL_HOST} =~ ${HOSTNAME_REGEX} ]] do echo -n "[MySQL Community Server] Enter hostname: "; diff --git a/tomcat/tomcat_config.sh b/tomcat/tomcat_config.sh index 79601f9..98adb84 100755 --- a/tomcat/tomcat_config.sh +++ b/tomcat/tomcat_config.sh @@ -3,6 +3,8 @@ CATALINA_HOME="$1"; TOMCAT_VERSION="$2"; JAVA_HOME="$3"; CATALINA_BIN_DIR="${CATALINA_HOME}/bin"; +TOMCAT_INSTALLER_HOME=$(dirname "$(realpath "$0")"); +CONFIG_FILE="${INSTALLER_CONFIG:-${TOMCAT_INSTALLER_HOME}/../installer.properties}"; echo "${JAVA_HOME}"; @@ -20,22 +22,65 @@ CATALINA_CONTEXT_XML="${SCADA_LTS_HOME}/META-INF/context.xml"; CATALINA_PORT=-1; CATALINA_USERNAME=""; CATALINA_PASSWORD=""; +USE_DEFAULT_CONFIGURATION=""; DATABASE_PORT=-1; DATABASE_USERNAME=""; DATABASE_PASSWORD=""; DATABASE_HOSTNAME=""; +DATABASE_NAME=""; PORT_REGEX="^((6553[0-5])|(655[0-2][0-9])|(65[0-4][0-9]{2})|(6[0-4][0-9]{3})|([1-5][0-9]{4})|([0-5]{0,5})|([0-9]{1,4}))$"; HOSTNAME_REGEX="^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$|^(localhost)|^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)+([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$"; USERNAME_REGEX="^[a-zA-Z0-9_-]+$"; +read_property() { + local key="$1"; + local default_value="$2"; + local value=""; + + if [ -f "${CONFIG_FILE}" ]; then + value=$(grep -E "^[[:space:]]*${key}[[:space:]]*=" "${CONFIG_FILE}" | tail -n 1 | cut -d '=' -f 2-); + value="${value#"${value%%[![:space:]]*}"}"; + value="${value%"${value##*[![:space:]]}"}"; + fi + + if [ -n "${value}" ]; then + printf '%s' "${value}"; + else + printf '%s' "${default_value}"; + fi +} + cd "${CATALINA_BASE}"; unzip -q "Scada-LTS.war" -d "${SCADA_LTS_HOME}"; cp -af context.xml "${CATALINA_CONTEXT_XML}"; cp -af "${CATALINA_BASE}"/lib/*.jar "${CATALINA_LIB}"; cp -a setenv.sh "${CATALINA_BIN_DIR}"; +while [ -z "${USE_DEFAULT_CONFIGURATION}" ] +do + echo -n "[Apache Tomcat Server] Use default configuration values? [Y/n]: "; + read -r USE_DEFAULT_CONFIGURATION; + + if [ -z "${USE_DEFAULT_CONFIGURATION}" ] || [ "${USE_DEFAULT_CONFIGURATION}" = "Y" ] || [ "${USE_DEFAULT_CONFIGURATION}" = "y" ]; then + USE_DEFAULT_CONFIGURATION="Y"; + CATALINA_PORT=$(read_property "TOMCAT_PORT" "8080"); + CATALINA_USERNAME=$(read_property "TOMCAT_USERNAME" "tcuser"); + CATALINA_PASSWORD=$(read_property "TOMCAT_PASSWORD" "tcuser"); + DATABASE_PORT=$(read_property "DATABASE_PORT" "3306"); + DATABASE_HOSTNAME=$(read_property "DATABASE_HOST" "localhost"); + DATABASE_NAME=$(read_property "DATABASE_NAME" "scadalts"); + DATABASE_USERNAME=$(read_property "DATABASE_USERNAME" "root"); + DATABASE_PASSWORD=$(read_property "DATABASE_PASSWORD" "root"); + elif [ "${USE_DEFAULT_CONFIGURATION}" = "N" ] || [ "${USE_DEFAULT_CONFIGURATION}" = "n" ]; then + USE_DEFAULT_CONFIGURATION="N"; + else + USE_DEFAULT_CONFIGURATION=""; + echo "[Apache Tomcat Server] Please answer Y or n."; + fi +done + while [ ${CATALINA_PORT} -eq -1 ] || ! [[ ${CATALINA_PORT} =~ ${PORT_REGEX} ]] do echo -n "[Apache Tomcat Server] Enter port: "; @@ -89,4 +134,4 @@ do done "${JAVA_HOME}"/bin/java -jar replace-1.0.jar -f "${CATALINA_CONTEXT_XML}" -p ${DATABASE_PASSWORD}; -echo "Tomcat version ${TOMCAT_VERSION} configured"; \ No newline at end of file +echo "Tomcat version ${TOMCAT_VERSION} configured";