強制 apt /yum 不安裝依賴項
安裝時是否有一個命令行選項可以告訴
apt
或yum
不安裝Depends
軟體包的軟體包?在 python/pip 我可以這樣做:
pip3 install --no-deps -r requirements.txt
基本原理
我們定期建構 docker 鏡像。在那些我們有
apt
安裝沒有附加特定版本的軟體包的說明。這個過程非常不穩定,因為——不是我們自己的錯——突然我們的測試開始崩潰。我們希望將包固定到其特定的、經過測試的版本。例子:
$ sudo apt-get install python3=3.5.1-3
問題是即使您將所需的包設置為特定版本,該包中的依賴項也是您無法控制的。這些可以隨時更新,地毯將從您的下方拉出。
我們想將每個包分解成完整的依賴列表,然後告訴 apt/yum 只安裝該列表,不再安裝。我們總是可以強制開發人員在這些包上固定版本(特別是如果我們將它們全部放在像 pip 的 requirements.txt 之類的文件中)。
這不會像所述那樣回答您的問題,但應該可以幫助您解決潛在的情況。
當需要具有不變版本的包源時,傳統的解決方案是使用私有包儲存庫:鏡像您選擇的發行版的儲存庫,然後保持原樣,只更改包零碎。後一部分是測試的痛苦部分,因為與通用基礎儲存庫相比,不同的測試場景通常最終需要不同的包升級,然後您最終需要維護多個儲存庫……
當與鏡像系統資料庫結合使用時,容器提供了一個更簡單的解決方案。像往常一樣建構您的基礎測試映像,並使用您的所有測試依賴項:
FROM debian:10 RUN apt update && apt upgrade && apt install ...
建構它,並使用適當的標籤(日期,如果沒有更好的話)將其推送到您的(私人)系統資料庫。然後您的測試場景可以基於該圖像,該圖像不會改變。當您決定需要升級特定軟體包時,請使用新映像,並適當依賴您的基礎映像:
FROM testbase:20200229 RUN apt update && apt install ...
僅列出您要升級(或安裝)的軟體包;這樣,只有那些包將被升級,除非它們在自己的依賴項中需要更新的包,在這種情況下也會被拉入(但沒有簡單的方法可以避免這種情況,所以無論如何你都必須處理它)。
您可以定期重建和推送基本測試映像,而不會影響現有測試,只要後者引用適當的標記映像即可。