우리는 Ubuntu 패키지용으로 자체 저장소를 사용하고 있으며 해당 저장소가 각 워크스테이션에서 실제로 사용되는지 확인할 수 있는 방법이 필요합니다. 를 사용할 수 있지만 apt-cache policy|grep 'our-repository-address'
일부 동료는 "grep" 때문에 이를 좋아하지 않습니다. 신뢰할 수 없는 해킹처럼 보입니다... 이 확인을 위한 다른 방법이 있습니까, 아니면 apt-cache policy|grep 'our-repository-address'
꽤 표준적인 것입니까?
답변1
저장소에서 제공하는 각 패키지를 개별적으로 확인해야 합니다.
패키지가 로컬 재구축일 뿐이고 버전 문자열이 다른 저장소와 동일한 경우 수동으로 md5sum을 확인해야 합니다./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
나는 당신이 이미 기본 우분투 저장소 대신 당신의 저장소를 사용하고 싶다면 당신의 repo 라인을 /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
마지막 두 줄은 필요한 두 파일에 사용되는 저장소를 명확하게 나타냅니다.
이것이 귀하의 문제에 도움이 되기를 바랍니다.