* [devel-distro] Конфигурация в пакетах vs ... ? @ 2024-10-10 19:29 Paul Wolneykien 2024-10-11 5:42 ` Anton Farygin 0 siblings, 1 reply; 8+ messages in thread From: Paul Wolneykien @ 2024-10-10 19:29 UTC (permalink / raw) To: Distributions development Всем привет. Пишу по мотивам текущего соседнего обсуждения про инсталлятор 2.0 и вот одного нашего разговора с sin@, в котором он сказал, что "делать настройки в виде пакетов - очень плохая история". Задача вполне традиционная: выпустить образ (дистрибутив), который после установки даёт систему с определённой, наперёд заданной конфигурацией. Думаю, многие с ней сталкивались. Возможность эту конфигурацию дополнительно как-то менять по ходу установки пока оставляем за пределами задачи (поэтому и отдельное обсуждение). Как мы сейчас её решаем? Насколько мне известно, комбинируем следующие механизмы: 1. если программа, которую нужно настроить, умеет собирать конфигурацию из частей (à la conf.d/), то делаем пакет с нужными нам настройками и включаем его в образ; 2. в противном случае приходится или вносить изменения в основной конфиг, то есть делать форк пакета; 3. либо же использовать сценарий в install2/postinstall.d/ для внесения изменений в конфиг уже после установки пакета; 4. либо выполнять то же самое из firsttime.d/. Недостатки во всём этом известные, и я хотел бы направить обсуждение на поиск лучших решений. Какие есть соображения и планы на этот счёт? По тому, что я услышал на прошедшей OSSDEVCONF, у Жени есть (частично реализованные) планы хранить настройки в дереве dconf и применять их к системе после установки. Во-первых, самый главный вопрос: как именно применять? И во-вторых, в чём принципиальное отличие от пп. 3 и 4 выше? ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [devel-distro] Конфигурация в пакетах vs ... ? 2024-10-10 19:29 [devel-distro] Конфигурация в пакетах vs ... ? Paul Wolneykien @ 2024-10-11 5:42 ` Anton Farygin 2024-10-15 21:03 ` Paul Wolneykien 0 siblings, 2 replies; 8+ messages in thread From: Anton Farygin @ 2024-10-11 5:42 UTC (permalink / raw) To: devel-distro On 10.10.2024 22:29, Paul Wolneykien wrote: > По тому, что я услышал на прошедшей OSSDEVCONF, у Жени есть > (частично реализованные) планы хранить настройки в дереве dconf > и применять их к системе после установки. Во-первых, самый главный > вопрос: как именно применять? И во-вторых, в чём принципиальное > отличие от пп. 3 и 4 выше? Есть более простое решение - присоединиться к этому проекту: https://augeas.net/ рекомендуемые настройки хранить в виде дерева, которое будет просто применяться к конфигурации через augeas. ^ permalink raw reply [flat|nested] 8+ messages in thread
[parent not found: <7BF3DB82-BE92-4C99-B7B0-83876B704E19@basealt.ru>]
* Re: [devel-distro] Конфигурация в пакетах vs ... ? @ 2024-10-11 9:11 ` Anton Farygin 0 siblings, 0 replies; 8+ messages in thread From: Anton Farygin @ 2024-10-11 9:11 UTC (permalink / raw) To: Евгений Синельников, Distributions development Ну насчёт "брошенная 5 лет назад" я бы так не говорил - новые версии выходят регулярно. https://github.com/hercules-team/augeas On 11.10.2024 12:05, Евгений Синельников wrote: > Надо смотреть. Я попозже отвечу. > > Augeas выглядит как сомнительная, брошенная еще 5 лет назад история. > > В этом инструменте предложено, по сути, писать грамматику для парсинга > разных видов конфигов. > > Во-первых, не все сводится к конфигам. Во-вторых, синтаксис конфигов > не зафиксирован между версиями. > > В общем, как идея, интересно. Как кодовая база, давайте посмотрим. > > LGPLv2.1+ - хороший вариант лицензии. > > > > 11 октября 2024 г. 09:42:56 GMT+04:00, Anton Farygin > <rider@basealt.ru> пишет: > > On 10.10.2024 22:29, Paul Wolneykien wrote: > > По тому, что я услышал на прошедшей OSSDEVCONF, у Жени есть > (частично реализованные) планы хранить настройки в дереве > dconf и применять их к системе после установки. Во-первых, > самый главный вопрос: как именно применять? И во-вторых, в чём > принципиальное отличие от пп. 3 и 4 выше? > > Есть более простое решение - присоединиться к этому проекту: > https://augeas.net/ рекомендуемые настройки хранить в виде дерева, > которое будет просто применяться к конфигурации через augeas. > ------------------------------------------------------------------------ > devel-distro mailing list devel-distro@lists.altlinux.org > https://lists.altlinux.org/mailman/listinfo/devel-distro > ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [devel-distro] Конфигурация в пакетах vs ... ? 2024-10-11 5:42 ` Anton Farygin @ 2024-10-15 21:03 ` Paul Wolneykien 2024-10-16 19:02 ` Leonid Krivoshein 2024-10-18 8:54 ` [devel-distro] [JT] " Michael Shigorin 1 sibling, 2 replies; 8+ messages in thread From: Paul Wolneykien @ 2024-10-15 21:03 UTC (permalink / raw) To: Distributions development 2sin: там в конце предложение по разделению бакендов на привилегированную и не привилегированную части. Возможно, ты уже об этом подумал. :-) В Fri, 11 Oct 2024 08:42:56 +0300 Anton Farygin <rider@basealt.ru> пишет: > On 10.10.2024 22:29, Paul Wolneykien wrote: > > По тому, что я услышал на прошедшей OSSDEVCONF, у Жени есть > > (частично реализованные) планы хранить настройки в дереве dconf > > и применять их к системе после установки. Во-первых, самый главный > > вопрос: как именно применять? И во-вторых, в чём принципиальное > > отличие от пп. 3 и 4 выше? > > Есть более простое решение - присоединиться к этому проекту: > > https://augeas.net/ > > рекомендуемые настройки хранить в виде дерева, которое будет просто > применяться к конфигурации через augeas. Каждый раз при обновлении пакета? И откатываться до обновления? Поясню, с какой целью я затеял этот разговор: два с половиной варианта (4, 3 и частично 2), указанных в исходном письме, создают одну "маленькую" проблему: после изменения конфигов пакеты невозможно нормально обновлять. Конечно, технически dist-upgrade проходит нормально. Вот только после него остаются одни *.rpmnew-файлы: ведь изменённые конфиги специально не заменяются новыми версиями из пакета. И правильно делают, скажет кто-то! Правильно, но только в том случае, если изменения в конфигах сделал администратор системы для себя (будучи "в сознанке"). Иное дело, преднастроенная система. Где-то по середине между этими крайностями, как мне думается, находится система, настроенная через конфигуратор (Альтератор, Альтератор 2.0). Поэтому давайте не будем торопиться с выбором того или иного augeas, а сперва подумаем, какие требования мы к нашей системе (и возможному решению вышеизложенной проблемы) предъявляем. Возможно я не прав, но как программисту мне кажется, что обслуживание того или иного набора специализированных модификаций конфигурационных файлов очень близко к сопровождению набора специализированных модификаций кода. Классический случай: в репозитории много кода и мало моих изменений. Они, эти изменения, точечные, но важные. Как я их храню, в виде ли отдельных патчей или прямо в дереве git, не важно --- если изменения точечные, то при обновлении кода в 90% случаев патчи приложатся без изменений, а git merge пройдёт автоматически. И вот мне думается, что в случае dist-upgrade по тому же принципу должны обновляться и конфигурационные файлы: новая "апстримная" версия приходит из пакета, а закреплённые за данной установкой изменения накладываются поверх неё. Если возникают проблемы --- сообщается администратору. Примерно так, насколько я помню, работает dist-upgrade в Debian. А вот есть ли там автоматический merge я забыл. В Fri, 11 Oct 2024 13:05:55 +0400 Евгений Синельников <sin@basealt.ru> пишет: > В этом инструменте предложено, по сути, писать грамматику для парсинга разных видов конфигов. Таким образом, кажется, что не нужно писать специальные парсеры конфигурации, а достаточно хранить изменения конфигурации в виде набора патчей. И откатывать-накатывать их до-после dist-upgrade. Кажется, в apt для этого предусмотрены хуки. Но можно пойти и иным путём: при обновлении устанавливать конфиг из пакета, а затем вызывать бакенд конфигуратора для внесения специализированных изменений. Насколько я помню по новой концепции, которую излагали Женя и его ребята, конфигурация хранится в некоем дереве настроек отдельно от конфигурационных файлов, а бакенды эту конфигурацию применяют к конфигурационным файлам. По-сути, конфигурация системы в этом случае дублируется, но пока примем это. Если так, то возникает возможность эту конфигурацию применять не однократно, а многократно, сперва к одной версии конфигурационного файла, а затем к обновлённой версии. Естественно, автоматический перенос настроек (хоть в виде патчей, хоть в виде backend reapply) можно делать только в том случае, если администратор не менял файл вручную. Значит за этим нужно как-то следить. Что может помешать backend reapply? Во-первых, нужно каким-то образом знать, что после обновления файла /etc/X, нужно вызвать бакенд Y. То есть знать, за какой файл какой бакенд отвечает. Во-вторых, я написал в своей жизни несколько бакендов для Альтератора и помню, что часто у меня получалось так: бакенд по команде "Apply" меняет сразу несколько конфигов! Это казалось логичным: пользователь в окошке сформулировал свои желания, а бакенд это окошко транслирует на один или несколько файлов --- в зависимости от ситуации. Однако, если мы хотим иметь возможность вторично "накатывать" изменения на конкретный обновлённый конфиг, то желательно, чтобы остальные файлы бакенд при этом не трогал. Возможно, ничего страшного и не случится от повторного применения настроек ко всем файлам, о которых знает бакенд, но с другой стороны, если уж продумывать новую архитектуру, стоит подумать о том, чтобы у бакендов в обязательном порядке была такая функция: "применить настройки к данному конкретному файлу". На мой взгляд, это необходимо дополняет соотношение /etc/X --> backends/Y. Таким образом мне кажется, что нужно поставить на контроль то, в какие файлы данному бакенду можно вносить изменения, а в какие нельзя. Но как это сделать? Выход, по-моему, ровно один: бакенд должен работать под nobody, и только тот код, который непосредственно трогает конфигурационные файлы должен работать под root! Перед тем, как внести изменение в файл, эта привилегированная часть обязана будет свериться с табличкой ACL, декларирующей, какому бакенду что можно трогать. И ещё проверить, что файл не редактировался вручную, то есть сторонними средствами. Если проектировать решение исходя из модели, которой Женя сейчас придерживается, то есть D-bus-based модели, то думается, на D-bus должны висеть интерфейсы, по возможностям аналогичные текущим /bin/shell-config и /bin/shell-ini-config, то есть умеющие редактировать файлы определённого формата. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [devel-distro] Конфигурация в пакетах vs ... ? 2024-10-15 21:03 ` Paul Wolneykien @ 2024-10-16 19:02 ` Leonid Krivoshein 2024-10-18 10:11 ` Konstantin Lepikhov 2024-10-18 8:54 ` [devel-distro] [JT] " Michael Shigorin 1 sibling, 1 reply; 8+ messages in thread From: Leonid Krivoshein @ 2024-10-16 19:02 UTC (permalink / raw) To: devel-distro Добрый вечер! В обсуждении конфигуратора добрались, наконец, до самого важного, а именно, чем он собственно будет оперировать и как мы видим его интеграцию с пакетами, т.к. здесь вероятно предполагаются ещё и усилия маинтейнеров. До ответов на вопросы Павла (ниже) придётся ответить самим себе на ещё один важный вопрос. Мне известно три наиболее распространённых подхода к конфигураторам: 1. Собственный инструмент, тесно связанный с пакетной базой и дистрибутивами. Примеры: YaST, RSAT & Ко, Ред АДМ. 2. Система управления конфигурациями, независимая от дистрибутива, и поддерживаемая большим сообществом. Примеры: Puppet, Ansible, Salt. 3. Не классический конфигуратор, т.к. нет конфигурации и нет интеграции с пакетным менеджером. По сути отдельные модули, которыми можно что-то менять в системе. Примеры: system-config-SOMETHING от RedHat, нынешний Альтератор в Альте. Готовы ли мы идти по пути 1 и обеспечить тесную интеграцию отдельно хранимой конфигурации как некоего обслуживаемого и переносимого набора важных данных с нашим пакетным менеджером, чтобы при установке, обновлении и удалении ПО конфигурация решения учитывалась? И не только конфигурация исходного решения, определённая нами, но и те изменения, которые впоследствии вносились администраторами. On 10/16/24 00:03, Paul Wolneykien wrote: > 2sin: там в конце предложение по разделению бакендов на > привилегированную и не привилегированную части. Возможно, > ты уже об этом подумал. :-) > > В Fri, 11 Oct 2024 08:42:56 +0300 > Anton Farygin <rider@basealt.ru> пишет: > >> On 10.10.2024 22:29, Paul Wolneykien wrote: >>> По тому, что я услышал на прошедшей OSSDEVCONF, у Жени есть >>> (частично реализованные) планы хранить настройки в дереве dconf >>> и применять их к системе после установки. Во-первых, самый главный >>> вопрос: как именно применять? И во-вторых, в чём принципиальное >>> отличие от пп. 3 и 4 выше? >> Есть более простое решение - присоединиться к этому проекту: >> >> https://augeas.net/ >> >> рекомендуемые настройки хранить в виде дерева, которое будет просто >> применяться к конфигурации через augeas. > Каждый раз при обновлении пакета? И откатываться до обновления? > Поясню, с какой целью я затеял этот разговор: два с половиной варианта > (4, 3 и частично 2), указанных в исходном письме, создают одну > "маленькую" проблему: после изменения конфигов пакеты невозможно > нормально обновлять. Конечно, технически dist-upgrade проходит > нормально. Вот только после него остаются одни *.rpmnew-файлы: > ведь изменённые конфиги специально не заменяются новыми версиями > из пакета. > > И правильно делают, скажет кто-то! Правильно, но только в том случае, > если изменения в конфигах сделал администратор системы для себя (будучи > "в сознанке"). Иное дело, преднастроенная система. Где-то по середине > между этими крайностями, как мне думается, находится система, > настроенная через конфигуратор (Альтератор, Альтератор 2.0). > > Поэтому давайте не будем торопиться с выбором того или иного augeas, > а сперва подумаем, какие требования мы к нашей системе (и возможному > решению вышеизложенной проблемы) предъявляем. > > Возможно я не прав, но как программисту мне кажется, что обслуживание > того или иного набора специализированных модификаций конфигурационных > файлов очень близко к сопровождению набора специализированных > модификаций кода. Классический случай: в репозитории много кода и мало > моих изменений. Они, эти изменения, точечные, но важные. Как я их храню, > в виде ли отдельных патчей или прямо в дереве git, не важно --- если > изменения точечные, то при обновлении кода в 90% случаев патчи > приложатся без изменений, а git merge пройдёт автоматически. И вот мне > думается, что в случае dist-upgrade по тому же принципу должны > обновляться и конфигурационные файлы: новая "апстримная" версия приходит > из пакета, а закреплённые за данной установкой изменения накладываются > поверх неё. Если возникают проблемы --- сообщается администратору. > Примерно так, насколько я помню, работает dist-upgrade в Debian. А вот > есть ли там автоматический merge я забыл. > > В Fri, 11 Oct 2024 13:05:55 +0400 > Евгений Синельников <sin@basealt.ru> пишет: > >> В этом инструменте предложено, по сути, писать грамматику для парсинга разных видов конфигов. > Таким образом, кажется, что не нужно писать специальные парсеры > конфигурации, а достаточно хранить изменения конфигурации в виде набора > патчей. И откатывать-накатывать их до-после dist-upgrade. Кажется, > в apt для этого предусмотрены хуки. > > Но можно пойти и иным путём: при обновлении устанавливать конфиг из > пакета, а затем вызывать бакенд конфигуратора для внесения > специализированных изменений. Насколько я помню по новой концепции, > которую излагали Женя и его ребята, конфигурация хранится в некоем > дереве настроек отдельно от конфигурационных файлов, а бакенды эту > конфигурацию применяют к конфигурационным файлам. По-сути, конфигурация > системы в этом случае дублируется, но пока примем это. Если так, то > возникает возможность эту конфигурацию применять не однократно, > а многократно, сперва к одной версии конфигурационного файла, а затем > к обновлённой версии. > > Естественно, автоматический перенос настроек (хоть в виде патчей, > хоть в виде backend reapply) можно делать только в том случае, если > администратор не менял файл вручную. Значит за этим нужно как-то > следить. > > Что может помешать backend reapply? Во-первых, нужно каким-то образом > знать, что после обновления файла /etc/X, нужно вызвать бакенд Y. > То есть знать, за какой файл какой бакенд отвечает. Во-вторых, я > написал в своей жизни несколько бакендов для Альтератора и помню, что > часто у меня получалось так: бакенд по команде "Apply" меняет сразу > несколько конфигов! Это казалось логичным: пользователь в окошке > сформулировал свои желания, а бакенд это окошко транслирует на один или > несколько файлов --- в зависимости от ситуации. Однако, если мы хотим > иметь возможность вторично "накатывать" изменения на конкретный > обновлённый конфиг, то желательно, чтобы остальные файлы бакенд при > этом не трогал. Возможно, ничего страшного и не случится от повторного > применения настроек ко всем файлам, о которых знает бакенд, но с другой > стороны, если уж продумывать новую архитектуру, стоит подумать о том, > чтобы у бакендов в обязательном порядке была такая функция: "применить > настройки к данному конкретному файлу". На мой взгляд, это необходимо > дополняет соотношение /etc/X --> backends/Y. > > Таким образом мне кажется, что нужно поставить на контроль то, в какие > файлы данному бакенду можно вносить изменения, а в какие нельзя. Но как > это сделать? Выход, по-моему, ровно один: бакенд должен работать под > nobody, и только тот код, который непосредственно трогает > конфигурационные файлы должен работать под root! Перед тем, как внести > изменение в файл, эта привилегированная часть обязана будет свериться с > табличкой ACL, декларирующей, какому бакенду что можно трогать. > И ещё проверить, что файл не редактировался вручную, то есть сторонними > средствами. > > Если проектировать решение исходя из модели, которой Женя сейчас > придерживается, то есть D-bus-based модели, то думается, на D-bus должны > висеть интерфейсы, по возможностям аналогичные текущим /bin/shell-config > и /bin/shell-ini-config, то есть умеющие редактировать файлы > определённого формата. > _______________________________________________ > devel-distro mailing list > devel-distro@lists.altlinux.org > https://lists.altlinux.org/mailman/listinfo/devel-distro -- WBR, Leonid Krivoshein. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [devel-distro] Конфигурация в пакетах vs ... ? 2024-10-16 19:02 ` Leonid Krivoshein @ 2024-10-18 10:11 ` Konstantin Lepikhov 0 siblings, 0 replies; 8+ messages in thread From: Konstantin Lepikhov @ 2024-10-18 10:11 UTC (permalink / raw) To: devel-distro Hi Leonid! On 10/16/2024, at 10:02:59 PM you wrote: > Добрый вечер! > > > В обсуждении конфигуратора добрались, наконец, до самого важного, а > именно, чем он собственно будет оперировать и как мы видим его > интеграцию с пакетами, т.к. здесь вероятно предполагаются ещё и усилия > маинтейнеров. До ответов на вопросы Павла (ниже) придётся ответить самим > себе на ещё один важный вопрос. > > Мне известно три наиболее распространённых подхода к конфигураторам: > > 1. Собственный инструмент, тесно связанный с пакетной базой и > дистрибутивами. Примеры: YaST, RSAT & Ко, Ред АДМ. > 2. Система управления конфигурациями, независимая от дистрибутива, и > поддерживаемая большим сообществом. Примеры: Puppet, Ansible, Salt. > 3. Не классический конфигуратор, т.к. нет конфигурации и нет интеграции > с пакетным менеджером. По сути отдельные модули, которыми можно что-то > менять в системе. Примеры: system-config-SOMETHING от RedHat, нынешний > Альтератор в Альте. > > Готовы ли мы идти по пути 1 и обеспечить тесную интеграцию отдельно > хранимой конфигурации как некоего обслуживаемого и переносимого набора > важных данных с нашим пакетным менеджером, чтобы при установке, > обновлении и удалении ПО конфигурация решения учитывалась? И не только > конфигурация исходного решения, определённая нами, но и те изменения, > которые впоследствии вносились администраторами. По моему скромному мнению, если хочется решить задачу с "корпортативным" управлением, то в первую очередь тут нужен ответ на вопрос "а какая система будет использоваться для управления". Иначе все эти метания похожи на поиск некого perpetuum mobile. -- WBR et al. ^ permalink raw reply [flat|nested] 8+ messages in thread
* [devel-distro] [JT] Re: Конфигурация в пакетах vs ... ? 2024-10-15 21:03 ` Paul Wolneykien 2024-10-16 19:02 ` Leonid Krivoshein @ 2024-10-18 8:54 ` Michael Shigorin 2024-10-18 11:24 ` Denis Medvedev 1 sibling, 1 reply; 8+ messages in thread From: Michael Shigorin @ 2024-10-18 8:54 UTC (permalink / raw) To: devel-distro On Wed, Oct 16, 2024 at 12:03:11AM +0300, Paul Wolneykien wrote: > Возможно я не прав, но как программисту мне кажется, что > обслуживание того или иного набора специализированных > модификаций конфигурационных файлов очень близко к > сопровождению набора специализированных модификаций кода. Именно. И это достаточно давно копаемая по миру тема, чтобы игнорировать уже набитые шишки -- .rpmorig/.rpmnew в том же rpm появились как бы ещё не в прошлом веке отнюдь не случайно. > Классический случай: в репозитории много кода и мало > моих изменений. Они, эти изменения, точечные, но важные. Как я их храню, > в виде ли отдельных патчей или прямо в дереве git, не важно --- если > изменения точечные, то при обновлении кода в 90% случаев патчи > приложатся без изменений, а git merge пройдёт автоматически. И вот мне > думается, что в случае dist-upgrade по тому же принципу должны > обновляться и конфигурационные файлы: новая "апстримная" версия приходит > из пакета, а закреплённые за данной установкой изменения накладываются > поверх неё. Если возникают проблемы --- сообщается администратору. > Примерно так, насколько я помню, работает dist-upgrade в Debian. А вот > есть ли там автоматический merge я забыл. Ещё на эту тему припоминаются семантические патчи: darcs и если кто замечал -- многие "патчи" Ильи Курдюкова, которые он оформляет не патчами, а sed'ами; на эту тему применительно к коду есть и противоположное мнение, см. тж. fortunes-ALT: --- Свойство патчей "отваливаться в случае изменений" - это важное преимущество, а вовсе не недостаток, как полагают многие. (ldv@ в devel@) --- Также помню твой проект verborum-caterva. Из всего этого делаю такой вывод, что в зависимости от того, сколько ВНИМАНИЯ получилось уделить: * разработчикам апстримного проекта при продумывании конфигов и обратной совместимости по ним; * майнтейнеру пакета и/или разработчику модуля управления им; * сисадмину на местах -- предпочтительные варианты ("оставить/пропатчить/отодвинуть") могут быть весьма разными. Возможно, это даже стоит системной политики, которую можно устанавливать в рамках хоста или подразделения/компании. (из которой тоже должны быть возможны исключения вида "этот пакет ТОЧНО сломается со старым конфигом"). Возможно даже, что стоит делать проверки вроде glibc-preinstall или ещё лучше -- интегрировать в apt возможность откладывания (или исключения из неинтерактивного) обновления вборок пакетов, которые заведомо потребуют внимания человека к конфигурации. > В Fri, 11 Oct 2024 13:05:55 +0400 > Евгений Синельников <sin@basealt.ru> пишет: > > В этом инструменте предложено, по сути, писать грамматику > > для парсинга разных видов конфигов. > Таким образом, кажется, что не нужно писать специальные парсеры > конфигурации, а достаточно хранить изменения конфигурации > в виде набора патчей. И откатывать-накатывать их до-после > dist-upgrade. Кажется, в apt для этого предусмотрены хуки. > > Но можно пойти и иным путём: при обновлении устанавливать > конфиг из пакета, а затем вызывать бакенд конфигуратора для > внесения специализированных изменений. Насколько я помню по > новой концепции, которую излагали Женя и его ребята, > конфигурация хранится в некоем дереве настроек отдельно от > конфигурационных файлов, а бакенды эту конфигурацию применяют > к конфигурационным файлам. По-сути, конфигурация системы в этом > случае дублируется, но пока примем это. Боюсь, это отличный путь закопаться навсегда в сопровождение буквально всего, что предлагается таким образом конфигурировать -- причём став заложником выбора (в т.ч. по ресурсам). Когда ты Microsoft и задаёшь правила игры на СВОЕЙ платформе, продавить на хранение настроек в реестре более-менее всех разработчиков прикладного ПО возможно. А когда ты мы -- то сопровождение кода, умеющего разбирать и точечно изменять конфиги всего подлежащего централизованному конфигурированию (не путать с "вообще всего") -- на тебе. Из хорошего: если хранить именно смысловые изменения (что требует ещё большей погружённости в конкретику конфигурирования каждого конкретного проекта) -- переживать изменения форматов конфигов может стать в итоге легче. Вот только я не понимаю -- что тут дают dconf и dbus на хосте? Если мы говорим о централизованном управлении -- задача на изменение формируется в одном месте (и база патчей нужна по сути там); если о применении на конкретном хосте хоть централизованно, хоть по принятому root@localhost решению -- автономная шина для передачи любой требуемой информации в бэкенд давно есть. > Естественно, автоматический перенос настроек (хоть в виде > патчей, хоть в виде backend reapply) можно делать только в том > случае, если администратор не менял файл вручную. Значит за > этим нужно как-то следить. Потому и говорю молодым да горячим: прежде чем городить новое и тем более называть это Alterator -- изучите то, что уже было сделано, поймите проблематику, которую уже думали и решали. Имя -- важно: нельзя замахиваться на то, чего не заслужил. > Что может помешать backend reapply? Во-первых, нужно каким-то образом > знать, что после обновления файла /etc/X, нужно вызвать бакенд Y. > То есть знать, за какой файл какой бакенд отвечает. Во-вторых, я > написал в своей жизни несколько бакендов для Альтератора и помню, что > часто у меня получалось так: бакенд по команде "Apply" меняет сразу > несколько конфигов! Это казалось логичным: пользователь в окошке > сформулировал свои желания, а бакенд это окошко транслирует на один или > несколько файлов --- в зависимости от ситуации. Однако, если мы хотим > иметь возможность вторично "накатывать" изменения на конкретный > обновлённый конфиг, то желательно, чтобы остальные файлы бакенд при > этом не трогал. Возможно, ничего страшного и не случится от повторного > применения настроек ко всем файлам, о которых знает бакенд, но с другой > стороны, если уж продумывать новую архитектуру, стоит подумать о том, > чтобы у бакендов в обязательном порядке была такая функция: "применить > настройки к данному конкретному файлу". На мой взгляд, это необходимо > дополняет соотношение /etc/X --> backends/Y. Ключевое слово: идемпотентность. > Таким образом мне кажется, что нужно поставить на контроль то, в какие > файлы данному бакенду можно вносить изменения, а в какие нельзя. Но как > это сделать? Выход, по-моему, ровно один: бакенд должен работать под > nobody Технически говоря, nobody в альте как раз потому и не задействуется, чтобы не возникло неочевидных проблем из-за общности прав у *разных* "никого"; наверняка тут речь про обособленного непривилегированного пользователя. :) > и только тот код, который непосредственно трогает конфигурационные > файлы должен работать под root! Перед тем, как внести изменение > в файл, эта привилегированная часть обязана будет свериться > с табличкой ACL, декларирующей, какому бакенду что можно > трогать. И ещё проверить, что файл не редактировался вручную, > то есть сторонними средствами. И что делать, если трогался? Тыща хостов, на двух потрогали. > Если проектировать решение исходя из модели, которой Женя > сейчас придерживается, то есть D-bus-based модели, то думается, > на D-bus должны висеть интерфейсы, по возможностям аналогичные > текущим /bin/shell-config и /bin/shell-ini-config, то есть > умеющие редактировать файлы определённого формата. Когда-то в 2003 я постеснялся сообщить создателям ruby gems, что у них ошибка дизайна, которая вылезла лет через 10--15 при попытке автоматизации сборки самоцветовъ (и которой уже тогда не было в CPAN). Сейчас я уже не стесняюсь ругаться, что бежать впереди IBM, делая windows из linux -- безумие. Юниксы вырвались вперёд на простоте, человекопостижимости, отлаживаемости (пусть и глючности по сравнению с тем же VMS, как старшее поколение рассказывает). Более десятилетия уже это всё успешно гробится теми, кто вырос на винде с её "хоть экспоненциальный рост сложности, лишь бы поддержать линейный рост потребительских качеств и главное -- затруднительность воспроизведения для конкурентов". Мы этот кредитный подход (брать в долг у тех, кому тащить дальше) не вытянем в принципе: ни людей, ни денег столько не будет. Понимаю, что погрузившись крепко в Samba, получаешь своего рода профдеформацию -- но всё-таки из любой шахты стоит порой вылезать (у меня такое же по эльбрусам, если что). См. тж.: http://www.joelonsoftware.com/2004/06/13/how-microsoft-lost-the-api-war/ http://arstechnica.com/information-technology/2012/02/how-red-hat-killed-its-core-productand-became-a-billion-dollar-business/ (превозносимого Пола Кормье его бывший сотрудник и сосед охарактеризовал как "мать продаст за квотер") -- Michael Shigorin http://altlinux.org/elbrus ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [devel-distro] [JT] Re: Конфигурация в пакетах vs ... ? 2024-10-18 8:54 ` [devel-distro] [JT] " Michael Shigorin @ 2024-10-18 11:24 ` Denis Medvedev 0 siblings, 0 replies; 8+ messages in thread From: Denis Medvedev @ 2024-10-18 11:24 UTC (permalink / raw) To: Michael Shigorin; +Cc: Distributions development On Fri, 18 Oct 2024 11:54:40 +0300 Michael Shigorin <mike@altlinux.org> wrote: > On Wed, Oct 16, 2024 at 12:03:11AM +0300, Paul Wolneykien wrote: > > Возможно я не прав, но как программисту мне кажется, что > > обслуживание того или иного набора специализированных > > модификаций конфигурационных файлов очень близко к > > сопровождению набора специализированных модификаций кода. > > Именно. И это достаточно давно копаемая по миру тема, > чтобы игнорировать уже набитые шишки -- .rpmorig/.rpmnew > в том же rpm появились как бы ещё не в прошлом веке отнюдь > не случайно. > > > Классический случай: в репозитории много кода и мало > > моих изменений. Они, эти изменения, точечные, но важные. Как я их > > храню, в виде ли отдельных патчей или прямо в дереве git, не важно > > --- если изменения точечные, то при обновлении кода в 90% случаев > > патчи приложатся без изменений, а git merge пройдёт автоматически. > > И вот мне думается, что в случае dist-upgrade по тому же принципу > > должны обновляться и конфигурационные файлы: новая "апстримная" > > версия приходит из пакета, а закреплённые за данной установкой > > изменения накладываются поверх неё. Если возникают проблемы --- > > сообщается администратору. Примерно так, насколько я помню, > > работает dist-upgrade в Debian. А вот есть ли там автоматический > > merge я забыл. > > Ещё на эту тему припоминаются семантические патчи: > darcs и если кто замечал -- многие "патчи" Ильи Курдюкова, > которые он оформляет не патчами, а sed'ами; на эту тему > применительно к коду есть и противоположное мнение, > см. тж. fortunes-ALT: > > --- > Свойство патчей "отваливаться в случае изменений" - это важное > преимущество, а вовсе не недостаток, как полагают многие. > (ldv@ в devel@) > --- > > Также помню твой проект verborum-caterva. > > Из всего этого делаю такой вывод, что в зависимости от того, > сколько ВНИМАНИЯ получилось уделить: > > * разработчикам апстримного проекта при продумывании конфигов > и обратной совместимости по ним; > > * майнтейнеру пакета и/или разработчику модуля управления им; > > * сисадмину на местах > > -- предпочтительные варианты ("оставить/пропатчить/отодвинуть") > могут быть весьма разными. > > Возможно, это даже стоит системной политики, которую можно > устанавливать в рамках хоста или подразделения/компании. > (из которой тоже должны быть возможны исключения вида > "этот пакет ТОЧНО сломается со старым конфигом"). > > Возможно даже, что стоит делать проверки вроде glibc-preinstall > или ещё лучше -- интегрировать в apt возможность откладывания > (или исключения из неинтерактивного) обновления вборок пакетов, > которые заведомо потребуют внимания человека к конфигурации. > > > В Fri, 11 Oct 2024 13:05:55 +0400 > > Евгений Синельников <sin@basealt.ru> пишет: > > > В этом инструменте предложено, по сути, писать грамматику > > > для парсинга разных видов конфигов. > > Таким образом, кажется, что не нужно писать специальные парсеры > > конфигурации, а достаточно хранить изменения конфигурации > > в виде набора патчей. И откатывать-накатывать их до-после > > dist-upgrade. Кажется, в apt для этого предусмотрены хуки. > > > > Но можно пойти и иным путём: при обновлении устанавливать > > конфиг из пакета, а затем вызывать бакенд конфигуратора для > > внесения специализированных изменений. Насколько я помню по > > новой концепции, которую излагали Женя и его ребята, > > конфигурация хранится в некоем дереве настроек отдельно от > > конфигурационных файлов, а бакенды эту конфигурацию применяют > > к конфигурационным файлам. По-сути, конфигурация системы в этом > > случае дублируется, но пока примем это. > > Боюсь, это отличный путь закопаться навсегда в сопровождение > буквально всего, что предлагается таким образом конфигурировать > -- причём став заложником выбора (в т.ч. по ресурсам). > > Когда ты Microsoft и задаёшь правила игры на СВОЕЙ платформе, > продавить на хранение настроек в реестре более-менее всех > разработчиков прикладного ПО возможно. > > А когда ты мы -- то сопровождение кода, умеющего разбирать > и точечно изменять конфиги всего подлежащего централизованному > конфигурированию (не путать с "вообще всего") -- на тебе. > > Из хорошего: если хранить именно смысловые изменения > (что требует ещё большей погружённости в конкретику > конфигурирования каждого конкретного проекта) -- > переживать изменения форматов конфигов может стать > в итоге легче. > > Вот только я не понимаю -- что тут дают dconf и dbus на хосте? > Если мы говорим о централизованном управлении -- задача на > изменение формируется в одном месте (и база патчей нужна по сути > там); если о применении на конкретном хосте хоть централизованно, > хоть по принятому root@localhost решению -- автономная шина > для передачи любой требуемой информации в бэкенд давно есть. > > > Естественно, автоматический перенос настроек (хоть в виде > > патчей, хоть в виде backend reapply) можно делать только в том > > случае, если администратор не менял файл вручную. Значит за > > этим нужно как-то следить. > > Потому и говорю молодым да горячим: прежде чем городить новое > и тем более называть это Alterator -- изучите то, что уже было > сделано, поймите проблематику, которую уже думали и решали. Вот кстати, давайте НОВОМУ продукту дадим НОВОЕ имя. Неужели нет красивых имен? Например Ясень?, Березка? Кварц? Хоровод? Коло? SystemHelmsman? А то получится как с python3 или kde4 - насильное пропихивание чужеродной по сути замены c тем же именем вызывает очень большую демотивацию пользователей, которые были бы рады остаться на старом. Из современных вещей назову Комета-120Р, которая была разработана полностью с нуля в России, а теперь ее путают со старой Кометой Алексеева. > > Имя -- важно: нельзя замахиваться на то, чего не заслужил. > > > Что может помешать backend reapply? Во-первых, нужно каким-то > > образом знать, что после обновления файла /etc/X, нужно вызвать > > бакенд Y. То есть знать, за какой файл какой бакенд отвечает. > > Во-вторых, я написал в своей жизни несколько бакендов для > > Альтератора и помню, что часто у меня получалось так: бакенд по > > команде "Apply" меняет сразу несколько конфигов! Это казалось > > логичным: пользователь в окошке сформулировал свои желания, а > > бакенд это окошко транслирует на один или несколько файлов --- в > > зависимости от ситуации. Однако, если мы хотим иметь возможность > > вторично "накатывать" изменения на конкретный обновлённый конфиг, > > то желательно, чтобы остальные файлы бакенд при этом не трогал. > > Возможно, ничего страшного и не случится от повторного применения > > настроек ко всем файлам, о которых знает бакенд, но с другой > > стороны, если уж продумывать новую архитектуру, стоит подумать о > > том, чтобы у бакендов в обязательном порядке была такая функция: > > "применить настройки к данному конкретному файлу". На мой взгляд, > > это необходимо дополняет соотношение /etc/X --> backends/Y. > > Ключевое слово: идемпотентность. > > > Таким образом мне кажется, что нужно поставить на контроль то, в > > какие файлы данному бакенду можно вносить изменения, а в какие > > нельзя. Но как это сделать? Выход, по-моему, ровно один: бакенд > > должен работать под nobody > > Технически говоря, nobody в альте как раз потому и не задействуется, > чтобы не возникло неочевидных проблем из-за общности прав у *разных* > "никого"; наверняка тут речь про обособленного непривилегированного > пользователя. :) > > > и только тот код, который непосредственно трогает конфигурационные > > файлы должен работать под root! Перед тем, как внести изменение > > в файл, эта привилегированная часть обязана будет свериться > > с табличкой ACL, декларирующей, какому бакенду что можно > > трогать. И ещё проверить, что файл не редактировался вручную, > > то есть сторонними средствами. > > И что делать, если трогался? Тыща хостов, на двух потрогали. > > > Если проектировать решение исходя из модели, которой Женя > > сейчас придерживается, то есть D-bus-based модели, то думается, > > на D-bus должны висеть интерфейсы, по возможностям аналогичные > > текущим /bin/shell-config и /bin/shell-ini-config, то есть > > умеющие редактировать файлы определённого формата. > > Когда-то в 2003 я постеснялся сообщить создателям ruby gems, > что у них ошибка дизайна, которая вылезла лет через 10--15 > при попытке автоматизации сборки самоцветовъ (и которой уже > тогда не было в CPAN). > > Сейчас я уже не стесняюсь ругаться, что бежать впереди IBM, > делая windows из linux -- безумие. > > Юниксы вырвались вперёд на простоте, человекопостижимости, > отлаживаемости (пусть и глючности по сравнению с тем же VMS, > как старшее поколение рассказывает). > > Более десятилетия уже это всё успешно гробится теми, кто вырос > на винде с её "хоть экспоненциальный рост сложности, лишь бы > поддержать линейный рост потребительских качеств и главное -- > затруднительность воспроизведения для конкурентов". > > Мы этот кредитный подход (брать в долг у тех, кому тащить дальше) > не вытянем в принципе: ни людей, ни денег столько не будет. > > Понимаю, что погрузившись крепко в Samba, получаешь своего рода > профдеформацию -- но всё-таки из любой шахты стоит порой вылезать > (у меня такое же по эльбрусам, если что). > > См. тж.: > http://www.joelonsoftware.com/2004/06/13/how-microsoft-lost-the-api-war/ > http://arstechnica.com/information-technology/2012/02/how-red-hat-killed-its-core-productand-became-a-billion-dollar-business/ > (превозносимого Пола Кормье его бывший сотрудник и сосед > охарактеризовал как "мать продаст за квотер") > -- ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2024-10-18 11:24 UTC | newest] Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2024-10-10 19:29 [devel-distro] Конфигурация в пакетах vs ... ? Paul Wolneykien 2024-10-11 5:42 ` Anton Farygin 2024-10-11 9:11 ` Anton Farygin 2024-10-15 21:03 ` Paul Wolneykien 2024-10-16 19:02 ` Leonid Krivoshein 2024-10-18 10:11 ` Konstantin Lepikhov 2024-10-18 8:54 ` [devel-distro] [JT] " Michael Shigorin 2024-10-18 11:24 ` Denis Medvedev
ALT Linux Distributions development This inbox may be cloned and mirrored by anyone: git clone --mirror http://lore.altlinux.org/devel-distro/0 devel-distro/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 devel-distro devel-distro/ http://lore.altlinux.org/devel-distro \ devel-distro@lists.altlinux.org devel-distro@lists.altlinux.ru devel-distro@lists.altlinux.com public-inbox-index devel-distro Example config snippet for mirrors. Newsgroup available over NNTP: nntp://lore.altlinux.org/org.altlinux.lists.devel-distro AGPL code for this site: git clone https://public-inbox.org/public-inbox.git