Каков рекомендуемый метод установки произвольной версии пакета с помощью apt?

Проблема:

Мне нужен способ установки определенных закрепленных версий некоторых пакетов в моей системе Debian . snapshot.debian.org , похоже, предлагает средства для этого, однако даже после добавления снимка в мои apt-sources я не могу apt-get install некоторые конкретные версии пакеты в этом архиве снимков.

Вопрос:

Каков официальный или «правильный» способ установки конкретной версии пакета из архива снимков Debian?

Предпосылки и что я пробовал:

Позволять' В качестве примеров мы используем Debian8 Jessie и двоичную версию ядра 3.16.x, которая на одну младшую версию отстает от текущей. На момент написания этой статьи выпущенное Джесси ядро ​​- 3.16.43-2 + deb8u5. Скажем, я хочу установить 3.16.43-2 + deb8u4.

Я начинаю с поиска в архивах моментальных снимков debian нужной мне версии ( http://snapshot.debian.org/binary/linux-image-3.16 .0-4-amd64 / ) и щелкните по точной версии ядра, которое я ищу, что приведет меня к http://snapshot.debian.org/package/linux/3.16. 43-2% 2Bdeb8u4 / # linux-image-3.16.0-4-amd64_3.16.43-2: 2b: deb8u4

Отсюда я вижу, что пакет был "замечен в debian-security на 2017-09- 20 22:12:21 "и" В debian 08.10.2017 16:31:52 ". Я решил использовать первое и остановился на снимке состояния безопасности debian 20170920T221221Z .

Следуя инструкциям на первой странице snapshot.debian.org , я добавляю в свой /etc/apt/sources.list следующее: [

deb http://snapshot.debian.org/archive/debian-security/20170920T221221Z/ jessie/updates main
deb src http://snapshot.debian.org/archive/debian-security/20170920T221221Z/ jessie/updates main

] Я затем запускаю apt-get -o Acquire :: Check-Valid-Until = false update и убедитесь, что обновление (кажется) успешно завершено.

Я бы подумал, что это позволит мне теперь установить желаемую версию ядра, но подходящую знает только два кандидата на установку: 3.16.43-2 + deb8u2 и 3.16.43-2 + deb8u5. Нет признаков + deb8u4:

# apt-cache madison linux-image-3.16.0-4-amd64
linux-image-3.16.0-4-amd64 | 3.16.43-2+deb8u5 | http://security.debian.org/ jessie/updates/main amd64 Packages
linux-image-3.16.0-4-amd64 | 3.16.43-2+deb8u5 | http://snapshot.debian.org/archive/debian-security/20170920T221221Z/ jessie/updates/main amd64 Packages
linux-image-3.16.0-4-amd64 | 3.16.43-2+deb8u2 | http://cloudfront.debian.net/debian/ jessie/main amd64 Packages
linux-image-3.16.0-4-amd64 | 3.16.7-ckt25-2 | http://cloudfront.debian.net/debian/ jessie-updates/main amd64 Packages
     linux |  3.16.39-1 | http://cloudfront.debian.net/debian/ jessie-backports/main Sources

# apt-cache policy linux-image-3.16.0-4-amd64
linux-image-3.16.0-4-amd64:
  Installed: 3.16.43-2+deb8u5
  Candidate: 3.16.43-2+deb8u5
  Version table:
     3.16.43-2+deb8u5 0
        500 http://security.debian.org/ jessie/updates/main amd64 Packages
        500 http://snapshot.debian.org/archive/debian-security/20170920T221221Z/ jessie/updates/main amd64 Packages
 *** 3.16.43-2+deb8u2 0
        500 http://cloudfront.debian.net/debian/ jessie/main amd64 Packages
        100 /var/lib/dpkg/status
     3.16.7-ckt25-2 0
        500 http://cloudfront.debian.net/debian/ jessie-updates/main amd64 Packages

Кроме того, если я попытаюсь указать и установить нужную мне версию, она вернет «Not Found»:

# apt-get install linux-image-3.16.0-4-amd64=3.16.43-2+deb8u4
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Version '3.16.43-2+deb8u4' for 'linux-image-3.16.0-4-amd64' was not found

Мне удалось обойти это, загрузив двоичный файл .deb и dpkg -i устанавливает его, но я бы предпочел использовать apt вместо свертывания .debs и их установки. Может ли кто-нибудь объяснить, что мне нужно сделать, чтобы иметь возможность apt-get install конкретный пакет, или хотя бы объяснить , почему это не работает так, как я ожидал?

5
задан 6 November 2017 в 21:53
1 ответ

Это не точная наука, но вот вероятное объяснение того, почему это не сработало в данном конкретном случае (обычно это работает, когда вы не следите за изменением цели слишком быстро).

Данный репозиторий обычно ссылается только на одну версию пакета в файле Packages, например, этот . Это не техническое обязательство, например deb https://dl.winehq.org/wine-builds/debian/ jessie main включает несколько версий одного и того же пакета в свой файл Packages, все из которых можно получить с помощью apt- get, используя = , как и вы, но Debian (TM) не хранит ссылки на несколько версий в одном файле пакетов.

Если вы посмотрите на фактический каталог, в котором находится пакет, который вы ищете для существует, вы можете видеть, что доступны обе версии:

linux-image-3.16.0-4-amd64_3.16.43-2 + deb8u4_amd64.deb
linux-image-3.16.0-4-amd64_3. 16.43-2 + deb8u5_amd64.deb

Когда появился deb8u5, предыдущая ссылка на deb8u4 исчезла. Возможно, на файл deb8u4 .deb все еще ссылается другой репозиторий, или он просто не прошел некоторую «сборку мусора». Нажатие на «предыдущее изменение» в навигации по снимкам приводит только к deb8u3 без deb8u4 или deb8u5. Это означает, что смена между deb8u4 и deb8u5 произошла слишком быстро, чтобы файл пакетов deb8u4 был доступен для загрузки или для snapshot.debian.org сохранить этот промежуточный файл пакетов до того, как его заменит deb8u5. Эта ссылка (и соответствующие контрольные суммы, и подписанный файл выпуска) в debian-security потеряна.

Просто попробуйте еще раз с debian (вместо debian-security):

linux-image-3.16.0-4- amd64_3.16.43-2 + deb8u4_amd64.deb

с соответствующим файлом Packages.xz . В этом есть запись только для deb8u2 ... и останется только эта. Предполагается, что новые версии будут поступать из debian-security до выпуска 8.10, поэтому даже если они появятся в пуле, это только потому, что snapshot.debian.org заставляет все появляться в одном месте.

Извините, за это конкретное. версия пакета, я не вижу возможности загрузить файл deb8u4. Даже если он может быть загружен по ссылкам и dpkg -i может его установить, невозможно проверить то, что было загружено, поэтому этого следует избегать.

ПРИМЕЧАНИЕ: ваш метод правильный. Обычно вы можете завершить это, закрепив ваш конкретный снимок для некоторых конкретных пакетов, позволяя apt-get выбирать их автоматически (без необходимости = ) и избегать их последующего обновления. Это объясняется там: https://wiki.debian.org/AptPreferences . Их удержание тоже работает ( dpkg --set-selections или apt-mark hold ), чтобы избежать обновления.

3
ответ дан 3 December 2019 в 01:49

Теги

Похожие вопросы