.deb 패키지 및 모든 종속성을 다운로드하는 방법은 무엇입니까?


14

이 주제에 대해 찾은 모든 대답에 대해 해결책은 패키지를 설치 해야하는 특정 컴퓨터 A에서 필요한 모든 종속성이 포함 된 파일을 만든 다음 다른 컴퓨터에서 다운로드하는 B를 호출하는 것입니다.

문제는 데스크톱을 포맷 해야하는 경우 나중에 오프라인으로 설치할 수 있도록 특정 중요 소프트웨어의 저장 장치를 갖고 싶습니다.

내 컴퓨터에 많은 중복 .deb 파일이 있는지 걱정하지 않아도되며 10MB 소프트웨어를 설치하기 위해 1GB의 파일을 저장하려는 경우에도 걱정하지 마십시오.

그래서 가능한 모든 종속성을 다운로드하고 싶습니다. 어쨌든 내가 할 수 있습니까?


답변:


22

나는 이것과 함께 갈 것이다.

apt-get download PACKAGE && apt-cache depends -i PACKAGE | awk '/Depends:/ {print $2}' | xargs apt-get download

그런 다음 dpkg -i *.deb다운로드 한 디렉토리에 설치할 수 있습니다 .


1
나는 그것이 일을했다고 생각합니다. 대단히 감사합니다. 다시 한 번 감사드립니다. :)
ebernardes

awk 및 xargs 명령의 기능을 설명해 주시겠습니까? 방금 리눅스를 사용하기 시작
했고이

apt-cache depends -iPACKAGE에 대한 중요한 종속성을 확인합니다. apt-get download PACKAGE추가 한 ppa 저장소에서 PACKAGE를 찾는 데 성공한 경우에만 실행됩니다 /etc/apt/sources.list. 이제 apt-cache depends -i PACKAGEform 출력이 있습니다 Depends: dependency-name. 우리는 의존성 이름 만 필요하므로 awk 가하는 일입니다. 두 번째 문자열 만 얻습니다. 예를 들어을 시도하십시오 apt-cache depends -i vim | awk '{print $2}' . 또한 &&의 오른쪽에있는 전체 줄은 하나의 진술로 간주 될 수 있습니다
Sergiy Kolodyazhnyy

1
감사! 그러나 나는 약간의 연구를했고, sed '/ ^ </ d'명령을 사용하여 apt-cache의 출력 중 일부를 삭제했습니다. 이미 좋았지 만 지금은 모든 경우에서 작동합니다. 고마워요!
ebernardes

dpkg -i *.deb좋지 않다, 그것은 의존성 순서로 패키지를 설치하지 않습니다. 따라서 모든 패키지를 설치하기 위해 여러 번 재 시도해야 할 수도 있습니다. 어쨌든 해결 방법?
Mithril

1

이것은 일회성입니까, 아니면 계속 업데이트하고 싶은 것입니까? 대부분의 경우 온라인으로 작업하고 있으며 만일을 대비하여 모든 패키지의 로컬 백업을 원하십니까?

APT 프록시 / 캐시로 작동하는 몇 가지 서비스를 설치할 수 있습니다. APT가 로컬 캐시를 가리키면 인터넷에서 다운로드하여 모든 패키지의 로컬 캐시 사본을 보관합니다. 네트워크에 동일한 패키지를 선택하여 많은 컴퓨터가있는 경우 매우 유용합니다.

내가 선호하는 apt 캐시는 대략 이지만 apt-cacher-ng 및 기타가 있습니다. 각각 캐싱을 구성하는 방법에 약간의 차이가 있습니다.

필자는 항상 최소 netinst 설치 프로그램을 사용하여 데비안 기반 시스템을 구축합니다. 즉, apt 캐시에는 일반적으로 시스템을 완전히 구축하기위한 거의 모든 패키지가 있습니다.


구식 버전 인 경우에도 나중에 소프트웨어를 업데이트하기 전에 일부 소프트웨어를 신속하게 설치해야하는 경우에 대비하여 보관하고 싶은 사항입니다. 감사합니다 :)
ebernardes

0

다음 파이썬 프로그램을 실행하십시오.

import subprocess
package=input("insert package name:")
t=subprocess.run(["apt-cache", "depends", "-i", package], stdout=subprocess.PIPE)
if t.stderr or t.returncode:
    print(t.stdout)
    exit(t.stderr)
#print(":", t.stdout)
needed_pacages=t.stdout.split(b"Depends: ")
print(package, "depends of", needed_pacages)
for choices in needed_pacages:
    one_choice_made=False
    for needed_package in choices.split(b"\n"):
        needed_package=needed_package.strip(b"\n ")
        t=subprocess.run(["apt-get", "download", needed_package])
        if t.stderr or t.returncode:
            print("ERROR: Status: {p.returncode}, stdout: {p.stdout}, stderr: {p.stderr}".format(p=t), "package name:", needed_package)
        else:
            one_choice_made = True
            #print("downloaded",vajalik_pakk)
            break
    if not one_choice_made:
        print("could not get one of dependecies", choices)

1
그리고 이것이 왜 대답보다 낫습니까?
RalfFriedl

0

다음 python3 프로그램을 실행하십시오.

import subprocess
olemas_olevad_pakid=set()
def r(pakk):
    t=subprocess.run(["apt-get", "download", pakk])
    if t.stderr or t.returncode:
        #print("could not load package: Status: {p.returncode}, stdout: {p.stdout}, stderr: {p.stderr}".format(p=t), "paki nimi:", pakk)
        return False
    olemas_olevad_pakid.add(pakk)
    t=subprocess.run(["apt-cache", "depends", "-i", pakk], stdout=subprocess.PIPE)
    if t.stderr or t.returncode:
        print(t.stdout)
        exit(t.stderr)
    #print(":", t.stdout)
    needed_pacages=t.stdout.split(b"Depends: ")[1:]
    #print(pakk, "needs packages:", needed_pacages)
    for choices in needed_pacages:
        one_choice_made=False
        for needed_package in choices.split(b"\n"):
            needed_package=needed_package.strip(b"\n ")
            if needed_package in olemas_olevad_pakid or r(needed_package):
                one_choice_made=True
                break
        if not one_choice_made:
            print("PROBLEM: could not download any of", choices)
            return False
    return True
#for pakk in packages_to_download:
#    print("pakk:",pakk)
#    r(pakk)
r(input("package name:"))

즉각적인 종속성뿐만 아니라 모든 종속성의 모든 종속성을 다운로드합니다. 그러나 설치가 dpkg -i *.deb실패했습니다. 아마 apt-cache depends -i package잘못된 정보를 제공하거나 some.deb 파일을 설치하려면 여전히 인터넷에 연결되어 있어야 할 수 있습니다.


dpkg가 올바른 순서로 패키지를 설치하지 않아 실패 할 수 있습니다. 모든 종속성이 설치 될 때까지 dpkg를 몇 번 다시 시도 할 수 있습니다.
Black Owl Kai
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.