Автор Тема: RunaWFE установка и настройка на сервер P9 в продакшен  (Прочитано 10059 раз)

Оффлайн tema

  • alt linux team
  • ***
  • Сообщений: 2 073
Важно!
Всё нижесказанное исключительно с целью помочь развитию. Система прекрасна. И Андрей Михеев постоянно на связи и готов помогать всем, чем может. Даже приезжал к нам в школу, показать как настраивать и как пользоваться.
Просто конкретно эти вопросы возникли сейчас и я их отправил в Руну, но, пока жду ответа, решил разобраться сам и, по мере сил, помочь дополнению/исправлению инструкции на сайте Руны.


Пока в документации Руны нет таких вещей создам такую тему, куда буду выкладывать грабли. Надеюсь, что это добавят/поправят.
Установка. В репах альта версия тухлая, поэтому качал бинарники по инструкции с сайта.
Распаковал, скопировал в /opt/runawfe/
Конечно, по команде:
./standalone.sh &он не заработал как надо.
Открываем файл /opt/runawfe/standalone/configuration/standalone.xml и меняем все 127.0.0.1 на адрес своего сервера. Ищем
jboss.http.port:8080и меняем на
jboss.http.port:28080
« Последнее редактирование: 12.10.2019 01:46:24 от tema »

Оффлайн tema

  • alt linux team
  • ***
  • Сообщений: 2 073
Теперь настройка PostgreSQL. Как минимум, необходимо расшифровать инструкцию с сайта и исправить ошибку.

1) Фраза
Цитировать
Создайте модуль com.postgresql
означает, что нужно создать директорию postgresql и в ней поддиректорию main в директории /opt/runawfe/modules/system/layers/base/com

2) В новой директории main создаём файл module.xml. В него записываем код из инструкции, но вот на этой строчке:
<resource-root path="postgresql-42.2.4.jar"/>надо немного ещё действий.
Нужно сходить сюда:
/opt/runawfe/standalone/wfe.data-sources/drivers/ и посмотреть какой там файл postgresql-xxx.jar
У меня оказался postgresql-42.2.5.jar. Его надо тоже скопировать в директорию main, где лежит module.xml и исправить указанную выше строчку:
<resource-root path="postgresql-42.2.5.jar"/>
3) Фраза
Цитировать
Добавьте секцию источника данных и драйвера в standalone.xml
означает, что надо открыть файл /opt/runawfe/standalone/configuration/standalone.xml, найти там секцию <datasources> и вставить код из инструкции в эту секцию. Надо ли при этом удалять информацию про h2 в инструкции не сказано и непонятно пока. Я не удалял на всякий случай.
Обратите внимание
В коде из инструкции ошибка в этой строке:
<driver name="postgresql" module="org.postgresql">должно быть com.postgresql

4) С фразой
Цитировать
В database.properties установите
я не разобрался. Это файл? Секция настройки? Чего? Руны? Явы? Хз, короче.
Просто создал файл /opt/runawfe/standalone/configuration/database.properties и туда записал параметры из инструкции.
Завелась, но не знаю как посмотреть использует ли она PostgreSQL.
« Последнее редактирование: 11.10.2019 20:01:12 от tema »

Оффлайн tema

  • alt linux team
  • ***
  • Сообщений: 2 073
не знаю как посмотреть использует ли она PostgreSQL.
По всей видимости, таки не использует:
postgres=# \c runawfe
Вы подключены к базе данных "runawfe" как пользователь "postgres".
runawfe=# \dt
Отношения не найдены.
Таблиц не создано. Полагаю, система продолжает использовать h2
« Последнее редактирование: 12.10.2019 01:48:17 от tema »

Оффлайн tema

  • alt linux team
  • ***
  • Сообщений: 2 073
Сбор информации из вики Руны по крупицам дал такой результат.
В документации есть старая статья:
Пример настройки сервера RunaWFE для работы с двумя экземплярами СУБД PostgreSQL в ОС AltLinux p7
Из неё я подчерпнул информацию о том, что такое database.properties и как его использовать.
Создал в директории /opt/runawfe/standalone/wfe.custom/ файл с названием wfe.custom.database.properties, куда и поместил код из инструкции про database.properties.
На самом деле, меня смутило именно database... Дело в том, что файлы с расширением .properties разбросаны по всем каталогам системы, например:
$ ls /opt/runawfe/standalone/configuration/
application-roles.properties  logging.properties      mgmt-users.properties   standalone-full.xml  standalone-old.xml  standalone_xml_history
application-users.properties  mgmt-groups.properties  standalone-full-ha.xml  standalone-ha.xml    standalone.xml
Поэтому я и подумал, что это должно быть что-то подобное. Тем более, что на гитхабе файл так и называется:
https://github.com/processtech/runawfe-free-server/blob/master/wfe-core/src/main/resources/database.properties
В общем, если бы в инструкции дали просто ссылку вот на место с примером, было бы куда проще  :-)
Руна завелась и создала таблицы.
Меня смущает только наличие директории /opt/runawfe/standalone/wfe.data-sources. Может быть его надо было создавать там?

ЗЫ
Пока лазал по инструкции, вот сейчас нашёл ещё прекрасный раздел:
Источники данных
И был бы счастлив, если бы этот раздел у меня выглядел так же:

Но, увы... У меня там пусто... И файлов с источниками данных я, сколько ни копал, не смог обнаружить... Предполагаю, что у них какое-нибудь неочевидное название, а сами они вполне себе лежат на гитхабе.  :'-(
ЗЗЫ
Создал в DevStudio источник данных и загрузил. Теперь можно будет и в запросах использовать  :-)
« Последнее редактирование: 12.10.2019 02:06:14 от tema »

Оффлайн tema

  • alt linux team
  • ***
  • Сообщений: 2 073
Важно!
Всё вышесказанное исключительно с целью помочь развитию. Система прекрасна. И Андрей Михеев постоянно на связи и готов помогать всем, чем может. Даже приезжал к нам в школу, показать как настраивать и как пользоваться.
Просто конкретно эти вопросы возникли сейчас и я их отправил в Руну, но, пока жду ответа, решил разобраться сам и, по мере сил, помочь дополнению/исправлению инструкции на сайте Руны.

Оффлайн yaleks

  • Мастер
  • ***
  • Сообщений: 6 242
Даже приезжал к нам в школу, показать как настраивать и как пользоваться.
Вы хотите это применять для управления школой?

Оффлайн tema

  • alt linux team
  • ***
  • Сообщений: 2 073
Даже приезжал к нам в школу, показать как настраивать и как пользоваться.
Вы хотите это применять для управления школой?
Конечно!

Оффлайн ksa

  • Модератор глобальный
  • *****
  • Сообщений: 9 049
Имхо, тема больше по смыслу подходит под тестирование ПО под альт (к примеру, есть вот такая тема, правда там о разном ПО по списку), поэтому перенёс сюда.

Обоснование переноса:

Раздел "Настройка, использование и конфигурирование ПО", где была размещена тема, предлагает обсуждать нижеследующее:

"Вопросы настройки и использования конкретного ПО из репозиториев (подробнее), выбор программ." (см. https://forum.altlinux.org/index.php?topic=40251.0)

в то время как в этой теме речь идёт о:

"Установка. В репах альта версия тухлая, поэтому качал бинарники по инструкции с сайта." (см. https://forum.altlinux.org/index.php?topic=43112.msg342793#msg342793)


Оффлайн tema

  • alt linux team
  • ***
  • Сообщений: 2 073
Продолжаем улучшать инструкции  :-)
Итак, следующая задача совершенно логичная: уведомление пользователей по email о поступившей задаче. Таскнотифер, кстати, из бинарников не запускается. Там были какие-то пертуберации с этим нотифером, вроде запиливания ещё одной версии на си чисто под мастдай, так что, полагаю, ноги растут оттуда.
$ ./run.sh
./run.sh: строка 3: $'\r': команда не найдена
log4j:ERROR setFile(null,true) call failed.
java.io.FileNotFoundException: /rtn.log (Отказано в доступе)
        at java.io.FileOutputStream.open0(Native Method)
        at java.io.FileOutputStream.open(FileOutputStream.java:270)
        at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
        at java.io.FileOutputStream.<init>(FileOutputStream.java:133)
        at org.apache.log4j.FileAppender.setFile(FileAppender.java:289)
        at org.apache.log4j.RollingFileAppender.setFile(RollingFileAppender.java:165)
        at org.apache.log4j.FileAppender.activateOptions(FileAppender.java:163)
        at org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:256)
        at org.apache.log4j.xml.DOMConfigurator.parseAppender(DOMConfigurator.java:220)
        at org.apache.log4j.xml.DOMConfigurator.findAppenderByName(DOMConfigurator.java:150)
        at org.apache.log4j.xml.DOMConfigurator.findAppenderByReference(DOMConfigurator.java:163)
        at org.apache.log4j.xml.DOMConfigurator.parseChildrenOfLoggerElement(DOMConfigurator.java:425)
        at org.apache.log4j.xml.DOMConfigurator.parseRoot(DOMConfigurator.java:394)
        at org.apache.log4j.xml.DOMConfigurator.parse(DOMConfigurator.java:829)
        at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:712)
        at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:618)
        at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:468)
        at org.apache.log4j.LogManager.<clinit>(LogManager.java:122)
        at org.apache.log4j.Logger.getLogger(Logger.java:104)
        at org.apache.commons.logging.impl.Log4JLogger.getLogger(Log4JLogger.java:262)
        at org.apache.commons.logging.impl.Log4JLogger.<init>(Log4JLogger.java:108)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at org.apache.commons.logging.impl.LogFactoryImpl.createLogFromClass(LogFactoryImpl.java:1025)
        at org.apache.commons.logging.impl.LogFactoryImpl.discoverLogImplementation(LogFactoryImpl.java:844)
        at org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:541)
        at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:292)
        at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:269)
        at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:657)
        at ru.runa.notifier.PlatformLoader.<clinit>(PlatformLoader.java:38)
23:35:24,508 ERROR [PlatformLoader] Critical error
java.lang.UnsatisfiedLinkError: Could not load SWT library. Reasons:
        no swt-win32-4332 in java.library.path
        no swt-win32 in java.library.path
        Can't load library: /home/tema/.swt/lib/linux/x86_64/libswt-win32-4332.so
        Can't load library: /home/tema/.swt/lib/linux/x86_64/libswt-win32.so

        at org.eclipse.swt.internal.Library.loadLibrary(Unknown Source)
        at org.eclipse.swt.internal.Library.loadLibrary(Unknown Source)
        at org.eclipse.swt.internal.C.<clinit>(Unknown Source)
        at org.eclipse.swt.widgets.Display.<clinit>(Unknown Source)
        at ru.runa.notifier.PlatformLoader.<init>(PlatformLoader.java:44)
        at ru.runa.notifier.PlatformLoader.main(PlatformLoader.java:78)
Приступим к настройке уведомлений по электронной почте. Открываем соответствующий раздел инструкции и вперёд  :-)
С wfe.custom.system.context.xml уже всё понятно из предыдущих серий. Он лежит или создаётся вручную тут: /opt/runawfe/standalone/wfe.custom
Фильтры я не настраивал, поэтому мой упрощённый вариант соответствующего раздела выглядит так:
<bean class="ru.runa.wfe.task.EmailTaskNotifier">
  <property name="configLocation" value="email.config.xml" />
  <property name="onlyIfTaskActorEmailDefined" value="true" />
 </bean>
Про файл email.config.xml опять нет уточнения, где он должен располагаться, поэтому создал его в этой же директории /opt/runawfe/standalone/wfe.custom, что, в целом, логично, т.к. в предыдущем файле указано только название без пути.
$ cat email.config.xml
<?xml version="1.0" encoding="UTF-8"?>

<email-config>
  <common>
    <param name="throwErrorOnFailure" value="true"/>
  </common>
  <connection>
    <param name="mail.smtp.ssl.trust" value="smtp.gmail.com"/>
    <param name="mail.smtp.starttls.enable" value="true"/>
    <param name="mail.transport.protocol" value="smtp"/>
    <param name="mail.host" value="smtp.gmail.com"/>
    <param name="mail.smtp.port" value="587"/>
    <param name="mail.smtp.auth" value="true"/>
    <param name="mail.user" value="robot@вашсайт"/>
    <param name="mail.password" value="пароль к аккаунту"/>
  </connection>
  <headers>
    <param name="From" value="robot@вашсайт"/>
    <param name="Subject" value="Процесс: ${task.process.deployment.name} - Задача: ${task.name}"/>
    <param name="To" value="${task.executor.email}"/>
  </headers>
  <message>
    <param name="bodyInlined" value="false"/>
    <body>
    <![CDATA[
    <p>В процессе <b>${task.process.deployment.name}</b><br>поступила задача <b>${task.name}</b></p>
    <p><a href="http://сервер RunaWFE с портом/wfe/submitTaskDispatcher.do?id=${task.id}">Перейти к задаче</a><br>
    ]]>
</body>
  </message>
  <CommonProperties/>
  <NonBotProperties/>
  <BotProperties/>
  <attachments/>
</email-config>
На что тут стоит обратить внимание.
Вот эта строка инструкции:
Цитировать
Содержимое email.config.xml (формат конфигурации аналогичен обработчику)
вводит в заблуждение. Если перейти по ссылке, чтобы насладиться всеми возможностями, то раздел с описанием контекстных переменных не совпадает с таким же разделом на странице настройки рассылки. Вроде мелочь, а работать не будет.
Конкретно не совпадает это:
Определение процесса (${task.process.deployment}, ru.runa.wfe.definition.Deployment)

ID ${task.process.deployment.id}
Версия ${task.process.deployment.version}
Название ${task.process.deployment.name}
Описание ${task.process.deployment.description}
Категория ${task.process.deployment.category}
Загружено в систему ${task.process.deployment.createDate?datetime}
С вот этим:
Определение процесса (${process.deployment}, ru.runa.wfe.definition.Deployment)

ID ${process.deployment.id}
Версия ${process.deployment.version}
Название ${process.deployment.name}
Описание ${process.deployment.description}
Категория ${process.deployment.category}
Загружено в систему ${process.deployment.createDate?datetime}
И правильно будет так, как указано у меня в xml:
${task.process.deployment.name}Не забываем так же в body про
<![CDATA[ Я его случайно стёр, и парсер xml просто все html тэги из письма повырезал. Минут двадцать голову ломал, где я накосячил  :'-(
« Последнее редактирование: 15.10.2019 01:17:41 от tema »

Оффлайн tema

  • alt linux team
  • ***
  • Сообщений: 2 073
LDAP
Наша школа подключена к GSuite Education и все сотрудники имеют электронную почту по фамилии и на нашем домене.
У гугля есть инструкция, которая, хоть и понятная, но тоже всё не сразу пошло.
До 4 пункта части подключения, проблем нет вообще. Всё делается именно так, как описано.
Теперь мы тут:
4. Подключение LDAP-клиентов к сервису Secure LDAP
RunaWFE==Java, так что переходим сразу в соответствующий раздел
Конвертируем сертификат первой командой. На второй команде засада, ибо альт не знает команду keytool.
Поэтому
# find / -name keytool
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.212.b04-0.x86_64/jre/bin/keytool
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.212.b04-0.x86_64/bin/keytool
И команда выполняется так:
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.212.b04-0.x86_64/jre/bin/keytool -v -importkeystore -srckeystore java-application-ldap.pkcs12 -srcstoretype PKCS12 -destkeystore java-application-ldap.jks -deststoretype JKSЧтобы заработало тестирование соединения с помощью ldapsearch необходимо настроить OpenLDAP по инструкции, используя в качестве сертификатов полученные с гугла, иначе будет ругань на самоподписанность. Эту проверку и надо подавить, иначе ничего протестировать нормально не получится.

Открываем документацию по LDAP на сайте Руны и приступаем к конфигурированию.
Итоговый файл настройки дополнительных возможностей wfe.custom.system.context.xml, куда я и рассылку добавлял, у меня выглядит так:
$ cat wfe.custom.system.context.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
 xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jee="http://www.springframework.org/schema/jee"
 xmlns:context="http://www.springframework.org/schema/context"
 xmlns:task="http://www.springframework.org/schema/task"
 xsi:schemaLocation="
  http://www.springframework.org/schema/beans
  http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  http://www.springframework.org/schema/tx
  http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
  http://www.springframework.org/schema/aop
  http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
  http://www.springframework.org/schema/jee
  http://www.springframework.org/schema/jee/spring-jee-2.5.xsd
  http://www.springframework.org/schema/context
  http://www.springframework.org/schema/context/spring-context-2.5.xsd
  http://www.springframework.org/schema/task
  http://www.springframework.org/schema/task/spring-task-3.0.xsd">
 <bean class="ru.runa.wfe.task.EmailTaskNotifier">
  <property name="configLocation" value="email.config.xml" />
  <property name="onlyIfTaskActorEmailDefined" value="true" />
 </bean>
 <bean id="loginModuleConfiguration" class="ru.runa.wfe.security.auth.LoginModuleConfiguration">
    <property name="loginModuleClassNames">
      <list>
        <value>ru.runa.wfe.security.auth.LdapLoginModule</value>
        <value>ru.runa.wfe.security.auth.InternalDBPasswordLoginModule</value>
      </list>
    </property>
 </bean>
</beans>
Переходим к конфигурированию файла самого LDAP по разделу инструкции.
Вспоминая про прикол с database.properties файл я назвал wfe.custom.ldap.properties. Размещено всё в директории /opt/runawfe/standalone/wfe.custom
Набор атрибутов смотрим в инструкции гугла.
cat wfe.custom.ldap.properties
################################
# Common connection settings
################################
# allowed http://docs.oracle.com/javase/7/docs/technotes/guides/jndi/jndi-ldap.html
java.naming.factory.initial = com.sun.jndi.ldap.LdapCtxFactory
java.naming.provider.url = ldaps://ldap.google.com/
java.naming.security.authentication = none
java.naming.ldap.version = 3
################################
# Authentication module settings
################################
# How to map the user id entered by the user to that passed through to LDAP
# Supported placeholders are: ${username} (user login)
#  Examples
#   AD (default)          DOMAIN\\${username}
#   AD UPN                ${username}@domain
#   AD DN                 cn=${username},ou=xyz,dc=domain
#   OpenLDAP simple       uid=${username},ou=People,dc=domain,dc=com
#   OpenLDAP DIGEST-MD5   ${username}
authentication.username.format = ${username}@school830.ru
################################
# Synchronization module settings
################################
synchronization.enabled = true
synchronization.import.group.name = ldap users
synchronization.import.group.description = users imported from ldap server
synchronization.waste.group.name = ldap waste
synchronization.waste.group.description = users and groups deleted from ldap server
java.naming.referral = follow
# authorized subject to read directory
java.naming.security.principal = dc=school830,dc=ru
#java.naming.security.credentials = secret
# organization units you want to import separated by <;>
synchronization.organization.units = ou=Users,dc=school830,dc=ru
# partial synchronization can be enabled
synchronization.create.executors.enabled = true
synchronization.update.executors.enabled = true
synchronization.delete.executors.enabled = true
synchronization.user.status.enabled = true
# types
synchronization.object.class.filter = (objectclass={0})
synchronization.user.object.class = person
synchronization.group.object.class = groupOfNames
# whether to reset empty attributes
synchronization.empty.attribute.enabled = true
# synchronization attribute mappings
synchronization.account.name.attribute = uid
synchronization.user.fullName.attribute = displayName
#synchronization.user.description.attribute = employeeType
#synchronization.user.title.attribute = title
synchronization.user.email.attribute = mail
#synchronization.user.phone.attribute = telephoneNumber
#synchronization.user.department.attribute = departmentNumber
synchronization.group.description.attribute = displayName
synchronization.group.member.attribute = member
Что нужно сказать.
1) ************
Бесполезно добавлять сюда, как сказано в инструкции гугла строки:
javax.net.ssl.keyStore = /<path-to>/java-application-ldap.jks
javax.net.ssl.keyStorePassword = <выбранный выше пароль>
Они, похоже, просто игнорируются. Долго я до этого доходил  :'-(
Правильно будет добавить их в сам скрипт запуска.

2) ************
Всё будет по сертификату, поэтому надо всё что можно с аудентификацией поотключать:
java.naming.security.authentication = none
java.naming.security.principal = dc=school830,dc=ru
#java.naming.security.credentials = secret

3) ************
Возможно, я не понял, как надо правильно это настраивать  :'-(
synchronization.user.object.class = person
synchronization.group.object.class = groupOfNames
В наборе атрибутов сказано:
Цитировать
Пользователь

Пользователь в домене. Пользователи отображаются в подразделениях, к которым они отнесены.

    objectClass: top, person, organizationalPerson, inetOrgPerson, posixAccount.
Цитировать
​Группа

    objectClass: top, groupOfNames, posixGroup.
Логика вроде ясна, но мои пробы это настроить, чтобы синхронизировались группы никак не сработали. Подробнее ниже в пятом пункте.

4) ************
Строчки
#synchronization.user.description.attribute = employeeType
#synchronization.user.title.attribute = title
#synchronization.user.phone.attribute = telephoneNumber
#synchronization.user.department.attribute = departmentNumber
Закомментированы потому, что если на сервере LDAP такого поля у какого-то юзверя нет, то синхронизация обрывается с ошибкой. Это явно проблема RunaWFE для багзиллы. Очено неудобно  :'-(

5) ************
Строка
synchronization.organization.units = ou=Users,dc=school830,dc=ruВыглядит именно так, а не так
synchronization.organization.units = ou=Users,dc=school830,dc=ru;ou=Groups,dc=school830,dc=ruПотому что Руна обрывает синхронизацию с ошибкой "Нул поинтер на name". Полагаю, что тут отсылка к проблеме из 4 пункта. И, возможно, 3 пункта по этой настройке из кода.
Тут он явно этот name не получил, т.к. у группы этого атрибута просто нет:
String name = getStringAttribute(searchResult, ATTR_ACCOUNT_NAME);Кажется, всё портит эта строка, где должно быть, видимо, так:
group = new Group(description, description);
group.setLdapGroupName(description);
или типа того, но я понимаю, что имелось ввиду. Предполагалось, что в uid будет имя группы, однако гугл говорит, что это не так:
ldapsearch -H ldaps://ldap.google.com -b "ou=Groups,dc=school830,dc=ru" '(cn=it)'
SASL/EXTERNAL authentication started
SASL username: st=California,c=US,ou=GSuite,cn=LDAP Client,l=Mountain View,o=Google Inc.
SASL SSF: 0
# extended LDIF
#
# LDAPv3
# base <ou=Groups,dc=school830,dc=ru> with scope subtree
# filter: (cn=it)
# requesting: ALL
#

# it, Groups, school830.ru
dn: cn=it,ou=Groups,dc=school830,dc=ru
objectClass: top
objectClass: groupOfNames
objectClass: posixGroup
cn: it
displayName: IT
description:
gidNumber: 1682464537
member: uid=proskurnev.as,ou=Users,dc=school830,dc=ru
member: uid=zorin.ng,ou=Users,dc=school830,dc=ru
memberUid: proskurnev.as
memberUid: zorin.ng
googleAdminCreated: TRUE

# search result
search: 3
result: 0 Success

# numResponses: 2
# numEntries: 1
У группы вообще нет uid, т.к. имя группы содержится в cn. Но мы не можем указать cn, в качестве synchronization.account.name.attribute, т.к. для пользователя
Цитировать
cn: так называемое стандартное имя, состоящее из двух значений – имени пользователя и отображаемого имени сотрудника.
Трудно предположить к каким последствиям может привести такое двойное имя пользователя.

Код этого модуля нужно править  :'-(
Может быть даже добавлять в wfe.custom.ldap.properties настройки типа synchronization.group.name.attribute - имя для отображения (например, Бухгалтерия) и synchronization.group.id.attribute для cn (соответственно buh). Отображать и синхронизировать обязательно нормальное название "Бухгалтерия", а не "buh". Думаю, что это самое правильное решение.

01:07:56,108 INFO  [ru.runa.wfe.security.logic.LdapLogic] (default task-6) Synchronizing executors
01:08:04,461 ERROR [ru.runa.wfe.security.logic.LdapLogic] (default task-6) : java.lang.NullPointerException: name
        at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:895)
        at ru.runa.wfe.user.Executor.<init>(Executor.java:77)
        at ru.runa.wfe.user.Group.<init>(Group.java:59)
        at ru.runa.wfe.user.Group.<init>(Group.java:55)
        at ru.runa.wfe.security.logic.LdapLogic.synchronizeGroups(LdapLogic.java:275)
        at ru.runa.wfe.security.logic.LdapLogic.synchronizeExecutors(LdapLogic.java:99)
        at ru.runa.wfe.service.impl.SynchronizationServiceBean.synchronizeExecutorsWithLdap(SynchronizationServiceBean.java:45)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
(Полностью приложил в текстовом файле)
« Последнее редактирование: 15.10.2019 10:34:24 от tema »

Оффлайн tema

  • alt linux team
  • ***
  • Сообщений: 2 073
Старт синхронизации LDAP
Ну и теперь надо стартануть Руну так, чтобы сертификат подцепился и использовался. Открываем файл /opt/runawfe/bin/standalone.sh
И правим строку
SERVER_OPTS=""Вот результат:
# head standalone.sh
#!/bin/sh

# Use --debug to activate debug mode with an optional argument to specify the port.
# Usage : standalone.sh --debug
#         standalone.sh --debug 9797

# By default debug mode is disable.
DEBUG_MODE="${DEBUG:-false}"
DEBUG_PORT="${DEBUG_PORT:-8787}"
SERVER_OPTS="-Djavax.net.ssl.keyStore=/путь к файлу/java-application-ldap.jks -Djavax.net.ssl.keyStorePassword=пароль к хранилищу"

Оффлайн yaleks

  • Мастер
  • ***
  • Сообщений: 6 242
Посмотрел видео 0x1 и может вам известен ответ - эта штуку можно подключить к email аккаунту со входящей почтой, чтобы по каждому входящему сообщению с заданных адресов запускался "процесс", который может взять кто-то из исполнителей?

Оффлайн tema

  • alt linux team
  • ***
  • Сообщений: 2 073
Посмотрел видео 0x1 и может вам известен ответ - эта штуку можно подключить к email аккаунту со входящей почтой, чтобы по каждому входящему сообщению с заданных адресов запускался "процесс", который может взять кто-то из исполнителей?
Я задавал этот вопрос. Такой функционал можно приделать - мне ответили. На самом деле, очень нужный функционал.