From 09b38b44d1d1ab784deacf11d6bf7bc783668c5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Bauer?= Date: Wed, 2 Nov 2016 18:18:29 +0100 Subject: [PATCH] adding mysql / mariadb to postinstall.sh (#346) * .pkgr.yml - add mysql/mariadb as dependenciy alternatvies / postinstall.sh - add mysql db creation * postinstall.sh fixes * pkgr.yml additions * postinstall.sh fixes * postinstall.sh fixes * postinstall.sh fixes * postinstall.sh fixes * postinstall.sh fixes * [skip ci] postinstall.sh fixes * postinstall.sh fixes * postinstall.sh fixes * postinstall.sh fixes * postinstall.sh fixes * postinstall.sh fixes * postinstall.sh fixes * postinstall.sh fixes * postinstall.sh fixes * postinstall.sh fixes --- .pkgr.yml | 9 ++- contrib/packager.io/postinstall.sh | 110 ++++++++++++++++++++--------- 2 files changed, 82 insertions(+), 37 deletions(-) diff --git a/.pkgr.yml b/.pkgr.yml index ea7cce21e..7dd73a88f 100644 --- a/.pkgr.yml +++ b/.pkgr.yml @@ -1,3 +1,6 @@ +name: zammad +description: Zammad is a web based open source helpdesk/customer support system +homepage: https://zammad.org notifications: false targets: centos-6: @@ -11,15 +14,15 @@ targets: debian-8: dependencies: - nginx - - postgresql + - postgresql|mysql-server|mariadb-server|sqlite ubuntu-16.04: dependencies: - nginx - - postgresql + - postgresql|mysql-server|mariadb-server|sqlite sles-12: dependencies: - nginx - - postgresql-server + - postgresql-server|mysql-server|mariadb-server before: - uname -a - ruby -v diff --git a/contrib/packager.io/postinstall.sh b/contrib/packager.io/postinstall.sh index c16b5cacb..ee9542db4 100755 --- a/contrib/packager.io/postinstall.sh +++ b/contrib/packager.io/postinstall.sh @@ -8,6 +8,7 @@ PATH=/opt/zammad/bin:/opt/zammad/vendor/bundle/bin:/sbin:/bin:/usr/sbin:/usr/bin ZAMMAD_DIR="/opt/zammad" DB="zammad_production" DB_USER="zammad" +MY_CNF="/etc/mysql/debian.cnf" # check which init system is used if [ -n "$(which initctl)" ]; then @@ -30,58 +31,101 @@ ${INIT_CMD} stop zammad # check if database.yml exists if [ -f ${ZAMMAD_DIR}/config/database.yml ]; then # db migration - echo "# database.yml exists. Updating db..." + echo "# database.yml found. Updating db..." zammad run rake db:migrate else + echo "# database.yml not found. Creating db..." + # create new password DB_PASS="$(tr -dc A-Za-z0-9 < /dev/urandom | head -c10)" - if [ -n "$(which postgresql-setup)" ]; then - echo "preparing postgresql server" - postgresql-setup initdb - - echo "backuping postgres config" - test -f /var/lib/pgsql/data/pg_hba.conf.bak || cp /var/lib/pgsql/data/pg_hba.conf /var/lib/pgsql/data/pg_hba.conf.bak + # postgresql + if [ -n "$(which psql)" ]; then + echo "installing zammad on postgresql" - echo "allow login via username and password in postgresql" - egrep -v "^#.*$" < /var/lib/pgsql/data/pg_hba.conf.bak | sed 's/ident/trust/g' > /var/lib/pgsql/data/pg_hba.conf + # centos + if [ -n "$(which postgresql-setup)" ]; then + echo "preparing postgresql server" + postgresql-setup initdb - echo "restarting postgresql server" - ${INIT_CMD} restart postgresql + echo "backuping postgres config" + test -f /var/lib/pgsql/data/pg_hba.conf.bak || cp /var/lib/pgsql/data/pg_hba.conf /var/lib/pgsql/data/pg_hba.conf.bak - echo "create postgresql bootstart" - ${INIT_CMD} enable postgresql.service + echo "allow login via username and password in postgresql" + sed 's/ident/trust/g' < /var/lib/pgsql/data/pg_hba.conf.bak > /var/lib/pgsql/data/pg_hba.conf + + echo "restarting postgresql server" + ${INIT_CMD} restart postgresql + + echo "create postgresql bootstart" + ${INIT_CMD} enable postgresql.service + fi + + echo "creating zammad postgresql db" + su - postgres -c "createdb -E UTF8 ${DB}" + + echo "creating zammad postgresql user" + echo "CREATE USER \"${DB_USER}\" WITH PASSWORD '${DB_PASS}';" | su - postgres -c psql + + echo "grant privileges to new postgresql user" + echo "GRANT ALL PRIVILEGES ON DATABASE \"${DB}\" TO \"${DB_USER}\";" | su - postgres -c psql + + echo "updating database.yml" + sed -e "s/.*adapter:.*/ adapter: postgresql/" \ + -e "s/.*username:.*/ username: ${DB_USER}/" \ + -e "s/.*password:.*/ password: ${DB_PASS}/" \ + -e "s/.*database:.*/ database: ${DB}/" < ${ZAMMAD_DIR}/config/database.yml.dist > ${ZAMMAD_DIR}/config/database.yml + + # mysql / mariadb + elif [ -n "$(which mysql)" ];then + echo "installing zammd on mysql" + + if [ -f "${MY_CNF}" ]; then + MYSQL_CREDENTIALS="--defaults-file=${MY_CNF}" + else + echo -n "Please enter your MySQL root password:" + read -s MYSQL_ROOT_PASS + MYSQL_CREDENTIALS="-u root -p${MYSQL_ROOT_PASS}" + fi + + echo "creating zammad mysql db" + mysql ${MYSQL_CREDENTIALS} -e "CREATE DATABASE ${DB} DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;" + + echo "creating zammad mysql user" + mysql ${MYSQL_CREDENTIALS} -e "CREATE USER \"${DB_USER}\"@\"${DB_HOST}\" IDENTIFIED BY \"${DB_PASS}\";" + + echo "grant privileges to new mysql user" + mysql ${MYSQL_CREDENTIALS} -e "GRANT ALL PRIVILEGES ON ${DB}.* TO \"${DB_USER}\"@\"${DB_HOST}\"; FLUSH PRIVILEGES;" + + echo "updating database.yml" + sed -e "s/.*adapter:.*/ adapter: mysql2/" \ + -e "s/.*username:.*/ username: ${DB_USER}/" \ + -e "s/.*password:.*/ password: ${DB_PASS}/" \ + -e "s/.*database:.*/ database: ${DB}/" < ${ZAMMAD_DIR}/config/database.yml.dist > ${ZAMMAD_DIR}/config/database.yml + + # sqlite / no local db + elif [ -n "$(which sqlite)" ];then + echo "installing zammad on sqlite" + echo "in fact this does nothing at the moment. use this to install zammad without a local database. sqlite should only be used in dev environment anyway." fi - # create database - echo "# database.yml not found. Creating new db..." - su - postgres -c "createdb -E UTF8 ${DB}" - - # create postgres user - echo "CREATE USER \"${DB_USER}\" WITH PASSWORD '${DB_PASS}';" | su - postgres -c psql - - # grant privileges - echo "GRANT ALL PRIVILEGES ON DATABASE \"${DB}\" TO \"${DB_USER}\";" | su - postgres -c psql - - # update configfile - sed "s/.*password:.*/ password: ${DB_PASS}/" < ${ZAMMAD_DIR}/config/database.yml.pkgr > ${ZAMMAD_DIR}/config/database.yml - # fill database - zammad run rake db:migrate + zammad run rake db:migrate zammad run rake db:seed + fi echo "# Starting Zammad" ${INIT_CMD} start zammad -# nginx config +# copy nginx config if [ -n "$(which nginx)" ]; then - # copy nginx config # debian / ubuntu if [ -d /etc/nginx/sites-enabled ]; then NGINX_CONF="/etc/nginx/sites-enabled/zammad.conf" test -f /etc/nginx/sites-available/zammad.conf || cp ${ZAMMAD_DIR}/contrib/nginx/zammad.conf /etc/nginx/sites-available/zammad.conf test -h ${NGINX_CONF} || ln -s /etc/nginx/sites-available/zammad.conf ${NGINX_CONF} + # centos / sles elif [ -d /etc/nginx/conf.d ]; then NGINX_CONF="/etc/nginx/conf.d/zammad.conf" @@ -90,9 +134,7 @@ if [ -n "$(which nginx)" ]; then echo "# Restarting Nginx" ${INIT_CMD} restart nginx - - echo -e "\nAdd your FQDN to servername directive in ${NGINX_CONF} and restart nginx if you're not testing localy" - echo -e "or open http://localhost in your browser to start using Zammad.\n" -else - echo -e "\nOpen http://localhost:3000 in your browser to start using Zammad.\n" fi + +echo -e "\nAdd your FQDN to servername directive in ${NGINX_CONF} and restart nginx if you're not testing localy" +echo -e "or open http://localhost in your browser to start using Zammad.\n"