檢查特定 Debian 軟體包列表的更新
設置
我執行一個 Debian Squeeze 主機,我用它來建構一個多語言項目(python、java、php…)並自動(通過 jenkins)生成自定義包(debian 和 RPM)
問題
這些 Debian 軟體包的目標發行版是 Etch、Lenny 和 Squeeze。但是我們的項目有一些只能通過
DebianRelease + 1
儲存庫獲得的本地依賴項(即Lenny + 1 == Squeeze
,Squeeze + 1 == Wheezy
)。例如,我們需要jetty
來自 Lenny 的 Squeeze 的cyrus-imapd-2.4
包,以及來自 Squeeze 的 Wheezy 的包。一些附加資訊:
- 通過將 DebianRelease + 1 軟體包鏡像到我們自己的儲存庫,我們可以簡單地“手動向後移植”一些軟體包。例如,
jetty
來自 Squeeze 的包將在 Lenny 上執行良好,因為它不需要大量額外的依賴項- 但是我們確實需要重建一些包。例如,來自 Wheezy 的 cyrus-imapd-2.4 對 Squeeze 有很多不滿意的依賴。所以我們需要在 Squeeze 中重建它,然後將它上傳到我們的 repo。
問題
我需要一種簡單的方法來了解它們是否是這些額外軟體包的任何更新(“正常”和“安全”更新)。我可以編寫一個每週執行的簡單腳本,從文件中獲取一些參數,然後生成更新報告。假設文件如下所示:
jetty:squeeze cyrus-imapd-2.4:wheezy
該腳本應該以普通使用者身份執行,以免弄亂系統 apt 配置並發出適當的命令來生成該報告。
Debian 是否有一些內置的
apt-*
命令/選項專用於我可以用來編寫這個腳本的那種問題?如果沒有,有人能想出另一種干淨的解決方案來實現我的需要嗎?
是的。我為此使用了 apt-show-versions。安裝非常簡單:
# apt-get install apt-show-versions
在我的 /etc/apt/apt.conf 我有:
APT::Default-Release "unstable";
在 /e/a/sources.list 中,我有不穩定、實驗性和有時其他臨時儲存庫的條目,例如舊的 emacs-snapshot 存檔。
這是一個 asv 範例,其中包含來自實驗性的最新包:
# apt-show-versions -a xmonad xmonad 0.10.1~darcs20120707-1 install ok installed xmonad 0.10-4+b2 unstable 192.168.10.1:3142 xmonad 0.10.1~darcs20120707-1 experimental 192.168.10.1:3142 xmonad/experimental uptodate 0.10.1~darcs20120707-1
這是一個不穩定和實驗性的包的例子,但我只有不穩定的版本:
# apt-show-versions -a zsh zsh 4.3.17-1 install ok installed zsh 4.3.17-1 unstable 192.168.10.1:3142 zsh 5.0.0-2 experimental 192.168.10.1:3142 zsh/unstable uptodate 4.3.17-1
我可以使用 apt-show-versions 查看是否有實驗性升級:
# apt-show-versions |grep manually| head autogen/experimental *manually* upgradeable from 1:5.16-2 to 1:5.16.2-2 iproute/experimental *manually* upgradeable from 20121001-1 to 20121001-2 iproute-doc/experimental *manually* upgradeable from 20121001-1 to 20121001-2
這也很好,因為它會顯示在任何 repo 中不再可用的包:
#apt-show-versions |grep -v uptodate |grep "No available" brscan2 0.2.5-1 installed: No available version in archive dfc-depends 1.0 installed: No available version in archive google-chrome-unstable 24.0.1297.0-r162078 installed: No available version in archive