# Rx3-Docker/Server Docker Image #------------------------------------------------------------------------------- ARG IMG_FROM_URL="rx3-docker/base:latest" FROM ${IMG_FROM_URL} ARG IMG_NAME ARG IMG_NAME_FULL ARG IMG_VERSION ARG IMG_URL ARG IMG_MAINTAINER LABEL org.rx3.${IMG_NAME}.name=${IMG_NAME_FULL} LABEL org.rx3.${IMG_NAME}.version=${IMG_VERSION} LABEL org.rx3.${IMG_NAME}.maintainer=${IMG_MAINTAINER} LABEL maintainer=${IMG_MAINTAINER} ARG SERVER_LOG_INIT_DIR ARG SERVER_LOG_SV_DIR ARG SERVER_PORT_SV_INT ARG SERVER_LOG_INIT_FILE=${SERVER_LOG_INIT_DIR}/init.log ARG SERVER_CROND_INI=/etc/supervisord.d/crond.ini ARG SERVER_DNSMASQ_INI=/etc/supervisord.d/dnsmasq.ini ARG SERVER_DNSMASQ_CONF=/etc/dnsmasq.conf ARG SERVER_RESOLV_CONF=/etc/resolv.conf ARG SERVER_SV_INI=/etc/supervisord.d/supervisord.ini ARG SERVER_SV_HTTPD_INI=/etc/supervisord.d/supervisord-httpd.ini ARG SERVER_SV_HTTPD_PAGE=/usr/lib/python3.10/site-packages/supervisor/ui/status.html ARG SERVER_SV_HTTPD_CSS=/usr/lib/python3.10/site-packages/supervisor/ui/stylesheets/supervisor.css #----------------------------------------------------------------------------------------------------------------------- ARG SERVER_SV_HTML_IMG_B='status" />' #----------------------------------------------------------------------------------------------------------------------- ARG SERVER_SV_HTML_IMG_A='status"/> \n\
IMG_NAME_VERSION \n\
\n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ IMG_STACK_LOG \n\ \n\
IdDateTimeRegistryImageTag
\n\
\n\
' \n\ #----------------------------------------------------------------------------------------------------------------------- #----------------------------------------------------------------------------------------------------------------------- ARG SERVER_SV_CSS_HEADER_B='repeat-x;' #----------------------------------------------------------------------------------------------------------------------- ARG SERVER_SV_CSS_HEADER_A='repeat-x; \n\ display: flex; \n\ align-items: center; \n\ justify-content: space-between; \n\ font-size: 14px; \n\ font-weight: bold; \n\ } \n\ \n\ \#isl { \n\ position: relative; \n\ display: inline-block; \n\ cursor: pointer; \n\ } \n\ \n\ \#isl-tab { \n\ visibility: hidden; \n\ width: fit-content; \n\ background: #00000000; \n\ color: white; \n\ padding: 2px; \n\ border-radius: 4px; \n\ position: absolute; \n\ z-index: 1; \n\ top: 100%; \n\ left: 50%; \n\ transform: translateX(-50%); \n\ opacity: 0; \n\ transition: opacity 0.3s; \n\ } \n\ \n\ \#isl:hover #isl-tab { \n\ visibility: visible; \n\ opacity: 1; \n\ } \n\ \n\ \#isl-tab table td, \n\ \#isl-tab table th { \n\ white-space: nowrap; \n\ padding: 4px 8px; \n\ border: 1px solid #666; \n\ font-size: 12px; \n\ } \n\ \n\ \#isl-tab table th { \n\ background: #333; \n\ } \n\ \n\ \#isl-tab table { \n\ border-collapse: collapse; \n\ width: fit-content; \n\ max-width: 500px; \n\ overflow-x: auto; \n\ ' #----------------------------------------------------------------------------------------------------------------------- #----------------------------------------------------------------------------------------------------------------------- ARG INIT_SHELL='#!/bin/bash \n\ \n\ . /etc/profile.d/rx3.sh \n\ \n\ \n\ log() { echo "$(date --rfc-3339=ns) Init: $*" | tee -a '${SERVER_LOG_INIT_FILE}'; } \n\ \n\ \n\ log "Starting" \n\ \n\ for pgm in /etc/rcD.d/* \n\ do \n\ if [[ -r ${pgm} ]] \n\ then \n\ if [[ ${pgm##*/} == S99* ]] \n\ then \n\ log "Executing: [${pgm##*/}]" \n\ log "Completed" \n\ exec ${pgm} \n\ else \n\ log "Calling: [${pgm##*/}]" \n\ ${pgm} \n\ fi \n\ fi \n\ done' #----------------------------------------------------------------------------------------------------------------------- #----------------------------------------------------------------------------------------------------------------------- ARG CROND='#!/bin/bash \n\ \n\ \n\ if [[ "${SERVER_CROND_ENABLED}" != "TRUE" ]] \n\ then \n\ file_enable "'${SERVER_CROND_INI}'" FALSE \n\ else \n\ file_enable "'${SERVER_CROND_INI}'" TRUE \n\ fi' #----------------------------------------------------------------------------------------------------------------------- #----------------------------------------------------------------------------------------------------------------------- ARG DNSMASQ='#!/bin/bash \n\ \n\ \n\ if [[ "${SERVER_DNS_ENABLED}" != "TRUE" ]] \n\ then \n\ file_enable "'${SERVER_DNSMASQ_INI}'" FALSE \n\ else \n\ file_enable "'${SERVER_DNSMASQ_INI}'" TRUE \n\ \n\ cp '${SERVER_DNSMASQ_CONF}'.dist '${SERVER_DNSMASQ_CONF}' \n\ \n\ echo "" >> '${SERVER_DNSMASQ_CONF}' \n\ echo "# Listen local address" >> '${SERVER_DNSMASQ_CONF}' \n\ echo "interface=lo" >> '${SERVER_DNSMASQ_CONF}' \n\ echo "bind-interfaces" >> '${SERVER_DNSMASQ_CONF}' \n\ echo "" >> '${SERVER_DNSMASQ_CONF}' \n\ echo "port=53 # DNS only" >> '${SERVER_DNSMASQ_CONF}' \n\ echo "no-dhcp-interface= # disables DHCPv4" >> '${SERVER_DNSMASQ_CONF}' \n\ echo "" >> '${SERVER_DNSMASQ_CONF}' \n\ echo "# Forward local domains" >> '${SERVER_DNSMASQ_CONF}' \n\ \n\ for map in ${SERVER_DNS_MAP} \n\ do \n\ OIFS=$IFS \n\ IFS=":" \n\ set ${map} \n\ IFS=$OIFS \n\ \n\ domain="$1" \n\ server="$2" \n\ \n\ echo "server=/${domain}/${server}" >> '${SERVER_DNSMASQ_CONF}' \n\ done \n\ \n\ echo "" >> '${SERVER_DNSMASQ_CONF}' \n\ echo "# Forward all other queries to default server" >> '${SERVER_DNSMASQ_CONF}' \n\ echo "server=${SERVER_DNS_DEFAULT}" >> '${SERVER_DNSMASQ_CONF}' \n\ \n\ cp /etc/resolv.conf /etc/resolv.conf.old \n\ \n\ echo "# Generated by DNSMasq init script" > '${SERVER_RESOLV_CONF}' \n\ echo "" >> '${SERVER_RESOLV_CONF}' \n\ echo "nameserver 127.0.0.1" >> '${SERVER_RESOLV_CONF}' \n\ echo "search ${SERVER_DNS_SEARCH}" >> '${SERVER_RESOLV_CONF}' \n\ \n\ fi' #----------------------------------------------------------------------------------------------------------------------- #----------------------------------------------------------------------------------------------------------------------- ARG SUPERVISORD='#!/bin/bash \n\ \n\ if [[ "${SERVER_SV_HTTPD_ENABLED}" == "FALSE" ]] \n\ then \n\ file_enable "'${SERVER_SV_HTTPD_INI}'" FALSE \n\ else \n\ file_enable "'${SERVER_SV_HTTPD_INI}'" TRUE \n\ fi \n\ \n\ cp '${SERVER_SV_HTTPD_CSS}.ref' '${SERVER_SV_HTTPD_CSS}' \n\ cp '${SERVER_SV_HTTPD_PAGE}.ref' '${SERVER_SV_HTTPD_PAGE}' \n\ sed -i -e "s%IMG_NAME_VERSION%$(isl_top -i)%" '${SERVER_SV_HTTPD_PAGE}' \n\ sed -i -e "s%IMG_STACK_LOG%$(isl_html_dump -i)%" '${SERVER_SV_HTTPD_PAGE}' \n\ \n\ exec supervisord -c /etc/supervisord.conf' #----------------------------------------------------------------------------------------------------------------------- #----------------------------------------------------------------------------------------------------------------------- ARG CROND_INI='[program:crond] \n\ command=crond -n' #----------------------------------------------------------------------------------------------------------------------- #----------------------------------------------------------------------------------------------------------------------- ARG DNSMASQ_INI='[program:dnsmasq] \n\ command=dnsmasq -k' #----------------------------------------------------------------------------------------------------------------------- #----------------------------------------------------------------------------------------------------------------------- ARG SUPERVISORD_INI='[supervisord] \n\ nodaemon=true \n\ childlogdir='${SERVER_LOG_SV_DIR}' \n\ user=root' #----------------------------------------------------------------------------------------------------------------------- #----------------------------------------------------------------------------------------------------------------------- ARG SUPERVISORD_HTTPD_INI='[inet_http_server] \n\ port=*:'${SERVER_PORT_SV_INT} #----------------------------------------------------------------------------------------------------------------------- RUN . /etc/profile.d/rx3.sh && isl_add ${IMG_URL} \ && urpmi.update -a \ && urpmi --force dnsmasq myip supervisor \ && rm -f /var/log/README \ && echo -e "${INIT_SHELL}" | sed -e "s/\`/'/g" -e 's/ *$//' > /usr/local/sbin/init.sh \ && chmod a+x /usr/local/sbin/init.sh \ && mkdir /etc/rc.d/rcD.d \ && ln -s /etc/rc.d/rcD.d /etc \ && mkdir "${SERVER_LOG_INIT_DIR}" \ && echo -e "${CROND}" | sed -e "s/\`/'/g" -e 's/ *$//' > /etc/init.d/crond \ && echo -e "${DNSMASQ}" | sed -e "s/\`/'/g" -e 's/ *$//' > /etc/init.d/dnsmasq \ && echo -e "${SUPERVISORD}" | sed -e "s/\`/'/g" -e 's/ *$//' > /etc/init.d/supervisord \ && chmod a+x /etc/init.d/crond \ && chmod a+x /etc/init.d/dnsmasq \ && chmod a+x /etc/init.d/supervisord \ && ln -s /etc/init.d/crond /etc/rcD.d/S60crond \ && ln -s /etc/init.d/dnsmasq /etc/rcD.d/S65dnsmasq \ && ln -s /etc/init.d/supervisord /etc/rcD.d/S99supervisord \ && echo -e "${CROND_INI}" | sed -e "s/\`/'/g" -e 's/ *$//' > ${SERVER_CROND_INI} \ && echo -e "${DNSMASQ_INI}" | sed -e "s/\`/'/g" -e 's/ *$//' > ${SERVER_DNSMASQ_INI} \ && echo -e "${SUPERVISORD_INI}" | sed -e "s/\`/'/g" -e 's/ *$//' > ${SERVER_SV_INI} \ && echo -e "${SUPERVISORD_HTTPD_INI}" | sed -e "s/\`/'/g" -e 's/ *$//' > ${SERVER_SV_HTTPD_INI} \ && mv "${SERVER_DNSMASQ_CONF}" "${SERVER_DNSMASQ_CONF}.dist" \ && mv "${SERVER_SV_HTTPD_PAGE}" "${SERVER_SV_HTTPD_PAGE}.ref" \ && sed -i -e "s%${SERVER_SV_HTML_IMG_B}%${SERVER_SV_HTML_IMG_A}%" "${SERVER_SV_HTTPD_PAGE}.ref" \ && mv "${SERVER_SV_HTTPD_CSS}" "${SERVER_SV_HTTPD_CSS}.ref" \ && sed -i -e "s/${SERVER_SV_CSS_HEADER_B}/${SERVER_SV_CSS_HEADER_A}/" "${SERVER_SV_HTTPD_CSS}.ref" VOLUME ${SERVER_LOG_INIT_DIR} VOLUME ${SERVER_LOG_SV_DIR} EXPOSE ${SERVER_PORT_SV_INT} CMD [] ENTRYPOINT ["init.sh"]