2008年12月26日金曜日

sendmail で リレーするメールの DATA 部分をログに記録する

sendmail を使っているメールサーバでちょっと調べ物があった。
 

取りあえずメールのヘッダを記録したかったので、 sendmail.cf にてログレベルをデフォルトの9から11 → 15 → デバッグの → 16 → 20くらいまで引き上げたが、エンベロープは記録されるものの、肝心のDATAの中身が記録されなくて困った。
 
 

何か別の手段はと思い、Manpage of sendmail を見たら物騒なオプションを発見

-X logfile
指定された logfile に、メーラに出入りする情報すべてを記録します。メーラをデバッグする際の最後の手段としてのみ使ってください。非常に大量の情報があっという間に記録されます。
Manpage of sendmailより


まあ行儀が良さそうなオプションじゃないな。
 

早速起動スクリプトのsendmail 起動コマンドラインに "-X /var/log/maildata" とでも追加して起動したところ、思い通りDATAの中身が丸ごとログに吐かれた。
 

これで"Message-Id:" や "Subject:" も確認し放題、もちろんメール本文もだ。
悪用厳禁やね。
 
 



追記:2009/4/9
姉妹ネタを作成、ログがでかくて困るという時にはこっちでも。
sendmail の .forward で、メールの任意の行をログに出力
 
 

2008年12月25日木曜日

冬期の長期休暇を控えて:JPCERT/CC が注意喚起

JPCERTコーディネーションセンター(JPCERT/CC) が年末年始長期休暇を控え、管理者向けの注意喚起 冬期の長期休暇を控えて を公開しています。
 

昨年はやったUSBメモリ(外部記憶)の自動実行については、下記のように特に注意するよう呼びかけ。


外部記憶装置を媒介したウイルス感染が増加:

昨今 USB メモリやフラッシュメモリーカード、外付型ハードディスクなどの外部記憶装置を媒介したウイルス感染が増加しています。
休暇中に社外で使用した外部記憶装置を社内の機器に接続する場合は、ウイルスの感染を防ぐためにシフトキーを押しながら PC に外部記憶装置を接続することで自動実行を一時的に無効にすることを推奨いたします。
また、内容を確認する前にウイルス対策ソフトでスキャンを行って下さい。

 

「シフトキーを押しながら PC に外部記憶装置を接続する」
ああ、そんな手があったな。これなら繋いでゆっくりスキャンでもOKだ。
 

ちなみにWindows起動時のスタートアップもシフトキー押してれば回避できる。
 

他、休み明けの心得とかを紹介しているので、会社・自宅問わず管理者な方は目通ししておいては。

2008年12月19日金曜日

Soralis10、ZFSを使ってNFS共有をつくる

Solaris10 でZFSを使ったNFS共有を作ったのでメモ。
 
 


ZFS仕込み、プール用領域の確保


ZFSに使うのは本来RAWデバイスが望ましいらしいんだけど、
HDD一台しかないので仕方なくパーティション分けてブロックデバイスを確保。
では4つに切ってみよう。
 

Partition Status Type Start End Length %
========= ====== ============ ===== === ====== ===
1 Active Solaris2 1 4144 4144 11
2 Solaris2 4145 15429 11285 29
3 Solaris2 15430 26714 11285 29
4 Solaris2 26715 37999 11285 29

これでパーティション2-4の領域を、それぞれZFSのプールに追加できる。
各領域の名称は "c1d1p2","c1d1p3","c1d1p4"。
 
 


ZFS作成


まず "zpool" コマンドで tank というZFS領域を作る。

$ zpool create tank c1d1p2


領域 "tank" が作成され、自動で "/tank" にマウントされた。
 
"zfs list"コマンドで確認する、84.7GBだ。
$zfs list
NAME USED AVAIL REFER MOUNTPOINT
tank 108K 84.7G 18K /tank

 
 

"zpool status"コマンドで見ると "デバイス:c1d1p2" が使われていることがわかる。
$zpool status tank
プール: tank
状態: ONLINE
スクラブ: 何も要求されませんでした
構成:

NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
c1d1p2 ONLINE 0 0 0

エラー: 既知のデータエラーはありません

 
 

ついでにZFSの領域拡張


ついでにZFSの機能、デバイスの追加による容量増加を試す、いまのプール"tank"に "c1d1p3"を追加してみる。
$zpool add tank c1d1p3

 

するとこうなる、追加した分の容量が増えている。
$zfs list
NAME USED AVAIL REFER MOUNTPOINT
tank 111K 169G 18K /tank
 
$zpool status tank
プール: tank
状態: ONLINE
スクラブ: 何も要求されませんでした
構成:

NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
c1d1p2 ONLINE 0 0 0
c1d1p3 ONLINE 0 0 0

エラー: 既知のデータエラーはありません

うーん便利。
 
 


さらについで、ZFSホットスペア追加


デバイス追加の際、オプション "spare" を指定するとホットスペア扱いでデバイスが追加される。
$zpool add tank spare c1d1p4

既存のデバイスが壊れたら、代わりに使われるんだろう。多分。
 

容量が増えていない代わりに、スペアという項目が追加されてデバイスが確認できる。
$zfs list
NAME USED AVAIL REFER MOUNTPOINT
tank 111K 169G 18K /tank
 
$zpool status tank
プール: tank
状態: ONLINE
スクラブ: 何も要求されませんでした
構成:

NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
c1d1p2 ONLINE 0 0 0
c1d1p3 ONLINE 0 0 0
スペア
c1d1p4 AVAIL

エラー: 既知のデータエラーはありません

 


ちなみにホットスペアは取り外せる、やっぱり普通の領域に突っ込みたい時などに便利。
$zpool remove tank c1d1p4

しかし、普通の領域をはずすのは色々手順があるみたい、そこは未調査。
 
 


ZFSの領域をNFS共有する


一応これが目的だった。
では "/tank" を共有しよう、コレだけでOKだ。

$zfs set sharenfs=on tank

 

ZFSは領域ごとにプロパティーを持っていて、ステータスを変えてあげればそれだけでいろいろ出来るようになっている。"on" の変わりに "ro" などで指定もOKだ。
 

"tank" のプロパティを確認してみよう、"sharenfs" が onだね。
$zfs get all tank
NAME PROPERTY VALUE SOURCE
tank type filesystem -
tank creation 金 12月 ** **:** 2008 -
tank used 123K -
tank available 169G -
tank referenced 18K -
tank compressratio 1.00x -
tank mounted yes -
tank quota none default
tank reservation none default
tank recordsize 128K default
tank mountpoint /tank default
tank sharenfs on local
tank checksum on default
tank compression off default
tank atime on default
tank devices on default
tank exec on default
tank setuid on default
tank readonly off default
tank zoned off default
tank snapdir hidden default
tank aclmode groupmask default
tank aclinherit restricted default
tank canmount on default
tank shareiscsi off default
tank xattr on default
tank copies 1 default
tank version 3 -
tank utf8only off -
tank normalization none -
tank casesensitivity sensitive -
tank vscan off default
tank nbmand off default
tank sharesmb off default
tank refquota none default
tank refreservation none default

 

念のため "showmount" コマンドで共有状態を確認するとちゃんと共有している。
$showmount -e
devsol01.seton.private.local がエクスポートしているファイルシステムのリスト:
/tank (すべてのホストへエクスポート)

 
 

あとは好きなホストからマウントしよう。
とりあえずこんなところで。

2008年12月18日木曜日

メモ:日本OSS推進フォーラムによるスケーリング資料

メモエントリ
開発基盤WGの資料リンク
 

先輩エンジニアに教えてもらったんだけど、2005年度「OSS性能・信頼性評価/障害解析ツール開発」の成果 に面白い資料がいっぱいある。
 

とりあえずこのへんから読んでいこう。
「OS層の評価」報告書
「DB層の評価」報告書
「Javaアプリケーション層の評価」報告書

2008年12月15日月曜日

テクニカルエンジニア(ネットワーク)合格

2008年10月に受けた テクニカルエンジニア(ネットワーク) 、今日合格発表だったのでIPAに突撃して結果を拾ってきました。
 

平成20年度 秋期
情報処理技術者試験 成績照会
テクニカルエンジニア(ネットワーク)試験


受験番号 NW*** - **** の方は,合格です。

午前試験のスコアは,660 点です。
午後I試験のスコアは,695 点です。
午後II試験のスコアは,640 点です。

 

OK。
入社時の長期目標であげていた資格を取れたということで結構嬉しい。
 
ただ資格取ったとはいえ、どうしても試験範囲が広くて業務でいじってない事柄も多いので、ペーパードライバー感が漂う。
そこは割り切ってしまっても良いんだが。
 
 

ついでにアイクラフトのボーナス査定でのポイントも高いので一石二鳥?
業務の実績は一番ウェイトの高い評価ポイントだが、技術職中心の会社なので、スキルアップをしてきたかという点や、会社の経営方針に沿った仕事をしているかという点も評価の対象になる。
引用:賞与面談の時期 - アイクラフト社長ブログ

 

これの スキルアップ の裁量が意外とでかい、普段から適当にやってりゃいいので私にとってはよい制度だ。
「適す」「当たる」と書いて適当というのですよ

2008年12月12日金曜日

Google Chrome が正式版になったぞ

GoogleのWEBブラウザ GoogleChrome の配布版からベータが取れた。
 

GoogleChrome ダウンロードページ
http://www.google.com/chrome


ここからダウンロード可だ。
 

リリースにあたっての各種情報は公式ブログにて案内されている。
Google Chrome(BATA) - Official Google Brog
ベータが取れたことを強調しているタイトルだ。
 

Google日本ブログ ではまだだなぁ。
(※追記:Google Chrome(BETA) 日本語訳 来た。この更新されてる方はAdmintechに来てたな…)
 
 

ところでアドオン的な話はどうなったんだろう?タブを縦並びに変更したいんだが。

マネークリップの使い方「Clip this Way!」

マネークリップを使っている。
というのも、お尻のお肉が無さ過ぎて ズボンのうしろポケットに財布を入れると痛くて仕方ないからだ。
 
 

しかしマネークリップという物は、よく見る使い方(挟みかた)では使いづらくてしょうがない。あのお札をまとめて真ん中辺で挟むような方法。
だいぶ前なのでどこで見つけたか忘れたが、自分にとっていい方法があったのでそれを記事にしておく。
 

[caption id="attachment_1121" align="alignnone" width="300" caption="写真:マネークリップ基本形"]写真:マネークリップ基本形[/caption]
 
基本はこういう形でズボンのお尻ポケットに入れている、ほとんど邪魔にならないしお札もそんなに痛むものじゃない。日本のお金はすごく丈夫にできてる気がする。
 
これだと挟み方がよく分からないかも、ちょっとばらしてみよう。
 
 

[caption id="attachment_1122" align="alignnone" width="300" caption="写真:お気に入りマネークリップ"]写真:お気に入りマネークリップ[/caption]
 
愛用のマネークリップ、たしか1000円弱。この可動部があるところが自分の使い方にぴったりマッチ。
くぼみのところに親指がすっと入り、開くときにシャキッと小気味よい音がする。
ららぽーと甲子園文具屋エムズで買った、ここの小物は結構好き。
 
で、どうやって使うのかというと。
 
 

[caption id="attachment_1124" align="alignnone" width="300" caption="写真:「clip this way」(こうやって使うのよ)"]写真:「clip this way」(こうやって使うのよ)[/caption]
 

最初の写真の状態から、お札を横に広げるとこうなっている。一枚づつ折って重ね、それをまとめてクリップしている。
こうすることで幾らあるか瞬時に分かるし、ぱっと開いて必要分を取り出すことも容易だ。
多分この使い方を知らなかったらマネークリップ使い続けてない。
 

クリップの前にお札を折りたたむ必要があるが、まとめて折ってずらすだけなのでそんなに手間でもない。万札を崩した際くらいしかする必要もないし。
 
 

マネークリップ使ってみた(使いたい)けど、不便だよなぁと思った方は是非試してほしい。

2008年12月11日木曜日

FireFox を別プロセスで立ち上げる、プロファイル切り替え必須

Windows版FireFoxの話。(追記:Linux版でもオプション大文字に気をつければOKだそうです。)
FireFoxを複数起動しようとアイコンを叩くも、タスクマネージャではプロセスが一つしか起動しない。
 

[caption id="attachment_1110" align="alignnone" width="500" caption="画像:複数Firefoxも、プロセスは1つ"]画像:複数Firefoxも、プロセスは1つ[/caption]
 

ということでFireFoxを複数のプロセスで起動したい時の使い方を紹介。
副作用としてプロファイルが複数できるので、それだけでも結構使いでがある、複数セッション・ブックマーク・プロキシ使い分けてJmeter録画専用などと用途はいろいろ。
 

ネタ元はMDCのコマンドライン解説ページ
 
 

まずはショートカットを作成


[caption id="attachment_1111" align="alignnone" width="500" caption="画像:FireFoxへのショートカット"]画像:FireFoxへのショートカット[/caption]
プロパティでコマンドラインを確認。
[caption id="attachment_1112" align="alignnone" width="425" caption="画像:FireFoxショートカット(無改造)"]画像:FireFoxショートカット(無改造)[/caption]
 
 

コマンドラインオプションを指定することで複数起動を有効にする


今回使うのは下記2つのオプション、他についてはMDCで
 









-no-remoteアプリケーションを同時に複数起動できるように
-pFireFoxが使うプロファイルを指定する

追記:
Windowsは Pオプション に大文字小文字の区別はないが、Linux版は大文字Pで無いと駄目のようです。この辺のお方に教えてもらいました。
元々公式のオプション開設はPで書いてあるので本来大文字が正しいと言うことでしょう。

 

で、とりあえず "-p" を空っぽの状態にした物を作成、ひとまずの準備完了。
[caption id="attachment_1113" align="alignnone" width="425" caption="画像:Firefoxショートカット、ひな形版"]画像:Firefoxショートカット、ひな形版[/caption]
 
 

プロファイルの作成と用途別のショートカットを作成していく


さっき作ったショートカットを叩いてみよう、見慣れない画面が出てくる。
[caption id="attachment_1114" align="alignnone" width="405" caption="画像:mozillaのプロファイルマネージャ"]画像:mozillaのプロファイルマネージャ[/caption]
 

なんかNetScapeとかでよくみたような感じのプロファイルマネージャが出てくる、新しいプロファイルを作成しよう。
ちなみに「今後このプロファイルを使用する」というオプションは外しておこう、あとで多少面倒になる。
基本的に使われているのは "default" プロファイルなので、ここで作った空っぽのプロファイルがデフォルト(-no-remoteなしの状態)で起動しては困るからだ。
 

ではプロファイルを作ってみよう。
[caption id="attachment_1115" align="alignnone" width="500" caption="画像:プロファイル作成"]画像:プロファイル作成[/caption]
ここで指定した名前は、 "-p" オプションで指定するプロファイル名になる。
今は空っぽで起動したが、 "-p user01" とすれば user01 のプロファイルでFireFoxが起動する。
[caption id="attachment_1116" align="alignnone" width="405" caption="画像:プロファイル作成済み"]画像:プロファイル作成済み[/caption]
さて新しいプロファイルが完成した。
 

使い方1:「"-p" 空っぽのショートカットを叩く」 → 「プロファイル選んで起動」 を繰り返す


"-no-remote" オプションは「複数のアプリケーションを立ち上げることが可能」とあるけど、実は同じプロファイルでのFireFox複数起動はできない。
つまり2つ目以降のFirefoxプロセスの起動には "-p" オプションの指定が必須ということです。
 

ということで初めに作った"-p"オプションにプロファイル名を渡していないショートカットを叩いて、起動していないプロファイルを選択するという作業を繰り返すと…
[caption id="attachment_1117" align="alignnone" width="470" caption="画像:複数起動したFirefox"]画像:複数起動したFirefox[/caption]

という感じ、見事別プロセスでのFireFox起動に成功。
 
 

使い方2:「"-p [プロファイル名]" としてショートカットを叩く」


"-p" オプションに直接プロファイル名を指定しておくことで、プロファイルマネージャをすっとばすことが可能です。
用途別に作るプロファイルはこちらが便利、場合によっては "-no-remote" 外してもいい(ハズ)。
[caption id="attachment_1118" align="alignnone" width="425" caption="画像:使用プロファイルを指定する"]画像:使用プロファイルを指定する[/caption]
と、このように指定します。
 
 
 

おわりに


この手順で作ったプロファイル、それまで使っていた "default" とは何から何まで違います、ブックマーク・Cookieはもちろん、アドオンも全部空っぽ。また、それらは別々に管理されるのでものによっては2度手間ですね。
 

しかし、「使える」ように環境構築するにはそれなりに骨が折れるが、たとえばFireBugなど機能多めなアドオンを有効なやつ、入れてないやつを同時に起動したりできる、片方がクラッシュしてももう一方に影響ないのも大きいです、普段の利用にもプロファイル分離は有用でしょう。

WordPressのクォーテーション自動変換を無効化する

WordPressに投降した記事は、表示の段階で少し修正が入る。
シングルクォーテーション・ダブルクォーテーションなどの記号がそれだ。
 
この機能、普通のブログでは特に気になるようなことではないが、こと技術系のブログでは結構邪魔になることがある。
 


  1. コマンドラインを記事にアップ

  2. コピペして使おうとする

  3. 貼り付けたクォーテーションが全角

  4.  
  5. (ノ`皿´)ノ彡┻━┻


 
 

落ち着いてこれを無効化する情報を探る、ひとつのファイルを修正で済む模様。
"/wp-includes/formatting.php" に記事表示の際の変換処理が入っているらしいので該当箇所を変更する。
 

2.6.5で言うと、34行目のこれをコメントアウトだ。
[sourcecode language='php']
// $curl = preg_replace($dynamic_characters, $dynamic_replacements, $curl);

[/sourcecode]
 

バージョンアップのときには注意しないといけないので記事に起こす。
 
追記:2.7.1だと 60行目だ
追記:2.8.4だと 69行目だ
追記:2.9.1だと 82行目だ

 


// 参考にした情報元
WordPressのクォーテーションマークの変換を無効にする - Regen Press

2008年12月4日木曜日

MS-DOSバッチファイルでFizzBuzz

昨日の記事:VBScript で FizzBuzz の続編。
FizzBuzz、今度はDOSバッチファイルで作ってみた。
単純にやってみたかっただけなので、コードを短くする工夫とかはまあ置いておこう。
 
 

FizzBuzzをDOSバッチでやる際に、とりあえず剰余(mod)が取れるのかよく分からなかったので3の倍数、5の倍数を判断するカウンタをつくることにして書いてみた。
記事書く前に、本で算術演算子を調べたら、mod 取れるみたい…
100を3で割った余りなら、
> set /a hoge=100%3
でOKだった。まぁコレはコレでありかな。。

 

ちょっと引っかかったのが遅延展開、forの中で普通に変数 %hoge% って使うと、forの中でいくら中身をいじろうと、for に入る前の変数の中身が展開されちゃう。
setlocalで 遅延展開有効 にして、!hoge! って使えばfor内でもその時点の変数内容が展開される。
あとは特に工夫も無く。
[sourcecode language='sh']
@echo off

REM // 遅延展開有効
setlocal enabledelayedexpansion

REM // ウインドウタイトル変更
TITLE FizzBuzz

REM // カウントダウン用の変数
set SAN=3
set GO=5

REM // 繰り返し
for /l %%I in (1,1,100) do (

rem // 表示用の変数、空っぽ比較用も
set STRING=
set STRING_FLG=

rem // 3と5のカウンターが0ならリセット
if !SAN!==0 (set SAN=3)
if !GO!==0 (set GO=5)

rem // 3と5のカウンターを一つ減らす
set /a SAN=!SAN!-1
set /a GO=!GO!-1

rem // 3のカウンターが0なら表示用にFizz追加
if !SAN!==0 (set STRING=Fizz)

rem // 5のカウンターが0なら表示用にBuzz追加
if !GO!==0 (set STRING=!string!Buzz)

rem // ここでFizzもBuzzも入ってなければループ数字追加
if !STRING!==!STRING_FLG! (set STRING=!STRING!%%I)

rem // 現在の数と、FizzBuzzの結果を出力
echo %%I !STRING!
)
pause
endlocal
[/sourcecode]


実行結果。
[caption id="attachment_1099" align="alignnone" width="428" caption="画像:FizzBuzz"]画像:FizzBuzz[/caption]
 

デキター。
 

剰余の計算処理もちゃんと調べてればもう少しスマートだったが、まあ結果オーライという事にしよう。
set のヘルプに一応ヒントらしきものはあったが見逃した。
setの詳しい解説があった。

VBScript で FizzBuzz

FizzBuzz って言うのがあるというのを知った、 今夜わかるセキュアプログラミング - うさぎ文学日記 を見て。

1から100までの数を表示するプログラムを書け。
ただし3の倍数のときは数の代わりに「Fizz」と表示。
5の倍数のときは「Buzz」と表示。
3と5両方の倍数の場合には「FizzBuzz」と表示すること。

 

VBScriptで書いてみた、前述資料にPerlでの答えが書いてあったからインチキだけど。
[sourcecode language='vb']
for i=1 to 100
'// 文字列初期化
strTemp = ""

'// 3の倍数ならFizzを文字列に追加
if (i mod 3) = 0 Then
strTemp = "Fizz"
End if

'// 5の倍数ならBuzzを文字列に追加
if (i mod 5) = 0Then
strTemp = strTemp & "Buzz"
End if

'// ここで文字列が空っぽなら数字を代入
if strTemp = "" Then
strTemp = i
End if

'// 表示用の一列作成
strResult = strResult & i & VbTab & strTemp & VbCrLf
Next

'// 表示
Msgbox strResult,,"FizzBuzz"

Wscript.Quit
[/sourcecode]
 

実行するとこうなる、スペースの都合で1-30までの表示としてます。
[caption id="attachment_1097" align="alignnone" width="130" caption="画像:FizzBuzz"]画像:FizzBuzz[/caption]
 

うん、アプローチは色々ありそうだけど、まあできてるんでないの。

vmstat の出力に日付と時刻を付与@sh

サーバの稼動状況モニタ、 vmstat の出力には時刻情報がない。
 

標準だとこんな感じ、日付情報を出力したい時もあるよね。
# vmstat 1 3
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 33420 41628 45528 92228 0 0 7 47 14 4 1 1 98 0 0
0 0 33420 41628 45528 92228 0 0 0 0 38 35 0 0 100 0 0
0 0 33420 41508 45528 92228 0 0 0 0 67 77 2 0 98 0 0

 

よい方法を探してみたら同じよう流れの記事を見つけた、やはり多くが思うことなんだろう。

vmstatに日時を付ける - いろいろつまみぐい


 

perl だ、 さらにたどれば rubyでの実装 もやってる、なるほど。
 
 

うーん、perlが入ってないlinuxサーバなんか見たこと無いが、ここはシェルでもやってみたい。
 

という事でスクリプトを作ったぞ。
[sourcecode language='sh']
#!/bin/sh

while read -e hoge ; do
echo `date +%Y%m%d' '%H':'%M':'%S` ${hoge}
done
[/sourcecode]
シェルの組み込みコマンド、read で入力を一行ずつ処理するのだ、これを"vmread.sh"とでもして保存。(追記:hoge を省略すると変数名はREPLYになる)
 
 


# vmstat 1 3 | ./vmread.sh

早速実行!
20081202 20:30:01 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------

よい感じで日付情報が付いている…
 

20081202 20:30:01 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
20081202 20:30:01 r b swpd free buff cache si so bi bo in cs us sy id wa st
20081202 20:30:01 1 0 33420 35248 46172 92228 0 0 7 47 14 4 1 1 98 0 0
20081202 20:30:02 1 0 33420 34768 46172 92228 0 0 0 0 173 555 6 8 86 0 0
20081202 20:30:03 0 0 33420 34324 46172 92240 0 0 0 0 132 399 2 10 88 0 0

Σ(-д-) ゲッー!左にずれたー
 

どうやら read が 行の内容を hoge に突っ込む時に連続したスペースを一つの区切り文字と認識、詰めちゃってるようだ。
2009/2/17追記:
${hoge} をダブルクォーテーションで囲めば区切られないのでOK

 
 

対策を考えないと、、bashのマニュアル みても有効そうな手立ては無し。
とりあえず最後の出力に対して、trコマンドで スペースをTABに変換 してみる。
# vmstat 1 3 | ./vmread.sh | tr " " "\t"

どうかな?
20081202 20:37:34 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
20081202 20:37:34 r b swpd free buff cache si so bi bo in cs us sy id wa st
20081202 20:37:34 1 0 33420 40280 46728 92260 0 0 7 47 14 4 1 1 98 0 0
20081202 20:37:35 0 0 33420 39980 46728 92260 0 0 0 0 53 76 1 1 98 0 0
20081202 20:37:36 0 0 33420 39980 46728 92260 0 0 0 0 49 67 0 1 99 0 0

(予想通り)右に伸びたー...
 
 

困った。
少し考えて、出力をいじるのが無理なので入力をいじってみることに。
 

vmstat の出力からスペースをカンマに変換してreadに渡すと?
# vmstat 1 3 | tr " " "," | ./vmread.sh
20081202 20:42:22 procs,-----------memory----------,---swap--,-----io----,--system--,-----cpu------
20081202 20:42:22 ,r,,b,,,swpd,,,free,,,buff,,cache,,,si,,,so,,,,bi,,,,bo,,,in,,,cs,us,sy,id,wa,st
20081202 20:42:22 ,1,,0,,33420,,39928,,47076,,92268,,,,0,,,,0,,,,,7,,,,47,,,14,,,,4,,1,,1,98,,0,,0
20081202 20:42:22 ,0,,0,,33420,,39928,,47076,,92272,,,,0,,,,0,,,,,0,,,,,0,,,35,,,36,,0,,0,100,,0,,0
20081202 20:42:22 ,0,,0,,33420,,39688,,47076,,92272,,,,0,,,,0,,,,,0,,,,,0,,,95,,146,,0,,1,99,,0,,0

おお。コレはいけるぞ。
 

それでは最後にもう一度 trコマンド を入れて、カンマからスペースに変換。
# vmstat 1 3 | tr " " "," | ./vmread.sh | tr "," " "
20081202 20:46:06 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
20081202 20:46:06 r b swpd free buff cache si so bi bo in cs us sy id wa st
20081202 20:46:06 1 0 33420 39488 47412 92280 0 0 7 47 14 4 1 1 98 0 0
20081202 20:46:06 0 0 33420 39248 47412 92280 0 0 0 0 109 155 0 0 100 0 0
20081202 20:46:06 0 0 33420 39248 47412 92280 0 0 0 0 67 96 1 0 99 0 0

よぅし、完璧だ! …と思う。
 
 
(追記)
vmread.sh の前に trコマンドをはさんでしまうと、出力を全部貰ってからになるので全部同じ時間がくっつくことが判明!
パイプの仕様からしてよく考えたらそうかも…もう一工夫がいるのか。
 
ちょっと保留だなぁ。左に詰められても一応使い物になるし。
※コメントにより解決済み

2008年12月3日水曜日

IIS7でクライアントポート(リクエスト元ポート)をログにとりたいが…(追 記:apacheも)

セキュリティホール memo のキャリアグレード NATに関する記事 を見た。


Internet Week 2008 のキャリアグレード NAT の話で、 「キャリアグレード NAT が導入されると、クライアントのポート番号のログを取っておかないと、アクセス元をたどれなくなるよ (NAT されますから)」という話があったのを思い出した。



なるほどクライアントのポート番号のログを取っておくという事も推奨されるようになりそうです。
個人的にはいまいち必要性の実感に乏しいけど、残さないよりは残したほうがよいでしょう。
 

記事中ではApache2.2でのやり方が紹介されていたので、ほなIISはどうだろうと思って WindowsServer2008 で IIS7 を立ち上げ、ログフォーマットの設定画面を開く。
 

[caption id="attachment_1093" align="alignnone" width="386" caption="画像:IIS7ログフォーマット"]画像:IIS7ログフォーマット[/caption]
あぁ、クライアントポートの項目無いねぇ。IIS6 も内容は一緒。
 

仕方が無いのでメタベースとかに直接書けばいけるかな、と思って情報をあさってみたが、
IInetLogInformation - MSDN
この辺見るに、標準では明らかに無理っぽい(※ログモジュールごと完全自作なら取得可?)
マイクロソフト 何とかしてくれー どこに要望出したら良いんだろう。IIS.NETか?
 
 

では折角なので セキュリティホール memo の Apache 用設定を試してみようとやってみた。

「もしや……」と思って、 英語版のドキュメントを見たら、ありました。



%{format}p
The canonical port of the server serving the request or the server's actual port or the client's actual port. Valid formats are canonical, local, or remote.

引用:セキュリティホール memo のキャリアグレード NATに関する記事

 

それではapacheのコンフィグファイルを編集、デフォルト combined の Logformat にクライアントポートを出力しそうなフォーマット文字列を加えて試してみる。
%p %{remote}p %{local}p %{canonical}p↓で、出力されたログ↓
*.*.*.* - - [02/Dec/2008:**:**:** +0900] "GET / HTTP/1.1" 304
- "-" "Mozilla/5.0(略)Firefox/3.0.4" 80 80 80 80


…全部 80 がログに記録される、、いやいやリクエスト元3000番台だったぞ、{remote}じゃないのか?何か間違ってるんかな。
 

apacheのバージョンはコレ。
# apachectl -v
Server version: Apache/2.2.3
Server built: Jan 15 2008 20:33:30

 

うーむ、本当に取れるんだろうか…

2008年12月1日月曜日

clip.exe でコマンドプロンプトの出力をクリップボードに送る@WindowsServer

サーバで作業中によく使うコマンド、「clip.exe」について。WindowsServer2003以降(vista含む)は標準で利用できる。
 
 

コマンドプロンプトで作業中に、長い出力結果をゆっくり見たいことがある。ファイルにリダイレクトして開いても良いが、パイプを利用して clip.exe に渡すと手間が省ける。
 

例えば for コマンドのヘルプ、コレはやたらと長くて 実に142行にわたる。
これをコマンドプロンプトのウィンドウを遡って読むのは非常に疲れるので、クリップボードに送ってメモ帳などに貼り付ける。
> for /? | clip

 

で、メモ帳にぺたっと。
[caption id="attachment_1088" align="alignnone" width="500" caption="画像:クリップボードからメモ帳へ"]画像:クリップボードからメモ帳へ[/caption]
 

これでゆっくり読める。

2008年11月29日土曜日

telnet があれば、RAWプリンタで印刷できる

telnet ですかー!?
telnetがあれば、TCP9100のRAWポート印刷に対応しているネットワークプリンタから印刷できる。
 
lprコマンドとかの立場はまあおいといて。
 
 

取りあえずそこらにネットワークプリンタがあったら、Telnetで9100番ポートに繋いでみよう。
telnet [プリンタのIPアドレス] 9100

セッションが張れたら任意の文字を入力しよう、コピペでもOK。
 
 

そしておもむろにCtrl+] でエスケープ(Windows・Linuxと多分共通)、「telnet >」のプロンプトで "c" または "close" と入力してセッションをクローズしよう。
 

印刷された?
 

telnetシリーズタグ

ちょっとjmeterでメモ

jmeter関連でアドバイス貰ったのでメモ。
 

http://www.jasst.jp/archives/jasst07e/pdf/C2-1.pdf
 

http://d.hatena.ne.jp/defiant/20080909#1220944470
http://d.hatena.ne.jp/defiant/20080909#1220943546
 

http://www.programmerplanet.org/pages/projects/jmeter-ant-task.php
 

MS の Applecation Center Test とかも悪くないんだけど。
負荷・テストツールは手軽に手に入る環境がいいなあ。
 
 

あと、CSVデータセットの使い方
http://www26.atwiki.jp/11rtksn/pages/7.html

2008年11月28日金曜日

携帯対応とはてなスター機能追加@自分のwordpress

Wordpress の機能追加をした。
携帯電話(モバイル)に対応するプラグイン、「MobilePressNEO」と、色々なWEBサービス提供でおなじみの はてな より、ブログに はてなスター をつけてもらえる機能を実験的に追加。
これは はてな にログイン済みのユーザで無いと分からないかな?
 
 

携帯対応、MobilePressNEO


元々携帯向けのブログではないけどやってみた、MobilePressNEO というプラグインを採用。
 
プラグイン有効にしただけで携帯からのアクセスはあっさり風味のモバイルサイトに見せてくれる優れものプラグイン。
作者の言うとおり造りが素直なようで、phpのバージョンやら気にしなくてよいのもうれしい、php4でも5でも動くっぽい。
 

折角なのでQRコードを作成、
[caption id="attachment_1084" align="alignnone" width="250" caption="画像:「SawanoBlog.」QRコード"]画像:「SawanoBlog.」QRコード[/caption]
 
 

はてなスター機能追加


スター付与ボタンがついているブログをどこかで見たのでSawanoBlogにもつけてみた。
 

wordpressが出力するHTMLのHEADにて、はてなスタースクリプトを読み込むように記述、記事タイトルの横にはてなスター付与ボタンができた。
コメントは無効にしてある(はず)。

[sourcecode language='html']
[/sourcecode]
 

Wordpress を はてなスター に対応するには、普通のはてなスタースクリプトを追加するだけじゃあ駄目、Wordpress対応用スクリプトも一緒に読み込む必要がある。
 
専用スクリプトが何か言うと、はてなスター付与ボタンをつけるためにコンテンツを解析して、「記事のタイトルっぽい所」を検出、その後ろに付与ボタンをつけるという処理をしているらしい。
テンプレートをあちこち改造する必要もなく、とても楽に設置できた。
 


 

はてなスター、 重かったりイタズラされやすい という話もあるが、うちはそんなに人こないので全く問題ないだろう。
とりあえず見栄え優先。

2008年11月27日木曜日

GNU screen で仮想端末。処理をほったらかしにして切断、さあ帰ろう

先日、全力でCPU負荷をかけているサーバにリモートシェルからMySQLのレコードを数十万行流し込むという用事があった。
作業してた人は、sshクライアント落とせないので 「PC落とせない=帰れん」 となり、少々悩んで結局PCをつけっぱなしで帰った。
 

これが自分の身に降りかかったら とても嫌 だと思い、そうなった場合の対策を探したところ、GNU screen という結構由緒正しい仮想端末ソフトがヒット。
 
これは使える、、、知らなかったのは不覚だ。ちょっとさわりを書いてみる。
(追記)突然の回線切断でも大丈夫、繋ぎなおしたら作業中の環境復活OK、と追記しとく。
 
 

screen のデタッチ、アタッチについて簡単に説明


勝手に終わらないコマンドとして適当なもの、たとえばTOPを実行しているとした場合。
 

×Screenがないとき
TOPコマンドはsshクライアントからつないだ仮想端末(例:xterm)を制御端末として動く。
sshクライアントを終了するとTOPコマンドの制御端末がなくなるのでTOPコマンド終了ー。
 

○Screenがあるとき
sshクライアントからつないだ仮想端末(例:xterm)でscreenコマンドを使用すると、新たな仮想端末(screen)ができる。
screenからTOPコマンドを実行すると、当然制御端末は screen になる、そして screen は起動時の制御端末 - xterm が終了しても独立して動く機能がある。
ということで、sshクライアントを終了しても screen は配下のTOPコマンドを生存させたまま残ることが可能。
(追記) これは別の表現で言うと突然xtermの接続が切れても大丈夫、ということ。
 
 

表現とかちと怪しい部分もあるが大体こんな感じ、
詳しいことは下記サイトとかがいいのかな?

screenのススメ
http://www.dekaino.net/screen/


screenの理解ならここはとても参考になります。ただ、エスケープキャラクタは「Ctrl+a」のままでもいいと思う。
 
 

一通り実際やってみる


yum でも cvsよいのでscreenをインストールしよう。cvs のほうが縦分割ができてお得か。
 

[caption id="attachment_1074" align="alignnone" width="500" caption="画像:puttyでsshログイン"]画像:puttyでsshログイン[/caption]
早速screenコマンドを叩いてみる、クライアントは putty を使った。
 

[caption id="attachment_1075" align="alignnone" width="500" caption="画像:screen起動直後"]画像:screen起動直後[/caption]
タイトルバーのところに「screen 0」 というのが出てきた。今は仮想端末screenの0番を使っているよという意味だ。準備OK。
 
 

コマンドを実行したままで screen をデタッチ


screen上で適当にコマンドを実行して、そのままscreenを切断します。
ちなみにscreen制御用のコマンドはまずエスケープ(デフォルトではCtrl+a(^a と書いたり))してからコマンド入力します。とりあえずデタッチは「Ctrl+a → D(大文字)」
 

[caption id="attachment_1076" align="alignnone" width="500" caption="画像:screenで画面分割、コマンド実行"]画像:screenで画面分割、コマンド実行[/caption]
とりあえずscreenの画面分割機能を使って、ping, vmstat, top と実行してみた。
0番のping シーケンス番号が目安になるかな、
 
そしておもむろに デタッチ「Ctrl+a → D(大文字)」
 

[caption id="attachment_1077" align="alignnone" width="500" caption="画像:「^a + D」でscreenをデタッチ"]画像:「^a + D」でscreenをデタッチ[/caption]
screen実行前の仮想端末に帰ってきた、一回ログアウトする。
 
 


デタッチしたscrennに後日アタッチして、続きをやる


とりあえず「screen -ls」で今動いているscreenのリストがとれる。目的のものに「screen -r {プロセスID(1つしかなければ省略可)}」 でアタッチすればいい。
 

[caption id="attachment_1078" align="alignnone" width="500" caption="画像:接続しなおして、screenのリスト"]画像:接続しなおして、screenのリスト[/caption]
リストがとれたのでアタッチする。
 

[caption id="attachment_1079" align="alignnone" width="500" caption="画像:アタッチした"]画像:アタッチした[/caption]
screen 0番につながったのがわかる、ping健在。
他のコマンドはどうだろうか。
 

[caption id="attachment_1080" align="alignnone" width="500" caption="画像:screen上の分割リスト"]画像:screen上の分割リスト[/caption]
screen内の画面リストを出してみる、名前は任意に変えることができるのでここではわかりやすい名前を付けている。
それぞれに切り替えてみるとコマンド実行が継続されていることがわかる。
 


[caption id="attachment_1081" align="alignnone" width="500" caption="画像:デタッチ前の状況が保たれている"]画像:デタッチ前の状況が保たれている[/caption]
切断前の状況再現(継続中)もOK。ヒストリなどもちゃんと継続している。
いやあこれは便利だ。
 
 

次は分割?


screen は正直機能が多くてまったく紹介しきれないが、まずはこのデタッチ・アタッチを知っておくと便利なので各サーバに導入しておきたい。
 

余談として、プロンプトに($TERM) を表示するようにすると区別がついていいかも。
「PS1='[\u($TERM)@\h \W]\$ '」 というようにしておくと、
[sawano(xterm)@myserver ~]$
[sawano(screen)@myserver ~]$
こんな感じになってscreen使用中かどうかわかる。
 

今度は分割も記事にしたい、打鍵で混乱するからそのへん消化したいんだよね。

「一般的なペーストビン」とかのペーストビン(pastebin)

今まで特に気にしていなかったが ペーストビン を調べてみた。検索でしばしば見るやつ。
 

突然調べた理由は、これまでずっと ベースピストン(ピストンベース) だと思っていた のが間違いだったと気づいたから。
「(・ー・)..。oO( 油圧的ななんたらで使う部品かなー…)」という認識、気づいてみればそんなわけ無いがずっとスルーしていた。第一印象は大事だ。
 
 

調べたら丁寧に解説してくれているサイトがあった。
>> ペーストビン(pastebin)について - Life, don’t talk to me about life.
 

よく分かった、引用した情報などを複数人で共有する為のWEBサービスなのね。
確かにリンク先にもあるような、オープンソース開発的な利用法には良さそう。
 
 

ペーストビン は エンジン関連の部品的なものではなかったんだ!

2008年11月21日金曜日

NTBackupで強引にP2Vマイグレーション@WindowsServer2003[自己責任注意]

物理サーバで動いている WindowsServer2003 でシステムの NTBackupを取りました、でそれを、VirtualServer で動いている WindowsServer2003 上でシステム状態ごとフルリストアしました。
 

さて、これ動かないですよね。でも NTBackup を取るときに物理サーバの設定を工夫すれば動くことがあります。
 
 

注意:この記事どおりにやったからと言って確実にうまくいくとは限りません、自己責任でお願いします

ちょっと参考リンクを。

Windows XP または Windows Server 2003 セットアップ後の HAL オプション
http://support.microsoft.com/kb/309283/ja


 

キモはこのHAL、物理→仮想のマイグレーションってこの辺いじってるらしいのでこれが通れば何とかなる。
 
あまり検証してないので仮説ですが、仮想PCのマザーボードは互換性のためアーキテクチャがとっても古い(VS2005なら440BXくらい)ものをエミュレートしてるらしいんですよね、ってことで新しめハードのHALをそのまま仮想に突っ込んだら動作しない、って事だと思う。
 
 

なので、NTBackup を取得する前に、物理サーバ上で デバイス マネージャのHAL オプションを仮想化後を想定したものに変更する必要がある。リストア先の仮想PCでHALオプションを見てみよう、多分違うはず。
 

ここで物理サーバのHALを仮想にあわせると絶対ダメ、物理側がおじゃんになる。
手順があるのでそれを踏もう。要は互換性重視で一番しょぼいHALを使おうと言うこと。

  1. まず物理サーバでHALオプションを「"標準 PC"、非 ACPI PIC HAL (Hal.dll) 」にする

  2. NTBackupで移行する

  3. ちゃんとOSが立ち上がってくるのでHALオプションを仮想PCでの元々の設定に戻す


 

晴れてPtoV、仮想化完了という運びになります。これはすごく楽、VHDの容量とか元のサーバを気にしないで良いし。
 
 

この強引な手段はマイグレーションとは言わないかもしれない。
最後にも言うけど、やってみるなら自己責任で、業務用のはやめておこうね。

2008年11月20日木曜日

VBScriptからSQLSERVERに接続する(ADO)

WindowsServer の運用管理で、ちょっと SQLServer から情報もってきたい時に VBScript(やWSH) でDBに接続できたら都合がいい。
 
 

ADO(ActiveX Data Object) とかいうやつを使ってちょっとクエリを流そうという時のメモ。
 
 

サンプル:SQLServer上に設定されている、サーバのホスト名を取ってくる


大体が [Master] の [sysservers] に1行あるレコードがローカルサーバ情報。サンプルでは一応複数あった場合の処理をさせてる。
 

下記を拡張子VBSで保存して実行する。
[sourcecode language='vb']
Private cn ,rs

Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")

'// ADODBでSQLOLEDBに接続、この場合ユーザはログイン中のものを使う
cn.Open "Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=msdb;Integrated Security=SSPI;"
'// SQLのクエリを書いてレコードセットを取得する
rs.Open "SELECT [SrvName] FROM [Master].[dbo].[sysservers] WHERE [srvid] = '1'", cn


'// レコードセットを1行づつ処理する
Do While Not rs.EOF
Wscript.echo rs("SrvName")
rs.MoveNext
Loop
'// レコードが一行ならこれでもOK
'// Wscript.echo rs("SrvName")

rs.Close
cn.Close

Set cn = Nothing : Set rs = Nothing

Wscript.Quit
[/sourcecode]
 

sysdatabaseからデータベースの一覧とかを持ってくるのも簡単。
SELECT以外の文は結果がどうなるのかは試してないけど、多分単純に結果コードが帰って来るんだと思う。
 

まぁ更新系を使う場合はVBScriptとかじゃないよね、と思う。

2008年11月19日水曜日

任意のフォルダでWindowsエクスプローラ(explorer.exe のオプションの話)

Windowsのエクスプローラはいいファイラだと思う。少なくともデフォルトのファイラとして十分な使い勝手じゃないだろうか。
 

それはさておき、そのエクスプローラ(explorer.exe)を狙ったフォルダで開けると助かる。役に立つ局面としてはたまに面倒を見るサーバでの作業や、お客さんのサーバで作業用フォルダを作っている場合など。
普通のショートカットと違って、ぱっと2ペインでフォルダツリーが展開されるのは小気味がよい。
 
 

やってみる。単純に引数を渡すだけではダメ、/e と カンマで


まず純正のエクスプローラへのショートカットをデスクトップにコピーしてこよう。見当たらなければ「アクセサリ」 に入ってると思う。
[caption id="attachment_1059" align="alignnone" width="273" caption="画像:エクスプローラのプロパティ(デフォルト)"]画像:エクスプローラのプロパティ(デフォルト)[/caption]
 

ではリンク先の所を書き換える%SystemRoot%\explorer.exe↓↓↓↓↓"D:\WORK"で開きたい場合はこうする。スラッシュe でカンマで区切ってパス
%SystemRoot%\explorer.exe /e,"D:\Work"
 
これで指定したパスが展開された状態でエクスプローラが起動する。
 
 

ツリーのルートも変更する


exeplorer.exe のコマンドラインオプションとして他に、/rootオプションを使うと、ツリーのルートが変更できる。
%SystemRoot%\explorer.exe /e,/root,"D:\Work"
変なところいじらなくてすむので、用途によっては /root オプションは使えるだろう。
 

要はこんな感じになる、左がスッキリ。
[caption id="attachment_1060" align="alignnone" width="500" caption="画像:ツリーのルートを選択したエクスプローラ"]画像:ツリーのルートを選択したエクスプローラ[/caption]
 
 

作業用フォルダを作るなら、ショートカットはエクスプローラで開くように作っておこう。
 
 
 

その他、explorer.exe のコマンドラインオプションについてはマイクロソフトのKBで。

Windows XP の Explorer.exe コマンドライン オプション
http://support.microsoft.com/kb/314853/ja

2008年11月16日日曜日

Google Docs のプレゼンテーション機能

Google Docs にプレゼンテーションあるなんて知らなかった。
ドキュメント、スプレッドシート(MSOfficeのWord・Excelに相当)しかないと思っていたが、Googleプレゼンテーションを使った方の記事を見てちょっと試してみた。
第3回PHP懇親会に行ってきた:nekoya氏
 
 

では使ってみた感想と、サンプルの公開をしますよー。
 
 

十分な基本入力機能、テキスト&画像と図形の挿入


使ってみたがここらの機能はとっても PowerPoint、これならだいたい直感的に使える。
 
テキストはフォントや色はもちろん、箇条書きやインデントの自動化に対応しており十分な表現ができる。
画像、図形は挿入&サイズ変更ができる、画像は HTTP URL での指定も可だ。図形の中に文字を書くのに 「図形+テキストボックス」 と組み合わせる必要がある事が気になったくらい。
 
画像いじり(透明色指定とか)ができないが、それはローカルでやろう。
 
 

表示関連の機能はシンプル


表示関連の機能は画像、テキストの遅延表示(クリックで表示、表示順の設定が可能)に対応、ほかは特に無いっぽい。
アニメーション多様するプレゼンはうっとおしい事が多いのでこれでいいと思うが、少々さびしい。
 
 


テンプレ、マスタはちと弱いか(日本語版の問題か?)


欲張るなという気もするが、レイアウトのマスタをデザインする機能が背景設定くらいしかない。
※英語版はテンプレの編集ができる模様、これで心配ないかも。
 
 

インポート、エクスポートがスゴい


*.ppt (Powerpoint2003以前のファイル形式)のインポートができるみたい。今度仕事に無関係なPPT作って試してみよう。手元のはWEBに上げるにはシャレにならんのばっかり。
 

エクスポート(ダウンロードして保存)対応形式は、pdf, ppt, txt となっていた。結構すごいのではないか。
pptは実際にGoogleプレゼンテーションで作ったオブジェクトごとに編集ができるようになってて、スライドマスタもきちんと使える。これはインポートも期待できるだろう。
 
 

サンプルを作ってみた


と、機能を試しながらサンプルのプレゼンテーションをひとつ作ってみた、ワンタッチでWEB公開が可能なのはとても便利ですね。
公開用の直接リンクと、WEB埋め込みの形式がえらべます。下記リンクから参照してみてください。
 
 
プレゼンの内容については作業中に子が来たので一緒に作った為、 超お子様向け になってます、ご了承ください。(※予定ではGoogleプレゼンテーションの使い方を紹介だったんだが。。)
 

まずはWEB共有公開版
http://docs.google.com/Present?docid=ddz7r3m9_1d47nd3gf&skipauth=true
 

こちらはWEB埋め込み版、遅延表示など一部対応していない機能があるようですね。

 
 

あったらいいな


コネクタ、図形へのテキスト埋め込み、マスタ編集、スプレッドシート埋め込み
とできれば(自分の用途の範囲では)もう何も要らないな。一応全部画像貼り付けで対応可能だけど。
 
 
 

全体を通して、とってもアリだね「Googleプレゼンテーション」と思った。

2008年11月14日金曜日

EXCELのマクロ(VBA)を触ってみた、ランダム陣取りシミュレータ?

ちょっと待ち行列を計算する用事があったので、今まで操作録以外全然触らなかったExcelのマクロの書き方を勉強してみた。
 
 

しかし、なぜか予定と違って観察系の陣取りシミュレータができた。。
    仕様はこんな感じ
  • セルに1-100までの数字を並べる

  • ランダムに1つチョイス、これまたランダムな場所に上書きコピーする

  • 繰り返す。そのうち1つの数字が天下を統一する。


 

待ち行列の計算しようとおもったんですよ、本当ですよ?
 

ということで、数字のセットとランダムコピーのマクロ(VBA)を載せておこう。
 
 


準備用マクロ(VBA):1-100までの数字をセット、ついでにカウンタを0にリセットする


1行に5列ずつで、20行目まで数字を置いていく。

[sourcecode language='vb']Sub reset()
s = 1
For j = 1 To 20
For i = 1 To 5
' セルに数字を書き込む
Cells(j, i) = s
s = s + 1
Next i
Next j

' カウンタリセット、F5がカウンタ
Range("F5") = 0
End Sub[/sourcecode]
 

これで準備はOK、リトライも簡単。
 
 

シミュレータ実行用マクロ(VBA):ランダムに数字を選んで1回コピーの繰り返し


ところどころ乱暴だけど、ランダムコピーの処理。
rnd()の周りはなんかきれいなやり方があるんだろうなぁ。

[sourcecode language='vb']Sub Shuffle()
Randomize
s = Range("F5")

For i = 1 To 500
rndset:
m = Round((Rnd * 40 / 2 + 1), 0)
j = Round((Rnd * 10 / 2 + 1), 0)
k = Round((Rnd * 10 / 2 + 1), 0)
l = Round((Rnd * 40 / 2 + 1), 0)
' 6とか21とか、はみ出し系の結果が出るのでやり直しさせる
If j = 6 Or k = 6 Or m = 21 Or l = 21 Then
GoTo rndset
Else
' 参考用に座標を出力しておく
Range("F1") = j
Range("F2") = k
Range("F3") = m
Range("F4") = l
' これはカウンタ
Range("F5") = s + i
' ランダムに選んだマスの数字を任意の場所に上書きコピーする
Cells(m, j).Copy Destination:=Cells(l, k)
End If
Next i

End Sub[/sourcecode]
 
 


実行してみる、グラフつけると面白い


視覚的なことを考慮してグラフとか色々つけている、リアルタイムで勢力図が見れて面白い。
これもマクロでセットアップしたら良いんだろうけどそれはまた今度かな。
 

統一させるまで見届ける場合は While でまわせばOK、大体 4000-8000 位の施行で終わるがたまに1万超えるし。
 

スタート時点の図、すべての勢力は1つで均等
[caption id="attachment_1051" align="alignnone" width="300" caption="画像:陣取り合戦スタート"]画像:陣取り合戦スタート[/caption]
 
 

ランダムコピー500回実行したところ。93が最大勢力(26ヶ)
[caption id="attachment_1052" align="alignnone" width="300" caption="画像:500ターン"]画像:500ターン[/caption]
左下のところはグラフ用、COUNTIF文 と IF文 で0個になったら勝手に消えるようにしてグラフを見やすいようにしている。
 
 

統一までほったらかしてみる、2300くらい。
とても三国時代だ、NINTENDO64(仮名) vs PC-98(仮名) vs .. JR-100(仮名)? といった所か。
[caption id="attachment_1053" align="alignnone" width="300" caption="画像:2300ターンくらい、三国時代"]画像:2300ターンくらい、三国時代[/caption]
 
 

完全に天下統一 ※Whileに変更したので500回のサンプルとは違う回
[caption id="attachment_1054" align="alignnone" width="300" caption="画像:天下統一!"]画像:天下統一![/caption]
 

見事9102ターン目で PC-98(仮名) が天下統一を果たした、Cバス万歳と言うことなんだろうか。
 
 
 

えーかげん と言うか 今更というか、Excelマクロ も活用したほうがいいなと思った。

2008年11月13日木曜日

ニンテンドーDS(無印)のWi-Fi接続をバッファローの Wi-Fi Gamers(WCA-G)で (がんばって)セキュアにやる

ニンテンドーDS(無印)では無線の通信暗号化方式が WEP しか使えない。
自宅に無線LANこそ導入はしているが、そこは当然 WPA(AES)を使ってる、WEPも選択できるが…ITPro:利用率7割のWEPは「1分」で破られる こんな現状なのではっきり言って使いたくない、使えない。
 
 

しかし実際に ニンテンドーDS を使う子はそんな事情なんて知ったこっちゃない、Wi-Fi やりたいと頼まれちゃあなんとかする方法を模索するしかない。なんでWiiはブリッジにならないんだよ!(言いがかり)
 

ちなみに新しい ニンテンドーDSi はWPA にきっちり対応している、それ買えって?
だって 古いDS壊れてないし DSi高いし WEBブラウザなんて余計な機能がついてる(注:もちろん制限できるんだけど…いまいち不安)しで却下、そんなにコスト掛けたくない。
 
 

で、既存の環境に影響がでないように安手のAPを追加として、これ使うことにした。

 
 

「BUFFALO Wi-Fi Gamers 無線LANアクセスポイント WCA-G」に電源スイッチを組み合わせた。


結論から言うと「電源OFFにしてWEPの脆弱性から身を守る」という運用を課すことで親子間のSLA合意した。
↓構成はこうだ。
[caption id="attachment_1045" align="alignnone" width="300" caption="写真:WCA-Gと電源スイッチ"]写真:WCA-Gと電源スイッチ[/caption]
 

子には「DSでWi-FiしたくなったらスイッチON、終わったら切ってくれ」とした。ACアダプタにくっついている電源スイッチだ、LED付き でお子様にも分かりやすくしている。
うちの環境では常時起動のマシンはない為、これで十分。 「Wi-Fi Gamers(WCA-G)」 の起動には15-20秒ほどかかるが特に気にするほどではない、ポケモンのWi-Fiセンターに突撃している間に準備は完了している。
 
 


予想以上にコンパクトサイズだった





[caption id="attachment_1046" align="alignnone" width="225" caption="写真:AirStatonとWCA-Gのサイズ比較"]写真:AirStatonとWCA-Gのサイズ比較[/caption][caption id="attachment_1047" align="alignnone" width="225" caption="写真:WCA-G持ってみた"]写真:WCA-G持ってみた[/caption]

 

すごい小さい。
 
 

初期設置は楽なもんだった、液晶小窓もよい感じだ


ニンテンドーDS は AOSS に対応している、で、 この 「Wi-Fi Gamers(WCA-G)」 もAOSSで設定するようになっている。
説明書の設定方法には「AOSSでつなぐのでこのボタン(上についてるデカいボタン)押せ」程度のことしか書いてない。
まあそれで済むからいいや。
 
液晶小窓、ステータスが表示できる。 「起動中」 → 「起動完了」 ってちゃんとわかるので今回の運用方法にかなりマッチ。
画面下のカーソルキーで少し操作できる、環境確認やチャンネル変更が可。ファームのアップデートなんかもできるようだが、発売以来新しいのは一つもないようなので確認できず。
 
 


説明書にはなぜか載ってないWEB設定画面に注意、使いではあるが…


さてこの「Wi-Fi Gamers(WCA-G)」 説明書に載ってないWEB設定管理画面がある。
 
これがとってもいただけないことに、
「root / 空パスワード」 で設定画面に入れる。
んですね、初期設定では。
 
[caption id="attachment_1048" align="alignnone" width="500" caption="画像:WEB設定画面トップ"]画像:WEB設定画面トップ[/caption]
小窓でIPアドレス確認できる仕様にしといて、これはないだろ。
 

もし「Wi-Fi Gamers(WCA-G)」 を使う場合は、
WEB管理画面のパスワードを必ず設定してください
[管理設定] → [パスワード] で変更できます。
 

AOSS なので「無線ANY許可」、DS なので「WEP」 となかなか強力なカードがそろっている中、Root空パスはアカンやろうに。
 
 

パスワードさえ設定してしまえば、WEB設定画面はそれなりに使いでがある。クライアントモニタや許可済み機器の状況も把握できる。
[caption id="attachment_1049" align="alignnone" width="500" caption="画像:WEB管理画面の一部"]画像:WEB管理画面の一部[/caption]
 

まあ自宅ではこの構成に落ち着いたが、普通にWPA(AES)なども対応しているので安手の追加APとしても十分に使える。手軽に無線AP追加したかったらいい商品なのかもしれない、小さいし。
 

くれぐれもWEBのパスワードは忘れないように、液晶でIPわかっちゃうからね。
 
 

2008年11月10日月曜日

MySQLでバイナリログから更新系のクエリをトレースする

メモエントリ。
 
MySQLのバイナリログをSQLのトレース目的で使ったのでメモ。
 

MySQLのバイナリログ取得設定


MySQLのバイナリログをとっておけば色々出来る、その辺は公式やら書籍が詳しいので割愛。
 

取りあえず設定。
my.cnfを編集、[mysqld] のセクションに取りあえず3行入れよう、ディレクトリはmysqlユーザが読み書きできるところならどこでもいい、この例では yum でのデフォルトのdataディレクトリだ。
[mysqld]
・・・
log-bin=/var/lib/mysql/binary
expire_logs_days = 14
max_binlog_size=200M


"log-bin"だけでも良いけど、放っておくとどこまでもログが残る、1ファイル200MB制限・14日間保存と
ファイル容量を制限するのは、ログ抽出の際に不便だから。
 
 
これで MySQL を再起動すれば、"/var/lib/mysql/binary.index","/var/lib/mysql/binary.000001" ファイルが作成されている。
(※起動に失敗したらmy.cnfで指定しているエラーログを見ると大体分かる。)
 
バイナリログはこっち、 "/var/lib/mysql/binary.000001" ローテーションするごとに数字が増える。
 
 

バイナリログから更新系ログを抽出


バイナリログの設定が終わったので本題。
 

バイナリログには、データベースの基本機能、 CRUD のうちReadを除くCUDが記録されている。
これを mysqlbinlog コマンドでテキストデータ(=実行時のSQLクエリ)に戻せるのでやってみよう。
 

テスト用DBの作成と削除


とりあえずDBを作って消した。
#mysqladmin create test001 -p
#mysqladmin drop test001 -p

mysqladmin とかいう妙なコマンドを使ったが、実際どういうSQL文が実行されたのかこれではよく分からない。
が、実行結果がバイナリログに記録されているので安心。
 

変換したバイナリログを眺める


mysqlbinlog コマンドにバイナリログファイルを渡してみる、
# mysqlbinlog binary.000001

 

上記実行後、出力の一部が下記。
#081110 12:33:26 server id 1 end_log_pos 104655065 Query thread_id=1071 exec_time=0 error_code=0
SET TIMESTAMP=1226288006/*!*/;
SET @@session.foreign_key_checks=1, @@session.unique_checks=1/*!*/;
SET @@session.sql_mode=0/*!*/;
create database `test001`/*!*/;
# at 104655065
#081110 12:39:45 server id 1 end_log_pos 104655154 Query thread_id=1076 exec_time=0 error_code=0
SET TIMESTAMP=1226288385/*!*/;
drop database `test001`/*!*/;

 

ばっちり記録されている。
本来はフルバックアップからの差分とかでの利用が想定されているみたいだけど、WEBアプリ制作時のデバッグとか、わけのわからんアプリが何かしているので調査とか、そういう局面でも役に立つ。

2008年11月8日土曜日

タスクスケジューラのログファイルの場所@WindowsServer

WindowsServer のタスクスケジューラは色々細かい設定ができて便利、よく活用してる。
これの豆知識っぽいネタ。
 

コントロールパネルのタスクを開いた状態で、[詳細設定]→[ログの表示]とやるとタスクの実行ログ、「SchedLgU.Txt」というファイルが開く。Windowsでは少々珍しく、32KBでサイズ固定の循環ログファイルだ。
 

しかし「SchedLgU.Txt」を検索しても出てこない、どこにあるのか気になってヘルプを見たら書いてあった。
 
このファイルは SchedLgU.txt という名前で \Windows\Tasks フォルダにあります。最近実行されたタスクを表示するには、SchedLgU.txt ファイルで、「***** 一番最近のエントリはこの行より上にあります *****」を検索します。このテキストのすぐ上にあるエントリが最近実行されたタスクです。

さよか、要は下記にあるということでいいんだ。
%SYSTEMROOT%TASKS\SchedLgU.txt
↓(大体の環境ではこうだろう)
C:\WINDOWS\TASKS\SchedLgU.txt

Tasks フォルダは特殊だからエクスプローラーからでは見えないだけだったのか。
DOS窓からDIRコマンドでファイル一覧を出すと、ちゃんと「SchedLgU.txt」がいる。
 

エディタでパスを指定して直接開くことも可能、これなら走査してイベントゲット監視も出来ないことは無いな。

2008年11月7日金曜日

Google Chromeのシークレットモード

何かと話題の Google Chrome にはシークレットモード がついている。
 

[caption id="attachment_1035" align="alignnone" width="397" caption="画像:シークレットモード"]画像:シークレットモード[/caption]
 

履歴の残らない、誰にもナイショのWEBアクセスができるぞ、と言うことなんだが。(出し方は→こちら)
 
 
 

なんというか… コイツに見られている感が常にするのが実にイヤ。[caption id="attachment_1036" align="alignnone" width="240" caption="画像:シークレットアイコン"]画像:シークレットアイコン[/caption]
 
こっち見ないでおくれよ。

IISのアプリケーションプールを開始するVBScript(WMI)

IISのアプリケーションプールが勝手に止まったりする事あります?
滅多に無いけどたまにある。そうか、わかるよ多分わかる。
 

止まっているアプリケーションプールを検出して自動で開始してくれるスクリプトを書いたのでエントリ。スケジュールタスクに登録して適度な間隔で実行すれば、簡易IIS監視体制の完成。
拡張子"vbs"で保存して実行してください、コマンドラインから実行もできるのでわりと便利。
[sourcecode language='vb']
strComputer = "."

set locatorObj = CreateObject("WbemScripting.SWbemLocator")
set providerObj = locatorObj.ConnectServer(strComputer, "root/MicrosoftIISv2")

Set colItems = providerObj.ExecQuery _
("Select * From IIsApplicationPoolSetting")

For Each objItem in colItems
if objItem.AppPoolState="4" Then
set nodeObj = providerObj.Get("IIsApplicationPool='" & objItem.name & "'")
nodeObj.start
end if
Next
[/sourcecode]

 

止まった原因はちゃんと調べたほうがいいけど、取りあえず動いておいて欲しいのも人情。
応用として、WQLにWhere句を使えば狙ったアプリケーションプールのみを監視できる。
(※Where name = 'hogehoge' とか name like ''%hoge% とか)
 

解説は参考情報を見てもらえると詳しく書いてあります、というかほぼMSDNからコピペ組み立てですけど。

2008年11月6日木曜日

iptablesでお手軽なssh総当りログイン試行攻撃対策

有用だと思ったのでメモ、元ネタチェインつきで。
 

元ネタ
sshへの辞書攻撃をiptablesで防ぐ (曖昧スラッシュ)

の元ネタ
sshへの総当り攻撃をiptablesの2行で防ぐ方法 (blog@browncat.org)

の元ネタ
Block brute force attacks with iptables (Kevin van Zonneveld)
 
 

sshに対する攻撃といえば、ブルートフォースや辞書によるログインの試行が代表的、secureログが汚れるわ最悪ログインされるわと大迷惑(事故?)だ。
そもそも不要な接続は許可しないべきなんだけど、接続元のIPアドレスを限定するという事がしづらい場合もある。
 
 

2行の iptables コマンドでSSH攻撃対策をしよう



※テストに使ったOS,バージョン → CentOS5.2+iptables v1.3.5
recentモジュールが必要なので"/proc/net/ip_tables_matches"ファイルに
recentという行があることを確認

iptablesの簡単設定で、一定時間内に複数回ssh接続してきたIPを自動で拒否するようにできる、という情報を見つけたので記事にする。
以前誰かがfail2ban を設定していたのは見たことある。やれることは大体同じのはずだけど、細かい設定とかを管理したいならそちらがいいかもしれない。
 
 

引用すると下記2行でOK(※ eth0 の部分は環境による)。はみ出した分はどっかにコピペで…
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 8 --rttl --name SSH -j DROP

これで 60秒間に8回のssh接続を仕掛けてきたIPアドレスからの新規TCPセッションを拒否するようになる。
 

ぱっと見では2行目だけで良さそうな気もするが、recentモジュールの使い方がそうなっているのかな。
これでセーブしておけばOSの起動時にもルール有効になり、対策OK。
ほか、初代の元ネタBlock brute force attacks with iptables (Kevin van Zonneveld) に色々注意事項が書いてある、試すなら cron で iptables をリセットしとけとかは面白い記述。
 
 


攻撃されたことをログに残そう


コレだけだとほんとに転載しただけなので芸が無い、とりあえずログに残るようにしておこう。
また、一つ目の元ネタsshへの辞書攻撃をiptablesで防ぐ (曖昧スラッシュ) によると、デフォルトのINPUTチェインを使うだけでは他の通信に遅延が出る恐れが。確かにそうなるかもしれない。
 
幸い、色々考慮済みの iptables のテーブルが前述の元ネタに紹介されている。折角なので パクリ 再現してみよう。
 

実行するiptables のコマンドは下記、セーブなど考慮して無いので注意。
# ssh接続を取りあえずユーザチェインに渡す
iptables -A INPUT -m state --state NEW -p tcp --dport 22 -j SSH_ACCEPT
 
# SSH_ACCEPTチェインの設定、条件マッチでSSH_BFAチェインに渡す
iptables -A SSH_ACCEPT -m recent --set --name SSH_ACCEPT
iptables -A SSH_ACCEPT -m recent --rcheck --seconds 60 --hitcount 5 --rttl --name SSH_ACCEPT -j SSH_BFA
 
# SSH_BFAチェインの設定、ログに書き出してドロップ
iptables -A SSH_BFA -j LOG --log-tcp-options --log-level 4 --log-prefix 'iptables: ssh_bfa:'
iptables -A SSH_BFA -j DROP

 

で、出来たテーブルがコレ。
OK、元ネタ にほぼそっくりだ。これで遅延無し、攻撃者のIPがログに残るiptablesのルールが完成。
# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
SSH_ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
 
Chain SSH_ACCEPT (1 references)
target prot opt source destination
all -- anywhere anywhere recent: SET name: SSH_ACCEPT side: source
SSH_BFA all -- anywhere anywhere recent: CHECK seconds: 60 hit_count: 5 TTL-Match name: SSH_ACCEPT side: source
 
Chain SSH_BFA (1 references)
target prot opt source destination
LOG all -- anywhere anywhere LOG level warning tcp-options prefix `iptables: ssh_bfa:'
DROP all -- anywhere anywhere

閾値は60秒当たり5回になった。ほか recent が update から rcheck になったが違いがよく分からないな。
 

気になるところとしては、LOGのルールがちょっと違う。
「LOG flags」って箇所がよく分からなかった。TCPフラグで判断する仕様なのかと思ったが、手元の iptables の man ではそれっぽいオプションが見当たらなかったので、代わりに tcp-options を入れた。
ログが詳細になったが、意図するところは多分違うかもしれない。

続・アクセスログの保存期間は3ヶ月を目安にすればいいんじゃないか

ちょっと前のエントリ、「アクセスログの保存期間は3ヶ月を目安にすればいいんじゃないか」の続き。
 


つい先日まで知らなかったんですが、PCI DSS(PCIデータセキュリティ基準)というのがあります。
米国でやっているクレジットカード業界の認定らしい。認定って言うとセキュリティ関連のISMS(ISO27001) や プライバシーマーク 等が思い浮かぶけど、考え方は似たようなものです。
 
ただそれらに比べると、とても技術重視なことが特徴といえるんじゃないでしょうか。←※さわりをちょっとかじった感想なので参考までに。
 

ITProから一部引用
CI DSS(Payment Card Industry Data Security Standard)は,情報セキュリティの向上を目的としたクレジットカード産業の業界基準である。
 
PCI DSSは,クレジットカードのカード情報および取引情報を保護するために,次に示す六つの目的と,それに関する12のデータ・セキュリティ要件を定めている。

 

ほか、PCI DSSの詳しい内容はITProがきっちりまとめてくれています、運用管理者は是非一読を。

ITPro:セキュリティ基準「PCI DSS」
http://itpro.nikkeibp.co.jp/article/COLUMN/20080407/298166/


 
 

PCI DSSでは要件がすごく具体的


なぜこのPCIDSSを記事に引っ張ってきたかというと、示されている用件がとても具体的で有用な定義だと思ったから。
 

どのように具体的か紹介しておきます、分かりやすいので他社さん(日本オフィス・システム株式会社)の記事から引用させてもらいます。「PCIDSS-ISMSとどこが違うのか」が参考になりました。

  • リモートアクセスのユーザー認証では二要素認証を導入する

  • パスワードの伝送・保管はすべて暗号化する

  • 休眠ユーザーは90日ごとに取り除く

  • パスワードは90日ごとに変更する

  • 直近4回は同一パスワードの使用は不可

  • 連続したアクセス試行は6回以内に制限

  • ロックアウトは30分

  • セッションアイドル時間は15分以上でパスワード入力にする

あふれんばかりの具体性ですね、さすがにお金がらみはシビアです。
 
が、お手本にするにはもってこいですね。
PCIDSSにあげられている要素を並べ、取捨選択。それに適当に期間を設定するだけでとてもセキュリティ管理の行き届いたシステムになることでしょう。
 
 

アクセス・ログを3カ月間保管しなければならない(タイトル引用→引用元)


ようやく本題?
前回提唱した「アクセスログは3ヶ月保存で定義しとけばいいじゃない」に関連したPCIDSSの要件は↓な感じ。

10.7 監査証跡履歴は,少なくとも1年は保管,最低3カ月間はオンラインで閲覧利用できるようにする。

 

ここでも目安として3ヶ月という期間が出てくる。
実は ITProの見出し「3ヶ月間保管」につられ、得たりとばかりに記事を書き始めてしまったが、クレジットカード的には1年保管しろという事のようだ。これでは趣旨が変わる?
 

しかし、いつもお金(取引・決済)関係のように気を使うシステムを作っているわけで無いためここは大きく解釈してみる。
「サーバ本体=1次ストレージ」、「ログ保管場所=2次ストレージ」 とした場合、1次に3ヶ月、2次を含めて1年というという事で妥当な感じがする。
PCIDSSの要件的には最初の3ヶ月時点で「集計済み・閲覧しやすい状態」が求められている気がするが、まあそれは置いとこう。awstats でも logparser でも何でもあるから。
 

2次ストレージを利用するかはシステムの要件次第という事で、基本は「1次ストレージに3ヶ月保管」というポリシーで運用すればよい、とすればやっぱり「ログの保管は3ヶ月でOK」 という結論を仕立てあげることが出来る。
 
 

1年保管はどうしてもログがかさばってしまうので出来ればやりたくない。
OSの初期設定とかもこういうニーズにあわせてあると後で困らなかったりするのになぁ。

2008年11月5日水曜日

plink.exe pscp.exe で Windowsコマンドラインからssh、scp

Windowsコマンドプロンプトから急にLinuxサーバにファイルの転送がしたくなった。
同様に、突然ssh経由でログインしたくなった。
 

そんな機会もあろうかと、有名なsshクライアントのputtyにはおまけが付いている。
plink.exe , pscp.exe がそれだ。単純にコマンドラインから ssh/scp がやりたければ十分なツールだ。
 

たまに使うので記事にしておく、適当なところに設置してパスを通しておくと便利かも。
 
 

sshクライアント plink.exe (PuTTY Link)


大まかな使い方は ssh コマンドと一緒。ヘルプを載せておく。
機能はイマイチ、Screen などのユーティリティもh上に変な動きになるが、動作確認程度として考えたら十分だ。コマンド叩いてくるだけのような使い方でもよい。
※機能十分なクライアントが使いたければ putty.exe を叩けばいい。
 
PuTTY Link: command-line connection utility
Release 0.60
Usage: plink [options] [user@]host [command]
("host" can also be a PuTTY saved session name)
Options:
-V print version information and exit
-pgpfp print PGP key fingerprints and exit
-v show verbose messages
-load sessname Load settings from saved session
-ssh -telnet -rlogin -raw
force use of a particular protocol
-P port connect to specified port
-l user connect with specified username
-batch disable all interactive prompts
The following options only apply to SSH connections:
-pw passw login with specified password
-D [listen-IP:]listen-port
Dynamic SOCKS-based port forwarding
-L [listen-IP:]listen-port:host:port
Forward local port to remote address
-R [listen-IP:]listen-port:host:port
Forward remote port to local address
-X -x enable / disable X11 forwarding
-A -a enable / disable agent forwarding
-t -T enable / disable pty allocation
-1 -2 force use of particular protocol version
-4 -6 force use of IPv4 or IPv6
-C enable compression
-i key private key file for authentication
-noagent disable use of Pageant
-agent enable use of Pageant
-m file read remote command(s) from file
-s remote command is an SSH subsystem (SSH-2 only)
-N don't start a shell/command (SSH-2 only)
-nc host:port
open tunnel in place of session (SSH-2 only)

 
 

scpクライアント pscp.exe (PuTTY Secure Copy client)


これも scp コマンドと似たような使い勝手。ヘルプのっけるだけでも大体分かるな。
 

PuTTY Secure Copy client
Release 0.60
Usage: pscp [options] [user@]host:source target
pscp [options] source [source...] [user@]host:target
pscp [options] -ls [user@]host:filespec
Options:
-V print version information and exit
-pgpfp print PGP key fingerprints and exit
-p preserve file attributes
-q quiet, don't show statistics
-r copy directories recursively
-v show verbose messages
-load sessname Load settings from saved session
-P port connect to specified port
-l user connect with specified username
-pw passw login with specified password
-1 -2 force use of particular SSH protocol version
-4 -6 force use of IPv4 or IPv6
-C enable compression
-i key private key file for authentication
-noagent disable use of Pageant
-agent enable use of Pageant
-batch disable all interactive prompts
-unsafe allow server-side wildcards (DANGEROUS)
-sftp force use of SFTP protocol
-scp force use of SCP protocol

2008年11月4日火曜日

Windows上でRPMパッケージを展開する

「RPMの中身が見たい、でも手元にLinuxがない!」
 

自宅にLinux環境を置いてないのが悪いんだが、ブログ記事を作るときにたまに困る。
Linux系のネタでは、 Google Notebook にメモってから後で記事に起こすということをよくやるが、細かいところでRPMを展開して確認することがある。
 
 

RPMの展開は意外と有名な多機能アーカイバでは対応していない、下記のツールで展開する事ができる。

XacRett(公開サイトのトップはこちら)
http://www.kmonos.net/lib/xacrett.ja.html


 
 

使い方はいたって簡単。任意のRPMパッケージを XacRett.exe にドロップすればデスクトップに展開される。
デフォルトのコンフィグファイルとか、バイナリのインストールパスとかの確認で使っています。
 
なお、 XacRett.exe を直接起動すると展開先の指定ができる、デフォルトのデスクトップから変更したい場合などは指定したらよいでしょう。(.ini ファイルができます。)
 
 

折角なのでRpmForgeのrpmforge-releaseを展開してツリーを見てみた。
rpmforge-release-0
├─etc
│ ├─apt
│ │ └─sources.list.d
│ │ rpmforge.list
│ │
│ ├─pki
│ │ └─rpm-gpg
│ │ RPM-GPG-KEY-rpmforge-dag
│ │ RPM-GPG-KEY-rpmforge-dries
│ │ RPM-GPG-KEY-rpmforge-matthias
│ │
│ ├─smart
│ │ └─channels
│ │ rpmforge.channel
│ │
│ ├─sysconfig
│ │ └─rhn
│ │ sources.rpmforge.txt
│ │
│ └─yum.repos.d
│ mirrors-rpmforge
│ rpmforge.repo

└─usr
└─share
└─doc
└─rpmforge-release-0.3.6
mirrors-rpmforge.yum
RPM-GPG-KEY-rpmforge-dag
RPM-GPG-KEY-rpmforge-dries
RPM-GPG-KEY-rpmforge-matthias
rpmforge.apt
rpmforge.smart
rpmforge.up2date
rpmforge.yum

なるほど。

2008年10月30日木曜日

Solaris10でCD(DVD)ROMからパッケージをインストール

wget入れるのに難儀したのでメモ
 

$cd /cdrom/sol_10_508_x86/Solaris_10/Product/
$pkgadd -d . SUNWwgetr SUNWwgetu

 
"." ピリオド(ベースディレクトリ指定?)がいることに中々気づかなかった。
 
 

そして wget の入った先は
"/usr/sfw/bin/wget"
 

デフォルトではパスが通ってないので気づかん…

Solaris10の自動アップデートインターフェイス

Solaris10 の管理でOS関連ファイルのアップデートをしたい場合、smpatch コマンドというのがある。これはyumっぽい。
 


それとは別にGUIで「Sun Update Manager」というのがある。
これはMicrosoftUpdateっぽい。
[caption id="attachment_1024" align="alignnone" width="300" caption="画像:Solarisの「Sun Update Manager」"]画像:Solarisの「Sun Update Manager」[/caption]
 

これは WSUS みたいに集中管理ができる模様、管理のしやすさ(他人への押し付けやすさとも言うな)というのもOSの売りになるなと思った。

メモエントリ:Xenのイメージファイルをマウントする

メモエントリ
Xenで使うHDDイメージファイルをマウントする方法。
 
 

そこはかと::Xenのイメージファイルをマウントする
 

losetup と kpartx コマンドを使えば楽にできるのか。
 
 

ソーシャルブックマーク代わりに。

2008年10月28日火曜日

アクセスログの保存期間は3ヶ月を目安にすればいいんじゃないか

ログの保存期間ってイマイチ迷う。
「アクセスログ 保存期間」「ログ 保存期間」で検索しても中々スパッとした答えが出てない、その代わり期間決定に色々参考になる情報があるという事はよく分かった。
 

それなら自分の中で定義しよう 3ヶ月(90日)でOK。(2008年10月現在の定義)
※最少は30日から、上は各自ストレージと相談してお好きなように
 

結論にいたるまでは、それなりの経過がある。以降は判断までの過程なので興味なければ不要。
 
 
 

プロバイダ責任制限法には制限が無いらしい


関連サイトなど。

 

責任法の第4条では開示要求について記載されている。
「プロバイダは当局のログ提出要請に応じてネ。」という事のようだけど、じゃあどのくらい昔のログを出したらいいのかというと特に触れられていない。
 

外部サイト参考:「プロバイダー責任(逃れ)法可決 」 にあるように、そもそもログの取得が義務で無いため、ログが無ければ無いでよいという解釈になる。
なんでそんな事に?と思うかも知れないが、結局色々しがらみがあるんだろう。
 
 
 


不正アクセス行為の禁止等に関する法律(不正アクセス禁止法)にも期間の指定は無いが…


関連サイトなど。

 

肝心の警察庁案が見当たらなかったが、当時についての記事1当時についての記事2 から、警察丁案ではこちらの法律で 90日間又は30日間が義務付けられそうだった という事が分かった。
 

じゃあコレでいいじゃんという事で。
不正アクセスやら何やらで、当局に提出を求められる可能性があるログの類は、迷ったら3ヶ月(90日)を目安に運用すればOKだ。
(Apache・IIS等のWEBサーバアクセスログ、SMTP・POP3のメールログ、その他ログイン履歴などetc...)
 
 

そうそう、サーバ貸してる場合は、ユーザさんとはちゃんと取り決めを交わしてから消してね。
 
 

続きを書いたのでそっちもよろしく。
続・アクセスログの保存期間は3ヶ月を目安にすればいいんじゃないか

2008年10月24日金曜日

自分のtcsh用の.cshrcを書いておく@solaris10

Solaris10を使うのに、慣れているといってもbashを使うのはなんだか嫌な感じがしたので tcsh を使うぞ。シェルスクリプトはさすがに sh か bash でやりそうだが。
 

bash でよく使うのはカーソルキーでのヒストリとTAB補完。
カーソルキーのヒストリは tcsh に標準であるので、TABでのファイル名・コマンド名補完ができりゃOK。
 

とりあえずマイ「.cshrc」を作ってWEBに補完する、ぼちぼち追加していこう。
umask 022
set path=($path /usr/sfw/bin /usr/ccs/bin/ /usr/ucb /opt/csw/bin /opt/csw/sbin)
set prompt = '[%n@%m %c2]\$'
set autolist
set color
 
 
setenv PAGER less

 

ちなみにデフォルトのシェルは "passwd -e" で指定する。
このままコピペすると1行目のシングルクォーテーションが全角になる。
あと、通ってるパスが少ないなぁ。
 
 

色々追加していくうちに、もうBashでいい気がしてくるがそこは気づかないフリで。


・プロンプト修正:c2にした
・path 追加、skelよりumask追加
・pager変更
・path 追加

2008年10月23日木曜日

Filemonでファイルアクセスの調査。アプリのトラブルにも応用できる@Windows

Windows を作っている Microsoft という会社さんは、自分とこのOSを使い勝手のよいものにするため沢山有用なツールを配っている。
 

ここ→Sysinternals Utilities Index に行けばそれらのツールが紹介されており、ダウンロードもできる。
今回はその中から Filemon を使ったトラブルシューティングをとても簡単に紹介。
 
 

[caption id="attachment_1011" align="alignnone" width="300" caption="画像:FIlemon でファイルアクセスの様子をキャッチ"]画像:FIlemon でファイルアクセスの様子をキャッチ[/caption]
 

いきなりだけど、上の画像はFilemonを起動して失敗系のみログをとる設定にして放置、その後に自作のアプリケーションがアクセス拒否でこけたところをキャプチャーした様子だ。
隠しているが、アプリを起動した実際のユーザ名と、アクセスできなかったファイル名がばっちり分かる。アクセス権をつければ動くに違いない。
 

filemon はこのようにファイルシステムへのアクセスを任意のフィルタで記録してくれる代物だ。
アプリがこける理由、ファイルが無いとかアクセス権が無いとかは調査に filemon を使えばよい。
 

他のツールも気が向いたら画像つけて紹介したい。

solarisのデバイス管理_ブロックデバイスHDD編

Solaris10を触っていて面白いと思った点がいっぱい。
 

例えばハードディスクの情報を見ようと、formatコマンドを叩く。
# format
Searching for disks...done
 
 
AVAILABLE DISK SELECTIONS:
0. c1t0d0 <default cyl 2085 alt 2 hd 255 sec 63>
/pci@0,0/pci8086,2829@d/disk@0,0
1. c1t1d0 <ata -VBOX HARDDISK-1.0-15.40GB>
/pci@0,0/pci8086,2829@d/disk@1,0




VirtualBoxで仮想的に2台繋いだハードディスクはそれぞれ c1t0d0 c1t1d0 という名前で管理されている。
 
ついでに df コマンド
# df
/ (/dev/dsk/c1t0d0s0) …

/export/home (/dev/dsk/c1t0d0s7) …


マウント済み領域は c1t0d0s0、c1t0d0s7 など出てきた。一般的なLinuxで言うところの hda1 とか sda1 とかに相当するんだけど、長い。
 
 

なんでこんなに長いんだろうと思ってデバイス管理のドキュメントを見てみる。
c1t0d0s7 の内訳は…

















c1論理コントローラ番号
t0物理バスターゲット番号
d0ドライブ番号
s7スライス番号またはパーティション番号(pn)

 

合理性以外が全く考慮されていない ということが分かった。solaris興味深い。

2008年10月22日水曜日

solaris10を触る

SunのSolaris10を触ることになった。
おかげでUNIXカテゴリを追加することにした、最初から*nix にでもしておけばよかったかもしれない。
 

公式マニュアルの出来がものすごい(日本語ドキュメントリンク)ので何かと窮する事は無いけど、最近Linuxに慣れ親しんでいた為、何ごとにも苦労する。FreeBSDとも違うし。。
 

shutdown コマンド の書式で困ったり、サービスの登録や再起動が分からなくてマニュアル引いたり、基本の運用管理を一通り把握するのに一苦労。
 

そんな所で、とりあえず「Solaris10初めました」的な状態で参考になりそうな管理系情報にについてまとまっているサイトがあったのでメモ。

 

まあ、Solaris10巻理系を自分のところで簡単にまとめようかと思ったら、すでにあったので一安心。ということなんですけど。
2年近く更新が無いので中の人は元気なのかといらん心配をしてみる。
 
 

公式マニュアルで、どのバージョンを見たらよいのか最初分からなかったが、Solarisの版数書式はどうやら「Solaris 10 リリース月/リリース年」と書くみたい。
「Solaris 10 5/8」 なら2008年5月にリリースしたバージョンのSolaris10、これが今のところ最新のようだ。

2008年10月17日金曜日

プロセス毎の環境変数を参照する

メモエントリ
 

Linuxサーバで、動作中のプロセスが独自に使っている環境変数などが調べたくなった。
proc 以下に書いてあるらしいので参照する。
/proc/{プロセスID}/environ
 

参考としてpostfix の master を調べてみた。
# cat /proc/6348/environ | tr "\000" "\n"
MAIL_CONFIG=/etc/postfix
sample_directory=/usr/share/doc/postfix-2.3.3/samples
OLDPWD=/etc/postfix
setgid_group=postdrop
sendmail_path=/usr/sbin/sendmail.postfix
mailq_path=/usr/bin/mailq.postfix
manpage_directory=/usr/share/man
readme_directory=/usr/share/doc/postfix-2.3.3/README_FILES
newaliases_path=/usr/bin/newaliases.postfix
PATH=/bin:/usr/bin:/sbin:/usr/sbin
PWD=/var/spool/postfix
queue_directory=/var/spool/postfix
LANG=C
mail_owner=postfix
daemon_directory=/usr/libexec/postfix
SHLVL=1
config_directory=/etc/postfix
MAIL_LOGTAG=postfix
html_directory=no
command_directory=/usr/sbin
_=/usr/libexec/postfix/master


ファイルの中身はnull文字で区切られているらしいのでtrコマンド で「NULL=\000」を「改行=\n」に置換して表示するとよい模様。
参考にしたページがあるんだけど、コメント投稿欄がビミョーだったのでリンクしない。
 

いろんな 環境変数 あるんだなー。という感じだ。
元々はプロセスに LOCALDOMAIN 環境変数が渡されて無いかの調査だったので、コレでOKかな。
 

procのmanページも参考にされたし。

2008年10月16日木曜日

日経NETWORKの「ネットワーク検定2008」をやってみた

先日、日経NETWORK2008年10月号の企画、「ネットワーク検定2008」と言うのがあったので、WEBで回答してみた。
 

先ほど採点結果がメールできたので発表。
ちなみに問題と回答はこちら。「ネットワーク検定2008」 全問題と解答・解説
 
 

私の受験結果はこちら↓
■あなたの得点と順位
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  あなたの総合得点  16点/20点中 (平均:11.4点)
  あなたの総合順位  89位/2707人中
  ─────────────────────────────────
   あなたの「ネットワークを構築する力」
    4点 (平均:2.2点/4点中)
    
   あなたの「トラブルを解決する力」
    4点 (平均:1.6点/4点中)
    
   あなたの「ネットワークを管理する力」
    4点 (平均:2.6点/4点中)
    
   あなたの「ネットワーク機器を選択する力」
    1点 (平均:2.0点/4点中)
    
   あなたの「セキュリティ対策をする力」
    3点 (平均:3.0点/4点中)
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━


(ノ∀`) アチャー
最近ちゃんと機器を触ってないのがバレバレだな。俺仕事でネットワークやってんだから満点じゃなきゃダメだろ。
 

WEB表彰状はもらえたので、まあいいか。
[caption id="attachment_1001" align="alignnone" width="300" caption="画像:WEBで表彰状"]画像:WEBで表彰状[/caption]
一応悪用されないように署名っぽい事をしておく。

2008年10月10日金曜日

env コマンドで一時的に環境変数を差し替える

自分用メモエントリ
 

次に実行するコマンドだけ特別な環境変数で実行したい場合 env コマンドを使う。
 
 

普通に date を叩くと英語という環境で
# date
Fri Oct 10 12:06:24 JST 2008

 

日本語にしたければ LANGを書き換えて渡す、直後にちゃんと元に戻っている
# env LANG="ja_JP.UTF-8" date
2008年 10月 10日 金曜日 12:07:44 JST
 
# date
Fri Oct 10 12:08:01 JST 2008

 

複数指定はスペースで区切ればOK、ついでにいうと後のほうが優先
# env LANG="ja_JP.UTF-8" LANG="en_US.UTF-8" date
Fri Oct 10 12:09:24 JST 2008

 
 
 

注意、下記のような使いかたはできない。
# env LANG="ja_JP.UTF-8" echo $LANG
en_US.UTF-8

30kのJpegをBase64エンコードしました、さてお幾ら?@テクネ過去問

テクニカルエンジニア(ネットワーク)平成18年過去問午前を見ていた。もちろんスライスした参考書で。


30k バイトの JPEG ファイルを電子メールに添付するとき、大体どのくらいのサイズになるでしょう。添付ファイルのエンコードは MIME Base64 が使われますよ。


という問題があり、これってそのまま以前の記事、「Base64符号化で簡単な組み合わせを編み出す」の内容が活きてくるじゃないと思って驚いた。サイズは 4/3 になる。
 

ネタ重視のエントリも事前調査・裏づけを伴うものは役に立つ事もあるのだなあ。

2008年10月9日木曜日

マウス嫌いシリーズ(2)_「ALTキーショートカット」@Windows

マウス触るの面倒くさいので何でもキーボード入力でやってしまいたいというシリーズ物、2つ目。マウスなしでやるほうが早いことも多いし、にわかに玄人っぽい。
内容は社内向き、客先でさりげなくやるとハッタリが効いてよい。
 
前作:マウス嫌いシリーズ(1)_「ALT+スペース」@Windowsも宜しく。
 
 

ALTキーショートカット


OSインストール時などに「次へ(N)」 とか、「Next」 とかのボタンがあります。
このときのカッコやらアンダーバーは一体なんぞやと思う人はご丁寧にマウスでボタンを押してることだろう。
 
Next」 って書いてあるボタンは、「ALT + N」 でもこのボタンが押せますよーという目印、というかむしろそうしてくれというボタン側からのアピールです。
 
 
ということでもう言いたいこと終了と言えなくもないですが、折角なのでALTキーショートカットを使ったオペレーションの例をあげてみます。
大量のPCで同じ設定をする時、特にノートPCが相手だと能率が恐ろしいほど上がるのでお勧め。
 
 

仮想メモリの設定をマウスに触らずに変更してみる


仮想メモリのサイズを固定するというオペレーションをします。
 

まずは「Windowsキー + Pause」でシステムプロパティを一発出し。この後はマウス触っちゃ駄目
[caption id="attachment_988" align="alignnone" width="300" caption="画像:システムプロパティ"]画像:システムプロパティ[/caption]
さっそくショートカットの「ALT+A」で詳細設定に入る。
 


[caption id="attachment_989" align="alignnone" width="476" caption="画像:システムのプロパティ2"]画像:システムのプロパティ2[/caption]
「Ctrl + TAB」でタブを移動できる、各ボタンは見た目のとおり「ALT + 対応キー」で一発でメニューに入ることができる。
 
 

[caption id="attachment_990" align="alignnone" width="425" caption="画像:パフォーマンスオプション1"]画像:パフォーマンスオプション1[/caption]
「Ctrl + TAB」でタブを移動すればいいだけだが、ついでに言うとタブの名前にフォーカスがあっていればカーソルキー(矢印キー)で左右のタブに動ける
 
 

[caption id="attachment_991" align="alignnone" width="425" caption="画像:パフォーマンスオプション2"]画像:パフォーマンスオプション2[/caption]
ここも特にないが、あえて言うとESCキーで色々となかったことにできる。
 
 

[caption id="attachment_992" align="alignnone" width="400" caption="画像:仮想メモリ1"]画像:仮想メモリ1[/caption]
「ALT +A」 を使ってチェックボックスのチェックを ON/OFF しまくれる。
 
 

[caption id="attachment_993" align="alignnone" width="400" caption="画像:仮想メモリ2"]画像:仮想メモリ2[/caption]
ALTショートカットでどんどんフォーカスを飛ばして設定する。
今更だがTABキーで次の項目に移れるので利用したい。
最後はTABキーでOKまでフォーカスを持って行ってEnter or Space キー で完了。
 
設定後に残ったウインドウは…
「ALT + F4」、「Ctrl + wキー」、「ALT + Space →cキー」
どれも共通してウインドウを閉じるという動作、「Ctrl + wキー」は使いやすい。
 
 

やっておいて何だが、唯一引っかかるのがOKボタン、いろんな局面で「Ctrl+TAB」の連打が必要。
OKのいい押しかたってないんだろうか。

2008年10月8日水曜日

通勤中に参考書を読む、裁って3つの冴えたやり方

通勤時間は本を読む為にあると思っていい、少なくとも私はそう。そりゃあケータイいじってる日も結構あるけど。
 
 

資格試験だなぁとか思うと参考書を読む。
[caption id="attachment_984" align="alignnone" width="320" caption="写真:参考書_正面"]写真:参考書_正面[/caption]
そうそう、次はテクネだ、テクニカル2つ目をと思って。
しかし…
 

[caption id="attachment_985" align="alignnone" width="240" caption="写真:参考書_背表紙"]写真:参考書_背表紙[/caption]
太いよ厚いよ! 重たくて電車で読めないよ!
こんなの持ち歩くのも面倒だよ…
 
 
 
 
 

なので。↓ こうする。

[caption id="attachment_986" align="alignnone" width="320" caption="写真;参考書_3枚おろし"]写真;参考書_3枚おろし[/caption]

[caption id="attachment_982" align="alignnone" width="240" caption="写真:3冊の本"]写真:3冊の本[/caption]
 

写真で分かるかな?
「参考書をカッターでちょん切って、それぞれブックカバーをつける。」
 

重たい参考書も、裁断してしまうことでとても持ち運びやすい本に変身。
真ん中部分は100円ショップで買ったビニールのブックカバーを使っている、表紙・裏表紙の厚紙がないので強度を補ってやらないとボロボロになってしまう。
 

後から参考にすることの多い専門書の類は裁断するともったいないが、資格試験にむけた参考書などはどんどんぶった切ればよいと思う。
ちぎって喰らう位の気合で、頭に突っ込む事を最優先。