This is an automated email from the ASF dual-hosted git repository. danwatford pushed a commit to branch trunk in repository https://gitbox.apache.org/repos/asf/ofbiz-framework.git
The following commit(s) were added to refs/heads/trunk by this push: new 03f8d3ea79 Implemented: Inhibit loading of components in docker containers (OFBIZ-12783) 03f8d3ea79 is described below commit 03f8d3ea79eacd77c54ebcf4dbaa2b7e1c325af7 Author: Daniel Watford <dan...@watfordconsulting.com> AuthorDate: Sun Mar 26 17:11:33 2023 +0100 Implemented: Inhibit loading of components in docker containers (OFBIZ-12783) Container deployments will disable components according to the component configuration files (ofbiz-component.xml files) listed in environment variable OFBIZ_DISABLE_COMPONENTS. --- DOCKER.md | 1 + Dockerfile | 6 ++++++ docker/disable-component.xslt | 33 ++++++++++++++++++++++++++++++ docker/docker-entrypoint.sh | 47 +++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 87 insertions(+) diff --git a/DOCKER.md b/DOCKER.md index 5fd7d77ce2..50ecdf093e 100644 --- a/DOCKER.md +++ b/DOCKER.md @@ -76,6 +76,7 @@ Environment variables are used in `docker-entrypoint.sh` to control configuratio |OFBIZ_CONTENT_URL_PREFIX | <empty> | Used to set the content.url.prefix.secure and content.url.prefix.standard properties in `framework/webapp/config/url.properties`. | |OFBIZ_ENABLE_AJP_PORT | *empty* | Enable the AJP (Apache JServe Protocol) port to allow communication with OFBiz via a reverse proxy. Enabled when this environment variable contains a non-empty value. | |OFBIZ_SKIP_DB_DRIVER_DOWNLOAD | *empty* | Any non-empty value will cause the docker-entrypoint.sh script to skip downloading of any database drivers. | +|OFBIZ_DISABLE_COMPONENTS | plugins/birt/ofbiz-component.xml | Commas seperated list of paths to ofbiz-component.xml files of the components that should not be loaded. | ### Hooks At various steps of initialisation, the `docker-entrypoint.sh` script will check for diff --git a/Dockerfile b/Dockerfile index c22482f58f..ff816a0eba 100644 --- a/Dockerfile +++ b/Dockerfile @@ -38,6 +38,11 @@ RUN --mount=type=cache,id=gradle-cache,sharing=locked,target=/root/.gradle \ FROM eclipse-temurin:17 AS runtimebase +# xsltproc is used to disable OFBiz components during first run. +RUN apt-get update \ + && apt-get install -y --no-install-recommends xsltproc \ + && rm -rf /var/lib/apt/lists/* + RUN ["useradd", "ofbiz"] # Create directories used to mount volumes where hooks into the startup process can be placed. @@ -60,6 +65,7 @@ RUN --mount=type=bind,from=builder,source=/builder/build/distributions/ofbiz.tar RUN ["mkdir", "/ofbiz/runtime", "/ofbiz/config", "/ofbiz/lib-extra"] COPY docker/docker-entrypoint.sh . +COPY docker/disable-component.xslt . COPY docker/send_ofbiz_stop_signal.sh . COPY docker/templates templates diff --git a/docker/disable-component.xslt b/docker/disable-component.xslt new file mode 100644 index 0000000000..04e926ba09 --- /dev/null +++ b/docker/disable-component.xslt @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<!-- + Copy all attributes and elements of the root ofbiz-component element in an XML document, changing the enabled + attribute to false. +--> +<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> + <xsl:template match="/"> + <xsl:element name="ofbiz-component"> + <xsl:copy-of select="ofbiz-component/@*"/> + <xsl:attribute name="enabled">false</xsl:attribute> + <xsl:copy-of select="ofbiz-component/node()"/> + </xsl:element> + </xsl:template> +</xsl:stylesheet> diff --git a/docker/docker-entrypoint.sh b/docker/docker-entrypoint.sh index dcb50aa997..4310c7aa04 100755 --- a/docker/docker-entrypoint.sh +++ b/docker/docker-entrypoint.sh @@ -80,6 +80,11 @@ # OFBIZ_POSTGRES_TENANT_USER Default: ofbiztenant # OFBIZ_POSTGRES_TENANT_PASSWORD Default: ofbiztenant # +# OFBIZ_DISABLE_COMPONENTS +# Prevents loading of ofbiz-components. +# Contains a comma separated list of relative paths from the ofbiz sources directory to the ofbiz-component.xml files +# that should be prevented from loading. +# Default: plugins/birt/ofbiz-component.xml # # Hooks are executed at the various stages of the initialisation process by executing scripts in the following # directories. Scripts must be executable and have the .sh extension: @@ -140,6 +145,8 @@ ofbiz_setup_env() { OFBIZ_POSTGRES_TENANT_DB=${OFBIZ_POSTGRES_TENANT_DB:-ofbiztenant} OFBIZ_POSTGRES_TENANT_USER=${OFBIZ_POSTGRES_TENANT_USER:-ofbiztenant} OFBIZ_POSTGRES_TENANT_PASSWORD=${OFBIZ_POSTGRES_TENANT_PASSWORD:-ofbiztenant} + + OFBIZ_DISABLE_COMPONENTS=${OFBIZ_DISABLE_COMPONENTS-plugins/birt/ofbiz-component.xml} } ############################################################################### @@ -245,6 +252,42 @@ load_admin_user() { fi } +############################################################################### +# Modify the given ofbiz-component configuration XML file to set the root +# component's 'enabled' attribute to false. +# $1 - Path to the XML file to be modified. +disable_component() { + XML_FILE="/ofbiz/$1" + if [ -f "$XML_FILE" ]; then + TMPFILE=$(mktemp) + + xsltproc /ofbiz/disable-component.xslt "$XML_FILE" > "$TMPFILE" + mv "$TMPFILE" "$XML_FILE" + else + echo "Cannot find ofbiz-component configuration file. Not disabling component: $XML_FILE" + fi +} + +############################################################################### +# Modify the given ofbiz-component configuration XML files to set their root +# components' 'enabled' attribute to false. +# $1 - Comma separated list of paths to configuration XML files to be modified. +disable_components() { + COMMA_SEPARATED_PATHS="$1" + + if [ -n "$COMMA_SEPARATED_PATHS" ]; then + + # Split the comma separated paths into separate arguments. + IFS=, + set "$COMMA_SEPARATED_PATHS" + + while [ -n "$1" ]; do + disable_component "$1" + shift + done + fi +} + ############################################################################### # Apply any configuration changes required. # Changed property files need to be placed in /ofbiz/config so they appear earlier @@ -272,6 +315,10 @@ apply_configuration() { framework/webapp/config/url.properties >config/url.properties fi + if [ -n "$OFBIZ_DISABLE_COMPONENTS" ]; then + disable_component "$OFBIZ_DISABLE_COMPONENTS" + fi + touch "$CONTAINER_CONFIG_APPLIED" run_init_hooks /docker-entrypoint-hooks/after-config-applied.d/* fi