この記事はクラウド環境のLinuxインスタンスに、帳票ツールのElixir ReportをGUIインストールする手順についてまとめたものです。
以前の記事、Amazon EC2上にRed Hatインスタンスを作成してElixir Reportをコンソールインストールする手順では、デスクトップ環境のないLinuxインスタンスにコンソールインストールする手順を試してみました。
今回は、SSHのX11転送(X11フォワーディング)機能を使って、デスクトップ環境の入っていないAmazon EC2上のRed Hat Enterprise LinuxのインスタンスでElixir Reportのレポートサーバーのインストーラを実行し、GUIインストーラをWindows側に表示してインストールしてみたいと思います。
#環境
Windows 8.1
Elixir Report 8.7J
Amazon EC2 Red hat Enterprise Linux 7.3
#WindowsにTera Termをインストールする
この記事では、Linux OSへのSSH接続にTera Termを使用します。Tera TermのWindowsへのインストールは、以前の記事の[SSH接続用にWindowsにTera Termをインストールする]を参考にしてください。
#WindowsにXサーバーをインストールする
Linux上のGUIアプリケーションをWindows側で操作するには、WindowsのリモートデスクトップやVNC経由でLinuxのデスクトップに接続することもできますが、この記事では、Linux上で動作しているアプリケーションのGUIをWindows側に表示する方法としてX11転送を利用します。
この方法ではWindows側にXサーバーがインストールされている必要があるので、今回はXmingというフリーのWindows用Xサーバーを使用します。こちらの記事を参考にしました。
【参考記事】フリーのWindows用Xサーバー「Xming」のインストールと基本設定、使い方
- Xmingインストーラをダウンロードサイトからダウンロードします。本記事の作成時(2016年11月)で最新のXming(Xming-6-9-0-31-setup.exe)と、Xming-fonts(Xming-fonts-7-7-0-10-setup.exe)をダウンロードします。
- インストール先を指定して次に進みます。
-
インストールの完了画面で
[Launch Xming]
にチェックを入れて終了すると、Xmingが起動してタスクトレイにアイコンが表示されます。
[注意]Xming起動時に、Windowsファイアウォールの警告が表示されることがあります。その場合は、アクセスを許可します。
#Amazon EC2 Red Hatインスタンスの作成と準備
Amazon EC2上に、デフォルトの構成でRed Hatインスタンスを作成します。以前の記事の[Red Hatインスタンスの作成と準備]セクションを参考にしてください。
インスタンスの作成と、Windows上のTera TermからRed Hatインスタンスへ接続するまでの手順が完了します。
#X11転送の設定をする
X11転送に関する、Red Hat側およびWindows側の設定と確認を行います。
##Linux側の設定
-
Red Hatインスタンスで、X11転送が有効化されているか確認します。
/etc/ssh/sshd_config
内で、X11Forwarding
がyesになっていれば問題ありません。$ sudo cat /etc/ssh/sshd_config |grep X11 X11Forwarding yes #X11DisplayOffset 10 #X11UseLocalhost yes # X11Forwarding no
-
手順1で、
X11Forwarding
がnoになっている場合は、/etc/ssh/sshd_config
をバックアップした上で設定をyesに変更し、sshdを次のコマンドに従って再起動します。$ sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config_org $ sudo vi /etc/ssh/sshd_config $ sudo service sshd restart Redirecting to /bin/systemctl restart sshd.service
-
XアプリケーションをX11転送によりWindows上に表示できるか確認するため、今回は
xeyes
というXアプリケーションをRed Hatインスタンスにインストールしておきます。$ sudo yum –y install xeyes
##Windows側の設定とテスト
4. Windows側でXmingが起動していることを確認します。
5. Tera Termの設定で、リモートのXアプリケーションをローカルに表示する設定を行います。Tera Termの[設定]-[SSH転送]をクリックします。
- 一旦Tera Termからログアウトして、再度ログインし直します。
8. DISPLAY変数が設定されているかコマンドで確認します。
```shell-session
$ echo $DISPLAY
```
-
前の手順で何も返ってこなかった場合は、先ほどインストールしたxeyesを実行しても次のようなエラーになってしまいます。
$ sudo xeyes Error: Can't open display:
Red Hatインスタンス側にxauthと、x11のライブラリが不足しているようなので、必要なライブラリを次のコマンドでインストールしました。
$ sudo yum –y install xorg-x11-xauth.x86_64 xorg-x11-server-utils.x86_64
-
一旦Tera Termでログアウトします。
$ exit
-
再度Tera TermでRed Hatインスタンスにログインして、次のコマンドでDISPLAY変数を確認します。筆者の環境では自動で
localhost:10.0
が設定されていました。$ echo $DISPLAY localhost:10.0
-
xeyesを実行してみます。無事Windows側にxeyesアプリケーションが表示されました。
$ xeyes
[注意]次のようなX転送のエラーが出るときは、XmingがWindows側で起動していない可能性があります。起動していることを確認してください。
#レポートサーバーのインストーラをRed Hatに転送する
Tera Termを利用して、Windows側にあるElixir ReportのレポートサーバーのLinux OS用インストーラ(elixirreport87_linux64.bin)と、ライセンスファイル(**.license*)をRed Hatインスタンスに転送します。
この手順については、以前の記事 の[レポートサーバーのインストーラをRed Hatに転送する]を参照してください。
ファイルの転送が完了したら、次の準備を行っておきます。
-
インストールは現在ログインしているec2-userで行います。ec2-userのLANG環境変数が英語になっている場合は、日本語(ja_JP.UTF-8)に変更しておきます。
$ echo $LANG en_US.UTF-8 $ export LANG=ja_JP.UTF-8 $ echo $LANG ja_JP.UTF-8
-
転送したインストーラに実行権限を与えます。
$ chmod +x ./elixirreport87_linux64.bin $ ls -la -rwxr-xr-x. 1 ec2-user ec2-user 279506476 Sep 29 00:00 elixirreport87_linux64.bin
#GUIインストーラの実行とエラーの発生
いよいよインストーラを実行してみます。しかし、エラーでインストーラが終了してしまいました。必要なライブラリがRed Hat側に不足しているようです。
$ ./elixirreport87_linux64.bin
Preparing to install...
Extracting the JRE from the installer archive...
Unpacking the JRE...
Extracting the installation resources from the installer archive...
Configuring the installer for this system's environment...
strings: '/lib/libc.so.6': No such file
Launching installer...
Invocation of this Java Application has caused an InvocationTargetException. This application will now exit. (LAX)
Stack Trace:
java.lang.NoClassDefFoundError: Could not initialize class java.awt.Toolkit
at java.awt.Component.<clinit>(Component.java:593)
at com.zerog.ia.installer.LifeCycleManager.g(DashoA8113)
at com.zerog.ia.installer.LifeCycleManager.h(DashoA8113)
at com.zerog.ia.installer.LifeCycleManager.a(DashoA8113)
at com.zerog.ia.installer.Main.main(DashoA8113)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.zerog.lax.LAX.launch(DashoA8113)
at com.zerog.lax.LAX.main(DashoA8113)
This Application has Unexpectedly Quit: Invocation of this Java Application has caused an InvocationTargetException. This application will now exit. (LAX)
#必要なライブラリをインストールして実行時エラーを解消する
-
上記のエラーを最初から確認すると、まず
libc.so.6ファイルが見つからない
という内容のエラーが出力されているので、次のコマンドでlibc.so.6ライブラリをインストールします。$ sudo yum -y install libc.so.6
-
次に発生している
InvocationTargetException
は、X11のライブラリが不足していることが原因のようです。必要なライブラリをインストールします。$ sudo yum –y install libXtst
#起動したGUIインストーラの日本語が□に…フォントをインストールする
-
再度インストーラを実行してみます。
$ ./elixirreport87_linux64.bin
-
インストーラのGUIが起動しましたが、日本語が□表示になっています。Linux側に日本語フォントがインストールされていないことが原因でしょう。左下のキャンセルボタンをクリックしてインストールを中止します。
3. 日本語フォントをインストールします。VLゴシック、IPA明朝、IPAゴシックをインストールしました。
```shell-session
$ sudo yum -y install vlgothic-fonts ipa-mincho-fonts ipa-gothic-fonts
```
#GUIインストールを実行する
3. [ライセンスキーファイルの登録]をクリックして、登録するライセンスファイルを選択します。 ![17GUI_03.png](https://qiita-image-store.s3.amazonaws.com/0/152421/5d83adef-b5d0-f136-9f2e-ae0f5823ef0b.png)
4. インストールするモジュールにチェックが入っていることを確認して、次に進みます。この画面では、先ほどの手順で追加したライセンスでインストールできるモジュールだけが表示されます。![18GUI_04.png](https://qiita-image-store.s3.amazonaws.com/0/152421/bbd0be1e-573b-87e0-0f1c-4384e7c86671.png)
5. レポートサーバーで使用するポート(今回はデフォルトの`7001`)、ログレベルを確認します。デフォルトのまま進みます。 ![19GUI_ポート設定.png](https://qiita-image-store.s3.amazonaws.com/0/152421/92546157-4e6e-5b21-7b3e-efe9a72092e5.png)
6. インストール先ディレクトリは、ec2-userにアクセス権のある場所を選択します。今回はユーザーディレクトリの下にします。 ![20GUI_インストール先.png](https://qiita-image-store.s3.amazonaws.com/0/152421/02469dbf-76a9-95b2-fc53-aead3e39d7cd.png)
[注意]ec2-userに書き込み権限のない場所を指定すると、エラーが表示されます。
7. 確認画面で内容を確認したら、[インストール]をクリックします。 ![21GUI_確認.png](https://qiita-image-store.s3.amazonaws.com/0/152421/a2f96b69-7bd8-15b7-8f1a-650a4860b1cf.png)
8. 次の画面が表示されれば完了です。 ![22GUI完了.png](https://qiita-image-store.s3.amazonaws.com/0/152421/12bca1b5-8925-bc50-7283-820717f40410.png)
#ヘッドレスモードの設定とレポートサーバーの起動
インストールはX11転送でGUIを利用しましたが、今後、レポートサーバーの実行時にX Window Systemに接続できない場合は、Javaのヘッドレスモードを有効にする必要があります。
-
レポートサーバーのインストール先/binディレクトリに移動します。筆者の環境では/home/ec2-user/ElixirReport87J/bin/になります。
$ cd /home/ec2-user/ElixirReport87J/bin
-
レポートサーバーの起動シェルスクリプトをバックアップした後、編集します。
$ cp reportserver-start.sh reportserver-start.sh_org $ vi reportserver-start.sh
※5行目の
headless
設定を追加して、保存します。#!/bin/sh JAVACMD="../jre/bin/java" $JAVACMD -mx512M \ -Djava.awt.headless=true \ -Duser.home=../license \ (以下省略)
-
レポートサーバーの起動シェルスクリプトを実行します。
$ ./reportserver-start.sh &
※”&”を付加してバックグラウンド実行にします。
【注意】起動ユーザーのLANG環境変数が英語の場合、レポートサーバーが英語ロケールで起動され、Webインターフェースのメニューなどが英語表示になってしまいます。日本語ロケールへ変更して起動してください。
4. 起動に成功すると、コンソール上に次のようにCopyrightが表示されます。
```
INFO [main] com.elixirtech.ers2.Main - Copyright 2016 Elixir Technology Pte Ltd
INFO [Thread-19] com.elixirtech.ers2.EnsureServerStarted - Checking server status
```
-
Windows上のブラウザからレポートサーバーのWebインターフェースにログインしてみます。
http://<パブリックIP>:7001
【注意】ログイン画面が表示されないときは、以下のような原因が考えられます。
・レポートサーバーの起動に失敗している
・Red Hatインスタンスのセキュリティグループの設定で、ポート”7001”を追加していない
6. ログイン画面が表示されたら、デフォルトで用意されている次の管理者ユーザーでログインします。
```
ユーザー名: admin
パスワード: sa
```
- [リポジトリ]以下のサンプルテンプレートを実行してみます。
[samples]‐[demo]-[sales2]-[sales2.rml]
を選択して、出力形式に”PDF”を選んで[OK]をクリックします。
8. PDF形式のレポートが生成できました。 ![25フォントインストール後の結果.png](https://qiita-image-store.s3.amazonaws.com/0/152421/94ca8523-80af-667a-dc77-fd559cec6eb7.png)
以上で完了です。
#参考情報
##Q1. No X11 DISPLAY variable was setエラーでインストールが終了する
X11などの設定を何も行っていない状態でGUIインストールを実行すると、X11のエラーでインストーラが終了してしまいます。この記事の[X11転送の設定をする]の項目を確認してみてください。
$ ./elixirreport87_linux64.bin
Preparing to install...
Extracting the JRE from the installer archive...
Unpacking the JRE...
Extracting the installation resources from the installer archive...
Configuring the installer for this system's environment...
strings: '/lib/libc.so.6': No such file
Launching installer...
Invocation of this Java Application has caused an InvocationTargetException. This application will now exit. (LAX)
Stack Trace:
java.awt.HeadlessException:
No X11 DISPLAY variable was set, but this program performed an operation which requires it.
at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:207)
at java.awt.Window.<init>(Window.java:536)
at java.awt.Frame.<init>(Frame.java:420)
at java.awt.Frame.<init>(Frame.java:385)
at javax.swing.JFrame.<init>(JFrame.java:189)
at com.zerog.ia.installer.LifeCycleManager.g(DashoA8113)
at com.zerog.ia.installer.LifeCycleManager.h(DashoA8113)
at com.zerog.ia.installer.LifeCycleManager.a(DashoA8113)
at com.zerog.ia.installer.Main.main(DashoA8113)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.zerog.lax.LAX.launch(DashoA8113)
at com.zerog.lax.LAX.main(DashoA8113)
This Application has Unexpectedly Quit: Invocation of this Java Application has caused an InvocationTargetException. This application will now exit. (LAX)
##Q2. フォントをインストールしても、日本語が□のままになる
fc-list
コマンドがRed Hatインスタンスで実行できるか確認してください。コマンドが入っていない場合は、フォントの管理に使用されるfontconfig
パッケージを次のコマンドでインストールして、fc-list
コマンドが使用できるようになるか確認した上で、再度インストールを試してみてください。
$ sudo yum –y install fontconfig
※この記事では、X11転送の確認用にxeyes
アプリケーションをインストールしています。このインストール中、依存関係によりfontconfig
が一緒にインストールされるため、日本語の表示には問題ありませんでした。xeyes
をインストールしなかった場合は、別途fontconfig
をインストールする必要があります。
##Q3. Xアプリケーションを起動したが、Windows側にX転送エラーが表示される
次のようなX転送のエラーが出るときは、XmingがWindows側で起動していることを確認してください。
##Q4. レポートサーバー起動時にWindows側にX転送エラーが表示され、レポートサーバーが起動できない
Q3と同様のエラーが表示され、レポートサーバーの起動中に次のようなjava.awt.AWTError
が出力される場合は、ヘッドレスモードの設定が正しく行われていない可能性があります。この記事の[ヘッドレスモードの設定とレポートサーバーの起動]の項目を参考に、起動シェルスクリプトの編集を行ってみてください。
Exception in thread "main" java.awt.AWTError: Can't connect to X11 window server using 'localhost:10.0' as the value of the DISPLAY variable.
at sun.awt.X11GraphicsEnvironment.initDisplay(Native Method)
at sun.awt.X11GraphicsEnvironment.access$200(X11GraphicsEnvironment.java:65)
(以下省略)