summaryrefslogtreecommitdiff
path: root/localwebsearch
blob: 7c9126676cfe18fe73e4950d2d2d3b64e3663472 (plain)
  1. #!/bin/bash
  2. # /etc/cron.daily/localwebsearch: Websearch maintenance script
  3. # Written by Jonas Smedegaard <dr@jones.dk>
  4. # halt on errors (NB! this is a bashism...)
  5. set -e
  6. function usage() {
  7. echo "Usage: $(basename $0) initprep|init|update|ignore <website> [<website>...]"
  8. echo " If no website is given, all are attempted"
  9. echo " Tip: Automagically runs when symlinked to /etc/cron.{daily,weekly,monthly}/"
  10. exit 1
  11. }
  12. function exit1() {
  13. echo "Error: $1"
  14. echo "Exiting..."
  15. exit 1
  16. }
  17. # automagically configure when run from cron dirs
  18. case $(dirname $0) in
  19. /etc/cron.daily)
  20. stamp=update
  21. ;;
  22. /etc/cron.weekly)
  23. stamp=initprep
  24. ;;
  25. /etc/cron.monthly)
  26. stamp=ignore
  27. ;;
  28. *)
  29. stamp=$1
  30. shift || usage
  31. ;;
  32. esac
  33. case "$stamp" in
  34. initprep|init|update|ignore)
  35. ;;
  36. *)
  37. usage
  38. ;;
  39. esac
  40. if [ "$stamp" = "ignore" ]; then
  41. [ $DEBUG ] && echo "Asked to ignore - exiting silently..."
  42. exit 0
  43. fi
  44. WEBROOT=/var/www
  45. LOGROOT=/var/log/apache
  46. # Options: $1=LOGROOT, $2=WEBROOT, $3=WEBSITE
  47. function searchdir() { echo $2/VIRTUAL/search.$(dnsdomainname)/www/$3; }
  48. function webdirs() { find /etc/htdig -type f -name '*.conf' ! -name 'htdig.conf' -exec basename '{}' .conf \; ; }
  49. #function host() { cat $2/VIRTUAL/$3/hostname || exit1 "Unable to get hostname for virtual host."; }
  50. #function domain() { cat $2/VIRTUAL/$3/domainname || exit1 "Unable to get domainname for virtual host."; }
  51. function htdig_cfg() { echo /etc/htdig/$3.conf; }
  52. function pre_init() { true; }
  53. function post_init() { true; }
  54. function pre_update() { true; }
  55. function post_update() { true; }
  56. # The above can be overridden
  57. LOCALCONFIG=/etc/local/websearch.conf
  58. . $LOCALCONFIG || exit1 "Unable to read local config file $LOCALCONFIG"
  59. # variables and functions too boring to be configurable
  60. HTDIG_BIN="/usr/bin/rundig"
  61. HTDIG_REAL_BIN="/usr/local/sbin/localrundig" #TODO: Convince Debian maintainer to change official rundig
  62. #function awstats_setlog() { sed -e "s!^\(LogFile=\).*\$!\\1$2!" $1 > $1.tmp; mv $1.tmp $1; }
  63. # Webiste/independent checks
  64. test -d $WEBROOT || exit1 "Webroot \"$WEBROOT\" doesn't exist"
  65. test -d $LOGROOT || exit1 "Logroot \"$LOGROOT\" doesn't exist"
  66. # Index searches for websites from stdin or all default sites
  67. WEBSITES=$@
  68. if [ "$WEBSITES" = "" ]; then
  69. WEBSITES=$(webdirs $LOGROOT $WEBROOT $WEBSITE)
  70. fi
  71. for WEBSITE in $WEBSITES; do
  72. SEARCHDIR=$(searchdir $LOGROOT $WEBROOT $WEBSITE) || exit1 "Unable to resolve SEARCHDIR."
  73. # FIXME test -d $SEARCHDIR/.. || exit1 "Directory above SEARCHDIR doesn't exist."
  74. HTDIG_CFG=$(htdig_cfg $LOGROOT $WEBROOT $WEBSITE) || exit1 "Unable to resolve HTDIG_CFG."
  75. if [ $stamp = "init" ]; then
  76. [ $DEBUG ] && echo "Execute $WEBSITE PRE_INIT"
  77. pre_init $LOGROOT $WEBROOT $WEBSITE || exit1 "Error executing PRE_INIT."
  78. fi
  79. if [ $stamp = "update" ]; then
  80. [ $DEBUG ] && echo "Execute $WEBSITE PRE_UPDATE"
  81. pre_update $LOGROOT $WEBROOT $WEBSITE || exit1 "Error executing PRE_UPDATE."
  82. fi
  83. # HOST=$(host $LOGROOT $WEBROOT $WEBSITE) || exit1 "Unable to get hostname for virtual host."
  84. # DOMAIN=$(domain $LOGROOT $WEBROOT $WEBSITE) || exit1 "Unable to get domainname for virtual host."
  85. # HTDIG_OPTIONS="-a" #TODO: This seems to always init currently
  86. HTDIG_OPTIONS=""
  87. [ "$WEBSITE" != "htdig" ] && HTDIG_OPTIONS="$HTDIG_OPTIONS -c $HTDIG_CFG"
  88. if [ $DEBUG ]; then
  89. echo "Indexing search for $WEBSITE in $SEARCHDIR:"
  90. HTDIG_OPTIONS="$HTDIG_OPTIONS -v -s"
  91. else
  92. HTDIG_OPTIONS="$HTDIG_OPTIONS"
  93. fi
  94. if [ "$stamp" = "init" ]; then
  95. HTDIG_OPTIONS="$HTDIG_OPTIONS -i"
  96. fi
  97. if ! lockfile-create /var/run/localwebsearch_$WEBSITE; then
  98. # Another htdig indexing cronjob is already running
  99. [ $DEBUG ] && echo "Another $WEBSITE indexing is already running. Exit silently..."
  100. exit 0
  101. fi
  102. lockfile-touch /var/run/localwebsearch_$WEBSITE &
  103. # Save the PID of the lockfile-touch process
  104. BADGER="$!"
  105. if [ "$stamp" = "initprep" ]; then
  106. [ $DEBUG ] && echo "Mark next run as a full-scale, and exit silently..."
  107. touch /etc/htdig/full_refresh_$WEBSITE
  108. exit 0
  109. fi
  110. # TODO
  111. if [ $stamp = "initXXX" ]; then
  112. [ $DEBUG ] && echo "$WEBSITE: Purge SEARCHDIR"
  113. rm -rf $SEARCHDIR
  114. mkdir $SEARCHDIR
  115. if [ -x $HTDIG_BIN ]; then
  116. [ $DEBUG ] && echo "$WEBSITE: Create/update htdig config"
  117. echo "\
  118. # NB! This file is automatically generated. Do not edit directly!
  119. # Instead, put additions/overrides in $HTDIG_CFG.local
  120. HOSTNAME $HOST.$DOMAIN
  121. HOSTURL http://$HOST.$DOMAIN/
  122. BASEURL http://$HOST.$DOMAIN
  123. LANGUAGE DANISH
  124. "\
  125. > $HTDIG_CFG
  126. [ -s $HTDIG_CFG.local ] && cat $HTDIG_CFG.local >> $HTDIG_CFG
  127. mkdir $SEARCHDIR/htdig
  128. fi
  129. fi
  130. if [ $stamp = "init" -o $stamp = "update" ]; then
  131. if [ -x $HTDIG_BIN -a -x $HTDIG_REAL_BIN ]; then
  132. export TMPDIR=/tmp
  133. [ $DEBUG ] && echo "$WEBSITE: Update htdig search"
  134. if [ $stamp = "init" -o -f /etc/htdig/full_refresh_$WEBSITE ]; then
  135. $HTDIG_REAL_BIN $HTDIG_OPTIONS
  136. rm -f /etc/htdig/full_refresh_$WEBSITE
  137. else
  138. $HTDIG_REAL_BIN $HTDIG_OPTIONS
  139. fi
  140. fi
  141. fi
  142. if [ $stamp = "init" ]; then
  143. [ $DEBUG ] && echo "Execute $WEBSITE POST_INIT"
  144. post_init $LOGROOT $WEBROOT $WEBSITE || exit1 "Error executing POST_INIT."
  145. fi
  146. if [ $stamp = "update" ]; then
  147. [ $DEBUG ] && echo "Execute $WEBSITE POST_UPDATE"
  148. post_update $LOGROOT $WEBROOT $WEBSITE || exit1 "Error executing POST_UPDATE."
  149. fi
  150. kill "${BADGER}"
  151. lockfile-remove /var/run/localwebsearch_$WEBSITE
  152. done