diff --git a/CHANGELOG.md b/CHANGELOG.md index 528840d..c00a088 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,13 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project follows Zammad versioning. +## [3.0.0] - 2019-06-10 +### Changed + - Upgrade Zammad version to 3.0.0 + +### Fixed + - Shellcheck all scripts + ## [2.9.0] - 2019-02-20 ### Changed - Upgrade Zammad version to 2.9.0 diff --git a/Makefile b/Makefile index 9fe16f5..c5911c8 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ NAME = osixia/zammad -VERSION = 2.9.0 +VERSION = 3.0.0 .PHONY: build build-nocache test tag-latest push push-latest release git-tag-version diff --git a/README.md b/README.md index dfdd880..c1796a8 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ ![Docker Stars](https://img.shields.io/docker/stars/osixia/zammad.svg) ![](https://images.microbadger.com/badges/image/osixia/zammad.svg) -Latest release: 2.9.0 - Zammad 2.9.0 - [Changelog](CHANGELOG.md) | [Docker Hub](https://hub.docker.com/r/osixia/zammad/)  +Latest release: 3.0.0 - Zammad 3.0.0 - [Changelog](CHANGELOG.md) | [Docker Hub](https://hub.docker.com/r/osixia/zammad/)  **A docker image to run Zammad.** diff --git a/example/docker-compose.yml b/example/docker-compose.yml index 645c8c9..e5da8b1 100644 --- a/example/docker-compose.yml +++ b/example/docker-compose.yml @@ -32,7 +32,7 @@ services: - mariadb:/var/lib/mysql zammad: - image: osixia/zammad:2.9.0 + image: osixia/zammad:3.0.0 command: -l info labels: - "io.rancher.container.pull_image: always" diff --git a/example/kubernetes/zammad-deployment.yaml b/example/kubernetes/zammad-deployment.yaml index 640b34c..490f21f 100644 --- a/example/kubernetes/zammad-deployment.yaml +++ b/example/kubernetes/zammad-deployment.yaml @@ -15,7 +15,7 @@ spec: automountServiceAccountToken: false containers: - name: zammad - image: osixia/zammad:2.9.0 + image: osixia/zammad:3.0.0 imagePullPolicy: Always resources: requests: diff --git a/image/Dockerfile b/image/Dockerfile index 68cbbd8..1ee1f10 100644 --- a/image/Dockerfile +++ b/image/Dockerfile @@ -4,8 +4,8 @@ ENV ZAMMAD_DIR /home/zammad ENV ZAMMAD_USER zammad ENV RAILS_ENV production -ARG ZAMMAD_VERSION=2.9.0 -ARG ZAMMAD_MD5=08bd2f55770f23ee780a7dbd5c8c4cc8 +ARG ZAMMAD_VERSION=3.0.0 +ARG ZAMMAD_MD5=5170cfc115ee90e853c1180578fc30da ARG GOSU_VERSION=1.10 diff --git a/image/service/backup/assets/tool/zammad-backup b/image/service/backup/assets/tool/zammad-backup index eb2fbfd..db4e3b4 100755 --- a/image/service/backup/assets/tool/zammad-backup +++ b/image/service/backup/assets/tool/zammad-backup @@ -6,29 +6,27 @@ backupFileSuffix="-zammad.tar.gz" backupDbSuffix="-zammad-db.tar.gz" databaseFile="database.sql" -source /container/run/environment.sh +. /container/run/environment.sh # delete backups that are over $ZAMMAD_BACKUP_TTL days -find $backupPath -type f -mtime +$ZAMMAD_BACKUP_TTL -exec rm {} \; +find "${backupPath}" -type f -mtime +"${ZAMMAD_BACKUP_TTL}" -exec rm {} \; # date format for the dump file name dateFileFormat="+%Y%m%dT%H%M%S" -backupFilePath="$backupPath/$(date "$dateFileFormat")$backupFileSuffix" +backupFilePath="${backupPath}/$(date "${dateFileFormat}")${backupFileSuffix}" # save config and plugins except default ones -tar -czf $backupFilePath -C / ${ZAMMAD_DIR:1} -chmod 600 $backupFilePath +tar -czf "${backupFilePath}" -C / "${ZAMMAD_DIR:1}" +chmod 600 "${backupFilePath}" # backup database . /container/service/backup/assets/tool/zammad-get-db-params -rm -rf $databaseFile || true +rm -rf "${databaseFile}" || true -mysqldump -u $databaseUser -p$databasePassword --host $host $database > $databaseFile +mysqldump -u "${databaseUser}" -p"${databasePassword}" --host "${host}" "${database}" > "${databaseFile}" -backupFilePath="$backupPath/$(date "$dateFileFormat")$backupDbSuffix" -tar -czf $backupFilePath $databaseFile -chmod 600 $backupFilePath +backupFilePath="${backupPath}/$(date "${dateFileFormat}")${backupDbSuffix}" +tar -czf "${backupFilePath}" "${databaseFile}" +chmod 600 "${backupFilePath}" -rm -rf $databaseFile - -exit 0 +rm -rf "${databaseFile}" diff --git a/image/service/backup/assets/tool/zammad-get-db-params b/image/service/backup/assets/tool/zammad-get-db-params index e6657c7..66f052a 100755 --- a/image/service/backup/assets/tool/zammad-get-db-params +++ b/image/service/backup/assets/tool/zammad-get-db-params @@ -3,7 +3,7 @@ # get database name, user and password from configuration # /!\ configuration must use simple quote :) # and it's a bad idea to have ' in your username, password and database name -host="$(grep 'host:' < ${ZAMMAD_DIR}/config/database.yml | sed -e 's/.*host:\(\| \)//g')" -databaseUser="$(grep 'username:' < ${ZAMMAD_DIR}/config/database.yml | sed -e 's/.*username:\(\| \)//g')" -databasePassword="$(grep 'password:' < ${ZAMMAD_DIR}/config/database.yml | sed -e 's/.*password:\(\| \)//g')" -database="$(grep 'database:' < ${ZAMMAD_DIR}/config/database.yml | sed -e 's/.*database:\(\| \) //g')" +host="$(grep 'host:' < "${ZAMMAD_DIR}/config/database.yml" | sed -e 's/.*host:\(\| \)//g')" +databaseUser="$(grep 'username:' < "${ZAMMAD_DIR}/config/database.yml" | sed -e 's/.*username:\(\| \)//g')" +databasePassword="$(grep 'password:' < "${ZAMMAD_DIR}/config/database.yml" | sed -e 's/.*password:\(\| \)//g')" +database="$(grep 'database:' < "${ZAMMAD_DIR}/config/database.yml" | sed -e 's/.*database:\(\| \) //g')" diff --git a/image/service/backup/assets/tool/zammad-restore b/image/service/backup/assets/tool/zammad-restore index 7389086..25086e5 100755 --- a/image/service/backup/assets/tool/zammad-restore +++ b/image/service/backup/assets/tool/zammad-restore @@ -8,26 +8,26 @@ databaseFile="database.sql" for file in "$@" do - echo "Processing file $file" - - if $(echo "$file" | grep -q -e "$backupFileSuffix"); then + echo "Processing file ${file}" + + if echo "${file}" | grep -q -e "$backupFileSuffix"; then echo "Restore zammad files" - tar -xvzf $backupPath/$file -C / - echo "done :)" - elif $(echo "$file" | grep -q -e "$backupDbSuffix"); then + tar -xvzf "${backupPath}/${file}" -C / + echo "done :)" + elif echo "${file}" | grep -q -e "${backupDbSuffix}"; then echo "Restore zammad database" . /container/service/backup/assets/tool/zammad-get-db-params - - rm -rf $databaseFile || true - tar -xvzf $backupPath/$file - - mysql -u $databaseUser -p$databasePassword --host $host $database < $databaseFile - - rm -rf $databaseFile - + + rm -rf "${databaseFile}" || true + tar -xvzf "${backupPath}/${file}" + + mysql -u "${databaseUser}" -p"${databasePassword}" --host "${host}" "${database}" < "${databaseFile}" + + rm -rf "${databaseFile}" + echo "done :)" else - echo "Error: Unknown file type" + echo "Error: Unknown file type" fi done diff --git a/image/service/backup/startup.sh b/image/service/backup/startup.sh index 038968d..060933f 100755 --- a/image/service/backup/startup.sh +++ b/image/service/backup/startup.sh @@ -5,20 +5,18 @@ log-helper level eq trace && set -x # install image tools -ln -sf ${CONTAINER_SERVICE_DIR}/backup/assets/tool/* /sbin/ +ln -sf "${CONTAINER_SERVICE_DIR}"/backup/assets/tool/* /sbin/ # add cron jobs -ln -sf ${CONTAINER_SERVICE_DIR}/backup/assets/cronjobs /etc/cron.d/backup -chmod 600 ${CONTAINER_SERVICE_DIR}/backup/assets/cronjobs +ln -sf "${CONTAINER_SERVICE_DIR}/backup/assets/cronjobs" /etc/cron.d/backup +chmod 600 "${CONTAINER_SERVICE_DIR}/backup/assets/cronjobs" FIRST_START_DONE="${CONTAINER_STATE_DIR}/docker-backup-backup-first-start-done" # container first start -if [ ! -e "$FIRST_START_DONE" ]; then - - # adapt cronjobs file - sed -i "s|{{ ZAMMAD_BACKUP_CRON_EXP }}|${ZAMMAD_BACKUP_CRON_EXP}|g" ${CONTAINER_SERVICE_DIR}/backup/assets/cronjobs - - touch $FIRST_START_DONE +if [ ! -e "${FIRST_START_DONE}" ]; then + + # adapt cronjobs file + sed -i "s|{{ ZAMMAD_BACKUP_CRON_EXP }}|${ZAMMAD_BACKUP_CRON_EXP}|g" "${CONTAINER_SERVICE_DIR}/backup/assets/cronjobs" + + touch "${FIRST_START_DONE}" fi - -exit 0 diff --git a/image/service/nginx/startup.sh b/image/service/nginx/startup.sh index 613b5eb..791cba6 100755 --- a/image/service/nginx/startup.sh +++ b/image/service/nginx/startup.sh @@ -6,19 +6,17 @@ log-helper level eq trace && set -x FIRST_START_DONE="${CONTAINER_STATE_DIR}/docker-help-center-nginx-first-start-done" # container first start -if [ ! -e "$FIRST_START_DONE" ]; then +if [ ! -e "${FIRST_START_DONE}" ]; then # generate a certificate and key if files don't exists # https://github.com/osixia/docker-light-baseimage/blob/stable/image/service-available/:ssl-tools/assets/tool/ssl-helper - ssl-helper ${SSL_HELPER_PREFIX} "${CONTAINER_SERVICE_DIR}/nginx/assets/certs/$ZAMMAD_SSL_CRT_FILENAME" "${CONTAINER_SERVICE_DIR}/nginx/assets/certs/$ZAMMAD_SSL_KEY_FILENAME" "${CONTAINER_SERVICE_DIR}/nginx/assets/certs/$ZAMMAD_SSL_CA_CRT_FILENAME" - cat ${CONTAINER_SERVICE_DIR}/nginx/assets/certs/$ZAMMAD_SSL_CRT_FILENAME ${CONTAINER_SERVICE_DIR}/nginx/assets/certs/$ZAMMAD_SSL_CA_CRT_FILENAME > /nginx-combined-cert.crt + ssl-helper "${SSL_HELPER_PREFIX}" "${CONTAINER_SERVICE_DIR}/nginx/assets/certs/${ZAMMAD_SSL_CRT_FILENAME}" "${CONTAINER_SERVICE_DIR}/nginx/assets/certs/${ZAMMAD_SSL_KEY_FILENAME}" "${CONTAINER_SERVICE_DIR}/nginx/assets/certs/${ZAMMAD_SSL_CA_CRT_FILENAME}" + cat "${CONTAINER_SERVICE_DIR}/nginx/assets/certs/${ZAMMAD_SSL_CRT_FILENAME}" "${CONTAINER_SERVICE_DIR}/nginx/assets/certs/${ZAMMAD_SSL_CA_CRT_FILENAME}" > /nginx-combined-cert.crt - sed -i "s|{{ CONTAINER_SERVICE_DIR }}|${CONTAINER_SERVICE_DIR}|g" ${CONTAINER_SERVICE_DIR}/nginx/assets/config/server.conf - sed -i "s|{{ ZAMMAD_SSL_KEY_FILENAME }}|${ZAMMAD_SSL_KEY_FILENAME}|g" ${CONTAINER_SERVICE_DIR}/nginx/assets/config/server.conf + sed -i "s|{{ CONTAINER_SERVICE_DIR }}|${CONTAINER_SERVICE_DIR}|g" "${CONTAINER_SERVICE_DIR}/nginx/assets/config/server.conf" + sed -i "s|{{ ZAMMAD_SSL_KEY_FILENAME }}|${ZAMMAD_SSL_KEY_FILENAME}|g" "${CONTAINER_SERVICE_DIR}/nginx/assets/config/server.conf" - ln -sf ${CONTAINER_SERVICE_DIR}/nginx/assets/config/server.conf /etc/nginx/sites-enabled/server.conf + ln -sf "${CONTAINER_SERVICE_DIR}/nginx/assets/config/server.conf" /etc/nginx/sites-enabled/server.conf - touch $FIRST_START_DONE + touch "${FIRST_START_DONE}" fi - -exit 0 diff --git a/image/service/railsserver/process.sh b/image/service/railsserver/process.sh index d71c119..703d318 100755 --- a/image/service/railsserver/process.sh +++ b/image/service/railsserver/process.sh @@ -4,5 +4,5 @@ # https://github.com/osixia/docker-light-baseimage/blob/stable/image/tool/log-helper log-helper level eq trace && set -x -cd ${ZAMMAD_DIR} -exec gosu ${ZAMMAD_USER}:${ZAMMAD_USER} bundle exec rails server puma -b 127.0.0.1 -p 3000 -e ${RAILS_ENV} +cd "${ZAMMAD_DIR}" +exec gosu "${ZAMMAD_USER}":"${ZAMMAD_USER}" bundle exec rails server puma -b 127.0.0.1 -p 3000 -e "${RAILS_ENV}" diff --git a/image/service/railsserver/startup.sh b/image/service/railsserver/startup.sh index 0fd3a22..d88bd5c 100755 --- a/image/service/railsserver/startup.sh +++ b/image/service/railsserver/startup.sh @@ -6,13 +6,13 @@ log-helper level eq trace && set -x FIRST_START_DONE="${CONTAINER_STATE_DIR}/docker-railsserver-first-start-done" # container first start -if [ ! -e "$FIRST_START_DONE" ]; then +if [ ! -e "${FIRST_START_DONE}" ]; then - cd ${ZAMMAD_DIR} + cd "${ZAMMAD_DIR}" if [ -n "${ZAMMAD_MEMCACHED_HOST}" ]; then log-helper info "Memcached config..." - sed -i -e "s/.*config.cache_store.*file_store.*cache_file_store.*/ config.cache_store = :dalli_store, '${ZAMMAD_MEMCACHED_HOST}:11211'\n config.session_store = :dalli_store, '${ZAMMAD_MEMCACHED_HOST}:11211'/" ${ZAMMAD_DIR}/config/application.rb + sed -i -e "s/.*config.cache_store.*file_store.*cache_file_store.*/ config.cache_store = :dalli_store, '${ZAMMAD_MEMCACHED_HOST}:11211'\n config.session_store = :dalli_store, '${ZAMMAD_MEMCACHED_HOST}:11211'/" "${ZAMMAD_DIR}/config/application.rb" fi log-helper info "Database config..." @@ -24,13 +24,13 @@ if [ ! -e "$FIRST_START_DONE" ]; then ZAMMAD_DB_PASSWORD ) - for tag in ${TO_REPLACE[@]} + for tag in "${TO_REPLACE[@]}" do - sed -i "s|{{ ${tag} }}|${!tag}|g" ${ZAMMAD_DIR}/config/database.yml + sed -i "s|{{ ${tag} }}|${!tag}|g" "${ZAMMAD_DIR}/config/database.yml" done for i in {30..0}; do - if echo "select 1;" | mysql -h ${ZAMMAD_DB_HOST} -u ${ZAMMAD_DB_USER} -p${ZAMMAD_DB_PASSWORD} ${ZAMMAD_DB_NAME} &> /dev/null; then + if echo "select 1;" | mysql -h "${ZAMMAD_DB_HOST}" -u "${ZAMMAD_DB_USER}" -p"${ZAMMAD_DB_PASSWORD}" "${ZAMMAD_DB_NAME}" &> /dev/null; then break fi echo $? @@ -44,34 +44,32 @@ if [ ! -e "$FIRST_START_DONE" ]; then fi # test is zammad is installed - ZAMMAD_INSTALLED=$(mysql -h ${ZAMMAD_DB_HOST} -u ${ZAMMAD_DB_USER} -p${ZAMMAD_DB_PASSWORD} ${ZAMMAD_DB_NAME} -e "select id from settings where name='es_url'" || true) + ZAMMAD_INSTALLED=$(mysql -h "${ZAMMAD_DB_HOST}" -u "${ZAMMAD_DB_USER}" -p"${ZAMMAD_DB_PASSWORD}" "${ZAMMAD_DB_NAME}" -e "select id from settings where name='es_url'" || true) if [ -n "${ZAMMAD_INSTALLED}" ]; then log-helper info "Update database..." - bundle exec rake db:migrate &> /dev/null + bundle exec rake db:migrate | log-helper debug else log-helper info "Init database..." - bundle exec rake db:create - bundle exec rake db:migrate - bundle exec rake db:seed + bundle exec rake db:create | log-helper debug + bundle exec rake db:migrate | log-helper debug + bundle exec rake db:seed | log-helper debug fi log-helper info "Elasticsearch config..." - bundle exec rails r "Setting.set('es_url', '${ZAMMAD_ELASTICSEARCH_URL}')" + bundle exec rails r "Setting.set('es_url', '${ZAMMAD_ELASTICSEARCH_URL}')" | log-helper debug if [ -n "${ZAMMAD_ELASTICSEARCH_USER}" ] && [ -n "${ZAMMAD_ELASTICSEARCH_PASS}" ]; then - bundle exec rails r "Setting.set('es_user', \"${ZAMMAD_ELASTICSEARCH_USER}\")" - bundle exec rails r "Setting.set('es_password', \"${ZAMMAD_ELASTICSEARCH_PASS}\")" + bundle exec rails r "Setting.set('es_user', \"${ZAMMAD_ELASTICSEARCH_USER}\")" | log-helper debug + bundle exec rails r "Setting.set('es_password', \"${ZAMMAD_ELASTICSEARCH_PASS}\")" | log-helper debug fi - bundle exec rake searchindex:rebuild || true + bundle exec rake searchindex:rebuild | log-helper debug || true log-helper info "Fix file ownership..." - chown -R ${ZAMMAD_USER}:${ZAMMAD_USER} ${ZAMMAD_DIR} + chown -R "${ZAMMAD_USER}":"${ZAMMAD_USER}" "${ZAMMAD_DIR}" log-helper info "Delete logs..." - find ${ZAMMAD_DIR}/log -iname *.log -exec rm {} \; + find "${ZAMMAD_DIR}/log" -iname "*.log" -exec rm {} \; - touch $FIRST_START_DONE + touch "${FIRST_START_DONE}" fi - -exit 0 diff --git a/image/service/scheduler/process.sh b/image/service/scheduler/process.sh index 315d450..2570b42 100755 --- a/image/service/scheduler/process.sh +++ b/image/service/scheduler/process.sh @@ -6,5 +6,5 @@ log-helper level eq trace && set -x sv start /container/run/process/railsserver || exit 1 -cd ${ZAMMAD_DIR} -exec gosu ${ZAMMAD_USER}:${ZAMMAD_USER} bundle exec script/scheduler.rb run +cd "${ZAMMAD_DIR}" +exec gosu "${ZAMMAD_USER}":"${ZAMMAD_USER}" bundle exec script/scheduler.rb run diff --git a/image/service/websocket/process.sh b/image/service/websocket/process.sh index 1380d5b..baac9e2 100755 --- a/image/service/websocket/process.sh +++ b/image/service/websocket/process.sh @@ -6,5 +6,5 @@ log-helper level eq trace && set -x sv start /container/run/process/railsserver || exit 1 -cd ${ZAMMAD_DIR} -exec gosu ${ZAMMAD_USER}:${ZAMMAD_USER} bundle exec script/websocket-server.rb -b 127.0.0.1 -p 6042 start +cd "${ZAMMAD_DIR}" +exec gosu "${ZAMMAD_USER}":"${ZAMMAD_USER}" bundle exec script/websocket-server.rb -b 127.0.0.1 -p 6042 start