mirror of
https://github.com/coolsnowwolf/lede.git
synced 2025-12-20 01:01:53 +08:00
build: add APK package build capabilities
A new option called USE_APK is added which generated APK packages (.apk) instead of OPKG packages (.ipk). Some features like fstools `snapshot` command are not yet ported Signed-off-by: Paul Spooren <mail@aparcar.org>
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0-only
|
# SPDX-License-Identifier: GPL-2.0-only
|
||||||
#
|
#
|
||||||
# Copyright (C) 2006-2020 LEDE.org
|
# Copyright (C) 2006-2020 OpenWrt.org
|
||||||
|
|
||||||
override TARGET_BUILD=
|
override TARGET_BUILD=
|
||||||
include $(INCLUDE_DIR)/prereq.mk
|
include $(INCLUDE_DIR)/prereq.mk
|
||||||
@@ -293,8 +293,13 @@ define Image/mkfs/erofs
|
|||||||
endef
|
endef
|
||||||
|
|
||||||
define Image/Manifest
|
define Image/Manifest
|
||||||
$(call opkg,$(TARGET_DIR_ORIG)) list-installed > \
|
$(if $(CONFIG_USE_APK), \
|
||||||
$(BIN_DIR)/$(IMG_PREFIX)$(if $(PROFILE_SANITIZED),-$(PROFILE_SANITIZED)).manifest
|
$(call apk,$(TARGET_DIR_ORIG)) list --quiet --manifest --no-network \
|
||||||
|
--repositories-file /dev/null | sort | sed 's/ / - /' > \
|
||||||
|
$(BIN_DIR)/$(IMG_PREFIX)$(if $(PROFILE_SANITIZED),-$(PROFILE_SANITIZED)).manifest, \
|
||||||
|
$(call opkg,$(TARGET_DIR_ORIG)) list-installed > \
|
||||||
|
$(BIN_DIR)/$(IMG_PREFIX)$(if $(PROFILE_SANITIZED),-$(PROFILE_SANITIZED)).manifest \
|
||||||
|
)
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define Image/gzip-ext4-padded-squashfs
|
define Image/gzip-ext4-padded-squashfs
|
||||||
@@ -337,7 +342,20 @@ opkg_target = \
|
|||||||
$(call opkg,$(mkfs_cur_target_dir)) \
|
$(call opkg,$(mkfs_cur_target_dir)) \
|
||||||
-f $(mkfs_cur_target_dir).conf
|
-f $(mkfs_cur_target_dir).conf
|
||||||
|
|
||||||
|
apk_target = \
|
||||||
|
$(call apk,$(mkfs_cur_target_dir)) --no-scripts \
|
||||||
|
--repositories-file /dev/null --repository file://$(PACKAGE_DIR_ALL)/packages.adb
|
||||||
|
|
||||||
|
|
||||||
target-dir-%: FORCE
|
target-dir-%: FORCE
|
||||||
|
ifneq ($(CONFIG_USE_APK),)
|
||||||
|
rm -rf $(mkfs_cur_target_dir)
|
||||||
|
$(CP) $(TARGET_DIR_ORIG) $(mkfs_cur_target_dir)
|
||||||
|
$(if $(mkfs_packages_remove), \
|
||||||
|
-$(apk_target) del $(mkfs_packages_remove))
|
||||||
|
$(if $(mkfs_packages_add), \
|
||||||
|
$(apk_target) add $(mkfs_packages_add))
|
||||||
|
else
|
||||||
rm -rf $(mkfs_cur_target_dir) $(mkfs_cur_target_dir).opkg
|
rm -rf $(mkfs_cur_target_dir) $(mkfs_cur_target_dir).opkg
|
||||||
$(CP) $(TARGET_DIR_ORIG) $(mkfs_cur_target_dir)
|
$(CP) $(TARGET_DIR_ORIG) $(mkfs_cur_target_dir)
|
||||||
-mv $(mkfs_cur_target_dir)/etc/opkg $(mkfs_cur_target_dir).opkg
|
-mv $(mkfs_cur_target_dir)/etc/opkg $(mkfs_cur_target_dir).opkg
|
||||||
@@ -351,6 +369,7 @@ target-dir-%: FORCE
|
|||||||
$(call opkg_package_files,$(mkfs_packages_add)))
|
$(call opkg_package_files,$(mkfs_packages_add)))
|
||||||
-$(CP) -T $(mkfs_cur_target_dir).opkg/ $(mkfs_cur_target_dir)/etc/opkg/
|
-$(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
|
rm -rf $(mkfs_cur_target_dir).opkg $(mkfs_cur_target_dir).conf
|
||||||
|
endif
|
||||||
$(call prepare_rootfs,$(mkfs_cur_target_dir),$(TOPDIR)/files)
|
$(call prepare_rootfs,$(mkfs_cur_target_dir),$(TOPDIR)/files)
|
||||||
|
|
||||||
$(KDIR)/root.%: kernel_prepare
|
$(KDIR)/root.%: kernel_prepare
|
||||||
@@ -519,9 +538,9 @@ define Device/Build/initramfs
|
|||||||
|
|
||||||
$(KDIR)/$$(KERNEL_INITRAMFS_NAME):: image_prepare
|
$(KDIR)/$$(KERNEL_INITRAMFS_NAME):: image_prepare
|
||||||
$(1)-images: $$(if $$(KERNEL_INITRAMFS),$(BIN_DIR)/$$(KERNEL_INITRAMFS_IMAGE))
|
$(1)-images: $$(if $$(KERNEL_INITRAMFS),$(BIN_DIR)/$$(KERNEL_INITRAMFS_IMAGE))
|
||||||
|
|
||||||
.IGNORE: $(BIN_DIR)/$$(KERNEL_INITRAMFS_IMAGE)
|
.IGNORE: $(BIN_DIR)/$$(KERNEL_INITRAMFS_IMAGE)
|
||||||
|
|
||||||
$(BIN_DIR)/$$(KERNEL_INITRAMFS_IMAGE): $(KDIR)/tmp/$$(KERNEL_INITRAMFS_IMAGE)
|
$(BIN_DIR)/$$(KERNEL_INITRAMFS_IMAGE): $(KDIR)/tmp/$$(KERNEL_INITRAMFS_IMAGE)
|
||||||
cp $$^ $$@
|
cp $$^ $$@
|
||||||
|
|
||||||
|
|||||||
@@ -43,6 +43,14 @@ opkg = \
|
|||||||
--add-arch all:100 \
|
--add-arch all:100 \
|
||||||
--add-arch $(if $(ARCH_PACKAGES),$(ARCH_PACKAGES),$(BOARD)):200
|
--add-arch $(if $(ARCH_PACKAGES),$(ARCH_PACKAGES),$(BOARD)):200
|
||||||
|
|
||||||
|
apk = \
|
||||||
|
IPKG_INSTROOT=$(1) \
|
||||||
|
$(FAKEROOT) $(STAGING_DIR_HOST)/bin/apk \
|
||||||
|
--root $(1) \
|
||||||
|
--keys-dir $(if $(APK_KEYS),$(APK_KEYS),$(TOPDIR)) \
|
||||||
|
--no-logfile \
|
||||||
|
--preserve-env
|
||||||
|
|
||||||
TARGET_DIR_ORIG := $(TARGET_ROOTFS_DIR)/root.orig-$(BOARD)
|
TARGET_DIR_ORIG := $(TARGET_ROOTFS_DIR)/root.orig-$(BOARD)
|
||||||
|
|
||||||
ifdef CONFIG_CLEAN_IPKG
|
ifdef CONFIG_CLEAN_IPKG
|
||||||
@@ -68,14 +76,31 @@ define prepare_rootfs
|
|||||||
@mkdir -p $(1)/var/lock
|
@mkdir -p $(1)/var/lock
|
||||||
@( \
|
@( \
|
||||||
cd $(1); \
|
cd $(1); \
|
||||||
for script in ./usr/lib/opkg/info/*.postinst; do \
|
if [ -n "$(CONFIG_USE_APK)" ]; then \
|
||||||
|
IPKG_POSTINST_PATH=./lib/apk/db/*.post-install; \
|
||||||
|
$(STAGING_DIR_HOST)/bin/gzip -d ./lib/apk/db/scripts.tar; \
|
||||||
|
$(STAGING_DIR_HOST)/bin/tar -C ./lib/apk/db/ -xf ./lib/apk/db/scripts.tar --wildcards "*.post-install"; \
|
||||||
|
else \
|
||||||
|
IPKG_POSTINST_PATH=./usr/lib/opkg/info/*.postinst; \
|
||||||
|
fi; \
|
||||||
|
for script in $$IPKG_POSTINST_PATH; do \
|
||||||
IPKG_INSTROOT=$(1) $$(command -v bash) $$script; \
|
IPKG_INSTROOT=$(1) $$(command -v bash) $$script; \
|
||||||
ret=$$?; \
|
ret=$$?; \
|
||||||
if [ $$ret -ne 0 ]; then \
|
if [ $$ret -ne 0 ]; then \
|
||||||
echo "postinst script $$script has failed with exit code $$ret" >&2; \
|
echo "postinst script $$script has failed with exit code $$ret" >&2; \
|
||||||
exit 1; \
|
exit 1; \
|
||||||
fi; \
|
fi; \
|
||||||
|
[ -n "$(CONFIG_USE_APK)" ] && $(STAGING_DIR_HOST)/bin/tar --delete -f ./lib/apk/db/scripts.tar $$(basename $$script); \
|
||||||
done; \
|
done; \
|
||||||
|
[ -n "$(CONFIG_USE_APK)" ] && $(STAGING_DIR_HOST)/bin/gzip -f -9n -S ".gz" ./lib/apk/db/scripts.tar; \
|
||||||
|
if [ -z "$(CONFIG_USE_APK)" ]; then \
|
||||||
|
$(if $(IB),,awk -i inplace \
|
||||||
|
'/^Status:/ { \
|
||||||
|
if ($$3 == "user") { $$3 = "ok" } \
|
||||||
|
else { sub(/,\<user\>|\<user\>,/, "", $$3) } \
|
||||||
|
}1' $(1)/usr/lib/opkg/status) ; \
|
||||||
|
$(if $(SOURCE_DATE_EPOCH),sed -i "s/Installed-Time: .*/Installed-Time: $(SOURCE_DATE_EPOCH)/" $(1)/usr/lib/opkg/status ;) \
|
||||||
|
fi; \
|
||||||
for script in ./etc/init.d/*; do \
|
for script in ./etc/init.d/*; do \
|
||||||
grep '#!/bin/sh /etc/rc.common' $$script >/dev/null || continue; \
|
grep '#!/bin/sh /etc/rc.common' $$script >/dev/null || continue; \
|
||||||
if ! echo " $(3) " | grep -q " $$(basename $$script) "; then \
|
if ! echo " $(3) " | grep -q " $$(basename $$script) "; then \
|
||||||
@@ -87,11 +112,12 @@ define prepare_rootfs
|
|||||||
fi; \
|
fi; \
|
||||||
done || true \
|
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) -name CVS -o -name .svn -o -name .git -o -name '.#*' | $(XARGS) rm -rf
|
||||||
rm -rf \
|
rm -rf \
|
||||||
$(1)/boot \
|
$(1)/boot \
|
||||||
$(1)/tmp/* \
|
$(1)/tmp/* \
|
||||||
|
$(1)/lib/apk/db/*.post-install* \
|
||||||
$(1)/usr/lib/opkg/info/*.postinst* \
|
$(1)/usr/lib/opkg/info/*.postinst* \
|
||||||
$(1)/usr/lib/opkg/lists/* \
|
$(1)/usr/lib/opkg/lists/* \
|
||||||
$(1)/var/lock/*.lock
|
$(1)/var/lock/*.lock
|
||||||
|
|||||||
@@ -53,19 +53,58 @@ $(curdir)/cleanup: $(TMP_DIR)/.build
|
|||||||
$(curdir)/merge:
|
$(curdir)/merge:
|
||||||
rm -rf $(PACKAGE_DIR_ALL)
|
rm -rf $(PACKAGE_DIR_ALL)
|
||||||
mkdir -p $(PACKAGE_DIR_ALL)
|
mkdir -p $(PACKAGE_DIR_ALL)
|
||||||
|
ifneq ($(CONFIG_USE_APK),)
|
||||||
|
-$(foreach pdir,$(PACKAGE_SUBDIRS),$(if $(wildcard $(pdir)/*.apk),ln -s $(pdir)/*.apk $(PACKAGE_DIR_ALL);))
|
||||||
|
else
|
||||||
-$(foreach pdir,$(PACKAGE_SUBDIRS),$(if $(wildcard $(pdir)/*.ipk),ln -s $(pdir)/*.ipk $(PACKAGE_DIR_ALL);))
|
-$(foreach pdir,$(PACKAGE_SUBDIRS),$(if $(wildcard $(pdir)/*.ipk),ln -s $(pdir)/*.ipk $(PACKAGE_DIR_ALL);))
|
||||||
|
endif
|
||||||
|
|
||||||
|
$(BUILD_KEY_APK_SEC):
|
||||||
|
$(STAGING_DIR_HOST)/bin/openssl ecparam -name prime256v1 -genkey -noout -out $(BUILD_KEY_APK_SEC)
|
||||||
|
|
||||||
|
$(BUILD_KEY_APK_PUB): $(BUILD_KEY_APK_SEC)
|
||||||
|
$(STAGING_DIR_HOST)/bin/openssl ec -in $(BUILD_KEY_APK_SEC) -pubout > $(BUILD_KEY_APK_PUB)
|
||||||
|
|
||||||
$(curdir)/merge-index: $(curdir)/merge
|
$(curdir)/merge-index: $(curdir)/merge
|
||||||
|
ifneq ($(CONFIG_USE_APK),)
|
||||||
|
(cd $(PACKAGE_DIR_ALL) && $(STAGING_DIR_HOST)/bin/apk mkndx \
|
||||||
|
--root $(TOPDIR) \
|
||||||
|
--keys-dir $(TOPDIR) \
|
||||||
|
--allow-untrusted \
|
||||||
|
--sign $(BUILD_KEY_APK_SEC) \
|
||||||
|
--output packages.adb \
|
||||||
|
*.apk; \
|
||||||
|
)
|
||||||
|
else
|
||||||
(cd $(PACKAGE_DIR_ALL) && $(SCRIPT_DIR)/ipkg-make-index.sh . 2>&1 > Packages; )
|
(cd $(PACKAGE_DIR_ALL) && $(SCRIPT_DIR)/ipkg-make-index.sh . 2>&1 > Packages; )
|
||||||
|
endif
|
||||||
|
|
||||||
ifndef SDK
|
ifndef SDK
|
||||||
|
$(curdir)//compile = $(STAGING_DIR)/.prepared $(BIN_DIR)
|
||||||
|
ifneq ($(CONFIG_USE_APK),)
|
||||||
|
$(curdir)//compile += $(curdir)/system/apk/host/compile $(BUILD_KEY_APK_SEC) $(BUILD_KEY_APK_PUB)
|
||||||
|
else
|
||||||
$(curdir)/compile: $(curdir)/system/opkg/host/compile
|
$(curdir)/compile: $(curdir)/system/opkg/host/compile
|
||||||
endif
|
endif
|
||||||
|
else
|
||||||
|
ifneq ($(CONFIG_USE_APK),)
|
||||||
|
$(curdir)//compile += $(BUILD_KEY_APK_SEC) $(BUILD_KEY_APK_PUB)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
$(curdir)/install: $(TMP_DIR)/.build $(curdir)/merge $(if $(CONFIG_TARGET_PER_DEVICE_ROOTFS),$(curdir)/merge-index)
|
$(curdir)/install: $(TMP_DIR)/.build $(curdir)/merge $(if $(CONFIG_TARGET_PER_DEVICE_ROOTFS),$(curdir)/merge-index)
|
||||||
- find $(STAGING_DIR_ROOT) -type d | $(XARGS) chmod 0755
|
- find $(STAGING_DIR_ROOT) -type d | $(XARGS) chmod 0755
|
||||||
rm -rf $(TARGET_DIR) $(TARGET_DIR_ORIG)
|
rm -rf $(TARGET_DIR) $(TARGET_DIR_ORIG)
|
||||||
mkdir -p $(TARGET_DIR)/tmp
|
mkdir -p $(TARGET_DIR)/tmp
|
||||||
|
ifneq ($(CONFIG_USE_APK),)
|
||||||
|
$(file >$(TMP_DIR)/apk_install_list,\
|
||||||
|
$(foreach pkg,$(shell cat $(PACKAGE_INSTALL_FILES) 2>/dev/null),$(pkg)$(call GetABISuffix,$(pkg))))
|
||||||
|
$(call apk,$(TARGET_DIR)) add --no-cache --initdb --no-scripts --arch $(ARCH_PACKAGES) \
|
||||||
|
--repositories-file /dev/null --repository file://$(PACKAGE_DIR_ALL)/packages.adb \
|
||||||
|
$$(cat $(TMP_DIR)/apk_install_list)
|
||||||
|
|
||||||
|
rm -rf $(TARGET_DIR)/run
|
||||||
|
else
|
||||||
$(file >$(TMP_DIR)/opkg_install_list,\
|
$(file >$(TMP_DIR)/opkg_install_list,\
|
||||||
$(call opkg_package_files,\
|
$(call opkg_package_files,\
|
||||||
$(foreach pkg,$(shell cat $(PACKAGE_INSTALL_FILES) 2>/dev/null),$(pkg)$(call GetABISuffix,$(pkg)))))
|
$(foreach pkg,$(shell cat $(PACKAGE_INSTALL_FILES) 2>/dev/null),$(pkg)$(call GetABISuffix,$(pkg)))))
|
||||||
@@ -76,6 +115,7 @@ $(curdir)/install: $(TMP_DIR)/.build $(curdir)/merge $(if $(CONFIG_TARGET_PER_DE
|
|||||||
$(call opkg,$(TARGET_DIR)) flag $$flag `cat $$file`; \
|
$(call opkg,$(TARGET_DIR)) flag $$flag `cat $$file`; \
|
||||||
done; \
|
done; \
|
||||||
done || true
|
done || true
|
||||||
|
endif
|
||||||
|
|
||||||
$(CP) $(TARGET_DIR) $(TARGET_DIR_ORIG)
|
$(CP) $(TARGET_DIR) $(TARGET_DIR_ORIG)
|
||||||
|
|
||||||
@@ -83,6 +123,20 @@ $(curdir)/install: $(TMP_DIR)/.build $(curdir)/merge $(if $(CONFIG_TARGET_PER_DE
|
|||||||
|
|
||||||
$(curdir)/index: FORCE
|
$(curdir)/index: FORCE
|
||||||
@echo Generating package index...
|
@echo Generating package index...
|
||||||
|
ifneq ($(CONFIG_USE_APK),)
|
||||||
|
@for d in $(PACKAGE_SUBDIRS); do \
|
||||||
|
mkdir -p $$d; \
|
||||||
|
cd $$d || continue; \
|
||||||
|
ls *.apk >/dev/null 2>&1 || continue; \
|
||||||
|
$(STAGING_DIR_HOST)/bin/apk mkndx \
|
||||||
|
--root $(TOPDIR) \
|
||||||
|
--keys-dir $(TOPDIR) \
|
||||||
|
--allow-untrusted \
|
||||||
|
--sign $(BUILD_KEY_APK_SEC) \
|
||||||
|
--output packages.adb \
|
||||||
|
*.apk; \
|
||||||
|
done
|
||||||
|
else
|
||||||
@for d in $(PACKAGE_SUBDIRS); do ( \
|
@for d in $(PACKAGE_SUBDIRS); do ( \
|
||||||
mkdir -p $$d; \
|
mkdir -p $$d; \
|
||||||
cd $$d || continue; \
|
cd $$d || continue; \
|
||||||
@@ -102,6 +156,7 @@ ifdef CONFIG_SIGNED_PACKAGES
|
|||||||
$(STAGING_DIR_HOST)/bin/usign -S -m Packages -s $(BUILD_KEY); \
|
$(STAGING_DIR_HOST)/bin/usign -S -m Packages -s $(BUILD_KEY); \
|
||||||
); done
|
); done
|
||||||
endif
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
$(curdir)/flags-install:= -j1
|
$(curdir)/flags-install:= -j1
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user