Apakah ada perintah yang tepat untuk mengunduh file deb dari repositori ke direktori saat ini?

46

Saya sering tertarik pada pemicu instalasi (postinst, postrm) atau bagian-bagian tertentu dari paket (seperti /usr/sharedan /etc). Saat ini, saya menjalankan perintah berikutnya untuk mengambil kode sumber:

apt-get source [package-name]

Kelemahannya, file ini seringkali jauh lebih besar dari paket biner dan tidak mencerminkan pohon instalasi.

Saat ini, saya mengunduh paket melalui http://packages.ubuntu.com/ :

  1. Pencarian untuk [package-name]
  2. Pilih paket
  3. Klik pada amd64 / i386 untuk mengunduh
  4. Unduh file yang sebenarnya

Ini terlalu lama bagi saya dan sebagai seseorang yang benar-benar menyukai shell, saya ingin melakukan sesuatu seperti perintah ( imajiner ) berikutnya :

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

Saya tidak dapat menemukan sesuatu seperti ini di halaman manual apt-get . Yang paling dekat yang saya temukan adalah --download-onlysaklar, tetapi ini menempatkan paket /var/cache/apt/archives(yang membutuhkan izin root) dan tidak dalam direktori saat ini.

Lekensteyn
sumber
Perbedaan pada mesin tanpa menyimpan file: ssh debianmachine1 "dpkg --get-choices" | diff - <(dpkg --get-choices)
Scott Robert Schreckengaust
Anda dapat menggunakan debgetdari paket debian-goodies.
Shayan

Jawaban:

59

Anda dapat menggunakan downloadsub-perintah apt, apt-getatau aptitude. Misalnya, jika $ PKG adalah paket yang Anda inginkan, salah satu dari ini akan melakukannya:

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

Ini tidak memerlukan hak akses root. Hal yang sama juga dapat diperkirakan menggunakan apt-getdan wget:

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

Akan tetapi, ini akan mengambil semua paket yang diperlukan untuk menginstal paket, sehingga Anda dapat mencoba membatasinya sebagai gantinya:

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

Anda juga dapat meletakkan baris wget ke suatu fungsi, untuk dapat menggunakannya sebagai perintah apt-download dengan nama paket sebagai parameter:

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

Perhatikan modifikasi: $ PKG diganti dengan $ 1 dan parameter -c memungkinkan unduhan terputus yang berkelanjutan.

Kees Cook
sumber
1
Luar biasa, inilah yang saya cari. Alasan lain untuk tetap menggunakan sistem saya, perintah lain yang bermanfaat yang tidak disediakan oleh aptadalah aptitude changelog $PKG.
Lekensteyn
4
Update: dari Natty (apt versi 0.8.11 tepatnya), yang aptitude downloadfitur tersedia dalam aptjuga: apt-get download $PKG.
Lekensteyn
manis, bekerja meskipun apt kuno saya v0.8.10
rogerdpack
tampaknya mereka menyingkirkan opsi --print-url
erjoalgo
Opsi --print-url masih ada
kumarharsh
8
sudo apt-get -o dir::cache::archives="/path/to/folder/" -d install package

catatan:

Anda perlu membuat folder bernama sebagian di folder tujuan.

mount.cifs
sumber
Tidak terdengar seburuk itu. Opsi tampaknya dijelaskan oleh man apt.conf. Saya ingin menghindari pembuatan folder.
Lekensteyn
Saya hanya ingin tahu, mengapa Anda menghindari membuat folder?
mount.cifs
Saya tidak perlu menyimpan paket selamanya dan menghindari membuat folder menghemat waktu juga.
Lekensteyn
Hanya ingin mencatat bahwa solusi ini juga akan menuntut penghapusan paket (mis. Jika Anda mengubah versi via /etc/apt/sources.listke yang lebih baru, dengan maksud untuk mengunduh paket selanjutnya) - dalam kasus seperti itu, wgetmetode di atas mungkin lebih berguna, jika Anda tidak tidak ingin menghapus apa pun ...
sdaau
5

Di Ubuntu 14.04 ( aptversi paket 1.0.1ubuntu2, saya percaya), apt-gettermasuk downloadperintah untuk mengunduh paket yang diberikan sebagai .debdalam direktori saat ini.

Misalnya, misalkan kita ingin mengunduh pengelola file Ranger:

$ apt-get download ranger

Hasil dalam:

$ ls . | grep ranger
ranger_1.6.0-1_all.deb
Aaron Santavicca
sumber
Ini sempurna. Semua solusi lain yang saya coba tidak berfungsi jika apt installtidak dapat memenuhi semua persyaratan ketergantungan. Saya hanya ingin file deb untuk bermain-main!
Raziel
3

Jika Anda ingin mengunduh semua paket deb dari daftar, Anda dapat melakukan ini:

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

Cukup cantumkan satu nama paket per baris. Seperti dalam file requirement.txt. Misalnya, dengan konten seperti ini:

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

Semoga ini membantu. ;)

Jayme Tosi Neto
sumber
2

sudo apt-get install devscripts

dget [package-name]

Michael Terry
sumber
Ini tidak memberikan jawaban untuk pertanyaan itu. Untuk mengkritik atau meminta klarifikasi dari penulis, tinggalkan komentar di bawah posting mereka.
s3lph
Bagaimana itu tidak memberikan jawaban? Ini mengunduh deb dari arsip ke direktori saat ini. Bukankah itu tepatnya pertanyaannya?
Michael Terry
Sedikit lebih detail mungkin bermanfaat. Meskipun ini memenuhi syarat teknis sebagai jawaban, Anda mungkin masih ingin memberikan lebih dari dua perintah.
s3lph
:: shrug :: Tidak seperti jawaban lain di sini, jawaban ini tidak memiliki ketentuan atau peringatan. Ini adalah jawaban sederhana untuk pertanyaan langsung.
Michael Terry
0

/var/cache/apt/archivesdapat dibaca dunia. Setelah itu apt-get -d, ekstrak saja dari sana ke direktori home Anda. Jalankan dpkg -e /var/cache/apt/archives/foo_version.deb foosementara di direktori home Anda dan file kontrol akan dibuang ke foo/.

psusi
sumber
Saya pikir masalah dengan metode ini adalah bahwa pengunduhan masih memerlukan hak administratif. Tampaknya konyol untuk pergi ke ekstrem seperti itu hanya untuk mendapatkan file ke direktori home Anda.
ændrük
Membuka deb. Bukan masalah, mengunduhnya. Ini mungkin bug atau tidak, tetapi paket-paket di / var / cache / apt / arsip` juga dipengaruhi oleh umask. Saya telah menetapkan umask 027 dan oleh karena itu, paket-paket dalam /var/cache/apt/archivestidak dapat dibaca oleh saya. Karena saya hanya perlu memeriksa isi paket, saya hanya perlu mengunduhnya sekali: ke /tmp.
Lekensteyn
0

Anda dapat menggunakan perintah debgetyang termasuk dalam paket debian-goodies.

Instal dengan:

sudo apt install debian-goodies

Unduh paket menggunakan:

debget <package_name>

Sebagai contoh:

debget debian-goodies

Yang akan mengunduh debian-goodies_0.79_all.debdi direktori Anda saat ini (lakukan pwduntuk mencetak direktori kerja Anda saat ini).

Shayan
sumber
debian-goodiesdatang dengan banyak perintah yang berguna, lihat juga: askubuntu.com/a/1170001/777279
Shayan