Коли і чому я повинен використовувати оновлення apt-get?


15

Загальне питання:

Чи могли б хтось пояснити, що apt-get updateробить команда і коли я дійсно повинен її використовувати?


Зауваження

Будь ласка, дайте детальну відповідь . Не просто копія чоловічої сторінки, якщо тільки ваша версія не є дійсно детальною (я розміщую одне визначення зі сторінки man).

apt-get update : використовується для повторної синхронізації файлів індексу пакета зі своїх джерел. Індекси доступних пакетів витягуються з розташування, вказаного в /etc/apt/sources.list(5). Оновлення завжди повинно проводитися перед оновленням або розширенням.


Підпитання:

  • Де зберігається індекс упаковки? На базі даних? На файл?
  • Що станеться, якщо я apt-get installне обновлюю кеш? Чи є ймовірність, що віддалений пакет більше не існуватиме і посилання буде розірвано?
  • Чи є якась узгоджена політика щодо депозитаріїв дебютів? Наприклад, чи повинен репозиторій містить лише останню версію пакета, або навпаки, чи повинен він містити всі версії, доступні для конкретного випуску дистрибутива?

Контекст

Я задаю своє запитання, оскільки я вивчаю Докерські рамки . Однією з його особливостей є Dockerfile , який дозволяє побудувати своєрідне зображення ОС, виконавши якусь інструкцію з цього файлу. Однією властивістю цього зображення є те, що він повинен бути завжди однаковим, незалежно від контексту (час побудови тощо).

Я боюся, що якби я запустив apt-get updateкоманду в різний час, результат був би іншим, і тому мої зображення були б іншими.


Я думаю, що ця публікація може послужити статтею у вікі для того, як задати питання на високому рівні. Дуже корисний.
Зеродф

Відповіді:


12

apt-get update завантажує список доступних пакетів.

Список пакетів може змінюватися з часом. Додаються нові пакети, а старі пакунки видаляються. Таким чином, якщо у вас дійсно старий кеш, і ви намагаєтеся зробити це apt-get install, він може спробувати завантажити пакет, якого більше не існує.
Скільки часу зберігається старий пакет у сховищі, залежить від супровідника репо (вашого розповсюдження). Таким чином, якщо ви використовуєте щось на кшталт docker, де кеш може бути застарілим, завжди слід запускати apt-get updateперед встановленням будь-яких пакетів.

Причиною видалення та додавання пакунків є, головним чином, виправлення помилок та оновлення безпеки. Хоча, якщо ви використовуєте сторонні репости, як-от PPA, все піде.

Використовуючи щось подібне докер для контейнеризації у корпоративному середовищі, слід створити контейнер один раз, а потім перемістити цей контейнер через різні середовища випуску (розробка, постановка, виробництво), а не переробляти контейнер щоразу. Це дозволить вам отримати інший контейнер, який не був протестований.

Щоб відповісти на питання про те, де файли кешу жити /var/lib/apt/lists.


Чудова відповідь! Дякую! Я хочу реагувати на абзац "(...) не переробляти контейнер кожен раз. Це дозволить вам не отримати інший контейнер, який не був перевірений." Я читав, що найкраща практика - ніколи не використовувати оновлення apt-get. Однією з причин було б: "Він також створює непослідовні зображення, оскільки у вас більше немає єдиного джерела істини про те, як повинна працювати ваша програма та які версії залежностей включені в зображення". Хіба це не та сама проблема з apt-get updateтоді? І Dockerfile не повинен гарантувати зображення?
П'єр-Жан

2
Свого роду. apt-get updateстосуватиметься лише щойно встановлених пакетів. Оновлення існуючих пакетів лише у разі потреби нових пакетів (це повинно бути мінімальним). З apt-get upgradeоновленням всіх пакетів, включаючи існуючі, виходить абсолютно інше зображення. Хоча це може призвести до іншого результату щоразу, коли ви створюєте dockerfile, я особисто не думаю, що це серйозна проблема, якщо ви проходите через багатосередовище. Я думаю, це більше питання, якщо ви поширюєте dockerfile іншим людям і змушуєте їх створювати.
Патрік

0

Чи могли б хтось пояснити, що робить оновлення команди apt-get і коли я дійсно повинен її використовувати?

apt-get update завантажує оновлені індекси з сховищ пакетів дистрибутива, перелічуючи всі доступні пакети та їх точні версії.

Поширені дистрибутиви, такі як Ubuntu та Debian, як правило, консервативні та зворотно сумісні у своїх пропозиціях пакетів, тому версії з часом не сильно змінюватимуться; вони зміняться через оновлення безпеки або виправлення помилок. Наприклад, MySQL може бути підвищений з 5.7.18до , 5.7.19але не 6.x.

Де зберігається індекс упаковки? На базі даних? На файл?

Зазвичай він зберігається в одному або декількох файлах всередині /var/lib/apt. У контексті Докера ці файли знаходяться всередині зображення. Під час створення Dockerfile вони зберігаються в нових шарах файлової системи, які створюються та зберігаються як щойно побудовані зображення.

Що станеться, якщо я встановити apt-get install без оновлення кешу?

Ви можете спробувати завантажити версії пакетів, які вже не існують. Це досить часто на віртуальних машинах, але це можливо і в контейнерах, якщо сховища дистрибуції випустили нові пакети після побудови базового зображення. Можливо, немає координації між диспетчерами дистрибуції та обслуговуючими файлами Dockerfile, які знаходяться нижче від розповсюдження і можуть бути більшими за кількістю. Є лише одне сховище Debian, але тисячі jessieзображень контейнерів на основі та Dockerfile.

Більше того, деякі образи вгору за течією, такі як ubuntu, видаляють завантажений індекс, щоб зменшити зображення та уникнути застарілих файлів там. Тож очікується, що оновлений індекс слід завантажувати під час побудови на базі базового зображення, а не для кожної версії базового зображення, що постачається з останнім індексом.

Чи є ймовірність, що віддалений пакет більше не існуватиме і посилання буде розірвано?

Безперечно, тому що версії, що зберігаються в індексі, дуже точні 5.7.19(спрощення; вони більш схожі на 5.7.19-0ubuntu1).

Чи є якась узгоджена політика щодо депозитаріїв дебютів? Наприклад, чи повинен репозиторій містить лише останню версію пакета, або навпаки, чи повинен він містити всі версії, доступні для конкретного випуску дистрибутива?

Старі незначні версії зазвичай швидко видаляються, коли доступне оновлення; Я припускаю, що це економить місце на серверах, оскільки двійкові файли можуть важити кілька десятків мегабайт, помножених на всі підтримувані версії та архітектури. Тому зазвичай неможливо закріпити, скажімо, mysql-5.7.18наступні apt-get install; як тільки mysql-5.7.19вийде в дистрибутив, попередній буде видалений.

Якщо бути справедливим до Докера, цей недетермінізм apt-get updateє проблемою, яка розглядається як частина управління пакетами кожного дистрибутива. У вас виникнуть ті самі проблеми, намагаючись повторно створити віртуальну машину EC2 або Vagrant.

Деякі системні адміністратори використовують такі сервіси, як Aptly для дзеркального відображення оригінальних сховищ та зможуть закріпити певну версію, але ви ризикуєте пропустити оновлення безпеки, якщо у вас не є часто запущений окремий процес для тестування оновлень та зміни того, що ви пришпилюють.

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