Annotate

util/startup.lua @ 13652:a08065207ef0

net.server_epoll: Call :shutdown() on TLS sockets when supported Comment from Matthew: This fixes a potential issue where the Prosody process gets blocked on sockets waiting for them to close. Unlike non-TLS sockets, closing a TLS socket sends layer 7 data, and this can cause problems for sockets which are in the process of being cleaned up. This depends on LuaSec changes which are not yet upstream. From Martijn's original email: So first my analysis of luasec. in ssl.c the socket is put into blocking mode right before calling SSL_shutdown() inside meth_destroy(). My best guess to why this is is because meth_destroy is linked to the __close and __gc methods, which can't exactly be called multiple times and luasec does want to make sure that a tls session is shutdown as clean as possible. I can't say I disagree with this reasoning and don't want to change this behaviour. My solution to this without changing the current behaviour is to introduce a shutdown() method. I am aware that this overlaps in a conflicting way with tcp's shutdown method, but it stays close to the OpenSSL name. This method calls SSL_shutdown() in the current (non)blocking mode of the underlying socket and returns a boolean whether or not the shutdown is completed (matching SSL_shutdown()'s 0 or 1 return values), and returns the familiar ssl_ioerror() strings on error with a false for completion. This error can then be used to determine if we have wantread/wantwrite to finalize things. Once meth_shutdown() has been called once a shutdown flag will be set, which indicates to meth_destroy() that the SSL_shutdown() has been handled by the application and it shouldn't be needed to set the socket to blocking mode. I've left the SSL_shutdown() call in the LSEC_STATE_CONNECTED to prevent TOCTOU if the application reaches a timeout for the shutdown code, which might allow SSL_shutdown() to clean up anyway at the last possible moment. Another thing I've changed to luasec is the call to socket_setblocking() right before calling close(2) in socket_destroy() in usocket.c. According to the latest POSIX[0]: Note that the requirement for close() on a socket to block for up to the current linger interval is not conditional on the O_NONBLOCK setting. Which I read to mean that removing O_NONBLOCK on the socket before close doesn't impact the behaviour and only causes noise in system call tracers. I didn't touch the windows bits of this, since I don't do windows. For the prosody side of things I've made the TLS shutdown bits resemble interface:onwritable(), and put it under a combined guard of self._tls and self.conn.shutdown. The self._tls bit is there to prevent getting stuck on this condition, and self.conn.shutdown is there to prevent the code being called by instances where the patched luasec isn't deployed. The destroy() method can be called from various places and is read by me as the "we give up" error path. To accommodate for these unexpected entrypoints I've added a single call to self.conn:shutdown() to prevent the socket being put into blocking mode. I have no expectations that there is any other use here. Same as previous, the self.conn.shutdown check is there to make sure it's not called on unpatched luasec deployments and self._tls is there to make sure we don't call shutdown() on tcp sockets. I wouldn't recommend logging of the conn:shutdown() error inside close(), since a lot of clients simply close the connection before SSL_shutdown() is done.
author Martijn van Duren <martijn@openbsd.org>
date Thu, 06 Feb 2025 15:04:38 +0000
parent 13639:94f77a1994dc
child 13659:5abdcad8c2e0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8638
f8f45bbbd8ba util.startup: Ignore various globals being read and written as part of startup [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8637
diff changeset
1 -- Ignore the CFG_* variables
f8f45bbbd8ba util.startup: Ignore various globals being read and written as part of startup [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8637
diff changeset
2 -- luacheck: ignore 113/CFG_CONFIGDIR 113/CFG_SOURCEDIR 113/CFG_DATADIR 113/CFG_PLUGINDIR
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3 local startup = {};
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4
12975
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12864
diff changeset
5 local prosody = { events = require "prosody.util.events".new() };
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12864
diff changeset
6 local logger = require "prosody.util.logger";
8720
dba17a70fd22 util.startup: Initialize prosody.log / _G.log here instead of in loggingmanager to reduce dependencies
Kim Alvefur <zash@zash.se>
parents: 8719
diff changeset
7 local log = logger.init("startup");
12975
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12864
diff changeset
8 local parse_args = require "prosody.util.argparse".parse;
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9
12975
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12864
diff changeset
10 local config = require "prosody.core.configmanager";
9877
ded5303e1fde util.startup: Log configuration warnings at startup
Matthew Wild <mwild1@gmail.com>
parents: 9873
diff changeset
11 local config_warnings;
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
12
12975
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12864
diff changeset
13 local dependencies = require "prosody.util.dependencies";
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
14
8666
57780ba1938f util.startup: Move original_logging_config to a local variable
Matthew Wild <mwild1@gmail.com>
parents: 8665
diff changeset
15 local original_logging_config;
57780ba1938f util.startup: Move original_logging_config to a local variable
Matthew Wild <mwild1@gmail.com>
parents: 8665
diff changeset
16
11539
3413fea9e6db util.startup: Set more aggressive defaults for GC
Matthew Wild <mwild1@gmail.com>
parents: 11073
diff changeset
17 local default_gc_params = {
3413fea9e6db util.startup: Set more aggressive defaults for GC
Matthew Wild <mwild1@gmail.com>
parents: 11073
diff changeset
18 mode = "incremental";
3413fea9e6db util.startup: Set more aggressive defaults for GC
Matthew Wild <mwild1@gmail.com>
parents: 11073
diff changeset
19 -- Incremental mode defaults
3413fea9e6db util.startup: Set more aggressive defaults for GC
Matthew Wild <mwild1@gmail.com>
parents: 11073
diff changeset
20 threshold = 105, speed = 500;
3413fea9e6db util.startup: Set more aggressive defaults for GC
Matthew Wild <mwild1@gmail.com>
parents: 11073
diff changeset
21 -- Generational mode defaults
3413fea9e6db util.startup: Set more aggressive defaults for GC
Matthew Wild <mwild1@gmail.com>
parents: 11073
diff changeset
22 minor_threshold = 20, major_threshold = 50;
3413fea9e6db util.startup: Set more aggressive defaults for GC
Matthew Wild <mwild1@gmail.com>
parents: 11073
diff changeset
23 };
11073
5691b9773c5b util.startup: Configure the GC on startup, using the config or built-in defaults
Matthew Wild <mwild1@gmail.com>
parents: 10947
diff changeset
24
11829
4fad0ca42f66 util.startup: Allow separate command line argument settings for prosody and prosodyctl
Kim Alvefur <zash@zash.se>
parents: 11828
diff changeset
25 local arg_settigs = {
4fad0ca42f66 util.startup: Allow separate command line argument settings for prosody and prosodyctl
Kim Alvefur <zash@zash.se>
parents: 11828
diff changeset
26 prosody = {
11869
d52a73425eba util.startup: Show brief usage on `prosody -h|-?|--help`
Kim Alvefur <zash@zash.se>
parents: 11866
diff changeset
27 short_params = { D = "daemonize"; F = "no-daemonize", h = "help", ["?"] = "help" };
11829
4fad0ca42f66 util.startup: Allow separate command line argument settings for prosody and prosodyctl
Kim Alvefur <zash@zash.se>
parents: 11828
diff changeset
28 value_params = { config = true };
4fad0ca42f66 util.startup: Allow separate command line argument settings for prosody and prosodyctl
Kim Alvefur <zash@zash.se>
parents: 11828
diff changeset
29 };
4fad0ca42f66 util.startup: Allow separate command line argument settings for prosody and prosodyctl
Kim Alvefur <zash@zash.se>
parents: 11828
diff changeset
30 prosodyctl = {
11870
1d1ed2be3491 util.startup: Understand -h, -? as --help in prosodyctl but ignore
Kim Alvefur <zash@zash.se>
parents: 11869
diff changeset
31 short_params = { v = "verbose", h = "help", ["?"] = "help" };
11829
4fad0ca42f66 util.startup: Allow separate command line argument settings for prosody and prosodyctl
Kim Alvefur <zash@zash.se>
parents: 11828
diff changeset
32 value_params = { config = true };
4fad0ca42f66 util.startup: Allow separate command line argument settings for prosody and prosodyctl
Kim Alvefur <zash@zash.se>
parents: 11828
diff changeset
33 };
4fad0ca42f66 util.startup: Allow separate command line argument settings for prosody and prosodyctl
Kim Alvefur <zash@zash.se>
parents: 11828
diff changeset
34 }
10596
cb107ea49b35 util.startup: Add startup step for parsing command-line options
Matthew Wild <mwild1@gmail.com>
parents: 10390
diff changeset
35
12160
ac654fb19203 util.startup: Allow supplying an argument parsing settings
Kim Alvefur <zash@zash.se>
parents: 11963
diff changeset
36 function startup.parse_args(profile)
ac654fb19203 util.startup: Allow supplying an argument parsing settings
Kim Alvefur <zash@zash.se>
parents: 11963
diff changeset
37 local opts, err, where = parse_args(arg, arg_settigs[profile or prosody.process_type] or profile);
10936
d770435f0f84 util.argparse: Move exiting and error to util.startup
Kim Alvefur <zash@zash.se>
parents: 10934
diff changeset
38 if not opts then
d770435f0f84 util.argparse: Move exiting and error to util.startup
Kim Alvefur <zash@zash.se>
parents: 10934
diff changeset
39 if err == "param-not-found" then
d770435f0f84 util.argparse: Move exiting and error to util.startup
Kim Alvefur <zash@zash.se>
parents: 10934
diff changeset
40 print("Unknown command-line option: "..tostring(where));
11847
2b3ce80ffece util.startup: Only ask if 'prosodyctl' was meant instead of 'prosody' (fix #1692)
Kim Alvefur <zash@zash.se>
parents: 11846
diff changeset
41 if prosody.process_type == "prosody" then
2b3ce80ffece util.startup: Only ask if 'prosodyctl' was meant instead of 'prosody' (fix #1692)
Kim Alvefur <zash@zash.se>
parents: 11846
diff changeset
42 print("Perhaps you meant to use prosodyctl instead?");
2b3ce80ffece util.startup: Only ask if 'prosodyctl' was meant instead of 'prosody' (fix #1692)
Kim Alvefur <zash@zash.se>
parents: 11846
diff changeset
43 end
10936
d770435f0f84 util.argparse: Move exiting and error to util.startup
Kim Alvefur <zash@zash.se>
parents: 10934
diff changeset
44 elseif err == "missing-value" then
d770435f0f84 util.argparse: Move exiting and error to util.startup
Kim Alvefur <zash@zash.se>
parents: 10934
diff changeset
45 print("Expected a value to follow command-line option: "..where);
10600
08f2fe5ac30f util.startup: Fix logic to make --config work again
Matthew Wild <mwild1@gmail.com>
parents: 10597
diff changeset
46 end
10936
d770435f0f84 util.argparse: Move exiting and error to util.startup
Kim Alvefur <zash@zash.se>
parents: 10934
diff changeset
47 os.exit(1);
10596
cb107ea49b35 util.startup: Add startup step for parsing command-line options
Matthew Wild <mwild1@gmail.com>
parents: 10390
diff changeset
48 end
12423
3ae9299d61d7 util.startup: Show error for unrecognized arguments passed to 'prosody' (fixes #1722)
Matthew Wild <mwild1@gmail.com>
parents: 12294
diff changeset
49 if prosody.process_type == "prosody" then
3ae9299d61d7 util.startup: Show error for unrecognized arguments passed to 'prosody' (fixes #1722)
Matthew Wild <mwild1@gmail.com>
parents: 12294
diff changeset
50 if #arg > 0 then
3ae9299d61d7 util.startup: Show error for unrecognized arguments passed to 'prosody' (fixes #1722)
Matthew Wild <mwild1@gmail.com>
parents: 12294
diff changeset
51 print("Unrecognized option: "..arg[1]);
3ae9299d61d7 util.startup: Show error for unrecognized arguments passed to 'prosody' (fixes #1722)
Matthew Wild <mwild1@gmail.com>
parents: 12294
diff changeset
52 print("(Did you mean 'prosodyctl "..arg[1].."'?)");
3ae9299d61d7 util.startup: Show error for unrecognized arguments passed to 'prosody' (fixes #1722)
Matthew Wild <mwild1@gmail.com>
parents: 12294
diff changeset
53 print("");
3ae9299d61d7 util.startup: Show error for unrecognized arguments passed to 'prosody' (fixes #1722)
Matthew Wild <mwild1@gmail.com>
parents: 12294
diff changeset
54 end
3ae9299d61d7 util.startup: Show error for unrecognized arguments passed to 'prosody' (fixes #1722)
Matthew Wild <mwild1@gmail.com>
parents: 12294
diff changeset
55 if opts.help or #arg > 0 then
3ae9299d61d7 util.startup: Show error for unrecognized arguments passed to 'prosody' (fixes #1722)
Matthew Wild <mwild1@gmail.com>
parents: 12294
diff changeset
56 print("prosody [ -D | -F ] [ --config /path/to/prosody.cfg.lua ]");
3ae9299d61d7 util.startup: Show error for unrecognized arguments passed to 'prosody' (fixes #1722)
Matthew Wild <mwild1@gmail.com>
parents: 12294
diff changeset
57 print(" -D, --daemonize Run in the background")
3ae9299d61d7 util.startup: Show error for unrecognized arguments passed to 'prosody' (fixes #1722)
Matthew Wild <mwild1@gmail.com>
parents: 12294
diff changeset
58 print(" -F, --no-daemonize Run in the foreground")
3ae9299d61d7 util.startup: Show error for unrecognized arguments passed to 'prosody' (fixes #1722)
Matthew Wild <mwild1@gmail.com>
parents: 12294
diff changeset
59 print(" --config FILE Specify config file")
3ae9299d61d7 util.startup: Show error for unrecognized arguments passed to 'prosody' (fixes #1722)
Matthew Wild <mwild1@gmail.com>
parents: 12294
diff changeset
60 os.exit(0);
3ae9299d61d7 util.startup: Show error for unrecognized arguments passed to 'prosody' (fixes #1722)
Matthew Wild <mwild1@gmail.com>
parents: 12294
diff changeset
61 end
11869
d52a73425eba util.startup: Show brief usage on `prosody -h|-?|--help`
Kim Alvefur <zash@zash.se>
parents: 11866
diff changeset
62 end
10936
d770435f0f84 util.argparse: Move exiting and error to util.startup
Kim Alvefur <zash@zash.se>
parents: 10934
diff changeset
63 prosody.opts = opts;
10596
cb107ea49b35 util.startup: Add startup step for parsing command-line options
Matthew Wild <mwild1@gmail.com>
parents: 10390
diff changeset
64 end
cb107ea49b35 util.startup: Add startup step for parsing command-line options
Matthew Wild <mwild1@gmail.com>
parents: 10390
diff changeset
65
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
66 function startup.read_config()
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
67 local filenames = {};
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
68
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
69 local filename;
10597
25a3c8134b0a prosody/util.startup: Switch to parse_args() for --root and --config
Matthew Wild <mwild1@gmail.com>
parents: 10596
diff changeset
70 if prosody.opts.config then
25a3c8134b0a prosody/util.startup: Switch to parse_args() for --root and --config
Matthew Wild <mwild1@gmail.com>
parents: 10596
diff changeset
71 table.insert(filenames, prosody.opts.config);
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
72 if CFG_CONFIGDIR then
10597
25a3c8134b0a prosody/util.startup: Switch to parse_args() for --root and --config
Matthew Wild <mwild1@gmail.com>
parents: 10596
diff changeset
73 table.insert(filenames, CFG_CONFIGDIR.."/"..prosody.opts.config);
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
74 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
75 elseif os.getenv("PROSODY_CONFIG") then -- Passed by prosodyctl
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
76 table.insert(filenames, os.getenv("PROSODY_CONFIG"));
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
77 else
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
78 table.insert(filenames, (CFG_CONFIGDIR or ".").."/prosody.cfg.lua");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
79 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
80 for _,_filename in ipairs(filenames) do
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
81 filename = _filename;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
82 local file = io.open(filename);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
83 if file then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
84 file:close();
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
85 prosody.config_file = filename;
10389
dbb8dae58265 util.startup: Update config path (fixes #1430)
Kim Alvefur <zash@zash.se>
parents: 9762
diff changeset
86 prosody.paths.config = filename:match("^(.*)[\\/][^\\/]*$");
dbb8dae58265 util.startup: Update config path (fixes #1430)
Kim Alvefur <zash@zash.se>
parents: 9762
diff changeset
87 CFG_CONFIGDIR = prosody.paths.config; -- luacheck: ignore 111
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
88 break;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
89 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
90 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
91 prosody.config_file = filename
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
92 local ok, level, err = config.load(filename);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
93 if not ok then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
94 print("\n");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
95 print("**************************");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
96 if level == "parser" then
8728
41c959c5c84b Fix spelling throughout the codebase [codespell]
Kim Alvefur <zash@zash.se>
parents: 8721
diff changeset
97 print("A problem occurred while reading the config file "..filename);
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
98 print("");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
99 local err_line, err_message = tostring(err):match("%[string .-%]:(%d*): (.*)");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
100 if err:match("chunk has too many syntax levels$") then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
101 print("An Include statement in a config file is including an already-included");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
102 print("file and causing an infinite loop. An Include statement in a config file is...");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
103 else
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
104 print("Error"..(err_line and (" on line "..err_line) or "")..": "..(err_message or tostring(err)));
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
105 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
106 print("");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
107 elseif level == "file" then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
108 print("Prosody was unable to find the configuration file.");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
109 print("We looked for: "..filename);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
110 print("A sample config file is included in the Prosody download called prosody.cfg.lua.dist");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
111 print("Copy or rename it to prosody.cfg.lua and edit as necessary.");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
112 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
113 print("More help on configuring Prosody can be found at https://prosody.im/doc/configure");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
114 print("Good luck!");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
115 print("**************************");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
116 print("");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
117 os.exit(1);
9877
ded5303e1fde util.startup: Log configuration warnings at startup
Matthew Wild <mwild1@gmail.com>
parents: 9873
diff changeset
118 elseif err and #err > 0 then
ded5303e1fde util.startup: Log configuration warnings at startup
Matthew Wild <mwild1@gmail.com>
parents: 9873
diff changeset
119 config_warnings = err;
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
120 end
9214
8b2b8f1a911f util.startup: Set flag when config fully loaded
Matthew Wild <mwild1@gmail.com>
parents: 8958
diff changeset
121 prosody.config_loaded = true;
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
122 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
123
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
124 function startup.check_dependencies()
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
125 if not dependencies.check_dependencies() then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
126 os.exit(1);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
127 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
128 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
129
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
130 -- luacheck: globals socket server
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
131
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
132 function startup.load_libraries()
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
133 -- Load socket framework
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
134 -- luacheck: ignore 111/server 111/socket
12975
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12864
diff changeset
135 require "prosody.util.import"
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
136 socket = require "socket";
12975
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12864
diff changeset
137 server = require "prosody.net.server"
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
138 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
139
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
140 function startup.init_logging()
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
141 -- Initialize logging
12975
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12864
diff changeset
142 local loggingmanager = require "prosody.core.loggingmanager"
8721
b773b15fee71 util.startup: Set up event hooks for reloading logging here instead of in loggingmanager to simplify startup dependencies
Kim Alvefur <zash@zash.se>
parents: 8720
diff changeset
143 loggingmanager.reload_logging();
9762
34988a408b74 util.startup: Always reload logging after config (fixes #1284)
Kim Alvefur <zash@zash.se>
parents: 9214
diff changeset
144 prosody.events.add_handler("config-reloaded", function ()
34988a408b74 util.startup: Always reload logging after config (fixes #1284)
Kim Alvefur <zash@zash.se>
parents: 9214
diff changeset
145 prosody.events.fire_event("reopen-log-files");
34988a408b74 util.startup: Always reload logging after config (fixes #1284)
Kim Alvefur <zash@zash.se>
parents: 9214
diff changeset
146 end);
8721
b773b15fee71 util.startup: Set up event hooks for reloading logging here instead of in loggingmanager to simplify startup dependencies
Kim Alvefur <zash@zash.se>
parents: 8720
diff changeset
147 prosody.events.add_handler("reopen-log-files", function ()
b773b15fee71 util.startup: Set up event hooks for reloading logging here instead of in loggingmanager to simplify startup dependencies
Kim Alvefur <zash@zash.se>
parents: 8720
diff changeset
148 loggingmanager.reload_logging();
b773b15fee71 util.startup: Set up event hooks for reloading logging here instead of in loggingmanager to simplify startup dependencies
Kim Alvefur <zash@zash.se>
parents: 8720
diff changeset
149 prosody.events.fire_event("logging-reloaded");
b773b15fee71 util.startup: Set up event hooks for reloading logging here instead of in loggingmanager to simplify startup dependencies
Kim Alvefur <zash@zash.se>
parents: 8720
diff changeset
150 end);
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
151 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
152
9873
dfaeea570f7e util.startup: Give function a more generic name so it can apply to all warnings
Matthew Wild <mwild1@gmail.com>
parents: 9762
diff changeset
153 function startup.log_startup_warnings()
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
154 dependencies.log_warnings();
9878
dd61201fc5af util.startup: Don't die if there are no config warnings to log (thanks buildbot)
Matthew Wild <mwild1@gmail.com>
parents: 9877
diff changeset
155 if config_warnings then
dd61201fc5af util.startup: Don't die if there are no config warnings to log (thanks buildbot)
Matthew Wild <mwild1@gmail.com>
parents: 9877
diff changeset
156 for _, warning in ipairs(config_warnings) do
dd61201fc5af util.startup: Don't die if there are no config warnings to log (thanks buildbot)
Matthew Wild <mwild1@gmail.com>
parents: 9877
diff changeset
157 log("warn", "Configuration warning: %s", warning);
dd61201fc5af util.startup: Don't die if there are no config warnings to log (thanks buildbot)
Matthew Wild <mwild1@gmail.com>
parents: 9877
diff changeset
158 end
9877
ded5303e1fde util.startup: Log configuration warnings at startup
Matthew Wild <mwild1@gmail.com>
parents: 9873
diff changeset
159 end
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
160 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
161
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
162 function startup.sanity_check()
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
163 for host, host_config in pairs(config.getconfig()) do
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
164 if host ~= "*"
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
165 and host_config.enabled ~= false
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
166 and not host_config.component_module then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
167 return;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
168 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
169 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
170 log("error", "No enabled VirtualHost entries found in the config file.");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
171 log("error", "At least one active host is required for Prosody to function. Exiting...");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
172 os.exit(1);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
173 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
174
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
175 function startup.sandbox_require()
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
176 -- Replace require() with one that doesn't pollute _G, required
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
177 -- for neat sandboxing of modules
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
178 -- luacheck: ignore 113/getfenv 111/require
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
179 local _realG = _G;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
180 local _real_require = require;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
181 local getfenv = getfenv or function (f)
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
182 -- FIXME: This is a hack to replace getfenv() in Lua 5.2
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
183 local name, env = debug.getupvalue(debug.getinfo(f or 1).func, 1);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
184 if name == "_ENV" then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
185 return env;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
186 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
187 end
8638
f8f45bbbd8ba util.startup: Ignore various globals being read and written as part of startup [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8637
diff changeset
188 function require(...) -- luacheck: ignore 121
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
189 local curr_env = getfenv(2);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
190 local curr_env_mt = getmetatable(curr_env);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
191 local _realG_mt = getmetatable(_realG);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
192 if curr_env_mt and curr_env_mt.__index and not curr_env_mt.__newindex and _realG_mt then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
193 local old_newindex, old_index;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
194 old_newindex, _realG_mt.__newindex = _realG_mt.__newindex, curr_env;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
195 old_index, _realG_mt.__index = _realG_mt.__index, function (_G, k) -- luacheck: ignore 212/_G
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
196 return rawget(curr_env, k);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
197 end;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
198 local ret = _real_require(...);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
199 _realG_mt.__newindex = old_newindex;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
200 _realG_mt.__index = old_index;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
201 return ret;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
202 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
203 return _real_require(...);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
204 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
205 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
206
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
207 function startup.set_function_metatable()
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
208 local mt = {};
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
209 function mt.__index(f, upvalue)
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
210 local i, name, value = 0;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
211 repeat
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
212 i = i + 1;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
213 name, value = debug.getupvalue(f, i);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
214 until name == upvalue or name == nil;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
215 return value;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
216 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
217 function mt.__newindex(f, upvalue, value)
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
218 local i, name = 0;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
219 repeat
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
220 i = i + 1;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
221 name = debug.getupvalue(f, i);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
222 until name == upvalue or name == nil;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
223 if name then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
224 debug.setupvalue(f, i, value);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
225 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
226 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
227 function mt.__tostring(f)
11150
0cfa36fa707e util.startup: Include arguments in function string representation
Kim Alvefur <zash@zash.se>
parents: 11149
diff changeset
228 local info = debug.getinfo(f, "Su");
11152
89162d27e1b1 util.startup: Handle missing nparams field from debug info (not present in 5.1)
Matthew Wild <mwild1@gmail.com>
parents: 11150
diff changeset
229 local n_params = info.nparams or 0;
89162d27e1b1 util.startup: Handle missing nparams field from debug info (not present in 5.1)
Matthew Wild <mwild1@gmail.com>
parents: 11150
diff changeset
230 for i = 1, n_params do
11150
0cfa36fa707e util.startup: Include arguments in function string representation
Kim Alvefur <zash@zash.se>
parents: 11149
diff changeset
231 info[i] = debug.getlocal(f, i);
0cfa36fa707e util.startup: Include arguments in function string representation
Kim Alvefur <zash@zash.se>
parents: 11149
diff changeset
232 end
0cfa36fa707e util.startup: Include arguments in function string representation
Kim Alvefur <zash@zash.se>
parents: 11149
diff changeset
233 if info.isvararg then
11152
89162d27e1b1 util.startup: Handle missing nparams field from debug info (not present in 5.1)
Matthew Wild <mwild1@gmail.com>
parents: 11150
diff changeset
234 info[n_params+1] = "...";
11150
0cfa36fa707e util.startup: Include arguments in function string representation
Kim Alvefur <zash@zash.se>
parents: 11149
diff changeset
235 end
12982
fc0109c59807 util.startup: Tweak function string representation
Kim Alvefur <zash@zash.se>
parents: 12975
diff changeset
236 return ("function @%s:%d(%s)"):format(info.short_src:match("[^\\/]*$"), info.linedefined, table.concat(info, ", "));
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
237 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
238 debug.setmetatable(function() end, mt);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
239 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
240
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
241 function startup.detect_platform()
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
242 prosody.platform = "unknown";
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
243 if os.getenv("WINDIR") then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
244 prosody.platform = "windows";
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
245 elseif package.config:sub(1,1) == "/" then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
246 prosody.platform = "posix";
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
247 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
248 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
249
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
250 function startup.detect_installed()
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
251 prosody.installed = nil;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
252 if CFG_SOURCEDIR and (prosody.platform == "windows" or CFG_SOURCEDIR:match("^/")) then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
253 prosody.installed = true;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
254 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
255 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
256
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
257 function startup.init_global_state()
8638
f8f45bbbd8ba util.startup: Ignore various globals being read and written as part of startup [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8637
diff changeset
258 -- luacheck: ignore 121
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
259 prosody.bare_sessions = {};
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
260 prosody.full_sessions = {};
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
261 prosody.hosts = {};
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
262
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
263 -- COMPAT: These globals are deprecated
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
264 -- luacheck: ignore 111/bare_sessions 111/full_sessions 111/hosts
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
265 bare_sessions = prosody.bare_sessions;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
266 full_sessions = prosody.full_sessions;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
267 hosts = prosody.hosts;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
268
13627
2db7b3b65363 core.configmanager: Add function for getting secrets from separate files
Kim Alvefur <zash@zash.se>
parents: 13564
diff changeset
269 prosody.paths = {
2db7b3b65363 core.configmanager: Add function for getting secrets from separate files
Kim Alvefur <zash@zash.se>
parents: 13564
diff changeset
270 source = CFG_SOURCEDIR;
2db7b3b65363 core.configmanager: Add function for getting secrets from separate files
Kim Alvefur <zash@zash.se>
parents: 13564
diff changeset
271 config = CFG_CONFIGDIR or ".";
2db7b3b65363 core.configmanager: Add function for getting secrets from separate files
Kim Alvefur <zash@zash.se>
parents: 13564
diff changeset
272 plugins = CFG_PLUGINDIR or "plugins";
2db7b3b65363 core.configmanager: Add function for getting secrets from separate files
Kim Alvefur <zash@zash.se>
parents: 13564
diff changeset
273 data = "data";
13630
8228f5094f7a util.startup: Rename credentials path variable too
Kim Alvefur <zash@zash.se>
parents: 13627
diff changeset
274 credentials = os.getenv("CREDENTIALS_DIRECTORY");
13627
2db7b3b65363 core.configmanager: Add function for getting secrets from separate files
Kim Alvefur <zash@zash.se>
parents: 13564
diff changeset
275 };
8698
0499f3da0ec4 util.startup: Factor out processing of plugin and data paths into a separate functions
Kim Alvefur <zash@zash.se>
parents: 8692
diff changeset
276
0499f3da0ec4 util.startup: Factor out processing of plugin and data paths into a separate functions
Kim Alvefur <zash@zash.se>
parents: 8692
diff changeset
277 prosody.arg = _G.arg;
0499f3da0ec4 util.startup: Factor out processing of plugin and data paths into a separate functions
Kim Alvefur <zash@zash.se>
parents: 8692
diff changeset
278
8720
dba17a70fd22 util.startup: Initialize prosody.log / _G.log here instead of in loggingmanager to reduce dependencies
Kim Alvefur <zash@zash.se>
parents: 8719
diff changeset
279 _G.log = logger.init("general");
dba17a70fd22 util.startup: Initialize prosody.log / _G.log here instead of in loggingmanager to reduce dependencies
Kim Alvefur <zash@zash.se>
parents: 8719
diff changeset
280 prosody.log = logger.init("general");
dba17a70fd22 util.startup: Initialize prosody.log / _G.log here instead of in loggingmanager to reduce dependencies
Kim Alvefur <zash@zash.se>
parents: 8719
diff changeset
281
8698
0499f3da0ec4 util.startup: Factor out processing of plugin and data paths into a separate functions
Kim Alvefur <zash@zash.se>
parents: 8692
diff changeset
282 startup.detect_platform();
0499f3da0ec4 util.startup: Factor out processing of plugin and data paths into a separate functions
Kim Alvefur <zash@zash.se>
parents: 8692
diff changeset
283 startup.detect_installed();
0499f3da0ec4 util.startup: Factor out processing of plugin and data paths into a separate functions
Kim Alvefur <zash@zash.se>
parents: 8692
diff changeset
284 _G.prosody = prosody;
12781
22066b02887f util.startup: Provide a common Lua 5.3+ math.type() for Lua 5.2
Kim Alvefur <zash@zash.se>
parents: 12779
diff changeset
285
22066b02887f util.startup: Provide a common Lua 5.3+ math.type() for Lua 5.2
Kim Alvefur <zash@zash.se>
parents: 12779
diff changeset
286 -- COMPAT Lua < 5.3
22066b02887f util.startup: Provide a common Lua 5.3+ math.type() for Lua 5.2
Kim Alvefur <zash@zash.se>
parents: 12779
diff changeset
287 if not math.type then
12975
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12864
diff changeset
288 require "prosody.util.mathcompat"
12781
22066b02887f util.startup: Provide a common Lua 5.3+ math.type() for Lua 5.2
Kim Alvefur <zash@zash.se>
parents: 12779
diff changeset
289 end
8698
0499f3da0ec4 util.startup: Factor out processing of plugin and data paths into a separate functions
Kim Alvefur <zash@zash.se>
parents: 8692
diff changeset
290 end
0499f3da0ec4 util.startup: Factor out processing of plugin and data paths into a separate functions
Kim Alvefur <zash@zash.se>
parents: 8692
diff changeset
291
0499f3da0ec4 util.startup: Factor out processing of plugin and data paths into a separate functions
Kim Alvefur <zash@zash.se>
parents: 8692
diff changeset
292 function startup.setup_datadir()
0499f3da0ec4 util.startup: Factor out processing of plugin and data paths into a separate functions
Kim Alvefur <zash@zash.se>
parents: 8692
diff changeset
293 prosody.paths.data = config.get("*", "data_path") or CFG_DATADIR or "data";
0499f3da0ec4 util.startup: Factor out processing of plugin and data paths into a separate functions
Kim Alvefur <zash@zash.se>
parents: 8692
diff changeset
294 end
0499f3da0ec4 util.startup: Factor out processing of plugin and data paths into a separate functions
Kim Alvefur <zash@zash.se>
parents: 8692
diff changeset
295
0499f3da0ec4 util.startup: Factor out processing of plugin and data paths into a separate functions
Kim Alvefur <zash@zash.se>
parents: 8692
diff changeset
296 function startup.setup_plugindir()
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
297 local custom_plugin_paths = config.get("*", "plugin_paths");
10173
0513dd2830b7 util.startup: The .setup_plugindir function now correctly sets a default/specified path for custom plugins
João Duarte <jvsDuarte08@gmail.com>
parents: 10171
diff changeset
298 local path_sep = package.config:sub(3,3);
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
299 if custom_plugin_paths then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
300 -- path1;path2;path3;defaultpath...
8638
f8f45bbbd8ba util.startup: Ignore various globals being read and written as part of startup [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8637
diff changeset
301 -- luacheck: ignore 111
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
302 CFG_PLUGINDIR = table.concat(custom_plugin_paths, path_sep)..path_sep..(CFG_PLUGINDIR or "plugins");
8733
6a234e77c99f util.startup: Fix traceback due to both plugin path becoming nil if plugin_paths is unset
Kim Alvefur <zash@zash.se>
parents: 8728
diff changeset
303 prosody.paths.plugins = CFG_PLUGINDIR;
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
304 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
305 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
306
10404
29c10930a7b2 util.startup: Split plugin installer path setup into a separate function
Kim Alvefur <zash@zash.se>
parents: 10391
diff changeset
307 function startup.setup_plugin_install_path()
11305
cd8516a77255 util.startup: Make installer_plugin_path relative to data directory
Kim Alvefur <zash@zash.se>
parents: 11304
diff changeset
308 local installer_plugin_path = config.get("*", "installer_plugin_path") or "custom_plugins";
10404
29c10930a7b2 util.startup: Split plugin installer path setup into a separate function
Kim Alvefur <zash@zash.se>
parents: 10391
diff changeset
309 local path_sep = package.config:sub(3,3);
11305
cd8516a77255 util.startup: Make installer_plugin_path relative to data directory
Kim Alvefur <zash@zash.se>
parents: 11304
diff changeset
310 installer_plugin_path = config.resolve_relative_path(CFG_DATADIR or "data", installer_plugin_path);
12975
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12864
diff changeset
311 require"prosody.util.paths".complement_lua_path(installer_plugin_path);
10404
29c10930a7b2 util.startup: Split plugin installer path setup into a separate function
Kim Alvefur <zash@zash.se>
parents: 10391
diff changeset
312 -- luacheck: ignore 111
10173
0513dd2830b7 util.startup: The .setup_plugindir function now correctly sets a default/specified path for custom plugins
João Duarte <jvsDuarte08@gmail.com>
parents: 10171
diff changeset
313 CFG_PLUGINDIR = installer_plugin_path..path_sep..(CFG_PLUGINDIR or "plugins");
11144
2b9f7c537acb util.startup: Save the path used by the installer to prosody.paths
Kim Alvefur <zash@zash.se>
parents: 11139
diff changeset
314 prosody.paths.installer = installer_plugin_path;
10171
628e238feb04 util.startup: Removed unnecessary if clause at startup.set_plugindir
João Duarte <jvsDuarte08@gmail.com>
parents: 10163
diff changeset
315 prosody.paths.plugins = CFG_PLUGINDIR;
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
316 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
317
8664
d49acc9a8da2 util.startup: Fix chdir() to use correct path variable
Matthew Wild <mwild1@gmail.com>
parents: 8653
diff changeset
318 function startup.chdir()
d49acc9a8da2 util.startup: Fix chdir() to use correct path variable
Matthew Wild <mwild1@gmail.com>
parents: 8653
diff changeset
319 if prosody.installed then
10390
82705ec87253 util.startup: Ensure prosody.paths are absolute (see #1430)
Kim Alvefur <zash@zash.se>
parents: 10389
diff changeset
320 local lfs = require "lfs";
82705ec87253 util.startup: Ensure prosody.paths are absolute (see #1430)
Kim Alvefur <zash@zash.se>
parents: 10389
diff changeset
321 -- Ensure paths are absolute, not relative to the working directory which we're about to change
82705ec87253 util.startup: Ensure prosody.paths are absolute (see #1430)
Kim Alvefur <zash@zash.se>
parents: 10389
diff changeset
322 local cwd = lfs.currentdir();
82705ec87253 util.startup: Ensure prosody.paths are absolute (see #1430)
Kim Alvefur <zash@zash.se>
parents: 10389
diff changeset
323 prosody.paths.source = config.resolve_relative_path(cwd, prosody.paths.source);
82705ec87253 util.startup: Ensure prosody.paths are absolute (see #1430)
Kim Alvefur <zash@zash.se>
parents: 10389
diff changeset
324 prosody.paths.config = config.resolve_relative_path(cwd, prosody.paths.config);
82705ec87253 util.startup: Ensure prosody.paths are absolute (see #1430)
Kim Alvefur <zash@zash.se>
parents: 10389
diff changeset
325 prosody.paths.data = config.resolve_relative_path(cwd, prosody.paths.data);
8664
d49acc9a8da2 util.startup: Fix chdir() to use correct path variable
Matthew Wild <mwild1@gmail.com>
parents: 8653
diff changeset
326 -- Change working directory to data path.
10390
82705ec87253 util.startup: Ensure prosody.paths are absolute (see #1430)
Kim Alvefur <zash@zash.se>
parents: 10389
diff changeset
327 lfs.chdir(prosody.paths.data);
8664
d49acc9a8da2 util.startup: Fix chdir() to use correct path variable
Matthew Wild <mwild1@gmail.com>
parents: 8653
diff changeset
328 end
d49acc9a8da2 util.startup: Fix chdir() to use correct path variable
Matthew Wild <mwild1@gmail.com>
parents: 8653
diff changeset
329 end
d49acc9a8da2 util.startup: Fix chdir() to use correct path variable
Matthew Wild <mwild1@gmail.com>
parents: 8653
diff changeset
330
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
331 function startup.add_global_prosody_functions()
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
332 -- Function to reload the config file
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
333 function prosody.reload_config()
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
334 log("info", "Reloading configuration file");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
335 prosody.events.fire_event("reloading-config");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
336 local ok, level, err = config.load(prosody.config_file);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
337 if not ok then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
338 if level == "parser" then
10108
659ffa03f1e7 util.startup: Remove tostring call from logging
Kim Alvefur <zash@zash.se>
parents: 9878
diff changeset
339 log("error", "There was an error parsing the configuration file: %s", err);
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
340 elseif level == "file" then
10108
659ffa03f1e7 util.startup: Remove tostring call from logging
Kim Alvefur <zash@zash.se>
parents: 9878
diff changeset
341 log("error", "Couldn't read the config file when trying to reload: %s", err);
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
342 end
8692
a55574754e5f configmanager: Move firing of the 'config-reloaded' event into util.startup (fixes #1117)
Kim Alvefur <zash@zash.se>
parents: 8688
diff changeset
343 else
a55574754e5f configmanager: Move firing of the 'config-reloaded' event into util.startup (fixes #1117)
Kim Alvefur <zash@zash.se>
parents: 8688
diff changeset
344 prosody.events.fire_event("config-reloaded", {
a55574754e5f configmanager: Move firing of the 'config-reloaded' event into util.startup (fixes #1117)
Kim Alvefur <zash@zash.se>
parents: 8688
diff changeset
345 filename = prosody.config_file,
a55574754e5f configmanager: Move firing of the 'config-reloaded' event into util.startup (fixes #1117)
Kim Alvefur <zash@zash.se>
parents: 8688
diff changeset
346 config = config.getconfig(),
a55574754e5f configmanager: Move firing of the 'config-reloaded' event into util.startup (fixes #1117)
Kim Alvefur <zash@zash.se>
parents: 8688
diff changeset
347 });
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
348 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
349 return ok, (err and tostring(level)..": "..tostring(err)) or nil;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
350 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
351
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
352 -- Function to reopen logfiles
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
353 function prosody.reopen_logfiles()
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
354 log("info", "Re-opening log files");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
355 prosody.events.fire_event("reopen-log-files");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
356 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
357
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
358 -- Function to initiate prosody shutdown
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
359 function prosody.shutdown(reason, code)
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
360 log("info", "Shutting down: %s", reason or "unknown reason");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
361 prosody.shutdown_reason = reason;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
362 prosody.shutdown_code = code;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
363 prosody.events.fire_event("server-stopping", {
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
364 reason = reason;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
365 code = code;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
366 });
12553
cc0ec0277813 util.startup: Fix async waiting for last shutdown steps
Kim Alvefur <zash@zash.se>
parents: 12423
diff changeset
367 prosody.main_thread:run(startup.shutdown);
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
368 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
369 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
370
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
371 function startup.load_secondary_libraries()
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
372 --- Load and initialise core modules
12975
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12864
diff changeset
373 require "prosody.util.xmppstream"
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12864
diff changeset
374 require "prosody.core.stanza_router"
13120
be4058bb5a7e util.startup: Record current version in a metric
Kim Alvefur <zash@zash.se>
parents: 13119
diff changeset
375 require "prosody.core.statsmanager".metric("gauge", "prosody_info", "", "Prosody version", { "version" }):with_labels(prosody.version):set(1);
12975
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12864
diff changeset
376 require "prosody.core.hostmanager"
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12864
diff changeset
377 require "prosody.core.portmanager"
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12864
diff changeset
378 require "prosody.core.modulemanager"
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12864
diff changeset
379 require "prosody.core.usermanager"
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12864
diff changeset
380 require "prosody.core.rostermanager"
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12864
diff changeset
381 require "prosody.core.sessionmanager"
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
382
12975
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12864
diff changeset
383 require "prosody.util.array"
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12864
diff changeset
384 require "prosody.util.datetime"
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12864
diff changeset
385 require "prosody.util.iterators"
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12864
diff changeset
386 require "prosody.util.timer"
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12864
diff changeset
387 require "prosody.util.helpers"
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
388
12975
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12864
diff changeset
389 pcall(require, "prosody.util.signal") -- Not on Windows
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
390
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
391 -- Commented to protect us from
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
392 -- the second kind of people
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
393 --[[
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
394 pcall(require, "remdebug.engine");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
395 if remdebug then remdebug.engine.start() end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
396 ]]
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
397
12975
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12864
diff changeset
398 require "prosody.util.stanza"
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12864
diff changeset
399 require "prosody.util.jid"
13424
0efb53a0852e util.startup: Expose core.features.available as prosody.features
Matthew Wild <mwild1@gmail.com>
parents: 13342
diff changeset
400
0efb53a0852e util.startup: Expose core.features.available as prosody.features
Matthew Wild <mwild1@gmail.com>
parents: 13342
diff changeset
401 prosody.features = require "prosody.core.features".available;
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
402 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
403
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
404 function startup.init_http_client()
12975
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12864
diff changeset
405 local http = require "prosody.net.http"
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
406 local config_ssl = config.get("*", "ssl") or {}
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
407 local https_client = config.get("*", "client_https_ssl")
12975
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12864
diff changeset
408 http.default.options.sslctx = require "prosody.core.certmanager".create_context("client_https port 0", "client",
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
409 { capath = config_ssl.capath, cafile = config_ssl.cafile, verify = "peer", }, https_client);
12274
10447f940fec util.startup: Enable DANE in http client library with use_dane
Kim Alvefur <zash@zash.se>
parents: 12244
diff changeset
410 http.default.options.use_dane = config.get("*", "use_dane")
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
411 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
412
11948
dca75cc6fc5a util.startup: Integrate util.promise with net.server main loop
Kim Alvefur <zash@zash.se>
parents: 11870
diff changeset
413 function startup.init_promise()
12975
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12864
diff changeset
414 local promise = require "prosody.util.promise";
11948
dca75cc6fc5a util.startup: Integrate util.promise with net.server main loop
Kim Alvefur <zash@zash.se>
parents: 11870
diff changeset
415
12975
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12864
diff changeset
416 local timer = require "prosody.util.timer";
11948
dca75cc6fc5a util.startup: Integrate util.promise with net.server main loop
Kim Alvefur <zash@zash.se>
parents: 11870
diff changeset
417 promise.set_nexttick(function(f) return timer.add_task(0, f); end);
dca75cc6fc5a util.startup: Integrate util.promise with net.server main loop
Kim Alvefur <zash@zash.se>
parents: 11870
diff changeset
418 end
dca75cc6fc5a util.startup: Integrate util.promise with net.server main loop
Kim Alvefur <zash@zash.se>
parents: 11870
diff changeset
419
11963
f5c6be4a3ecc util.startup: Initialize util.async at startup
Matthew Wild <mwild1@gmail.com>
parents: 11948
diff changeset
420 function startup.init_async()
12975
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12864
diff changeset
421 local async = require "prosody.util.async";
11963
f5c6be4a3ecc util.startup: Initialize util.async at startup
Matthew Wild <mwild1@gmail.com>
parents: 11948
diff changeset
422
12975
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12864
diff changeset
423 local timer = require "prosody.util.timer";
11963
f5c6be4a3ecc util.startup: Initialize util.async at startup
Matthew Wild <mwild1@gmail.com>
parents: 11948
diff changeset
424 async.set_nexttick(function(f) return timer.add_task(0, f); end);
f5c6be4a3ecc util.startup: Initialize util.async at startup
Matthew Wild <mwild1@gmail.com>
parents: 11948
diff changeset
425 async.set_schedule_function(timer.add_task);
f5c6be4a3ecc util.startup: Initialize util.async at startup
Matthew Wild <mwild1@gmail.com>
parents: 11948
diff changeset
426 end
f5c6be4a3ecc util.startup: Initialize util.async at startup
Matthew Wild <mwild1@gmail.com>
parents: 11948
diff changeset
427
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
428 function startup.init_data_store()
12975
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12864
diff changeset
429 require "prosody.core.storagemanager";
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
430 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
431
13342
d0a9b631a937 util.startup: Use prosody. module namespace
Kim Alvefur <zash@zash.se>
parents: 13311
diff changeset
432 local running_state = require "prosody.util.fsm".new({
13311
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13165
diff changeset
433 default_state = "uninitialized";
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13165
diff changeset
434 transitions = {
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13165
diff changeset
435 { name = "begin_startup", from = "uninitialized", to = "starting" };
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13165
diff changeset
436 { name = "finish_startup", from = "starting", to = "running" };
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13165
diff changeset
437 { name = "begin_shutdown", from = { "running", "starting" }, to = "stopping" };
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13165
diff changeset
438 { name = "finish_shutdown", from = "stopping", to = "stopped" };
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13165
diff changeset
439 };
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13165
diff changeset
440 handlers = {
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13165
diff changeset
441 transitioned = function (transition)
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13165
diff changeset
442 prosody.state = transition.to;
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13165
diff changeset
443 end;
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13165
diff changeset
444 };
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13165
diff changeset
445 state_handlers = {
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13165
diff changeset
446 starting = function ()
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13165
diff changeset
447 prosody.log("debug", "Firing server-starting event");
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13165
diff changeset
448 prosody.events.fire_event("server-starting");
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13165
diff changeset
449 prosody.start_time = os.time();
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13165
diff changeset
450 end;
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13165
diff changeset
451 running = function ()
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13165
diff changeset
452 prosody.log("debug", "Startup complete, firing server-started");
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13165
diff changeset
453 prosody.events.fire_event("server-started");
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13165
diff changeset
454 end;
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13165
diff changeset
455 };
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13165
diff changeset
456 }):init();
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13165
diff changeset
457
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
458 function startup.prepare_to_start()
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
459 log("info", "Prosody is using the %s backend for connection handling", server.get_backend());
13311
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13165
diff changeset
460
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
461 -- Signal to modules that we are ready to start
13165
9c13c11b199d renamening: Fix newly added imports to use the new namespace
Kim Alvefur <zash@zash.se>
parents: 13120
diff changeset
462 prosody.started = require "prosody.util.promise".new(function (resolve)
13311
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13165
diff changeset
463 if prosody.state == "running" then
13014
06453c564141 util.startup: Add prosody.started promise to easily execute code after startup
Matthew Wild <mwild1@gmail.com>
parents: 12982
diff changeset
464 resolve();
13311
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13165
diff changeset
465 else
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13165
diff changeset
466 prosody.events.add_handler("server-started", function ()
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13165
diff changeset
467 resolve();
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13165
diff changeset
468 end);
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13165
diff changeset
469 end
13014
06453c564141 util.startup: Add prosody.started promise to easily execute code after startup
Matthew Wild <mwild1@gmail.com>
parents: 12982
diff changeset
470 end):catch(function (err)
06453c564141 util.startup: Add prosody.started promise to easily execute code after startup
Matthew Wild <mwild1@gmail.com>
parents: 12982
diff changeset
471 prosody.log("error", "Prosody startup error: %s", err);
06453c564141 util.startup: Add prosody.started promise to easily execute code after startup
Matthew Wild <mwild1@gmail.com>
parents: 12982
diff changeset
472 end);
13311
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13165
diff changeset
473
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13165
diff changeset
474 running_state:begin_startup();
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
475 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
476
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
477 function startup.init_global_protection()
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
478 -- Catch global accesses
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
479 -- luacheck: ignore 212/t
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
480 local locked_globals_mt = {
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
481 __index = function (t, k) log("warn", "%s", debug.traceback("Attempt to read a non-existent global '"..tostring(k).."'", 2)); end;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
482 __newindex = function (t, k, v) error("Attempt to set a global: "..tostring(k).." = "..tostring(v), 2); end;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
483 };
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
484
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
485 function prosody.unlock_globals()
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
486 setmetatable(_G, nil);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
487 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
488
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
489 function prosody.lock_globals()
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
490 setmetatable(_G, locked_globals_mt);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
491 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
492
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
493 -- And lock now...
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
494 prosody.lock_globals();
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
495 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
496
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
497 function startup.read_version()
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
498 -- Try to determine version
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
499 local version_file = io.open((CFG_SOURCEDIR or ".").."/prosody.version");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
500 prosody.version = "unknown";
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
501 if version_file then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
502 prosody.version = version_file:read("*a"):gsub("%s*$", "");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
503 version_file:close();
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
504 if #prosody.version == 12 and prosody.version:match("^[a-f0-9]+$") then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
505 prosody.version = "hg:"..prosody.version;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
506 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
507 else
12975
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12864
diff changeset
508 local hg = require"prosody.util.mercurial";
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
509 local hgid = hg.check_id(CFG_SOURCEDIR or ".");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
510 if hgid then prosody.version = "hg:" .. hgid; end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
511 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
512 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
513
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
514 function startup.log_greeting()
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
515 log("info", "Hello and welcome to Prosody version %s", prosody.version);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
516 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
517
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
518 function startup.notify_started()
13311
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13165
diff changeset
519 running_state:finish_startup();
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
520 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
521
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
522 -- Override logging config (used by prosodyctl)
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
523 function startup.force_console_logging()
8666
57780ba1938f util.startup: Move original_logging_config to a local variable
Matthew Wild <mwild1@gmail.com>
parents: 8665
diff changeset
524 original_logging_config = config.get("*", "log");
11828
024ac556e907 prosodyctl: Add support for -v/--verbose to enable debug logging
Kim Alvefur <zash@zash.se>
parents: 11560
diff changeset
525 local log_level = os.getenv("PROSODYCTL_LOG_LEVEL");
12243
73ecfe811526 util.startup: Teach prosodyctl to be --quiet as complement to --verbose
Kim Alvefur <zash@zash.se>
parents: 12160
diff changeset
526 if not log_level then
73ecfe811526 util.startup: Teach prosodyctl to be --quiet as complement to --verbose
Kim Alvefur <zash@zash.se>
parents: 12160
diff changeset
527 if prosody.opts.verbose then
73ecfe811526 util.startup: Teach prosodyctl to be --quiet as complement to --verbose
Kim Alvefur <zash@zash.se>
parents: 12160
diff changeset
528 log_level = "debug";
73ecfe811526 util.startup: Teach prosodyctl to be --quiet as complement to --verbose
Kim Alvefur <zash@zash.se>
parents: 12160
diff changeset
529 elseif prosody.opts.quiet then
73ecfe811526 util.startup: Teach prosodyctl to be --quiet as complement to --verbose
Kim Alvefur <zash@zash.se>
parents: 12160
diff changeset
530 log_level = "error";
12244
858d40d675ee util.startup: Teach prosodyctl to be completely --silent
Kim Alvefur <zash@zash.se>
parents: 12243
diff changeset
531 elseif prosody.opts.silent then
858d40d675ee util.startup: Teach prosodyctl to be completely --silent
Kim Alvefur <zash@zash.se>
parents: 12243
diff changeset
532 config.set("*", "log", {}); -- ssssshush!
858d40d675ee util.startup: Teach prosodyctl to be completely --silent
Kim Alvefur <zash@zash.se>
parents: 12243
diff changeset
533 return
12243
73ecfe811526 util.startup: Teach prosodyctl to be --quiet as complement to --verbose
Kim Alvefur <zash@zash.se>
parents: 12160
diff changeset
534 end
73ecfe811526 util.startup: Teach prosodyctl to be --quiet as complement to --verbose
Kim Alvefur <zash@zash.se>
parents: 12160
diff changeset
535 end
11828
024ac556e907 prosodyctl: Add support for -v/--verbose to enable debug logging
Kim Alvefur <zash@zash.se>
parents: 11560
diff changeset
536 config.set("*", "log", { { levels = { min = log_level or "info" }, to = "console" } });
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
537 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
538
13461
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
539 local function check_posix()
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
540 if prosody.platform ~= "posix" then return end
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
541
13564
a350f6332bd8 util.startup: Bump expected util.pposix version
Kim Alvefur <zash@zash.se>
parents: 13477
diff changeset
542 local want_pposix_version = "0.4.1";
13461
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
543 local have_pposix, pposix = pcall(require, "prosody.util.pposix");
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
544
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
545 if pposix._VERSION ~= want_pposix_version then
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
546 print(string.format("Unknown version (%s) of binary pposix module, expected %s",
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
547 tostring(pposix._VERSION), want_pposix_version));
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
548 os.exit(1);
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
549 end
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
550 if have_pposix and pposix then
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
551 return pposix;
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
552 end
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
553 end
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
554
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
555 function startup.switch_user()
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
556 -- Switch away from root and into the prosody user --
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
557 -- NOTE: This function is only used by prosodyctl.
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
558 -- The prosody process is built with the assumption that
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
559 -- it is already started as the appropriate user.
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
560
13461
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
561 local pposix = check_posix()
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
562 if pposix then
8672
86b12ae8d427 util.startup: Expose user switching information via prosody global object
Matthew Wild <mwild1@gmail.com>
parents: 8667
diff changeset
563 prosody.current_uid = pposix.getuid();
10597
25a3c8134b0a prosody/util.startup: Switch to parse_args() for --root and --config
Matthew Wild <mwild1@gmail.com>
parents: 10596
diff changeset
564 local arg_root = prosody.opts.root;
8672
86b12ae8d427 util.startup: Expose user switching information via prosody global object
Matthew Wild <mwild1@gmail.com>
parents: 8667
diff changeset
565 if prosody.current_uid == 0 and config.get("*", "run_as_root") ~= true and not arg_root then
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
566 -- We haz root!
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
567 local desired_user = config.get("*", "prosody_user") or "prosody";
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
568 local desired_group = config.get("*", "prosody_group") or desired_user;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
569 local ok, err = pposix.setgid(desired_group);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
570 if ok then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
571 ok, err = pposix.initgroups(desired_user);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
572 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
573 if ok then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
574 ok, err = pposix.setuid(desired_user);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
575 if ok then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
576 -- Yay!
8672
86b12ae8d427 util.startup: Expose user switching information via prosody global object
Matthew Wild <mwild1@gmail.com>
parents: 8667
diff changeset
577 prosody.switched_user = true;
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
578 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
579 end
8672
86b12ae8d427 util.startup: Expose user switching information via prosody global object
Matthew Wild <mwild1@gmail.com>
parents: 8667
diff changeset
580 if not prosody.switched_user then
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
581 -- Boo!
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
582 print("Warning: Couldn't switch to Prosody user/group '"..tostring(desired_user).."'/'"..tostring(desired_group).."': "..tostring(err));
11866
515a89dee6ae util.startup: Skip config readability check in migrator (thanks eTaurus)
Kim Alvefur <zash@zash.se>
parents: 11847
diff changeset
583 elseif prosody.config_file then
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
584 -- Make sure the Prosody user can read the config
10532
19ec384eb782 util.startup: Ignore unused errno variable [luacheck]
Kim Alvefur <zash@zash.se>
parents: 10405
diff changeset
585 local conf, err, errno = io.open(prosody.config_file); --luacheck: ignore 211/errno
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
586 if conf then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
587 conf:close();
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
588 else
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
589 print("The config file is not readable by the '"..desired_user.."' user.");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
590 print("Prosody will not be able to read it.");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
591 print("Error was "..err);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
592 os.exit(1);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
593 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
594 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
595 end
8637
c8368c7c81a1 util.startup: Trim trailing whitespace [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8636
diff changeset
596
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
597 -- Set our umask to protect data files
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
598 pposix.umask(config.get("*", "umask") or "027");
8667
a05d36075c6a util.startup: Fix variable usage [luacheck]
Matthew Wild <mwild1@gmail.com>
parents: 8666
diff changeset
599 pposix.setenv("HOME", prosody.paths.data);
a05d36075c6a util.startup: Fix variable usage [luacheck]
Matthew Wild <mwild1@gmail.com>
parents: 8666
diff changeset
600 pposix.setenv("PROSODY_CONFIG", prosody.config_file);
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
601 else
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
602 print("Error: Unable to load pposix module. Check that Prosody is installed correctly.")
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
603 print("For more help send the below error to us through https://prosody.im/discuss");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
604 print(tostring(pposix))
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
605 os.exit(1);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
606 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
607 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
608
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
609 function startup.check_unwriteable()
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
610 local function test_writeable(filename)
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
611 local f, err = io.open(filename, "a");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
612 if not f then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
613 return false, err;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
614 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
615 f:close();
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
616 return true;
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
617 end
8637
c8368c7c81a1 util.startup: Trim trailing whitespace [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8636
diff changeset
618
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
619 local unwriteable_files = {};
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
620 if type(original_logging_config) == "string" and original_logging_config:sub(1,1) ~= "*" then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
621 local ok, err = test_writeable(original_logging_config);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
622 if not ok then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
623 table.insert(unwriteable_files, err);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
624 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
625 elseif type(original_logging_config) == "table" then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
626 for _, rule in ipairs(original_logging_config) do
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
627 if rule.filename then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
628 local ok, err = test_writeable(rule.filename);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
629 if not ok then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
630 table.insert(unwriteable_files, err);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
631 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
632 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
633 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
634 end
8637
c8368c7c81a1 util.startup: Trim trailing whitespace [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8636
diff changeset
635
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
636 if #unwriteable_files > 0 then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
637 print("One of more of the Prosody log files are not");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
638 print("writeable, please correct the errors and try");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
639 print("starting prosodyctl again.");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
640 print("");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
641 for _, err in ipairs(unwriteable_files) do
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
642 print(err);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
643 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
644 print("");
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
645 os.exit(1);
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
646 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
647 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
648
11073
5691b9773c5b util.startup: Configure the GC on startup, using the config or built-in defaults
Matthew Wild <mwild1@gmail.com>
parents: 10947
diff changeset
649 function startup.init_gc()
5691b9773c5b util.startup: Configure the GC on startup, using the config or built-in defaults
Matthew Wild <mwild1@gmail.com>
parents: 10947
diff changeset
650 -- Apply garbage collector settings from the config file
12975
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12864
diff changeset
651 local gc = require "prosody.util.gc";
11073
5691b9773c5b util.startup: Configure the GC on startup, using the config or built-in defaults
Matthew Wild <mwild1@gmail.com>
parents: 10947
diff changeset
652 local gc_settings = config.get("*", "gc") or { mode = default_gc_params.mode };
5691b9773c5b util.startup: Configure the GC on startup, using the config or built-in defaults
Matthew Wild <mwild1@gmail.com>
parents: 10947
diff changeset
653
5691b9773c5b util.startup: Configure the GC on startup, using the config or built-in defaults
Matthew Wild <mwild1@gmail.com>
parents: 10947
diff changeset
654 local ok, err = gc.configure(gc_settings, default_gc_params);
5691b9773c5b util.startup: Configure the GC on startup, using the config or built-in defaults
Matthew Wild <mwild1@gmail.com>
parents: 10947
diff changeset
655 if not ok then
5691b9773c5b util.startup: Configure the GC on startup, using the config or built-in defaults
Matthew Wild <mwild1@gmail.com>
parents: 10947
diff changeset
656 log("error", "Failed to apply GC configuration: %s", err);
5691b9773c5b util.startup: Configure the GC on startup, using the config or built-in defaults
Matthew Wild <mwild1@gmail.com>
parents: 10947
diff changeset
657 return nil, err;
5691b9773c5b util.startup: Configure the GC on startup, using the config or built-in defaults
Matthew Wild <mwild1@gmail.com>
parents: 10947
diff changeset
658 end
5691b9773c5b util.startup: Configure the GC on startup, using the config or built-in defaults
Matthew Wild <mwild1@gmail.com>
parents: 10947
diff changeset
659 return true;
5691b9773c5b util.startup: Configure the GC on startup, using the config or built-in defaults
Matthew Wild <mwild1@gmail.com>
parents: 10947
diff changeset
660 end
5691b9773c5b util.startup: Configure the GC on startup, using the config or built-in defaults
Matthew Wild <mwild1@gmail.com>
parents: 10947
diff changeset
661
11050
51be24b16e8a util.error: Allow optional tracebacks to be injected on errors
Matthew Wild <mwild1@gmail.com>
parents: 10948
diff changeset
662 function startup.init_errors()
12975
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12864
diff changeset
663 require "prosody.util.error".configure(config.get("*", "error_library") or {});
11050
51be24b16e8a util.error: Allow optional tracebacks to be injected on errors
Matthew Wild <mwild1@gmail.com>
parents: 10948
diff changeset
664 end
51be24b16e8a util.error: Allow optional tracebacks to be injected on errors
Matthew Wild <mwild1@gmail.com>
parents: 10948
diff changeset
665
8673
6aeed79d9283 util.startup: Expose make_host() function
Matthew Wild <mwild1@gmail.com>
parents: 8672
diff changeset
666 function startup.make_host(hostname)
6aeed79d9283 util.startup: Expose make_host() function
Matthew Wild <mwild1@gmail.com>
parents: 8672
diff changeset
667 return {
6aeed79d9283 util.startup: Expose make_host() function
Matthew Wild <mwild1@gmail.com>
parents: 8672
diff changeset
668 type = "local",
6aeed79d9283 util.startup: Expose make_host() function
Matthew Wild <mwild1@gmail.com>
parents: 8672
diff changeset
669 events = prosody.events,
6aeed79d9283 util.startup: Expose make_host() function
Matthew Wild <mwild1@gmail.com>
parents: 8672
diff changeset
670 modules = {},
6aeed79d9283 util.startup: Expose make_host() function
Matthew Wild <mwild1@gmail.com>
parents: 8672
diff changeset
671 sessions = {},
12975
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12864
diff changeset
672 users = require "prosody.core.usermanager".new_null_provider(hostname)
8673
6aeed79d9283 util.startup: Expose make_host() function
Matthew Wild <mwild1@gmail.com>
parents: 8672
diff changeset
673 };
6aeed79d9283 util.startup: Expose make_host() function
Matthew Wild <mwild1@gmail.com>
parents: 8672
diff changeset
674 end
6aeed79d9283 util.startup: Expose make_host() function
Matthew Wild <mwild1@gmail.com>
parents: 8672
diff changeset
675
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
676 function startup.make_dummy_hosts()
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
677 -- When running under prosodyctl, we don't want to
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
678 -- fully initialize the server, so we populate prosody.hosts
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
679 -- with just enough things for most code to work correctly
8638
f8f45bbbd8ba util.startup: Ignore various globals being read and written as part of startup [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8637
diff changeset
680 -- luacheck: ignore 122/hosts
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
681 prosody.core_post_stanza = function () end; -- TODO: mod_router!
8637
c8368c7c81a1 util.startup: Trim trailing whitespace [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8636
diff changeset
682
8639
070a77c15f63 util.startup: Remove unused loop variable [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8638
diff changeset
683 for hostname in pairs(config.getconfig()) do
8715
25d8d6091ec3 util.startup: Access the hosts table via the prosody global for consistency
Kim Alvefur <zash@zash.se>
parents: 8713
diff changeset
684 prosody.hosts[hostname] = startup.make_host(hostname);
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
685 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
686 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
687
13461
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
688 function startup.posix_umask()
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
689 if prosody.platform ~= "posix" then return end
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
690 local pposix = require "prosody.util.pposix";
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
691 local umask = config.get("*", "umask") or "027";
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
692 pposix.umask(umask);
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
693 end
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
694
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
695 function startup.check_user()
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
696 local pposix = check_posix();
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
697 if not pposix then return end
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
698 -- Don't even think about it!
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
699 if pposix.getuid() == 0 and not config.get("*", "run_as_root") then
13464
2dbc169aae6a util.startup: Abort before initialization of logging when started as root
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
700 print("Danger, Will Robinson! Prosody doesn't need to be run as root, so don't do it!");
2dbc169aae6a util.startup: Abort before initialization of logging when started as root
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
701 print("For more information on running Prosody as root, see https://prosody.im/doc/root");
13463
3ce550ce44ce util.startup: Don't use not yet existent shutdown procedure when started as root (thanks SigmaTel71)
Kim Alvefur <zash@zash.se>
parents: 13462
diff changeset
702 os.exit(1); -- Refusing to run as root
13461
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
703 end
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
704 end
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
705
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
706 local function remove_pidfile()
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
707 local pidfile = prosody.pidfile;
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
708 if prosody.pidfile_handle then
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
709 prosody.pidfile_handle:close();
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
710 os.remove(pidfile);
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
711 prosody.pidfile, prosody.pidfile_handle = nil, nil;
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
712 end
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
713 end
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
714
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
715 function startup.write_pidfile()
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
716 local pposix = check_posix();
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
717 if not pposix then return end
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
718 local lfs = require "lfs";
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
719 local stat = lfs.attributes;
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
720 local pidfile = config.get("*", "pidfile") or nil;
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
721 if not pidfile then return end
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
722 pidfile = config.resolve_relative_path(prosody.paths.data, pidfile);
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
723 local mode = stat(pidfile) and "r+" or "w+";
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
724 local pidfile_handle, err = io.open(pidfile, mode);
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
725 if not pidfile_handle then
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
726 log("error", "Couldn't write pidfile at %s; %s", pidfile, err);
13467
c2a476f4712a util.startup: Fix exiting on pidfile trouble
Kim Alvefur <zash@zash.se>
parents: 13464
diff changeset
727 os.exit(1);
13461
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
728 else
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
729 prosody.pidfile = pidfile;
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
730 if not lfs.lock(pidfile_handle, "w") then -- Exclusive lock
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
731 local other_pid = pidfile_handle:read("*a");
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
732 log("error", "Another Prosody instance seems to be running with PID %s, quitting", other_pid);
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
733 prosody.pidfile_handle = nil;
13467
c2a476f4712a util.startup: Fix exiting on pidfile trouble
Kim Alvefur <zash@zash.se>
parents: 13464
diff changeset
734 os.exit(1);
13461
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
735 else
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
736 pidfile_handle:close();
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
737 pidfile_handle, err = io.open(pidfile, "w+");
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
738 if not pidfile_handle then
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
739 log("error", "Couldn't write pidfile at %s; %s", pidfile, err);
13467
c2a476f4712a util.startup: Fix exiting on pidfile trouble
Kim Alvefur <zash@zash.se>
parents: 13464
diff changeset
740 os.exit(1);
13461
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
741 else
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
742 if lfs.lock(pidfile_handle, "w") then
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
743 pidfile_handle:write(tostring(pposix.getpid()));
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
744 pidfile_handle:flush();
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
745 prosody.pidfile_handle = pidfile_handle;
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
746 end
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
747 end
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
748 end
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
749 end
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
750 prosody.events.add_handler("server-stopped", remove_pidfile);
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
751 end
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
752
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
753 local function remove_log_sinks()
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
754 local lm = require "prosody.core.loggingmanager";
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
755 lm.register_sink_type("console", nil);
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
756 lm.register_sink_type("stdout", nil);
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
757 lm.reload_logging();
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
758 end
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
759
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
760 function startup.posix_daemonize()
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
761 if not prosody.opts.daemonize then return end
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
762 local pposix = check_posix();
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
763 log("info", "Prosody is about to detach from the console, disabling further console output");
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
764 remove_log_sinks();
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
765 local ok, ret = pposix.daemonize();
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
766 if not ok then
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
767 log("error", "Failed to daemonize: %s", ret);
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
768 elseif ret and ret > 0 then
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
769 os.exit(0);
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
770 else
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
771 log("info", "Successfully daemonized to PID %d", pposix.getpid());
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
772 end
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
773 end
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
774
13452
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13424
diff changeset
775 function startup.hook_posix_signals()
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13424
diff changeset
776 if prosody.platform ~= "posix" then return end
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13424
diff changeset
777 local have_signal, signal = pcall(require, "prosody.util.signal");
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13424
diff changeset
778 if not have_signal then
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13424
diff changeset
779 log("warn", "Couldn't load signal library, won't respond to SIGTERM");
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13424
diff changeset
780 return
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13424
diff changeset
781 end
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13424
diff changeset
782 signal.signal("SIGTERM", function()
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13424
diff changeset
783 log("warn", "Received SIGTERM");
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13424
diff changeset
784 prosody.main_thread:run(function()
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13424
diff changeset
785 prosody.unlock_globals();
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13424
diff changeset
786 prosody.shutdown("Received SIGTERM");
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13424
diff changeset
787 prosody.lock_globals();
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13424
diff changeset
788 end);
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13424
diff changeset
789 end);
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13424
diff changeset
790
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13424
diff changeset
791 signal.signal("SIGHUP", function()
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13424
diff changeset
792 log("info", "Received SIGHUP");
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13424
diff changeset
793 prosody.main_thread:run(function() prosody.reload_config(); end);
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13424
diff changeset
794 -- this also reloads logging
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13424
diff changeset
795 end);
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13424
diff changeset
796
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13424
diff changeset
797 signal.signal("SIGINT", function()
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13424
diff changeset
798 log("info", "Received SIGINT");
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13424
diff changeset
799 prosody.main_thread:run(function()
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13424
diff changeset
800 prosody.unlock_globals();
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13424
diff changeset
801 prosody.shutdown("Received SIGINT");
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13424
diff changeset
802 prosody.lock_globals();
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13424
diff changeset
803 end);
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13424
diff changeset
804 end);
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13424
diff changeset
805
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13424
diff changeset
806 signal.signal("SIGUSR1", function()
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13424
diff changeset
807 log("info", "Received SIGUSR1");
13454
b0c27628f588 util.startup: Fix firing of USR1/2 events
Kim Alvefur <zash@zash.se>
parents: 13452
diff changeset
808 prosody.events.fire_event("signal/SIGUSR1");
13452
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13424
diff changeset
809 end);
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13424
diff changeset
810
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13424
diff changeset
811 signal.signal("SIGUSR2", function()
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13424
diff changeset
812 log("info", "Received SIGUSR2");
13454
b0c27628f588 util.startup: Fix firing of USR1/2 events
Kim Alvefur <zash@zash.se>
parents: 13452
diff changeset
813 prosody.events.fire_event("signal/SIGUSR2");
13452
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13424
diff changeset
814 end);
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13424
diff changeset
815 end
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13424
diff changeset
816
13639
94f77a1994dc util.startup: Drop mention of systemd from notification socket handling
Kim Alvefur <zash@zash.se>
parents: 13630
diff changeset
817 function startup.notification_socket()
13471
afad3b2725bf util.startup: Support systemd Type=notify service type
Kim Alvefur <zash@zash.se>
parents: 13467
diff changeset
818 local notify_socket_name = os.getenv("NOTIFY_SOCKET");
afad3b2725bf util.startup: Support systemd Type=notify service type
Kim Alvefur <zash@zash.se>
parents: 13467
diff changeset
819 if not notify_socket_name then return end
afad3b2725bf util.startup: Support systemd Type=notify service type
Kim Alvefur <zash@zash.se>
parents: 13467
diff changeset
820 local have_unix, unix = pcall(require, "socket.unix");
afad3b2725bf util.startup: Support systemd Type=notify service type
Kim Alvefur <zash@zash.se>
parents: 13467
diff changeset
821 if not have_unix or type(unix) ~= "table" then
13639
94f77a1994dc util.startup: Drop mention of systemd from notification socket handling
Kim Alvefur <zash@zash.se>
parents: 13630
diff changeset
822 log("error", "LuaSocket without UNIX socket support, can't notify process manager.")
13471
afad3b2725bf util.startup: Support systemd Type=notify service type
Kim Alvefur <zash@zash.se>
parents: 13467
diff changeset
823 return os.exit(1);
afad3b2725bf util.startup: Support systemd Type=notify service type
Kim Alvefur <zash@zash.se>
parents: 13467
diff changeset
824 end
afad3b2725bf util.startup: Support systemd Type=notify service type
Kim Alvefur <zash@zash.se>
parents: 13467
diff changeset
825 log("debug", "Will notify on socket %q", notify_socket_name);
afad3b2725bf util.startup: Support systemd Type=notify service type
Kim Alvefur <zash@zash.se>
parents: 13467
diff changeset
826 notify_socket_name = notify_socket_name:gsub("^@", "\0");
afad3b2725bf util.startup: Support systemd Type=notify service type
Kim Alvefur <zash@zash.se>
parents: 13467
diff changeset
827 local notify_socket = unix.dgram();
afad3b2725bf util.startup: Support systemd Type=notify service type
Kim Alvefur <zash@zash.se>
parents: 13467
diff changeset
828 local ok, err = notify_socket:setpeername(notify_socket_name);
afad3b2725bf util.startup: Support systemd Type=notify service type
Kim Alvefur <zash@zash.se>
parents: 13467
diff changeset
829 if not ok then
13639
94f77a1994dc util.startup: Drop mention of systemd from notification socket handling
Kim Alvefur <zash@zash.se>
parents: 13630
diff changeset
830 log("error", "Could not connect to notification socket %q: %q", notify_socket_name, err);
13471
afad3b2725bf util.startup: Support systemd Type=notify service type
Kim Alvefur <zash@zash.se>
parents: 13467
diff changeset
831 return os.exit(1);
afad3b2725bf util.startup: Support systemd Type=notify service type
Kim Alvefur <zash@zash.se>
parents: 13467
diff changeset
832 end
afad3b2725bf util.startup: Support systemd Type=notify service type
Kim Alvefur <zash@zash.se>
parents: 13467
diff changeset
833 local time = require "prosody.util.time";
afad3b2725bf util.startup: Support systemd Type=notify service type
Kim Alvefur <zash@zash.se>
parents: 13467
diff changeset
834
afad3b2725bf util.startup: Support systemd Type=notify service type
Kim Alvefur <zash@zash.se>
parents: 13467
diff changeset
835 prosody.notify_socket = notify_socket;
afad3b2725bf util.startup: Support systemd Type=notify service type
Kim Alvefur <zash@zash.se>
parents: 13467
diff changeset
836 prosody.events.add_handler("server-started", function()
afad3b2725bf util.startup: Support systemd Type=notify service type
Kim Alvefur <zash@zash.se>
parents: 13467
diff changeset
837 notify_socket:send("READY=1");
afad3b2725bf util.startup: Support systemd Type=notify service type
Kim Alvefur <zash@zash.se>
parents: 13467
diff changeset
838 end);
13477
e8ac3ce3238e util.startup: Fix notifying config-reload to systemd
Kim Alvefur <zash@zash.se>
parents: 13471
diff changeset
839 prosody.events.add_handler("reloading-config", function()
13471
afad3b2725bf util.startup: Support systemd Type=notify service type
Kim Alvefur <zash@zash.se>
parents: 13467
diff changeset
840 notify_socket:send(string.format("RELOADING=1\nMONOTONIC_USEC=%d", math.floor(time.monotonic() * 1000000)));
afad3b2725bf util.startup: Support systemd Type=notify service type
Kim Alvefur <zash@zash.se>
parents: 13467
diff changeset
841 end);
afad3b2725bf util.startup: Support systemd Type=notify service type
Kim Alvefur <zash@zash.se>
parents: 13467
diff changeset
842 prosody.events.add_handler("config-reloaded", function()
afad3b2725bf util.startup: Support systemd Type=notify service type
Kim Alvefur <zash@zash.se>
parents: 13467
diff changeset
843 notify_socket:send("READY=1");
afad3b2725bf util.startup: Support systemd Type=notify service type
Kim Alvefur <zash@zash.se>
parents: 13467
diff changeset
844 end);
afad3b2725bf util.startup: Support systemd Type=notify service type
Kim Alvefur <zash@zash.se>
parents: 13467
diff changeset
845 prosody.events.add_handler("server-stopping", function()
afad3b2725bf util.startup: Support systemd Type=notify service type
Kim Alvefur <zash@zash.se>
parents: 13467
diff changeset
846 notify_socket:send("STOPPING=1");
afad3b2725bf util.startup: Support systemd Type=notify service type
Kim Alvefur <zash@zash.se>
parents: 13467
diff changeset
847 end);
afad3b2725bf util.startup: Support systemd Type=notify service type
Kim Alvefur <zash@zash.se>
parents: 13467
diff changeset
848 end
afad3b2725bf util.startup: Support systemd Type=notify service type
Kim Alvefur <zash@zash.se>
parents: 13467
diff changeset
849
12294
81f147ddc4ab prosody: Move last cleanup and shutdown code into util.startup
Kim Alvefur <zash@zash.se>
parents: 12274
diff changeset
850 function startup.cleanup()
81f147ddc4ab prosody: Move last cleanup and shutdown code into util.startup
Kim Alvefur <zash@zash.se>
parents: 12274
diff changeset
851 prosody.log("info", "Shutdown status: Cleaning up");
81f147ddc4ab prosody: Move last cleanup and shutdown code into util.startup
Kim Alvefur <zash@zash.se>
parents: 12274
diff changeset
852 prosody.events.fire_event("server-cleanup");
81f147ddc4ab prosody: Move last cleanup and shutdown code into util.startup
Kim Alvefur <zash@zash.se>
parents: 12274
diff changeset
853 end
81f147ddc4ab prosody: Move last cleanup and shutdown code into util.startup
Kim Alvefur <zash@zash.se>
parents: 12274
diff changeset
854
81f147ddc4ab prosody: Move last cleanup and shutdown code into util.startup
Kim Alvefur <zash@zash.se>
parents: 12274
diff changeset
855 function startup.shutdown()
13311
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13165
diff changeset
856 running_state:begin_shutdown();
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13165
diff changeset
857
12294
81f147ddc4ab prosody: Move last cleanup and shutdown code into util.startup
Kim Alvefur <zash@zash.se>
parents: 12274
diff changeset
858 prosody.log("info", "Shutting down...");
81f147ddc4ab prosody: Move last cleanup and shutdown code into util.startup
Kim Alvefur <zash@zash.se>
parents: 12274
diff changeset
859 startup.cleanup();
81f147ddc4ab prosody: Move last cleanup and shutdown code into util.startup
Kim Alvefur <zash@zash.se>
parents: 12274
diff changeset
860 prosody.events.fire_event("server-stopped");
13311
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13165
diff changeset
861
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13165
diff changeset
862 running_state:finish_shutdown();
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13165
diff changeset
863
12294
81f147ddc4ab prosody: Move last cleanup and shutdown code into util.startup
Kim Alvefur <zash@zash.se>
parents: 12274
diff changeset
864 prosody.log("info", "Shutdown complete");
81f147ddc4ab prosody: Move last cleanup and shutdown code into util.startup
Kim Alvefur <zash@zash.se>
parents: 12274
diff changeset
865 prosody.log("debug", "Shutdown reason was: %s", prosody.shutdown_reason or "not specified");
81f147ddc4ab prosody: Move last cleanup and shutdown code into util.startup
Kim Alvefur <zash@zash.se>
parents: 12274
diff changeset
866 prosody.log("debug", "Exiting with status code: %d", prosody.shutdown_code or 0);
12553
cc0ec0277813 util.startup: Fix async waiting for last shutdown steps
Kim Alvefur <zash@zash.se>
parents: 12423
diff changeset
867 server.setquitting(true);
cc0ec0277813 util.startup: Fix async waiting for last shutdown steps
Kim Alvefur <zash@zash.se>
parents: 12423
diff changeset
868 end
cc0ec0277813 util.startup: Fix async waiting for last shutdown steps
Kim Alvefur <zash@zash.se>
parents: 12423
diff changeset
869
cc0ec0277813 util.startup: Fix async waiting for last shutdown steps
Kim Alvefur <zash@zash.se>
parents: 12423
diff changeset
870 function startup.exit()
12863
891edd1ebde6 util.startup: Close state on exit to ensure GC finalizers are called
Kim Alvefur <zash@zash.se>
parents: 12779
diff changeset
871 os.exit(prosody.shutdown_code, true);
12294
81f147ddc4ab prosody: Move last cleanup and shutdown code into util.startup
Kim Alvefur <zash@zash.se>
parents: 12274
diff changeset
872 end
81f147ddc4ab prosody: Move last cleanup and shutdown code into util.startup
Kim Alvefur <zash@zash.se>
parents: 12274
diff changeset
873
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
874 -- prosodyctl only
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
875 function startup.prosodyctl()
10636
a9c975a0f113 util.startup: expose current process type (prosody/prosodyctl) in the global prosody object
Matthew Wild <mwild1@gmail.com>
parents: 10604
diff changeset
876 prosody.process_type = "prosodyctl";
10597
25a3c8134b0a prosody/util.startup: Switch to parse_args() for --root and --config
Matthew Wild <mwild1@gmail.com>
parents: 10596
diff changeset
877 startup.parse_args();
8699
580c13ed0ca1 util.startup: Initialize the 'prosody' global earlier (various things needs the global util.events instance)
Kim Alvefur <zash@zash.se>
parents: 8698
diff changeset
878 startup.init_global_state();
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
879 startup.read_config();
8755
857d8f38a010 util.startup: Force console logging before initializing logging (see 2fdeb979cc7c)
Kim Alvefur <zash@zash.se>
parents: 8748
diff changeset
880 startup.force_console_logging();
8748
2fdeb979cc7c util.startup: Initialize logging immediately after configuration is read (which is how it used to work)
Matthew Wild <mwild1@gmail.com>
parents: 8734
diff changeset
881 startup.init_logging();
11073
5691b9773c5b util.startup: Configure the GC on startup, using the config or built-in defaults
Matthew Wild <mwild1@gmail.com>
parents: 10947
diff changeset
882 startup.init_gc();
11050
51be24b16e8a util.error: Allow optional tracebacks to be injected on errors
Matthew Wild <mwild1@gmail.com>
parents: 10948
diff changeset
883 startup.init_errors();
8698
0499f3da0ec4 util.startup: Factor out processing of plugin and data paths into a separate functions
Kim Alvefur <zash@zash.se>
parents: 8692
diff changeset
884 startup.setup_plugindir();
11138
2a19d61f4ae4 util.startup: Re-enable installer path setup
Kim Alvefur <zash@zash.se>
parents: 11137
diff changeset
885 startup.setup_plugin_install_path();
8698
0499f3da0ec4 util.startup: Factor out processing of plugin and data paths into a separate functions
Kim Alvefur <zash@zash.se>
parents: 8692
diff changeset
886 startup.setup_datadir();
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
887 startup.chdir();
8688
019b4b3dd5ad util.startup: Read version for prosodyctl (restores version in 'about' command)
Kim Alvefur <zash@zash.se>
parents: 8682
diff changeset
888 startup.read_version();
8665
4b260a3f8b94 util.startup: Restore user switching
Matthew Wild <mwild1@gmail.com>
parents: 8664
diff changeset
889 startup.switch_user();
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
890 startup.check_dependencies();
9873
dfaeea570f7e util.startup: Give function a more generic name so it can apply to all warnings
Matthew Wild <mwild1@gmail.com>
parents: 9762
diff changeset
891 startup.log_startup_warnings();
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
892 startup.check_unwriteable();
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
893 startup.load_libraries();
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
894 startup.init_http_client();
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
895 startup.make_dummy_hosts();
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
896 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
897
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
898 function startup.prosody()
8682
151ecd18d624 prosody, util.startup: Switch from async.once() to long-lived thread, to avoid GC
Matthew Wild <mwild1@gmail.com>
parents: 8673
diff changeset
899 -- These actions are in a strict order, as many depend on
151ecd18d624 prosody, util.startup: Switch from async.once() to long-lived thread, to avoid GC
Matthew Wild <mwild1@gmail.com>
parents: 8673
diff changeset
900 -- previous steps to have already been performed
10636
a9c975a0f113 util.startup: expose current process type (prosody/prosodyctl) in the global prosody object
Matthew Wild <mwild1@gmail.com>
parents: 10604
diff changeset
901 prosody.process_type = "prosody";
10597
25a3c8134b0a prosody/util.startup: Switch to parse_args() for --root and --config
Matthew Wild <mwild1@gmail.com>
parents: 10596
diff changeset
902 startup.parse_args();
8699
580c13ed0ca1 util.startup: Initialize the 'prosody' global earlier (various things needs the global util.events instance)
Kim Alvefur <zash@zash.se>
parents: 8698
diff changeset
903 startup.init_global_state();
8682
151ecd18d624 prosody, util.startup: Switch from async.once() to long-lived thread, to avoid GC
Matthew Wild <mwild1@gmail.com>
parents: 8673
diff changeset
904 startup.read_config();
13464
2dbc169aae6a util.startup: Abort before initialization of logging when started as root
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
905 startup.check_user();
8748
2fdeb979cc7c util.startup: Initialize logging immediately after configuration is read (which is how it used to work)
Matthew Wild <mwild1@gmail.com>
parents: 8734
diff changeset
906 startup.init_logging();
11073
5691b9773c5b util.startup: Configure the GC on startup, using the config or built-in defaults
Matthew Wild <mwild1@gmail.com>
parents: 10947
diff changeset
907 startup.init_gc();
11050
51be24b16e8a util.error: Allow optional tracebacks to be injected on errors
Matthew Wild <mwild1@gmail.com>
parents: 10948
diff changeset
908 startup.init_errors();
8682
151ecd18d624 prosody, util.startup: Switch from async.once() to long-lived thread, to avoid GC
Matthew Wild <mwild1@gmail.com>
parents: 8673
diff changeset
909 startup.sanity_check();
151ecd18d624 prosody, util.startup: Switch from async.once() to long-lived thread, to avoid GC
Matthew Wild <mwild1@gmail.com>
parents: 8673
diff changeset
910 startup.sandbox_require();
151ecd18d624 prosody, util.startup: Switch from async.once() to long-lived thread, to avoid GC
Matthew Wild <mwild1@gmail.com>
parents: 8673
diff changeset
911 startup.set_function_metatable();
151ecd18d624 prosody, util.startup: Switch from async.once() to long-lived thread, to avoid GC
Matthew Wild <mwild1@gmail.com>
parents: 8673
diff changeset
912 startup.check_dependencies();
151ecd18d624 prosody, util.startup: Switch from async.once() to long-lived thread, to avoid GC
Matthew Wild <mwild1@gmail.com>
parents: 8673
diff changeset
913 startup.load_libraries();
8698
0499f3da0ec4 util.startup: Factor out processing of plugin and data paths into a separate functions
Kim Alvefur <zash@zash.se>
parents: 8692
diff changeset
914 startup.setup_plugindir();
11138
2a19d61f4ae4 util.startup: Re-enable installer path setup
Kim Alvefur <zash@zash.se>
parents: 11137
diff changeset
915 startup.setup_plugin_install_path();
8698
0499f3da0ec4 util.startup: Factor out processing of plugin and data paths into a separate functions
Kim Alvefur <zash@zash.se>
parents: 8692
diff changeset
916 startup.setup_datadir();
8682
151ecd18d624 prosody, util.startup: Switch from async.once() to long-lived thread, to avoid GC
Matthew Wild <mwild1@gmail.com>
parents: 8673
diff changeset
917 startup.chdir();
151ecd18d624 prosody, util.startup: Switch from async.once() to long-lived thread, to avoid GC
Matthew Wild <mwild1@gmail.com>
parents: 8673
diff changeset
918 startup.add_global_prosody_functions();
151ecd18d624 prosody, util.startup: Switch from async.once() to long-lived thread, to avoid GC
Matthew Wild <mwild1@gmail.com>
parents: 8673
diff changeset
919 startup.read_version();
151ecd18d624 prosody, util.startup: Switch from async.once() to long-lived thread, to avoid GC
Matthew Wild <mwild1@gmail.com>
parents: 8673
diff changeset
920 startup.log_greeting();
9873
dfaeea570f7e util.startup: Give function a more generic name so it can apply to all warnings
Matthew Wild <mwild1@gmail.com>
parents: 9762
diff changeset
921 startup.log_startup_warnings();
8682
151ecd18d624 prosody, util.startup: Switch from async.once() to long-lived thread, to avoid GC
Matthew Wild <mwild1@gmail.com>
parents: 8673
diff changeset
922 startup.load_secondary_libraries();
11948
dca75cc6fc5a util.startup: Integrate util.promise with net.server main loop
Kim Alvefur <zash@zash.se>
parents: 11870
diff changeset
923 startup.init_promise();
11963
f5c6be4a3ecc util.startup: Initialize util.async at startup
Matthew Wild <mwild1@gmail.com>
parents: 11948
diff changeset
924 startup.init_async();
8682
151ecd18d624 prosody, util.startup: Switch from async.once() to long-lived thread, to avoid GC
Matthew Wild <mwild1@gmail.com>
parents: 8673
diff changeset
925 startup.init_http_client();
151ecd18d624 prosody, util.startup: Switch from async.once() to long-lived thread, to avoid GC
Matthew Wild <mwild1@gmail.com>
parents: 8673
diff changeset
926 startup.init_data_store();
151ecd18d624 prosody, util.startup: Switch from async.once() to long-lived thread, to avoid GC
Matthew Wild <mwild1@gmail.com>
parents: 8673
diff changeset
927 startup.init_global_protection();
13461
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
928 startup.posix_daemonize();
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13459
diff changeset
929 startup.write_pidfile();
13459
790f60c0843b util.startup: Back out 598df17b8ebb
Kim Alvefur <zash@zash.se>
parents: 13458
diff changeset
930 startup.hook_posix_signals();
13639
94f77a1994dc util.startup: Drop mention of systemd from notification socket handling
Kim Alvefur <zash@zash.se>
parents: 13630
diff changeset
931 startup.notification_socket();
8682
151ecd18d624 prosody, util.startup: Switch from async.once() to long-lived thread, to avoid GC
Matthew Wild <mwild1@gmail.com>
parents: 8673
diff changeset
932 startup.prepare_to_start();
151ecd18d624 prosody, util.startup: Switch from async.once() to long-lived thread, to avoid GC
Matthew Wild <mwild1@gmail.com>
parents: 8673
diff changeset
933 startup.notify_started();
8635
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
934 end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
935
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
936 return startup;