Summary: | vethXXX.X/sysctl.conf is being misprocessed | ||||||
---|---|---|---|---|---|---|---|
Product: | Sisyphus | Reporter: | Michael Shigorin <mike> | ||||
Component: | etcnet | Assignee: | Andrew Kornilov <hiddenman> | ||||
Status: | CLOSED FIXED | QA Contact: | qa-sisyphus | ||||
Severity: | minor | ||||||
Priority: | P2 | CC: | dubrsl, evg, ldv, rider, sem, shaba, vseleznv, vsu, vvk | ||||
Version: | unstable | ||||||
Hardware: | all | ||||||
OS: | Linux | ||||||
Attachments: |
|
Description
Michael Shigorin
2006-12-01 15:36:41 MSK
Да оно вообще сломано полностью: $R -q etcnet etcnet-0.8.4-alt2 $R -V etcnet $su - Password: #echo 'log_martians=0' > /etc/net/ifaces/atl/sysctl.conf #service network reload ... error: "net.ipv4.conf.atl/log_martians" is an unknown key ... #cat /proc/sys/net/ipv4/conf/atl/log_martians 1 #echo 'net.ipv4.conf.atl.log_martians=0' >| /etc/net/ifaces/atl/sysctl.conf #service network reload ... #cat /proc/sys/net/ipv4/conf/atl/log_martians 1 Причём если в /etc/net/scripts/ifup-common в функций process_sysctl_file приводить строчки с VARPREFIX к общему знаменателю (точке либо слэшу), содержание sysctl.conf для интерфейса по прежднему не действует. Почему, мне непонятно. reload или stop&&start вроде роли не играет. Выставлю ящик пива (средне-разумной категории) в Киеве за исправление. :) Сейчас включаю свободный тазик, где можно со всем этим поэкспериментировать. Заодно и QoS проверю, потому как у меня работает вроде как. По ходу эксперимента буду тут вопросы задавать. Поддержки ovz пока нет, желающие помочь welcome. Миша, не подумай, что это из-за пива я оживился :-D Вот лог общения с Сергеем. Все понятно, в принципе :) =================== <hiddenman> vsu|x86_64: и еще: /sbin/sysctl -q -w net/ipv4/conf/eth0.proxy_arp=1 раньше, судя по всему, работало. сейчас не работает. я про точку после имени интерфейса. у Pilot-а так в исходниках. мож это в 2.4 только было? <hiddenman> vsu|x86_64: без адреса никак? гм <vsu|x86_64> hiddenman: вообще-то в мане как раз '.' написано <hiddenman> /sbin/sysctl -q -w net/ipv4/conf/eth1.proxy_arp=1 <hiddenman> error: "net.ipv4.conf.eth1/proxy_arp" is an unknown key <vsu|x86_64> hiddenman: возможно, если '/', надо все так писать? <hiddenman> /sbin/sysctl -q -w net/ipv4/conf/eth1/proxy_arp=1 работает <vsu|x86_64> пошёл RTFS... <hiddenman> vsu|x86_64: возможно. тут просто баги на etcnet висят. вижу, что Денис заменил все <hiddenman> - VARPREFIX="net/ipv4/neigh/$NAME." <hiddenman> + VARPREFIX="net.ipv4.neigh.$NAME." <hiddenman> и тд <hiddenman> типа поддержка точки для чего-то там. но, похоже, неправильно что-то <vsu|x86_64> slashdot(tmpname+strlen(PROC_PATH),'.','/') <vsu|x86_64> p = strpbrk(p,"/."); <vsu|x86_64> if(!p) return; /* nothing -- can't be, but oh well */ <vsu|x86_64> if(*p==new) return; /* already in desired format */ <vsu|x86_64> hiddenman: т.е., если последний разделитель такой, как надо, ничего не делается <vsu|x86_64> hiddenman: а в данном случае переводится из '.' в '/' * ^emp^ is now known as emp|powerpc <vsu|x86_64> ой, там вообще фигня какая-то <vsu|x86_64> while(p){ <vsu|x86_64> char c = *p; <vsu|x86_64> if(c==old) *p=new; <vsu|x86_64> if(c==new) *p=old; <vsu|x86_64> p = strpbrk(p+1,"/."); <hiddenman> vsu|x86_64: такой как надо - это какой? <vsu|x86_64> } <vsu|x86_64> hiddenman: короче, все разделители должны быть одинаковые, иначе будет жопа <hiddenman> vsu|x86_64: ясно. баг Дениса, значит. а может поменяли просто недавно <vsu|x86_64> хотя чего ещё ждать от функции с именем slashdot :) <vsu|x86_64> hiddenman: вообще прикол в том, что никто не запрещает иметь '.' в имени интерфейса <hiddenman> :) <vsu|x86_64> net.ipv4.conf.dummy/iface.forwarding = 1 <hiddenman> vsu|x86_64: так как быть лучше? <vsu|x86_64> вот что получается <vsu|x86_64> а '/' всё-таки запрещено <vsu|x86_64> hiddenman: работает либо net.ipv4.conf.dummy/iface.forwarding, либо net/ipv4/conf/dummy.iface/forwarding <vsu|x86_64> hiddenman: из имени интерфейса, очевидно, проще сделать второе <vsu|x86_64> hiddenman: но в выводе sysctl оно всё равно преобразуется в первое <vsu|x86_64> hiddenman: короче, это очередные недокументированные грабли <hiddenman> ага, спасибо <vsu|x86_64> hiddenman: в том куске патча менять следовало не '/' на '.', а наоборот <henker> bb all * henker has quit ("Покидаю") <vsu|x86_64> hiddenman: или он там правит $NAME ? <hiddenman> vsu|x86_64: не, name не трогает вроде <vsu|x86_64> hiddenman: короче, я понял логику sysctl... последний символ [/.] определяет, какие символы используются как разделители <vsu|x86_64> hiddenman: т.е, у тебя получилось ("net/ipv4/conf/eth0" "proxy_arp") <hiddenman> vsu|x86_64: ясно. запишу сейчас весь твой текст в баг, там посмотрим <vsu|x86_64> hiddenman: а когда он преобразовал это в имя файла - ("net.ipv4.conf.eth0" "proxy_arp") <vsu|x86_64> hiddenman: баг-то где? <hiddenman> vsu|x86_64: преобразовывает sysctl, денис ничего не преобразовывает <vsu|x86_64> hiddenman: ну тогда лучше использовать '/' <vsu|x86_64> hiddenman: чтобы на интейфейсах с точками не глючило <hiddenman> $SYSCTL -q -w $VARPREFIX$VARNAME=$VARVALUE <vsu|x86_64> мда Да ладно, прям нельзя уж хоть какой-то подниматель настроения предложить за хорошее дело :-) 2 vsu: офигеть oO (In reply to comment #5) > Вот лог общения с Сергеем. Все понятно, в принципе :) > А вот мне что-то не очень. Я пробовал ставить везде и точки и слеши (и писал об этом здесь). Пробовал и абсолютный путь в sysctl.conf прописывать. У меня не заработало никак. :-( (In reply to comment #7) > А вот мне что-то не очень. Я пробовал ставить везде и точки и слеши (и писал об > этом здесь). Пробовал и абсолютный путь в sysctl.conf прописывать. У меня не > заработало никак. :-( Все разделители в имени sysctl должны быть одного типа (либо '.', либо '/'); используемый разделитель определяется по последнему присутствующему в строке символу из набора [/.]. При этом, если используется разделитель '/', символы '.' рассматриваются как часть элемента пути; если используется разделитель '.', символы '/' при преобразовании имени в путь в /proc/sys заменяются на '.'. Т.е., в данном случае есть два варианта работы с sysctl: 1) Использовать разделитель '.', при этом все символы '.' в имени интерфейса (которые там вполне могут встречаться) необходимо заменять на '/'. 2) Использовать разделитель '/', при этом в имени интерфейса ничего заменять не надо (символы '/' в имени интерфейса встречаться не могут). (In reply to comment #8) > (In reply to comment #7) > > А вот мне что-то не очень. Я пробовал ставить везде и точки и слеши (и писал об > > этом здесь). Пробовал и абсолютный путь в sysctl.conf прописывать. У меня не > > заработало никак. :-( > > Все разделители в имени sysctl должны быть одного типа (либо '.', либо '/'); > используемый разделитель определяется по последнему присутствующему в строке > символу из набора [/.]. При этом, если используется разделитель '/', символы > '.' рассматриваются как часть элемента пути; если используется разделитель '.', > символы '/' при преобразовании имени в путь в /proc/sys заменяются на '.'. > > Т.е., в данном случае есть два варианта работы с sysctl: > > 1) Использовать разделитель '.', при этом все символы '.' в имени интерфейса > (которые там вполне могут встречаться) необходимо заменять на '/'. > > 2) Использовать разделитель '/', при этом в имени интерфейса ничего заменять не > надо (символы '/' в имени интерфейса встречаться не могут). Я читал копию IRC-беседы и понял это. Но попытки сделать и так (могу показать применяемые тривиальные патчи) к положительному результату не привели. Судя по логу (ставил set -x в скриптах) sysctl выполняется с нужными параметрами. Но cat упорно твердит, что log_martians не изменился (его менял). Точки в имени интерфейса, как видно, нет. Не знаю, куда ещё копать. Если всё так просто, как говорите, может патчем поделитесь? Собственно, патч простой, дозаменить последнюю точку везде на /. Толи Денис не заметил их, толи чем-то другим руководствовался. Патч прикладываю и начинаю разыскивать Дениса :-) Created attachment 1735 [details]
ifup-common patch
(In reply to comment #11) > Created an attachment (id=1735) [edit] > ifup-common patch > Посмотрел патч. Я дела такой же (вернее, два, ещё один с точками а не слешами). Но у меня не работает. И абсолютный путь не работает. log_martians упорно не меняется. (In reply to comment #11) > Created an attachment (id=1735) [edit] > ifup-common patch > ~$ R -q etcnet etcnet-0.7.16-alt1 На работе старый etcnet из Campact-а. Те же яйца. Не работает ни относительный ни абсолютный пути в /etc/net/ifaces/eth0/sysctl.conf. ifup-common патчить не нужно (одни точки). Оно вообще то тестировалось? Или руки? Всем привет. Когда я вводил тасовку точек и наклонок, я решал проблему с интерфейсами, имена которых содержат точку (и решил, насколько я помню). Впрочем, если вы сообща раскопали другие ньюансы, то на здоровье (я могу сам всё проверить, но это сейчас неудобно). Перевешиваю на Андрея, он может залить пакет с тем патчем, который посчитает нужным. Только работающее не сломайте пожалуйста. (In reply to comment #14) > Когда я вводил тасовку точек и наклонок, я решал проблему с интерфейсами, имена > которых содержат точку (и решил, насколько я помню). Впрочем, если вы сообща > раскопали другие ньюансы, то на здоровье (я могу сам всё проверить, но это > сейчас неудобно). Перевешиваю на Андрея, он может залить пакет с тем патчем, > который посчитает нужным. Только работающее не сломайте пожалуйста. Пожалуйста, убейте меня кто-нибудь! Я ССЗБ, который редко думает головой! Разобрался. Патч работает. (In reply to comment #15) > Пожалуйста, убейте меня кто-нибудь! "Не дождётесь" В общем, баг исправил и в trunk и в tag. В trunk еще кучка исправлений и нововведений. Даже не знаю, что лучше залить. Денис предлагал уже 0.8.5 pre какой-нибудь сделать. Как думаете? Вот Changelog из 0.8.5: bugfix: name managements broke ethtool calls bugfix: DHCP did not work for Fedora 5 bugfix: file permissions in Makefile bugfix: system iptables chains were not flushed bugfix: wrong sysctl options handling new feature: bash arrays IPV4ADDRESS and IPV6ADDRESS in the firewall rules (In reply to comment #17) > В общем, баг исправил и в trunk и в tag. В trunk еще кучка исправлений и > нововведений. Даже не знаю, что лучше залить. Денис предлагал уже 0.8.5 pre > какой-нибудь сделать. Как думаете? Стойт обновить, ИМХО. Можно закрывать? Сейчас попробую вспомнить да проверить... (In reply to comment #19) > Можно закрывать? Можно. Только за OpenVZ ничего сказать не могу. А так - УМВР. :-) Чудно. |