From: Thomas Petazzoni via buildroot <buildroot@buildroot.org>
To: TIAN Yuanhao <tianyuanhao3@163.com>
Cc: buildroot@buildroot.org
Subject: Re: [Buildroot] [PATCH 1/1] package/apk-tools: new package
Date: Tue, 2 Aug 2022 00:16:29 +0200 [thread overview]
Message-ID: <20220802001629.111c5177@windsurf> (raw)
In-Reply-To: <20220511114508.3617270-1-tianyuanhao3@163.com>
Hello,
Thanks for your contribution.
On Wed, 11 May 2022 04:45:08 -0700
TIAN Yuanhao <tianyuanhao3@163.com> wrote:
> Alpine Package Keeper (apk) is a package manager developed for Alpine
> Linux.
>
> Signed-off-by: TIAN Yuanhao <tianyuanhao3@163.com>
> ---
>
> I did read [1] before I submitted this patch.
>
> I need a package manager in an embedded system and I found there are
> some Buildroot based projects having similar things like [2] and [3].
> Given the popularity of Alpine Linux in containers, I would like to
> choose apk as the package manager.
>
> There is a performance comparison of package managers at [4].
>
> An interesting finding is that OpenWrt seems to be planning to switch
> from opkg to apk [5].
>
> In conclusion, I think Buildroot should have apk.
>
> [1]: http://patchwork.ozlabs.org/project/buildroot/patch/1426736888-29437-5-git-send-email-steven@uplinklabs.net/
> [2]: https://github.com/batocera-linux/batocera.linux/blob/5.27/package/batocera/utils/pacman/pacman.mk
> [3]: https://github.com/gportay/linux-distros-br2-external/blob/master/package/apk-tools/apk-tools.mk
> [4]: https://michael.stapelberg.ch/posts/2019-08-17-linux-package-managers-are-slow/#measurements
> [5]: https://github.com/openwrt/openwrt/pull/4294
Thanks for your contribution and this argumentation. I will need some
feedback from other Buildroot maintainers before we can merge this
patch.
Could you describe a bit more how you are going to use it in the
context of Buildroot (which, as a reminder, doesn't support generate
binary packages) ?
> diff --git a/package/apk-tools/Config.in b/package/apk-tools/Config.in
> new file mode 100644
> index 0000000000..a7926a7c70
> --- /dev/null
> +++ b/package/apk-tools/Config.in
> @@ -0,0 +1,12 @@
> +config BR2_PACKAGE_APK_TOOLS
> + bool "apk-tools"
> + depends on !BR2_STATIC_LIBS # unconditionally shared
> + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_5 # compound literals
Then you need a Config.in "comment", look at how other packages do this.
> + depends on BR2_USE_MMU # fork()
> + select BR2_PACKAGE_OPENSSL
> + select BR2_PACKAGE_ZLIB
> + help
> + Alpine Package Keeper (apk) is a package manager developed for
> + Alpine Linux.
> +
> + https://gitlab.alpinelinux.org/alpine/apk-tools
> diff --git a/package/apk-tools/apk-tools.hash b/package/apk-tools/apk-tools.hash
> new file mode 100644
> index 0000000000..a9ec2fb2ce
> --- /dev/null
> +++ b/package/apk-tools/apk-tools.hash
> @@ -0,0 +1,3 @@
> +# Locally calculated
> +sha256 6362d8a14bb0460f15a041754148344cbfc0a953461c702717e0d263d054db4d apk-tools-v2.12.9.tar.bz2
> +sha256 b3c87315aae4c9f276c37168f2655dd8bd990544d7a0bbfb929664155c7ab257 LICENSE
> diff --git a/package/apk-tools/apk-tools.mk b/package/apk-tools/apk-tools.mk
> new file mode 100644
> index 0000000000..b92092cd73
> --- /dev/null
> +++ b/package/apk-tools/apk-tools.mk
> @@ -0,0 +1,53 @@
> +################################################################################
> +#
> +# apk-tools
> +#
> +################################################################################
> +
> +# Regenerate help.h when changing the version number
> +APK_TOOLS_VERSION = 2.12.9
> +APK_TOOLS_SITE = https://gitlab.alpinelinux.org/alpine/apk-tools/-/archive/v$(APK_TOOLS_VERSION)
> +APK_TOOLS_SOURCE = apk-tools-v$(APK_TOOLS_VERSION).tar.bz2
> +APK_TOOLS_LICENSE = GPL-2.0
> +APK_TOOLS_LICENSE_FILES = LICENSE
> +
> +APK_TOOLS_DEPENDENCIES = host-pkgconf openssl zlib
> +
> +APK_TOOLS_MAKE_OPTS = \
> + CROSS_COMPILE="$(TARGET_CROSS)" \
> + LUA=no \
> + SCDOC=: \
> + V=1 \
V=1 should probably be conditional on the $(QUIET) variable.
> + cmd_genhelp=:
I think we prefer to use /bin/true instead of : in such situations.
> +
> +ifeq ($(BR2_SHARED_LIBS),y)
> +APK_TOOLS_MAKE_OPTS += \
> + PKG_CONFIG="$(PKG_CONFIG_HOST_BINARY)"
> +else
> +APK_TOOLS_MAKE_OPTS += \
> + PKG_CONFIG="$(PKG_CONFIG_HOST_BINARY) --static" \
This should not be needed, in the BR2_STATIC_LIBS case, pkg-config
already uses --static.
> + STATIC=y
Isn't this forcing static linking? Your Config.in prevents
BR2_STATIC_LIBS=y configuration, so in the else clause of
BR2_SHARED_LIBS, you only have BR2_SHARED_STATIC_LIBS=y, a case where
we want to link dynamically but (ideally) build/install both shared and
static libraries (even though clearly many of our packages do not
comply with this).
> +endif
> +
> +define APK_TOOLS_CONFIGURE_CMDS
> + $(SED) 's/#\S\+\s\(APK_DEFAULT_ARCH\)\s.*/#define \1 $(BR2_ARCH)/' \
> + $(@D)/src/apk_defines.h
> + # Copy the pre-generated help.h so we don't need host-lua
> + $(INSTALL) -D -m 644 $(APK_TOOLS_PKGDIR)/help.h $(@D)/src/help.h
Please add host-lua as a dependency. This pre-generated help.h is
really horrible :-/
> +define APK_TOOLS_BUILD_CMDS
> + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) \
> + $(APK_TOOLS_MAKE_OPTS)
> +endef
> +
> +define APK_TOOLS_INSTALL_TARGET_CMDS
> + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) install \
> + $(APK_TOOLS_MAKE_OPTS) \
> + DESTDIR=$(TARGET_DIR)
> + # Prepare an empty apk database
> + $(INSTALL) -D -m 644 /dev/null $(TARGET_DIR)/etc/apk/world
What are you trying to do here? Seems weird to install /dev/null.
Best regards,
Thomas
--
Thomas Petazzoni, co-owner and CEO, Bootlin
Embedded Linux and Kernel engineering and training
https://bootlin.com
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
next prev parent reply other threads:[~2022-08-01 22:16 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-05-11 11:45 [Buildroot] [PATCH 1/1] package/apk-tools: new package TIAN Yuanhao
2022-08-01 22:16 ` Thomas Petazzoni via buildroot [this message]
2022-08-02 3:50 ` François Perrad
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220802001629.111c5177@windsurf \
--to=buildroot@buildroot.org \
--cc=thomas.petazzoni@bootlin.com \
--cc=tianyuanhao3@163.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox