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.


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.


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.


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

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. ;)


2

sudo apt-get install devscripts

dget [package-name]


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/.


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).


debian-goodiesdatang dengan banyak perintah yang berguna, lihat juga: askubuntu.com/a/1170001/777279
— Shayan
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.