2016年12月30日金曜日

CentOS 7の新しい時刻同期デーモンchronyを使ってみた

CentOS 7は(Red Hat Enterprise Linux 7も同様だが)、いろいろコマンド体系が変わっていて、時刻同期についても、今まで長い間慣れ親しんだntpdではなく、chronyというデーモンにデフォルトが変更がされている。

ntpdをインストールして今まで通り使い続けることも可能だが、せっかくなのでchronyを使ってみることにした。

そもそもchronyとは

以下URLに詳しく説明が書いてあるので割愛するが、ntpdに比べていろいろ改善されているらしい。ただし、枯れている技術が好きだったり、新しく設定方法を覚えるのが面倒な人は引き続きntpdを使ってもよいとは思う。

・第15章 CHRONY スイートを使用した NTP 設定
https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/ch-Configuring_NTP_Using_the_chrony_Suite.html#sect-differences_between_ntpd_and_chronyd

実際、仕事でRHEL7を使う場面が出てきたとき、ntpdにするかchronyにするかは割と悩む気がする。

chronyの設定

設定ファイルは/etc/chrony.confとなる。以下に日本語コメントを付けて説明する。
------------------------------
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
# 同期先のNTPサーバを設定
server 192.168.33.3 iburst

# Ignore stratum in source selection.
# 同期先のstratumの値に応じて優先度の重み付けする設定(0で無視)
stratumweight 0

# Record the rate at which the system clock gains/losses time.
# driftfileの指定
driftfile /var/lib/chrony/drift

# Enable kernel RTC synchronization.
# カーネルのReal-Time Clock(RTC)=ハードウェアクロックを同期する
rtcsync

# In first three updates step the system clock instead of slew
# if the adjustment is larger than 10 seconds.
# stepモードとなる際の時刻のずれ幅(1つめの設定値)と、
# stepが有効になるchronyd起動後の同期回数(2つめの設定値)
#
# デフォルト設定では、10秒以上のずれの場合かつ
# chronyd起動後の3回目までの同期処理であればstepで同期する
#makestep 10 3
# ntpdは128msを閾値としてstepで同期したはずなので、ちょっと設定値を厳しくすると、
# 以下のような設定になる(0.2秒以上のずれで10回目までならstepで同期)
makestep 0.2 10

# Allow NTP client access from local network.
# NTPクライアントからのアクセス許可するアドレスを設定
# デフォルトではすべて拒否(暗黙のdenyがある)
#allow 192.168/16
#
# 以下は同じサブネット内からのNTPクライアントアクセスを許可する設定
allow 192.168.33.0/24

# Listen for commands only on localhost.
# chronycにアクセスできるアドレスを設定
# IPv6は使わないのでコメントアウト
bindcmdaddress 127.0.0.1
#bindcmdaddress ::1

# Serve time even if not synchronized to any NTP server.
# 同期先がない場合、自分自身のローカルクロックと同期してるかのように振舞う設定
# デフォルトでコメントアウト
#local stratum 10

# キーファイルの設定
keyfile /etc/chrony.keys

# Specify the key used as password for chronyc.
# chronycという設定ユーティリティのセキュリティの設定の模様
commandkey 1

# Generate command key if missing.
generatecommandkey

# Disable logging of client accesses.
# NTPクライアントからの同期のアクセスをログに残さない
noclientlog

# Send a message to syslog if a clock adjustment is larger than 0.5 seconds.
# 時刻調整時のずれが0.5秒以上の場合、syslogにログ出力する
logchange 0.5

# ログ出力先ディレクトリの指定
logdir /var/log/chrony

# ログ出力内容の指定。指定した項目ごとにログファイルが生成される模様
#log measurements statistics tracking
log measurements statistics tracking
------------------------------

コメントを全部消すと以下のようにシンプルになる。

[root@localhost /]# cat /etc/chrony.conf
------------------------------
server 192.168.33.3 iburst
stratumweight 0

driftfile /var/lib/chrony/drift

rtcsync
makestep 0.2 10

allow 192.168.33.0/24

bindcmdaddress 127.0.0.1
keyfile /etc/chrony.keys
commandkey 1
generatecommandkey

noclientlog
logchange 0.5
logdir /var/log/chrony
log measurements statistics tracking
------------------------------

chronyの起動

設定したchrony.confを読み込ませるために、サービス再起動を行う。

[root@localhost /]# systemctl restart chronyd
※サービス再起動時には特に表示なし

サービス再起動後の確認。「active (running)」であることと、特にエラーが発生していなければOK。

[root@localhost /]# systemctl status chronyd
------------------------------
chronyd.service - NTP client/server
   Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: enabled)
   Active: active (running) since 土 2016-03-05 22:14:12 JST; 31s ago
  Process: 2994 ExecStartPost=/usr/libexec/chrony-helper update-daemon (code=exited, status=0/SUCCESS)
  Process: 2991 ExecStart=/usr/sbin/chronyd $OPTIONS (code=exited, status=0/SUCCESS)
 Main PID: 2993 (chronyd)
   CGroup: /system.slice/chronyd.service
           mq2993 /usr/sbin/chronyd

 3月 05 22:14:12 localhost.localdomain systemd[1]: Starting NTP client/server...
 3月 05 22:14:12 localhost.localdomain chronyd[2993]: chronyd version 2.1.1 starting (+CMDMON ...H)
 3月 05 22:14:12 localhost.localdomain chronyd[2993]: Generated key 1
 3月 05 22:14:12 localhost.localdomain systemd[1]: Started NTP client/server.
 3月 05 22:14:16 localhost.localdomain chronyd[2993]: Selected source 192.168.11.22
 3月 05 22:14:16 localhost.localdomain chronyd[2993]: System clock wrong by 0.665080 seconds, ...ed
 3月 05 22:14:17 localhost.localdomain chronyd[2993]: System clock was stepped by 0.665080 seconds
Hint: Some lines were ellipsized, use -l to show in full.
------------------------------

時刻同期状態の確認。ntpdと似ていて、先頭2文字目に「*」があれば同期OK。

[root@localhost /]# chronyc sources
------------------------------
210 Number of sources = 1
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* 192.168.33.3                  3   6    17    40  -5893ns[  -24us] +/-   53ms
------------------------------

(参考)ntpdを使いたい場合の対処

やっぱりntpdが使いたい!という人は、CentOS 7のCDのPackagesディレクトリに移動して、以下をインストールすればよい。

[root@localhost Packages]# rpm -ivh ntpdate-4.2.6p5-22.el7.centos.x86_64.rpm
[root@localhost Packages]# rpm -ivh autogen-libopts-5.18-5.el7.x86_64.rpm
[root@localhost Packages]# rpm -ivh ntp-4.2.6p5-22.el7.centos.x86_64.rpm



2016年12月23日金曜日

インフラエンジニアがSIerからSIerへ転職した話

2015年4月末にて2007年から8年1ヶ月勤めた会社を退職し転職した。転職から1年半以上が経過したことになるが、自分の活動の備忘録として、当時の転職活動の記録を掲載する。

なお、私の場合、業種はインフラエンジニアとなり、結果的にはSIerからSIerへの転職となる。

2014年12月下旬 転職しようと考え始める

理由は大きく2つ。

①同じ顧客の同じようなシステムの保守担当の経験が長くなっており、技術的な新鮮さもなく、興味が失われたこと。同時に、技術面で成長が期待できないと感じたこと
②自分の担当している業務内容に対して、適正な評価がされていないと感じたこと(簡単に言えばリーダー業務を実施しているのに、担当者として評価されていること)

上の2つがあったが、②の内容はネガティブになるので、転職活動では主に①を伝えて進めることにした。

2015年1月中旬 転職活動を始める決意

もともと数年前からリクナビネクストに登録をしていて、思いついたら閲覧したり、更新はしていた。しかし、中々最初の一歩を踏み出すことができない状況が続いていた。転職したい気持ちはあっても、なかなか「転職」というパワーとリスクを必要とする行動を開始できずにいた。

ある日、リクナビネクストのページに、今の登録情報を使ってリクルートエージェント登録できるというリンクがあって、軽い気持ちでクリックしたところ、簡単にリクルートエージェントに登録されてしまった。そしたら、数日後エージェントから電話が来た。すぐさまエージェントとの面談がセッティングされ、あっという間に転職活動は開始されることになった。

この経験をふまえて感じたこととしては、転職活動の最初の一歩を踏み出すことに躊躇している人は、さっさと転職エージェントに登録してしまえば良い。そうすれば、嫌でもエージェントから連絡が来て転職活動が開始できてしまう。

2015年1月末 エージェントとの面談

予定休を取って、東京駅近くのリクルートのビルにて打ち合わせ。以下の様な情報を教えてもらう。

・リクナビネクストとリクルートエージェントとのビジネスモデルの違い。リクナビネクストは求人を掲示するのに費用が発生することに対し、リクルートエージェントは紹介した人材が内定を得た際に企業から費用をもらう
※ネット情報だと内定者の年収の3割程度がエージェント企業に支払われるらしい

・上記ビジネスモデルの違いに加え、IT企業は通年で求人を出している場合が多いこともあり、リクナビネクストへの求人広告を出さずにリクルートエージェントのみが持つ求人も多いとのこと

・書類選考があって、だいたい2回の面接を通過すれば内定するパターンが多い
   書類選考通過率は通常20~30%程度
   一次面接通過率は20~30%程度
   最終面接通過率は60~70%程度

・SPIや筆記試験もある場合もあるが、新卒の就職活動と違い、よほど常識外の点数を取らなければ選考に影響しない場合が多い(キャリア採用は業務経歴書等の経歴を重視するため)

2015年1月末 応募

応募した企業は8社。求人内容からインフラ構築案件に関われそうなものを中心に応募。一部、社内SEといった立場の求人にも応募してみた。

2015年2月上旬 最初の面接

最初の面接は今思うと酷いものだった。回答内容もダメだったが、面接を受ける態度がダメダメだった。声の大きさ、目を見て話すなどが意識できておらず、それがそのまま評価されて不採用となった。

2015年2月中旬~3月中旬 面接の繰り返し

最初の面接で失敗してから、声の大きさや目を見て話すことは気を付けるようにしたつもりだが、不採用となった企業の評価としては、「元気が無い印象を受ける」というものが多かった。

だが、面接の場数を踏むことで、おおよそ質問されることが予測でき回答内容も洗練されてきた。従って回答内容で不採用となることは少なく、「自分よりもマッチする候補者がいる」という結果での不採用が多かった。

また、企業によっては、本来一次面接を受ける前に受けるはずのWebでの適性試験の案内が来なかったり、いざ面接に行くと選考部署が異なったりするなどといった想定外もあった。両方共に不採用となったが、きちんと連絡のできない雑な企業だと感じてしまったので気にしないことにした。

よく質問される内容は以下の通り。

・転職理由
・当社の志望理由
・仕事で苦労したことと、それを乗り越えるために工夫したこと
・自分の技術的な強み・弱み
・自分のビジネススキル面での強み・弱み
・自己啓発として実施していること
・あなたの考えるリーダーにとって重要なこと
・キャリアプランは
・何か質問は

面接の最後に必ずある「何か質問は」が一番キツかった。別に質問したいことが無いわけでは無いが、かといってそこで質問したら何かわかることも少ないと思ってしまい、結局何を質問したらよいかわからなくなる。対策として、予め万能に使えそうな以下の様な質問を用意することにした(当然、本当に質問したい内容は質問する)。

・もし採用された場合の担当業務の可能性はどのようなものがあるか
・採用された場合に予め勉強しておくべきものはあるか
・選考部署での構築案件と保守案件の割合は
・社内のナレッジを共有する仕組みはどのようなものがあるか

2015年3月中旬 最終選考

そんな中、ようやく最終選考に進むことができた。最終選考に進んだ企業が最後の一社ということで、ここに引っかからなかったら、また最初から仕切り直しとなるので、面接終了後の結果待ちの期間はいつもメールチェックしていた。

2015年3月下旬 内定

そして最終面接から一週間後、内定を頂く。もともと第一志望の企業だったので、迷うことは無かった。

転職活動の結果まとめ

転職活動の結果を数字で振り返ると以下の通りになる。書類選考通過率が非常に高く、転職活動なんて楽勝だと一瞬でも思った自分がアホらしい。結果的にはギリギリの1社内定であった。

 応募企業 8社
 書類選考通過 7社 (通過率87.5%)
 一次面接通過 2社 (通過率28.6%)
 最終面接通過(内定) 1社 (通過率50%)

2016年12月 現在

転職からまもなく1年半以上経過するが、現職の業務はITの知識を発揮できるし、経験のなかったOSや機器の知識も積極的に増やせる環境であり満足度はある。しかし、仕事のことを土日も考えていたり、自宅の検証環境で検証することが多くなり、社畜まっしぐらとなっている気がする。

とはいえ、自分の持っている知識を活用して仕事を推進し、課題解決できることはとても楽しいので、もうしばらく頑張っていけるとは思う。

2016年12月10日土曜日

ESXiの異なるvSwitchをL2で接続する方法

通常実施する必要性は無いと思うが、ESXiのvSwitchをL2で接続して同じブロードキャストドメインのスイッチとして利用する方法。ネットワークOSであるVyOSを利用する。

実現方法

1. VyOSを構築

以下URLよりVyOSのイメージの入手とインストール手順がある。


こちらを参考にVyOSを構築する。仮想マシンのリソースは以下で設定する。

 ・CPU:1コア
 ・メモリ:512MB
 ・ハードディスク:2GB
 ・ネットワークアダプタ:L2で接続するvSwitch
 ・ネットワークアダプタ:L2で接続するもう一方のvSwitch

2. VyOSを設定する

以下の通り設定する。

--------------------------
$ configure
# set interfaces bridge br0
# set interfaces ethernet eth0 bridge-group bridge br0
# set interfaces ethernet eth1 bridge-group bridge br0
# commit
# save
# exit
--------------------------

確認コマンドは以下の通り。

--------------------------
$ sh bridge
bridge name     bridge id                STP enabled     interfaces
br0                 0000.000c29391f00 no                   eth0
                                                                      eth1
--------------------------

3. vSwitchの仮想マシンポートグループを設定

「無差別モード」を「拒否」から「承諾」に変更する。これによって、ポートグループに流れるすべてのフレームをVyOSが受け取れるようにし、L2フレームをvSwitch間で転送できるようになる。



2016年5月21日土曜日

Linuxのプロンプトに時間を表示させる

プロンプトに時間表示があると、作業ログを確認する際に各コマンドの実行時間が把握できてよいという小ネタ。

環境変数で設定すれば良い。私はプロンプトが長すぎると嫌なので、時間のみを表示させるようにした。

・時間のみ
# PS1='[\u@\h `date +"%H%M%S"`]\$ '
[root@t3022ce67 223648]#

・日+時間①
# PS1='[\u@\h `date +"%y%m%d %H%M%S"`]\$ '
[root@t3022ce67 160520 223612]#

・日+時間②
# PS1='[\u@\h `date +"%Y%m%d %H%M%S"`]\$ '
[root@t3022ce67 20160520_223219]#

ログイン時に常に変える場合は、.bash_profileに上記コマンドをそのまま記載して、exportに足せば良い。

# vi .bash_profile
--------------------
PATH=$PATH:$HOME/bin
PS1='[\u@\h `date +"%H%M%S"`]\$ '

export PATH PS1
--------------------

2016年5月15日日曜日

yumでローカルに保存したrpmを一括適用する方法

ローカルのディレクトリにあるrpmについて、yumの機能を用いて依存関係を考慮して適用したいことがある。ということで、過去の記事でローカルのディレクトリをレポジトリ登録する方法を記載したが、そんなことはしなくても、もっと簡単な方法があった。

yum localinstallを使う

yumに機能がそもそもあったという話。rpmを配置したディレクトリに移動し、以下コマンドを実行するだけでよい。サブスクリプションの設定も不要。

# yum localinstall *
-------------------------
読み込んだプラグイン:product-id, security, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
ローカルパッケージ処理の設定をしています
ConsoleKit-0.4.1-6.el6.x86_64.rpm を調べています: ConsoleKit-0.4.1-6.el6.x86_64
次のリポジトリーへの更新として ConsoleKit-0.4.1-6.el6.x86_64.rpm を設定します: ConsoleKit-0.4.1-3.el6.x86_64
ConsoleKit-libs-0.4.1-6.el6.x86_64.rpm を調べています: ConsoleKit-libs-0.4.1-6.el6.x86_64
次のリポジトリーへの更新として ConsoleKit-libs-0.4.1-6.el6.x86_64.rpm を設定します: ConsoleKit-libs-0.4.1-3.el6.x86_64
Red_Hat_Enterprise_Linux-Release_Notes-6-en-US-8-2.el6.noarch.rpm を調べています: Red_Hat_Enterprise_Linux-Release_Notes-6-en-US-8-2.el6.noarch

~(中略)~


トランザクションの要約
================================================================================
インストール         3 パッケージ
アップグレード     250 パッケージ

合計容量: 899 M
これでいいですか? [y/N] y   ←★ここでyを押せばインストール&更新が開始
-------------------------

ちなみに、似たようなものにyum localupdateというものもあるのだが、なぜかうまくいかなかった。yum localinstallでもきちんとインストールとアップグレードを実施できるので、特に問題ないので詳しくは調べていない。

# yum localupdate *
-------------------------
読み込んだプラグイン:product-id, security, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
ローカルパッケージ処理の設定をしています
ConsoleKit-0.4.1-6.el6.x86_64.rpm を調べています: ConsoleKit-0.4.1-6.el6.x86_64
次のリポジトリーへの更新として ConsoleKit-0.4.1-6.el6.x86_64.rpm を設定します: ConsoleKit-0.4.1-3.el6.x86_64
ConsoleKit-libs-0.4.1-6.el6.x86_64.rpm を調べています: ConsoleKit-libs-0.4.1-6.el6.x86_64
次のリポジトリーへの更新として ConsoleKit-libs-0.4.1-6.el6.x86_64.rpm を設定します: ConsoleKit-libs-0.4.1-3.el6.x86_64
Red_Hat_Enterprise_Linux-Release_Notes-6-en-US-8-2.el6.noarch.rpm を調べています: Red_Hat_Enterprise_Linux-Release_Notes-6-en-US-8-2.el6.noarch

~(中略)~

--> 依存性解決を終了しました。
エラー: パッケージ: 1:java-1.7.0-openjdk-1.7.0.101-2.6.6.4.el6_8.x86_64 (/java-1.7.0-openjdk-1.7.0.101-2.6.6.4.el6_8.x86_64)
             要求: libsctp.so.1(VERS_1)(64bit)
エラー: パッケージ: 1:java-1.7.0-openjdk-1.7.0.101-2.6.6.4.el6_8.x86_64 (/java-1.7.0-openjdk-1.7.0.101-2.6.6.4.el6_8.x86_64)
             要求: libsctp.so.1()(64bit)
エラー: パッケージ: 1:java-1.7.0-openjdk-1.7.0.101-2.6.6.4.el6_8.x86_64 (/java-1.7.0-openjdk-1.7.0.101-2.6.6.4.el6_8.x86_64)
             要求: libpcsclite.so.1()(64bit)
 問題を回避するために --skip-broken を用いることができません
 これらを試行できます: rpm -Va --nofiles --nodigest
-------------------------


2016年5月14日土曜日

Linuxのネットワークチーミング(Bonding)の設定

物理サーバを構築する際は、NICをチーミングし冗長構成を取ることが鉄板となっている。今までWindowsであればチーミングの設定を実施したことはあったが、Linuxでは実施したことがなかった。

LinuxにおいてはOS標準でBondingと呼ばれるチーミング機能が備わっているので、勉強のために設定してみた。

事前確認

まずは、何もしていない状態でNICのステータスを確認する。eth0とeth1が存在し、eth0だけにIPアドレスが設定されている状況となっている。この状態から、eth0とeth1のBonding設定を行う。

# ifconfig -a
---------------------------
eth0      Link encap:Ethernet  HWaddr 00:0C:29:A9:38:65
          inet addr:192.168.11.111  Bcast:192.168.11.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:496551 errors:0 dropped:0 overruns:0 frame:0
          TX packets:12338 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:33709638 (32.1 MiB)  TX bytes:3731810 (3.5 MiB)

eth1      Link encap:Ethernet  HWaddr 00:0C:29:A9:38:6F
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
---------------------------

Bonding設定

以下の手順で設定する。

①カーネルパラメータの設定

Bondingを有効化するためのカーネルパラメータの設定ファイルを新規作成する。

/etc/modprobe.d/bonding.conf
---------------------------
alias bond0 bonding
---------------------------

②bond0のインターフェースの設定

チーミングした場合、実際のNICにはIPアドレスは設定せず、bond0のデバイスに設定することになる。チーミングに関する各種設定についても、このファイルの「BONDING_OPTS」という項目にてスペース区切りで記載する。

チーミングのオプションは以下を参照すること。

・25.7.2. チャンネルボンディングの使用
https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/sec-Using_Channel_Bonding.html

今回は以下の設定を行った。

---------------------------
 mode=1                    ←切り替わりモードの設定(1はactive-backup)
 miimon=100               ←NICの監視感覚(単位:ms)
 primary=eth0             ←Bondingデバイス起動時の優先NIC
 primary_reselect=0      ←優先NIC復旧時に自動で戻るようにするか(0は自動で優先NICに戻る)
---------------------------

/etc/sysconfig/network-scripts/ifcfg-bond0
---------------------------
DEVICE=bond0
IPADDR=192.168.11.111
NETMASK=255.255.255.0
GATEWAY=192.168.11.31
ONBOOT=yes
BOOTPROTO=none
BONDING_OPTS="mode=1 miimon=100 primary=eth0 primary_reselect=0"
---------------------------

③bond0に複数IPアドレスを設定

Bondingであっても、1つのデバイスに複数IPの設定が可能なので、2つめのIPアドレス設定のデバイスファイルを作成する。こちらには、チーミングのオプション設定は不要。

/etc/sysconfig/network-scripts/ifcfg-bond0:1
---------------------------
DEVICE=bond0:1
IPADDR=192.168.11.112
NETMASK=255.255.255.0
ONBOOT=yes
BOOTPROTO=none
---------------------------

④eth0の設定

eth0は現状使用中のNICなので、バックアップを取得してから作り直すと良い。なお、Linuxのnetworkサービスは、本ディレクトリ内のファイルでifcfg-*で始まるものを読み込む仕様の模様。バックアップファイルを同じディレクトリに作る場合は、不要な設定ファイルの読み込みが発生しないよう、ファイル名には注意する。具体的には、バックアップの保存ディレクトリを別にするか、.bakを付ければ読み込まない仕様なのでそのように対処しても良い。

<良いバックアップファイル名>
 20160514_ifcfg-eth0
 ifcfg-eth0_20160514.bak

<悪いバックアップファイル名>
 ifcfg-eth0_20160514

設定は以下のとおり。IPアドレスやゲートウェイの設定を削除し、MASTER、SLAVEといった値を設定する。

/etc/sysconfig/network-scripts/ifcfg-eth0
---------------------------
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
MASTER=bond0
SLAVE=yes
NM_CONTROLLED=no
BOOTPROTO=none
HWADDR=00:0C:29:A9:38:65
---------------------------

⑤eth1の設定

eth1もeth0と同様に設定する。eth0のifcfg-eth0の設定をコピーしてDEVICEとHWADDRを変更するだけで作れる。

/etc/sysconfig/network-scripts/ifcfg-eth1
---------------------------
DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
MASTER=bond0
SLAVE=yes
NM_CONTROLLED=no
BOOTPROTO=none
HWADDR=00:0C:29:A9:38:6F
---------------------------

Bonding有効化

networkサービスをリスタートし、設定ファイルの読み込みを行う。なお、ifcfg-eth0を変更してしまっているので、初回だけエラーが出力される。
※「Determining if ip address ~」のメッセージについては後述

# service network restart
---------------------------
インターフェース eth0 を終了中:  /etc/sysconfig/network-scripts/ifdown-eth: line 121: /sys/class/net/bond0/bonding/slaves: そのようなファイルやディレクトリはあ りません
                                                           [  OK  ]
ループバックインターフェースを終了中                       [  OK  ]
ループバックインターフェイスを呼び込み中                   [  OK  ]
インターフェース bond0 を活性化中:  Determining if ip address 192.168.11.111 is already in use for device bond0...
Determining if ip address 192.168.11.112 is already in use for device bond0...
                                                           [  OK  ]
---------------------------

2回目のリスタートは問題なし。

# service network restart
---------------------------
インターフェース bond0 を終了中:  [  OK  ]
ループバックインターフェースを終了中  [  OK  ]
ループバックインターフェイスを呼び込み中 [  OK  ]
インターフェース bond0 を活性化中:  Determining if ip address 192.168.11.111 is already in use for device bond0...
Determining if ip address 192.168.11.112 is already in use for device bond0...
[  OK  ]
---------------------------

最終的に以下の通りインターフェースが設定された。bond0、bond0:1にIPアドレスが設定されており、eth0とeth1はSLAVEとして起動していることがわかる。

# ifconfig -a
---------------------------
bond0     Link encap:Ethernet  HWaddr 00:0C:29:A9:38:65
          inet addr:192.168.11.111  Bcast:192.168.11.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1
          RX packets:2574 errors:0 dropped:0 overruns:0 frame:0
          TX packets:648 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:401668 (392.2 KiB)  TX bytes:182251 (177.9 KiB)

bond0:1   Link encap:Ethernet  HWaddr 00:0C:29:A9:38:65
          inet addr:192.168.11.112  Bcast:192.168.11.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1

eth0      Link encap:Ethernet  HWaddr 00:0C:29:A9:38:65
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
          RX packets:44 errors:0 dropped:0 overruns:0 frame:0
          TX packets:26 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:3720 (3.6 KiB)  TX bytes:3832 (3.7 KiB)

eth1      Link encap:Ethernet  HWaddr 00:0C:29:A9:38:65
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
          RX packets:54 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:4320 (4.2 KiB)  TX bytes:0 (0.0 b)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
---------------------------

Bondingの詳細なステータスは以下ファイルを確認すればわかる。

/proc/net/bonding/bond0
---------------------------
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)

Bonding Mode: fault-tolerance (active-backup)
Primary Slave: eth0 (primary_reselect always)
Currently Active Slave: eth0   ←★eth0がActive
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: eth0
MII Status: up
Speed: 10000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:a9:38:65
Slave queue ID: 0

Slave Interface: eth1
MII Status: up
Speed: 10000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:a9:38:6f
Slave queue ID: 0
---------------------------

切り替えテスト

eth0を切断してみると以下のとおりになる。1秒毎にpingを打っていたが欠けは無し。

/proc/net/bonding/bond0
---------------------------
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)

Bonding Mode: fault-tolerance (active-backup)
Primary Slave: eth0 (primary_reselect always)
Currently Active Slave: eth1   ←★eth1に切り替わる
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: eth0
MII Status: down   ←★downになる
Speed: Unknown
Duplex: Unknown
Link Failure Count: 1   ←★+1される
Permanent HW addr: 00:0c:29:a9:38:65
Slave queue ID: 0

Slave Interface: eth1
MII Status: up
Speed: 10000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:a9:38:6f
Slave queue ID: 0
---------------------------

eth0を接続し直すと、「primary_reselect always」の設定が入っているので自動で切り戻る。こちらもping欠けは無し。

/proc/net/bonding/bond0
---------------------------
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)

Bonding Mode: fault-tolerance (active-backup)
Primary Slave: eth0 (primary_reselect always)
Currently Active Slave: eth0   ←★eth0に切り替わる
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: eth0
MII Status: up
Speed: 10000 Mbps
Duplex: full
Link Failure Count: 1
Permanent HW addr: 00:0c:29:a9:38:65
Slave queue ID: 0

Slave Interface: eth1
MII Status: up
Speed: 10000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:a9:38:6f
Slave queue ID: 0
---------------------------

「Determining if ip address ~」のメッセージについて

Bondingの話とは直接関係ない話となるが、networkサービスリスタート時に出力される「Determining if ip address ~」のメッセージについて説明しておく。これはエラーメッセージではなく、割り当てようとしているIPアドレスが他機器で利用されていないかチェックする機能による出力メッセージとなる。

例えばあえて重複するIPアドレスを設定してみると、以下のとおり「Error, some other host already uses address ~」と表示され、対象のインターフェースは活性化されない。

# service network restart
---------------------------
インターフェース bond0 を終了中:                           [  OK  ]
ループバックインターフェースを終了中                       [  OK  ]
ループバックインターフェイスを呼び込み中                   [  OK  ]
インターフェース bond0 を活性化中:  Determining if ip address 192.168.11.111 is already in use for device bond0...
Determining if ip address 192.168.11.110 is already in use for device bond0...
Error, some other host already uses address 192.168.11.110.
                                                           [  OK  ]
---------------------------

この機能を止めたい場合は前段で設定したifcfg-*のファイルに「ARPCHECK=no」のオプションを追加すればよいらしい。ただし、有効にしておくことの影響はないと思うので、万が一IPアドレスが重複してしまうような場合を想定して有効のままにすることをお勧めする。


2016年5月7日土曜日

Red Hat Enterprise LinuxやCentOSでローカルディレクトリをyumのリポジトリとして設定する方法

Redhat Enterprise Linux(RHEL)やCentOSでyumを使う場合、インターネットへ接続する必要がある。しかし、インターネットに接続することはネットワークポリシーやセキュリティ上難しい環境だったりする場合が多々あって、利用するのに難儀することが多い。

とはいえ最新のパッケージを適用することもセキュリティ上重要なので、以下の様な手順にて実施することを考える。

 ①一台、yum用のインターネットに接続するLinuxを構築
 ②上記のLinuxにてyumを利用して最新のrpmパッケージをダウンロード
 ③ダウンロードしたrpmパッケージを実際に適用するサーバーへコピー
 ④ローカルディレクトリをyumリポジトリとして登録し、パッケージを適用

# (2016/5/15追記)
#  上記④についてもっと簡単な方法があった。詳細は別記事参照

ただし、上記方法はyum用のLinuxサーバを別に構築する必要があって、それなりの手間が発生してしまう。さらに、RHELの場合はサブスクリプションが1台分余計に用意する必要があるということで、コスト面でもデメリットがある点に注意。

(RHELのみ)サブスクリプション登録

RHELの場合はyumを利用する場合は最初にサブスクリプションの登録作業が必要となる。今回30日の評価版サブスクリプションにて実施する。

まず、何もしていない状態でyumを実行すると「サブスクリプションが登録されてないよ」というエラーが出力される。

# yum check-update
--------------------------
読み込んだプラグイン:product-id, security, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
--------------------------

以下コマンドにてサブスクリプションの確認を行うと、状態が不明となっていることがわかる。

# subscription-manager list
--------------------------
+-------------------------------------------+
    インストール済み製品のステータス
+-------------------------------------------+
製品名:           Red Hat Enterprise Linux Server
製品 ID:          69
バージョン:       6.7
アーキテクチャー: x86_64
状態:             不明
状態の詳細:    
開始:          
終了:          
--------------------------

まずは、サブスクリプションが紐づくRed Hatアカウントの登録を行う。

# subscription-manager register
--------------------------
ユーザー名: <Red Hatアカウント名>
パスワード: <上記のパスワード>
このシステムは次の ID で登録されました: 6956a621-f62a-4fcd-97cb-xxxxxxxxxxxx
--------------------------

再度確認。今度は状態が「サブスクライブしていません」になる。

# subscription-manager list
--------------------------
+-------------------------------------------+
    インストール済み製品のステータス
+-------------------------------------------+
製品名:           Red Hat Enterprise Linux Server
製品 ID:          69
バージョン:       6.7
アーキテクチャー: x86_64
状態:             サブスクライブしていません
状態の詳細:       有効なサブスクリプションでサポートされていません
開始:          
終了:          
--------------------------

次に利用可能なサブスクリプション一覧を確認する。評価版の30日サブスクリプションが存在することがわかる。赤字箇所の「プールID」をコピーしておく。

# subscription-manager list --available
--------------------------
+-------------------------------------------+
    利用可能なサブスクリプション
+-------------------------------------------+
サブスクリプション名:     30 Day Red Hat Enterprise Linux Server Self-Supported
                          Evaluation
提供:                     Red Hat Container Images Beta
                          Red Hat Beta
                          Red Hat Enterprise Linux Atomic Host Beta
                          Oracle Java (for RHEL Server)
                          Red Hat Container Images
                          Red Hat Enterprise Linux Server
                          Red Hat Enterprise Linux Atomic Host
SKU:                      RH00065
契約:                     10947308
プール ID:                8a85f981542c878e0154xxxxxxxxxxxx
管理の提供:               いいえ
数量:                     2
推奨:                     1
サービスレベル:           Self-Support
サービスタイプ:           L1-L3
サブスクリプションタイプ: インスタンスベース
終了:                     2016年05月19日
システムタイプ:           物理
--------------------------

先ほど確認したプールIDを指定して、サブスクリプションの割り当てを実施。

# subscription-manager subscribe --pool=8a85f981542c878e0154xxxxxxxxxxxx
--------------------------
サブスクリプションが正しく割り当てられました: 30 Day Red Hat Enterprise Linux Server Self-Supported Evaluation
--------------------------

最後に確認。状態が「サブスクライブ済み」となればOK。

# subscription-manager list
--------------------------
+-------------------------------------------+
    インストール済み製品のステータス
+-------------------------------------------+
製品名:           Red Hat Enterprise Linux Server
製品 ID:          69
バージョン:       6.7
アーキテクチャー: x86_64
状態:             サブスクライブ済み
状態の詳細:    
開始:             2016年04月19日
終了:             2016年05月19日
--------------------------

yumの設定

ダウンロードしたrpmファイルを消さない設定をするため、yum.confを編集する。

/etc/yum.conf
--------------------------
cachedir=/var/cache/yum/$basearch/$releasever   ←★ダウンロードしたrpmの保存先。確認だけしておく
keepcache=1   ←★ダウンロードしたrpmを消さない設定。0→1へ変更
--------------------------

また、環境によってはリポジトリの追加を実施する。今回は「rhel-6-server-optional-rpms」が必要となったので追加する。まずは、現状のリポジトリの一覧を確認する。

# yum repolist all
--------------------------
読み込んだプラグイン:product-id, security, subscription-manager
リポジトリー ID                                       リポジトリー  状態
rhel-6-server-beta-debug-rpms                         Red Hat Enter 無効
rhel-6-server-beta-rpms                               Red Hat Enter 無効

~(中略)~

rhel-6-server-optional-rpms                           Red Hat Enter 無効   ←★ここを有効化する

~(中略)~

rhel-6-server-rpms                                    Red Hat Enter 有効: 16,856

~(中略)~

rhel-source                                           Red Hat Enter 無効
rhel-source-beta                                      Red Hat Enter 無効
repolist: 16,856
--------------------------

有効化するコマンドは以下のとおりとなる。

# yum-config-manager --enable rhel-6-server-optional-rpms

再度確認。

# yum repolist all
--------------------------
読み込んだプラグイン:product-id, security, subscription-manager
リポジトリー ID                                       リポジトリー  状態
rhel-6-server-beta-debug-rpms                         Red Hat Enter 無効
rhel-6-server-beta-rpms                               Red Hat Enter 無効

~(中略)~

rhel-6-server-optional-rpms                           Red Hat Enter 有効:  9,520   ←★有効化された

~(中略)~

rhel-6-server-rpms                                    Red Hat Enter 有効: 16,856

~(中略)~

rhel-source                                           Red Hat Enter 無効
rhel-source-beta                                      Red Hat Enter 無効
repolist: 26,376
--------------------------

yumの実行

yumにてパッケージをインストールせずダウンロードだけするには「downloadonly」のオプションを付与する。

# yum update --downloadonly
--------------------------
読み込んだプラグイン:product-id, security, subscription-manager
更新処理の設定をしています
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> Package SDL.x86_64 0:1.2.14-6.el6 will be 更新
---> Package SDL.x86_64 0:1.2.14-7.el6_7.1 will be an update
---> Package bash.x86_64 0:4.1.2-33.el6 will be 更新
---> Package bash.x86_64 0:4.1.2-33.el6_7.1 will be an update

~(中略)~

udev                     x86_64 147-2.63.el6_7.1      rhel-6-server-rpms 355 k
 zip                      x86_64 3.0-1.el6_7.1         rhel-6-server-rpms 259 k
依存性関連でのインストールをします。:
 pcsc-lite-libs           x86_64 1.5.2-15.el6          rhel-6-server-rpms  28 k

トランザクションの要約
================================================================================
インストール         2 パッケージ
アップグレード     123 パッケージ

総ダウンロード容量: 214 M
これでいいですか? [y/N]y
パッケージをダウンロードしています:
(1/125): SDL-1.2.14-7.el6_7.1.x86_64.rpm                 | 193 kB     00:00  
(2/125): bash-4.1.2-33.el6_7.1.x86_64.rpm                | 908 kB     00:00  
(3/125): bind-libs-9.8.2-0.37.rc1.el6_7.7.x86_64.rpm     | 887 kB     00:00  

~(中略)~

(123/125): tzdata-java-2016d-1.el6.noarch.rpm            | 180 kB     00:00  
(124/125): udev-147-2.63.el6_7.1.x86_64.rpm              | 355 kB     00:00  
(125/125): zip-3.0-1.el6_7.1.x86_64.rpm                  | 259 kB     00:00  
--------------------------------------------------------------------------------
合計                                            801 kB/s | 214 MB     04:33  
exiting because --downloadonly specified   ←★このメッセージが表示される
--------------------------

ダウンロードされたrpmパッケージは以下ディレクトリに保存されているので、別のディレクトリに退避するなどして保存しておくこと。

/var/cache/yum/x86_64/6Server/rhel-6-server-rpms/packages/
/var/cache/yum/x86_64/6Server/rhel-6-server-optiional-rpms/packages/

ちなみに、ダウンロードしたパッケージを削除する場合は以下コマンド。

# yum clean packages
--------------------------
読み込んだプラグイン:product-id, security, subscription-manager
リポジトリーを清掃しています: rhel-6-server-optional-rpms rhel-6-server-rpms
5 packageファイルを削除しました
--------------------------


ローカルディレクトリをyumのリポジトリにする

例として/root/update_rpmsをリポジトリとして設定する。先ほどダウンロードしたrpmパッケージを事前にこのディレクトリにコピーしておくこと。試しに、このディレクトリに移動して、単純にrpmですべてを適用しようとしても、エラーで弾かれてしまった。

# rpm -ivh *
--------------------------
ファイル /usr/bin/zip (パッケージ zip-3.0-1.el6_7.1.x86_64 から) は、パッケージ zip-3.0-1.el6.x86_64 からのファイルと競合しています。
ファイル /usr/bin/zipcloak (パッケージ zip-3.0-1.el6_7.1.x86_64 から) は、パッケージ zip-3.0-1.el6.x86_64 からのファイルと競合しています。
ファイル /usr/bin/zipnote (パッケージ zip-3.0-1.el6_7.1.x86_64 から) は、パッケージ zip-3.0-1.el6.x86_64 からのファイルと競合しています。
ファイル /usr/bin/zipsplit (パッケージ zip-3.0-1.el6_7.1.x86_64 から) は、パッケージ zip-3.0-1.el6.x86_64 からのファイルと競合しています。
--------------------------

しかし、yumであれば依存関係を考慮して一括で適用してくれるのでメリットがある。

まずは、createrepoのパッケージをインストールする。事前にyumでインストールするか、rpmパッケージで個別にインストールしておくこと。私の環境では、依存関係があるパッケージが追加で2つインストールされた。

# yum install createrepo
--------------------------
~(中略)~

インストール:
  createrepo.noarch 0:0.9.9-22.el6                                            

依存性関連をインストールしました:
  deltarpm.x86_64 0:3.5-0.5.20090913git.el6                                  
  python-deltarpm.x86_64 0:3.5-0.5.20090913git.el6                            

完了しました!
--------------------------

createrepoコマンドにて、リポジトリとして必要な処理を行う。

# createrepo /root/update_rpms
--------------------------
Spawning worker 0 with 125 pkgs
Workers Finished
Gathering worker results

Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
--------------------------

以下ファイルを新規作成し、local-repositoryという名前でリポジトリを設定する。

/etc/yum.repos.d/local.repo
--------------------------
[local-repository]
name=local repository
baseurl=file:///root/update_rpms/
gpgcheck=0
enabled=0
--------------------------

上記完了後、yumを実行してみる

# yum clean all   ←★一旦yumを綺麗にしておく

# yum repolist all   ←★リポジトリの一覧を確認
--------------------------
リポジトリー ID                                       リポジトリー  状態
local-repository                                      local reposit 有効:    125   ←★有効になっている
--------------------------

# yum check-update   ←★check-updateの実行でlocal-repositoryが参照されていればOK
--------------------------
~(中略)~

tzdata.noarch                        2016d-1.el6                local-repository
tzdata-java.noarch                   2016d-1.el6                local-repository
udev.x86_64                          147-2.63.el6_7.1           local-repository
zip.x86_64                           3.0-1.el6_7.1              local-repository
--------------------------

以上で設定は完了となる。

2016年5月4日水曜日

ZabbixでGmailを使って障害メールを送信する設定

Zabbixで検知した障害をメール送信させる際に、GmailのSMTPサーバを使って送信する設定メモ。

スクリプトのダウンロード・配置

Zabbixの標準機能では実装できないようなので、以下からメール送信用のスクリプトをダウンロードする。

zabbix-jp/plugins
※「Download ZIP」ボタンから「plugins-master.zip」をダウンロード
https://github.com/zabbix-jp/plugins

ダウンロードしたスクリプトを解凍し、zabbix-server.confの「AlertScriptsPath」で指定されたディレクトリへ、フォルダごと配置する。私の環境の場合の配置先は以下ディレクトリとなる。

/etc/zabbix/alertscripts/

スクリプトの設定パラメーター編集

配置したスクリプト/etc/zabbix/alertscripts/sendmessage-smtp-php/sendmessage_smtp_php.shに対して、vi等にてパラメーター編集を行う。Gmailを使う場合は以下のように設定すれば良い。

--------------------
$MAIL_FROM      = "zabbix@localhost";
$MAIL_FROMNAME  = "Zabbix 障害通知";
$MAIL_SMTP_HOST = 'ssl://smtp.gmail.com:465';
$MAIL_SMTP_USER = '<gmailユーザー名>';
$MAIL_SMTP_PASS = '<gmailユーザーのパスワード>';
--------------------

Zabbixの設定

◆「管理」→「メディアタイプ」にてスクリプトを登録。

・名前:sendmessage_smtp_php.sh
・タイプ:スクリプト
・スクリプト名:sendmessage-smtp-php/sendmessage_smtp_php.sh
 ※絶対パスではなく「AlertScriptsPath」からの相対パスで記載



◆「管理」→「ユーザー」にてメール送信先の設定を実施。

・タイプ:sendmessage_smtp_php.sh
・送信先:<送信先メールアドレス>
・有効な時間帯: 1-7,00:00-24:00
・指定した深刻度のときに使用:すべてにチェック



◆「設定」→「アクション」にてメール送信時の条件を設定。
・名前:send mail
・デフォルトの件名:{TRIGGER.STATUS}: {TRIGGER.NAME}
・デフォルトのメッセージ:
--------------------
Trigger: {TRIGGER.NAME}
Trigger status: {TRIGGER.STATUS}
Trigger severity: {TRIGGER.SEVERITY}
Trigger URL: {TRIGGER.URL}

Item values:

1. {ITEM.NAME1} ({HOST.NAME1}:{ITEM.KEY1}): {ITEM.VALUE1}
2. {ITEM.NAME2} ({HOST.NAME2}:{ITEM.KEY2}): {ITEM.VALUE2}
3. {ITEM.NAME3} ({HOST.NAME3}:{ITEM.KEY3}): {ITEM.VALUE3}

Original event ID: {EVENT.ID}
--------------------
・リカバリメッセージ:チェックなし



・計算のタイプ:(A) and (B) and (C)
・アクションの実行条件:
--------------------
(A) メンテナンスの状態 期間外 メンテナンス
(B) トリガーの値 = 障害
(C) トリガーの深刻度 >= 軽度の障害
--------------------



メール送信テスト

設定完了したら実際にメールが飛ぶが試してみる。例として、ESXiからSNMPのwarm startを受信した際のメールは以下の内容となる。

--------------------
【件名】
Zabbix 障害通知 <hogehoge@gmail.com>

【本文】
Trigger: SNMP Trap
Trigger status: PROBLEM
Trigger severity: Average
Trigger URL:

Item values:

1. SNMP Trap log (esx01:snmptrap[]): 06:02:10 2016/05/04 PDU INFO:
  notificationtype               TRAP
  version                        0
  receivedfrom                   UDP: [192.168.33.11]:20623->[192.168.33.22]
  errorstatus                    0
  messageid                      0
  community                      public
  transactionid                  69
  errorindex                     0
  requestid                      0
VARBINDS:
  DISMAN-EVENT-MIB::sysUpTimeInstance type=67 value=Timeticks: (0) 0:00:00.00
  SNMPv2-MIB::snmpTrapOID.0      type=6  value=OID: SNMPv2-MIB::warmStart
  SNMP-COMMUNITY-MIB::snmpTrapAddress.0 type=64 value=IpAddress: 192.168.33.11
  SNMP-COMMUNITY-MIB::snmpTrapCommunity.0 type=4  value=STRING: "public"
  SNMPv2-MIB::snmpTrapEnterprise.0 type=6  value=OID: SNMPv2-MIB::snmpTraps
2. *UNKNOWN* (*UNKNOWN*:*UNKNOWN*): *UNKNOWN*
3. *UNKNOWN* (*UNKNOWN*:*UNKNOWN*): *UNKNOWN*

Original event ID: 200697
--------------------

参考資料

日本語アラートメールの送信方法
http://www.zabbix.jp/node/1441

2016年5月3日火曜日

ZabbixでESXiのSNMP Trapを監視する設定

自宅環境にZabbixを構築しており、ESXiからのSNMP Trapを監視できるように設定してみた。思いの外、手順が多かったので、忘れないようにまとめておく。

<環境>
・Zabbixバージョン:2.2.11
・Zabbixサーバ IPアドレス:192.168.33.22
・ESXiバージョン:VMware ESXi 6.0.0 Update 2
・ESXi IPアドレス:192.168.33.11
・SNMPコミュニティ名:public

1. snmptrapdの設定

まず、net-snmpをインストールする。net-snmpはZabbixインストール時の前提パッケージとなっているので、通常はインストールされており問題はないが、net-snmp-perlが入っていない場合は必要となるため追加でインストールする。

# yum install net-snmp
# yum install net-snmp-perl

次にsnmptrapdの設定として、/etc/snmp/snmptrapd.confに以下を追加する。
--------------------
authCommunity   log,execute,net public
perl do "/etc/zabbix/alertscripts/zabbix_trap_receiver.pl";
--------------------

次に、/etc/sysconfig/snmptrapdに以下を追加する。
--------------------
OPTIONS="-Lsd -p /var/run/snmptrapd.pid -M /usr/share/snmp/mibs:/usr/share/snmp/venders -m all"
--------------------

上記は、MIBの保存ディレクトリとして/usr/share/snmp/vendersも追加する設定を加える設定となる。指定したディレクトリへ、ESXiのMIBを配置することをお忘れなく。

※MIBは以下からダウンロードできる
SNMP MIB module file download (1013445)
https://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1013445

最後にサービス起動&起動時に自動起動するようにする。

# service snmptrapd start
# chkconfig snmptrapd on

2. Zabbixの設定① (CLIでの設定)

ZabbixでSNMPTrapを受信する方法として、SNMPTTを使うか、Zabbix付属のPerlスクリプトを使うかの2パターンがある。今回は後者のPerlスクリプトでの実装を行う。

まず、該当のPerlスクリプトを規定のディレクトリに配置する(デフォルトで置かれている可能性もあり)。

# cp /var/lib/zabbix/zabbix_trap_receiver.pl /etc/zabbixx/alertscripts/
# chmod 755 /etc/zabbixx/alertscripts/zabbix_trap_receiver.pl

次にZabbixの設定ファイルを編集する。

/etc/zabbix/zabbix_server.confの以下箇所を編集する。
--------------------
SNMPTrapperFile=/var/log/zabbix/zabbix_traps.tmp
StartSNMPTrapper=1
--------------------

最後にzabbix-serverをリスタートする。

# service zabbix-server restart

この状態でSNMP Trapを正常に受信し、スクリプトが実行されることを確認してみる。以下コマンドでテストTrapを送信する。

# snmptrap -v 1 -c public 127.0.0.1 '.1.3.6.1.6.3.1.1.5.3' '0.0.0.0' 6 33 '55' .1.3.6.1.6.3.1.1.5.3 s "teststring000"

/var/log/messagesにTrapの内容が表示されていればsnmptrapdの動作はOK。

# tail /var/log/messages
--------------------
May  3 21:49:04 t3022ce67 snmptrapd[15789]: 2016-05-03 21:49:04 0.0.0.0(via UDP: [127.0.0.1]:58671->[127.0.0.1]) TRAP, SNMP v1, community public#012#011IF-MIB::linkDown Enterprise Specific Trap (33) Uptime: 0:00:00.55#012#011IF-MIB::linkDown = Hex-STRING: E2 80 9C 74 65 73 74 73 74 72 69 6E 67 30 30 30 #012E2 80 9D
--------------------

さらに、/var/log/zabbix/zabbix_traps.tmpにTrapの内容が表示されていれば、Perlスクリプトもきちんと動作していることが確認できる。

# tail -20 /var/log/zabbix/zabbix_traps.tmp
--------------------
23:42:00 2016/05/03 ZBXTRAP 127.0.0.1
PDU INFO:
  notificationtype               TRAP
  version                        0
  receivedfrom                   UDP: [127.0.0.1]:38270->[127.0.0.1]
  errorstatus                    0
  messageid                      0
  community                      public
  transactionid                  48
  errorindex                     0
  requestid                      0
VARBINDS:
  DISMAN-EVENT-MIB::sysUpTimeInstance type=67 value=Timeticks: (55) 0:00:00.55
  SNMPv2-MIB::snmpTrapOID.0      type=6  value=OID: IF-MIB::linkDown.0.33
  IF-MIB::linkDown               type=4  value=STRING: "teststring000"
  SNMP-COMMUNITY-MIB::snmpTrapCommunity.0 type=4  value=STRING: "public"
  SNMPv2-MIB::snmpTrapEnterprise.0 type=6  value=OID: IF-MIB::linkDown
--------------------

3. ESXiの設定

Zabbixに監視設定を実施する前に、ESXiからSNMP Trapを飛ばす設定を実施しておく。ESXi6.0ではSNMPを有効にするためには、ESXi Shellから実施する必要があるため、SSHでESXiにログインした後、以下ファイルを編集&サービスリスタートにて有効化する。

/etc/vmware/snmp.xmlの下線の箇所を編集。
 ※<enable>:デフォルトfalseなのでtrueに変更
 ※<communities>:デフォルト空白なのでpublicに変更
 ※<targets>:デフォルト空白なので、Trap送信先を以下形式で指定
       <IPアドレス>@162 <コミュニティ名>
--------------------
<config><snmpSettings><enable>true</enable><port>161</port><syscontact></syscontact><syslocation></syslocation><EnvEventSource>indications</EnvEventSource><communities>public</communities><targets>192.168.33.22@162 public</targets><EventFilter>1.3.6.1.4.1.6876.4.90.0.401</EventFilter><engineid>00000063000000a100000000</engineid><loglevel>info</loglevel><authProtocol></authProtocol><privProtocol></privProtocol><largestorage>true</largestorage></snmpSettings></config>
--------------------

設定後、サービスをリスタートする。

[root@esx01:~] /usr/bin/services.sh restart

SNMPの設定確認を実施。

[root@esx01:~] esxcli system snmp get
--------------------
   Authentication:
   Communities: public
   Enable: true
   Engineid: 00000063000000a100000000
   Hwsrc: indications
   Largestorage: true
   Loglevel: info
   Notraps:
   Port: 161
   Privacy:
   Remoteusers:
   Syscontact:
   Syslocation:
   Targets: 192.168.33.22@162 public
   Users:
   V3targets:
--------------------

さらに、5分起きに出力されるTrapの抑制を実施する。

[root@esx01:~] esxcli system snmp set --notraps 1.3.6.1.4.1.6876.4.90.0.401

再度設定を確認。Notrapsに設定が反映されていることを確認する。

[root@esx01:~] esxcli system snmp get
--------------------
   Authentication:
   Communities: public
   Enable: true
   Engineid: 00000063000000a100000000
   Hwsrc: indications
   Largestorage: true
   Loglevel: info
   Notraps: 1.3.6.1.4.1.6876.4.90.0.401
   Port: 161
   Privacy:
   Remoteusers:
   Syscontact:
   Syslocation:
   Targets: 192.168.33.22@162 public
   Users:
   V3targets:
--------------------

4. Zabbixの設定② (Web GUIでの設定)

SNMP Trapを監視できるようにするため、ZabbixのWeb GUIにて、以下の順に設定していく。

4.1 テンプレートの作成

・テンプレート名:Template SNMP Trap
・所属グループ:Templates



4.2 アイテムの作成

・名前:SNMP Trap log
・タイプ:SNMP トラップ
・キー:snmptrap[]
・データ型:ログ
・ヒストリの保存期間(日):90
・ログの時間の形式:hh:mm:ss yyyy/MM/dd
・アプリケーションの作成:SNMP Trap
・アプリケーション:-なし-



4.3 トリガーの作成

・名前:SNMP Trap
・条件式:{Template SNMP Trap:snmptrap[].regexp(.*VMWARE-VMINFO-MIB.*)}=0
 ※VMWARE-VMINFO-MIBは情報レベルのTrapのため、トリガーの動作対象外とした
・障害イベントを継続して生成:チェック
・深刻度:重度の障害


4.4 ホストへテンプレート適用

作成したテンプレートをESXiのホストへリンクする。同時にSNMPインタフェースの設定も実施しておくこと。詳細な手順は割愛。

4.5 動作確認

「監視データ」→「概要」画面にてアプリケーションを「SNMP Trap」でフィルタするとSNMP Trapの受信状況がわかる。


テストTrapを飛ばして動作試験をする場合は、ESXiにてサービスをリスタートする(もっと簡単にTrapを飛ばす方法はあると思うが)。

[root@esx01:~] /usr/bin/services.sh restart

正常であれば、情報が更新される。SNMPv2-MIB::warmStartやVMWARE-VMINFO-MIB::vmwVmHBDetectedが出力されればOK。


参考

Zabbix Documentation 2.2 3 SNMPトラップ
https://www.zabbix.com/documentation/2.2/jp/manual/config/items/itemtypes/snmptrap

ESXi 5.1 ホスト上で、SNMP の有効化及びテストができない (2070242)
https://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=2070242

SNMP Trap is repeated every 5 minutes (2020271)
https://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=2020271

2016年4月30日土曜日

仮想ネットワークアプライアンス「VyOS」の導入・初期設定をしてみた

先日自宅の検証環境用途としてESXiサーバを構築し、複数台の仮想マシンを作ったのだが、インターネット接続に使用しているセグメントと検証用のセグメントを分離したいと考えていた。

構成として考えているのは以下の様になる。ESXiのvSwitchを使って内部セグメントを作り、1台仮想マシンでルーターを建てて、必要に応じてルーティングできるようにしたい。

   |
   |
  ◎ブロードバンドルーター
   |
   |
--------------------------vSwitch0 192.168.33.0/24 外部セグメント
      |                     |
      | .31          PC/NAS etc
     ◎仮想ルーター
      | .31
      |
--------------------------vSwitch1 192.168.11.0/24 内部セグメント
            |
     検証用サーバ etc

上記を実現するために当初はLinuxで仮想ルーターを作ろうと思っていたのだが、オープンソースで「VyOS」というネットワークアプライアンスOSが存在することがわかったので使ってみることにした。

以下にインストールから初期設定までに実施内容を記載する。

VyOSのインストール

VyOSのインストールはVyOS.jpのユーザーガイドに詳しく記載されているため、そちらを参照。


基本操作

VyOSはよくあるネットワーク機器のような操作性を持っており、通常モードと設定モードの2つがある。ただし、CISCOのOSと異なり特権モードとグローバルコンフィグレーションモードといった違いはない。

現在どちらのモードとなっているかは、プロンプトから見分けることができる。

$ ←通常モード
# ←設定モード

コマンド体系については、確認系のコマンド(show ~)はCISCOライクだが、設定系(set ~)・削除系(delete ~)のコマンド体系はわりと異なる印象。また、TAB補完については、コマンドとその意味が表示されるなど、かなり親切に作られている。

設定投入時は通常以下の流れとなる。

$ configure  ←設定モードに移行
# set ~      ←設定コマンドを投入(削除の場合はdelete ~)
# compare   ←現在の設定と未反映の設定の差異を確認
# commit     ←設定の反映
# save         ←設定の保存
# exit          ←通常モードに戻る
$ show ~    ←設定確認

初期設定

起動直後の状態ではネットワーク設定がされていないので通信ができない。したがって、vSphere Clientの仮想コンソールを利用して初期設定を行う。

◆sshアクセスの有効化
# set service ssh port '22'

◆インターフェースの設定
外側のインターフェースのIP設定
# set interfaces ethernet eth0 address '192.168.33.31/24'
# set interfaces ethernet eth0 description 'OUTSIDE'

内側のインターフェースのIP設定
# set interfaces ethernet eth1 address '192.168.11.31/24'
# set interfaces ethernet eth1 description 'INSIDE'

◆デフォルトゲートウェイ設定
0.0.0.0/0に対するルーティング設定を実施。これがデフォルトゲートウェイと同義になる
# set protocols static route 0.0.0.0/0 next-hop 192.168.33.1 distance '1'

確認
$ show ip route
---------------
Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF,
       I - ISIS, B - BGP, > - selected route, * - FIB route

S>* 0.0.0.0/0 [1/0] via 192.168.33.1, eth0
C>* 127.0.0.0/8 is directly connected, lo
C>* 192.168.11.0/24 is directly connected, eth1
C>* 192.168.33.0/24 is directly connected, eth0
---------------

◆タイムゾーン設定
# set system time-zone Asia/Tokyo

◆ntp設定
既存のNTP設定をすべて削除
# delete system ntp server 

新たにNTP同期先を設定
# set system ntp server 192.168.33.3

設定を反映して保存
# commit
# save

※反映時に以下メッセージが表示される
---------------
[ system time-zone Asia/Tokyo ]
Stopping enhanced syslogd: rsyslogd.
Starting enhanced syslogd: rsyslogd.

[ system ntp ]
Stopping NTP server: ntpd.
Starting NTP server: ntpd.
---------------

NTPの同期状況の確認
$ show ntp 
     remote           local      st poll reach  delay   offset    disp
=======================================================================
*192.168.33.3    192.168.33.31    2   64    1 0.00014 -0.000208 0.96825

◆コンソールデバイスの削除
仮想マシン環境ではコンソールデバイスが不要であり、ログに以下の様なエラーが10秒毎に出力されてしまうため無効化する。

---------------
Apr  6 17:03:44 vyos001 getty[22165]: ttyS0: tcgetattr: Input/output error
Apr  6 17:03:54 vyos001 getty[22166]: ttyS0: tcgetattr: Input/output error
Apr  6 17:09:05 vyos001 getty[22167]: ttyS0: tcgetattr: Input/output error
Apr  6 17:09:15 vyos001 getty[22169]: ttyS0: tcgetattr: Input/output error
Apr  6 17:09:25 vyos001 getty[22170]: ttyS0: tcgetattr: Input/output error
Apr  6 17:09:35 vyos001 getty[22171]: ttyS0: tcgetattr: Input/output error
---------------

現在の設定を確認
# show system console 
---------------
 device ttyS0 {
     speed 9600
 }
---------------

デバイスを削除
# delete system console device ttyS0 

SourceNAT設定

内部セグメントにいる192.168.11.110の仮想マシンにSourceNATをかけて、インターネット接続をできるように設定してみる。

outbound-interfac(通信が出て行く側のインタフェース)をeth0に設定
# set nat source rule 110 outbound-interface eth0

ソースアドレス(NAT変換対象)を192.168.11.110に設定
# set nat source rule 110 source address '192.168.11.110'

NAT変換後IPアドレスを192.168.33.31(VyOSのeth0のIPアドレス)に設定
# set nat source rule 110 translation address '192.168.33.31'

設定確認
$ show nat source rules
---------------
Disabled rules are not shown
Codes: X - exclude rule, M - masquerade rule

rule    intf              translation
----    ----              -----------
110     eth0              saddr 192.168.11.110 to 192.168.33.31
        proto-all         sport ANY
---------------



Firewall設定

外部セグメントから内部セグメントに対してFirewallによる通信制御を行う。とりあえず、pingと管理通信のみ実施可能になるよう設定する。

内部と外部セグメントのグループを作成
# set firewall group network-group NET-11 network '192.168.11.0/24'
# set firewall group network-group NET-33 network '192.168.33.0/24'

管理通信のポート番号のグループを作成
# set firewall group port-group PORT-MNT port '22'
# set firewall group port-group PORT-MNT port '443'
# set firewall group port-group PORT-MNT port '3389'

OUTSIDE-INというFirewallを作成し、デフォルト拒否に設定
# set firewall name OUTSIDE-IN default-action 'drop'

TCPの確立済み戻り通信の許可
※established:確立済みパケット
※related:確立済みパケットに関連するパケット
# set firewall name OUTSIDE-IN rule 10 action 'accept'
# set firewall name OUTSIDE-IN rule 10 state established 'enable'
# set firewall name OUTSIDE-IN rule 10 state related 'enable'

外部からのecho-requestの許可
# set firewall name OUTSIDE-IN rule 20 action 'accept'
# set firewall name OUTSIDE-IN rule 20 icmp type-name 'echo-request'
# set firewall name OUTSIDE-IN rule 20 protocol 'icmp'

外部からの管理通信の許可
# set firewall name OUTSIDE-IN rule 100 action 'accept'
# set firewall name OUTSIDE-IN rule 100 destination group network-group 'NET-11'
# set firewall name OUTSIDE-IN rule 100 destination group port-group 'PORT-MNT'
# set firewall name OUTSIDE-IN rule 100 protocol 'tcp'

外部インタフェースにFirewallを適用
# set interfaces ethernet eth0 firewall in name 'OUTSIDE-IN'

設定の確認
$ show firewall
---------------
-----------------------------
Rulesets Information
-----------------------------
--------------------------------------------------------------------------------
IPv4 Firewall "OUTSIDE-IN":

 Active on (eth0,IN)

rule  action   proto     packets  bytes
----  ------   -----     -------  -----
10    accept   all       767928   1335923290
  condition - saddr 0.0.0.0/0 daddr 0.0.0.0/0 state RELATED,ESTABLISHED

20    accept   icmp      801      76896
  condition - saddr 0.0.0.0/0 daddr 0.0.0.0/0 icmptype 8

100   accept   tcp       21       1080
  condition - saddr 0.0.0.0/0 daddr 0.0.0.0/0 match-DST-NTWRK-GROUP NET-11 match
              -set PORT-MNT dst

10000 drop     all       307      36694
  condition - saddr 0.0.0.0/0 daddr 0.0.0.0/0
---------------

参考

VyOS.jp


2016年3月28日月曜日

Shuttle DS81を買ってESXi 6.0をインストールした話② (ESXi Custom Image作成~インストール完了まで)

前回、DS81の起動まで成功したので、引き続きOSインストールを行う。複数の仮想化サーバを構築したいので、ESXi 6.0をインストールすることにする。

ESXi Custom Imageの作成

DS81のNICは「Realtek 8168」という種類のようだが、これは通常のESXiのインストールメディアにはドライバーが組み込まれていない。ESXiはインストール時にNICが1つも見つからない場合、インストール画面が先に進めなくなる仕様となっているため、事前にドライバーを組み込んだインストールイメージを作る必要がある。これをCustom Imageという。

Custom Image作成は、以下のサイトのPowerCLIベースのツールを利用する。私が利用した際は、「Version 2.4.3 (2015-09-11)」となっていた。

・ESXi-Customizer-PS
http://www.v-front.de/p/esxi-customizer-ps.html

前述のとおりPowerCLIベースのツールであるため、PowerCLIもダウンロードしてインストールしておく。

・vSphere PowerCLI 6.3
https://developercenter.vmware.com/web/dp/tool/vsphere_powercli/6.3

Realtekのドライバは以下からダウンロードする。

・Realtek NIC on vSphere 6
http://www.vdicloud.nl/2015/02/07/realtek-nic-on-vsphere-6/
ファイル名:net51-drivers-1.0.0-1vft.510.0.0.799733.x86_64

以上で必要なものは揃った。

後はPowerCLIを起動して、以下の構文でESXi-Customizer-PSを実行するだけでよい。なお、インターネットからISOをダウンロードしつつドライバを組み込んでCustom Image化するので、インターネット接続できる端末にて実行すること。

   .\ESXi-Customizer-PS-v2.4.ps1 <バージョン> -pkgDir <ドライバ保存フォルダ>

   <バージョン>
    -v50 : Create the latest ESXi 5.0 ISO
    -v51 : Create the latest ESXi 5.1 ISO
    -v55 : Create the latest ESXi 5.5 ISO
    -v60 : Create the latest ESXi 6.0 ISO

   <ドライバ保存フォルダ>
    Realtekのファイルを保存したフォルダを指定。

以下に実際に実行した結果を記載する。

   .\ESXi-Customizer-PS-v2.4.ps1 -v60 -pkgDir c:\mydoc\vib\


以下のとおり、Realtekのドライバーが組み込まれているのがわかる。

-----------------------------------------------
Loading Offline bundles and VIB files from C:\mydoc\vib\ ...
   Loading C:\mydoc\vib\net51-drivers-1.0.0-1vft.510.0.0.799733.x86_64.vib ... [OK]
      Add VIB net51-drivers 1.0.0-1vft.510.0.0.799733
 [New AcceptanceLevel: CommunitySupported] [OK, added]
-----------------------------------------------

成功すると、ESXi-Customizer-PSと同じフォルダに「ESXi-6.0.0-20160302001-standard-customized.iso」というファイルが出力される。6.0のどのバージョンになるか気になったので、インストール後にバージョン確認をすると、以下のとおりISO作成時点の最新版となっているようだった。

   [root@esx01:~] vmware -vl
   VMware ESXi 6.0.0 build-3620759
   VMware ESXi 6.0.0 Update 2

ブート可能なUSBメモリの作成

Shuttle DS81にESXiをインストールするため、USBからのインストールをすることにする。検索するといくつかフリーソフトがあるようだが、今回は「Rufus」を使うことにする。

・Rufus
http://rufus.akeo.ie/

このツールを使って、以下の様な設定でブート用USBメモリを作成した。


何やらエラーが出たが、よくわからないので「はい」を選択しておく。その後は特に問題なく、USBへの書き込みが完了した。


ESXiインストール

後はESXiのインストールとなるのだが、起動する前に、先ほど作ったUSBメモリを背面のUSB3.0ポートに指しておく。起動直後に「DEL」キーを押しBIOSに入り、Boot順位変更の画面を表示する。この際にUSBメモリが選択可能となっているはずなので、順位を一番上に変更しておく。

なお、私の場合、流用したSSDに、以前のESXi環境がインストールされていたため、意図的にSSDをBoot対象から消しておいた。

後はBIOSを保存して再起動すると、USBメモリからインストーラが起動するはず。NICも正常に認識していれば成功となる。

まとめ

久しぶりにCPUやメモリを自分で組み立ててPCを作るのは、なかなか楽しい経験だった。また、ESXiのCustom Imageの作成やUSBメモリからのブート方法を試す良い機会だった。

現在このPCはWindows、Linuxだけでなく、メーカーから提供されている評価版製品や仮想ルーター等をインストールして遊んでいる。検証で遊ぶ分にはCPU・メモリ・ディスク速度の性能はまったく問題はない。しいて言えば、ディスク容量が256GBと少ないので、将来的にはmSATAの増設を実施するかもしればい。

2016年3月26日土曜日

Shuttle DS81を買ってESXi 6.0をインストールした話① (組み立て~起動まで)

古いノートPCにVMware ESXi 6.0をインストールして、お遊び用の仮想化サーバとして利用していたのだが、以下問題があった。

 ・低すぎるスペック(Core 2 Duoの2コアのCPU・4GBのメモリ)
 ・起動中はアイドル状態でもかなり本体が熱い

特に熱問題は火事につながるのではないかと心配になるほどだったので、いっそのことPCを1個新調することにした。

機器選定

機器選定を実施するにあたり、3つの条件があった。

 ①大きなデスクトップPCを置くスペースは確保できないので、「省スペース」であること
 ②古いノートPCで使用していた2.5インチのSSDを流用できること
 ③低コストであること(目標は5万円以下)

上記を満たすものをAmazonで探すと、最終的な候補は以下となった。

 ①Intel NUC Kit NUC5i3RYH
  ・CPU:Core i3-5010U
  ・対応メモリ:DDR3L SODIMM 1.35V、1333、1600、1866MHz対応、16GB MAX
  ・対応ストレージ:2.5インチHDDorSSD 9.5mm厚対応/M.2 SSD
  ・大きさ/重量:13.7 x 10 x 12.5 cm / 408g
  ・消費電力:65W
  ・38,831円

 ②Shuttle SH170R6
  ・CPU:LGA1151対応 (第6世代 Intel Coreプロセッサー対応 最大TDP95W)
  ・対応メモリ:DDR4 2133 DIMM 4スロット (最大容量64GB) デュアルチャンネル×2
  ・対応ストレージ:3.5インチHDDorSSD x 2、M.2スロット
  ・大きさ/重量:216 (幅)× 332 (奥行き)× 198 (高さ)mm / 3.5kg
  ・消費電力:300W
  ・33,980円

 ③Shuttle DS81
  ・CPU:LGA1150対応CPU(TDP65W迄) Haswell Refresh対応
  ・対応メモリ:DDR3 1333/1600 SO-DIMM、2スロット,デュアルチャンネル (最大容量16GB)
  ・対応ストレージ:2.5インチHDDorSSD、mSATA
  ・大きさ/重量:165(幅)×190(奥行き)×43(高さ)mm / 1.63kg
  ・消費電力:90W
  ・22,680円

①は最初から最も小さくコンパクトになるが、CPUの選択ができず、性能から考えるとややコストパフォマンスが悪い。②は拡張性十分だが筐体が大きすぎる(特に5インチベイがあるので、幅が普通のデスクトップと同等)し、それに高価。③は対応するCPUに制約はあるものの、コストが安く大きさもちょうどよい。

ということで、③のShuttle DS81にて省スペースPCを組み上げることにした。また、DS81にはPCでは珍しく、オンボードで1Gb Ethernetが2ポートもあるので、将来的に面白い使い方ができそうということも選定理由となった。

Shuttle DS81に必要なパーツ選定

Shuttle DS81はベアボーンキットであり、CPU・メモリ・ディスクはすべて別に入手が必要。今回は仮想化サーバ用途なのでグラフィック性能は必要なく、重い処理をさせる予定もないので、CPUはCore i3を選定した。逆にメモリは仮想サーバが増えれば増えるほど必要となるので、最大の16GB(8GB x 2)で組むことにした。ディスクはもともと古いノートPCで使用していた256GBの2.5インチSSDを流用する。

後は細かい備品として、ディスプレイ出力用のHDMIケーブル(ディスプレイは所有していないので、一時的にテレビで初期設定する想定)、初期設定用USBキーボード、冷却ファンのホコリフィルターを購入。結果として明細は以下のとおりとなった。


 ・本体:Shuttle DS81 ¥ 22,680
 ・CPU:Intel Core i3-4170 3.70GHz LGA1150 ¥ 14,469
 ・メモリ:SP シリコンパワー 8GB×2枚組 DDR3-1600 PC3-12800 SO-DIMM ¥ 8,990
 ・USBキーボード:サンワサプライ SKB-L1UBK ¥ 496
 ・HDMIケーブル:エレコム  1.5m ブラック \ 712
 ・冷却ファンフィルター :SilverStone SST-FF141 \ 545
 -----------------
 ・合計:\ 47,892

予算ちょうど。Amazonやヨドバシ.comで注文したら、2日以内に全部家に届くというすごい時代。

DS81の組み立て

ものが集まったので、組み立てを行うことにする。

1. DS81開封

DS81を箱から出すと、内容物は以下のとおりだった。


 ・本体
 ・ACアダプター
 ・取付用金具
 ・ネジ
 ・熱伝導グリス
 ・CPUスロットカバー
 ・各言語のマニュアル
 ・DVD

DS81の背面。1Gb Ethernet x 2、シリアルポート x 2、ディスプレイポート x 2、HDMI x 1、USB x 4(2つはUSB3.0対応)という、通常のデスクトップPCでは見かけない面白いインタフェース構成。シリアルポートの使い道がまったく思いつかない。


2. 分解

CPUやメモリを取るつけるため、蓋を開けて分解していく。蓋は後ろのネジを2箇所緩めれば簡単に開く。



蓋を開けた直後はファンと2.5インチベイしか見えない状態なので、さらに分解していく。

最終的にはCPUスロットとメモリスロットにアクセスできるようになった。


3. CPU取り付け

CPUの固定具を開け、CPUを起き、固定具にて固定するだけ。



固定後に熱伝導グリスを塗ってからファンを取り付ける。熱伝導グリスの塗り方は諸説あるし、塗り方を変えてもあまり温度に変化がないという記事も見かけたりする。結果的に私は均等に塗ろうとして失敗。あきらめてファンを取り付けたが、現状支障はなさそうということを伝えておく。


4. メモリ取り付け

斜め45度でスロットに差し込み倒すだけ。とても簡単。


5.SSD取り付け

2.5インチベイに付属のネジを使って止めるだけ。電源とSATAケーブルは初期状態で使える位置に出ているので、それを差し込む。


6. 蓋取り付け

最後に蓋を取り付けて完成。蓋のネジは取り外ししやすいように、手で回せるネジに変えておいた(本当は付属の金具取り付け用のネジのようだが、大きさはちょうどよい)。


なお、DS81は上部の穴から吸い込み、側面から熱を逃がす作りとなっているので、フィルターを購入して上部の穴に付けておいた。

起動

完成したのでいよいよ起動させてみる。ディスプレイは持っていないのでテレビにHDMIで繋げ、今回のために購入した激安キーボードを接続して電源をONする。マウスは不要なので接続しない。BIOSに入りたかったのだがキーがわからず、もともとSSDにインストールしていたESXiが起動してしまう失敗を数回繰り返した後、DELキーでBIOSに入ることに成功。

BIOSではCPUもメモリもきちんと認識していた。


一旦、ここまで。次回はESXi 6.0のCustom Image作成からインストール完了までを記載する。


2016年3月5日土曜日

Linuxで止めるべきサービスと止めないサービスの一覧

Linuxをインストールして一番最初の作業として、不要なサービスの停止がある。ディストリビューションやバージョンによってサービス名が微妙に異なったりするのだが、今回以下OSを新規インストールする機会があり、サービスの取捨選択を実施する必要があった。

 ・対象OS : Red Hat Enterprise Linux Server release 6.2 (Santiago)
 ・イントール方法 : 基本サーバ

私が設定した内容を以下に記載するが、サービス停止は考え方・ポリシー・好みによって、人によって判断が変わるので注意する。同じような情報はインターネット上に無数に存在するので、そちらも参考にした方がよい。

サービス一覧取捨選択結果

まずは以下コマンドで、起動時に自動で立ち上がるサービスを確認する。

# chkconfig --list | grep 3:on
※GUI環境を使う場合は、grep 5:onなどに変える

上記の出力結果にて、onのままにするもの・offにするものを以下のように選択した。

--------------------------
abrt-ccpp       0:off   1:off   2:off   3:on    4:off   5:on    6:off
abrt-oops       0:off   1:off   2:off   3:on    4:off   5:on    6:off
abrtd           0:off   1:off   2:off   3:on    4:off   5:on    6:off
→OFF:自動バグ報告ツール (ABRT)。まったく不要というわけではないが、使用方法がよくわからない

acpid           0:off   1:off   2:on    3:on    4:on    5:on    6:off
→OFF:電源管理デーモン。仮想マシンで常時起動で問題ない

atd             0:off   1:off   2:off   3:on    4:on    5:on    6:off
→ON:at実行ツール。使うことがあるかもしれないのでON

auditd          0:off   1:off   2:on    3:on    4:on    5:on    6:off
→ON:操作ログの収集・監査をするためのデーモン。操作ログが不要な場合はOFFでもよさげ

autofs          0:off   1:off   2:off   3:on    4:on    5:on    6:off
→ON:ファイルシステムの自動マウント機能。OSの機能として必須

cpuspeed        0:off   1:on    2:on    3:on    4:on    5:on    6:off
→OFF:CPU電力管理デーモン。仮想マシンでは不要

crond           0:off   1:off   2:on    3:on    4:on    5:on    6:off
→ON:定期タスク実行ツール。OSの機能として必須

cups            0:off   1:off   2:on    3:on    4:on    5:on    6:off
→OFF:印刷は特に想定しないのでOFF

haldaemon       0:off   1:off   2:off   3:on    4:on    5:on    6:off
→OFF:ハードウェア情報収集。同等の機能がudev等に引き継がれておりOFFにしてしまって問題なさそう

ip6tables       0:off   1:off   2:on    3:on    4:on    5:on    6:off
→OFF:IPv6用ファイアウォール。IPv6は利用していない

iptables        0:off   1:off   2:on    3:on    4:on    5:on    6:off
→OFF:IPv4用ファイアウォール。特にセキュリティ上必要ではないのでOFF
 (本当はきちんと設定して有効にした方がよい)

irqbalance      0:off   1:off   2:off   3:on    4:on    5:on    6:off
→ON:割り込み要求(IRQ)を複数CPUで分散するためのデーモン

kdump           0:off   1:off   2:off   3:on    4:on    5:on    6:off
→OFF:カーネルのクラッシュダンプ取得機能。商用で使うサーバーでなければOFF

lvm2-monitor    0:off   1:on    2:on    3:on    4:on    5:on    6:off
→ON:LVM利用時の監視用デーモン。通常LVMは使用しているのでON

mdmonitor       0:off   1:off   2:on    3:on    4:on    5:on    6:off
→OFF:ソフトウェアRAIDの監視機能

messagebus      0:off   1:off   2:on    3:on    4:on    5:on    6:off
→OFF:D-Busと呼ばれるアプリケーション間の通信を使う場合はONだが、通常OFFで問題なさそう

netfs           0:off   1:off   2:off   3:on    4:on    5:on    6:off
→OFF:NFSの自動マウント・アンマウント昨日。NFSサーバー用途として利用しないのでOFF

network         0:off   1:off   2:on    3:on    4:on    5:on    6:off
→ON:ネットワーク接続するために必須

nfslock         0:off   1:off   2:off   3:on    4:on    5:on    6:off
→OFF:NFSサーバー用途として利用しないのでOFF

portreserve     0:off   1:off   2:on    3:on    4:on    5:on    6:off
→ON:TCP/IPのポートを管理するデーモンのようだが、よくわからないのでON

postfix         0:off   1:off   2:on    3:on    4:on    5:on    6:off
→OFF:メール送信機能は使わない

qpidd           0:off   1:off   2:on    3:on    4:on    5:on    6:off
→OFF:Apache Qpidというアプリケーション間の通信規格を使うためのデーモンだが、使うことはなさそう

rhnsd           0:off   1:off   2:on    3:on    4:on    5:on    6:off
→OFF:Red Hat Network Daemon。定期的にRed Hat Networkに接続して更新確認をする

rhsmcertd       0:off   1:off   2:off   3:on    4:on    5:on    6:off
→OFF:Red Hatサブスクリプションマネージャーデーモン。いったん止めておく

rpcbind         0:off   1:off   2:on    3:on    4:on    5:on    6:off
→OFF:NFSサーバー用途として利用しないのでOFF
→ON:NFSクライアントを使い場合があるのでON (2016/5/8 修正)

rpcgssd         0:off   1:off   2:off   3:on    4:on    5:on    6:off
→OFF:NFSv4にKerberos認証の機能を提供するデーモン。NFSサーバー用途として利用しないのでOFF

rpcidmapd       0:off   1:off   2:off   3:on    4:on    5:on    6:off
→OFF:NFSv4にて利用するらしい。NFSサーバー用途として利用しないのでOFF

rsyslog         0:off   1:off   2:on    3:on    4:on    5:on    6:off
→ON:RHEL6.0から導入された新しいsyslog。OSの機能として必須

sshd            0:off   1:off   2:on    3:on    4:on    5:on    6:off
→ON:SSH接続するために必須

sysstat         0:off   1:on    2:on    3:on    4:on    5:on    6:off
→ON:OSリソース状態確認ツール。役に立つことがありそうなのでON(不要ならOFFでもOK)

udev-post       0:off   1:on    2:on    3:on    4:on    5:on    6:off
→ON:新規ハードウェア等を自動で検知する。NIC追加時などに役立つことがあるのでON
--------------------------

不要サービス停止の設定方法

offにするサービスについて、以下のとおりコマンドを流し込み一気に設定する。

--------------------------
chkconfig abrt-ccpp off
chkconfig abrt-oops off
chkconfig abrtd off
chkconfig acpid off
chkconfig cpuspeed off
chkconfig cups off
chkconfig haldaemon off
chkconfig ip6tables off
chkconfig iptables off
chkconfig kdump off
chkconfig mdmonitor off
chkconfig messagebus off
chkconfig netfs off
chkconfig nfslock off
chkconfig postfix off
chkconfig qpidd off
chkconfig rhnsd off
chkconfig rhsmcertd off
chkconfig rpcbind off
chkconfig rpcgssd off
chkconfig rpcidmapd off
--------------------------

最終的な設定結果は以下のようにシンプルになった。

--------------------------
# chkconfig --list | grep 3:on
atd             0:off   1:off   2:off   3:on    4:on    5:on    6:off
auditd          0:off   1:off   2:on    3:on    4:on    5:on    6:off
autofs          0:off   1:off   2:off   3:on    4:on    5:on    6:off
crond           0:off   1:off   2:on    3:on    4:on    5:on    6:off
irqbalance      0:off   1:off   2:off   3:on    4:on    5:on    6:off
lvm2-monitor    0:off   1:on    2:on    3:on    4:on    5:on    6:off
network         0:off   1:off   2:on    3:on    4:on    5:on    6:off
portreserve     0:off   1:off   2:on    3:on    4:on    5:on    6:off
rsyslog         0:off   1:off   2:on    3:on    4:on    5:on    6:off
sshd            0:off   1:off   2:on    3:on    4:on    5:on    6:off
sysstat         0:off   1:on    2:on    3:on    4:on    5:on    6:off
udev-post       0:off   1:on    2:on    3:on    4:on    5:on    6:off
--------------------------

これで一度リブートすれば、必要最低限なサービスで起動したLinuxができあがる。ここから必要に応じてyumやrpmでパッケージをインストールしたりして、必要な機能を足していくのが良い。