17

Мне нужно использовать apt-get download чтобы получить определенную версию файла .deb , но не обязательно точную версию. Зависимости .deb могут использовать выражения, такие как >=0.3.0 и я бы хотел, чтобы apt-get download ту же версию, что и та, которая будет загружена с использованием такой зависимости.

Подводя итог, я хочу работать так:

$ apt-get download package='>=0.3.0'

Любая идея, как я мог получить эту функциональность?

4 ответа4

2

Вы могли бы сделать это, сначала узнав, какая версия является самой новой версией, которая также больше или равна желаемой минимальной версии. Затем вы скачиваете именно эту версию, используя apt-get download . Вот скрипт, который делает это (это немного уродливо, но вы поняли):

#!/bin/bash

if [ $# -lt 2 ]; then
    echo "Usage: $0 <packagename> <minimum version>"
    exit 1
fi

pkgname="$1"
minversion="$2"

V="0"

for version in `apt-cache madison $pkgname | awk -F'|' '{print $2}'`; do
    echo "Considering $version"
    if dpkg --compare-versions $version ge $minversion; then
        echo "- Version is at least $minversion"
        if dpkg --compare-versions $version gt $V; then
            echo "- This is the newest version so far"
            V=$version
        else
            echo "- We already have a newer version"
        fi
    else
        echo "- This is older than $minversion"
    fi
done

if [ "$V" = "0" ]; then
    echo "There is no version greater than or equal to $minversion"
    exit 1
fi

echo "Selected version: $V"

echo "Downloading"
apt-get download $pkgname=$V
echo "Done"

Вы должны добавить проверку ошибок в случае, если пакет не существует и т.д., Но он содержит основное решение. Кроме того, я предположил, что вам нужен новейший доступный пакет, по крайней мере, определенной версии. Если вместо этого вам нужен самый старый доступный пакет, который имеет хотя бы определенную версию, вам нужно настроить скрипт так, чтобы он прекратил поиск, как только он найдет что-то, по крайней мере, желаемой версии.

0

Поскольку вам нужно именно то, что даст вам apt-get install , возможно, стоит запустить apt-get install в режиме «только для загрузки» с использованием пользовательского каталога архивов:

-d, --download-only
  Download only; package files are only retrieved, not unpacked or installed.
  Configuration Item: APT::Get::Download-Only.

Как изменить каталог архивов? Это вариант конфигурации:

FILES
  [...]

  /var/cache/apt/archives/
  Storage area for retrieved package files. Configuration Item: Dir::Cache::Archives.

Их можно временно изменить с помощью параметра --option :

-o, --option
  Set a Configuration Option; This will set an arbitrary configuration option. 
  The syntax is -o Foo::Bar=bar.  -o and --option can be used multiple times 
  to set different options.

Подвести итоги:

apt-get install -d -o dir::cache::archives="/some/cache/dir" <package>

Эта команда загрузит (и только загрузит, но не установит) соответствующие файлы .deb для <package> в /some/cache/dir . Каталог будет содержать файлы .deb для пакета, его зависимости, файл блокировки и «частичный» каталог (который должен быть пустым). Фильтрация нужного вам файла .deb должна быть тривиальной.

0

apt-get download также позволяет вам установить целевой релиз. Разве это не поможет?

apt-get download package/testing

Комментарий к # 1 (нельзя использовать комментарии) - для добавления параметра --print-uris в apt-get install не требуются права root (но вы должны загрузить его самостоятельно - лучше всего с помощью wget -i FILE_LIST).

0

Без привилегий SU вы все равно можете запустить apt-cache и объединить с фильтрацией, чтобы получить эту информацию. Используйте что-то вроде:

На Debian 5:

apt-cache show <pkg> | head | grep -i version 

На 6 вы можете использовать:

apt-cache show <pkg> | tail | grep -i version

Apt-cache, похоже, изменил поведение при упорядочении списка между 5 и 6, так что на 6 последним будет последний.

Одно предостережение: если вы используете этот вывод, когда говорите «чтобы получить ту же версию, что и та, которая будет загружена с использованием такой зависимости», версия доступного пакета может измениться, если вы запустите apt-get update (с su privs конечно), или если это было установлено для автоматического запуска и происходит между тем, когда вы собрали версию, и когда вы запускаете скрипт, который устанавливает вещи, ожидающие, что это будет версия.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .