mirror of
https://github.com/worldforge/cyphesis
synced 2026-08-13 12:26:04 -04:00
326 lines
12 KiB
Bash
Executable file
326 lines
12 KiB
Bash
Executable file
#!/bin/sh
|
|
# This file may be redistributed and modified only under the terms of
|
|
# the GNU General Public License (See COPYING for details).
|
|
# Copyright (C) 2002 Alistair Riddoch
|
|
|
|
# The main purpose of this script is to get round the issue of access to
|
|
# to the database required by cyphesis. We take the opportunity to resolve
|
|
# a number of other issues at the same time. This script works at its
|
|
# best if it is invoked by its absolute path in the directory where
|
|
# cyphesis is installed as the user who will run cyphesis. If it is
|
|
# run differently from this it will need to ask for details.
|
|
|
|
cat << EOWELCOME
|
|
Welcome to cyphesis.
|
|
|
|
This script will go through the steps required to configure
|
|
your system so that you can run cyphesis. An important part of this
|
|
process is setting up access to the PostgreSQL RDBMS, so this script
|
|
must be run as root. It is strongly recommended that you run cyphesis
|
|
using a normal user account, and this script will help to set up access
|
|
for this account to the database.
|
|
|
|
This script will remove any existing server rules and maps, but will
|
|
preserve any user accounts in the server.
|
|
|
|
EOWELCOME
|
|
|
|
# Check who is running this script. This should either be the user who is
|
|
# going to run cyphesis, or root if extra privs are required to set up
|
|
# database access
|
|
RUNNING_AS=`whoami`
|
|
|
|
# See if we can work out where the bin directory is.
|
|
if which cyphesis-config > /dev/null 2>&1; then
|
|
CYPHESIS_BIN=`which cyphesis-config`
|
|
CYPHESIS_BINDIR=`dirname $CYPHESIS_BIN`
|
|
else
|
|
CYPHESIS_BINDIR=`dirname $0`
|
|
fi
|
|
|
|
# Check whether what we have is an absolute path, and if not insist
|
|
# that we are given one. This path is used to work out the locations of
|
|
# other files.
|
|
if test `expr substr $CYPHESIS_BINDIR 1 1` != "/"; then
|
|
echo Unable to work out path of installation: echo $CYPHESIS_BINDIR
|
|
echo "Please give the absolute path of bin directory where cyphesis is installed."
|
|
read -e -p "> " CYPHESIS_BINDIR
|
|
if test `expr substr $CYPHESIS_BINDIR 1 1` != "/"; then
|
|
echo $CYPHESIS_BINDIR is not an absolute path.
|
|
echo Please enter the path begginging with /.
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# Verify our binary path is okay, and report the version of cyphesis we
|
|
# have found.
|
|
if test -x $CYPHESIS_BINDIR/cyphesis-config; then
|
|
echo Cyphesis version `$CYPHESIS_BINDIR/cyphesis-config --version` detected.
|
|
else
|
|
echo "ERROR: $0: Unable to find location of cyphesis programs."
|
|
exit 1
|
|
fi
|
|
|
|
# Use this to guess the directory the cyphesis files are in. We are doing
|
|
# this to catch the case where a cyphesis binary package built for
|
|
# one prefix has been unpacked elsewhere. If bindir, sysconfdir or
|
|
# datadir are not default, this will not help us, but the only time
|
|
# this is likely to happen is if the program has been installed in
|
|
# /usr and /etc, in which case this detection will not be required,
|
|
# as the config and data will all be in the directories compiled
|
|
# into the binary.
|
|
CYPHESIS_PREFIX=`dirname $CYPHESIS_BINDIR`
|
|
|
|
if test `expr substr $CYPHESIS_PREFIX 1 1` != "/"; then
|
|
echo ERROR: $0: Error occured detecting installation.
|
|
exit 1
|
|
fi
|
|
|
|
if ! test -d $CYPHESIS_PREFIX; then
|
|
echo ERROR: $0: Error occured detecting installation.
|
|
echo Installation directory $CYPHESIS_PREFIX was detected but does not exist.
|
|
exit 1
|
|
fi
|
|
|
|
# Check what config and data paths the program was compiled to use, and
|
|
# work out whether they need to be overridden.
|
|
CYPHESIS_COMPILED_CONF_DIR=`$CYPHESIS_BINDIR/cyphesis-config --config-dir`
|
|
CYPHESIS_COMPILED_DATA_DIR=`$CYPHESIS_BINDIR/cyphesis-config --data-dir`
|
|
|
|
CYPHESIS_CONF_DIR=$CYPHESIS_COMPILED_CONF_DIR
|
|
CYPHESIS_DATA_DIR=$CYPHESIS_COMPILED_DATA_DIR
|
|
|
|
# Check whether we have the location of the config and data files, and if
|
|
# necessary make a last ditch attempt to get the info from the user.
|
|
if ! test -f $CYPHESIS_CONF_DIR/cyphesis/cyphesis.vconf; then
|
|
CYPHESIS_CONF_DIR=$CYPHESIS_PREFIX/etc
|
|
CYPHESIS_DATA_DIR=$CYPHESIS_PREFIX/share
|
|
if ! test -f $CYPHESIS_CONF_DIR/cyphesis/cyphesis.vconf; then
|
|
echo "Please give the absolute path of etc directory where cyphesis config is installed."
|
|
read -e -p "> " CYPHESIS_CONF_DIR
|
|
if test -f $CYPHESIS_CONF_DIR/cyphesis/cyphesis.vconf; then
|
|
echo ERROR: $0: Unable to find config files for cyphesis in $CYPHESIS_CONF_DIR.
|
|
fi
|
|
fi
|
|
if ! test -f $CYPHESIS_DATA_DIR/cyphesis/rulesets/basic/hooks/ruleset_import_hooks.py; then
|
|
echo "Please give the absolute path of share directory where cyphesis data is installed."
|
|
read -e -p "> " CYPHESIS_DATA_DIR
|
|
if test -f $CYPHESIS_DATA_DIR/cyphesis/rulesets/basic/hooks/ruleset_import_hooks.py; then
|
|
echo ERROR: $0: Unable to find data files for cyphesis in $CYPHESIS_DATA_DIR.
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
# This section handles allowing the user to override the commands used
|
|
# to create database related things. I do not anticipate that this section
|
|
# will be often used, and I have not tested it heavily.
|
|
CUSTOM_OPTIONS=no
|
|
|
|
if test "x$1" = "x--custom"; then
|
|
CUSTOM_OPTIONS=yes
|
|
fi
|
|
|
|
CREATE_USER_CMD=`which createuser 2>/dev/null`
|
|
CREATE_DATABASE_CMD=`which createdb 2>/dev/null`
|
|
POSTGRESQL_SUSER=postgres
|
|
POSTGRESQL_QUERY_CMD=`which psql 2>/dev/null`
|
|
POSTGRESQL_TEMPLATE=template1
|
|
|
|
if test $CUSTOM_OPTIONS = "yes" ; then
|
|
read -e -p "PostgreSQL user create command [$CREATE_USER_CMD] >" CMD
|
|
if test "x$CMD" != "x" ; then
|
|
CREATE_USER_CMD=CMD
|
|
fi
|
|
|
|
read -e -p "PostgreSQL database create command [$CREATE_DATABASE_CMD] >" CMD
|
|
if test "x$CMD" != "x" ; then
|
|
CREATE_DATABASE_CMD=CMD
|
|
fi
|
|
|
|
read -e -p "PostgreSQL superuser [$POSTGRESQL_SUSER] >" SUSER
|
|
if test "x$SUSER" != "x" ; then
|
|
POSTGRESQL_SUSER=SUSER
|
|
fi
|
|
|
|
read -e -p "PostgreSQL query commmand [$POSTGRESQL_QUERY_CMD] >" CMD
|
|
if test "x$CMD" != "x" ; then
|
|
POSTGRESQL_QUERY_CMD=CMD
|
|
fi
|
|
|
|
read -e -p "PostgreSQL template database [$POSTGRESQL_TEMPLATE] >" TEMP
|
|
if test "x$TEMP" != "x" ; then
|
|
POSTGRESQL_TEMPLATE=TEMP
|
|
fi
|
|
fi
|
|
|
|
# If we are not running as root, then assume that the user wants to set
|
|
# up cyphesis for themselves. We cannot attempt to set up access to
|
|
# PostgreSQL but we can assume that we have access, and set up the
|
|
# necessary database. We then load the rules and world data into tables
|
|
# in the database, and exit.
|
|
if test $RUNNING_AS != "root"; then
|
|
if $POSTGRESQL_QUERY_CMD -c "" $POSTGRESQL_TEMPLATE; then
|
|
echo Database account verified okay.
|
|
else
|
|
echo You do not seem to have a database account.
|
|
echo Please contact your system administrator to get access to the database.
|
|
echo If you run this script as root, it will attempt to set up access to the
|
|
echo database for you.
|
|
exit 1
|
|
fi
|
|
if $POSTGRESQL_QUERY_CMD -c "" cyphesis ; then
|
|
echo PostgreSQL database cyphesis already exists.
|
|
else
|
|
echo Creating PostgreSQL database.
|
|
if $CREATE_DATABASE_CMD cyphesis; then
|
|
echo PostgreSQL database cyphesis created.
|
|
else
|
|
echo Unable to create cyphesis database.
|
|
echo It is possible that you do not have permission to create databases,
|
|
echo or another user may already have a database of this name.
|
|
echo Please see the cyphesis documentation for details of how to use change
|
|
echo the name of the database cyphesis connects to.
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# Currently dropping the rules and world should not have any
|
|
# negative consequences, as there is no instance specific data
|
|
# in these tables, and no tools currently exist for the user to
|
|
# modify them.
|
|
echo Clearing rules and world data...
|
|
$POSTGRESQL_QUERY_CMD -c "DROP TABLE rules;" cyphesis> /dev/null 2>&1
|
|
$POSTGRESQL_QUERY_CMD -c "DROP TABLE world;" cyphesis> /dev/null 2>&1
|
|
echo Cleared.
|
|
|
|
# If the directory we have found the config and data files in is not
|
|
# the same as the one compiled into the binary, put a config
|
|
# override in out home directory using the cyconfig command.
|
|
if test $CYPHESIS_COMPILED_CONF_DIR != $CYPHESIS_CONF_DIR; then
|
|
if $CYPHESIS_BINDIR/cyconfig --cyphesis:directory=$CYPHESIS_DATA_DIR --cyphesis:confdir=$CYPHESIS_CONF_DIR; then
|
|
true
|
|
else
|
|
echo ERROR: $0: Failed to configure cyphesis config and data directories.
|
|
fi
|
|
fi
|
|
|
|
echo
|
|
|
|
# cyloadrules automatically picks up the right files for the ruleset
|
|
# set in the main config.
|
|
echo Loading game rules into database...
|
|
if $CYPHESIS_BINDIR/cyloadrules; then
|
|
echo Loaded.
|
|
else
|
|
echo ERROR: $0: Unable to load rules into database.
|
|
exit 1
|
|
fi
|
|
|
|
echo
|
|
|
|
# The filename given here is mason specific, but as that is the only
|
|
# game explicitly supported at this time, this should not be a problem.
|
|
# echo Loading world data into database...
|
|
# if $CYPHESIS_BINDIR/cydbload $CYPHESIS_CONF_DIR/cyphesis/moraf.xml; then
|
|
# echo Loaded.
|
|
# else
|
|
# echo ERROR: $0: Unable to load world into database.
|
|
# exit 1
|
|
# fi
|
|
|
|
echo
|
|
echo This system is now ready to run cyphesis.
|
|
|
|
exit 0
|
|
fi
|
|
|
|
# If we get here, we are running as root, so we assume that we are
|
|
# setting things like database access up for the user. Running cyphesis
|
|
# root is utterly unnecessary, and as cyphesis is largely unaudited
|
|
# potentially dangerous.
|
|
echo Please give the name of the user you want to configure to run cyphesis.
|
|
echo It is not recommended that the server be run as root.
|
|
|
|
read -e -p '> ' CYPHESIS_USER
|
|
|
|
if su $CYPHESIS_USER -c true ; then
|
|
echo Verified user $CYPHESIS_USER okay
|
|
else
|
|
echo ERROR: $0: User $CYPHESIS_USER does not exist
|
|
exit 1
|
|
fi
|
|
|
|
echo
|
|
|
|
# Check whether the user already has an account. There is more than one
|
|
# reason why this might fail, but we assume if it does that it
|
|
# means the user does not have access. The database account we create
|
|
# has the right to create databases.
|
|
if su $CYPHESIS_USER -c "$POSTGRESQL_QUERY_CMD -c \"\" $POSTGRESQL_TEMPLATE" ; then
|
|
echo PostgreSQL user $CYPHESIS_USER already exists
|
|
else
|
|
echo Creating PostgreSQL account for user $CYPHESIS_USER
|
|
su $POSTGRESQL_SUSER -c "$CREATE_USER_CMD -A -d $CYPHESIS_USER" || \
|
|
(echo ERROR: $0: Unable to create database account $CYPHESIS_USER ; \
|
|
exit 1)
|
|
echo PostgreSQL user $CYPHESIS_USER created
|
|
fi
|
|
|
|
# Check whether a database called cyphesis exists, and the user we are
|
|
# setting up can connect to it. If the database exists, but we cannot
|
|
# connect to it, this will fail. If the user already had a PostgeSQL
|
|
# account, but did not have the right to create databases, this will fail.
|
|
if su $CYPHESIS_USER -c "$POSTGRESQL_QUERY_CMD -c \"\" cyphesis" ; then
|
|
echo PostgreSQL database cyphesis already exists
|
|
else
|
|
echo Creating PostgreSQL database cyphesis as user $CYPHESIS_USER
|
|
su $CYPHESIS_USER -c "$CREATE_DATABASE_CMD cyphesis"
|
|
echo PostgreSQL database cyphesis created as $CYPHESIS_USER
|
|
fi
|
|
|
|
echo
|
|
|
|
# Currently dropping the rules and world should not have any
|
|
# negative consequences, as there is no instance specific data
|
|
# in these tables, and no tools currently exist for the user to
|
|
# modify them.
|
|
echo Clearing rules and world data...
|
|
su $CYPHESIS_USER -c "$POSTGRESQL_QUERY_CMD -c \"DROP TABLE rules;\" cyphesis" > /dev/null 2>&1
|
|
su $CYPHESIS_USER -c "$POSTGRESQL_QUERY_CMD -c \"DROP TABLE world;\" cyphesis" > /dev/null 2>&1
|
|
echo Cleared.
|
|
|
|
# If the directory we have found the config and data files in is not
|
|
# the same as the one compiled into the binary, put a config
|
|
# override in out home directory using the cyconfig command.
|
|
if test $CYPHESIS_COMPILED_CONF_DIR != $CYPHESIS_CONF_DIR; then
|
|
if ! su - $CYPHESIS_USER -c "$CYPHESIS_BINDIR/cyconfig --cyphesis:directory=$CYPHESIS_DATA_DIR --cyphesis:confdir=$CYPHESIS_CONF_DIR"; then
|
|
echo ERROR: $0: Failed to configure cyphesis config and data directories.
|
|
fi
|
|
fi
|
|
|
|
echo
|
|
|
|
# cyloadrules automatically picks up the right files for the ruleset
|
|
# set in the main config.
|
|
echo Loading game rules into database...
|
|
if su - $CYPHESIS_USER -c "$CYPHESIS_BINDIR/cyloadrules"; then
|
|
echo Loaded.
|
|
else
|
|
echo ERROR: $0: Unable to load rules into database.
|
|
exit 1
|
|
fi
|
|
|
|
echo
|
|
|
|
# The filename given here is mason specific, but as that is the only
|
|
# game explicitly supported at this time, this should not be a problem.
|
|
# echo Loading world data into database...
|
|
# if su - $CYPHESIS_USER -c "$CYPHESIS_BINDIR/cydbload $CYPHESIS_CONF_DIR/cyphesis/moraf.xml"; then
|
|
# echo Loaded.
|
|
# else
|
|
# echo ERROR: $0: Unable to load world into database.
|
|
# exit 1
|
|
# fi
|
|
|
|
echo
|
|
echo This system is now ready to run cyphesis.
|