mirror of https://github.com/dirtbags/moth.git
84 lines
1.5 KiB
Bash
Executable File
84 lines
1.5 KiB
Bash
Executable File
#! /bin/sh -e
|
|
|
|
DESTDIR="$1"
|
|
|
|
if [ -z "$DESTDIR" ]; then
|
|
echo "Usage: $0 DESTDIR"
|
|
exit
|
|
fi
|
|
|
|
cd $(dirname $0)
|
|
|
|
older () {
|
|
[ -z "$1" ] && return 1
|
|
target="$1"; shift
|
|
[ -f "$target" ] || return 0
|
|
for i in "$@"; do
|
|
[ "$i" -nt "$target" ] && return 0
|
|
done
|
|
return 1
|
|
}
|
|
|
|
copy () {
|
|
src="$1"
|
|
target="$2/$src"
|
|
targetdir=$(dirname "$target")
|
|
if older "$target" "$src"; then
|
|
echo "COPY $src"
|
|
mkdir -p "$targetdir"
|
|
cp "$src" "$target"
|
|
fi
|
|
}
|
|
|
|
setup() {
|
|
www="$1"
|
|
[ -d "$DESTDIR/state" ] && return
|
|
echo "SETUP"
|
|
for i in points.new points.tmp teams; do
|
|
dir="$DESTDIR/state/$i"
|
|
mkdir -p "$dir"
|
|
setfacl -m ${www}:rwx "$dir"
|
|
done
|
|
mkdir -p "$DESTDIR/packages"
|
|
>> "$DESTDIR/state/points.log"
|
|
if ! [ -f "$DESTDIR/assigned.txt" ]; then
|
|
hd </dev/urandom | awk '{print $3 $4 $5 $6;}' | head -n 100 > "$DESTDIR/assigned.txt"
|
|
fi
|
|
|
|
mkdir -p "$DESTDIR/www"
|
|
ln -sf ../state/points.json "$DESTDIR/www"
|
|
ln -sf ../state/puzzles.json "$DESTDIR/www"
|
|
}
|
|
|
|
|
|
echo "Figuring out web user..."
|
|
for www in www-data http tc _ _www; do
|
|
id $www && break
|
|
done
|
|
if [ $www = _ ]; then
|
|
echo "Unable to determine httpd user on this system. Dying."
|
|
exit 1
|
|
fi
|
|
|
|
mkdir -p "$DESTDIR" || exit 1
|
|
|
|
setup $www
|
|
git $SRCDIR ls-files | while read fn; do
|
|
case "$fn" in
|
|
example-puzzles/*|tools/*|docs/*|install.sh|setup.cfg|README.md|.gitignore|src/mothd)
|
|
true # skip
|
|
;;
|
|
www/*)
|
|
copy "$fn" "$DESTDIR/"
|
|
;;
|
|
bin/*)
|
|
copy "$fn" "$DESTDIR/"
|
|
;;
|
|
*)
|
|
echo "??? $fn"
|
|
;;
|
|
esac
|
|
done
|
|
|
|
echo "All done installing."
|