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
next prev 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