BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 21 июн 2025, 03:02

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 26 ] 
Автор Сообщение
 Заголовок сообщения: Клиентские либы
СообщениеДобавлено: 01 апр 2013, 07:46 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
Пара вопросов по последним обновлениям.

Цитата:
ДОБАВЛЕНО Keystore с ключами для подписания jar-файлов клиента

Цитата:
ИЗМЕНЕНО Installer: Сохранение клиентских jar-файлов в каталоге на сервере


Можно подробнее?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Клиентские либы
СообщениеДобавлено: 01 апр 2013, 11:01 
Не в сети
Разработчик

Зарегистрирован: 07 апр 2007, 23:51
Сообщения: 4494
Откуда: Уфа, Россия
Карма: 187
Cromeshnic писал(а):
Пара вопросов по последним обновлениям.

Цитата:
ДОБАВЛЕНО Keystore с ключами для подписания jar-файлов клиента

Цитата:
ИЗМЕНЕНО Installer: Сохранение клиентских jar-файлов в каталоге на сервере


Можно подробнее?



1) Для запуска клиента через JavaWebStart требуется подписание клиенских библиотек, для этого добавлены ключи по умолчанию для подписи библиотек, желающие могут сгенерировать свои.


2) Подготовительный этап для переноса хранения клиенских библиотек из базы в каталог на сервере. Это позволит упростить настройки БД, уменьшить размер дампа при бакапирование, формировать клиентские библиотеки для JavaWebStart


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Клиентские либы
СообщениеДобавлено: 01 апр 2013, 11:38 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
Про первый пункт не очень понял.

Я сейчас делаю вот так:
(bgclient_javawebstart.sh)
Код:
#!/bin/sh

cd ${0%${0##*/}}.

PASSWORD="bgbilling"
KEYPASS="bgbilling"

. ./setenv.sh

signJar(){
    if [ -e "./custom_client/$1" ]; then
                ${JAVA_HOME}/bin/jarsigner -keystore .keystore -storepass ${PASSWORD} -keypass ${KEYPASS} -signedjar ./custom_client/signed/$1 ./custom_client/$1 bgbilling
    else
        eche "!\n"
    fi
}

checkJar()
{
    if [ -e $1 ]; then
                ${JAVA_HOME}/bin/jarsigner -keystore .keystore -storepass ${PASSWORD} $1 bgbilling
                A=`sha1sum $1 | cut -c1-40`
                B=""
                if [ -e webroot/client/$1 ]; then
                    B=`sha1sum webroot/client/$1 | cut -c1-40`
                fi
                if [ "$A" != "$B" ]; then
                    mv -f $1 webroot/client/
                fi
    fi
}

${JAVA_HOME}/bin/java -Djava.net.preferIPv4Stack=true -cp ./:./lib/app/kernel.jar:./lib/ext/mysql.jar ru.bitel.bgbilling.utils.javawebstart.BGClient_JavaWebStart

checkJar client.jar
signJar custom_resources.jar
checkJar ./custom_client/signed/custom_resources.jar
checkJar client_libs.jar
signJar custom_client.jar
checkJar ./custom_client/signed/custom_client.jar


Т.е. сам подписываю свои либы ключом bgbilling.
Попозже причешу и выложу на вики.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Клиентские либы
СообщениеДобавлено: 01 апр 2013, 17:52 
Не в сети
Разработчик

Зарегистрирован: 07 апр 2007, 23:51
Сообщения: 4494
Откуда: Уфа, Россия
Карма: 187
.keystore - хранилище ключей, он не поставлялся с сервером и его нужно было КАЖДОМУ сгенерировать вручную, теперь в сборке будет идти .bgclient_keystore которым можно подписывать джарки не генерируя свои ключи


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Клиентские либы
СообщениеДобавлено: 02 апр 2013, 07:06 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
Спасибо, теперь понятно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Клиентские либы
СообщениеДобавлено: 05 апр 2013, 11:09 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
Насчёт подписи клиентских библиотек - выясняется, что провека хэша в стандартном bgclient_javawebstart.sh бессмысленна:

Код:
checkJar()
{
    if [ -e $1 ]; then
        ${JAVA_HOME}/bin/jarsigner -keystore ${KEYSTORE} -storepass "${PASSWORD-'123456'}" $1 bgbilling
        A=`sha1sum $1 | cut -c1-40`
        B=""
        if [ -e webroot/client/$1 ]; then
            B=`sha1sum webroot/client/$1 | cut -c1-40`
        fi
        if [ "$A" != "$B" ]; then
              mv -f $1 webroot/client/
        fi
    fi
}


Если добавить дебаг:

Код:
        if [ "$A" != "$B" ]; then
              echo "$1 was changed"
              echo "$A"
              echo "$B"
              mv -f $1 webroot/client/
        fi

, то выяснится, что один и тот же файл после подписи через jarsigner всегда будет разным.

Такие дела :(


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Клиентские либы
СообщениеДобавлено: 05 апр 2013, 11:15 
Не в сети
Разработчик

Зарегистрирован: 07 апр 2007, 23:51
Сообщения: 4494
Откуда: Уфа, Россия
Карма: 187
печалька...., ладно придеться переделать, напрмер, хранить копию не подписанной библиотеки и сверять с ней


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Клиентские либы
СообщениеДобавлено: 05 апр 2013, 11:18 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
Сперва можно подумать, что это биллинг генерит разные файлы client.jar и client_libs.jar, но дело не в этом - я в собственном скрипте вызываю 2 раза jarsigner для одного и того же файла и получаю разные результаты:

Код:
checkJar_user()
{
    if [ -e $1 ]; then
        FNAME=`basename $1`
        ${JAVA_HOME}/bin/jarsigner -keystore ${KEYSTORE} -storepass "${PASSWORD-'bgbilling'}" -signedjar ${TMP_DIR}${FNAME} $1 bgbilling
        A=`sha1sum ${TMP_DIR}${FNAME} | cut -c1-40`
        B=""
        if [ -e webroot/client/${FNAME} ]; then
            B=`sha1sum webroot/client/${FNAME} | cut -c1-40`
        fi
        if [ "$A" != "$B" ]; then
            echo "${FNAME} was changed"
            echo "$A"
            echo "$B"
            mv -f ${TMP_DIR}${FNAME} webroot/client/
        fi
    fi
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Клиентские либы
СообщениеДобавлено: 05 апр 2013, 11:33 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
Цитата:
напрмер, хранить копию не подписанной библиотеки и сверять с ней

Тогда проще хранить хэш текущей неподписанной либы и сверять с ним.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Клиентские либы
СообщениеДобавлено: 05 апр 2013, 12:30 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
В итоге у меня получился вот такой скрипт bgclient_javawebstart_user.sh:

Код:
#!/bin/sh

cd ${0%${0##*/}}.

. ./setenv.sh

KEYSTORE=".keystore"
PASSWORD="bgbilling"
USER_LIBS=./client_lib_user/*.jar

checkJar_user()
{
    if [ -e $1 ]; then
        FNAME=`basename $1`
        #new file hash
        A=`sha1sum $1 | cut -c1-40`
        B=""
        #
        if [ -e "$1.sha" ]; then
                B=`cat $1.sha`
        fi
        if [ "$A" != "$B" ]; then
                echo "$(tput setaf 2)${FNAME}$(tput sgr0) was changed!"
                ${JAVA_HOME}/bin/jarsigner -keystore ${KEYSTORE} -storepass "${PASSWORD-'bgbilling'}" -signedjar webroot/client/${FNAME} $1 bgbilling
                sha1sum $1 | cut -c1-40 > $1.sha
        else
                echo "$(tput setaf 6)${FNAME}$(tput sgr0) wasn't changed"
        fi
    fi
}

for f in ${USER_LIBS}
do
        if [ -e $f ]; then
                checkJar_user $f
        fi
done


Логика наших действий такая:
- пишем свои jar-файлы для клиента
- закидываем их в директорию ./client_lib_user/
- запускаем скрипт bgclient_javawebstart.sh
- прописываем наши файлы в bgclient.jnlp

Логика скрипта:
- перебираем jar-файлы в ./client_lib_user/
- для каждого файла file.jar ищем рядом файл file.jar.sha
- если файл есть и содержимое его совпадает с sha-хэшем jar-файла, то ничего не делаем
- если нет, то пишем в file.jar.sha хэш
- подписываем jar-файл и кладём подписанный file.jar в ./webroot/client/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Клиентские либы
СообщениеДобавлено: 08 апр 2013, 14:38 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
Ага, вижу.
Балуюсь с новыми скриптами - таки выходит, что файлик client.jar изначально получается каждый раз разный.
С client_libs.jar всё в порядке при этом.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Клиентские либы
СообщениеДобавлено: 08 апр 2013, 17:51 
Не в сети
Разработчик

Зарегистрирован: 07 апр 2007, 23:51
Сообщения: 4494
Откуда: Уфа, Россия
Карма: 187
client.jar будет разным если в обновление были изменения в клиенте.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Клиентские либы
СообщениеДобавлено: 09 апр 2013, 11:37 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
http://wiki.bgbilling.ru/index.php/Javaws


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Клиентские либы
СообщениеДобавлено: 23 апр 2013, 11:38 
Ув. Cromeshnic, в wiki вы писали:
Код:
Если в пользовательском классе переопределяются ресурсы или классы из client.jar или, простихоспаде, client_libs.jar, то в bgclient.jnlp пользовательский файл должен в списке стоять раньше соответствующей библиотеки, а также необходимо убрать атрибут 'main="true"' у client.jar.


У меня если убрать атрибут 'main="true"', то не у всех запускается биллинг, судя по логам java не может найти "bitel.billing.ShellFrame".
Есть другие способы переопределения ресурсов в client.jar?


Вернуться к началу
  
 
 Заголовок сообщения: Re: Клиентские либы
СообщениеДобавлено: 23 апр 2013, 12:02 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
Я не знаю других способов.
"main=true|false, optional
Indicates if the jar contains the main class. Default value is false. Note, that the jar containing the main class must be the first jar listed in the resources section."


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Клиентские либы
СообщениеДобавлено: 23 апр 2013, 12:03 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
У меня вот так работает:

Код:
        <jar href="dsi_resources.jar"/>
        <jar href="dsi_discount_client.jar"/>
        <jar href="client.jar"/>
        <jar href="client_libs.jar"/>


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Клиентские либы
СообщениеДобавлено: 23 апр 2013, 12:17 
А java какую используете 6 или 7?

Вы уже пробовали что нибудь переопределять?
У меня например руки чешутся переписать редактор параметра типа "Телефон"... :)


Вернуться к началу
  
 
 Заголовок сообщения: Re: Клиентские либы
СообщениеДобавлено: 23 апр 2013, 12:21 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
java 6
Во-первых, сделал вот такую штуку: http://wiki.bgbilling.ru/index.php/%D0% ... 1%83%D0%B3
Но тут скорее дописывать, а не переопределять.
Во-вторых, ещё пару штуковин сделал, но ещё не задокументировал тут.
В частности, переопределяется npay.xml


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Клиентские либы
СообщениеДобавлено: 23 апр 2013, 12:37 
Очень любопытная штука:
Код:
В файл /bitel/billing/module/services/npay/setup_user.properties пропишем нашу панель как вкладку модуля абонплат с названием «Группы услуг»

Это разработчики добавили такую возможность?
Где еще это можно использовать?
Можно ли добавить свой таб в договор?


Вернуться к началу
  
 
 Заголовок сообщения: Re: Клиентские либы
СообщениеДобавлено: 23 апр 2013, 12:39 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
В договор, к сожалению, нельзя :(


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Клиентские либы
СообщениеДобавлено: 23 апр 2013, 12:40 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
viewtopic.php?f=19&t=7857&


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Клиентские либы
СообщениеДобавлено: 23 апр 2013, 12:49 
Спасибо!

Я смотрю разработчики все таки потихоньку дают возможности изменять клиента.
Надеюсь и до договора скоро доберутся. :)


Вернуться к началу
  
 
 Заголовок сообщения: Re: Клиентские либы
СообщениеДобавлено: 12 авг 2013, 08:48 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
Java Web Start не работает из коробки, т.к. update_lib в базе - пустой:

Код:
# ./bgclient_javawebstart.sh

name = mps

mps.jar

name = update

client.jar

name = update_lib

db.driver = com.mysql.jdbc.Driver
db.url = jdbc:mysql://127.0.0.1/bgbilling?useUnicode=true&characterEncoding=Cp1251&allowUrlInLocalInfile=true&zeroDateTimeBehavior=convertToNull&jdbcCompliantTruncation=false&elideSetAutoCommits=true&cachePrepStmts=true&useCursorFetch=true&queryTimeoutKillsConnection=true&connectTimeout=5000
db.user = bill
db.pswd = bgbilling
java.util.zip.ZipException: ZIP file must have at least one entry
        at java.util.zip.ZipOutputStream.finish(ZipOutputStream.java:304)
        at java.util.zip.DeflaterOutputStream.close(DeflaterOutputStream.java:146)
        at java.util.zip.ZipOutputStream.close(ZipOutputStream.java:321)
        at ru.bitel.bgbilling.utils.javawebstart.BGClient_JavaWebStart.main(BGClient_JavaWebStart.java:124)


Код:
mysql> SELECT name, length(client_zip) FROM installed_modules;
+------------+--------------------+
| name       | length(client_zip) |
+------------+--------------------+
| mps        |              18260 |
| update     |            4275525 |
| update_lib |                  0 |
+------------+--------------------+
3 rows in set (0.00 sec)



Код:
# ls -lh webroot/client/
итого 5,0M
-rw-r--r-- 1 root root  1,1K Авг 12 11:18 bgclient.jnlp
-rw-r--r-- 1 root staff 5,0M Авг 12 11:45 client.jar
-rw-r--r-- 1 root root    41 Авг 12 11:45 client.jar.sha
-rw-r--r-- 1 root staff    0 Авг 12 11:21 client_libs.jar
-rw-r--r-- 1 root root    41 Авг 12 11:21 client_libs.jar.sha
-rw-r--r-- 1 root root   663 Авг  2 18:21 index.html


В результате client_libs.jar - нулевой


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Клиентские либы
СообщениеДобавлено: 12 авг 2013, 10:17 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
Всё ясно, нужно поправить max_allowed_packet.
Не увидел в логах сначала.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Клиентские либы
СообщениеДобавлено: 12 авг 2013, 11:27 
Не в сети
Разработчик

Зарегистрирован: 07 апр 2007, 23:51
Сообщения: 4494
Откуда: Уфа, Россия
Карма: 187
из коробки действительно не работает.
начинает работать после первого обновления сервера (можно принудительного).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Клиентские либы
СообщениеДобавлено: 12 авг 2013, 12:16 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
ага, до обновления вообще не было update_lib в installed_modules


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 26 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
POWERED_BY
Русская поддержка phpBB
[ Time : 0.056s | 60 Queries | GZIP : On ]