如何檢查是否使用了特定的 Ubuntu 儲存庫?

如何檢查是否使用了特定的 Ubuntu 儲存庫?

我們正在使用自己的 Ubuntu 軟體包儲存庫,我需要一種方法來檢查該儲存庫是否確實在每個工作站上使用。我可以使用apt-cache policy|grep 'our-repository-address',但我的一些同事不喜歡它,因為“grep”。對他們來說,這看起來像是一個不可靠的黑客......是否有其他方法進行此檢查或者apt-cache policy|grep 'our-repository-address'是相當標準的?

答案1

您必須單獨檢查儲存庫提供的每個套件。
如果套件只是本地重建且版本字串與另一個儲存庫中的版本字串相同,則必須手動檢查 md5sums/var/lib/dpkg/info/PACKAGE.md5sums(如果套件不編譯任何東西並且儲存庫結構沒有不同,則無法澄清來源)。

如果版本字串不同,您可以使用以下程式碼片段:

#!/usr/bin/python
# Check original repository of installed packages from list.
# Usage: script PACKAGELIST

import apt
import sys
import re

# set values for local repository
component = "main"
archive = "experimental"
origin = "Debian"
label = "Debian"
site = "ftp.debian.org"

def main():
  try:
    pkglist = []
    f = open(sys.argv[1], "r")
    for line in f:
      if re.match('^Package: ', line):
        pkglist.append(re.sub('^Package: ', '', line).rstrip('\n'))
    f.close()

    cache = apt.Cache()
    for package in pkglist:
      pkg = cache[package]

      # check if package is installed
      if not pkg.installed:
        continue

      if pkg.installed.origins[0].component != component or \
          pkg.installed.origins[0].archive != archive or \
          pkg.installed.origins[0].origin != origin or \
          pkg.installed.origins[0].label != label or \
          pkg.installed.origins[0].site != site:
        print package
        #continue
      #else:
      #  print package + " is in repo."

  except KeyboardInterrupt:
    print "\nShutdown requested...exiting"
  except Exception, e:
    sys.stderr.write("An unecpected exeption was encountered: %s" % str(e) + "\n")
    sys.exit(1)

if __name__ == "__main__":
  main()

用法script PACKAGELIST例如:

script /var/lib/apt/lists/ftp.debian.org_debian_dists_experimental_main_binary-amd64_Packages

您還必須調整本機存檔的元件、存檔等(請參閱下方的相關發布文件/var/lib/apt/lists)。

如果安裝了軟體包但不是從您的儲存庫安裝的,您將獲得軟體包名稱 - 如果沒有安裝,一切都很好。

答案2

我假設,您已經知道這樣一個事實:如果您希望使用您的儲存庫而不是預設的 Ubuntu 儲存庫,您應該將您的儲存庫行放在檔案的頂部/etc/sources.list這是一個問題和答案關於那個話題。

如果您已經將儲存庫放在「sources.list」檔案的頂部,您可以檢查軟體包安裝是否--print-uris在命令中使用 switch apt-get,如下所示

sudo apt-get install scribes --print-uris 

該命令在我的機器上傳回以下結果(我還有一個小的本地存儲庫)

Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  python-gtksourceview2
Suggested packages:
  libgtksourceview2.0-dev
The following NEW packages will be installed:
  python-gtksourceview2 scribes
0 upgraded, 2 newly installed, 0 to remove and 634 not upgraded.
Need to get 0 B/1,191 kB of archives.
After this operation, 8,954 kB of additional disk space will be used.
Do you want to continue [Y/n]? y
'file:/media/Main/Linux-Software/Ubuntu/Precise/./precise-debs/python-gtksourceview2_2.10.1-2build1_i386.deb' python-gtksourceview2_2.10.1-2build1_i386.deb 90224 MD5Sum:3db673894b791f8843c3b0dcd8958e38
'file:/media/Main/Linux-Software/Ubuntu/Natty/natty/./scribes_0.4~r910-0ubuntu2_all.deb' scribes_0.4~r910-0ubuntu2_all.deb 1100712 MD5Sum:6555b7060ecd662fe1597724e9846b9c

最後兩行清楚地表明用於所需兩個文件的存儲庫。

希望這可以幫助解決您的問題。

相關內容