Software /
code /
prosody
Annotate
util/startup.lua @ 13125:90394be5e6a5
mod_http: Handle bracketed IP address format from RFC 7239
There are hints that this format might be used in X-Forwarded-For as
well, so best handle it everywhere. Strips both brackets and optional
port number.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 03 Jun 2023 17:10:12 +0200 |
parent | 13120:be4058bb5a7e |
child | 13165:9c13c11b199d |
rev | line source |
---|---|
8638
f8f45bbbd8ba
util.startup: Ignore various globals being read and written as part of startup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
8637
diff
changeset
|
1 -- Ignore the CFG_* variables |
f8f45bbbd8ba
util.startup: Ignore various globals being read and written as part of startup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
8637
diff
changeset
|
2 -- luacheck: ignore 113/CFG_CONFIGDIR 113/CFG_SOURCEDIR 113/CFG_DATADIR 113/CFG_PLUGINDIR |
8635
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
3 local startup = {}; |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
4 |
12975
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
5 local prosody = { events = require "prosody.util.events".new() }; |
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
6 local logger = require "prosody.util.logger"; |
8720
dba17a70fd22
util.startup: Initialize prosody.log / _G.log here instead of in loggingmanager to reduce dependencies
Kim Alvefur <zash@zash.se>
parents:
8719
diff
changeset
|
7 local log = logger.init("startup"); |
12975
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
8 local parse_args = require "prosody.util.argparse".parse; |
8635
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
9 |
12975
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
10 local config = require "prosody.core.configmanager"; |
9877
ded5303e1fde
util.startup: Log configuration warnings at startup
Matthew Wild <mwild1@gmail.com>
parents:
9873
diff
changeset
|
11 local config_warnings; |
8635
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
12 |
12975
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
13 local dependencies = require "prosody.util.dependencies"; |
8635
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
14 |
8666
57780ba1938f
util.startup: Move original_logging_config to a local variable
Matthew Wild <mwild1@gmail.com>
parents:
8665
diff
changeset
|
15 local original_logging_config; |
57780ba1938f
util.startup: Move original_logging_config to a local variable
Matthew Wild <mwild1@gmail.com>
parents:
8665
diff
changeset
|
16 |
11539
3413fea9e6db
util.startup: Set more aggressive defaults for GC
Matthew Wild <mwild1@gmail.com>
parents:
11073
diff
changeset
|
17 local default_gc_params = { |
3413fea9e6db
util.startup: Set more aggressive defaults for GC
Matthew Wild <mwild1@gmail.com>
parents:
11073
diff
changeset
|
18 mode = "incremental"; |
3413fea9e6db
util.startup: Set more aggressive defaults for GC
Matthew Wild <mwild1@gmail.com>
parents:
11073
diff
changeset
|
19 -- Incremental mode defaults |
3413fea9e6db
util.startup: Set more aggressive defaults for GC
Matthew Wild <mwild1@gmail.com>
parents:
11073
diff
changeset
|
20 threshold = 105, speed = 500; |
3413fea9e6db
util.startup: Set more aggressive defaults for GC
Matthew Wild <mwild1@gmail.com>
parents:
11073
diff
changeset
|
21 -- Generational mode defaults |
3413fea9e6db
util.startup: Set more aggressive defaults for GC
Matthew Wild <mwild1@gmail.com>
parents:
11073
diff
changeset
|
22 minor_threshold = 20, major_threshold = 50; |
3413fea9e6db
util.startup: Set more aggressive defaults for GC
Matthew Wild <mwild1@gmail.com>
parents:
11073
diff
changeset
|
23 }; |
11073
5691b9773c5b
util.startup: Configure the GC on startup, using the config or built-in defaults
Matthew Wild <mwild1@gmail.com>
parents:
10947
diff
changeset
|
24 |
11829
4fad0ca42f66
util.startup: Allow separate command line argument settings for prosody and prosodyctl
Kim Alvefur <zash@zash.se>
parents:
11828
diff
changeset
|
25 local arg_settigs = { |
4fad0ca42f66
util.startup: Allow separate command line argument settings for prosody and prosodyctl
Kim Alvefur <zash@zash.se>
parents:
11828
diff
changeset
|
26 prosody = { |
11869
d52a73425eba
util.startup: Show brief usage on `prosody -h|-?|--help`
Kim Alvefur <zash@zash.se>
parents:
11866
diff
changeset
|
27 short_params = { D = "daemonize"; F = "no-daemonize", h = "help", ["?"] = "help" }; |
11829
4fad0ca42f66
util.startup: Allow separate command line argument settings for prosody and prosodyctl
Kim Alvefur <zash@zash.se>
parents:
11828
diff
changeset
|
28 value_params = { config = true }; |
4fad0ca42f66
util.startup: Allow separate command line argument settings for prosody and prosodyctl
Kim Alvefur <zash@zash.se>
parents:
11828
diff
changeset
|
29 }; |
4fad0ca42f66
util.startup: Allow separate command line argument settings for prosody and prosodyctl
Kim Alvefur <zash@zash.se>
parents:
11828
diff
changeset
|
30 prosodyctl = { |
11870
1d1ed2be3491
util.startup: Understand -h, -? as --help in prosodyctl but ignore
Kim Alvefur <zash@zash.se>
parents:
11869
diff
changeset
|
31 short_params = { v = "verbose", h = "help", ["?"] = "help" }; |
11829
4fad0ca42f66
util.startup: Allow separate command line argument settings for prosody and prosodyctl
Kim Alvefur <zash@zash.se>
parents:
11828
diff
changeset
|
32 value_params = { config = true }; |
4fad0ca42f66
util.startup: Allow separate command line argument settings for prosody and prosodyctl
Kim Alvefur <zash@zash.se>
parents:
11828
diff
changeset
|
33 }; |
4fad0ca42f66
util.startup: Allow separate command line argument settings for prosody and prosodyctl
Kim Alvefur <zash@zash.se>
parents:
11828
diff
changeset
|
34 } |
10596
cb107ea49b35
util.startup: Add startup step for parsing command-line options
Matthew Wild <mwild1@gmail.com>
parents:
10390
diff
changeset
|
35 |
12160
ac654fb19203
util.startup: Allow supplying an argument parsing settings
Kim Alvefur <zash@zash.se>
parents:
11963
diff
changeset
|
36 function startup.parse_args(profile) |
ac654fb19203
util.startup: Allow supplying an argument parsing settings
Kim Alvefur <zash@zash.se>
parents:
11963
diff
changeset
|
37 local opts, err, where = parse_args(arg, arg_settigs[profile or prosody.process_type] or profile); |
10936
d770435f0f84
util.argparse: Move exiting and error to util.startup
Kim Alvefur <zash@zash.se>
parents:
10934
diff
changeset
|
38 if not opts then |
d770435f0f84
util.argparse: Move exiting and error to util.startup
Kim Alvefur <zash@zash.se>
parents:
10934
diff
changeset
|
39 if err == "param-not-found" then |
d770435f0f84
util.argparse: Move exiting and error to util.startup
Kim Alvefur <zash@zash.se>
parents:
10934
diff
changeset
|
40 print("Unknown command-line option: "..tostring(where)); |
11847
2b3ce80ffece
util.startup: Only ask if 'prosodyctl' was meant instead of 'prosody' (fix #1692)
Kim Alvefur <zash@zash.se>
parents:
11846
diff
changeset
|
41 if prosody.process_type == "prosody" then |
2b3ce80ffece
util.startup: Only ask if 'prosodyctl' was meant instead of 'prosody' (fix #1692)
Kim Alvefur <zash@zash.se>
parents:
11846
diff
changeset
|
42 print("Perhaps you meant to use prosodyctl instead?"); |
2b3ce80ffece
util.startup: Only ask if 'prosodyctl' was meant instead of 'prosody' (fix #1692)
Kim Alvefur <zash@zash.se>
parents:
11846
diff
changeset
|
43 end |
10936
d770435f0f84
util.argparse: Move exiting and error to util.startup
Kim Alvefur <zash@zash.se>
parents:
10934
diff
changeset
|
44 elseif err == "missing-value" then |
d770435f0f84
util.argparse: Move exiting and error to util.startup
Kim Alvefur <zash@zash.se>
parents:
10934
diff
changeset
|
45 print("Expected a value to follow command-line option: "..where); |
10600
08f2fe5ac30f
util.startup: Fix logic to make --config work again
Matthew Wild <mwild1@gmail.com>
parents:
10597
diff
changeset
|
46 end |
10936
d770435f0f84
util.argparse: Move exiting and error to util.startup
Kim Alvefur <zash@zash.se>
parents:
10934
diff
changeset
|
47 os.exit(1); |
10596
cb107ea49b35
util.startup: Add startup step for parsing command-line options
Matthew Wild <mwild1@gmail.com>
parents:
10390
diff
changeset
|
48 end |
12423
3ae9299d61d7
util.startup: Show error for unrecognized arguments passed to 'prosody' (fixes #1722)
Matthew Wild <mwild1@gmail.com>
parents:
12294
diff
changeset
|
49 if prosody.process_type == "prosody" then |
3ae9299d61d7
util.startup: Show error for unrecognized arguments passed to 'prosody' (fixes #1722)
Matthew Wild <mwild1@gmail.com>
parents:
12294
diff
changeset
|
50 if #arg > 0 then |
3ae9299d61d7
util.startup: Show error for unrecognized arguments passed to 'prosody' (fixes #1722)
Matthew Wild <mwild1@gmail.com>
parents:
12294
diff
changeset
|
51 print("Unrecognized option: "..arg[1]); |
3ae9299d61d7
util.startup: Show error for unrecognized arguments passed to 'prosody' (fixes #1722)
Matthew Wild <mwild1@gmail.com>
parents:
12294
diff
changeset
|
52 print("(Did you mean 'prosodyctl "..arg[1].."'?)"); |
3ae9299d61d7
util.startup: Show error for unrecognized arguments passed to 'prosody' (fixes #1722)
Matthew Wild <mwild1@gmail.com>
parents:
12294
diff
changeset
|
53 print(""); |
3ae9299d61d7
util.startup: Show error for unrecognized arguments passed to 'prosody' (fixes #1722)
Matthew Wild <mwild1@gmail.com>
parents:
12294
diff
changeset
|
54 end |
3ae9299d61d7
util.startup: Show error for unrecognized arguments passed to 'prosody' (fixes #1722)
Matthew Wild <mwild1@gmail.com>
parents:
12294
diff
changeset
|
55 if opts.help or #arg > 0 then |
3ae9299d61d7
util.startup: Show error for unrecognized arguments passed to 'prosody' (fixes #1722)
Matthew Wild <mwild1@gmail.com>
parents:
12294
diff
changeset
|
56 print("prosody [ -D | -F ] [ --config /path/to/prosody.cfg.lua ]"); |
3ae9299d61d7
util.startup: Show error for unrecognized arguments passed to 'prosody' (fixes #1722)
Matthew Wild <mwild1@gmail.com>
parents:
12294
diff
changeset
|
57 print(" -D, --daemonize Run in the background") |
3ae9299d61d7
util.startup: Show error for unrecognized arguments passed to 'prosody' (fixes #1722)
Matthew Wild <mwild1@gmail.com>
parents:
12294
diff
changeset
|
58 print(" -F, --no-daemonize Run in the foreground") |
3ae9299d61d7
util.startup: Show error for unrecognized arguments passed to 'prosody' (fixes #1722)
Matthew Wild <mwild1@gmail.com>
parents:
12294
diff
changeset
|
59 print(" --config FILE Specify config file") |
3ae9299d61d7
util.startup: Show error for unrecognized arguments passed to 'prosody' (fixes #1722)
Matthew Wild <mwild1@gmail.com>
parents:
12294
diff
changeset
|
60 os.exit(0); |
3ae9299d61d7
util.startup: Show error for unrecognized arguments passed to 'prosody' (fixes #1722)
Matthew Wild <mwild1@gmail.com>
parents:
12294
diff
changeset
|
61 end |
11869
d52a73425eba
util.startup: Show brief usage on `prosody -h|-?|--help`
Kim Alvefur <zash@zash.se>
parents:
11866
diff
changeset
|
62 end |
10936
d770435f0f84
util.argparse: Move exiting and error to util.startup
Kim Alvefur <zash@zash.se>
parents:
10934
diff
changeset
|
63 prosody.opts = opts; |
10596
cb107ea49b35
util.startup: Add startup step for parsing command-line options
Matthew Wild <mwild1@gmail.com>
parents:
10390
diff
changeset
|
64 end |
cb107ea49b35
util.startup: Add startup step for parsing command-line options
Matthew Wild <mwild1@gmail.com>
parents:
10390
diff
changeset
|
65 |
8635
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
66 function startup.read_config() |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
67 local filenames = {}; |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
68 |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
69 local filename; |
10597
25a3c8134b0a
prosody/util.startup: Switch to parse_args() for --root and --config
Matthew Wild <mwild1@gmail.com>
parents:
10596
diff
changeset
|
70 if prosody.opts.config then |
25a3c8134b0a
prosody/util.startup: Switch to parse_args() for --root and --config
Matthew Wild <mwild1@gmail.com>
parents:
10596
diff
changeset
|
71 table.insert(filenames, prosody.opts.config); |
8635
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
72 if CFG_CONFIGDIR then |
10597
25a3c8134b0a
prosody/util.startup: Switch to parse_args() for --root and --config
Matthew Wild <mwild1@gmail.com>
parents:
10596
diff
changeset
|
73 table.insert(filenames, CFG_CONFIGDIR.."/"..prosody.opts.config); |
8635
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
74 end |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
75 elseif os.getenv("PROSODY_CONFIG") then -- Passed by prosodyctl |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
76 table.insert(filenames, os.getenv("PROSODY_CONFIG")); |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
77 else |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
78 table.insert(filenames, (CFG_CONFIGDIR or ".").."/prosody.cfg.lua"); |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
79 end |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
80 for _,_filename in ipairs(filenames) do |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
81 filename = _filename; |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
82 local file = io.open(filename); |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
83 if file then |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
84 file:close(); |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
85 prosody.config_file = filename; |
10389
dbb8dae58265
util.startup: Update config path (fixes #1430)
Kim Alvefur <zash@zash.se>
parents:
9762
diff
changeset
|
86 prosody.paths.config = filename:match("^(.*)[\\/][^\\/]*$"); |
dbb8dae58265
util.startup: Update config path (fixes #1430)
Kim Alvefur <zash@zash.se>
parents:
9762
diff
changeset
|
87 CFG_CONFIGDIR = prosody.paths.config; -- luacheck: ignore 111 |
8635
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
88 break; |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
89 end |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
90 end |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
91 prosody.config_file = filename |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
92 local ok, level, err = config.load(filename); |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
93 if not ok then |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
94 print("\n"); |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
95 print("**************************"); |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
96 if level == "parser" then |
8728
41c959c5c84b
Fix spelling throughout the codebase [codespell]
Kim Alvefur <zash@zash.se>
parents:
8721
diff
changeset
|
97 print("A problem occurred while reading the config file "..filename); |
8635
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
98 print(""); |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
99 local err_line, err_message = tostring(err):match("%[string .-%]:(%d*): (.*)"); |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
100 if err:match("chunk has too many syntax levels$") then |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
101 print("An Include statement in a config file is including an already-included"); |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
102 print("file and causing an infinite loop. An Include statement in a config file is..."); |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
103 else |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
104 print("Error"..(err_line and (" on line "..err_line) or "")..": "..(err_message or tostring(err))); |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
105 end |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
106 print(""); |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
107 elseif level == "file" then |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
108 print("Prosody was unable to find the configuration file."); |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
109 print("We looked for: "..filename); |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
110 print("A sample config file is included in the Prosody download called prosody.cfg.lua.dist"); |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
111 print("Copy or rename it to prosody.cfg.lua and edit as necessary."); |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
112 end |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
113 print("More help on configuring Prosody can be found at https://prosody.im/doc/configure"); |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
114 print("Good luck!"); |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
115 print("**************************"); |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
116 print(""); |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
117 os.exit(1); |
9877
ded5303e1fde
util.startup: Log configuration warnings at startup
Matthew Wild <mwild1@gmail.com>
parents:
9873
diff
changeset
|
118 elseif err and #err > 0 then |
ded5303e1fde
util.startup: Log configuration warnings at startup
Matthew Wild <mwild1@gmail.com>
parents:
9873
diff
changeset
|
119 config_warnings = err; |
8635
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
120 end |
9214
8b2b8f1a911f
util.startup: Set flag when config fully loaded
Matthew Wild <mwild1@gmail.com>
parents:
8958
diff
changeset
|
121 prosody.config_loaded = true; |
8635
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
122 end |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
123 |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
124 function startup.check_dependencies() |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
125 if not dependencies.check_dependencies() then |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
126 os.exit(1); |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
127 end |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
128 end |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
129 |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
130 -- luacheck: globals socket server |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
131 |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
132 function startup.load_libraries() |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
133 -- Load socket framework |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
134 -- luacheck: ignore 111/server 111/socket |
12975
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
135 require "prosody.util.import" |
8635
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
136 socket = require "socket"; |
12975
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
137 server = require "prosody.net.server" |
8635
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
138 end |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
139 |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
140 function startup.init_logging() |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
141 -- Initialize logging |
12975
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
142 local loggingmanager = require "prosody.core.loggingmanager" |
8721
b773b15fee71
util.startup: Set up event hooks for reloading logging here instead of in loggingmanager to simplify startup dependencies
Kim Alvefur <zash@zash.se>
parents:
8720
diff
changeset
|
143 loggingmanager.reload_logging(); |
9762
34988a408b74
util.startup: Always reload logging after config (fixes #1284)
Kim Alvefur <zash@zash.se>
parents:
9214
diff
changeset
|
144 prosody.events.add_handler("config-reloaded", function () |
34988a408b74
util.startup: Always reload logging after config (fixes #1284)
Kim Alvefur <zash@zash.se>
parents:
9214
diff
changeset
|
145 prosody.events.fire_event("reopen-log-files"); |
34988a408b74
util.startup: Always reload logging after config (fixes #1284)
Kim Alvefur <zash@zash.se>
parents:
9214
diff
changeset
|
146 end); |
8721
b773b15fee71
util.startup: Set up event hooks for reloading logging here instead of in loggingmanager to simplify startup dependencies
Kim Alvefur <zash@zash.se>
parents:
8720
diff
changeset
|
147 prosody.events.add_handler("reopen-log-files", function () |
b773b15fee71
util.startup: Set up event hooks for reloading logging here instead of in loggingmanager to simplify startup dependencies
Kim Alvefur <zash@zash.se>
parents:
8720
diff
changeset
|
148 loggingmanager.reload_logging(); |
b773b15fee71
util.startup: Set up event hooks for reloading logging here instead of in loggingmanager to simplify startup dependencies
Kim Alvefur <zash@zash.se>
parents:
8720
diff
changeset
|
149 prosody.events.fire_event("logging-reloaded"); |
b773b15fee71
util.startup: Set up event hooks for reloading logging here instead of in loggingmanager to simplify startup dependencies
Kim Alvefur <zash@zash.se>
parents:
8720
diff
changeset
|
150 end); |
8635
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
151 end |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
152 |
9873
dfaeea570f7e
util.startup: Give function a more generic name so it can apply to all warnings
Matthew Wild <mwild1@gmail.com>
parents:
9762
diff
changeset
|
153 function startup.log_startup_warnings() |
8635
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
154 dependencies.log_warnings(); |
9878
dd61201fc5af
util.startup: Don't die if there are no config warnings to log (thanks buildbot)
Matthew Wild <mwild1@gmail.com>
parents:
9877
diff
changeset
|
155 if config_warnings then |
dd61201fc5af
util.startup: Don't die if there are no config warnings to log (thanks buildbot)
Matthew Wild <mwild1@gmail.com>
parents:
9877
diff
changeset
|
156 for _, warning in ipairs(config_warnings) do |
dd61201fc5af
util.startup: Don't die if there are no config warnings to log (thanks buildbot)
Matthew Wild <mwild1@gmail.com>
parents:
9877
diff
changeset
|
157 log("warn", "Configuration warning: %s", warning); |
dd61201fc5af
util.startup: Don't die if there are no config warnings to log (thanks buildbot)
Matthew Wild <mwild1@gmail.com>
parents:
9877
diff
changeset
|
158 end |
9877
ded5303e1fde
util.startup: Log configuration warnings at startup
Matthew Wild <mwild1@gmail.com>
parents:
9873
diff
changeset
|
159 end |
8635
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
160 end |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
161 |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
162 function startup.sanity_check() |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
163 for host, host_config in pairs(config.getconfig()) do |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
164 if host ~= "*" |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
165 and host_config.enabled ~= false |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
166 and not host_config.component_module then |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
167 return; |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
168 end |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
169 end |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
170 log("error", "No enabled VirtualHost entries found in the config file."); |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
171 log("error", "At least one active host is required for Prosody to function. Exiting..."); |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
172 os.exit(1); |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
173 end |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
174 |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
175 function startup.sandbox_require() |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
176 -- Replace require() with one that doesn't pollute _G, required |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
177 -- for neat sandboxing of modules |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
178 -- luacheck: ignore 113/getfenv 111/require |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
179 local _realG = _G; |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
180 local _real_require = require; |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
181 local getfenv = getfenv or function (f) |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
182 -- FIXME: This is a hack to replace getfenv() in Lua 5.2 |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
183 local name, env = debug.getupvalue(debug.getinfo(f or 1).func, 1); |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
184 if name == "_ENV" then |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
185 return env; |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
186 end |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
187 end |
8638
f8f45bbbd8ba
util.startup: Ignore various globals being read and written as part of startup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
8637
diff
changeset
|
188 function require(...) -- luacheck: ignore 121 |
8635
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
189 local curr_env = getfenv(2); |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
190 local curr_env_mt = getmetatable(curr_env); |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
191 local _realG_mt = getmetatable(_realG); |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
192 if curr_env_mt and curr_env_mt.__index and not curr_env_mt.__newindex and _realG_mt then |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
193 local old_newindex, old_index; |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
194 old_newindex, _realG_mt.__newindex = _realG_mt.__newindex, curr_env; |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
195 old_index, _realG_mt.__index = _realG_mt.__index, function (_G, k) -- luacheck: ignore 212/_G |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
196 return rawget(curr_env, k); |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
197 end; |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
198 local ret = _real_require(...); |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
199 _realG_mt.__newindex = old_newindex; |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
200 _realG_mt.__index = old_index; |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
201 return ret; |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
202 end |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
203 return _real_require(...); |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
204 end |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
205 end |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
206 |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
207 function startup.set_function_metatable() |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
208 local mt = {}; |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
209 function mt.__index(f, upvalue) |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
210 local i, name, value = 0; |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
211 repeat |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
212 i = i + 1; |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
213 name, value = debug.getupvalue(f, i); |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
214 until name == upvalue or name == nil; |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
215 return value; |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
216 end |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
217 function mt.__newindex(f, upvalue, value) |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
218 local i, name = 0; |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
219 repeat |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
220 i = i + 1; |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
221 name = debug.getupvalue(f, i); |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
222 until name == upvalue or name == nil; |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
223 if name then |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
224 debug.setupvalue(f, i, value); |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
225 end |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
226 end |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
227 function mt.__tostring(f) |
11150
0cfa36fa707e
util.startup: Include arguments in function string representation
Kim Alvefur <zash@zash.se>
parents:
11149
diff
changeset
|
228 local info = debug.getinfo(f, "Su"); |
11152
89162d27e1b1
util.startup: Handle missing nparams field from debug info (not present in 5.1)
Matthew Wild <mwild1@gmail.com>
parents:
11150
diff
changeset
|
229 local n_params = info.nparams or 0; |
89162d27e1b1
util.startup: Handle missing nparams field from debug info (not present in 5.1)
Matthew Wild <mwild1@gmail.com>
parents:
11150
diff
changeset
|
230 for i = 1, n_params do |
11150
0cfa36fa707e
util.startup: Include arguments in function string representation
Kim Alvefur <zash@zash.se>
parents:
11149
diff
changeset
|
231 info[i] = debug.getlocal(f, i); |
0cfa36fa707e
util.startup: Include arguments in function string representation
Kim Alvefur <zash@zash.se>
parents:
11149
diff
changeset
|
232 end |
0cfa36fa707e
util.startup: Include arguments in function string representation
Kim Alvefur <zash@zash.se>
parents:
11149
diff
changeset
|
233 if info.isvararg then |
11152
89162d27e1b1
util.startup: Handle missing nparams field from debug info (not present in 5.1)
Matthew Wild <mwild1@gmail.com>
parents:
11150
diff
changeset
|
234 info[n_params+1] = "..."; |
11150
0cfa36fa707e
util.startup: Include arguments in function string representation
Kim Alvefur <zash@zash.se>
parents:
11149
diff
changeset
|
235 end |
12982
fc0109c59807
util.startup: Tweak function string representation
Kim Alvefur <zash@zash.se>
parents:
12975
diff
changeset
|
236 return ("function @%s:%d(%s)"):format(info.short_src:match("[^\\/]*$"), info.linedefined, table.concat(info, ", ")); |
8635
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
237 end |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
238 debug.setmetatable(function() end, mt); |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
239 end |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
240 |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
241 function startup.detect_platform() |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
242 prosody.platform = "unknown"; |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
243 if os.getenv("WINDIR") then |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
244 prosody.platform = "windows"; |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
245 elseif package.config:sub(1,1) == "/" then |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
246 prosody.platform = "posix"; |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
247 end |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
248 end |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
249 |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
250 function startup.detect_installed() |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
251 prosody.installed = nil; |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
252 if CFG_SOURCEDIR and (prosody.platform == "windows" or CFG_SOURCEDIR:match("^/")) then |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
253 prosody.installed = true; |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
254 end |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
255 end |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
256 |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
257 function startup.init_global_state() |
8638
f8f45bbbd8ba
util.startup: Ignore various globals being read and written as part of startup [luacheck]
Kim Alvefur <zash@zash.se>
parents:
8637
diff
changeset
|
258 -- luacheck: ignore 121 |
8635
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
259 prosody.bare_sessions = {}; |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
260 prosody.full_sessions = {}; |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
261 prosody.hosts = {}; |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
262 |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
263 -- COMPAT: These globals are deprecated |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
264 -- luacheck: ignore 111/bare_sessions 111/full_sessions 111/hosts |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
265 bare_sessions = prosody.bare_sessions; |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
266 full_sessions = prosody.full_sessions; |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
267 hosts = prosody.hosts; |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
268 |
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
|
269 prosody.paths = { source = CFG_SOURCEDIR, config = CFG_CONFIGDIR or ".", |
0499f3da0ec4
util.startup: Factor out processing of plugin and data paths into a separate functions
Kim Alvefur <zash@zash.se>
parents:
8692
diff
changeset
|
270 plugins = CFG_PLUGINDIR or "plugins", data = "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
|
271 |
0499f3da0ec4
util.startup: Factor out processing of plugin and data paths into a separate functions
Kim Alvefur <zash@zash.se>
parents:
8692
diff
changeset
|
272 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
|
273 |
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
|
274 _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
|
275 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
|
276 |
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
|
277 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
|
278 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
|
279 _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
|
280 |
22066b02887f
util.startup: Provide a common Lua 5.3+ math.type() for Lua 5.2
Kim Alvefur <zash@zash.se>
parents:
12779
diff
changeset
|
281 -- 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
|
282 if not math.type then |
12975
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
283 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
|
284 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
|
285 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
|
286 |
0499f3da0ec4
util.startup: Factor out processing of plugin and data paths into a separate functions
Kim Alvefur <zash@zash.se>
parents:
8692
diff
changeset
|
287 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
|
288 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
|
289 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
|
290 |
0499f3da0ec4
util.startup: Factor out processing of plugin and data paths into a separate functions
Kim Alvefur <zash@zash.se>
parents:
8692
diff
changeset
|
291 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
|
292 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
|
293 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
|
294 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
|
295 -- 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
|
296 -- 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
|
297 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
|
298 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
|
299 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
|
300 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
|
301 |
10404
29c10930a7b2
util.startup: Split plugin installer path setup into a separate function
Kim Alvefur <zash@zash.se>
parents:
10391
diff
changeset
|
302 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
|
303 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
|
304 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
|
305 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
|
306 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
|
307 -- 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
|
308 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
|
309 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
|
310 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
|
311 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
|
312 |
8664
d49acc9a8da2
util.startup: Fix chdir() to use correct path variable
Matthew Wild <mwild1@gmail.com>
parents:
8653
diff
changeset
|
313 function startup.chdir() |
d49acc9a8da2
util.startup: Fix chdir() to use correct path variable
Matthew Wild <mwild1@gmail.com>
parents:
8653
diff
changeset
|
314 if prosody.installed then |
10390
82705ec87253
util.startup: Ensure prosody.paths are absolute (see #1430)
Kim Alvefur <zash@zash.se>
parents:
10389
diff
changeset
|
315 local lfs = require "lfs"; |
82705ec87253
util.startup: Ensure prosody.paths are absolute (see #1430)
Kim Alvefur <zash@zash.se>
parents:
10389
diff
changeset
|
316 -- 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
|
317 local cwd = lfs.currentdir(); |
82705ec87253
util.startup: Ensure prosody.paths are absolute (see #1430)
Kim Alvefur <zash@zash.se>
parents:
10389
diff
changeset
|
318 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
|
319 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
|
320 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
|
321 -- 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
|
322 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
|
323 end |
d49acc9a8da2
util.startup: Fix chdir() to use correct path variable
Matthew Wild <mwild1@gmail.com>
parents:
8653
diff
changeset
|
324 end |
d49acc9a8da2
util.startup: Fix chdir() to use correct path variable
Matthew Wild <mwild1@gmail.com>
parents:
8653
diff
changeset
|
325 |
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
|
326 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
|
327 -- 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
|
328 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
|
329 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
|
330 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
|
331 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
|
332 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
|
333 if level == "parser" then |
10108
659ffa03f1e7
util.startup: Remove tostring call from logging
Kim Alvefur <zash@zash.se>
parents:
9878
diff
changeset
|
334 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
|
335 elseif level == "file" then |
10108
659ffa03f1e7
util.startup: Remove tostring call from logging
Kim Alvefur <zash@zash.se>
parents:
9878
diff
changeset
|
336 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
|
337 end |
8692
a55574754e5f
configmanager: Move firing of the 'config-reloaded' event into util.startup (fixes #1117)
Kim Alvefur <zash@zash.se>
parents:
8688
diff
changeset
|
338 else |
a55574754e5f
configmanager: Move firing of the 'config-reloaded' event into util.startup (fixes #1117)
Kim Alvefur <zash@zash.se>
parents:
8688
diff
changeset
|
339 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
|
340 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
|
341 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
|
342 }); |
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
|
343 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
|
344 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
|
345 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
|
346 |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
347 -- 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
|
348 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
|
349 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
|
350 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
|
351 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
|
352 |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
353 -- Function 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
|
354 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
|
355 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
|
356 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
|
357 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
|
358 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
|
359 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
|
360 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
|
361 }); |
12553
cc0ec0277813
util.startup: Fix async waiting for last shutdown steps
Kim Alvefur <zash@zash.se>
parents:
12423
diff
changeset
|
362 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
|
363 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
|
364 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
|
365 |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
366 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
|
367 --- Load and initialise core modules |
12975
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
368 require "prosody.util.xmppstream" |
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
369 require "prosody.core.stanza_router" |
13120
be4058bb5a7e
util.startup: Record current version in a metric
Kim Alvefur <zash@zash.se>
parents:
13119
diff
changeset
|
370 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
|
371 require "prosody.core.hostmanager" |
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
372 require "prosody.core.portmanager" |
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
373 require "prosody.core.modulemanager" |
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
374 require "prosody.core.usermanager" |
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
375 require "prosody.core.rostermanager" |
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
376 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
|
377 |
12975
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
378 require "prosody.util.array" |
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
379 require "prosody.util.datetime" |
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
380 require "prosody.util.iterators" |
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
381 require "prosody.util.timer" |
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
382 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
|
383 |
12975
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
384 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
|
385 |
47e3b8b6f17a
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 -- 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
|
387 -- 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
|
388 --[[ |
47e3b8b6f17a
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 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
|
390 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
|
391 ]] |
47e3b8b6f17a
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 |
12975
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
393 require "prosody.util.stanza" |
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
394 require "prosody.util.jid" |
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 |
47e3b8b6f17a
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 function startup.init_http_client() |
12975
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
398 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
|
399 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
|
400 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
|
401 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
|
402 { 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
|
403 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
|
404 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
|
405 |
11948
dca75cc6fc5a
util.startup: Integrate util.promise with net.server main loop
Kim Alvefur <zash@zash.se>
parents:
11870
diff
changeset
|
406 function startup.init_promise() |
12975
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
407 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
|
408 |
12975
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
409 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
|
410 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
|
411 end |
dca75cc6fc5a
util.startup: Integrate util.promise with net.server main loop
Kim Alvefur <zash@zash.se>
parents:
11870
diff
changeset
|
412 |
11963
f5c6be4a3ecc
util.startup: Initialize util.async at startup
Matthew Wild <mwild1@gmail.com>
parents:
11948
diff
changeset
|
413 function startup.init_async() |
12975
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
414 local async = require "prosody.util.async"; |
11963
f5c6be4a3ecc
util.startup: Initialize util.async at startup
Matthew Wild <mwild1@gmail.com>
parents:
11948
diff
changeset
|
415 |
12975
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
416 local timer = require "prosody.util.timer"; |
11963
f5c6be4a3ecc
util.startup: Initialize util.async at startup
Matthew Wild <mwild1@gmail.com>
parents:
11948
diff
changeset
|
417 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
|
418 async.set_schedule_function(timer.add_task); |
f5c6be4a3ecc
util.startup: Initialize util.async at startup
Matthew Wild <mwild1@gmail.com>
parents:
11948
diff
changeset
|
419 end |
f5c6be4a3ecc
util.startup: Initialize util.async at startup
Matthew Wild <mwild1@gmail.com>
parents:
11948
diff
changeset
|
420 |
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
|
421 function startup.init_data_store() |
12975
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
422 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
|
423 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
|
424 |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
425 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
|
426 log("info", "Prosody is using the %s backend for connection handling", server.get_backend()); |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
427 -- Signal to modules that we are ready to start |
13014
06453c564141
util.startup: Add prosody.started promise to easily execute code after startup
Matthew Wild <mwild1@gmail.com>
parents:
12982
diff
changeset
|
428 prosody.started = require "util.promise".new(function (resolve) |
06453c564141
util.startup: Add prosody.started promise to easily execute code after startup
Matthew Wild <mwild1@gmail.com>
parents:
12982
diff
changeset
|
429 prosody.events.add_handler("server-started", function () |
06453c564141
util.startup: Add prosody.started promise to easily execute code after startup
Matthew Wild <mwild1@gmail.com>
parents:
12982
diff
changeset
|
430 resolve(); |
06453c564141
util.startup: Add prosody.started promise to easily execute code after startup
Matthew Wild <mwild1@gmail.com>
parents:
12982
diff
changeset
|
431 end); |
06453c564141
util.startup: Add prosody.started promise to easily execute code after startup
Matthew Wild <mwild1@gmail.com>
parents:
12982
diff
changeset
|
432 prosody.log("debug", "Firing server-starting event"); |
06453c564141
util.startup: Add prosody.started promise to easily execute code after startup
Matthew Wild <mwild1@gmail.com>
parents:
12982
diff
changeset
|
433 prosody.events.fire_event("server-starting"); |
06453c564141
util.startup: Add prosody.started promise to easily execute code after startup
Matthew Wild <mwild1@gmail.com>
parents:
12982
diff
changeset
|
434 prosody.start_time = os.time(); |
06453c564141
util.startup: Add prosody.started promise to easily execute code after startup
Matthew Wild <mwild1@gmail.com>
parents:
12982
diff
changeset
|
435 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
|
436 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
|
437 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
|
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 |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
440 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
|
441 -- 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
|
442 -- 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
|
443 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
|
444 __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
|
445 __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
|
446 }; |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
447 |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
448 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
|
449 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
|
450 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
|
451 |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
452 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
|
453 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
|
454 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
|
455 |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
456 -- 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
|
457 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
|
458 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
|
459 |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
460 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
|
461 -- 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
|
462 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
|
463 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
|
464 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
|
465 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
|
466 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
|
467 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
|
468 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
|
469 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
|
470 else |
12975
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
471 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
|
472 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
|
473 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
|
474 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
|
475 end |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
476 |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
477 function startup.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
|
478 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
|
479 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
|
480 |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
481 function startup.notify_started() |
13014
06453c564141
util.startup: Add prosody.started promise to easily execute code after startup
Matthew Wild <mwild1@gmail.com>
parents:
12982
diff
changeset
|
482 require "util.timer".add_task(0, function () |
06453c564141
util.startup: Add prosody.started promise to easily execute code after startup
Matthew Wild <mwild1@gmail.com>
parents:
12982
diff
changeset
|
483 prosody.log("debug", "Firing server-started event"); |
06453c564141
util.startup: Add prosody.started promise to easily execute code after startup
Matthew Wild <mwild1@gmail.com>
parents:
12982
diff
changeset
|
484 prosody.events.fire_event("server-started"); |
06453c564141
util.startup: Add prosody.started promise to easily execute code after startup
Matthew Wild <mwild1@gmail.com>
parents:
12982
diff
changeset
|
485 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
|
486 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
|
487 |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
488 -- 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
|
489 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
|
490 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
|
491 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
|
492 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
|
493 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
|
494 log_level = "debug"; |
73ecfe811526
util.startup: Teach prosodyctl to be --quiet as complement to --verbose
Kim Alvefur <zash@zash.se>
parents:
12160
diff
changeset
|
495 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
|
496 log_level = "error"; |
12244
858d40d675ee
util.startup: Teach prosodyctl to be completely --silent
Kim Alvefur <zash@zash.se>
parents:
12243
diff
changeset
|
497 elseif prosody.opts.silent then |
858d40d675ee
util.startup: Teach prosodyctl to be completely --silent
Kim Alvefur <zash@zash.se>
parents:
12243
diff
changeset
|
498 config.set("*", "log", {}); -- ssssshush! |
858d40d675ee
util.startup: Teach prosodyctl to be completely --silent
Kim Alvefur <zash@zash.se>
parents:
12243
diff
changeset
|
499 return |
12243
73ecfe811526
util.startup: Teach prosodyctl to be --quiet as complement to --verbose
Kim Alvefur <zash@zash.se>
parents:
12160
diff
changeset
|
500 end |
73ecfe811526
util.startup: Teach prosodyctl to be --quiet as complement to --verbose
Kim Alvefur <zash@zash.se>
parents:
12160
diff
changeset
|
501 end |
11828
024ac556e907
prosodyctl: Add support for -v/--verbose to enable debug logging
Kim Alvefur <zash@zash.se>
parents:
11560
diff
changeset
|
502 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
|
503 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
|
504 |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
505 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
|
506 -- 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
|
507 -- 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
|
508 -- 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
|
509 -- 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
|
510 |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
511 local want_pposix_version = "0.4.0"; |
12975
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
512 local have_pposix, pposix = pcall(require, "prosody.util.pposix"); |
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
|
513 |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
514 if have_pposix and pposix 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
|
515 if pposix._VERSION ~= want_pposix_version 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
|
516 print(string.format("Unknown version (%s) of binary pposix module, expected %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
|
517 tostring(pposix._VERSION), want_pposix_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
|
518 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
|
519 end |
8672
86b12ae8d427
util.startup: Expose user switching information via prosody global object
Matthew Wild <mwild1@gmail.com>
parents:
8667
diff
changeset
|
520 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
|
521 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
|
522 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
|
523 -- 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
|
524 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
|
525 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
|
526 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
|
527 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
|
528 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
|
529 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
|
530 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
|
531 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
|
532 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
|
533 -- Yay! |
8672
86b12ae8d427
util.startup: Expose user switching information via prosody global object
Matthew Wild <mwild1@gmail.com>
parents:
8667
diff
changeset
|
534 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
|
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 end |
8672
86b12ae8d427
util.startup: Expose user switching information via prosody global object
Matthew Wild <mwild1@gmail.com>
parents:
8667
diff
changeset
|
537 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
|
538 -- 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
|
539 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
|
540 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
|
541 -- 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
|
542 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
|
543 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
|
544 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
|
545 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
|
546 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
|
547 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
|
548 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
|
549 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
|
550 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 |
8637
c8368c7c81a1
util.startup: Trim trailing whitespace [luacheck]
Kim Alvefur <zash@zash.se>
parents:
8636
diff
changeset
|
553 |
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
|
554 -- 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
|
555 pposix.umask(config.get("*", "umask") or "027"); |
8667
a05d36075c6a
util.startup: Fix variable usage [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
8666
diff
changeset
|
556 pposix.setenv("HOME", prosody.paths.data); |
a05d36075c6a
util.startup: Fix variable usage [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
8666
diff
changeset
|
557 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
|
558 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
|
559 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
|
560 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
|
561 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
|
562 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
|
563 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
|
564 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
|
565 |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
566 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
|
567 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
|
568 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
|
569 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
|
570 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
|
571 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
|
572 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
|
573 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
|
574 end |
8637
c8368c7c81a1
util.startup: Trim trailing whitespace [luacheck]
Kim Alvefur <zash@zash.se>
parents:
8636
diff
changeset
|
575 |
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
|
576 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
|
577 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
|
578 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
|
579 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
|
580 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
|
581 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
|
582 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
|
583 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
|
584 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
|
585 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
|
586 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
|
587 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
|
588 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
|
589 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
|
590 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
|
591 end |
8637
c8368c7c81a1
util.startup: Trim trailing whitespace [luacheck]
Kim Alvefur <zash@zash.se>
parents:
8636
diff
changeset
|
592 |
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
|
593 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
|
594 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
|
595 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
|
596 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
|
597 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
|
598 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
|
599 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
|
600 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
|
601 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
|
602 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
|
603 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
|
604 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
|
605 |
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
|
606 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
|
607 -- 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
|
608 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
|
609 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
|
610 |
5691b9773c5b
util.startup: Configure the GC on startup, using the config or built-in defaults
Matthew Wild <mwild1@gmail.com>
parents:
10947
diff
changeset
|
611 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
|
612 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
|
613 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
|
614 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
|
615 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
|
616 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
|
617 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
|
618 |
11050
51be24b16e8a
util.error: Allow optional tracebacks to be injected on errors
Matthew Wild <mwild1@gmail.com>
parents:
10948
diff
changeset
|
619 function startup.init_errors() |
12975
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
620 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
|
621 end |
51be24b16e8a
util.error: Allow optional tracebacks to be injected on errors
Matthew Wild <mwild1@gmail.com>
parents:
10948
diff
changeset
|
622 |
8673
6aeed79d9283
util.startup: Expose make_host() function
Matthew Wild <mwild1@gmail.com>
parents:
8672
diff
changeset
|
623 function startup.make_host(hostname) |
6aeed79d9283
util.startup: Expose make_host() function
Matthew Wild <mwild1@gmail.com>
parents:
8672
diff
changeset
|
624 return { |
6aeed79d9283
util.startup: Expose make_host() function
Matthew Wild <mwild1@gmail.com>
parents:
8672
diff
changeset
|
625 type = "local", |
6aeed79d9283
util.startup: Expose make_host() function
Matthew Wild <mwild1@gmail.com>
parents:
8672
diff
changeset
|
626 events = prosody.events, |
6aeed79d9283
util.startup: Expose make_host() function
Matthew Wild <mwild1@gmail.com>
parents:
8672
diff
changeset
|
627 modules = {}, |
6aeed79d9283
util.startup: Expose make_host() function
Matthew Wild <mwild1@gmail.com>
parents:
8672
diff
changeset
|
628 sessions = {}, |
12975
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12864
diff
changeset
|
629 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
|
630 }; |
6aeed79d9283
util.startup: Expose make_host() function
Matthew Wild <mwild1@gmail.com>
parents:
8672
diff
changeset
|
631 end |
6aeed79d9283
util.startup: Expose make_host() function
Matthew Wild <mwild1@gmail.com>
parents:
8672
diff
changeset
|
632 |
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
|
633 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
|
634 -- 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
|
635 -- 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
|
636 -- 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
|
637 -- 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
|
638 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
|
639 |
8639
070a77c15f63
util.startup: Remove unused loop variable [luacheck]
Kim Alvefur <zash@zash.se>
parents:
8638
diff
changeset
|
640 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
|
641 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
|
642 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
|
643 end |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
644 |
12294
81f147ddc4ab
prosody: Move last cleanup and shutdown code into util.startup
Kim Alvefur <zash@zash.se>
parents:
12274
diff
changeset
|
645 function startup.cleanup() |
81f147ddc4ab
prosody: Move last cleanup and shutdown code into util.startup
Kim Alvefur <zash@zash.se>
parents:
12274
diff
changeset
|
646 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
|
647 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
|
648 end |
81f147ddc4ab
prosody: Move last cleanup and shutdown code into util.startup
Kim Alvefur <zash@zash.se>
parents:
12274
diff
changeset
|
649 |
81f147ddc4ab
prosody: Move last cleanup and shutdown code into util.startup
Kim Alvefur <zash@zash.se>
parents:
12274
diff
changeset
|
650 function startup.shutdown() |
81f147ddc4ab
prosody: Move last cleanup and shutdown code into util.startup
Kim Alvefur <zash@zash.se>
parents:
12274
diff
changeset
|
651 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
|
652 startup.cleanup(); |
81f147ddc4ab
prosody: Move last cleanup and shutdown code into util.startup
Kim Alvefur <zash@zash.se>
parents:
12274
diff
changeset
|
653 prosody.events.fire_event("server-stopped"); |
81f147ddc4ab
prosody: Move last cleanup and shutdown code into util.startup
Kim Alvefur <zash@zash.se>
parents:
12274
diff
changeset
|
654 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
|
655 |
81f147ddc4ab
prosody: Move last cleanup and shutdown code into util.startup
Kim Alvefur <zash@zash.se>
parents:
12274
diff
changeset
|
656 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
|
657 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
|
658 server.setquitting(true); |
cc0ec0277813
util.startup: Fix async waiting for last shutdown steps
Kim Alvefur <zash@zash.se>
parents:
12423
diff
changeset
|
659 end |
cc0ec0277813
util.startup: Fix async waiting for last shutdown steps
Kim Alvefur <zash@zash.se>
parents:
12423
diff
changeset
|
660 |
cc0ec0277813
util.startup: Fix async waiting for last shutdown steps
Kim Alvefur <zash@zash.se>
parents:
12423
diff
changeset
|
661 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
|
662 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
|
663 end |
81f147ddc4ab
prosody: Move last cleanup and shutdown code into util.startup
Kim Alvefur <zash@zash.se>
parents:
12274
diff
changeset
|
664 |
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
|
665 -- 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
|
666 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
|
667 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
|
668 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
|
669 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
|
670 startup.read_config(); |
8755
857d8f38a010
util.startup: Force console logging before initializing logging (see 2fdeb979cc7c)
Kim Alvefur <zash@zash.se>
parents:
8748
diff
changeset
|
671 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
|
672 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
|
673 startup.init_gc(); |
11050
51be24b16e8a
util.error: Allow optional tracebacks to be injected on errors
Matthew Wild <mwild1@gmail.com>
parents:
10948
diff
changeset
|
674 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
|
675 startup.setup_plugindir(); |
11138
2a19d61f4ae4
util.startup: Re-enable installer path setup
Kim Alvefur <zash@zash.se>
parents:
11137
diff
changeset
|
676 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
|
677 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
|
678 startup.chdir(); |
8688
019b4b3dd5ad
util.startup: Read version for prosodyctl (restores version in 'about' command)
Kim Alvefur <zash@zash.se>
parents:
8682
diff
changeset
|
679 startup.read_version(); |
8665
4b260a3f8b94
util.startup: Restore user switching
Matthew Wild <mwild1@gmail.com>
parents:
8664
diff
changeset
|
680 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
|
681 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
|
682 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
|
683 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
|
684 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
|
685 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
|
686 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
|
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 |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
689 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
|
690 -- 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
|
691 -- 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
|
692 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
|
693 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
|
694 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
|
695 startup.read_config(); |
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
|
696 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
|
697 startup.init_gc(); |
11050
51be24b16e8a
util.error: Allow optional tracebacks to be injected on errors
Matthew Wild <mwild1@gmail.com>
parents:
10948
diff
changeset
|
698 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
|
699 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
|
700 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
|
701 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
|
702 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
|
703 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
|
704 startup.setup_plugindir(); |
11138
2a19d61f4ae4
util.startup: Re-enable installer path setup
Kim Alvefur <zash@zash.se>
parents:
11137
diff
changeset
|
705 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
|
706 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
|
707 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
|
708 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
|
709 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
|
710 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
|
711 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
|
712 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
|
713 startup.init_promise(); |
11963
f5c6be4a3ecc
util.startup: Initialize util.async at startup
Matthew Wild <mwild1@gmail.com>
parents:
11948
diff
changeset
|
714 startup.init_async(); |
8682
151ecd18d624
prosody, util.startup: Switch from async.once() to long-lived thread, to avoid GC
Matthew Wild <mwild1@gmail.com>
parents:
8673
diff
changeset
|
715 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
|
716 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
|
717 startup.init_global_protection(); |
151ecd18d624
prosody, util.startup: Switch from async.once() to long-lived thread, to avoid GC
Matthew Wild <mwild1@gmail.com>
parents:
8673
diff
changeset
|
718 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
|
719 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
|
720 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
|
721 |
47e3b8b6f17a
prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
722 return startup; |