diff --git a/dev/Dockerfile b/dev/Dockerfile index 4b93b86..4494316 100644 --- a/dev/Dockerfile +++ b/dev/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 +FROM ubuntu:22.04 LABEL maintainer="contact@ocsinventory-ng.org" \ version="dev" \ @@ -54,9 +54,11 @@ RUN apt-get update && apt-get install -y \ composer \ php-ldap -COPY conf/* /tmp/ -COPY ./scripts/docker-entrypoint.sh /usr/bin/docker-entrypoint.sh +COPY conf/* /tmp/conf/ +COPY ./docker-entrypoint.sh /docker-entrypoint.sh +COPY ./docker-entrypoint.d /docker-entrypoint.d EXPOSE 80 443 -ENTRYPOINT ["/usr/bin/docker-entrypoint.sh"] +ENTRYPOINT ["/docker-entrypoint.sh"] +CMD ["/usr/sbin/apache2", "-DFOREGROUND"] diff --git a/dev/docker-entrypoint.d/01-start.sh b/dev/docker-entrypoint.d/01-start.sh new file mode 100644 index 0000000..9600218 --- /dev/null +++ b/dev/docker-entrypoint.d/01-start.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +echo "+----------------------------------------------------------+" +echo "| |" +echo "| Welcome to OCS Inventory NG Management Docker! |" +echo "| |" +echo "+----------------------------------------------------------+" + +# Move to temp and download OCS +cd /tmp +git clone $SERVER_REPOSITORY_GIT_URL OCSNG_UNIX_SERVER -b $SERVER_REPOSITORY_BRANCH +cd OCSNG_UNIX_SERVER/ +git clone $OCSREPORTS_REPOSITORY_GIT_URL ocsreports -b $OCSREPORTS_REPOSITORY_BRANCH +cd ocsreports/ +composer install +cd /tmp/OCSNG_UNIX_SERVER + +# Create all directories +mkdir -p $OCS_LOG_DIR +mkdir -p $OCS_PERLEXT_DIR/Apache/Ocsinventory/Plugins +mkdir -p $OCS_PLUGINSEXT_DIR +mkdir -p $OCS_VARLIB_DIR/download +mkdir -p $OCS_VARLIB_DIR/ipd +mkdir -p $OCS_VARLIB_DIR/logs +mkdir -p $OCS_VARLIB_DIR/scripts +mkdir -p $OCS_VARLIB_DIR/snmp + +# Server compilation +cd Apache +perl Makefile.PL +make +make install \ No newline at end of file diff --git a/dev/docker-entrypoint.d/10-com-server.sh b/dev/docker-entrypoint.d/10-com-server.sh new file mode 100644 index 0000000..bfd4732 --- /dev/null +++ b/dev/docker-entrypoint.d/10-com-server.sh @@ -0,0 +1,48 @@ +#!/bin/bash + +SRV_CONF_FILE="/etc/apache2/conf-available/z-ocsinventory-server.conf" + +if [ ! -z "${OCS_DISABLE_COM_MODE}" ]; then + 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 "+---------------------------------------------------------------------------+" + exit 0 +fi + +# Configure z-ocsinventory-server file +if [ ! -f ${SRV_CONF_FILE} ]; 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 + +# Replace Variables +if [ -f ${SRV_CONF_FILE} ]; 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 + +# Permissions +chown -R $APACHE_RUN_USER: $OCS_LOG_DIR + +# Enable conf +a2enconf z-ocsinventory-server diff --git a/dev/docker-entrypoint.d/20-web-console.sh b/dev/docker-entrypoint.d/20-web-console.sh new file mode 100644 index 0000000..b207f1b --- /dev/null +++ b/dev/docker-entrypoint.d/20-web-console.sh @@ -0,0 +1,57 @@ +#!/bin/bash + +REPORTS_CONF_FILE="/etc/apache2/conf-available/ocsinventory-reports.conf" +DB_CONFIG_INC_FILE="${OCS_WEBCONSOLE_DIR}/ocsreports/dbconfig.inc.php" + +if [ ! -z "${OCS_DISABLE_WEB_MODE}" ]; then + 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 "+---------------------------------------------------------------------------+" + exit 0 +fi + +if [ ! -f $OCS_WEBCONSOLE_DIR/ocsreports/var.php ]; then + cp -r /tmp/OCSNG_UNIX_SERVER/ocsreports/ ${OCS_WEBCONSOLE_DIR} + rm -rf ${DB_CONFIG_INC_FILE} +fi + +# Configure ocsinventory-reports file +if [ ! -f ${REPORTS_CONF_FILE} ]; 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 ${DB_CONFIG_INC_FILE} ]; then + cp /tmp/conf/dbconfig.inc.php $OCS_WEBCONSOLE_DIR/ocsreports + 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 +chown -R $APACHE_RUN_USER: $OCS_VARLIB_DIR +chown -R $APACHE_RUN_USER: $OCS_WEBCONSOLE_DIR + +# rm install.php +if [ -f $OCS_WEBCONSOLE_DIR/ocsreports/install.php ]; then + rm $OCS_WEBCONSOLE_DIR/ocsreports/install.php +fi + +# Enable conf +a2enconf ocsinventory-reports diff --git a/dev/docker-entrypoint.d/30-api-server.sh b/dev/docker-entrypoint.d/30-api-server.sh new file mode 100644 index 0000000..59b1b2e --- /dev/null +++ b/dev/docker-entrypoint.d/30-api-server.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +if [ ! -z "${OCS_DISABLE_API_MODE}" ] || [ ! -z "${OCS_DISABLE_COM_MODE}" ]; then + echo "+---------------------------------------------------------------------------+" + echo "| Warning: OCS_DISABLE_API_MODE or OCS_DISABLE_COM_MODE environment |" + echo "| variable is set! |" + echo "| REST API will be DISABLED |" + echo "+---------------------------------------------------------------------------+" + exit 0 +fi + +API_CONF_FILE="/etc/apache2/conf-available/zz-ocsinventory-restapi.conf" +API_ROUTE=$(perl -e "print \"@INC[2]\"") +API_ROUTE_LOADER="${API_ROUTE}/Api/Ocsinventory/Restapi/Loader.pm" + +cp -R /tmp/OCSNG_UNIX_SERVER/Api/ ${API_ROUTE} + +# Configure zz-ocsinventory-restapi file +if [ ! -f ${API_CONF_FILE} ]; 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/'"${API_ROUTE//\//\\/}"'/g' ${API_CONF_FILE} + sed -i 's/REST_API_LOADER_PATH/'"${API_ROUTE_LOADER//\//\\/}"'/g' ${API_CONF_FILE} +fi + +# Enable conf +a2enconf zz-ocsinventory-restapi diff --git a/dev/docker-entrypoint.d/99-finish.sh b/dev/docker-entrypoint.d/99-finish.sh new file mode 100644 index 0000000..688659a --- /dev/null +++ b/dev/docker-entrypoint.d/99-finish.sh @@ -0,0 +1,35 @@ +#!/bin/bash + +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/apache2/apache2.conf" + +# Remove temp files +echo "+--------------------------------+" +echo "| Removing not used files... |" +echo "+--------------------------------+" +echo +cd /tmp +shopt -s extglob +rm -rf !("conf") + +# Apache start +if [ ! -d "$APACHE_RUN_DIR" ]; then + mkdir "$APACHE_RUN_DIR" + chown $APACHE_RUN_USER:$APACHE_RUN_GROUP "$APACHE_RUN_DIR" +fi + +if [ -f "$APACHE_PID_FILE" ]; then + rm "$APACHE_PID_FILE" +fi + +echo "+----------------------------------------------------------+" +echo "| OK, prepare finshed ;-) |" +echo "| |" +echo "| Starting OCS Inventory NG Management Docker... |" +echo "+----------------------------------------------------------+" +echo diff --git a/dev/docker-entrypoint.sh b/dev/docker-entrypoint.sh new file mode 100755 index 0000000..ee33ac0 --- /dev/null +++ b/dev/docker-entrypoint.sh @@ -0,0 +1,35 @@ +#!/bin/bash +# vim:sw=4:ts=4:et + +set -e + +if [ -z "${OCS_ENTRYPOINT_QUIET_LOGS:-}" ]; then + exec 3>&1 +else + exec 3>/dev/null +fi + +if /usr/bin/find "/docker-entrypoint.d/" -mindepth 1 -maxdepth 1 -type f -print -quit 2>/dev/null | read v; then + echo >&3 "$0: /docker-entrypoint.d/ is not empty, will attempt to perform configuration" + + echo >&3 "$0: Looking for shell scripts in /docker-entrypoint.d/" + find "/docker-entrypoint.d/" -follow -type f -print | sort -V | while read -r f; do + case "$f" in + *.sh) + if ! [ -x "$f" ]; then + chmod +x $f + fi + + echo -e >&3 "\n$0: Launching ${f}\n" + "$f" + ;; + *) echo -e >&3 "\n$0: Ignoring ${f}\n" ;; + esac + done + + echo >&3 "$0: Configuration complete; ready for start up" +else + echo >&3 "$0: No files found in /docker-entrypoint.d/, skipping configuration" +fi + +exec "$@" diff --git a/dev/scripts/docker-entrypoint.sh b/dev/scripts/docker-entrypoint.sh deleted file mode 100755 index fc2bcdb..0000000 --- a/dev/scripts/docker-entrypoint.sh +++ /dev/null @@ -1,115 +0,0 @@ -#!/bin/bash - -API_CONF_FILE="/etc/apache2/conf-available/zz-ocsinventory-restapi.conf" -SRV_CONF_FILE="/etc/apache2/conf-available/z-ocsinventory-server.conf" -REPORTS_CONF_FILE="/etc/apache2/conf-available/ocsinventory-reports.conf" -DB_CONFIG_INC_FILE="${OCS_WEBCONSOLE_DIR}/dbconfig.inc.php" - -API_ROUTE=$(perl -e "print \"@INC[2]\"") -API_ROUTE_LOADER="${API_ROUTE}/Api/Ocsinventory/Restapi/Loader.pm" - -# Move to temp and download OCS -cd /tmp -git clone $SERVER_REPOSITORY_GIT_URL OCSNG_UNIX_SERVER -b $SERVER_REPOSITORY_BRANCH -cd OCSNG_UNIX_SERVER/ -git clone $OCSREPORTS_REPOSITORY_GIT_URL ocsreports -b $OCSREPORTS_REPOSITORY_BRANCH -cd ocsreports/ -composer install -cd /tmp/OCSNG_UNIX_SERVER - -# Create all directories -mkdir -p ${OCS_WEBCONSOLE_DIR} -mkdir -p $OCS_LOG_DIR -mkdir -p $OCS_PERLEXT_DIR/Apache/Ocsinventory/Plugins -mkdir -p $OCS_PLUGINSEXT_DIR -mkdir -p $OCS_VARLIB_DIR/download -mkdir -p $OCS_VARLIB_DIR/ipd -mkdir -p $OCS_VARLIB_DIR/logs -mkdir -p $OCS_VARLIB_DIR/scripts -mkdir -p $OCS_VARLIB_DIR/snmp - -# Server compilation -cd Apache -perl Makefile.PL -make -make install -cd .. - -cp -R Api/ $API_ROUTE - -# Webconsole -cp -R ocsreports/. ${OCS_WEBCONSOLE_DIR} - -# Configure z-ocsinventory-server file -cp /tmp/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} -sed -i 's/OCS_SSL_ENABLED/'"$OCS_SSL_ENABLED"'/g' ${SRV_CONF_FILE} -sed -i 's/OCS_SSL_KEY/'"${OCS_SSL_KEY//\//\\/}"'/g' ${SRV_CONF_FILE} -sed -i 's/OCS_SSL_CERT/'"${OCS_SSL_CERT//\//\\/}"'/g' ${SRV_CONF_FILE} -sed -i 's/OCS_SSL_CA/'"${OCS_SSL_CA//\//\\/}"'/g' ${SRV_CONF_FILE} -sed -i 's/OCS_SSL_COM_MODE/'"$OCS_SSL_COM_MODE"'/g' ${SRV_CONF_FILE} - -# Configure zz-ocsinventory-restapi file -if [ ! -f ${API_CONF_FILE} ]; then - cp /tmp/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/'"${API_ROUTE//\//\\/}"'/g' ${API_CONF_FILE} - sed -i 's/REST_API_LOADER_PATH/'"${API_ROUTE_LOADER//\//\\/}"'/g' ${API_CONF_FILE} -fi - -# Configure ocsinventory-reports file -cp /tmp/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//\//\\/}"'/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} - -# Generate dbconfig.inc.php -cp /tmp/dbconfig.inc.php ${OCS_WEBCONSOLE_DIR} -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} - -# Permissions -chown -R $APACHE_RUN_USER: $OCS_VARLIB_DIR -chown -R $APACHE_RUN_USER: $OCS_LOG_DIR -chown -R $APACHE_RUN_USER: ${OCS_WEBCONSOLE_DIR} - -# Enable conf -a2enconf ocsinventory-reports -a2enconf z-ocsinventory-server -a2enconf zz-ocsinventory-restapi - -# Apache start -if [ ! -d "$APACHE_RUN_DIR" ]; then - mkdir "$APACHE_RUN_DIR" - chown $APACHE_RUN_USER:$APACHE_RUN_GROUP "$APACHE_RUN_DIR" -fi -if [ -f "$APACHE_PID_FILE" ]; then - rm "$APACHE_PID_FILE" -fi - -/usr/sbin/apache2 -DFOREGROUND