Bug 42700 - Alterator-kiosk не открывает projectlibre при выбранном профиле
Summary: Alterator-kiosk не открывает projectlibre при выбранном профиле
Status: REOPENED
Alias: None
Product: Sisyphus
Classification: Development
Component: java-11-openjdk (show other bugs)
Version: unstable
Hardware: x86_64 Linux
: P5 normal
Assignee: viy
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2022-05-06 12:11 MSK by Анастасия Кирюхина
Modified: 2022-05-12 10:36 MSK (History)
7 users (show)

See Also:


Attachments
kiosk ld debug (2.50 KB, text/plain)
2022-05-12 10:34 MSK, Олег Соловьев
no flags Details
nokiosk ld debug (3.42 KB, text/plain)
2022-05-12 10:36 MSK, Олег Соловьев
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Анастасия Кирюхина 2022-05-06 12:11:14 MSK
Тестовые стенды  p10 education x86-64,
p10 kworkstation x86-64 beta
Обновленные до Sisyphus

rpm -qa | grep kiosk
alterator-kiosk-1.10-alt1
kiosk-0.4-alt1.x86_64
kiosk-profiles-1.10-alt1

Шаги воспроизведения:

1. Установить пакеты: # apt-get install alterator-kiosk kiosk-profiles projectlibre
2. Открыть ЦУС ($ acc)
3. Открыть "Настройки kiosk"
4. В верхнем чекбоксе поставить галочку "включить"
5. Выбрать профиль projectlibre
6. Открыть "Управление проектами" (projectlibre) через меню приложений.

Ожидаемый результат: Приложение запущено успешно.

Фактический результат: Приложение не запускается.
Comment 1 Олег Соловьев 2022-05-06 13:47:19 MSK
[test@host-240 trace]$ java
java: error while loading shared libraries: libjli.so: cannot open shared object file: No such file or directory
[test@host-240 trace]$ ldd `which java`
        linux-vdso.so.1 (0x00007ffdc4b29000)
        libjli.so => not found
        libc.so.6 => /lib64/libc.so.6 (0x00007f2215309000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f2215532000)
[test@host-240 trace]$ rpm -qf `which java`
java-11-openjdk-headless-11.0.14.1.1-alt2_1jpp11.x86_64

Либа неизвестно где, ldd её не находит, а kiosk игнорирует LD_PRELOAD и LD_LIBRARY_PATH, поэтому java не работает.

Перевешиваю.
Comment 2 Sergey V Turchin 2022-05-06 15:24:44 MSK
Видимо, работоспособность java+kiosk будет возможна только когда она будет установлена в системное место и при такой установке более одной версии одновременно в системе быть не сможет.
Comment 3 viy 2022-05-06 16:04:15 MSK
(Ответ для Sergey V Turchin на комментарий #2)
> Видимо, работоспособность java+kiosk будет возможна только когда она будет
> установлена в системное место и при такой установке более одной версии
> одновременно в системе быть не сможет.

Если java устеновлена не в системное место, нужно экспортировать переменную
JAVA_JOME=/path/to/new/place
Comment 4 Sergey V Turchin 2022-05-06 16:30:45 MSK
(Ответ для viy на комментарий #3)
> Если java устеновлена не в системное место
Она и установлена НЕ в системное место в наших пакетах, поэтому возможна одновременная установка нескольких наборов библиотек и использование через
LD_LIBRARY_PATH=/не/системное/место/java-NN.

Только LD_* переменные не совместимы с kiosk.
Comment 5 viy 2022-05-06 16:38:56 MSK
(Ответ для Sergey V Turchin на комментарий #4)
> (Ответ для viy на комментарий #3)
> > Если java устеновлена не в системное место
> Она и установлена НЕ в системное место в наших пакетах, поэтому возможна
> одновременная установка нескольких наборов библиотек и использование через
> LD_LIBRARY_PATH=/не/системное/место/java-NN.
> 
> Только LD_* переменные не совместимы с kiosk.

По хорошему java для нормальной работы нужна установленная переменная JAVA_HOME.
LD_LIBRARY_PATH недостаточно.
так что переменную JAVA_HOME устанавливать надо. 

Кстати. Вы случайно не наследуете откуда-нибудь неправильное значение JAVA_HOME?
или оно у вас пусто? В любом случае, надо настраивать профиль киоска,
чтобы JAVA_HOME было установлено в правильное значение.
Comment 6 Sergey V Turchin 2022-05-06 16:51:07 MSK
Никто ничего не трогал.
kiosk запрещает использовать переменные LD_*
https://www.altlinux.org/kiosk
Java не работает с kiosk.
Comment 7 Олег Соловьев 2022-05-06 17:12:10 MSK
(In reply to viy from comment #5)
> В любом случае, надо настраивать профиль киоска,
> чтобы JAVA_HOME было установлено в правильное значение.

Киоск не занимается перемещением java из того каталога, куда его положил ментейнер.
Киоск занимается тем, что запрещает пользователю запускать что попало, в том числе не даёт подсунуть через LD_PRELOAD или LD_LIBRARY_PATH принесённые с собой библиотеки.
Поэтому при запуске java ругается на отсутствующую библиотеку, потому что LD_* принудительно сбрасываются (и это сделано специально). А значит, нужно сделать так, чтобы java находила эту библиотеку.

Если от JAVA_HOME зависит LD_LIBRARY_PATH, то установка правильного JAVA_HOME не будет являться достаточным условием для запуска java.
Comment 8 viy 2022-05-06 19:21:27 MSK
(Ответ для Олег Соловьев на комментарий #7)
> Если от JAVA_HOME зависит LD_LIBRARY_PATH, то установка правильного
> JAVA_HOME не будет являться достаточным условием для запуска java.

Насколько я понимаю, для запуска java достаточно JAVA_HOME.
В обычной системе JAVA_HOME выставляется через /etc/profile.d
env | grep JAVA_HOME
JAVA_HOME=/usr/lib/jvm/java
поэтому в обычной системе java работает.

Запустите в киоске терминал, а в нем env | grep JAVA_HOME
если есть JAVA_HOME=/usr/lib/jvm/java, а java не работает, то это проблема для jvm team.
Если нет JAVA_HOME=/usr/lib/jvm/java и а java не работает, то это проблема настройки kiosk.
Comment 9 viy 2022-05-06 19:22:57 MSK
И еще тупой
Comment 10 viy 2022-05-06 19:24:17 MSK
(Ответ для viy на комментарий #9)
> И еще тупой
И еще тупой вопрос: раньше оно работало? С более старыми версиями java?
Comment 11 Олег Соловьев 2022-05-11 09:31:05 MSK
(In reply to viy from comment #8)
> если есть JAVA_HOME=/usr/lib/jvm/java, а java не работает, то это проблема
> для jvm team.
> Если нет JAVA_HOME=/usr/lib/jvm/java и а java не работает, то это проблема
> настройки kiosk.

kiosk не влияет на JAVA_HOME.
если java требует для своей работы LD_PRELOAD, то это проблема для jvm team, т.к. kiosk блокирует такой механизм и это не настраивается.
1) После установки projectlibre JAVA_HOME появился только после перезахода в систему. Отсутствие этой переменной окружения не мешает java запускаться.
2) После перезагрузки и включения киоска JAVA_HOME никуда не делся:
>$ env | grep JAVA
>JAVA_HOME=/usr/lib/jvm/jre
но java запускаться отказывается:
>$ projectlibre 
>Starting projectlibre version 1.9.1 ...
>with options :
>java: error while loading shared libraries: libjli.so: cannot open shared >object file: No such file or directory
Comment 12 Олег Соловьев 2022-05-11 09:47:40 MSK
(In reply to viy from comment #10)
> И еще тупой вопрос: раньше оно работало? С более старыми версиями java?

java 1.8.0 тоже не запускается из-под kiosk
Comment 13 Олег Соловьев 2022-05-11 11:56:44 MSK
$ chrpath -l `which java`
/usr/bin/java: RPATH=$ORIGIN/../lib/jli:$ORIGIN/../lib
Comment 14 Олег Соловьев 2022-05-11 12:12:20 MSK
подсказали, что RPATH в secure-execution mode игнорируется:
https://man7.org/linux/man-pages/man8/ld.so.8.html
Comment 15 viy 2022-05-11 19:54:36 MSK
(Ответ для Олег Соловьев на комментарий #14)
> подсказали, что RPATH в secure-execution mode игнорируется:
> https://man7.org/linux/man-pages/man8/ld.so.8.html

Как вариант, предлагаю вам собрать пакеты 
java-11-openjdk-headless-kiosk
java-11-openjdk-kiosk
*опционально* java-1.8.0-openjdk-headless-kiosk
*опционально* java-1.8.0-openjdk-kiosk
(тогда ставим конфликты! java-1.8.0-openjdk-headless-kiosk Conflicts java-11-openjdk-headless-kiosk ...)

где пакуем в %_libdir 
симлинки на /usr/lib/jvm/jre-11-openjdk/lib/{,server}/*.so

Подчеркну, на альтернативу /usr/lib/jvm/jre-11-openjdk !!!

Если там вдруг вылезут симлинки на реальный каталог вида
/usr/lib/jvm/java-11-openjdk-11.0.14.1.1-0.x86_64/
то такое очень плохо, нужно было бы каждый раз пересобирать java-1.8.0-openjdk-kiosk с новым релизом jvm.

Должно помочь.
Comment 16 Олег Соловьев 2022-05-12 10:34:59 MSK
Created attachment 10726 [details]
kiosk ld debug

А вот и подтверждение, что RPATH игнорируется
Comment 17 Олег Соловьев 2022-05-12 10:36:03 MSK
Created attachment 10727 [details]
nokiosk ld debug

Для сравнения обычный запуск java с LD_DEBUG=all

Для получения первого лога пришлось патчить glibc, т.к. LD_DEBUG тоже вычищается в secure execution mode.