X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=configure;h=048975f41dee8f5ece6c68e792487ce6ee612132;hb=be0c809590635fc53fa11ca05ba974699b9ec1b6;hp=ca2e2f19ba6a2596a430077de263aff6ccced1df;hpb=c6a508a3da977041909f18f77d6e8fea942512cf;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/configure b/configure index ca2e2f19b..048975f41 100755 --- a/configure +++ b/configure @@ -59,6 +59,7 @@ my ($opt_binary_dir, $opt_manual_dir, $opt_module_dir, $opt_prefix, + $opt_script_dir, $opt_socketengine, $opt_system, $opt_uid); @@ -88,6 +89,7 @@ GetOptions( 'manual-dir=s' => \$opt_manual_dir, 'module-dir=s' => \$opt_module_dir, 'prefix=s' => \$opt_prefix, + 'script-dir=s' => \$opt_script_dir, 'socketengine=s' => \$opt_socketengine, 'system' => \$opt_system, 'uid=s' => \$opt_uid, @@ -122,6 +124,7 @@ our $interactive = !( defined $opt_manual_dir || defined $opt_module_dir || defined $opt_prefix || + defined $opt_script_dir || defined $opt_socketengine || defined $opt_system || defined $opt_uid @@ -156,13 +159,13 @@ unless ($config{CXX}) { } my %compiler = get_compiler_info($config{CXX}); +$config{HAS_ARC4RANDOM_BUF} = run_test 'arc4random_buf()', test_file($config{CXX}, 'arc4random_buf.cpp'); $config{HAS_CLOCK_GETTIME} = run_test 'clock_gettime()', test_file($config{CXX}, 'clock_gettime.cpp', $^O eq 'darwin' ? undef : '-lrt'); $config{HAS_EVENTFD} = run_test 'eventfd()', test_file($config{CXX}, 'eventfd.cpp'); my @socketengines; push @socketengines, 'epoll' if run_test 'epoll', test_header $config{CXX}, 'sys/epoll.h'; push @socketengines, 'kqueue' if run_test 'kqueue', test_file $config{CXX}, 'kqueue.cpp'; -push @socketengines, 'ports' if run_test 'Solaris IOCP', test_header $config{CXX}, 'port.h'; push @socketengines, 'poll' if run_test 'poll', test_header $config{CXX}, 'poll.h'; push @socketengines, 'select'; @@ -184,6 +187,7 @@ if (defined $opt_system) { $config{LOG_DIR} = $opt_module_dir // '/var/log/inspircd'; $config{MANUAL_DIR} = $opt_manual_dir // '/usr/share/man/man1'; $config{MODULE_DIR} = $opt_module_dir // '/usr/lib/inspircd'; + $config{SCRIPT_DIR} = $opt_script_dir // '/usr/share/inspircd' } else { $config{BASE_DIR} = $opt_prefix // $config{BASE_DIR} // rel2abs 'run'; $config{BINARY_DIR} = $opt_binary_dir // $config{BINARY_DIR} // rel2abs $config{BASE_DIR} . '/bin'; @@ -192,6 +196,7 @@ if (defined $opt_system) { $config{LOG_DIR} = $opt_log_dir // $config{LOG_DIR} // rel2abs $config{BASE_DIR} . '/logs'; $config{MANUAL_DIR} = $opt_manual_dir // $config{MANUAL_DIR} // rel2abs $config{BASE_DIR} . '/manuals'; $config{MODULE_DIR} = $opt_module_dir // $config{MODULE_DIR} // rel2abs $config{BASE_DIR} . '/modules'; + $config{SCRIPT_DIR} = $opt_script_dir // $config{SCRIPT_DIR} // $config{BASE_DIR}; } # Parse --gid=123 or --gid=foo and extract the group id. @@ -202,6 +207,20 @@ if (defined $opt_gid) { } else { @group = $opt_system ? getgrnam('irc') : getgrgid($config{GID} // getgid()); print_error "you need to specify a group to run as using '--gid [id|name]'!" unless @group; + unless ($group[2]) { + print_warning <<"EOW"; +You are building as the privileged $group[0] group and have not specified +an unprivileged group to run InspIRCd as. + +This is almost never what you should do. You should probably either create a new +unprivileged user/group to build and run as or pass the '--gid [id|name]' flag +to specify an unprivileged group to run as. +EOW + if (!prompt_bool $interactive, "Are you sure you want to build as the $group[0] group?", 0) { + say STDERR "If you are sure you want to build as the $group[0] group pass the --gid $group[2] flag." unless $interactive; + exit 1; + } + } } $config{GROUP} = $group[0]; $config{GID} = $group[2]; @@ -214,13 +233,24 @@ if (defined $opt_uid) { } else { @user = $opt_system ? getpwnam('irc') : getpwuid($config{UID} // getuid()); print_error "you need to specify a user to run as using '--uid [id|name]'!" unless @user; + unless ($user[2]) { + print_warning <<"EOW"; +You are building as the privileged $user[0] user and have not specified +an unprivileged user to run InspIRCd as. + +This is almost never what you should do. You should probably either create a new +unprivileged user/group to build and run as or pass the '--uid [id|name]' flag +to specify an unprivileged user to run as. +EOW + if (!prompt_bool $interactive, "Are you sure you want to build as the $user[0] user?", 0) { + say STDERR "If you are sure you want to build as the $user[0] user pass the --uid $user[2] flag." unless $interactive; + exit 1; + } + } } $config{USER} = $user[0]; $config{UID} = $user[2]; -# Clear the screen. -system 'tput', 'clear' if $interactive; - # Warn the user about clock drifting when running on OpenVZ. if (-e '/proc/user_beancounters' || -e '/proc/vz/vzaquota') { print_warning <<'EOW'; @@ -238,8 +268,9 @@ not been tested as heavily and may contain various faults which could seriously affect the running of your server. It is recommended that you use a stable version instead. -You can obtain the latest stable version from http://www.inspircd.org/ or by -running `git checkout insp20` if you are installing from Git. +You can obtain the latest stable version from https://www.inspircd.org or by +running `<|GREEN git checkout $(git describe --abbrev=0 --tags insp3)|>` if you are +installing from Git. EOW if (!prompt_bool $interactive, 'I understand this warning and want to continue anyway.', $opt_development // 0) { say STDERR 'If you understand this warning and still want to continue pass the --development flag.' unless $interactive; @@ -258,13 +289,14 @@ Currently, InspIRCd is configured with the following paths: <|BOLD Log:|> $config{LOG_DIR} <|BOLD Manual:|> $config{MANUAL_DIR} <|BOLD Module:|> $config{MODULE_DIR} +<|BOLD Script:|> $config{SCRIPT_DIR} Do you want to change these settings? EOQ if (prompt_bool $interactive, $question, 0) { my $original_base_dir = $config{BASE_DIR}; $config{BASE_DIR} = prompt_dir $interactive, 'In what directory do you wish to install the InspIRCd base?', $config{BASE_DIR}; - foreach my $key (qw(BINARY_DIR CONFIG_DIR DATA_DIR LOG_DIR MANUAL_DIR MODULE_DIR)) { + foreach my $key (qw(BINARY_DIR CONFIG_DIR DATA_DIR LOG_DIR MANUAL_DIR MODULE_DIR SCRIPT_DIR)) { $config{$key} =~ s/^\Q$original_base_dir\E/$config{BASE_DIR}/; } $config{BINARY_DIR} = prompt_dir $interactive, 'In what directory should the InspIRCd binary be placed?', $config{BINARY_DIR}; @@ -273,6 +305,7 @@ if (prompt_bool $interactive, $question, 0) { $config{LOG_DIR} = prompt_dir $interactive, 'In what directory are log files to be stored?', $config{LOG_DIR}; $config{MANUAL_DIR} = prompt_dir $interactive, 'In what directory are manual pages to be placed?', $config{MANUAL_DIR}; $config{MODULE_DIR} = prompt_dir $interactive, 'In what directory are modules to be placed?', $config{MODULE_DIR}; + $config{SCRIPT_DIR} = prompt_dir $interactive, 'In what directory are scripts to be placed?', $config{SCRIPT_DIR}; } # Configure module settings. @@ -291,13 +324,37 @@ if (prompt_bool $interactive, $question, 0) { } else { # TODO: finish modulemanager rewrite and replace this code with: # system './modulemanager', 'enable', '--auto'; - enable_extras 'm_ssl_gnutls.cpp' unless system 'pkg-config --exists gnutls >/dev/null 2>&1'; - enable_extras 'm_ssl_mbedtls.cpp' if -e '/usr/include/mbedtls/ssl.h'; - enable_extras 'm_ssl_openssl.cpp' unless system 'pkg-config --exists openssl >/dev/null 2>&1'; + my %modules = ( + # Missing: m_ldap, m_regex_stdlib, m_ssl_mbedtls + 'm_geoip.cpp' => 'pkg-config --exists geoip', + 'm_mysql.cpp' => 'mysql_config --version', + 'm_pgsql.cpp' => 'pg_config --version', + 'm_regex_pcre.cpp' => 'pcre-config --version', + 'm_regex_posix.cpp' => undef, + 'm_regex_re2.cpp' => 'pkg-config --exists re2', + 'm_regex_tre.cpp' => 'pkg-config --exists tre', + 'm_sqlite3.cpp' => 'pkg-config --exists sqlite3', + 'm_ssl_gnutls.cpp' => 'pkg-config --exists gnutls', + 'm_ssl_openssl.cpp' => 'pkg-config --exists openssl', + 'm_sslrehashsignal.cpp' => undef, + ); + while (my ($module, $command) = each %modules) { + unless (defined $command && system "$command 1>/dev/null 2>/dev/null") { + enable_extras $module; + } + } } # Generate SSL certificates. -if ( && prompt_bool $interactive, 'Would you like to generate SSL certificates now?', $interactive) { +$question = < be used on a production network. + +Note: you can get a <|BOLD free|> CA-signed certificate from Let's Encrypt. See +https://letsencrypt.org/getting-started/ for more details. +EOQ + +if ( && prompt_bool $interactive, $question, $interactive) { system './tools/genssl', 'auto'; } @@ -334,12 +391,13 @@ print_format <<"EOM"; <|GREEN Log:|> $config{LOG_DIR} <|GREEN Manual:|> $config{MANUAL_DIR} <|GREEN Module:|> $config{MODULE_DIR} + <|GREEN Script:|> $config{SCRIPT_DIR} <|GREEN Execution Group:|> $config{GROUP} ($config{GID}) <|GREEN Execution User:|> $config{USER} ($config{UID}) <|GREEN Socket Engine:|> $config{SOCKETENGINE} -To build with these settings run '<|GREEN make -j${\get_cpu_count}|>' now. +To build with these settings run '<|GREEN make -j${\get_cpu_count} install|>' now. EOM