Debian
在 Debian 上,如何根據特定儲存庫中的軟體包審核已安裝的軟體包?
我管理著許多 Debian 伺服器,通常會跟踪 Debian 穩定儲存庫,但偶爾會從 Debian 測試儲存庫或第三方來源安裝。出於審計目的,在每台機器上,對於目前安裝的所有軟體包,我想將已安裝的軟體包版本與特定儲存庫(即 Debian 穩定儲存庫)中的軟體包版本進行比較。
使用 aptitude 搜尋模式,我可以辨識 Debian 穩定儲存庫中可用或不可用的已安裝軟體包:
aptitude search "?installed?origin(Debian)?archive(stable)" aptitude search "?installed?not(?origin(Debian)?archive(stable))"
但是對於 Debian 穩定儲存庫中可用的軟體包,我無法確定安裝的版本是否與儲存庫中的版本匹配。
我想可能可以使用 apt pinning 強制降級:
Package: * Pin: release n=stable, o=Debian Pin-Priority: 1001
然後使用空執行模式檢查哪些包會受到影響:
apt-get update apt-get --dry-run upgrade
但是要降低使用 apt pinning 超過 1000 個的風險,需要對 apt 進行單獨配置,這似乎比需要的複雜得多。
未來的一種可能性是建立一個私有儲存庫,並且只從 Debian 穩定儲存庫或私有儲存庫安裝。然後,如果可以從私有儲存庫獲得一個包,則可以假設(出於審計目的)它沒有從 Debian 穩定儲存庫安裝。只要從不手動安裝軟體包,它就可以很好地工作。但是對於一個簡單的命令來說,設置一個私有儲存庫似乎有點矯枉過正。
有沒有更好的方法來審核包版本?或者更好的是,審計包簽名?
像這樣:
aptitude search "?installed?not(?narrow(?installed,?origin(^Debian$)?archive(^stable$)))"
Using
?narrow
比較軟體包名稱和版本,因此上面將已安裝的軟體包名稱和版本與 Debian 穩定儲存庫中的軟體包名稱和版本進行比較,然後反轉匹配以查找與 Debian 穩定儲存庫中的版本不匹配的已安裝軟體包。Danila Ladner在評論中的建議也很有幫助;我將 aptitude 命令的結果輸入到
apt-cache policy <package>
,以便查看在初始搜尋中出現並需要仔細查看的包的版本詳細資訊。