diff --git a/Dockerfile b/Dockerfile index 95bf154..634f631 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,5 +15,7 @@ VOLUME /var/gopher COPY --from=builder /xinetd/xinetd /usr/sbin COPY --from=builder /gophernicus/gophernicus /usr/sbin COPY xinetd.conf /etc/xinetd.conf +COPY init.sh /init.sh +RUN mkdir -p /etc/xinetd.d/ -CMD ["/usr/sbin/xinetd", "-dontfork"] +CMD ["/init.sh"] diff --git a/init.sh b/init.sh new file mode 100755 index 0000000..dfcb98d --- /dev/null +++ b/init.sh @@ -0,0 +1,181 @@ +#!/bin/sh + +SERVER_ARGS="" + +# Defaults +PORT=${PORT:-70} +LOG_FILE=${LOG_FILE:-/var/log/gophernicus.log} +GOPHER_ROOT=${GOPHER_ROOT:-/var/gopher} + +# Arguments +if test ${PORT} +then + SERVER_ARGS="${SERVER_ARGS} -p ${PORT}" +fi + +if test ${TLS_PORT} +then + SERVER_ARGS="${SERVER_ARGS} -T ${TLS_PORT}" +fi + +if test ${GOPHER_ROOT} +then + SERVER_ARGS="${SERVER_ARGS} -r ${GOPHER_ROOT}" +fi + +if test ${DEFAULT_FILE_TYPE} +then + SERVER_ARGS="${SERVER_ARGS} -t ${DEFAULT_FILE_TYPE}" +fi + +if test ${GOPHER_MAPFILE} +then + SERVER_ARGS="${SERVER_ARGS} -g ${GOPHER_MAPFILE}" +fi + +if test ${GOPHER_TAGFILE} +then + SERVER_ARGS="${SERVER_ARGS} -a ${GOPHER_TAGFILE}" +fi + +if test ${CGI_DIR} +then + SERVER_ARGS="${SERVER_ARGS} -c ${CGI_DIR}" +fi + +if test ${USER_DIR} +then + SERVER_ARGS="${SERVER_ARGS} -u ${USER_DIR}" +fi + +if test ${LOG_FILE} +then + SERVER_ARGS="${SERVER_ARGS} -l ${LOG_FILE}" + mkdir -p "$(dirname ${LOG_FILE})" + touch "${LOG_FILE}" + chown nobody.nobody "${LOG_FILE}" +fi + +if test ${DEFAULT_WIDTH} +then + SERVER_ARGS="${SERVER_ARGS} -w ${DEFAULT_WIDTH}" +fi + +if test ${DEFAULT_CHARSET} +then + SERVER_ARGS="${SERVER_ARGS} -o ${DEFAULT_CHARSET}" +fi + +if test ${SESSION_TIMEOUT} +then + SERVER_ARGS="${SERVER_ARGS} -s ${SESSION_TIMEOUT}" +fi + +if test ${MAX_HITS} +then + SERVER_ARGS="${SERVER_ARGS} -i ${MAX_HITS}" +fi + +if test ${MAX_TRANSFER_KB} +then + SERVER_ARGS="${SERVER_ARGS} -k ${MAX_TRANSFER_KB}" +fi + +if test ${FILTER_DIR} +then + SERVER_ARGS="${SERVER_ARGS} -f ${FILTER_DIR}" +fi + +# Booleans +if test ${DISABLE_VHOSTS} +then + SERVER_ARGS="${SERVER_ARGS} -nv" +fi + +if test ${DISABLE_PARENT_DIR_LINKS} +then + SERVER_ARGS="${SERVER_ARGS} -nl" +fi + +if test ${DISABLE_HEADER} +then + SERVER_ARGS="${SERVER_ARGS} -nh" +fi + +if test ${DISABLE_FOOTER} +then + SERVER_ARGS="${SERVER_ARGS} -nf" +fi + +if test ${DISABLE_MENU_METADATA} +then + SERVER_ARGS="${SERVER_ARGS} -nd" +fi + +if test ${DISABLE_CONTENT_DETECTION} +then + SERVER_ARGS+"${SERVER_ARGS} -nc" +fi + +if test ${DISABLE_CHARSET_CONV} +then + SERVER_ARGS+"${SERVER_ARGS} -no" +fi + +if test ${DISABLE_QUERY_STRINGS} +then + SERVER_ARGS+"${SERVER_ARGS} -nq" +fi + +if test ${DISABLE_SYSLOG} +then + SERVER_ARGS+"${SERVER_ARGS} -ns" +fi + +if test ${DISABLE_AUTOGEN_CAPS} +then + SERVER_ARGS+"${SERVER_ARGS} -na" +fi + +if test ${DISABLE_SERVER_STATUS} +then + SERVER_ARGS+"${SERVER_ARGS} -nt" +fi + +if test ${DISABLE_HAPROXY} +then + SERVER_ARGS+"${SERVER_ARGS} -np" +fi + +if test ${DISABLE_EXECUTABLES} +then + SERVER_ARGS+"${SERVER_ARGS} -nx" +fi + +if test ${DISABLE_USERDIRS} +then + SERVER_ARGS+"${SERVER_ARGS} -nu" +fi + +# Write out our gophernicus xinetd configuration with all our server arguments +cat << EOF > /etc/xinetd.d/gophernicus +# default: on +# description: Gophernicus - Modern full-featured gopher server +service gopher +{ + socket_type = stream + protocol = tcp + port = ${PORT} + wait = no + user = nobody + server = /usr/sbin/gophernicus + server_args = ${SERVER_ARGS} + disable = no +} +EOF + +# Kick off xinetd to start serving gophernicus +/usr/sbin/xinetd + +# Give us some logs on stdout +tail -f ${LOG_FILE} diff --git a/xinetd.conf b/xinetd.conf index 40fe309..17bfc8f 100644 --- a/xinetd.conf +++ b/xinetd.conf @@ -6,16 +6,4 @@ defaults log_on_failure = HOST } -# default: on -# description: Gophernicus - Modern full-featured gopher server -service gopher -{ - socket_type = stream - protocol = tcp - port = 70 - wait = no - user = nobody - server = /usr/sbin/gophernicus - server_args = -r /var/gopher - disable = no -} +includedir /etc/xinetd.d/