Comment vérifier si un référentiel Ubuntu particulier est utilisé?

5

Nous utilisons notre propre référentiel pour les paquets Ubuntu et j'ai besoin d'un moyen de vérifier si le référentiel est vraiment utilisé sur chaque poste de travail. Je peux utiliser apt-cache policy|grep 'our-repository-address', mais certains de mes collègues ne l'aiment pas à cause de "grep". Cela ressemble à un hack peu fiable pour eux ... Existe-t-il un autre moyen d'effectuer ce contrôle ou apt-cache policy|grep 'our-repository-address'est-il tout à fait standard?

Jorge Castro
la source
Si cette commande fonctionne pour vous, grep ne présente aucun problème. grep est une commande standard et je voudrais leur montrer la sortie avec et sans grep et les diriger vers man grep.
Panther
1
Le recouvrement est incorrect, car il suppose que si l'adresse du référentiel est en apt-cachesortie, le référentiel est toujours activé. Bien que cela soit susceptible de l'être, rien n'empêche la apt-cachemise en œuvre de remédier à cela à l'avenir. Quelque chose comme ça apt-cache is-repo-enabled repo-addressserait beaucoup mieux.
Alexander Gladysh

Réponses:

2

Vous devez vérifier chaque paquet fourni par le référentiel individuellement.
Si package est uniquement une reconstruction locale et que la chaîne de version est identique à celle d'un autre référentiel, vous devez vérifier manuellement md5sums dans /var/lib/dpkg/info/PACKAGE.md5sums (si le package ne compile rien et que les structures de référentiel ne diffèrent pas il n’existe aucun moyen de préciser l’origine).

Si les chaînes de version diffèrent, vous pouvez utiliser le fragment de code suivant:

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

L'utilisation est script PACKAGELISTpar exemple:

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

Vous devez également ajuster composant, archive, ... pour votre archive locale (voir le fichier de version associé sous /var/lib/apt/lists).

Si le paquet est installé mais pas à partir de votre référentiel, vous obtenez le nom du paquet - tout va bien sinon.

Lasall
la source
0

Je suppose que vous connaissez déjà le fait que, si vous souhaitez que votre référentiel soit utilisé à la place du référentiel Ubuntu par défaut, vous devez placer la ligne de référentiel de votre répertoire en haut du /etc/sources.listfichier. Voici une question et une réponse à ce sujet.

Si vous avez déjà placé votre référentiel au sommet du fichier "sources.list", vous pouvez vérifier si l'installation du paquet utilise --print-urisswitch dans la apt-getcommande, comme ci-dessous.

sudo apt-get install scribes --print-uris 

Cette commande renvoie le résultat suivant sur ma machine (j'ai aussi un petit référentiel 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

Les deux dernières lignes indiquent clairement le référentiel utilisé pour les deux fichiers nécessaires.

J'espère que cela pourra vous aider dans votre problème.

Anwar
la source