The build system now uses APK to create firmware images.
Signed-off-by: Paul Spooren <mail@aparcar.org>
/*.patch
/llvm-bpf*
key-build*
+private-key.pem
+public-key.pem
*.orig
*.rej
*~
The main repository uses multiple sub-repositories to manage packages of
different categories. All packages are installed via the OpenWrt package
-manager called `opkg`. If you're looking to develop the web interface or port
+manager called `apk`. 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
ifdef PKG_SOURCE_VERSION
ifndef PKG_VERSION
- PKG_VERSION := $(if $(PKG_SOURCE_DATE),$(PKG_SOURCE_DATE)-)$(call version_abbrev,$(PKG_SOURCE_VERSION))
+ PKG_VERSION := 0_git$(subst -,,$(subst .,,$(PKG_SOURCE_DATE)))
endif
PKG_SOURCE_SUBDIR ?= $(PKG_NAME)-$(PKG_VERSION)
PKG_SOURCE ?= $(PKG_SOURCE_SUBDIR).tar.xz
PACKAGE_SUBDIRS += $(foreach FEED,$(FEEDS_AVAILABLE),$(OUTPUT_DIR)/packages/$(ARCH_PACKAGES)/$(FEED))
endif
-opkg_package_files = $(wildcard \
+apk_package_files = $(wildcard \
$(foreach dir,$(PACKAGE_SUBDIRS), \
- $(foreach pkg,$(1), $(dir)/$(pkg)_*.ipk)))
+ $(foreach pkg,$(1), $(dir)/$(pkg)_*.apk)))
# 1: package name
define FeedPackageDir
# 1: destination file
define FeedSourcesAppend
( \
- echo 'src/gz %d_core %U/targets/%S/packages'; \
+ echo '%U/targets/%S/packages/packages.adb'; \
$(strip $(if $(CONFIG_PER_FEED_REPO), \
- echo 'src/gz %d_base %U/packages/%A/base'; \
+ echo '%U/packages/%A/base/packages.adb'; \
$(if $(filter %SNAPSHOT-y,$(VERSION_NUMBER)-$(CONFIG_BUILDBOT)), \
- echo 'src/gz %d_kmods %U/targets/%S/kmods/$(LINUX_VERSION)-$(LINUX_RELEASE)-$(LINUX_VERMAGIC)';) \
+ echo '%U/targets/%S/kmods/$(LINUX_VERSION)-$(LINUX_RELEASE)-$(LINUX_VERMAGIC)/packages.adb';) \
$(foreach feed,$(FEEDS_AVAILABLE), \
$(if $(CONFIG_FEED_$(feed)), \
- echo '$(if $(filter m,$(CONFIG_FEED_$(feed))),# )src/gz %d_$(feed) %U/packages/%A/$(feed)';)))) \
+ echo '$(if $(filter m,$(CONFIG_FEED_$(feed))),# )%U/packages/%A/$(feed)/packages.adb';)))) \
) >> $(1)
endef
endef
define Image/Manifest
- $(call opkg,$(TARGET_DIR_ORIG)) list-installed > \
+ $(call apk,$(TARGET_DIR_ORIG)) list --quiet --manifest | sort > \
$(BIN_DIR)/$(IMG_PREFIX)$(if $(PROFILE_SANITIZED),-$(PROFILE_SANITIZED)).manifest
endef
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).opkg
+ rm -rf $(mkfs_cur_target_dir) $(mkfs_cur_target_dir).apk
$(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
+ mv $(mkfs_cur_target_dir)/etc/apk/repositories $(mkfs_cur_target_dir).repositories
$(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
+ $(apk_target) del $(mkfs_packages_remove))
+ $(if $(mkfs_packages_add), \
+ $(apk_target) add $(mkfs_packages_add))
+ mv $(mkfs_cur_target_dir).repositories $(mkfs_cur_target_dir)/etc/apk/repositories
$(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))
SECTION:=kernel
CATEGORY:=Kernel modules
DESCRIPTION:=$(DESCRIPTION)
- EXTRA_DEPENDS:=kernel (=$(LINUX_VERSION)-$(LINUX_RELEASE)-$(LINUX_VERMAGIC))
- VERSION:=$(LINUX_VERSION)$(if $(PKG_VERSION),+$(PKG_VERSION))-$(if $(PKG_RELEASE),$(PKG_RELEASE),$(LINUX_RELEASE))
+ EXTRA_DEPENDS:=kernel-$(LINUX_VERSION)-$(LINUX_RELEASE)-$(LINUX_VERMAGIC)
+ VERSION:=$(LINUX_VERSION)$(if $(PKG_VERSION),+$(PKG_VERSION))-$(if $(PKG_RELEASE),r$(PKG_RELEASE),r$(LINUX_RELEASE))
PKGFLAGS:=$(PKGFLAGS)
$(call KernelPackage/$(1))
$(call KernelPackage/$(1)/$(BOARD))
endif
$$(eval $$(call BuildPackage,kmod-$(1)))
- $$(IPKG_kmod-$(1)): $$(wildcard $$(call version_filter,$$(FILES)))
+ $$(APK_kmod-$(1)): $$(wildcard $$(call version_filter,$$(FILES)))
endef
SOURCE:=$(patsubst $(TOPDIR)/%,%,$(CURDIR))
ifneq ($(PKG_VERSION),)
ifneq ($(PKG_RELEASE),)
- VERSION:=$(PKG_VERSION)-$(PKG_RELEASE)
+ VERSION:=$(PKG_VERSION)-r$(PKG_RELEASE)
else
VERSION:=$(PKG_VERSION)
endif
# SPDX-License-Identifier: GPL-2.0-only
#
-# Copyright (C) 2006-2020 OpenWrt.org
+# Copyright (C) 2006-2022 OpenWrt.org
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
# 1: package name
# 2: candidate ipk files
define remove_ipkg_files
- $(if $(strip $(2)),$(IPKG_REMOVE) $(1) $(2))
+for pkg in $(2); do \
+ $(STAGING_DIR_HOST)/bin/apk adbdump "$$pkg" | grep "^ name: $(1)" && rm "$$pkg" || true; \
+done
endef
# 1: package name
# 4: file is a script
define BuildIPKGVariable
ifdef Package/$(1)/$(2)
- $$(IPKG_$(1)) : VAR_$(2)$(3)=$$(Package/$(1)/$(2))
+ $$(APK_$(1)) : VAR_$(2)$(3)=$$(Package/$(1)/$(2))
$(call shexport,Package/$(1)/$(2))
$(1)_COMMANDS += echo "$$$$$$$$$(call shvar,Package/$(1)/$(2))" > $(2)$(3); $(if $(4),chmod 0755 $(2)$(3);)
endif
filter_deps=$(foreach dep,$(call strip_deps,$(1)),$(if $(findstring :,$(dep)),$(call dep_if,$(dep)),$(dep)))
define AddDependency
- $$(if $(1),$$(if $(2),$$(foreach pkg,$(1),$$(IPKG_$$(pkg))): $$(foreach pkg,$(2),$$(IPKG_$$(pkg)))))
+ $$(if $(1),$$(if $(2),$$(foreach pkg,$(1),$$(APK_$$(pkg))): $$(foreach pkg,$(2),$$(APK_$$(pkg)))))
endef
define FixupReverseDependencies
define BuildTarget/ipkg
ABIV_$(1):=$(call FormatABISuffix,$(1),$(ABI_VERSION))
PDIR_$(1):=$(call FeedPackageDir,$(1))
- IPKG_$(1):=$$(PDIR_$(1))/$(1)$$(ABIV_$(1))_$(VERSION)_$(PKGARCH).ipk
+ APK_$(1):=$$(PDIR_$(1))/$(1)$$(ABIV_$(1))_$(VERSION).apk
IDIR_$(1):=$(PKG_BUILD_DIR)/ipkg-$(PKGARCH)/$(1)
+ ADIR_$(1):=$(PKG_BUILD_DIR)/apk-$(PKGARCH)/$(1)
KEEP_$(1):=$(strip $(call Package/$(1)/conffiles))
TARGET_VARIANT:=$$(if $(ALL_VARIANTS),$$(if $$(VARIANT),$$(filter-out *,$$(VARIANT)),$(firstword $(ALL_VARIANTS))))
ifdef do_install
ifneq ($(CONFIG_PACKAGE_$(1))$(DEVELOPER),)
IPKGS += $(1)
- $(_pkg_target)compile: $$(IPKG_$(1)) $(PKG_INFO_DIR)/$(1).provides $(PKG_BUILD_DIR)/.pkgdir/$(1).installed
- prepare-package-install: $$(IPKG_$(1))
+ $(_pkg_target)compile: $$(APK_$(1)) $(PKG_INFO_DIR)/$(1).provides $(PKG_BUILD_DIR)/.pkgdir/$(1).installed
+ prepare-package-install: $$(APK_$(1))
compile: $(STAGING_DIR_ROOT)/stamp/.$(1)_installed
else
$(if $(CONFIG_PACKAGE_$(1)),$$(info WARNING: skipping $(1) -- package not selected))
Installed-Size: 0
$(_endef)
- $$(IPKG_$(1)) : export CONTROL=$$(Package/$(1)/CONTROL)
- $$(IPKG_$(1)) : export DESCRIPTION=$$(Package/$(1)/description)
- $$(IPKG_$(1)) : export PATH=$$(TARGET_PATH_PKG)
- $$(IPKG_$(1)) : export PKG_SOURCE_DATE_EPOCH:=$(PKG_SOURCE_DATE_EPOCH)
- $(PKG_INFO_DIR)/$(1).provides $$(IPKG_$(1)): $(STAMP_BUILT) $(INCLUDE_DIR)/package-ipkg.mk
- @rm -rf $$(IDIR_$(1)); \
- $$(call remove_ipkg_files,$(1),$$(call opkg_package_files,$(call gen_ipkg_wildcard,$(1))))
- mkdir -p $(PACKAGE_DIR) $$(IDIR_$(1))/CONTROL $(PKG_INFO_DIR)
+ $$(APK_$(1)) : export CONTROL=$$(Package/$(1)/CONTROL)
+ $$(APK_$(1)) : export DESCRIPTION=$$(Package/$(1)/description)
+ $$(APK_$(1)) : export PATH=$$(TARGET_PATH_PKG)
+ $$(APK_$(1)) : export PKG_SOURCE_DATE_EPOCH:=$(PKG_SOURCE_DATE_EPOCH)
+ $(PKG_INFO_DIR)/$(1).provides $$(APK_$(1)): $(STAMP_BUILT) $(INCLUDE_DIR)/package-ipkg.mk
+ rm -rf $$(IDIR_$(1)); \
+ $$(call remove_ipkg_files,$(1),$$(call apk_package_files,$(call gen_ipkg_wildcard,$(1))))
+ mkdir -p $(PACKAGE_DIR) $$(IDIR_$(1)) $(PKG_INFO_DIR)
$(call Package/$(1)/install,$$(IDIR_$(1)))
$(if $(Package/$(1)/install-overlay),mkdir -p $(PACKAGE_DIR) $$(IDIR_$(1))/rootfs-overlay)
$(call Package/$(1)/install-overlay,$$(IDIR_$(1))/rootfs-overlay)
) || true \
)
endif
- (cd $$(IDIR_$(1))/CONTROL; \
- ( \
- echo "$$$$CONTROL"; \
- printf "Description: "; echo "$$$$DESCRIPTION" | sed -e 's,^[[:space:]]*, ,g'; \
- ) > control; \
- chmod 644 control; \
- ( \
- echo "#!/bin/sh"; \
- echo "[ \"\$$$${IPKG_NO_SCRIPT}\" = \"1\" ] && exit 0"; \
- echo "[ -s "\$$$${IPKG_INSTROOT}/lib/functions.sh" ] || exit 0"; \
- echo ". \$$$${IPKG_INSTROOT}/lib/functions.sh"; \
- echo "default_postinst \$$$$0 \$$$$@"; \
- ) > postinst; \
- ( \
- echo "#!/bin/sh"; \
- echo "[ -s "\$$$${IPKG_INSTROOT}/lib/functions.sh" ] || exit 0"; \
- echo ". \$$$${IPKG_INSTROOT}/lib/functions.sh"; \
- echo "default_prerm \$$$$0 \$$$$@"; \
- ) > prerm; \
- chmod 0755 postinst prerm; \
- $($(1)_COMMANDS) \
- )
ifneq ($$(KEEP_$(1)),)
@( \
)
endif
- $(INSTALL_DIR) $$(PDIR_$(1))
- $(FAKEROOT) $(STAGING_DIR_HOST)/bin/bash $(SCRIPT_DIR)/ipkg-build -m "$(FILE_MODES)" $$(IDIR_$(1)) $$(PDIR_$(1))
- @[ -f $$(IPKG_$(1)) ]
+ $(INSTALL_DIR) $$(PDIR_$(1))/tmp
+ mkdir -p $$(ADIR_$(1))/
+ mkdir -p $$(IDIR_$(1))/lib/apk/packages/
+
+ (cd $$(ADIR_$(1)); $($(1)_COMMANDS))
+
+ ( \
+ echo "#!/bin/sh"; \
+ echo "[ \"\$$$${IPKG_NO_SCRIPT}\" = \"1\" ] && exit 0"; \
+ echo "[ -s "\$$$${IPKG_INSTROOT}/lib/functions.sh" ] || exit 0"; \
+ echo ". \$$$${IPKG_INSTROOT}/lib/functions.sh"; \
+ echo 'export root="$$$${IPKG_INSTROOT}"'; \
+ echo 'export pkgname="$(1)"'; \
+ echo "add_group_and_user"; \
+ [ ! -f $$(ADIR_$(1))/postinst-pkg ] || cat "$$(ADIR_$(1))/postinst-pkg"; \
+ echo "default_postinst"; \
+ ) > $$(ADIR_$(1))/post-install;
+
+ ( \
+ echo "#!/bin/sh"; \
+ echo "[ -s "\$$$${IPKG_INSTROOT}/lib/functions.sh" ] || exit 0"; \
+ echo ". \$$$${IPKG_INSTROOT}/lib/functions.sh"; \
+ echo 'export root="$$$${IPKG_INSTROOT}"'; \
+ echo 'export pkgname="$(1)"'; \
+ [ ! -f $$(ADIR_$(1))/prerm-pkg ] || cat "$$(ADIR_$(1))/prerm-pkg"; \
+ echo "default_prerm"; \
+ ) > $$(ADIR_$(1))/pre-deinstall;
+
+ if [ -n "$(USERID)" ]; then echo $(USERID) > $$(IDIR_$(1))/lib/apk/packages/$(1).rusers; fi;
+ if [ -n "$(ALTERNATIVES)" ]; then echo $(ALTERNATIVES) > $$(IDIR_$(1))/lib/apk/packages/$(1).alternatives; fi;
+ (cd $$(IDIR_$(1)) && find . -type f,l -printf "/%P\n" > $$(IDIR_$(1))/lib/apk/packages/$(1).list)
+ if [ -f $$(ADIR_$(1))/conffiles ]; then mv $$(ADIR_$(1))/conffiles $$(IDIR_$(1))/lib/apk/packages/$(1).conffiles; fi;
+
+ $(FAKEROOT) $(STAGING_DIR_HOST)/bin/apk mkpkg \
+ --info "name:$(1)$$(ABIV_$(1))" \
+ --info "version:$(VERSION)" \
+ --info "description:" \
+ --info "arch:$(PKGARCH)" \
+ --info "license:$(LICENSE)" \
+ --info "origin:$(SOURCE)" \
+ --info "provides:$$(foreach prov,$$(filter-out $(1)$$(ABIV_$(1)),$(PROVIDES)$$(if $$(ABIV_$(1)), \
+ $(1) $(foreach provide,$(PROVIDES),$(provide)$$(ABIV_$(1))))),$$(prov)=0 )" \
+ --script "post-install:$$(ADIR_$(1))/post-install" \
+ --script "pre-deinstall:$$(ADIR_$(1))/pre-deinstall" \
+ --info "depends:$$(subst $$(comma),,$$(Package/$(1)/DEPENDS))" \
+ --files "$$(IDIR_$(1))" \
+ --output "$$(APK_$(1))" \
+ --sign "$(BUILD_KEY_APK_SEC)"
+
+ @[ -f $$(APK_$(1)) ]
$(1)-clean:
- $$(call remove_ipkg_files,$(1),$$(call opkg_package_files,$(call gen_ipkg_wildcard,$(1))))
+ $$(call remove_ipkg_files,$(1),$$(call apk_package_files,$(call gen_ipkg_wildcard,$(1))))
clean: $(1)-clean
endef
endif
-# where to build (and put) .ipk packages
-opkg = \
- IPKG_NO_SCRIPT=1 \
+apk = \
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
+ $(FAKEROOT) $(STAGING_DIR_HOST)/bin/apk \
+ --root $(1) \
+ --keys-dir $(TOPDIR) \
+ --no-cache \
+ --no-logfile \
+ --force-no-chroot \
+ --preserve-env \
+ --repository file://$(PACKAGE_DIR_ALL)/packages.adb
TARGET_DIR_ORIG := $(TARGET_ROOTFS_DIR)/root.orig-$(BOARD)
@mkdir -p $(1)/var/lock
@( \
cd $(1); \
- 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; \
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 \
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))
# Default packages - the really basic set
DEFAULT_PACKAGES:=\
base-files \
+ apk \
ca-bundle \
dropbear \
fstools \
logd \
mtd \
netifd \
- opkg \
uci \
uclient-fetch \
urandom-seed \
$(curdir)/merge:
rm -rf $(PACKAGE_DIR_ALL)
mkdir -p $(PACKAGE_DIR_ALL)
- -$(foreach pdir,$(PACKAGE_SUBDIRS),$(if $(wildcard $(pdir)/*.ipk),ln -s $(pdir)/*.ipk $(PACKAGE_DIR_ALL);))
+ -$(foreach pdir,$(PACKAGE_SUBDIRS),$(if $(wildcard $(pdir)/*.apk),ln -s $(pdir)/*.apk $(PACKAGE_DIR_ALL);))
$(curdir)/merge-index: $(curdir)/merge
- (cd $(PACKAGE_DIR_ALL) && $(SCRIPT_DIR)/ipkg-make-index.sh . 2>&1 > Packages; )
+ (cd $(PACKAGE_DIR_ALL) && $(STAGING_DIR_HOST)/bin/apk mkndx \
+ --root $(TOPDIR) \
+ --keys-dir $(TOPDIR) \
+ --sign $(BUILD_KEY_APK_SEC) \
+ --output packages.adb \
+ *.apk; \
+ )
ifndef SDK
- $(curdir)/compile: $(curdir)/system/opkg/host/compile
+ $(curdir)/compile: $(curdir)/system/apk/host/compile
endif
-$(curdir)/install: $(TMP_DIR)/.build $(curdir)/merge $(if $(CONFIG_TARGET_PER_DEVICE_ROOTFS),$(curdir)/merge-index)
+$(curdir)/install: $(TMP_DIR)/.build $(curdir)/merge $(curdir)/merge-index
- find $(STAGING_DIR_ROOT) -type d | $(XARGS) chmod 0755
rm -rf $(TARGET_DIR) $(TARGET_DIR_ORIG)
mkdir -p $(TARGET_DIR)/tmp
- $(file >$(TMP_DIR)/opkg_install_list,\
- $(call opkg_package_files,\
- $(foreach pkg,$(shell cat $(PACKAGE_INSTALL_FILES) 2>/dev/null),$(pkg)$(call GetABISuffix,$(pkg)))))
- $(call opkg,$(TARGET_DIR)) install $$(cat $(TMP_DIR)/opkg_install_list)
- @for file in $(PACKAGE_INSTALL_FILES); do \
- [ -s $$file.flags ] || continue; \
- for flag in `cat $$file.flags`; do \
- $(call opkg,$(TARGET_DIR)) flag $$flag `cat $$file`; \
- done; \
- done || true
+
+ $(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 --initdb --arch $(ARCH_PACKAGES) $$(cat $(TMP_DIR)/apk_install_list)
$(CP) $(TARGET_DIR) $(TARGET_DIR_ORIG)
$(curdir)/index: FORCE
@echo Generating package index...
- @for d in $(PACKAGE_SUBDIRS); do ( \
+ -for d in $(PACKAGE_SUBDIRS); do ( \
mkdir -p $$d; \
cd $$d || continue; \
- $(SCRIPT_DIR)/ipkg-make-index.sh . 2>&1 > Packages.manifest; \
- grep -vE '^(Maintainer|LicenseFiles|Source|SourceName|Require|SourceDateEpoch)' Packages.manifest > Packages; \
- case "$$(((64 + $$(stat -L -c%s Packages)) % 128))" in 110|111) \
- $(call ERROR_MESSAGE,WARNING: Applying padding in $$d/Packages to workaround usign SHA-512 bug!); \
- { echo ""; echo ""; } >> Packages;; \
- esac; \
- gzip -9nc Packages > Packages.gz; \
+ $(STAGING_DIR_HOST)/bin/apk mkndx \
+ --root $(TOPDIR) \
+ --keys-dir $(TOPDIR) \
+ --sign $(BUILD_KEY_APK_SEC) \
+ --output packages.adb \
+ *.apk; \
); done
-ifdef CONFIG_SIGNED_PACKAGES
- @echo Signing package index...
- @for d in $(PACKAGE_SUBDIRS); do ( \
- [ -d $$d ] && \
- cd $$d || continue; \
- $(STAGING_DIR_HOST)/bin/usign -S -m Packages -s $(BUILD_KEY); \
- ); done
-endif
$(curdir)/flags-install:= -j1
[ -s $(BUILD_KEY).ucert ] || \
$(STAGING_DIR_HOST)/bin/ucert -I -c $(BUILD_KEY).ucert -p $(BUILD_KEY).pub -s $(BUILD_KEY)
+ [ -s $(BUILD_KEY_APK_SEC) -a -s $(BUILD_KEY_APK_PUB) ] || \
+ openssl ecparam -name prime256v1 -genkey -noout -out $(BUILD_KEY_APK_SEC); \
+ openssl ec -in $(BUILD_KEY_APK_SEC) -pubout > $(BUILD_KEY_APK_PUB)
+
endef
ifndef CONFIG_BUILDBOT
mkdir -p $(1)/etc/opkg/keys
$(CP) $(BUILD_KEY).pub $(1)/etc/opkg/keys/`$(STAGING_DIR_HOST)/bin/usign -F -p $(BUILD_KEY).pub`
+ mkdir -p $(1)/etc/apk/keys
+ $(CP) $(BUILD_KEY_APK_PUB) $(1)/etc/apk/keys/
+
endef
endif
endif
cat $(BIN_DIR)/feeds.buildinfo >>$(1)/etc/build.feeds; \
cat $(BIN_DIR)/version.buildinfo >>$(1)/etc/build.version)
- $(if $(CONFIG_CLEAN_IPKG),, \
- mkdir -p $(1)/etc/opkg; \
- $(call FeedSourcesAppend,$(1)/etc/opkg/distfeeds.conf); \
- $(VERSION_SED_SCRIPT) $(1)/etc/opkg/distfeeds.conf)
- $(if $(CONFIG_IPK_FILES_CHECKSUMS),, \
- rm -f $(1)/sbin/pkg_check)
-
$(if $(CONFIG_TARGET_PREINIT_DISABLE_FAILSAFE), \
rm -f $(1)/etc/banner.failsafe,)
+
+ mkdir -p $(1)/etc/apk/
+ $(call FeedSourcesAppend,$(1)/etc/apk/repositories)
+ $(VERSION_SED_SCRIPT) $(1)/etc/apk/repositories
endef
ifneq ($(DUMP),1)
}
default_prerm() {
- local root="${IPKG_INSTROOT}"
- local pkgname="$(basename ${1%.*})"
- local ret=0
-
- if [ -f "$root/usr/lib/opkg/info/${pkgname}.prerm-pkg" ]; then
- ( . "$root/usr/lib/opkg/info/${pkgname}.prerm-pkg" )
- ret=$?
- fi
+ update_alternatives remove
local shell="$(command -v bash)"
- for i in $(grep -s "^/etc/init.d/" "$root/usr/lib/opkg/info/${pkgname}.list"); do
+ for i in $(grep -s "^/etc/init.d/" "$root/lib/apk/packages/${pkgname}.list"); do
if [ -n "$root" ]; then
${shell:-/bin/sh} "$root/etc/rc.common" "$root$i" disable
else
fi
done
- return $ret
+ return 0
}
add_group_and_user() {
- local pkgname="$1"
- local rusers="$(sed -ne 's/^Require-User: *//p' $root/usr/lib/opkg/info/${pkgname}.control 2>/dev/null)"
+ if [ -f "$root/lib/apk/packages/${pkgname}.rusers" ]; then
+ local rusers="$(cat $root/lib/apk/packages/${pkgname}.rusers)"
+ fi
if [ -n "$rusers" ]; then
local tuple oIFS="$IFS"
fi
}
-default_postinst() {
- local root="${IPKG_INSTROOT}"
- local pkgname="$(basename ${1%.*})"
- local filelist="/usr/lib/opkg/info/${pkgname}.list"
- local ret=0
-
- add_group_and_user "${pkgname}"
+update_alternatives() {
+ local action="$1"
+
+ if [ -f "$root/lib/apk/packages/${pkgname}.alternatives" ]; then
+ for pkg_alt in $(cat $root/lib/apk/packages/${pkgname}.alternatives); do
+ local best_prio=0;
+ local best_src="/bin/busybox";
+ pkg_prio=${pkg_alt%%:*};
+ pkg_target=${pkg_alt#*:};
+ pkg_target=${pkg_target%:*};
+ pkg_src=${pkg_alt##*:};
+
+ if [ -e "$root/$target" ]; then
+ for alts in $root/lib/apk/packages/*.alternatives; do
+ for alt in $(cat $alts); do
+ prio=${alt%%:*};
+ target=${alt#*:};
+ target=${target%:*};
+ src=${alt##*:};
+
+ if [ "$target" = "$pkg_target" ] && \
+ [ "$src" != "$pkg_src" ] && \
+ [ "$best_prio" -lt "$prio" ]; then
+ best_prio=$prio;
+ best_src=$src;
+ fi
+ done
+ done
+ fi
- if [ -f "$root/usr/lib/opkg/info/${pkgname}.postinst-pkg" ]; then
- ( . "$root/usr/lib/opkg/info/${pkgname}.postinst-pkg" )
- ret=$?
+ case "$action" in
+ install)
+ if [ "$best_prio" -lt "$pkg_prio" ]; then
+ ln -sf "$pkg_src" "$root/$pkg_target"
+ echo "add alternative: $pkg_target -> $pkg_src"
+ fi
+ ;;
+ remove)
+ if [ "$best_prio" -lt "$pkg_prio" ]; then
+ ln -sf "$best_src" "$root/$pkg_target"
+ echo "add alternative: $pkg_target -> $best_src"
+ fi
+ ;;
+ esac
+ done
fi
+}
+
+default_postinst() {
+ local filelist="$root/lib/apk/packages/${pkgname}.list"
+
+ update_alternatives install
if [ -d "$root/rootfs-overlay" ]; then
cp -R $root/rootfs-overlay/. $root/
fi
done
- return $ret
+ return 0
}
include() {
DEFAULT:=y
TITLE:=Virtual kernel package
VERSION:=$(LINUX_VERSION)-$(LINUX_RELEASE)-$(LINUX_VERMAGIC)
+ PROVIDES:="kernel-$(LINUX_VERSION)-$(LINUX_RELEASE)-$(LINUX_VERMAGIC)"
URL:=http://www.kernel.org/
PKG_FLAGS:=nonshared
endef
SECTION:=libs
CATEGORY:=Base system
URL:=http://gcc.gnu.org/
- VERSION:=$(LIBGCC_VERSION)-$(PKG_RELEASE)
+ VERSION:=$(LIBGCC_VERSION)-r$(PKG_RELEASE)
endef
define Package/libgcc
define Package/libc/Default
SECTION:=libs
CATEGORY:=Base system
- VERSION:=$(LIBC_VERSION)-$(PKG_RELEASE)
+ VERSION:=$(LIBC_VERSION)-r$(PKG_RELEASE)
DEPENDS:=+libgcc
URL:=$(LIBC_URL)
endef
TITLE:=IEEE 802.1x Authenticator
URL:=http://hostap.epitest.fi/
DEPENDS:=$(DRV_DEPENDS) +hostapd-common +libubus
- EXTRA_DEPENDS:=hostapd-common (=$(PKG_VERSION)-$(PKG_RELEASE))
+ EXTRA_DEPENDS:=hostapd-common=$(PKG_VERSION)-$(PKG_RELEASE)
USERID:=network=101:network=101
PROVIDES:=hostapd
CONFLICTS:=$(HOSTAPD_PROVIDERS)
SUBMENU:=WirelessAPD
TITLE:=IEEE 802.1x Auth/Supplicant
DEPENDS:=$(DRV_DEPENDS) +hostapd-common +libubus
- EXTRA_DEPENDS:=hostapd-common (=$(PKG_VERSION)-$(PKG_RELEASE))
+ EXTRA_DEPENDS:=hostapd-common=$(PKG_VERSION)-$(PKG_RELEASE)
USERID:=network=101:network=101
URL:=http://hostap.epitest.fi/
PROVIDES:=hostapd wpa-supplicant
TITLE:=WPA Supplicant
URL:=http://hostap.epitest.fi/wpa_supplicant/
DEPENDS:=$(DRV_DEPENDS) +hostapd-common +libubus
- EXTRA_DEPENDS:=hostapd-common (=$(PKG_VERSION)-$(PKG_RELEASE))
+ EXTRA_DEPENDS:=hostapd-common=$(PKG_VERSION)-$(PKG_RELEASE)
USERID:=network=101:network=101
PROVIDES:=wpa-supplicant
CONFLICTS:=$(SUPPLICANT_PROVIDERS)
}
do_snapshot_upgrade() {
- 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
+ apk upgrade
do_snapshot_push
sleep 5
endif
BUILD_KEY=$(TOPDIR)/key-build
+BUILD_KEY_APK_SEC=$(TOPDIR)/private-key.pem
+BUILD_KEY_APK_PUB=$(TOPDIR)/public-key.pem
FAKEROOT:=$(STAGING_DIR_HOST)/bin/fakeroot
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 opkg distfeeds.conf.\n", $feed->[1];
+ printf "\t\t Enable the \\\"%s\\\" feed in apk repositories.\n", $feed->[1];
printf "\t\t Say M to add the feed commented out.\n";
printf "\n";
}
-s : List of feed names and their URL.
-r <feedname>: List packages of specified feed.
-d <delimiter>: Use specified delimiter to distinguish rows (default: spaces)
- -f : List feeds in feeds.conf compatible format (when using -s).
+ -f : List feeds in opkg feeds.conf compatible format (when using -s).
install [options] <package>: Install a package
Options:
all: compile
$(BIN_DIR)/$(IB_NAME).tar.xz: clean
- rm -rf $(PKG_BUILD_DIR)
+ #rm -rf $(PKG_BUILD_DIR)
mkdir -p $(IB_KDIR) $(IB_LDIR) $(PKG_BUILD_DIR)/staging_dir/host/lib \
$(PKG_BUILD_DIR)/target $(PKG_BUILD_DIR)/scripts $(IB_DTSDIR)
-cp $(TOPDIR)/.config $(PKG_BUILD_DIR)/.config
$(INCLUDE_DIR) $(SCRIPT_DIR) \
$(TOPDIR)/rules.mk \
./files/Makefile \
- ./files/repositories.conf \
$(TMP_DIR)/.targetinfo \
$(TMP_DIR)/.packageinfo \
$(PKG_BUILD_DIR)/
ifeq ($(CONFIG_IB_STANDALONE),)
- echo '## Remote package repositories' >> $(PKG_BUILD_DIR)/repositories.conf
- $(call FeedSourcesAppend,$(PKG_BUILD_DIR)/repositories.conf)
- $(VERSION_SED_SCRIPT) $(PKG_BUILD_DIR)/repositories.conf
+ $(call FeedSourcesAppend,$(PKG_BUILD_DIR)/repositories)
+ $(VERSION_SED_SCRIPT) $(PKG_BUILD_DIR)/repositories
endif
$(INSTALL_DIR) $(PKG_BUILD_DIR)/packages
ifeq ($(CONFIG_BUILDBOT),)
ifeq ($(CONFIG_IB_STANDALONE),)
$(FIND) $(call FeedPackageDir,libc) -type f \
- \( -name 'libc_*.ipk' -or -name 'kernel_*.ipk' -or -name 'kmod-*.ipk' \) \
+ \( -name 'libc_*.apk' -or -name 'kernel_*.apk' -or -name 'kmod-*.apk' \) \
-exec $(CP) -t $(PKG_BUILD_DIR)/packages {} +
else
- $(FIND) $(wildcard $(PACKAGE_SUBDIRS)) -type f -name '*.ipk' \
+ $(FIND) $(wildcard $(PACKAGE_SUBDIRS)) -type f -name '*.apk' \
-exec $(CP) -t $(PKG_BUILD_DIR)/packages/ {} +
endif
else
$(FIND) $(call FeedPackageDir,libc) -type f \
- \( -name 'libc_*.ipk' -or -name 'kernel_*.ipk' \) \
+ \( -name 'libc_*.apk' -or -name 'kernel_*.apk' \) \
-exec $(CP) -t $(IB_LDIR)/ {} +
endif
-ifneq ($(CONFIG_SIGNATURE_CHECK),)
- echo '' >> $(PKG_BUILD_DIR)/repositories.conf
- echo 'option check_signature' >> $(PKG_BUILD_DIR)/repositories.conf
- $(INSTALL_DIR) $(PKG_BUILD_DIR)/keys
- $(CP) -L $(STAGING_DIR_ROOT)/etc/opkg/keys/ $(PKG_BUILD_DIR)/
- $(CP) -L $(STAGING_DIR_ROOT)/usr/sbin/opkg-key $(PKG_BUILD_DIR)/scripts/
-endif
-
$(CP) $(TOPDIR)/target/linux $(PKG_BUILD_DIR)/target/
if [ -d $(TOPDIR)/staging_dir/host/lib/grub ]; then \
$(CP) $(TOPDIR)/staging_dir/host/lib/grub/ $(PKG_BUILD_DIR)/staging_dir/host/lib; \
$(CP) $(STAGING_DIR_HOST)/bin/* $(PKG_BUILD_DIR)/staging_dir/host/bin/
(cd $(PKG_BUILD_DIR); find staging_dir/host/bin/ $(IB_LDIR)/scripts/dtc/ -type f | \
$(BUNDLER_COMMAND))
+
+ $(INSTALL_DIR) $(PKG_BUILD_DIR)/staging_dir/hostpkg/bin
$(CP) $(TOPDIR)/staging_dir/host/lib/libfakeroot* $(PKG_BUILD_DIR)/staging_dir/host/lib
STRIP=$(STAGING_DIR_HOST)/bin/sstrip $(SCRIPT_DIR)/rstrip.sh $(PKG_BUILD_DIR)/staging_dir/host/bin/
+
(cd $(BUILD_DIR); \
tar -I '$(STAGING_DIR_HOST)/bin/xz -7e -T$(if $(filter 1,$(NPROC)),2,0)' -cf $@ $(IB_NAME) \
--mtime="$(shell date --date=@$(SOURCE_DATE_EPOCH))"; \
# override variables from rules.mk
PACKAGE_DIR:=$(TOPDIR)/packages
LISTS_DIR:=$(subst $(space),/,$(patsubst %,..,$(subst /,$(space),$(TARGET_DIR))))$(DL_DIR)
+PACKAGE_DIR_ALL:=$(TOPDIR)/packages
export OPKG_KEYS:=$(TOPDIR)/keys
OPKG:=$(call opkg,$(TARGET_DIR)) \
-f $(TOPDIR)/repositories.conf \
--cache $(DL_DIR) \
--lists-dir $(LISTS_DIR)
+APK:=$(call apk,$(TARGET_DIR)) \
+ --cache-dir $(DL_DIR) \
+ --allow-untrusted
+
+
include $(INCLUDE_DIR)/target.mk
-include .profiles.mk
mkdir -p $(TARGET_DIR) $(BIN_DIR) $(TMP_DIR) $(DL_DIR)
$(MAKE) package_reload >/dev/null
$(MAKE) package_install >/dev/null
- $(OPKG) list-installed $(if $(STRIP_ABI),--strip-abi)
+ $(APK) list --manifest
package_index: FORCE
@echo >&2
@echo Building package index... >&2
@mkdir -p $(TMP_DIR) $(TARGET_DIR)/tmp
- (cd $(PACKAGE_DIR); $(SCRIPT_DIR)/ipkg-make-index.sh . > Packages && \
- gzip -9nc Packages > Packages.gz; \
- $(if $(CONFIG_SIGNATURE_CHECK), \
- $(STAGING_DIR_HOST)/bin/usign -S -m Packages -s $(BUILD_KEY)) \
- ) >/dev/null 2>/dev/null
- $(OPKG) update >&2 || true
+ $(APK) add --initdb >&2 || true
+ $(APK) update >&2 || true
package_reload:
if [ -d "$(PACKAGE_DIR)" ] && ( \
- [ ! -f "$(PACKAGE_DIR)/Packages" ] || \
- [ ! -f "$(PACKAGE_DIR)/Packages.gz" ] || \
- [ "`find $(PACKAGE_DIR) -cnewer $(PACKAGE_DIR)/Packages.gz`" ] ); then \
+ [ ! -f "$(PACKAGE_DIR)/packages.adb" ] || \
+ [ "`find $(PACKAGE_DIR) -cnewer $(PACKAGE_DIR)/packages.adb`" ] ); then \
echo "Package list missing or not up-to-date, generating it." >&2 ;\
$(MAKE) package_index; \
else \
mkdir -p $(TARGET_DIR)/tmp; \
- $(OPKG) update >&2 || true; \
+ $(APK) update >&2 || true; \
fi
package_list: FORCE
@$(MAKE) -s package_reload
- @$(OPKG) list --size 2>/dev/null
+ @$(APK) list --size 2>/dev/null
package_install: FORCE
@echo
@echo Installing packages...
- $(OPKG) install $(firstword $(wildcard $(LINUX_DIR)/libc_*.ipk $(PACKAGE_DIR)/libc_*.ipk))
- $(OPKG) install $(firstword $(wildcard $(LINUX_DIR)/kernel_*.ipk $(PACKAGE_DIR)/kernel_*.ipk))
- $(OPKG) install $(BUILD_PACKAGES)
+ $(APK) add $(firstword $(wildcard $(LINUX_DIR)/libc-*.apk $(PACKAGE_DIR)/libc_*.apk))
+ $(APK) add $(firstword $(wildcard $(LINUX_DIR)/kernel-*.apk $(PACKAGE_DIR)/kernel_*.apk))
+ $(APK) add $(BUILD_PACKAGES)
prepare_rootfs: FORCE
@echo
image:
$(MAKE) -s _check_profile
- $(MAKE) -s _check_keys
+ #$(MAKE) -s _check_keys
(unset PROFILE FILES PACKAGES MAKEFLAGS; \
$(MAKE) -s _call_image \
$(if $(PROFILE),USER_PROFILE="$(PROFILE_FILTER)") \
manifest: FORCE
$(MAKE) -s _check_profile
- $(MAKE) -s _check_keys
+ #$(MAKE) -s _check_keys
(unset PROFILE FILES PACKAGES MAKEFLAGS; \
$(MAKE) -s _call_manifest \
$(if $(PROFILE),USER_PROFILE="$(PROFILE_FILTER)") \
@exit 1
endif
@$(MAKE) -s package_reload
- @$(OPKG) whatdepends -A $(PACKAGE)
+ @$(APK) list --depends $(PACKAGE)
.SILENT: help info image manifest whatdepends