Баг проявляется, если для интерфейса выполняются такие условия: 1) В /etc/net/iftab имеется строка для переименования интерфейса: # cat /etc/net/iftab ether mac 00:0A:E4:40:BA:D9 2) В опциях интерфейса /etc/net/ifaces/ether нет параметра MODULE= Модули интерфейса загружаются до старта сети (udev'ом?), интерфейс eth0 создается (не поднят) В этом случае после загрузки имеем: # ip link show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop qlen 1000 link/ether 00:0a:e4:40:ba:d9 brd ff:ff:ff:ff:ff:ff # ifup ether !# Интерфейс не поднимается, не переименовывается - по прежнему называется eth0 Конфигурация интерфейса была рабочая на etcnet-0.8.4 Сеть пропала после перезагрузки после обновления до 0.9.2-alt1 Пока это полечилось добавлением MODULE=e100 в /etc/net/ifaces/ether/options Но ведь отсутствие этого параметра не есть ошибка в конфигурации?
В /etc/net/scripts/create-eth: if [ -n "$MODULE" ]; then for oneword in $MODULE; do $MODPROBE $oneword done else $IP link set dev $NAME down fi То есть, если $MODULE для интерфейса не определен, то выполняется $IP link set dev $NAME down который и возвращает ошибку, поскольку create-eth вызывается из ifup _до_ ifrename, и в ip передается новое имя интерфейса ($NAME), а не текущее после загрузки модуля (eth0). Такой work-around пока решает проблему: - $IP link set dev $NAME down + $IP link set dev $NAME down || : Хотя, это, наверное, и не совсем правильно. Кстати, зачем делать down, если до вызова create-eth ifup убедился, что интерфейс не поднят?
> Пока это полечилось добавлением MODULE=e100 в /etc/net/ifaces/ether/options > Но ведь отсутствие этого параметра не есть ошибка в конфигурации? Вообще-то --- ошибка. То есть если мы конфигурируем сеть сами, то должны уметь делать это от начала до конца, а если полагаемся на udev, то ждём отмашки с его стороны. Я подумаю, что можно улучшить для данной конкретной ситуации, спасибо.
Бывает ещё и так... Поймал нечто подобное в ситуации, когда может быть один или два интерфейса, по которым заранее не известно ничего (ни модуля, ни MAC, ни busid), но один из которых надо настроить на известный статический IP. Какой -- без разницы, но в дальнейшем при перезагрузках прыгать не должны (чтоб подбирать шнурки пришлось максимум один раз). Это решается указанием однократно запустить настройку сети (альтераторовый модуль) и нажать "применить". (поскольку об интерфейсах заранее ничего не известно, то переименовать их в ext и int, например -- не получается, прибить не по чему; модули грузит udevd) С /etc/iftab -- работает. Переместив его в /etc/net/iftab, поймал вместо eth1 -- eth (!!): $ cat /etc/net/iftab eth0 mac 00:a0:cc:a2:4c:eb eth1 mac 00:15:f2:25:d1:84 $ /sbin/ip ad 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo 2: eth0: <BROADCAST,MULTICAST,NOTRAILERS,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 00:a0:cc:a2:4c:eb brd ff:ff:ff:ff:ff:ff inet 192.168.1.185/24 brd 192.168.1.255 scope global eth0 3: eth: <NO-CARRIER,BROADCAST,MULTICAST,NOTRAILERS,UP> mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 00:15:f2:25:d1:84 brd ff:ff:ff:ff:ff:ff $ head -100 /etc/net/ifaces/eth*/options ==> /etc/net/ifaces/eth0/options <== USE_HOTPLUG=no BOOTPROTO=dhcp NEVER_RMMOD=yes ONBOOT=yes DISABLED=no ==> /etc/net/ifaces/eth1/options <== USE_HOTPLUG=no BOOTPROTO=static NEVER_RMMOD=yes ONBOOT=no DISABLED=no
(In reply to comment #3) > С /etc/iftab -- работает. Переместив его в /etc/net/iftab, поймал вместо eth1 Так в этом-то и проблема. eth* интерфейсы сделать сейчас через /etc/net/iftab нельзя. Почему и полезли все в /etc/iftab
Мужики, исправьте это хоть кто-то :( Я не понимаю всего происходящего тут, но было бы крайне досадно в гипотетическом Master 4.0 иметь несогласованность между настраивалкой и подсистемой, которую она конфигурирует, или несовместимость этой подсистемы с довольно распространёнными привычками администраторов (которую объезжает /etc/iftab, но получаем несогласованность). Если это чем-то поможет -- пиво с меня точно причитается. Или скажите, куда копать -- я-то заказчику отдам и как есть (на гвоздиках с /etc/iftab), но лучше бы воспользоваться случаем и исправить. PS: по поводу "Модули интерфейса загружаются до старта сети (udev'ом?)" -- при этом USE_HOTPLUG для них должен быть yes или no? (MODULE не указываю -- в моём разе это невозможно)
Люди, спорим дольше. У ifrename есть ключ -t. Его нужно добавить к вызову из etcnet. И только (!).
Добавил (в functions, ifup, ifup-removable, шоб под патч) -- огрёб 2: eth2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop qlen 1000 link/ether 00:15:f2:25:d1:84 brd ff:ff:ff:ff:ff:ff 3: eth0: <BROADCAST,MULTICAST,NOTRAILERS,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 00:a0:cc:a2:4c:eb brd ff:ff:ff:ff:ff:ff inet 192.168.1.185/24 brd 192.168.1.255 scope global eth0
Помню только что при создании сервиса ifrename мне не удалось научить etcnet этому ключу.
takeover для hotplug-интерфейсов может работать корректно только при условии, что udev будет накапливать необработанные события для сетевых интерфейсов не по их имени, а по ifindex. Точно такая же проблема решалась в своё время для cardmgr из pcmcia-cs. Я успел выяснить это до того, как у меня закончилось свободное время.
Вопрос решён, побочный процесс продолжен в #14837.
etcnet-0.9.7-alt0.M41.1, проблема сохраняется (причём в моём случае udev меня вовсе не интересует). (In reply to comment #2) > > Пока это полечилось добавлением MODULE=e100 в /etc/net/ifaces/ether/options > > Но ведь отсутствие этого параметра не есть ошибка в конфигурации? > > Вообще-то --- ошибка. То есть если мы конфигурируем сеть сами, то должны уметь > делать это от начала до конца, А зачем ещё лишний раз писать модуль? У меня и так всё однозначно задано в iftab (и традиционный ifrename справился бы): [root@localhost net]# ifrename -i lan -n test test [root@localhost net]# ip link 1: lo: <LOOPBACK> mtu 16436 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: test: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 00:13:a9:91:2a:52 brd ff:ff:ff:ff:ff:ff 3: wmaster0: <BROADCAST,MULTICAST> mtu 1500 qdisc ieee80211 qlen 1000 link/ieee802.11 00:19:d2:8b:85:51 brd ff:ff:ff:ff:ff:ff 4: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop qlen 1000 link/ether 00:19:d2:8b:85:51 brd ff:ff:ff:ff:ff:ff [root@localhost net]# ls ifaces/ default/ lan/ lo/ unknown/ [root@localhost net]# ls ifaces/lan/ options [root@localhost net]# cat ifaces/lan/options TYPE=eth DISABLED=no NM_CONTROLLED=no # I have a reasonable self-configuring default: #BOOTPROTO=dhcp,ipv4ll [root@localhost net]# ls iftab* iftab [root@localhost net]# cat iftab # -*- conf-space -*- # (eth0 is evil!) lan driver sky2 [root@localhost net]# Но etcnet не справляется из-за этого странного вызова "$IP link set dev $NAME down" ещё до того, как к устройству можно обращаться по указанному имени (имя-то меняется в scripts/ifup на следующем шаге!): [root@localhost net]# service network start Computing interface groups: .. 2 interfaces found Starting group 0/virtual (1 interfaces) Starting lo: .....OK Starting group 1/realphys (1 interfaces) Starting lan: Cannot find device "lan" !FAILED Processing /etc/net/vlantab: empty. [root@localhost net]# А ifrename бы справился: [root@localhost net]# ip link 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: test: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 00:13:a9:91:2a:52 brd ff:ff:ff:ff:ff:ff 3: wmaster0: <BROADCAST,MULTICAST> mtu 1500 qdisc ieee80211 qlen 1000 link/ieee802.11 00:19:d2:8b:85:51 brd ff:ff:ff:ff:ff:ff 4: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop qlen 1000 link/ether 00:19:d2:8b:85:51 brd ff:ff:ff:ff:ff:ff [root@localhost net]# ifrename -c iftab [root@localhost net]# service network start Computing interface groups: .. 2 interfaces found Starting group 0/virtual (1 interfaces) Starting lo: 'lo' is already up SKIPPED Starting group 1/realphys (1 interfaces) Starting lan: ..OK Processing /etc/net/vlantab: empty. [root@localhost net]# Буду пробовать workaround. Мне это нужно, чтобы иметь профили iftab, и чтобы в разных профилях физическое утсройство называлось разными именами.
(In reply to comment #1) > Такой work-around пока решает проблему: > - $IP link set dev $NAME down > + $IP link set dev $NAME down || : Спасибо! Подтверждаю, сработало: [root@localhost net]# git merge program-iftab-without-MODULE Merge made by recursive. scripts/create-eth | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) [root@localhost net]# ifrename -i lan -n test test [root@localhost net]# ip link 1: lo: <LOOPBACK> mtu 16436 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: test: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 00:13:a9:91:2a:52 brd ff:ff:ff:ff:ff:ff 3: wmaster0: <BROADCAST,MULTICAST> mtu 1500 qdisc ieee80211 qlen 1000 link/ieee802.11 00:19:d2:8b:85:51 brd ff:ff:ff:ff:ff:ff 4: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop qlen 1000 link/ether 00:19:d2:8b:85:51 brd ff:ff:ff:ff:ff:ff [root@localhost net]# service network start Computing interface groups: .. 2 interfaces found Starting group 0/virtual (1 interfaces) Starting lo: .....OK Starting group 1/realphys (1 interfaces) Starting lan: Cannot find device "lan" ..OK Processing /etc/net/vlantab: empty. [root@localhost net]# ifconfig lan Link encap:Ethernet HWaddr 00:13:A9:91:2A:52 inet addr:10.1.1.11 Bcast:10.1.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:225642 errors:0 dropped:0 overruns:0 frame:0 TX packets:130225 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:334253820 (318.7 MiB) TX bytes:7710270 (7.3 MiB) Interrupt:17 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) [root@localhost net]#
Тоже нарвался. Выкрутился, добавив MODULE=ext3 в /etc/net/ifaces/<имя интерфейса/options Денис, есть предложение - перед create-exh, в случае, если есть /etc/net/iftab - попытаться вычислить текущее имя интерфейса и именно ему сделать down. Вычислить текущий можно, распарсив /etc/net/iftab (с помощью Dry-run у ifrename - он напишет что и куда переименовывает).
Created attachment 3388 [details] try to guess eth iface name during create примерный патч по предыдущему комменту я не разобрался с profiled_filename, в остальном работает
(В ответ на комментарий №14) > я не разобрался с profiled_filename А в чём трудность?
> А в чём трудность? в вызове ifrename IFTAB_FILE пустой -- я на скорую руку поменял на /etc/net/iftab. собссно, патч изготовлен для иллюстрации идеи.
(В ответ на комментарий №16) > в вызове ifrename IFTAB_FILE пустой -- > я на скорую руку поменял на /etc/net/iftab. > собссно, патч изготовлен для иллюстрации идеи. Ты хочешь сказать что в 0.9.8-alt2 вызов: profiled_filename IFTAB_FILE "$IFTAB" возвращает 0 и IFTAB_FILE пуст?
На первый взгляд патч не относится к текущему делу. Нельзя ли заново в простых выражениях, вкратце, сформулировать суть претензии, используя мимимум вовлечённых элементов? Спасибо.
Суть претензии отражена в первом посте от Yuriy Kashirin. Можно повторить ещё раз: интерфейс не переименовывается при старте сети, если в его опциях отсутствует "MODULE=<тра-та-та>" Собственнно - посмотри create-eth в текущей реализации, и ты всё поймёшь. Не надо читать весь тред.
Попробую внести ясность. "$IP link set dev $NAME down" --- эта конструкция сохранилась со времён ядра 2.4, в то время это был неплохой способ получить эффект от строки alias в /etc/modules.conf, не уточняя, что же именно записано в этом alias. Похоже, пора менять тактику, нужно подумать. Кстати, опцию dry-run к ifrename в своё время добавил я. Поэтому про неё никогда не забываю ;-)
Похоже, тоже нарвался при установке с http://ftp.altlinux.ru/pub/people/rider/sisyphus-1.9.3-20150203-server-light-systemd-x86_64-ru-install-cd.iso Причем journalctl -b 0 -u network упорно показывал ругань 'Cannot find device "enp0s3"' пока не добавил MODULE= И не прописал привязку к маку в /etc/net/iftab (/etc/iftab не влиял). Хак с '$IP link set dev $NAME down || :' не помогал, проверял. Очень печально.
iftab уже не актуален, переименование делается в udev rules: # cat /etc/udev/rules.d/70-persistent-net.rules # This file was automatically generated by the /lib/udev/write_net_rules # program, run by the persistent-net-generator.rules rules file. # # You can modify it, as long as you keep each rule on a single # line, and change only the value of the NAME= key. # PCI device 0x8086:0x10cc (e1000e) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:15:17:ce:4d:b0", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="res2" Если такого файла нет, то надо разбираться.
И это, похоже, на конфигурации с systemd вылез какой-то очередной race на предмет того, кто же раньше поднимается - сеть или модули ядра. А что после загрузки, интерфейс есть ? ifup отрабатывал ?
Такого файла нет, т.к. в указанной исошке инсталлятор не устанавливает пакет udev-rule-generator-net, как я понимаю. Хм... да, это race, т.к. после загрузки интерфейс есть (в состоянии DOWN) и ifup enp0s3 или systemctl restart network его поднимают успешно. Как бы это отладить и на что перевесить?
(В ответ на комментарий №24) > Такого файла нет, т.к. в указанной исошке инсталлятор не устанавливает > пакет udev-rule-generator-net, как я понимаю. Помнится, с ним надо было собирать initrd -- в m-p оформлено так (+net-eth): http://git.altlinux.org/people/mike/packages/?p=mkimage-profiles.git;a=blob;f=features.in/net-eth/config.mk;hb=HEAD http://git.altlinux.org/people/mike/packages/?p=mkimage-profiles.git;a=blob;f=features.in/stage2/config.mk;hb=HEAD
(про переименование интерфейсов: я может быть этого не указал четко, но помогло прописывание MODULE и "переименование" в то же самое имя, что выдано интерфейсу ещё в инсталляторе, т.е. enp0s3. Впрочем, я пробовал переименовывать и в "eth0" и в "lan" - работает также успешно)
Сейчас для переименовывания интерфейсов лучше всего пользоваться правилами в udev, в этом случае всё срабатывает хорошо и вовремя.