Hide Forgot
Description of problem: biosdevname set a names like 'pci3#1' to interfaces. Some scripts treats '#' as as special symbol. It may be better to use sifferent separator, like '_' or '-' (seee patch). Version-Release number of selected component (if applicable): biosdevname-0.3.4-1 How reproducible: Always, if pci card is in slot Steps to Reproduce: 1. Inser pci network card 2. create appropriate config file /etc/sysconfig/network-scripts/ifcfg-pciNxM 3. service network restart Actual results: Interface appears up, but some errors shown: grep: ifcfg-ifcfg-pci3#1: No such file or directory Expected results: Scripts works w/o errors. Additional info: There are some old 3-rd party scripts, so it may be better not to fix scripts, but use different separator.
Created attachment 469322 [details] User symbol '_' as a separator
_ is taken in my scheme, to separate NIC partitions & SR-IOV virtual functions. I'd rather fix the scripts to allow a # in the name. Pointers to such scripts? Was this a rawhide install?
I can't see a failure when using pci2#1 as an interface name, on a Fedora 14 system + biosdevname. ifup/ifdown work as expected. Can you provide pointers to the failing scripts on your system?
Some of them - /etc/init.d/network from initscripts. Problem part: # bring up all other interfaces configured to come up boot time for i in $interfaces; do unset DEVICEYPE SLAVE eval $(LANG=C grep -F "DEVICE=" ifcfg-$i) eval $(LANG=C grep -F "TYPE=" ifcfg-$i) eval $(LANG=C grep -F "SLAVE=" ifcfg-$i) After this eval's error message appears: grep: ifcfg-ifcfg-pci3#1: No such file or directory Really, it seems, that some substitutions requires quoting "". But it's a too common error. Real error in in this lines : interfaces=$(ls ifcfg* | \ LANG=C sed -e "$__sed_discard_ignored_files" \ -e '/\(ifcfg-lo$\|:\|ifcfg-.*-range\)/d' \ -e '/ifcfg-[A-Za-z0-9\._-]\+$/ { s/^ifcfg-//g;s/[0-9]/ &/}' | \ # HERE! LANG=C sort -k 1,1 -k 2n | \ LANG=C sed 's/ //') May be some another non bash-special symbol, like '@' '=' , and add it to allowed char in all scripts? Dot '.' and ':' are reserver for VLAN-s and aliases.
1) the fact that it's grepping ifcfg-ifcfg-pci3#1 (note the duplicate ifcfg parts of the name) is a problem. I've never seen that before. 2) sounds like an initscripts problem. Re-assigning. I agree the sed you note with #HERE will need adjustment to accept the new separator # in the match.
Initscripts patch to add # fixes it: diff --git a/rc.d/init.d/network b/rc.d/init.d/network index 482bb7b..b31060b 100755 --- a/rc.d/init.d/network +++ b/rc.d/init.d/network @@ -46,7 +46,7 @@ cd /etc/sysconfig/network-scripts interfaces=$(ls ifcfg* | \ LANG=C sed -e "$__sed_discard_ignored_files" \ -e '/\(ifcfg-lo$\|:\|ifcfg-.*-range\)/d' \ - -e '/ifcfg-[A-Za-z0-9\._-]\+$/ { s/^ifcfg-//g;s/[0-9]/ &/}' | \ + -e '/ifcfg-[A-Za-z0-9#\._-]\+$/ { s/^ifcfg-//g;s/[0-9]/ &/}' | \ LANG=C sort -k 1,1 -k 2n | \ LANG=C sed 's/ //') rc=0 On my system, this results in the interfaces being properly found: em1 em2 pci2#1
Created attachment 469405 [details] 0001-add-as-a-valid-characer-in-network-device-names.patch initscript patch
Thanks for the patch, building.