diff --git a/Makefile b/Makefile index 4462e0d1..c8f2dcb5 100644 --- a/Makefile +++ b/Makefile @@ -236,6 +236,8 @@ LINUX_DEPS_CLEAN += apt-rpm/$(PACKAGE_NAME).spec LINUX_DEPS += rpm/bin/documentserver-configure.sh LINUX_DEPS += apt-rpm/bin/documentserver-configure.sh +LINUX_DEPS += rpm/bin/documentserver-upgrade-db.sh + LINUX_DEPS_CLEAN += rpm/bin/*.sh LINUX_DEPS_CLEAN += apt-rpm/bin/*.sh diff --git a/deb/debian/postinst.m4 b/deb/debian/postinst.m4 index e896e2a7..866e4f63 100644 --- a/deb/debian/postinst.m4 +++ b/deb/debian/postinst.m4 @@ -121,12 +121,20 @@ install_postges() { { echo "ERROR: can't connect to postgressql database"; exit 1; } fi set -e - if [ ! $CLUSTER_MODE = true ]; then - $PSQL -f "$DIR/server/schema/postgresql/removetbl.sql" \ + if [ ! "${IS_UPGARDE}" = "true" ]; then + #installation + if [ ! $CLUSTER_MODE = true ]; then + $PSQL -f "$DIR/server/schema/postgresql/removetbl.sql" \ + >/dev/null 2>&1 + fi + $PSQL -f "$DIR/server/schema/postgresql/createdb.sql" \ >/dev/null 2>&1 - fi - $PSQL -f "$DIR/server/schema/postgresql/createdb.sql" \ - >/dev/null 2>&1 + else + #upgrading + for i in $(ls $DIR/server/schema/postgresql/upgrade/upgrade*); do + $PSQL -f ${i} >/dev/null 2>&1; + done + fi } install_mysql() { @@ -142,16 +150,24 @@ install_mysql() { { echo "ERROR: can't connect to mysql database"; exit 1; } fi set -e - if ! $MYSQL -e "SHOW DATABASES;" | cut -d\| -f 1 | grep -qw $DB_NAME; then - $MYSQL -e \ - "CREATE DATABASE IF NOT EXISTS $DB_NAME \ - DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;" \ - >/dev/null 2>&1 - fi - if [ ! $CLUSTER_MODE = true ]; then - $MYSQL $DB_NAME < "$DIR/server/schema/mysql/removetbl.sql" >/dev/null 2>&1 - fi - $MYSQL $DB_NAME < "$DIR/server/schema/mysql/createdb.sql" >/dev/null 2>&1 + if [ ! "${IS_UPGARDE}" = "true" ]; then + #installation + if ! $MYSQL -e "SHOW DATABASES;" | cut -d\| -f 1 | grep -qw $DB_NAME; then + $MYSQL -e \ + "CREATE DATABASE IF NOT EXISTS $DB_NAME \ + DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;" \ + >/dev/null 2>&1 + fi + if [ ! $CLUSTER_MODE = true ]; then + $MYSQL $DB_NAME < "$DIR/server/schema/mysql/removetbl.sql" >/dev/null 2>&1 + fi + $MYSQL $DB_NAME < "$DIR/server/schema/mysql/createdb.sql" >/dev/null 2>&1 + else + #upgrading + for i in $(ls $DIR/server/schema/mysql/upgrade/upgrade*); do + $MYSQL "$DB_NAME" < ${i} >/dev/null 2>&1; + done + fi } save_db_params(){ @@ -260,6 +276,13 @@ setup_nginx(){ } +if test -z "$2" +then + IS_UPGARDE="false" +else + IS_UPGARDE="true" +fi + case "$1" in configure) adduser --quiet --home "$DIR" --system --group ds diff --git a/rpm/bin/documentserver-upgrade-db.sh.m4 b/rpm/bin/documentserver-upgrade-db.sh.m4 new file mode 100755 index 00000000..145d7bad --- /dev/null +++ b/rpm/bin/documentserver-upgrade-db.sh.m4 @@ -0,0 +1,84 @@ +#!/bin/bash + +DIR="/var/www/M4_DS_PREFIX" +LOCAL_CONFIG="/etc/M4_DS_PREFIX/local.json" +JSON_BIN="$DIR/npm/json" +JSON="$JSON_BIN -f $LOCAL_CONFIG" + +load_db_params(){ + DB_HOST=$($JSON services.CoAuthoring.sql.dbHost) + DB_NAME=$($JSON services.CoAuthoring.sql.dbName) + DB_USER=$($JSON services.CoAuthoring.sql.dbUser) + DB_PWD=$($JSON services.CoAuthoring.sql.dbPass) + DB_TYPE=$($JSON services.CoAuthoring.sql.type) + DB_PORT=$($JSON services.CoAuthoring.sql.dbPort) +} + +execute_postgres_scripts(){ + echo -n "Updating PostgreSQL database... " + + for i in $(ls $DIR/server/schema/postgresql/upgrade/upgrade*); do + $PSQL -d "$DB_NAME" -f ${i} >/dev/null 2>&1; + done + + echo "OK" +} + +establish_postgres_conn() { + echo -n "Trying to establish PostgreSQL connection... " + + command -v psql >/dev/null 2>&1 || { echo "PostgreSQL client not found"; exit 1; } + + CONNECTION_PARAMS="-h$DB_HOST -U$DB_USER -w" + if [ -n "$DB_PWD" ]; then + export PGPASSWORD=$DB_PWD + fi + + PSQL="psql -q $CONNECTION_PARAMS" + + $PSQL -c ";" >/dev/null 2>&1 || { echo "FAILURE"; exit 1; } + + echo "OK" +} + +execute_mysql_sqript(){ + echo -n "Updating MYSQL database... " + + for i in $(ls $DIR/server/schema/mysql/upgrade/upgrade*); do + $MYSQL "$DB_NAME" < ${i}; + done + + echo "OK" +} + +establish_mysql_conn(){ + echo -n "Trying to database MySQL connection... " + command -v mysql >/dev/null 2>&1 || { echo "MySQL client not found"; exit 1; } + MYSQL="mysql -h$DB_HOST -u$DB_USER" + if [ -n "$DB_PWD" ]; then + MYSQL="$MYSQL -p$DB_PWD" + fi + + $MYSQL -e ";" >/dev/null 2>&1 || { echo "FAILURE"; exit 1; } + + echo "OK" +} + +execute_db_script(){ + case $DB_TYPE in + postgres) + establish_postgres_conn || exit $? + execute_postgres_scripts || exit $? + ;; + mysql) + establish_mysql_conn || exit $? + execute_mysql_sqript || exit $? + ;; + *) + echo "Incorrect DB_TYPE value! Possible value of DB_TYPE is 'postgres' or 'mysql'." + exit 1 + esac +} + +load_db_params +execute_db_script diff --git a/rpm/common.spec b/rpm/common.spec index e0757357..e02c8d0c 100644 --- a/rpm/common.spec +++ b/rpm/common.spec @@ -280,6 +280,16 @@ then echo " # rpm -i https://deac-ams.dl.sourceforge.net/project/mscorefonts2/rpms/msttcore-fonts-installer-2.6-1.noarch.rpm" fi +case "$1" in + 1) + # Initial installation + ;; + 2) + # Upgrade database + documentserver-upgrade-db.sh + ;; +esac + %preun case "$1" in 0)