Software /
code /
prosody
Annotate
util/dependencies.lua @ 13134:638f627e707f
util.datamanager: Add O(1) list indexing with on-disk index
Index file contains offsets and lengths of each item() which allows
seeking directly to each item and reading it without parsing the entire
file.
Also allows tricks like binary search, assuming items have some defined
order.
We take advantage of the 1-based indexing in tables to store a magic
header in the 0 position, so that table index 1 ends up at file index 1.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Tue, 11 May 2021 02:09:56 +0200 |
parent | 13114:025c38ee885d |
rev | line source |
---|---|
1523
841d61be198f
Remove version number from copyright headers
Matthew Wild <mwild1@gmail.com>
parents:
896
diff
changeset
|
1 -- Prosody IM |
2923
b7049746bd29
Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents:
2815
diff
changeset
|
2 -- Copyright (C) 2008-2010 Matthew Wild |
b7049746bd29
Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents:
2815
diff
changeset
|
3 -- Copyright (C) 2008-2010 Waqas Hussain |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
4426
diff
changeset
|
4 -- |
758 | 5 -- This project is MIT/X11 licensed. Please see the |
6 -- COPYING file in the source package for more information. | |
519
cccd610a0ef9
Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents:
449
diff
changeset
|
7 -- |
cccd610a0ef9
Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents:
449
diff
changeset
|
8 |
6777
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
6067
diff
changeset
|
9 local function softreq(...) local ok, lib = pcall(require, ...); if ok then return lib; else return nil, lib; end end |
408
eb1a0960cefb
Friendlier messages on missing dependencies
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
10 |
2513
a8aa7616b154
util.dependencies: Load luarocks.loader/luarocks.require
Matthew Wild <mwild1@gmail.com>
parents:
2510
diff
changeset
|
11 -- Required to be able to find packages installed with luarocks |
a8aa7616b154
util.dependencies: Load luarocks.loader/luarocks.require
Matthew Wild <mwild1@gmail.com>
parents:
2510
diff
changeset
|
12 if not softreq "luarocks.loader" then -- LuaRocks 2.x |
a8aa7616b154
util.dependencies: Load luarocks.loader/luarocks.require
Matthew Wild <mwild1@gmail.com>
parents:
2510
diff
changeset
|
13 softreq "luarocks.require"; -- LuaRocks <1.x |
a8aa7616b154
util.dependencies: Load luarocks.loader/luarocks.require
Matthew Wild <mwild1@gmail.com>
parents:
2510
diff
changeset
|
14 end |
408
eb1a0960cefb
Friendlier messages on missing dependencies
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
15 |
10535
29c1a3bf1d29
util.dependencies: Pass require error to error formatting function
Kim Alvefur <zash@zash.se>
parents:
10406
diff
changeset
|
16 local function missingdep(name, sources, msg, err) -- luacheck: ignore err |
29c1a3bf1d29
util.dependencies: Pass require error to error formatting function
Kim Alvefur <zash@zash.se>
parents:
10406
diff
changeset
|
17 -- TODO print something about the underlying error, useful for debugging |
409
2269e9cbe153
Add MD5 to the list of checked dependencies
Matthew Wild <mwild1@gmail.com>
parents:
408
diff
changeset
|
18 print(""); |
2269e9cbe153
Add MD5 to the list of checked dependencies
Matthew Wild <mwild1@gmail.com>
parents:
408
diff
changeset
|
19 print("**************************"); |
408
eb1a0960cefb
Friendlier messages on missing dependencies
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
20 print("Prosody was unable to find "..tostring(name)); |
eb1a0960cefb
Friendlier messages on missing dependencies
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
21 print("This package can be obtained in the following ways:"); |
eb1a0960cefb
Friendlier messages on missing dependencies
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
22 print(""); |
10906
a1fed82c44b9
util.dependencies: Use util.human.io.table to replace custom layout code
Matthew Wild <mwild1@gmail.com>
parents:
10535
diff
changeset
|
23 for _, row in ipairs(sources) do |
13114
025c38ee885d
util.dependencies: Print tables itself to reduce number of imports
Kim Alvefur <zash@zash.se>
parents:
12975
diff
changeset
|
24 print(string.format("%15s | %s", table.unpack(row))); |
408
eb1a0960cefb
Friendlier messages on missing dependencies
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
25 end |
410
5ce6801ad2e4
Trivial whitespace fix in the missing dependency message
Matthew Wild <mwild1@gmail.com>
parents:
409
diff
changeset
|
26 print(""); |
408
eb1a0960cefb
Friendlier messages on missing dependencies
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
27 print(msg or (name.." is required for Prosody to run, so we will now exit.")); |
7359
a5a080c12c96
Update every link to the documentation to use HTTPS
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
7264
diff
changeset
|
28 print("More help can be found on our website, at https://prosody.im/doc/depends"); |
409
2269e9cbe153
Add MD5 to the list of checked dependencies
Matthew Wild <mwild1@gmail.com>
parents:
408
diff
changeset
|
29 print("**************************"); |
2269e9cbe153
Add MD5 to the list of checked dependencies
Matthew Wild <mwild1@gmail.com>
parents:
408
diff
changeset
|
30 print(""); |
408
eb1a0960cefb
Friendlier messages on missing dependencies
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
31 end |
eb1a0960cefb
Friendlier messages on missing dependencies
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
32 |
6777
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
6067
diff
changeset
|
33 local function check_dependencies() |
12572
35a9ed6b7896
util.dependencies: Reject Lua 5.1, Lua 5.2 or later is now required (see #1600)
Kim Alvefur <zash@zash.se>
parents:
12569
diff
changeset
|
34 if _VERSION < "Lua 5.2" then |
6065
9ab23488a17c
util.dependencies: Check for Lua 5.1. We don't currently support any other versions. LuaJIT identifies as 5.1.
Waqas Hussain <waqas20@gmail.com>
parents:
6043
diff
changeset
|
35 print "***********************************" |
9ab23488a17c
util.dependencies: Check for Lua 5.1. We don't currently support any other versions. LuaJIT identifies as 5.1.
Waqas Hussain <waqas20@gmail.com>
parents:
6043
diff
changeset
|
36 print("Unsupported Lua version: ".._VERSION); |
12572
35a9ed6b7896
util.dependencies: Reject Lua 5.1, Lua 5.2 or later is now required (see #1600)
Kim Alvefur <zash@zash.se>
parents:
12569
diff
changeset
|
37 print("At least Lua 5.2 is required."); |
6065
9ab23488a17c
util.dependencies: Check for Lua 5.1. We don't currently support any other versions. LuaJIT identifies as 5.1.
Waqas Hussain <waqas20@gmail.com>
parents:
6043
diff
changeset
|
38 print "***********************************" |
9ab23488a17c
util.dependencies: Check for Lua 5.1. We don't currently support any other versions. LuaJIT identifies as 5.1.
Waqas Hussain <waqas20@gmail.com>
parents:
6043
diff
changeset
|
39 return false; |
9ab23488a17c
util.dependencies: Check for Lua 5.1. We don't currently support any other versions. LuaJIT identifies as 5.1.
Waqas Hussain <waqas20@gmail.com>
parents:
6043
diff
changeset
|
40 end |
9ab23488a17c
util.dependencies: Check for Lua 5.1. We don't currently support any other versions. LuaJIT identifies as 5.1.
Waqas Hussain <waqas20@gmail.com>
parents:
6043
diff
changeset
|
41 |
2510
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
42 local fatal; |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
4426
diff
changeset
|
43 |
10535
29c1a3bf1d29
util.dependencies: Pass require error to error formatting function
Kim Alvefur <zash@zash.se>
parents:
10406
diff
changeset
|
44 local lxp, err = softreq "lxp" |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
4426
diff
changeset
|
45 |
2510
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
46 if not lxp then |
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
47 missingdep("luaexpat", { |
12286
ad88732eea51
util.dependencies: Refer to 'apt' instead of 'apt-get'
Kim Alvefur <zash@zash.se>
parents:
12147
diff
changeset
|
48 { "Debian/Ubuntu", "sudo apt install lua-expat" }; |
10906
a1fed82c44b9
util.dependencies: Use util.human.io.table to replace custom layout code
Matthew Wild <mwild1@gmail.com>
parents:
10535
diff
changeset
|
49 { "luarocks", "luarocks install luaexpat" }; |
a1fed82c44b9
util.dependencies: Use util.human.io.table to replace custom layout code
Matthew Wild <mwild1@gmail.com>
parents:
10535
diff
changeset
|
50 { "Source", "http://matthewwild.co.uk/projects/luaexpat/" }; |
10535
29c1a3bf1d29
util.dependencies: Pass require error to error formatting function
Kim Alvefur <zash@zash.se>
parents:
10406
diff
changeset
|
51 }, nil, err); |
2510
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
52 fatal = true; |
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
53 end |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
4426
diff
changeset
|
54 |
10535
29c1a3bf1d29
util.dependencies: Pass require error to error formatting function
Kim Alvefur <zash@zash.se>
parents:
10406
diff
changeset
|
55 local socket, err = softreq "socket" |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
4426
diff
changeset
|
56 |
2510
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
57 if not socket then |
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
58 missingdep("luasocket", { |
12286
ad88732eea51
util.dependencies: Refer to 'apt' instead of 'apt-get'
Kim Alvefur <zash@zash.se>
parents:
12147
diff
changeset
|
59 { "Debian/Ubuntu", "sudo apt install lua-socket" }; |
10906
a1fed82c44b9
util.dependencies: Use util.human.io.table to replace custom layout code
Matthew Wild <mwild1@gmail.com>
parents:
10535
diff
changeset
|
60 { "luarocks", "luarocks install luasocket" }; |
a1fed82c44b9
util.dependencies: Use util.human.io.table to replace custom layout code
Matthew Wild <mwild1@gmail.com>
parents:
10535
diff
changeset
|
61 { "Source", "http://www.tecgraf.puc-rio.br/~diego/professional/luasocket/" }; |
10535
29c1a3bf1d29
util.dependencies: Pass require error to error formatting function
Kim Alvefur <zash@zash.se>
parents:
10406
diff
changeset
|
62 }, nil, err); |
2510
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
63 fatal = true; |
9494
b19f676203fd
util.dependencies: Add compat code for normalization of socket constructors
Kim Alvefur <zash@zash.se>
parents:
8235
diff
changeset
|
64 elseif not socket.tcp4 then |
b19f676203fd
util.dependencies: Add compat code for normalization of socket constructors
Kim Alvefur <zash@zash.se>
parents:
8235
diff
changeset
|
65 -- COMPAT LuaSocket before being IP-version agnostic |
b19f676203fd
util.dependencies: Add compat code for normalization of socket constructors
Kim Alvefur <zash@zash.se>
parents:
8235
diff
changeset
|
66 socket.tcp4 = socket.tcp; |
b19f676203fd
util.dependencies: Add compat code for normalization of socket constructors
Kim Alvefur <zash@zash.se>
parents:
8235
diff
changeset
|
67 socket.udp4 = socket.udp; |
2510
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
68 end |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
4426
diff
changeset
|
69 |
2510
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
70 local lfs, err = softreq "lfs" |
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
71 if not lfs then |
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
72 missingdep("luafilesystem", { |
10906
a1fed82c44b9
util.dependencies: Use util.human.io.table to replace custom layout code
Matthew Wild <mwild1@gmail.com>
parents:
10535
diff
changeset
|
73 { "luarocks", "luarocks install luafilesystem" }; |
12286
ad88732eea51
util.dependencies: Refer to 'apt' instead of 'apt-get'
Kim Alvefur <zash@zash.se>
parents:
12147
diff
changeset
|
74 { "Debian/Ubuntu", "sudo apt install lua-filesystem" }; |
10906
a1fed82c44b9
util.dependencies: Use util.human.io.table to replace custom layout code
Matthew Wild <mwild1@gmail.com>
parents:
10535
diff
changeset
|
75 { "Source", "http://www.keplerproject.org/luafilesystem/" }; |
10535
29c1a3bf1d29
util.dependencies: Pass require error to error formatting function
Kim Alvefur <zash@zash.se>
parents:
10406
diff
changeset
|
76 }, nil, err); |
2510
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
77 fatal = true; |
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
78 end |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
4426
diff
changeset
|
79 |
10535
29c1a3bf1d29
util.dependencies: Pass require error to error formatting function
Kim Alvefur <zash@zash.se>
parents:
10406
diff
changeset
|
80 local ssl, err = softreq "ssl" |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
4426
diff
changeset
|
81 |
2510
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
82 if not ssl then |
2157
7cb0aa497326
util.dependencies: Clearer message, add homepages, etc.
Matthew Wild <mwild1@gmail.com>
parents:
2156
diff
changeset
|
83 missingdep("LuaSec", { |
12286
ad88732eea51
util.dependencies: Refer to 'apt' instead of 'apt-get'
Kim Alvefur <zash@zash.se>
parents:
12147
diff
changeset
|
84 { "Debian/Ubuntu", "sudo apt install lua-sec" }; |
10906
a1fed82c44b9
util.dependencies: Use util.human.io.table to replace custom layout code
Matthew Wild <mwild1@gmail.com>
parents:
10535
diff
changeset
|
85 { "luarocks", "luarocks install luasec" }; |
a1fed82c44b9
util.dependencies: Use util.human.io.table to replace custom layout code
Matthew Wild <mwild1@gmail.com>
parents:
10535
diff
changeset
|
86 { "Source", "https://github.com/brunoos/luasec" }; |
12331
49739369dcad
core.certmanager: Turn soft dependency on LuaSec into a hard
Kim Alvefur <zash@zash.se>
parents:
12286
diff
changeset
|
87 }, nil, err); |
413
4b61529d0884
Refuse to run without SSL/TLS unless run_without_ssl is set in config
Matthew Wild <mwild1@gmail.com>
parents:
410
diff
changeset
|
88 end |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
4426
diff
changeset
|
89 |
12975
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12572
diff
changeset
|
90 local bit, err = softreq"prosody.util.bitcompat"; |
7767
36bf9ed87ae1
util.dependencies: Add check and info about lua-bitops (for mod_websockets)
Kim Alvefur <zash@zash.se>
parents:
7766
diff
changeset
|
91 |
36bf9ed87ae1
util.dependencies: Add check and info about lua-bitops (for mod_websockets)
Kim Alvefur <zash@zash.se>
parents:
7766
diff
changeset
|
92 if not bit then |
36bf9ed87ae1
util.dependencies: Add check and info about lua-bitops (for mod_websockets)
Kim Alvefur <zash@zash.se>
parents:
7766
diff
changeset
|
93 missingdep("lua-bitops", { |
12286
ad88732eea51
util.dependencies: Refer to 'apt' instead of 'apt-get'
Kim Alvefur <zash@zash.se>
parents:
12147
diff
changeset
|
94 { "Debian/Ubuntu", "sudo apt install lua-bitop" }; |
10906
a1fed82c44b9
util.dependencies: Use util.human.io.table to replace custom layout code
Matthew Wild <mwild1@gmail.com>
parents:
10535
diff
changeset
|
95 { "luarocks", "luarocks install luabitop" }; |
a1fed82c44b9
util.dependencies: Use util.human.io.table to replace custom layout code
Matthew Wild <mwild1@gmail.com>
parents:
10535
diff
changeset
|
96 { "Source", "http://bitop.luajit.org/" }; |
10535
29c1a3bf1d29
util.dependencies: Pass require error to error formatting function
Kim Alvefur <zash@zash.se>
parents:
10406
diff
changeset
|
97 }, "WebSocket support will not be available", err); |
7767
36bf9ed87ae1
util.dependencies: Add check and info about lua-bitops (for mod_websockets)
Kim Alvefur <zash@zash.se>
parents:
7766
diff
changeset
|
98 end |
36bf9ed87ae1
util.dependencies: Add check and info about lua-bitops (for mod_websockets)
Kim Alvefur <zash@zash.se>
parents:
7766
diff
changeset
|
99 |
10975
f997e3e8bc23
util.dependencies: Quiet luacheck
Kim Alvefur <zash@zash.se>
parents:
10974
diff
changeset
|
100 local unbound, err = softreq"lunbound"; -- luacheck: ignore 211/err |
12147
02481502c3dc
util.dependencies: Enable warning about missing lua-unbound
Kim Alvefur <zash@zash.se>
parents:
11973
diff
changeset
|
101 if not unbound then |
10963
80733851be8b
util.dependencies: Add awareness of luaunbound
Kim Alvefur <zash@zash.se>
parents:
10906
diff
changeset
|
102 missingdep("lua-unbound", { |
12286
ad88732eea51
util.dependencies: Refer to 'apt' instead of 'apt-get'
Kim Alvefur <zash@zash.se>
parents:
12147
diff
changeset
|
103 { "Debian/Ubuntu", "sudo apt install lua-unbound" }; |
10963
80733851be8b
util.dependencies: Add awareness of luaunbound
Kim Alvefur <zash@zash.se>
parents:
10906
diff
changeset
|
104 { "luarocks", "luarocks install luaunbound" }; |
80733851be8b
util.dependencies: Add awareness of luaunbound
Kim Alvefur <zash@zash.se>
parents:
10906
diff
changeset
|
105 { "Source", "https://www.zash.se/luaunbound.html" }; |
80733851be8b
util.dependencies: Add awareness of luaunbound
Kim Alvefur <zash@zash.se>
parents:
10906
diff
changeset
|
106 }, "Old DNS resolver library will be used", err); |
10965
f5d5fc409680
util.dependencies: Prefer net.unbound over net.adns
Kim Alvefur <zash@zash.se>
parents:
10963
diff
changeset
|
107 else |
12975
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12572
diff
changeset
|
108 package.preload["prosody.net.adns"] = function () |
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12572
diff
changeset
|
109 local ub = require "prosody.net.unbound"; |
10965
f5d5fc409680
util.dependencies: Prefer net.unbound over net.adns
Kim Alvefur <zash@zash.se>
parents:
10963
diff
changeset
|
110 return ub; |
f5d5fc409680
util.dependencies: Prefer net.unbound over net.adns
Kim Alvefur <zash@zash.se>
parents:
10963
diff
changeset
|
111 end |
7767
36bf9ed87ae1
util.dependencies: Add check and info about lua-bitops (for mod_websockets)
Kim Alvefur <zash@zash.se>
parents:
7766
diff
changeset
|
112 end |
36bf9ed87ae1
util.dependencies: Add check and info about lua-bitops (for mod_websockets)
Kim Alvefur <zash@zash.se>
parents:
7766
diff
changeset
|
113 |
12975
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12572
diff
changeset
|
114 local encodings, err = softreq "prosody.util.encodings" |
2510
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
115 if not encodings then |
7264
6d97895c2bd7
util.dependencies: Show the full error when a symbol is not found (i.e., when running Prosody with the wrong version of Lua).
Thijs Alkemade <me@thijsalkema.de>
parents:
7007
diff
changeset
|
116 if err:match("module '[^']*' not found") then |
12975
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12572
diff
changeset
|
117 missingdep("prosody.util.encodings", { |
10906
a1fed82c44b9
util.dependencies: Use util.human.io.table to replace custom layout code
Matthew Wild <mwild1@gmail.com>
parents:
10535
diff
changeset
|
118 { "Windows", "Make sure you have encodings.dll from the Prosody distribution in util/" }; |
a1fed82c44b9
util.dependencies: Use util.human.io.table to replace custom layout code
Matthew Wild <mwild1@gmail.com>
parents:
10535
diff
changeset
|
119 { "GNU/Linux", "Run './configure' and 'make' in the Prosody source directory to build util/encodings.so" }; |
7875
3fbfd7210d78
util.dependencies: Normalize whitespace
Kim Alvefur <zash@zash.se>
parents:
7813
diff
changeset
|
120 }); |
2510
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
121 else |
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
122 print "***********************************" |
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
123 print("util/encodings couldn't be loaded. Check that you have a recent version of libidn"); |
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
124 print "" |
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
125 print("The full error was:"); |
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
126 print(err) |
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
127 print "***********************************" |
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
128 end |
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
129 fatal = true; |
2169
c06fdb6b57bd
util.dependencies: Log an error if the current version of LuaSec installed contains The Bug (thanks Remko)
Matthew Wild <mwild1@gmail.com>
parents:
2158
diff
changeset
|
130 end |
408
eb1a0960cefb
Friendlier messages on missing dependencies
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
131 |
12975
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12572
diff
changeset
|
132 local hashes, err = softreq "prosody.util.hashes" |
2510
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
133 if not hashes then |
7264
6d97895c2bd7
util.dependencies: Show the full error when a symbol is not found (i.e., when running Prosody with the wrong version of Lua).
Thijs Alkemade <me@thijsalkema.de>
parents:
7007
diff
changeset
|
134 if err:match("module '[^']*' not found") then |
12975
d10957394a3c
util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12572
diff
changeset
|
135 missingdep("prosody.util.hashes", { |
10906
a1fed82c44b9
util.dependencies: Use util.human.io.table to replace custom layout code
Matthew Wild <mwild1@gmail.com>
parents:
10535
diff
changeset
|
136 { "Windows", "Make sure you have hashes.dll from the Prosody distribution in util/" }; |
a1fed82c44b9
util.dependencies: Use util.human.io.table to replace custom layout code
Matthew Wild <mwild1@gmail.com>
parents:
10535
diff
changeset
|
137 { "GNU/Linux", "Run './configure' and 'make' in the Prosody source directory to build util/hashes.so" }; |
7875
3fbfd7210d78
util.dependencies: Normalize whitespace
Kim Alvefur <zash@zash.se>
parents:
7813
diff
changeset
|
138 }); |
3fbfd7210d78
util.dependencies: Normalize whitespace
Kim Alvefur <zash@zash.se>
parents:
7813
diff
changeset
|
139 else |
2510
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
140 print "***********************************" |
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
141 print("util/hashes couldn't be loaded. Check that you have a recent version of OpenSSL (libcrypto in particular)"); |
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
142 print "" |
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
143 print("The full error was:"); |
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
144 print(err) |
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
145 print "***********************************" |
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
146 end |
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
147 fatal = true; |
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
148 end |
7767
36bf9ed87ae1
util.dependencies: Add check and info about lua-bitops (for mod_websockets)
Kim Alvefur <zash@zash.se>
parents:
7766
diff
changeset
|
149 |
2510
97b5ea975cb9
util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
Matthew Wild <mwild1@gmail.com>
parents:
2299
diff
changeset
|
150 return not fatal; |
408
eb1a0960cefb
Friendlier messages on missing dependencies
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
151 end |
eb1a0960cefb
Friendlier messages on missing dependencies
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
152 |
6777
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
6067
diff
changeset
|
153 local function log_warnings() |
11958
31f83a645ce6
util.dependencies: Consider Lua 5.4 Supported:tm:
Kim Alvefur <zash@zash.se>
parents:
11141
diff
changeset
|
154 if _VERSION > "Lua 5.4" then |
7007
e28fbe6dd424
util.dependencies: Use prosody.log() instead of global log()
Matthew Wild <mwild1@gmail.com>
parents:
6778
diff
changeset
|
155 prosody.log("warn", "Support for %s is experimental, please report any issues", _VERSION); |
11959
814b750aa2d0
util.dependencies: Discourage Lua 5.1
Kim Alvefur <zash@zash.se>
parents:
11958
diff
changeset
|
156 elseif _VERSION < "Lua 5.2" then |
12569
b5d9f1829b15
util.dependencies: Deprecate support for Lua 5.1, this is your final warning
Kim Alvefur <zash@zash.se>
parents:
12331
diff
changeset
|
157 prosody.log("warn", "%s support is deprecated, upgrade as soon as possible", _VERSION); |
6778
4009ae66e0f0
util.dependencies: Only abort on Lua versions before 5.1, log a warning about 5.2 and above for now
Kim Alvefur <zash@zash.se>
parents:
6777
diff
changeset
|
158 end |
6777
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
6067
diff
changeset
|
159 local ssl = softreq"ssl"; |
3904
f93163081b3c
prosody, prosodyctl, util.dependencies: Split checking and logging of dependencies so we can check hard deps before the config and logging is loaded
Matthew Wild <mwild1@gmail.com>
parents:
2925
diff
changeset
|
160 if ssl then |
f93163081b3c
prosody, prosodyctl, util.dependencies: Split checking and logging of dependencies so we can check hard deps before the config and logging is loaded
Matthew Wild <mwild1@gmail.com>
parents:
2925
diff
changeset
|
161 local major, minor, veryminor, patched = ssl._VERSION:match("(%d+)%.(%d+)%.?(%d*)(M?)"); |
f93163081b3c
prosody, prosodyctl, util.dependencies: Split checking and logging of dependencies so we can check hard deps before the config and logging is loaded
Matthew Wild <mwild1@gmail.com>
parents:
2925
diff
changeset
|
162 if not major or ((tonumber(major) == 0 and (tonumber(minor) or 0) <= 3 and (tonumber(veryminor) or 0) <= 2) and patched ~= "M") then |
7359
a5a080c12c96
Update every link to the documentation to use HTTPS
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
7264
diff
changeset
|
163 prosody.log("error", "This version of LuaSec contains a known bug that causes disconnects, see https://prosody.im/doc/depends"); |
3904
f93163081b3c
prosody, prosodyctl, util.dependencies: Split checking and logging of dependencies so we can check hard deps before the config and logging is loaded
Matthew Wild <mwild1@gmail.com>
parents:
2925
diff
changeset
|
164 end |
f93163081b3c
prosody, prosodyctl, util.dependencies: Split checking and logging of dependencies so we can check hard deps before the config and logging is loaded
Matthew Wild <mwild1@gmail.com>
parents:
2925
diff
changeset
|
165 end |
6777
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
6067
diff
changeset
|
166 local lxp = softreq"lxp"; |
4426
ee65aa40ef60
util.dependencies, util.xmppstream: Move LuaExpat version checking to util.dependencies.
Waqas Hussain <waqas20@gmail.com>
parents:
4236
diff
changeset
|
167 if lxp then |
ee65aa40ef60
util.dependencies, util.xmppstream: Move LuaExpat version checking to util.dependencies.
Waqas Hussain <waqas20@gmail.com>
parents:
4236
diff
changeset
|
168 if not pcall(lxp.new, { StartDoctypeDecl = false }) then |
7007
e28fbe6dd424
util.dependencies: Use prosody.log() instead of global log()
Matthew Wild <mwild1@gmail.com>
parents:
6778
diff
changeset
|
169 prosody.log("error", "The version of LuaExpat on your system leaves Prosody " |
4426
ee65aa40ef60
util.dependencies, util.xmppstream: Move LuaExpat version checking to util.dependencies.
Waqas Hussain <waqas20@gmail.com>
parents:
4236
diff
changeset
|
170 .."vulnerable to denial-of-service attacks. You should upgrade to " |
6043
29d2dd705148
util.dependencies: Log error when LuaExpat is not capable of enforcing stanza size limits
Matthew Wild <mwild1@gmail.com>
parents:
4426
diff
changeset
|
171 .."LuaExpat 1.3.0 or higher as soon as possible. See " |
7359
a5a080c12c96
Update every link to the documentation to use HTTPS
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
7264
diff
changeset
|
172 .."https://prosody.im/doc/depends#luaexpat for more information."); |
6043
29d2dd705148
util.dependencies: Log error when LuaExpat is not capable of enforcing stanza size limits
Matthew Wild <mwild1@gmail.com>
parents:
4426
diff
changeset
|
173 end |
29d2dd705148
util.dependencies: Log error when LuaExpat is not capable of enforcing stanza size limits
Matthew Wild <mwild1@gmail.com>
parents:
4426
diff
changeset
|
174 if not lxp.new({}).getcurrentbytecount then |
7007
e28fbe6dd424
util.dependencies: Use prosody.log() instead of global log()
Matthew Wild <mwild1@gmail.com>
parents:
6778
diff
changeset
|
175 prosody.log("error", "The version of LuaExpat on your system does not support " |
6043
29d2dd705148
util.dependencies: Log error when LuaExpat is not capable of enforcing stanza size limits
Matthew Wild <mwild1@gmail.com>
parents:
4426
diff
changeset
|
176 .."stanza size limits, which may leave servers on untrusted " |
29d2dd705148
util.dependencies: Log error when LuaExpat is not capable of enforcing stanza size limits
Matthew Wild <mwild1@gmail.com>
parents:
4426
diff
changeset
|
177 .."networks (e.g. the internet) vulnerable to denial-of-service " |
29d2dd705148
util.dependencies: Log error when LuaExpat is not capable of enforcing stanza size limits
Matthew Wild <mwild1@gmail.com>
parents:
4426
diff
changeset
|
178 .."attacks. You should upgrade to LuaExpat 1.3.0 or higher as " |
29d2dd705148
util.dependencies: Log error when LuaExpat is not capable of enforcing stanza size limits
Matthew Wild <mwild1@gmail.com>
parents:
4426
diff
changeset
|
179 .."soon as possible. See " |
7359
a5a080c12c96
Update every link to the documentation to use HTTPS
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
7264
diff
changeset
|
180 .."https://prosody.im/doc/depends#luaexpat for more information."); |
4426
ee65aa40ef60
util.dependencies, util.xmppstream: Move LuaExpat version checking to util.dependencies.
Waqas Hussain <waqas20@gmail.com>
parents:
4236
diff
changeset
|
181 end |
ee65aa40ef60
util.dependencies, util.xmppstream: Move LuaExpat version checking to util.dependencies.
Waqas Hussain <waqas20@gmail.com>
parents:
4236
diff
changeset
|
182 end |
3904
f93163081b3c
prosody, prosodyctl, util.dependencies: Split checking and logging of dependencies so we can check hard deps before the config and logging is loaded
Matthew Wild <mwild1@gmail.com>
parents:
2925
diff
changeset
|
183 end |
742
b9f59372eb4e
util.dependencies: Show useful messages when our own libraries are not found, too
Matthew Wild <mwild1@gmail.com>
parents:
615
diff
changeset
|
184 |
6777
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
6067
diff
changeset
|
185 return { |
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
6067
diff
changeset
|
186 softreq = softreq; |
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
6067
diff
changeset
|
187 missingdep = missingdep; |
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
6067
diff
changeset
|
188 check_dependencies = check_dependencies; |
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
6067
diff
changeset
|
189 log_warnings = log_warnings; |
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
6067
diff
changeset
|
190 }; |