From d953d5afa8625212a08355bc3ed424ad96f7a01d Mon Sep 17 00:00:00 2001 From: Gilles Dubois Date: Fri, 3 Dec 2021 11:45:53 +0100 Subject: [PATCH] Standardize nightly with 2.9 docker file --- nightly/Dockerfile | 35 +++--- nightly/scripts/docker-entrypoint.sh | 173 +++++++++++++++++++-------- 2 files changed, 144 insertions(+), 64 deletions(-) diff --git a/nightly/Dockerfile b/nightly/Dockerfile index f66bd70..636ba80 100644 --- a/nightly/Dockerfile +++ b/nightly/Dockerfile @@ -1,7 +1,9 @@ FROM centos:centos7 +ENV OCS_VERSION nightly + LABEL maintainer="contact@ocsinventory-ng.org" \ - version="nightly" \ + version="${OCS_VERSION}" \ description="OCS Inventory docker image" ARG YUM_FLAGS="-y" @@ -14,9 +16,7 @@ ENV APACHE_RUN_USER=apache APACHE_RUN_GROUP=apache \ OCS_SSL_ENABLED=0 OCS_SSL_WEB_MODE=DISABLED OCS_SSL_COM_MODE=DISABLED OCS_SSL_KEY=/path/to/key OCS_SSL_CERT=/path/to/cert OCS_SSL_CA=/path/to/ca \ TZ=Europe/Paris -VOLUME /var/lib/ocsinventory-reports /etc/ocsinventory-server /usr/share/ocsinventory-reports - -WORKDIR /tmp +VOLUME /var/lib/ocsinventory-reports /etc/ocsinventory-server /usr/share/ocsinventory-reports/ocsreports/extensions RUN yum ${YUM_FLAGS} install wget \ curl \ @@ -34,7 +34,7 @@ RUN yum ${YUM_FLAGS} install wget \ perl-Compress-Zlib \ perl-DBI perl-DBD-MySQL \ perl-Net-IP \ - perl-SOAP-Lite \ + perl-Apache2-SOAP \ perl-Archive-Zip \ perl-Mojolicious \ perl-Plack \ @@ -44,7 +44,7 @@ RUN yum ${YUM_FLAGS} install wget \ httpd \ php73-php \ php73-php-cli \ - php73-php-cli \ + php73-php-ldap \ php73-php-gd \ php73-php-imap \ php73-php-pdo \ @@ -60,25 +60,32 @@ RUN yum ${YUM_FLAGS} install wget \ php73-php-json \ php73-php-fpm \ php73-php-soap \ + php73-php-zip \ php73-php-opcache ; -RUN wget http://download.ocsinventory-ng.org/nightly/latest.tar.gz && \ - tar xzf latest.tar.gz ; +RUN wget http://download.ocsinventory-ng.org/nightly/latest.tar.gz -P /tmp && \ + tar xzf /tmp/latest.tar.gz -C /tmp; -WORKDIR /tmp/OCSNG_UNIX_SERVER - -RUN cd Apache/ && \ - perl Makefile.PL && \ +RUN cd /tmp/OCSNG_UNIX_SERVER/Apache/ && \ + perl Makefile.PL && \ make && \ make install ; -RUN cp -r Api/ /usr/local/share/perl5/ +WORKDIR /etc/httpd/conf.d -WORKDIR /tmp +# Redirect Apache2 Logs to stdout e stderr +# https://github.com/docker-library/httpd/blob/5f92ab18146f41d1d324e99c5e197bdeda65d063/2.4/Dockerfile#L202 +RUN sed -ri \ + -e 's!^(\s*CustomLog)\s+\S+!\1 /proc/self/fd/1!g' \ + -e 's!^(\s*ErrorLog)\s+\S+!\1 /proc/self/fd/2!g' \ + -e 's!^(\s*TransferLog)\s+\S+!\1 /proc/self/fd/1!g' \ + "/etc/httpd/conf/httpd.conf" COPY conf/ /tmp/conf COPY ./scripts/docker-entrypoint.sh /usr/bin/docker-entrypoint.sh EXPOSE 80 443 +# https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#entrypoint ENTRYPOINT ["/usr/bin/docker-entrypoint.sh"] +CMD ["/usr/sbin/httpd", "-DFOREGROUND"] diff --git a/nightly/scripts/docker-entrypoint.sh b/nightly/scripts/docker-entrypoint.sh index 479294e..301526c 100755 --- a/nightly/scripts/docker-entrypoint.sh +++ b/nightly/scripts/docker-entrypoint.sh @@ -1,5 +1,18 @@ #!/bin/bash +API_CONF_FILE="/etc/httpd/conf.d/zz-ocsinventory-restapi.conf" +SRV_CONF_FILE="/etc/httpd/conf.d/z-ocsinventory-server.conf" +REPORTS_CONF_FILE="/etc/httpd/conf.d/ocsinventory-reports.conf" +DB_CONFIG_INC_FILE="${OCS_WEBCONSOLE_DIR}/ocsreports/dbconfig.inc.php" + +echo +echo "+----------------------------------------------------------+" +echo "| |" +echo "| Welcome to OCS Inventory NG Management Docker! |" +echo "| |" +echo "+----------------------------------------------------------+" +echo + # Create all directories mkdir -p $OCS_LOG_DIR mkdir -p $OCS_PERLEXT_DIR/Apache/Ocsinventory/Plugins @@ -12,67 +25,115 @@ mkdir -p $OCS_VARLIB_DIR/snmp if [ ! -f $OCS_WEBCONSOLE_DIR/ocsreports/var.php ]; then cp -r /tmp/OCSNG_UNIX_SERVER/ocsreports/ ${OCS_WEBCONSOLE_DIR} - rm -rf ${OCS_WEBCONSOLE_DIR}/ocsreports/dbconfig.inc.php + rm -rf ${DB_CONFIG_INC_FILE} fi; - + +cp -r /tmp/OCSNG_UNIX_SERVER/Api/ /usr/local/share/perl5 + +if [ ! -z ${OCS_DISABLE_API_MODE+x} ]; then + echo + echo "+---------------------------------------------------------------------------+" + echo "| Warning: OCS_DISABLE_API_MODE environment variable is set! |" + echo "| REST API will be DISABLED |" + echo "+---------------------------------------------------------------------------+" + echo +fi + +if [ ! -z ${OCS_DISABLE_COM_MODE+x} ]; then + echo + echo "+---------------------------------------------------------------------------+" + echo "| Warning: OCS_DISABLE_COM_MODE environment variable is set! |" + echo "| Communication server, which handles HTTP communications between database |" + echo "| server and agents (Apache, perl and mod_perl) will be DISABLED! |" + echo "+---------------------------------------------------------------------------+" + echo +fi + +if [ ! -z ${OCS_DISABLE_WEB_MODE+x} ]; then + echo + echo "+---------------------------------------------------------------------------+" + echo "| Warning: OCS_DISABLE_WEB_MODE environment variable is set! |" + echo "| Administration console, which allows administrators to query the database |" + echo "| server using their favorite browser (Apache, php) will be DISABLED! |" + echo "+---------------------------------------------------------------------------+" + echo +fi + +echo "+----------------------------------------------------------+" +echo "| Setting Apache Server Name to '${APACHE_SERVER_NAME:-localhost}'" +echo "+----------------------------------------------------------+" +echo +sed -ri -e "s!^#(ServerName)\s+\S+!\1 ${APACHE_SERVER_NAME:-localhost}:80!g" \ + "/etc/httpd/conf/httpd.conf" # Configure z-ocsinventory-server file -if [ ! -f /etc/httpd/conf.d/z-ocsinventory-server.conf ]; then - cp /tmp/conf/ocsinventory-server.conf /etc/httpd/conf.d/z-ocsinventory-server.conf - sed -i 's/VERSION_MP/2/g' /etc/httpd/conf.d/z-ocsinventory-server.conf - sed -i 's/DATABASE_SERVER/'"$OCS_DB_SERVER"'/g' /etc/httpd/conf.d/z-ocsinventory-server.conf - sed -i 's/DATABASE_PORT/'"$OCS_DB_PORT"'/g' /etc/httpd/conf.d/z-ocsinventory-server.conf - sed -i 's/DATABASE_NAME/'"$OCS_DB_NAME"'/g' /etc/httpd/conf.d/z-ocsinventory-server.conf - sed -i 's/DATABASE_USER/'"$OCS_DB_USER"'/g' /etc/httpd/conf.d/z-ocsinventory-server.conf - sed -i 's/DATABASE_PASSWD/'"$OCS_DB_PASS"'/g' /etc/httpd/conf.d/z-ocsinventory-server.conf - sed -i 's/"PATH_TO_LOG_DIRECTORY"/'"${OCS_LOG_DIR//\//\\/}"'/g' /etc/httpd/conf.d/z-ocsinventory-server.conf - sed -i 's/"PATH_TO_PLUGINS_PERL_DIRECTORY"/'"${OCS_PERLEXT_DIR//\//\\/}"'/g' /etc/httpd/conf.d/z-ocsinventory-server.conf - sed -i 's/"PATH_TO_PLUGINS_CONFIG_DIRECTORY"/'"${OCS_PLUGINSEXT_DIR//\//\\/}"'/g' /etc/httpd/conf.d/z-ocsinventory-server.conf - sed -i 's/OCS_SSL_ENABLED/'"$OCS_SSL_ENABLED"'/g' /etc/httpd/conf.d/z-ocsinventory-server.conf - sed -i 's/OCS_SSL_KEY/'"${OCS_SSL_KEY//\//\\/}"'/g' /etc/httpd/conf.d/z-ocsinventory-server.conf - sed -i 's/OCS_SSL_CERT/'"${OCS_SSL_CERT//\//\\/}"'/g' /etc/httpd/conf.d/z-ocsinventory-server.conf - sed -i 's/OCS_SSL_CA/'"${OCS_SSL_CA//\//\\/}"'/g' /etc/httpd/conf.d/z-ocsinventory-server.conf - sed -i 's/OCS_SSL_COM_MODE/'"$OCS_SSL_COM_MODE"'/g' /etc/httpd/conf.d/z-ocsinventory-server.conf +if [ ! -f ${SRV_CONF_FILE} ] && [ -z ${OCS_DISABLE_COM_MODE+x} ]; then + cp /tmp/conf/ocsinventory-server.conf ${SRV_CONF_FILE} + sed -i 's/VERSION_MP/2/g' ${SRV_CONF_FILE} + sed -i 's/DATABASE_SERVER/'"$OCS_DB_SERVER"'/g' ${SRV_CONF_FILE} + sed -i 's/DATABASE_PORT/'"$OCS_DB_PORT"'/g' ${SRV_CONF_FILE} + sed -i 's/DATABASE_NAME/'"$OCS_DB_NAME"'/g' ${SRV_CONF_FILE} + sed -i 's/DATABASE_USER/'"$OCS_DB_USER"'/g' ${SRV_CONF_FILE} + sed -i 's/DATABASE_PASSWD/'"$OCS_DB_PASS"'/g' ${SRV_CONF_FILE} + sed -i 's/"PATH_TO_LOG_DIRECTORY"/'"${OCS_LOG_DIR//\//\\/}"'/g' ${SRV_CONF_FILE} + sed -i 's/"PATH_TO_PLUGINS_PERL_DIRECTORY"/'"${OCS_PERLEXT_DIR//\//\\/}"'/g' ${SRV_CONF_FILE} + sed -i 's/"PATH_TO_PLUGINS_CONFIG_DIRECTORY"/'"${OCS_PLUGINSEXT_DIR//\//\\/}"'/g' ${SRV_CONF_FILE} fi # Configure zz-ocsinventory-restapi file -if [ ! -f /etc/httpd/conf.d/zz-ocsinventory-restapi.conf ]; then - cp /tmp/conf/ocsinventory-restapi.conf /etc/httpd/conf.d/zz-ocsinventory-restapi.conf - sed -i 's/DATABASE_SERVER/'"$OCS_DB_SERVER"'/g' /etc/httpd/conf.d/zz-ocsinventory-restapi.conf - sed -i 's/DATABASE_PORT/'"$OCS_DB_PORT"'/g' /etc/httpd/conf.d/zz-ocsinventory-restapi.conf - sed -i 's/DATABASE_NAME/'"$OCS_DB_NAME"'/g' /etc/httpd/conf.d/zz-ocsinventory-restapi.conf - sed -i 's/DATABASE_USER/'"$OCS_DB_USER"'/g' /etc/httpd/conf.d/zz-ocsinventory-restapi.conf - sed -i 's/DATABASE_PASSWD/'"$OCS_DB_PASS"'/g' /etc/httpd/conf.d/zz-ocsinventory-restapi.conf - sed -i 's/OCS_SSL_ENABLED/'"$OCS_SSL_ENABLED"'/g' /etc/httpd/conf.d/zz-ocsinventory-restapi.conf - sed -i 's/REST_API_PATH/\/usr\/local\/share\/perl5/g' /etc/httpd/conf.d/zz-ocsinventory-restapi.conf - sed -i 's/REST_API_LOADER_PATH/\/usr\/local\/share\/perl5\/Api\/Ocsinventory\/Restapi\/Loader.pm/g' /etc/httpd/conf.d/zz-ocsinventory-restapi.conf +if [ ! -f ${API_CONF_FILE} ] && [ -z ${OCS_DISABLE_API_MODE+x} ]; then + cp /tmp/conf/ocsinventory-restapi.conf ${API_CONF_FILE} + sed -i 's/DATABASE_SERVER/'"$OCS_DB_SERVER"'/g' ${API_CONF_FILE} + sed -i 's/DATABASE_PORT/'"$OCS_DB_PORT"'/g' ${API_CONF_FILE} + sed -i 's/DATABASE_NAME/'"$OCS_DB_NAME"'/g' ${API_CONF_FILE} + sed -i 's/DATABASE_USER/'"$OCS_DB_USER"'/g' ${API_CONF_FILE} + sed -i 's/DATABASE_PASSWD/'"$OCS_DB_PASS"'/g' ${API_CONF_FILE} + sed -i 's/OCS_SSL_ENABLED/'"$OCS_SSL_ENABLED"'/g' ${API_CONF_FILE} + sed -i 's/REST_API_PATH/\/usr\/local\/share\/perl5/g' ${API_CONF_FILE} + sed -i 's/REST_API_LOADER_PATH/\/usr\/local\/share\/perl5\/Api\/Ocsinventory\/Restapi\/Loader.pm/g' ${API_CONF_FILE} +fi + +# Replace Variables +if [ -f ${SRV_CONF_FILE} ] && [ -z ${OCS_DISABLE_COM_MODE+x} ]; then + echo "+-----------------------------------------------+" + echo "| Customizing from environment variables... |" + echo "+-----------------------------------------------+" + echo + # Get all env vars starting with 'OCS_' + for var in $(env | cut -f1 -d= | grep -i OCS_); do + # Check that the current var is not commented out in conf file + if grep -q "^\s*PerlSetEnv ${var^^}" ${SRV_CONF_FILE} ; then + echo "Applying Config ${var^^}=${!var} from environment variable" + sed -i "s,^\(\s*PerlSetEnv ${var^^}\).*$,\1 ${!var},g" ${SRV_CONF_FILE} + fi + done fi # Configure ocsinventory-reports file -if [ ! -f /etc/httpd/conf.d/ocsinventory-reports.conf ]; then - cp /tmp/conf/ocsinventory-reports.conf /etc/httpd/conf.d/ocsinventory-reports.conf - sed -i 's/OCSREPORTS_ALIAS/\/ocsreports/g' /etc/httpd/conf.d/ocsinventory-reports.conf - sed -i 's/PATH_TO_OCSREPORTS_DIR/'"${OCS_WEBCONSOLE_DIR//\//\\/}"'\/ocsreports/g' /etc/httpd/conf.d/ocsinventory-reports.conf - sed -i 's/PACKAGES_ALIAS/\/download/g' /etc/httpd/conf.d/ocsinventory-reports.conf - sed -i 's/PATH_TO_PACKAGES_DIR/'"${OCS_VARLIB_DIR//\//\\/}"'download/g' /etc/httpd/conf.d/ocsinventory-reports.conf - sed -i 's/SNMP_ALIAS/\/snmp/g' /etc/httpd/conf.d/ocsinventory-reports.conf - sed -i 's/PATH_TO_SNMP_DIR/'"${OCS_VARLIB_DIR//\//\\/}"'snmp/g' /etc/httpd/conf.d/ocsinventory-reports.conf +if [ ! -f ${REPORTS_CONF_FILE} ] && [ -z ${OCS_DISABLE_WEB_MODE+x} ]; then + cp /tmp/conf/ocsinventory-reports.conf ${REPORTS_CONF_FILE} + sed -i 's/OCSREPORTS_ALIAS/\/ocsreports/g' ${REPORTS_CONF_FILE} + sed -i 's/PATH_TO_OCSREPORTS_DIR/'"${OCS_WEBCONSOLE_DIR//\//\\/}"'\/ocsreports/g' ${REPORTS_CONF_FILE} + sed -i 's/PACKAGES_ALIAS/\/download/g' ${REPORTS_CONF_FILE} + sed -i 's/PATH_TO_PACKAGES_DIR/'"${OCS_VARLIB_DIR//\//\\/}"'download/g' ${REPORTS_CONF_FILE} + sed -i 's/SNMP_ALIAS/\/snmp/g' ${REPORTS_CONF_FILE} + sed -i 's/PATH_TO_SNMP_DIR/'"${OCS_VARLIB_DIR//\//\\/}"'snmp/g' ${REPORTS_CONF_FILE} fi # Generate dbconfig.inc.php -if [ ! -f $OCS_WEBCONSOLE_DIR/ocsreports/dbconfig.inc.php ]; then +if [ ! -f ${DB_CONFIG_INC_FILE} ] && [ -z ${OCS_DISABLE_WEB_MODE+x} ]; then cp /tmp/conf/dbconfig.inc.php $OCS_WEBCONSOLE_DIR/ocsreports - sed -i 's/OCS_DB_NAME/'"$OCS_DB_NAME"'/g' $OCS_WEBCONSOLE_DIR/ocsreports/dbconfig.inc.php - sed -i 's/OCS_READ_NAME/'"$OCS_DB_SERVER"'/g' $OCS_WEBCONSOLE_DIR/ocsreports/dbconfig.inc.php - sed -i 's/OCS_WRITE_NAME/'"$OCS_DB_SERVER"'/g' $OCS_WEBCONSOLE_DIR/ocsreports/dbconfig.inc.php - sed -i 's/OCS_DB_PORT/'"$OCS_DB_PORT"'/g' $OCS_WEBCONSOLE_DIR/ocsreports/dbconfig.inc.php - sed -i 's/OCS_DB_USER/'"$OCS_DB_USER"'/g' $OCS_WEBCONSOLE_DIR/ocsreports/dbconfig.inc.php - sed -i 's/OCS_DB_PASS/'"$OCS_DB_PASS"'/g' $OCS_WEBCONSOLE_DIR/ocsreports/dbconfig.inc.php - sed -i 's/OCS_SSL_ENABLED/'"$OCS_SSL_ENABLED"'/g' $OCS_WEBCONSOLE_DIR/ocsreports/dbconfig.inc.php - sed -i 's/OCS_SSL_WEB_MODE/'"$OCS_SSL_WEB_MODE"'/g' $OCS_WEBCONSOLE_DIR/ocsreports/dbconfig.inc.php - sed -i 's/OCS_SSL_KEY/'"${OCS_SSL_KEY//\//\\/}"'/g' $OCS_WEBCONSOLE_DIR/ocsreports/dbconfig.inc.php - sed -i 's/OCS_SSL_CERT/'"${OCS_SSL_CERT//\//\\/}"'/g' $OCS_WEBCONSOLE_DIR/ocsreports/dbconfig.inc.php - sed -i 's/OCS_SSL_CA/'"${OCS_SSL_CA//\//\\/}"'/g' $OCS_WEBCONSOLE_DIR/ocsreports/dbconfig.inc.php + sed -i 's/OCS_DB_NAME/'"$OCS_DB_NAME"'/g' ${DB_CONFIG_INC_FILE} + sed -i 's/OCS_READ_NAME/'"$OCS_DB_SERVER"'/g' ${DB_CONFIG_INC_FILE} + sed -i 's/OCS_WRITE_NAME/'"$OCS_DB_SERVER"'/g' ${DB_CONFIG_INC_FILE} + sed -i 's/OCS_DB_PORT/'"$OCS_DB_PORT"'/g' ${DB_CONFIG_INC_FILE} + sed -i 's/OCS_DB_USER/'"$OCS_DB_USER"'/g' ${DB_CONFIG_INC_FILE} + sed -i 's/OCS_DB_PASS/'"$OCS_DB_PASS"'/g' ${DB_CONFIG_INC_FILE} + sed -i 's/OCS_SSL_ENABLED/'"$OCS_SSL_ENABLED"'/g' ${DB_CONFIG_INC_FILE} + sed -i 's/OCS_SSL_WEB_MODE/'"$OCS_SSL_WEB_MODE"'/g' ${DB_CONFIG_INC_FILE} + sed -i 's/OCS_SSL_KEY/'"${OCS_SSL_KEY//\//\\/}"'/g' ${DB_CONFIG_INC_FILE} + sed -i 's/OCS_SSL_CERT/'"${OCS_SSL_CERT//\//\\/}"'/g' ${DB_CONFIG_INC_FILE} + sed -i 's/OCS_SSL_CA/'"${OCS_SSL_CA//\//\\/}"'/g' ${DB_CONFIG_INC_FILE} fi # Permissions @@ -86,9 +147,14 @@ if [ -f $OCS_WEBCONSOLE_DIR/ocsreports/install.php ]; then fi # Remove temp files +echo +echo "+--------------------------------+" +echo "| Removing not used files... |" +echo "+--------------------------------+" +echo cd /tmp shopt -s extglob -rm -rf -v !("conf") +rm -rf !("conf") # Apache start if [ ! -d "$APACHE_RUN_DIR" ]; then @@ -99,4 +165,11 @@ if [ -f "$APACHE_PID_FILE" ]; then rm "$APACHE_PID_FILE" fi -/usr/sbin/httpd -DFOREGROUND +echo "+----------------------------------------------------------+" +echo "| OK, prepare finshed ;-) |" +echo "| |" +echo "| Starting OCS Inventory NG Management Docker... |" +echo "+----------------------------------------------------------+" +echo + +exec "$@" \ No newline at end of file