#!/bin/sh
# Tacitus @ LPUniversity
# 15-APRIL-2006
# LPUniversity Mudlib Install Script
#define colours
export CRE="[K"
export NORMAL="[0;39m"
export RED="[1;31m"
export GREEN="[1;32m"
export YELLOW="[1;33m"
export BLUE="[1;34m"
export MAGENTA="[1;35m"
export CYAN="[1;36m"
export WHITE="[1;37m"
export SAVE="[s"
export RESTORE="[u"
export CLEAR="[K"
export RESET="[2J"
echo "=--------------------------------------------=";
echo "|${BLUE} Welcome to the LPUniversity Install Script${NORMAL} |";
echo "=--------------------------------------------=";
echo;
echo "This script will automatically install and configure";
echo "the LPUniversity mudlib after getting some information";
echo "from you. If you do not wish to continue with this process";
echo "then please exit from this script now by pressing the";
echo "button labelled 'ctrl' and the letter 'c' at the same time.";
echo;
echo "Hit any key to continue...";
read blah;
while(true)
do
echo;
echo "${CYAN}Step 1: Preliminary Questions${NORMAL}"
echo;
echo "We now need to find out where you'd like to install LPUniversity.";
echo "If you do not provide an argument, then it will install to the current directory.";
echo;
while(true)
do
echo -n "Install to [./mud/]: ";
read install_dir;
expr "$install_dir" == "" >/dev/null && install_dir="$(pwd)/mud";
[ -d "$install_dir" ] && break
echo;
echo "${RED} The directory '$install_dir' does not exist.${NORMAL}";
mkdir $install_dir;
if test -d $install_dir
then
echo "${GREEN} The directory '$install_dir' has been created.${NORMAL}";
break;
else
echo "Please try again.";
fi
done
echo;
echo "${CYAN}Base install directory set to:${NORMAL}";
echo " $install_dir";
echo;
echo "${CYAN}The executables will be installed to:${NORMAL}";
echo " $install_dir/bin/";
echo;
echo "${CYAN}Scripts and package documentation will be installed to:${NORMAL}";
echo " $install_dir/etc/";
echo;
echo "${CYAN}The source for the MudOS driver will be installed to:${NORMAL}";
echo " $install_dir/source/";
echo;
echo "${CYAN}The mudlib will be installed to:${NORMAL}";
echo " $install_dir/lib/";
echo;
echo -n "Is this acceptable? Please respond with either 'y' for yes or 'n' for no: ";
read confirm_dir;
expr "$confirm_dir" == "y" >/dev/null && break;
done
while(true)
do
echo;
echo "${YELLOW}What would you like to call your mud? You may change this later.${NORMAL}";
echo -n "Please enter the name of your mud: ";
read mud_name;
echo "${RED}Your mud will be called: $mud_name${NORMAL}";
echo;
echo "${YELLOW}What port would you like your mud to run on?${NORMAL}";
echo -n "Enter port: "
read port;
echo "${RED}Your mud will run on port $port${NORMAL}";
echo;
echo "An address server allows you to resolve ip addresses to hostnames.";
echo "${YELLOW}What port would you like the address server to run on?${NORMAL}";
echo -n "Enter port for address server: ";
read addr_port;
echo "${RED}Your mud's address server will run on port $addr_port${NORMAL}";
echo;
echo;
echo "${YELLOW}Do you want the script to compile MudOS for you?${NORMAL}";
echo "${RED}This is NOT required if you are running linux.${NORMAL}";
echo -n "Compile MudOS? [y]es or [n]o?: ";
read compile_mudos;
if (test $compile_mudos == "y" || test $compile_mudos == "yes" || test $compile_mudos == "Yes" || test $compile_mudos == "y");
then
compile_mudos="Yes";
echo "${RED}This install script will recompile MudOS for you.${NORMAL}";
else
compile_mudos="No";
echo "${RED}This script will NOT recompile MudOS for you.${NORMAL}";
fi
echo;
echo "${RED}Please confirm that the following information is correct:${NORMAL}";
echo;
echo "${BLUE}Mud name${NORMAL} : $mud_name";
echo "${BLUE}Mud Port${NORMAL} : $port";
echo "${BLUE}Address Server Port${NORMAL} : $addr_port";
echo "${BLUE}Compile Mudos${NORMAL} : $compile_mudos";
echo;
echo -n "Are the above options correct? [y]es or [n]o: ";
read confirm_install;
expr "$confirm_install" == "y" >/dev/null && break;
done
echo;
echo "${CYAN}Step 2: Unpacking and generating config files.${NORMAL}";
echo;
[ -f "$(pwd)/lpuni.tar.gz" ] || {
echo;
echo "${RED}Error${NORMAL} [install_script]: Archive not found. Please redownload package.";
exit 0
}
tar -C $install_dir -xzf $(pwd)/lpuni.tar.gz
if test $? != 0
then
echo "${RED}Error${NORMAL} [install_script]: Unpacking the archive failed. Please redownload package.";
exit $?;
else
echo "${GREEN}Success${NORMAL} [install_script]: Unpacking the archive was successful.";
fi
echo;
echo "Generating config files...";
echo;
echo "###############################################################################
# LPUniversity Mudlib Runtime Configuation File #
###############################################################################
# NOTE: All paths specified here are relative to the mudlib directory except #
# for mudlib directory, and binary directory. #
# Lines beginning with a # or a newline are ignored. #
###############################################################################
# name of this mud
name : $mud_name
# port number to accept users on
port number : $port
# the address server is an external program that lets the mud translate
# internet names to numbers (and vice versa). select an unused port.
address server ip : localhost
address server port : $addr_port
# absolute pathname of mudlib
mudlib directory : $install_dir/lib/
# absolute pathname of driver/config dir
binary directory : $install_dir/bin/
# debug.log and author/domain stats are stored here
log directory : /log
# the directories which are searched by #include <...>
# for multiple dirs, separate each path with a ':'
include directories : /adm/include:/include
# Directory to save binaries in. (if BINARIES is defined)
save binaries directory : /adm/temp/
# the file which defines the master object
master file : /adm/obj/master
# the file where all global simulated efuns are defined.
simulated efun file : /adm/obj/simul_efun
# file to swap out objects; not used if time to swap is 0
swap file : /adm/tmp/swapfile
# alternate debug.log file name (assumed to be in specified 'log directory')
debug log file : debug.log
# This is an include file which is automatically #include'd in all objects
global include file : <global.h>
# if an object is left alone for a certain time, then the
# function clean_up will be called. This function can do anything,
# like destructing the object. If the function isn't defined by the
# object, then nothing will happen.
# This time should be substantially longer than the swapping time.
time to clean up : 120000
# How long time until an unused object is swapped out.
# Machine with too many players and too little memory: 900 (15 minutes)
# Machine with few players and lot of memory: 10000
# Machine with infinite memory: 0 (never swap).
time to swap : 10000
# How many seconds until an object is reset again.
time to reset : 1800
# Maximum number of bits in a bit field. They are stored in printable
# strings, 6 bits per byte.
maximum bits in a bitfield : 1200
# Max number of local variables in a function.
maximum local variables : 30
# Maximum amount of 'eval cost' per thread - execution is halted when
# it is exceeded.
maximum evaluation cost : 500000
# This is the maximum array size allowed for one single array.
maximum array size : 15000
# This is the maximum allowed size of a variable of type 'buffer'.
maximum buffer size : 400000
# Max size for a mapping
maximum mapping size : 1500000
# Max inherit chain size
inherit chain size : 30
# maximum length of a string variable
maximum string length : 200000
# Max size of a file allowed to be read by 'read_file()'.
maximum read file size : 200000
# max number of bytes you allow to be read and written with read_bytes
# and write_bytes
maximum byte transfer : 10000
# Reserve an extra memory area from malloc(), to free when we run out
# of memory and allow the mudlib to shutdown.
# If this value is 0, no area will be reserved.
reserved size : 0
# Define the size of the shared string hash table. This number should
# a prime, probably between 1000 and 30000; if you set it to about 1/5
# of the number of distinct strings you have, you will get a hit ratio
# (number of comparisons to find a string) very close to 1, as found strings
# are automatically moved to the head of a hash chain. You will never
# need more, and you will still get good results with a smaller table.
hash table size : 7001
# Object hash table size.
# Define this like you did with the strings; probably set to about 1/4 of
# the number of objects in a game, as the distribution of accesses to
# objects is somewhat more uniform than that of strings.
object table size : 1501
# default no-matching-action message
default fail message : What?
# default message when error() occurs (optional)
default error message :
###############################################################################
# The following aren't currently used or implemented (yet) #
###############################################################################
# maximum number of users in the game (unused currently)
maximum users : 40
# Define the maximum stack size of the stack machine. This stack will also
# contain all local variables and arguments. (unused currently)
evaluator stack size : 1000
# Define the size of the compiler stack. This defines how complex
# expressions the compiler can parse. (unused currently)
compiler stack size : 200
# Define the maximum call depth for functions. (unused currently)
maximum call depth : 30
# There is a hash table for living objects, used by find_living().
# (unused currently)
living hash table size : 100" > "$install_dir/etc/config.lpu";
echo "#!/bin/sh
#
# file: startmud
# version: 1.0
# date: 08-OCT-05
# desc: Startmud script based off of TMI-II Script
#
#
# WARNING: After starting script for the first time, ensure
# that the script is not caught in a loop writing error
# messages to startmud.err
# NOTE: I've decided to use relative directories so that you
# might not even need to modify this script to get started.
# If it doesn't work on your system, just replace with full
# paths (You will however have to modify the paths in
# config.lpu).
# -=CONFIGURATION=-
# BINDIR
# Directory of driver binaries
# BINDIR=/users/somervil/lpuni/bin
BINDIR=../bin
# ETCDIR
# Directory with runtime configuration data
# ETCDIR=/users/somervil/lpuni/etc
ETCDIR=./
# LOGDIR
# Mudlib directory containing driver-related log fiels
# LOGDIR=/users/somervil/tmi3/lib/log/driver
LOGDIR=../lib/log/driver
# DRIVER
# Name of driver binary (default: driver)
DRIVER=driver
# ADDR_SERVER
# Name of address server binary (default: addr_server)
ASERVER=addr_server
# APORT
# Port that the mudlib will look for the address server on
APORT=$addr_port
# CONFIG
# MudOS runtime configuration file
CONFIG=config.lpu
# UP
# Name of logfile showing dates when driver starts up and goes down
UP=UPRECORD
# LOG
# Name of driver logfile
LOG=driver.log
# ERR
# Name of driver logfile for output sent to stderr
ERR=driver.err
# ALOG
# Name of address server stdout server log file
ALOG=aserver.log
# AERR
# Name of address server stderr log file
AERR=aserver.err
`cat $install_dir/etc/startmud.part`" > "$install_dir/etc/startmud";
rm "$install_dir/etc/startmud.part";
chmod +x "$install_dir/etc/startmud";
chmod -x "$install_dir/etc/install.sh";
touch "$install_dir/lib/adm/etc/new_install";
if test $compile_mudos == "Yes"
then
echo "Attempting to compile MudOS...";
echo;
echo "Backing up existing binaries...";
echo;
mv "$install_dir/bin/driver" "$install_dir/bin/driver.bk";
mv "$install_dir/bin/addr_server" "$install_dir/bin/addr_server.bk";
mv "$install_dir/bin/portbind" "$install_dir/bin/portbind.bk";
echo "Starting compile...";
echo;
cd "$install_dir/source/";
make clean;
./build.MudOS || { echo "Error compiling Mudos."; };
make || { echo "Error compiling Mudos."; };
make install || { echo "Error compiling Mudos."; };
echo;
echo "Success!";
echo;
else
echo;
echo "Success!";
echo;
fi
echo "${CYAN}Step 3: Conclusion${NORMAL}";
echo;
echo "${GREEN}Success${NORMAL} [install_script]: $mud_name is now setup.";
echo;
echo "You can startmud the mud by typing: cd $install_dir/etc/";
echo "Then typing: ./startmud &";
echo "If there are any problems, it will be written to startmud.log and startmud.err";
echo "If the problem is with the mudlib, then the errors will be written to";
echo "log files in $startmud/lib/log/driver/";
echo;
echo "${RED}After the mud has succesfully booted, log in as the first new user";
echo "will become admin as soon as they login.${NORMAL}";
echo;
echo "For further assistance and an excellent LP-centric community,";
echo "please visit http://lpuni.sourceforge.net";
echo;
echo "Bug reports, feature requests, support requests, and patchs can be";
echo "submitted to http://sourceforge.net/projects/lpuni";
echo;
echo "Thank you installing LPUniversity.";
echo;
echo "${GREEN}Success [install_script]: Script complete"${NORMAL};
echo;