Как обновление apt-get/aptitude определяет то, что пакет перечисляет для обновления?

Контекст является ошибкой, в которой Ubuntu обновляют метки времени списка пакета каждые 30 минут на их зеркалах архива, который вызывает [apt-get|aptitude] update команды для загрузки списков пакета, хотя они не изменились:

Предложенное обходное решение должно работать touch по затронутым индексным файлам до выполнения apt-get update. Это делает их метки времени текущими, и избегает необходимости повторно загружать их. Эта обработка скоростей до нескольких минут (2-3 секунды по сравнению с 2-6 минутами в различных тестах). Это несмотря на выполнение локального apt-cache-ng прокси.

Мы сталкиваемся с этим тестированием (главным образом) и развертыванием (несколько) основанных на Ubuntu изображений для нашей инфраструктуры AWS в который apt-get update выполнения пару раз. 3-6 минут по сравнению с 3-20 секундами имеют большое значение в наше итеративное время.

Это кажется нечетным мне настолько склонный, не полагается на размер файла или хеширует, чтобы определить, изменились ли файлы. Метки времени очень тривиально изменяются и кажутся ужасно хрупкими для базирования этого поведения на.

0
задан 13 April 2017 в 15:25

1 ответ

Когда я впервые протестировал сенсорный хак, я был удивлен, что apt-get использовал время локального файла, чтобы сообщить http-серверу, что скачивать - но это, очевидно, так (иначе хак не сработал). [ 111]

Загруженный файл Release содержит достоверную дату, и эти файлы имеют криптографическую подпись и, следовательно, являются достаточно надежными, но хэши не используются для определения того, какие файлы пакета следует загрузить.

При использовании метода временных меток, который сейчас используется для файлов пакетов, с зеркального сайта ничего особенного не требуется. Мы обязаны проектом Debian за дизайн. Владельцам зеркал полезно сохранять Ubuntu идентичным Debian и сохранять ванильность и, следовательно, простоту управления.

Насколько я знаю, этот дизайн обычно работает нормально. Это всего лишь ошибка, которую следует исправить , насколько мне известно, но эта ошибка в частном коде Canonical, поэтому посторонние, как я, не могут помочь исправить его. Я надеюсь, что они сделают это, как только мы злоупотребляем гостеприимством тех, кто использует зеркала Ubuntu, в дополнение к ненужным расходам для некоторых пользователей Ubuntu, которые должны платить за пропускную способность гигабайта.

Существует механизм протокола http для использования etag для представления обслуживаемого элемента, но он не используется для apt-get. Такой тег может содержать хэш из файла Release.

Это большое количество пакетов, включенных в релизы Ubuntu, которые делают эту ошибку настолько значимой.

Из подписанного (и, следовательно, контрольной суммы) выпуска есть хэши для этих файлов, и в этих файлах хэши для версий пакетов и оттуда контрольные суммы для файлов. Поскольку файлы пакета содержат номера версий, и поскольку они не меняются, ошибка не вызывает избыточных обновлений пакета.

0
ответ дан 13 April 2017 в 15:25

Другие вопросы по тегам:

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