#!/sbin/sh # # Copyright (c) 2011, 2013 Oracle and/or its affiliates. All rights reserved. # . /lib/svc/share/smf_include.sh APACHE_HOME=/usr/apache2/2.2 APACHE_ETC_ROOT=/etc/pkg/sysrepo APACHE_BIN=${APACHE_HOME}/bin/64 # # Calling $APACHE_BIN/apachectl would source $APACHE_BIN/envvars, which # in turn would source /etc/apache2/2.2/envvars, if it exists. # # We want to keep the system-repository service completely separate from # the site system configuration used by svc:/network/http:apache22 avoiding # /etc/apache2, which means we must avoid apachectl. # # In this method script, we call httpd directly instead, but as a result, # we also need to include the relevant contents of $APACHE_BIN/envvars - # setting $LD_LIBRARY_PATH as it does. # HTTPD=${APACHE_BIN}/httpd.worker LD_LIBRARY_PATH=${APACHE_HOME}/lib/64:${LD_LIBRARY_PATH} export LD_LIBRARY_PATH getprop() { PROPVAL="" svcprop -q -p $1 ${SMF_FMRI} if [ $? -eq 0 ] ; then PROPVAL=`svcprop -p $1 ${SMF_FMRI}` if [ "${PROPVAL}" = "\"\"" ] ; then PROPVAL="" fi return fi return } check_failure() { RESULT=$1 MESSAGE=$2 NON_FATAL=$3 if [ $RESULT -ne 0 ]; then echo $MESSAGE if [ -n "$NON_FATAL" ]; then return fi exit $SMF_EXIT_ERR_FATAL fi } run_sysrepo() { if [ "$http_proxy" ]; then SYSREPO_HTTP_PROXY="-w ${http_proxy}" fi if [ "$https_proxy" ]; then SYSREPO_HTTPS_PROXY="-W ${https_proxy}" fi /usr/lib/pkg.sysrepo \ -R / \ -c ${SYSREPO_CACHE_DIR} \ -h ${SYSREPO_HOST} \ -l ${SYSREPO_LOG_DIR} \ -p ${SYSREPO_PORT} \ -r ${SYSREPO_RUNTIME_DIR} \ -s ${SYSREPO_CACHE_MAX} \ -t ${SYSREPO_TEMPLATE_DIR} \ ${SYSREPO_HTTP_PROXY} \ ${SYSREPO_HTTPS_PROXY} check_failure $? "pkg.sysrepo: failed to create Apache configuration" } run_htcacheclean() { # if we dropped to maintenance and are in the process of clearing # that state, we may have a htcacheclean processes hanging around. kill_htcacheclean if [ "${SYSREPO_CACHE_DIR}" != "None" ] && \ [ "${SYSREPO_CACHE_DIR}" != "memory" ]; then # Start a cache cleaning daemon, scanning every 2 weeks, # being intelligent about only running if the cache has changed, # limiting the cache to ${SYSREPO_CACHE_MAX} megabytes, being # nice about scheduling and removing empty directories if # necessary. interval=$((60 * 24 * 14)) /usr/apache2/2.2/bin/htcacheclean \ -d${interval} -i -l ${SYSREPO_CACHE_MAX}M -n \ -p ${SYSREPO_CACHE_DIR} \ -P ${SYSREPO_CACHE_DIR}/../sysrepo_htcacheclean.pid \ -t check_failure $? "htcacheclean failed to run cleanly" fi } kill_htcacheclean() { if [ -f ${SYSREPO_CACHE_DIR}/../sysrepo_htcacheclean.pid ]; then PID=$(< ${SYSREPO_CACHE_DIR}/../sysrepo_htcacheclean.pid) /usr/bin/kill -TERM $PID check_failure $? "failed to kill htcacheclean process $PID" \ "not_fatal" fi } getprop config/host if [ "${PROPVAL}" != "" ] ; then SYSREPO_HOST=${PROPVAL} fi getprop config/port if [ "${PROPVAL}" != "" ] ; then SYSREPO_PORT=${PROPVAL} fi getprop config/log_dir if [ "${PROPVAL}" != "" ] ; then SYSREPO_LOG_DIR=${PROPVAL} fi getprop config/template_dir if [ "${PROPVAL}" != "" ] ; then SYSREPO_TEMPLATE_DIR=${PROPVAL} fi getprop config/runtime_dir if [ "${PROPVAL}" != "" ] ; then SYSREPO_RUNTIME_DIR=${PROPVAL} fi getprop config/cache_dir if [ "${PROPVAL}" != "" ] ; then SYSREPO_CACHE_DIR=${PROPVAL} fi getprop config/cache_max if [ "${PROPVAL}" != "" ] ; then SYSREPO_CACHE_MAX=${PROPVAL} fi getprop config/http_proxy if [ "${PROPVAL}" != "" ] ; then http_proxy=${PROPVAL} fi getprop config/https_proxy if [ "${PROPVAL}" != "" ] ; then https_proxy=${PROPVAL} fi case "$1" in "start") cmd="start" run_sysrepo # drop privileges now that we've written our configuration /usr/bin/ppriv -s E=basic,net_privaddr $$ run_htcacheclean ${HTTPD} -f ${SYSREPO_RUNTIME_DIR}/sysrepo_httpd.conf \ ${STARTUP_OPTIONS} -k ${cmd} 2>&1 check_failure $? "Server failed to start. Check the SMF service log or the error log at ${SYSREPO_LOG_DIR}/error_log for more information, if any." ;; "refresh") cmd="graceful" run_sysrepo # drop privileges now that we've written our configuration /usr/bin/ppriv -s E=basic,net_privaddr $$ /usr/bin/pkill -USR1 -ox zoneproxyd kill_htcacheclean run_htcacheclean ${HTTPD} -f ${SYSREPO_RUNTIME_DIR}/sysrepo_httpd.conf \ ${STARTUP_OPTIONS} -k ${cmd} 2>&1 check_failure $? "Server failed to refresh. Check the SMF service log or the error log at ${SYSREPO_LOG_DIR}/error_log for more information, if any." ;; "stop") cmd="stop" kill_htcacheclean ${HTTPD} -f ${SYSREPO_RUNTIME_DIR}/sysrepo_httpd.conf \ ${STARTUP_OPTIONS} -k ${cmd} 2>&1 check_failure $? "Server failed to stop. Check the SMF service log or the error log at ${SYSREPO_LOG_DIR}/error_log for more information, if any." ;; *) echo "Usage: $0 {start|stop|refresh}" exit $SMF_EXIT_ERR_CONFIG ;; esac exit $SMF_EXIT_OK