Тестовые стенды 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) через меню приложений. Ожидаемый результат: Приложение запущено успешно. Фактический результат: Приложение не запускается.
[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 не работает. Перевешиваю.
Видимо, работоспособность java+kiosk будет возможна только когда она будет установлена в системное место и при такой установке более одной версии одновременно в системе быть не сможет.
(Ответ для Sergey V Turchin на комментарий #2) > Видимо, работоспособность java+kiosk будет возможна только когда она будет > установлена в системное место и при такой установке более одной версии > одновременно в системе быть не сможет. Если java устеновлена не в системное место, нужно экспортировать переменную JAVA_JOME=/path/to/new/place
(Ответ для viy на комментарий #3) > Если java устеновлена не в системное место Она и установлена НЕ в системное место в наших пакетах, поэтому возможна одновременная установка нескольких наборов библиотек и использование через LD_LIBRARY_PATH=/не/системное/место/java-NN. Только LD_* переменные не совместимы с kiosk.
(Ответ для 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 было установлено в правильное значение.
Никто ничего не трогал. kiosk запрещает использовать переменные LD_* https://www.altlinux.org/kiosk Java не работает с kiosk.
(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.
(Ответ для Олег Соловьев на комментарий #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.
И еще тупой
(Ответ для viy на комментарий #9) > И еще тупой И еще тупой вопрос: раньше оно работало? С более старыми версиями java?
(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
(In reply to viy from comment #10) > И еще тупой вопрос: раньше оно работало? С более старыми версиями java? java 1.8.0 тоже не запускается из-под kiosk
$ chrpath -l `which java` /usr/bin/java: RPATH=$ORIGIN/../lib/jli:$ORIGIN/../lib
подсказали, что RPATH в secure-execution mode игнорируется: https://man7.org/linux/man-pages/man8/ld.so.8.html
(Ответ для Олег Соловьев на комментарий #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. Должно помочь.
Created attachment 10726 [details] kiosk ld debug А вот и подтверждение, что RPATH игнорируется
Created attachment 10727 [details] nokiosk ld debug Для сравнения обычный запуск java с LD_DEBUG=all Для получения первого лога пришлось патчить glibc, т.к. LD_DEBUG тоже вычищается в secure execution mode.