-
Notifications
You must be signed in to change notification settings - Fork 1
/
Config
executable file
·919 lines (863 loc) · 25.9 KB
/
Config
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
#!/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 ([email protected])
# 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
# 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
echo "WARNING: Potentially old cURL directory encountered ($CURLDIR)."
echo "I am changing the cURL directory to $UNREALCWD/extras/curl and forcing a rebuild of cURL."
CURLDIR="$UNREALCWD/extras/curl"
INSTALLCURL=1
fi
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" = "libmaxminddb" ]; then
ARG="$ARG--enable-libmaxminddb "
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
if [ "x$INSTALLCURL" = "x1" ]; then
extras/curlinstall "$PRIVATELIBDIR" || exit 1
fi
# 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/tls/server.cert.pem -a ! -f $CONFDIR/ssl/server.cert.pem ]; then
export OPENSSLPATH
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 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
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
$MAKE pem
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="100"
MAXCONNECTIONS_REQUEST="auto"
REMOTEINC="1"
CURLDIR=""
NOOPEROVERRIDE=""
OPEROVERRIDEVERIFY=""
GENCERTIFICATE="1"
EXTRAPARA=""
SANITIZER=""
GEOIP="none"
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" ] ; 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 $MAKE --version 1>/dev/null 2>&1; then
echo "Your system has 'make' but UnrealIRCd requires GNU Make ('gmake')"
echo "Please install 'gmake' (eg 'pkg install gmake' on BSD)."
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="unrealircd-6.1.0-rc2 unrealircd-6.1.0-rc1 unrealircd-6.0.7 unrealircd-6.0.6 unrealircd-6.0.5 unrealircd-6.0.5-rc2 unrealircd-6.0.5-rc1 unrealircd-6.0.4.2 unrealircd-6.0.4.1 unrealircd-6.0.4 unrealircd-6.0.4-rc2 unrealircd-6.0.4-rc1 unrealircd-6.0.3 unrealircd-6.0.2 unrealircd-6.0.1.1 unrealircd-6.0.1 unrealircd-6.0.0 unrealircd-6.0.0-rc2 unrealircd-6.0.0-rc1 unrealircd-6.0.0-beta4 unrealircd-6.0.0-beta3 unrealircd-6.0.0-beta2 unrealircd-6.0.0-beta1 unrealircd-5.2.3 unrealircd-5.2.2 unrealircd-5.2.1.1 unrealircd-5.2.1 unrealircd-5.2.1-rc1 unrealircd-5.2.0.2 unrealircd-5.2.0.1 unrealircd-5.2.0 unrealircd-5.2.0-rc1 unrealircd-5.0.9.1 unrealircd-5.0.9 unrealircd-5.0.9-rc1 unrealircd-5.0.8 unrealircd-5.0.8-rc1 unrealircd-5.0.7 unrealircd-5.0.7-rc1 unrealircd-5.0.6"
if [ -f "config.settings" ]; then
. ./config.settings
else
# Try to load a previous config.settings
for x in $UNREALRELEASES
do
if [ -f ../$x/config.settings ]; then
IMPORTEDSETTINGS="../$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
TEST=""
while [ -z "$TEST" ] ; do
if [ "$REMOTEINC" = "1" ] ; then
TEST="Yes"
else
TEST="No"
fi
echo ""
echo "UnrealIRCd comes with support for 'remote includes', this allows things like:"
echo "include \"https://www.example.org/files/opers.conf\";"
echo "Do you want to compile with the libcurl library to enable additional protocols?"
echo "If you answer 'No' then only https:// links will work for remote includes."
echo "Answer 'Yes' if you need other protocols, such as plaintext http, ftp, tftp or smb."
echo "Most people answer 'No' here because they don't use remote includes or only need https."
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
INSTALLCURL="0"
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)"
CURLDIR=""
fi
fi
if [ "x$CURLDIR" = "x" ]; then
# Still empty?
TEST=""
while [ -z "$TEST" ] ; do
TEST="Yes"
echo ""
echo "Do you want me to automatically download and install curl for you?"
echo $n "[$TEST] -> $c"
read cc
if [ -z "$cc" ] ; then
cc=$TEST
fi
case "$cc" in
[Yy]*)
INSTALLCURL="1"
CURLDIR="$UNREALCWD/extras/curl"
;;
[Nn]*)
INSTALLCURL="0"
;;
*)
echo ""
echo "You must enter either Yes or No"
TEST=""
;;
esac
done
fi
if [ "$INSTALLCURL" != "1" ]; then
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
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 DEFAULT geoip engine. It should work on all systems"
echo " and receives automatic updates."
echo "libmaxminddb: This uses the libmaxminddb library. If you want to use this, then"
echo " you need to install the libmaxminddb library on your system first"
echo " none: Don't build with any geoip library (geoip-csv is still built)"
echo "Choose one of: classic, libmaxminddb, none"
echo $n "[$TEST] -> $c"
read cc
if [ -z "$cc" ] ; then
GEOIP=$TEST
break
fi
case "$cc" in
classic)
GEOIP="$cc"
;;
libmaxminddb)
GEOIP="$cc"
;;
none)
GEOIP="$cc"
;;
*)
echo ""
echo "Invalid choice: $cc"
TEST=""
;;
esac
done
echo ""
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 enabled. This will make it"
echo "catch bugs such as out-of-bounds and other memory corruption issues, which can"
echo "be really helpful in some cases. The downside is that it will consume a lot"
echo "more memory and run slower too. So, only answer 'Yes' if you are OK with this."
echo "Also, on some systems (notably FreeBSD), when you enable AddressSanitizer,"
echo "UnrealIRCd may fail to start. So when in doubt, answer 'No'."
echo "Do you want to enable AddressSanitizer?"
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) - [email protected] |
| Krzysztof Beresztant (k4be) - [email protected] |
| Gottem - [email protected] |
| i - [email protected] |
|_______________________________________________________________________|
|_______________________________________________________________________|
| |
| 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__