題 如何判斷一個包來自Ubuntu或Debian存儲庫?


在基於Debian的系統(包括Ubuntu)上,如何在不實際開始下載的情況下告訴從哪個存儲庫下載包? aptitude show 和 apt-cache info 將顯示 部分 (例如,元數據包,基礎,圖形),但不是 知識庫 包裹所屬的(例如, http://ppa.launchpad.net/mactel-support/ppa/ubuntu 要么 http://us.archive.ubuntu.com/ubuntu/)。

安裝軟件包時,實際的存儲庫在下載過程中出現(它在apt和類似程序的“從...下載”輸出中打印出來)但是如何獲取包含軟件包的存儲庫(或特定的)的信息包的版本)  首先下載並安裝它?

另外,如何確定已安裝的軟件包的源存儲庫?


164
2018-02-09 19:14


起源


我發現這是Apt的缺點之一;從包安裝程序工具中的哪個存儲庫提供某個包,這並不容易。 - quack quixote


答案:


我跑 apt-cache policy <package name>

$ apt-cache policy wajig
wajig:
  Installed: 2.1
  Candidate: 2.1
  Version table:
 *** 2.1 0
        100 /var/lib/dpkg/status
     2.0.47 0
        500 file:/home/wena/.repo_bin/ squeeze/main i386 Packages
        500 ftp://ftp.is.co.za/debian/ squeeze/main i386 Packages

這意味著有三個 wajig 包:

  • 一個安裝(/var/lib/dpkg/status

  • 可以從本地存儲庫獲得的一個(file:/home/wena/.repo_bin/

  • 一個可從遠程存儲庫獲得的(ftp://ftp.is.co.za/debian),也碰巧有相同的版本(2.0.47)作為本地存儲庫中的一個


另外, apt-cache madison <package name> 將以表格格式顯示類似信息。

 wajig |        2.2 | mirror://mirrors.ubuntu.com/mirrors.txt/ precise/universe amd64 Packages
 wajig |        2.2 | mirror://mirrors.ubuntu.com/mirrors.txt/ precise/universe Sources

202
2018-01-22 22:00



但它沒有顯示已安裝軟件包的來源,是嗎? - Adobe
@Adobe在我的情況下, 2.1 任何存儲庫都不提供版本。它是本地建造的。 - Tshepang
什麼是安裝包裝的標誌? *** 要么 /var/lib/dpkg/status ? - SuB
也許兩者都?不確定。 - Tshepang
未安裝包時 apt-cache policy 說: Installed: (none)。 - John McGehee


啊哈!顯然,正確的 apt 命令不是 apt-cache info, 但反而, apt-cache showpkg

$ apt-cache showpkg linux-generic
Package: linux-generic
Versions: 
2.6.31.19.32 (/var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_karmic-updates_main_binary-amd64_Packages) (/var/lib/apt/lists/security.ubuntu.com_ubuntu_dists_karmic-security_main_binary-amd64_Packages) (/var/lib/dpkg/status)
 Description Language: 
                 File: /var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_karmic-updates_main_binary-amd64_Packages
                  MD5: 5d722da329763b9342d322f5a140005c

2.6.31.14.27 (/var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_karmic_main_binary-amd64_Packages)
 Description Language: 
                 File: /var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_karmic_main_binary-amd64_Packages
                  MD5: 5d722da329763b9342d322f5a140005c


Reverse Depends: 
Dependencies: 
2.6.31.19.32 - linux-image-generic (5 2.6.31.19.32) 
2.6.31.14.27 - linux-image-generic (5 2.6.31.14.27) 
Provides: 
2.6.31.19.32 - 
2.6.31.14.27 - 
Reverse Provides: 

File: line提供了之後的存儲庫信息 /var/lib/apt/lists/

一個錯誤報告 aptitude 無法顯示源存儲庫,但目前似乎該功能仍在願望清單上。


27
2018-02-10 00:57



8年後,這種能力特徵仍然存在,我不知道為什麼這個答案(apt-cache showpkg)沒有標記為正確的。 - Csaba Toth


這適用於我(顯示2vcard包的位置):

$ grep 2vcard /var/lib/apt/lists/* | grep "Filename:"

/var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_karmic_universe_binary-i386_Packages:Filename: pool/universe/2/2vcard/2vcard_0.5-3_all.deb

如果有多個版本可用,您可以應用其他過濾來檢查版本等。


8
2018-02-09 19:41



務實。我很驚訝這些信息無法通過任何前端訪問 dpkg但是。 - gotgenes
@got它可用: superuser.com/questions/106794/... - Tshepang


我想知道為什麼沒有人提到 aptitude。我用它所有的時間。

能力是:

  • 默認情況下發布的許多基於Debian的發行版。可以通過安裝到其他(如Ubuntu) sudo apt install aptitude
  • 不需要管理權限(至少對於下面的命令)
  • 確實很不錯 ncurses GUI(但大部分時間沒有它使用)
  • 提供了非常漂亮的輸出。要顯示軟件包的版本,請使用 aptitude versions 命令:

    me@wheezy:~$ aptitude versions kde-standard
    Package kde-standard:                        
    i A 5:77+deb7u1     stable              500
    p A 5:84            testing,unstable    130
    
  • 沒有超級牛的力量

每個字符串前面的字母表示包裹的狀態, 一世 安裝和 p 被清除(或從未安裝), 穩定測試 和 不穩定 是存儲庫定義,最後的數字是a 引腳優先

關於最近版本的aptitude的一個警告值得一提:默認情況下,它會顯示所有包,其中包括您搜索的名稱,因此請使用 正則表達式 例如,通過嚴格的名稱搜索一點魔力 aptitude versions ^kde-workspace$


8
2018-01-12 11:32



很好的命令,但它沒有按要求列出存儲庫。 - bjhend
其實 它確實。 - TranslucentCloud
你不明白。可以安裝額外的PPA。重要的是要知道包裝是否來自這樣的PPA。事實上,這就是我現在想要解決的問題 - 如果是的話,我可以刪除PPA,減少問題的風險。 - reinierpost
是的,你是對的 versions 您可以簡單地檢查給定包的apt固定值,而不是相關的存儲庫。如果您知道所有的回購以及它們是如何固定的,它仍然很有用。 - TranslucentCloud


遺憾的是,在安裝包時不會記錄此信息。如果存儲庫仍在源列表中且存儲庫仍具有包,那麼您可以做出正確的猜測:

grep -l PKG /var/lib/apt/lists/*

apt-cache showpkg顯示來自存儲庫數據庫的數據(不是安裝的數據),因此它是grep中相同信息的另一種形式。

即使是突觸也無法告訴(在Origin屏幕中)是否禁用了存儲庫並進行了更新。


6
2017-10-20 21:42





或者,受到Sunny的啟發,您可以嘗試:

# list installed restricted packages
for i in `dpkg --get-selections | awk '{ print $1 }'`; do egrep -lRI "^Filename: .*/${i}_[^/]+.deb" /var/lib/apt/lists/ | grep -q 'restricted' && echo $i; done

# list installed multiverse packages
for i in `dpkg --get-selections | awk '{ print $1 }'`; do egrep -lRI "^Filename: .*/${i}_[^/]+.deb" /var/lib/apt/lists/ | grep -q 'multiverse' && echo $i; done

PS。不是100%準確。


2
2018-01-22 15:55