Apt

如何獲取用於建構基礎 alpine linux docker 鏡像的原始碼?

  • February 28, 2021

為什麼我想知道這個:

目前,我使用 apt-get source 來獲取基於 Debian 的 docker 鏡像中所有包的原始碼,以在分發 docker 鏡像時遵守 GPL。

現在有幾個 docker 鏡像,我想使用基於 alpine 的 docker 鏡像,但我不知道如何獲取用於在這些 docker 鏡像中建構包的原始碼。

到目前為止我發現了什麼:

如果有 apt-get source for alpine linux 的等價物,這不是問題(文件沒有提到 apk 的源選項)

Github 頁面僅包含腳本和更新檔,但不包含確切的原始碼,但建構腳本似乎只是從上游獲取原始碼。

他們必須在某個地方提供原始碼,因為他們肯定會在 docker 鏡像中分發一些 GPL 許可的二進製文件。

如何(準確地)獲取用於建構 alpine docker 映像包的原始碼?

Alpines 包管理器APK沒有與dpkg源命令 ( apt-get source <PACKAGE_NAME>) 等效的功能。

要獲得與 alpine linux 上已安裝軟體包匹配的確切原始碼,您可以使用apkalpine-sdk命令的組合。

在 alpine linux 上獲取已安裝軟體包的確切原始碼的步驟:

  1. 獲取所有已安裝軟體包的列表:
apk info
  1. 安裝 alpine-sdk(更多資訊請閱讀 alpine wiki):
apk --update add alpine-sdk
  1. 從 aports 複製您目前的 alpine 版本:
git clone --depth 1 --branch v3.13.1 git://git.alpinelinux.org/aports
  1. 遍歷已安裝的包並在 aports 文件夾中找到正確的文件夾(注意您可以獲得的包版本apk version <PACKAGE_NAME>等於 <PACKAGE_NAME>-<PACKAGE_BUILD_VERSION>-<PACKGAE_RELEASE_VERSION>)。

  2. 獲取包原始碼(包括 alpine 特定的更新檔文件和配置文件)

  3. (可選)您可以為源文件設置自定義目標,export SRCDEST="/path/to/my/custom/src/destination"否則將在目前封包件夾中創建一個 src 文件夾

  4. 在與包名稱匹配的文件夾中(例如aports/main/git,對於git包)abuild -F fetch verify以 root 或abuild fetch verify普通使用者身份執行(這將獲取APKBUILD腳本中引用的源文件)

  5. 包含 GPL 許可程式碼的包:要遵守,GPL您必須提供獲取的源文件和APKBUILD腳本本身。您還必須為腳本變數中APKBUILD列出的包提供源文件和腳本(大多數情況下,這些包是執行時依賴項的子包(見第 6 點),例如)請參閱有關和建構依賴項的問題。makedepends``APKBUILD``openssl-dev``openssl``GPL

  6. 並非每個包在 aports 中都有自己的文件夾,因為有時列出的包apk info將是另一個包的子包。

在這種情況下,您必須獲取.PKGINFO文件中源變數中引用的包的原始碼,您可以使用apk fetch <sub-packagename>命令獲取該原始碼。

引用自:https://unix.stackexchange.com/questions/496755