Есть ли команда 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), а не в текущий каталог.

Lekensteyn
источник
Различия на машинах без сохранения файлов: 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

Заметка:

Вам необходимо создать папку с именем частичной в папке назначения.

mount.cifs
источник
Звучит не так плохо. Варианты, кажется, описаны 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/.

psusi
источник
Я думаю, что проблема с этим методом заключается в том, что загрузка все еще требует прав администратора. Кажется глупым идти на такие крайности только для того, чтобы получить файл в свой домашний каталог.
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
Шаян