두 저장소 간의 중복을 표시하는 방법

두 저장소 간의 중복을 표시하는 방법

로컬에 2개의 저장소가 있습니다. 하나는 Squeeze의 복사본이고 다른 하나는 Reprepro에서 관리하는 사용자 지정 복사본입니다. 둘 사이에 중복 패키지 목록을 생성할 수 있는 기성 도구가 있습니까?

답변1

같이 가면 돼레플리카md5sum을 사용하여 파일을 비교하고 중복 항목을 제거할 수 있습니다. 하지만 저는 데비안 저장소에 대해 충분히 알지 못하므로 일부 패키지 레지스트리에서 이러한 파일을 제거해야 할 수도 있습니다(모든 저장소에 packages.gz 또는 이와 유사한 파일이 있다고 생각합니다).

그럼 어떻게 해야 할까요:

  1. fdupes를 사용하여 중복 목록 생성
  2. 이 목록을 사용하여 저장소 정보에서 패키지를 제거합니다.
  3. 실제 파일 삭제

답변2

어리석은 나, 나는 이것을 더 빠르고 쉽게 만들기 위해 스크립트를 작성해 왔습니다.

#!/usr/bin/python3

import os
import gzip
import apt_pkg

repo1 = "~/.repo_local/dists/cache/main/binary-i386/Packages.gz"
repo1 = os.path.expanduser(repo1)
repo1 = apt_pkg.TagFile(gzip.open(repo1, "rb"))
repo1 = dict([(pkg["Package"], pkg["Version"]) for pkg in repo1])

repo2 = "~/.repo_bin/dists/squeeze/main/binary-i386/Packages.gz"
repo2 = os.path.expanduser(repo2)
repo2 = apt_pkg.TagFile(gzip.open(repo2, "rb"))
repo2 = dict([(pkg["Package"], pkg["Version"]) for pkg in repo2])

apt_pkg.init_system()
found = False

for pkg in repo1:
    if pkg in repo2:
        vc = apt_pkg.version_compare(repo1[pkg], repo2[pkg])
        if vc == 0:
            print("{:<30}{:<30}({})".format(repo1[pkg], repo2[pkg], pkg))
            found = True

if found:
    print("=" * 90)
    print("{:<30}{:<30}({})".format("custom", "official", "package name"))
else:
    print("nothing matching search criteria found")

관련 정보