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

MAD*_*ppy 7 apt docker alpine-linux

为什么我想知道这个:

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

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

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

如果 alpine linux 的 apt-get 源有等价物,这不会是问题(文档没有提到 apk 的源选项)

Github的页面只包含脚本和补丁,但没有确切的源代码,但随后的构建脚本似乎只是从上游获得源代码。

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

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

MAD*_*ppy 7

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

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

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

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

    apk info
    
    Run Code Online (Sandbox Code Playgroud)
  2. 安装 alpine-sdk(有关更多信息,请阅读 alpine wiki):

    apk --update add alpine-sdk
    
    Run Code Online (Sandbox Code Playgroud)
  3. 从 aports 克隆当前的 alpine 版本:

    git clone --depth 1 --branch v3.13.1 git://git.alpinelinux.org/aports
    
    Run Code Online (Sandbox Code Playgroud)
  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/gitgit包)运行abuild -F fetch verify作为根或abuild fetch verify作为普通用户(这将取在引用的源文件APKBUILD脚本)

    3. 包含 GPL 许可代码的包:为了遵守,GPL您必须提供获取的源文件和APKBUILD脚本本身。您也可以提供源文件,并APKBUILD在列出的软件包脚本makedepends中的变量APKBUILD脚本(大多数时候这些软件包例如openssl-dev是子包(见的运行时依赖如6点)openssl)看到了这个问题有关GPL,并构建依赖关系。

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

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