apk and opkg side by side apk
authorPaul Spooren <mail@aparcar.org>
Mon, 6 Feb 2023 20:19:21 +0000 (21:19 +0100)
committerPaul Spooren <mail@aparcar.org>
Mon, 6 Feb 2023 21:40:30 +0000 (22:40 +0100)
Signed-off-by: Paul Spooren <mail@aparcar.org>
README.md
include/feeds.mk
include/image.mk
include/package-ipkg.mk
include/rootfs.mk
include/target.mk
package/base-files/Makefile
package/libs/toolchain/Makefile
package/system/fstools/files/snapshot
scripts/feeds

index 6172e68710ec9fd3990d38adc96eef9611241de0..29ff89f90c214396c8edc15413098ac5eb7bae2f 100644 (file)
--- a/README.md
+++ b/README.md
@@ -66,7 +66,7 @@ make4.1+ perl python3.6+ rsync subversion unzip which
 
 The main repository uses multiple sub-repositories to manage packages of
 different categories. All packages are installed via the OpenWrt package
-manager called `apk`. If you're looking to develop the web interface or port
+manager called `opkg`. If you're looking to develop the web interface or port
 packages to OpenWrt, please find the fitting repository below.
 
 * [LuCI Web Interface](https://github.com/openwrt/luci): Modern and modular
index a27aa709c4167f8078b6eaac3c367143f4226161..87b1562c3edbf7a29242fd6d2ed7d35417e1c6d4 100644 (file)
@@ -14,6 +14,10 @@ ifneq ($(CONFIG_PER_FEED_REPO),)
   PACKAGE_SUBDIRS += $(foreach FEED,$(FEEDS_AVAILABLE),$(OUTPUT_DIR)/packages/$(ARCH_PACKAGES)/$(FEED))
 endif
 
+opkg_package_files = $(wildcard \
+       $(foreach dir,$(PACKAGE_SUBDIRS), \
+         $(foreach pkg,$(1), $(dir)/$(pkg)_*.ipk)))
+
 apk_package_files = $(wildcard \
        $(foreach dir,$(PACKAGE_SUBDIRS), \
          $(foreach pkg,$(1), $(dir)/$(pkg)_*.apk)))
@@ -28,7 +32,21 @@ $(strip $(if $(CONFIG_PER_FEED_REPO), \
 endef
 
 # 1: destination file
-define FeedSourcesAppend
+define FeedSourcesAppendOPKG
+( \
+  echo 'src/gz %d_core %U/targets/%S/packages'; \
+  $(strip $(if $(CONFIG_PER_FEED_REPO), \
+       echo 'src/gz %d_base %U/packages/%A/base'; \
+       $(if $(filter %SNAPSHOT-y,$(VERSION_NUMBER)-$(CONFIG_BUILDBOT)), \
+               echo 'src/gz %d_kmods %U/targets/%S/kmods/$(LINUX_VERSION)-$(LINUX_RELEASE)-$(LINUX_VERMAGIC)';) \
+       $(foreach feed,$(FEEDS_AVAILABLE), \
+               $(if $(CONFIG_FEED_$(feed)), \
+                       echo '$(if $(filter m,$(CONFIG_FEED_$(feed))),# )src/gz %d_$(feed) %U/packages/%A/$(feed)';)))) \
+) >> $(1)
+endef
+
+# 1: destination file
+define FeedSourcesAppendAPK
 ( \
   echo '%U/targets/%S/packages/packages.adb'; \
   $(strip $(if $(CONFIG_PER_FEED_REPO), \
index 3f42ed4369bff83ee14f73a0e0905adfe9595e76..cf4a64980ab51aa9cfb45331df940375773ef926 100644 (file)
@@ -263,10 +263,17 @@ define Image/mkfs/ext4
                $@ $(call mkfs_target_dir,$(1))/
 endef
 
+ifdef CONFIG_USE_APK
 define Image/Manifest
        $(call apk,$(TARGET_DIR_ORIG)) list --quiet --manifest | sort > \
                $(BIN_DIR)/$(IMG_PREFIX)$(if $(PROFILE_SANITIZED),-$(PROFILE_SANITIZED)).manifest
 endef
+else
+define Image/Manifest
+       $(call opkg,$(TARGET_DIR_ORIG)) list-installed > \
+               $(BIN_DIR)/$(IMG_PREFIX)$(if $(PROFILE_SANITIZED),-$(PROFILE_SANITIZED)).manifest
+endef
+endif
 
 define Image/gzip-ext4-padded-squashfs
 
@@ -304,10 +311,15 @@ mkfs_packages_add = $(foreach pkg,$(filter-out -%,$(mkfs_packages)),$(pkg)$(call
 mkfs_packages_remove = $(foreach pkg,$(patsubst -%,%,$(filter -%,$(mkfs_packages))),$(pkg)$(call GetABISuffix,$(pkg)))
 mkfs_cur_target_dir = $(call mkfs_target_dir,pkg=$(target_params))
 
+opkg_target = \
+       $(call opkg,$(mkfs_cur_target_dir)) \
+               -f $(mkfs_cur_target_dir).conf
+
 apk_target = $(call apk,$(mkfs_cur_target_dir))
 
 target-dir-%: FORCE
-       rm -rf $(mkfs_cur_target_dir) $(mkfs_cur_target_dir).apk
+ifdef CONFIG_USE_APK
+       rm -rf $(mkfs_cur_target_dir)
        $(CP) $(TARGET_DIR_ORIG) $(mkfs_cur_target_dir)
        mv $(mkfs_cur_target_dir)/etc/apk/repositories $(mkfs_cur_target_dir).repositories
        $(if $(mkfs_packages_remove), \
@@ -315,8 +327,22 @@ target-dir-%: FORCE
        $(if $(mkfs_packages_add), \
                $(apk_target) add $(mkfs_packages_add))
        mv $(mkfs_cur_target_dir).repositories $(mkfs_cur_target_dir)/etc/apk/repositories
+else
+       rm -rf $(mkfs_cur_target_dir) $(mkfs_cur_target_dir).opkg
+       $(CP) $(TARGET_DIR_ORIG) $(mkfs_cur_target_dir)
+       -mv $(mkfs_cur_target_dir)/etc/opkg $(mkfs_cur_target_dir).opkg
+       echo 'src default file://$(PACKAGE_DIR_ALL)' > $(mkfs_cur_target_dir).conf
+       $(if $(mkfs_packages_remove), \
+               -$(call opkg,$(mkfs_cur_target_dir)) remove \
+                       $(mkfs_packages_remove))
+       $(if $(call opkg_package_files,$(mkfs_packages_add)), \
+               $(opkg_target) update && \
+               $(opkg_target) install \
+                       $(call opkg_package_files,$(mkfs_packages_add)))
+       -$(CP) -T $(mkfs_cur_target_dir).opkg/ $(mkfs_cur_target_dir)/etc/opkg/
+       rm -rf $(mkfs_cur_target_dir).opkg $(mkfs_cur_target_dir).conf
+endif
        $(call prepare_rootfs,$(mkfs_cur_target_dir),$(TOPDIR)/files)
-       $(apk_target) list --quiet --manifest | sort > $(mkfs_cur_target_dir).manifest
 
 $(KDIR)/root.%: kernel_prepare
        $(call Image/mkfs/$(word 1,$(target_params)),$(target_params))
index 385dcd5bc29c3d75fa433354cccfeb338453fdca..29349a29778145635645d3dd55abb96067d20c07 100644 (file)
@@ -6,6 +6,11 @@ ifndef DUMP
   include $(INCLUDE_DIR)/feeds.mk
 endif
 
+IPKG_REMOVE:= \
+   $(SCRIPT_DIR)/ipkg-remove
+
+ IPKG_STATE_DIR:=$(TARGET_DIR)/usr/lib/opkg
+
 # Generates a make statement to return a wildcard for candidate ipkg files
 # 1: package name
 define gen_ipkg_wildcard
index cae2bfe2ba07a73683050e3c72ae07a21d23db37..6e6f3b60599bcfa586f1a57c7be6bb401cadec35 100644 (file)
@@ -31,6 +31,18 @@ ifdef CONFIG_USE_MKLIBS
   endef
 endif
 
+# where to build (and put) .ipk packages
+opkg = \
+  IPKG_NO_SCRIPT=1 \
+  IPKG_INSTROOT=$(1) \
+  TMPDIR=$(1)/tmp \
+  $(STAGING_DIR_HOST)/bin/opkg \
+       --offline-root $(1) \
+       --force-postinstall \
+       --add-dest root:/ \
+       --add-arch all:100 \
+       --add-arch $(if $(ARCH_PACKAGES),$(ARCH_PACKAGES),$(BOARD)):200
+
 apk = \
   IPKG_INSTROOT=$(1) \
   $(FAKEROOT) $(STAGING_DIR_HOST)/bin/apk \
@@ -67,9 +79,20 @@ define prepare_rootfs
        @mkdir -p $(1)/var/lock
        @( \
                cd $(1); \
+               if [ -n $(CONFIG_USE_APK) ]; then \
                $(STAGING_DIR_HOST)/bin/tar -xf ./lib/apk/db/scripts.tar --wildcards "*.post-install" -O > script.sh; \
                chmod +x script.sh; \
                IPKG_INSTROOT=$(1) $$(command -v bash) script.sh; \
+               else \
+               for script in ./usr/lib/opkg/info/*.postinst; do \
+                       IPKG_INSTROOT=$(1) $$(command -v bash) $$script; \
+                       ret=$$?; \
+                       if [ $$ret -ne 0 ]; then \
+                               echo "postinst script $$script has failed with exit code $$ret" >&2; \
+                               exit 1; \
+                       fi; \
+               done; \
+               fi; \
                for script in ./etc/init.d/*; do \
                        grep '#!/bin/sh /etc/rc.common' $$script >/dev/null || continue; \
                        if ! echo " $(3) " | grep -q " $$(basename $$script) "; then \
@@ -80,12 +103,15 @@ define prepare_rootfs
                                echo "Disabling" $$(basename $$script); \
                        fi; \
                done || true \
+               $(if $(SOURCE_DATE_EPOCH),sed -i "s/Installed-Time: .*/Installed-Time: $(SOURCE_DATE_EPOCH)/" $(1)/usr/lib/opkg/status)
        )
+
        @-find $(1) -name CVS -o -name .svn -o -name .git -o -name '.#*' | $(XARGS) rm -rf
-       @-find $(1)/usr/cache/apk/ -name '*.apk' -delete
        rm -rf \
                $(1)/boot \
                $(1)/tmp/* \
+               $(1)/usr/lib/opkg/info/*.postinst* \
+               $(1)/usr/lib/opkg/lists/* \
                $(1)/var/lock/*.lock
        $(call clean_ipkg,$(1))
        $(call mklibs,$(1))
index 9536ed09c4a5a8d2bc52fd50ab2ae776a91bb895..06708b48e6c5ef4d075f72f2ea7af9df31398a39 100644 (file)
@@ -12,7 +12,6 @@ DEVICE_TYPE?=router
 # Default packages - the really basic set
 DEFAULT_PACKAGES:=\
        base-files \
-       apk \
        ca-bundle \
        dropbear \
        fstools \
@@ -27,6 +26,12 @@ DEFAULT_PACKAGES:=\
        urandom-seed \
        urngd
 
+ifdef CONFIG_USE_APK
+DEFAULT_PACKAGES+=apk
+else
+DEFAULT_PACKAGES+=opkg
+endif
+
 ifneq ($(CONFIG_SELINUX),)
 DEFAULT_PACKAGES+=busybox-selinux procd-selinux
 else
index caa9f15153ea7540385d7fcaafbcaf4ac8f7a4fa..cf6d23d80082b645a0c95239460c8f8e14f4b8f5 100644 (file)
@@ -227,9 +227,18 @@ endif
        $(if $(CONFIG_TARGET_PREINIT_DISABLE_FAILSAFE), \
                rm -f $(1)/etc/banner.failsafe,)
 
+ifdef CONFIG_USE_APK
        mkdir -p $(1)/etc/apk/
-       $(call FeedSourcesAppend,$(1)/etc/apk/repositories)
+       $(call FeedSourcesAppendAPK,$(1)/etc/apk/repositories)
        $(VERSION_SED_SCRIPT) $(1)/etc/apk/repositories
+else
+       $(if $(CONFIG_CLEAN_IPKG),, \
+               mkdir -p $(1)/etc/opkg; \
+               $(call FeedSourcesAppendOPKG,$(1)/etc/opkg/distfeeds.conf); \
+               $(VERSION_SED_SCRIPT) $(1)/etc/opkg/distfeeds.conf)
+       $(if $(CONFIG_IPK_FILES_CHECKSUMS),, \
+               rm -f $(1)/sbin/pkg_check)
+endif
 endef
 
 ifneq ($(DUMP),1)
index 476ea090378f5e63f9d7249d19cce73dfea3e4e6..f9f8ac956bebb640effe6400a81c4366d7ff9d52 100644 (file)
@@ -27,7 +27,7 @@ define Package/gcc/Default
   SECTION:=libs
   CATEGORY:=Base system
   URL:=http://gcc.gnu.org/
-  VERSION:=$(LIBGCC_VERSION)-r$(PKG_RELEASE)
+  VERSION:=$(LIBGCC_VERSION)-$(PKG_RELEASE)
 endef
 
 define Package/libgcc
@@ -230,7 +230,7 @@ endef
 define Package/libc/Default
   SECTION:=libs
   CATEGORY:=Base system
-  VERSION:=$(LIBC_VERSION)-r$(PKG_RELEASE)
+  VERSION:=$(LIBC_VERSION)-$(PKG_RELEASE)
   DEPENDS:=+libgcc
   URL:=$(LIBC_URL)
 endef
index a5e4b9bc91c69c74bca984da838e0a504a5028b1..02e26d27c66f362868625b8bdd2b8d5592950f7f 100644 (file)
@@ -37,7 +37,21 @@ do_config_push() {
 }
 
 do_snapshot_upgrade() {
-       apk upgrade
+       if command -v opkg; then
+               opkg update
+               [ $? -eq 0 ] || exit 1
+
+               opkg list-upgradable
+               [ $? -eq 0 ] || exit 2
+
+               UPDATES=`opkg list-upgradable | cut -d" " -f1`
+               [ -z "${UPDATES}" ] && exit 0
+
+               opkg upgrade ${UPDATES}
+               [ $? -eq 0 ] || exit 3
+       else
+               apk upgrade
+       fi
 
        do_snapshot_push
        sleep 5
index e8cc346e130fd00ceccf5edd58f49b48345d163d..7df29debc546847f6cae0169c5c7c980943a067f 100755 (executable)
@@ -865,7 +865,7 @@ sub feed_config() {
                printf "\t\tdepends on PER_FEED_REPO\n";
                printf "\t\tdefault y\n" if $installed;
                printf "\t\thelp\n";
-               printf "\t\t Enable the \\\"%s\\\" feed in apk repositories.\n", $feed->[1];
+               printf "\t\t Enable the \\\"%s\\\" feed in opkg distfeeds.conf and apk repositories.\n", $feed->[1];
                printf "\t\t Say M to add the feed commented out.\n";
                printf "\n";
        }