LINUX.ORG.RU
ФорумTalks

Как бы я сделал (неидеальный) дистрибутив

 ,


0

1

1. Релизная модель и версионирование.

Релизная модель: стабильные релизы с опциональными обновлениями.

Номер версии можно представить в следующем виде: YYYY.SU.R, где:

  • YYYY - номер мажорного выпуска дистрибутива. Формируется по году выпуска дистрибутива. В рамках мажорного выпуска фиксированы ключевые особенности дистрибутива, такие как поддерживаемый пакетным менеджером набор фич (формат пакетов).
  • SU — номер system update. В рамках одного номера system update фиксированы минорные версии библиотек и других системообразующих компонент. При переходе на следующий system update минорные версии могут меняться с сохранением обратной совместимости ABI.
  • R - номер корректирующего выпуска с исправлениями багов и закрытием уязвимостей.

В применениях, где требуется максимальное сохранение стабильности ABI, следует использовать выбранную ветку YYYY.SU и не переключаться на другие SU.

В применениях, где требуются наиболее актуальные версии библиотек при сохранении разумного уровня совместимости ABI (но с учётом вероятности его непредумышленной поломки апстримом или других непредусмотренных факторов), имеет смысл обновляться на новые SU по мере их выхода.

Как отдельные ветки SU, так и мажорный выпуск YYYY в целом, поддерживаются до тех пор, пока есть энтузиасты, готовые заниматься сопровождением. Понятие «перевода дистрибутива в архив» не существует. Любая сколь угодно старая ветка может получить корректирующие апдейты или новые SU при условии, что есть желающие сформировать апдейт, он соответствует критериям качества, а также есть ответственные лица, которые могут провести оценку по этим критериям.

2. Система сборки и пакетирования.

Для пакетирования применяется система, подобная Arch/Alpine/Void: то есть дерево портов со сборочными рецептами на shell. Однако процедура сборки более формализована.

Существует три уровня организации рецептов сборки.

На первом уровне хранятся сборочные рецепты для пакетов в наиболее общем виде.

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

На третьем уровне сборочные зависимости точно специфицируются в привязке к состоянию репозитория собранных пакетов конкретной ветки дистрибутива. Это позволяет при необходимости повторить сборку пакета в идентичных условиях с абсолютно идентичными зависимостями.

После полной спецификации сборочного рецепта, он поступает на обработку сборочной фермой, которая воспроизводит указанное состояние сборочной среды и собирает пакет. Для сборки пакетов пользователем локально должна быть предоставлена точно такая же возможность из коробки, не требующая дополнительных усилий по настройке. Сборка пакетов в формально специфицированной изолированной среде должна быть режимом по умолчанию, а не опцией, требующей отдельного конфигурирования.

Полностью специфицированный сборочный рецепт включается в состав финального пакета. Таким образом конечный пользователь всегда и без дополнительных скачиваний чего-либо имеет доступ к рецепту, чтобы понимать, как и чем именно собран пакет, и может при необходимости пересобрать его с собственными правками или флагами компилятора. Если при сборке пакет разбивается на суб-пакеты, то сборочный рецепт прикладывается к каждому из них.

Для ран-тайм зависимостей используется указание, максимально приближенное к «реальному состоянию дел». Например, если приложение динамически слинковано с libjpeg.so.8, значит именно libjpeg.so.8 будет указан в зависимостях пакета. А если точнее, то в качестве зависимости указывается PLATFORM:libjpeg.so.8, где PLATFORM - один из вариантов платформы, поддерживаемой дистрибутивом (ближайший аналог спецификатора multiarch в Debian).

Также ран-тайм зависимости более точно указывают на конкретные версии интерпретаторов и сред исполнения. Например, возможно бесконфликтное существование нескольких веток python 3.x с отдельными наборами библиотек.

3. multiarch и multiOS

В дистрибутиве возможно параллельное существование нескольких вариантов /usr/lib под разные ABI, подобно тому, как это реализовано в Debian. Кроме того, этот подход может быть расширен для поддержки разных ядер операционных систем за пределами Linux, таких как NetBSD или сборка пакетов для cygwin-подобного ран-тайма под WinAPI.

4. portable-сборки и развертывание пакетов без админского доступа.

В метаинформацию пакета включена информация о том, может ли он быть установлен и использоваться по произвольным путям или же привязан к конкретным путям.

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

Также возможна автоматическая конвертация portable-пакетов в пакеты системы Zero Install, что позволяет устанавливать их на любой мейстримной Linux-based ОС.

5. Декларативная конфигурация системы

По возможности, пакеты вообще не должны содержать никаких установочных скриптов.

Если установка пакета требует чего-то большего, чем простая распаковка архива, то такая конфигурация должна быть задана декларативно и отработана хуками пакетного менеджера.

Например, в Arch сейчас всего менее 400 пакетов имеют install-скрипт. Это полная противоположность скриптового хаоса в Debian-based дистрибутивах, где это количество измеряется тысячами. Из этого количества в 400 штук - около половины просто выводит сообщение пользователю. Из оставшихся больше половины вызывают команды типа setcap/chmod/chown для конфигурирования прав доступа и привилегий для пакета. Все эти действия могут быть заданы декларативно. Еще часть пакетов содержит избыточные команды, которые и так обрабатываются хуками ПМ.

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

6. Отсутствие неявной «автоматической» конфигурации системы

Пакетный менеджер ставит пакеты. Он не запускает демоны, не настраивает конфиги в /etc, не правит симлинки. Он устанавливает и удаляет пакеты предсказуемым образом с целью сохранения воспроизводимого состояния системы.

Также это подразумевает отсутствие какого-либо --install-recommends. Ставятся только жесткие зависимости пакетов, и они же удаляются при рекурсивном удалении. Управление дополнительными компонентами может выполняться пользователем самостоятельно.

С целью более удобного управления пакетами, в ПМ должна быть предусмотрена возможность для пользователя оставлять и просматривать локальные комментарии для пакетов. Чтобы пользователь мог написать для пакета заметку вида:

# apt comment 'libblabla-git' 'Установил версию прямо из github как makedep для progfoobarbaz'

7. Политика сборки пакетов.

При сборке пакетов они воспроизводятся настолько близко к апстриму, насколько возможно. На исходники могут накладываться только патчи с закрытием уязвимостей и исправлениями багов. Никакая самодеятельность в накладывании патчей, произвольно меняющих поведение ПО, изменяющих конфиги по умолчанию и т.п., недопустима. Патчи-блобы на тысячи строк кода, делающие непонятно что, недопустимы. Однако допустимы патчи, приводящие структуру установочных путей программы в соответствие с требованиями дистрибутива или патчи для формирования portable-сборок, не привязанных к установочным путям.

Энтузиасты, однако, могут поддерживать кастомные варианты пакетов с патчами, меняющими настройки и функциональность программ. Суть таких пакетов должна быть явно видна из их названия и описания. Например: linux - ядро Linux; linux-zen - ядро Linux, собранное с патч-сетом zen.

8. Особые возможности дистрибутива

Исключение из предыдущего пункта составляют сильно пропатченные версии системных компонент, которые реализуют особые фичи дистрибутива. В частности:

  • Вынос логики nsswitch в отдельный системный демон. glibc больше не занимается ничем, что связано с nsswitch. Она просто коннектится к демону и запрашивает у него необходимую информацию. Аналогичная поддержка должна быть также внедрена в musl. Статические программы теперь могут быть действительно статическими. А логика работы nsswitch изолирована за платформенно-независимым протоколом и отвязана от ABI прикладного кода.

(Пока только один пункт)

9. systemd или openrc, glibc или musl

Ответ: и то, и другое, при наличии энтузиастов, готовых поддерживать соответствующие ветки дистрибутива. Однако если кто-то делает ветку без systemd, значит отказ от systemd должен быть полным. Никаких костылей в виде elogind. Только ConsoleKit2 вместо него. Кроме того, использование средств, отличных от systemd, не должно вредить возможностям декларативной конфигурации системы.

★★

Последнее исправление: wandrien (всего исправлений: 15)

Ответ на: комментарий от wandrien

Бывает) Ну в общем, то что ты описываешь,выглядит как слегка кастомизированный Арч. Что лишний раз доказывает,идеальный дистр уже есть)

Dog ★★★
()

ИМХО многое в Linux можно и нужно улучшить.
К примеру линкер ... (работы много).
Создают всякие снапы, ... вместо того, чтобы решить проблему.

Forum0888
()

система, подобная Arch
Однако процедура сборки более формализована.

итд...
Как-то подозрительно походит на Gentoo )

GAMer ★★★★★
()

Ты эта, скажи, если в Inkscape 1.2.1 обнаруживается баг, которого нет в Inkscape 1.1.5, я смогу поставить 1.1.5 так чтобы полсистемы не снести?

Xintrea ★★★★★
()

YYYY - номер мажорного выпуска дистрибутива. Формируется по году выпуска дистрибутива

Я бы не завязывался бы на года так жестко, сделал бы YYYY-X, где X растёт от 1 и выше по мере надобности. Но это детали, да

«поддерживаются до тех пор, пока есть энтузиасты, готовые заниматься сопровождением»

Решение прикольное в том плане, что даёт максимальную свободу, но с моей тз эта свобода очень легко превращается в полный разброд и шатание.

У убунты тоже способ с пользовательскими ppa - сиди и собирай у себя софт любой версии под любую версию убунты, и делись с братишками… Только вот качество этих ппашек… Централизованный аур рвёт их в хвост и в гриву и по количеству софта, и по его стабильности.

В результате получается такая ситуация, что вот сидишь ты на условном LTS или олдстейбле, хочешь новый софт, и начинается шатание в поисках ппашек под твою версию дистра. И если какой-то софт находится легко и нормально собирается/поддерживается, то вот другой - нет, и приходится собираться через make install.

Не, если комьюнити активное и большое, то проблем с этим быть должно поменьше. Только вот где найти то это комьюнити

Fizzika ★★
()
Ответ на: комментарий от Fizzika

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

Ну а сборка прикладного софта, считай, что у тебя есть AUR, только там у пакетов кроме поля arch еще вписано поле dist, в котором прописаны версии дистрибутива, под который протестирована сборка.

Плюс хорошая обратная совместимость между пакетными базами в силу вменяемой спецификации зависимостей пакетов.

Плюс возможность запустить Linux On Linux в виде Bedrock. (Официальную поддержку Bedrock-подобной технологии виртуализации операционной системы я бы тоже добавил в описание, но уже и так получилось слишком длинно. Ну вот апдёйтом добавил в комменты) )

wandrien ★★
() автор топика
Последнее исправление: wandrien (всего исправлений: 2)
Ответ на: комментарий от Fizzika

Я бы не завязывался бы на года так жестко, сделал бы YYYY-X, где X растёт от 1 и выше по мере надобности.

Не понятно, чем это отличается от описанного в ОП)

wandrien ★★
() автор топика

Как бы я сделал (неидеальный) дистрибутив

1) Следование сложившимся «конвенциям».
2) Удобная установка.
3) В репозиториях относительно свежий софт.
4) Всё отсальное юзер сделает сам. (это не задача дистрибутива)

Bad_ptr ★★★★★
()
Последнее исправление: Bad_ptr (всего исправлений: 1)

Сколько часов компилируется ядро без драйверов в твоей системе?

Запустится ли на legacy-PC ?

i_am_not_ai
()
Ответ на: комментарий от wandrien

Я немножко подумал, и да, мне тоже теперь непонятно %)

Fizzika ★★
()
Ответ на: комментарий от wandrien

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

Ну вот эти заинтересованные лица в любом случае не смогут покрывать каждую версию, скорей всего комьюнити будет кучковаться около «удачных» релизов - в результате всё сведётся к дебиано-убунтовской модели, когда у тебя есть некая база (oldstable/stable/rolling) и для неё доступны пакеты и комьюнити шевелится. А на каких-нибудь промежуточных или старых версиях - 1.5 землекопа, которым по какой-то причине нужно… А что собственно нужно?

С твоих слов, «В рамках мажорного выпуска фиксированы ключевые особенности дистрибутива, такие как поддерживаемый пакетным менеджером набор фич». Ну дык в чем то смысл сидеть на старой версии со старым PM? Я «понимаю» чуваков, которые сидят на древнем лтс ядре с древними версиями софта из-за обратной совместимости или ещё чего-то.. .

Но если у тебя мажорная версия в принципе не фиксирует пакетную базу, а только определяет формат внутренних тулз дистра, то смысл от того, чтобы не обновляться?

Имхо версия дистра должна фиксировать какую-то пакетную базу по типу той же glibc, чтобы все прикладные пакеты могли на неё завязываться.

Fizzika ★★
()

отказ от systemd должен быть полным. Никаких костылей в виде elogind. Только ConsoleKit2 вместо него

Задолбешься отвязывать. В любом случае будут ошметки в системе. Посмотри на тот же Void, Artix и т.д. Вроде бы отвязали, а в системе все равно полно мусора.

Gonzo ★★★★★
()
Ответ на: комментарий от Fizzika

Ну вот что нужно, то пускай и делают. Мне в дебиане не нравится (в числе прочего) именно вот это, предельная забюрократизированность и отсутствие смысла в происходящем. Хочется людям собирать новый браузер и новую openssl под ОС, которая лет пять как снята с поддержки основной командой? Не вопрос. Зачем им это запрещать. Наоборот, это фича и повод понтануться в сообществе.

wandrien ★★
() автор топика
Ответ на: комментарий от wandrien

Ой, да везде оно из говна и палок. Нельзя просто так взять и отвязать системд.

Gonzo ★★★★★
()

А нельзя ли из обычного Arch сделать подобие релизного дистра, путем добавления в пакетный менеджер возможности делать виртуальный репозиторий в виде коллекции ссылок на нужные версии софта в соответствующих разных снэпшотах оригинального репозитория? Образно как символические ссылки в файловой системе.

Можно даже слой совместимости с apt дистрами, т.е. добавить скриптик /utils/apt.sh

Набираешь /utils/apt.sh install soft1234, и автоматически устанавливается самая стабильная версия за последние 2-3 года.

sanyo1234
()

Не написано какие преимущества получит пользователь от перехода на такую схему. Тема доклада не до конца раскрыта.

ox55ff ★★★★★
()
Ответ на: комментарий от ox55ff

Тут все преимущества очевидны, это была бы вменяемая система со стабильными релизами, повернутая лицом к пользователю, а не жопой, как дебиан.

wandrien ★★
() автор топика
Ответ на: комментарий от sanyo1234

Нельзя.

Точнее, «подобие», конечно, сделать можно. Но именно что подобие.

wandrien ★★
() автор топика
Ответ на: комментарий от token_polyak

Любитель держать Генту на сервере?

wandrien ★★
() автор топика
Ответ на: комментарий от wandrien

Тут все преимущества очевидны

Это не преимущества, а маняфантазии:

Любая сколь угодно старая ветка может получить корректирующие апдейты или новые SU при условии, что есть желающие сформировать апдейт, он соответствует критериям качества, а также есть ответственные лица, которые могут провести оценку по этим критериям.

Сказочная наивность. Никогда не будет человеческих ресурсов, чтобы делать такое (жирный текст) для окаменевших версий. В итоге в релиз выйдет бажная версия.

ox55ff ★★★★★
()
Ответ на: комментарий от sanyo1234

А забавно, что CUDA занимает места примерно столько же, как остальная ОС с базовым набором приложений)

#  pacman -S cuda cuda-tools cudnn 
разрешение зависимостей...
проверка конфликтов...
предупреждение: обнаружена циклическая зависимость:
предупреждение: eglexternalplatform будет установлен перед nvidia-utils, как зависимость

Пакет (9)                  Новая версия  Изменение размера  Размер загрузки

extra/egl-wayland          2:1.1.11-4             0,09 MiB         0,03 MiB
extra/eglexternalplatform  1.1-2                  0,02 MiB         0,01 MiB
extra/gcc12                12.3.0-1             153,00 MiB        38,24 MiB
extra/gcc12-libs           12.3.0-1              52,93 MiB        13,39 MiB
extra/nvidia-utils         530.41.03-1          658,76 MiB       258,65 MiB
extra/opencl-nvidia        530.41.03-1           76,78 MiB        15,73 MiB
extra/cuda                 12.1.1-3            4463,73 MiB      1473,27 MiB
extra/cuda-tools           12.1.1-3            2345,63 MiB      1085,85 MiB
extra/cudnn                8.8.0.121-1         2440,12 MiB       851,37 MiB

Будет загружено:     3736,53 MiB
Будет установлено:  10191,05 MiB

:: Приступить к установке? [Y/n] ^C
Interrupt signal received

Я тут решил попробовать сделать частичное зеркало репов Арча. Потому что полное некуда класть. А так, в принципе, замороженное зеркало Арча - это по сути как Слака, только с пакманом.

wandrien ★★
() автор топика
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)