.Deb paketi ve tüm bağımlılıklar nasıl indirilir?


11

Bu konuyla ilgili bulduğum tüm cevaplar için çözüm, paketi kurmam gereken belirli bir bilgisayarda, ihtiyaç duyduğu tüm bağımlılıkları içeren ve daha sonra başka bir bilgisayara indiren bir dosya oluşturmaktı.

Mesele şu ki, masaüstümü biçimlendirmek zorunda kalmam durumunda, daha sonra çevrimdışı kurabilmek için çalışmam gereken belirli kritik yazılımların bir deposuna sahip olmak istiyorum.

Bilgisayarımda çok fazla gereksiz .deb dosyasına sahip olduğum için DOĞRUDAN DEĞİLDİR ve 10 MB'lık bir yazılımı yüklemek için 1GB dosya depolayacaksam GERÇEKLEŞTİRMEME YAPMAYIN.

Bu yüzden, indirilen olası bir bağımlılığa sahip olmak istiyorum. Bunu yapabileceğim bir yer var mı?


Yanıtlar:


17

Bununla giderdim:

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

Sonra bunları dpkg -i *.debindirdiğiniz dizine yükleyebilirsiniz.


1
Sanırım işi yaptı, çok teşekkürler. Tekrar teşekkür etmek için geri dönmeden önce sadece biraz daha test edeceğim :)
ebernardes

Awk ve xargs komutlarının ne yaptığını bana açıklar mısın? Sadece Linux kullanmaya başladım ve bu iki komutu daha önce hiç görmedim
ebernardes

apt-cache depends -iPAKET için önemli bağımlılıkları kontrol edecektir. Yalnızca apt-get download PACKAGEeklediğiniz ppa havuzlarından PAKETİ bulmayı başarabilirse çalıştırılır /etc/apt/sources.list. Şimdi apt-cache depends -i PACKAGEform çıktısı var Depends: dependency-name. Sadece bağımlılık adlarına ihtiyacımız var, bu yüzden awk yapıyor - sadece ikinci dizgeyi alıyor. Örneğin, yapmayı deneyin apt-cache depends -i vim | awk '{print $2}' . Ayrıca, &&'nin sağındaki çizginin tamamı tek bir ifade olarak kabul edilebilir
Sergiy Kolodyazhnyy

1
Teşekkürler! Fakat bazı araştırmalar yaptım ve apt-cache çıktısının bir kısmını silmek için sed '/ ^ </ d' komutunu kullandım, zaten iyiydi, ama şimdi denediğim her durumda çalışıyor. Çok teşekkürler!
ebernardes

dpkg -i *.debo kadar iyi değil, paketi bağımlılık sırasına göre yüklemiyor. Bu nedenle, tüm paketi yüklemek için birkaç kez yeniden denemeniz gerekebilir. Yine de geçici çözüm için?
Mithril

1

Bu tek seferlik bir şey mi yoksa güncel tutmak istediğiniz bir şey mi? Çoğunlukla çevrimiçi çalışıyor musunuz ve sadece durumda tüm paketlerinizin yerel olarak yedeklenmesini mi istiyorsunuz?

APT proxy / önbellek görevi gören yükleyebileceğiniz çeşitli hizmetler vardır. APT'yi yerel önbelleğinize doğrultuyorsunuz, İnternetten indirilecek ve tüm paketlerin yerel önbelleğe alınmış bir kopyasını tutacak. Ağınızda aynı paket seçimine sahip çok sayıda bilgisayarınız varsa, bu çok yararlı olabilir.

Tercih edilen apt cache'm yaklaşık olarak , ancak apt-cacher-ng ve bir kaç tane daha var. Her birinin önbelleklemenin nasıl yapılandırılabileceği konusunda küçük farklılıklar vardır.

Debian tabanlı sistemlerimi oluşturmak için her zaman minimum netinst yükleyicilerini kullanıyorum, bu da apt cache'imin sistemleriimi tam olarak inşa etmek için neredeyse tüm paketlere sahip olduğunu gösterir.


Bu, daha sonra güncellemeden önce eski bir sürüm olsa bile hızlı bir şekilde bazı yazılımları yüklemem gerekirse, saklamak istediğim bir şey. Bunu kontrol edeceğim, teşekkürler :)
ebernardes

0

python programını takip et:

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
Ve neden bu kabul edilen cevaptan daha iyi?
RalfFriedl

0

Aşağıdaki python3 programını çalıştırın:

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

Sadece bağımlılıkları değil, tüm bağımlılıkların tüm bağımlılıklarını indirir. Ancak bunları yüklemek dpkg -i *.debbaşarısız oldu. Belki apt-cache depends -i packageyanlış bilgi verir, veya bazı some.deb dosyalarının yüklenmesi için internet bağlantısına ihtiyaç duyduğunuz için.


Dpkg paketleri doğru sırayla kurmadığından başarısız olabilir. Tüm bağımlılıklar kuruluncaya kadar dpkg'yi birkaç kez yeniden denemek isteyebilirsiniz.
Kara Baykuş Kai
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.