2011年7月26日火曜日

WSUSでクライアントPCの状態が「まだ報告されていません」のままになってしまう

今までWindows Server 2003で運用していたが、ついにWindows Server 2008 R2にした。
ほぼ順調だったが、WSUSで躓いた…。

WSUSのコンソールからクライアントPCは見えるのだが、いつまで経っても「まだ報告されていません」のまま。
40台あるうちの1台だけ何故か3%ほど報告しているのもよく分からないが完全に状態を報告したPCはない状態…。
ドメインコントローラは複数台あったので、GPOも今までのままでWSUSサーバの設定も原則的には変えていないはず。
何が悪いんだ…?!
wuauclt.exe /detectnow
wuauclt.exe /reportnow
やらはやってみたけど、状況は変わらない。

C:\Windows\WindowsUpdate.logを見ると
WARNING: WinHttp: SendRequestToServerForFileInformation failed with 0x801901f7
WARNING: WinHttp: ShouldFileBeDownloaded failed with 0x801901f7
WARNING: DownloadFileInternal failed for http://swptyo1ad1/selfupdate/wuident.cab: error 0x801901f7
とか
FATAL: IsUpdateRequired failed with error 0x80244022
WARNING: SelfUpdate: Default Service: IsUpdateRequired failed: 0x80244022
WARNING: SelfUpdate: Default Service: IsUpdateRequired failed, error = 0x80244022
WARNING: Skipping scan, self-update check returned 0x80244022
WARNING: Exit code = 0x80244022
とかある。調べたところ、503 Server Unavailableの状態ということので、多分WEBサーバの設定がおかしいんだろう…。
ちなみに、プロキシは使っていない。

IIS、正直あんまり触ったことない…。

とりあえずもっと情報が欲しいので、クライアントPCにclientdiag.exeをインストール
ダウンロードはこちらから
http://download.microsoft.com/download/9/7/6/976d1084-d2fd-45a1-8c27-a467c768d8ef/WSUS%20Client%20Diagnostic%20Tool.EXE

C:\TEMP>clientdiag
WSUS Client Diagnostics Tool
Checking Machine State
        Checking for admin rights to run tool . . . . . . . . . PASS
        Automatic Updates Service is running. . . . . . . . . . PASS
        Background Intelligent Transfer Service is running. . . PASS
        Wuaueng.dll version 7.4.7600.226. . . . . . . . . . . . PASS
                This version is WSUS 2.0
Checking AU Settings
        AU Option is 4: Scheduled Install . . . . . . . . . . . PASS
                Option is from Policy settings
Checking Proxy Configuration
        Checking for winhttp local machine Proxy settings . . . PASS
                Winhttp local machine access type
                       
                Winhttp local machine Proxy. . . . . . . . . .  NONE
                Winhttp local machine ProxyBypass. . . . . . .  NONE
        Checking User IE Proxy settings . . . . . . . . . . . . PASS
                User IE Proxy. . . . . . . . . . . . . . . . .  NONE
                User IE ProxyByPass. . . . . . . . . . . . . .  NONE
                User IE AutoConfig URL Proxy . . . . . . . . .  NONE
                User IE AutoDetect
                AutoDetect in use
Checking Connection to WSUS/SUS Server
                WUServer = http://<サーバ名>
                WUStatusServer = http://<サーバ名>
        UseWuServer is enabled. . . . . . . . . . . . . . . . . PASS
        Connection to server. . . . . . . . . . . . . . . . . . PASS
WinHttpDownloadFileToMemory(szURLDest, NULL, 0, NULL, NULL, NULL, &downloadBuffer) failed with hr=0x801901f7
No Error description could be found
Press Enter to Complete
あんまりよく分からないが、繋がってはいるもののそこから先がダメ。503 Server Unavailableって所で引っかかってるらしい…。

よく分からないので、一旦WSUSとIISの役割を削除して、再度追加。
それで直ればいいなぁ、と期待したものの、直らない…

そもそもIISがちゃんと構成されていないのでは?と思ったので、WSUSとIISを削除して、今度はIISのみ追加。

むむ、デフォルトウェブサイトにつないでもやっぱり503 Server Unavailable…。
やはりIISがおかしい。

IISが503を返す理由を調べているうちに、どうもサービスを起動する権限がおかしい可能性があることが分かった。


  1. 管理ツールから「インターネット インフォメーション サービス(IIS)マネージャ」を起動
  2. 中央部の接続ペインから実行サーバ名をクリックし、アプリケーションプールを選択
  3. 右ペインの「DefaultAppPool」を右クリックして、「詳細設定」を選択
  4. プロセスモデルのIDを「NetworkService」にする(本来はこれがデフォルトだが、このサーバではApplicationPoolIdentityとなっていた)
  5. OKで終了し、再度DefaultAppPoolを右クリックして、「再起動」させる

これでIISは正常になった。

もう一度、WSUSを追加したところ、正常に動作。

やっと終わった~!

2011年7月15日金曜日

印刷ジョブが消えない

Windows Server 2003 と2008 R2がプリントサーバになっているが、印刷ジョブが止まってしまうことがある。
まぁ、サーバに限らずクライアントPCでもよくあることではあるけれど…。

印刷ジョブが泊まってしまったら、削除するのに「キャンセル」を押す。
それでも、消えないまま固まってしまうことがある…。
プリンタの電源を切ってもジョブは残りっぱなしだし。
Linuxならコマンドでなんとかなるんだが…。

どうしたもんかと思い調べてみたら、こちらと同じ対処で出来た。
http://naosan.way-nifty.com/it/2009/05/post-88fa.html

Print Spoolサービスを止めて、C:\Windows\system32\spool\printersの*.SHDを削除、でPrint Spoolをまた開始、という流れ。
サーバなので、この間全部の印刷が出来なくなるけど、まぁ、仕方ない。
また、もしかしたら*.SHDだとその時スプールされているジョブが全部消えるかもしれない。
その辺は検証してくしかないかな…。

誰か、いい方法知ってたら教えてください!

2011年7月14日木曜日

PostgreSQLでpsql以外からCOPY FROM/TO を使う

PostgreSQLで便利なCOPY文。
でも、COPY FROM/TO 'ファイル名'を使うにはスーパーユーザ(superuser)権限が必要…。
ERROR: must be superuser to COPY to or from a file HINT: Anyone can COPY to stdout or from stdin. psql's \copy command also works for anyone.
なんでもかんでもスーパーユーザにするのはよくないので、なにか方法はないかと調べてみた。

一つは\copyを使う方法。
C言語でlibpqを使って繋げているので、「単純にcopyを\copyにすればいいのか?」と思い試してみたが、やっぱりダメ。
そう簡単ではありません。
要は\copyはpsqlのコマンドであり、PostgreSQLに取っては分からないコマンドになってしまうから。

もう一つは、ヒントにも書かれているstdout, stdinを使う方法。
C言語からどうやればいいんだろう?
ということで、公式のドキュメントを参照。
http://www.postgresql.jp/document/9.0/html/libpq-copy.html

PQPutCopyData関数を使えばいいらしい。
ただいきなり発行できるわけではなく、まずCOPY_IN状態にしなくちゃならない。
COPY_IN状態にするにはどうしたらいいかというと、普通にPQExecで"COPY FROM STDIN..."を実行させればいいだけ。
こうなってからPQPutCopyData関数を使えばstdinから入れているように見せられる、とそういうわけか。

ここまで調べて、さあ実装しよう!と思ったら、上司から「そのユーザ、スーパーユーザにしちゃっていいよ」とのお言葉…。
まぁ、他にもいろいろあるユーザだし、プログラムの実行しかしないログインも出来ないユーザだからいいっちゃいいけどね。

ちょっと拍子抜けでした!

gdbの使い方

C言語での開発は好きじゃない…。
比べればまだいいけど、Javaもあんまり好きじゃない。
気楽なスクリプト言語が一番好み。

でも、仕事では既にC言語で書かれちゃってて、さらにメモリ破壊なんてことが起きたりするわけで。
動かすマシンを買えたらアーキテクチャの違いか何かで、今まで動いていたプログラムが急に動かなくなったりする。
まぁ、潜在的に抱えてたんだろうけど…。

そんな時に使えるのがgdb。
gdbはソースレベルのエントリを利用してデバッグを行うシンボリックデバッガ。
ソースがなく、プログラムしかない場合は機械語レベルでデバッグを行うアブソリュートデバッガを使うけど、ずっと大変そう…。
幸いソースはあるので、gdbを使う。
何ができるかって、プログラムを一行ずつ動かしたりして、その都度変数やスタックなんかを見ることが出来る。

まずは下準備。
-g オプションを付けてコンパイル。
要はこのオプションを付けることで、デバッグに必要な情報を実行ファイルにいれていると思われる。

で、gdbの起動。引数としてデバッグしたいプログラムを渡しちゃうと楽。
$ gdb sample
次はブレイクポイントの設定。
ソースコードを見ながら、挙動を監視したい辺りにブレイクポイントを設定
(gdb) break 5
※短縮してb 5 でも動く

で、いよいよプログラムの実行。
引数はrunコマンドに渡せばいい。
(gdb) run parameter1 parameter2

もちろんブレイクポイントまでで止まる。それ以前にエラーがあればそこで止まるけど。

お次は変数の確認。
(gdb) print hoge
※短縮して p hogeでも動く

次の行に進むには
(gdb) next
※短縮してnでも動く
まとめてN行進むには
(gdb) step N
※短縮してs Nでも動く。Nを省略すると1行進む

次のブレイクポイントまで一気に進むには
(gdb) continue
※短縮してcでも動く

やめたくなったら
(gdb) kill
あるいは一気に
(gdb) quit
で抜けてもいい。gdbが動かしていたプログラムはquitすれば止まる。

以上、簡単な使い方。
もっと詳しく知りたい人は以下で!
http://cl.is.kyushu-u.ac.jp/Literacy/PP/H14/adp/program/compile.html
http://uguisu.skr.jp/Windows/gdb.html

2011年7月13日水曜日

tsharkでパケットキャプチャ

Ciscoのスイッチに大量のパケットが送られているようでネットワーク帯域のほとんどを消費してしまい、ネットワークが非常に遅くなってしまった。
どんなパケットが送られてきているのか調べるためにwiresharkのCUI版、tsharkでキャプチャしてみた。

まずはスイッチ上での設定。
FastEther0/1のポートが本番稼動しているが、そこにキャプチャ用のサーバを入れて、というわけにはいかないので、monitorコマンドを使用。
空いている10番ポートに同じパケットが流れるようにする
monitor session 1 source interface Fa0/1
monitor session 1 destination interface Fa0/10
キャプチャするサーバのeth1にはアドレスも何も振らず10番ポートと接続。
これで準備完了。
$ tshark -i eth1 -t ad -w <ファイル名>
これで指定したファイルにキャプチャが取られて行く。
止めないと永遠にキャプチャし続けるので適当なところでCtrl+Cで打ち切る。

キャプチャしたファイルを読み込むには
$ tshark -r <ファイル名>
で読める。

ただダラダラ読んでも解析が難しい…。
ログ集計スクリプトを組まなくちゃダメかなぁ、と思ったらちゃんとtsharkに統計機能があった!

というわけで、
$ tshark -r <ファイル名> -z conv,ip            # IPごとに集計
$ tshark -r <ファイル名> -z io,phs             # プロトコル階層で集計
$ tshark -r <ファイル名> -z io,stat,600,eth    # 600秒ごとにethフレームとして集計
とすればログのあとに統計情報が出てくる。
これは便利!

tsharkに関してはこちらを参考にしました。
集計の部分がすごく分かりやすい!
http://assimane.blog.so-net.ne.jp/2011-01-08

2011年7月7日木曜日

Windows Server 2008R2 SP1の日本語版を英語表示に

海外チームのサポートを得るためと、エラー情報を英語で探すために、Windows Server 2008 R2 SP1の日本語版を英語表示にしたい。
MicrosoftからMultilingual User Interface Language Packが出ているので、それをインストールするだけ。
と思いきや、取得した.exeを実行してlpファイルが出来上がるものの、数秒で消えてしまう…。

何故だ?!

と思って、イベントログを見てみると
イベントID: 1014
en-US 向け言語パックはこのシステムに適していません。お使いのシステムのアーキテクチャおよびエディションを対象とする適切な言語パックをダウンロードしてください。
とか言ってくれちゃう…。

もしかして、ia64版をダウンロードしたのか?と思って確認したが、やはりx64版。

調べてみたら、サーバのOSがSP1だった。
あ、SP1だと入らないものなのね…。

あとはこちらを参考に作業したら、正常に入った!

ダウンロードするファイルは、Windows Server 2008 R2の人はこちら
SP1の人はこちら

2011年7月5日火曜日

シェルスクリプトで最後の引数を取得したい

検証したのはKorn Shellだけど、bashやPOSIX準拠shでも動くはず。

最後の引数を取得するには、引数の数は$#に格納されているので、
$$#
とすればよさそうだが…?


!/bin/ksh
echo "Number of arg: $#"
echo "Value of last index: $$#"

(arg_test.sh)

実行すると
$ ./arg_test.sh a1 b2 c3 d4 e5
Number of arg: 5
Value of last index: 19401#
※本来はe5と出て欲しいのに…

考えて見れば分かるが、$$#はシェルが特殊変数$$と解析し、PIDを出力する。
さらに#が付いているので、リテラルとして追加してecho出力、となった。

エスケープすればいいのか?と思い、


echo "Value of last index: \$$#"


としてみても、
$ ./arg_test.sh a1 b2 c3 d4 e5
Number of arg: 5
Value of last index: $5
う~ん、もう少し。

いろいろ調べると、こういう時は組み込み関数evalを使えばいいらしい。


echo "Value of last index: `eval echo '$'$#`"


これでOK。
$ ./arg_test.sh a1 b2 c3 d4 e5
Number of arg: 5
Value of last index: e5
想定通り!


ただ、これだと引数が9個までならいいけれど、10個以上になるとうまく行かなくなってしまう。
$ ./arg_test.sh a1 b2 c3 d4 e5 f6 g7 h8 i9 j10 k11
Number of arg: 11
Value of last index: a11
これはeval echo '$'$#の中で$#が$11と置き換わったが、シェルスクリプトの引数は$1, $2, $3,...でアクセスできるが、$9までしかない。
$11は$1と1と解釈されたので、$1="a1"と"1"が出力されている。
10番目移行の引数にはshiftしていくか、${10}などとする必要がある。

なので、


echo "Value of last index: `eval echo '$'{$#}`"


にすれば
$ ./arg_test.sh a1 b2 c3 d4 e5 f6 g7 h8 i9 j10 k11
Number of arg: 11
Value of last index: k11
と10個を超えても大丈夫になった。

2011年7月1日金曜日

PostgreSQLで権限の確認

PostgreSQLでの権限の確認は以下が参考になった。
http://www.dbonline.jp/postgresql/role/index3.html

\zで見れる。

db=# \z
                              Access privileges
 Schema | Name | Type  |     Access privileges     | Column access privileges
--------+------+-------+---------------------------+--------------------------
 public | test | table | postgres=arwdDxt/postgres+|
        |      |       | =r/postgres              +|
        |      |       | dba=arwdDxt/postgres     +|
        |      |       | dml=arwdD/postgres        |
(1 row)

権限を付けたユーザ(ROLE)はそのまま削除できない。
なので、削除したい場合は先にREVOKEを行ってからDROP ROLEを行う流れとなる。

2011年6月に読んだ本

6月の読書メーター
読んだ本の数:13冊
読んだページ数:3107ページ

強運強運
こういう生き方してたらそれは強運にもなる、と思わされた。常に一歩上を目指す。そうすると疲れちゃうと思うかも知れないが、竹の節のようになっているので、上にいくほど次の一歩が楽になる。大変なのは最初だけ。全ては基本から。名著「人を動かす」はその基本をしっかり書いてあるので最低7回読みといい。
読了日:06月30日 著者:斎藤 一人
zsh最強シェル入門zsh最強シェル入門
「zshの本」より読みやすい。その分、情報は少ないがまず慣れる、どんなものか掴む、という意味ではこちらのほうが取っ付き易いと思った。
読了日:06月29日 著者:中島 能和
幸福力(しあわせりょく)[CD付き]幸福力(しあわせりょく)[CD付き]
五回目。自分の修行を一生懸命やってないから、まわりが気になって仕方がない。まずは一生懸命やってみる。そうすると中心軸が出来る。不動の心になる。
読了日:06月24日 著者:斎藤一人
Redmineによるタスクマネジメント実践技法Redmineによるタスクマネジメント実践技法
備忘録から始めて、アジャイル開発へ。運用のノウハウは参考になるが、いくつか具体的な例もあるともっと分かりやすかったと思う。とにかく、自分で導入して試行錯誤するしかなさそう。
読了日:06月23日 著者:小川 明彦,阪井 誠
プロのための Linuxシステム構築・運用技術 (Software Design plus)プロのための Linuxシステム構築・運用技術 (Software Design plus)
思ったより数段よかった!「こういうことをするにはこうすればできます」という技術書は溢れているが、実務に関わる人から「この技術は実際の運用では使いません」等、業務での推奨などを書いているのはあまりない。無意識に叩き込まれるまで何度も読み直したい本!
読了日:06月18日 著者:中井 悦司
ここ―食卓から始まる生教育ここ―食卓から始まる生教育
「子供は育てられたように育つ」「思春期に問題が起こるのではなく、お腹にいるときから始まっている。思春期にそのサインを出しているだけ」。とにかく愛情が大切。抱きしめること、話を聞くこと、一緒に遊ぶこと、一緒にごはんを食べること、なるべくちゃんとした食事を食べること。性の話は家庭でしない。すればするほど、性の敷居が低くなり安易に踏み越えてしまう。実は「恥ずかしいこと」のままでよかったりする。
読了日:06月16日 著者:内田 美智子,佐藤 剛史
背教者ユリアヌス (中) (中公文庫)背教者ユリアヌス (中) (中公文庫)
ページをめくる手が止まらない!宦者の陰謀のせいもあり、ガリアの統治がうまく行きかけると謀反が起きていたこともあり、皇族の血によって統治を思い立った皇帝。哲学に傾倒するユリアヌスに突然の抜擢だったが、哲学の本質は軍事にも活かせたようで思いのほか活躍するユリアヌス。今のところ、うまく行っているが、この後どうなる?!
読了日:06月14日 著者:辻 邦生
人生カンタンリセット!夢をかなえる「そうじ力」人生カンタンリセット!夢をかなえる「そうじ力」
毎朝、出勤したらデスクを片付ける!
読了日:06月12日 著者:舛田 光洋
知識ゼロからの世界史入門〈1部〉近現代史知識ゼロからの世界史入門〈1部〉近現代史
読了日:06月11日 著者:
天才エジソンの秘密 母が教えた7つのルール天才エジソンの秘密 母が教えた7つのルール
何度失敗しても諦めずに挑戦し続けたエジソン。そのルーツは母の教えで、失敗を失敗と思わせなかったところにある。短所を直すことに注意を注げば、ただの人にしかなれない。短所を補って余りある長所を伸ばせばオンリーワン。
読了日:06月10日 著者:幸田 ヘンリー
ヤッさんヤッさん
これはおもしろかった!「ホームレスでも矜持は忘れちゃいけない」「都会に生かしてもらっていることに感謝はしても、媚びへつらう必要はない」。カッコイイ!上司、会社、取引先に感謝はすべきだけど、媚びへつらう必要はないよねぇ。なんだかいろいろ考えさせられました!
読了日:06月06日 著者:原 宏一
眼力 (CD付)眼力 (CD付)
二回目。政府は英語が話せる人なんて欲しくなかった。だから、This is a penから始める。この文章、リアルで使ったことない…。そういったことを見抜く眼力をつけよう。
読了日:06月01日 著者:斎藤 一人
宝くじ(超)当せんデータ「当たる人のルール」がわかった宝くじ(超)当せんデータ「当たる人のルール」がわかった
「宝くじはよく当たる売り場で買え!バラで買え!」のような必勝法の本ではない!当選した人を取材して、共通点をまとめたもの。「となりの億万長者」のようなスタイル。お金持ちの習慣を学ぶにはいい!
読了日:06月01日 著者:

読書メーター