среда, 17 июля 2013 г.

Настройка старта IBM Websphere MQ и Message Broker как системного сервиса на SUSE Linux Enterprise Server 11 SP2 и CentOS 6.6

Для того, что бы Websphere MQ и  Message Broker автоматически запускались при старте системы выполняем следующие действия:

1) Качаем с сайта IBM Support Pack "MSL1: WebSphere MQ for Linux - Automatic Startup"

2) Разархивируем его и запускаем MSL1-1.0.1-1.noarch.rpm на установку
sudo rpm -ivh MSL1-1.0.1-1.noarch.rpm

3) Проверяем в YAST->System-> System Services (Runlevel), что бы ibm.com-WebSphere_MQ был в статусе "enabled". В случае необходимости включаем его

4) Готово

Для автоматического старта Message Broker вместе с MQ он должен быть объявлен как defined
./mqsicreatebroker QM_DEV1.BRK -q QM_DEV1 -d defined
Это можно сделать как при создании (строка выше), так изменить уже созданный экземпляр (см. справку Message Broker)

Если нет возможности установить rpm, то можно залезть внутрь него любым архиватором и выдернуть из него файлы /etc/conf.d/ibm.com-WebSphere_MQ и /etc/init.d/ibm.com-WebSphere_MQ и положить их в соответствующие папки на сервере. После чего включить сервис в YAST->System-> System Services (Runlevel)

вторник, 16 июля 2013 г.

Настраиваем FTP сервер на OpenSUSE на примере vsftpd


Постановка задачи:
Настроить FTP сервер на OpenSUSE
Без анонимного доступа.
Создать одного пользователя с возможностью записи в заданную папку.
Остальные пользователи должны иметь доступ в свои домашние папки.
Все пользователи должны быть закрыты в своих домашних папках, но должна быть возможность выборочно разрешать выход в файловую систему (согласно правам самих пользователей)

su
zypper install vsftpd
zypper install yast2-ftp-server
yast
YAST->Network Services->FTP Server:
Start-Up->Service Start->(x) When booting
General->[x] Chroot Everyone
General->FTP Directory for Authenticated Users=/storage/ftp
Authentication->Enable/Disable Anonymous and Local->(x) Authenticated Users Only
Authentication->Uploading->[x] Enable Upload
/etc/init.d/vsftpd restart
mkdir /storage/ftp
mkdir /storage/ftp/ftpuser
groupadd ftp-users
chown root:ftp-users /storage/ftp
chown ftpuser:ftp-users /storage/ftp/ftpuser
useradd -g ftp-users -d /storage/ftp/ftpuser ftpuser
passwd ftpuser
chmod 550 /storage/ftp
chmod 750 /storage/ftp/ftpuser
Мой рабочий конфиг (/etc/vsftpd.conf)

pasv_min_port=30000
pasv_max_port=30100
anon_mkdir_write_enable=NO
anon_root=/srv/ftp
anon_upload_enable=NO
chroot_local_user=YES #Закрывает пользователей в своих домашних директориях
allow_writeable_chroot=YES #Боремся с ошибкой 'vsftpd: refusing to run with writable root inside chroot ()'
passwd_chroot_enable=YES 
chroot_list_enable=YES #В файле /etc/vsftpd.chroot_list содержится список пользователей, которых не надо закрывать в своей домашней директрии
ftpd_banner=Welcome message
idle_session_timeout=900
log_ftp_protocol=NO
max_clients=10
max_per_ip=3
pasv_enable=YES
ssl_sslv2=NO
ssl_sslv3=NO
ssl_tlsv1=YES

понедельник, 8 июля 2013 г.

Message Broker: формирование MQ сообщения для JMS

Периодически возникает задача формирования корректного MQ сообщения, такого, что бы его могло нормально распознать и распарсить приложение написанное на Java и работающее с MQ через JMS (далее просто JavaApp).
Для того, что бы JavaApp могло нормально распознать MQ сообщение необходимо заполнение следующих полей в заголовке сообщения (скрины сделаны из rfhutil):





С параметрами MQ MessageFormat, MessageType и полями в RFH.usr проблем не возникает.
Пример заполнения в коде (обязательные поля выделены жирным):

SET OutputRoot.MQMD.MsgType = MQMT_REQUEST;
SET OutputRoot.MQMD.Format = MQFMT_RF_HEADER_2;
SET OutputRoot.MQMD.Encoding = MQENC_NATIVE;
SET OutputRoot.MQMD.CodedCharSetId = 1208;
SET OutputRoot.MQRFH2.(MQRFH2.Field)Format = MQFMT_STRING;
SET OutputRoot.MQRFH2.jms.Dlv = '2'; -- Желательно указать для того, что бы было заполнено поле MQRFH2.jms
SET OutputRoot.MQRFH2.usr.TargetFunctionName = 'autoFinishCall';

Примечание: поле MQRFH2.usr.TargetFunctionName используется в продуктах IBM Websphere ESB для определения целевой функции и не является обязательным для корректного распознавания JMS-клиентом.

Но для задания Message Domain значения 'jms_text' простая запись вида:
OutputRoot.MQRFH2.mcd.Msd = 'jms_text';
не помогает.
ВНИМАНИЕ: для версии WMB 8.0.0.5 совет из описания ниже уже не актуален, так как все работает в виде
OutputRoot.MQRFH2.mcd.Msd = 'jms_text';

Для этого требуется требуется выполнить следующие действия:

Вставляем в message flow проекта сразу перед 'MQOutput Node' компоненту 'Reset Content Descriptor Node' (Prepare JMS Message на схеме) и заполняем в ней поле Message domain значением 'jms_text'.
Этим мы сбрасываем свойство Message Domain сообщения в необходимое значение.
При необходимости после отправки сообщения снова вставляем компоненту 'Reset Content Descriptor Node'  (Reset to XMLNSC на схеме)  и заполняем в ней поле Message domain значением значением из выпадающего списка, например 'XMLNSC'

Пример:

В этом случае Java JMS клиенты корректно принимают сообщения отправленные из Message Broker.