LXF170:Поддержка дистрибутива в актуальном состоянии
Olkol (обсуждение | вклад) (→Заключение) |
Olkol (обсуждение | вклад) (→Совместимость дистрибутивов) |
||
(не показаны 2 промежуточные версии 1 участника) | |||
Строка 48: | Строка 48: | ||
===Совместимость дистрибутивов=== | ===Совместимость дистрибутивов=== | ||
− | + | {{Врезка|right|Заголовок=Полезные ссылки |Ширина=30%|Содержание= | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | {{Врезка|right|Заголовок=Полезные ссылки |Ширина= | + | |
1 ABI Compliance Checker, https://github.com/lvc/abi-compliance-checker/ | 1 ABI Compliance Checker, https://github.com/lvc/abi-compliance-checker/ | ||
Строка 69: | Строка 63: | ||
7 DistDiff, https://github.com/lvc/distdiff }} | 7 DistDiff, https://github.com/lvc/distdiff }} | ||
+ | Различные производители придерживаются различных политик совместимости последовательных версий дистрибутивов и их обновлений с точки зрения сохранения работоспособности приложений (в первую очередь важно сохранение двоичной совместимости – для того, чтобы коммерческие приложения оставались рабочими без пересборки после обновления системы). Некоторые последовательные версии могут быть совместимыми, но в некоторых приходится нарушать совместимость ради возможности дальнейшего развития дистрибутива. Обновления в рамках одной мажорной версии у большинства дистрибутивов принято выпускать обратно совместимыми. | ||
+ | |||
+ | Для проверки совместимости исходного и обновленного дистрибутива есть несколько способов. В автоматическом режиме совместимость всех системных библиотек может быть проверена с помощью специальных опций уже известного нам инструмента ABI Compliance Checker. Другой метод предполагает построение визуального отчета об изменениях в дистрибутиве с помощью инструмента DistDiff [7]. С помощью него мейнтейнер может быстро проанализировать все изменения в пакетах на совместимость. | ||
+ | |||
+ | ===Заключение=== | ||
+ | |||
Обновление пакетов – одна из основных и наиболее важных задач мейнтейнеров дистрибутивов Linux. От скорости выполнения этой задачи зависит актуальность дистрибутива для сообщества пользователей, от качества – стабильность и совместимость новых релизов и обновлений. Оба эти показателя можно существенно улучшить, если использовать упомянутые в статье свободные инструменты автоматизации разработки. | | Обновление пакетов – одна из основных и наиболее важных задач мейнтейнеров дистрибутивов Linux. От скорости выполнения этой задачи зависит актуальность дистрибутива для сообщества пользователей, от качества – стабильность и совместимость новых релизов и обновлений. Оба эти показателя можно существенно улучшить, если использовать упомянутые в статье свободные инструменты автоматизации разработки. | |
Текущая версия на 02:43, 17 ноября 2018
|
|
|
Содержание |
[править] Поддержка пакетной базы дистрибутива в актуальном состоянии
Андрей Пономаренко и Владимир Рубанов описывают комплексный подход к обновлению пакетов.
Основная деятельность разработчиков дистрибутивов Linux (мейнтейнеров) заключается главным образом в объединении уже существующих различных свободных компонентов в единый программный комплекс для решения задач пользователей. Основными примерами таких компонентов являются ядро, библиотеки, утилиты и пользовательские приложения. При этом в процессе интеграции нового компонента в систему у мейнтейнера, как правило, есть широкий выбор среди множества различных версий этого компонента – старые или новые, стабильные или экспериментальные, и т. д.
Выбор той или иной версии компонента зависит от поставленных целей конкретного дистрибутива. Упрощенно – если дистрибутив предназначен для серверных станций, то выбор падает на старые стабильные версии программ, которые уже проверены временем. Если же дистрибутив предназначен для настольных компьютеров домашних пользователей, то выбирают более свежие версии с максимумом новых функций. Но какая бы версия компонента ни была выбрана, со временем его приходится обновлять для предоставления пользователям большей функциональности, либо для исправления ошибок и уязвимостей.
[править] Обновление пакетов
Главным условием при обновлении любого пакета в составе конкретного дистрибутива является работоспособность этого пакета после обновления, а также работоспособность остальных пакетов, связанных с данным. Именно из-за наличия зависимостей обновление пакета превращается в нетривиальную задачу, решение которой приходится разбивать на несколько последовательных этапов. Сначала мейнтейнеру необходимо узнать о появлении новой версии исходного кода компонента у его авторов (в апстриме – от английского upstream). Затем необходимо проанализировать изменения в исходном коде и адаптировать новую версию компонента к конкретному дистрибутиву (это может включать как изменения кода, так и доработку спецификационного файла пакета) с учетом всех зависимостей. При этом зависимые компоненты и компоненты, от которых зависит данный, тоже, возможно, придется рекурсивно обновлять. Финальным шагом является проверка реальной работоспособности обновленного компонента, в результате которой часто приходится возвращаться к предыдущему шагу.
Задача по обновлению пакетов значительно осложняется тем, что количество пакетов в современных дистрибутивах достигает величины нескольких десятков тысяч, зависимости между ними переплетены в клубок, и на одного мейнтейнера может приходиться ответственность за несколько сотен пакетов. Для организации работы мейнтейнера в таких условиях необходимы специальные автоматизированные инструменты.
[править] Виды зависимостей между пакетами
Зависимости между компонентами системы могут быть двух видов: прямые и обратные. Прямые зависимости – это все компоненты, необходимые данному. Обратные же зависимости – это зависимые компоненты, которым требуется данный компонент.
Как было отмечено ранее, при обновлении какого-либо компонента, необходимо также обновить или адаптировать все его прямые и обратные зависимости.
Начинающие мейнтейнеры часто обращают внимание только на прямые зависимости, поскольку они непосредственно влияют на сборку их компонента, и, как правило, забывают о проверке обратных зависимостей. В результате этого сборка обратных зависимостей может быть нарушена, что может привести к частичной неработоспособности дистрибутива и, тем самым, серьезно помешать работе других мейнтейнеров.
[править] Совместимость пакетов
Сборка обратных зависимостей компонента может быть нарушена при его обновлении, если нарушается совместимость между ними. Совместимость бывает трех типов. Наиболее важным типом является совместимость на уровне исходных кодов, которая означает возможность взаимной пересборки компонентов без ошибок. Следующим типом является двоичная совместимость между компонентами, которая означает возможность работы одного компонента после обновления другого без пересборки и наоборот. И, наконец, различают функциональную совместимость, которая означает корректное семантическое взаимодействие.
Немаловажным понятием также является обратная совместимость компонента. Вместо проверки совместимости между разными компонентами можно эквивалентно проверять совместимость между старыми и новыми версиями каждого из них. Например, обратная двоичная совместимость позволяет заменить компонент в системе на более новый без необходимости пересборки вышестоящего стека программ. Этим свойством часто пользуются мейнтейнеры для ускорения своей работы, так как порой количество обратных зависимостей системных библиотек может быть очень большим, и их пересборка заняла бы слишком много времени.
[править] Анализ изменений в пакетах
Перед тем как интегрировать новую версию компонента в дистрибутив, мейнтейнеру необходимо убедиться, что ни один из трех типов совместимости не будет нарушен. Для этого он может использовать различные инструменты в зависимости от вида компонента.
Самым распространенным видом компонента в дистрибутивах Linux, имеющим обратные зависимости, являются библиотеки. Для проверки совместимости системных библиотек используют инструмент ABI Compliance Checker [1]. Данный инструмент проверяет только структурную совместимость, т. е. двоичную совместимость и совместимость на уровне исходных кодов. Функциональную же совместимость мейнтейнер должен проверять либо с помощью встроенных тестов компонента или вручную. Инструмент проверяет изменения в заголовочных файлах библиотеки или, что эквивалентно, в debug-информации двоичных файлов библиотеки.
Для других видов компонентов может быть использован инструмент PkgDiff [2], который позволяет визуализировать и классифицировать изменения в новой версии компонента. На основе его отчета мейнтейнер может самостоятельно проанализировать совместимость изменений. Инструмент может сравнивать архивы с исходным кодом, а также двоичные RPM- или Deb- пакеты.
При анализе изменений в первую очередь надо уделять внимание внешним интерфейсам компонента, т. е. файлам и функциям, которые могут быть использованы в других компонентах. В качестве примера внешних интерфейсов можно привести заголовочные файлы библиотек, публичные классы и функции в них, двоичные файлы библиотек, опции утилит и т. д.
Обычно в конкретном дистрибутиве используется только часть внешних интерфейсов компонента. Такие интерфейсы называют активными, и только в них, по возможности, мейнтейнерам надо проверять изменения. Например, в некоторых библиотеках может использоваться только одна функция, и нет никакой необходимости проверять остальные. Однако определить активные и неактивные интерфейсы порой довольно сложно.
[править] Мониторинг апстрима
Задача обновления большого количества компонентов значительно упрощается при наличии у дистрибутива специальных систем мониторинга активности апстрима. Такие системы периодически проверяют репозитории компонентов дистрибутива в апстриме и уведомляют мейнтейнеров о наличии новых версий. Система мониторинга в дистрибутиве Fedora [3] не только оповещает мейнтейнеров о новых версиях, но и сама заводит баги о необходимости обновления. Некоторые системы мониторинга могут также проводить анализ новых версий. Например, система мониторинга апстрима в дистрибутиве ROSA под названием Upstream Tracker [4] производит анализ обратной совместимости библиотек и выкладывает отчеты в публичный доступ. По этой причине она востребована не только мейнтейнерами РОСЫ, но и мейнтейнерами других дистрибутивов, а также пользователями и авторами библиотек в апстриме.
[править] Слежение за другими дистрибутивами
Для разработки и поддержания актуальности дистрибутивов важно иметь свежие версии компонентов. Однако при этом нет необходимости иметь самые последние версии из апстрима, которые могут быть слишком нестабильными. Здесь важно отслеживать использование различных версий определенного компонента коллегами – разработчиками других дистрибутивов, что косвенно служит показателем стабильности той или иной версии. Для этого необходимо уметь систематически сравнивать версии программ в своем дистрибутиве с версиями у коллег и определять устаревшие. В дистрибутиве Mandriva, например, используют отчет [5], в котором производится сравнение с версиями пакетов дистрибутива Mageia. А в дистрибутиве ROSA используется автоматизированная система Updates Tracker [6], которая не только производит сравнение с дистрибутивами Mandriva и Mageia (добавление слежения за другими дистрибутивами находится в процессе), но и находит последние версии программ в оригинальном апстриме, позволяя анализировать комплексную картину для принятия решений о необходимости обновления тех или иных компонентов.
[править] Совместимость дистрибутивов
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ - последняя отрыжка постмодерна
- "Ричард III и семиотика"
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна - говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек "новой волны", столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР - перепубликация из журнала "Топос".
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое "Мужское Государство" и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм "Пипец" (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить - в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить
Различные производители придерживаются различных политик совместимости последовательных версий дистрибутивов и их обновлений с точки зрения сохранения работоспособности приложений (в первую очередь важно сохранение двоичной совместимости – для того, чтобы коммерческие приложения оставались рабочими без пересборки после обновления системы). Некоторые последовательные версии могут быть совместимыми, но в некоторых приходится нарушать совместимость ради возможности дальнейшего развития дистрибутива. Обновления в рамках одной мажорной версии у большинства дистрибутивов принято выпускать обратно совместимыми.
Для проверки совместимости исходного и обновленного дистрибутива есть несколько способов. В автоматическом режиме совместимость всех системных библиотек может быть проверена с помощью специальных опций уже известного нам инструмента ABI Compliance Checker. Другой метод предполагает построение визуального отчета об изменениях в дистрибутиве с помощью инструмента DistDiff [7]. С помощью него мейнтейнер может быстро проанализировать все изменения в пакетах на совместимость.
[править] Заключение
Обновление пакетов – одна из основных и наиболее важных задач мейнтейнеров дистрибутивов Linux. От скорости выполнения этой задачи зависит актуальность дистрибутива для сообщества пользователей, от качества – стабильность и совместимость новых релизов и обновлений. Оба эти показателя можно существенно улучшить, если использовать упомянутые в статье свободные инструменты автоматизации разработки. |