apt-отримати завантаження з обмеженням версії


18

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

Підсумовуючи це, я хочу працювати:

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

Будь-яка ідея, як я міг отримати цю функціональність?


Чому ви просто не завантажуєте пакет вручну з пакунків.ubuntu.com ?
тердон

Тому що мені потрібно бути впевненим, що завантажений пакет - це той самий пакет, який буде завантажено під час виконання "apt-get install". Я включаю це в сценарій розширення cmake.
mikosz

Відповіді:


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файлу має бути тривіальним.


На жаль, apt-get installпотрібен доступ суперпользователя.
mikosz

0

apt-get downloadтакож дозволяє встановити цільовий випуск. Чи не допомогло б це?

apt-get download package/testing

Коментар до №1 (не вдається використовувати коментарі) - додавання параметра --print-urisдо apt-get installне вимагає кореневих прав (але ви мусите його завантажити самі - найкраще за допомогою wget -i FILE_LIST).


Микола Радван, здається, шукає спосіб отримати конкретні версії, можливо, використовуючи вирази для подальшого використання сценарію. Це просто дозволить завантажити поточний пакет.
Will.Beninger

0

Без SU-приватних пристроїв ви можете запустити apt-кеш і комбінувати з фільтруванням, щоб отримати цю інформацію. Використовуйте щось на кшталт:

На Debian 5:

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

6 можна використовувати:

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

Схоже, Apt-кеш змінив поведінку в упорядкуванні списку між 5 і 6, так що на 6 найновіший стає останнім.

Одне слово обережності полягає в тому, що якщо ви використовуєте цей вихід, як ви говорите, "для отримання тієї самої версії, як та, яка буде завантажена за допомогою такої залежності", версія наявного пакету може змінитися, якщо ви запустите apt-get update (з su privs, звичайно), або якщо це встановлено для автоматичного запуску і відбувається між ними, коли ви зібрали версію, і коли ви запускаєте сценарій, який встановлює речі, очікуючи, що це буде версія.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.