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だけど)。

環境

  • マネージャ兼エージェント
    • CentOS 6.4 x86_64
    • ホスト名 garnet-vm09
    • Hinemos Manager 4.1.3 ( hinemos_manager-4.1.3_rhel6_64.tar.gz )
    • Hinemos Agent 4.1.3 ( hinemos_agent-4.1.3_rhel5-7.tar.gz )
  • クライアント
    • Windows 7 (32ビット)
    • Hinemos Client 4.1.3 ( HinemosClientInstaller-4.1.3_win32.msi )

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