1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
--[[
This file is part of updater-ng. Don't edit it.
]]
local uci_cursor = nil
if uci then
uci_cursor = uci.cursor(root_dir .. "/etc/config")
else
ERROR("UCI library is not available. Configuration not used.")
end
local function uci_cnf(name, default)
if uci_cursor then
return uci_cursor:get("updater", "turris", name) or default
else
return default
end
end
-- Configuration variables
local mode = uci_cnf("mode", "branch") -- should we follow branch or version?
local branch = uci_cnf("branch", "hbs") -- which branch to follow
local version = uci_cnf("version", nil) -- which version to follow
-- Verify that we have sensible configuration
if mode == "version" and not version then
WARN("Mode configured to be 'version' but no version provided. Changing mode to 'branch' instead.")
mode = "branch"
end
-- Detect host board
local product = os_release["OPENWRT_DEVICE_PRODUCT"] or os_release["LEDE_DEVICE_PRODUCT"]
if product:match("[Mm]ox") then
board = "mox"
elseif product:match("[Oo]mnia") then
board = "omnia"
elseif product:match("[Tt]urris 1.x") then
board = "turris1x"
else
DIE("Unsupported Turris board: " .. tostring(product))
end
Export('board')
-- Detect container
local env = io.open("/proc/1/environ", "rb")
for name, value in env:read("*a"):gmatch"([^=]+)=([^%z]+)%z?" do
if name == "container" then
container=value
Export("container")
end
end
env:close()
-- Common connection settings for Turris OS scripts
local script_options = {
security = "Remote",
pubkey = {
"file:///etc/updater/keys/release.pub",
"file:///etc/updater/keys/standby.pub",
"file:///etc/updater/keys/test.pub" -- It is normal for this one to not be present in production systems
}
}
-- Turris repository server URL (or override)
local repo_url = "https://repo.turris.cz"
local config, config_error = loadfile("/etc/updater/turris-repo.lua")
if config then
config = config()
if config.url ~= nil then
repo_url = config.url
for _, field in {"pubkey", "ca", "crl", "ocsp"} do
if config[field] ~= nil then
script_options[field] = config[field]
end
end
end
else
WARN("Failed to load /etc/updater/turris-repo.lua: " .. tostring(config_error))
end
-- Common URI to Turris OS lists
local base_url
if mode == "branch" then
base_url = repo_url .. "/" .. branch .. "/" .. board .. "/lists/"
elseif mode == "version" then
base_url = repo_url .. "/archive/" .. version .. "/" .. board .. "/lists/"
else
DIE("Invalid updater.turris.mode specified: " .. mode)
end
-- The distribution base script. It contains the repository and bunch of basic packages
Script(base_url .. "base.lua", script_options)
-- Additional enabled distribution lists forced by boot arguments
if root_dir == "/" then
local cmdf = io.open("/proc/cmdline")
if cmdf then
for cmdarg in cmdf:read():gmatch('[^ ]+') do
local key, value = cmdarg:match('([^=]+)=(.*)')
if key == "turris_lists" then
for list in value:gmatch('[^,]+') do
Script(base_url .. list .. ".lua", script_options)
end
end
end
cmdf:close()
end
end
|