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