Como verificar se um repositório Ubuntu específico é usado?

Como verificar se um repositório Ubuntu específico é usado?

Estamos usando nosso próprio repositório para pacotes Ubuntu e preciso verificar se o repositório é realmente usado em cada estação de trabalho. Posso usar apt-cache policy|grep 'our-repository-address', mas alguns dos meus colegas não gostam por causa do "grep". Parece um hack não confiável para eles... Existe outra maneira de fazer essa verificação ou apt-cache policy|grep 'our-repository-address'é bastante padrão?

Responder1

Você deve verificar cada pacote fornecido pelo repositório individualmente.
Se o pacote for apenas uma reconstrução local e a string da versão for a mesma de outro repositório, você deverá verificar manualmente os md5sums em/var/lib/dpkg/info/PACKAGE.md5sums(se o pacote não compila nada e as estruturas do repositório não diferem, não há como esclarecer a origem).

Se as strings de versão forem diferentes, você poderá usar o seguinte trecho de código:

#!/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()

O uso é script PACKAGELIST, por exemplo:

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

Você também tem que ajustar componente, arquivo, ... para seu arquivo local (veja o arquivo Release relacionado em /var/lib/apt/lists).

Se o pacote estiver instalado, mas não do seu repositório, você obterá o nome do pacote - está tudo bem, caso contrário.

Responder2

Presumo que você já saiba que, se quiser que seu repositório seja usado em vez do repositório padrão do Ubuntu, você deve colocar sua linha de repositório no topo do /etc/sources.listarquivo.Aqui está uma pergunta e respostasobre esse assunto.

Se você já colocou seu repositório no topo do arquivo "sources.list", você pode verificar se a instalação de um pacote está usando --print-urisswitch no apt-getcomando, conforme o seguinte

sudo apt-get install scribes --print-uris 

Este comando retorna o seguinte resultado na minha máquina(Eu também tenho um pequeno repositório local)

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

As duas últimas linhas indicam claramente o repositório que está sendo usado para os dois arquivos necessários.

Espero que isso possa ajudar alguns no seu problema.

informação relacionada