summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--updater-ng/Makefile75
-rw-r--r--updater-ng/files/turris.lua95
-rw-r--r--updater-ng/files/updater.config4
3 files changed, 174 insertions, 0 deletions
diff --git a/updater-ng/Makefile b/updater-ng/Makefile
new file mode 100644
index 0000000..6a573ed
--- /dev/null
+++ b/updater-ng/Makefile
@@ -0,0 +1,75 @@
+#
+## Copyright (C) 2016-2020 CZ.NIC z.s.p.o. (http://www.nic.cz/)
+#
+## This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+# #
+#
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=updater-ng
+PKG_SOURCE_URL:=https://gitlab.labs.nic.cz/turris/updater/updater.git
+PKG_SOURCE_BRANCH:=libarchive-unpack
+PKG_MAINTAINER:=CZ.NIC <packaging@turris.cz>
+
+PKG_BUILD_DEPENDS:=busybox libb64 uthash argp-standalone
+
+include $(INCLUDE_DIR)/autopkg-branch.mk
+include $(INCLUDE_DIR)/package.mk
+
+define Package/$(PKG_NAME)
+ TITLE:=The next generation updater
+ DEPENDS:=\
+ +liblua \
+ +libuci-lua \
+ +libevent2 \
+ +libcurl \
+ +liburiparser \
+ +libarchive \
+ +usign \
+ +ca-certificates
+endef
+
+define Package/$(PKG_NAME)/install
+ $(INSTALL_DIR) $(1)/usr/lib/
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/lib/libupdater.so $(1)/usr/lib/
+
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/bin/pkgupdate $(1)/usr/bin/
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/bin/pkgtransaction $(1)/usr/bin/
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/update_alternatives.sh $(1)/usr/bin/
+
+ $(INSTALL_DIR) $(1)/etc/updater
+ $(INSTALL_CONF) $(PKG_BUILD_DIR)/src/pkgupdate/configs/conf.lua $(1)/etc/updater
+ $(INSTALL_DIR) $(1)/etc/updater/conf.d
+ $(INSTALL_CONF) ./files/turris.lua $(1)/etc/updater/conf.d/turris.lua
+ $(INSTALL_CONF) $(PKG_BUILD_DIR)/src/pkgupdate/configs/example.lua $(1)/etc/updater/conf.d/example.lua
+
+ $(INSTALL_DIR) $(1)/etc/updater/hook_preupdate
+ touch $(1)/etc/updater/hook_preupdate/.keep
+ $(INSTALL_DIR) $(1)/etc/updater/hook_postupdate
+ touch $(1)/etc/updater/hook_postupdate/.keep
+ $(INSTALL_DIR) $(1)/etc/updater/hook_reboot_required
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/pkgupdate/hook_reboot_required/50-create-notification.sh $(1)/etc/updater/hook_reboot_required/50-create-notification.sh
+
+ # Note: this file is not ever used as appropriate one is generated to medkit
+ # it is here only for reference and to make sure that it exists.
+ $(INSTALL_DIR) $(1)/etc/config
+ $(INSTALL_CONF) ./files/updater.config $(1)/etc/config/updater
+endef
+
+define Package/$(PKG_NAME)/conffiles
+/etc/updater/conf.d/example.lua
+/etc/config/updater
+endef
+
+
+define Build/Compile
+ $(MAKE_VARS) $(MAKE) -C $(PKG_BUILD_DIR) $(MAKE_FLAGS) \
+ NO_DOC=1 LUA_COMPILE:=no \
+ BUSYBOX_EXEC=$(STAGING_DIR)/bin/busybox-static \
+ ARGP_STANDALONE=y \
+ UPDATER_VERSION:=$(PKG_VERSION)
+endef
+
+$(eval $(call BuildPackage,$(PKG_NAME)))
diff --git a/updater-ng/files/turris.lua b/updater-ng/files/turris.lua
new file mode 100644
index 0000000..97a7faf
--- /dev/null
+++ b/updater-ng/files/turris.lua
@@ -0,0 +1,95 @@
+--[[
+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
+local pkglists = uci_cnf("pkglists", {}) -- what additional lists should we use
+
+-- 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
+
+-- Convert pkglists to set set of lists (ensures uniqueness)
+if type(pkglists) == "string" then -- if there is single list then uci returns just a string
+ pkglists = {pkglists}
+end
+local lists = {}
+for _, list in pairs(pkglists) do
+ lists["pkglists/" .. list] = true
+end
+
+-- Load 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
+ lists[list] = true
+ end
+ end
+ end
+ cmdf:close()
+ end
+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')
+
+-- Common URI to Turris OS lists
+local base_url
+if mode == "branch" then
+ base_url = "https://repo.turris.cz/" .. branch .. "/" .. board .. "/lists/"
+elseif mode == "version" then
+ base_url = "https://repo.turris.cz/archive/" .. version .. "/" .. board .. "/lists/"
+else
+ DIE("Invalid updater.turris.mode specified: " .. mode)
+end
+
+-- 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
+ }
+}
+
+-- The distribution base script. It contains the repository and bunch of basic packages
+Script(base_url .. "base.lua", script_options)
+
+-- Additional enabled distribution lists
+for l in pairs(lists) do
+ Script(base_url .. l .. ".lua", script_options)
+end
diff --git a/updater-ng/files/updater.config b/updater-ng/files/updater.config
new file mode 100644
index 0000000..82e220e
--- /dev/null
+++ b/updater-ng/files/updater.config
@@ -0,0 +1,4 @@
+
+config turris 'turris'
+ option mode 'branch'
+