[devel] Re: Два подхода к жизни или как делать по дефолту

Michael Shigorin =?iso-8859-1?q?mike_=CE=C1_osdn=2Eorg=2Eua?=
Пн Ноя 29 18:45:29 MSK 2004


On Mon, Nov 29, 2004 at 04:41:24PM +0300, Anton Farygin wrote:
> Возник такой у нас с Pilot'ом интересный спорный вопрос.
> Просьба конструктивно и _кратко_ на него ответить:
> на ваш взгляд: сразу после установки системы после первой
> загрузки должны ли быть видны доступные в системе сетевые
> интерфейсы по команде ifconfig -a _до этапа настройки  сети
> (через конфигуратор) пользователем_ ?
> Можно просто сказать: да/нет.

1) да, это неважно;
2) нет, это неважно. :)

IMCO это был неверный вопрос, любой ответ на который ровным
счётом ничего не значит.

Попробую по возможности объективно осветить проблему; в конце
прилагается также чуточку пофильтрованный по релевантности лог.


Вопрос
~~~~~~
Где и как определяется точная программная конфигурация
аппаратного обеспечения (по умолчанию и специфическая)?


Обсуждение
~~~~~~~~~~
Существует два "полярных" варианта -- "всё настроено
автоматически" и "всё настраивается руками".

Первое -- это Plug'n'Play и на Linux в данный момент -- hotplug.
(в сторону: а есть ли hotplay? :)

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

Вменяемые системы находятся где-то посредине -- дают возможность
реализовать промежуточные варианты, от минимального вмешательства
(например, указание значения конфигурации) до минимальной
автоматизации (например, загрузка модуля, соответствующего
заданному PCI-устройству).

При этом у нас есть несколько типичных точек, приводящих к
изменениям состояния этой конфигурации:

1) первичная установка и настройка операционной среды
   (в данный момент -- mdk installer, в перспективе это
   обеспечивается alterator);

2) настройка добавленного в процессе эксплуатации системы
   оборудования;

3) ручное изменение конфигурации администратором системы.

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

Как правило, случаи с одним устройством заданного класса не
приводят к проблемам, т.к. система не предоставляет выбора по
причине его объективного отсутствия (разве что "отключить вообще"
как альтернатива "чтоб работало").  Проблемы начинаются с
"размножением" устройств одного класса и невозможностью
автоматически определить соображения владельца аппаратного
обеспечения по части того, как именно оно должно работать.


Соображения
~~~~~~~~~~~
В идеале система не должна _требовать_ что-либо настраивать
вручную, но если администратор усматривает в этом необходимость
-- надо предоставить средства внесения и учёта изменений
(хороший пример -- control(8)).

Для звуковых чипов _частичным_ (ALSA-only) решением является
использование параметра модуля "index" (см. ссылки); для сетевых
интерфейсов -- nameif/ifrename (насколько понимаю).

Для драйверов другого аппаратного обечпечения такие регуляторы
могут как наличествовать, так и отсутствовать; при этом общая
проблема в каждом конкретном случае решается разными средствами
(отчасти? из-за разных источников идентификационной ниформации).


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

В обоих случаях точное соответствие логических и физических
устройств обычно критично и не должно зависеть от изменений
порядка сканирования PCI-шины ядром или иной погоды на Марсе:
изменение порядка логических устройств приводит к тому, что
сигнал подаётся не на тот разъём, где его ждут.

В случае сетевого интерфейса это может привести к "странным"
(плохо описываемым и решаемым поддержкой) проблемам в сочетании с
файрволами, ограничением доступа по MAC и т.д.; в случае
звуковой платы -- в лучшем случае к тому, что для воспроизведения
будет использоваться низкокачественное устройство вместо
высококачественного (и то лишь после манипуляций с проводами), в
худшем же проснувшийся в три часа ночи стояк может надолго лишить
майнтейнера способности заниматься пакетами что в наушниках, что
без них.

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

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

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

В отличие от rider@ мы с pilot@ считаем, что человеку, который
настраивает систему без конфигуратора, лишний modprobe не будет
проблемой (если он делает это N-й раз -- значит, это можно
автоматизировать на этапе создания иных настроек по умолчанию для
заданного случая -- например, livecd первой стадии нового
инсталятора).

При этом есть мнение, что решение частной проблемы разработчика
(загрузка всех соответствующих обнаруженному, в т.ч. сетевому
железу модулей) слишком общими средствами (возврат к такому
поведению по умолчанию) затруднит тестирование подсистемы,
которой оно также требуется (etcnet) в силу банального роста
прикладных неудобств для администраторов, которые и так должны
быть чем-то мотивированы, чтобы её тестировать, да ещё и на
ядре 2.6.  Попросту говоря, перетыкание кабелей это тестирование
сведёт к нулю.

Ссылки
~~~~~~
Предыдущее обсуждение вопроса (включая отношение пользователей к
излишней жёсткости системы по части соответствия):

http://lists.altlinux.ru/pipermail/sisyphus/2004-June/041781.html
http://lists.altlinux.ru/pipermail/community/2003-September/098147.html
http://lists.altlinux.ru/pipermail/sisyphus/2004-May/041698.html
https://bugzilla.altlinux.org/show_bug.cgi?id=4668
https://bugzilla.altlinux.org/show_bug.cgi?id=3487
https://bugzilla.altlinux.org/show_bug.cgi?id=3528
https://bugzilla.altlinux.org/show_bug.cgi?id=1802

Приложение
~~~~~~~~~~
<Pilot> rider: ну так что, ifconfig-то не спасёт
<rider> gvy: ничего ты не понял ;-)
* Pilot тоже ничего не понял
<gvy> rider, а конфигуратор сети планируется дёргать из
инсталятора?
<Pilot> тогда так, господа
<rider> gvy: нет конечно. А зачем ?
<gvy> бишь поставили базовую систему, бутнулись в неё, что
дальше?
<gvy> как зачем?
<Pilot> нужна гуйня для конфигурации сети, выходит
<rider> Pilot: да. Гуйня нужна. Но это - не дело инсталятора
настраивать сеть.
<Pilot> кто будет её писать?
<gvy> Pilot, это дело команды alterator
<rider> Pilot: ну кроме нас некому
<Pilot> rider: если будет, то в чём проблема и зачем размахивать
ifconfig?
<rider> Pilot: но прежде чем писать гуйню - нужно закончить
баталии. Нужно определиться кто как и что будет
грузить/настраивать
<Pilot> я думал, всё уже давно определилось
<rider> Pilot: да в том, что нет у меня гуйни. Я после загрузки
хочу быстро получить доступ в сеть. Что может быть быстрее
ifconfig ?
<Pilot> rider: тебе 25-го нужо было приезжать в офис
<rider> Pilot: да нет. Не определилось. В том то и дело.
<Pilot> rider: хозяин-бырин
<Pilot> барин
<rider> Pilot: что будет если я сейчас включу в hotplug'е
загрузку драйверов для сети ? много сломается ?
<Pilot> rider: я не о тебе, а о других пользователях
	[skip]
<rider> Pilot: не нужна - идем в /etc/libhw.conf и отключаем
драйвер для конкретного сетевого устройства
<Pilot> rider: давай спросим общественного мнения, я уже доводы
исчерпал, хотя мнения не изменил
<rider> Pilot: вот тебе другой пример: новичок поставил
дистрибутив, загрузился и ему говорят о том, что бы настроить
сеть нужно сменить IP адрес на интерфейсе (стандартный подход
практически в любом UNIX).
* lioka думает, что автосеть должна быть в отдельном пакете, не
являющемся неотъемлемой частью сетевой подсистемы.
<Pilot> ну и что?
<lioka> если вы об этом
<rider> lioka: нет. До автосети мы еще доберемся ;-)
<Pilot> не сменить, а назначить
<rider> Pilot: хорошо. Назначить.
<Pilot> и пусть себе назначает
<Pilot> я ж не мешаю
<rider> Pilot: да как он назначит, если: ifconfig eth0 его
посылает, ибо 1) модуль не загружен 2) в /etc/modules.conf alias
отсуствует
<Pilot> о!
<gvy> rider, новичка пошлёт уже отсутствие конфигуратора :(
* gvy не выдержал попытки решения проблемы на НЕ ТОМ уровне
<rider> gvy: помолчи, ПОЖАЛУЙСТА!
<Pilot> для этого один абзац жалко, что ли? написать, что такое
lspcidrake и что такое modprobe
<rider> Pilot: а зачем ?
<rider> Pilot: когда можно все сделать автоматически
<Pilot> вместо того, чтобы зашоривать, подсказать ему нормальный
путь конфигурации оборудования, если инстяллятор не постарался
<rider> Pilot: и плюс к этому _безусловно_ - нормальный путь
конфигурации
<Pilot> rider: ты придумываешь какой-то холодный ядерный синтез
для чайников за 5 минут
<Pilot> давайте или по-простому или по-пацански
<rider> Pilot: понимаешь, если бы во всех Linux'ах настройка
аппаратной части была одинакова - я бы с тобой согласился
<rider> Pilot: а так - я не согласен. Проведем блиц-опрос в
devel@
<rider> Pilot: нет, мы говорим о пользователях, которые
пользуются системой.
<Pilot> как там в RH, мне по барабану, я хочу сделать лучше
<Pilot> rider: проведём. только мои комментарии тоже должны быть
в опросе
<rider> Pilot: я написал уже письмо - посмотри
<rider> Pilot: я задал вопрос просто: на ваш взгляд: сразу после
установки системы после первой загрузки
<rider> должны ли быть видны доступные в системе сетевые
интерфейсы по команде
<rider> ifconfig -a _до этапа настройки  сети (через
конфигуратор) пользователем_ ?
* Pilot . o O (без меня меня женили, развели и посадили)
<rider> Pilot: вообще речь идет не только о тебе
	[pause]
<rider> gvy: ну да. Но опять же - это же не вопрос sound-scripts.
Просто hotplug будет работать так же как и всегда - спокойно
грузить драйвера. А sound.agent - менять индекс, если это надо.
<gvy> rider, ыыы... в смысле менять индекс?
<gvy> после загрузки модуля этот индекс до фени
<Pilot> rider: наконец-то ты озвучил идею!
<gvy> rider, давай я в devel попробую схему проблемы очертить?
<rider> gvy: ага. тогда этим будет заниматься конфигуратор,
настраивающий libhw
<gvy> ВОООТ!
<Pilot> raorn: достаточно, если eth1 есть
<gvy> rider, именно это я уже час и пытаюсь сказать -- железо
(драйверы) без конфигурации никому не нужны, кроме нас,
разработчиков :)
<gvy> а мы можем дефолт данной конкретной сборки под себя
подогнать
<rider> gvy: не всегда. В большинстве случаев дефолтные
конфигурации срабатывают
<gvy> rider, в большинстве -- да.
<Pilot> rider: я подумаю, как предметно ответить на разделение
<gvy> по крайней мере хорошие дефолтные конфигурации
<rider> Pilot: ok.
<rider> gvy: ну да. а все остальное - действительно дело рук
конфигуратора.

PS: меня опять отвлекли где-то в районе перехода к примерам. :E

-- 
 ---- WBR, Michael Shigorin <mike на altlinux.ru>
  ------ Linux.Kiev http://www.linux.kiev.ua/



Подробная информация о списке рассылки Devel