Mercurial > prosody-hg
annotate util/startup.lua @ 14130:a957cd3ea4eb 13.0
util.startup: Improve error message when failing to load config file
The current error text always implied that the file is missing, but it could
also be a permissions issue, or something else.
Now it will handle those two cases, and show the error from the system
otherwise.
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Thu, 16 Apr 2026 18:50:23 +0100 |
| parents | 2041c347c178 |
| children | c1469296190d a874c3f4570a |
| 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 |
|
13743
0c7e11c11968
core.configmanager: Remove dependency on 'prosody' global for Credential
Kim Alvefur <zash@zash.se>
parents:
13659
diff
changeset
|
92 local credentials_directory = os.getenv("CREDENTIALS_DIRECTORY"); |
|
0c7e11c11968
core.configmanager: Remove dependency on 'prosody' global for Credential
Kim Alvefur <zash@zash.se>
parents:
13659
diff
changeset
|
93 if credentials_directory then |
|
0c7e11c11968
core.configmanager: Remove dependency on 'prosody' global for Credential
Kim Alvefur <zash@zash.se>
parents:
13659
diff
changeset
|
94 config.set_credentials_directory(credentials_directory); |
|
0c7e11c11968
core.configmanager: Remove dependency on 'prosody' global for Credential
Kim Alvefur <zash@zash.se>
parents:
13659
diff
changeset
|
95 elseif prosody.process_type == "prosody" then |
|
0c7e11c11968
core.configmanager: Remove dependency on 'prosody' global for Credential
Kim Alvefur <zash@zash.se>
parents:
13659
diff
changeset
|
96 config.set_credential_fallback_mode("error"); |
|
0c7e11c11968
core.configmanager: Remove dependency on 'prosody' global for Credential
Kim Alvefur <zash@zash.se>
parents:
13659
diff
changeset
|
97 else |
|
0c7e11c11968
core.configmanager: Remove dependency on 'prosody' global for Credential
Kim Alvefur <zash@zash.se>
parents:
13659
diff
changeset
|
98 config.set_credential_fallback_mode("warn"); |
|
0c7e11c11968
core.configmanager: Remove dependency on 'prosody' global for Credential
Kim Alvefur <zash@zash.se>
parents:
13659
diff
changeset
|
99 end |
|
14130
a957cd3ea4eb
util.startup: Improve error message when failing to load config file
Matthew Wild <mwild1@gmail.com>
parents:
13979
diff
changeset
|
100 local ok, level, err, errno = config.load(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
|
101 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
|
102 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
|
103 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
|
104 if level == "parser" then |
|
8728
41c959c5c84b
Fix spelling throughout the codebase [codespell]
Kim Alvefur <zash@zash.se>
parents:
8721
diff
changeset
|
105 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
|
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 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
|
108 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
|
109 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
|
110 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
|
111 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
|
112 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
|
113 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
|
114 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
|
115 elseif level == "file" then |
|
14130
a957cd3ea4eb
util.startup: Improve error message when failing to load config file
Matthew Wild <mwild1@gmail.com>
parents:
13979
diff
changeset
|
116 local err_kind; |
|
a957cd3ea4eb
util.startup: Improve error message when failing to load config file
Matthew Wild <mwild1@gmail.com>
parents:
13979
diff
changeset
|
117 if errno == 2 then |
|
a957cd3ea4eb
util.startup: Improve error message when failing to load config file
Matthew Wild <mwild1@gmail.com>
parents:
13979
diff
changeset
|
118 err_kind = "find"; |
|
a957cd3ea4eb
util.startup: Improve error message when failing to load config file
Matthew Wild <mwild1@gmail.com>
parents:
13979
diff
changeset
|
119 elseif errno == 13 then |
|
a957cd3ea4eb
util.startup: Improve error message when failing to load config file
Matthew Wild <mwild1@gmail.com>
parents:
13979
diff
changeset
|
120 err_kind = "access"; |
|
a957cd3ea4eb
util.startup: Improve error message when failing to load config file
Matthew Wild <mwild1@gmail.com>
parents:
13979
diff
changeset
|
121 else err_kind = "open"; |
|
a957cd3ea4eb
util.startup: Improve error message when failing to load config file
Matthew Wild <mwild1@gmail.com>
parents:
13979
diff
changeset
|
122 end |
|
a957cd3ea4eb
util.startup: Improve error message when failing to load config file
Matthew Wild <mwild1@gmail.com>
parents:
13979
diff
changeset
|
123 print(("Prosody was unable to %s the configuration file:"):format(err_kind)); |
|
a957cd3ea4eb
util.startup: Improve error message when failing to load config file
Matthew Wild <mwild1@gmail.com>
parents:
13979
diff
changeset
|
124 print(filename); |
|
a957cd3ea4eb
util.startup: Improve error message when failing to load config file
Matthew Wild <mwild1@gmail.com>
parents:
13979
diff
changeset
|
125 print(""); |
|
a957cd3ea4eb
util.startup: Improve error message when failing to load config file
Matthew Wild <mwild1@gmail.com>
parents:
13979
diff
changeset
|
126 if err_kind == "access" then |
|
a957cd3ea4eb
util.startup: Improve error message when failing to load config file
Matthew Wild <mwild1@gmail.com>
parents:
13979
diff
changeset
|
127 print(prosody.process_type.." does not have permission to open the file."); |
|
a957cd3ea4eb
util.startup: Improve error message when failing to load config file
Matthew Wild <mwild1@gmail.com>
parents:
13979
diff
changeset
|
128 print("Try running the command again as a user with permission to read the config file."); |
|
a957cd3ea4eb
util.startup: Improve error message when failing to load config file
Matthew Wild <mwild1@gmail.com>
parents:
13979
diff
changeset
|
129 elseif err_kind == "find" then |
|
a957cd3ea4eb
util.startup: Improve error message when failing to load config file
Matthew Wild <mwild1@gmail.com>
parents:
13979
diff
changeset
|
130 print("A sample config file is included in the Prosody download called prosody.cfg.lua.dist"); |
|
a957cd3ea4eb
util.startup: Improve error message when failing to load config file
Matthew Wild <mwild1@gmail.com>
parents:
13979
diff
changeset
|
131 print("Copy or rename it to "..filename.." and edit as necessary."); |
|
a957cd3ea4eb
util.startup: Improve error message when failing to load config file
Matthew Wild <mwild1@gmail.com>
parents:
13979
diff
changeset
|
132 else |
|
a957cd3ea4eb
util.startup: Improve error message when failing to load config file
Matthew Wild <mwild1@gmail.com>
parents:
13979
diff
changeset
|
133 print(err); |
|
a957cd3ea4eb
util.startup: Improve error message when failing to load config file
Matthew Wild <mwild1@gmail.com>
parents:
13979
diff
changeset
|
134 end |
|
a957cd3ea4eb
util.startup: Improve error message when failing to load config file
Matthew Wild <mwild1@gmail.com>
parents:
13979
diff
changeset
|
135 print(""); |
|
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 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
|
137 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
|
138 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
|
139 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
|
140 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
|
141 os.exit(1); |
|
9877
ded5303e1fde
util.startup: Log configuration warnings at startup
Matthew Wild <mwild1@gmail.com>
parents:
9873
diff
changeset
|
142 elseif err and #err > 0 then |
|
ded5303e1fde
util.startup: Log configuration warnings at startup
Matthew Wild <mwild1@gmail.com>
parents:
9873
diff
changeset
|
143 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
|
144 end |
|
9214
8b2b8f1a911f
util.startup: Set flag when config fully loaded
Matthew Wild <mwild1@gmail.com>
parents:
8958
diff
changeset
|
145 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
|
146 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
|
147 |
|
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
148 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
|
149 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
|
150 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
|
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 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
|
153 |
|
47e3b8b6f17a
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 -- 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
|
155 |
|
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
156 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
|
157 -- 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
|
158 -- luacheck: ignore 111/server 111/socket |
|
12975
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
159 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
|
160 socket = require "socket"; |
|
12975
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
161 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
|
162 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
|
163 |
|
47e3b8b6f17a
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 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
|
165 -- Initialize logging |
|
12975
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
166 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
|
167 loggingmanager.reload_logging(); |
|
9762
34988a408b74
util.startup: Always reload logging after config (fixes #1284)
Kim Alvefur <zash@zash.se>
parents:
9214
diff
changeset
|
168 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
|
169 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
|
170 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
|
171 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
|
172 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
|
173 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
|
174 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
|
175 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
|
176 |
|
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
|
177 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
|
178 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
|
179 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
|
180 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
|
181 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
|
182 end |
|
9877
ded5303e1fde
util.startup: Log configuration warnings at startup
Matthew Wild <mwild1@gmail.com>
parents:
9873
diff
changeset
|
183 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
|
184 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
|
185 |
|
47e3b8b6f17a
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 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
|
187 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
|
188 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
|
189 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
|
190 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
|
191 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
|
192 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
|
193 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
|
194 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
|
195 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
|
196 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
|
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 |
|
47e3b8b6f17a
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 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
|
200 -- 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
|
201 -- 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
|
202 -- 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
|
203 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
|
204 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
|
205 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
|
206 -- 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
|
207 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
|
208 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
|
209 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
|
210 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
|
211 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
|
212 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
|
213 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
|
214 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
|
215 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
|
216 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
|
217 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
|
218 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
|
219 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
|
220 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
|
221 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
|
222 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
|
223 _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
|
224 _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
|
225 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
|
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 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
|
228 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
|
229 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
|
230 |
|
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
231 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
|
232 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
|
233 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
|
234 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
|
235 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
|
236 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
|
237 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
|
238 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
|
239 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
|
240 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
|
241 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
|
242 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
|
243 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
|
244 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
|
245 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
|
246 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
|
247 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
|
248 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
|
249 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
|
250 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
|
251 function mt.__tostring(f) |
|
11150
0cfa36fa707e
util.startup: Include arguments in function string representation
Kim Alvefur <zash@zash.se>
parents:
11149
diff
changeset
|
252 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
|
253 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
|
254 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
|
255 info[i] = debug.getlocal(f, i); |
|
0cfa36fa707e
util.startup: Include arguments in function string representation
Kim Alvefur <zash@zash.se>
parents:
11149
diff
changeset
|
256 end |
|
0cfa36fa707e
util.startup: Include arguments in function string representation
Kim Alvefur <zash@zash.se>
parents:
11149
diff
changeset
|
257 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
|
258 info[n_params+1] = "..."; |
|
11150
0cfa36fa707e
util.startup: Include arguments in function string representation
Kim Alvefur <zash@zash.se>
parents:
11149
diff
changeset
|
259 end |
|
12982
fc0109c59807
util.startup: Tweak function string representation
Kim Alvefur <zash@zash.se>
parents:
12975
diff
changeset
|
260 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
|
261 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
|
262 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
|
263 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
|
264 |
|
47e3b8b6f17a
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 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
|
266 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
|
267 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
|
268 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
|
269 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
|
270 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
|
271 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
|
272 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
|
273 |
|
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
274 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
|
275 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
|
276 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
|
277 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
|
278 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
|
279 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
|
280 |
|
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
281 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
|
282 -- 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
|
283 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
|
284 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
|
285 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
|
286 |
|
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
287 -- 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
|
288 -- 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
|
289 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
|
290 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
|
291 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
|
292 |
|
13627
2db7b3b65363
core.configmanager: Add function for getting secrets from separate files
Kim Alvefur <zash@zash.se>
parents:
13564
diff
changeset
|
293 prosody.paths = { |
|
2db7b3b65363
core.configmanager: Add function for getting secrets from separate files
Kim Alvefur <zash@zash.se>
parents:
13564
diff
changeset
|
294 source = CFG_SOURCEDIR; |
|
2db7b3b65363
core.configmanager: Add function for getting secrets from separate files
Kim Alvefur <zash@zash.se>
parents:
13564
diff
changeset
|
295 config = CFG_CONFIGDIR or "."; |
|
2db7b3b65363
core.configmanager: Add function for getting secrets from separate files
Kim Alvefur <zash@zash.se>
parents:
13564
diff
changeset
|
296 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
|
297 data = "data"; |
|
2db7b3b65363
core.configmanager: Add function for getting secrets from separate files
Kim Alvefur <zash@zash.se>
parents:
13564
diff
changeset
|
298 }; |
|
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
|
299 |
|
0499f3da0ec4
util.startup: Factor out processing of plugin and data paths into a separate functions
Kim Alvefur <zash@zash.se>
parents:
8692
diff
changeset
|
300 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
|
301 |
|
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
|
302 _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
|
303 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
|
304 |
|
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
|
305 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
|
306 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
|
307 _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
|
308 |
|
22066b02887f
util.startup: Provide a common Lua 5.3+ math.type() for Lua 5.2
Kim Alvefur <zash@zash.se>
parents:
12779
diff
changeset
|
309 -- 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
|
310 if not math.type then |
|
12975
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
311 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
|
312 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
|
313 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
|
314 |
|
0499f3da0ec4
util.startup: Factor out processing of plugin and data paths into a separate functions
Kim Alvefur <zash@zash.se>
parents:
8692
diff
changeset
|
315 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
|
316 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
|
317 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
|
318 |
|
0499f3da0ec4
util.startup: Factor out processing of plugin and data paths into a separate functions
Kim Alvefur <zash@zash.se>
parents:
8692
diff
changeset
|
319 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
|
320 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
|
321 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
|
322 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
|
323 -- 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
|
324 -- 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
|
325 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
|
326 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
|
327 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
|
328 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
|
329 |
|
10404
29c10930a7b2
util.startup: Split plugin installer path setup into a separate function
Kim Alvefur <zash@zash.se>
parents:
10391
diff
changeset
|
330 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
|
331 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
|
332 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
|
333 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
|
334 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
|
335 -- 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
|
336 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
|
337 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
|
338 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
|
339 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
|
340 |
|
8664
d49acc9a8da2
util.startup: Fix chdir() to use correct path variable
Matthew Wild <mwild1@gmail.com>
parents:
8653
diff
changeset
|
341 function startup.chdir() |
|
d49acc9a8da2
util.startup: Fix chdir() to use correct path variable
Matthew Wild <mwild1@gmail.com>
parents:
8653
diff
changeset
|
342 if prosody.installed then |
|
10390
82705ec87253
util.startup: Ensure prosody.paths are absolute (see #1430)
Kim Alvefur <zash@zash.se>
parents:
10389
diff
changeset
|
343 local lfs = require "lfs"; |
|
82705ec87253
util.startup: Ensure prosody.paths are absolute (see #1430)
Kim Alvefur <zash@zash.se>
parents:
10389
diff
changeset
|
344 -- 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
|
345 local cwd = lfs.currentdir(); |
|
82705ec87253
util.startup: Ensure prosody.paths are absolute (see #1430)
Kim Alvefur <zash@zash.se>
parents:
10389
diff
changeset
|
346 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
|
347 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
|
348 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
|
349 -- 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
|
350 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
|
351 end |
|
d49acc9a8da2
util.startup: Fix chdir() to use correct path variable
Matthew Wild <mwild1@gmail.com>
parents:
8653
diff
changeset
|
352 end |
|
d49acc9a8da2
util.startup: Fix chdir() to use correct path variable
Matthew Wild <mwild1@gmail.com>
parents:
8653
diff
changeset
|
353 |
|
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
|
354 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
|
355 -- 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
|
356 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
|
357 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
|
358 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
|
359 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
|
360 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
|
361 if level == "parser" then |
|
10108
659ffa03f1e7
util.startup: Remove tostring call from logging
Kim Alvefur <zash@zash.se>
parents:
9878
diff
changeset
|
362 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
|
363 elseif level == "file" then |
|
10108
659ffa03f1e7
util.startup: Remove tostring call from logging
Kim Alvefur <zash@zash.se>
parents:
9878
diff
changeset
|
364 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
|
365 end |
|
13979
2041c347c178
util.startup: Inform process manager about failure to reload config
Kim Alvefur <zash@zash.se>
parents:
13743
diff
changeset
|
366 prosody.events.fire_event("config-reload-failed", { |
|
2041c347c178
util.startup: Inform process manager about failure to reload config
Kim Alvefur <zash@zash.se>
parents:
13743
diff
changeset
|
367 filename = prosody.config_file; |
|
2041c347c178
util.startup: Inform process manager about failure to reload config
Kim Alvefur <zash@zash.se>
parents:
13743
diff
changeset
|
368 level = level; error = err; |
|
2041c347c178
util.startup: Inform process manager about failure to reload config
Kim Alvefur <zash@zash.se>
parents:
13743
diff
changeset
|
369 }); |
|
8692
a55574754e5f
configmanager: Move firing of the 'config-reloaded' event into util.startup (fixes #1117)
Kim Alvefur <zash@zash.se>
parents:
8688
diff
changeset
|
370 else |
|
a55574754e5f
configmanager: Move firing of the 'config-reloaded' event into util.startup (fixes #1117)
Kim Alvefur <zash@zash.se>
parents:
8688
diff
changeset
|
371 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
|
372 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
|
373 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
|
374 }); |
|
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
|
375 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
|
376 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
|
377 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
|
378 |
|
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
379 -- 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
|
380 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
|
381 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
|
382 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
|
383 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
|
384 |
|
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
385 -- 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
|
386 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
|
387 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
|
388 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
|
389 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
|
390 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
|
391 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
|
392 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
|
393 }); |
|
12553
cc0ec0277813
util.startup: Fix async waiting for last shutdown steps
Kim Alvefur <zash@zash.se>
parents:
12423
diff
changeset
|
394 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
|
395 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 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
|
397 |
|
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
398 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
|
399 --- Load and initialise core modules |
|
12975
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
400 require "prosody.util.xmppstream" |
|
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
401 require "prosody.core.stanza_router" |
|
13120
be4058bb5a7e
util.startup: Record current version in a metric
Kim Alvefur <zash@zash.se>
parents:
13119
diff
changeset
|
402 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
|
403 require "prosody.core.hostmanager" |
|
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
404 require "prosody.core.portmanager" |
|
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
405 require "prosody.core.modulemanager" |
|
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
406 require "prosody.core.usermanager" |
|
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
407 require "prosody.core.rostermanager" |
|
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
408 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
|
409 |
|
12975
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
410 require "prosody.util.array" |
|
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
411 require "prosody.util.datetime" |
|
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
412 require "prosody.util.iterators" |
|
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
413 require "prosody.util.timer" |
|
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
414 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
|
415 |
|
12975
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
416 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
|
417 |
|
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
418 -- 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
|
419 -- 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
|
420 --[[ |
|
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
421 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
|
422 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
|
423 ]] |
|
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
424 |
|
12975
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
425 require "prosody.util.stanza" |
|
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
426 require "prosody.util.jid" |
|
13424
0efb53a0852e
util.startup: Expose core.features.available as prosody.features
Matthew Wild <mwild1@gmail.com>
parents:
13342
diff
changeset
|
427 |
|
0efb53a0852e
util.startup: Expose core.features.available as prosody.features
Matthew Wild <mwild1@gmail.com>
parents:
13342
diff
changeset
|
428 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
|
429 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
|
430 |
|
47e3b8b6f17a
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 function startup.init_http_client() |
|
12975
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
432 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
|
433 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
|
434 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
|
435 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
|
436 { 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
|
437 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
|
438 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
|
439 |
|
11948
dca75cc6fc5a
util.startup: Integrate util.promise with net.server main loop
Kim Alvefur <zash@zash.se>
parents:
11870
diff
changeset
|
440 function startup.init_promise() |
|
12975
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
441 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
|
442 |
|
12975
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
443 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
|
444 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
|
445 end |
|
dca75cc6fc5a
util.startup: Integrate util.promise with net.server main loop
Kim Alvefur <zash@zash.se>
parents:
11870
diff
changeset
|
446 |
|
11963
f5c6be4a3ecc
util.startup: Initialize util.async at startup
Matthew Wild <mwild1@gmail.com>
parents:
11948
diff
changeset
|
447 function startup.init_async() |
|
12975
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
448 local async = require "prosody.util.async"; |
|
11963
f5c6be4a3ecc
util.startup: Initialize util.async at startup
Matthew Wild <mwild1@gmail.com>
parents:
11948
diff
changeset
|
449 |
|
12975
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
450 local timer = require "prosody.util.timer"; |
|
11963
f5c6be4a3ecc
util.startup: Initialize util.async at startup
Matthew Wild <mwild1@gmail.com>
parents:
11948
diff
changeset
|
451 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
|
452 async.set_schedule_function(timer.add_task); |
|
f5c6be4a3ecc
util.startup: Initialize util.async at startup
Matthew Wild <mwild1@gmail.com>
parents:
11948
diff
changeset
|
453 end |
|
f5c6be4a3ecc
util.startup: Initialize util.async at startup
Matthew Wild <mwild1@gmail.com>
parents:
11948
diff
changeset
|
454 |
|
13659
5abdcad8c2e0
net.adns: Collect DNS lookup timing metrics
Kim Alvefur <zash@zash.se>
parents:
13639
diff
changeset
|
455 function startup.instrument() |
|
5abdcad8c2e0
net.adns: Collect DNS lookup timing metrics
Kim Alvefur <zash@zash.se>
parents:
13639
diff
changeset
|
456 local statsmanager = require "prosody.core.statsmanager"; |
|
5abdcad8c2e0
net.adns: Collect DNS lookup timing metrics
Kim Alvefur <zash@zash.se>
parents:
13639
diff
changeset
|
457 local timed = require"prosody.util.openmetrics".timed; |
|
5abdcad8c2e0
net.adns: Collect DNS lookup timing metrics
Kim Alvefur <zash@zash.se>
parents:
13639
diff
changeset
|
458 |
|
5abdcad8c2e0
net.adns: Collect DNS lookup timing metrics
Kim Alvefur <zash@zash.se>
parents:
13639
diff
changeset
|
459 local adns = require "prosody.net.adns"; |
|
5abdcad8c2e0
net.adns: Collect DNS lookup timing metrics
Kim Alvefur <zash@zash.se>
parents:
13639
diff
changeset
|
460 if adns.instrument then |
|
5abdcad8c2e0
net.adns: Collect DNS lookup timing metrics
Kim Alvefur <zash@zash.se>
parents:
13639
diff
changeset
|
461 local m = statsmanager.metric("histogram", "prosody_dns", "seconds", "DNS lookups", { "qclass"; "qtype" }, { |
|
5abdcad8c2e0
net.adns: Collect DNS lookup timing metrics
Kim Alvefur <zash@zash.se>
parents:
13639
diff
changeset
|
462 buckets = { 1 / 1024; 1 / 256; 1 / 64; 1 / 16; 1 / 4; 1; 4 }; |
|
5abdcad8c2e0
net.adns: Collect DNS lookup timing metrics
Kim Alvefur <zash@zash.se>
parents:
13639
diff
changeset
|
463 }); |
|
5abdcad8c2e0
net.adns: Collect DNS lookup timing metrics
Kim Alvefur <zash@zash.se>
parents:
13639
diff
changeset
|
464 adns.instrument(function(qclass, qtype) return timed(m:with_labels(qclass, qtype)); end); |
|
5abdcad8c2e0
net.adns: Collect DNS lookup timing metrics
Kim Alvefur <zash@zash.se>
parents:
13639
diff
changeset
|
465 end |
|
5abdcad8c2e0
net.adns: Collect DNS lookup timing metrics
Kim Alvefur <zash@zash.se>
parents:
13639
diff
changeset
|
466 end |
|
5abdcad8c2e0
net.adns: Collect DNS lookup timing metrics
Kim Alvefur <zash@zash.se>
parents:
13639
diff
changeset
|
467 |
|
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
|
468 function startup.init_data_store() |
|
12975
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
469 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
|
470 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
|
471 |
|
13342
d0a9b631a937
util.startup: Use prosody. module namespace
Kim Alvefur <zash@zash.se>
parents:
13311
diff
changeset
|
472 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
|
473 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
|
474 transitions = { |
|
ab36edc7c217
util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents:
13165
diff
changeset
|
475 { 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
|
476 { 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
|
477 { 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
|
478 { 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
|
479 }; |
|
ab36edc7c217
util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents:
13165
diff
changeset
|
480 handlers = { |
|
ab36edc7c217
util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents:
13165
diff
changeset
|
481 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
|
482 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
|
483 end; |
|
ab36edc7c217
util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents:
13165
diff
changeset
|
484 }; |
|
ab36edc7c217
util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents:
13165
diff
changeset
|
485 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
|
486 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
|
487 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
|
488 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
|
489 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
|
490 end; |
|
ab36edc7c217
util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents:
13165
diff
changeset
|
491 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
|
492 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
|
493 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
|
494 end; |
|
ab36edc7c217
util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents:
13165
diff
changeset
|
495 }; |
|
ab36edc7c217
util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents:
13165
diff
changeset
|
496 }):init(); |
|
ab36edc7c217
util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents:
13165
diff
changeset
|
497 |
|
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
|
498 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
|
499 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
|
500 |
|
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
|
501 -- 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
|
502 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
|
503 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
|
504 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
|
505 else |
|
ab36edc7c217
util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents:
13165
diff
changeset
|
506 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
|
507 resolve(); |
|
ab36edc7c217
util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents:
13165
diff
changeset
|
508 end); |
|
ab36edc7c217
util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents:
13165
diff
changeset
|
509 end |
|
13014
06453c564141
util.startup: Add prosody.started promise to easily execute code after startup
Matthew Wild <mwild1@gmail.com>
parents:
12982
diff
changeset
|
510 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
|
511 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
|
512 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
|
513 |
|
ab36edc7c217
util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents:
13165
diff
changeset
|
514 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
|
515 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
|
516 |
|
47e3b8b6f17a
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 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
|
518 -- 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
|
519 -- 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
|
520 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
|
521 __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
|
522 __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
|
523 }; |
|
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
524 |
|
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
525 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
|
526 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
|
527 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
|
528 |
|
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
529 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
|
530 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
|
531 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
|
532 |
|
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
533 -- 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
|
534 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
|
535 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
|
536 |
|
47e3b8b6f17a
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 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
|
538 -- 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
|
539 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
|
540 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
|
541 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
|
542 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
|
543 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
|
544 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
|
545 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
|
546 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
|
547 else |
|
12975
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
548 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
|
549 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
|
550 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
|
551 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
|
552 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
|
553 |
|
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
554 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
|
555 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
|
556 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
|
557 |
|
47e3b8b6f17a
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 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
|
559 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
|
560 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
|
561 |
|
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
562 -- 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
|
563 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
|
564 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
|
565 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
|
566 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
|
567 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
|
568 log_level = "debug"; |
|
73ecfe811526
util.startup: Teach prosodyctl to be --quiet as complement to --verbose
Kim Alvefur <zash@zash.se>
parents:
12160
diff
changeset
|
569 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
|
570 log_level = "error"; |
|
12244
858d40d675ee
util.startup: Teach prosodyctl to be completely --silent
Kim Alvefur <zash@zash.se>
parents:
12243
diff
changeset
|
571 elseif prosody.opts.silent then |
|
858d40d675ee
util.startup: Teach prosodyctl to be completely --silent
Kim Alvefur <zash@zash.se>
parents:
12243
diff
changeset
|
572 config.set("*", "log", {}); -- ssssshush! |
|
858d40d675ee
util.startup: Teach prosodyctl to be completely --silent
Kim Alvefur <zash@zash.se>
parents:
12243
diff
changeset
|
573 return |
|
12243
73ecfe811526
util.startup: Teach prosodyctl to be --quiet as complement to --verbose
Kim Alvefur <zash@zash.se>
parents:
12160
diff
changeset
|
574 end |
|
73ecfe811526
util.startup: Teach prosodyctl to be --quiet as complement to --verbose
Kim Alvefur <zash@zash.se>
parents:
12160
diff
changeset
|
575 end |
|
11828
024ac556e907
prosodyctl: Add support for -v/--verbose to enable debug logging
Kim Alvefur <zash@zash.se>
parents:
11560
diff
changeset
|
576 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
|
577 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
|
578 |
|
13461
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
579 local function check_posix() |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
580 if prosody.platform ~= "posix" then return end |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
581 |
|
13564
a350f6332bd8
util.startup: Bump expected util.pposix version
Kim Alvefur <zash@zash.se>
parents:
13477
diff
changeset
|
582 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
|
583 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
|
584 |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
585 if pposix._VERSION ~= want_pposix_version then |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
586 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
|
587 tostring(pposix._VERSION), want_pposix_version)); |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
588 os.exit(1); |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
589 end |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
590 if have_pposix and pposix then |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
591 return pposix; |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
592 end |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
593 end |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
594 |
|
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
|
595 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
|
596 -- 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
|
597 -- 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
|
598 -- 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
|
599 -- 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
|
600 |
|
13461
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
601 local pposix = check_posix() |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
602 if pposix then |
|
8672
86b12ae8d427
util.startup: Expose user switching information via prosody global object
Matthew Wild <mwild1@gmail.com>
parents:
8667
diff
changeset
|
603 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
|
604 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
|
605 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
|
606 -- 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
|
607 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
|
608 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
|
609 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
|
610 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
|
611 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
|
612 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
|
613 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
|
614 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
|
615 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
|
616 -- Yay! |
|
8672
86b12ae8d427
util.startup: Expose user switching information via prosody global object
Matthew Wild <mwild1@gmail.com>
parents:
8667
diff
changeset
|
617 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
|
618 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
|
619 end |
|
8672
86b12ae8d427
util.startup: Expose user switching information via prosody global object
Matthew Wild <mwild1@gmail.com>
parents:
8667
diff
changeset
|
620 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
|
621 -- 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
|
622 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
|
623 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
|
624 -- 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
|
625 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
|
626 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
|
627 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
|
628 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
|
629 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
|
630 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
|
631 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
|
632 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
|
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 |
|
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
635 end |
|
8637
c8368c7c81a1
util.startup: Trim trailing whitespace [luacheck]
Kim Alvefur <zash@zash.se>
parents:
8636
diff
changeset
|
636 |
|
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
|
637 -- 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
|
638 pposix.umask(config.get("*", "umask") or "027"); |
|
8667
a05d36075c6a
util.startup: Fix variable usage [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
8666
diff
changeset
|
639 pposix.setenv("HOME", prosody.paths.data); |
|
a05d36075c6a
util.startup: Fix variable usage [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
8666
diff
changeset
|
640 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
|
641 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
|
642 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
|
643 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
|
644 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
|
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 |
|
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
649 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
|
650 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
|
651 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
|
652 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
|
653 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
|
654 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
|
655 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
|
656 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
|
657 end |
|
8637
c8368c7c81a1
util.startup: Trim trailing whitespace [luacheck]
Kim Alvefur <zash@zash.se>
parents:
8636
diff
changeset
|
658 |
|
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
|
659 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
|
660 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
|
661 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
|
662 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
|
663 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
|
664 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
|
665 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
|
666 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
|
667 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
|
668 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
|
669 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
|
670 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
|
671 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
|
672 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
|
673 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
|
674 end |
|
8637
c8368c7c81a1
util.startup: Trim trailing whitespace [luacheck]
Kim Alvefur <zash@zash.se>
parents:
8636
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 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
|
677 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
|
678 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
|
679 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
|
680 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
|
681 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
|
682 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
|
683 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
|
684 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
|
685 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
|
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 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
|
688 |
|
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
|
689 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
|
690 -- 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
|
691 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
|
692 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
|
693 |
|
5691b9773c5b
util.startup: Configure the GC on startup, using the config or built-in defaults
Matthew Wild <mwild1@gmail.com>
parents:
10947
diff
changeset
|
694 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
|
695 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
|
696 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
|
697 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
|
698 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
|
699 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
|
700 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
|
701 |
|
11050
51be24b16e8a
util.error: Allow optional tracebacks to be injected on errors
Matthew Wild <mwild1@gmail.com>
parents:
10948
diff
changeset
|
702 function startup.init_errors() |
|
12975
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
703 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
|
704 end |
|
51be24b16e8a
util.error: Allow optional tracebacks to be injected on errors
Matthew Wild <mwild1@gmail.com>
parents:
10948
diff
changeset
|
705 |
|
8673
6aeed79d9283
util.startup: Expose make_host() function
Matthew Wild <mwild1@gmail.com>
parents:
8672
diff
changeset
|
706 function startup.make_host(hostname) |
|
6aeed79d9283
util.startup: Expose make_host() function
Matthew Wild <mwild1@gmail.com>
parents:
8672
diff
changeset
|
707 return { |
|
6aeed79d9283
util.startup: Expose make_host() function
Matthew Wild <mwild1@gmail.com>
parents:
8672
diff
changeset
|
708 type = "local", |
|
6aeed79d9283
util.startup: Expose make_host() function
Matthew Wild <mwild1@gmail.com>
parents:
8672
diff
changeset
|
709 events = prosody.events, |
|
6aeed79d9283
util.startup: Expose make_host() function
Matthew Wild <mwild1@gmail.com>
parents:
8672
diff
changeset
|
710 modules = {}, |
|
6aeed79d9283
util.startup: Expose make_host() function
Matthew Wild <mwild1@gmail.com>
parents:
8672
diff
changeset
|
711 sessions = {}, |
|
12975
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
712 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
|
713 }; |
|
6aeed79d9283
util.startup: Expose make_host() function
Matthew Wild <mwild1@gmail.com>
parents:
8672
diff
changeset
|
714 end |
|
6aeed79d9283
util.startup: Expose make_host() function
Matthew Wild <mwild1@gmail.com>
parents:
8672
diff
changeset
|
715 |
|
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
|
716 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
|
717 -- 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
|
718 -- 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
|
719 -- 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
|
720 -- 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
|
721 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
|
722 |
|
8639
070a77c15f63
util.startup: Remove unused loop variable [luacheck]
Kim Alvefur <zash@zash.se>
parents:
8638
diff
changeset
|
723 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
|
724 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
|
725 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
|
726 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
|
727 |
|
13461
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
728 function startup.posix_umask() |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
729 if prosody.platform ~= "posix" then return end |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
730 local pposix = require "prosody.util.pposix"; |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
731 local umask = config.get("*", "umask") or "027"; |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
732 pposix.umask(umask); |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
733 end |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
734 |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
735 function startup.check_user() |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
736 local pposix = check_posix(); |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
737 if not pposix then return end |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
738 -- Don't even think about it! |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
739 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
|
740 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
|
741 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
|
742 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
|
743 end |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
744 end |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
745 |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
746 local function remove_pidfile() |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
747 local pidfile = prosody.pidfile; |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
748 if prosody.pidfile_handle then |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
749 prosody.pidfile_handle:close(); |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
750 os.remove(pidfile); |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
751 prosody.pidfile, prosody.pidfile_handle = nil, nil; |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
752 end |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
753 end |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
754 |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
755 function startup.write_pidfile() |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
756 local pposix = check_posix(); |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
757 if not pposix then return end |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
758 local lfs = require "lfs"; |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
759 local stat = lfs.attributes; |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
760 local pidfile = config.get("*", "pidfile") or nil; |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
761 if not pidfile then return end |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
762 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
|
763 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
|
764 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
|
765 if not pidfile_handle then |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
766 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
|
767 os.exit(1); |
|
13461
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
768 else |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
769 prosody.pidfile = pidfile; |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
770 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
|
771 local other_pid = pidfile_handle:read("*a"); |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
772 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
|
773 prosody.pidfile_handle = nil; |
|
13467
c2a476f4712a
util.startup: Fix exiting on pidfile trouble
Kim Alvefur <zash@zash.se>
parents:
13464
diff
changeset
|
774 os.exit(1); |
|
13461
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
775 else |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
776 pidfile_handle:close(); |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
777 pidfile_handle, err = io.open(pidfile, "w+"); |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
778 if not pidfile_handle then |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
779 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
|
780 os.exit(1); |
|
13461
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
781 else |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
782 if lfs.lock(pidfile_handle, "w") then |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
783 pidfile_handle:write(tostring(pposix.getpid())); |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
784 pidfile_handle:flush(); |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
785 prosody.pidfile_handle = pidfile_handle; |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
786 end |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
787 end |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
788 end |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
789 end |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
790 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
|
791 end |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
792 |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
793 local function remove_log_sinks() |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
794 local lm = require "prosody.core.loggingmanager"; |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
795 lm.register_sink_type("console", nil); |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
796 lm.register_sink_type("stdout", nil); |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
797 lm.reload_logging(); |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
798 end |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
799 |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
800 function startup.posix_daemonize() |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
801 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
|
802 local pposix = check_posix(); |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
803 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
|
804 remove_log_sinks(); |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
805 local ok, ret = pposix.daemonize(); |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
806 if not ok then |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
807 log("error", "Failed to daemonize: %s", ret); |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
808 elseif ret and ret > 0 then |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
809 os.exit(0); |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
810 else |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
811 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
|
812 end |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
813 end |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
814 |
|
13452
69faf3552d52
mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents:
13424
diff
changeset
|
815 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
|
816 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
|
817 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
|
818 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
|
819 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
|
820 return |
|
69faf3552d52
mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents:
13424
diff
changeset
|
821 end |
|
69faf3552d52
mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents:
13424
diff
changeset
|
822 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
|
823 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
|
824 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
|
825 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
|
826 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
|
827 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
|
828 end); |
|
69faf3552d52
mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents:
13424
diff
changeset
|
829 end); |
|
69faf3552d52
mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents:
13424
diff
changeset
|
830 |
|
69faf3552d52
mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents:
13424
diff
changeset
|
831 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
|
832 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
|
833 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
|
834 -- 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
|
835 end); |
|
69faf3552d52
mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents:
13424
diff
changeset
|
836 |
|
69faf3552d52
mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents:
13424
diff
changeset
|
837 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
|
838 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
|
839 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
|
840 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
|
841 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
|
842 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
|
843 end); |
|
69faf3552d52
mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents:
13424
diff
changeset
|
844 end); |
|
69faf3552d52
mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents:
13424
diff
changeset
|
845 |
|
69faf3552d52
mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents:
13424
diff
changeset
|
846 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
|
847 log("info", "Received SIGUSR1"); |
|
13454
b0c27628f588
util.startup: Fix firing of USR1/2 events
Kim Alvefur <zash@zash.se>
parents:
13452
diff
changeset
|
848 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
|
849 end); |
|
69faf3552d52
mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents:
13424
diff
changeset
|
850 |
|
69faf3552d52
mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents:
13424
diff
changeset
|
851 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
|
852 log("info", "Received SIGUSR2"); |
|
13454
b0c27628f588
util.startup: Fix firing of USR1/2 events
Kim Alvefur <zash@zash.se>
parents:
13452
diff
changeset
|
853 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
|
854 end); |
|
69faf3552d52
mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents:
13424
diff
changeset
|
855 end |
|
69faf3552d52
mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents:
13424
diff
changeset
|
856 |
|
13639
94f77a1994dc
util.startup: Drop mention of systemd from notification socket handling
Kim Alvefur <zash@zash.se>
parents:
13630
diff
changeset
|
857 function startup.notification_socket() |
|
13471
afad3b2725bf
util.startup: Support systemd Type=notify service type
Kim Alvefur <zash@zash.se>
parents:
13467
diff
changeset
|
858 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
|
859 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
|
860 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
|
861 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
|
862 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
|
863 return os.exit(1); |
|
afad3b2725bf
util.startup: Support systemd Type=notify service type
Kim Alvefur <zash@zash.se>
parents:
13467
diff
changeset
|
864 end |
|
afad3b2725bf
util.startup: Support systemd Type=notify service type
Kim Alvefur <zash@zash.se>
parents:
13467
diff
changeset
|
865 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
|
866 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
|
867 local notify_socket = unix.dgram(); |
|
afad3b2725bf
util.startup: Support systemd Type=notify service type
Kim Alvefur <zash@zash.se>
parents:
13467
diff
changeset
|
868 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
|
869 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
|
870 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
|
871 return os.exit(1); |
|
afad3b2725bf
util.startup: Support systemd Type=notify service type
Kim Alvefur <zash@zash.se>
parents:
13467
diff
changeset
|
872 end |
|
afad3b2725bf
util.startup: Support systemd Type=notify service type
Kim Alvefur <zash@zash.se>
parents:
13467
diff
changeset
|
873 local time = require "prosody.util.time"; |
|
afad3b2725bf
util.startup: Support systemd Type=notify service type
Kim Alvefur <zash@zash.se>
parents:
13467
diff
changeset
|
874 |
|
afad3b2725bf
util.startup: Support systemd Type=notify service type
Kim Alvefur <zash@zash.se>
parents:
13467
diff
changeset
|
875 prosody.notify_socket = notify_socket; |
|
afad3b2725bf
util.startup: Support systemd Type=notify service type
Kim Alvefur <zash@zash.se>
parents:
13467
diff
changeset
|
876 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
|
877 notify_socket:send("READY=1"); |
|
afad3b2725bf
util.startup: Support systemd Type=notify service type
Kim Alvefur <zash@zash.se>
parents:
13467
diff
changeset
|
878 end); |
|
13477
e8ac3ce3238e
util.startup: Fix notifying config-reload to systemd
Kim Alvefur <zash@zash.se>
parents:
13471
diff
changeset
|
879 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
|
880 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
|
881 end); |
|
13979
2041c347c178
util.startup: Inform process manager about failure to reload config
Kim Alvefur <zash@zash.se>
parents:
13743
diff
changeset
|
882 prosody.events.add_handler("config-reload-failed", function(event) |
|
2041c347c178
util.startup: Inform process manager about failure to reload config
Kim Alvefur <zash@zash.se>
parents:
13743
diff
changeset
|
883 if event and event.level == "parser" then |
|
2041c347c178
util.startup: Inform process manager about failure to reload config
Kim Alvefur <zash@zash.se>
parents:
13743
diff
changeset
|
884 notify_socket:send(string.format("READY=1\nSTATUS=Error parsing configuration file: %s", tostring(event.error))); |
|
2041c347c178
util.startup: Inform process manager about failure to reload config
Kim Alvefur <zash@zash.se>
parents:
13743
diff
changeset
|
885 elseif event and event.level == "file" then |
|
2041c347c178
util.startup: Inform process manager about failure to reload config
Kim Alvefur <zash@zash.se>
parents:
13743
diff
changeset
|
886 notify_socket:send(string.format("READY=1\nSTATUS=Could not read configuration file: %s", tostring(event.error))); |
|
2041c347c178
util.startup: Inform process manager about failure to reload config
Kim Alvefur <zash@zash.se>
parents:
13743
diff
changeset
|
887 else |
|
2041c347c178
util.startup: Inform process manager about failure to reload config
Kim Alvefur <zash@zash.se>
parents:
13743
diff
changeset
|
888 notify_socket:send("READY=1\nSTATUS=Could not read configuration file"); |
|
2041c347c178
util.startup: Inform process manager about failure to reload config
Kim Alvefur <zash@zash.se>
parents:
13743
diff
changeset
|
889 end |
|
2041c347c178
util.startup: Inform process manager about failure to reload config
Kim Alvefur <zash@zash.se>
parents:
13743
diff
changeset
|
890 end); |
|
13471
afad3b2725bf
util.startup: Support systemd Type=notify service type
Kim Alvefur <zash@zash.se>
parents:
13467
diff
changeset
|
891 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
|
892 notify_socket:send("READY=1"); |
|
afad3b2725bf
util.startup: Support systemd Type=notify service type
Kim Alvefur <zash@zash.se>
parents:
13467
diff
changeset
|
893 end); |
|
afad3b2725bf
util.startup: Support systemd Type=notify service type
Kim Alvefur <zash@zash.se>
parents:
13467
diff
changeset
|
894 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
|
895 notify_socket:send("STOPPING=1"); |
|
afad3b2725bf
util.startup: Support systemd Type=notify service type
Kim Alvefur <zash@zash.se>
parents:
13467
diff
changeset
|
896 end); |
|
afad3b2725bf
util.startup: Support systemd Type=notify service type
Kim Alvefur <zash@zash.se>
parents:
13467
diff
changeset
|
897 end |
|
afad3b2725bf
util.startup: Support systemd Type=notify service type
Kim Alvefur <zash@zash.se>
parents:
13467
diff
changeset
|
898 |
|
12294
81f147ddc4ab
prosody: Move last cleanup and shutdown code into util.startup
Kim Alvefur <zash@zash.se>
parents:
12274
diff
changeset
|
899 function startup.cleanup() |
|
81f147ddc4ab
prosody: Move last cleanup and shutdown code into util.startup
Kim Alvefur <zash@zash.se>
parents:
12274
diff
changeset
|
900 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
|
901 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
|
902 end |
|
81f147ddc4ab
prosody: Move last cleanup and shutdown code into util.startup
Kim Alvefur <zash@zash.se>
parents:
12274
diff
changeset
|
903 |
|
81f147ddc4ab
prosody: Move last cleanup and shutdown code into util.startup
Kim Alvefur <zash@zash.se>
parents:
12274
diff
changeset
|
904 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
|
905 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
|
906 |
|
12294
81f147ddc4ab
prosody: Move last cleanup and shutdown code into util.startup
Kim Alvefur <zash@zash.se>
parents:
12274
diff
changeset
|
907 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
|
908 startup.cleanup(); |
|
81f147ddc4ab
prosody: Move last cleanup and shutdown code into util.startup
Kim Alvefur <zash@zash.se>
parents:
12274
diff
changeset
|
909 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
|
910 |
|
ab36edc7c217
util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents:
13165
diff
changeset
|
911 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
|
912 |
|
12294
81f147ddc4ab
prosody: Move last cleanup and shutdown code into util.startup
Kim Alvefur <zash@zash.se>
parents:
12274
diff
changeset
|
913 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
|
914 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
|
915 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
|
916 server.setquitting(true); |
|
cc0ec0277813
util.startup: Fix async waiting for last shutdown steps
Kim Alvefur <zash@zash.se>
parents:
12423
diff
changeset
|
917 end |
|
cc0ec0277813
util.startup: Fix async waiting for last shutdown steps
Kim Alvefur <zash@zash.se>
parents:
12423
diff
changeset
|
918 |
|
cc0ec0277813
util.startup: Fix async waiting for last shutdown steps
Kim Alvefur <zash@zash.se>
parents:
12423
diff
changeset
|
919 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
|
920 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
|
921 end |
|
81f147ddc4ab
prosody: Move last cleanup and shutdown code into util.startup
Kim Alvefur <zash@zash.se>
parents:
12274
diff
changeset
|
922 |
|
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
|
923 -- 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
|
924 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
|
925 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
|
926 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
|
927 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
|
928 startup.read_config(); |
|
8755
857d8f38a010
util.startup: Force console logging before initializing logging (see 2fdeb979cc7c)
Kim Alvefur <zash@zash.se>
parents:
8748
diff
changeset
|
929 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
|
930 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
|
931 startup.init_gc(); |
|
11050
51be24b16e8a
util.error: Allow optional tracebacks to be injected on errors
Matthew Wild <mwild1@gmail.com>
parents:
10948
diff
changeset
|
932 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
|
933 startup.setup_plugindir(); |
|
11138
2a19d61f4ae4
util.startup: Re-enable installer path setup
Kim Alvefur <zash@zash.se>
parents:
11137
diff
changeset
|
934 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
|
935 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
|
936 startup.chdir(); |
|
8688
019b4b3dd5ad
util.startup: Read version for prosodyctl (restores version in 'about' command)
Kim Alvefur <zash@zash.se>
parents:
8682
diff
changeset
|
937 startup.read_version(); |
|
8665
4b260a3f8b94
util.startup: Restore user switching
Matthew Wild <mwild1@gmail.com>
parents:
8664
diff
changeset
|
938 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
|
939 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
|
940 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
|
941 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
|
942 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
|
943 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
|
944 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
|
945 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
|
946 |
|
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
947 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
|
948 -- 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
|
949 -- 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
|
950 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
|
951 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
|
952 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
|
953 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
|
954 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
|
955 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
|
956 startup.init_gc(); |
|
11050
51be24b16e8a
util.error: Allow optional tracebacks to be injected on errors
Matthew Wild <mwild1@gmail.com>
parents:
10948
diff
changeset
|
957 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
|
958 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
|
959 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
|
960 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
|
961 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
|
962 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
|
963 startup.setup_plugindir(); |
|
11138
2a19d61f4ae4
util.startup: Re-enable installer path setup
Kim Alvefur <zash@zash.se>
parents:
11137
diff
changeset
|
964 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
|
965 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
|
966 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
|
967 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
|
968 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
|
969 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
|
970 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
|
971 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
|
972 startup.init_promise(); |
|
11963
f5c6be4a3ecc
util.startup: Initialize util.async at startup
Matthew Wild <mwild1@gmail.com>
parents:
11948
diff
changeset
|
973 startup.init_async(); |
|
13659
5abdcad8c2e0
net.adns: Collect DNS lookup timing metrics
Kim Alvefur <zash@zash.se>
parents:
13639
diff
changeset
|
974 startup.instrument(); |
|
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
|
975 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
|
976 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
|
977 startup.init_global_protection(); |
|
13461
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
978 startup.posix_daemonize(); |
|
c673ff1075bd
mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents:
13459
diff
changeset
|
979 startup.write_pidfile(); |
|
13459
790f60c0843b
util.startup: Back out 598df17b8ebb
Kim Alvefur <zash@zash.se>
parents:
13458
diff
changeset
|
980 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
|
981 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
|
982 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
|
983 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
|
984 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
|
985 |
|
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
986 return startup; |
