ALT Linux Distributions development
 help / color / mirror / Atom feed
From: Paul Wolneykien <manowar@altlinux.org>
To: Distributions development <devel-distro@lists.altlinux.org>
Subject: Re: [devel-distro] Конфигурация в пакетах vs ... ?
Date: Wed, 16 Oct 2024 00:03:11 +0300
Message-ID: <20241016000311.73f7d145@legato> (raw)
In-Reply-To: <20da660b-0c0e-42bc-bb7b-f1a204bf0612@basealt.ru>


  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, то есть умеющие редактировать файлы
определённого формата.


  parent reply	other threads:[~2024-10-15 21:03 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-10-10 19:29 Paul Wolneykien
2024-10-11  5:42 ` Anton Farygin
2024-10-11  9:11     ` Anton Farygin
2024-10-15 21:03   ` Paul Wolneykien [this message]
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

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20241016000311.73f7d145@legato \
    --to=manowar@altlinux.org \
    --cc=devel-distro@lists.altlinux.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

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