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 15:08:39 +0200
Message-ID: <20210922130839.b4iwv2arqyggczb3@example.org> (raw)
In-Reply-To: <8d262440-d8fc-c174-3293-1964e3440617@gmail.com>

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.

subshell тут совершенно не нужен. Он только замедляет код.

>         ( # shellcheck disable=SC2012
>           for netdev in $(ls /sys/class/net/) lo; do
>                 [ "$netdev" != lo ] ||
>                         continue
>                 [ -r "/sys/class/net/$netdev/flags" ] ||
>                         continue
>                 ACTION="add" INTERFACE="$netdev" /lib/uevent/filters/network
>           done
> 
>           /lib/initrd/cmdline.d/network
>         ) >/dev/null 2>&1 &

А вот тут почему-то всё сделано в обратном порядке. Ты сначала триггеришь
эвент по интерфейсу, а потом генерируешь конфигурацию для интерфейса. Да
ещё и фоне это происходит.

/lib/initrd/cmdline.d/network должен выполняться лишь один раз до всего
это этого subshell. Он генерирует конфигурацию для всех интерфейсов.

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

Также перед запуском cmdline.d/network нужно удалить старую конфигурацию!

После его выполнения можно выполнить /lib/uevent/filters/network, но не
таким образом как сделано тут.

echo add > /sys/class/net/$netdev/uevent

> fi
> 
> Это упрощённый вариант без диалогов. Если не указать ничего в /proc/cmdline,
> пытаемся найти интерфейсы и сконфигурировать их по DHCPv4. Код работает
> нормально, но есть один сторонний эффект. Не могу объяснить причину. При
> загрузке больших ISO-шников с mirror.yandex.ru по http всё ОК. При загрузке
> их же по ftp, первое обращение с получением размера файла проходит успешно,
> а на втором обращении (непосредственно скачивание образа) curl возвращает 7.
> Если тут же запустить скачивание повторно (нажать в форме ENTER, не меняя
> адресов), скачивание со второй попытки проходит успешно. Этого стороннего
> эффекта не возникает, если в /proc/cmdline добавить ip=dhcp4, я это
> воспроизводил многократно. Т.е. мой код, хоть и работает, не совсем
> правильно, ошибка точно связана с этим фрагментом.

-- 
Rgrds, legion



  reply	other threads:[~2021-09-22 13:08 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 [this message]
2021-09-22 14:46                 ` Alexey Gladkov
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=20210922130839.b4iwv2arqyggczb3@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