| 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, 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 ничего сказать не могу. А так - УМВР. :-) Чудно. |