Bug 33191

Summary: Правильно добавить версию в пути поиска /usr/lib/ruby/site_ruby/2.3.0/x86_64-linux
Product: Sisyphus Reporter: Gleb Kulikov <glebus>
Component: rubyAssignee: majioa <majioa>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: blocker    
Priority: P3 CC: boyarsh, cas, imz, ldv, led, majioa, mike, nbr, pav, rider, stalker, vitty, viy, vseleznv
Version: unstable   
Hardware: all   
OS: Linux   
Attachments:
Description Flags
отдельный бинарник, заменяющий ldap-parse_reply для проверки повторяемости "зависаний" скриптов ldap-... none

Description Gleb Kulikov 2017-03-02 10:09:30 MSK
при попытке добавить пользователя через ldap-useradd, получаем ошибку
ldap_add: Invalid syntax (21)
        additional info: gidNumber: value #0 invalid per syntax

при просмотре генерируемого ldif оказывается, что поле gidNumber: 
пустое.

дальнейшее разбирательство приводит к скрипту ldap-getent group, не возвращающему список групп.

строка 51 в функции ldap_serach_groups()

ldap_parse_reply group "$@"

выдаёт ошибку 

/usr/lib/ruby/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- ldap (LoadError)
        from /usr/lib/ruby/rubygems/core_ext/kernel_require.rb:55:in `require'
        from -e:2:in `<main>'
Comment 1 Andrey Cherepanov 2017-03-02 12:04:10 MSK
Эти скрипты работают только с настроенным ALT-доменом (http://altlinux.org/Домен). Неясно, какой LDAP-сервер вы используете.
Comment 2 Gleb Kulikov 2017-03-02 13:27:47 MSK
(В ответ на комментарий №1)
> Эти скрипты работают только с настроенным ALT-доменом

да, конечно, домен давно настроен. С авторизацией и проч., проблем НЕТ.

В любом случае, см. относительно ldap-getent

> (http://altlinux.org/Домен). Неясно, какой LDAP-сервер вы используете.

openLDAP.

Работает: 
      ldap-user-tools-0.9.2-alt1
      ruby-ldap-0.9.11-alt2.3

НЕ РАБОТАЕТ:
      ldap-user-tools-0.9.3-alt1.noarch
      ruby-ldap-0.9.17-alt1.x86_64
      
alterator-cmdline /net-domain action read

domain:xxxx.tsu.ru
domain_type:altdomain
resolver:OK
access:OK
ldap:OK
kdc:OK
smb:OK (XXXX)

dhcpd:Error: domain name xxxx.tsu.ru is not provided to clients
[нормально, работает dnsmasq и через него-же отдаются srv-host=_ldap._tcp... kerberos и т.д.
]
master:#t
ad_dns:127.0.0.1
ad_service:НЕ ГОТОВА (служба остановлена)
ad_domain:--
ad_realm:--
ad_dc_name:--
ad_ldap_server:--
ad_kdc_server:--
altdomain_is_available:#t
ad_is_available:#f
Comment 3 Gleb Kulikov 2017-03-02 13:29:54 MSK
(В ответ на комментарий №1)

> (http://altlinux.org/Домен). Неясно, какой LDAP-сервер вы используете.

openldap-servers-2.4.42-alt4.x86_64
Comment 4 Anton V. Boyarshinov 2017-03-02 13:44:09 MSK
> Работает: 
>       ldap-user-tools-0.9.2-alt1
> 
> НЕ РАБОТАЕТ:
>       ldap-user-tools-0.9.3-alt1.noarch
Изменения в ldap-user-tools определённо не могут привести к такому эффекту.
Comment 5 Gleb Kulikov 2017-03-02 14:27:34 MSK
(В ответ на комментарий №4)
> > Работает: 
> >       ldap-user-tools-0.9.2-alt1
> > 
> > НЕ РАБОТАЕТ:
> >       ldap-user-tools-0.9.3-alt1.noarch

> Изменения в ldap-user-tools определённо не могут привести к такому эффекту.

воспроизводится на двух системах.
корень зла --- в ldap_parse_reply group "$@"

я в руби ни бум бум, далее проследить не получается
Comment 6 Andrey Cherepanov 2017-03-02 14:36:50 MSK
На ruby-ldap.
Comment 7 Andrey Cherepanov 2017-03-02 14:39:43 MSK
# ll /usr/lib/ruby/site_ruby/x86_64-linux/curses.so 
-rw-r--r-- 1 root root 47904 окт 25 14:44 /usr/lib/ruby/site_ruby/x86_64-linux/curses.so
# ruby
require "curses"
/usr/lib/ruby/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- curses.so (LoadError)
        from /usr/lib/ruby/rubygems/core_ext/kernel_require.rb:55:in `require'
        from /usr/lib/ruby/site_ruby/curses.rb:1:in `<top (required)>'
        from /usr/lib/ruby/rubygems/core_ext/kernel_require.rb:55:in `require'
        from /usr/lib/ruby/rubygems/core_ext/kernel_require.rb:55:in `require'
        from -:1:in `<main>'
Comment 8 Andrey Cherepanov 2017-03-02 15:30:42 MSK
Тест: ruby -e 'puts $:' | xargs ls >/dev/null
Не должно возвращать ничего.

На p8:
# ruby -e 'puts $:' | xargs ls >/dev/null
#

На Sisyphus
#  ruby -e 'puts $:' | xargs ls >/dev/null
ls: невозможно получить доступ к /usr/lib/ruby/site_ruby/2.3.0: Нет такого файла или каталога
ls: невозможно получить доступ к /usr/lib/ruby/site_ruby/2.3.0/x86_64-linux: Нет такого файла или каталога
ls: невозможно получить доступ к /usr/lib/ruby/vendor_ruby/2.3.0: Нет такого файла или каталога
ls: невозможно получить доступ к /usr/lib/ruby/vendor_ruby/2.3.0/x86_64-linux: Нет такого файла или каталога
#
Comment 9 Gleb Kulikov 2017-03-09 09:35:46 MSK
Created attachment 6996 [details]
отдельный бинарник, заменяющий ldap-parse_reply для проверки повторяемости "зависаний" скриптов ldap-...

> ls: невозможно получить доступ к /usr/lib/ruby/vendor_ruby/2.3.0: Нет такого

Действительно, после создания /usr/lib/ruby/site_ruby/2.3.0 и размещении в нём симлинков на * ruby'ивские *.so из /usr/lib/ruby/site_ruby/, работа восстанавливается. Но вот что странно, при массовых операциях (манипуляции пользователями из отдельного скрипта), замечены "зависания" на ruby . Понять
причину подвисаний не получается. Для проверки, сделал простую программу на замену ruby-скрипта "ldap_parse_reply". Для чистоты эксперимента, "голый" бинарник, без питона и прочих излишеств. Действительно, "зависания" при вызове ldap-getent прекратились, но понятно, что проблему это не решает.

PS: есть надежда на решение неприятностей с руби?
Comment 10 Michael Shigorin 2017-03-09 11:46:57 MSK
...ну и разумеется, в копию не попал собственно nbr@ -- надо ACL поправить.
Comment 11 nbr 2017-03-09 15:19:52 MSK
Забираю. Делаю правильный ruby.
Comment 12 nbr 2017-03-10 08:09:30 MSK
Прошу тестировать задание #179259.
Возможно с ним надо будет перекомпилировать некоторые ruby модули, имеющие .so части, так что их можно добавлять в это задание - оно расшарено.
Comment 13 Andrey Cherepanov 2017-03-11 16:19:24 MSK
(В ответ на комментарий №12)
> Прошу тестировать задание #179259.
> Возможно с ним надо будет перекомпилировать некоторые ruby модули, имеющие .so
> части, так что их можно добавлять в это задание - оно расшарено.
Не некоторые, а все компилируемые. Сделал таск #179408 и добавил туда все нужные модули. Возникла проблема с ruby-ffi-yajl, но это решим.
Comment 14 Andrey Cherepanov 2017-03-11 19:45:34 MSK
(В ответ на комментарий №13)
> Не некоторые, а все компилируемые. Сделал таск #179408 и добавил туда все
> нужные модули. Возникла проблема с ruby-ffi-yajl, но это решим.
rpm-build-ruby тоже надо поправить. Модули ищут ruby(ffi_c), а собранный пакет провайдит ruby(2.3.1/x86_64-linux/ffi_c), ruby(2.3.1/x86_64-linux/ffi_c.so)
Если второй к месту, то первый содержит избыточные пути.

Иван, что скажешь?
Comment 15 Andrey Cherepanov 2017-03-11 19:55:19 MSK
(В ответ на комментарий №14)
> (В ответ на комментарий №13)
> > Не некоторые, а все компилируемые. Сделал таск #179408 и добавил туда все
> > нужные модули. Возникла проблема с ruby-ffi-yajl, но это решим.
> rpm-build-ruby тоже надо поправить. Модули ищут ruby(ffi_c), а собранный пакет
> провайдит ruby(2.3.1/x86_64-linux/ffi_c), ruby(2.3.1/x86_64-linux/ffi_c.so)
> Если второй к месту, то первый содержит избыточные пути.
> 
> Иван, что скажешь?
Я подозреваю, что в ruby.prov вставить

           s,^(site|vendor)_ruby/,,
>>>>>>>>>>>s,^2\.3\.1/,,
           s,^$RPM_RUBY_ARCH/,,

То всё сработает. Но некрасиво версию вставлять явно. Попробую через [0-9.]\+
Comment 16 stalker 2017-03-11 20:07:25 MSK
А нужно ли отрывать версию abi из путей устанвоки модулей?

Они же ставятся в директорию ==  версии ABI.

Вот например путь в debian

/usr/lib/x86_64-linux-gnu/ruby/vendor_ruby/2.1.0/mysql/mysql_api.so

Или  мы опять делаем свой велосипед ни с кем не совместимый для любителей в случае чего ломать голову?
Comment 17 Andrey Cherepanov 2017-03-11 20:28:46 MSK
(В ответ на комментарий №16)
> А нужно ли отрывать версию abi из путей устанвоки модулей?
> 
> Они же ставятся в директорию ==  версии ABI.
> 
> Вот например путь в debian
> 
> /usr/lib/x86_64-linux-gnu/ruby/vendor_ruby/2.1.0/mysql/mysql_api.so
> 
> Или  мы опять делаем свой велосипед ни с кем не совместимый для любителей в
> случае чего ломать голову?
Как раз в новой сборке Ruby .so-шки ставятся не в site_ruby/x86_64-linux/, а в 
site_ruby/2.3.1/x86_64-linux/ Сами архитектурно-независимые .rb - в site-ruby без версии.
Comment 18 Andrey Cherepanov 2017-03-11 20:30:48 MSK
(В ответ на комментарий №16)
> Вот например путь в debian
> Или  мы опять делаем свой велосипед
Как раз Debian и есть самый большой велосипед из костылей и подпорок, раз существует в единственном экземпляре. Один приведённый путь чего стоит!
Comment 19 stalker 2017-03-11 21:55:04 MSK
А.. rvm на девел хосте в юзерской установке

./rubies/ruby-2.2.2/lib/ruby/2.2.0/x86_64-linux/socket.so
./rubies/ruby-2.2.2/lib/ruby/2.2.0/x86_64-linux/openssl.so
./rubies/ruby-2.2.2/lib/ruby/2.2.0/x86_64-linux/stringio.so

Я видимо не правильно понял описание бага.Исходя из темы складывается ощущение что отрывается вовсе версия..то есть вместо 

-/usr/lib/ruby/site_ruby/2.3.0/x86_64-linux
+/usr/lib/ruby/site_ruby/x86_64-linux
Comment 20 Andrey Cherepanov 2017-03-12 08:18:00 MSK
(В ответ на комментарий №19)
> Я видимо не правильно понял описание бага.Исходя из темы складывается ощущение
> что отрывается вовсе версия..то есть вместо 
Как раз раньше было без версии. Сейчас она появилась.
Comment 21 Andrey Cherepanov 2017-03-12 08:20:32 MSK
Денис, последняя проблема, оставшаяся в Ruby:

старый вариант:
$ ruby -e 'print RbConfig::CONFIG["sitearchdir"]'
/usr/lib/ruby/site_ruby/x86_64-linux

новый вариант:
$ ruby -e 'print RbConfig::CONFIG["sitearchdir"]'  
/usr/lib/ruby/2.3.1/x86_64-linux

должно быть: /usr/lib/ruby/site_ruby/2.3.1/x86_64-linux

Из-за этого 7 пакетов не собираются.
Comment 22 Andrey Cherepanov 2017-03-12 08:24:15 MSK
В спеке Ruby:
+       --with-sitearchdir=%libdir/%version/%ruby_arch \

Но пакеты туда не ставят.
Comment 23 nbr 2017-03-12 10:30:27 MSK
(In reply to comment #22)
> В спеке Ruby:
> +       --with-sitearchdir=%libdir/%version/%ruby_arch \
> 
> Но пакеты туда не ставят.
Да. Сейчас пересоберу с 
--with-sitearchdir=%libdir/site_ruby/%version/%ruby_arch
Comment 24 nbr 2017-03-12 10:32:31 MSK
(In reply to comment #23)
> (In reply to comment #22)
> > В спеке Ruby:
> > +       --with-sitearchdir=%libdir/%version/%ruby_arch \
> > 
> > Но пакеты туда не ставят.
> Да. Сейчас пересоберу с 
> --with-sitearchdir=%libdir/site_ruby/%version/%ruby_arch
прошу обновить из задания
сейчас
--with-sitearchdir=%libdir/site_ruby/%version/%ruby_arch \
--with-vendorarchdir=%libdir/vendor_ruby/%version/%ruby_arch \
Comment 25 Andrey Cherepanov 2017-03-12 15:43:08 MSK
(В ответ на комментарий №24)
> (In reply to comment #23)
> > (In reply to comment #22)
> > > В спеке Ruby:
> > > +       --with-sitearchdir=%libdir/%version/%ruby_arch \
> > > 
> > > Но пакеты туда не ставят.
> > Да. Сейчас пересоберу с 
> > --with-sitearchdir=%libdir/site_ruby/%version/%ruby_arch
> прошу обновить из задания
> сейчас
> --with-sitearchdir=%libdir/site_ruby/%version/%ruby_arch \
> --with-vendorarchdir=%libdir/vendor_ruby/%version/%ruby_arch \
Пересобираю. Всё равно пофиксил штук 6 пакетов, которые не учитывали ruby_sitearchdir. Сейчас остаются 7 пакетов с анметами по зависимостям. После их починки задание может собраться.
Comment 26 Andrey Cherepanov 2017-03-14 15:58:18 MSK
Исправлено в ruby-2.3.1-alt2