# # # rename "prunegraphs.sh" # to "webhost.cronjob" # # add_file "install" # content [efc732f149a62783cdcf580bcda82e9c4f3f3e95] # # add_file "webhost.initscript" # content [ef28a834cb3ca48d335c20799d2ad6c417424d92] # # patch "Makefile" # from [850c7968decf0b2258ee74dc08586a508a261fcc] # to [d3cb2a0616784e004734d1d6d752de658b84e8b1] # # patch "hostconfig.dist" # from [094160cadf511eb392c4949f4b846735a0a87025] # to [a812fb92fb1ca25401d5f8fe5dc0eab16b1339aa] # # patch "skel/monotonerc" # from [994e7d6e0fa4a91b1f507aefffe0af1d1f4b5d5f] # to [217345c5986195961026ca5651d142198aca7713] # # patch "webhost.cronjob" # from [963f5d8c8baacab0f48d86a4c193402f3a101736] # to [839760463ef4f93e3f346df0559805db3506842a] # # patch "www/common-ctrl.php" # from [5cdf8502620216366fe9a4fbf60f228ef2e4414b] # to [3d09cb8656535448914e20f5507f887fad56d0ee] # # patch "www/common.php" # from [4dfe605e35ec8b2f139630192a65b7c5fe7a4a17] # to [8d94d25c7e2f62e7cd3d46b647093c3da37e640b] # # patch "www/proj-ctrl.php" # from [5e750a6316c4026612c6e578c8f604470394b702] # to [7319fefa33688dd5f130b786e5250666381c7c65] # # patch "www/viewmtn/config.py.example" # from [ddef7b5a01b552ba3587efc5cc80feffa2762f8c] # to [1cfb121ecb649788bc90ca3325bc20210d17c37d] # # patch "www/viewmtn/html.py" # from [2fcf572f2cd0f490e360872b35d663f057ec0e89] # to [9f3d01d3c6e17415fee187fd6aea8f415a4da6f3] # # set "webhost.initscript" # attr "mtn:execute" # value "true" # ============================================================ --- install efc732f149a62783cdcf580bcda82e9c4f3f3e95 +++ install efc732f149a62783cdcf580bcda82e9c4f3f3e95 @@ -0,0 +1,60 @@ +#!/bin/sh + +WEBUSER=www-data +USHERUSER=www-data +NAME=webhost +CONFDIR=/etc/$NAME +PROJDIR=/var/lib/$NAME/projects +GRAPHDIR=/var/cache/$NAME/graphs +WWWDIR=/var/www/$NAME +BINDIR=/usr/bin + +HOSTNAME=$(hostname) + +do_install() { + umask 002 + mkdir -p $PROJDIR/ + mkdir -p $GRAPHDIR/ + cp -r www/ $WWWDIR/ + ln -s viewmtn/MochiKit/ $WWWDIR/MochiKit + ln -s $GRAPHDIR/ $WWWDIR/viewmtn/graph + # the webserver needs to be able to link to certain files + chown $WEBUSER $WWWDIR/project.php + chown $WEBUSER $WWWDIR/admin.php + chown $WEBUSER $WWWDIR/viewmtn/ + # the webserver needs to be able to write to certain dirs + chown $WEBUSER $GRAPHDIR/ $WWWDIR/viewmtn/graph + chown $WEBUSER $PROJDIR/ $WWWDIR/projects/ + + make usher.webhost + cp usher.webhost $BINDIR/ + cp dbrotate.sh $BINDIR/update-viewmtn-db.sh + + if ! [ -d /etc/$NAME ]; then + mkdir $CONFDIR/ + cp hostconfig.dist $CONFDIR/hostconfig + cp skel/monotonerc $CONFDIR/ + sed -i "s!DBROTATE!$BINDIR/update-viewmtn-db.sh!" $CONFDIR/monotonerc + cp -r skel/keys $CONFDIR/ + sed -i "s!HOSTNAME!$HOSTNAME!" $CONFDIR/hostconfig + sed -i "s!BASE_URL!http://$HOSTNAME/$NAME/!" $CONFDIR/hostconfig + sed -i "s!PROJECT_DIR!$PROJDIR!" $CONFDIR/hostconfig + sed -i "s!GRAPH_DIR!$GRAPHDIR!" $CONFDIR/hostconfig + sed -i "s!WWW_DIR!$WWWDIR!" $CONFDIR/hostconfig + + cp webhost.initscript /etc/init.d/$NAME + sed -i "s!BINDIR!$BINDIR!" /etc/init.d/$NAME + sed -i "s!CONFDIR!$CONFDIR'!" /etc/init.d/$NAME + sed -i "s!USHERUSER!$USHERUSER!" /etc/init.d/$NAME + + cp webhost.cronjob /etc/cron.daily/$NAME + sed -i "s!GRAPH_DIR!$GRAPHDIR!" /etc/cron.daily/$NAME + sed -i "s!CONFDIR!$CONFDIR'!" /etc/cron.daily/$NAME + fi + + sed -i "s!'CONFDIR'!'$CONFDIR'!" $WWWDIR/common.php + if [ -f $WWWDIR/viewmtn/config.py.example ]; then + mv $WWWDIR/viewmtn/config.py.example $WWWDIR/viewmtn/config.py + fi + sed -i "s!'CONFDIR'!'$CONFDIR'!" $WWWDIR/viewmtn/config.py +} ============================================================ --- webhost.initscript ef28a834cb3ca48d335c20799d2ad6c417424d92 +++ webhost.initscript ef28a834cb3ca48d335c20799d2ad6c417424d92 @@ -0,0 +1,32 @@ +#! /bin/sh +set -e + +. /lib/lsb/init-functions + +OPTS="--quiet --pidfile /var/run/usher.webhost.pid --chuid=USHERUSER" +START="--start --exec=BINDIR/usher.webhost" +CONFFILE='CONFDIR/hostconfig' + +case "$1" in + start) + log_begin_msg "Starting webhost server..." + start-stop-daemon $START $OPTS -- $CONFFILE || log_end_msg 1 + log_end_msg 0 + ;; + stop) + log_begin_msg "Stopping webhost server..." + start-stop-daemon --stop --oknodo $OPTS || log_end_msg 1 + log_end_msg 0 + ;; + + restart) + log_begin_msg "Restarting webhost server..." + start-stop-daemon --stop --oknodo --retry 30 $OPTS + start-stop-daemon $START $OPTS -- $CONFFILE || log_end_msg 1 + log_end_msg 0 + ;; + + *) + log_success_msg "Usage: /etc/init.d/webhost {start|stop|restart}" + exit 1 +esac ============================================================ --- Makefile 850c7968decf0b2258ee74dc08586a508a261fcc +++ Makefile d3cb2a0616784e004734d1d6d752de658b84e8b1 @@ -1,28 +1,9 @@ -all: +.PHONY: all install -setup: symlinks perm +all: -perm: acl owner +usher.webhost: usher.cc + g++ usher.cc -o usher.webhost -g -Wall `pkg-config libpqxx --cflags --libs` +install: + ./install -symlinks: - ln -s viewmtn/MochiKit www/MochiKit - ln -s ../../graphs www/viewmtn/graph - -usher: usher.cc - g++ usher.cc -o usher -g -Wall `pkg-config libpqxx --cflags --libs` - -acl: - @if ! [ "$(user)" = "" ]; then \ - setfacl -m $(user):rwx sessions/ projects/ www/projects/ graphs/ ; \ - echo "setfacl -m $(user):rwx sessions/ projects/ www/projects/ graphs/" ; \ - else \ - echo "You need to set user=www-data (or your webserver user)" ; \ - fi - -owner: - @if ! [ "$(user)" = "" ]; then \ - chown $(user) www/project.php www/admin.php www/viewmtn/; \ - echo "chown $(user) www/project.php www/admin.php www/viewmtn/" ; \ - else \ - echo "You need to set user=www-data (or your webserver user)" ; \ - fi ============================================================ --- hostconfig.dist 094160cadf511eb392c4949f4b846735a0a87025 +++ hostconfig.dist a812fb92fb1ca25401d5f8fe5dc0eab16b1339aa @@ -1,12 +1,21 @@ userpass "username" "password" -hostname "hostname" -serverdir "/home/timothy/experiment" -dbstring "dbname=testdb" +dbstring "dbname=webhost-db" admin "127.0.0.5:12345" hostkey "address@hidden" hostkeypass "address@hidden" -monotone "/home/timothy/bin/monotone" +monotone "/usr/bin/monotone" graphdir_size "10000" + +hostname "HOSTNAME" + +base_url "BASE_URL" + +project_dir "PROJECT_DIR" + +graph_dir "GRAPH_DIR" + +www_dir "WWW_DIR" + +comment "foo" -comment "parsing is somewhat broken, keep this line at the end" ============================================================ --- skel/monotonerc 994e7d6e0fa4a91b1f507aefffe0af1d1f4b5d5f +++ skel/monotonerc 217345c5986195961026ca5651d142198aca7713 @@ -47,5 +47,5 @@ end function note_netsync_revision_received(revid, rdat, rcerts) - execute(get_confdir() .. "/../../dbrotate.sh", "queue", get_confdir()) + execute("DBROTATE", "queue", get_confdir()) end ============================================================ --- prunegraphs.sh 963f5d8c8baacab0f48d86a4c193402f3a101736 +++ webhost.cronjob 839760463ef4f93e3f346df0559805db3506842a @@ -1,10 +1,11 @@ #!/bin/sh # remove old files from graphs/ until its less that the specified # maximum size # -# run this from the install directory as a cron job +cd GRAPHDIR +CONFFILE="CONFDIR/hostconfig" -MAXNUM=$(grep '^graphdir_size' hostconfig \ +MAXNUM=$(grep '^graphdir_size' $CONFFILE \ | sed 's/^[^"]*"\([^"]*\)"[^"]*$/\1/g') NUM=$(du -s graphs/ | awk '{print $1;}') ============================================================ --- www/common-ctrl.php 5cdf8502620216366fe9a4fbf60f228ef2e4414b +++ www/common-ctrl.php 3d09cb8656535448914e20f5507f887fad56d0ee @@ -6,8 +6,8 @@ $project = $args->project; if($_REQUEST['project']) $project = $_REQUEST['project']; $safeproj = pg_escape_string($project); -$projdir = "$serverdir/projects/" . basename($project); -$projwww = "$serverdir/www/projects/" . basename($project); +$projdir = $project_dir . "/" . basename($project); +$projwww = $www_dir . "/projects/" . basename($project); $monotone = "$monotone --confdir '$projdir'"; ============================================================ --- www/common.php 4dfe605e35ec8b2f139630192a65b7c5fe7a4a17 +++ www/common.php 8d94d25c7e2f62e7cd3d46b647093c3da37e640b @@ -1,7 +1,8 @@ ViewMTN: %(short_title)s - + %(extra_header)s