From 649bbd7f2ecc410fe1f46e8eaa51136f3aa73969 Mon Sep 17 00:00:00 2001 From: POTIER Mathieu Date: Thu, 13 Aug 2020 20:20:47 +0200 Subject: [PATCH] improve init script (#26) Co-authored-by: Mathieu POTIER --- Dockerfile.template | 3 +- README.template | 1 + docker-run.sh | 46 +++++--- images/10.0.7-php5.6/Dockerfile | 3 +- images/10.0.7-php5.6/docker-run.sh | 46 +++++--- images/10.0.7-php7.3/Dockerfile | 3 +- images/10.0.7-php7.3/docker-run.sh | 46 +++++--- images/11.0.5-php5.6/Dockerfile | 3 +- images/11.0.5-php5.6/docker-run.sh | 46 +++++--- images/11.0.5-php7.4/Dockerfile | 3 +- images/11.0.5-php7.4/docker-run.sh | 46 +++++--- images/12.0.2-php5.6/Dockerfile | 57 ++++++++++ images/12.0.2-php5.6/docker-run.sh | 176 +++++++++++++++++++++++++++++ images/12.0.2-php7.4/Dockerfile | 57 ++++++++++ images/12.0.2-php7.4/docker-run.sh | 176 +++++++++++++++++++++++++++++ images/6.0.8-php5.6/Dockerfile | 3 +- images/6.0.8-php5.6/docker-run.sh | 46 +++++--- images/6.0.8-php7.1/Dockerfile | 3 +- images/6.0.8-php7.1/docker-run.sh | 46 +++++--- images/7.0.5-php5.6/Dockerfile | 3 +- images/7.0.5-php5.6/docker-run.sh | 46 +++++--- images/7.0.5-php7.2/Dockerfile | 3 +- images/7.0.5-php7.2/docker-run.sh | 46 +++++--- images/8.0.6-php5.6/Dockerfile | 3 +- images/8.0.6-php5.6/docker-run.sh | 46 +++++--- images/8.0.6-php7.2/Dockerfile | 3 +- images/8.0.6-php7.2/docker-run.sh | 46 +++++--- images/9.0.4-php5.6/Dockerfile | 3 +- images/9.0.4-php5.6/docker-run.sh | 46 +++++--- images/9.0.4-php7.3/Dockerfile | 3 +- images/9.0.4-php7.3/docker-run.sh | 46 +++++--- 31 files changed, 896 insertions(+), 208 deletions(-) create mode 100644 images/12.0.2-php5.6/Dockerfile create mode 100755 images/12.0.2-php5.6/docker-run.sh create mode 100644 images/12.0.2-php7.4/Dockerfile create mode 100755 images/12.0.2-php7.4/docker-run.sh diff --git a/Dockerfile.template b/Dockerfile.template index 9e15d23..6ffec2d 100644 --- a/Dockerfile.template +++ b/Dockerfile.template @@ -47,7 +47,8 @@ RUN unzip -q /tmp/dolibarr.zip -d /tmp/dolibarr && \ ln -s /var/www/html /var/www/htdocs && \ cp -r /tmp/dolibarr/dolibarr-${DOLI_VERSION}/scripts /var/www/ && \ rm -rf /tmp/* && \ - mkdir -p /var/www/documents + mkdir -p /var/www/documents && \ + chown -R www-data:www-data /var/www EXPOSE 80 VOLUME /var/www/documents diff --git a/README.template b/README.template index 331b31b..4e5afa8 100644 --- a/README.template +++ b/README.template @@ -63,5 +63,6 @@ Remove the `install.lock` file and start an updated version container. Ensure th | **DOLI_ADMIN_PASSWORD** | *admin* | Admin'password | **DOLI_URL_ROOT** | *http://localhost* | Url root of the Dolibarr installation | **PHP_INI_DATE_TIMEZONE** | *UTC* | Default timezone on PHP +| **PHP_INI_MEMORY_LIMIT** | *256M* | PHP Memory limit | **WWW_USER_ID** | | ID of user www-data. ID will not changed if leave empty. During a development, it is very practical to put the same ID as the host user. | **WWW_GROUP_ID** | | ID of group www-data. ID will not changed if leave empty. diff --git a/docker-run.sh b/docker-run.sh index cf6d2ea..21b86d9 100755 --- a/docker-run.sh +++ b/docker-run.sh @@ -2,20 +2,25 @@ function initDolibarr() { + local CURRENT_UID=$(id -u www-data) + local CURRENT_GID=$(id -g www-data) usermod -u ${WWW_USER_ID} www-data groupmod -g ${WWW_GROUP_ID} www-data - if [ ! -d /var/www/documents ]; then + if [[ ! -d /var/www/documents ]]; then + echo "[INIT] => create volume directory /var/www/documents ..." mkdir -p /var/www/documents fi + echo "[INIT] => update PHP Config ..." cat > ${PHP_INI_DIR}/conf.d/dolibarr-php.ini << EOF date.timezone = ${PHP_INI_DATE_TIMEZONE} sendmail_path = /usr/sbin/sendmail -t -i -memory_limit = $PHP_INI_MEMORY_LIMIT +memory_limit = ${PHP_INI_MEMORY_LIMIT} EOF - if [ ! -f /var/www/html/conf/conf.php ]; then + if [[ ! -f /var/www/html/conf/conf.php ]]; then + echo "[INIT] => update Dolibarr Config ..." cat > /var/www/html/conf/conf.php << EOF update ownership for file in Dolibarr Config ..." + chown www-data:www-data /var/www/html/conf/conf.php chmod 400 /var/www/html/conf/conf.php + + if [[ ${CURRENT_UID} -ne ${WWW_USER_ID} || ${CURRENT_GID} -ne ${WWW_GROUP_ID} ]]; then + # Refresh file ownership cause it has changed + echo "[INIT] => As UID / GID have changed from default, update ownership for files in /var/ww ..." + chown -R www-data:www-data /var/www + else + # Reducing load on init : change ownership only for volumes declared in docker + echo "[INIT] => update ownership for files in /var/www/documents ..." + chown -R www-data:www-data /var/www/documents + fi } function waitForDataBase() { r=1 - while [ $r -ne 0 ]; do + while [[ ${r} -ne 0 ]]; do mysql -u ${DOLI_DB_USER} --protocol tcp -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} -e "status" > /dev/null 2>&1 r=$? - if [ ${r} -ne 0 ]; then - echo "Waiting that SQL database is up..." + if [[ ${r} -ne 0 ]]; then + echo "Waiting that SQL database is up ..." sleep 2 fi done @@ -61,26 +77,26 @@ function initializeDatabase() { for fileSQL in /var/www/html/install/mysql/tables/*.sql; do if [[ ${fileSQL} != *.key.sql ]]; then - echo "Importing table from `basename ${fileSQL}`..." + echo "Importing table from `basename ${fileSQL}` ..." sed -i 's/--.*//g;' ${fileSQL} # remove all comment mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} fi done for fileSQL in /var/www/html/install/mysql/tables/*.key.sql; do - echo "Importing table key from `basename ${fileSQL}`..." + echo "Importing table key from `basename ${fileSQL}` ..." sed -i 's/--.*//g;' ${fileSQL} mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} > /dev/null 2>&1 done for fileSQL in /var/www/html/install/mysql/functions/*.sql; do - echo "Importing `basename ${fileSQL}`..." + echo "Importing `basename ${fileSQL}` ..." sed -i 's/--.*//g;' ${fileSQL} mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} > /dev/null 2>&1 done for fileSQL in /var/www/html/install/mysql/data/*.sql; do - echo "Importing data from `basename ${fileSQL}`..." + echo "Importing data from `basename ${fileSQL}` ..." sed -i 's/--.*//g;' ${fileSQL} mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} > /dev/null 2>&1 done @@ -105,7 +121,7 @@ function migrateDatabase() mysqldump -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} > /var/www/documents/dump.sql r=${?} - if [ ${r} -ne 0 ]; then + if [[ ${r} -ne 0 ]]; then echo "Dump failed ... Aborting migration ..." return ${r} fi @@ -119,7 +135,7 @@ function migrateDatabase() r=$? popd > /dev/null - if [ ${r} -ne 0 ]; then + if [[ ${r} -ne 0 ]]; then echo "Migration failed ... Restoring DB ... check file /var/www/documents/migration_error.html for more info on error ..." mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < /var/www/documents/dump.sql echo "DB Restored ..." @@ -140,12 +156,12 @@ function run() if [[ ${DOLI_INSTALL_AUTO} -eq 1 && ! -f /var/www/documents/install.lock ]]; then mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} -e "SELECT Q.LAST_INSTALLED_VERSION FROM (SELECT INET_ATON(CONCAT(value, REPEAT('.0', 3 - CHAR_LENGTH(value) + CHAR_LENGTH(REPLACE(value, '.', ''))))) as VERSION_ATON, value as LAST_INSTALLED_VERSION FROM llx_const WHERE name IN ('MAIN_VERSION_LAST_INSTALL', 'MAIN_VERSION_LAST_UPGRADE') and entity=0) Q ORDER BY VERSION_ATON DESC LIMIT 1" > /tmp/lastinstall.result 2>&1 r=$? - if [ ${r} -ne 0 ]; then + if [[ ${r} -ne 0 ]]; then initializeDatabase else INSTALLED_VERSION=`grep -v LAST_INSTALLED_VERSION /tmp/lastinstall.result` echo "Last installed Version is : ${INSTALLED_VERSION}" - if [ "$(echo ${INSTALLED_VERSION} | cut -d. -f1)" -lt "$(echo ${DOLI_VERSION} | cut -d. -f1)" ]; then + if [[ "$(echo ${INSTALLED_VERSION} | cut -d. -f1)" -lt "$(echo ${DOLI_VERSION} | cut -d. -f1)" ]]; then migrateDatabase else echo "Schema update is not required ... Enjoy !!" diff --git a/images/10.0.7-php5.6/Dockerfile b/images/10.0.7-php5.6/Dockerfile index 59b93f0..340d867 100644 --- a/images/10.0.7-php5.6/Dockerfile +++ b/images/10.0.7-php5.6/Dockerfile @@ -47,7 +47,8 @@ RUN unzip -q /tmp/dolibarr.zip -d /tmp/dolibarr && \ ln -s /var/www/html /var/www/htdocs && \ cp -r /tmp/dolibarr/dolibarr-${DOLI_VERSION}/scripts /var/www/ && \ rm -rf /tmp/* && \ - mkdir -p /var/www/documents + mkdir -p /var/www/documents && \ + chown -R www-data:www-data /var/www EXPOSE 80 VOLUME /var/www/documents diff --git a/images/10.0.7-php5.6/docker-run.sh b/images/10.0.7-php5.6/docker-run.sh index cf6d2ea..21b86d9 100755 --- a/images/10.0.7-php5.6/docker-run.sh +++ b/images/10.0.7-php5.6/docker-run.sh @@ -2,20 +2,25 @@ function initDolibarr() { + local CURRENT_UID=$(id -u www-data) + local CURRENT_GID=$(id -g www-data) usermod -u ${WWW_USER_ID} www-data groupmod -g ${WWW_GROUP_ID} www-data - if [ ! -d /var/www/documents ]; then + if [[ ! -d /var/www/documents ]]; then + echo "[INIT] => create volume directory /var/www/documents ..." mkdir -p /var/www/documents fi + echo "[INIT] => update PHP Config ..." cat > ${PHP_INI_DIR}/conf.d/dolibarr-php.ini << EOF date.timezone = ${PHP_INI_DATE_TIMEZONE} sendmail_path = /usr/sbin/sendmail -t -i -memory_limit = $PHP_INI_MEMORY_LIMIT +memory_limit = ${PHP_INI_MEMORY_LIMIT} EOF - if [ ! -f /var/www/html/conf/conf.php ]; then + if [[ ! -f /var/www/html/conf/conf.php ]]; then + echo "[INIT] => update Dolibarr Config ..." cat > /var/www/html/conf/conf.php << EOF update ownership for file in Dolibarr Config ..." + chown www-data:www-data /var/www/html/conf/conf.php chmod 400 /var/www/html/conf/conf.php + + if [[ ${CURRENT_UID} -ne ${WWW_USER_ID} || ${CURRENT_GID} -ne ${WWW_GROUP_ID} ]]; then + # Refresh file ownership cause it has changed + echo "[INIT] => As UID / GID have changed from default, update ownership for files in /var/ww ..." + chown -R www-data:www-data /var/www + else + # Reducing load on init : change ownership only for volumes declared in docker + echo "[INIT] => update ownership for files in /var/www/documents ..." + chown -R www-data:www-data /var/www/documents + fi } function waitForDataBase() { r=1 - while [ $r -ne 0 ]; do + while [[ ${r} -ne 0 ]]; do mysql -u ${DOLI_DB_USER} --protocol tcp -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} -e "status" > /dev/null 2>&1 r=$? - if [ ${r} -ne 0 ]; then - echo "Waiting that SQL database is up..." + if [[ ${r} -ne 0 ]]; then + echo "Waiting that SQL database is up ..." sleep 2 fi done @@ -61,26 +77,26 @@ function initializeDatabase() { for fileSQL in /var/www/html/install/mysql/tables/*.sql; do if [[ ${fileSQL} != *.key.sql ]]; then - echo "Importing table from `basename ${fileSQL}`..." + echo "Importing table from `basename ${fileSQL}` ..." sed -i 's/--.*//g;' ${fileSQL} # remove all comment mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} fi done for fileSQL in /var/www/html/install/mysql/tables/*.key.sql; do - echo "Importing table key from `basename ${fileSQL}`..." + echo "Importing table key from `basename ${fileSQL}` ..." sed -i 's/--.*//g;' ${fileSQL} mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} > /dev/null 2>&1 done for fileSQL in /var/www/html/install/mysql/functions/*.sql; do - echo "Importing `basename ${fileSQL}`..." + echo "Importing `basename ${fileSQL}` ..." sed -i 's/--.*//g;' ${fileSQL} mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} > /dev/null 2>&1 done for fileSQL in /var/www/html/install/mysql/data/*.sql; do - echo "Importing data from `basename ${fileSQL}`..." + echo "Importing data from `basename ${fileSQL}` ..." sed -i 's/--.*//g;' ${fileSQL} mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} > /dev/null 2>&1 done @@ -105,7 +121,7 @@ function migrateDatabase() mysqldump -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} > /var/www/documents/dump.sql r=${?} - if [ ${r} -ne 0 ]; then + if [[ ${r} -ne 0 ]]; then echo "Dump failed ... Aborting migration ..." return ${r} fi @@ -119,7 +135,7 @@ function migrateDatabase() r=$? popd > /dev/null - if [ ${r} -ne 0 ]; then + if [[ ${r} -ne 0 ]]; then echo "Migration failed ... Restoring DB ... check file /var/www/documents/migration_error.html for more info on error ..." mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < /var/www/documents/dump.sql echo "DB Restored ..." @@ -140,12 +156,12 @@ function run() if [[ ${DOLI_INSTALL_AUTO} -eq 1 && ! -f /var/www/documents/install.lock ]]; then mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} -e "SELECT Q.LAST_INSTALLED_VERSION FROM (SELECT INET_ATON(CONCAT(value, REPEAT('.0', 3 - CHAR_LENGTH(value) + CHAR_LENGTH(REPLACE(value, '.', ''))))) as VERSION_ATON, value as LAST_INSTALLED_VERSION FROM llx_const WHERE name IN ('MAIN_VERSION_LAST_INSTALL', 'MAIN_VERSION_LAST_UPGRADE') and entity=0) Q ORDER BY VERSION_ATON DESC LIMIT 1" > /tmp/lastinstall.result 2>&1 r=$? - if [ ${r} -ne 0 ]; then + if [[ ${r} -ne 0 ]]; then initializeDatabase else INSTALLED_VERSION=`grep -v LAST_INSTALLED_VERSION /tmp/lastinstall.result` echo "Last installed Version is : ${INSTALLED_VERSION}" - if [ "$(echo ${INSTALLED_VERSION} | cut -d. -f1)" -lt "$(echo ${DOLI_VERSION} | cut -d. -f1)" ]; then + if [[ "$(echo ${INSTALLED_VERSION} | cut -d. -f1)" -lt "$(echo ${DOLI_VERSION} | cut -d. -f1)" ]]; then migrateDatabase else echo "Schema update is not required ... Enjoy !!" diff --git a/images/10.0.7-php7.3/Dockerfile b/images/10.0.7-php7.3/Dockerfile index c5b2b03..a9a82c6 100644 --- a/images/10.0.7-php7.3/Dockerfile +++ b/images/10.0.7-php7.3/Dockerfile @@ -47,7 +47,8 @@ RUN unzip -q /tmp/dolibarr.zip -d /tmp/dolibarr && \ ln -s /var/www/html /var/www/htdocs && \ cp -r /tmp/dolibarr/dolibarr-${DOLI_VERSION}/scripts /var/www/ && \ rm -rf /tmp/* && \ - mkdir -p /var/www/documents + mkdir -p /var/www/documents && \ + chown -R www-data:www-data /var/www EXPOSE 80 VOLUME /var/www/documents diff --git a/images/10.0.7-php7.3/docker-run.sh b/images/10.0.7-php7.3/docker-run.sh index cf6d2ea..21b86d9 100755 --- a/images/10.0.7-php7.3/docker-run.sh +++ b/images/10.0.7-php7.3/docker-run.sh @@ -2,20 +2,25 @@ function initDolibarr() { + local CURRENT_UID=$(id -u www-data) + local CURRENT_GID=$(id -g www-data) usermod -u ${WWW_USER_ID} www-data groupmod -g ${WWW_GROUP_ID} www-data - if [ ! -d /var/www/documents ]; then + if [[ ! -d /var/www/documents ]]; then + echo "[INIT] => create volume directory /var/www/documents ..." mkdir -p /var/www/documents fi + echo "[INIT] => update PHP Config ..." cat > ${PHP_INI_DIR}/conf.d/dolibarr-php.ini << EOF date.timezone = ${PHP_INI_DATE_TIMEZONE} sendmail_path = /usr/sbin/sendmail -t -i -memory_limit = $PHP_INI_MEMORY_LIMIT +memory_limit = ${PHP_INI_MEMORY_LIMIT} EOF - if [ ! -f /var/www/html/conf/conf.php ]; then + if [[ ! -f /var/www/html/conf/conf.php ]]; then + echo "[INIT] => update Dolibarr Config ..." cat > /var/www/html/conf/conf.php << EOF update ownership for file in Dolibarr Config ..." + chown www-data:www-data /var/www/html/conf/conf.php chmod 400 /var/www/html/conf/conf.php + + if [[ ${CURRENT_UID} -ne ${WWW_USER_ID} || ${CURRENT_GID} -ne ${WWW_GROUP_ID} ]]; then + # Refresh file ownership cause it has changed + echo "[INIT] => As UID / GID have changed from default, update ownership for files in /var/ww ..." + chown -R www-data:www-data /var/www + else + # Reducing load on init : change ownership only for volumes declared in docker + echo "[INIT] => update ownership for files in /var/www/documents ..." + chown -R www-data:www-data /var/www/documents + fi } function waitForDataBase() { r=1 - while [ $r -ne 0 ]; do + while [[ ${r} -ne 0 ]]; do mysql -u ${DOLI_DB_USER} --protocol tcp -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} -e "status" > /dev/null 2>&1 r=$? - if [ ${r} -ne 0 ]; then - echo "Waiting that SQL database is up..." + if [[ ${r} -ne 0 ]]; then + echo "Waiting that SQL database is up ..." sleep 2 fi done @@ -61,26 +77,26 @@ function initializeDatabase() { for fileSQL in /var/www/html/install/mysql/tables/*.sql; do if [[ ${fileSQL} != *.key.sql ]]; then - echo "Importing table from `basename ${fileSQL}`..." + echo "Importing table from `basename ${fileSQL}` ..." sed -i 's/--.*//g;' ${fileSQL} # remove all comment mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} fi done for fileSQL in /var/www/html/install/mysql/tables/*.key.sql; do - echo "Importing table key from `basename ${fileSQL}`..." + echo "Importing table key from `basename ${fileSQL}` ..." sed -i 's/--.*//g;' ${fileSQL} mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} > /dev/null 2>&1 done for fileSQL in /var/www/html/install/mysql/functions/*.sql; do - echo "Importing `basename ${fileSQL}`..." + echo "Importing `basename ${fileSQL}` ..." sed -i 's/--.*//g;' ${fileSQL} mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} > /dev/null 2>&1 done for fileSQL in /var/www/html/install/mysql/data/*.sql; do - echo "Importing data from `basename ${fileSQL}`..." + echo "Importing data from `basename ${fileSQL}` ..." sed -i 's/--.*//g;' ${fileSQL} mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} > /dev/null 2>&1 done @@ -105,7 +121,7 @@ function migrateDatabase() mysqldump -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} > /var/www/documents/dump.sql r=${?} - if [ ${r} -ne 0 ]; then + if [[ ${r} -ne 0 ]]; then echo "Dump failed ... Aborting migration ..." return ${r} fi @@ -119,7 +135,7 @@ function migrateDatabase() r=$? popd > /dev/null - if [ ${r} -ne 0 ]; then + if [[ ${r} -ne 0 ]]; then echo "Migration failed ... Restoring DB ... check file /var/www/documents/migration_error.html for more info on error ..." mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < /var/www/documents/dump.sql echo "DB Restored ..." @@ -140,12 +156,12 @@ function run() if [[ ${DOLI_INSTALL_AUTO} -eq 1 && ! -f /var/www/documents/install.lock ]]; then mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} -e "SELECT Q.LAST_INSTALLED_VERSION FROM (SELECT INET_ATON(CONCAT(value, REPEAT('.0', 3 - CHAR_LENGTH(value) + CHAR_LENGTH(REPLACE(value, '.', ''))))) as VERSION_ATON, value as LAST_INSTALLED_VERSION FROM llx_const WHERE name IN ('MAIN_VERSION_LAST_INSTALL', 'MAIN_VERSION_LAST_UPGRADE') and entity=0) Q ORDER BY VERSION_ATON DESC LIMIT 1" > /tmp/lastinstall.result 2>&1 r=$? - if [ ${r} -ne 0 ]; then + if [[ ${r} -ne 0 ]]; then initializeDatabase else INSTALLED_VERSION=`grep -v LAST_INSTALLED_VERSION /tmp/lastinstall.result` echo "Last installed Version is : ${INSTALLED_VERSION}" - if [ "$(echo ${INSTALLED_VERSION} | cut -d. -f1)" -lt "$(echo ${DOLI_VERSION} | cut -d. -f1)" ]; then + if [[ "$(echo ${INSTALLED_VERSION} | cut -d. -f1)" -lt "$(echo ${DOLI_VERSION} | cut -d. -f1)" ]]; then migrateDatabase else echo "Schema update is not required ... Enjoy !!" diff --git a/images/11.0.5-php5.6/Dockerfile b/images/11.0.5-php5.6/Dockerfile index ed9e387..0bd2599 100644 --- a/images/11.0.5-php5.6/Dockerfile +++ b/images/11.0.5-php5.6/Dockerfile @@ -47,7 +47,8 @@ RUN unzip -q /tmp/dolibarr.zip -d /tmp/dolibarr && \ ln -s /var/www/html /var/www/htdocs && \ cp -r /tmp/dolibarr/dolibarr-${DOLI_VERSION}/scripts /var/www/ && \ rm -rf /tmp/* && \ - mkdir -p /var/www/documents + mkdir -p /var/www/documents && \ + chown -R www-data:www-data /var/www EXPOSE 80 VOLUME /var/www/documents diff --git a/images/11.0.5-php5.6/docker-run.sh b/images/11.0.5-php5.6/docker-run.sh index cf6d2ea..21b86d9 100755 --- a/images/11.0.5-php5.6/docker-run.sh +++ b/images/11.0.5-php5.6/docker-run.sh @@ -2,20 +2,25 @@ function initDolibarr() { + local CURRENT_UID=$(id -u www-data) + local CURRENT_GID=$(id -g www-data) usermod -u ${WWW_USER_ID} www-data groupmod -g ${WWW_GROUP_ID} www-data - if [ ! -d /var/www/documents ]; then + if [[ ! -d /var/www/documents ]]; then + echo "[INIT] => create volume directory /var/www/documents ..." mkdir -p /var/www/documents fi + echo "[INIT] => update PHP Config ..." cat > ${PHP_INI_DIR}/conf.d/dolibarr-php.ini << EOF date.timezone = ${PHP_INI_DATE_TIMEZONE} sendmail_path = /usr/sbin/sendmail -t -i -memory_limit = $PHP_INI_MEMORY_LIMIT +memory_limit = ${PHP_INI_MEMORY_LIMIT} EOF - if [ ! -f /var/www/html/conf/conf.php ]; then + if [[ ! -f /var/www/html/conf/conf.php ]]; then + echo "[INIT] => update Dolibarr Config ..." cat > /var/www/html/conf/conf.php << EOF update ownership for file in Dolibarr Config ..." + chown www-data:www-data /var/www/html/conf/conf.php chmod 400 /var/www/html/conf/conf.php + + if [[ ${CURRENT_UID} -ne ${WWW_USER_ID} || ${CURRENT_GID} -ne ${WWW_GROUP_ID} ]]; then + # Refresh file ownership cause it has changed + echo "[INIT] => As UID / GID have changed from default, update ownership for files in /var/ww ..." + chown -R www-data:www-data /var/www + else + # Reducing load on init : change ownership only for volumes declared in docker + echo "[INIT] => update ownership for files in /var/www/documents ..." + chown -R www-data:www-data /var/www/documents + fi } function waitForDataBase() { r=1 - while [ $r -ne 0 ]; do + while [[ ${r} -ne 0 ]]; do mysql -u ${DOLI_DB_USER} --protocol tcp -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} -e "status" > /dev/null 2>&1 r=$? - if [ ${r} -ne 0 ]; then - echo "Waiting that SQL database is up..." + if [[ ${r} -ne 0 ]]; then + echo "Waiting that SQL database is up ..." sleep 2 fi done @@ -61,26 +77,26 @@ function initializeDatabase() { for fileSQL in /var/www/html/install/mysql/tables/*.sql; do if [[ ${fileSQL} != *.key.sql ]]; then - echo "Importing table from `basename ${fileSQL}`..." + echo "Importing table from `basename ${fileSQL}` ..." sed -i 's/--.*//g;' ${fileSQL} # remove all comment mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} fi done for fileSQL in /var/www/html/install/mysql/tables/*.key.sql; do - echo "Importing table key from `basename ${fileSQL}`..." + echo "Importing table key from `basename ${fileSQL}` ..." sed -i 's/--.*//g;' ${fileSQL} mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} > /dev/null 2>&1 done for fileSQL in /var/www/html/install/mysql/functions/*.sql; do - echo "Importing `basename ${fileSQL}`..." + echo "Importing `basename ${fileSQL}` ..." sed -i 's/--.*//g;' ${fileSQL} mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} > /dev/null 2>&1 done for fileSQL in /var/www/html/install/mysql/data/*.sql; do - echo "Importing data from `basename ${fileSQL}`..." + echo "Importing data from `basename ${fileSQL}` ..." sed -i 's/--.*//g;' ${fileSQL} mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} > /dev/null 2>&1 done @@ -105,7 +121,7 @@ function migrateDatabase() mysqldump -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} > /var/www/documents/dump.sql r=${?} - if [ ${r} -ne 0 ]; then + if [[ ${r} -ne 0 ]]; then echo "Dump failed ... Aborting migration ..." return ${r} fi @@ -119,7 +135,7 @@ function migrateDatabase() r=$? popd > /dev/null - if [ ${r} -ne 0 ]; then + if [[ ${r} -ne 0 ]]; then echo "Migration failed ... Restoring DB ... check file /var/www/documents/migration_error.html for more info on error ..." mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < /var/www/documents/dump.sql echo "DB Restored ..." @@ -140,12 +156,12 @@ function run() if [[ ${DOLI_INSTALL_AUTO} -eq 1 && ! -f /var/www/documents/install.lock ]]; then mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} -e "SELECT Q.LAST_INSTALLED_VERSION FROM (SELECT INET_ATON(CONCAT(value, REPEAT('.0', 3 - CHAR_LENGTH(value) + CHAR_LENGTH(REPLACE(value, '.', ''))))) as VERSION_ATON, value as LAST_INSTALLED_VERSION FROM llx_const WHERE name IN ('MAIN_VERSION_LAST_INSTALL', 'MAIN_VERSION_LAST_UPGRADE') and entity=0) Q ORDER BY VERSION_ATON DESC LIMIT 1" > /tmp/lastinstall.result 2>&1 r=$? - if [ ${r} -ne 0 ]; then + if [[ ${r} -ne 0 ]]; then initializeDatabase else INSTALLED_VERSION=`grep -v LAST_INSTALLED_VERSION /tmp/lastinstall.result` echo "Last installed Version is : ${INSTALLED_VERSION}" - if [ "$(echo ${INSTALLED_VERSION} | cut -d. -f1)" -lt "$(echo ${DOLI_VERSION} | cut -d. -f1)" ]; then + if [[ "$(echo ${INSTALLED_VERSION} | cut -d. -f1)" -lt "$(echo ${DOLI_VERSION} | cut -d. -f1)" ]]; then migrateDatabase else echo "Schema update is not required ... Enjoy !!" diff --git a/images/11.0.5-php7.4/Dockerfile b/images/11.0.5-php7.4/Dockerfile index 6f2f116..07a18ec 100644 --- a/images/11.0.5-php7.4/Dockerfile +++ b/images/11.0.5-php7.4/Dockerfile @@ -47,7 +47,8 @@ RUN unzip -q /tmp/dolibarr.zip -d /tmp/dolibarr && \ ln -s /var/www/html /var/www/htdocs && \ cp -r /tmp/dolibarr/dolibarr-${DOLI_VERSION}/scripts /var/www/ && \ rm -rf /tmp/* && \ - mkdir -p /var/www/documents + mkdir -p /var/www/documents && \ + chown -R www-data:www-data /var/www EXPOSE 80 VOLUME /var/www/documents diff --git a/images/11.0.5-php7.4/docker-run.sh b/images/11.0.5-php7.4/docker-run.sh index cf6d2ea..21b86d9 100755 --- a/images/11.0.5-php7.4/docker-run.sh +++ b/images/11.0.5-php7.4/docker-run.sh @@ -2,20 +2,25 @@ function initDolibarr() { + local CURRENT_UID=$(id -u www-data) + local CURRENT_GID=$(id -g www-data) usermod -u ${WWW_USER_ID} www-data groupmod -g ${WWW_GROUP_ID} www-data - if [ ! -d /var/www/documents ]; then + if [[ ! -d /var/www/documents ]]; then + echo "[INIT] => create volume directory /var/www/documents ..." mkdir -p /var/www/documents fi + echo "[INIT] => update PHP Config ..." cat > ${PHP_INI_DIR}/conf.d/dolibarr-php.ini << EOF date.timezone = ${PHP_INI_DATE_TIMEZONE} sendmail_path = /usr/sbin/sendmail -t -i -memory_limit = $PHP_INI_MEMORY_LIMIT +memory_limit = ${PHP_INI_MEMORY_LIMIT} EOF - if [ ! -f /var/www/html/conf/conf.php ]; then + if [[ ! -f /var/www/html/conf/conf.php ]]; then + echo "[INIT] => update Dolibarr Config ..." cat > /var/www/html/conf/conf.php << EOF update ownership for file in Dolibarr Config ..." + chown www-data:www-data /var/www/html/conf/conf.php chmod 400 /var/www/html/conf/conf.php + + if [[ ${CURRENT_UID} -ne ${WWW_USER_ID} || ${CURRENT_GID} -ne ${WWW_GROUP_ID} ]]; then + # Refresh file ownership cause it has changed + echo "[INIT] => As UID / GID have changed from default, update ownership for files in /var/ww ..." + chown -R www-data:www-data /var/www + else + # Reducing load on init : change ownership only for volumes declared in docker + echo "[INIT] => update ownership for files in /var/www/documents ..." + chown -R www-data:www-data /var/www/documents + fi } function waitForDataBase() { r=1 - while [ $r -ne 0 ]; do + while [[ ${r} -ne 0 ]]; do mysql -u ${DOLI_DB_USER} --protocol tcp -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} -e "status" > /dev/null 2>&1 r=$? - if [ ${r} -ne 0 ]; then - echo "Waiting that SQL database is up..." + if [[ ${r} -ne 0 ]]; then + echo "Waiting that SQL database is up ..." sleep 2 fi done @@ -61,26 +77,26 @@ function initializeDatabase() { for fileSQL in /var/www/html/install/mysql/tables/*.sql; do if [[ ${fileSQL} != *.key.sql ]]; then - echo "Importing table from `basename ${fileSQL}`..." + echo "Importing table from `basename ${fileSQL}` ..." sed -i 's/--.*//g;' ${fileSQL} # remove all comment mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} fi done for fileSQL in /var/www/html/install/mysql/tables/*.key.sql; do - echo "Importing table key from `basename ${fileSQL}`..." + echo "Importing table key from `basename ${fileSQL}` ..." sed -i 's/--.*//g;' ${fileSQL} mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} > /dev/null 2>&1 done for fileSQL in /var/www/html/install/mysql/functions/*.sql; do - echo "Importing `basename ${fileSQL}`..." + echo "Importing `basename ${fileSQL}` ..." sed -i 's/--.*//g;' ${fileSQL} mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} > /dev/null 2>&1 done for fileSQL in /var/www/html/install/mysql/data/*.sql; do - echo "Importing data from `basename ${fileSQL}`..." + echo "Importing data from `basename ${fileSQL}` ..." sed -i 's/--.*//g;' ${fileSQL} mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} > /dev/null 2>&1 done @@ -105,7 +121,7 @@ function migrateDatabase() mysqldump -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} > /var/www/documents/dump.sql r=${?} - if [ ${r} -ne 0 ]; then + if [[ ${r} -ne 0 ]]; then echo "Dump failed ... Aborting migration ..." return ${r} fi @@ -119,7 +135,7 @@ function migrateDatabase() r=$? popd > /dev/null - if [ ${r} -ne 0 ]; then + if [[ ${r} -ne 0 ]]; then echo "Migration failed ... Restoring DB ... check file /var/www/documents/migration_error.html for more info on error ..." mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < /var/www/documents/dump.sql echo "DB Restored ..." @@ -140,12 +156,12 @@ function run() if [[ ${DOLI_INSTALL_AUTO} -eq 1 && ! -f /var/www/documents/install.lock ]]; then mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} -e "SELECT Q.LAST_INSTALLED_VERSION FROM (SELECT INET_ATON(CONCAT(value, REPEAT('.0', 3 - CHAR_LENGTH(value) + CHAR_LENGTH(REPLACE(value, '.', ''))))) as VERSION_ATON, value as LAST_INSTALLED_VERSION FROM llx_const WHERE name IN ('MAIN_VERSION_LAST_INSTALL', 'MAIN_VERSION_LAST_UPGRADE') and entity=0) Q ORDER BY VERSION_ATON DESC LIMIT 1" > /tmp/lastinstall.result 2>&1 r=$? - if [ ${r} -ne 0 ]; then + if [[ ${r} -ne 0 ]]; then initializeDatabase else INSTALLED_VERSION=`grep -v LAST_INSTALLED_VERSION /tmp/lastinstall.result` echo "Last installed Version is : ${INSTALLED_VERSION}" - if [ "$(echo ${INSTALLED_VERSION} | cut -d. -f1)" -lt "$(echo ${DOLI_VERSION} | cut -d. -f1)" ]; then + if [[ "$(echo ${INSTALLED_VERSION} | cut -d. -f1)" -lt "$(echo ${DOLI_VERSION} | cut -d. -f1)" ]]; then migrateDatabase else echo "Schema update is not required ... Enjoy !!" diff --git a/images/12.0.2-php5.6/Dockerfile b/images/12.0.2-php5.6/Dockerfile new file mode 100644 index 0000000..636bc95 --- /dev/null +++ b/images/12.0.2-php5.6/Dockerfile @@ -0,0 +1,57 @@ +FROM php:5.6-apache-stretch + +MAINTAINER Garcia MICHEL + +ENV DOLI_INSTALL_AUTO 1 + +ENV DOLI_DB_HOST mysql +ENV DOLI_DB_USER doli +ENV DOLI_DB_PASSWORD doli_pass +ENV DOLI_DB_NAME dolidb + +ENV DOLI_ADMIN_LOGIN admin +ENV DOLI_ADMIN_PASSWORD admin +ENV DOLI_URL_ROOT 'http://localhost' +ENV DOLI_NOCSRFCHECK 0 + +ENV WWW_USER_ID 33 +ENV WWW_GROUP_ID 33 + +ENV PHP_INI_DATE_TIMEZONE 'UTC' +ENV PHP_INI_MEMORY_LIMIT 256M + +RUN apt-get update -y \ + && apt-get install -y --no-install-recommends \ + libfreetype6-dev \ + libjpeg62-turbo-dev \ + libpng-dev \ + libldap2-dev \ + libxml2-dev \ + libzip-dev \ + default-mysql-client \ + unzip \ + && apt-get autoremove -y \ + && rm -rf /var/lib/apt/lists/* \ + && docker-php-ext-configure gd --with-png-dir=/usr --with-jpeg-dir=/usr \ + && docker-php-ext-install -j$(nproc) calendar intl mysqli pdo_mysql gd soap zip \ + && docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu/ \ + && docker-php-ext-install -j$(nproc) ldap && \ + mv ${PHP_INI_DIR}/php.ini-production ${PHP_INI_DIR}/php.ini + +ENV DOLI_VERSION 12.0.2 + +# Get Dolibarr +ADD https://github.com/Dolibarr/dolibarr/archive/${DOLI_VERSION}.zip /tmp/dolibarr.zip +RUN unzip -q /tmp/dolibarr.zip -d /tmp/dolibarr && \ + cp -r /tmp/dolibarr/dolibarr-${DOLI_VERSION}/htdocs/* /var/www/html/ && \ + ln -s /var/www/html /var/www/htdocs && \ + cp -r /tmp/dolibarr/dolibarr-${DOLI_VERSION}/scripts /var/www/ && \ + rm -rf /tmp/* && \ + mkdir -p /var/www/documents && \ + chown -R www-data:www-data /var/www + +EXPOSE 80 +VOLUME /var/www/documents + +COPY docker-run.sh /usr/local/bin/ +ENTRYPOINT ["docker-run.sh"] diff --git a/images/12.0.2-php5.6/docker-run.sh b/images/12.0.2-php5.6/docker-run.sh new file mode 100755 index 0000000..21b86d9 --- /dev/null +++ b/images/12.0.2-php5.6/docker-run.sh @@ -0,0 +1,176 @@ +#!/bin/bash + +function initDolibarr() +{ + local CURRENT_UID=$(id -u www-data) + local CURRENT_GID=$(id -g www-data) + usermod -u ${WWW_USER_ID} www-data + groupmod -g ${WWW_GROUP_ID} www-data + + if [[ ! -d /var/www/documents ]]; then + echo "[INIT] => create volume directory /var/www/documents ..." + mkdir -p /var/www/documents + fi + + echo "[INIT] => update PHP Config ..." + cat > ${PHP_INI_DIR}/conf.d/dolibarr-php.ini << EOF +date.timezone = ${PHP_INI_DATE_TIMEZONE} +sendmail_path = /usr/sbin/sendmail -t -i +memory_limit = ${PHP_INI_MEMORY_LIMIT} +EOF + + if [[ ! -f /var/www/html/conf/conf.php ]]; then + echo "[INIT] => update Dolibarr Config ..." + cat > /var/www/html/conf/conf.php << EOF + update ownership for file in Dolibarr Config ..." + chown www-data:www-data /var/www/html/conf/conf.php + chmod 400 /var/www/html/conf/conf.php + + if [[ ${CURRENT_UID} -ne ${WWW_USER_ID} || ${CURRENT_GID} -ne ${WWW_GROUP_ID} ]]; then + # Refresh file ownership cause it has changed + echo "[INIT] => As UID / GID have changed from default, update ownership for files in /var/ww ..." + chown -R www-data:www-data /var/www + else + # Reducing load on init : change ownership only for volumes declared in docker + echo "[INIT] => update ownership for files in /var/www/documents ..." + chown -R www-data:www-data /var/www/documents + fi +} + +function waitForDataBase() +{ + r=1 + while [[ ${r} -ne 0 ]]; do + mysql -u ${DOLI_DB_USER} --protocol tcp -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} -e "status" > /dev/null 2>&1 + r=$? + if [[ ${r} -ne 0 ]]; then + echo "Waiting that SQL database is up ..." + sleep 2 + fi + done +} + +function lockInstallation() +{ + touch /var/www/documents/install.lock + chown www-data:www-data /var/www/documents/install.lock + chmod 400 /var/www/documents/install.lock +} + +function initializeDatabase() +{ + for fileSQL in /var/www/html/install/mysql/tables/*.sql; do + if [[ ${fileSQL} != *.key.sql ]]; then + echo "Importing table from `basename ${fileSQL}` ..." + sed -i 's/--.*//g;' ${fileSQL} # remove all comment + mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} + fi + done + + for fileSQL in /var/www/html/install/mysql/tables/*.key.sql; do + echo "Importing table key from `basename ${fileSQL}` ..." + sed -i 's/--.*//g;' ${fileSQL} + mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} > /dev/null 2>&1 + done + + for fileSQL in /var/www/html/install/mysql/functions/*.sql; do + echo "Importing `basename ${fileSQL}` ..." + sed -i 's/--.*//g;' ${fileSQL} + mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} > /dev/null 2>&1 + done + + for fileSQL in /var/www/html/install/mysql/data/*.sql; do + echo "Importing data from `basename ${fileSQL}` ..." + sed -i 's/--.*//g;' ${fileSQL} + mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} > /dev/null 2>&1 + done + + echo "Create SuperAdmin account ..." + pass_crypted=`echo -n ${DOLI_ADMIN_PASSWORD} | md5sum | awk '{print $1}'` + mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} -e "INSERT INTO llx_user (entity, login, pass_crypted, lastname, admin, statut) VALUES (0, '${DOLI_ADMIN_LOGIN}', '${pass_crypted}', 'SuperAdmin', 1, 1);" > /dev/null 2>&1 + + echo "Set some default const ..." + mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} -e "DELETE FROM llx_const WHERE name='MAIN_VERSION_LAST_INSTALL';" > /dev/null 2>&1 + mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} -e "DELETE FROM llx_const WHERE name='MAIN_NOT_INSTALLED';" > /dev/null 2>&1 + mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} -e "DELETE FROM llx_const WHERE name='MAIN_LANG_DEFAULT';" > /dev/null 2>&1 + mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} -e "INSERT INTO llx_const(name,value,type,visible,note,entity) values('MAIN_VERSION_LAST_INSTALL', '${DOLI_VERSION}', 'chaine', 0, 'Dolibarr version when install', 0);" > /dev/null 2>&1 + mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} -e "INSERT INTO llx_const(name,value,type,visible,note,entity) VALUES ('MAIN_LANG_DEFAULT', 'auto', 'chaine', 0, 'Default language', 1);" > /dev/null 2>&1 +} + +function migrateDatabase() +{ + TARGET_VERSION="$(echo ${DOLI_VERSION} | cut -d. -f1).$(echo ${DOLI_VERSION} | cut -d. -f2).0" + echo "Schema update is required ..." + echo "Dumping Database into /var/www/documents/dump.sql ..." + + mysqldump -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} > /var/www/documents/dump.sql + r=${?} + if [[ ${r} -ne 0 ]]; then + echo "Dump failed ... Aborting migration ..." + return ${r} + fi + echo "Dump done ... Starting Migration ..." + + echo "" > /var/www/documents/migration_error.html + pushd /var/www/htdocs/install > /dev/null + php upgrade.php ${INSTALLED_VERSION} ${TARGET_VERSION} >> /var/www/documents/migration_error.html 2>&1 && \ + php upgrade2.php ${INSTALLED_VERSION} ${TARGET_VERSION} >> /var/www/documents/migration_error.html 2>&1 && \ + php step5.php ${INSTALLED_VERSION} ${TARGET_VERSION} >> /var/www/documents/migration_error.html 2>&1 + r=$? + popd > /dev/null + + if [[ ${r} -ne 0 ]]; then + echo "Migration failed ... Restoring DB ... check file /var/www/documents/migration_error.html for more info on error ..." + mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < /var/www/documents/dump.sql + echo "DB Restored ..." + return ${r} + else + echo "Migration successful ... Enjoy !!" + fi + + return 0 +} + +function run() +{ + initDolibarr + waitForDataBase + echo "Current Version is : ${DOLI_VERSION}" + + if [[ ${DOLI_INSTALL_AUTO} -eq 1 && ! -f /var/www/documents/install.lock ]]; then + mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} -e "SELECT Q.LAST_INSTALLED_VERSION FROM (SELECT INET_ATON(CONCAT(value, REPEAT('.0', 3 - CHAR_LENGTH(value) + CHAR_LENGTH(REPLACE(value, '.', ''))))) as VERSION_ATON, value as LAST_INSTALLED_VERSION FROM llx_const WHERE name IN ('MAIN_VERSION_LAST_INSTALL', 'MAIN_VERSION_LAST_UPGRADE') and entity=0) Q ORDER BY VERSION_ATON DESC LIMIT 1" > /tmp/lastinstall.result 2>&1 + r=$? + if [[ ${r} -ne 0 ]]; then + initializeDatabase + else + INSTALLED_VERSION=`grep -v LAST_INSTALLED_VERSION /tmp/lastinstall.result` + echo "Last installed Version is : ${INSTALLED_VERSION}" + if [[ "$(echo ${INSTALLED_VERSION} | cut -d. -f1)" -lt "$(echo ${DOLI_VERSION} | cut -d. -f1)" ]]; then + migrateDatabase + else + echo "Schema update is not required ... Enjoy !!" + fi + fi + lockInstallation + fi +} + +run + +exec apache2-foreground diff --git a/images/12.0.2-php7.4/Dockerfile b/images/12.0.2-php7.4/Dockerfile new file mode 100644 index 0000000..f6e670d --- /dev/null +++ b/images/12.0.2-php7.4/Dockerfile @@ -0,0 +1,57 @@ +FROM php:7.4-apache + +MAINTAINER Garcia MICHEL + +ENV DOLI_INSTALL_AUTO 1 + +ENV DOLI_DB_HOST mysql +ENV DOLI_DB_USER doli +ENV DOLI_DB_PASSWORD doli_pass +ENV DOLI_DB_NAME dolidb + +ENV DOLI_ADMIN_LOGIN admin +ENV DOLI_ADMIN_PASSWORD admin +ENV DOLI_URL_ROOT 'http://localhost' +ENV DOLI_NOCSRFCHECK 0 + +ENV WWW_USER_ID 33 +ENV WWW_GROUP_ID 33 + +ENV PHP_INI_DATE_TIMEZONE 'UTC' +ENV PHP_INI_MEMORY_LIMIT 256M + +RUN apt-get update -y \ + && apt-get install -y --no-install-recommends \ + libfreetype6-dev \ + libjpeg62-turbo-dev \ + libpng-dev \ + libldap2-dev \ + libxml2-dev \ + libzip-dev \ + default-mysql-client \ + unzip \ + && apt-get autoremove -y \ + && rm -rf /var/lib/apt/lists/* \ + && docker-php-ext-configure gd --with-freetype --with-jpeg \ + && docker-php-ext-install -j$(nproc) calendar intl mysqli pdo_mysql gd soap zip \ + && docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu/ \ + && docker-php-ext-install -j$(nproc) ldap && \ + mv ${PHP_INI_DIR}/php.ini-production ${PHP_INI_DIR}/php.ini + +ENV DOLI_VERSION 12.0.2 + +# Get Dolibarr +ADD https://github.com/Dolibarr/dolibarr/archive/${DOLI_VERSION}.zip /tmp/dolibarr.zip +RUN unzip -q /tmp/dolibarr.zip -d /tmp/dolibarr && \ + cp -r /tmp/dolibarr/dolibarr-${DOLI_VERSION}/htdocs/* /var/www/html/ && \ + ln -s /var/www/html /var/www/htdocs && \ + cp -r /tmp/dolibarr/dolibarr-${DOLI_VERSION}/scripts /var/www/ && \ + rm -rf /tmp/* && \ + mkdir -p /var/www/documents && \ + chown -R www-data:www-data /var/www + +EXPOSE 80 +VOLUME /var/www/documents + +COPY docker-run.sh /usr/local/bin/ +ENTRYPOINT ["docker-run.sh"] diff --git a/images/12.0.2-php7.4/docker-run.sh b/images/12.0.2-php7.4/docker-run.sh new file mode 100755 index 0000000..21b86d9 --- /dev/null +++ b/images/12.0.2-php7.4/docker-run.sh @@ -0,0 +1,176 @@ +#!/bin/bash + +function initDolibarr() +{ + local CURRENT_UID=$(id -u www-data) + local CURRENT_GID=$(id -g www-data) + usermod -u ${WWW_USER_ID} www-data + groupmod -g ${WWW_GROUP_ID} www-data + + if [[ ! -d /var/www/documents ]]; then + echo "[INIT] => create volume directory /var/www/documents ..." + mkdir -p /var/www/documents + fi + + echo "[INIT] => update PHP Config ..." + cat > ${PHP_INI_DIR}/conf.d/dolibarr-php.ini << EOF +date.timezone = ${PHP_INI_DATE_TIMEZONE} +sendmail_path = /usr/sbin/sendmail -t -i +memory_limit = ${PHP_INI_MEMORY_LIMIT} +EOF + + if [[ ! -f /var/www/html/conf/conf.php ]]; then + echo "[INIT] => update Dolibarr Config ..." + cat > /var/www/html/conf/conf.php << EOF + update ownership for file in Dolibarr Config ..." + chown www-data:www-data /var/www/html/conf/conf.php + chmod 400 /var/www/html/conf/conf.php + + if [[ ${CURRENT_UID} -ne ${WWW_USER_ID} || ${CURRENT_GID} -ne ${WWW_GROUP_ID} ]]; then + # Refresh file ownership cause it has changed + echo "[INIT] => As UID / GID have changed from default, update ownership for files in /var/ww ..." + chown -R www-data:www-data /var/www + else + # Reducing load on init : change ownership only for volumes declared in docker + echo "[INIT] => update ownership for files in /var/www/documents ..." + chown -R www-data:www-data /var/www/documents + fi +} + +function waitForDataBase() +{ + r=1 + while [[ ${r} -ne 0 ]]; do + mysql -u ${DOLI_DB_USER} --protocol tcp -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} -e "status" > /dev/null 2>&1 + r=$? + if [[ ${r} -ne 0 ]]; then + echo "Waiting that SQL database is up ..." + sleep 2 + fi + done +} + +function lockInstallation() +{ + touch /var/www/documents/install.lock + chown www-data:www-data /var/www/documents/install.lock + chmod 400 /var/www/documents/install.lock +} + +function initializeDatabase() +{ + for fileSQL in /var/www/html/install/mysql/tables/*.sql; do + if [[ ${fileSQL} != *.key.sql ]]; then + echo "Importing table from `basename ${fileSQL}` ..." + sed -i 's/--.*//g;' ${fileSQL} # remove all comment + mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} + fi + done + + for fileSQL in /var/www/html/install/mysql/tables/*.key.sql; do + echo "Importing table key from `basename ${fileSQL}` ..." + sed -i 's/--.*//g;' ${fileSQL} + mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} > /dev/null 2>&1 + done + + for fileSQL in /var/www/html/install/mysql/functions/*.sql; do + echo "Importing `basename ${fileSQL}` ..." + sed -i 's/--.*//g;' ${fileSQL} + mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} > /dev/null 2>&1 + done + + for fileSQL in /var/www/html/install/mysql/data/*.sql; do + echo "Importing data from `basename ${fileSQL}` ..." + sed -i 's/--.*//g;' ${fileSQL} + mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} > /dev/null 2>&1 + done + + echo "Create SuperAdmin account ..." + pass_crypted=`echo -n ${DOLI_ADMIN_PASSWORD} | md5sum | awk '{print $1}'` + mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} -e "INSERT INTO llx_user (entity, login, pass_crypted, lastname, admin, statut) VALUES (0, '${DOLI_ADMIN_LOGIN}', '${pass_crypted}', 'SuperAdmin', 1, 1);" > /dev/null 2>&1 + + echo "Set some default const ..." + mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} -e "DELETE FROM llx_const WHERE name='MAIN_VERSION_LAST_INSTALL';" > /dev/null 2>&1 + mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} -e "DELETE FROM llx_const WHERE name='MAIN_NOT_INSTALLED';" > /dev/null 2>&1 + mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} -e "DELETE FROM llx_const WHERE name='MAIN_LANG_DEFAULT';" > /dev/null 2>&1 + mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} -e "INSERT INTO llx_const(name,value,type,visible,note,entity) values('MAIN_VERSION_LAST_INSTALL', '${DOLI_VERSION}', 'chaine', 0, 'Dolibarr version when install', 0);" > /dev/null 2>&1 + mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} -e "INSERT INTO llx_const(name,value,type,visible,note,entity) VALUES ('MAIN_LANG_DEFAULT', 'auto', 'chaine', 0, 'Default language', 1);" > /dev/null 2>&1 +} + +function migrateDatabase() +{ + TARGET_VERSION="$(echo ${DOLI_VERSION} | cut -d. -f1).$(echo ${DOLI_VERSION} | cut -d. -f2).0" + echo "Schema update is required ..." + echo "Dumping Database into /var/www/documents/dump.sql ..." + + mysqldump -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} > /var/www/documents/dump.sql + r=${?} + if [[ ${r} -ne 0 ]]; then + echo "Dump failed ... Aborting migration ..." + return ${r} + fi + echo "Dump done ... Starting Migration ..." + + echo "" > /var/www/documents/migration_error.html + pushd /var/www/htdocs/install > /dev/null + php upgrade.php ${INSTALLED_VERSION} ${TARGET_VERSION} >> /var/www/documents/migration_error.html 2>&1 && \ + php upgrade2.php ${INSTALLED_VERSION} ${TARGET_VERSION} >> /var/www/documents/migration_error.html 2>&1 && \ + php step5.php ${INSTALLED_VERSION} ${TARGET_VERSION} >> /var/www/documents/migration_error.html 2>&1 + r=$? + popd > /dev/null + + if [[ ${r} -ne 0 ]]; then + echo "Migration failed ... Restoring DB ... check file /var/www/documents/migration_error.html for more info on error ..." + mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < /var/www/documents/dump.sql + echo "DB Restored ..." + return ${r} + else + echo "Migration successful ... Enjoy !!" + fi + + return 0 +} + +function run() +{ + initDolibarr + waitForDataBase + echo "Current Version is : ${DOLI_VERSION}" + + if [[ ${DOLI_INSTALL_AUTO} -eq 1 && ! -f /var/www/documents/install.lock ]]; then + mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} -e "SELECT Q.LAST_INSTALLED_VERSION FROM (SELECT INET_ATON(CONCAT(value, REPEAT('.0', 3 - CHAR_LENGTH(value) + CHAR_LENGTH(REPLACE(value, '.', ''))))) as VERSION_ATON, value as LAST_INSTALLED_VERSION FROM llx_const WHERE name IN ('MAIN_VERSION_LAST_INSTALL', 'MAIN_VERSION_LAST_UPGRADE') and entity=0) Q ORDER BY VERSION_ATON DESC LIMIT 1" > /tmp/lastinstall.result 2>&1 + r=$? + if [[ ${r} -ne 0 ]]; then + initializeDatabase + else + INSTALLED_VERSION=`grep -v LAST_INSTALLED_VERSION /tmp/lastinstall.result` + echo "Last installed Version is : ${INSTALLED_VERSION}" + if [[ "$(echo ${INSTALLED_VERSION} | cut -d. -f1)" -lt "$(echo ${DOLI_VERSION} | cut -d. -f1)" ]]; then + migrateDatabase + else + echo "Schema update is not required ... Enjoy !!" + fi + fi + lockInstallation + fi +} + +run + +exec apache2-foreground diff --git a/images/6.0.8-php5.6/Dockerfile b/images/6.0.8-php5.6/Dockerfile index 0f13ddf..2f6ef5d 100644 --- a/images/6.0.8-php5.6/Dockerfile +++ b/images/6.0.8-php5.6/Dockerfile @@ -47,7 +47,8 @@ RUN unzip -q /tmp/dolibarr.zip -d /tmp/dolibarr && \ ln -s /var/www/html /var/www/htdocs && \ cp -r /tmp/dolibarr/dolibarr-${DOLI_VERSION}/scripts /var/www/ && \ rm -rf /tmp/* && \ - mkdir -p /var/www/documents + mkdir -p /var/www/documents && \ + chown -R www-data:www-data /var/www EXPOSE 80 VOLUME /var/www/documents diff --git a/images/6.0.8-php5.6/docker-run.sh b/images/6.0.8-php5.6/docker-run.sh index cf6d2ea..21b86d9 100755 --- a/images/6.0.8-php5.6/docker-run.sh +++ b/images/6.0.8-php5.6/docker-run.sh @@ -2,20 +2,25 @@ function initDolibarr() { + local CURRENT_UID=$(id -u www-data) + local CURRENT_GID=$(id -g www-data) usermod -u ${WWW_USER_ID} www-data groupmod -g ${WWW_GROUP_ID} www-data - if [ ! -d /var/www/documents ]; then + if [[ ! -d /var/www/documents ]]; then + echo "[INIT] => create volume directory /var/www/documents ..." mkdir -p /var/www/documents fi + echo "[INIT] => update PHP Config ..." cat > ${PHP_INI_DIR}/conf.d/dolibarr-php.ini << EOF date.timezone = ${PHP_INI_DATE_TIMEZONE} sendmail_path = /usr/sbin/sendmail -t -i -memory_limit = $PHP_INI_MEMORY_LIMIT +memory_limit = ${PHP_INI_MEMORY_LIMIT} EOF - if [ ! -f /var/www/html/conf/conf.php ]; then + if [[ ! -f /var/www/html/conf/conf.php ]]; then + echo "[INIT] => update Dolibarr Config ..." cat > /var/www/html/conf/conf.php << EOF update ownership for file in Dolibarr Config ..." + chown www-data:www-data /var/www/html/conf/conf.php chmod 400 /var/www/html/conf/conf.php + + if [[ ${CURRENT_UID} -ne ${WWW_USER_ID} || ${CURRENT_GID} -ne ${WWW_GROUP_ID} ]]; then + # Refresh file ownership cause it has changed + echo "[INIT] => As UID / GID have changed from default, update ownership for files in /var/ww ..." + chown -R www-data:www-data /var/www + else + # Reducing load on init : change ownership only for volumes declared in docker + echo "[INIT] => update ownership for files in /var/www/documents ..." + chown -R www-data:www-data /var/www/documents + fi } function waitForDataBase() { r=1 - while [ $r -ne 0 ]; do + while [[ ${r} -ne 0 ]]; do mysql -u ${DOLI_DB_USER} --protocol tcp -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} -e "status" > /dev/null 2>&1 r=$? - if [ ${r} -ne 0 ]; then - echo "Waiting that SQL database is up..." + if [[ ${r} -ne 0 ]]; then + echo "Waiting that SQL database is up ..." sleep 2 fi done @@ -61,26 +77,26 @@ function initializeDatabase() { for fileSQL in /var/www/html/install/mysql/tables/*.sql; do if [[ ${fileSQL} != *.key.sql ]]; then - echo "Importing table from `basename ${fileSQL}`..." + echo "Importing table from `basename ${fileSQL}` ..." sed -i 's/--.*//g;' ${fileSQL} # remove all comment mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} fi done for fileSQL in /var/www/html/install/mysql/tables/*.key.sql; do - echo "Importing table key from `basename ${fileSQL}`..." + echo "Importing table key from `basename ${fileSQL}` ..." sed -i 's/--.*//g;' ${fileSQL} mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} > /dev/null 2>&1 done for fileSQL in /var/www/html/install/mysql/functions/*.sql; do - echo "Importing `basename ${fileSQL}`..." + echo "Importing `basename ${fileSQL}` ..." sed -i 's/--.*//g;' ${fileSQL} mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} > /dev/null 2>&1 done for fileSQL in /var/www/html/install/mysql/data/*.sql; do - echo "Importing data from `basename ${fileSQL}`..." + echo "Importing data from `basename ${fileSQL}` ..." sed -i 's/--.*//g;' ${fileSQL} mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} > /dev/null 2>&1 done @@ -105,7 +121,7 @@ function migrateDatabase() mysqldump -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} > /var/www/documents/dump.sql r=${?} - if [ ${r} -ne 0 ]; then + if [[ ${r} -ne 0 ]]; then echo "Dump failed ... Aborting migration ..." return ${r} fi @@ -119,7 +135,7 @@ function migrateDatabase() r=$? popd > /dev/null - if [ ${r} -ne 0 ]; then + if [[ ${r} -ne 0 ]]; then echo "Migration failed ... Restoring DB ... check file /var/www/documents/migration_error.html for more info on error ..." mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < /var/www/documents/dump.sql echo "DB Restored ..." @@ -140,12 +156,12 @@ function run() if [[ ${DOLI_INSTALL_AUTO} -eq 1 && ! -f /var/www/documents/install.lock ]]; then mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} -e "SELECT Q.LAST_INSTALLED_VERSION FROM (SELECT INET_ATON(CONCAT(value, REPEAT('.0', 3 - CHAR_LENGTH(value) + CHAR_LENGTH(REPLACE(value, '.', ''))))) as VERSION_ATON, value as LAST_INSTALLED_VERSION FROM llx_const WHERE name IN ('MAIN_VERSION_LAST_INSTALL', 'MAIN_VERSION_LAST_UPGRADE') and entity=0) Q ORDER BY VERSION_ATON DESC LIMIT 1" > /tmp/lastinstall.result 2>&1 r=$? - if [ ${r} -ne 0 ]; then + if [[ ${r} -ne 0 ]]; then initializeDatabase else INSTALLED_VERSION=`grep -v LAST_INSTALLED_VERSION /tmp/lastinstall.result` echo "Last installed Version is : ${INSTALLED_VERSION}" - if [ "$(echo ${INSTALLED_VERSION} | cut -d. -f1)" -lt "$(echo ${DOLI_VERSION} | cut -d. -f1)" ]; then + if [[ "$(echo ${INSTALLED_VERSION} | cut -d. -f1)" -lt "$(echo ${DOLI_VERSION} | cut -d. -f1)" ]]; then migrateDatabase else echo "Schema update is not required ... Enjoy !!" diff --git a/images/6.0.8-php7.1/Dockerfile b/images/6.0.8-php7.1/Dockerfile index 432bfbe..7271f39 100644 --- a/images/6.0.8-php7.1/Dockerfile +++ b/images/6.0.8-php7.1/Dockerfile @@ -47,7 +47,8 @@ RUN unzip -q /tmp/dolibarr.zip -d /tmp/dolibarr && \ ln -s /var/www/html /var/www/htdocs && \ cp -r /tmp/dolibarr/dolibarr-${DOLI_VERSION}/scripts /var/www/ && \ rm -rf /tmp/* && \ - mkdir -p /var/www/documents + mkdir -p /var/www/documents && \ + chown -R www-data:www-data /var/www EXPOSE 80 VOLUME /var/www/documents diff --git a/images/6.0.8-php7.1/docker-run.sh b/images/6.0.8-php7.1/docker-run.sh index cf6d2ea..21b86d9 100755 --- a/images/6.0.8-php7.1/docker-run.sh +++ b/images/6.0.8-php7.1/docker-run.sh @@ -2,20 +2,25 @@ function initDolibarr() { + local CURRENT_UID=$(id -u www-data) + local CURRENT_GID=$(id -g www-data) usermod -u ${WWW_USER_ID} www-data groupmod -g ${WWW_GROUP_ID} www-data - if [ ! -d /var/www/documents ]; then + if [[ ! -d /var/www/documents ]]; then + echo "[INIT] => create volume directory /var/www/documents ..." mkdir -p /var/www/documents fi + echo "[INIT] => update PHP Config ..." cat > ${PHP_INI_DIR}/conf.d/dolibarr-php.ini << EOF date.timezone = ${PHP_INI_DATE_TIMEZONE} sendmail_path = /usr/sbin/sendmail -t -i -memory_limit = $PHP_INI_MEMORY_LIMIT +memory_limit = ${PHP_INI_MEMORY_LIMIT} EOF - if [ ! -f /var/www/html/conf/conf.php ]; then + if [[ ! -f /var/www/html/conf/conf.php ]]; then + echo "[INIT] => update Dolibarr Config ..." cat > /var/www/html/conf/conf.php << EOF update ownership for file in Dolibarr Config ..." + chown www-data:www-data /var/www/html/conf/conf.php chmod 400 /var/www/html/conf/conf.php + + if [[ ${CURRENT_UID} -ne ${WWW_USER_ID} || ${CURRENT_GID} -ne ${WWW_GROUP_ID} ]]; then + # Refresh file ownership cause it has changed + echo "[INIT] => As UID / GID have changed from default, update ownership for files in /var/ww ..." + chown -R www-data:www-data /var/www + else + # Reducing load on init : change ownership only for volumes declared in docker + echo "[INIT] => update ownership for files in /var/www/documents ..." + chown -R www-data:www-data /var/www/documents + fi } function waitForDataBase() { r=1 - while [ $r -ne 0 ]; do + while [[ ${r} -ne 0 ]]; do mysql -u ${DOLI_DB_USER} --protocol tcp -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} -e "status" > /dev/null 2>&1 r=$? - if [ ${r} -ne 0 ]; then - echo "Waiting that SQL database is up..." + if [[ ${r} -ne 0 ]]; then + echo "Waiting that SQL database is up ..." sleep 2 fi done @@ -61,26 +77,26 @@ function initializeDatabase() { for fileSQL in /var/www/html/install/mysql/tables/*.sql; do if [[ ${fileSQL} != *.key.sql ]]; then - echo "Importing table from `basename ${fileSQL}`..." + echo "Importing table from `basename ${fileSQL}` ..." sed -i 's/--.*//g;' ${fileSQL} # remove all comment mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} fi done for fileSQL in /var/www/html/install/mysql/tables/*.key.sql; do - echo "Importing table key from `basename ${fileSQL}`..." + echo "Importing table key from `basename ${fileSQL}` ..." sed -i 's/--.*//g;' ${fileSQL} mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} > /dev/null 2>&1 done for fileSQL in /var/www/html/install/mysql/functions/*.sql; do - echo "Importing `basename ${fileSQL}`..." + echo "Importing `basename ${fileSQL}` ..." sed -i 's/--.*//g;' ${fileSQL} mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} > /dev/null 2>&1 done for fileSQL in /var/www/html/install/mysql/data/*.sql; do - echo "Importing data from `basename ${fileSQL}`..." + echo "Importing data from `basename ${fileSQL}` ..." sed -i 's/--.*//g;' ${fileSQL} mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} > /dev/null 2>&1 done @@ -105,7 +121,7 @@ function migrateDatabase() mysqldump -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} > /var/www/documents/dump.sql r=${?} - if [ ${r} -ne 0 ]; then + if [[ ${r} -ne 0 ]]; then echo "Dump failed ... Aborting migration ..." return ${r} fi @@ -119,7 +135,7 @@ function migrateDatabase() r=$? popd > /dev/null - if [ ${r} -ne 0 ]; then + if [[ ${r} -ne 0 ]]; then echo "Migration failed ... Restoring DB ... check file /var/www/documents/migration_error.html for more info on error ..." mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < /var/www/documents/dump.sql echo "DB Restored ..." @@ -140,12 +156,12 @@ function run() if [[ ${DOLI_INSTALL_AUTO} -eq 1 && ! -f /var/www/documents/install.lock ]]; then mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} -e "SELECT Q.LAST_INSTALLED_VERSION FROM (SELECT INET_ATON(CONCAT(value, REPEAT('.0', 3 - CHAR_LENGTH(value) + CHAR_LENGTH(REPLACE(value, '.', ''))))) as VERSION_ATON, value as LAST_INSTALLED_VERSION FROM llx_const WHERE name IN ('MAIN_VERSION_LAST_INSTALL', 'MAIN_VERSION_LAST_UPGRADE') and entity=0) Q ORDER BY VERSION_ATON DESC LIMIT 1" > /tmp/lastinstall.result 2>&1 r=$? - if [ ${r} -ne 0 ]; then + if [[ ${r} -ne 0 ]]; then initializeDatabase else INSTALLED_VERSION=`grep -v LAST_INSTALLED_VERSION /tmp/lastinstall.result` echo "Last installed Version is : ${INSTALLED_VERSION}" - if [ "$(echo ${INSTALLED_VERSION} | cut -d. -f1)" -lt "$(echo ${DOLI_VERSION} | cut -d. -f1)" ]; then + if [[ "$(echo ${INSTALLED_VERSION} | cut -d. -f1)" -lt "$(echo ${DOLI_VERSION} | cut -d. -f1)" ]]; then migrateDatabase else echo "Schema update is not required ... Enjoy !!" diff --git a/images/7.0.5-php5.6/Dockerfile b/images/7.0.5-php5.6/Dockerfile index 46049fd..0df563c 100644 --- a/images/7.0.5-php5.6/Dockerfile +++ b/images/7.0.5-php5.6/Dockerfile @@ -47,7 +47,8 @@ RUN unzip -q /tmp/dolibarr.zip -d /tmp/dolibarr && \ ln -s /var/www/html /var/www/htdocs && \ cp -r /tmp/dolibarr/dolibarr-${DOLI_VERSION}/scripts /var/www/ && \ rm -rf /tmp/* && \ - mkdir -p /var/www/documents + mkdir -p /var/www/documents && \ + chown -R www-data:www-data /var/www EXPOSE 80 VOLUME /var/www/documents diff --git a/images/7.0.5-php5.6/docker-run.sh b/images/7.0.5-php5.6/docker-run.sh index cf6d2ea..21b86d9 100755 --- a/images/7.0.5-php5.6/docker-run.sh +++ b/images/7.0.5-php5.6/docker-run.sh @@ -2,20 +2,25 @@ function initDolibarr() { + local CURRENT_UID=$(id -u www-data) + local CURRENT_GID=$(id -g www-data) usermod -u ${WWW_USER_ID} www-data groupmod -g ${WWW_GROUP_ID} www-data - if [ ! -d /var/www/documents ]; then + if [[ ! -d /var/www/documents ]]; then + echo "[INIT] => create volume directory /var/www/documents ..." mkdir -p /var/www/documents fi + echo "[INIT] => update PHP Config ..." cat > ${PHP_INI_DIR}/conf.d/dolibarr-php.ini << EOF date.timezone = ${PHP_INI_DATE_TIMEZONE} sendmail_path = /usr/sbin/sendmail -t -i -memory_limit = $PHP_INI_MEMORY_LIMIT +memory_limit = ${PHP_INI_MEMORY_LIMIT} EOF - if [ ! -f /var/www/html/conf/conf.php ]; then + if [[ ! -f /var/www/html/conf/conf.php ]]; then + echo "[INIT] => update Dolibarr Config ..." cat > /var/www/html/conf/conf.php << EOF update ownership for file in Dolibarr Config ..." + chown www-data:www-data /var/www/html/conf/conf.php chmod 400 /var/www/html/conf/conf.php + + if [[ ${CURRENT_UID} -ne ${WWW_USER_ID} || ${CURRENT_GID} -ne ${WWW_GROUP_ID} ]]; then + # Refresh file ownership cause it has changed + echo "[INIT] => As UID / GID have changed from default, update ownership for files in /var/ww ..." + chown -R www-data:www-data /var/www + else + # Reducing load on init : change ownership only for volumes declared in docker + echo "[INIT] => update ownership for files in /var/www/documents ..." + chown -R www-data:www-data /var/www/documents + fi } function waitForDataBase() { r=1 - while [ $r -ne 0 ]; do + while [[ ${r} -ne 0 ]]; do mysql -u ${DOLI_DB_USER} --protocol tcp -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} -e "status" > /dev/null 2>&1 r=$? - if [ ${r} -ne 0 ]; then - echo "Waiting that SQL database is up..." + if [[ ${r} -ne 0 ]]; then + echo "Waiting that SQL database is up ..." sleep 2 fi done @@ -61,26 +77,26 @@ function initializeDatabase() { for fileSQL in /var/www/html/install/mysql/tables/*.sql; do if [[ ${fileSQL} != *.key.sql ]]; then - echo "Importing table from `basename ${fileSQL}`..." + echo "Importing table from `basename ${fileSQL}` ..." sed -i 's/--.*//g;' ${fileSQL} # remove all comment mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} fi done for fileSQL in /var/www/html/install/mysql/tables/*.key.sql; do - echo "Importing table key from `basename ${fileSQL}`..." + echo "Importing table key from `basename ${fileSQL}` ..." sed -i 's/--.*//g;' ${fileSQL} mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} > /dev/null 2>&1 done for fileSQL in /var/www/html/install/mysql/functions/*.sql; do - echo "Importing `basename ${fileSQL}`..." + echo "Importing `basename ${fileSQL}` ..." sed -i 's/--.*//g;' ${fileSQL} mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} > /dev/null 2>&1 done for fileSQL in /var/www/html/install/mysql/data/*.sql; do - echo "Importing data from `basename ${fileSQL}`..." + echo "Importing data from `basename ${fileSQL}` ..." sed -i 's/--.*//g;' ${fileSQL} mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} > /dev/null 2>&1 done @@ -105,7 +121,7 @@ function migrateDatabase() mysqldump -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} > /var/www/documents/dump.sql r=${?} - if [ ${r} -ne 0 ]; then + if [[ ${r} -ne 0 ]]; then echo "Dump failed ... Aborting migration ..." return ${r} fi @@ -119,7 +135,7 @@ function migrateDatabase() r=$? popd > /dev/null - if [ ${r} -ne 0 ]; then + if [[ ${r} -ne 0 ]]; then echo "Migration failed ... Restoring DB ... check file /var/www/documents/migration_error.html for more info on error ..." mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < /var/www/documents/dump.sql echo "DB Restored ..." @@ -140,12 +156,12 @@ function run() if [[ ${DOLI_INSTALL_AUTO} -eq 1 && ! -f /var/www/documents/install.lock ]]; then mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} -e "SELECT Q.LAST_INSTALLED_VERSION FROM (SELECT INET_ATON(CONCAT(value, REPEAT('.0', 3 - CHAR_LENGTH(value) + CHAR_LENGTH(REPLACE(value, '.', ''))))) as VERSION_ATON, value as LAST_INSTALLED_VERSION FROM llx_const WHERE name IN ('MAIN_VERSION_LAST_INSTALL', 'MAIN_VERSION_LAST_UPGRADE') and entity=0) Q ORDER BY VERSION_ATON DESC LIMIT 1" > /tmp/lastinstall.result 2>&1 r=$? - if [ ${r} -ne 0 ]; then + if [[ ${r} -ne 0 ]]; then initializeDatabase else INSTALLED_VERSION=`grep -v LAST_INSTALLED_VERSION /tmp/lastinstall.result` echo "Last installed Version is : ${INSTALLED_VERSION}" - if [ "$(echo ${INSTALLED_VERSION} | cut -d. -f1)" -lt "$(echo ${DOLI_VERSION} | cut -d. -f1)" ]; then + if [[ "$(echo ${INSTALLED_VERSION} | cut -d. -f1)" -lt "$(echo ${DOLI_VERSION} | cut -d. -f1)" ]]; then migrateDatabase else echo "Schema update is not required ... Enjoy !!" diff --git a/images/7.0.5-php7.2/Dockerfile b/images/7.0.5-php7.2/Dockerfile index 0f6b973..934fa65 100644 --- a/images/7.0.5-php7.2/Dockerfile +++ b/images/7.0.5-php7.2/Dockerfile @@ -47,7 +47,8 @@ RUN unzip -q /tmp/dolibarr.zip -d /tmp/dolibarr && \ ln -s /var/www/html /var/www/htdocs && \ cp -r /tmp/dolibarr/dolibarr-${DOLI_VERSION}/scripts /var/www/ && \ rm -rf /tmp/* && \ - mkdir -p /var/www/documents + mkdir -p /var/www/documents && \ + chown -R www-data:www-data /var/www EXPOSE 80 VOLUME /var/www/documents diff --git a/images/7.0.5-php7.2/docker-run.sh b/images/7.0.5-php7.2/docker-run.sh index cf6d2ea..21b86d9 100755 --- a/images/7.0.5-php7.2/docker-run.sh +++ b/images/7.0.5-php7.2/docker-run.sh @@ -2,20 +2,25 @@ function initDolibarr() { + local CURRENT_UID=$(id -u www-data) + local CURRENT_GID=$(id -g www-data) usermod -u ${WWW_USER_ID} www-data groupmod -g ${WWW_GROUP_ID} www-data - if [ ! -d /var/www/documents ]; then + if [[ ! -d /var/www/documents ]]; then + echo "[INIT] => create volume directory /var/www/documents ..." mkdir -p /var/www/documents fi + echo "[INIT] => update PHP Config ..." cat > ${PHP_INI_DIR}/conf.d/dolibarr-php.ini << EOF date.timezone = ${PHP_INI_DATE_TIMEZONE} sendmail_path = /usr/sbin/sendmail -t -i -memory_limit = $PHP_INI_MEMORY_LIMIT +memory_limit = ${PHP_INI_MEMORY_LIMIT} EOF - if [ ! -f /var/www/html/conf/conf.php ]; then + if [[ ! -f /var/www/html/conf/conf.php ]]; then + echo "[INIT] => update Dolibarr Config ..." cat > /var/www/html/conf/conf.php << EOF update ownership for file in Dolibarr Config ..." + chown www-data:www-data /var/www/html/conf/conf.php chmod 400 /var/www/html/conf/conf.php + + if [[ ${CURRENT_UID} -ne ${WWW_USER_ID} || ${CURRENT_GID} -ne ${WWW_GROUP_ID} ]]; then + # Refresh file ownership cause it has changed + echo "[INIT] => As UID / GID have changed from default, update ownership for files in /var/ww ..." + chown -R www-data:www-data /var/www + else + # Reducing load on init : change ownership only for volumes declared in docker + echo "[INIT] => update ownership for files in /var/www/documents ..." + chown -R www-data:www-data /var/www/documents + fi } function waitForDataBase() { r=1 - while [ $r -ne 0 ]; do + while [[ ${r} -ne 0 ]]; do mysql -u ${DOLI_DB_USER} --protocol tcp -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} -e "status" > /dev/null 2>&1 r=$? - if [ ${r} -ne 0 ]; then - echo "Waiting that SQL database is up..." + if [[ ${r} -ne 0 ]]; then + echo "Waiting that SQL database is up ..." sleep 2 fi done @@ -61,26 +77,26 @@ function initializeDatabase() { for fileSQL in /var/www/html/install/mysql/tables/*.sql; do if [[ ${fileSQL} != *.key.sql ]]; then - echo "Importing table from `basename ${fileSQL}`..." + echo "Importing table from `basename ${fileSQL}` ..." sed -i 's/--.*//g;' ${fileSQL} # remove all comment mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} fi done for fileSQL in /var/www/html/install/mysql/tables/*.key.sql; do - echo "Importing table key from `basename ${fileSQL}`..." + echo "Importing table key from `basename ${fileSQL}` ..." sed -i 's/--.*//g;' ${fileSQL} mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} > /dev/null 2>&1 done for fileSQL in /var/www/html/install/mysql/functions/*.sql; do - echo "Importing `basename ${fileSQL}`..." + echo "Importing `basename ${fileSQL}` ..." sed -i 's/--.*//g;' ${fileSQL} mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} > /dev/null 2>&1 done for fileSQL in /var/www/html/install/mysql/data/*.sql; do - echo "Importing data from `basename ${fileSQL}`..." + echo "Importing data from `basename ${fileSQL}` ..." sed -i 's/--.*//g;' ${fileSQL} mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} > /dev/null 2>&1 done @@ -105,7 +121,7 @@ function migrateDatabase() mysqldump -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} > /var/www/documents/dump.sql r=${?} - if [ ${r} -ne 0 ]; then + if [[ ${r} -ne 0 ]]; then echo "Dump failed ... Aborting migration ..." return ${r} fi @@ -119,7 +135,7 @@ function migrateDatabase() r=$? popd > /dev/null - if [ ${r} -ne 0 ]; then + if [[ ${r} -ne 0 ]]; then echo "Migration failed ... Restoring DB ... check file /var/www/documents/migration_error.html for more info on error ..." mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < /var/www/documents/dump.sql echo "DB Restored ..." @@ -140,12 +156,12 @@ function run() if [[ ${DOLI_INSTALL_AUTO} -eq 1 && ! -f /var/www/documents/install.lock ]]; then mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} -e "SELECT Q.LAST_INSTALLED_VERSION FROM (SELECT INET_ATON(CONCAT(value, REPEAT('.0', 3 - CHAR_LENGTH(value) + CHAR_LENGTH(REPLACE(value, '.', ''))))) as VERSION_ATON, value as LAST_INSTALLED_VERSION FROM llx_const WHERE name IN ('MAIN_VERSION_LAST_INSTALL', 'MAIN_VERSION_LAST_UPGRADE') and entity=0) Q ORDER BY VERSION_ATON DESC LIMIT 1" > /tmp/lastinstall.result 2>&1 r=$? - if [ ${r} -ne 0 ]; then + if [[ ${r} -ne 0 ]]; then initializeDatabase else INSTALLED_VERSION=`grep -v LAST_INSTALLED_VERSION /tmp/lastinstall.result` echo "Last installed Version is : ${INSTALLED_VERSION}" - if [ "$(echo ${INSTALLED_VERSION} | cut -d. -f1)" -lt "$(echo ${DOLI_VERSION} | cut -d. -f1)" ]; then + if [[ "$(echo ${INSTALLED_VERSION} | cut -d. -f1)" -lt "$(echo ${DOLI_VERSION} | cut -d. -f1)" ]]; then migrateDatabase else echo "Schema update is not required ... Enjoy !!" diff --git a/images/8.0.6-php5.6/Dockerfile b/images/8.0.6-php5.6/Dockerfile index 1fa4cdc..ce9ee8c 100644 --- a/images/8.0.6-php5.6/Dockerfile +++ b/images/8.0.6-php5.6/Dockerfile @@ -47,7 +47,8 @@ RUN unzip -q /tmp/dolibarr.zip -d /tmp/dolibarr && \ ln -s /var/www/html /var/www/htdocs && \ cp -r /tmp/dolibarr/dolibarr-${DOLI_VERSION}/scripts /var/www/ && \ rm -rf /tmp/* && \ - mkdir -p /var/www/documents + mkdir -p /var/www/documents && \ + chown -R www-data:www-data /var/www EXPOSE 80 VOLUME /var/www/documents diff --git a/images/8.0.6-php5.6/docker-run.sh b/images/8.0.6-php5.6/docker-run.sh index cf6d2ea..21b86d9 100755 --- a/images/8.0.6-php5.6/docker-run.sh +++ b/images/8.0.6-php5.6/docker-run.sh @@ -2,20 +2,25 @@ function initDolibarr() { + local CURRENT_UID=$(id -u www-data) + local CURRENT_GID=$(id -g www-data) usermod -u ${WWW_USER_ID} www-data groupmod -g ${WWW_GROUP_ID} www-data - if [ ! -d /var/www/documents ]; then + if [[ ! -d /var/www/documents ]]; then + echo "[INIT] => create volume directory /var/www/documents ..." mkdir -p /var/www/documents fi + echo "[INIT] => update PHP Config ..." cat > ${PHP_INI_DIR}/conf.d/dolibarr-php.ini << EOF date.timezone = ${PHP_INI_DATE_TIMEZONE} sendmail_path = /usr/sbin/sendmail -t -i -memory_limit = $PHP_INI_MEMORY_LIMIT +memory_limit = ${PHP_INI_MEMORY_LIMIT} EOF - if [ ! -f /var/www/html/conf/conf.php ]; then + if [[ ! -f /var/www/html/conf/conf.php ]]; then + echo "[INIT] => update Dolibarr Config ..." cat > /var/www/html/conf/conf.php << EOF update ownership for file in Dolibarr Config ..." + chown www-data:www-data /var/www/html/conf/conf.php chmod 400 /var/www/html/conf/conf.php + + if [[ ${CURRENT_UID} -ne ${WWW_USER_ID} || ${CURRENT_GID} -ne ${WWW_GROUP_ID} ]]; then + # Refresh file ownership cause it has changed + echo "[INIT] => As UID / GID have changed from default, update ownership for files in /var/ww ..." + chown -R www-data:www-data /var/www + else + # Reducing load on init : change ownership only for volumes declared in docker + echo "[INIT] => update ownership for files in /var/www/documents ..." + chown -R www-data:www-data /var/www/documents + fi } function waitForDataBase() { r=1 - while [ $r -ne 0 ]; do + while [[ ${r} -ne 0 ]]; do mysql -u ${DOLI_DB_USER} --protocol tcp -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} -e "status" > /dev/null 2>&1 r=$? - if [ ${r} -ne 0 ]; then - echo "Waiting that SQL database is up..." + if [[ ${r} -ne 0 ]]; then + echo "Waiting that SQL database is up ..." sleep 2 fi done @@ -61,26 +77,26 @@ function initializeDatabase() { for fileSQL in /var/www/html/install/mysql/tables/*.sql; do if [[ ${fileSQL} != *.key.sql ]]; then - echo "Importing table from `basename ${fileSQL}`..." + echo "Importing table from `basename ${fileSQL}` ..." sed -i 's/--.*//g;' ${fileSQL} # remove all comment mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} fi done for fileSQL in /var/www/html/install/mysql/tables/*.key.sql; do - echo "Importing table key from `basename ${fileSQL}`..." + echo "Importing table key from `basename ${fileSQL}` ..." sed -i 's/--.*//g;' ${fileSQL} mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} > /dev/null 2>&1 done for fileSQL in /var/www/html/install/mysql/functions/*.sql; do - echo "Importing `basename ${fileSQL}`..." + echo "Importing `basename ${fileSQL}` ..." sed -i 's/--.*//g;' ${fileSQL} mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} > /dev/null 2>&1 done for fileSQL in /var/www/html/install/mysql/data/*.sql; do - echo "Importing data from `basename ${fileSQL}`..." + echo "Importing data from `basename ${fileSQL}` ..." sed -i 's/--.*//g;' ${fileSQL} mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} > /dev/null 2>&1 done @@ -105,7 +121,7 @@ function migrateDatabase() mysqldump -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} > /var/www/documents/dump.sql r=${?} - if [ ${r} -ne 0 ]; then + if [[ ${r} -ne 0 ]]; then echo "Dump failed ... Aborting migration ..." return ${r} fi @@ -119,7 +135,7 @@ function migrateDatabase() r=$? popd > /dev/null - if [ ${r} -ne 0 ]; then + if [[ ${r} -ne 0 ]]; then echo "Migration failed ... Restoring DB ... check file /var/www/documents/migration_error.html for more info on error ..." mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < /var/www/documents/dump.sql echo "DB Restored ..." @@ -140,12 +156,12 @@ function run() if [[ ${DOLI_INSTALL_AUTO} -eq 1 && ! -f /var/www/documents/install.lock ]]; then mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} -e "SELECT Q.LAST_INSTALLED_VERSION FROM (SELECT INET_ATON(CONCAT(value, REPEAT('.0', 3 - CHAR_LENGTH(value) + CHAR_LENGTH(REPLACE(value, '.', ''))))) as VERSION_ATON, value as LAST_INSTALLED_VERSION FROM llx_const WHERE name IN ('MAIN_VERSION_LAST_INSTALL', 'MAIN_VERSION_LAST_UPGRADE') and entity=0) Q ORDER BY VERSION_ATON DESC LIMIT 1" > /tmp/lastinstall.result 2>&1 r=$? - if [ ${r} -ne 0 ]; then + if [[ ${r} -ne 0 ]]; then initializeDatabase else INSTALLED_VERSION=`grep -v LAST_INSTALLED_VERSION /tmp/lastinstall.result` echo "Last installed Version is : ${INSTALLED_VERSION}" - if [ "$(echo ${INSTALLED_VERSION} | cut -d. -f1)" -lt "$(echo ${DOLI_VERSION} | cut -d. -f1)" ]; then + if [[ "$(echo ${INSTALLED_VERSION} | cut -d. -f1)" -lt "$(echo ${DOLI_VERSION} | cut -d. -f1)" ]]; then migrateDatabase else echo "Schema update is not required ... Enjoy !!" diff --git a/images/8.0.6-php7.2/Dockerfile b/images/8.0.6-php7.2/Dockerfile index 4f00d17..e0880fe 100644 --- a/images/8.0.6-php7.2/Dockerfile +++ b/images/8.0.6-php7.2/Dockerfile @@ -47,7 +47,8 @@ RUN unzip -q /tmp/dolibarr.zip -d /tmp/dolibarr && \ ln -s /var/www/html /var/www/htdocs && \ cp -r /tmp/dolibarr/dolibarr-${DOLI_VERSION}/scripts /var/www/ && \ rm -rf /tmp/* && \ - mkdir -p /var/www/documents + mkdir -p /var/www/documents && \ + chown -R www-data:www-data /var/www EXPOSE 80 VOLUME /var/www/documents diff --git a/images/8.0.6-php7.2/docker-run.sh b/images/8.0.6-php7.2/docker-run.sh index cf6d2ea..21b86d9 100755 --- a/images/8.0.6-php7.2/docker-run.sh +++ b/images/8.0.6-php7.2/docker-run.sh @@ -2,20 +2,25 @@ function initDolibarr() { + local CURRENT_UID=$(id -u www-data) + local CURRENT_GID=$(id -g www-data) usermod -u ${WWW_USER_ID} www-data groupmod -g ${WWW_GROUP_ID} www-data - if [ ! -d /var/www/documents ]; then + if [[ ! -d /var/www/documents ]]; then + echo "[INIT] => create volume directory /var/www/documents ..." mkdir -p /var/www/documents fi + echo "[INIT] => update PHP Config ..." cat > ${PHP_INI_DIR}/conf.d/dolibarr-php.ini << EOF date.timezone = ${PHP_INI_DATE_TIMEZONE} sendmail_path = /usr/sbin/sendmail -t -i -memory_limit = $PHP_INI_MEMORY_LIMIT +memory_limit = ${PHP_INI_MEMORY_LIMIT} EOF - if [ ! -f /var/www/html/conf/conf.php ]; then + if [[ ! -f /var/www/html/conf/conf.php ]]; then + echo "[INIT] => update Dolibarr Config ..." cat > /var/www/html/conf/conf.php << EOF update ownership for file in Dolibarr Config ..." + chown www-data:www-data /var/www/html/conf/conf.php chmod 400 /var/www/html/conf/conf.php + + if [[ ${CURRENT_UID} -ne ${WWW_USER_ID} || ${CURRENT_GID} -ne ${WWW_GROUP_ID} ]]; then + # Refresh file ownership cause it has changed + echo "[INIT] => As UID / GID have changed from default, update ownership for files in /var/ww ..." + chown -R www-data:www-data /var/www + else + # Reducing load on init : change ownership only for volumes declared in docker + echo "[INIT] => update ownership for files in /var/www/documents ..." + chown -R www-data:www-data /var/www/documents + fi } function waitForDataBase() { r=1 - while [ $r -ne 0 ]; do + while [[ ${r} -ne 0 ]]; do mysql -u ${DOLI_DB_USER} --protocol tcp -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} -e "status" > /dev/null 2>&1 r=$? - if [ ${r} -ne 0 ]; then - echo "Waiting that SQL database is up..." + if [[ ${r} -ne 0 ]]; then + echo "Waiting that SQL database is up ..." sleep 2 fi done @@ -61,26 +77,26 @@ function initializeDatabase() { for fileSQL in /var/www/html/install/mysql/tables/*.sql; do if [[ ${fileSQL} != *.key.sql ]]; then - echo "Importing table from `basename ${fileSQL}`..." + echo "Importing table from `basename ${fileSQL}` ..." sed -i 's/--.*//g;' ${fileSQL} # remove all comment mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} fi done for fileSQL in /var/www/html/install/mysql/tables/*.key.sql; do - echo "Importing table key from `basename ${fileSQL}`..." + echo "Importing table key from `basename ${fileSQL}` ..." sed -i 's/--.*//g;' ${fileSQL} mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} > /dev/null 2>&1 done for fileSQL in /var/www/html/install/mysql/functions/*.sql; do - echo "Importing `basename ${fileSQL}`..." + echo "Importing `basename ${fileSQL}` ..." sed -i 's/--.*//g;' ${fileSQL} mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} > /dev/null 2>&1 done for fileSQL in /var/www/html/install/mysql/data/*.sql; do - echo "Importing data from `basename ${fileSQL}`..." + echo "Importing data from `basename ${fileSQL}` ..." sed -i 's/--.*//g;' ${fileSQL} mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} > /dev/null 2>&1 done @@ -105,7 +121,7 @@ function migrateDatabase() mysqldump -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} > /var/www/documents/dump.sql r=${?} - if [ ${r} -ne 0 ]; then + if [[ ${r} -ne 0 ]]; then echo "Dump failed ... Aborting migration ..." return ${r} fi @@ -119,7 +135,7 @@ function migrateDatabase() r=$? popd > /dev/null - if [ ${r} -ne 0 ]; then + if [[ ${r} -ne 0 ]]; then echo "Migration failed ... Restoring DB ... check file /var/www/documents/migration_error.html for more info on error ..." mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < /var/www/documents/dump.sql echo "DB Restored ..." @@ -140,12 +156,12 @@ function run() if [[ ${DOLI_INSTALL_AUTO} -eq 1 && ! -f /var/www/documents/install.lock ]]; then mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} -e "SELECT Q.LAST_INSTALLED_VERSION FROM (SELECT INET_ATON(CONCAT(value, REPEAT('.0', 3 - CHAR_LENGTH(value) + CHAR_LENGTH(REPLACE(value, '.', ''))))) as VERSION_ATON, value as LAST_INSTALLED_VERSION FROM llx_const WHERE name IN ('MAIN_VERSION_LAST_INSTALL', 'MAIN_VERSION_LAST_UPGRADE') and entity=0) Q ORDER BY VERSION_ATON DESC LIMIT 1" > /tmp/lastinstall.result 2>&1 r=$? - if [ ${r} -ne 0 ]; then + if [[ ${r} -ne 0 ]]; then initializeDatabase else INSTALLED_VERSION=`grep -v LAST_INSTALLED_VERSION /tmp/lastinstall.result` echo "Last installed Version is : ${INSTALLED_VERSION}" - if [ "$(echo ${INSTALLED_VERSION} | cut -d. -f1)" -lt "$(echo ${DOLI_VERSION} | cut -d. -f1)" ]; then + if [[ "$(echo ${INSTALLED_VERSION} | cut -d. -f1)" -lt "$(echo ${DOLI_VERSION} | cut -d. -f1)" ]]; then migrateDatabase else echo "Schema update is not required ... Enjoy !!" diff --git a/images/9.0.4-php5.6/Dockerfile b/images/9.0.4-php5.6/Dockerfile index 2d30cbf..d8e464e 100644 --- a/images/9.0.4-php5.6/Dockerfile +++ b/images/9.0.4-php5.6/Dockerfile @@ -47,7 +47,8 @@ RUN unzip -q /tmp/dolibarr.zip -d /tmp/dolibarr && \ ln -s /var/www/html /var/www/htdocs && \ cp -r /tmp/dolibarr/dolibarr-${DOLI_VERSION}/scripts /var/www/ && \ rm -rf /tmp/* && \ - mkdir -p /var/www/documents + mkdir -p /var/www/documents && \ + chown -R www-data:www-data /var/www EXPOSE 80 VOLUME /var/www/documents diff --git a/images/9.0.4-php5.6/docker-run.sh b/images/9.0.4-php5.6/docker-run.sh index cf6d2ea..21b86d9 100755 --- a/images/9.0.4-php5.6/docker-run.sh +++ b/images/9.0.4-php5.6/docker-run.sh @@ -2,20 +2,25 @@ function initDolibarr() { + local CURRENT_UID=$(id -u www-data) + local CURRENT_GID=$(id -g www-data) usermod -u ${WWW_USER_ID} www-data groupmod -g ${WWW_GROUP_ID} www-data - if [ ! -d /var/www/documents ]; then + if [[ ! -d /var/www/documents ]]; then + echo "[INIT] => create volume directory /var/www/documents ..." mkdir -p /var/www/documents fi + echo "[INIT] => update PHP Config ..." cat > ${PHP_INI_DIR}/conf.d/dolibarr-php.ini << EOF date.timezone = ${PHP_INI_DATE_TIMEZONE} sendmail_path = /usr/sbin/sendmail -t -i -memory_limit = $PHP_INI_MEMORY_LIMIT +memory_limit = ${PHP_INI_MEMORY_LIMIT} EOF - if [ ! -f /var/www/html/conf/conf.php ]; then + if [[ ! -f /var/www/html/conf/conf.php ]]; then + echo "[INIT] => update Dolibarr Config ..." cat > /var/www/html/conf/conf.php << EOF update ownership for file in Dolibarr Config ..." + chown www-data:www-data /var/www/html/conf/conf.php chmod 400 /var/www/html/conf/conf.php + + if [[ ${CURRENT_UID} -ne ${WWW_USER_ID} || ${CURRENT_GID} -ne ${WWW_GROUP_ID} ]]; then + # Refresh file ownership cause it has changed + echo "[INIT] => As UID / GID have changed from default, update ownership for files in /var/ww ..." + chown -R www-data:www-data /var/www + else + # Reducing load on init : change ownership only for volumes declared in docker + echo "[INIT] => update ownership for files in /var/www/documents ..." + chown -R www-data:www-data /var/www/documents + fi } function waitForDataBase() { r=1 - while [ $r -ne 0 ]; do + while [[ ${r} -ne 0 ]]; do mysql -u ${DOLI_DB_USER} --protocol tcp -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} -e "status" > /dev/null 2>&1 r=$? - if [ ${r} -ne 0 ]; then - echo "Waiting that SQL database is up..." + if [[ ${r} -ne 0 ]]; then + echo "Waiting that SQL database is up ..." sleep 2 fi done @@ -61,26 +77,26 @@ function initializeDatabase() { for fileSQL in /var/www/html/install/mysql/tables/*.sql; do if [[ ${fileSQL} != *.key.sql ]]; then - echo "Importing table from `basename ${fileSQL}`..." + echo "Importing table from `basename ${fileSQL}` ..." sed -i 's/--.*//g;' ${fileSQL} # remove all comment mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} fi done for fileSQL in /var/www/html/install/mysql/tables/*.key.sql; do - echo "Importing table key from `basename ${fileSQL}`..." + echo "Importing table key from `basename ${fileSQL}` ..." sed -i 's/--.*//g;' ${fileSQL} mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} > /dev/null 2>&1 done for fileSQL in /var/www/html/install/mysql/functions/*.sql; do - echo "Importing `basename ${fileSQL}`..." + echo "Importing `basename ${fileSQL}` ..." sed -i 's/--.*//g;' ${fileSQL} mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} > /dev/null 2>&1 done for fileSQL in /var/www/html/install/mysql/data/*.sql; do - echo "Importing data from `basename ${fileSQL}`..." + echo "Importing data from `basename ${fileSQL}` ..." sed -i 's/--.*//g;' ${fileSQL} mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} > /dev/null 2>&1 done @@ -105,7 +121,7 @@ function migrateDatabase() mysqldump -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} > /var/www/documents/dump.sql r=${?} - if [ ${r} -ne 0 ]; then + if [[ ${r} -ne 0 ]]; then echo "Dump failed ... Aborting migration ..." return ${r} fi @@ -119,7 +135,7 @@ function migrateDatabase() r=$? popd > /dev/null - if [ ${r} -ne 0 ]; then + if [[ ${r} -ne 0 ]]; then echo "Migration failed ... Restoring DB ... check file /var/www/documents/migration_error.html for more info on error ..." mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < /var/www/documents/dump.sql echo "DB Restored ..." @@ -140,12 +156,12 @@ function run() if [[ ${DOLI_INSTALL_AUTO} -eq 1 && ! -f /var/www/documents/install.lock ]]; then mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} -e "SELECT Q.LAST_INSTALLED_VERSION FROM (SELECT INET_ATON(CONCAT(value, REPEAT('.0', 3 - CHAR_LENGTH(value) + CHAR_LENGTH(REPLACE(value, '.', ''))))) as VERSION_ATON, value as LAST_INSTALLED_VERSION FROM llx_const WHERE name IN ('MAIN_VERSION_LAST_INSTALL', 'MAIN_VERSION_LAST_UPGRADE') and entity=0) Q ORDER BY VERSION_ATON DESC LIMIT 1" > /tmp/lastinstall.result 2>&1 r=$? - if [ ${r} -ne 0 ]; then + if [[ ${r} -ne 0 ]]; then initializeDatabase else INSTALLED_VERSION=`grep -v LAST_INSTALLED_VERSION /tmp/lastinstall.result` echo "Last installed Version is : ${INSTALLED_VERSION}" - if [ "$(echo ${INSTALLED_VERSION} | cut -d. -f1)" -lt "$(echo ${DOLI_VERSION} | cut -d. -f1)" ]; then + if [[ "$(echo ${INSTALLED_VERSION} | cut -d. -f1)" -lt "$(echo ${DOLI_VERSION} | cut -d. -f1)" ]]; then migrateDatabase else echo "Schema update is not required ... Enjoy !!" diff --git a/images/9.0.4-php7.3/Dockerfile b/images/9.0.4-php7.3/Dockerfile index 1f6b8ad..0d4b1ea 100644 --- a/images/9.0.4-php7.3/Dockerfile +++ b/images/9.0.4-php7.3/Dockerfile @@ -47,7 +47,8 @@ RUN unzip -q /tmp/dolibarr.zip -d /tmp/dolibarr && \ ln -s /var/www/html /var/www/htdocs && \ cp -r /tmp/dolibarr/dolibarr-${DOLI_VERSION}/scripts /var/www/ && \ rm -rf /tmp/* && \ - mkdir -p /var/www/documents + mkdir -p /var/www/documents && \ + chown -R www-data:www-data /var/www EXPOSE 80 VOLUME /var/www/documents diff --git a/images/9.0.4-php7.3/docker-run.sh b/images/9.0.4-php7.3/docker-run.sh index cf6d2ea..21b86d9 100755 --- a/images/9.0.4-php7.3/docker-run.sh +++ b/images/9.0.4-php7.3/docker-run.sh @@ -2,20 +2,25 @@ function initDolibarr() { + local CURRENT_UID=$(id -u www-data) + local CURRENT_GID=$(id -g www-data) usermod -u ${WWW_USER_ID} www-data groupmod -g ${WWW_GROUP_ID} www-data - if [ ! -d /var/www/documents ]; then + if [[ ! -d /var/www/documents ]]; then + echo "[INIT] => create volume directory /var/www/documents ..." mkdir -p /var/www/documents fi + echo "[INIT] => update PHP Config ..." cat > ${PHP_INI_DIR}/conf.d/dolibarr-php.ini << EOF date.timezone = ${PHP_INI_DATE_TIMEZONE} sendmail_path = /usr/sbin/sendmail -t -i -memory_limit = $PHP_INI_MEMORY_LIMIT +memory_limit = ${PHP_INI_MEMORY_LIMIT} EOF - if [ ! -f /var/www/html/conf/conf.php ]; then + if [[ ! -f /var/www/html/conf/conf.php ]]; then + echo "[INIT] => update Dolibarr Config ..." cat > /var/www/html/conf/conf.php << EOF update ownership for file in Dolibarr Config ..." + chown www-data:www-data /var/www/html/conf/conf.php chmod 400 /var/www/html/conf/conf.php + + if [[ ${CURRENT_UID} -ne ${WWW_USER_ID} || ${CURRENT_GID} -ne ${WWW_GROUP_ID} ]]; then + # Refresh file ownership cause it has changed + echo "[INIT] => As UID / GID have changed from default, update ownership for files in /var/ww ..." + chown -R www-data:www-data /var/www + else + # Reducing load on init : change ownership only for volumes declared in docker + echo "[INIT] => update ownership for files in /var/www/documents ..." + chown -R www-data:www-data /var/www/documents + fi } function waitForDataBase() { r=1 - while [ $r -ne 0 ]; do + while [[ ${r} -ne 0 ]]; do mysql -u ${DOLI_DB_USER} --protocol tcp -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} -e "status" > /dev/null 2>&1 r=$? - if [ ${r} -ne 0 ]; then - echo "Waiting that SQL database is up..." + if [[ ${r} -ne 0 ]]; then + echo "Waiting that SQL database is up ..." sleep 2 fi done @@ -61,26 +77,26 @@ function initializeDatabase() { for fileSQL in /var/www/html/install/mysql/tables/*.sql; do if [[ ${fileSQL} != *.key.sql ]]; then - echo "Importing table from `basename ${fileSQL}`..." + echo "Importing table from `basename ${fileSQL}` ..." sed -i 's/--.*//g;' ${fileSQL} # remove all comment mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} fi done for fileSQL in /var/www/html/install/mysql/tables/*.key.sql; do - echo "Importing table key from `basename ${fileSQL}`..." + echo "Importing table key from `basename ${fileSQL}` ..." sed -i 's/--.*//g;' ${fileSQL} mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} > /dev/null 2>&1 done for fileSQL in /var/www/html/install/mysql/functions/*.sql; do - echo "Importing `basename ${fileSQL}`..." + echo "Importing `basename ${fileSQL}` ..." sed -i 's/--.*//g;' ${fileSQL} mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} > /dev/null 2>&1 done for fileSQL in /var/www/html/install/mysql/data/*.sql; do - echo "Importing data from `basename ${fileSQL}`..." + echo "Importing data from `basename ${fileSQL}` ..." sed -i 's/--.*//g;' ${fileSQL} mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < ${fileSQL} > /dev/null 2>&1 done @@ -105,7 +121,7 @@ function migrateDatabase() mysqldump -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} > /var/www/documents/dump.sql r=${?} - if [ ${r} -ne 0 ]; then + if [[ ${r} -ne 0 ]]; then echo "Dump failed ... Aborting migration ..." return ${r} fi @@ -119,7 +135,7 @@ function migrateDatabase() r=$? popd > /dev/null - if [ ${r} -ne 0 ]; then + if [[ ${r} -ne 0 ]]; then echo "Migration failed ... Restoring DB ... check file /var/www/documents/migration_error.html for more info on error ..." mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} < /var/www/documents/dump.sql echo "DB Restored ..." @@ -140,12 +156,12 @@ function run() if [[ ${DOLI_INSTALL_AUTO} -eq 1 && ! -f /var/www/documents/install.lock ]]; then mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} ${DOLI_DB_NAME} -e "SELECT Q.LAST_INSTALLED_VERSION FROM (SELECT INET_ATON(CONCAT(value, REPEAT('.0', 3 - CHAR_LENGTH(value) + CHAR_LENGTH(REPLACE(value, '.', ''))))) as VERSION_ATON, value as LAST_INSTALLED_VERSION FROM llx_const WHERE name IN ('MAIN_VERSION_LAST_INSTALL', 'MAIN_VERSION_LAST_UPGRADE') and entity=0) Q ORDER BY VERSION_ATON DESC LIMIT 1" > /tmp/lastinstall.result 2>&1 r=$? - if [ ${r} -ne 0 ]; then + if [[ ${r} -ne 0 ]]; then initializeDatabase else INSTALLED_VERSION=`grep -v LAST_INSTALLED_VERSION /tmp/lastinstall.result` echo "Last installed Version is : ${INSTALLED_VERSION}" - if [ "$(echo ${INSTALLED_VERSION} | cut -d. -f1)" -lt "$(echo ${DOLI_VERSION} | cut -d. -f1)" ]; then + if [[ "$(echo ${INSTALLED_VERSION} | cut -d. -f1)" -lt "$(echo ${DOLI_VERSION} | cut -d. -f1)" ]]; then migrateDatabase else echo "Schema update is not required ... Enjoy !!"