Re: поддержка IP_BIND_ADDRESS_NO_PORT на CentOS-7.4

Konstantin Pavlov thresh на nginx.com
Вт Май 15 11:18:46 UTC 2018


Здравствуйте, Илья,

14.05.2018 13:30, Илья Шипицин wrot> 14 мая 2018 г., 15:04 пользователь
Ruslan Ermilov <ru на nginx.com
> <mailto:ru на nginx.com>> написал:
> 
>     On Mon, May 14, 2018 at 12:14:28PM +0500, Илья Шипицин wrote:
>     > на днях зарелизился centos-7.5, в нем, к сожалению, все по прежнему
>     > 
>     > завел тикет
>     > 
>     > https://trac.nginx.org/nginx/ticket/1553
>     <https://trac.nginx.org/nginx/ticket/1553>
>     > 
>     > посмотрите ?
>     > 
>     > 29 апреля 2018 г., 3:40 пользователь Валентин Бартенев <vbart на nginx.com <mailto:vbart на nginx.com>>
>     > написал:
>     > 
>     > > On Saturday, 28 April 2018 15:03:49 MSK Илья Шипицин wrote:
>     > > > привет!
>     > > >
>     > > > поддержка IP_BIND_ADDRESS_NO_PORT официально началась в ядре 4.2, но ...
>     > > > ее портировали в 3.10 на CentOS-7.4
>     > > >
>     > > > однако, портировали не очень качественно. константа определена не в том
>     > > > файле, в котором должна (и в котором ищет nginx)
>     > > >
>     > > > [root на xxx ~]# grep -r IP_BIND_ADDRESS_NO_PORT /usr/include/
>     > > > /usr/include/linux/in.h:#define IP_BIND_ADDRESS_NO_PORT    24
>     > > > [root на xxx ~]#
>     > > >
>     > > >
>     > > > т.е. если пакет собирать, как он собирается обычно, то поддержка
>     > > > IP_BIND_ADDRESS_NO_PORT не включается (хотя могла бы).
>     > > >
>     > > > скажите, вы официальные пакеты собираете каким образом ? кажется, имеет
>     > > > смысл поправить эту процедуру и дать эту крутую фичу пользователям
>     > > > CentOS-7.4
>     > > >
>     > >
>     > > Дело же не в ядре (не только в нем).  На линуксах интерфейс обеспечивает
>     > > glibc и именно туда смотрит nginx.
> 
>     <linux/in.h> - это заголовочный файл ядра.  <netinet/in.h> - это
>     заголовочный файл glibc.  Приложения используют <netinet/in.h>.
>     В норме макрос IP_BIND_ADDRESS_NO_PORT есть в обоих файлах, что
>     означает, что поддержка есть и в ядре, и в glibc.  Утверждение о
>     том, что "константа определена не в том файле", ошибочное.
> 
>     Как Вам уже пытался ранее объяснять Валентин, проблема заключается
>     в том, что в установленной версии glibc нет поддержки этого макроса.
> 
>     Для себя Вы можете проблему решить так:
> 
>             configure --with-cc-opt=-DIP_BIND_ADDRESS_NO_PORT=24
> 
> 
> 
> для себя я, конечно, решу.
> 
> первоначально мы попали в неочевидную ловушку
> 1) читаем про IP_BIND_ADDRESS_NO_PORT
> 2) читаем, что начиная с centos-7.4 должно работать
> 3) ставим официальный пакет
> 4) не работает (но чтобы это понять, пришлось залезть в отладочный лог и
> попрыгать с strace)
> 
> в официальном пакете поправите ?

Нам усиленно кажется, что исправлять это надо в RHEL/CentOS.  Повесьте
им багу о несоответствии интерфейсов ядра и glibc, это наилучший выход
из этой ситуации.

-- 
Konstantin Pavlov
https://www.nginx.com/


Подробная информация о списке рассылки nginx-ru