[make-initrd] udhcpc script в фиче network
Leonid Krivoshein
klark.devel at gmail.com
Wed Sep 22 15:06:37 MSK 2021
22.09.2021 14:41, Alexey Gladkov пишет:
> On Wed, Sep 22, 2021 at 01:56:11PM +0300, Leonid Krivoshein wrote:
>> 22.09.2021 13:09, Alexey Gladkov пишет:
>>> On Mon, Sep 20, 2021 at 12:50:33AM +0300, Leonid Krivoshein wrote:
>>>> Вопрос в том, как заставить
>>>> снова запуститься network-up и как отлаживать это хозяйство в rdshell,
>>>> учитывая, что с ним сеть не конфигурируется.
>>> Зачем его перезапускать ?
>>>
>>> network-up в цикле проверяет все ли /sys/class/net/*, которые имеют
>>> конфигурацию, перешли в состояние online.
>>>
>>> Если в процессе ожидания появится новая конфигурация, то она также
>>> подхватится.
>> Тогда как сделать так, чтобы появилась новая конфигурация?
>>
>> Вот ничего из 4х переменных пользователь не передал через /proc/cmdline.
>> Допустим, я сделал диалог, в котором он настраивает сеть руками. Как новые
>> настройки должны попасть в фичу network, чтобы она их применила?
> Без параметра в /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
( # 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 &
fi
Это упрощённый вариант без диалогов. Если не указать ничего в
/proc/cmdline, пытаемся найти интерфейсы и сконфигурировать их по
DHCPv4. Код работает нормально, но есть один сторонний эффект. Не могу
объяснить причину. При загрузке больших ISO-шников с mirror.yandex.ru по
http всё ОК. При загрузке их же по ftp, первое обращение с получением
размера файла проходит успешно, а на втором обращении (непосредственно
скачивание образа) curl возвращает 7. Если тут же запустить скачивание
повторно (нажать в форме ENTER, не меняя адресов), скачивание со второй
попытки проходит успешно. Этого стороннего эффекта не возникает, если в
/proc/cmdline добавить ip=dhcp4, я это воспроизводил многократно. Т.е.
мой код, хоть и работает, не совсем правильно, ошибка точно связана с
этим фрагментом.
--
Best regards,
Leonid Krivoshein.
More information about the Make-initrd
mailing list