#!/bin/sh #set -x #initial env for nginx server # #defined in package.sysapihttpd.Makefile NGINX_BIN=/usr/sbin/sysapihttpd ROMCONFDIR='/etc/sysapihttpd' NGINXCACHEDIR='/userdisk/sysapihttpd' # NGINXTMPDIR='/tmp/sysapihttpd/' # RUNCONFDIR='/tmp/sysapihttpdconf' PID_FILE='/var/run/sysapihttpd.pid' UPLOAD_DIR='/tmp/uploadfiles/' export NGINXDAEMONOFF='no' #log level: debug | info | notice | warn | error | crit export NGINXERRLOGLEVEL='notice' # . /lib/lib.scripthelper.sh RUNCONFDIR=$(strippath $RUNCONFDIR) NGINXRUNCONF=$(strippath ${RUNCONFDIR}/sysapihttpd.conf) #sed error_log to stderr if evn NGINXDAEMONOFF exist #sed daemon to off if evn NGINXDAEMONOFF exist error_log_init() { #return 0 for ok if [ "$NGINXDAEMONOFF" != 'yes' ] then return 0 fi # grep -iq '^daemon off' $NGINXRUNCONF if [ $? -ne 0 ] then sed -i -e 's/^daemon on/daemon off/g' $NGINXRUNCONF if [ $? -eq 0 ] then echo "INFO: set daemon off ok." else echo "ERROR: set daemon off failed, sysapihttpd no started." return 1 fi fi if [ -z "$NGINXERRLOGLEVEL" ] then NGINXERRLOGLEVEL='notice' fi case "$NGINXERRLOGLEVEL" in notice|warn|error|crit) echo "INFO: error log level: $NGINXERRLOGLEVEL" ;; debug|info) echo "WARNING: error log level is for debug: $NGINXERRLOGLEVEL" ;; *) echo "WARNING: unknow error log level: $NGINXERRLOGLEVEL" NGINXERRLOGLEVEL='notice' echo "INFO: error log level: $NGINXERRLOGLEVEL" ;; esac # grep -iq "^error_log stderr $NGINXERRLOGLEVEL" $NGINXRUNCONF if [ $? -ne 0 ] then # sed -i -e "s/^error_log.*/error_log stderr $NGINXERRLOGLEVEL;/g" $NGINXRUNCONF if [ $? -eq 0 ] then echo "INFO: set errorlog to stderr ok." else echo "ERROR: set errorlog to stderr failed, sysapihttpd no started." return 1 fi fi return 0 } # clean_mount(){ local mntdir mntdir="$1" test -z "$mntdir" && return 1 for aaa in 1 2 3 4 5 6 7 8 9 0 do mount | grep -q " $mntdir " test $? -ne 0 && break umount -f -r "$mntdir" sleep 1 done mount | grep -q " $mntdir " if [ $? -eq 0 ] then return 1 else return 0 fi } init_web_root(){ local rootdir rootinfo exitcode exitcode=0 rootdir="$1" rootinfo="$2" test -z "$rootdir" && return 1 test -z "$rootinfo" && rootinfo="static" mkdir -p ${rootdir}/ || exitcode=1 test -f ${rootdir}/favicon.ico || touch ${rootdir}/favicon.ico || exitcode=1 test -f ${rootdir}/index.html || echo "

sysapihttpd ${rootinfo} server

" > ${rootdir}/index.html || exitcode=1 test -f ${rootdir}/50x.html || echo "

sysapihttpd ${rootinfo} server, file no found or internal error

" > ${rootdir}/50x.html || exitcode=1 if [ $exitcode -ne 0 ] then echo "WARNING: web root $rootinfo($rootdir) initial failed." fi return $exitcode } init_nginx_dir(){ local datadir exitcode datadir="$1" test -z "$datadir" && return 1 exitcode=0 mkdir -p ${datadir} 2>&1 || exitcode=1 mkdir -p ${datadir}/temp || exitcode=1 mkdir -p ${datadir}/cache || exitcode=1 mkdir -p ${datadir}/log || exitcode=1 mkdir -p ${datadir}/body || exitcode=1 mkdir -p ${datadir}/proxy || exitcode=1 mkdir -p ${datadir}/fastcgi || exitcode=1 mkdir -p ${datadir}/run || exitcode=1 mkdir -p ${datadir}/lock || exitcode=1 if [ $exitcode -ne 0 ] then echo "WARNING: data root $datadir initial failed." fi return $exitcode } env_init(){ local exitcode NGINXTMPDIR=$(slaprtrim $NGINXTMPDIR) NGINXCACHEDIR=$(slaprtrim $NGINXCACHEDIR) mkdir -p $NGINXCACHEDIR >/dev/null 2>&1 elog "INFO: main conf: $NGINXRUNCONF" if ! mkdir -p $RUNCONFDIR; then elog "ERROR: mkdir -p $RUNCONFDIR failed: $(mkdir -p $RUNCONFDIR 2>&1)" exit 1 fi #conf sync rm -rf ${RUNCONFDIR} && mkdir -p ${RUNCONFDIR} && cp -a ${ROMCONFDIR}/* ${RUNCONFDIR}/ if [ $? -ne 0 ]; then elog "ERROR: sync configure failed: ${ROMCONFDIR} => ${RUNCONFDIR}" return 1 fi init_nginx_dir "$NGINXTMPDIR" || return 1 #echo "DEBUG: NGINX_CACHE=$NGINX_CACHE, NGINX_AUTOCACHE=$NGINX_AUTOCACHE" cachedirname=$(dirname $NGINXCACHEDIR) cachedev=$(mount | grep " on $NGINXCACHEDIR " | tail -n 1 | awk '{print $1}') test -z "$cachedev" && cachedev=$(mount | grep " on $cachedirname " | tail -n 1 | awk '{print $1}') if [ -z "$cachedev" ] then echo "INFO: no standalone file system for $NGINXCACHEDIR, using ram fs." if ! mount --bind ${NGINXTMPDIR}/ ${NGINXCACHEDIR}/; then echo "ERROR: mount --bind ${NGINXTMPDIR}/ ${NGINXCACHEDIR}/ failed." return 1 fi fi # init_nginx_dir "$NGINXCACHEDIR" # exitcode=0 #initial in loop rootlist='preload inforoot luaroot' for oneroot in $rootlist do [ -f "${NGINXCACHEDIR}/$oneroot" ] || init_web_root "${NGINXCACHEDIR}/$oneroot" "$oneroot" || exitcode=$? done if [ $exitcode -ne 0 ] then echo "ERROR: initial web root directory failed." return 1 fi # recreate upload dir rm -rf /tmp/uploadfiles/ && mkdir -p /tmp/uploadfiles/ && chmod 777 /tmp/uploadfiles/ chmod -R 777 /userdisk/sysapihttpd return $exitcode } gen_config() { local rrd=$(matool --method rr_data) local did=$(matool --method deviceID) local rr_path='/tmp/rr' local de_path="/tmp/de_zone_data" [ -d "$rr_path" ] || mkdir -p "$rr_path" local rr_body="$rr_path/xqsystmp" sed -i -e "s/\"RR_D_STUB\"/\"$rrd\"/g s/\"DEV_ID_STUB\"/\"$did\"/g s#\"DE_PATH_STUB\"#\"$de_path\"#g s#\"RR_PATH_STUB\"#\"$rr_body\"#g " $NGINXRUNCONF } if ! env_init; then elog "ERROR: env_init failed." exit 1 fi if ! error_log_init; then elog "ERROR: error_log_init failed." exit 1 fi # replace variable value if ! gen_config; then elog "ERROR: gen config error." exit 1 fi if ! $NGINX_BIN -c ${NGINXRUNCONF} -t &> /tmp/nginx_check.log; then elog "ERROR: config check error." exit 1 fi