로컬에 2개의 저장소가 있습니다. 하나는 Squeeze의 복사본이고 다른 하나는 Reprepro에서 관리하는 사용자 지정 복사본입니다. 둘 사이에 중복 패키지 목록을 생성할 수 있는 기성 도구가 있습니까?
답변1
같이 가면 돼레플리카md5sum을 사용하여 파일을 비교하고 중복 항목을 제거할 수 있습니다. 하지만 저는 데비안 저장소에 대해 충분히 알지 못하므로 일부 패키지 레지스트리에서 이러한 파일을 제거해야 할 수도 있습니다(모든 저장소에 packages.gz 또는 이와 유사한 파일이 있다고 생각합니다).
그럼 어떻게 해야 할까요:
- fdupes를 사용하여 중복 목록 생성
- 이 목록을 사용하여 저장소 정보에서 패키지를 제거합니다.
- 실제 파일 삭제
답변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")