ASR_BASE
Change-Id: Icf3719cc0afe3eeb3edc7fa80a2eb5199ca9dda1
diff --git a/package/system/opkg/Makefile b/package/system/opkg/Makefile
new file mode 100644
index 0000000..76634b0
--- /dev/null
+++ b/package/system/opkg/Makefile
@@ -0,0 +1,99 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+#
+# Copyright (C) 2006-2021 OpenWrt.org
+#
+
+include $(TOPDIR)/rules.mk
+include $(INCLUDE_DIR)/kernel.mk
+
+PKG_NAME:=opkg
+PKG_RELEASE:=1
+PKG_FLAGS:=essential
+
+PKG_SOURCE_PROTO:=git
+PKG_SOURCE_URL=$(PROJECT_GIT)/project/opkg-lede.git
+PKG_SOURCE_DATE:=2024-10-16
+PKG_SOURCE_VERSION:=38eccbb1fd694d4798ac1baf88f9ba83d1eac616
+PKG_MIRROR_HASH:=992fa3ebe71619e3a424b727e7b7295076496347b0f4f8ce2b558e0e4fcc19e9
+
+PKG_LICENSE:=GPL-2.0
+PKG_LICENSE_FILES:=COPYING
+
+PKG_MAINTAINER:=Jo-Philipp Wich <jo@mein.io>
+
+# Extend depends from version.mk
+PKG_CONFIG_DEPENDS += \
+ CONFIG_SIGNATURE_CHECK \
+ CONFIG_TARGET_INIT_PATH
+
+HOST_BUILD_DEPENDS:=libubox/host
+
+PKG_BUILD_FLAGS:=gc-sections
+
+include $(INCLUDE_DIR)/package.mk
+include $(INCLUDE_DIR)/host-build.mk
+include $(INCLUDE_DIR)/cmake.mk
+
+define Package/opkg
+ SECTION:=base
+ CATEGORY:=Base system
+ TITLE:=opkg package manager
+ DEPENDS:=+uclient-fetch +libpthread +libubox
+ DEFAULT:=y if !USE_APK
+ URL:=$(PKG_SOURCE_URL)
+ MENU:=1
+endef
+
+define Package/opkg/description
+ Lightweight package management system
+ opkg is the opkg Package Management System, for handling
+ installation and removal of packages on a system. It can
+ recursively follow dependencies and download all packages
+ necessary to install a particular package.
+
+ opkg knows how to install both .ipk and .deb packages.
+endef
+
+define Package/opkg/conffiles
+/etc/opkg.conf
+/etc/opkg/keys/
+/etc/opkg/customfeeds.conf
+endef
+
+EXTRA_CFLAGS += $(TARGET_CPPFLAGS)
+
+CMAKE_OPTIONS += \
+ -DBUILD_TESTS=OFF \
+ -DHOST_CPU=$(PKGARCH) \
+ -DPATH_SPEC="$(TARGET_INIT_PATH)" \
+ -DVERSION="$(PKG_SOURCE_VERSION) ($(PKG_SOURCE_DATE))"
+
+CMAKE_HOST_OPTIONS += \
+ -DSTATIC_UBOX=ON \
+ -DBUILD_TESTS=OFF \
+ -DHOST_CPU=$(PKGARCH) \
+ -DLOCK_FILE=/tmp/opkg.lock \
+ -DVERSION="$(PKG_SOURCE_VERSION) ($(PKG_SOURCE_DATE))"
+
+define Package/opkg/install
+ $(INSTALL_DIR) $(1)/usr/lib/opkg
+ $(INSTALL_DIR) $(1)/bin
+ $(INSTALL_DIR) $(1)/etc/opkg
+ $(INSTALL_DIR) $(1)/etc/uci-defaults
+ $(INSTALL_DATA) ./files/customfeeds.conf $(1)/etc/opkg/customfeeds.conf
+ $(INSTALL_DATA) ./files/opkg$(2).conf $(1)/etc/opkg.conf
+ $(INSTALL_BIN) ./files/20_migrate-feeds $(1)/etc/uci-defaults/
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/opkg-cl $(1)/bin/opkg
+ ifneq ($(CONFIG_SIGNATURE_CHECK),)
+ echo "option check_signature" >> $(1)/etc/opkg.conf
+ endif
+ $(INSTALL_DIR) $(1)/usr/sbin
+ $(INSTALL_BIN) ./files/opkg-key $(1)/usr/sbin/
+endef
+
+define Host/Install
+ $(INSTALL_BIN) $(HOST_BUILD_DIR)/src/opkg-cl $(STAGING_DIR_HOST)/bin/opkg
+endef
+
+$(eval $(call BuildPackage,opkg))
+$(eval $(call HostBuild))
diff --git a/package/system/opkg/files/20_migrate-feeds b/package/system/opkg/files/20_migrate-feeds
new file mode 100644
index 0000000..a4bd725
--- /dev/null
+++ b/package/system/opkg/files/20_migrate-feeds
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+[ -f /etc/opkg.conf ] && grep -q "src/" /etc/opkg.conf || exit 0
+
+echo -e "# Old feeds from previous image\n# Uncomment to reenable\n" >> /etc/opkg/customfeeds.conf
+sed -n "s/.*\(src\/.*\)/# \1/p" /etc/opkg.conf >> /etc/opkg/customfeeds.conf
+sed -i "/.*src\/.*/d" /etc/opkg.conf
+
+exit 0
diff --git a/package/system/opkg/files/customfeeds.conf b/package/system/opkg/files/customfeeds.conf
new file mode 100644
index 0000000..f130113
--- /dev/null
+++ b/package/system/opkg/files/customfeeds.conf
@@ -0,0 +1,3 @@
+# add your custom package feeds here
+#
+# src/gz example_feed_name http://www.example.com/path/to/files
diff --git a/package/system/opkg/files/opkg-key b/package/system/opkg/files/opkg-key
new file mode 100755
index 0000000..51d1857
--- /dev/null
+++ b/package/system/opkg/files/opkg-key
@@ -0,0 +1,58 @@
+#!/bin/sh
+
+OPKG_KEYS="${OPKG_KEYS:-/etc/opkg/keys}"
+
+usage() {
+ cat <<EOF
+Usage: $0 <command> <arguments...>
+Commands:
+ add <file>: Add keyfile <file> to opkg trusted keys
+ remove <file>: Remove keyfile matching <file> from opkg trusted keys
+ verify <sigfile> <list>: Check list file <list> against signature file <sigfile>
+
+EOF
+ exit 1
+}
+
+opkg_key_verify() {
+ local sigfile="$1"
+ local msgfile="$2"
+
+ (
+ zcat "$msgfile" 2>/dev/null ||
+ cat "$msgfile" 2>/dev/null
+ ) | usign -V -P "$OPKG_KEYS" -q -x "$sigfile" -m -
+}
+
+opkg_key_add() {
+ local key="$1"
+ [ -n "$key" ] || usage
+ [ -f "$key" ] || echo "Cannot open file $1"
+ local fingerprint="$(usign -F -p "$key")"
+ mkdir -p "$OPKG_KEYS"
+ cp "$key" "$OPKG_KEYS/$fingerprint"
+}
+
+opkg_key_remove() {
+ local key="$1"
+ [ -n "$key" ] || usage
+ [ -f "$key" ] || echo "Cannot open file $1"
+ local fingerprint="$(usign -F -p "$key")"
+ rm -f "$OPKG_KEYS/$fingerprint"
+}
+
+case "$1" in
+ add)
+ shift
+ opkg_key_add "$@"
+ ;;
+ remove)
+ shift
+ opkg_key_remove "$@"
+ ;;
+ verify)
+ shift
+ opkg_key_verify "$@"
+ ;;
+ *) usage ;;
+esac
diff --git a/package/system/opkg/files/opkg-smime.conf b/package/system/opkg/files/opkg-smime.conf
new file mode 100644
index 0000000..fd2cade
--- /dev/null
+++ b/package/system/opkg/files/opkg-smime.conf
@@ -0,0 +1,6 @@
+dest root /
+dest ram /tmp
+lists_dir ext /var/opkg-lists
+option overlay_root /overlay
+option check_signature 1
+option signature_ca_file /etc/ssl/certs/opkg.pem
diff --git a/package/system/opkg/files/opkg.conf b/package/system/opkg/files/opkg.conf
new file mode 100644
index 0000000..d8d3a2d
--- /dev/null
+++ b/package/system/opkg/files/opkg.conf
@@ -0,0 +1,4 @@
+dest root /
+dest ram /tmp
+lists_dir ext /var/opkg-lists
+option overlay_root /overlay