From 5d2896e1297f9aa607395866ebc4d71190d66367 Mon Sep 17 00:00:00 2001 From: Joe Corall Date: Fri, 26 Jun 2026 12:30:01 +0000 Subject: [PATCH] Fix OJS smoke install path --- Dockerfile | 4 + rootfs/etc/s6-overlay/scripts/ojs-setup.sh | 96 ++++++++++++++-------- 2 files changed, 64 insertions(+), 36 deletions(-) diff --git a/Dockerfile b/Dockerfile index 682665c..4570a49 100644 --- a/Dockerfile +++ b/Dockerfile @@ -20,6 +20,10 @@ RUN --mount=type=cache,id=custom-ojs-downloads-${TARGETARCH},sharing=locked,targ --strip \ --dest "/var/www/ojs" \ && \ + sed -i \ + -e '//d' \ + -e '//d' \ + dbscripts/xml/install.xml && \ rm -rf .github tests docs && \ mkdir -p /var/www/files /var/www/ojs/cache /var/www/ojs/public && \ touch /var/www/ojs/opcache_stat.php && \ diff --git a/rootfs/etc/s6-overlay/scripts/ojs-setup.sh b/rootfs/etc/s6-overlay/scripts/ojs-setup.sh index 8a620c1..ebc6272 100755 --- a/rootfs/etc/s6-overlay/scripts/ojs-setup.sh +++ b/rootfs/etc/s6-overlay/scripts/ojs-setup.sh @@ -11,56 +11,73 @@ CREATE USER IF NOT EXISTS '${DB_USER}'@'%' IDENTIFIED BY '${DB_PASSWORD}'; GRANT ALL PRIVILEGES ON ${DB_NAME}.* to '${DB_USER}'@'%'; FLUSH PRIVILEGES; -SET PASSWORD FOR ${DB_USER}@'%' = PASSWORD('${DB_PASSWORD}') +SET PASSWORD FOR ${DB_USER}@'%' = PASSWORD('${DB_PASSWORD}'); EOF } function set_ojs_installed { - sed -i 's/installed = Off/installed = On/' /var/www/ojs/config.inc.php + sed -i 's/^installed = .*/installed = On/' /var/www/ojs/config.inc.php chmod 440 /var/www/ojs/config.inc.php touch /installed } +function fix_ojs_writable_permissions { + local dir= + for dir in /var/www/files /var/www/ojs/cache /var/www/ojs/public; do + mkdir -p "${dir}" + chown -R nginx:nginx "${dir}" + find "${dir}" -type d -exec chmod 750 {} + + find "${dir}" -type f -exec chmod 640 {} + + done +} + +function render_ojs_config { + /etc/s6-overlay/scripts/confd-oneshot.sh +} + function check_ojs_installed { - # Check if OJS database tables exist - # Query the database for one of the core OJS tables (journals table) mysql -h"${DB_HOST}" -u"${DB_USER}" -p"${DB_PASSWORD}" "${DB_NAME}" \ - -e "SELECT 1 FROM journals LIMIT 1" &>/dev/null + -e "SELECT 1 FROM versions WHERE current = 1 AND product_type = 'core' AND product = 'ojs2' LIMIT 1" &>/dev/null return $? } function install_ojs { echo "OJS not installed. Running installation..." - # Build form data for installation POST request - local form_data="installing=0" - form_data="${form_data}&locale=${OJS_LOCALE}" - form_data="${form_data}&timeZone=${OJS_TIMEZONE}" - form_data="${form_data}&filesDir=${OJS_FILES_DIR}" - form_data="${form_data}&databaseDriver=mysqli" - form_data="${form_data}&databaseHost=${DB_HOST}" - form_data="${form_data}&databaseUsername=${DB_USER}" - form_data="${form_data}&databasePassword=${DB_PASSWORD}" - form_data="${form_data}&databaseName=${DB_NAME}" - form_data="${form_data}&oaiRepositoryId=${OJS_OAI_REPOSITORY_ID}" - form_data="${form_data}&enableBeacon=${OJS_ENABLE_BEACON}" - form_data="${form_data}&adminUsername=${OJS_ADMIN_USERNAME}" - form_data="${form_data}&adminPassword=${OJS_ADMIN_PASSWORD}" - form_data="${form_data}&adminPassword2=${OJS_ADMIN_PASSWORD}" - form_data="${form_data}&adminEmail=${OJS_ADMIN_EMAIL}" + local enable_beacon=n + case "${OJS_ENABLE_BEACON}" in + 1|[Oo][Nn]|[Tt][Rr][Uu][Ee]|[Yy]*) + enable_beacon=y + ;; + esac - # POST to the installation endpoint with increased timeout - echo "Posting installation request..." - curl -fsS -d "${form_data}" \ - -H "Content-Type: application/x-www-form-urlencoded" \ - http://localhost/index/en/install/install > /tmp/ojs-install.log 2>&1 && install_success=true || install_success= + echo "Running OJS CLI installer..." + { + printf '%s\n' "${OJS_LOCALE}" + printf '\n' + printf '%s\n' "${OJS_FILES_DIR}" + printf '%s\n' "${OJS_ADMIN_USERNAME}" + printf '%s\n' "${OJS_ADMIN_PASSWORD}" + printf '%s\n' "${OJS_ADMIN_PASSWORD}" + printf '%s\n' "${OJS_ADMIN_EMAIL}" + printf 'mysqli\n' + printf '%s\n' "${DB_HOST}" + printf '%s\n' "${DB_USER}" + printf '%s\n' "${DB_PASSWORD}" + printf '%s\n' "${DB_NAME}" + printf '%s\n' "${OJS_OAI_REPOSITORY_ID}" + printf '%s\n' "${enable_beacon}" + printf 'y\n' + } | php /var/www/ojs/tools/install.php > /tmp/ojs-install.log 2>&1 && install_success=true || install_success= - if [ -n "${install_success}" ] && check_ojs_installed; then + if [ -n "${install_success}" ] && grep -q "Successfully installed version" /tmp/ojs-install.log && check_ojs_installed; then echo "==========================================" echo "OJS Installation Complete!" echo "==========================================" rm /tmp/ojs-install.log + render_ojs_config set_ojs_installed + fix_ojs_writable_permissions else echo "==========================================" echo "OJS Installation Failed!" @@ -72,21 +89,28 @@ function install_ojs { } function main { + if [ ! -f /var/www/ojs/index.php ]; then + echo "OJS application files are not present. Skipping OJS setup." + return 0 + fi + # wait for nginx if ! timeout 300 wait-for-open-port.sh localhost 80; then - echo "Could not connect to nginx at localhost:80" - exit 1 + echo "Could not connect to nginx at localhost:80" + exit 1 fi if [ "${DB_HOST}" = "mariadb" ]; then - mysql_create_database - if check_ojs_installed; then - echo "OJS already installed. Skipping installation." - set_ojs_installed - exit 0 - fi - install_ojs + mysql_create_database + if check_ojs_installed; then + echo "OJS already installed. Skipping installation." + set_ojs_installed + fix_ojs_writable_permissions + exit 0 + fi + install_ojs fi set_ojs_installed + fix_ojs_writable_permissions } main