如何获取用于构建基础 alpine linux docker 镜像包的源代码?

如何获取用于构建基础 alpine linux docker 镜像包的源代码?

为什么我想知道这个:

目前,我使用 apt-get source 来获取基于 Debian 的 docker 镜像中所有软件包的源代码,以便在分发 docker 镜像时遵守 GPL。

现在有几个 docker 镜像,我想使用基于 alpine 的 docker 镜像,但我不知道如何获取用于在这些 docker 镜像中构建包的源代码。

到目前为止我发现了什么:

如果 alpine linux 有一个等效的 apt-get 源代码,这将不是问题(文档没有提到 apk 的源选项)

Github页面仅包含脚本和补丁,但不包含确切的源代码,但构建脚本似乎只是从上游获取源代码。

他们必须在某个地方提供源代码,因为他们肯定会在 docker 镜像中分发一些 GPL 许可的二进制文件。

如何(准确地)获取用于构建 alpine docker 镜像包的源代码?

答案1

Alpines 包管理器APK没有与dpkgsource 命令 ( apt-get source <PACKAGE_NAME>) 等效的命令。

apk要获取与 alpine linux 上已安装的软件包匹配的确切源代码,您可以使用和alpine-sdk命令的组合。

在 alpine linux 上获取已安装软件包的确切源代码的步骤:

  1. 获取所有已安装软件包的列表:

    apk info
    
  2. 安装 alpine-sdk(了解更多信息阅读高山维基):

    apk --update add alpine-sdk
    
  3. 从 aports 克隆当前的 alpine 版本:

    git clone --depth 1 --branch v3.13.1 git://git.alpinelinux.org/aports
    
  4. 循环安装的软件包并在 aports 文件夹中找到正确的文件夹(注意您可以获得的软件包版本apk version <PACKAGE_NAME>等于 <PACKAGE_NAME>-<PACKAGE_BUILD_VERSION>-<PACKGAE_RELEASE_VERSION>)。

  5. 获取包源代码(包括alpine特定补丁文件和配置文件)

    1. (可选)您可以为源文件设置自定义目标,export SRCDEST="/path/to/my/custom/src/destination"否则将在当前包文件夹中创建 src 文件夹

    2. 在与包名称匹配的文件夹中(例如,aports/main/git对于git包)abuild -F fetch verify以 root 或abuild fetch verify普通用户身份运行(这将获取脚本中引用的源文件APKBUILD

    3. 包含 GPL 许可代码的软件包:为了遵守,GPL您必须提供获取的源文件和APKBUILD脚本本身。您还必须提供脚本变量APKBUILD中列出的包的源文件和脚本(大多数情况下,这些包是运行时依赖项的子包(参见第 6 点),例如)makedependsAPKBUILDopenssl-devopenssl这个问题关于GPL并构建依赖关系。

  6. 并非每个包在 aports 中都有自己的文件夹,因为有时列出的包apk info将是另一个包的子包。

    在这种情况下,您必须获取文件中 origin 变量引用的包的源代码.PKGINFO,您可以使用apk fetch <sub-packagename>命令获取该源代码。

相关内容