Teratermマクロを使ってHinemosを自動構築
投稿日: / 更新日:
■はじめに
こんにちは!
TeraTermマクロを使ってHinemosを自動構築してみようと思います。
■TeraTermマクロについて
1.TeraTermとは
まず、TeraTermの概要を紹介します。
TeraTermは、「telnet」や「SSH」を使用してネットワーク上の別のコンピュータを操作することができるWindows向けのソフトです。
2.TeraTermマクロとは
マクロとは、操作を自動化させる技術の総称です。
そのため、TeraTermマクロというと、Tera Term の操作を自動化するための技術、という意味になります。
■TeraTermマクロを使ってHinemosを構築する
1.TeraTermマクロで必要なコマンド
TeraTermマクロでHinemosを構築するのに必要なコマンドを簡単に紹介します。
connect <command line parameters> | Tera Term 本体から対象ホストに接続します。 |
disconnect [<confirm>] | Tera Term とホストの間の通信を終了させます。confirmが1の場合確認ダイアログを表示し、0の場合表示しません。 |
sendln <data1> <data2>…. | データと改行を送信します。 |
wait <string1> |
文字列を待ちます。timeoutが0より多い場合、timeoutの秒数すぎるとタイムアウトが発生します。 文字列を受信するとresultに1、タイムアウトすると0が代入されます。 |
setdir <dir> | マクロの現在のディレクトリを <dir> に変更します。 |
include <include file name> | 引数に指定したマクロファイルを読み込み、マクロ実行を行います。 |
fileopen <file handle> <file name> <append flag> | ファイルをバイナリモードでオープンし、ファイルハンドル<file handle>に指定します。 |
filereadln <file handle> <strvar> | ファイルハンドル <file handle> で指定されるファイルの、ファイルポインタのある行を1行読み込みます。 読み込み完了時、ファイルポインタを次の行へ移動しておきます。 |
filewriteln <file handle> <data> | ファイルハンドル <file handle> で指定されるファイルへ、<data> と改行文字 (CR+LF) を書き込みます。 |
fileclose <file handle> | ファイルハンドル <file handle> で指定されるファイルをクローズします。 |
strconcat <strvar> <string> | 文字列変数 <strvar> の文字列値の最後に 文字列 <string> を継ぎ足します。 |
strsplit <strval> <separator> | 文字列 <strval> から、区切り記号 <separator> で区切られた部分文字列を取り出して、システム変数 groupmatchstr1 ~ groupmatchstr9 に返します。 |
sprintf2 <strvar> “FORMAT” [<ARGUMENT> …] | 引数の数値や文字列をフォーマットして、文字列型変数 <strvar> に代入します。 |
getdate <strvar> [<format>] | 現在の日付を文字列変数 <strvar> に <format> に従った形式で格納します。 |
pause <time> | TTL の実行を <time> 秒だけ休止します。 |
filestat <file name> <size> | ファイルもしくはフォルダ <file name> の統計情報を取得します。取得に失敗した場合、resultに-1を返します。 |
scpsend <file name> [<destination file name>] | ファイル <file name> を SCP (Secure Copy Protocol) プロトコルで送信します。 |
continue | “for” や “while” のループの実行途中で、そのループの次の繰り返し処理 (反復処理) に制御を移行します。 |
call <label> | <label> 行から始まるサブルーチンをコールします。 |
return | サブルーチンを抜け、メインルーチンへ戻ります。 |
2.TeraTermマクロを使ってHinemosマネージャを構築する
いよいよHinemosマネージャを構築していきます!
使用しているOSは Red Hat Enterprise Linux 8.6
使用しているTeraTermのバージョンは 5.0
構築するHinemosのバージョンは 7.0.1 です。
以下のファイルを任意のフォルダに作成します。
必要に応じて manager.cfg と ManagerLoginInfo.txt を変更してください。
・manager.ttl
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 |
; cfgファイルを読み込む include 'manager.cfg' ; ログ出力 setdir LogDir fileopen Logfh LogFile 1 logmessage = 'INFO マクロを開始します' call Logwrite ; ログイン情報のファイルの読み込み setdir LoginInfoDir fileopen LIfh LoginInfo 0 logmessage = 'INFO ログイン情報を読み込みました' call Logwrite ; ログイン情報を一つ読み込む filereadln LIfh LoginInfo ; エラーフラグ errflg = 0 ; 本処理開始 do while result == 0 ; ログイン strsplit LoginInfo ',' IPaddress = groupmatchstr1 COMMAND = IPaddress strconcat COMMAND ':22 /ssh /2 /auth=password /user=' strconcat COMMAND groupmatchstr2 strconcat COMMAND ' /passwd=' strconcat COMMAND groupmatchstr3 connect COMMAND if result == 2 then ; 接続成功時 sprintf2 logmessage 'INFO %s に接続しました' IPaddress call Logwrite pause 3 else ; 接続失敗時 sprintf2 logmessage 'ERROR %s に接続できませんでした' IPaddress call Logwrite errflg = 1 pause 3 ; 次のログイン情報を読み込む filereadln LIfh LoginInfo continue endif ; カレントディレクトリを変える sendln 'cd /tmp/' ; Managerインストール sendln 'rpm -qa | grep hinemos | grep manager' timeout = 5 wait 'x86_64' if result == 0 then ; インストールするファイルがあるか確認 sendln 'ls' wait ManagerRPM if result != 1 then ; アップロードするファイルがあるか確認 sprintf2 upfile '%s\%s' ManagerDir ManagerRPM filestat upfile size if result == -1 then ; アップロードするファイルがない時の処理 sprintf2 logmessage 'ERROR %s が存在しません。' upfile call Logwrite errflg = 1 ; 切断 disconnect 0 sprintf2 logmessage 'INFO %s の接続を終了しました。' IPaddress call Logwrite pause 3 ; 次のログイン情報を読み込む filereadln LIfh LoginInfo continue endif ; インストールするファイルのアップロード開始 sprintf2 logmessage 'INFO %s をアップロードします。' upfile call Logwrite scpsend upfile '/tmp/' do pause 5 sendln 'ps -ef |grep -v grep |grep scp' waitln '/tmp/' loop while result == 1 sprintf2 logmessage 'INFO %s のアップロードが完了しました。' upfile else ; インストールするファイルが既に存在する場合 sprintf2 logmessage 'WARN %s は既に存在します。' ManagerRPM call Logwrite endif ; Hinemosマネージャをインストールする sendln 'rpm -ivh ' ManagerRPM sendln 'echo RPM finish' timeout = 120 wait 'RPM finish' wait 'RPM finish' sendln 'rpm -qa | grep hinemos | grep manager' timeout = 5 wait 'x86_64' if result == 1 then logmessage = 'INFO HinemosManager のインストールに成功しました。' else logmessage = 'ERROR HinemosManager のインストールに失敗しました。' errflg = 1 endif call Logwrite else logmessage = 'WARN HinemosManager は既にインストール済です' call Logwrite endif ; 切断 disconnect 0 sprintf2 logmessage 'INFO %s の接続を終了しました。' IPaddress call Logwrite pause 3 ; 次のログイン情報を読み込む filereadln LIfh LoginInfo loop ; ログイン情報のファイルを閉じる fileclose LIfh ; ログのファイルを閉じる logmessage = 'INFO マクロを終了します' call Logwrite fileclose Logfh ; 処理を終了する if errflg == 0 then messagebox '処理が正常に終了しました。' 'INFO' else messagebox '処理中にエラーが発生しました。詳しくはログを確認してください。' 'ERROR' endif end ;ログに書き込む(logmessage に内容を入れる) :Logwrite getdate datestr "[%Y-%m-%d %H:%M:%S] " strconcat datestr logmessage filewriteln Logfh datestr return |
・manager.cfg
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
; ログイン情報のあるファイルのディレクトリ(C:\Users\Administrator\Documents\) LoginInfoDir='C:\Users\Administrator\Documents\' ; ログイン情報のあるファイル(ManagerLoginInfo.txt) LoginInfo='ManagerLoginInfo.txt' ; インストールするHinemosManagerがあるディレクトリ(C:\Users\Administrator\Documents\) ManagerDir='C:\Users\Administrator\Documents\' ; インストールするManager(hinemos-7.0-manager-7.0.1-1.el8.x86_64.rpm) ManagerRPM='hinemos-7.0-manager-7.0.1-1.el8.x86_64.rpm' ; ログ出力先ディレクトリ(C:\Users\Administrator\Documents\) LogDir='C:\Users\Administrator\Documents\' ; ログ出力先(Manager.log) LogFile='Manager.log' |
・ManagerLoginInfo.txt
1 2 |
192.168.0.1,root,password 192.168.0.2,root,password |
次にTeraTermを起動して、コントロール(O)のマクロ(M)を選択します。
次に作成した manager.ttl を選択して処理を開始します。
処理終了後に以下の画面が出たらOKです。
ログは以下のようになっております。
3.TeraTermマクロを使ってHinemosクライアントとHinemosエージェントを構築する
続いてHinemosクライアントとHinemosエージェントも構築します。
以下のファイルを任意のフォルダに作成します。
必要に応じて client.cfg ・ ClientLoginInfo.txt ・ agent.cfg ・ AgentLoginInfo.txt を変更してください。
・client.ttl
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 |
; cfgファイルを読み込む include 'client.cfg' ; ログ出力 setdir LogDir fileopen Logfh LogFile 1 logmessage = 'INFO マクロを開始します' call Logwrite ; ログイン情報のファイルの読み込み setdir LoginInfoDir fileopen LIfh LoginInfo 0 logmessage = 'INFO ログイン情報を読み込みました' call Logwrite ; ログイン情報を一つ読み込む filereadln LIfh LoginInfo ; エラーフラグ errflg = 0 ; 本処理開始 do while result == 0 ; ログイン strsplit LoginInfo ',' IPaddress = groupmatchstr1 COMMAND = IPaddress strconcat COMMAND ':22 /ssh /2 /auth=password /user=' strconcat COMMAND groupmatchstr2 strconcat COMMAND ' /passwd=' strconcat COMMAND groupmatchstr3 connect COMMAND if result == 2 then ; 接続成功時 sprintf2 logmessage 'INFO %s に接続しました' IPaddress call Logwrite pause 3 else ; 接続失敗時 sprintf2 logmessage 'ERROR %s に接続できませんでした' IPaddress call Logwrite errflg = 1 pause 3 ; 次のログイン情報を読み込む filereadln LIfh LoginInfo continue endif ; カレントディレクトリを変える sendln 'cd /tmp/' ; WebClientインストール sendln 'rpm -qa | grep hinemos | grep web' timeout = 5 wait 'x86_64' if result == 0 then ; インストールするファイルがあるか確認 sendln 'ls' wait WebRPM if result != 1 then ; アップロードするファイルがあるか確認 sprintf2 upfile '%s\%s' WebDir WebRPM filestat upfile size if result == -1 then ; アップロードするファイルがない時の処理 sprintf2 logmessage 'ERROR %s が存在しません。' upfile call Logwrite errflg = 1 ; 切断 disconnect 0 sprintf2 logmessage 'INFO %s の接続を終了しました。' IPaddress call Logwrite pause 3 ; 次のログイン情報を読み込む filereadln LIfh LoginInfo continue endif ; インストールするファイルのアップロード開始 sprintf2 logmessage 'INFO %s をアップロードします。' upfile call Logwrite scpsend upfile '/tmp/' do pause 5 sendln 'ps -ef |grep -v grep |grep scp' waitln '/tmp/' loop while result == 1 sprintf2 logmessage 'INFO %s のアップロードが完了しました。' upfile else ; インストールするファイルが既に存在する場合 sprintf2 logmessage 'WARN %s は既に存在します。' WebRPM call Logwrite endif ; HinemosWebクライアントをインストールする sendln 'rpm -ivh ' WebRPM sendln 'echo RPM finish' timeout = 120 wait 'RPM finish' wait 'RPM finish' sendln 'rpm -qa | grep hinemos | grep web' timeout = 5 wait 'x86_64' if result == 1 then logmessage = 'INFO HinemosWebClient のインストールに成功しました。' else logmessage = 'ERROR HinemosWebClient のインストールに失敗しました。' errflg = 1 endif call Logwrite else logmessage = 'WARN HinemosWebClient は既にインストール済です' call Logwrite endif ; 切断 disconnect 0 sprintf2 logmessage 'INFO %s の接続を終了しました。' IPaddress call Logwrite pause 3 ; 次のログイン情報を読み込む filereadln LIfh LoginInfo loop ; ログイン情報のファイルを閉じる fileclose LIfh ; ログのファイルを閉じる logmessage = 'INFO マクロを終了します' call Logwrite fileclose Logfh ; 処理を終了する if errflg == 0 then messagebox '処理が正常に終了しました。' 'INFO' else messagebox '処理中にエラーが発生しました。詳しくはログを確認してください。' 'ERROR' endif end ;ログに書き込む(logmessage に内容を入れる) :Logwrite getdate datestr "[%Y-%m-%d %H:%M:%S] " strconcat datestr logmessage filewriteln Logfh datestr return |
・client.cfg
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
; ログイン情報のあるファイルのディレクトリ(C:\Users\Administrator\Documents\) LoginInfoDir='C:\Users\Administrator\Documents\' ; ログイン情報のあるファイル(ClientLoginInfo.txt) LoginInfo='ClientLoginInfo.txt' ; インストールするHinemosManagerがあるディレクトリ(C:\Users\Administrator\Documents\) WebDir='C:\Users\Administrator\Documents\' ; インストールするWebClient(hinemos-7.0-web-7.0.1-1.el8.x86_64.rpm) WebRPM='hinemos-7.0-web-7.0.1-1.el8.x86_64.rpm' ; ログ出力先ディレクトリ(C:\Users\Administrator\Documents\) LogDir='C:\Users\Administrator\Documents\' ; ログ出力先(client.log) LogFile='client.log' |
・ClientLoginInfo.txt
1 2 |
192.168.0.1,root,password 192.168.0.2,root,password |
・agent.ttl
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 |
; cfgファイルを読み込む include 'agent.cfg' ; ログ出力 setdir LogDir fileopen Logfh LogFile 1 logmessage = 'INFO マクロを開始します' call Logwrite ; ログイン情報のファイルの読み込み setdir LoginInfoDir fileopen LIfh LoginInfo 0 logmessage = 'INFO ログイン情報を読み込みました' call Logwrite ; ログイン情報を一つ読み込む filereadln LIfh LoginInfo ; エラーフラグ errflg = 0 ; 本処理開始 do while result == 0 ; ログイン strsplit LoginInfo ',' IPaddress = groupmatchstr1 COMMAND = IPaddress strconcat COMMAND ':22 /ssh /2 /auth=password /user=' strconcat COMMAND groupmatchstr2 strconcat COMMAND ' /passwd=' strconcat COMMAND groupmatchstr3 connect COMMAND if result == 2 then ; 接続成功時 sprintf2 logmessage 'INFO %s に接続しました' IPaddress call Logwrite pause 3 else ; 接続失敗時 sprintf2 logmessage 'ERROR %s に接続できませんでした' IPaddress call Logwrite errflg = 1 pause 3 ; 次のログイン情報を読み込む filereadln LIfh LoginInfo continue endif ; カレントディレクトリを変える sendln 'cd /tmp/' ; Agentインストール sendln 'rpm -qa | grep hinemos | grep agent | grep -v xcloud' timeout = 5 wait 'noarch' if result != 1 then ; インストールするファイルがあるか確認 sendln 'ls' wait AgentRPM if result != 1 then ; アップロードするファイルがあるか確認 sprintf2 upfile '%s\%s' AgentDir AgentRPM filestat upfile size if result == -1 then ; アップロードするファイルがない時の処理 sprintf2 logmessage 'ERROR %s が存在しません。' upfile call Logwrite errflg = 1 ; 切断 disconnect 0 sprintf2 logmessage 'INFO %s の接続を終了しました。' IPaddress call Logwrite pause 3 ; 次のログイン情報を読み込む filereadln LIfh LoginInfo continue endif ; インストールするファイルのアップロード開始 sprintf2 logmessage 'INFO %s をアップロードします。' upfile call Logwrite scpsend upfile '/tmp/' do pause 5 sendln 'ps -ef |grep -v grep |grep scp' waitln '/tmp/' loop while result == 1 sprintf2 logmessage 'INFO %s のアップロードが完了しました。' upfile else ; インストールするファイルが既に存在する場合 sprintf2 logmessage 'WARN %s は既に存在します。' AgentRPM call Logwrite endif ; Hinemosエージェントをインストールする sendln 'HINEMOS_MANAGER=' ManagerIP ' rpm -ivh ' AgentRPM sendln 'echo RPM finish' timeout = 120 wait 'RPM finish' wait 'RPM finish' sendln 'rpm -qa | grep hinemos | grep agent | grep -v xcloud' timeout = 5 wait 'noarch' if result == 1 then logmessage = 'INFO HinemosAgent のインストールに成功しました。' else logmessage = 'ERROR HinemosAgent のインストールに失敗しました。' errflg = 1 endif call Logwrite else logmessage = 'WARN HinemosAgent は既にインストール済です' call Logwrite endif ; 切断 disconnect 0 sprintf2 logmessage 'INFO %s の接続を終了しました。' IPaddress call Logwrite pause 3 ; 次のログイン情報を読み込む filereadln LIfh LoginInfo loop ; ログイン情報のファイルを閉じる fileclose LIfh ; ログのファイルを閉じる logmessage = 'INFO マクロを終了します' call Logwrite fileclose Logfh ; 処理を終了する if errflg == 0 then messagebox '処理が正常に終了しました。' 'INFO' else messagebox '処理中にエラーが発生しました。詳しくはログを確認してください。' 'ERROR' endif end ;ログに書き込む(logmessage に内容を入れる) :Logwrite getdate datestr "[%Y-%m-%d %H:%M:%S] " strconcat datestr logmessage filewriteln Logfh datestr return |
・agent.cfg
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
; ログイン情報のあるファイルのディレクトリ(C:\Users\Administrator\Documents\) LoginInfoDir='C:\Users\Administrator\Documents\' ; ログイン情報のあるファイル(AgentLoginInfo.txt) LoginInfo='AgentLoginInfo.txt' ; インストールするHinemosManagerがあるディレクトリ(C:\Users\Administrator\Documents\) AgentDir='C:\Users\Administrator\Documents\' ; インストールするManager(hinemos-7.0-agent-7.0.1-1.el.noarch.rpm) AgentRPM='hinemos-7.0-agent-7.0.1-1.el.noarch.rpm' ; 使用するManagerのIPアドレス(192.168.0.1) ManagerIP = '172.17.108.91' ; ログ出力先ディレクトリ(C:\Users\Administrator\Documents\) LogDir='C:\Users\Administrator\Documents\' ; ログ出力先(agent.log) LogFile='agent.log' |
・AgentLoginInfo.txt
1 2 |
192.168.0.1,root,password 192.168.0.2,root,password |
作成したら、manager.ttl と同じように client.ttl と agent.ttl を実行します。
4.動作確認
まず、HinemosManager ・ WebClient ・ Agent を起動します。
WebClientからManagerにログインできるか確認します。
ノードを登録して、Agent が起動しているか確認します。
これでTeraTermマクロで構築したHinemosの動作確認ができました!
■おわりに
いかがでしょうか。
簡単ではありますが、今回はTeraTermマクロを使用してHinemosを構築してみました。
ぜひみなさんもTeraTermマクロを使用してHinemosを自動化してみてください!