2013-06-11

Xming と Teraterm SSH を使って Lubuntu の X クライアントに接続する

◆概要

Oracle VirtualBOX 上の Lubuntu マシンの X クライアントを Windows パソコンから操作したいので「リモートデスクトップ接続」を使用していましたが、反応が遅いので別の方法を考えました。

Xming は Windows 用の X サーバーです。
これを 自宅のパソコンにインストールして、Lubuntu の X クライアントをパソコン上のデスクトップに表示されます。

方法は色々有るんですが次のようにしたいと思います。

  • Xming 起動と同時にターミナルが開く
  • ターミナル上で X クライアントを実行すると Windows パソコン上で表示される
  • このとき「export DISPLAY=xxx.xxx.xxx.xxx:0.0」等の設定が要らないこと。
  • できればターミナルは使い慣れた Teraterm である事。
  • できれば自動的にログインされる事。

◆アジェンダ

次の手順で実行します。
  1.  X フォントサーバー (xfs) をインストール
  2.  SSH X 転送を許可
  3.  Teraterm マクロで 自動ログイン
  4.  Xming をインストール
  5.  XLaunch で接続用ファイルを作成


◆X フォントサーバー (xfs) をインストール

Lubuntu サーバー上のフォントを使用したいのでフォントサーバーをインストールします。
$ sudo apt-get install xfs
ついでに、IPAフォントを入れました。
$ sudo apt-get install fonts-ipafont
インストールが成功したら設定を行います。

◇外部接続の許可

デフォルトでは外部からの接続は無効化されています。
この設定を変更するために設定ファイルを編集します。

$ sudo vi /etc/X11/fs/config

(変更前)
# turn off TCP port listening (Unix domain connections are still permitted)
no-listen = tcp

(変更後)
# turn off TCP port listening (Unix domain connections are still permitted)
#no-listen = tcp

◇フォントパスの追加

デフォルトではフォントパスは限られています。
サーバーの環境に合わせてフォントパスを追加していきます。
(変更前)
# paths to search for fonts
catalogue = /usr/share/fonts/X11/misc/,/usr/share/fonts/X11/cyrillic/,/usr/share/fonts/X11/100dpi/:unscaled,/usr/share/fonts/X11/75dpi/:unscaled,/usr/share/fonts/X11/Type1/,/usr/share/fonts/X11/100dpi/,/usr/share/fonts/X11/75dpi/

(変更後)
# paths to search for fonts
catalogue = /usr/share/fonts/truetype/ttf-dejavu/,/usr/share/fonts/truetype/liberation/,/usr/share/fonts/truetype/ubuntu-font-family/,/usr/share/fonts/truetype/msttcorefonts/,/usr/share/fonts/truetype/freefont/,/usr/share/fonts/truetype/nanum/,/usr/share/fonts/truetype/takao-mincho/,/usr/share/fonts/truetype/wqy/,/usr/share/fonts/truetype/takao-gothic/,/usr/share/fonts/truetype/vlgothic/,/usr/share/fonts/opentype/ipafont-gothic/,/usr/share/fonts/opentype/ipafont-mincho/,/usr/share/fonts/X11/misc/,/usr/share/fonts/X11/cyrillic/,/usr/share/fonts/X11/100dpi/:unscaled,/usr/share/fonts/X11/75dpi/:unscaled,/usr/share/fonts/X11/Type1/,/usr/share/fonts/X11/100dpi/,/usr/share/fonts/X11/75dpi/

ファイルを保存したら xfs を再起動します。
$ sudo /etc/init.d/xfs restart
Stopping X font server: xfs.
Setting up X font server socket directory /tmp/.font-unix...done.
Starting X font server: xfs.

◆ SSH X 転送を許可

SSH には X 転送 (X11 Forwarding) 機能があります。
SSH トンネルによって X プロトコルを暗号化する機能です。

これの何が良いのかと言いますと、よりセキュアであると言う点もそうですが、実は環境変数「DISPLAY」の値が自動的に割り当てられるので、いちいち設定しなくても良いというのが今回の狙いです。


この機能はデフォルトで許可されていると思いますが、念のため設定を確認します。

$ grep X11 /etc/ssh/sshd_config
X11Forwarding yes       <- no になっていたら yes に変更します
X11DisplayOffset 10

X11DisplayOffset の値は環境変数「DISPLAY」に設定されるディスプレイ番号です。
デフォルトは「10」このときの「DISPLAY」の値は「localhost:10.0」になります。

もし sshd_config を変更した場合は、sshd を再起動します。
※ ssh 接続中であれば気をつけてください。
$ sudo service ssh restart

◆Teraterm マクロで 自動ログイン 【Windows パソコン】

ここからは Windows パソコンでの操作になります。
始めに、SSH での自動ログインを行う Teraterm マクロ (TTL) を作成します。

テキストエディタで次の内容を記述します。
; SSH ログイン
connect '192.168.0.10:22 /ssh /ssh-X /auth=password /user=hoge /passwd=hogehoge'

; DISCONNECTするまで待つ
waitevent 4


名前を付け保存で任意の場所に保存します。
今回は「C:\Program Files\Teraterm\ssh_login.ttl」としました。

作成した「*.ttl」ファイルを「ttpmacro.exe」にドラッグ&ドロップするとマクロが実行されます。


マクロを実行して、Teratermが起動し自動的にログイン出来ることを確認します。
 

このとき、小さなマクロウィンドウが表示されますが、Teratermでログイン中は表示され続けます。

これはマクロ内で「waitevent 4」とすることで、切断するまでマクロを待機状態にしている為です。


◆Xming をインストール 【Windows パソコン】

Xmingをダウンロードします。
今回は 6.9.0.31 を使用しました。現時点の最新版です。

SourceForge.JP からダウンロードします。
http://sourceforge.jp/projects/sfnet_xming/releases/

リリースファイルから「Xming-6-9-0-31-setup.exe」をダウンロードします。

インストーラを実行します。
基本的には「Next」を押し続けるだけで問題ありません。


インストール先を指定します。

Full Installation を選びます。

  ショートカットの作成オプションです。
 Install ボタンを押すとファイルのコピーが始まります。
 終了しました。

◆XLaunch で接続用ファイルを作成 【Widnows パソコン】

スタートメニューから「XLaunch」を起動します。
「Multiple window」を選びます。
 「Start a program」を選びます。
「Start program」の欄にマクロ実行のコマンドを書きます。
「Run Local」 にチェックを入れます。


(コマンド例)

"<TeraTermインストール先>\ttpmacro.exe" "<先ほど保存したマクロのフルパス"

「Remote font server (if any)」欄に「サーバーIP:ポート番号」を書きます。
今回は「192.168.12.10:7100」を使用しました。

「Additonal parameters for Xming」には「-dpi 100」を入力します。
これはフォントサイズが小さく感じるのでDPIを100にして大きく見えるようにするオプションです。
個人的に、特にこだわりがなければこのオプションは指定した方が良いと思います。
 「次へ」を押した時に先ほど入力したフォントサーバのポート番号「:7100」が自動的に削除されました。「:7100」はデフォルトのポート番号なので省略できるようです。気にせず「次へ」を押します。
 「Save configuration」をクリックします。
 デスクトップに保存します。拡張子は「.xlaunch」です。
 「完了」をクリックして終了します。


完了を押すとXmingがスタートし、同時にTeratermが開きます。

なぜかマクロウィンドウは表示されませんが、正常に動いています。
予想外の動作ですが結果的に文句ナシです!


Teraterm上で gvim (グラフィカルVim) を起動します。
フォントのプレビュー動かすと、正常にフォントサーバーも機能している様です。


ここでTeratermをログアウトして見ると、Xmingも終了します。
これは、Teratermの切断を検知してマクロが終了した為です。


◆おまけ

Xming 上で起動した gvim で日本語入力できませんでした。

これは日本語入力(IM)が起動していない為です。
私の環境ですと「ibus-daemon -d -x」コマンドを入力する事で日本語入力も可能です。


ただ、毎回ログインする度にコマンド入力するのは面倒ですので自動化したいと思います。
色々とやり方は考えられますが、今回はLubuntu側のログインスクリプトでTeratermの設定をトリガーにコマンドを実行したいと思います。
マクロで実行する方法も考えたんですが、設定が分散するので出来るだけ一カ所にまとめたいので、やや一般的ではない方法でやってみました。



Teraterm の上部メニューから設定→TCP/IPを開きます。
端末タイプを「teraterm」に書き換えます。


上部メニューから設定→設定の保存を選びます。

「*.ini」ファイルに名前を付けて保存します。今回は「xming_linux.ini」としました。


次に、先ほど作成した「ssh_login.ttl」を書き換えます。
この変更で、先ほど保存した「*.ini」ファイルが参照されるはずです。

(変更前)
; SSH ログイン
connect '192.168.12.10:22 /ssh /ssh-X /auth=password /user=hoge /passwd=hogehoge'

(変更後)
; SSH ログイン
connect '192.168.12.10:22 /ssh /ssh-X /auth=password /user=hoge /passwd=hogehoge /f=xming_linux.ini'

続いて lubuntu 側で作業を行います。
ユーザのログインスクリプトを編集します。

$ vi ~/.bashrc

(追記)
# check xming and teraterm
if [ "$SSH_TTY" != "" ] && [ "$TERM" == "teraterm" ]; then
  ibus-daemon -d -x
fi


内容を説明しますと、二つの環境変数を参照して条件に一致する場合は「ibus-daemon」を起動しています。

$SSH_TTY は SSH 接続したときの仮想端末の名前です。
SSH 接続以外の場合は変数自体が存在しません。
変数が存在するかどうかをチェックしています。

$TERM はターミナルの種類を表す環境変数です。
先ほど変更した端末タイプがこの変数に設定されます。
変数の値が「teraterm」かどうかをチェックしています。

この2つの条件に一致した場合、日本語入力を起動します。
(正確にはインプットメソッドフレームワークですが……)


余談ですが「TERM」変数は terminfo が認識する端末タイプを設定する必要があります。
適当な値を設定すると宜しくないので注意が必要です。

設定出来る端末タイプは「toe -a」コマンドで確認できます。
今回初めて調べたんですが TeraTerm 様の端末タイプは「teraterm」「teraterm2.3」「teraterm4.59」の 3つが登録されていました。

とはいえ、TeraTermのデフォルトは「xterm」ですし、これを使っている人は殆ど居ないだろうと思いましたのでこんなやり方もありますとと言う意味でご紹介しました。

2013-06-05

SOS JobScheduler

Oracle Virtual BOX 上の Lubuntu マシンに SOS JobScheduler をインストールしたので備忘録。

◆ SOS JobScheduler


JobScheduler は ドイツのSOS社 (http://www.sos-berlin.com/) が開発して GPL ライセンスで公開しているオープンソースソフトウェア。
バッチ処理による情報システムの自動化を支援するアプリケーション。


「ジョブ管理」とか「ランブック自動化」とかいうジャンルのアプリケーション。
商用製品だと日立JP1、IBM Tivoli、HP OpenView、富士通System Walkerなどの競合製品です。

Zabbix と組み合わせて、監視と障害対応の自動化、定期作業の自動化などに使われていくと思います。

◆ Lubuntu

Lubuntu ( http://lubuntu.net/ ) は Ubuntu (Debian GNU Linuxベースのデスクトップ向けディストリビューション)の派生したものです。

普段から使用しているので採用。

lubuntu-13.04-desktop-i386.isoをダウンロードして VM 上にインストールしました。
詳細は割愛しますが、openssh-serverパッケージをインストールしTeratermで作業しつつ
たまにリモートデスクトップ接続でGUI操作などを行ってます。

◆ 概要

今回はJobSchedulerのインストールをします。
アジェンダはこんな感じです。
  1. Oracle Java JDK7 インストール
  2. MySQL インストール
  3. JobSchedulerのダウンロード
  4. JobSchedulerのインストール
  5. インストール語の確認


◆Oracle Java JDV7 インストール


必須パッケージであるJavaをインストールします。

公式リポジトリからはインストールできない。詳細はググって頂くとして、次のコマンドでインストールできます。

$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java7-installer

ライセンスについて注意メッセージが表示されるので、エンター or スペースで次に進みます。


※画像では「<いいえ>」を選んでますが、「<はい>」を選んでください。

 

◆MySQLインストール

JobSchedulerがデータストアとして使用するRDBをインストールします。

apt-get install するだけで楽ちんです。

$ sudo apt-get install mysql-server

パスワードを聞いてきます。MySQLの管理者アカウントのパスワードを設定します。


続いてJDBC ドライバをインストールします。これもコマンドで一発です。

$ sudo apt-get install libmysql-java

 「jobscheduler」データベースを作成します。中身は空っぽで十分です。

$ mysql -uroot -p
mysql> CREATE DATABASE jobscheduler;
mysql> SHOW DATABASES;
mysql> grant all privileges on *.* to root@'%' IDENTIFIED BY 'Password' WITH GRANT OPTION;


ココで、/etc/mysql/my.cnfを編集します。
Ubuntu系のディストリビューションでは、 自ホストを「127.0.1.1」に割り当てており、MySQLのbind-addressを変更する必要があります。

$ sudo vi /etc/mysql/my.cnf
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address            = 127.0.0.1
bind-address            = 127.0.1.1       ←これを追加した

 MySQLを開始します。

$ sudo /etc/init.d/mysql restart

◆SOS JobScheduler のダウンロード

インストールするためにファイルをダウンロードします。

まずはファイルをダウンロードすべく、Google先生にお伺いを立てましょう。
このようにGoogle先生が教えてくれるので「Downloads」をクリックします。



表示されたWebページをスクロールしると最新版のダウンロードリンクが表示されますので「Full Install」をクリックしましょう。




sourceforgeに移動しますので、ファイルがダウンロードされるのを待ちましょう。自動でダウンロード出来ない場合は、「direct link」をクリックするかその他のミラーサイトからダウンロードします。


おおぅっと、間違えて親機のWindowsでファイルをダウンロードしてしまいました。
TeraTermを使ってSSHコピーします。




便利ですね。

ここでようやく気が付きましたが、Lubuntu上のwgetでダウンロードするのが楽でした。

$ wget http://sourceforge.net/projects/jobscheduler/files/jobscheduler_linux.1.3.12.3137.tar.gz  ※実際には一行


さて、ここからはLubuntuデスクトップ上で作業します。

今回は、VirtualBOXのリモートデスクトップ機能を使ってGUI操作を行います。詳細は省きますので興味の有る方はGoogle先生に教えを請うてください。






使い慣れたTeratermで作業したいのでSSHログインして、DISPLAY環境変数をセットします。

$ export DISPLAY=:0

Xクライアントを起動して動作確認します。
$ xeyes &
[1] 3727

 ◆Job Scheduler インストール


以降では、「~/Downloads/sos/」の下にダウンロードした.tar.gzファイルがある前提です。

tar.gz ファイルを展開します。

$ cd /var/tmp
$ tar xfvz ~/Downloads/sos/jobscheduler_linux.1.3.12.3137.tar.gz
jobscheduler.1.3.12.3137/install_scheduler.txt
jobscheduler.1.3.12.3137/jobscheduler_install.xml
jobscheduler.1.3.12.3137/jobscheduler_linux32.jar
jobscheduler.1.3.12.3137/licence.gpl
jobscheduler.1.3.12.3137/licence.txt
jobscheduler.1.3.12.3137/scheduler_installation_de.pdf
jobscheduler.1.3.12.3137/scheduler_installation_en.pdf
jobscheduler.1.3.12.3137/setup.sh

インストーラを起動します。
$ cd jobscheduler.*
$ ./setup.sh
sudo -E java -jar ./jobscheduler_linux32.jar
[sudo] password for job:        ←パスワードw入力

以降は画面の指示に従ってインストールしていきます。

言語を選択します。今回は「eng」 です。





デフォルトでは「/opt/sos-berlin.com/jobscheduler」にインストールされます。
必要があればここで指定します。

コンフィギュレーションとログの保存先です。

デフォルトは「ホームディレクトリ/sos-berlin.com/jobscheduler/scheduler/config」です。
容量が気になりますが今回はデフォルトのままで行きます。


インストールする パッケージを選択します。
たいした容量ではないのですべて選択するのが良いと思います。

「JobScheduler ID」を入力します。分散環境ではそれぞれのインスタンス事にユニークなIDにする必要が有るようです。今回はスタンドアロンなので何でもよさそう。

また、JobSchedulerは「4444/TCP」を使いますが、既に使用中であればココで変更します。

アクセスを制御したい場合は、「Allow Host」に接続を許可するIP又はホスト名を入力します。
すべてのホストを許可する場合は「0.0.0.0」です。
 

分散環境のオプションです。今回はスタンドアロンを選択します。

メール通知用の設定です。
今回はデフォルトのままにします。

メール通知の続きです。
今回はデフォルトのママにします。

自動アップデートの設定です。
比較的ひまな時間帯が良いと思いますが、適当に……。

データベースの設定です。
今回は同じホスト上のMySQLですので、「Host」は自ホスト、「Port」は「3306」を指定します。
「Database」は先ほど作成した「jobscheduler」、「User」 は「root」、パスワードは先ほど指定した「rootパスワード」を入力します。
 ※Lubuntuのrootではないので注意

JDBCドライバのパス「/usr/share/java/mysql.jar」を入力。
これはシンボリックリンクで実体は「/usr/share/java/mysql-connector-java.jar」です。


Cronの設定をします。
今回はデフォルトですが、その内設定変更が必要な気がします。(まだよく分ってません)

インストール中です。

初期化のプロセスが動きました。
表示されるメッセージは、先ほど指定したログ出力先に「Install_*.log」に 記録されますのでエラー等が有る場合はそちらを参照してください。


インストールが完了しました。

◆インストール後の確認

インストール後、JobSchdulerは自動的に開始されています。

親機のブラウザから「http://VMのIP:4444/」にアクセスします。
(またはVM上で「http://localhost:4444/」にアクセスして下さい)


Webアプリケーションが表示されました。


JobSchedulerの開始と終了を確認します。

停止は「jobschduler.sh stop」で行います。
$ cd /opt/sos-berlin.com/jobscheduler/scheduler ←インストール先に移動
$ ./bin/jobscheduler.sh stop

________________________________________________________________________

Job Scheduler instance: scheduler
.............. version: 1.3.3124-b118f08157a1f8b18c836653c148c3bde5460575
......... operated for: lub:4444
........ running since: 2013-06-05 11:13:48
................ state: running
............. cpu used:
........... job chains: 1
................. jobs: 13
............... orders: 0
..... remote instances: 0, connected instances: 0
________________________________________________________________________

No jobs are running for this instance
Shutting down JobScheduler...
<?xml version="1.0" encoding="ISO-8859-1"?>
<spooler><answer time="2013-06-05 11:27:40.749"><ok/></answer></spooler>

 
開始は「jobscheduler.sh start」を実行します。
$ ./bin/jobscheduler.sh start
Starting JobScheduler...
同じスクリプトに「status」を指定して実行すると、現在のステータスがXML形式で表示されます。
情報量が多く見づらいので、xmllintで整形すると良いでしょう。※それでも多いのでgrepしてます。
$ ./jobscheduler.sh status | xmllint  --format - | grep "<state" | tr ' ' '\n'
<state
time="2013-06-04
18:10:11"
id="scheduler"
spooler_id="scheduler"
spooler_running_since="2013-06-04
18:04:50"
state="running"
log_file="/home/take/sos-berlin.com/jobscheduler/scheduler/logs/scheduler-2013-06-04-180450.scheduler.log"
version="1.3.3124-b118f08157a1f8b18c836653c148c3bde5460575"
pid="2105"
config_file="/home/take/sos-berlin.com/jobscheduler/scheduler/config/scheduler.xml"
host="lub"
need_db="yes"
tcp_port="4444"
udp_port="4444"
db="jdbc
-id=spooler
-class=com.mysql.jdbc.Driver
jdbc:mysql://lub:3306/jobscheduler
-user=root"
loop="365"
waits="194"
wait_until="2013-06-04
18:34:55.352">
XMLなので見づらいですがよく見ると「state="running"」と出力されているのが分ります。
また、開始日時や pid 何かも出力されています。

これらの情報はブラウザアクセスする事でも見られますので、やりやすい方でお確かめください。


プロセスツリーを確認してみます。
$ pstree -a -p -l 2105
scheduler,2105 -service -id=scheduler -sos.ini=/home/take/sos-berlin.com/jobscheduler/scheduler/config/sos.ini -ini=/home/take/sos-berlin.com/jobscheduler/scheduler/config/factory.ini -config=/home/take/sos-berlin.com/jobscheduler/scheduler/config/scheduler.xml -param=/home/take/sos-berlin.com/jobscheduler/scheduler -cd=/home/take/sos-berlin.com/jobscheduler/scheduler -include-path=/home/take/sos-berlin.com/jobscheduler/scheduler -log-dir=/home/take/sos-berlin.com/jobscheduler/scheduler/logs -pid-file=/home/take/sos-berlin.com/jobscheduler/scheduler/logs/scheduler.pid
  ┠{scheduler},2106
  ┠{scheduler},2107
  ┠{scheduler},2108
  ┠{scheduler},2109
  ┠{scheduler},2110
  ┠{scheduler},2111
  ┠{scheduler},2112
  ┠{scheduler},2113
  ┠{scheduler},2114
  ┠{scheduler},2115
  ┠{scheduler},2116
  ┠{scheduler},2117
  ┠{scheduler},2118
  ┠{scheduler},2119
  ┠{scheduler},2120
  ┠{scheduler},2121
  ┠{scheduler},2122
  ┠{scheduler},2123
  ┗{scheduler},2124
schdulerプロセスが20個開始されています。
ログ出力先の引数(-log-dir)を見つけました。その内、出力先を変更したい所です。


と言う事で今回はここまでです。