Make-initrd development discussion
 help / color / mirror / Atom feed
From: Leonid Krivoshein <klark.devel@gmail.com>
To: make-initrd@lists.altlinux.org
Subject: Re: [make-initrd] udhcpc script в фиче network
Date: Wed, 22 Sep 2021 19:12:06 +0300
Message-ID: <c1f7976e-e72c-3a43-f9db-f185650316a2@gmail.com> (raw)
In-Reply-To: <20210922144619.3h4va7j4u6m36mka@example.org>


22.09.2021 17:46, Alexey Gladkov пишет:
> On Wed, Sep 22, 2021 at 04:50:57PM +0300, Leonid Krivoshein wrote:
>> 22.09.2021 16:08, Alexey Gladkov пишет:
>>> [...]
>>> Это довольно смелое предположение что когда тебя не просят конфигурировать
>>> сеть, то на самом деле пользователь хотел dhcp ... да ещё и ipv4.
>> [...] Главная подоплёка в том,
>> что если сетевых настроек нет, хорошо бы их спрашивать. Ну, потому что без
>> сети с выбранным методом иначе не загрузиться. Сейчас код более простой.
>> Возможно, тут стоит выводить диалоги. Но вопрос в последующем применении
>> новых настроек.
> Весь вот этот автоугадав и домысливание должно происходить после сервиса
> cmdline. Или же даже проще - до сервиса udev. В этом случае вся
> конфигурация будет готова и не будет никаких гонок.
>
> Вообще почти все диалоги с уточнением конфигурации должны быть тут т.е. до
> udevd и pipelined.

Сначала ужаснулся от мысли о необходимости разделения bootchain на две 
части -- диалоговую для выяснения конфигурации и ту, что работает сейчас 
после udev. Конечно, нет ничего невозможного, так работают многие 
инсталляторы, сначала задавая вопросы, а потом выполняют действия по уже 
подготовленным ответам. Но... не получится! Так как есть диалоги, 
которые предлагают выбор определённого оборудования, а для его 
определения нужен udev. И ещё мы можем всегда вернутся в самое начало. 
Плюс те диалоги, когда в процессе выполнения что-то пошло не так, тут 
тоже могут быть варианты. Немыслимо организовать связку между этими 
двумя частями, когда посредине будет запуск udev. Поэтому я бы предпочёл 
не менять нынешнюю конструкцию, конфигурировать в диалогах после запуска 
udev то, что не было сконфигурировано в командой строке, на худой конец, 
прибегать к технике повторного сканирования, реализованной в 
пропагаторе. И пусть параллельно с этим отрабатывают эвенты udev.


>> Для altboot пока что не имеет значения, что make-initrd умеет работать с
>> IPv6. В нём просто нет пока его поддержки, как и в пропагаторе. Если
>> указывать ip=dhcp, сеть поднимается дольше. Поддержку IPv6 можно будет
>> добавить позже...
> Я считаю, что в 2021 уже не нужно говорить о поддержке IPv6 в новом коде.
> Нужно просто считать, что он есть.
>
> Для того чтобы в пустую не ждать есть функции ipv4_enabled/ipv6_enabled.
> Кстати, IPv4 в современном мире может быть выключен и это стоит учитывать.

Это очень правильное замечание, я даже и не сомневался, что это так. 
Мало того, я уверен, что добавить поддержку IPv6 в altboot до безобразия 
просто. Но лично я мало что понимаю в IPv6, так что если кто-то поможет 
заменить вызовы resolve на resolve6 и ss в паре мест, буду признателен. 
Так, конечно, основная поддержка сети IPv6 уже есть в самом make-initrd 
и грех её не использовать. И основное тут даже не код, а тестирование -- 
я это не смогу проверить как следует.


> [...]
>>> /lib/initrd/cmdline.d/network должен выполняться лишь один раз до всего
>>> это этого subshell. Он генерирует конфигурацию для всех интерфейсов.
>> Но он уже один раз выполнился до входа в bootchain-waitnet, при этом был
>> сконфигурирован только "lo".
> lo всегда есть. Он даже не конфигурируется:
>
> features/network/data/etc/network/ifaces/lo/ipv4address
>
> Зоркий глаз может заметить, что формат конфигов очень похож на etcnet ;)

Да, я заметил, как и разницу. Мне показалось странным, зачем при 
авто-конфигурировании сохранять не полученные значения, а некие строки 
типа "nameserver <value1> <value2>" или "defult via <value>", ведь их же 
потом неудобно будет парсить. Но видимо так задумано, чтобы читать потом 
всю конфигурацию в едином формате.

Если сравнивать фичу network с etcnet из stage2, то у меня возникает два 
недоумения... ))

1. Зачем такой навороченный network в stage1? Ведь для сетевой загрузки 
нужен только один интерфейс.
2. С другой стороны, etcnet умеет vlan'ы, bond'ы и много чего, а network 
сейчас непригоден для загрузки через такое, а значит придётся менять 
конфигурацию на свичах или использовать отдельную сеть только для 
сетевой загрузки.


>>> Перед этим стоит остановить udev

А как это правильнее сделать? И не лучше ли тогда, не останавливая udev, 
заставить его перечитать правила?


>>> поскольку cmdline.d/network дописывает
>>> /etc/udev/rules.d/60-persistent-net.rules и я вообще сомневаюсь, что там
>>> всё правильно. Скорее всего нужно переделывать работу с
>>> 60-persistent-net.rules, чтобы можно было запускать cmdline.d/network
>>> несколько раз.

Насчёт этого я думаю, что можно вообще не беспокоиться, т.к. если IFNAME 
был синтаксически правильно определён в /proc/cmdline и udev-правило уже 
отработало один раз, то интерфейс с нужным именем уже появился и 
повторная обработка IFNAME не требуется, диалогов для этого не 
предполагается.


>> [...]
>> 2) IFNAME -- должен отрабатывать один раз, конечно, поэтому мне жалко
>> удалять всю конфигурацию. :-)

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


>>> Также перед запуском cmdline.d/network нужно удалить старую конфигурацию!
>> А как это правильно сделать? rm -rf -- "$net_autoconfdir" "$net_statedir" ?
> cmdline.d/network кладёт всё сюда:
>
> "$net_confdir/ifaces/$interface"
> "$net_confdir/default"
>
> net_autoconfdir -- это место, куда кладут конфигурацию dhcp. Они отделены
> от системной конфигурации, чтобы они не смешивались. В некоторых случаях
> это нужно.
>
> Для каждого интерфейса параметры могут приехать из:
>
> net_autoconfdir/ifaces/$NET_IF/*
> net_confdir/ifaces/$NET_IF/*
> net_confdir/default/*
>
> net_statedir -- это результат объединения всех. Это стейт.
>
> Наверно, стоит написать отдельную функцию, чтобы "забыть" конфигурацию
> интерфейса.

Тогда уж лучше научить cmdline.d/network повторно конфигурировать все 
интерфейсы, чтобы он сам удалял то, что было раньше. :-)


> [...]
>> но я не рискнул писать развесистую логику, а решил использовать
>> готовую фичу. При этом возникает риск гонок: самое начало загрузки, модуль
>> сетевой карты мог ещё не подгрузиться, сеть заранее никто не
>> сконфигурировал, а тут я пытаюсь что-то перезапускать...
> Гонки с загрузкой модулей неприятные, да. Тут может быть такая эвристика:
> мы догадались, что нужна сеть, ни одного интерфейса нет (кроме lo)? значит
> ждём появления сетевого интерфейса.
>
> Будет другая проблема если интерфейсы будут появляться сильно не сразу, но
> это уже следующая проблема.

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

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


>> Если удастся найти рабочий вариант с диалогами настройки сети "вдогонку", у
>> нас снимется много вопросов о том, как интегрировать bootchain/interactive с
>> уже имеющимися фичами make-initrd. Будет хороший пример, как это можно
>> сделать.
> То есть ты предлагаешь мне сделать диалоги для конфигурирования сети ? (я
> не против).

Нет, наоборот, диалоги же как раз по моей части:
https://lists.altlinux.org/pipermail/devel/2018-April/204192.html :-)


-- 
Best regards,
Leonid Krivoshein.



  reply	other threads:[~2021-09-22 16:12 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-17 20:48 Leonid Krivoshein
2021-09-17 22:08 ` Alexey Gladkov
2021-09-19 21:50   ` Leonid Krivoshein
2021-09-21 22:51     ` Leonid Krivoshein
2021-09-22  0:16       ` Leonid Krivoshein
2021-09-22 10:01       ` Alexey Gladkov
2021-09-22 10:09     ` Alexey Gladkov
2021-09-22 10:56       ` Leonid Krivoshein
2021-09-22 11:41         ` Alexey Gladkov
2021-09-22 12:06           ` Leonid Krivoshein
2021-09-22 13:08             ` Alexey Gladkov
2021-09-22 14:46                 ` Alexey Gladkov
2021-09-22 16:12                   ` Leonid Krivoshein [this message]
2021-09-22 19:03                     ` Alexey Gladkov
2021-09-22 22:06                       ` Leonid Krivoshein
2021-09-23  0:45                         ` Alexey Gladkov
2021-09-23  2:31                           ` Антон Мидюков
2021-09-23  8:59                             ` Alexey Gladkov
2021-09-23 20:40                               ` Leonid Krivoshein
2021-09-23 21:15                                 ` Alexey Gladkov
2021-09-23 21:55                                   ` Arseny Maslennikov
2021-09-23 22:41                                     ` Alexey Gladkov
2021-09-23 22:51                                       ` Leonid Krivoshein
2021-09-23 22:56                                   ` Leonid Krivoshein
2021-09-23 23:31                                     ` Alexey Gladkov
2021-09-23  2:40                           ` Leonid Krivoshein
2021-09-23 11:38                             ` Alexey Gladkov
2021-09-24 17:31                               ` Leonid Krivoshein
2021-09-24 18:35                                 ` Leonid Krivoshein
2021-09-24 19:00                                 ` Alexey Gladkov
2021-09-24 20:09                                   ` Leonid Krivoshein
2024-03-07 19:18   ` Leonid Krivoshein
2024-03-12 17:42     ` Alexey Gladkov

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=c1f7976e-e72c-3a43-f9db-f185650316a2@gmail.com \
    --to=klark.devel@gmail.com \
    --cc=make-initrd@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

Make-initrd development discussion

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/make-initrd/0 make-initrd/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 make-initrd make-initrd/ http://lore.altlinux.org/make-initrd \
		make-initrd@lists.altlinux.org make-initrd@lists.altlinux.ru make-initrd@lists.altlinux.com
	public-inbox-index make-initrd

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.make-initrd


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git