Цель минимизации Fedora
Предложение для второго этапа
Руководитель цели: Adam Samalik (asamalik)
Проблема
Хотя Fedora хорошо подходит для традиционных физических/виртуальных рабочих станций и серверов, её часто упускают из виду для случаев использования, выходящих за рамки традиционных установок.
Некоторые современные типы развёртывания — такие как IoT и контейнеры — довольно чувствительны к размеру. Для IoT это обычно медленные каналы связи (для обновлений/управления), а для облачных сред и контейнеров — огромные масштабы.
Конкретный пример — Systemd. Хотя он очень полезен (все любят Systemd) и всегда присутствует на физических системах, в контейнерах он редко нужен. Поэтому не было проблемой, когда пакеты требовали Systemd только для systemd-sysusers для создания пользователей. Однако в контейнерах это означает значительное увеличение размера.
Кроме того, практически все типы развёртывания выигрывают от уменьшенного размера, поскольку существует прямая связь между объёмом установки и поверхностью атак и соответствующими CVE.
Видение
Тысячи индивидуальных и корпоративных участников сотрудничают в сообществе Fedora для изучения новых проблем и создания быстро развивающейся современной ОС с богатой экосистемой, позволяющей им экспериментировать с модернизацией своей инфраструктуры.
Миссия
Помощь разработчикам открытого кода, системным администраторам и сопровождающим дистрибутивов Linux в сосредоточении на том, что для них важно.
Результаты
Fedora является популярной платформой, потому что её экосистема является одновременно передовой и хорошо оптимизированной для современных развёртываний, таких как IoT и контейнеры. Это побуждает многих людей использовать Fedora вместо того, чтобы собирать свои собственные артефакты непосредственно из вышестоящих проектов. И это снимает давление с разработчиков открытого кода, вызванное пользователями, которые в противном случае просили бы быстро исправить их конкретные проблемы безопасности и другие вопросы.
Итак:
-
Разработчики открытого кода могут сосредоточиться на разработке функций
-
Системные администраторы могут легко использовать готовые сборки, которые также получают регулярные обновления
-
Участники Fedora (вендоры и частные лица) могут сотрудничать в сообществе Fedora в изучении и разработке решений с открытым исходным кодом для проблем будущего
Результаты работы
В Fedora определяются конкретные сценарии использования. Затем сообщество сосредотачивается на этих сценариях с точки зрения разработки и сопровождения, оптимизации (например, минимизации) и тестирования (например, CI и gating). Эти сценарии использования могут прозрачно приоритизироваться для ресурсов инфраструктуры на основе интересов сообщества.
Feedback Pipeline активно отслеживает каждый сценарий использования и записывает размер и зависимости, необходимые для его работы. История данных сохраняется и отображается для отслеживания изменений с течением времени. А чтобы размер оставался небольшим, Feedback Pipeline также автоматически обнаруживает увеличение размера и потенциально автоматически открывает ошибки в Bugzilla для прозрачного отслеживания/исправления/обоснования таких увеличений.
Активное внимание к минимизации означает, что наши сопровождающие создают оптимизированный по размеру контент с теми же или меньшими затратами. Инструменты, сервисы и данные помогают им легко принимать правильные решения о зависимостях и со временем сохранять меньший размер.
Действия
Определить соответствующие сценарии использования и позволить сообществу (то есть не только команде минимизации) определять свои собственные. Мы рассматриваем сценарий использования как набор пакетов, установленных в определённом контексте и имеющих определённую цель, например, контейнер Apache HTTP Server. Определите сценарии использования как минимум для:
-
httpd
-
nginx
-
MariaDB
-
PostgreSQL
-
Fedora IoT
-
Python 3
Кроме того, рассмотрите сценарии использования, характерные для контейнеров, например:
-
GO для контейнерных приложений
-
Rust для контейнерных приложений
-
Quarkus
Собирайте конкретные сценарии использования, общаясь с людьми на технических мероприятиях, интернет-форумах и любых других подходящих площадках.
Расширить службы мониторинга (Feedback Pipeline), которые:
-
Визуализируют зависимости и общий размер для каждого сценария использования
-
Отслеживают изменения размера с течением времени
-
Автоматически обнаруживают большие изменения размера
-
Уведомляют сопровождающих о неожиданном увеличении размера
Помимо функций, нам также необходимо:
-
написать тесты, чтобы значительно упростить участие
-
выполнить оптимизацию производительности для хорошего масштабирования сервиса
-
изучить использование CI и Rawhide Gating
Возможность видеть, что происходит, является обязательным условием для внесения каких-либо изменений. Видя все соответствующие возможности, мы можем сосредоточиться на тех, которые оказывают наибольшее влияние, а прозрачное отслеживание помогает нам доказать полезность нашей работы и сосредоточиться на наиболее эффективных действиях.
Минимизировать размер установки сценариев использования за счёт оптимизации зависимостей RPM, функций, программной архитектуры и других факторов. В частности, ищите:
-
Ненужные зависимости RPM (хотя их, вероятно, будет немного)
-
Несколько реализаций одной и той же функциональности, требуемых различными пакетами — попытайтесь заставить их использовать одну и ту же
-
Контекстно-зависимые требования — например, требование Systemd в традиционных развёртываниях является нормальным, тогда как его требование в контейнерах означает значительное увеличение размера. Используйте слабые зависимости в этих случаях (это может потребовать изменения кода).
-
Зависимости от больших компонентов при использовании лишь малой части их функциональности — например, требование всего стека Perl для выполнения одного скрипта — такой скрипт можно переписать на Python, который есть везде в основном благодаря DNF
Взаимодействовать с вышестоящими разработчиками в отношении более крупных изменений в упаковке и архитектуре. Примером является Systemd и разделение пакета systemd-sysuser.
Внедрить изменения в процессах и политиках, отражающие более крупные, общие изменения. Опять же, хорошим примером является использование Systemd в контейнерах или общая проблема создания пользователей в контейнерах.
Предоставить рекомендации для сообщества Fedora в виде сообщений в блогах, видео и докладов на конференциях. Даже если у нас есть руководства и политики, распространение информации всегда важно.
Ресурсы и исходные данные
Облачные ресурсы для создания прототипов сервисов. Мы не будем каким-либо образом изменять существующую инфраструктуру Fedora, пока то, что мы разрабатываем, не докажет свою полезность и не будет стоить усилий по стабилизации и изменению продуктивной среды.
В настоящее время не требуется никаких существующих ресурсов инфраструктуры Fedora или Release Engineering. Однако нам может потребоваться помощь в настройке (или получении доступа к) облачным ресурсам.
Активная поддержка со стороны наших сопровождающих, FPC и других членов сообщества определённо необходима. Это, очевидно, не то, что мы можем «запросить», но это всё равно необходимое условие.
Руководящие принципы
Полезность важнее размера: Существует баланс между полезностью и размером. Мы учитываем это и не будем вносить кардинальные изменения, которые могли бы помешать нашим пользователям использовать Fedora. Однако ничто не мешает нам создавать дополнительные очень специфичные и минимальные артефакты.
Использование RPM: Мы делаем это с помощью RPM. Мы не достигаем минимизации путём удаления файлов после установки. Это может быть очевидно, но всё же стоит упомянуть.
Достижения первого этапа
Смотрите страницу со статусом для получения подробной информации и исторических еженедельных обновлений. Краткое изложение ниже.
Лучшее понимание — Да, теперь у нас гораздо лучшее понимание проблемы и более чёткое представление о следующих шагах.
Feedback Pipeline — Сервис, который отслеживает сценарии использования по размеру и зависимостям. Включает различные представления в виде таблиц и интерактивных графов зависимостей.
Systemd и контейнеры — Мы углубились в проблему Systemd и контейнеров, особенно для пакетов, требующих его только для создания пользователей в контейнерах с помощью systemd-sysuser. Взаимодействуем с вышестоящими разработчиками по вопросу выделения пакета. Обдумывали, но ещё не предложили, более широкую политику по этому поводу.
Размышления о политике:
-
A — Если systemd требуется только для запуска служб, пакет должен только «Рекомендовать» systemd. Это позволит контейнерам устанавливать пакет без systemd.
-
B — Если программа просто использует библиотеку systemd, требовать только systemd-libs. Пример: libusb
-
C — Если пакет хочет использовать systemd-sysusers для создания пользователей/групп, требовать только systemd-sysusers. (ПРИМЕЧАНИЕ: Этот подпакет пока не реализован)
initial-setup — Если образ создаётся без пользователей, должен быть какой-то способ добавить пользователя при запуске. initial-setup хорошо справляется с этим, но ценой размера. Он притягивает anaconda-tui и anaconda-core. Эти два пакета, в свою очередь, притягивают множество других, довольно крупных пакетов. Это касается образов IoT, а также других образов. В настоящее время у нас нет рекомендаций, но работа над этим ведётся.
Использовать pcre2 вместо pcre — Усилия по минимизации направлены на сокращение до одного pcre, а именно pcre2.
Polkit и mozjs60 — Давайте объясним это на ужасной аналогии! Polkit — это милый человек (0.5M), который звонит в вашу дверь и говорит, что помоет окна вашего дома. После вашего согласия он достаёт своего слона (mozjs60 30M) и использует его, чтобы обрызгать ваши окна водой. Polkit притягивает mozjs60, который является довольно большим пакетом. Так что мы пытаемся разобраться и с этим тоже.
Want to help? Learn how to contribute to Fedora Docs ›