Bug 50885

Summary: pcs host auth - cannot load such file -- childprocess (LoadError)
Product: Branch p10 Reporter: Oleg Kolesnichenko <kolesnichenko>
Component: pcsAssignee: qa-team <qa-team>
Status: CLOSED WORKSFORME QA Contact: qa-p10 <qa-p10>
Severity: normal    
Priority: P5 CC: amakeenk, kolesnichenko
Version: не указана   
Hardware: x86_64   
OS: Linux   

Description Oleg Kolesnichenko 2024-07-12 11:37:14 MSK
Альт Сервер 10.1 (обновлённый до 10.2)
$ cat /etc/os-release 
NAME="ALT Server"
VERSION="10.2"
ID=altlinux
VERSION_ID=10.2
PRETTY_NAME="ALT Server 10.2 (Mendelevium)"
ANSI_COLOR="1;33"
CPE_NAME="cpe:/o:alt:server:10.2"
BUILD_ID="ALT Server 10.1"
HOME_URL="https://basealt.ru/"
BUG_REPORT_URL="https://bugs.altlinux.org/"

Настройка corosync/pacemaker по инструкции
https://docs.altlinux.org/ru-RU/alt-server/10.2/html/alt-server/ch54s02.html

На этапе аутентификации:
# pcs --debug host auth node01 node02 node03 -u hacluster

Выходит ошибка:
--Debug Stderr Start--
<internal:/usr/lib/ruby/rubygems/core_ext/kernel_require.rb>:85:in `require': cannot load such file -- childprocess (LoadError)
	from <internal:/usr/lib/ruby/rubygems/core_ext/kernel_require.rb>:85:in `require'
	from /usr/lib64/pcsd/pcs.rb:4:in `<top (required)>'
	from <internal:/usr/lib/ruby/rubygems/core_ext/kernel_require.rb>:85:in `require'
	from <internal:/usr/lib/ruby/rubygems/core_ext/kernel_require.rb>:85:in `require'
	from /usr/lib64/pcsd/pcsd-cli-main.rb:7:in `<top (required)>'
	from <internal:/usr/lib/ruby/rubygems/core_ext/kernel_require.rb>:85:in `require'
	from <internal:/usr/lib/ruby/rubygems/core_ext/kernel_require.rb>:85:in `require'
	from /usr/lib64/pcsd/pcsd-cli.rb:3:in `<main>'
--Debug Stderr End--

Решается установкой модуля:
# gem install childprocess
Comment 1 Alexander Makeenkov 2024-07-15 13:21:11 MSK
Не удалось воспроизвести.
Пакет gem-childprocess был установлен автоматически по зависимостям к пакету pcs.
Comment 2 Oleg Kolesnichenko 2024-08-07 13:34:05 MSK
Проверил на чистой системе:

После установки пакетов childprocess ставится по зависимостям, всё верно.
# apt-get install corosync resource-agents pacemaker pcs

И после установки можно проверить, он видится как модуль:

[root@pcstest ~]# rpm -q gem-childprocess
gem-childprocess-3.0.0-alt1.noarch

[root@pcstest ~]# gem list | grep child
childprocess (3.0.0)

Но модуль ставиться в директорию /usr/lib/ruby/gems/2.5.0/gems
https://packages.altlinux.org/ru/p10/binary/gem-childprocess/noarch/files/2508009460120180155

А в переменной GEM_PATH этой директории нет (есть только /usr/lib/ruby/gems/2.7.0/), в следствии чего, после перезагрузки или перелогина, модуль недоступен.

[root@pcstest ~]# cat /etc/bashrc.d/ruby.sh
export PATH=$PATH:/var/cache/ruby/gemie/bin:/usr/lib/ruby/bin
export GEM_VENDOR=/var/cache/ruby/gemie
export GEM_HOME=/var/cache/ruby/gemie
export GEM_PATH=/var/cache/ruby/gemie:/usr/lib/ruby/gemie:/usr/lib64/ruby/gemie:/usr/lib/ruby/gems/2.7.0/

И соответственно дальнейшая команда не работает:
[root@pcstest ~]# pcs host auth pcstest -u hacluster
Password:
Error: Unable to communicate with pcsd
[root@pcstest ~]#

Модуля нет в списке:

[root@pcstest ~]# gem list | grep child
[root@pcstest ~]#

Если прописать путь /usr/lib/ruby/gems/2.5.0/ в переменную GEM_PATH, то модуль снова виден.

[root@pcstest ~]# grep GEM_PATH /etc/bashrc.d/ruby.sh 
export GEM_PATH=/var/cache/ruby/gemie:/usr/lib/ruby/gemie:/usr/lib64/ruby/gemie:/usr/lib/ruby/gems/2.7.0/:/usr/lib/ruby/gems/2.5.0/

[root@pcstest ~]# gem list | grep child
childprocess (3.0.0)
[root@pcstest ~]#

[root@pcstest ~]# pcs host auth pcstest -u hacluster
Password: 
pcstest: Authorized
[root@pcstest ~]#