특정 Ubuntu 저장소가 사용되는지 확인하는 방법은 무엇입니까?

특정 Ubuntu 저장소가 사용되는지 확인하는 방법은 무엇입니까?

우리는 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

마지막 두 줄은 필요한 두 파일에 사용되는 저장소를 명확하게 나타냅니다.

이것이 귀하의 문제에 도움이 되기를 바랍니다.

관련 정보