From: Paul Spooren Date: Mon, 6 Feb 2023 20:19:21 +0000 (+0100) Subject: apk and opkg side by side X-Git-Url: http://git.openwrt.org/?a=commitdiff_plain;h=refs%2Fheads%2Fapk;p=openwrt%2Fstaging%2Faparcar.git apk and opkg side by side Signed-off-by: Paul Spooren --- diff --git a/README.md b/README.md index 6172e68710..29ff89f90c 100644 --- 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 diff --git a/include/feeds.mk b/include/feeds.mk index a27aa709c4..87b1562c3e 100644 --- a/include/feeds.mk +++ b/include/feeds.mk @@ -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), \ diff --git a/include/image.mk b/include/image.mk index 3f42ed4369..cf4a64980a 100644 --- a/include/image.mk +++ b/include/image.mk @@ -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)) diff --git a/include/package-ipkg.mk b/include/package-ipkg.mk index 385dcd5bc2..29349a2977 100644 --- a/include/package-ipkg.mk +++ b/include/package-ipkg.mk @@ -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 diff --git a/include/rootfs.mk b/include/rootfs.mk index cae2bfe2ba..6e6f3b6059 100644 --- a/include/rootfs.mk +++ b/include/rootfs.mk @@ -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)) diff --git a/include/target.mk b/include/target.mk index 9536ed09c4..06708b48e6 100644 --- a/include/target.mk +++ b/include/target.mk @@ -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 diff --git a/package/base-files/Makefile b/package/base-files/Makefile index caa9f15153..cf6d23d800 100644 --- a/package/base-files/Makefile +++ b/package/base-files/Makefile @@ -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) diff --git a/package/libs/toolchain/Makefile b/package/libs/toolchain/Makefile index 476ea09037..f9f8ac956b 100644 --- a/package/libs/toolchain/Makefile +++ b/package/libs/toolchain/Makefile @@ -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 diff --git a/package/system/fstools/files/snapshot b/package/system/fstools/files/snapshot index a5e4b9bc91..02e26d27c6 100644 --- a/package/system/fstools/files/snapshot +++ b/package/system/fstools/files/snapshot @@ -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 diff --git a/scripts/feeds b/scripts/feeds index e8cc346e13..7df29debc5 100755 --- a/scripts/feeds +++ b/scripts/feeds @@ -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"; }