]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
Add a new runtime directory and move the pid file to it.
authorSadie Powell <sadie@witchery.services>
Mon, 18 Jan 2021 06:56:18 +0000 (06:56 +0000)
committerSadie Powell <sadie@witchery.services>
Mon, 18 Jan 2021 07:05:27 +0000 (07:05 +0000)
The data directory is intended for persistent files whereas the pid
file is ephemeral. This distinction doesn't matter by default but
on system-wide installs ephemeral runtime files go in /var/run or
/run instead.

configure
docs/conf/inspircd.conf.example
include/configreader.h
make/configure.pm
make/template/apparmor
make/template/config.h
make/template/inspircd
src/configreader.cpp
src/inspircd.cpp

index 223fc4d14c5720ca2af1edfe67a42c1980c47814..724970cade2a85f124398a8eabc90b2b897ac0f7 100755 (executable)
--- a/configure
+++ b/configure
@@ -66,6 +66,7 @@ my ($opt_binary_dir,
     $opt_module_dir,
     $opt_portable,
     $opt_prefix,
+    $opt_runtime_dir,
     $opt_script_dir,
     $opt_socketengine,
     $opt_system,
@@ -99,6 +100,7 @@ exit 1 unless GetOptions(
        'module-dir=s'         => \$opt_module_dir,
        'portable'             => \$opt_portable,
        'prefix=s'             => \$opt_prefix,
+       'runtime-dir=s'        => \$opt_runtime_dir,
        'script-dir=s'         => \$opt_script_dir,
        'socketengine=s'       => \$opt_socketengine,
        'system'               => \$opt_system,
@@ -137,6 +139,7 @@ our $interactive = !(
        defined $opt_module_dir ||
        defined $opt_portable ||
        defined $opt_prefix ||
+       defined $opt_runtime_dir ||
        defined $opt_script_dir ||
        defined $opt_socketengine ||
        defined $opt_system ||
@@ -203,6 +206,7 @@ if (defined $opt_portable) {
        $config{LOG_DIR}     = $opt_log_dir     // 'logs';
        $config{MANUAL_DIR}  = $opt_manual_dir  // 'manuals';
        $config{MODULE_DIR}  = $opt_module_dir  // 'modules';
+       $config{RUNTIME_DIR} = $opt_runtime_dir // $config{DATA_DIR};
        $config{SCRIPT_DIR}  = $opt_script_dir  // $config{BASE_DIR};
 } elsif (defined $opt_system) {
        $config{BASE_DIR}    = $opt_prefix      // '/var/lib/inspircd';
@@ -213,7 +217,8 @@ if (defined $opt_portable) {
        $config{LOG_DIR}     = $opt_log_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'
+       $config{RUNTIME_DIR} = $opt_runtime_dir // '/var/run';
+       $config{SCRIPT_DIR}  = $opt_script_dir  // '/usr/share/inspircd';
 } else {
        $config{BASE_DIR}    = rel2abs $opt_prefix // $config{BASE_DIR}    // catdir $RealDir,            'run';
        $config{BINARY_DIR}  = $opt_binary_dir     // $config{BINARY_DIR}  // catdir $config{BASE_DIR},   'bin';
@@ -223,6 +228,7 @@ if (defined $opt_portable) {
        $config{LOG_DIR}     = $opt_log_dir        // $config{LOG_DIR}     // catdir $config{BASE_DIR},   'logs';
        $config{MANUAL_DIR}  = $opt_manual_dir     // $config{MANUAL_DIR}  // catdir $config{BASE_DIR},   'manuals';
        $config{MODULE_DIR}  = $opt_module_dir     // $config{MODULE_DIR}  // catdir $config{BASE_DIR},   'modules';
+       $config{RUNTIME_DIR} = $opt_runtime_dir    // $config{RUNTIME_DIR} // $config{DATA_DIR};
        $config{SCRIPT_DIR}  = $opt_script_dir     // $config{SCRIPT_DIR}  // $config{BASE_DIR};
 }
 
@@ -345,6 +351,7 @@ if (prompt_bool $interactive, $question, 0) {
        $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};
        $config{EXAMPLE_DIR} = $config{CONFIG_DIR} . '/examples';
+       $config{RUNTIME_DIR} = $config{DATA_DIR};
 }
 
 # Configure module settings.
@@ -461,6 +468,7 @@ print_format <<"EOM";
   <|GREEN Log:|>     $config{LOG_DIR}
   <|GREEN Manual:|>  $config{MANUAL_DIR}
   <|GREEN Module:|>  $config{MODULE_DIR}
+  <|GREEN Runtime:|> $config{RUNTIME_DIR}
   <|GREEN Script:|>  $config{SCRIPT_DIR}
 
 <|GREEN Execution Group:|> $config{GROUP} ($config{GID})
index 3d16d4eba6e5b60d59b4d77a7af3654d5bcc41ba..06ad9669dab84ed6bdcfb73a81536e334795991c 100644 (file)
 # rehash the ircd from the shell or to terminate the ircd from the    #
 # shell using shell scripts, perl scripts, etc... and to monitor the  #
 # ircd's state via cron jobs. If this is a relative path, it will be  #
-# relative to the configuration directory, and if it is not defined,  #
-# the default of 'inspircd.pid' is used.                              #
+# relative to the runtime directory, and if it is not defined, the    #
+# default of 'inspircd.pid' is used.                                  #
 #                                                                     #
 
 #<pid file="/path/to/inspircd.pid">
index 3a5ea9c6015b7cfd29de2c3389e8f6dc82af21e4..8a548fcbfef8e0724a0610ad977e1c6b6cc1ea52 100644 (file)
@@ -250,12 +250,16 @@ class CoreExport ServerConfig
                /** Module path */
                std::string Module;
 
+               /** Runtime path */
+               std::string Runtime;
+
                ServerPaths(ConfigTag* tag);
 
                std::string PrependConfig(const std::string& fn) const { return FileSystem::ExpandPath(Config, fn); }
                std::string PrependData(const std::string& fn) const { return FileSystem::ExpandPath(Data, fn); }
                std::string PrependLog(const std::string& fn) const { return FileSystem::ExpandPath(Log, fn); }
                std::string PrependModule(const std::string& fn) const { return FileSystem::ExpandPath(Module, fn); }
+               std::string PrependRuntime(const std::string& fn) const { return FileSystem::ExpandPath(Runtime, fn); }
        };
 
        /** Holds a complete list of all connect blocks
index 91e2cc7d680aebff0bda8eec5d0151d1decc36cd..001de5fc748f4014576e5426581e223be40ddf54 100644 (file)
@@ -192,6 +192,7 @@ sub cmd_update {
        say 'Updating...';
        my %config = read_config_file(CONFIGURE_CACHE_FILE);
        $config{EXAMPLE_DIR} //= catdir $config{CONFIG_DIR}, 'examples';
+       $config{RUNTIME_DIR} //= $config{DATA_DIR};
        my %compiler = get_compiler_info($config{CXX});
        my %version = get_version $config{DISTRIBUTION};
        parse_templates(\%config, \%compiler, \%version);
index 83c248c5578b076bc8eb7913039b1e175cf61895..ded5634e6d82047bde26a31bd0dcd1c2eed5143b 100644 (file)
@@ -37,6 +37,7 @@
        @MODULE_DIR@/core_*.so mr,
        @MODULE_DIR@/m_*.so mr,
        @LOG_DIR@/** w,
+       @RUNTIME_DIR@/** rw,
 
        # Required by the ldap module:
        #include <abstractions/ldapclient>
index 034191893ec8a42050aff93f9cfa4da325095fa8..97dd15453d9b92ea282b54ccbda74717e28190e6 100644 (file)
@@ -43,6 +43,9 @@
 /** The default location that module files are stored in. */
 #define INSPIRCD_MODULE_PATH "@MODULE_DIR@"
 
+/** The default location that runtime files are stored in. */
+#define INSPIRCD_RUNTIME_PATH "@RUNTIME_DIR@"
+
 /** The URL of the InspIRCd docs site. */
 #define INSPIRCD_DOCS "https://docs.inspircd.org/@VERSION_MAJOR@/"
 
index 0150bb994ab7bb69da318fce9749a84c13d7054a..4b316e0e017c47fb4010b8806a8a7f8de64c3a46 100644 (file)
@@ -66,7 +66,7 @@ my $basepath  =       "@BASE_DIR@";
 my $confpath   =       "@CONFIG_DIR@";
 my $binpath    =       "@BINARY_DIR@";
 my $runpath    =       "@BASE_DIR@";
-my $datadir    =       "@DATA_DIR@";
+my $runtimedir = "@RUNTIME_DIR@";
 my $valgrindlogpath    =       "$basepath/valgrindlogs";
 my $executable =       "inspircd";
 my $version    =       "@VERSION_FULL@";
@@ -359,18 +359,6 @@ sub cmd_stop()
 # Generic Helper Functions.
 ###
 
-# GetPidfile Version 2 - Now With Include Support..
-# I beg for months for include support in insp, then..
-# when it is added, it comes around and BITES ME IN THE ASS,
-# because i then have to code support into this script.. Evil.
-
-# Craig got bitten in the ass again --
-# in 1.1 beta the include file is manditory, therefore
-# if we cant find it, default to %conf%/inspircd.pid.
-# Note, this also contains a fix for when the pid file is
-# defined, but defined in a comment (line starts with #)
-# -- Brain
-
 my %filesparsed;
 
 sub getpidfile
@@ -404,7 +392,7 @@ sub getpidfile
                if (($i =~ /<pid file=\"(\S+)\">/i) && ($i !~ /^#/))
                {
                        # Set the PID file and return.
-                       $pidfile = expand_fragment $datadir, $1;
+                       $pidfile = expand_fragment $runtimedir, $1;
                        return;
                }
        }
@@ -426,7 +414,7 @@ sub getpidfile
        }
 
        # End of includes / No includes found. Using default.
-       $pidfile = $datadir . "/inspircd.pid";
+       $pidfile = $runtimedir . "/inspircd.pid";
 }
 
 sub getstatus {
index f968365074240d469184c2ef8af9e1219902eba0..3977be25e161b4f55ea453bcdbc1f5a997e2f421 100644 (file)
@@ -57,6 +57,7 @@ ServerConfig::ServerPaths::ServerPaths(ConfigTag* tag)
        , Data(tag->getString("datadir", INSPIRCD_DATA_PATH, 1))
        , Log(tag->getString("logdir", INSPIRCD_LOG_PATH, 1))
        , Module(tag->getString("moduledir", INSPIRCD_MODULE_PATH, 1))
+       , Runtime(tag->getString("runtimedir", INSPIRCD_RUNTIME_PATH, 1))
 {
 }
 
index 5760e631b501f62ee155ce12537a671cdd1fe91e..df5dc8647f5b7fd5d0f6e67fdfae8183ca5b9266 100644 (file)
@@ -445,7 +445,7 @@ void InspIRCd::WritePID(const std::string& filename, bool exitonfail)
                return;
        }
 
-       std::string fname = ServerInstance->Config->Paths.PrependData(filename.empty() ? "inspircd.pid" : filename);
+       std::string fname = ServerInstance->Config->Paths.PrependRuntime(filename.empty() ? "inspircd.pid" : filename);
        std::ofstream outfile(fname.c_str());
        if (outfile.is_open())
        {