Ось більш детальний опис процесу. Вибачте, текст отримав так довго.
Мій досвід походить від Debian, для якого спочатку була винайдена вся система упаковки та оновлення, що використовується в Ubuntu. Щоденні оновлення безпеки Ubuntu відповідають запущеним, apt-get upgrade
які зазвичай не видаляють жодне програмне забезпечення. Великі оновлення версій відповідають тому, apt-get dist-upgrade
протягом якого програмні пакети можна повністю обміняти.
Насправді компоненти дуже низького рівня зазвичай не обмінюються під час оновлення випуску. Відразу після оновлення у каталозі / boot слід знайти два зображення ядра та initrd. Це тому, що на відміну від програм, компоненти ядра не так добре взаємозамінні. Якщо виникає потреба у завантаженні нових драйверів пристроїв під час оновлення, вони повинні бути сумісні з запущеним ядром. Після завантаження системи новим ядром старе можна видалити. Востаннє, коли я перевіряв, що це потрібно зробити вручну, я не знаю, як це впорається поточний оновник. Це BTW. головна причина, чому зображення ядра містить його номер версії у назві файлу - так що ви можете мати різні версії ядра одночасно. Те ж саме для шляху модуля (/ lib / module / ...)
Програми програмного забезпечення оновлюються один за одним, починаючи з найнижчих пакетів в ірархії залежностей. Зазвичай це бібліотеки програм, такі як libc та інші. Послідовність оновлення пакетів, однак, не кодується жорстко, але динамічно обчислюється у міру вирішення залежностей пакунків. У більшості випадків старі програми можуть функціонувати з новими бібліотеками, тому це не так вже й проблематично, якщо перші бібліотеки замінять спочатку.
Тут ви повинні зрозуміти, що система розрізняє пакети, встановлені вручну (тобто пакети, встановлення яких ви безпосередньо запросили, тобто хром), і автоматично встановлені пакети, які встановлені лише для виконання залежностей від встановлених вручну пакетів (і залежностей цих залежностей) ).
Для кожної встановленої вручну програми оновлення просто шукає нову версію. Часто ці програми є лише мета-пакетами типу "ubuntu-desktop", який не містить даних, а лише залежності. Будуть введені нові версії залежних бібліотек, оскільки їх вимагають безпосередньо оновлені (вручну запитувані) програми. Оновлення завжди буде намагатися встановити нову корисну версію будь-якого залежного пакета ( в протягом будь-якого upgrdade не тільки випустити оновлення).
Програми, які не можуть функціонувати з новими версіями бібліотеки, не можна запускати протягом часу після оновлення бібліотеки, а також до оновлення самої програми. Якщо ці програми вже повинні бути запущені до оновлення бібліотеки, вони, однак, продовжують працювати, оскільки стара версія бібліотеки залишається в пам'яті, поки вона залишається у використанні. Те саме стосується програм, які були запущені ще до їх оновлення. Вони не надаватимуть нових функцій, поки вони не припиняться та не перезапускаються.
Після оновлення деякі бібліотеки (або взагалі залежності) стануть сиротами. Це бібліотеки, які потребували старі версії програм, але нові версії більше не потрібні. Оскільки ці пакунки позначені як автоматично встановлені, і оскільки жодна встановлена вручну програма не стосується них, ці пакунки можна легко знайти та вилучити. Ви навіть можете спостерігати це як останній крок процесу оновлення (оновлення каже: "видалення застарілих пакетів" або щось подібне).
Будуть встановлені деякі пакети, які там, де не встановлені раніше, це просто нові залежності, які позначені як автоматично встановлені, і їх можна буде видалити, якщо вимога до них відпаде в майбутньому.
Цей механізм навіть дозволяє обмінюватися цілими програмами користувачів. Як, наприклад, перехід від Gnome2 до Unity. Оскільки обидва є лише автоматичними залежностями ubuntu-desktop, який є одним з небагатьох пакетів, для якого в першу чергу фактично запитуються нові версії.
Програми зазвичай не залежать від конкретної версії ядра ОС, тому вони нормально працюватимуть із запущеним ядром.
Крім усього цього, я підозрюю, що оновник Ubuntu кидає в суміш деякі конкретні виправлення та обхідні шляхи, щоб обійти ситуації, коли ця теорія порушується.
Як ви бачите, під час оновлення існують дуже хороші умови, коли система доступна лише для обмеженої частини. Якщо під час оновлення щось піде не так, ви , швидше за все, залишитесь із зламаною системою. Часто навіть такий, який неможливо легко відремонтувати, оскільки це може вплинути і на програму оновлення. Пам'ятайте, що програми з розбитими залежностями можуть продовжувати функціонувати, але не перезапускатись, доки залежність буде розбита, це стосується і оновлення.
Ви можете скористатися програмою командного рядка, apt-mark
щоб дізнатися, які пакунки позначені як встановлені вручну та які були автоматично встановлені. Ви також можете перемикати ці позначки за допомогою тієї самої програми. Це безпосередньо вплине на процес оновлення.
У складніших програмах налаштування програмного оновлення інколи буде просити вас усунути залежність вручну. Тобто, коли одна встановлена вручну програма оновлюється і вимагає нової версії бібліотеки, тоді як інша встановлена вручну програма залежить від старої версії тієї ж бібліотеки і не може працювати з новою. Тоді вам доведеться зробити свій вибір, або відмовитися від однієї з цих програм, або утриматися від оновлення обох. Оскільки залежності часто складні, це може дуже швидко забруднитись (ви могли чути про термін "пекло залежності").
Тепер до конкретних питань:
- Якщо змінюється інфраструктура низького рівня (низький рівень, як у ядрі, драйверах, бібліотеках тощо, все, з чим користувач не взаємодіє безпосередньо), що відбувається з застарілими бінарними файлами?
- Гаразд ... Я вже висвітлював цей
- Що відбувається з додатком, який повністю застарів? Наприклад, Unity 2D (або будь-яке інше програмне забезпечення, відмовлене / не має технічного обслуговування, пакет якого не знаходиться в новому репо).
- Якщо додаток одного разу було встановлено вручну, воно залишатиметься в системі, що часто спричиняє пекло залежності, яку я описав.
- ubuntu-desktop - це метапакет, який висуває програми Ubuntu за замовчуванням як залежності. Якщо я видалю Firefox та встановив Chrome, чи буде Firefox все-таки залучатися як частина оновлень?
- Поки це стандартний браузер нового випуску, так. Також буде оновлено хром. Я не впевнений, чи зможете ви видалити Firefox, не видаляючи ubuntu-desktop. Зауважте, що крім суворих залежностей, система пакунків знає також концепцію рекомендацій, де програмне забезпечення, як правило, встановлюється як залежність, але його можна буде видалити пізніше, не зачіпаючи нічого іншого, крім власних індивідуальних залежностей.
- Більше того, що станеться, якщо один додаток, який раніше залежав від пакета-x, і більше не робить цього в новому випуску; буде оновлено package-x разом з рештою пакетів, незважаючи на те, що вони осиротіли?
Просто запитайте мене, чи є у вас ще запитання.