X-Git-Url: https://git.distorted.org.uk/~mdw/disorder/blobdiff_plain/919c5c4041de91333dafc63e4bce42c12f5835e7..d255d2119453d1a399a296614fc2762d66f18ef5:/scripts/setup.in diff --git a/scripts/setup.in b/scripts/setup.in index 921cedf..370013e 100755 --- a/scripts/setup.in +++ b/scripts/setup.in @@ -27,11 +27,35 @@ echo "DisOrder setup script" case $(uname -s) in Darwin ) - os=mac - user=daemon - group=daemon + echo "Mac OS X detected" + os=Mac + user=jukebox + group=jukebox + ;; +FreeBSD ) + echo "FreeBSD detected" + os=FreeBSD + user=jukebox + group=jukebox + ;; +Linux ) + if grep Debian /etc/issue >/dev/null 2>&1; then + echo "You appear to be running Debian - please use .debs instead" + exit 1 + fi + if grep Ubuntu /etc/issue >/dev/null 2>&1; then + echo "You appear to be running Ubuntu - please use .debs instead" + exit 1 + fi + echo "Linux detected" + os=Linux + user=jukebox + group=jukebox ;; * ) + echo + echo "WARNING: unknown operating system '$(uname -s)'" + echo "This script won't be able to do all setup on this platform" os=unknown user=daemon group=daemon @@ -42,7 +66,7 @@ echo echo "This script will:" echo " - overwrite any existing configuration" case $os in -mac ) +Mac ) echo " - set the server up to be run at boot time" echo " - start the server" ;; @@ -166,27 +190,139 @@ if [ ! -f pkgconfdir/options.user ]; then touch pkgconfdir/options.user fi +# pick ID1 ID2 ... IDn +# Echoes an ID matching none of ID1..IDn +pick() { + local n + n=250 # better not choose 0! + while :; do + ok=true + for k in "$@"; do + if [ $n = $k ]; then + ok=false + break + fi + done + if $ok; then + echo $n + return + fi + n=$((1+$n)) + done +} + +case $os in +Mac ) + # Apple don't seem to believe in creating a user as a discrete operation + if dscl / -read /Groups/$group >/dev/null 2>&1; then + echo "$group group already exists" + else + echo "Creating $group group" + gids=$(dscl / -list /Groups PrimaryGroupID|awk '{print $2}') + gid=$(pick $gids) + echo "(picked gid $gid)" + dscl / -create /Groups/$group + dscl / -create /Groups/$group PrimaryGroupID $gid + dscl / -create /Groups/$group Password \* + fi + if dscl / -read /Users/$user >/dev/null 2>&1; then + echo "$user user already exists" + else + echo "Creating $user user" + uids=$(dscl / -list /Users UniqueID|awk '{print $2}') + uid=$(pick $uids) + echo "(picked uid $uid)" + gid=$(dscl / -read /Groups/$group PrimaryGroupID | awk '{print $2}') + dscl / -create /Users/$user + dscl / -create /Users/$user UniqueID $uid + dscl / -create /Users/$user UserShell /usr/bin/false + dscl / -create /Users/$user RealName 'DisOrder server' + dscl / -create /Users/$user NFSHomeDirectory pkgstatedir + dscl / -create /Users/$user PrimaryGroupID $gid + dscl / -create /Users/$user Password \* + fi + ;; +FreeBSD ) + # FreeBSD has a simple well-documented interface + if pw groupshow $group >/dev/null 2>&1; then + echo "$group group already exists" + else + echo "Creating $group group" + pw groupadd $group + fi + if pw usershow $user >/dev/null 2>&1; then + echo "$user user already exists" + else + echo "Creating $user user" + pw useradd $user -w no -d pkgstatedir -g $group -c 'DisOrder user' + fi + ;; +Linux ) + if grep ^$group: /etc/group >/dev/null; then + echo "$group group already exists" + else + echo "Creating $group group" + groupadd $group + fi + if grep ^$user: /etc/passwd >/dev/null; then + echo "$user user already exists" + else + echo "Creating $user user" + useradd -d pkgstatedir -g $group $user -c 'DisOrder user' + fi + ;; +esac + echo "Making sure that pkgstatedir exists" mkdir -p pkgstatedir chown $user:$group pkgstatedir chmod 2755 pkgstatedir case $os in -mac ) - echo "Installing the plist into /Library/LaunchDaemons/" - cp server/uk.org.greenend.rjk.disorder.plist /Library/LaunchDaemons/. +Mac ) + echo "Installing the plist into /Library/LaunchDaemons" + cp examples/uk.org.greenend.rjk.disorder.plist /Library/LaunchDaemons/. echo "Reloading launchd" launchctl load /Library/LaunchDaemons echo "Starting DisOrder server" launchctl start uk.org.greenend.rjk.disorder echo "Installing CGI" install -m 555 server/disorder.cgi /Library/WebServer/CGI-Executables/disorder - echo "Setting up link to CGI resources" - rm /etc/httpd/users/disorder.conf.new - echo Alias /disorder/ pkgdatadir/static/ >> /etc/httpd/users/disorder.conf.new - mv /etc/httpd/users/disorder.conf.new /etc/httpd/users/disorder.conf - echo "Reloading web server" - sudo apachectl graceful + echo "Setting up link to CGI's dependencies" + rm -f /Library/WebServer/Documents/disorder + ln -s pkgdatadir/static /Library/WebServer/Documents/disorder + echo + echo "You must sudo disorder setup-guest [--no-online-registration] next." + ;; +FreeBSD ) + echo "Installing startup script into /etc/rc.d" + install -m 555 examples/disorder.rc /etc/rc.d/disorder + echo "Starting DisOrder server" + /etc/rc.d/disorder start + echo "Identifying web server" + set /usr/local/www/* + case $# in + 0 ) + echo + echo "Could not find a web server" + exit 1 + ;; + 1 ) + ;; + * ) + echo + echo "Yikes! There seems to be more than one web server here." + echo "Guessing that you want $1." + echo + ;; + esac + web=$1 + echo "Found $web" + echo "Installing CGI" + install -m 555 server/disorder.cgi $web/cgi-bin/disorder + echo "Setting up link to CGI's dependencies" + rm -f $web/data/disorder + ln -s pkgdatadir/static $web/data/disorder echo echo "You must sudo disorder setup-guest [--no-online-registration] next." ;;