util/startup.lua
author Kim Alvefur <zash@zash.se>
Sun, 24 Mar 2024 21:31:47 +0100
changeset 13467 3ce550ce44ce
parent 13466 720aed1f5cf2
child 13468 2dbc169aae6a
permissions -rw-r--r--
util.startup: Don't use not yet existent shutdown procedure when started as root (thanks SigmaTel71)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8641
f8f45bbbd8ba util.startup: Ignore various globals being read and written as part of startup [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8640
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: 8640
diff changeset
     2
-- luacheck: ignore 113/CFG_CONFIGDIR 113/CFG_SOURCEDIR 113/CFG_DATADIR 113/CFG_PLUGINDIR
8638
47e3b8b6f17a 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
12979
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12868
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: 12868
diff changeset
     6
local logger = require "prosody.util.logger";
8723
dba17a70fd22 util.startup: Initialize prosody.log / _G.log here instead of in loggingmanager to reduce dependencies
Kim Alvefur <zash@zash.se>
parents: 8722
diff changeset
     7
local log = logger.init("startup");
12979
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12868
diff changeset
     8
local parse_args = require "prosody.util.argparse".parse;
8638
47e3b8b6f17a 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
12979
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12868
diff changeset
    10
local config = require "prosody.core.configmanager";
9881
ded5303e1fde util.startup: Log configuration warnings at startup
Matthew Wild <mwild1@gmail.com>
parents: 9877
diff changeset
    11
local config_warnings;
8638
47e3b8b6f17a 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
12979
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12868
diff changeset
    13
local dependencies = require "prosody.util.dependencies";
8638
47e3b8b6f17a 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
8669
57780ba1938f util.startup: Move original_logging_config to a local variable
Matthew Wild <mwild1@gmail.com>
parents: 8668
diff changeset
    15
local original_logging_config;
57780ba1938f util.startup: Move original_logging_config to a local variable
Matthew Wild <mwild1@gmail.com>
parents: 8668
diff changeset
    16
11543
3413fea9e6db util.startup: Set more aggressive defaults for GC
Matthew Wild <mwild1@gmail.com>
parents: 11077
diff changeset
    17
local default_gc_params = {
3413fea9e6db util.startup: Set more aggressive defaults for GC
Matthew Wild <mwild1@gmail.com>
parents: 11077
diff changeset
    18
	mode = "incremental";
3413fea9e6db util.startup: Set more aggressive defaults for GC
Matthew Wild <mwild1@gmail.com>
parents: 11077
diff changeset
    19
	-- Incremental mode defaults
3413fea9e6db util.startup: Set more aggressive defaults for GC
Matthew Wild <mwild1@gmail.com>
parents: 11077
diff changeset
    20
	threshold = 105, speed = 500;
3413fea9e6db util.startup: Set more aggressive defaults for GC
Matthew Wild <mwild1@gmail.com>
parents: 11077
diff changeset
    21
	-- Generational mode defaults
3413fea9e6db util.startup: Set more aggressive defaults for GC
Matthew Wild <mwild1@gmail.com>
parents: 11077
diff changeset
    22
	minor_threshold = 20, major_threshold = 50;
3413fea9e6db util.startup: Set more aggressive defaults for GC
Matthew Wild <mwild1@gmail.com>
parents: 11077
diff changeset
    23
};
11077
5691b9773c5b util.startup: Configure the GC on startup, using the config or built-in defaults
Matthew Wild <mwild1@gmail.com>
parents: 10951
diff changeset
    24
11833
4fad0ca42f66 util.startup: Allow separate command line argument settings for prosody and prosodyctl
Kim Alvefur <zash@zash.se>
parents: 11832
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: 11832
diff changeset
    26
	prosody = {
11873
d52a73425eba util.startup: Show brief usage on `prosody -h|-?|--help`
Kim Alvefur <zash@zash.se>
parents: 11870
diff changeset
    27
		short_params = { D = "daemonize"; F = "no-daemonize", h = "help", ["?"] = "help" };
11833
4fad0ca42f66 util.startup: Allow separate command line argument settings for prosody and prosodyctl
Kim Alvefur <zash@zash.se>
parents: 11832
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: 11832
diff changeset
    29
	};
4fad0ca42f66 util.startup: Allow separate command line argument settings for prosody and prosodyctl
Kim Alvefur <zash@zash.se>
parents: 11832
diff changeset
    30
	prosodyctl = {
11874
1d1ed2be3491 util.startup: Understand -h, -? as --help in prosodyctl but ignore
Kim Alvefur <zash@zash.se>
parents: 11873
diff changeset
    31
		short_params = { v = "verbose", h = "help", ["?"] = "help" };
11833
4fad0ca42f66 util.startup: Allow separate command line argument settings for prosody and prosodyctl
Kim Alvefur <zash@zash.se>
parents: 11832
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: 11832
diff changeset
    33
	};
4fad0ca42f66 util.startup: Allow separate command line argument settings for prosody and prosodyctl
Kim Alvefur <zash@zash.se>
parents: 11832
diff changeset
    34
}
10600
cb107ea49b35 util.startup: Add startup step for parsing command-line options
Matthew Wild <mwild1@gmail.com>
parents: 10394
diff changeset
    35
12164
ac654fb19203 util.startup: Allow supplying an argument parsing settings
Kim Alvefur <zash@zash.se>
parents: 11967
diff changeset
    36
function startup.parse_args(profile)
ac654fb19203 util.startup: Allow supplying an argument parsing settings
Kim Alvefur <zash@zash.se>
parents: 11967
diff changeset
    37
	local opts, err, where = parse_args(arg, arg_settigs[profile or prosody.process_type] or profile);
10940
d770435f0f84 util.argparse: Move exiting and error to util.startup
Kim Alvefur <zash@zash.se>
parents: 10938
diff changeset
    38
	if not opts then
d770435f0f84 util.argparse: Move exiting and error to util.startup
Kim Alvefur <zash@zash.se>
parents: 10938
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: 10938
diff changeset
    40
			print("Unknown command-line option: "..tostring(where));
11851
2b3ce80ffece util.startup: Only ask if 'prosodyctl' was meant instead of 'prosody' (fix #1692)
Kim Alvefur <zash@zash.se>
parents: 11850
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: 11850
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: 11850
diff changeset
    43
			end
10940
d770435f0f84 util.argparse: Move exiting and error to util.startup
Kim Alvefur <zash@zash.se>
parents: 10938
diff changeset
    44
		elseif err == "missing-value" then
d770435f0f84 util.argparse: Move exiting and error to util.startup
Kim Alvefur <zash@zash.se>
parents: 10938
diff changeset
    45
			print("Expected a value to follow command-line option: "..where);
10604
08f2fe5ac30f util.startup: Fix logic to make --config work again
Matthew Wild <mwild1@gmail.com>
parents: 10601
diff changeset
    46
		end
10940
d770435f0f84 util.argparse: Move exiting and error to util.startup
Kim Alvefur <zash@zash.se>
parents: 10938
diff changeset
    47
		os.exit(1);
10600
cb107ea49b35 util.startup: Add startup step for parsing command-line options
Matthew Wild <mwild1@gmail.com>
parents: 10394
diff changeset
    48
	end
12427
3ae9299d61d7 util.startup: Show error for unrecognized arguments passed to 'prosody' (fixes #1722)
Matthew Wild <mwild1@gmail.com>
parents: 12298
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: 12298
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: 12298
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: 12298
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: 12298
diff changeset
    53
			print("");
3ae9299d61d7 util.startup: Show error for unrecognized arguments passed to 'prosody' (fixes #1722)
Matthew Wild <mwild1@gmail.com>
parents: 12298
diff changeset
    54
		end
3ae9299d61d7 util.startup: Show error for unrecognized arguments passed to 'prosody' (fixes #1722)
Matthew Wild <mwild1@gmail.com>
parents: 12298
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: 12298
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: 12298
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: 12298
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: 12298
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: 12298
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: 12298
diff changeset
    61
		end
11873
d52a73425eba util.startup: Show brief usage on `prosody -h|-?|--help`
Kim Alvefur <zash@zash.se>
parents: 11870
diff changeset
    62
	end
10940
d770435f0f84 util.argparse: Move exiting and error to util.startup
Kim Alvefur <zash@zash.se>
parents: 10938
diff changeset
    63
	prosody.opts = opts;
10600
cb107ea49b35 util.startup: Add startup step for parsing command-line options
Matthew Wild <mwild1@gmail.com>
parents: 10394
diff changeset
    64
end
cb107ea49b35 util.startup: Add startup step for parsing command-line options
Matthew Wild <mwild1@gmail.com>
parents: 10394
diff changeset
    65
8638
47e3b8b6f17a 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;
10601
25a3c8134b0a prosody/util.startup: Switch to parse_args() for --root and --config
Matthew Wild <mwild1@gmail.com>
parents: 10600
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: 10600
diff changeset
    71
		table.insert(filenames, prosody.opts.config);
8638
47e3b8b6f17a 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
10601
25a3c8134b0a prosody/util.startup: Switch to parse_args() for --root and --config
Matthew Wild <mwild1@gmail.com>
parents: 10600
diff changeset
    73
			table.insert(filenames, CFG_CONFIGDIR.."/"..prosody.opts.config);
8638
47e3b8b6f17a 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;
10393
dbb8dae58265 util.startup: Update config path (fixes #1430)
Kim Alvefur <zash@zash.se>
parents: 9766
diff changeset
    86
			prosody.paths.config = filename:match("^(.*)[\\/][^\\/]*$");
dbb8dae58265 util.startup: Update config path (fixes #1430)
Kim Alvefur <zash@zash.se>
parents: 9766
diff changeset
    87
			CFG_CONFIGDIR = prosody.paths.config; -- luacheck: ignore 111
8638
47e3b8b6f17a 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
8731
41c959c5c84b Fix spelling throughout the codebase [codespell]
Kim Alvefur <zash@zash.se>
parents: 8724
diff changeset
    97
			print("A problem occurred while reading the config file "..filename);
8638
47e3b8b6f17a 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);
9881
ded5303e1fde util.startup: Log configuration warnings at startup
Matthew Wild <mwild1@gmail.com>
parents: 9877
diff changeset
   118
	elseif err and #err > 0 then
ded5303e1fde util.startup: Log configuration warnings at startup
Matthew Wild <mwild1@gmail.com>
parents: 9877
diff changeset
   119
		config_warnings = err;
8638
47e3b8b6f17a 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
9217
8b2b8f1a911f util.startup: Set flag when config fully loaded
Matthew Wild <mwild1@gmail.com>
parents: 8961
diff changeset
   121
	prosody.config_loaded = true;
8638
47e3b8b6f17a 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
12979
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12868
diff changeset
   135
	require "prosody.util.import"
8638
47e3b8b6f17a 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";
12979
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12868
diff changeset
   137
	server = require "prosody.net.server"
8638
47e3b8b6f17a 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
12979
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12868
diff changeset
   142
	local loggingmanager = require "prosody.core.loggingmanager"
8724
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: 8723
diff changeset
   143
	loggingmanager.reload_logging();
9766
34988a408b74 util.startup: Always reload logging after config (fixes #1284)
Kim Alvefur <zash@zash.se>
parents: 9217
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: 9217
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: 9217
diff changeset
   146
	end);
8724
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: 8723
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: 8723
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: 8723
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: 8723
diff changeset
   150
	end);
8638
47e3b8b6f17a 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
9877
dfaeea570f7e util.startup: Give function a more generic name so it can apply to all warnings
Matthew Wild <mwild1@gmail.com>
parents: 9766
diff changeset
   153
function startup.log_startup_warnings()
8638
47e3b8b6f17a 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();
9882
dd61201fc5af util.startup: Don't die if there are no config warnings to log (thanks buildbot)
Matthew Wild <mwild1@gmail.com>
parents: 9881
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: 9881
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: 9881
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: 9881
diff changeset
   158
		end
9881
ded5303e1fde util.startup: Log configuration warnings at startup
Matthew Wild <mwild1@gmail.com>
parents: 9877
diff changeset
   159
	end
8638
47e3b8b6f17a 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
8641
f8f45bbbd8ba util.startup: Ignore various globals being read and written as part of startup [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8640
diff changeset
   188
	function require(...) -- luacheck: ignore 121
8638
47e3b8b6f17a 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)
11154
0cfa36fa707e util.startup: Include arguments in function string representation
Kim Alvefur <zash@zash.se>
parents: 11153
diff changeset
   228
		local info = debug.getinfo(f, "Su");
11156
89162d27e1b1 util.startup: Handle missing nparams field from debug info (not present in 5.1)
Matthew Wild <mwild1@gmail.com>
parents: 11154
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: 11154
diff changeset
   230
		for i = 1, n_params do
11154
0cfa36fa707e util.startup: Include arguments in function string representation
Kim Alvefur <zash@zash.se>
parents: 11153
diff changeset
   231
			info[i] = debug.getlocal(f, i);
0cfa36fa707e util.startup: Include arguments in function string representation
Kim Alvefur <zash@zash.se>
parents: 11153
diff changeset
   232
		end
0cfa36fa707e util.startup: Include arguments in function string representation
Kim Alvefur <zash@zash.se>
parents: 11153
diff changeset
   233
		if info.isvararg then
11156
89162d27e1b1 util.startup: Handle missing nparams field from debug info (not present in 5.1)
Matthew Wild <mwild1@gmail.com>
parents: 11154
diff changeset
   234
			info[n_params+1] = "...";
11154
0cfa36fa707e util.startup: Include arguments in function string representation
Kim Alvefur <zash@zash.se>
parents: 11153
diff changeset
   235
		end
12986
fc0109c59807 util.startup: Tweak function string representation
Kim Alvefur <zash@zash.se>
parents: 12979
diff changeset
   236
		return ("function @%s:%d(%s)"):format(info.short_src:match("[^\\/]*$"), info.linedefined, table.concat(info, ", "));
8638
47e3b8b6f17a 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()
8641
f8f45bbbd8ba util.startup: Ignore various globals being read and written as part of startup [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8640
diff changeset
   258
	-- luacheck: ignore 121
8638
47e3b8b6f17a 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
8701
0499f3da0ec4 util.startup: Factor out processing of plugin and data paths into a separate functions
Kim Alvefur <zash@zash.se>
parents: 8695
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: 8695
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: 8695
diff changeset
   271
0499f3da0ec4 util.startup: Factor out processing of plugin and data paths into a separate functions
Kim Alvefur <zash@zash.se>
parents: 8695
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: 8695
diff changeset
   273
8723
dba17a70fd22 util.startup: Initialize prosody.log / _G.log here instead of in loggingmanager to reduce dependencies
Kim Alvefur <zash@zash.se>
parents: 8722
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: 8722
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: 8722
diff changeset
   276
8701
0499f3da0ec4 util.startup: Factor out processing of plugin and data paths into a separate functions
Kim Alvefur <zash@zash.se>
parents: 8695
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: 8695
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: 8695
diff changeset
   279
	_G.prosody = prosody;
12785
22066b02887f util.startup: Provide a common Lua 5.3+ math.type() for Lua 5.2
Kim Alvefur <zash@zash.se>
parents: 12783
diff changeset
   280
22066b02887f util.startup: Provide a common Lua 5.3+ math.type() for Lua 5.2
Kim Alvefur <zash@zash.se>
parents: 12783
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: 12783
diff changeset
   282
	if not math.type then
12979
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12868
diff changeset
   283
		require "prosody.util.mathcompat"
12785
22066b02887f util.startup: Provide a common Lua 5.3+ math.type() for Lua 5.2
Kim Alvefur <zash@zash.se>
parents: 12783
diff changeset
   284
	end
8701
0499f3da0ec4 util.startup: Factor out processing of plugin and data paths into a separate functions
Kim Alvefur <zash@zash.se>
parents: 8695
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: 8695
diff changeset
   286
0499f3da0ec4 util.startup: Factor out processing of plugin and data paths into a separate functions
Kim Alvefur <zash@zash.se>
parents: 8695
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: 8695
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: 8695
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: 8695
diff changeset
   290
0499f3da0ec4 util.startup: Factor out processing of plugin and data paths into a separate functions
Kim Alvefur <zash@zash.se>
parents: 8695
diff changeset
   291
function startup.setup_plugindir()
8638
47e3b8b6f17a 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");
10177
0513dd2830b7 util.startup: The .setup_plugindir function now correctly sets a default/specified path for custom plugins
João Duarte <jvsDuarte08@gmail.com>
parents: 10175
diff changeset
   293
	local path_sep = package.config:sub(3,3);
8638
47e3b8b6f17a 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...
8641
f8f45bbbd8ba util.startup: Ignore various globals being read and written as part of startup [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8640
diff changeset
   296
		-- luacheck: ignore 111
8638
47e3b8b6f17a 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");
8736
6a234e77c99f util.startup: Fix traceback due to both plugin path becoming nil if plugin_paths is unset
Kim Alvefur <zash@zash.se>
parents: 8731
diff changeset
   298
		prosody.paths.plugins = CFG_PLUGINDIR;
8638
47e3b8b6f17a 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
10408
29c10930a7b2 util.startup: Split plugin installer path setup into a separate function
Kim Alvefur <zash@zash.se>
parents: 10395
diff changeset
   302
function startup.setup_plugin_install_path()
11309
cd8516a77255 util.startup: Make installer_plugin_path relative to data directory
Kim Alvefur <zash@zash.se>
parents: 11308
diff changeset
   303
	local installer_plugin_path = config.get("*", "installer_plugin_path") or "custom_plugins";
10408
29c10930a7b2 util.startup: Split plugin installer path setup into a separate function
Kim Alvefur <zash@zash.se>
parents: 10395
diff changeset
   304
	local path_sep = package.config:sub(3,3);
11309
cd8516a77255 util.startup: Make installer_plugin_path relative to data directory
Kim Alvefur <zash@zash.se>
parents: 11308
diff changeset
   305
	installer_plugin_path = config.resolve_relative_path(CFG_DATADIR or "data", installer_plugin_path);
12979
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12868
diff changeset
   306
	require"prosody.util.paths".complement_lua_path(installer_plugin_path);
10408
29c10930a7b2 util.startup: Split plugin installer path setup into a separate function
Kim Alvefur <zash@zash.se>
parents: 10395
diff changeset
   307
	-- luacheck: ignore 111
10177
0513dd2830b7 util.startup: The .setup_plugindir function now correctly sets a default/specified path for custom plugins
João Duarte <jvsDuarte08@gmail.com>
parents: 10175
diff changeset
   308
	CFG_PLUGINDIR = installer_plugin_path..path_sep..(CFG_PLUGINDIR or "plugins");
11148
2b9f7c537acb util.startup: Save the path used by the installer to prosody.paths
Kim Alvefur <zash@zash.se>
parents: 11143
diff changeset
   309
	prosody.paths.installer = installer_plugin_path;
10175
628e238feb04 util.startup: Removed unnecessary if clause at startup.set_plugindir
João Duarte <jvsDuarte08@gmail.com>
parents: 10167
diff changeset
   310
	prosody.paths.plugins = CFG_PLUGINDIR;
8638
47e3b8b6f17a 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
8667
d49acc9a8da2 util.startup: Fix chdir() to use correct path variable
Matthew Wild <mwild1@gmail.com>
parents: 8656
diff changeset
   313
function startup.chdir()
d49acc9a8da2 util.startup: Fix chdir() to use correct path variable
Matthew Wild <mwild1@gmail.com>
parents: 8656
diff changeset
   314
	if prosody.installed then
10394
82705ec87253 util.startup: Ensure prosody.paths are absolute (see #1430)
Kim Alvefur <zash@zash.se>
parents: 10393
diff changeset
   315
		local lfs = require "lfs";
82705ec87253 util.startup: Ensure prosody.paths are absolute (see #1430)
Kim Alvefur <zash@zash.se>
parents: 10393
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: 10393
diff changeset
   317
		local cwd = lfs.currentdir();
82705ec87253 util.startup: Ensure prosody.paths are absolute (see #1430)
Kim Alvefur <zash@zash.se>
parents: 10393
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: 10393
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: 10393
diff changeset
   320
		prosody.paths.data = config.resolve_relative_path(cwd, prosody.paths.data);
8667
d49acc9a8da2 util.startup: Fix chdir() to use correct path variable
Matthew Wild <mwild1@gmail.com>
parents: 8656
diff changeset
   321
		-- Change working directory to data path.
10394
82705ec87253 util.startup: Ensure prosody.paths are absolute (see #1430)
Kim Alvefur <zash@zash.se>
parents: 10393
diff changeset
   322
		lfs.chdir(prosody.paths.data);
8667
d49acc9a8da2 util.startup: Fix chdir() to use correct path variable
Matthew Wild <mwild1@gmail.com>
parents: 8656
diff changeset
   323
	end
d49acc9a8da2 util.startup: Fix chdir() to use correct path variable
Matthew Wild <mwild1@gmail.com>
parents: 8656
diff changeset
   324
end
d49acc9a8da2 util.startup: Fix chdir() to use correct path variable
Matthew Wild <mwild1@gmail.com>
parents: 8656
diff changeset
   325
8638
47e3b8b6f17a 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
10112
659ffa03f1e7 util.startup: Remove tostring call from logging
Kim Alvefur <zash@zash.se>
parents: 9882
diff changeset
   334
				log("error", "There was an error parsing the configuration file: %s", err);
8638
47e3b8b6f17a 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
10112
659ffa03f1e7 util.startup: Remove tostring call from logging
Kim Alvefur <zash@zash.se>
parents: 9882
diff changeset
   336
				log("error", "Couldn't read the config file when trying to reload: %s", err);
8638
47e3b8b6f17a 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
8695
a55574754e5f configmanager: Move firing of the 'config-reloaded' event into util.startup (fixes #1117)
Kim Alvefur <zash@zash.se>
parents: 8691
diff changeset
   338
		else
a55574754e5f configmanager: Move firing of the 'config-reloaded' event into util.startup (fixes #1117)
Kim Alvefur <zash@zash.se>
parents: 8691
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: 8691
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: 8691
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: 8691
diff changeset
   342
			});
8638
47e3b8b6f17a 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
		});
12557
cc0ec0277813 util.startup: Fix async waiting for last shutdown steps
Kim Alvefur <zash@zash.se>
parents: 12427
diff changeset
   362
		prosody.main_thread:run(startup.shutdown);
8638
47e3b8b6f17a 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
12979
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12868
diff changeset
   368
	require "prosody.util.xmppstream"
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12868
diff changeset
   369
	require "prosody.core.stanza_router"
13124
be4058bb5a7e util.startup: Record current version in a metric
Kim Alvefur <zash@zash.se>
parents: 13123
diff changeset
   370
	require "prosody.core.statsmanager".metric("gauge", "prosody_info", "", "Prosody version", { "version" }):with_labels(prosody.version):set(1);
12979
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12868
diff changeset
   371
	require "prosody.core.hostmanager"
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12868
diff changeset
   372
	require "prosody.core.portmanager"
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12868
diff changeset
   373
	require "prosody.core.modulemanager"
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12868
diff changeset
   374
	require "prosody.core.usermanager"
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12868
diff changeset
   375
	require "prosody.core.rostermanager"
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12868
diff changeset
   376
	require "prosody.core.sessionmanager"
8638
47e3b8b6f17a 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
12979
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12868
diff changeset
   378
	require "prosody.util.array"
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12868
diff changeset
   379
	require "prosody.util.datetime"
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12868
diff changeset
   380
	require "prosody.util.iterators"
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12868
diff changeset
   381
	require "prosody.util.timer"
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12868
diff changeset
   382
	require "prosody.util.helpers"
8638
47e3b8b6f17a 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
12979
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12868
diff changeset
   384
	pcall(require, "prosody.util.signal") -- Not on Windows
8638
47e3b8b6f17a 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
12979
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12868
diff changeset
   393
	require "prosody.util.stanza"
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12868
diff changeset
   394
	require "prosody.util.jid"
13428
0efb53a0852e util.startup: Expose core.features.available as prosody.features
Matthew Wild <mwild1@gmail.com>
parents: 13346
diff changeset
   395
0efb53a0852e util.startup: Expose core.features.available as prosody.features
Matthew Wild <mwild1@gmail.com>
parents: 13346
diff changeset
   396
	prosody.features = require "prosody.core.features".available;
8638
47e3b8b6f17a 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
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
   398
47e3b8b6f17a 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
function startup.init_http_client()
12979
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12868
diff changeset
   400
	local http = require "prosody.net.http"
8638
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   401
	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
   402
	local https_client = config.get("*", "client_https_ssl")
12979
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12868
diff changeset
   403
	http.default.options.sslctx = require "prosody.core.certmanager".create_context("client_https port 0", "client",
8638
47e3b8b6f17a 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
		{ capath = config_ssl.capath, cafile = config_ssl.cafile, verify = "peer", }, https_client);
12278
10447f940fec util.startup: Enable DANE in http client library with use_dane
Kim Alvefur <zash@zash.se>
parents: 12248
diff changeset
   405
	http.default.options.use_dane = config.get("*", "use_dane")
8638
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   406
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
   407
11952
dca75cc6fc5a util.startup: Integrate util.promise with net.server main loop
Kim Alvefur <zash@zash.se>
parents: 11874
diff changeset
   408
function startup.init_promise()
12979
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12868
diff changeset
   409
	local promise = require "prosody.util.promise";
11952
dca75cc6fc5a util.startup: Integrate util.promise with net.server main loop
Kim Alvefur <zash@zash.se>
parents: 11874
diff changeset
   410
12979
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12868
diff changeset
   411
	local timer = require "prosody.util.timer";
11952
dca75cc6fc5a util.startup: Integrate util.promise with net.server main loop
Kim Alvefur <zash@zash.se>
parents: 11874
diff changeset
   412
	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: 11874
diff changeset
   413
end
dca75cc6fc5a util.startup: Integrate util.promise with net.server main loop
Kim Alvefur <zash@zash.se>
parents: 11874
diff changeset
   414
11967
f5c6be4a3ecc util.startup: Initialize util.async at startup
Matthew Wild <mwild1@gmail.com>
parents: 11952
diff changeset
   415
function startup.init_async()
12979
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12868
diff changeset
   416
	local async = require "prosody.util.async";
11967
f5c6be4a3ecc util.startup: Initialize util.async at startup
Matthew Wild <mwild1@gmail.com>
parents: 11952
diff changeset
   417
12979
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12868
diff changeset
   418
	local timer = require "prosody.util.timer";
11967
f5c6be4a3ecc util.startup: Initialize util.async at startup
Matthew Wild <mwild1@gmail.com>
parents: 11952
diff changeset
   419
	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: 11952
diff changeset
   420
	async.set_schedule_function(timer.add_task);
f5c6be4a3ecc util.startup: Initialize util.async at startup
Matthew Wild <mwild1@gmail.com>
parents: 11952
diff changeset
   421
end
f5c6be4a3ecc util.startup: Initialize util.async at startup
Matthew Wild <mwild1@gmail.com>
parents: 11952
diff changeset
   422
8638
47e3b8b6f17a 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
function startup.init_data_store()
12979
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12868
diff changeset
   424
	require "prosody.core.storagemanager";
8638
47e3b8b6f17a 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
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
   426
13346
d0a9b631a937 util.startup: Use prosody. module namespace
Kim Alvefur <zash@zash.se>
parents: 13315
diff changeset
   427
local running_state = require "prosody.util.fsm".new({
13315
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13169
diff changeset
   428
	default_state = "uninitialized";
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13169
diff changeset
   429
	transitions = {
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13169
diff changeset
   430
		{ name = "begin_startup",   from = "uninitialized",           to = "starting" };
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13169
diff changeset
   431
		{ name = "finish_startup",  from = "starting",                to = "running" };
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13169
diff changeset
   432
		{ name = "begin_shutdown",  from = { "running", "starting" }, to = "stopping" };
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13169
diff changeset
   433
		{ name = "finish_shutdown", from = "stopping",                to = "stopped" };
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13169
diff changeset
   434
	};
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13169
diff changeset
   435
	handlers = {
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13169
diff changeset
   436
		transitioned = function (transition)
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13169
diff changeset
   437
			prosody.state = transition.to;
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13169
diff changeset
   438
		end;
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13169
diff changeset
   439
	};
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13169
diff changeset
   440
	state_handlers = {
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13169
diff changeset
   441
		starting = function ()
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13169
diff changeset
   442
			prosody.log("debug", "Firing server-starting event");
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13169
diff changeset
   443
			prosody.events.fire_event("server-starting");
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13169
diff changeset
   444
			prosody.start_time = os.time();
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13169
diff changeset
   445
		end;
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13169
diff changeset
   446
		running = function ()
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13169
diff changeset
   447
			prosody.log("debug", "Startup complete, firing server-started");
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13169
diff changeset
   448
			prosody.events.fire_event("server-started");
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13169
diff changeset
   449
		end;
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13169
diff changeset
   450
	};
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13169
diff changeset
   451
}):init();
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13169
diff changeset
   452
8638
47e3b8b6f17a 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
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
   454
	log("info", "Prosody is using the %s backend for connection handling", server.get_backend());
13315
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13169
diff changeset
   455
8638
47e3b8b6f17a 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
	-- Signal to modules that we are ready to start
13169
9c13c11b199d renamening: Fix newly added imports to use the new namespace
Kim Alvefur <zash@zash.se>
parents: 13124
diff changeset
   457
	prosody.started = require "prosody.util.promise".new(function (resolve)
13315
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13169
diff changeset
   458
		if prosody.state == "running" then
13018
06453c564141 util.startup: Add prosody.started promise to easily execute code after startup
Matthew Wild <mwild1@gmail.com>
parents: 12986
diff changeset
   459
			resolve();
13315
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13169
diff changeset
   460
		else
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13169
diff changeset
   461
			prosody.events.add_handler("server-started", function ()
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13169
diff changeset
   462
				resolve();
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13169
diff changeset
   463
			end);
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13169
diff changeset
   464
		end
13018
06453c564141 util.startup: Add prosody.started promise to easily execute code after startup
Matthew Wild <mwild1@gmail.com>
parents: 12986
diff changeset
   465
	end):catch(function (err)
06453c564141 util.startup: Add prosody.started promise to easily execute code after startup
Matthew Wild <mwild1@gmail.com>
parents: 12986
diff changeset
   466
		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: 12986
diff changeset
   467
	end);
13315
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13169
diff changeset
   468
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13169
diff changeset
   469
	running_state:begin_startup();
8638
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   470
end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   471
47e3b8b6f17a 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
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
   473
	-- 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
   474
	-- 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
   475
	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
   476
		__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
   477
		__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
   478
	};
47e3b8b6f17a 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
47e3b8b6f17a 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
	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
   481
		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
   482
	end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   483
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   484
	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
   485
		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
   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
	-- 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
   489
	prosody.lock_globals();
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   490
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
   491
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   492
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
   493
	-- 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
   494
	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
   495
	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
   496
	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
   497
		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
   498
		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
   499
		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
   500
			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
   501
		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
   502
	else
12979
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12868
diff changeset
   503
		local hg = require"prosody.util.mercurial";
8638
47e3b8b6f17a 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
		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
   505
		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
   506
	end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   507
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
   508
47e3b8b6f17a 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
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
   510
	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
   511
end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   512
47e3b8b6f17a 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
function startup.notify_started()
13315
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13169
diff changeset
   514
	running_state:finish_startup();
8638
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   515
end
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   516
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   517
-- 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
   518
function startup.force_console_logging()
8669
57780ba1938f util.startup: Move original_logging_config to a local variable
Matthew Wild <mwild1@gmail.com>
parents: 8668
diff changeset
   519
	original_logging_config = config.get("*", "log");
11832
024ac556e907 prosodyctl: Add support for -v/--verbose to enable debug logging
Kim Alvefur <zash@zash.se>
parents: 11564
diff changeset
   520
	local log_level = os.getenv("PROSODYCTL_LOG_LEVEL");
12247
73ecfe811526 util.startup: Teach prosodyctl to be --quiet as complement to --verbose
Kim Alvefur <zash@zash.se>
parents: 12164
diff changeset
   521
	if not log_level then
73ecfe811526 util.startup: Teach prosodyctl to be --quiet as complement to --verbose
Kim Alvefur <zash@zash.se>
parents: 12164
diff changeset
   522
		if prosody.opts.verbose then
73ecfe811526 util.startup: Teach prosodyctl to be --quiet as complement to --verbose
Kim Alvefur <zash@zash.se>
parents: 12164
diff changeset
   523
			log_level = "debug";
73ecfe811526 util.startup: Teach prosodyctl to be --quiet as complement to --verbose
Kim Alvefur <zash@zash.se>
parents: 12164
diff changeset
   524
		elseif prosody.opts.quiet then
73ecfe811526 util.startup: Teach prosodyctl to be --quiet as complement to --verbose
Kim Alvefur <zash@zash.se>
parents: 12164
diff changeset
   525
			log_level = "error";
12248
858d40d675ee util.startup: Teach prosodyctl to be completely --silent
Kim Alvefur <zash@zash.se>
parents: 12247
diff changeset
   526
		elseif prosody.opts.silent then
858d40d675ee util.startup: Teach prosodyctl to be completely --silent
Kim Alvefur <zash@zash.se>
parents: 12247
diff changeset
   527
			config.set("*", "log", {}); -- ssssshush!
858d40d675ee util.startup: Teach prosodyctl to be completely --silent
Kim Alvefur <zash@zash.se>
parents: 12247
diff changeset
   528
			return
12247
73ecfe811526 util.startup: Teach prosodyctl to be --quiet as complement to --verbose
Kim Alvefur <zash@zash.se>
parents: 12164
diff changeset
   529
		end
73ecfe811526 util.startup: Teach prosodyctl to be --quiet as complement to --verbose
Kim Alvefur <zash@zash.se>
parents: 12164
diff changeset
   530
	end
11832
024ac556e907 prosodyctl: Add support for -v/--verbose to enable debug logging
Kim Alvefur <zash@zash.se>
parents: 11564
diff changeset
   531
	config.set("*", "log", { { levels = { min = log_level or "info" }, to = "console" } });
8638
47e3b8b6f17a 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
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
   533
13465
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   534
local function check_posix()
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   535
	if prosody.platform ~= "posix" then return end
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   536
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   537
	local want_pposix_version = "0.4.0";
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   538
	local have_pposix, pposix = pcall(require, "prosody.util.pposix");
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   539
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   540
	if pposix._VERSION ~= want_pposix_version then
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   541
		print(string.format("Unknown version (%s) of binary pposix module, expected %s",
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   542
			tostring(pposix._VERSION), want_pposix_version));
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   543
		os.exit(1);
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   544
	end
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   545
	if have_pposix and pposix then
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   546
		return pposix;
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   547
	end
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   548
end
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   549
8638
47e3b8b6f17a 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
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
   551
	-- 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
   552
	-- 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
   553
	-- 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
   554
	-- 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
   555
13465
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   556
	local pposix = check_posix()
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   557
	if pposix then
8675
86b12ae8d427 util.startup: Expose user switching information via prosody global object
Matthew Wild <mwild1@gmail.com>
parents: 8670
diff changeset
   558
		prosody.current_uid = pposix.getuid();
10601
25a3c8134b0a prosody/util.startup: Switch to parse_args() for --root and --config
Matthew Wild <mwild1@gmail.com>
parents: 10600
diff changeset
   559
		local arg_root = prosody.opts.root;
8675
86b12ae8d427 util.startup: Expose user switching information via prosody global object
Matthew Wild <mwild1@gmail.com>
parents: 8670
diff changeset
   560
		if prosody.current_uid == 0 and config.get("*", "run_as_root") ~= true and not arg_root then
8638
47e3b8b6f17a 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
			-- 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
   562
			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
   563
			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
   564
			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
   565
			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
   566
				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
   567
			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
   568
			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
   569
				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
   570
				if ok then
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   571
					-- Yay!
8675
86b12ae8d427 util.startup: Expose user switching information via prosody global object
Matthew Wild <mwild1@gmail.com>
parents: 8670
diff changeset
   572
					prosody.switched_user = true;
8638
47e3b8b6f17a 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
				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
   574
			end
8675
86b12ae8d427 util.startup: Expose user switching information via prosody global object
Matthew Wild <mwild1@gmail.com>
parents: 8670
diff changeset
   575
			if not prosody.switched_user then
8638
47e3b8b6f17a 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
				-- 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
   577
				print("Warning: Couldn't switch to Prosody user/group '"..tostring(desired_user).."'/'"..tostring(desired_group).."': "..tostring(err));
11870
515a89dee6ae util.startup: Skip config readability check in migrator (thanks eTaurus)
Kim Alvefur <zash@zash.se>
parents: 11851
diff changeset
   578
			elseif prosody.config_file then
8638
47e3b8b6f17a 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
				-- Make sure the Prosody user can read the config
10536
19ec384eb782 util.startup: Ignore unused errno variable [luacheck]
Kim Alvefur <zash@zash.se>
parents: 10409
diff changeset
   580
				local conf, err, errno = io.open(prosody.config_file); --luacheck: ignore 211/errno
8638
47e3b8b6f17a 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
				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
   582
					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
   583
				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
   584
					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
   585
					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
   586
					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
   587
					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
   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
8640
c8368c7c81a1 util.startup: Trim trailing whitespace [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8639
diff changeset
   591
8638
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   592
		-- 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
   593
		pposix.umask(config.get("*", "umask") or "027");
8670
a05d36075c6a util.startup: Fix variable usage [luacheck]
Matthew Wild <mwild1@gmail.com>
parents: 8669
diff changeset
   594
		pposix.setenv("HOME", prosody.paths.data);
a05d36075c6a util.startup: Fix variable usage [luacheck]
Matthew Wild <mwild1@gmail.com>
parents: 8669
diff changeset
   595
		pposix.setenv("PROSODY_CONFIG", prosody.config_file);
8638
47e3b8b6f17a 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
	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
   597
		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
   598
		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
   599
		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
   600
		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
   601
	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
   602
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
   603
47e3b8b6f17a 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
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
   605
	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
   606
		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
   607
		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
   608
			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
   609
		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
   610
		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
   611
		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
   612
	end
8640
c8368c7c81a1 util.startup: Trim trailing whitespace [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8639
diff changeset
   613
8638
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   614
	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
   615
	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
   616
		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
   617
		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
   618
			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
   619
		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
   620
	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
   621
		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
   622
			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
   623
				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
   624
				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
   625
					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
   626
				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
   627
			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
   628
		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
   629
	end
8640
c8368c7c81a1 util.startup: Trim trailing whitespace [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8639
diff changeset
   630
8638
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   631
	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
   632
		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
   633
		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
   634
		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
   635
		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
   636
		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
   637
			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
   638
		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
   639
		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
   640
		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
   641
	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
   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
11077
5691b9773c5b util.startup: Configure the GC on startup, using the config or built-in defaults
Matthew Wild <mwild1@gmail.com>
parents: 10951
diff changeset
   644
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: 10951
diff changeset
   645
	-- Apply garbage collector settings from the config file
12979
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12868
diff changeset
   646
	local gc = require "prosody.util.gc";
11077
5691b9773c5b util.startup: Configure the GC on startup, using the config or built-in defaults
Matthew Wild <mwild1@gmail.com>
parents: 10951
diff changeset
   647
	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: 10951
diff changeset
   648
5691b9773c5b util.startup: Configure the GC on startup, using the config or built-in defaults
Matthew Wild <mwild1@gmail.com>
parents: 10951
diff changeset
   649
	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: 10951
diff changeset
   650
	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: 10951
diff changeset
   651
		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: 10951
diff changeset
   652
		return nil, err;
5691b9773c5b util.startup: Configure the GC on startup, using the config or built-in defaults
Matthew Wild <mwild1@gmail.com>
parents: 10951
diff changeset
   653
	end
5691b9773c5b util.startup: Configure the GC on startup, using the config or built-in defaults
Matthew Wild <mwild1@gmail.com>
parents: 10951
diff changeset
   654
	return true;
5691b9773c5b util.startup: Configure the GC on startup, using the config or built-in defaults
Matthew Wild <mwild1@gmail.com>
parents: 10951
diff changeset
   655
end
5691b9773c5b util.startup: Configure the GC on startup, using the config or built-in defaults
Matthew Wild <mwild1@gmail.com>
parents: 10951
diff changeset
   656
11054
51be24b16e8a util.error: Allow optional tracebacks to be injected on errors
Matthew Wild <mwild1@gmail.com>
parents: 10952
diff changeset
   657
function startup.init_errors()
12979
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12868
diff changeset
   658
	require "prosody.util.error".configure(config.get("*", "error_library") or {});
11054
51be24b16e8a util.error: Allow optional tracebacks to be injected on errors
Matthew Wild <mwild1@gmail.com>
parents: 10952
diff changeset
   659
end
51be24b16e8a util.error: Allow optional tracebacks to be injected on errors
Matthew Wild <mwild1@gmail.com>
parents: 10952
diff changeset
   660
8676
6aeed79d9283 util.startup: Expose make_host() function
Matthew Wild <mwild1@gmail.com>
parents: 8675
diff changeset
   661
function startup.make_host(hostname)
6aeed79d9283 util.startup: Expose make_host() function
Matthew Wild <mwild1@gmail.com>
parents: 8675
diff changeset
   662
	return {
6aeed79d9283 util.startup: Expose make_host() function
Matthew Wild <mwild1@gmail.com>
parents: 8675
diff changeset
   663
		type = "local",
6aeed79d9283 util.startup: Expose make_host() function
Matthew Wild <mwild1@gmail.com>
parents: 8675
diff changeset
   664
		events = prosody.events,
6aeed79d9283 util.startup: Expose make_host() function
Matthew Wild <mwild1@gmail.com>
parents: 8675
diff changeset
   665
		modules = {},
6aeed79d9283 util.startup: Expose make_host() function
Matthew Wild <mwild1@gmail.com>
parents: 8675
diff changeset
   666
		sessions = {},
12979
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12868
diff changeset
   667
		users = require "prosody.core.usermanager".new_null_provider(hostname)
8676
6aeed79d9283 util.startup: Expose make_host() function
Matthew Wild <mwild1@gmail.com>
parents: 8675
diff changeset
   668
	};
6aeed79d9283 util.startup: Expose make_host() function
Matthew Wild <mwild1@gmail.com>
parents: 8675
diff changeset
   669
end
6aeed79d9283 util.startup: Expose make_host() function
Matthew Wild <mwild1@gmail.com>
parents: 8675
diff changeset
   670
8638
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   671
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
   672
	-- 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
   673
	-- 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
   674
	-- with just enough things for most code to work correctly
8641
f8f45bbbd8ba util.startup: Ignore various globals being read and written as part of startup [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8640
diff changeset
   675
	-- luacheck: ignore 122/hosts
8638
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   676
	prosody.core_post_stanza = function () end; -- TODO: mod_router!
8640
c8368c7c81a1 util.startup: Trim trailing whitespace [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8639
diff changeset
   677
8642
070a77c15f63 util.startup: Remove unused loop variable [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8641
diff changeset
   678
	for hostname in pairs(config.getconfig()) do
8718
25d8d6091ec3 util.startup: Access the hosts table via the prosody global for consistency
Kim Alvefur <zash@zash.se>
parents: 8716
diff changeset
   679
		prosody.hosts[hostname] = startup.make_host(hostname);
8638
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   680
	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
   681
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
   682
13465
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   683
function startup.posix_umask()
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   684
	if prosody.platform ~= "posix" then return end
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   685
	local pposix = require "prosody.util.pposix";
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   686
	local umask = config.get("*", "umask") or "027";
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   687
	pposix.umask(umask);
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   688
end
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   689
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   690
function startup.check_user()
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   691
	local pposix = check_posix();
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   692
	if not pposix then return end
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   693
	-- Don't even think about it!
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   694
	if pposix.getuid() == 0 and not config.get("*", "run_as_root") then
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   695
		log("error", "Danger, Will Robinson! Prosody doesn't need to be run as root, so don't do it!");
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   696
		log("error", "For more information on running Prosody as root, see https://prosody.im/doc/root");
13467
3ce550ce44ce util.startup: Don't use not yet existent shutdown procedure when started as root (thanks SigmaTel71)
Kim Alvefur <zash@zash.se>
parents: 13466
diff changeset
   697
		os.exit(1); -- Refusing to run as root
13465
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   698
	end
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   699
end
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   700
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   701
local function remove_pidfile()
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   702
	local pidfile = prosody.pidfile;
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   703
	if prosody.pidfile_handle then
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   704
		prosody.pidfile_handle:close();
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   705
		os.remove(pidfile);
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   706
		prosody.pidfile, prosody.pidfile_handle = nil, nil;
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   707
	end
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   708
end
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   709
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   710
function startup.write_pidfile()
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   711
	local pposix = check_posix();
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   712
	if not pposix then return end
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   713
	local lfs = require "lfs";
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   714
	local stat = lfs.attributes;
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   715
	local pidfile = config.get("*", "pidfile") or nil;
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   716
	if not pidfile then return end
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   717
	pidfile = config.resolve_relative_path(prosody.paths.data, pidfile);
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   718
	local mode = stat(pidfile) and "r+" or "w+";
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   719
	local pidfile_handle, err = io.open(pidfile, mode);
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   720
	if not pidfile_handle then
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   721
		log("error", "Couldn't write pidfile at %s; %s", pidfile, err);
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   722
		prosody.shutdown("Couldn't write pidfile", 1);
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   723
	else
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   724
		prosody.pidfile = pidfile;
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   725
		if not lfs.lock(pidfile_handle, "w") then -- Exclusive lock
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   726
			local other_pid = pidfile_handle:read("*a");
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   727
			log("error", "Another Prosody instance seems to be running with PID %s, quitting", other_pid);
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   728
			prosody.pidfile_handle = nil;
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   729
			prosody.shutdown("Prosody already running", 1);
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   730
		else
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   731
			pidfile_handle:close();
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   732
			pidfile_handle, err = io.open(pidfile, "w+");
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   733
			if not pidfile_handle then
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   734
				log("error", "Couldn't write pidfile at %s; %s", pidfile, err);
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   735
				prosody.shutdown("Couldn't write pidfile", 1);
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   736
			else
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   737
				if lfs.lock(pidfile_handle, "w") then
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   738
					pidfile_handle:write(tostring(pposix.getpid()));
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   739
					pidfile_handle:flush();
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   740
					prosody.pidfile_handle = pidfile_handle;
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   741
				end
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   742
			end
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   743
		end
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   744
	end
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   745
	prosody.events.add_handler("server-stopped", remove_pidfile);
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   746
end
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   747
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   748
local function remove_log_sinks()
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   749
	local lm = require "prosody.core.loggingmanager";
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   750
	lm.register_sink_type("console", nil);
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   751
	lm.register_sink_type("stdout", nil);
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   752
	lm.reload_logging();
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   753
end
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   754
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   755
function startup.posix_daemonize()
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   756
	if not prosody.opts.daemonize then return end
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   757
	local pposix = check_posix();
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   758
	log("info", "Prosody is about to detach from the console, disabling further console output");
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   759
	remove_log_sinks();
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   760
	local ok, ret = pposix.daemonize();
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   761
	if not ok then
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   762
		log("error", "Failed to daemonize: %s", ret);
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   763
	elseif ret and ret > 0 then
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   764
		os.exit(0);
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   765
	else
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   766
		log("info", "Successfully daemonized to PID %d", pposix.getpid());
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   767
	end
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   768
end
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   769
13456
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13428
diff changeset
   770
function startup.hook_posix_signals()
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13428
diff changeset
   771
	if prosody.platform ~= "posix" then return end
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13428
diff changeset
   772
	local have_signal, signal = pcall(require, "prosody.util.signal");
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13428
diff changeset
   773
	if not have_signal then
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13428
diff changeset
   774
		log("warn", "Couldn't load signal library, won't respond to SIGTERM");
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13428
diff changeset
   775
		return
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13428
diff changeset
   776
	end
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13428
diff changeset
   777
	signal.signal("SIGTERM", function()
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13428
diff changeset
   778
		log("warn", "Received SIGTERM");
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13428
diff changeset
   779
		prosody.main_thread:run(function()
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13428
diff changeset
   780
			prosody.unlock_globals();
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13428
diff changeset
   781
			prosody.shutdown("Received SIGTERM");
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13428
diff changeset
   782
			prosody.lock_globals();
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13428
diff changeset
   783
		end);
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13428
diff changeset
   784
	end);
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13428
diff changeset
   785
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13428
diff changeset
   786
	signal.signal("SIGHUP", function()
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13428
diff changeset
   787
		log("info", "Received SIGHUP");
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13428
diff changeset
   788
		prosody.main_thread:run(function() prosody.reload_config(); end);
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13428
diff changeset
   789
		-- this also reloads logging
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13428
diff changeset
   790
	end);
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13428
diff changeset
   791
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13428
diff changeset
   792
	signal.signal("SIGINT", function()
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13428
diff changeset
   793
		log("info", "Received SIGINT");
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13428
diff changeset
   794
		prosody.main_thread:run(function()
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13428
diff changeset
   795
			prosody.unlock_globals();
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13428
diff changeset
   796
			prosody.shutdown("Received SIGINT");
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13428
diff changeset
   797
			prosody.lock_globals();
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13428
diff changeset
   798
		end);
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13428
diff changeset
   799
	end);
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13428
diff changeset
   800
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13428
diff changeset
   801
	signal.signal("SIGUSR1", function()
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13428
diff changeset
   802
		log("info", "Received SIGUSR1");
13458
b0c27628f588 util.startup: Fix firing of USR1/2 events
Kim Alvefur <zash@zash.se>
parents: 13456
diff changeset
   803
		prosody.events.fire_event("signal/SIGUSR1");
13456
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13428
diff changeset
   804
	end);
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13428
diff changeset
   805
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13428
diff changeset
   806
	signal.signal("SIGUSR2", function()
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13428
diff changeset
   807
		log("info", "Received SIGUSR2");
13458
b0c27628f588 util.startup: Fix firing of USR1/2 events
Kim Alvefur <zash@zash.se>
parents: 13456
diff changeset
   808
		prosody.events.fire_event("signal/SIGUSR2");
13456
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13428
diff changeset
   809
	end);
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13428
diff changeset
   810
end
69faf3552d52 mod_posix: Move POSIX signal handling into util.startup to avoid race
Kim Alvefur <zash@zash.se>
parents: 13428
diff changeset
   811
12298
81f147ddc4ab prosody: Move last cleanup and shutdown code into util.startup
Kim Alvefur <zash@zash.se>
parents: 12278
diff changeset
   812
function startup.cleanup()
81f147ddc4ab prosody: Move last cleanup and shutdown code into util.startup
Kim Alvefur <zash@zash.se>
parents: 12278
diff changeset
   813
	prosody.log("info", "Shutdown status: Cleaning up");
81f147ddc4ab prosody: Move last cleanup and shutdown code into util.startup
Kim Alvefur <zash@zash.se>
parents: 12278
diff changeset
   814
	prosody.events.fire_event("server-cleanup");
81f147ddc4ab prosody: Move last cleanup and shutdown code into util.startup
Kim Alvefur <zash@zash.se>
parents: 12278
diff changeset
   815
end
81f147ddc4ab prosody: Move last cleanup and shutdown code into util.startup
Kim Alvefur <zash@zash.se>
parents: 12278
diff changeset
   816
81f147ddc4ab prosody: Move last cleanup and shutdown code into util.startup
Kim Alvefur <zash@zash.se>
parents: 12278
diff changeset
   817
function startup.shutdown()
13315
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13169
diff changeset
   818
	running_state:begin_shutdown();
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13169
diff changeset
   819
12298
81f147ddc4ab prosody: Move last cleanup and shutdown code into util.startup
Kim Alvefur <zash@zash.se>
parents: 12278
diff changeset
   820
	prosody.log("info", "Shutting down...");
81f147ddc4ab prosody: Move last cleanup and shutdown code into util.startup
Kim Alvefur <zash@zash.se>
parents: 12278
diff changeset
   821
	startup.cleanup();
81f147ddc4ab prosody: Move last cleanup and shutdown code into util.startup
Kim Alvefur <zash@zash.se>
parents: 12278
diff changeset
   822
	prosody.events.fire_event("server-stopped");
13315
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13169
diff changeset
   823
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13169
diff changeset
   824
	running_state:finish_shutdown();
ab36edc7c217 util.startup: Attempt to bring some order to startup/shutdown with util.fsm
Matthew Wild <mwild1@gmail.com>
parents: 13169
diff changeset
   825
12298
81f147ddc4ab prosody: Move last cleanup and shutdown code into util.startup
Kim Alvefur <zash@zash.se>
parents: 12278
diff changeset
   826
	prosody.log("info", "Shutdown complete");
81f147ddc4ab prosody: Move last cleanup and shutdown code into util.startup
Kim Alvefur <zash@zash.se>
parents: 12278
diff changeset
   827
	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: 12278
diff changeset
   828
	prosody.log("debug", "Exiting with status code: %d", prosody.shutdown_code or 0);
12557
cc0ec0277813 util.startup: Fix async waiting for last shutdown steps
Kim Alvefur <zash@zash.se>
parents: 12427
diff changeset
   829
	server.setquitting(true);
cc0ec0277813 util.startup: Fix async waiting for last shutdown steps
Kim Alvefur <zash@zash.se>
parents: 12427
diff changeset
   830
end
cc0ec0277813 util.startup: Fix async waiting for last shutdown steps
Kim Alvefur <zash@zash.se>
parents: 12427
diff changeset
   831
cc0ec0277813 util.startup: Fix async waiting for last shutdown steps
Kim Alvefur <zash@zash.se>
parents: 12427
diff changeset
   832
function startup.exit()
12867
891edd1ebde6 util.startup: Close state on exit to ensure GC finalizers are called
Kim Alvefur <zash@zash.se>
parents: 12783
diff changeset
   833
	os.exit(prosody.shutdown_code, true);
12298
81f147ddc4ab prosody: Move last cleanup and shutdown code into util.startup
Kim Alvefur <zash@zash.se>
parents: 12278
diff changeset
   834
end
81f147ddc4ab prosody: Move last cleanup and shutdown code into util.startup
Kim Alvefur <zash@zash.se>
parents: 12278
diff changeset
   835
8638
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   836
-- 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
   837
function startup.prosodyctl()
10640
a9c975a0f113 util.startup: expose current process type (prosody/prosodyctl) in the global prosody object
Matthew Wild <mwild1@gmail.com>
parents: 10608
diff changeset
   838
	prosody.process_type = "prosodyctl";
10601
25a3c8134b0a prosody/util.startup: Switch to parse_args() for --root and --config
Matthew Wild <mwild1@gmail.com>
parents: 10600
diff changeset
   839
	startup.parse_args();
8702
580c13ed0ca1 util.startup: Initialize the 'prosody' global earlier (various things needs the global util.events instance)
Kim Alvefur <zash@zash.se>
parents: 8701
diff changeset
   840
	startup.init_global_state();
8638
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   841
	startup.read_config();
8758
857d8f38a010 util.startup: Force console logging before initializing logging (see 2fdeb979cc7c)
Kim Alvefur <zash@zash.se>
parents: 8751
diff changeset
   842
	startup.force_console_logging();
8751
2fdeb979cc7c util.startup: Initialize logging immediately after configuration is read (which is how it used to work)
Matthew Wild <mwild1@gmail.com>
parents: 8737
diff changeset
   843
	startup.init_logging();
11077
5691b9773c5b util.startup: Configure the GC on startup, using the config or built-in defaults
Matthew Wild <mwild1@gmail.com>
parents: 10951
diff changeset
   844
	startup.init_gc();
11054
51be24b16e8a util.error: Allow optional tracebacks to be injected on errors
Matthew Wild <mwild1@gmail.com>
parents: 10952
diff changeset
   845
	startup.init_errors();
8701
0499f3da0ec4 util.startup: Factor out processing of plugin and data paths into a separate functions
Kim Alvefur <zash@zash.se>
parents: 8695
diff changeset
   846
	startup.setup_plugindir();
11142
2a19d61f4ae4 util.startup: Re-enable installer path setup
Kim Alvefur <zash@zash.se>
parents: 11141
diff changeset
   847
	startup.setup_plugin_install_path();
8701
0499f3da0ec4 util.startup: Factor out processing of plugin and data paths into a separate functions
Kim Alvefur <zash@zash.se>
parents: 8695
diff changeset
   848
	startup.setup_datadir();
8638
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   849
	startup.chdir();
8691
019b4b3dd5ad util.startup: Read version for prosodyctl (restores version in 'about' command)
Kim Alvefur <zash@zash.se>
parents: 8685
diff changeset
   850
	startup.read_version();
8668
4b260a3f8b94 util.startup: Restore user switching
Matthew Wild <mwild1@gmail.com>
parents: 8667
diff changeset
   851
	startup.switch_user();
8638
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   852
	startup.check_dependencies();
9877
dfaeea570f7e util.startup: Give function a more generic name so it can apply to all warnings
Matthew Wild <mwild1@gmail.com>
parents: 9766
diff changeset
   853
	startup.log_startup_warnings();
8638
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   854
	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
   855
	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
   856
	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
   857
	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
   858
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
   859
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   860
function startup.prosody()
8685
151ecd18d624 prosody, util.startup: Switch from async.once() to long-lived thread, to avoid GC
Matthew Wild <mwild1@gmail.com>
parents: 8676
diff changeset
   861
	-- 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: 8676
diff changeset
   862
	-- previous steps to have already been performed
10640
a9c975a0f113 util.startup: expose current process type (prosody/prosodyctl) in the global prosody object
Matthew Wild <mwild1@gmail.com>
parents: 10608
diff changeset
   863
	prosody.process_type = "prosody";
10601
25a3c8134b0a prosody/util.startup: Switch to parse_args() for --root and --config
Matthew Wild <mwild1@gmail.com>
parents: 10600
diff changeset
   864
	startup.parse_args();
8702
580c13ed0ca1 util.startup: Initialize the 'prosody' global earlier (various things needs the global util.events instance)
Kim Alvefur <zash@zash.se>
parents: 8701
diff changeset
   865
	startup.init_global_state();
8685
151ecd18d624 prosody, util.startup: Switch from async.once() to long-lived thread, to avoid GC
Matthew Wild <mwild1@gmail.com>
parents: 8676
diff changeset
   866
	startup.read_config();
8751
2fdeb979cc7c util.startup: Initialize logging immediately after configuration is read (which is how it used to work)
Matthew Wild <mwild1@gmail.com>
parents: 8737
diff changeset
   867
	startup.init_logging();
13466
720aed1f5cf2 util.startup: Check root after detecting platform and reading config (thanks SigmaTel71)
Kim Alvefur <zash@zash.se>
parents: 13465
diff changeset
   868
	startup.check_user();
11077
5691b9773c5b util.startup: Configure the GC on startup, using the config or built-in defaults
Matthew Wild <mwild1@gmail.com>
parents: 10951
diff changeset
   869
	startup.init_gc();
11054
51be24b16e8a util.error: Allow optional tracebacks to be injected on errors
Matthew Wild <mwild1@gmail.com>
parents: 10952
diff changeset
   870
	startup.init_errors();
8685
151ecd18d624 prosody, util.startup: Switch from async.once() to long-lived thread, to avoid GC
Matthew Wild <mwild1@gmail.com>
parents: 8676
diff changeset
   871
	startup.sanity_check();
151ecd18d624 prosody, util.startup: Switch from async.once() to long-lived thread, to avoid GC
Matthew Wild <mwild1@gmail.com>
parents: 8676
diff changeset
   872
	startup.sandbox_require();
151ecd18d624 prosody, util.startup: Switch from async.once() to long-lived thread, to avoid GC
Matthew Wild <mwild1@gmail.com>
parents: 8676
diff changeset
   873
	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: 8676
diff changeset
   874
	startup.check_dependencies();
151ecd18d624 prosody, util.startup: Switch from async.once() to long-lived thread, to avoid GC
Matthew Wild <mwild1@gmail.com>
parents: 8676
diff changeset
   875
	startup.load_libraries();
8701
0499f3da0ec4 util.startup: Factor out processing of plugin and data paths into a separate functions
Kim Alvefur <zash@zash.se>
parents: 8695
diff changeset
   876
	startup.setup_plugindir();
11142
2a19d61f4ae4 util.startup: Re-enable installer path setup
Kim Alvefur <zash@zash.se>
parents: 11141
diff changeset
   877
	startup.setup_plugin_install_path();
8701
0499f3da0ec4 util.startup: Factor out processing of plugin and data paths into a separate functions
Kim Alvefur <zash@zash.se>
parents: 8695
diff changeset
   878
	startup.setup_datadir();
8685
151ecd18d624 prosody, util.startup: Switch from async.once() to long-lived thread, to avoid GC
Matthew Wild <mwild1@gmail.com>
parents: 8676
diff changeset
   879
	startup.chdir();
151ecd18d624 prosody, util.startup: Switch from async.once() to long-lived thread, to avoid GC
Matthew Wild <mwild1@gmail.com>
parents: 8676
diff changeset
   880
	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: 8676
diff changeset
   881
	startup.read_version();
151ecd18d624 prosody, util.startup: Switch from async.once() to long-lived thread, to avoid GC
Matthew Wild <mwild1@gmail.com>
parents: 8676
diff changeset
   882
	startup.log_greeting();
9877
dfaeea570f7e util.startup: Give function a more generic name so it can apply to all warnings
Matthew Wild <mwild1@gmail.com>
parents: 9766
diff changeset
   883
	startup.log_startup_warnings();
8685
151ecd18d624 prosody, util.startup: Switch from async.once() to long-lived thread, to avoid GC
Matthew Wild <mwild1@gmail.com>
parents: 8676
diff changeset
   884
	startup.load_secondary_libraries();
11952
dca75cc6fc5a util.startup: Integrate util.promise with net.server main loop
Kim Alvefur <zash@zash.se>
parents: 11874
diff changeset
   885
	startup.init_promise();
11967
f5c6be4a3ecc util.startup: Initialize util.async at startup
Matthew Wild <mwild1@gmail.com>
parents: 11952
diff changeset
   886
	startup.init_async();
8685
151ecd18d624 prosody, util.startup: Switch from async.once() to long-lived thread, to avoid GC
Matthew Wild <mwild1@gmail.com>
parents: 8676
diff changeset
   887
	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: 8676
diff changeset
   888
	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: 8676
diff changeset
   889
	startup.init_global_protection();
13465
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   890
	startup.posix_daemonize();
c673ff1075bd mod_posix: Move everything to util.startup
Kim Alvefur <zash@zash.se>
parents: 13463
diff changeset
   891
	startup.write_pidfile();
13463
790f60c0843b util.startup: Back out 598df17b8ebb
Kim Alvefur <zash@zash.se>
parents: 13462
diff changeset
   892
	startup.hook_posix_signals();
8685
151ecd18d624 prosody, util.startup: Switch from async.once() to long-lived thread, to avoid GC
Matthew Wild <mwild1@gmail.com>
parents: 8676
diff changeset
   893
	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: 8676
diff changeset
   894
	startup.notify_started();
8638
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   895
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
   896
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   897
return startup;