วิธีดาวน์โหลดแพ็คเกจ. deb และการอ้างอิงทั้งหมด


14

สำหรับคำตอบทั้งหมดที่ฉันพบเกี่ยวกับหัวข้อนี้การแก้ปัญหาคือการสร้างในคอมพิวเตอร์บางเครื่อง A ที่ฉันต้องการติดตั้งแพคเกจไฟล์ที่มีการอ้างอิงทั้งหมดที่ต้องการและจากนั้นดาวน์โหลดในคอมพิวเตอร์เครื่องอื่นเรียกว่า B

สิ่งคือฉันต้องการที่จะมีการจัดเก็บซอฟต์แวร์ที่สำคัญบางอย่างฉันต้องทำงานเพื่อให้สามารถติดตั้งพวกเขาออฟไลน์ในภายหลังในกรณีที่ฉันต้องจัดรูปแบบเดสก์ทอปของฉัน

ฉันไม่สนใจเกี่ยวกับการมีไฟล์. deb ที่ซ้ำซ้อนจำนวนมากในคอมพิวเตอร์ของฉันและฉันไม่สนใจถ้าฉันกำลังจะจัดเก็บไฟล์ 1GB เพื่อติดตั้งซอฟต์แวร์ 10mb

ดังนั้นฉันต้องการดาวน์โหลดการอ้างอิงใด ๆ ที่เป็นไปได้ มีบางอย่างที่ฉันสามารถทำได้หรือไม่?


คำตอบ:


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 ทำอะไรได้บ้าง ฉันเพิ่งเริ่มใช้งาน linux และฉันไม่เคยเห็นคำสั่ง 2 คำสั่งเหล่านี้มาก่อน
ebernardes

apt-cache depends -iจะตรวจสอบการอ้างอิงที่สำคัญสำหรับแพคเกจ มันจะถูกดำเนินการเฉพาะในกรณีที่apt-get download PACKAGEจะประสบความสำเร็จในการหาแพคเกจออกมาจากที่เก็บ ppa /etc/apt/sources.listที่คุณได้เพิ่ม ตอนนี้มีการส่งออกของรูปแบบapt-cache depends -i PACKAGE Depends: dependency-nameเราต้องการชื่อการอ้างอิงเท่านั้นดังนั้นนั่นคือสิ่งที่ awk กำลังทำอยู่ - รับเพียงสตริงที่สอง apt-cache depends -i vim | awk '{print $2}' ตัวอย่างเช่นลองทำ โปรดทราบว่าบรรทัดทั้งหมดทางด้านขวาของ && ถือเป็นข้อความเดียว
Sergiy Kolodyazhnyy

1
ขอบคุณ! แต่ฉันทำการวิจัยบางอย่างและฉันใช้คำสั่ง sed '/ ^ </ d' เพื่อลบเอาต์พุตบางส่วนของ apt-cache ขึ้นอยู่กับว่ามันดีอยู่แล้ว แต่ตอนนี้มันใช้ได้ในทุกกรณีที่ฉันพยายาม ขอบคุณมาก!
ebernardes

dpkg -i *.debไม่ดีนักมันไม่ได้ติดตั้งแพ็คเกจตามลำดับการพึ่งพา ดังนั้นคุณอาจต้องลองใหม่หลายครั้งเพื่อติดตั้งแพ็คเกจทั้งหมด ยังไงก็ตามเพื่อแก้ไขปัญหา?
มิ ธ ริล

1

นี่เป็นสิ่งที่ครั้งเดียวหรือเป็นสิ่งที่คุณต้องการอัปเดตต่อไปหรือไม่ คุณทำงานออนไลน์เป็นส่วนใหญ่และเพียงต้องการสำรองข้อมูลแพ็คเกจทั้งหมดของคุณในกรณี?

มีบริการหลายอย่างที่คุณสามารถติดตั้งซึ่งทำหน้าที่เป็นพร็อกซี / แคช APT คุณชี้ APT ไปที่แคชในเครื่องของคุณมันจะดาวน์โหลดจากอินเทอร์เน็ตและเก็บสำเนาแพคเกจทั้งหมดในเครื่องไว้ในแคช สิ่งนี้มีประโยชน์มากหากคุณมีคอมพิวเตอร์จำนวนมากในเครือข่ายที่มีแพ็คเกจให้เลือกเหมือนกัน

แคช apt ที่ฉันชอบคือประมาณแต่ก็มี apt-cacher-ng และอีกสองสามคน แต่ละอันมีความแตกต่างเล็กน้อยเกี่ยวกับวิธีการกำหนดค่าแคช

ฉันมักจะใช้ตัวติดตั้ง netinst ที่น้อยที่สุดเพื่อสร้างระบบที่ใช้ Debian ซึ่งหมายความว่าแคชฉลาดของฉันมักจะมีแพ็คเกจเกือบทั้งหมดเพื่อสร้างระบบของฉันอย่างสมบูรณ์


นี่คือสิ่งที่ฉันต้องการเก็บไว้ในกรณีที่ฉันต้องติดตั้งซอฟต์แวร์บางอย่างอย่างรวดเร็วแม้ว่าจะเป็นรุ่นที่ล้าสมัยก่อนที่ฉันจะสามารถอัปเดตได้ในภายหลัง ฉันจะตรวจสอบว่าขอบคุณ :)
ebernardes

0

รันโปรแกรม python ต่อไปนี้:

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.