Wir verwenden unser eigenes Repository für Ubuntu-Pakete und ich brauche eine Möglichkeit, um zu überprüfen, ob das Repository wirklich auf jeder Arbeitsstation verwendet wird. Ich kann verwenden apt-cache policy|grep 'our-repository-address'
, aber einige meiner Kollegen mögen es wegen „grep“ nicht. Für sie sieht es wie ein unzuverlässiger Hack aus ... Gibt es eine andere Möglichkeit für diese Überprüfung oder apt-cache policy|grep 'our-repository-address'
ist es ziemlich standardmäßig?
Antwort1
Sie müssen jedes Paket, das vom Repository bereitgestellt wird, einzeln prüfen.
Wenn das Paket nur ein lokaler Rebuild ist und die Versionsnummer mit der in einem anderen Repository übereinstimmt, müssen Sie die MD5-Summen manuell prüfen in/var/lib/dpkg/info/PACKAGE.md5sums(Wenn das Paket nichts kompiliert und die Repository-Strukturen sich nicht unterscheiden, gibt es keine Möglichkeit, den Ursprung zu klären).
Wenn die Versionszeichenfolgen unterschiedlich sind, können Sie den folgenden Codeausschnitt verwenden:
#!/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()
Verwendung ist script PACKAGELIST
zB:
script /var/lib/apt/lists/ftp.debian.org_debian_dists_experimental_main_binary-amd64_Packages
Sie müssen außerdem Komponente, Archiv usw. für Ihr lokales Archiv anpassen (siehe zugehörige Release-Datei unter /var/lib/apt/lists
).
Wenn das Paket installiert ist, aber nicht aus Ihrem Repository, erhalten Sie den Paketnamen – andernfalls ist alles in Ordnung.
Antwort2
Ich gehe davon aus, dass Sie bereits wissen, dass Sie Ihre Repo-Zeile oben in die /etc/sources.list
Datei einfügen sollten, wenn Sie Ihr Repository anstelle des Standard-Ubuntu-Repositorys verwenden möchten.Hier ist eine Frage und Antwortzu diesem Thema.
Wenn Sie Ihr Repository bereits oben in der Datei "sources.list" abgelegt haben, können Sie überprüfen, ob eine Paketinstallation --print-uris
den Schalter im apt-get
Befehl verwendet, wie im Folgenden beschrieben
sudo apt-get install scribes --print-uris
Dieser Befehl gibt auf meiner Maschine das folgende Ergebnis zurück(Ich habe auch ein kleines lokales Repository)
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
Die letzten beiden Zeilen geben eindeutig das Repository an, das für die beiden benötigten Dateien verwendet wird.
Hoffe, dies hilft Ihnen bei Ihrem Problem.