Как проверить, используется ли определенный репозиторий Ubuntu?

Мы используем наш собственный репозиторий для пакетов Ubuntu, и мне нужен способ проверить, действительно ли репозиторий используется на каждой рабочей станции. Я могу использовать apt-cache policy|grep 'our-repository-address', но некоторым из моих коллег это не нравится из-за «grep». Это похоже на ненадежный хак для них ... Есть ли другой способ для этой проверки или apt-cache policy|grep 'our-repository-address' является вполне стандартным?

5
задан 2 March 2012 в 21:11

2 ответа

Я предполагаю, что вы уже знаете тот факт, что, если вы хотите, чтобы ваш репозиторий использовался вместо репозитория Ubuntu по умолчанию, вы должны поместить строку репо в верхнюю часть файла /etc/sources.list. Вот вопрос и ответ на эту тему.

Если вы уже поместили свой репозиторий в начало файла «sources.list», вы можете проверить, использует ли установка пакета переключатель --print-uris в команде 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

Последние две строки ясно указывают на репозиторий, используемый для двух файлов необходимо.

Надеюсь, это поможет некоторым в вашей проблеме.

0
ответ дан 2 March 2012 в 21:11

Необходимо проверить каждый пакет, обеспеченный репозиторием индивидуально.
Если пакет является только локальным, восстанавливают, и строка версии совпадает с в другом репозитории, который необходимо проверить вручную 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
ответ дан 2 March 2012 в 21:11

Другие вопросы по тегам:

Похожие вопросы: