読者です 読者をやめる 読者になる 読者になる

ひといきブログ

技術的な備忘やデジモノレビュー等、ちょっとひといき

ansibleでユーザ追加~認証鍵作成&取得までを自動化してみた

はじめに

最近仕事でAWSを使うことがあり、AWSにも慣れてきたこともあり少しずつ自動化していこうと思い、以前利用していたansibleで自動化してみました。
まずは、人が増えてきたので、ユーザ追加から自動化したので、そのプレイブックを備忘録程度に残しておこうと思います。

構成と条件

構成といっても、個別ユーザを作成するのはEIP(グローバルIP)の振られている3台のみ。
そして、各ユーザは公開鍵認証で、かつ鍵ペアは3台で共通です。
クライアントはMacBookProです。
f:id:camit:20170408202615p:plain

プレイブック作成

流れとしては、まずホストAに対してユーザ作成、ssh鍵作成と作成した公開鍵を登録、鍵の収集をします。
そのあとに残りのホストに対してユーザ作成をします。が、ここでは鍵を作成せず、ホストAのカギを送付して登録します。
実際のプレイブックが下記です。


ここで厄介な点が2つあります。
1つ目は、実行するたびにauthorized_keysに公開鍵情報が書き込まれることです。
shellモジュールで実行しているので、これは仕方なさそうなんですけど、なんとかしたいです。←誰かいい方法があれば教えてください。
新規ユーザ作成をターゲットに作っているから、ファイルサイズが0もしくは存在しないなら実行とかでもいいのかもしれないです。
2つ目は、特定のサーバだけ先にユーザと鍵を作った場合、その鍵を流用できないことです。
まあプレイブック書き換えればできることですが、できることなら書き換えたくないので、いい条件分岐ができればなあと思ってます。
上記2つについては、継続して改善していければと思ってます。

おわりに

とりあえず、新しい人が入ってきたときにサクッと誰でもできるような形にはしましたが、やっつけ感があるのでどうにかしたいです。
また、せっかくなので、構築も一手にできるようなプレイブックも早々に作っていきたいかなと感じました。

あけましておめでとうございますと目標振り返り&設定

はじめに

あけましておめでとうございます.
どうも昨日ぶりです.
今年の元旦は日の登らないうちから会社でした.
昨日今日とCOUNTDOWN JAPANで年越してきました.
いわゆるエクストリーム出社ってやつですね!
せっかくなので,去年の目標を軽く,まるで羽のように軽く振り返りつつ,今年の目標を定めてみたいと思います.

去年の目標

去年はこんな感じでした.
camit.hateblo.jp

  1. 2週間に1回はブログを更新する.
  2. 各種資格を取得する.
  3. ジム通いする.
  4. Scalaやる.

1個ずつ羽のように軽く振り返りたいと思います.

目標その1

隔週でブログ更新ですが,一瞬で脆くも崩れ去ってます.
レイアウトとか考えると更新めんどくさいなあなどと考えた挙句に,結局やらなかった感じです.
なので今年は,もう少し達成しやすい目標にしようかと思います.

最低月イチ更新,レイアウトも何も考えない.

目標その2

2個目は各種資格取得ですが,1個も取得してないです.
まあ仕事が忙しかったんですよ,ははは.
何個も一辺に取ろうとするのが悪いんですよ,集中しないと.

ネスペ取得.

目標その3

ジム通いですが,実は続いていました.少しだけ.
8月くらいまで続けてましたが,やがて行かなくなり,会費も高くもったいないのでやめてしまいました.
金がかかって損を意識してもだめですね.
ところでフラフープを買ったのでこれで腹回りだけでも頑張ってみたいと思います.

フラフープを回す.
まずは回せるようになるところから.

目標その4

これは厳密にはやりたいことなので,目標ではないですが,まあ結局ScalaのSの字もやってません.
その代わり,仕事でWeblogicやOTDに触れた延長線上で,WLSTで設定変更する際のスクリプトを書くために,Pythonをはじめました.
また,今年の初めあたりに,会社の施策系の仕事でPythonを触ることになりそうな予感がします.
なので,技術系な目標はこんな感じにしたいと思います.

PythonでWeb系や機械学習の勉強をする.

おわりに

去年は目標設定が悪かったですね.
今年はすべて達成できるように邁進していきます.
本年もよろしくお願いいいたします.

今年買ったもの一覧(2016)

はじめに

年末が近づくと,よく買ってよかったもの一覧などという記事を見るので,私も乗っかってみようと思います.
買ったけどレビューしてないものがちょいちょいあるので,それは後ほど書いていこうかと思います.

L3SWとRT

こいつは今年のはじめくらいに,ヤフオクやらを巧妙に駆使して購入したものですね.
すでに懐かしさがあります.
Cisco3560 IPBaseとCisco891FJ-K9を2台ずつだったかな.
BGPやHSRPの確認に利用しました.試験後は置物と化しています...
1000BASE-Tで8ポートでうるさくなければ常時使っても良かったんですがね.
今後も何らかの確認時には利用してこうと思います.
ああ,L2SWほしいなあ.
camit.hateblo.jp

GPD WIN

つい先日届いたいわゆるガジェットです.
5.5inchの画面にキーボードとジョイスティックの付いたWin10Homeインストール済みPCです.
まだ未レビューなので後ほど書きます.
大きさは,3DSと同じくらい,ZaurusSL-C1000より少し大きいくらいです.
真ん中にあるのがGPD WINです.
f:id:camit:20161231120457p:plainf:id:camit:20161231120514j:plain
GPD WINの用途としては主に旅行と帰省用です.
以前までは、MacBookAir13inchを持ってったり持ってかなかったりしていましたが,使わないときは邪魔でした.
また,無きゃ無いで,スマホだけでは調べ物がし辛かったりして,困ってました.
GPD WINがあれば,物理キーボードがあるので,まあまあ調べやすいし,スマホのようにメモリ不足ということもそうそうないと思うので重宝しそうです.
まあまだ旅行も帰省もしてないので分かりませんがね.ははは.

staub

ここで鍋登場.
f:id:camit:20161231121745j:plain
無水調理のできる鍋です.
休日は料理するエンジニアとしては,1つは持っておきたい鍋です.
めっちゃ重いですが,その分蒸気を逃さず,かつ蓋の裏の突起が蒸気の循環に一役かってるらしいです.
実際に調理してみたら,水一滴も入れてないのに,野菜の水分だけで最終的に少し浸かるくらい水分が出てました.
蒸し焼きなので,シューマイとかとかも作れるぽいです.
今度試してみます.

おわりに

意外に物買ってなかったです.
なのにお金が貯まらいのはなんででしょう.
疑問を残した一年でした.
あ,旅行でお金使ったのか!
解決したようです.
来年は,Felica搭載のGoogle Pixelが発売されることを祈ってます.
ではまた数時間後,来年もよろしくお願いします.

LINE Notifyを試しに使ってみた(epgrecの監視)

つい最近、LINE Notifyという、ただLINEのトークルームに対して通知するのみの簡易サービスが提供されたみたいです。
prtimes.jp
curlコマンドを使った簡単な使い方はこちら(LINE Engineers' Blog)
http://developers.linecorp.com/blog/ja/?p=3784

ヘッダーにトークンを入れて、POSTしたら登録したトークルームに通知がいくみたいです。
とっても簡単!!!

家のサーバーの監視とかこれでいいんじゃね?って思いました。
わざわざzabbixとか入れるほどでもないし、そこまで大したものはない。頻繁に見たいわけではなく、ただERRORがでたら早めに知りたい...
うってつけですね!!!

そこでまずはepgrecのERROR監視に取り入れてみる

epgrecというのは、PT3とかチューナーとか使うときに利用する録画予約システムの1つです。
このアプリケーションは、PHPで書かれているので通知用のコードを埋め込んでしまえばすぐですね。
では果たしてどこに埋め込めばいいのか...
とりあえずPHPファイルを眺めてみると、それっぽいファイルがありました。
recLog.inc.php
中を見てみると、reclogという関数があり、メッセージとログレベルを引数にして関数内で編集してアップデートしていました。
function reclog( $message , $level = E_INFO ) {
...
}
そして、このファイル名や関数名ですべてのPHPファイルを対象にgrepしてみると、ずらずら結果が出力されました。この関数で当たりのようです。

入れ込むコードを書いてみる

書いてみるとは言ったものの、なるべく楽したいのでググったら見事ありました。
qiita.com
PHPのコードをありがたく拝借します。
最終行のpost_message()だけ除いて、権限755のapche:apacheでnotify.phpというファイル名にして新しく作っておきます。
次にrecLog.inc.phpを編集します。

先頭に+がある行を追加します。
意味としては、まず一番上の行は単純にnotify.phpを読み込んで、post_message()関数を使えるようにするためのものです。
下の4行は、ログレベルがINFOかDEBUG以外だったらLINEに通知するという意味になります。

結果

まだINFOやDEBUG以外のログが上がってないので、通知はきませんw
ただし、DEBUGのand条件を取って、何個か通知がきたので、うまくいっていると思います。

最後に

IFFFTと連携してやるのも楽しいと思いますが、自分でコード書くのも楽しいもんです。
複雑なことはできませんが、まだまだ使い道はあると思うのでいろいろ試してみてください。

Oracle Traffic Director 12.2.1.1 (OTD) サイレントでAdminServer&ドメイン作成

はじめに

先日のサイレントインストールに引き続いて、今度はサイレントでAdminServerとドメインを作成しようと思います。
camit.hateblo.jp

準備

AdminServer&ドメイン作成用のWLSTスクリプトを作成します。
WLSTとはWebLogic Scripting Toolの略で簡単に言うと、コマンドラインで設定できるツールです。
WLSTスクリプトは、基本Python形式で作成します。Pythonに触れたことない人も触れたことある人も、お手軽に作れます。
ではさっそくサイレントAdminServer&ドメイン作成用のスクリプトです。

スクリプトは下記の情報で作成してあるので、適宜変更してください。

ログインユーザー weblogic
ログインパスワード weblogic1
リッスンアドレス 全て
リッスンポート 7001
ドメイン camit
ドメインホーム /opt/oracle/otd12.2.1.1/user_projects/domains/camit

ドメイン作成

先ほど作成したスクリプトをWLSTに流して、ドメインを作成します。

/opt/oracle/otd12.2.1.1/oracle_common/common/bin/wlst.sh createDomain.py

エラーが出力されなければAdminServerとドメインの作成完了です。

OTD起動

あとは起動すれば、ブラウザから各種設定できるようになります。
起動はシェルスクリプト等にしておくと後々楽だと思います。

nohup.outとかにエラーとかShutdownとかの文字が出力されていなければ起動されているはずです。
netstat -ant 7001とかで確かめてもいいかもです。

あとはブラウザからhttp://[リッスンアドレス]:[リッスンポート]/emにアクセスすれば、下記のような画面が出ると思います。
ユーザー名/パスワードにweblogic/weblogic1を入れてサイン・インを押せば、あとは思いのままに。
f:id:camit:20161021002141p:plain

思いのままに。とは言ったものの、このままではインスタンスも何もないので何もできません。
次回はひとまず使えるようになるまでを作っていこうと思います。

Oracle Traffic Director 12.2.1.1 (OTD) サイレントインストール

はじめに

OTDを知っている人いますか?
日頃Oracle製品を利用している方であれば、知っているかもしれません。

OTDとはOracle Traffic Directorの略で、いわゆるOracleの出しているソフトウェアロードバランサのことです。
ソフトウェアロードバランサといえば、他にはUltraMonkeyApachemod_proxy_balancerモジュール、POUNDといったものがありますね。
逆にハードウェアロードバランサといえば、BIG-IPやA10といった有名どころがあります。

ていうか、そもそもOracleがロードバランサ?なんて疑問がありますが、Oracleはだいぶ前からExalogic,Exadataという、HWとSWを統合してより早くJavaやOracleDBが動くようにするための基盤を出しています。その早く動くための1つとしてロードバランサがExalogicに組み込まれたんですかね。

OTDの構成

OTDは考え方がBIG-IP等とは若干違い、やはりOracleという感じです。
下図のように基本的にリスナー、仮想サーバー、オリジン・サーバー・プールの3つの層となります。
また、2台構成でフェイルオーバー/フェイルバックさせる場合は、フェイルオーバーグループというのを組みます。
f:id:camit:20161010132031p:plain

  • リスナー

OracleDBと似たような感じで、リスナーにVIPとポートを割り当てます。
SSLをLBに持たせる場合は、リスナーもしくは仮想サーバーで設定することができます。

  • 仮想サーバー

リスナーが受け取ったアクセス情報より、URIから異なるオリジン・サーバー・プールへ振り分けることや、リスナーと同様にSSLの設定等、様々なことをする層です。

  • オリジン・サーバー・プール

オリジン・サーバーという振り先のアドレスとポートをまとめたものになります。ヘルスチェックの設定はここでやります。

  • フェイルオーバーグループ

Act-Act、Act-Sbyといった構成を組む場合に、フェイルオーバーグループを組みます。フェイルオーバーグループはVIPごとに作成します。また、異なるフェイルオーバーグループに同一のVIPを割り当てることはできません。

サイレントインストール準備

GUIでインストールするようですが、GUI入れてるサーバーは少ないでしょうから、サイレントインストールという方法をとります。
サイレントという名の通り、GUIを起動せず、また項目の選択もせずインストールします。

  • 必要なもの
  1. Fusion Middleware Infrastructure、OTDのインストーラjarファイル
  2. レスポンスファイル
  3. oraInst.locファイル

Fusion Middleware Infrastructureとは、OTD等のミドルウェアを管理するものみたいな感じです。

1.インストーラは以下からダウンロードします。サインインが必要なので、My Oracle SupportのIDを取得しておきます。(無料です)
Oracle Software Delivery Cloud
サインインをした後、「Fusion Middleware Infrastructure」と検索して「Oracle Fusion Middleware 12c Infrastructure 12.2.1.1.0」を選択、プラットフォームから「Linux x86-64」を選択します。
また、同様に「Oracle Traffic Director 12.2.1.1.0」で検索して「Oracle Traffic Director 12.2.1.1.0」を選択、プラットフォームから「Linux x86-64」を選択します。
選択したら、右の方にある「Continue」を押します。
画面が遷移したらもう一度「Continue」を押します。
そしてライセンス同意のチェックを入れて「Continue」を押します。
すると、ダウンロードリンクが出てきます。そこから以下の2つをダウンロードします。
・V138469-01.zip
・V266904-01.zip

2.レスポンスファイルは普通にFMW用とOTD用に2つ作ります。


基本的には上記をコピペでいいですが、ORACLE_HOMEは適宜インストールしたいディレクトリに変更してください。

3.次にoraInst.locファイルです。これは共通で使用します。
もしOracleDBやWLSをインストールしていたら、使用したものをコピーして使ったほうがいいです。
inst_groupはインストールするユーザーのグループを通常指定します。

サイレントインストール

必要なものは揃ったので、いよいよインストールしていきます。
インストールは以下のユーザー等で実施し、レスポンスファイルはホームディレクトリ、oraInst.locは/etc配下にあるものとします。

ユーザー oracle
グループ oinstall
ORACLE_HOME /opt/oracle/otd12.2.1.1

まずは、インストール先のディレクトリを作成します。理由は簡単、/optはroot権限なのでoracleユーザーではディレクトリを作成できないため。

$ su -
# mkdir -p /opt/oracle/{otd12.2.1.1,oraInventory}
# chown -R oracle:oinstall /opt/oracle
# exit

では、ダウンロードしたzipを解凍しつつ、インストールしていきます。

$ unzip V138469-01.zip
$ java -jar fmw_12.2.1.1.0_infrastructure.jar -silent -responseFile /home/oracle/fmw_inst.rsp -invPtrLoc /etc/oraInst.loc
$ unzip V266904-01.zip
$ ./fmw_12.2.1.1.0_otd_linux64.bin -silent -responseFile /home/oracle/otd_inst.rsp

エラーが出ていなければ、以上でインストールは完了です。
Warningはたいていは無視しても問題ないです。

次回はサイレントでドメイン作成していきます。

VIP(HSRP)間の接続について

長らく更新が途絶えてしまいました。。。

はじめに

ネットワークを構築するとき、各機器の冗長化は当たり前かと思います。
その際、CiscoのL3SWやRTを使用する場合はHSRPを組むことが多いでしょう。
今回はHSRPを組んだ機器間の接続について、実装して確認したのでブログに残そうと思います。

実験した構成

まず物理的な構成は↓の通りです。
f:id:camit:20160327210302p:plain
この状態で、L3SW#1-RT#1間が切れた場合に予備系へ切り替わり、通信が継続できるかを実験しました。
f:id:camit:20160327210310p:plain

次にIPアドレス等、論理構成です。
L3SW間はtrunkポートです。
f:id:camit:20160327210315p:plain

IPアドレス マスク 機器
172.0.0.1 255.255.255.252 PC#1
172.0.0.2 L3SW#1
10.0.0.1 255.255.255.248 L3SW VIP
10.0.0.2 L3SW#1
10.0.0.3 L3SW#2
10.0.0.4 RT VIP
10.0.0.5 RT#1
10.0.0.6 RT#2
10.0.0.9 255.255.255.252 RT#1
10.0.0.10 RT#2
10.0.0.13 255.255.255.252 RT#1
10.0.0.14 PC#2

次にHSRPの設定です。
L3SW側とRT側で、HSRPのグループ番号が違うところが肝です。グループ番号を同じにした場合、同じグループにVIPを2つ持つことになり、下記のエラーメッセージが出力され続け、正常にHSRPが組まれません。

%HSRP-4-DUPADDR: Duplicate address 10.0.0.1 on Vlan100, sourced by xxxx.xxxx.xxxx.xxxx

L3SW#1 L3SW#2
standby 1 ip 10.0.0.1 standby 1 ip 10.0.0.1
standby 1 timers 1 4 standby 1 timers 1 4
standby 1 priority 110 standby 1 priority 100
standby 1 preempt standby 1 preempt
RT#1 RT#2
standby 2 ip 10.0.0.4 standby 2 ip 10.0.0.4
standby 2 timers 1 4 standby 2 timers 1 4
standby 2 priority 110 standby 2 priority 100
standby 2 preempt standby 2 preempt

実験結果

  • 現用系の場合

想定通りに、グループ1はL3SW#1がActive、L3SW#2はStandbyとなり、VIPはL3SW#1が持っている状態となりました。
同様にグループ2はRT#1がActive、RT#2がStandbyとなりました。
なお、グループ1,2ともに、HSRPのハローパケットは緑の経路を通って通信されています。

  • 予備系の場合

L3SW#1とRT#1間が切れた場合、RT#2がActiveとなり、下記のような経路で通信されるのでしょうか。
f:id:camit:20160327210320p:plain
結果は、上図のとおりの経路で通信されました。
RT#1はHSRPを設定しているリンクがダウンしている状態のため、Initとなっていました。
RT#2はActiveとなっており、RT#2から見たStandby系はunknownとなっていました。

まとめ

片方がL3SW、片方がRTという構成で、両機器がそれぞれHSRPを組むという例が見当たらなかったので実験してみましたが、見事にうまくいきました。
あとはアクセスリストを入れてあげれば、実際に企業等で利用できる状態になるでしょう。
今回はHSRPだけでしたが、さらにRT側でSNATなどする場合は、予備系になったときのために、戻りのスタティックルーティングをRTに追加してあげる必要がでてきます。
そちらについてはまた今度ですかね。