Bagaimana cara mengunduh paket .deb dan semua dependensi?

14

Untuk semua jawaban yang saya temukan tentang topik ini, solusinya adalah membuat, di komputer A tertentu di mana saya harus menginstal paket, file yang berisi semua dependensi yang diperlukan dan kemudian mengunduhnya di komputer lain, sebut saja B.

Masalahnya, saya ingin memiliki penyimpanan perangkat lunak kritis tertentu yang saya perlukan untuk dapat menginstalnya secara offline nanti jika saya harus memformat desktop saya.

Saya BENAR-BENAR TIDAK PEDULI tentang memiliki banyak file .deb berlebihan di komputer saya, dan saya BENAR-BENAR TIDAK PEDULI jika saya akan menyimpan 1gb file untuk menginstal perangkat lunak 10mb.

Jadi, saya ingin ada ketergantungan yang mungkin diunduh. Adakah yang bisa saya lakukan?

ebernardes
sumber
stackoverflow.com/questions/13756800/…
Ciro Santilli 冠状 病毒 审查 六四 事件 事件 法轮功

Jawaban:

22

Saya akan pergi dengan ini:

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

Kemudian Anda dapat menginstalnya dengan dpkg -i *.debdirektori yang Anda unduh ini.

Darek
sumber
1
Saya pikir itu berhasil, terima kasih banyak. Saya hanya akan mengujinya sedikit lagi sebelum saya kembali untuk mengucapkan terima kasih lagi :)
ebernardes
Bisakah Anda jelaskan apa yang dilakukan perintah awk dan xargs? Saya baru mulai menggunakan linux dan saya belum pernah melihat 2 perintah ini sebelumnya
ebernardes
apt-cache depends -iakan memeriksa dependensi penting untuk PAKET. Ini akan dieksekusi hanya jika apt-get download PACKAGEakan berhasil menemukan PAKET dari repositori ppa yang telah Anda tambahkan /etc/apt/sources.list. Sekarang, apt-cache depends -i PACKAGEmemiliki output bentuk Depends: dependency-name. Kami hanya perlu nama dependensi, jadi itulah yang dilakukan awk - hanya mendapatkan string kedua. Misalnya, coba lakukan apt-cache depends -i vim | awk '{print $2}' . Perhatikan juga, seluruh baris di sebelah kanan && dapat dianggap sebagai satu pernyataan
Sergiy Kolodyazhnyy
1
Terima kasih! Tapi saya melakukan riset, dan saya menggunakan perintah sed '/ ^ </ d' untuk menghapus beberapa output dari apt-cache tergantung, itu sudah baik, tetapi sekarang berfungsi dalam setiap kasus saya coba. Terima kasih banyak!
ebernardes
dpkg -i *.debtidak begitu baik, itu tidak menginstal paket berdasarkan pesanan dependensi. Jadi, Anda mungkin perlu mencoba beberapa kali untuk menginstal semua paket. Pokoknya untuk mengatasinya?
Mithril
1

Apakah ini satu kali, atau sesuatu yang Anda ingin terus perbarui? Apakah Anda sebagian besar bekerja secara online, dan hanya ingin cadangan lokal dari semua paket Anda, untuk berjaga-jaga?

Ada beberapa layanan yang dapat Anda instal yang bertindak sebagai proxy / cache APT. Anda mengarahkan APT ke cache lokal Anda, itu akan mengunduh dari Internet, dan menyimpan salinan semua paket dalam cache secara lokal. Ini bisa sangat berguna jika Anda memiliki banyak komputer di jaringan Anda dengan pilihan paket yang identik.

Cache apt saya lebih disukai kira - kira , tetapi ada juga apt-cacher-ng, dan beberapa lainnya. Masing-masing memiliki perbedaan kecil tentang bagaimana cache dapat dikonfigurasi.

Saya selalu menggunakan penginstal netinst minimum untuk membangun sistem berbasis Debian saya, yang berarti cache apt saya biasanya memiliki hampir semua paket untuk sepenuhnya membangun sistem saya.

Sakit kepala
sumber
Ini adalah sesuatu yang saya ingin jaga-jaga, jika saya perlu menginstal beberapa perangkat lunak dengan cepat, bahkan jika itu adalah versi yang sudah ketinggalan zaman, sebelum saya dapat memperbaruinya nanti. Saya akan memeriksanya, terima kasih :)
ebernardes
0

jalankan mengikuti program 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)
hilugan
sumber
1
Dan mengapa ini lebih baik daripada jawaban yang diterima?
RalfFriedl
0

jalankan program python3 berikut:

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:"))

Ini akan mengunduh semua ketergantungan semua ketergantungan tidak hanya dependensi langsung. Tetapi menginstalnya dengan dpkg -i *.debgagal. Mungkin karena apt-cache depends -i packagememberikan informasi yang salah atau beberapa file deb. Masih memerlukan koneksi internet untuk menginstal.

IKAN
sumber
Mungkin gagal karena dpkg tidak menginstal paket dalam urutan yang benar. Anda mungkin ingin mencoba ulang dpkg beberapa kali hingga semua dependensi diinstal.
Black Owl Kai