# 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_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 INIT_SHELL='#!/bin/bash \n\ \n\ function log() { echo "$(date --rfc-3339=ns) Init: $*" | tee -a '${SERVER_LOG_INIT_FILE}'; } \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 DNSMASQ='#!/bin/bash \n\ \n\ if [[ "${SERVER_DNS_ENABLED}" != "TRUE" ]] \n\ then \n\ mv /etc/supervisord.d/dnsmasq.ini /etc/supervisord.d/dnsmasq.ini.disabled \n\ else \n\ echo "" >> /etc/dnsmasq.conf \n\ echo "# Listen local address" >> /etc/dnsmasq.conf \n\ echo "interface=lo" >> /etc/dnsmasq.conf \n\ echo "bind-interfaces" >> /etc/dnsmasq.conf \n\ echo "" >> /etc/dnsmasq.conf \n\ echo "port=53 # DNS only" >> /etc/dnsmasq.conf \n\ echo "no-dhcp-interface= # disables DHCPv4" >> /etc/dnsmasq.conf \n\ echo "" >> /etc/dnsmasq.conf \n\ echo "# Forward local domains" >> /etc/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}" >> /etc/dnsmasq.conf \n\ done \n\ \n\ echo "" >> /etc/dnsmasq.conf \n\ echo "# Forward all other queries to default server" >> /etc/dnsmasq.conf \n\ echo "server=${SERVER_DNS_DEFAULT}" >> /etc/dnsmasq.conf \n\ \n\ cp /etc/resolv.conf /etc/resolv.conf.old \n\ \n\ echo "# Generated by DNSMasq init script" > /etc/resolv.conf \n\ echo "" >> /etc/resolv.conf \n\ echo "nameserver 127.0.0.1" >> /etc/resolv.conf \n\ echo "search ${SERVER_DNS_SEARCH}" >> /etc/resolv.conf \n\ \n\ fi' #----------------------------------------------------------------------------------------------------------------------- #----------------------------------------------------------------------------------------------------------------------- ARG SUPERVISORD='#!/bin/bash \n\ \n\ exec supervisord -c /etc/supervisord.conf' #----------------------------------------------------------------------------------------------------------------------- #----------------------------------------------------------------------------------------------------------------------- ARG CROND='#!/bin/bash \n\ \n\ if [[ "${SERVER_CROND_ENABLED}" != "TRUE" ]] \n\ then \n\ mv /etc/supervisord.d/crond.ini /etc/supervisord.d/crond.ini.disabled \n\ fi' #----------------------------------------------------------------------------------------------------------------------- #----------------------------------------------------------------------------------------------------------------------- ARG SUPERVISORD_INI='[inet_http_server] \n\ port=*:'${SERVER_PORT_SV_INT}' \n\ \n\ [supervisord] \n\ nodaemon=true \n\ childlogdir='${SERVER_LOG_SV_DIR}' \n\ user=root' #----------------------------------------------------------------------------------------------------------------------- #----------------------------------------------------------------------------------------------------------------------- ARG CROND_INI='[program:crond] \n\ command=crond -n' #----------------------------------------------------------------------------------------------------------------------- #----------------------------------------------------------------------------------------------------------------------- ARG DNSMASQ_INI='[program:dnsmasq] \n\ command=dnsmasq -k' #----------------------------------------------------------------------------------------------------------------------- RUN urpmi.update -a \ && urpmi --force dnsmasq myip supervisor \ && 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/ *$//' > /etc/supervisord.d/crond.ini \ && echo -e "${DNSMASQ_INI}" | sed -e "s/\`/'/g" -e 's/ *$//' > /etc/supervisord.d/dnsmasq.ini \ && echo -e "${SUPERVISORD_INI}" | sed -e "s/\`/'/g" -e 's/ *$//' > /etc/supervisord.d/supervisord.ini VOLUME ${SERVER_LOG_INIT_DIR} VOLUME ${SERVER_LOG_SV_DIR} EXPOSE ${SERVER_PORT_SV_INT} CMD [] ENTRYPOINT ["init.sh"]