mirror of
https://github.com/unrealircd/unrealircd.git
synced 2026-06-12 17:14:46 +02:00
982325fc82
and refer to this as well. Suggested by PeGaSuS in https://bugs.unrealircd.org/view.php?id=6610 This also moves extras/tls.cnf to doc/conf/tls/tls.cnf which also gets installed in ~/unrealircd/conf/tls/ (or whatever CONFDIR is) And just to be clear: this means you can run "./unrealircd makecert" without needing to go into BUILDDIR (or even having it at all). At the same time, the generation commands have been modified slightly so two warnings during certificate generation are no longer there.
948 lines
27 KiB
Bash
Executable File
948 lines
27 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# Config script for UnrealIRCd
|
|
# (C) 2001-2021 The UnrealIRCd Team
|
|
#
|
|
# This configure script is free software; the UnrealIRCd Team gives
|
|
# unlimited permission to copy, distribute and modify as long as the
|
|
# copyright headers stay intact
|
|
#
|
|
#
|
|
# Rewritten completely to be an interface to autoconf by codemastr
|
|
# This was inspired by the config by Michael Graff (explorer@flame.org)
|
|
# but was written from scratch
|
|
|
|
# In order to be faster than the old Config, this assumes that all information
|
|
# in the cache file is valid and therefore doesn't check it, so if you messed with
|
|
# default values thats your problem :P
|
|
|
|
# some bits edited by baafie on March 17 2004, every change marked.
|
|
|
|
# Remove trailing slash in paths (if any)
|
|
FIX_PATHNAMES () {
|
|
BASEPATH="${BASEPATH%/}"
|
|
BINDIR="${BINDIR%/}"
|
|
DATADIR="${DATADIR%/}"
|
|
CONFDIR="${CONFDIR%/}"
|
|
MODULESDIR="${MODULESDIR%/}"
|
|
LOGDIR="${LOGDIR%/}"
|
|
CACHEDIR="${CACHEDIR%/}"
|
|
DOCDIR="${DOCDIR%/}"
|
|
TMPDIR="${TMPDIR%/}"
|
|
PRIVATELIBDIR="${PRIVATELIBDIR%/}"
|
|
SSLDIR="${SSLDIR%/}"
|
|
CURLDIR="${CURLDIR%/}"
|
|
}
|
|
|
|
# Create and run the ./configure command with the appropriate
|
|
# options based on the users settings.
|
|
RUN_CONFIGURE () {
|
|
ARG=" "
|
|
|
|
if [ -z "$BINDIR" -o -z "$DATADIR" -o -z "$CONFDIR" -o -z "$MODULESDIR" -o -z "$LOGDIR" -o -z "$CACHEDIR" -o -z "$DOCDIR" -o -z "$TMPDIR" -o -z "$PRIVATELIBDIR" ]; then
|
|
echo "Sorry './Config -quick' cannot be used because your 'config.settings'"
|
|
echo "file either does not exist or is from an old UnrealIRCd version"
|
|
echo "(older than UnrealIRCd 5.0.0)."
|
|
echo ""
|
|
echo "Please run './Config' without -quick and answer all questions."
|
|
echo ""
|
|
exit
|
|
fi
|
|
|
|
|
|
mkdir -p $TMPDIR
|
|
mkdir -p $PRIVATELIBDIR
|
|
mkdir -p $CONFDIR
|
|
|
|
# Do this even if we're not in advanced mode
|
|
if [ "$ADVANCED" = "1" ] ; then
|
|
if [ "$NOOPEROVERRIDE" = "1" ] ; then
|
|
ARG="$ARG--with-no-operoverride "
|
|
fi
|
|
if [ "$OPEROVERRIDEVERIFY" = "1" ] ; then
|
|
ARG="$ARG--with-operoverride-verify "
|
|
fi
|
|
fi
|
|
if test x"$SSLDIR" = "x" ; then
|
|
ARG="$ARG--enable-ssl "
|
|
else
|
|
ARG="$ARG--enable-ssl=$SSLDIR "
|
|
fi
|
|
# Ensure we install curl even if someone does ./Config -quick...
|
|
if [ "x$CURLDIR" = "x$UNREALCWD/extras/curl" ]; then
|
|
INSTALLCURL=1
|
|
else
|
|
# And that the path does not refer to eg an old unrealircd-1.2.3 either ;)
|
|
if echo "$CURLDIR"|egrep -qi extras.*curl; then
|
|
CURLDIR="$UNREALCWD/extras/curl"
|
|
INSTALLCURL=1
|
|
fi
|
|
fi
|
|
if [ "$INSTALLCURL" = "1" ]; then
|
|
echo ""
|
|
echo "You previously used cURL with the auto-install-script. This is no longer"
|
|
echo "supported. You likely don't need it anyway, because since UnrealIRCd 6.0.0"
|
|
echo "we support remote includes with the 'https' protocol without cURL."
|
|
echo "You only need cURL for non-https such as insecure 'http', 'smb', 'ftp', etc."
|
|
echo "I am disabling cURL support for you..."
|
|
sleep 10
|
|
CURLDIR=""
|
|
fi
|
|
if [ "$REMOTEINC" = "1" ] ; then
|
|
ARG="$ARG--enable-libcurl=$CURLDIR "
|
|
fi
|
|
if [ "$MAXCONNECTIONS_REQUEST" != "auto" ]; then
|
|
ARG="$ARG--with-maxconnections=$MAXCONNECTIONS_REQUEST "
|
|
fi
|
|
|
|
ARG="$ARG--with-bindir=$BINDIR "
|
|
ARG="$ARG--with-datadir=$DATADIR "
|
|
ARG="$ARG--with-pidfile=$DATADIR/unrealircd.pid "
|
|
ARG="$ARG--with-controlfile=$DATADIR/unrealircd.ctl "
|
|
ARG="$ARG--with-confdir=$CONFDIR "
|
|
ARG="$ARG--with-modulesdir=$MODULESDIR "
|
|
ARG="$ARG--with-logdir=$LOGDIR "
|
|
ARG="$ARG--with-cachedir=$CACHEDIR "
|
|
ARG="$ARG--with-docdir=$DOCDIR "
|
|
ARG="$ARG--with-tmpdir=$TMPDIR "
|
|
ARG="$ARG--with-privatelibdir=$PRIVATELIBDIR "
|
|
ARG="$ARG--with-scriptdir=$BASEPATH "
|
|
ARG="$ARG--with-nick-history=$NICKNAMEHISTORYLENGTH "
|
|
ARG="$ARG--with-permissions=$DEFPERM "
|
|
ARG="$ARG--enable-dynamic-linking "
|
|
if [ "$GEOIP" = "classic" ]; then
|
|
ARG="$ARG--enable-geoip-classic "
|
|
fi
|
|
if [ "$GEOIP" = "mmdb" -o "$GEOIP" = "libmaxminddb" ]; then
|
|
ARG="$ARG--enable-mmdb "
|
|
fi
|
|
if [ "$SANITIZER" = "asan" ]; then
|
|
ARG="$ARG--enable-asan "
|
|
fi
|
|
ARG="$ARG $EXTRAPARA "
|
|
CONF="./configure $ARG"
|
|
# remove possibly old instances of curl in ~/unrealircd/lib/
|
|
rm -f $PRIVATELIBDIR/*curl* 1>/dev/null 2>&1
|
|
# At least do SOME parallel compiling by default, IF:
|
|
# - the MAKE environment variable is not set
|
|
# - the MAKEFLAGS environment variable is not set
|
|
# - we are using GNU Make
|
|
if [ "x$MAKE" = "x" ]; then
|
|
if [ "x$MAKEFLAGS" = "x" ]; then
|
|
if make --version 2>&1|grep -q "GNU Make"; then
|
|
LOWMEM=0
|
|
if [ -f /proc/meminfo ]; then
|
|
FREEKB="`cat /proc/meminfo |grep MemAvailable|awk '{ print $2 }'`"
|
|
if [ "$FREEKB" != "" -a "$FREEKB" -lt 768000 ]; then
|
|
LOWMEM=1
|
|
fi
|
|
fi
|
|
if [ "$LOWMEM" = 0 ]; then
|
|
echo "Running with 4 concurrent build processes by default (make -j4)."
|
|
export MAKE='make -j4'
|
|
else
|
|
echo "System detected with less than 750MB available memory, not forcing parallel build."
|
|
fi
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
echo $CONF
|
|
$CONF || exit 1
|
|
cd "$UNREALCWD"
|
|
|
|
if [ "$QUICK" != "1" ] ; then
|
|
if [ ! -f "$CONFDIR/unrealircd.conf" ]; then
|
|
echo ""
|
|
echo "You don't have an 'unrealircd.conf' yet in $CONFDIR"
|
|
echo "Shall I put the example configuration file there?"
|
|
echo "If so, enter the two letter language code that you want, or just press ENTER for English. Answer 'none' to skip."
|
|
AVLANGS="en"
|
|
cd doc/conf/examples 1>/dev/null 2>&1
|
|
for lang in example.??.conf
|
|
do
|
|
ADDTHIS=$(echo "$lang"|sed 's/example.//g'|sed 's/.conf//g')
|
|
AVLANGS="$AVLANGS $ADDTHIS"
|
|
done
|
|
cd - 1>/dev/null 2>&1
|
|
echo "The available options are: $AVLANGS none"
|
|
echo $n "[en] -> $c"
|
|
read cc
|
|
if [ "$cc" = "none" ]; then
|
|
echo "Example config not copied."
|
|
elif [ "$cc" = "en" -o "$cc" = "" ]; then
|
|
cp doc/conf/examples/example.conf $CONFDIR/unrealircd.conf
|
|
else
|
|
cp doc/conf/examples/example.$cc.conf $CONFDIR/unrealircd.conf
|
|
fi
|
|
fi
|
|
|
|
if [ ! -f $CONFDIR/tls/server.cert.pem -a ! -f $CONFDIR/ssl/server.cert.pem ]; then
|
|
export OPENSSLPATH
|
|
if [ "$GENCERTIFICATE" = 1 ]; then
|
|
echo
|
|
echo "*******************************************************************************"
|
|
echo "Next you will be asked some questions in order to generate the TLS certificate."
|
|
echo "IMPORTANT: If you don't own a domain or don't know what to answer, then you can"
|
|
echo " simply press ENTER or use fictional names for each question!"
|
|
echo "*******************************************************************************"
|
|
echo "Press ENTER to continue"
|
|
read cc
|
|
./unrealircd makecert
|
|
echo "Certificate created successfully."
|
|
sleep 1
|
|
else
|
|
echo "Ok, not generating TLS certificate. Make sure that the certificate and key"
|
|
echo "are installed in conf/tls/server.cert.pem and conf/tls/server.key.pem prior to starting the IRCd."
|
|
fi
|
|
else
|
|
echo "TLS certificate already exists in configuration directory, no need to regenerate."
|
|
fi
|
|
fi
|
|
|
|
# Silently force a 'make clean' as otherwise part (or whole) of the
|
|
# compiled source could be using different settings than the user
|
|
# just requested when re-running ./Config.
|
|
$MAKE clean 1>/dev/null 2>&1
|
|
}
|
|
|
|
RUN_ADVANCED () {
|
|
TEST=""
|
|
while [ -z "$TEST" ] ; do
|
|
if [ "$NOOPEROVERRIDE" = "1" ] ; then
|
|
TEST="Yes"
|
|
else
|
|
TEST="No"
|
|
fi
|
|
echo ""
|
|
echo "Do you want to disable oper override?"
|
|
echo $n "[$TEST] -> $c"
|
|
read cc
|
|
if [ -z "$cc" ] ; then
|
|
cc=$TEST
|
|
fi
|
|
case "$cc" in
|
|
[Yy]*)
|
|
NOOPEROVERRIDE="1"
|
|
;;
|
|
[Nn]*)
|
|
NOOPEROVERRIDE=""
|
|
;;
|
|
*)
|
|
echo ""
|
|
echo "You must enter either Yes or No"
|
|
TEST=""
|
|
;;
|
|
esac
|
|
done
|
|
|
|
TEST=""
|
|
while [ -z "$TEST" ] ; do
|
|
if [ "$OPEROVERRIDEVERIFY" = "1" ] ; then
|
|
TEST="Yes"
|
|
else
|
|
TEST="No"
|
|
fi
|
|
echo ""
|
|
echo "Do you want to require opers to /invite themselves into a +s or +p channel?"
|
|
echo $n "[$TEST] -> $c"
|
|
read cc
|
|
if [ -z "$cc" ] ; then
|
|
cc=$TEST
|
|
fi
|
|
case "$cc" in
|
|
[Yy]*)
|
|
OPEROVERRIDEVERIFY="1"
|
|
;;
|
|
[Nn]*)
|
|
OPEROVERRIDEVERIFY=""
|
|
;;
|
|
*)
|
|
echo ""
|
|
echo "You must enter either Yes or No"
|
|
TEST=""
|
|
;;
|
|
esac
|
|
done
|
|
|
|
}
|
|
c=""
|
|
n=""
|
|
UNREALCWD="`pwd`"
|
|
BASEPATH="$HOME/unrealircd"
|
|
DEFPERM="0600"
|
|
SSLDIR=""
|
|
NICKNAMEHISTORYLENGTH="2000"
|
|
MAXCONNECTIONS_REQUEST="auto"
|
|
REMOTEINC=""
|
|
CURLDIR=""
|
|
NOOPEROVERRIDE=""
|
|
OPEROVERRIDEVERIFY=""
|
|
GENCERTIFICATE="1"
|
|
EXTRAPARA=""
|
|
SANITIZER=""
|
|
GEOIP="mmdb"
|
|
if [ "`eval echo -n 'a'`" = "-n a" ] ; then
|
|
c="\c"
|
|
else
|
|
n="-n"
|
|
fi
|
|
|
|
|
|
#parse arguments
|
|
IMPORTEDSETTINGS=""
|
|
NOINTRO=""
|
|
QUICK=""
|
|
ADVANCED=""
|
|
while [ $# -ge 1 ] ; do
|
|
if [ "$1" = "-help" -o "$1" = "--help" -o "$1" = "-h" ] ; then
|
|
echo "Config utility for UnrealIRCd"
|
|
echo "-----------------------------"
|
|
echo "Syntax: ./Config [options]"
|
|
echo "-nointro Skip intro (release notes, etc)"
|
|
echo "-quick Skip questions, go straight to configure"
|
|
echo "-advanced Include additional advanced questions"
|
|
exit 0
|
|
elif [ "$1" = "-nointro" ] ; then
|
|
NOINTRO="1"
|
|
elif [ "$1" = "-quick" -o "$1" = "-q" ] ; then
|
|
QUICK="1"
|
|
echo "running quick config"
|
|
if [ -f "config.settings" ] ; then
|
|
. ./config.settings
|
|
fi
|
|
FIX_PATHNAMES
|
|
RUN_CONFIGURE
|
|
cd "$UNREALCWD"
|
|
exit 0
|
|
elif [ "$1" = "-advanced" ] ; then
|
|
PREADVANCED="1"
|
|
fi
|
|
shift 1
|
|
done
|
|
|
|
if [ "$PREADVANCED" = "1" ] ; then
|
|
ADVANCED="1"
|
|
elif [ "$ADVANCED" = "1" ]; then
|
|
ADVANCED=""
|
|
fi
|
|
|
|
if [ "`id -u`" = "0" ]; then
|
|
echo "ERROR: You cannot build or run UnrealIRCd as root"
|
|
echo ""
|
|
echo "Please create a separate account for building and running UnrealIRCd."
|
|
echo "See https://www.unrealircd.org/docs/Do_not_run_as_root"
|
|
exit
|
|
fi
|
|
|
|
# Check for gmake early...
|
|
if [ "$MAKE" = "" ]; then
|
|
MAKE="make"
|
|
fi
|
|
|
|
if ! $MAKE --version 2>&1|grep -q "GNU Make"; then
|
|
# So $MAKE is not GNU make, but do we have gmake?
|
|
if gmake --version 2>&1|grep -q "GNU Make"; then
|
|
# Great, use that one!
|
|
MAKE="gmake"
|
|
else
|
|
# Both $MAKE and gmake are not GNU make, do we have a working $MAKE at all?
|
|
if command -v "$MAKE" 1>/dev/null 2>&1; then
|
|
echo "Your system has 'make' but UnrealIRCd requires GNU Make ('gmake')"
|
|
echo "Please install 'gmake' "
|
|
echo "eg 'pkg install gmake' on FreeBSD and 'pkg_add gmake' on OpenBSD."
|
|
exit 1
|
|
else
|
|
echo "Your system does not have the required tools installed to build UnrealIRCd."
|
|
echo "Please check https://www.unrealircd.org/docs/Installing_from_source"
|
|
echo "and install the required tools listed under 'Prerequisites'."
|
|
echo "After that, you can run ./Config again"
|
|
exit 1
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
|
|
clear
|
|
|
|
if [ -f "doc/Config.header" -a -z "$NOINTRO" ] ; then
|
|
cat doc/Config.header
|
|
echo ""
|
|
echo $n "[Press Enter to continue]"
|
|
read cc
|
|
clear
|
|
fi
|
|
|
|
echo "We will now ask you a number of questions. You can just press ENTER to accept the defaults!"
|
|
echo ""
|
|
|
|
# This needs to be updated each release so auto-upgrading works for settings, modules, etc!!:
|
|
UNREALRELEASES="6.2.5 6.2.4 6.2.4-rc1 6.2.3 6.2.3-rc2 6.2.3-rc1 6.2.2 6.2.1 6.2.1-rc2 6.2.1-rc1 6.2.0.2 6.2.0.1 6.2.0 6.2.0-beta3 6.2.0-beta2 6.2.0-beta1 6.1.10 6.1.10-rc1 6.1.9 6.1.8 6.1.8.1 6.1.8 6.1.8-rc1 6.1.7 6.1.7-rc1 6.1.6 6.1.6-rc1 6.1.5 6.1.4 6.1.3 6.1.3-rc1 6.1.2.3 6.1.2.2 6.1.2.1 6.1.2 6.1.2-rc2 6.1.2-rc1 6.1.1.1 6.1.1 6.1.0 6.1.0-rc2 6.1.0-rc1 6.0.7 6.0.6 6.0.5 6.0.5-rc2 6.0.5-rc1 6.0.4.2 6.0.4.1 6.0.4 6.0.4-rc2 6.0.4-rc1 6.0.3 6.0.2 6.0.1.1 6.0.1 6.0.0"
|
|
if [ -f "config.settings" ]; then
|
|
. ./config.settings
|
|
else
|
|
# Try to load a previous config.settings
|
|
for x in $UNREALRELEASES
|
|
do
|
|
if [ -f ../unrealircd-$x/config.settings ]; then
|
|
IMPORTEDSETTINGS="../unrealircd-$x"
|
|
break
|
|
fi
|
|
done
|
|
echo "If you have previously installed UnrealIRCd on this shell then you can specify a"
|
|
echo "directory here so I can import the build settings and third party modules"
|
|
echo "to make your life a little easier."
|
|
if [ ! -z "$IMPORTEDSETTINGS" ]; then
|
|
echo "Found previous installation in: $IMPORTEDSETTINGS."
|
|
echo "You can enter a different path or type 'none' if you don't want to use it."
|
|
echo "Just press Enter to accept the default settings."
|
|
else
|
|
echo "If you install UnrealIRCd for the first time on this shell, then just hit Enter";
|
|
fi
|
|
|
|
TEST="$IMPORTEDSETTINGS"
|
|
echo $n "[$TEST] -> $c"
|
|
read cc
|
|
if [ -z "$cc" ]; then
|
|
IMPORTEDSETTINGS="$TEST"
|
|
else
|
|
IMPORTEDSETTINGS="$cc"
|
|
fi
|
|
if [ "$IMPORTEDSETTINGS" = "none" ]; then
|
|
IMPORTEDSETTINGS=""
|
|
fi
|
|
if [ "$IMPORTEDSETTINGS" != "" ]; then
|
|
if [ -d $IMPORTEDSETTINGS/conf ]; then
|
|
echo "ERROR: Directory $IMPORTEDSETTINGS is an INSTALLATION directory (eg /home/irc/unrealircd)."
|
|
echo "This question was about a SOURCE directory (eg /home/irc/unrealircd-5.0.0)."
|
|
exit
|
|
fi
|
|
if [ ! -f $IMPORTEDSETTINGS/config.settings ]; then
|
|
echo "Directory $IMPORTEDSETTINGS does not exist or does not contain a config.settings file"
|
|
exit
|
|
fi
|
|
COPYMODULES="1"
|
|
if grep -q TOPICNICKISNUH $IMPORTEDSETTINGS/config.settings; then
|
|
echo "Directory $IMPORTEDSETTINGS seems to be UnrealIRCd 4.x (or older)."
|
|
echo "I will copy the settings but not any 3rd party modules, as they are incompatible with 5.x."
|
|
COPYMODULES="0"
|
|
fi
|
|
# Actually load the settings
|
|
. $IMPORTEDSETTINGS/config.settings
|
|
if [ "$COPYMODULES" = "1" ]; then
|
|
# Copy over 3rd party modules (also deals with 0 file cases, hence the silly looking code)
|
|
for f in $IMPORTEDSETTINGS/src/modules/third/*.c
|
|
do
|
|
[ -e "$f" ] && cp $f src/modules/third/
|
|
done
|
|
fi
|
|
fi
|
|
fi
|
|
# If we just imported settings and the curl dir is set to
|
|
# something like /home/xxx/unrealircd-5.x.y/extras/curl/
|
|
# (what we call 'local-curl') then remove this setting as
|
|
# it would refer to the old UnrealIRCd installation.
|
|
if [ ! -z "$IMPORTEDSETTINGS" ]; then
|
|
if echo "$CURLDIR"|grep -qi unrealircd; then
|
|
CURLDIR=""
|
|
fi
|
|
fi
|
|
|
|
TEST="$BASEPATH"
|
|
echo ""
|
|
echo "In what directory do you want to install UnrealIRCd?"
|
|
echo "(Note: UnrealIRCd 6 will need to be installed somewhere."
|
|
echo " If this directory does not exist it will be created.)"
|
|
echo $n "[$TEST] -> $c"
|
|
read cc
|
|
if [ -z "$cc" ] ; then
|
|
BASEPATH=$TEST
|
|
else
|
|
BASEPATH=`eval echo $cc` # modified
|
|
fi
|
|
if [ "$BASEPATH" = "$UNREALCWD" ]; then
|
|
echo ""
|
|
echo "ERROR: The installation directory cannot be the same as the directory"
|
|
echo " containing the source code ($UNREALCWD)."
|
|
echo " HINT: Usually the directory containing the source is $HOME/unrealircd-5.x.y"
|
|
echo " and the installation directory you would need to enter is $HOME/unrealircd"
|
|
exit 1
|
|
fi
|
|
|
|
# TODO: For -advanced we could prompt the user.
|
|
BINDIR="$BASEPATH/bin"
|
|
DATADIR="$BASEPATH/data"
|
|
CONFDIR="$BASEPATH/conf"
|
|
MODULESDIR="$BASEPATH/modules"
|
|
LOGDIR="$BASEPATH/logs"
|
|
CACHEDIR="$BASEPATH/cache"
|
|
DOCDIR="$BASEPATH/doc"
|
|
TMPDIR="$BASEPATH/tmp"
|
|
PRIVATELIBDIR="$BASEPATH/lib"
|
|
|
|
TEST=""
|
|
while [ -z "$TEST" ] ; do
|
|
TEST="$DEFPERM"
|
|
echo ""
|
|
echo "What should the default permissions for your configuration files be? (Set this to 0 to disable)"
|
|
echo "It is strongly recommended that you use 0600 to prevent unwanted reading of the file"
|
|
echo $n "[$TEST] -> $c"
|
|
read cc
|
|
if [ -z "$cc" ] ; then
|
|
DEFPERM=$TEST
|
|
break
|
|
fi
|
|
case "$cc" in
|
|
[0-9]*)
|
|
DEFPERM="$cc"
|
|
;;
|
|
*)
|
|
echo ""
|
|
echo "You must enter a number"
|
|
TEST=""
|
|
;;
|
|
esac
|
|
done
|
|
|
|
echo ""
|
|
echo "If you want, you can manually enter the path to OpenSSL/LibreSSL here."
|
|
echo "In most cases you can leave this blank and it will be detected automatically."
|
|
|
|
if [ -z "$SSLDIR" ]; then
|
|
uname|grep -q Darwin
|
|
if [ "$?" = 0 ]; then
|
|
echo "Looks like you're on a Mac - El Capitan and higher require"
|
|
echo "a 3rd party OpenSSL installation. We recommend using homebrew"
|
|
echo "to install OpenSSL, but you may install it any other way as well."
|
|
echo "We are selecting the default homebrew OpenSSL path - but you can"
|
|
echo "change it to another path if you have installed OpenSSL another way"
|
|
SSLDIR="/usr/local/opt/openssl/"
|
|
fi
|
|
fi
|
|
|
|
TEST="$SSLDIR"
|
|
echo $n "[$TEST] -> $c"
|
|
read cc
|
|
if [ -z "$cc" ] ; then
|
|
SSLDIR="$TEST"
|
|
else
|
|
SSLDIR=`eval echo $cc` # modified
|
|
fi
|
|
|
|
if [ "$SSLDIR" != "" -a "$SSLDIR" != "/usr" ]; then
|
|
echo ""
|
|
echo "You answered previous question manually. Just note that if the library is not"
|
|
echo "in your default library path then UnrealIRCd may fail to start with an error"
|
|
echo "that it cannot find certain .so files (libraries). In that case you would have"
|
|
echo "to either set the LD_LIBARY_PATH environment variable, or you could update the"
|
|
echo "Makefile to link with -Wl,-rpath,$SSLDIR or similar."
|
|
echo ""
|
|
if [ "$SSLDIR" = "/usr/local" ]; then
|
|
echo "**** CAUTION ****"
|
|
echo "You have chosen to use OpenSSL from /usr/local. Just be aware that if you"
|
|
echo "use the LD_LIBRARY_PATH or -Wl,-rpath,$SSLDIR from above,"
|
|
echo "that you are diverting OTHER libraries to that path as well."
|
|
echo "It's not only loading OpenSSL from /usr/local but also potentially other"
|
|
echo "libraries like PCRE2, Jansson, or any of the other libraries that"
|
|
echo "UnrealIRCd uses (including dependencies about 40 libs in total!)"
|
|
echo "All that can result in weird issues and crashes!"
|
|
echo ""
|
|
fi
|
|
echo "Press enter to continue with the rest of the questions, or CTRL+C to abort."
|
|
read cc
|
|
fi
|
|
|
|
if [ ! -f $BASEPATH/conf/tls/server.cert.pem -a ! -f $BASEPATH/conf/ssl/server.cert.pem ]; then
|
|
TEST=""
|
|
while [ -z "$TEST" ] ; do
|
|
if [ "$GENCERTIFICATE" = "1" ] ; then
|
|
TEST="Yes"
|
|
else
|
|
TEST="No"
|
|
fi
|
|
echo ""
|
|
echo "UnrealIRCd requires a TLS certificate in order to work."
|
|
echo "Do you want to generate a self-signed TLS certificate for the IRCd?"
|
|
echo "Only answer No if you already have one."
|
|
echo $n "[$TEST] -> $c"
|
|
read cc
|
|
if [ -z "$cc" ] ; then
|
|
cc=$TEST
|
|
fi
|
|
case "$cc" in
|
|
[Yy]*)
|
|
GENCERTIFICATE="1"
|
|
;;
|
|
[Nn]*)
|
|
GENCERTIFICATE=""
|
|
;;
|
|
*)
|
|
echo ""
|
|
echo "You must enter either Yes or No"
|
|
TEST=""
|
|
;;
|
|
esac
|
|
done
|
|
fi
|
|
|
|
if echo "$CURLDIR"|egrep -qi extras.*curl; then
|
|
REMOTEINC=""
|
|
CURLDIR=""
|
|
echo ""
|
|
echo "You previously used cURL with the auto-install-script. This is no longer"
|
|
echo "supported. You likely don't need it anyway, because since UnrealIRCd 6.0.0"
|
|
echo "we support remote includes with the 'https' protocol without cURL."
|
|
echo "You only need cURL for non-https such as insecure 'http', 'smb', 'ftp', etc."
|
|
echo "I am disabling cURL support for you..."
|
|
echo "(Press enter to continue)"
|
|
read cc
|
|
fi
|
|
|
|
TEST=""
|
|
while [ -z "$TEST" ] ; do
|
|
if [ "$REMOTEINC" = "1" ] ; then
|
|
TEST="Yes"
|
|
else
|
|
TEST="No"
|
|
fi
|
|
echo ""
|
|
echo "UnrealIRCd always supports 'remote includes' for https URLs like:"
|
|
echo "include \"https://www.example.org/files/opers.conf\";"
|
|
echo "Do you also need support for non-https, such as ftp, tftp, smb or insecure http?"
|
|
echo "Answer 'Yes' if you need such protocols and want to use the cURL library."
|
|
echo "By default (answer 'No') we only support the https protocol, which is perfectly fine for most people."
|
|
echo $n "[$TEST] -> $c"
|
|
read cc
|
|
if [ -z "$cc" ] ; then
|
|
cc=$TEST
|
|
fi
|
|
case "$cc" in
|
|
[Yy]*)
|
|
REMOTEINC="1"
|
|
;;
|
|
[Nn]*)
|
|
REMOTEINC=""
|
|
CURLDIR=""
|
|
;;
|
|
*)
|
|
echo ""
|
|
echo "You must enter either Yes or No"
|
|
TEST=""
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [ "$REMOTEINC" = "1" ] ; then
|
|
if [ ! -d "$CURLDIR" ]; then
|
|
# Reset any previous CURLDIR if it doesn't exist (anymore)
|
|
CURLDIR=""
|
|
fi
|
|
|
|
SUGGESTCURLDIR=""
|
|
|
|
if [ -d "/usr/local/include/curl" ]; then
|
|
SUGGESTCURLDIR="/usr/local"
|
|
fi
|
|
if [ -d "/usr/include/curl" ]; then
|
|
SUGGESTCURLDIR="/usr"
|
|
fi
|
|
# This one also works for /usr/include/x86_64-linux-gnu and friends:
|
|
if [ -f "/usr/bin/curl-config" ]; then
|
|
SUGGESTCURLDIR="/usr"
|
|
fi
|
|
|
|
GOTASYNC=0
|
|
if [ "x$SUGGESTCURLDIR" != "x" ]; then
|
|
# Check if it's of any use: a curl without async dns (cares) hangs the entire ircd..
|
|
# normally this is done in ./configure but now we're forced to do it also here..
|
|
if "$SUGGESTCURLDIR"/bin/curl-config --features | grep -q -e AsynchDNS; then
|
|
GOTASYNC="1"
|
|
fi
|
|
if [ "$GOTASYNC" != "1" ]; then
|
|
SUGGESTCURLDIRBAD="$CURLDIR"
|
|
SUGGESTCURLDIR=""
|
|
fi
|
|
fi
|
|
|
|
if [ "x$CURLDIR" = "x$HOME/curl" ]; then
|
|
if [ "x$SUGGESTCURLDIR" != "x" ]; then
|
|
# I guess some people will complain about this, but if system wide cURL is available
|
|
# and many people have old defaults then this is much preferred:
|
|
echo ""
|
|
echo "WARNING: Your previous (potentially old) setting is to use cURL from $HOME/curl."
|
|
echo "However, your operating system also provides a working cURL."
|
|
echo "I am therefore changing the setting to: $SUGGESTCURLDIR"
|
|
CURLDIR="$SUGGESTCURLDIR"
|
|
else
|
|
echo ""
|
|
echo "WARNING: We no longer use $HOME/curl nowadays."
|
|
echo "Use the automatic download and install feature below."
|
|
CURLDIR=""
|
|
fi
|
|
fi
|
|
|
|
if [ "x$CURLDIR" = "x" ]; then
|
|
CURLDIR="$SUGGESTCURLDIR"
|
|
# NOTE: CURLDIR may still be empty after this
|
|
|
|
# System curl has no asyncdns, so install our own.
|
|
if [ "$GOTASYNC" != "1" ]; then
|
|
CURLDIR=""
|
|
fi
|
|
|
|
# Need to output it here, as the HOME check from above may cause this to be no longer relevant.
|
|
if [ "x$CURLDIR" = "x" -a "x$SUGGESTCURLDIRBAD" != "x" ]; then
|
|
echo "Curl library was found in $SUGGESTCURLDIRBAD, but it does not support Asynchronous DNS (not compiled with c-ares)"
|
|
echo "so it's of no use to us as it would stall the IRCd on REHASH."
|
|
fi
|
|
fi
|
|
|
|
# Final check
|
|
if [ "x$CURLDIR" != "x" ]; then
|
|
"$CURLDIR/bin/curl-config" --features 2>/dev/null | grep -q -e AsynchDNS
|
|
if [ "$?" != 0 ]; then
|
|
echo "Curl from $CURLDIR seems unusable ($CURLDIR/bin/curl-config does not exist) -- cURL disabled."
|
|
CURLDIR=""
|
|
fi
|
|
fi
|
|
|
|
if [ "x$CURLDIR" = "x" ]; then
|
|
echo ""
|
|
echo "ERROR: the cURL library could not be found and you said you needed it for remote includes."
|
|
echo ""
|
|
echo "Note that you only need cURL if you need remote includes with protocols like insecure 'http', 'smb', 'ftp', etc."
|
|
echo "You DO NOT need this for 'https' remote includes, as https support works without cURL since UnrealIRCd 6.0.0!"
|
|
echo ""
|
|
echo "Solution:"
|
|
echo "A) Re-run ./Config and answer 'No' to the question 'Do you also need support for non-https'"
|
|
echo "B) Or install the cURL library in the system (eg 'apt-get install libcurl4-openssl-dev' or similar)"
|
|
echo " and then re-run ./Config"
|
|
exit 1
|
|
fi
|
|
|
|
TEST=""
|
|
while [ -z "$TEST" ] ; do
|
|
TEST="$CURLDIR"
|
|
echo ""
|
|
echo "Specify the directory you installed libcurl to"
|
|
echo $n "[$TEST] -> $c"
|
|
read cc
|
|
if [ -z "$cc" ] ; then
|
|
cc=$TEST
|
|
else
|
|
TEST=$cc
|
|
CURLDIR=`eval echo $cc` # modified
|
|
fi
|
|
done
|
|
if [ "x$CURLDIR" != "x" ]; then
|
|
"$CURLDIR/bin/curl-config" --libs 1>/dev/null 2>&1
|
|
if [ "$?" != 0 ]; then
|
|
echo "Curl from $CURLDIR seems unusable ($CURLDIR/bin/curl-config does not exist)"
|
|
CURLDIR=""
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
|
|
TEST=""
|
|
while [ -z "$TEST" ] ; do
|
|
TEST="$NICKNAMEHISTORYLENGTH"
|
|
echo ""
|
|
echo "How far back do you want to keep the nickname history?"
|
|
echo $n "[$TEST] -> $c"
|
|
read cc
|
|
if [ -z "$cc" ] ; then
|
|
NICKNAMEHISTORYLENGTH=$TEST
|
|
break
|
|
fi
|
|
case "$cc" in
|
|
[1-9]*)
|
|
NICKNAMEHISTORYLENGTH="$cc"
|
|
;;
|
|
*)
|
|
echo ""
|
|
echo "You must enter a number"
|
|
TEST=""
|
|
;;
|
|
esac
|
|
done
|
|
|
|
TEST=""
|
|
while [ -z "$TEST" ] ; do
|
|
TEST="$GEOIP"
|
|
echo ""
|
|
echo "GeoIP is a feature that allows converting an IP address to a location (country)"
|
|
echo "Possible build options:"
|
|
echo "classic: This is the classic (OLD) geoip engine. Slowly being phased out."
|
|
echo " It receives automatic updates."
|
|
echo " mmdb: This uses the build-in mmdb library. It is the NEW geoip engine."
|
|
echo " It receives automatic updates as well."
|
|
echo " none: Don't build classic, and load neither classic nor mmdb by default."
|
|
echo "Choose one of: classic, mmdb, none"
|
|
echo $n "[$TEST] -> $c"
|
|
read cc
|
|
if [ -z "$cc" ] ; then
|
|
GEOIP=$TEST
|
|
break
|
|
fi
|
|
case "$cc" in
|
|
classic)
|
|
GEOIP="$cc"
|
|
;;
|
|
mmdb)
|
|
GEOIP="$cc"
|
|
;;
|
|
none)
|
|
GEOIP="$cc"
|
|
;;
|
|
*)
|
|
echo ""
|
|
echo "Invalid choice: $cc"
|
|
TEST=""
|
|
;;
|
|
esac
|
|
done
|
|
|
|
TEST=""
|
|
while [ -z "$TEST" ] ; do
|
|
TEST="$MAXCONNECTIONS_REQUEST"
|
|
echo ""
|
|
echo "What is the maximum number of sockets (and file descriptors) that"
|
|
echo "UnrealIRCd may use?"
|
|
echo "It is recommended to leave this at the default setting 'auto',"
|
|
echo "which at present results in a limit of up to 16384, depending on"
|
|
echo "the system. When you boot UnrealIRCd later you will always see"
|
|
echo "the effective limit."
|
|
echo $n "[$TEST] -> $c"
|
|
read cc
|
|
if [ -z "$cc" ] ; then
|
|
MAXCONNECTIONS_REQUEST=$TEST
|
|
break
|
|
fi
|
|
case "$cc" in
|
|
auto)
|
|
MAXCONNECTIONS_REQUEST="$cc"
|
|
;;
|
|
[1-9][0-9][0-9]*)
|
|
MAXCONNECTIONS_REQUEST="$cc"
|
|
;;
|
|
*)
|
|
echo ""
|
|
echo "You must to enter a number greater than or equal to 100."
|
|
echo "Or enter 'auto' to leave it at automatic, which is recommended."
|
|
TEST=""
|
|
;;
|
|
esac
|
|
done
|
|
if [ -n "$ADVANCED" ] ; then
|
|
RUN_ADVANCED
|
|
fi
|
|
|
|
TEST=""
|
|
while [ -z "$TEST" ] ; do
|
|
if [ "$SANITIZER" = "asan" ] ; then
|
|
TEST="Yes"
|
|
else
|
|
TEST="No"
|
|
fi
|
|
echo ""
|
|
echo "Are you running UnrealIRCd as a test, debugging a problem or developing a module?"
|
|
echo "Then it is possible to run with AddressSanitizer and UndefinedBehaviorSanitizer"
|
|
echo "enabled. This will catch bugs, such as out-of-bounds and other memory corruption"
|
|
echo "issues, which can be really helpful in some cases. The downside is that it will"
|
|
echo "consume a lot more memory and run slower too. So, only answer 'Yes' if you are"
|
|
echo "OK with this. Also, on some systems (notably FreeBSD <14.2), when you enable"
|
|
echo "this UnrealIRCd may fail to start. So when in doubt, answer 'No'."
|
|
echo "Do you want to enable AddressSanitizer & UndefinedBehaviorSanitizer?"
|
|
echo $n "[$TEST] -> $c"
|
|
read cc
|
|
if [ -z "$cc" ] ; then
|
|
cc=$TEST
|
|
fi
|
|
case "$cc" in
|
|
[Yy]*)
|
|
SANITIZER="asan"
|
|
;;
|
|
[Nn]*)
|
|
SANITIZER=""
|
|
;;
|
|
*)
|
|
echo ""
|
|
echo "You must enter either Yes or No"
|
|
TEST=""
|
|
;;
|
|
esac
|
|
done
|
|
|
|
TEST="$EXTRAPARA"
|
|
echo ""
|
|
echo "Would you like to pass any custom parameters to configure?"
|
|
echo "Most people don't need this and can just press ENTER."
|
|
echo "Otherwise, see \`./configure --help' and write them here:"
|
|
echo $n "[$TEST] -> $c"
|
|
read EXTRAPARA
|
|
if [ -z "$EXTRAPARA" ]; then
|
|
EXTRAPARA="$TEST"
|
|
fi
|
|
|
|
FIX_PATHNAMES
|
|
|
|
rm -f config.settings
|
|
cat > config.settings << __EOF__
|
|
#
|
|
# These are the settings saved from running './Config'.
|
|
# Note that it is not recommended to edit config.settings by hand!
|
|
# Chances are you misunderstand what a variable does or what the
|
|
# supported values are. You better just re-run the ./Config script
|
|
# and answer appropriately there, to get a correct config.settings
|
|
# file.
|
|
#
|
|
BASEPATH="$BASEPATH"
|
|
BINDIR="$BINDIR"
|
|
DATADIR="$DATADIR"
|
|
CONFDIR="$CONFDIR"
|
|
MODULESDIR="$MODULESDIR"
|
|
LOGDIR="$LOGDIR"
|
|
CACHEDIR="$CACHEDIR"
|
|
DOCDIR="$DOCDIR"
|
|
TMPDIR="$TMPDIR"
|
|
PRIVATELIBDIR="$PRIVATELIBDIR"
|
|
MAXCONNECTIONS_REQUEST="$MAXCONNECTIONS_REQUEST"
|
|
NICKNAMEHISTORYLENGTH="$NICKNAMEHISTORYLENGTH"
|
|
GEOIP="$GEOIP"
|
|
DEFPERM="$DEFPERM"
|
|
SSLDIR="$SSLDIR"
|
|
REMOTEINC="$REMOTEINC"
|
|
CURLDIR="$CURLDIR"
|
|
NOOPEROVERRIDE="$NOOPEROVERRIDE"
|
|
OPEROVERRIDEVERIFY="$OPEROVERRIDEVERIFY"
|
|
GENCERTIFICATE="$GENCERTIFICATE"
|
|
SANITIZER="$SANITIZER"
|
|
EXTRAPARA="$EXTRAPARA"
|
|
ADVANCED="$ADVANCED"
|
|
__EOF__
|
|
RUN_CONFIGURE
|
|
cd "$UNREALCWD"
|
|
cat << __EOF__
|
|
|
|
_______________________________________________________________________
|
|
| |
|
|
| UnrealIRCd Compile-Time Config |
|
|
|_______________________________________________________________________|
|
|
|_______________________________________________________________________|
|
|
| |
|
|
| - The UnrealIRCd Team - |
|
|
| |
|
|
| Bram Matthys (Syzop) - syzop@unrealircd.org |
|
|
| Krzysztof Beresztant (k4be) - k4be@unrealircd.org |
|
|
| Gottem - gottem@unrealircd.org |
|
|
| i - i@unrealircd.org |
|
|
|_______________________________________________________________________|
|
|
|_______________________________________________________________________|
|
|
| |
|
|
| Now all you have to do is type '$MAKE' and let it compile. When that's |
|
|
| done, you will receive other instructions on what to do next. |
|
|
|_______________________________________________________________________|
|
|
__EOF__
|
|
|