Есть ли команда apt для загрузки файла 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]

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


Различия на машинах без сохранения файлов: ssh debianmachine1 "dpkg --get-selections" | diff - <(dpkg --get-selections)
— Скотт Роберт

Вы можете использовать debgetиз пакета debian-goodies.
— Шаян

Ответы:


59

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

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

Это не требует привилегий root. То же самое можно аппроксимировать, используя 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
Отлично, это то, что я ищу. Еще одна причина, чтобы сохранить aptitude в моей системе, другая полезная команда, которая не предоставляется apt- aptitude changelog $PKG.
— Лекенстейн

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

сладкий, работает несмотря на мою древнюю apt v0.8.10
— rogerdpack

кажется, они покончили с опцией --print-
— urls

Опция --print-urls все еще там
— kumarharsh

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

Если вы хотите загрузить все пакеты deb из списка, вы можете сделать это:

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

Просто введите одно имя пакета в строке. Как в файле require.txt. Например, с таким содержимым:

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

Надеюсь это поможет. ;)


2

sudo apt-get install devscripts

dget [package-name]


Это не дает ответа на вопрос. Чтобы критиковать или запросить разъяснения у автора, оставьте комментарий под своим постом.
— s3lph

Как это не дает ответ? Это загружает деб из архива в текущий каталог. Это не совсем то, что был вопрос?
— Майкл Терри

Немного подробнее может быть полезно. Хотя это технически квалифицируется как ответ, вы все равно можете предоставить более двух команд.
— s3lph

:: shrug :: В отличие от других ответов здесь, у этого нет никаких оговорок или оговорок. Это простой ответ на простой вопрос.
— Майкл Терри

0

/var/cache/apt/archivesэто читаемый мир. После apt-get -dэтого просто распакуйте его в свой домашний каталог. Запустите dpkg -e /var/cache/apt/archives/foo_version.deb fooв вашем домашнем каталоге и управляющие файлы будут сброшены в foo/.


Я думаю, что проблема с этим методом заключается в том, что загрузка все еще требует прав администратора. Кажется глупым идти на такие крайности только для того, чтобы получить файл в свой домашний каталог.
— rndrük

Открытие .debs не проблема, загрузка это. Это может быть ошибка или нет, но umask также затрагивает пакеты в / var / cache / apt / archives`. Я установил 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.