Hinemosのインストール
GW中の時間を使い「Hinemos」のインストールをした。
Why Hinemos ?
無償で使用できるジョブスケジューラとして「JobScheduler」、「RUNDECK」、「Hinemos」をピックアップした。
一番私が慣れ親しんでいるジョブスケジューラは日立の「JP1/AJS」であるので、それに近いものが取っ付きやすい。
日本語処理に難がありそう?な JobScheduler、選択肢中最もホットだろうと思われるもJP1/AJSとはだいぶ遠くなりそうなRUNDECK、というわけで Hinemos を選択。
後ろ向き感があるけど、国内最大手のSIerさんのかつぐ製品を触ってみたいという興味ももちろんある。「Cool Hinemos! Hinemos5.0にとっても期待している運用エンジニア」によれば、Hinemos 5系が2015年の5月(投稿時点の翌日はもう5月)に出るということであり、内容もいろいろ凄い(今回使うのは4.1.3だけど)。
環境
- マネージャ兼エージェント
- クライアント
JP1/AJSではマネージャはエージェント機能を内包しているが、Hinemosのマネージャは純粋にマネージャなので、マネージャのサーバ自身にジョブを投げたい場合はマネージャとエージェントを両方インストールする。
インストール
インストールとか結構面倒なのか?と思ったが、インストールガイドに沿ってやれば楽々できた。
ANSIBLE向け
インストールは簡単だったが、ANSIBLEプレイブック作成の練習もかねてANSIBLE対応してみた。
一応ロールになっているが、/tmp とか 4.1.3 固有のファイルとかいろいろとハードコードあり。
hinemos.install/ ├── agent.yml ├── hosts ├── manager.yml └── roles ├── hinemos.agent.install │   ├── files │   │   └── hinemos_agent-4.1.3_rhel5-7.tar.gz │   └── tasks │   └── main.yml └── hinemos.manager.install ├── files │   ├── hinemos_manager-4.1.3_rhel6_64.tar.gz │   └── install.sh └── tasks └── main.yml
manager.yml
- hosts: all roles: - hinemos.manager.install
agent.yml
マネージャのホスト名だけハードコーディングしてロールに渡しているので注意。
- hosts: all vars: argbuilder: manager: garnet-vm09 roles: - { role: hinemos.agent.install, arg: "{{ argbuilder }}" }
roles/hinemos.manager.install/tasks/main.yml
- name: (require) is SELinux disabled. shell: getenforce register: result changed_when: false failed_when: "'Disabled' not in result.stdout" - name: (require) is expect installed. shell: "rpm -qi expect" register: result changed_when: false failed_when: "result.rc != 0" - name: (do) install required packages. yum: name={{ item }} state=present with_items: - java-1.7.0-openjdk - java-1.7.0-openjdk-devel - name: (check) Hinemos manager is already installed if hinemos user exists. shell: "grep -q ^hinemos: /etc/passwd" register: isInstalled changed_when: false failed_when: "isInstalled.rc not in [0,1]" - debug: msg="isInstalled.rc = {{ isInstalled.rc }}" - name: (do) transfer installer archive. unarchive: src=hinemos_manager-4.1.3_rhel6_64.tar.gz dest=/tmp when: "isInstalled.rc != 0" - name: (do) install. script: install.sh /tmp Hinemos_Manager-4.1.3_rhel6_64 when: "isInstalled.rc != 0" - name: (verify) hinemos user exits? shell: "grep -q ^hinemos: /etc/passwd" register: result changed_when: false failed_when: "result.rc != 0" - name: (verify) hinemos group exists? shell: "grep -q ^hinemos: /etc/group" register: result changed_when: false failed_when: "result.rc != 0" - name: (verify) hinemos installation directory and sub directories exist? shell: "test -d {{ item }}" register: result changed_when: false failed_when: "result.rc != 0" with_items: - /opt/hinemos - /opt/hinemos/bin - /opt/hinemos/etc - /opt/hinemos/lib - /opt/hinemos/postgresql - /opt/hinemos/sbin - /opt/hinemos/var
roles/hinemos.manager.install/files/install.sh
英語版インストーラを使っている。日本語でもできると思うけど。
PostgreSQL上のDB初期化に使われるSQLに差がでるようで、説明とかが英語になるかも。ちょっと使いには関係ないのでこれで。
#!/bin/bash -e TEMPDIR=$1 HINEMOSARCHDIR=$2 pushd $TEMPDIR/$HINEMOSARCHDIR # run installer under timeout/expect... timeout 300 expect -d -c " set timeout 10 spawn $TEMPDIR/$HINEMOSARCHDIR/manager_installer_EN.sh expect \"Starting Hinemos Manager Installation?\" sleep 1 send \"Y\\r\" expect \"New password:\" sleep 1 send \"hinemos\\r\" expect \"Retype new password:\" sleep 1 send \"hinemos\\r\" expect \"Please input JAVA_HOME.\" sleep 1 send \"\\r\" expect \") is right?\" sleep 1 send \"Y\\r\" expect \"Do you use WBEM for process monitoring or performance monitoring?\" sleep 1 send \"N\\r\" expect \"Please enter the IP address of the ftp server which is needed by the collective run feature.\" sleep 1 send \"\\r\" expect \"127.0.0.1 is right?\" sleep 1 send \"Y\\r\" set timeout 180 expect \"Installation of Hinemos Manager is completed.\" " > /tmp/expect.log 2>&1 exit $?
roles/hinemos.agent.install/tasks/main.yml
- name: (do) install required packages. yum: name={{ item }} state=present with_items: - java-1.7.0-openjdk - java-1.7.0-openjdk-devel - net-snmp - krb5-workstation - openssh-clients - expect - name: (check) Hinemos agent is already installed if /opt/hinemos_agent directory exists. shell: "test -d /opt/hinemos_agent" register: isInstalled changed_when: false failed_when: "isInstalled.rc not in [0,1]" - debug: msg="isInstalled.rc = {{ isInstalled.rc }}" - name: (do) transfer installer archive. unarchive: src=hinemos_agent-4.1.3_rhel5-7.tar.gz dest=/tmp when: "isInstalled.rc != 0" - name: (do) install. shell: /tmp/Hinemos_Agent-4.1.3_rhel5-7/agent_installer_EN.sh -i -m {{ arg.manager }} when: "isInstalled.rc != 0" - name: (verify) hinemos installation directory and sub directories exist? shell: "test -d {{ item }}" register: result changed_when: false failed_when: "result.rc != 0" with_items: - /opt/hinemos_agent - /opt/hinemos_agent/bin - /opt/hinemos_agent/conf - /opt/hinemos_agent/lib - /opt/hinemos_agent/sbin - /opt/hinemos_agent/var
起動・停止
マネージャ
- /opt/hinemos/bin/hinemos_start.sh
- /opt/hinemos/bin/hinemos_status.sh
- /opt/hinemos/bin/hinemos_stop.sh
エージェント
- /opt/hinemos_agent/bin/agent_start.sh
- /opt/hinemos_agent/bin/agent_stop.sh