Make-initrd development discussion
 help / color / mirror / Atom feed
From: Alexey Gladkov <gladkov.alexey@gmail.com>
To: make-initrd@lists.altlinux.org
Subject: Re: [make-initrd] udhcpc script в фиче network
Date: Wed, 22 Sep 2021 16:46:19 +0200
Message-ID: <20210922144619.3h4va7j4u6m36mka@example.org> (raw)
In-Reply-To: <bbbe18f3-2ce6-ed0c-d7b4-61090c6ba955@gmail.com>

On Wed, Sep 22, 2021 at 04:50:57PM +0300, Leonid Krivoshein wrote:
> 
> 22.09.2021 16:08, Alexey Gladkov пишет:
> > On Wed, Sep 22, 2021 at 03:06:37PM +0300, Leonid Krivoshein wrote:
> > > > Без параметра в /proc/cmdline мне кажется всё-таки не обойтись до тех пор
> > > > пока не открыли телепатию.
> > > > 
> > > > Можно добавить параметр network=ask и при его присутствии можно спрашивать
> > > > о конфигурации у пользователя.
> > > > 
> > > > Код для конфигурации интерфейса есть тут:
> > > > 
> > > > features/network/data/lib/initrd/cmdline.d/network
> > > У меня вчера всё же получилось добиться желаемого, вот фрагмент:
> > Этот код вызывает у меня массу вопросов ))
> > 
> > > # No network settings
> > > if [ "${IP:-0}" = 0 ] &&
> > >          [ "${ROUTE:-0}" = 0 ] &&
> > >          [ "${IFNAME:-0}" = 0 ] &&
> > >          [ "${NAMESERVER:-0}" = 0 ]
> > > then
> > >          msg="network settings not defined in /proc/cmdline"
> > > 
> > >          if [ -n "${RDSHELL-}" ]; then
> > >                  [ -z "$NOASKUSER" ] ||
> > >                          fatal "$msg, dialogs are disabled"
> > >                  message "$msg"
> > >                  msg="N${msg:1}. Try with the option 'ip=dhcp4' after
> > > reboot."
> > >                  IM_errmsg "$msg $BC_RBMSG"
> > >                  bc_reboot
> > >          fi
> > > 
> > >          message "$msg"
> > > 
> > >          ( echo 'export IP="1"'
> > >            echo 'export ROUTE="0"'
> > >            echo 'export IFNAME="0"'
> > >            echo 'export NAMESERVER="0"'
> > >            echo 'export IP0="dhcp4"'
> > >          ) >> /.initrd/initenv
> > Это довольно смелое предположение что когда тебя не просят конфигурировать
> > сеть, то на самом деле пользователь хотел dhcp ... да ещё и ipv4.
> 
> Прилагаю скриншот, по которому станет понятно происходящее. Тут пользователь
> явно намерен загрузить конкретный образ по FTP и указывает ip=dhcp4 в
> /proc/cmdline. Но он мог забыть указать ip=..., а мог вообще не лезть в
> /proc/cmdline или выбрать метод в меню "на лету". Главная подоплёка в том,
> что если сетевых настроек нет, хорошо бы их спрашивать. Ну, потому что без
> сети с выбранным методом иначе не загрузиться. Сейчас код более простой.
> Возможно, тут стоит выводить диалоги. Но вопрос в последующем применении
> новых настроек.

Весь вот этот автоугадав и домысливание должно происходить после сервиса
cmdline. Или же даже проще - до сервиса udev. В этом случае вся
конфигурация будет готова и не будет никаких гонок.

Вообще почти все диалоги с уточнением конфигурации должны быть тут т.е. до
udevd и pipelined.

> Для altboot пока что не имеет значения, что make-initrd умеет работать с
> IPv6. В нём просто нет пока его поддержки, как и в пропагаторе. Если
> указывать ip=dhcp, сеть поднимается дольше. Поддержку IPv6 можно будет
> добавить позже...

Я считаю, что в 2021 уже не нужно говорить о поддержке IPv6 в новом коде.
Нужно просто считать, что он есть.

Для того чтобы в пустую не ждать есть функции ipv4_enabled/ipv6_enabled.
Кстати, IPv4 в современном мире может быть выключен и это стоит учитывать.

> > subshell тут совершенно не нужен. Он только замедляет код.
> 
> Просто хотелось бы перенаправлять вывод в этом месте.

{ echo; echo; } > /path/to/file


> > /lib/initrd/cmdline.d/network должен выполняться лишь один раз до всего
> > это этого subshell. Он генерирует конфигурацию для всех интерфейсов.
> 
> Но он уже один раз выполнился до входа в bootchain-waitnet, при этом был
> сконфигурирован только "lo".

lo всегда есть. Он даже не конфигурируется:

features/network/data/etc/network/ifaces/lo/ipv4address

Зоркий глаз может заметить, что формат конфигов очень похож на etcnet ;)

> > Перед этим стоит остановить udev поскольку cmdline.d/network дописывает
> > /etc/udev/rules.d/60-persistent-net.rules и я вообще сомневаюсь, что там
> > всё правильно. Скорее всего нужно переделывать работу с
> > 60-persistent-net.rules, чтобы можно было запускать cmdline.d/network
> > несколько раз.
> 
> Про это и близкое по теме, надеюсь, Антон скоро ещё напишет. Со своей
> стороны добавлю, что:
> 
> 1) IFNAME -- ужасно полезная фича, особенно для сетевых стендов с iPXE, т.к.
> при зоопарке интерфейсов позволяет средствами самого загрузчика указать, с
> какого интерфейса мы загрузились.
> 2) 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 -- это результат объединения всех. Это стейт.

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

> Есть и другой вопрос и даже аналогия. При создании форка pipeline/waitdev
> было понятно, что альтернативой ожидания устройств по uevent при ручном
> выборе с диалогами может быть только методика сканирования уже найденных
> устройств. Шаг localdev может схватить то, что ранее было найдено шагом
> слева waitdev. Но если там нет устройства, он выполняет сканирование, он
> использует таймауты, итд. С сетью в этом месте, мне кажется, всё должно быть
> так же,

Если всю конфигурацию делать до pipelined, то waitnet сведётся к
функционалу сервиса network-up. Ну или же к ожиданию
/.initrd/online/$NET_IF если мы знаем какой интерфейс должен использоваться.

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

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

Будет другая проблема если интерфейсы будут появляться сильно не сразу, но
это уже следующая проблема.

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

То есть ты предлагаешь мне сделать диалоги для конфигурирования сети ? (я
не против).

-- 
Rgrds, legion



  parent reply	other threads:[~2021-09-22 14:46 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 [this message]
2021-09-22 16:12                   ` Leonid Krivoshein
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=20210922144619.3h4va7j4u6m36mka@example.org \
    --to=gladkov.alexey@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