Amazon EC2上のRed Hat Enterprise LinuxにX11転送でElixir ReportをGUIインストールする手順

  • 0
    いいね
  • 0
    コメント

    この記事はクラウド環境の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」のインストールと基本設定、使い方

    1. Xmingインストーラをダウンロードサイトからダウンロードします。本記事の作成時(2016年11月)で最新のXming(Xming-6-9-0-31-setup.exe)と、Xming-fonts(Xming-fonts-7-7-0-10-setup.exe)をダウンロードします。1ダウンロードファイル選択.png  

    2. Xmingのインストーラをダブルクリックで起動します。選択項目は基本的にデフォルト設定を受け入れてインストールします。[Next]で進みます。
      2install01.png


    3. インストール先を指定して次に進みます。


    4. コンポーネントの選択画面では、デフォルト設定を受け入れて進みます。3install03.png


    5. アイコンやタスクの選択ステップも同様に、デフォルトのまま進みます。4install05.png


    6. インストール前の確認項目をチェックして進み、インストールを完了します。5install07.png


    7. インストールの完了画面で[Launch Xming]にチェックを入れて終了すると、Xmingが起動してタスクトレイにアイコンが表示されます。
      6icon.png

      [注意]Xming起動時に、Windowsファイアウォールの警告が表示されることがあります。その場合は、アクセスを許可します。

    8. 次にXming-fontsをインストールします。Xming-fontsのインストーラを起動し、コンポーネントの選択でデフォルトを受け入れます。
      7fontinstall01.png

    9. インストールの内容を確認して進めると、インストールが完了します。8fontinstall03.png

    Amazon EC2 Red Hatインスタンスの作成と準備

    Amazon EC2上に、デフォルトの構成でRed Hatインスタンスを作成します。以前の記事[Red Hatインスタンスの作成と準備]セクションを参考にしてください。

    インスタンスの作成と、Windows上のTera TermからRed Hatインスタンスへ接続するまでの手順が完了します。

    X11転送の設定をする

    X11転送に関する、Red Hat側およびWindows側の設定と確認を行います。

    Linux側の設定

    1. Red Hatインスタンスで、X11転送が有効化されているか確認します。/etc/ssh/sshd_config内で、X11Forwardingyesになっていれば問題ありません。

      $ sudo cat /etc/ssh/sshd_config |grep X11
      X11Forwarding yes
      #X11DisplayOffset 10
      #X11UseLocalhost yes
      #       X11Forwarding no
      
    2. 手順1で、X11Forwardingnoになっている場合は、/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
      
    3. XアプリケーションをX11転送によりWindows上に表示できるか確認するため、今回はxeyesというXアプリケーションをRed Hatインスタンスにインストールしておきます。

      $ sudo yum –y install xeyes
      

    Windows側の設定とテスト

    1. Windows側でXmingが起動していることを確認します。

    2. Tera Termの設定で、リモートのXアプリケーションをローカルに表示する設定を行います。Tera Termの[設定]-[SSH転送]をクリックします。
      9TeraTerm_SSH転送設定.png

    3. [リモートの(X)アプリケーションをローカルのXサーバに表示する]にチェックを入れて、[OK]をクリックします。
      10TeraTerm_SSH転送設定01.png

    4. 一旦Tera Termからログアウトして、再度ログインし直します。

    5. DISPLAY変数が設定されているかコマンドで確認します。

      $ echo $DISPLAY
      
    6. 前の手順で何も返ってこなかった場合は、先ほどインストールした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
      
    7. 一旦Tera Termでログアウトします。

      $ exit
      
    8. 再度Tera TermでRed Hatインスタンスにログインして、次のコマンドでDISPLAY変数を確認します。筆者の環境では自動でlocalhost:10.0が設定されていました。

      $ echo $DISPLAY
      localhost:10.0
      
    9. xeyesを実行してみます。無事Windows側にxeyesアプリケーションが表示されました。

      $ xeyes
      

      11xeyes.png

      [注意]次のようなX転送のエラーが出るときは、XmingがWindows側で起動していない可能性があります。起動していることを確認してください。
      12TTSSHエラー.png

    レポートサーバーのインストーラをRed Hatに転送する

    Tera Termを利用して、Windows側にあるElixir ReportのレポートサーバーのLinux OS用インストーラ(elixirreport87_linux64.bin)と、ライセンスファイル(*.license)をRed Hatインスタンスに転送します。

    この手順については、以前の記事[レポートサーバーのインストーラをRed Hatに転送する]を参照してください。

    ファイルの転送が完了したら、次の準備を行っておきます。

    1. インストールは現在ログインしている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
      
    2. 転送したインストーラに実行権限を与えます。

      $ 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)
    
    

    必要なライブラリをインストールして実行時エラーを解消する

    1. 上記のエラーを最初から確認すると、まずlibc.so.6ファイルが見つからないという内容のエラーが出力されているので、次のコマンドでlibc.so.6ライブラリをインストールします。

      $ sudo yum -y install libc.so.6
      
    2. 次に発生しているInvocationTargetExceptionは、X11のライブラリが不足していることが原因のようです。必要なライブラリをインストールします。

      $ sudo yum –y install libXtst
      

    起動したGUIインストーラの日本語が□に…フォントをインストールする

    1. 再度インストーラを実行してみます。

      $ ./elixirreport87_linux64.bin
      
    2. インストーラのGUIが起動しましたが、日本語が□表示になっています。Linux側に日本語フォントがインストールされていないことが原因でしょう。左下のキャンセルボタンをクリックしてインストールを中止します。
      13GUIトーフになる.png

      14終了02.png

    3. 日本語フォントをインストールします。VLゴシック、IPA明朝、IPAゴシックをインストールしました。

      $ sudo yum -y install vlgothic-fonts ipa-mincho-fonts ipa-gothic-fonts 
      

    GUIインストールを実行する

    1. 再度インストーラを起動します。今度は日本語も表示されるようになりました。
      15GUI_01.png

    2. [次へ]で進み、[使用許諾契約の条項に同意する]にチェックして、進みます。
      16GUI_02.png

    3. [ライセンスキーファイルの登録]をクリックして、登録するライセンスファイルを選択します。
      17GUI_03.png

    4. インストールするモジュールにチェックが入っていることを確認して、次に進みます。この画面では、先ほどの手順で追加したライセンスでインストールできるモジュールだけが表示されます。18GUI_04.png

    5. レポートサーバーで使用するポート(今回はデフォルトの7001)、ログレベルを確認します。デフォルトのまま進みます。
      19GUI_ポート設定.png

    6. インストール先ディレクトリは、ec2-userにアクセス権のある場所を選択します。今回はユーザーディレクトリの下にします。
      20GUI_インストール先.png

      [注意]ec2-userに書き込み権限のない場所を指定すると、エラーが表示されます。

    7. 確認画面で内容を確認したら、[インストール]をクリックします。
      21GUI_確認.png

    8. 次の画面が表示されれば完了です。
      22GUI完了.png

    ヘッドレスモードの設定とレポートサーバーの起動

    インストールはX11転送でGUIを利用しましたが、今後、レポートサーバーの実行時にX Window Systemに接続できない場合は、Javaのヘッドレスモードを有効にする必要があります。

    1. レポートサーバーのインストール先/binディレクトリに移動します。筆者の環境では/home/ec2-user/ElixirReport87J/bin/になります。

      $ cd /home/ec2-user/ElixirReport87J/bin
      
    2. レポートサーバーの起動シェルスクリプトをバックアップした後、編集します。

      $ 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 \
       (以下省略)
      
    3. レポートサーバーの起動シェルスクリプトを実行します。

      $ ./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
      
    5. Windows上のブラウザからレポートサーバーのWebインターフェースにログインしてみます。

      http://<パブリックIP>:7001
      

      23WebインターフェースURL.png

      【注意】ログイン画面が表示されないときは、以下のような原因が考えられます。
      ・レポートサーバーの起動に失敗している
      ・Red Hatインスタンスのセキュリティグループの設定で、ポート”7001”を追加していない

    6. ログイン画面が表示されたら、デフォルトで用意されている次の管理者ユーザーでログインします。

      ユーザー名: admin
      パスワード: sa
      
    7. [リポジトリ]以下のサンプルテンプレートを実行してみます。
      [samples]‐[demo]-[sales2]-[sales2.rml]を選択して、出力形式に”PDF”を選んで[OK]をクリックします。
      24レポート生成PDF選択.png

    8. PDF形式のレポートが生成できました。
      25フォントインストール後の結果.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側で起動していることを確認してください。
    12TTSSHエラー.png

    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)
    (以下省略)