IBM 現場SEのITな日々

IBM現場SEが日々駆使している技術、現場SEの経験・知見を綴るブログです

(利根川)空調設備も意外と大事!?

人間でも扇風機に局所的にあたっていると風邪をひくという説がありますがサーバーも同じでした。。

 

Flex System x240 M5 CMM の Event Log に、不定期に以下の警告イベントが記録され、アラート発報される。
Message:
Hot air exiting from the rear of the chassis might be recirculated in the inlet air at the front of the chassis. High Temperature: xx℃, Low Temperature: xx℃.

 

1)温度警告のメッセージだが設定値はノード間の最高温度と最低温度の差を設定するため(defalt=5で1-9を設定)最大温度差の"9"を設定したが
現象は解消せず。

2)発生しているラックは14ノード搭載されておりほぼ満杯の状態であるため、ラック下部と上部の温度差が大きいと(9度以上)判断。

3)ラック下部が冷えすぎ、上部に冷気が届いていない、という仮説で空調吹出口をラック全体にあたるよう変更(吹出口を真下でなく少しずらした)したところアラートが出なくなった。

ラック内で温度差が出ない(空気循環が正常になる)ように空調とサーバーのラッキング(隙間をあけるとか)を考える必要がある。

(YK) AWSの運用をして率直に感じたこと

長年、IBM Power Systems をベースにインフラ構築をしてきましたが、とあるきっかけで1年半くらいAWSの運用をしたので、率直に感じたことを書いてみます。

ただ、IBM Cloud をよく知らないので、AWSとの比較はまだ別の機会にでも投稿しようと思います。

まず、ちょっと驚いたのが、災対環境が簡単に構築できてしまうことです。
AWSは サイトが物理的に Availability Zone と呼ばれる データセンターに分かれていて、このZoneを跨いで冗長構成を組むことが簡単にできてしまいます。
Zone間の通信は高速回線で繋がれていますが、若干速度が落ちるのでシビアな業務では注意が必要です。

あとは、Cloudなので当たり前ですが、部品を組み合わせるように、ロードバランサーやサーバー、ディスクの増強等を簡単にできてしまうところは、オンプレミス中心で仕事をしてきたSEとしては大変便利に感じます。

ここまでは利点について書いてきましたが、運用していて苦労した点についても書かないといけないですね。

それは、AWS側からの突然やってくるOS再起動要求です。
機器の老巧化や、障害、メンテナンス等の理由で「2週間以内に再起動してください」というお知らせがやってきます。運用としてはそこからスケジュール調整をするのですが、だいたい短期間に次から次へと、この厄介なお知らせがやってくるのです。1週間で数十台を再起動したこともありましたが、対象サーバが本番環境でないことをいつも願っていました。

当初は、AWSサイト間でディスク共有できない等の制約があったため、OracleRACが組めないこともあり、DBサーバの再起動では切替のためにサービスを数分止めなければならず、停止調整に苦労しました。
ただ、現在はディスク共有するサービスも追加されているようです。

とはいえ、一番苦労したのは純粋な障害対応ですが、、、

以上

(守田)SEとしての情報収集は何を利用していますか?

こんにちは。


私からはSEとしての情報収集について書こうかと思います。
職種柄、情シスのお客様と接する機会が多く雑談もしたりしますが、時々ふと質問されることがあります。一応大抵は答えることはできるのですが、恥ずかしながら返事に困ることもあります。そのような経験から、SEそれぞれの技術分野の情報源はさておき、個人的な趣味や偏見もあるかと思いますが、情シスのお客様目線で押さえておくべきと思われる新聞雑誌はこれらかなと。


新聞
 言うまでもないですが、お客様目線でいくとやはり日経新聞かと思います。そんなの常識といわれればそれまでなのですが。。。以前は新聞なら日経となんとなく思っていた程度でしたが、実際に日経新聞にセキュリティ関連の記事が掲載されると、必ずと言っていいほど問い合わせがあることがありました。もちろんセキュリティ関連だけでなく一般的な経済動向やこちらから情報提供する上でも広く浅くの情報源としています。数年前ではスマホの画面も小さく、スマホで読もうという気にはならなかったのですが、画面が大きくなったこともあり、新聞の紙面そのままのイメージで読めるようになっています。最近ではユーザーインターフェースもだいぶ改善され拡大縮小も楽になり、なんとか片手でも通勤中に読めるので便利ですね。

f:id:users-6h324:20170825182621p:plain


雑誌
IT分野の情報源としては多くの情シスの方も読んでいる日経コンピュータを選んでいます。この雑誌で「動かないコンピュータ」という連載記事があります。なんだかんだ言っても、他人の失敗には多く学ぶ点があり、興味深く読ませていただいています。SEとしては「システムダウン」とか「全面障害」などの言葉がビビっときます。もし自分が担当してたらと想像する一方、どう解決したのかと顛末が気になります。また、大きな業務影響のある障害の記事が多いのですが、身近なところではマックの記事がありました。店頭でゴメンナサイレターが長期間貼り出されていたことを知っている方も多いと思います。正直放置しているのかと思いましたが、そうではなかったようでこの記事でトラブルの内容がわかりました。WannaCryの亜種に感染していたようです。 

f:id:users-6h324:20170825182715p:plain

 

セキュリティー関連

これは見ていること前提でお客様と会話が始まりますので、定期的に目を通しています。

f:id:users-6h324:20170825183444p:plain

 

今後のIT動向
新聞は世間一般の情報、日経コンピュータはIT分野の過去あるいは現在の動向についての情報ですが、今後の動向という意味ではガートナーの記事を情報源としています。無料の記事しか読んでいませんが、ある程度参考になります。

 f:id:users-6h324:20170825183015p:plain

 

(山賀) RPAとAI(機械学習)について最近思ったこと

 

壮大なタイトルをつけてみました。

最近OJTでRPA(Blue Prism)を用いた地震情報収集システムを開発しています。そこで、それを通して調べたことや思ったことについて少しだけ書いてみようと思います。

また、私は大学院生の時、金融市場の研究をしていました。RPAを用いてクローラー(ウェブ上の文書や画像などを周期的に取得し、自動的にデータベース化するプログラム)を作成すれば、こんなことができるのでは?と株式市場に対する機械学習の応用例に関する論文を読んで思ったことがあるので、それについても書いてみます。

 

① そもそもRPAとAIの違いとは?

インターネットで調べてみると、以下のような内容が多いでしょうか。

・RPA〜人間が行うデスクトップ画面上の操作を、ルールに基づいて自動的に再現する技術
・AI(機械学習)〜学習・推論・認識・判断などの人間の知能を持たせたコンピューターシステム

自分で触れてみて、違いとして挙げられるのはRPAは完全に指示したことで動く(Excelを開くとかWeb上のこのページの情報を取ってくるとか)。機械学習は入力に対する出力を学習させて、自分自身で判断させるようにする(犬の画像を見せて、その特徴を覚え、犬の画像という入力が来たらこれは犬だ!と判断させるとか。)ということでしょうか。RPAは定型作業を、機械学習は非定型作業を行わせることができる(可能性がある)というのが大まかな世の中で通っている認識と言えそうです。

 

 

② RPAの実際の社会での応用例

Web上に出ている資料を読むと以下のような事例がすでにあるそうです。

・経費チェックロボット

経費申請額の妥当性をウェブで調査、相場より高価な申請はアラート通知。

・航空券価格自動修正ロボット

競合会社と自社の航空券価格を比較、自社価格が常に低価格となるように自動修正。

・外貨積立金学目標到達監視ロボット

外貨建積立金額が目標値に到達した瞬間に、低リスクの円建積立に自動変更する保険商品を開発。

・WEBシステム負荷テストロボット 

システムへの大量同時アクセスを行い、システムの負荷耐性やレスポンス速度を測定。

 

 

適用できそうな部分の共通点として挙げられそうなのは以下の内容でしょうか

・チェック業務(領収書の照合、物品購入額の妥当性調査など)
機械的反復作業(Webサイトの巡回情報収集、サイト登録者への自動メール送信など)
・複数システムに跨る業務(受注システムから顧客システムへの登録、誤入力照合など)
・一定の業務ボリュームがあること
・意思決定の介在しないルールベースの定型業務であること(ID作成、アプリ別権限付与など)

 

クローラーのために作られたソフトと言っても過言ではないかもしれません。

 

 

③ RPAと機械学習を用いてTOPIXの動きを予想する仕組みを構築する?

RPAを使わなくてもPythonRubyでもクローラーを作ることはできると思いますが、コンピュータープログラムを書くよりも敷居が低いと思うので、ここではRPAを推しています。あらかじめ。

 

jsai2016:3L3-OS-16a-6 新聞記事の時系列テキスト分析による株式市場の動向予測

著:松井藤五郎、和泉潔 出典:人工知能学会(2016)(アクセス:2017年8月18日)

 

2016年の人工知能学会で発表された論文です。個人的にとても面白かったので、ご紹介させていただきます。

 

簡単にまとめると、

①まず日経新聞のデータを用意します。

②テキストから言葉を抽出します。形態素解析と呼ばれる手法を用いて、「経済」とか「アメリカ」といった言葉を分割して抽出し、結合する。

③毎日、新聞の言葉の見出しの部分の差分を取る。(例えば、「日本経済」という言葉が2日連続で出ていれば維持、消えていれば消滅、新しく今日出て来ていたら「新出」というようにタグ付けする。これらを特徴語出現パターンと呼ぶ。)

④選択されたX個の特徴語出現パターンP1..xを出現の時は1、そうでないときは0として特徴量ベクトルとして入力する。また出力は予測対象日の日中の利益率が正ならば+1、負ならば-1としてSVM(サポートベクトルマシンと呼ばれるパターン認識手法)を用いて学習させる。

TOPIX連動型投資信託(ETF)の寄りから引けまでの動きが、上がるか下がるかを予想する。

 

 単純作業(日経電子版の情報を毎日抜き出して、エクセルに入れるとか)はRPA、SVM形態素解析等はPythonを使えば構築できそうです。(誰かやってみてください)

 

結果、予想的中率は一番高い年で71.4%、最も低い年で56.3%だそうです。「え、大したことないじゃん」と思われるかもしれませんが、6年間の累積運用成績では200倍強になるようです。効率的市場仮説とは一体なんだったのか。こういったものは、市場参加者が何を考えてトレードしてるかといった定性的な発想も大事なのかもしれませんね。

 

④ まとめ

これからはRPAのように、毎日日経新聞の見出しを自動的に取ってくるといった単純作業をコンピュータプログラムを書くよりもはるかに簡単にできて、Watsonのような分析ツールを用いれば上記のような予測をすることがかなり手軽にできる時代になっていくのだと思います。(もうなっている?)

なので、そういったツールを使いこなせるかどうかは、これからの時代はエンジニアに限らずとても大事なことになっていくだろうな、とRPAを使いながら感じました。

 

 

 

この記事の執筆者:山賀

 

 

(⭐︎か)問題解決へのアプローチ

問題解決(障害)について

ITエンジニアには障害対応がつきものです。

ここでは、我々が問題解決を行う場合について整理してみました。

1. PD/PSI
1.1 PDとはProblem determination で、問題はハードウェアかソフトウエアか のプロセスで切り分け後はそれぞれの専門家が対応します。
1.2 PSIとはProblem Source Identification で、PDでソフトウェアが原因である場合に、OSかミドルウェアかアプリケーションか を切り分けます。
その後はそれぞれの専門家が対応することになります。

2.問題解決のアプローチ:フローチャートか仮説検証か
問題解決には大きく分けて2つの方法があるように思います。
既知の問題であれば、フローチャートによる問題解決は有効ですが、複数の原因が絡むような未知の問題には仮説検証法でないと対応は難しいでしょう。

2.1 フローチャート または枝分かれ問題解決法
 例: Aのランプはついているか?
     Yes: Bのランプを見る
     No: Cのランプを見る
と、問題解決の手順に沿って原因を突き止める方法

利点:基本的なスキルはあるが、その分野には詳しくない場合でも問題解決ができる
欠点:原因究明まで時間がかかることが多い
   手順を作成するのが手間がかかる、また技術変更により手順の修正も発生するためきちんと保守しないと役にたたない手順となる

当職が経験した実例:

入社して数年頃、あるお客様で作業をしていたところ、知り合いのCEさんがIBM3540の修理にきました。現象はReadyにならない とのこと
IBM3540 (8 inch Diskette Reader)はその当時でももうあまりない機械でその技術員も修理は初めてのようでした。
やおら保守マニュアルを引っ張り出し、手順に沿ってPD/PSIが開始されました。

1)現象確認 再現性あり
2)手順に沿って、ある接点の波形をオシロスコープで測定 → 波形が出てない
3)手順に沿って、センサー部を視認 → ほこりが溜まっていた
4)手順に沿って、清掃を実施
5)オシロスコープで再度波形を確認 →波形が正常
6)ディスケットを挿入 → Ready となる 修復完了

現場でオシロスコープを使用してPDを行うのを見るのは初めてでしたが、手順が完備されていればIBM3540を知らなくてもオシロスコープの使用法がわかれば解決できるのだな と感心しました。

2.2 仮説検証法
既知の問題であっても、経験が豊富なエンジニアであればこちらの方が解決までの時間は早いでしょう。複雑な問題でフローチャートではたどり着けないような問題へのアプローチではこちらが有効と思います。

1)問題を特定する 何が問題か、何を解決すべきか を特定する
2)情報を集める どのような現象か? 最近どこか変更を行ったか? 発生条件はあるのか?
3)問題の仮説を立てる XXが不足している? YYのバージョンが古い? ZZの手順が正しくない? 
4)3)を検証するための調査を行う
 → 調査結果が仮説と合わない => 別の仮説を検証する
5)仮説が立証される => 対策を施す

利点:結果を得るまでの時間は短い(一般的に)
欠点:問題解決にあたるには、ある程度の経験やスキル、及びアプローチ方法を理解する必要がある。

次は、この仮説検証法についてもう少し深く説明してゆきます

(前田)[初心者向け] WAS Liberty お役立ち情報・・・性能情報取得

0. はじめに
WAS Liberty は2012年にリリースした WAS V8.5 から新しく提供されたランタイムです。
従来の WAS traditional と比べて軽量なランタイム、高速な起動、シンプルなサーバー構成といった特徴があります。
近年、WAS Liberty の採用が増えてきているため、WAS tratitional とは異なる WAS Liberty に関するお役立ち情報を書きたいと思います。今回は WAS Liberty の性能情報を取得する方法です。


1. モニター設定
WAS Liberty で性能情報を取得するには monitor フィーチャーの定義と、モニターしたいコンポーネント対象を server.xml に定義する必要があります。
monitor-1.0 フィーチャーで取得できるコンポーネントは下記のとおりです。

 

JVM
Heap: 現行 JVM に使用されているヒープサイズ
FreeMemory: 現行 JVM に使用可能な空きヒープ
UsedMemory: 現行 JVM の使用済みヒープ
ProcessCPU: JVM プロセスで使用された CPU のパーセンテージ
GcCount: JVM の始動以降に GC が行われた回数
GcTime: GC 時間の合計累算値
UpTime: JVM の始動以降の時間 (ミリ秒単位)

 

・ThreadPool
ActiveThreads:要求を処理中のアクティブスレッド数
PoolSize:スレッドプールサイズ
PoolName (Default Executor スレッドプールのみをサポートします)

 

・Web アプリケーション
AppName: アプリケーションの名前
ServletName: サーブレットの名前
RequestCount: このサーブレットに対するヒット数
ResponseTime: 平均応答時間 (ナノ秒)
Description: カウンターの説明
RequestCountDetails: 最終タイム・スタンプなど、RequestCount の詳細
ResponseTimeDetails: 取得したスナップショットの数、最小値、最大値など、ResponseTime の詳細

 

JAX-WS
AvgResponseTime: 平均応答時間 (ミリ秒)
MaxResponseTime: 最大応答時間 (ミリ秒)
MinResponseTime: 最小応答時間 (ミリ秒)
NumInvocations: このエンドポイントまたは操作への呼び出しの数
NumChekedApplicationFaults: 検査されたアプリケーション障害の数
NumLogicalRuntimFaluts: 論理実行時障害の数
NumRuntimeFaults: 実行時障害の数
NumUnCheckedApplicationFaults: 未検査のアプリケーション障害の数
TotalHandlingTime: 合計応答処理時間 (ミリ秒)

 

・セッション
CreateCount: 作成されたセッションの総数
LiveCount: ライブ・セッションの総数
ActiveCount: アクティブ・セッションの総数
InvalidatedCount: 無効化されたセッションの総数
InvalidatedCountbyTimeout: タイムアウトにより無効化されたセッションの総数

 

・ConnectionPool
CreateCount: 作成された接続の総数
DestroyCount: 破棄された接続の総数
ManagedConnectionCount: 使用中の ManagedConnection オブジェクトの数
WaitTime: 接続が認可されるまでの平均待ち時間 (ミリ秒)
ConnectionHandleCount: 使用中の Connection オブジェクトの数
FreeConnectionCount: プール内の空き接続の数

 

設定方法
(1) monitor フィーチャーの定義
server.xml に monitor フィーチャー定義を追加します。
<featureManager>
 <feature>monitor-1.0</feature>
</featureManager>

 

(2) モニターしたいコンポーネントの定義
<すべてのコンポーネントをモニターしたい場合>
デフォルトは server.xml に monitor エレメントが定義されていないため、monitor-1.0 フィーチャーでモニターされているコンポーネントはすべてモニターされます。

 

<一部のコンポーネントをモニターしたい場合>
一部のコンポーネントをモニターしたい場合は、モニターしたいコンポーネントを monitor エレメントにて定義します。

例:JVM、ThreadPool、ConnectionPoolをモニターしたい場合
<monitor filter="JVM,ThreadPool,ConnectionPool" />

 

 以上でモニター設定は終了です。

 

参考情報:
https://www.ibm.com/support/knowledgecenter/ja/SSEQTP_8.5.5/com.ibm.websphere.wlp.doc/ae/twlp_mon.html


2.モニター情報の取得
モニター設定完了後、モニターされている値を確認する方法ですが、今回は curl コマンドを利用した方法を記述します。
curl コマンドでモニター情報を取得するためには、アプリケーションサーバーへ restConnector 構成、SSL 構成、管理者ロール構成を行います。

 

設定方法
(1) restConnector 構成
server.xml に restConnector フィーチャー定義を追加します。

<featureManager>
 <feature>restConnector-1.0</feature>
</featureManager>

 

(2) SSL 構成
①server.xmlssl フィーチャー定義を追加します。

<featureManager>
 <feature>ssl-1.0</feature>
</featureManager>


②server.xml に鍵ストア・サービス・オブジェクト・エントリーを追加します。
keyStore エレメントは defaultKeyStore と呼ばれ、鍵ストア・パスワードを含んでいます。
パスワードは平文で入力することも、securityUtility encode オプションを使用してパスワードをエンコードすることもできます。
一番シンプルな構成は下記のとおりです。
<keyStore id="defaultKeyStore" password="keystorepassword" />

 

この構成で鍵ストアと証明書が存在しない場合、アプリケーションサーバーは SSL の初期化中に自動で鍵ストアを作成します。
デフォルトで作成した鍵ストアは有効期限が 365 日となるため、有効期限を延ばしたい場合は securityUtility encode オプションを利用して、鍵ストアを手動で作成してください。

 

アプリケーションサーバー作成時にデフォルトで server.xml にhttpEndpoint エレメントが定義されます。httpEndpoint エレメントに httpsPort が定義されていることを確認します。

例:
<httpEndpoint id="defaultHttpEndpoint" host="*" httpPort="9080" httpsPort="9443">

 

(3) 管理者ロール構成
管理者ロールの定義方法はいくつかあります。
以下はquickStartSecurity エレメントを利用した一番シンプルな構成の設定例です。
<quickStartSecurity userName="username" userPassword="userpassword" />

 

参考情報:
https://www.ibm.com/support/knowledgecenter/ja/SSEQTP_8.5.5/com.ibm.websphere.wlp.doc/ae/twlp_admin_restconnector.html

 

アプリケーションサーバーへの設定が完了したら、実際に curl コマンドでモニターされているデータを取得してみます。

 

curlコマンド

curl -s -u username:userpassword -k https://hostname or IPaddress:WAS https port番号/IBMJMXConnectorREST/mbeans/ObjectName/attributes/属性

 

上記コマンドでモニターされている情報を取得します。

例として下記にThreadPoolのPoolSizeを取得する場合とConnectionPoolのCreateCountを取得する場合を記載します。

 

例1:ThreadPoolのPoolSizeを取得する場合

■実行コマンド例
curl -s -u admin:password-k https://localhost:9443/IBMJMXConnectorREST/mbeans/WebSphere%3Atype%3DThreadPoolStats%2Cname%3DDefault%20Executor/attributes/PoolSize

※補足

username=admin
userpassword=password
hostname=localhost(ローカルで実行する場合)
WAS https port番号=9443
ObjectName=WebSphere:type=ThreadPoolStats,name=Default Executor (":"(コロン)=%3A、"="(イコール)=%3D、","(カンマ)=%2C、" "(スペース)=%20・・・UTF8の16進数表記)
属性=PoolSize

 

■出力結果例
{"value":"50","type":"java.lang.Integer"}

 

例2:ConnectionPoolのCreateCountの場合

■実行コマンド例
curl -s -u admin:password-k https://localhost:9443/IBMJMXConnectorREST/mbeans/WebSphere%3Atype%3DConnectionPoolStats%2Cname%3Djdbc%2FTESTDB/attributes/CreateCount

 ※補足

username=admin
userpassword=password
hostname=localhost(ローカルで実行する場合)
WAS https port番号=9443
ObjectName=WebSphere:type=ConnectionPool,name=jdbc/TESTDB (":"(コロン)=%3A、"="(イコール)=%3D、","(カンマ)=%2C、"/"(スラッシュ)=%2F・・・UTF8の16進数表記、JNDI名がjdbc/TESTDBの場合)
属性=CreateCount

 

■出力結果
{"value":"1","type":"java.lang.Long"}

 

定期的にモニターされている情報をテキストファイル等へ書き出したい場合は、スクリプト等を作成して、valueの値を書き出してください。

(萩原)IT初心者向けおすすめ書籍3選

こんにちは。私は情報系の知識がほぼほぼ無い状態でIT企業である弊社に入社してしまいました。どれくらいわからないかというと、「どうしてMacWindowsも入れられるのか不思議でしょうがない」「サーバーといえばあの大きなやつだと思うが、どうして個人でレンタルできるのか??家に置くの??」レベルでした。恐ろしいですね。

現場に出て仕事をしながら技術や製品について覚えて行くわけですが、やはりいきなり専門的なことを覚えようとしても、なかなかぴんときませんでした。当然といえば当然で、ITについて、何が揃っていれば動くのか?システムを構築するには何が必要なのか?といった前提が無いため、それがどうして必要なのか腑に落ちなかったのです。そこで、そもそもITとは、コンピュータとは、ネットワークとは、といった基礎を理解するためにITについての本を読んだりしていました。そこで「お、これはわかりやすいな!」と思った本をご紹介します。

1. ビジュアル版 コンピューター&テクノロジー解体新書

コンピューター&テクノロジー解体新書

コンピューター&テクノロジー解体新書

ビジュアル版ということで、普通の読み物というより図説のような感じです。
コンピューターやIT技術の発展をわかりやすい図と共に追っていきます。言葉だけではイメージが掴みにくい専門用語も、イメージ図があることで直感的に理解できます。
フルカラーでイラストが格好いいので、ぱらぱら見るだけでも楽しいです。
扱う範囲が広く、スマートフォンやテレビの仕組みなども扱っています。日常で使っているけれど、そういえばどうやって動いているんだろう?という疑問に答えてくれる本です。


2. イラスト図解式 この一冊で全部わかるサーバーの基本

イラスト図解式 この一冊で全部わかるサーバーの基本

イラスト図解式 この一冊で全部わかるサーバーの基本

「サーバー」「ネットワーク」など、もう少し分野を限定してについて詳しく知りたい場合はこちら。上記はサーバーを扱っていますが、このほか同シリーズで「ネットワークの基本」「クラウドの基本」「Web技術の基本」「セキュリティの基本」などがあります。
イラスト図解式ということで、こちらもイラストが豊富で理解が進みます。およそ半分のページが「イメージでつかもう!」というコーナーになっており、文章による説明と合わせて理解を助けるものになっています。
さくさく読むことができるので、まずとっかかりの入門書としてよいのではないでしょうか。私はインフラ周辺を勉強する必要があったため、大変助かりました。

3. コンピュータはなぜ動くのか~知っておきたいハードウエア&ソフトウエアの基礎知識~

コンピューターというと目の前のPCを想起する人が多いかと思いますが、スパコンもコンピューターだし、スマートフォンもコンピューターですよね。様々な形態のコンピューターがありますが、その共通点はなんなのか?という最も根本的なところから説明してくれる本となっています。コンピューターはプログラムで動きますが、そのプログラムはどのような流れで理解されているのか、アルゴリズムとは、データ構造とは…という形で説明されていきます。ハードウェア、ソフトウェア、アルゴリズム、データベースなど、各論で学べるものは多いのですが、それぞれがどのように関係しているのかを説明している点がわかりやすいなと感じました。構成的にはプログラミングなどのややソフトウェア寄りな章が多いです。

以上、各技術分野について詳しく書いてある本は沢山あると思いますが、そこに入る前にまずイメージ概要を掴めるものをあげてみました。
まだまだ勉強中のため、おすすめ書籍等あれば教えてください!

(kin) AIXにおけるパスワードハッシュの作成方法

 AIXで色々なパスワードのハッシュの作成方法について書こうかと思う。単純に書くのであればコマンド1つ書いとけばいいのだが、まぁそれだと記事にならないので、その前提なども少々。
 まずはパスワードについての基本から。
 パスワードというものは基本的にシステム上に平文で保管されることは少ない、今となってはほぼないといってもよい。流出に対しての耐性を高めるため。パスワードは基本的にシステム内にハッシュ値として保管される。よく暗号化パスワードなどと表現されているが、基本パスワードとハッシュ値は1対1で且つ不可逆である。すなわちハッシュ値からパスワードを復号、もしくは演算することはできない。よって、パスワードハッシュが流出した場合、いわゆるプルートフォース(総当たり)によるパスワード解析にかけられることになる。そのため、パスワードのハッシュアルゴリズムはこの演算の際に如何に多くのCPUを使わせるかが重要となってくる。大量の演算により結果がでるまでの時間を非現実的にまで引き延ばすことでパスワード解析を事実上不可能にするのである。
 そのため、パスワードハッシュのアルゴリズムはCPUの進化と共に複雑にならざるをえない。当初Crype(3DES)しかなかったアルゴリズムMD5になりSHA2になっているのも、CPUの進化やレインボーテーブルなどの解析方法の進化により単純なアルゴリズムではパスワード解析が現実的になってしまったためである。現在ではSHA1までは既に危険とされSHA512もしくは精々がSHA256辺りまでが当たり前となっている。
 Linuxでは大分前からデフォルトがSHA512(type6)にかわっており、少し前まではツール類が追い付いておらずハッシュ計算に苦労したが、今では普通にcrypt関数でサポートしている。しかし、AIXでは何故か未だにデフォルトがCrypt(3DES)。非常に不思議だがMWとの関連などで仕方ないのだろうか? ちなみにWindowsも長い間LMハッシュが生きていたし、いまだNTハッシュ(MD4)が生きている辺り、独自実装の世界はこの辺りの進化が遅いような気がする。
 MW側での対応が遅いのは将にハッシュアルゴリズムの問題のように思う。表題のパスワードハッシュの作成方法とも絡むのだが、ユーザーの認証処理などを行う場合、UNIX系では割と入力されたパスワードを自分でハッシュ化するような実装が多かったように思う。今では大部分がMW経由だったりAPI経由だったりするため、ユーザーとパスワードをAPIなどに渡してOK/NGを判断しているのが大半かと思うが、そうではなく、入力されたパスワードをハッシュ化して、システムに保管されているパスワードハッシュと比較するのである。当時はその実装方法によるメリットは色々あったわけだが、ハッシュアルゴリズムが入れ替わる現在ではほぼ致命的である。アプリケーションが自身でハッシュアルゴリズムに対応する必要があるため、新しいアルゴリズムには中々対応できない。しかも独自実装。MW側の対応が中々進まないのも仕方ない気にはなる。

 ここまで基本的な話を書いてきたが、この辺りからが本番。
 まずは、パスワードハッシュの独自実装とは何のことか? これまで書いている通り、基本的なアルゴリズムは共通といってよい。SHA2にしろMD5にしろ公開されており同じものである。違うのはパスワードハッシュのフォーマットである。パスワードハッシュには必須の情報が幾つかある。ハッシュのアルゴリズムが何かと、ハッシュされた値と、ソルトである。
 ソルトとは文字通り、各個人の好みにより味つけを変えるための塩のこと、すなわちハッシュ値にバリエーションを持たすための乱数である。前記のようにパスワードとハッシュ値は1対1、ソルトがないと同じパスワードは同じハッシュ値となる。片方のパスワードを知って、別のユーザーのパスワードを推測できるようでは困るのである。そのため、パスワードハッシュを生成する場合は、パスワードと乱数のソルトを元にしてハッシュ値を計算することにより、同一のパスワードでも別のハッシュ値とするようにする。
 パスワードハッシュのフォーマットは元々全UNIXで共通であった。アルゴリズムが1つしかなかったため、必ず頭2桁がソルトで、残りがハッシュ値の13桁となっていた。しかし、様々なアルゴリズムが存在する現在、そのアルゴリズムを表すキーワードを何にするか?どのような順番にするか?などがシステムによって違うのである・・・というかAIXだけ違う・・・。

 Linuxの場合、パスワードハッシュのフォーマットは以下のようになる。

   $type$ソルト$ハッシュ値

 「$」が区切り文字で、最初がアルゴリズム、次がソルト、最後にハッシュ値である。例えばSHA512の場合、以下のようになる。ちなにみHP-HXもSolarisも同様。


   $6$1234567890123456$YfUD.j5zIFtfV6VgikPof2dzCCCZwL2YDraBX4HXi.J7iNq24667epYUCZGxExqOmHTnPWybzfYaynT29vKXJ/

 Type6がSHA512を表し、Type5はSHA256、Type1がMD5を表す。分かり易いようにソルトは全て並びの数字にしている。
 ではAIXはというと以下である。

   {ssha512}06$1234567890123456$/lorQE8P98Iw0lzrzOubFgMqe/p0tcWeC99jbL2KcWnK5jKcXx0WPYqo2aILdeH9Nrwg8A6p/InBnWiqBfWW..

 フォーマットもハッシュ値も全く違う。しかもこのフォーマットはアルゴリズムによって違う。SSHAの場合は以下のようなフォーマットとなる。

   {アルゴリズム}ストレッチング回数$ソルト$ハッシュ値

 ストレッチング回数とはハッシュを繰り返す回数のことで、前記のように、よりCPUを消費させることを目的にした実装である。ハッシュした値を更にハッシュし、この数分演算を繰り返すことで同一のアルゴリズムで数倍のCPU消費を強制することができる。ちなみにsmd5の場合、ストレッチング回数の指定はなく、ソルトは8桁となる。
 何故こんなに違うのかというとLPA(Loadable Password Algorithm)のせいである。LPAとは上記のようなパスワードハッシュのモジュールを独立させることで、システムに対してのアルゴリズムの追加、変更を容易にしようというもので、sshaをサポートするモジュールとsmd5をサポートするモジュールは全く別なのである。そうはいっても標準化しろよ、といいたくはあるが・・・
 様々なアルゴリズムが存在し、更に増えていくであろう現在、こんなにバラエティにとんだアルゴリズムをアプリ側で独自にサポートするのはさすがに無理がある。私自身、システム管理者として振出したパスワードの確認などでパスワードハッシュを作りたいと思うことが割とあるのだが、どうやって作ったものか悩んでいた。Linuxではフォーマットを標準化してcryptでもサポートしているが、AIXでもサポートしないかと思っていたら、サポートされていた。しかし、中々に情報がない上に、間違っていたり、不安定だったり・・・未だ不明な部分も多いのだが、ちょっと情報公開しておこうかと思った所以である。
 crypt関数はAIXの提供するC言語のライブラリ関数である。非常に伝統的な関数であり、元々は引数にパスワードと2桁のソルトを指定すると13桁の3DESのハッシュ値を返してくれるものであった。それが、LPAのその他の様々なアルゴリズムをサポートするようになったのである。とはいえ、それだけでは余り嬉しくはない。プログラムを書くのはいいのだが、様々な環境やシステムを弄る立場上、どこでコンパイルしたらいい? という問題が常に付きまとう。もっとどこででも簡単にと思っていたら、あった。perlである。perlにはシステムのAPIそのままの関数が様々にある。cryptも伝統的な関数なのでperlでもサポートされ、以前はよく使っていた。恐らくはそのままシステムのAPIを呼び出しているだけと思われたので、ためしにC言語のcrypt関数と同様のソルトを指定してみたところ、サポートされていた。
 perlでcrytを使う場合の基本的な使い方は以下の通り。ほんの1行、スクリプトにするまでもない。
 
   # perl -e '$hash=crypt("password","salt"); print "$hash\n";'
   sa3tHJ3/KuYvI


 デフォルトの挙動では3DESの13桁のパスワードハッシュが生成される。
では、ssha512の場合はどうなるか?

   # perl -e '$hash=crypt("password","{ssha512}06\$1234567890123456\$"); print "$hash\n";'
   {ssha512}06$1234567890123456$/lorQE8P98Iw0lzrzOubFgMqe/p0tcWeC99jbL2KcWnK5jKcXx0WPYqo2aILdeH9Nrwg8A6p/InBnWiqBfWW..


 みごとにssha512のパスワードハッシュが生成された。上記で「$」の前に「\」があるのは「"」で囲っているためエスケープしてやる必要があるためである。
ちなみにここでソルトを省略した場合、乱数のソルトを自動で生成してくれる。

   # perl -e '$hash=crypt("password","{ssha512}06\$"); print "$hash\n";'
   {ssha512}06$sL.WSbJpW2xdD2G5$FrvXYETBde5oGMkSc9VWSNwmPaLkitpGUlYf5pcKRNmM3a8aDbCKk9dtf83qBs2GrKQzbUjytXXIODNWgy.s..


 ここで指定できるアルゴリズムは以下のファイルに指定されている。

   /etc/security/pwdalg.cfg

 ここまでは綺麗に動いているようにみえるが、何が不安定なのか?

 LPAの弊害なのか、元々のcryptの仕様の問題なのか、バグなのか、全てのフォーマットエラーを無視して伝統的なcryptとして動くのである。例えばストレッチング回数。サポートされるのは4-31回だが、4回と指定してみる。

   # perl -e '$hash=crypt("password","{ssha512}4\$01234567890123456\$"); print "$hash\n";'
   ZOb9qQRD8CKi6


 なぜか13桁のパスワードハッシュが返る。これだけ見ると全くLPAをサポートしているようには見えない。しかし「4」ではなく「04」と指定すると。

   # perl -e '$hash=crypt("password","{ssha512}04\$01234567890123456\$"); print "$hash\n";'   {ssha512}04$01234567890123456$3OUe2I2xLl/nokoAYMBZG.Pprz3b/NZEVk21.mdzRyIOfCPWO56wXdFUFmKMidl.X5ZOsmqXhKOBjH6w8mmG..


 きれいにssha512のパスワードハッシュが返ってくる。また、cryptのマニュアルを見るとアルゴリズムに{SMD5}を指定できると記述されているので、{SMD5}を指定してみると。

   # perl -e '$hash=crypt("password","{SMD5}012345678\$"); print "$hash\n";'
   sa3tHJ3/KuYvI


 13桁のパスワードハッシュとなる。正しくは/etc/pwdalg.cfgの記述の通り、{smd5}。

   # perl -e '$hash=crypt("password","{smd5}012345678\$"); print "$hash\n";'
   {smd5}012345678$7nAzsz9W7rm48taUp/QYt.


 基本的にエラーは返してくれず、NULLにさえならない、間違っていると13桁になるだけ。この辺りの挙動は本当に困った。最初にマニュアルから入っていたため、純粋にサポートされていないようにしか見えなかった。しかも一般ユーザーで実行すると、全て13桁のパスワードハッシュに・・・

   $ perl -e '$hash=crypt("password","{ssha512}04\$01234567890123456\$"); print "$hash\n";'
   JQMuyS6H.AGMo


 AIXのcryptでLPAを利用する場合の注意点は以下の通り。

   ①rootで実行する
   ②指定できるアルゴリズムは/etc/security/pwdalg.cfgと正しく一致させる
   ③ストレッチング回数は2桁で指定する
   ④エラーは返してくれない。

 

 この辺りに気をつけて使えば非常に便利だと思う。
 ちなみにlinuxperlでも普通にcryptはサポートされているので、同様にソルトを指定することでType6などのパスワードハッシュを生成できる。但し、ソルトの自動生成はサポートしないようだ。

(鈴木)xCAT管理ノードのインストール手順

鈴木です。
前回に続き、今回は、xCATのインストール手順について紹介していきます。

6h324.hatenablog.com
基本的には以下のリンクのとおりなのですが、とっつきにく部分があったり、そもそも英語は読みたくないって方も多いかと思います。

http://xcat-docs.readthedocs.io/en/stable/

そこで本記事では、事前準備からインストール後の初期動作確認までを日本語で紹介するので、興味のある方はぜひトレースしてみてください。

1.本環境の概要

まずは今回のシステム環境について。
今回はxCATのコマンドを発行する「xCAT管理ノード」がインターネットに接続されていない前提で話を進めます。
「xCAT管理ノード」は、インターネットに接続されていないため、xCATインストールモジュールは別途用意するリポジトリサーバ経由でインストールすることにします。

f:id:users-6h324:20170728095113j:plain

また、今回紹介する記事では以下のHW, SW構成で話を進めます。

f:id:users-6h324:20170728094830p:plain

2.リポジトリサーバ準備

今回は、サーバがインターネットに接続されていないケースを想定しているので、xCATモジュール置き場としてリポジトリサーバを準備します。
リポジトリサーバを別途立てるのは面倒くさい、という場合は、xCAT管理ノードと同一OS上に構成しても問題ありません)
まずは、リポジトリサーバに必要なパッケージをインストールするために、リポジトリサーバ自身(ホスト名:repo01)でyumが使えるようにしておきます。
今回は、RHEL7.2のOSイメージを、/nim/RHEL_7.2/Server配下にコピーしておきます。

RHEL7.2用リポジトリファイルを作成
[root@repo01 ~]# vi /etc/yum.repos.d/server.repo
[Server]
name=RHEL7_Base
baseurl=file:///nim/RHEL_7.2/Server
enabled=1


[root@repo01 ~]# ls /etc/yum.repos.d
rhel-source.repo server.repo

リポジトリを初期化
[root@repo01 ~]# yum clean all

これでリポジトリサーバ自身(ホスト名:repo01)でyumを使ってRHEL7.2 OSパッケージをインストールできるようになります。
さっそく、リポジトリサーバに必要なパッケージを以下のとおりインストールしていきます。

[root@repo01 ~]# yum install createrepo

[root@repo01 ~]# yum install httpd

再起動時にhttpd自動起動するように設定しておきましょう。
[root@repo01 ~]# systemctl enable httpd

httpdを起動します。
[root@repo01 ~]# systemctl start httpd

念のため、リポジトリサーバ(ホスト名:repo01)と同じNWセグメントからブラウザ上で以下のURLにアクセスできるか確認しておきましょう。

http://リポジトリサーバのIPアドレス/

 

Apacheのデフォルトの公開ディレクトリは「/var/www/html/」なので、xCATインストールモジュール配置用に以下のようなディレクトリを作っておきます。

/var/www/html/yum/x86_64/xCAT

改めて、以下のURLにアクセスすると公開ディレクトリが見えるようになっています。

http://リポジトリサーバのIPアドレス/yum/

 

f:id:users-6h324:20170728111023p:plain

次に以下のサイトでダウンロードしておいたxCATのインストールモジュールを先ほど作っておいた/var/www/html/yum/x86_64/xCATに配置しましょう。

(DLサイトトップ)
https://xcat.org/download.html

[root@repo01 xCAT]# ls -ltr
total 8
drwxrwxr-x 16 root root 4096 Mar 16 01:50 xcat-dep
drwxrwxr-x  2 root root 4096 Mar 16 01:50 xcat-core

ついでに、最初に使った/nim/RHEL_7.2/Server配下のOSイメージも、公開ディレクトリに置いておくと他サーバからもyum installできるようになるので便利です。
私の場合は、/nim/RHEL_7.2/Server配下のOSイメージを/var/www/html/yum/x86_64/RHEL72配下にコピーしておきました。


rpmパッケージが配置されているディレクトリ上にリポジトリファイルがない場合はyum install時失敗してしまうので、createrepoしておきましょう。

(例)
[root@repo01 ~]# createrepo --simple-md-filenames /var/www/html/yum/x86_64/RHEL72

3.xCAT管理ノード準備

リポジトリサーバの準備が整ったので、さっそくxCAT管理ノード(ホスト名:xcat01)上でxCATインストールしていきます。

まずは事前準備としてリポジトリの設定を行います。
今回は、リポジトリサーバ上のRHEL7.2のOSパッケージ、xcat-core、xcat-depに対してyum installできるように設定しておきます。

RHEL7.2 OSパッケージ用リポジトリ定義

[root@repo01 ~]# vi /etc/yum.repos.d/server.repo
[Server]
name=RHEL7_Base
baseurl=http://リポジトリサーバのIPアドレス/yum/x86_64/xCAT/RHEL72/Server
gpgcheck=0
enabled=1

 xcat-core、xcat-depに対してもyum installできるように以下のようにリポジトリ定義しておきます。

[root@xcat01 ~]# vi /etc/yum.repos.d/xcat2core.repo
[xcat-2-core]
name=xCAT 2 Core packages
baseurl=http://リポジトリサーバのIPアドレス/yum/x86_64/xCAT/xcat-core
gpgcheck=0
enabled=1

[root@xcat01 ~]# vi /etc/yum.repos.d/xcat2dep.repo
[xcat-dep]
name=xCAT 2 depedencies
baseurl=http://リポジトリサーバのIPアドレス/yum/x86_64/xCAT/xcat-dep/rh7/x86_64
gpgcheck=0
enabled=1

リポジトリを初期化
[root@xcat01 ~]# yum clean all

ここまでくれば、あとはインストールするだけ。yum installコマンドを実行してxCATをインストールしちゃいましょう。

[root@xcat01 ~]# yum install xCAT

4. xCAT管理ノード初期動作確認

xCATのインストールが完了したら、以下の要領で初期動作確認を行います。

1.パスを追加
[root@xcat01 ~]# source /etc/profile.d/xcat.sh

2.バージョン確認
[root@xcat01 ~]# lsxcatd -a

3.xCAT用DB初期化
[root@xcat01 ~]# tabdump site

4.起動、停止の動作確認
[root@xcat01 ~]# systemctl start xcatd
[root@xcat01 ~]# systemctl stop xcatd

※起動停止ステータス状況の確認は、以下で確認します。
[root@xcat01 ~]# systemctl status xcatd

ついでに、特に問題ない場合はxcatdがOS起動時に自動起動するように設定しておきましょう。
(xcatはchkconfigから変更する)
[root@xcat01 ~]# chkconfig xcatd on
[root@xcat01 ~]# chkconfig xcatd --list

いかがでしたでしょうか。今回はxCAT管理ノードのインストール手順について紹介しました。
一見、取っ付きにくそうなxCATですが、インストール手順はいたってシンプルなものです。
ぜひ、これを機会に試してみてはいかがでしょうか。

鈴木
2008年にIBMに入社。
長くエンタープライズのお客様を複数担当。最近はHPC分野を経て金融のお客様を担当。
Unix/Linux系がメインスキル。
最近は、InfinibandやOSS(Zabbix, xCATなど)など社内スキル保有者が少ないレアキャラを目指して活動中。

夜は焼鳥の匂いに誘われて焼酎1杯だけ立ち飲みして帰る純情派のインフラSE。
焼鳥の味付けは塩。

 

(鈴木)サーバ系のインフラSEでxCATは知っていて損はないOSS

鈴木です。

私自身、IBMに入社して以来、主にサーバ系のインフラSEとして活動を続けてきました。

インフラSEというと、サーバの電源ON/OFFや、OS導入といった、いわゆる単純作業がつきもの。その割には、サーバの台数が多くなってくるとコストがかさむ箇所も、この作業だったりしますよね。

今でこそ、一子相伝の自動化スクリプトや、Chefなどが出てきましたが、これらはどちらかというとOSより。

HW自体の操作などは、やはり人手が必要になりがちです。

このような状況の中、HWレイヤーからOSレイヤーまで自動化したい方にご紹介したいOSSがあります。

1.xCATとは

「xCAT」は、Extreme Cloud Administration Toolkitの略で、いわゆる「大規模クラスター」向けに開発された管理ツールです。

ここで言う「大規模クラスター」とは、例えば以下のようなもの。

  • HPC(High Performance Computing)
  • オンラインゲーム
  • クラウド etc...

いわゆる同じ機能や設定を持った大量のサーバ群のプロビジョニング(OS、MWなどの自動導入、設定)や、HW操作を一括管理することを、xCATは得意としています。

なお、公式HPを見る限り、2011年あたりから実用化されているように見えますね。(私自身、xCATが実稼動環境で使われているのを見たのは、この頃からです)

2.xCATができること

公式HPから抜粋しちゃいますが、xCATの主な機能は以下のとおり。(参考:https://xcat.org/

  1. Provision Operating Systems on physical or virtual machines: RHEL, CentOS, Fedora, SLES, Ubuntu, AIX, Windows, VMWare, KVM, PowerVM, PowerKVM, zVM.
  2. Provision using scripted install, stateless, statelite, iSCSI, or cloning
  3. Remotely manage systems: lights-out management, remote console, and distributed shell support
  4. Quickly configure and control management node services: DNS, HTTP, DHCP, TFTP, NFS

上記を見ると分かるとおり、xCATは主要なインフラコンポーネントの大半をカバーしていることが分かります。これだけの機能を全て使いこなせたら素晴らしいだろうな・・・と常々思っている次第(笑)

別記事で紹介する予定ですが、私はxCATで約400台の物理サーバに対してOSプロビジョニングとHW管理する環境を実装しました。

ただ、クローニングや仮想化環境のプロビジョニングまでには至っていないので、今後試す機会があれば、それも随時紹介していきたいと思っています。

3.xCATの知識を身に着ける前に覚えておきたい推奨知識

xCATは、HW管理とプロビジョニング機能を併せ持ったOSSであることを紹介しました。

HW管理の箇所についてはコマンドと機能を覚える程度なので、そこまで深い知識は必要ありません。

一方で、プロビジョニング機能に関する知識を身に着けていこうとすると、事前に知っておいた方が理解が早まる知識があります。 それが、「キックスタートファイル(ksファイル)を使ったOSのネットワークインストール(NWインストール)」。

例えばRHEL系のOSインストールなどの場合は、事前にどのような設定でインストールするのかを記述した「ksファイル」を作成しておくことで、いちいちインストール画面での入力を必要とせず、OSを自動インストール、自動設定することができます。

また、NWインストールすることで、CD/DVDでインストールする時より遥かに早い時間でOSインストールを完了できます。

これを合わせ技として実装したものが、、「キックスタートファイル(ksファイル)を使ったOSのネットワークインストール(NWインストール)」です。

実は、xCATもプロビジョニングの際は、同じような原理で動作します。(若干、設定箇所が違うくらい) 。

なので、もし時間がある方は、「キックスタートファイル(ksファイル)を使ったOSのネットワークインストール(NWインストール)」についても知識を得ておくと良いかもしれませんね。 (もしかすると、私の方でこの記事も書く・・・かも)

4.おわりに

今回はxCATについて以下を紹介しました。

  • xCATができること
  • xCATの前提知識

なお、xCATについてWeb検索しても、公式HP以外あまり詳しい情報は出てこないですね。マイナーOSSってことですかね(笑)

とはいっても、自動化を推進したいと思っている方にとっては、覚えておいて損はないスキル。このブログを通しても、基本的な設定方法や使い方を紹介していきたいと思います。

 

この記事の執筆者 :鈴木

2008年にIBMに入社。 長くエンタープライズのお客様を複数担当。最近はHPC分野を経て金融のお客様を担当。 Unix/Linux系がメインスキル。 最近は、InfinibandやOSS(Zabbix, xCATなど)など社内スキル保有者が少ないレアキャラを目指して活動中。 夜は焼鳥の匂いに誘われて焼酎1杯だけ立ち飲みして帰る純情派のインフラSE。 焼鳥の味付けは塩。