Чи є влучна команда для завантаження файлу deb із сховищ до поточного каталогу?


46

Мене часто цікавлять тригери встановлення (postinst, postrm) або певні частини пакунків (як /usr/shareі /etc). На даний момент я виконую наступну команду для отримання вихідного коду:

apt-get source [package-name]

Мінус полягає в тому, що цей файл часто набагато більший, ніж двійковий пакет і не відображає дерево інсталяції.

Зараз я завантажую пакунки через http://packages.ubuntu.com/ :

  1. Шукати [package-name]
  2. Виберіть пакет
  3. Клацніть на amd64 / i386 для завантаження
  4. Завантажте власне файл

Для мене це забирає занадто багато часу, і як хтось, кому дуже подобається оболонка, я хотів би зробити щось на зразок наступної ( уявної ) команди:

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

Я не зміг знайти щось подібне на сторінці посібника з підходу . Найбільш близьким, що я знайшов, було --download-onlyкомутатор, але це ставить пакунок /var/cache/apt/archives(для якого потрібні кореневі дозволи), а не в поточному каталогу.


Відмінності на машинах без збереження файлів: ssh debianmachine1 "dpkg --get-select" | diff - <(dpkg --get-selection)
Скотт Роберт Шрекенгауст

Ви можете використовувати debgetз пакета debian-goodies.
Шаян

Відповіді:


59

Ви можете використовувати downloadпідкоманду apt, apt-getабо aptitude. Наприклад, якщо $ PKG - це той пакет, який ви хочете, будь-який із них буде робити:

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

Для цього не потрібні кореневі привілеї. Те саме можна наблизити apt-getі за допомогою wget:

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

Це, однак, отримає всі пакунки, необхідні для встановлення пакету, тому ви можете спробувати обмежити його:

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

Ви також можете помістити рядок wget у функцію, щоб мати можливість використовувати його як команду apt-download із назвою пакета як параметром:

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

Зверніть увагу на зміни: $ PKG замінено на $ 1, а параметр -c дозволяє продовжувати перервані завантаження.


1
Відмінно, це те, що я шукаю. Ще одна причина , щоб зберегти здатність в моїй системі, інша корисна команда , яка не передбачена aptв aptitude changelog $PKG.
Лекенштейн

4
Оновлення: від Natty (схильний версія 0.8.11 , щоб бути точним), то aptitude downloadфункція доступна , aptа також: apt-get download $PKG.
Лекенштейн

солодкий, працює, незважаючи на мій старовинний спритний v0.8.10
rogerdpack

Здається, вони покінчили з опцією --print-urls
erjoalgo

Опція --print-urls все ще є
кумархарш

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

Примітка:

Вам потрібно створити папку з назвою часткова в папці призначення.


Це не так погано звучить. Здається, варіанти описані man apt.conf. Я хотів би уникнути створення папки.
Лекенштейн

Мені просто цікаво, чому б ти не уникав створення папки?
mount.cifs

Мені не потрібно зберігати пакунок назавжди і уникати створення папки заощаджує час.
Лекенштейн

Я просто хотів зазначити, що це рішення також буде наполягати на видаленні пакунків (наприклад, якщо ви зміните версію /etc/apt/sources.listна нову, з наміром завантажити пізніші пакети) - у такому випадку wgetспосіб вище може бути кориснішим, якщо ви Не хочу нічого видаляти ...
sdaau

5

В Ubuntu 14.04 ( aptверсія пакета 1.0.1ubuntu2, я вважаю), apt-getвключає downloadкоманду для завантаження даного пакету як .debу поточному каталозі.

Наприклад, припустимо, ми хочемо завантажити менеджер файлів Ranger:

$ apt-get download ranger

Призводить до:

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

Це прекрасно. Усі інші рішення, які я намагався, не працюють, якщо apt installне можуть відповідати всім вимогам залежності. Я просто хотів .deb файл для майстерності!
Разіель

3

Якщо ви хочете завантажити всі пакети дебютів зі списку, ви можете зробити це:

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

Просто введіть одну назву пакета на рядок. Як у файлі вимог.txt. Наприклад, із таким вмістом:

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

Сподіваюсь, це допомагає. ;)


2

sudo apt-get install devscripts

dget [package-name]


Це не дає відповіді на запитання. Щоб критикувати або вимагати роз'яснення у автора, залиште коментар під їх дописом.
s3lph

Як це не дає відповіді? Це завантажує деб з архіву в поточний каталог. Хіба це не саме те питання?
Майкл Террі

Трохи докладніше може бути корисно. Хоча це технічно кваліфікується як відповідь, ви все одно можете надати більше двох команд.
s3lph

:: знизують плечима: На відміну від інших відповідей тут, у цьому немає жодних застережень та застережень. Це проста відповідь на пряме запитання.
Майкл Террі

0

/var/cache/apt/archivesє читабельним у всьому світі. Після цього apt-get -dпросто витягніть його звідти до домашнього каталогу. Запустіть, dpkg -e /var/cache/apt/archives/foo_version.deb fooперебуваючи у вашому домашньому каталозі, і файли керування будуть завантажені у foo/.


Я думаю, що проблема цього методу полягає в тому, що для завантаження все ще потрібні адміністративні привілеї. Дуже нерозумно йти до таких крайнощів лише для того, щоб отримати файл у домашній каталог.
ændrük

Відкриття .debs не є проблемою, її завантаження є. Це може бути помилка чи ні, але на пакунки в / var / cache / apt / archives` впливає і umask. Я встановив umask 027, і тому пакети в /var/cache/apt/archivesмені не можуть бути прочитані. Оскільки мені потрібно просто вивчити вміст пакета, мені просто потрібно завантажити його один раз: to /tmp.
Лекенштейн

0

Ви можете використовувати команду, debgetяка входить в пакет debian-goodies.

Встановіть його за допомогою:

sudo apt install debian-goodies

Завантажуйте пакети, використовуючи:

debget <package_name>

Наприклад:

debget debian-goodies

Який буде завантажений debian-goodies_0.79_all.debу поточний каталог (зробіть pwdдля друку поточної робочої директорії).


debian-goodiesПоставляється з великою кількістю корисних команд, також дивіться: askubuntu.com/a/1170001/777279
Шаян
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.