Depolardan mevcut dizine bir deb dosyası indirmek için apt komutu var mı?


46

Kurulum tetikleyicileri (postinst, postrm) veya paketlerin belirli kısımları ( /usr/shareve benzeri /etc) ile sık sık ilgilenirim . Şu anda, kaynak kodu almak için bir sonraki komutu çalıştırıyorum:

apt-get source [package-name]

Olumsuz tarafı, bu dosya genellikle ikili paketten çok daha büyüktür ve kurulum ağacını yansıtmaz.

Şu anda paketleri http://packages.ubuntu.com/ adresinden indiriyorum :

  1. Aramak [package-name]
  2. Paketi seç
  3. İndirmek için amd64 / i386 üzerine tıklayın.
  4. Gerçek dosyayı indirin

Bu benim için çok uzun sürüyor ve kabuğu çok seven biri olarak, bir sonraki ( hayali ) komut gibi bir şey yapmak istiyorum :

apt-get get-deb-file [package-name]

Apt-get manual sayfasında böyle bir şey bulamadım . Bulduğum en yakın --download-onlyanahtar, ancak bu paketi /var/cache/apt/archivesgeçerli dizine değil (kök izinleri gerektirir) içeriyor.


Dosya kaydetmeden makinelerde farklılıklar: ssh debianmachine1 "dpkg --get-choices" | diff - <(dpkg --get-seçimleri)
Scott Robert Schreckengaust

debgetPaketten kullanabilirsiniz debian-goodies.
Shayan

Yanıtlar:


59

Sen kullanabilirsiniz downloadalt komutu apt, apt-getveya aptitude. Örneğin, $ PKG istediğiniz paketse , bunlardan herhangi biri:

apt-get download $PKG
apt download $PKG
aptitude download $PKG

Bu kök ayrıcalıkları gerektirmez. Aynı apt-getve kullanarak aşağıdakiler de kullanılabilir wget:

wget $(apt-get install --reinstall --print-uris -qq $PKG | cut -d"'" -f2)

Bununla birlikte, bu, paketi yüklemek için gereken tüm paketleri getirir; böylece, onu sınırlandırmayı deneyebilirsiniz:

wget $(apt-get install --reinstall --print-uris -qq $PKG | cut -d"'" -f2 | grep "/${PKG}_")

Bir wget satırını, bir fonksiyon olarak paket ismiyle apt-download komutu olarak kullanabilmek için bir parametre olarak da kullanabilirsiniz:

function apt-download { wget -c $(apt-get install --reinstall --print-uris -qq $1 | cut -d"'" -f2); }

Değişikliklere dikkat edin: $ PKG $ 1 ile değiştirildi ve -c parametresi kesintisiz indirmeye devam etmeyi sağlıyor.


1
Mükemmel, aradığım şey bu. Başka neden sistemimde yetenek tutmak, tarafından sağlanmıyorsa diğer yararlı komut aptolduğunu aptitude changelog $PKG.
Lekensteyn

4
Güncelleme: Natty dan (apt versiyonu 0.8.11 kesin olarak), aptitude downloadözellik mevcuttur aptyanı: apt-get download $PKG.
Lekensteyn

tatlı, benim eski apt v0.8.10 rağmen çalışır
rogerdpack

görünüşte --print-urls seçeneğiyle
yaptılar

Print-URL'ler seçenek hala orada
kumarharsh

8
sudo apt-get -o dir::cache::archives="/path/to/folder/" -d install package

Not:

Hedef klasörde kısmi adlı bir klasör oluşturmanız gerekir.


O kadar da kötü gelmiyor. Seçenekler tarafından tarif edilmiş gibi görünüyor man apt.conf. Klasörün oluşturulmasından kaçınmak istiyorum.
Lekensteyn

Sadece merak ediyorum, neden klasörü oluşturmaktan kaçındın?
mount.cif, 16:11

Paketi sonsuza kadar saklamama gerek yok ve klasör oluşturmaktan kaçınmak da zaman kazandırıyor.
Lekensteyn

Sadece bu çözümün paketin kaldırılması konusunda da ısrar edeceğini belirtmek istedim (örneğin /etc/apt/sources.list, daha sonraki paketleri indirmek niyetiyle sürümü yeni bir sürümle değiştirirseniz ) - böyle bir durumda, wgetyukarıdaki yöntem daha yararlı olabilir. hiçbir şeyi kaldırmak istemiyorum ...
sdaau

5

Ubuntu 14.04'te ( aptpaket sürümü 1.0.1ubuntu2, inanıyorum), verilen paketi mevcut dizinde olduğu gibi indirme komutunu apt-getiçerir .download.deb

Örneğin, dosya yöneticisini indirmek istediğimizi varsayalım Ranger:

$ apt-get download ranger

Sonuçlar:

$ ls . | grep ranger
ranger_1.6.0-1_all.deb

Bu harika. Çalıştığım diğer tüm çözümler apt install, tüm bağımlılık gereksinimlerini karşılayamıyorsa işe yaramaz . Ben sadece incelemek için .deb dosyasını istedim!
Raziel

3

Tüm deb paketlerini bir listeden indirmek istiyorsanız, bunu yapabilirsiniz:

cat path/to/text/file.txt | xargs apt-get install --reinstall --print-uris -qq $PKG | cut -d"'" -f2 | xargs wget

Her satıra bir paket adı girin. Needs.txt dosyasındaki gibi. Örneğin, bunun gibi içeriklerle:

apache2-mpm-event
curl
dmidecode
ethtool
libapache2-mod-wsgi
libapache2-mod-python

Bu yardımcı olur umarım. ;)


2

sudo apt-get install devscripts

dget [package-name]


Bu soruya bir cevap vermiyor. Bir yazarın açıklamasını eleştirmek veya talep etmek için yazının altına bir yorum bırakın.
s3lph

Nasıl bir cevap vermiyor? Bu, arşivden geçerli dizine bir deb indirir. Sorunun tam olarak bu değil miydi?
Michael Terry,

Biraz daha fazla ayrıntı faydalı olabilir. Bu teknik olarak bir cevap olarak nitelendirilse de, hala ikiden fazla komut vermek isteyebilirsiniz.
s3lph

:: shrug :: Buradaki diğer cevapların aksine, bunun hiçbir şartı ya da uyarısı yoktur. Basit bir soruya basit bir cevap.
Michael Terry

0

/var/cache/apt/archivesdünya okunabilir. Sonra apt-get -d, oradan ana dizininize çıkartın. dpkg -e /var/cache/apt/archives/foo_version.deb fooAna dizininizdeyken çalıştırın ve kontrol dosyaları içine atılacak foo/.


Bence bu yöntemle ilgili sorun indirme işleminin hala idari ayrıcalıklar gerektiriyor. Sadece ev dizinine dosya almak için bu uç noktalara gitmek aptalca görünüyor.
ændrük

.Debs'i açmak sorun değil, indirmektir. Hata olabilir veya olmayabilir, ancak / var / cache / apt / archives `içindeki paketler de umask'tan etkilenir. 027 umask ayarladım ve bu nedenle, içindeki paketler /var/cache/apt/archivesbenim tarafımdan okunamıyor. Sadece paket içeriğini incelemeye ihtiyaç duyduğum için bir kere indirmem gerekiyor: to /tmp.
Lekensteyn

0

debgetPakete dahil olan komutu kullanabilirsiniz debian-goodies.

Şununla yükleyin:

sudo apt install debian-goodies

Paketleri kullanarak indir:

debget <package_name>

Örneğin:

debget debian-goodies

debian-goodies_0.79_all.debMevcut dizininizde hangi indirilecek ( pwdmevcut çalışma dizininizi yazdırmak için yapın).


debian-goodiesbirçok yararlı komutla birlikte gelir, ayrıca bkz: askubuntu.com/a/1170001/777279
Shayan
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.