LoginSignup
12
6

More than 5 years have passed since last update.

ウイングアークのSVF for PDF Ver9.2をDockerコンテナにする

Posted at

概要

SVF製品においては、「SVFクラウド」がありますが、昔からあるシステムのお守りなどで、社内において、SVFサーバを動かす必要がある、といったところはあるように思います。

今回は、誰かに引継ぎも兼ねて、SVF for PDFをDockerコンテナにして動かす方法を書いておきます。
当然、システム要件を満たすものではないので、開発用途・検証用途などで利用するものとしていることをご了承ください。

自分のお守りするシステムのあるバージョンは、SVF9.2で、
また違うバージョンは、SVF9.2sp3で、
最新の開発中のものは、SVF9.2sp6で・・・ という人に向いています。

用意するもの

SVF for PDF Ver9.2では、利用するにあたって、オンラインかオフラインでアクティべーションを行う必要があります。
このため、ライセンスキーなどは事前に入手しているものとします。

キー 値の例
LICENSE_KEY SVF92-12345-67890-ABCDE-FGHIJ
EDITION_ID OEM-SVF-XXX-XXXXX

インストールに必要な資材については、媒体等で入手しているものとして進めます。
install_resources以下にこんな感じで用意しておきます。

install_resources
  ├── bin
  ├── conf
  ├── data
  ├── install.exe
  ├── install_other.sh
  ├── install_x64.sh
  ├── install_x86.sh
  ├── lib
  ├── license
  ├── logging.properties
  ├── ProductLicense
  ├── runtime
  ├── sample
  └── tools

Dockerfile

用意するもので示した変数を--build-argで渡します。


docker build -t svf:9.2 --build-arg LISENCE_KEY=ライセンスキー --build-arg EDITION_ID=エディションID .

Dockerファイルはこのようになっています。


FROM centos:7

ARG LICENSE_KEY
ARG EDITION_ID

ENV FIT_PRODUCTS_BASE=/opt/SVFJP \
    OS_NAME=rhel \
    JAVA_HOME=/usr/lib/jvm/jre-1.7.0-openjdk \
    LICENSE_KEY=$LICENSE_KEY \
    EDITION_ID=$EDITION_ID \
    PRINTER_NAME=PDF \
    USE_SVF_JAVA_CONNECT_SERVER=1 \
    USE_PLUGABLE_DATABASE=1

COPY install_resources /tmp/SVF
COPY runSVF.sh /runSVF.sh

RUN \
   yum install -y java-1.7.0-openjdk && \
   useradd svf -m -d /home/svf && \
   echo 'svf:svf' |chpasswd && \
   mkdir $FIT_PRODUCTS_BASE && \
   chown -R svf:svf $FIT_PRODUCTS_BASE && \
   chown -R svf:svf /tmp/SVF && \
   chown svf:svf /runSVF.sh && \
   chmod +x /runSVF.sh && \
   yum clean all

USER svf

RUN \
   echo 'yes' > /tmp/response_file && echo 'yes' >> /tmp/response_file && \
   chmod +x /tmp/SVF/install_x64.sh && \
   /tmp/SVF/install_x64.sh < /tmp/response_file && \
   find $FIT_PRODUCTS_BASE/bin -name "*.sh" | xargs sed -i \ 
      -re 's|^(su -)|\# \1|g' && \
   rm -rf /tmp/SVF && \
   mkdir $FIT_PRODUCTS_BASE/tmp && \
   mkdir $FIT_PRODUCTS_BASE/log && \
   mkdir -p $FIT_PRODUCTS_BASE/svfjpd/form && \
   sed -i -e s#Default.TempDir=#Default.TempDir=${FIT_PRODUCTS_BASE}/tmp#g \
           $FIT_PRODUCTS_BASE/svfjpd/lib/vfreport.properties.ja && \
   sed -i -e s#SearchPath.Path=#SearchPath.Path=${FIT_PRODUCTS_BASE}/svfjpd#g \ 
           $FIT_PRODUCTS_BASE/svfjpd/lib/vfreport.properties.ja && \
   sed -i -e s#Debug.Debug=OFF#Debug.Debug=ON#g \ 
           $FIT_PRODUCTS_BASE/svfjpd/lib/vfreport.properties.ja && \
   sed -i -e s#Debug.LogDir=#Debug.LogDir=${FIT_PRODUCTS_BASE}/log#g  \
           $FIT_PRODUCTS_BASE/svfjpd/lib/vfreport.properties.ja && \
   sed -i -e s#defaultprinter=#defaultprinter=${PRINTER_NAME}#g \
           $FIT_PRODUCTS_BASE/svfjpd/lib/vfreport.printers.properties && \
   echo "${PRINTER_NAME}=vfreport.hoge.${PRINTER_NAME}.properties.ja" >> \
           $FIT_PRODUCTS_BASE/svfjpd/lib/vfreport.printers.properties && \
   cp $FIT_PRODUCTS_BASE/svfjpd/lib/vfreport.PDF.properties.ja \
      $FIT_PRODUCTS_BASE/svfjpd/lib/vfreport.hoge.${PRINTER_NAME}.properties.ja


WORKDIR $FIT_PRODUCTS_BASE

VOLUME $FIT_PRODUCTS_BASE/svfjpd/form

CMD exec /runSVF.sh

EXPOSE 515 4141 44081 44090

Javaのバージョンについて

9.2(無印)は、Java8に対応していないため、Java7を入れておきます。

yum install -y java-1.7.0-openjdk && \

svfユーザについて

SVF for PDFは、rootユーザではなく、専用のユーザを作成し、そのユーザで動かすこと、と言われておりますので、
svfユーザを作成し、svfユーザでインストール処理を行います。

useradd svf -m -d /home/svf && \
echo 'svf:svf' |chpasswd && \

PDFプリンタの作成

SVF for PDFの8系のときは、インストール直後にPDFプリンタが1つ作成されていましたが、9.2ではインストール直後にプリンタは何も作成されていません。
そのため、PDFプリンタをファイルベースで作成しておきます。

echo "${PRINTER_NAME}=vfreport.hoge.${PRINTER_NAME}.properties.ja" >> \
      $FIT_PRODUCTS_BASE/svfjpd/lib/vfreport.printers.properties && \
cp $FIT_PRODUCTS_BASE/svfjpd/lib/vfreport.PDF.properties.ja \
   $FIT_PRODUCTS_BASE/svfjpd/lib/vfreport.hoge.${PRINTER_NAME}.properties.ja

エラー対応

SVFのインストーラで、OS_NAMEが判定で使われていることから、centos:7ですがOS_NAMEをrhelとしています。

起動用スクリプト

docker run/stop用のスクリプトとして runSVF.shを用意しました。
主にやっていることは3つです。

  1. SVFのサーバプロセスを開始する前に、指定されたライセンスキーでオンラインアクティベーションを行う。
  2. SVFサーバプロセスの開始する。
  3. 終了コマンドを受信したら、指定されたエディションIDを指定して、ディアクティベーション処理とSVFサーバプロセスを終了する。

コンテナですので、動作するハードウェア環境は、その時々で変わるでしょうから、毎回アクティベーションするようにしています。
当然、許容されたライセンス数で動かしているものとしますが、使い終わったら消すのが良いですので、ディアクティベーション処理を終了時に走らせます。

アクティベーション

echo "Activation"
${FIT_PRODUCTS_BASE}/ac/bin/lm_svf.sh activation ${LICENSE_KEY}

このようにしてライセンスキーを使い、アクティベーション処理を行います。

成功すると、以下のようなメッセージが出力されます。

Online Activation is successful.

キーが間違っていると、このようなメッセージになります。

Valid Activation Code is not registered.

ディアクティベーション

lm_svf.sh activation ライセンスキー でアクティベーションなら、lm_svf.sh deactivation ライセンスキー で、ディアクティベーションできるかと思いきや、deactivationで使用するのは、エディションIDの方です。

edition_idはlm_svf.sh listとすることで、求めることができます。

無題.png

Activatedな製品があれば(アクティべーションされていれば)、解除処理をします。


   ${FIT_PRODUCTS_BASE}/ac/bin/lm_svf.sh list | grep "(Activated)"

   if [ $? -eq 0 ]; then
       echo "SVF Licence Deactivation"
       ${FIT_PRODUCTS_BASE}/ac/bin/lm_svf.sh deactivation ${EDITION_ID}
   fi

[TIPS] Oracle12c PDB対応

プラガブルなDBを使うとき、使わないときで接続文字列が変わるので、文字列の置換処理を行っています。


if [ "${USE_PLUGABLE_DATABASE}" = "1" ]; then
  sed -i -e "s#jdbc:oracle:thin:@{0}:{1}:{2}#jdbc:oracle:thin:@//{0}:{1}/{2}#g" \
    ${FIT_PRODUCTS_BASE}/svfjpd/lib/vfreport.properties.ja
else
   sed -i -e "s#jdbc:oracle:thin:@//{0}:{1}/{2}#jdbc:oracle:thin:@{0}:{1}:{2}#g" \
    ${FIT_PRODUCTS_BASE}/svfjpd/lib/vfreport.properties.ja
fi

runSVF.sh

中身はこのようになっています。


#!/bin/bash

LOG_FILE=${FIT_PRODUCTS_BASE}/log/*

if [ ! -e ${FIT_PRODUCTS_BASE}/log/server.log ]; then
   touch ${FIT_PRODUCTS_BASE}/log/server.log
fi

########### SIGINT handler ############
function _closer() {
   echo "Stopping container."
   echo "SIGINT received, shutting down svf"

   ${FIT_PRODUCTS_BASE}/ac/bin/lm_svf.sh list | grep "(Activated)"

   if [ $? -eq 0 ]; then
       echo "SVF Licence Deactivation"
       ${FIT_PRODUCTS_BASE}/ac/bin/lm_svf.sh deactivation ${EDITION_ID}
   fi

   ${FIT_PRODUCTS_BASE}/bin/svf_shutdown.sh
}


###################################
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! #
############# MAIN ################
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! #
###################################

# Set handler
trap _closer SIGINT SIGTERM SIGKILL


echo "Activation"
${FIT_PRODUCTS_BASE}/ac/bin/lm_svf.sh activation ${LICENSE_KEY}


echo "replace startup environment"
sed -i -re s/USE_SVF_JAVA_CONNECT_SERVER=[01]/USE_SVF_JAVA_CONNECT_SERVER=${USE_SVF_JAVA_CONNECT_SERVER}/g \
   ${FIT_PRODUCTS_BASE}/bin/.startup_products

if [ "${USE_PLUGABLE_DATABASE}" = "1" ]; then
  sed -i -e "s#jdbc:oracle:thin:@{0}:{1}:{2}#jdbc:oracle:thin:@//{0}:{1}/{2}#g" \
    ${FIT_PRODUCTS_BASE}/svfjpd/lib/vfreport.properties.ja
else
   sed -i -e "s#jdbc:oracle:thin:@//{0}:{1}/{2}#jdbc:oracle:thin:@{0}:{1}:{2}#g" \
    ${FIT_PRODUCTS_BASE}/svfjpd/lib/vfreport.properties.ja
fi


echo "StartUp SVF"
${FIT_PRODUCTS_BASE}/bin/svf_startup.sh

tail -f ${LOG_FILE} &
childPID=$!
wait $childPID

制約

フォントの設定も本来は必要ですが、今回はスキップしています。
有償フォントを買って別途入れなければ帳票が出ない!というような人は厳しいです。

次回

今回作成したイメージをベースにして、サービスパックをあてたイメージの作成方法について書きたいと思います。

12
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
6