tag:blogger.com,1999:blog-85836275578630394482024-03-08T15:21:29.793+09:00気負わずに、自然体で36歳既婚男、社内SE、合気道初段。
適当に書いてみます。AllBlackhttp://www.blogger.com/profile/06421415357994139295noreply@blogger.comBlogger49125tag:blogger.com,1999:blog-8583627557863039448.post-3489566854633064102014-10-02T15:58:00.000+09:002014-10-02T16:06:35.759+09:00WordpressのBackWPupでfalse http statusエラーが出た際の対処WordpressのBackWPupで以下のようなエラーが出た
<br />
<blockquote>
The HTTP response test get a false http status (401).</blockquote>
ちょっと調べるとサイトにBASIC認証がかかっていると発生してしまうらしい。<br />
認証解除すればOK、とのことだけど、認証する必要があるから認証かけてるわけで。<br />
<br />
もうちょっと調べてみると、<span style="color: #38761d;"><b>SettingsのNetworkにユーザIDとパスワード入れればいい</b></span>らしい。<br />
<br />
ちゃんと動いた!やったね!AllBlackhttp://www.blogger.com/profile/06421415357994139295noreply@blogger.com0tag:blogger.com,1999:blog-8583627557863039448.post-9562544220702069032014-05-16T11:25:00.001+09:002014-05-16T12:00:01.865+09:00PerlのFile::TailでハマったPerlでtail -fみたいなことがしたくて、File::Tailに辿り着いた。<br />
<br />
サンプルを見て書いてみた。けど、何も出力されない…。<br />
<pre class="brush: perl">
use File::Tail;
$file = File::Tail->new(name => "test.txt");
while( defined($line = $file->read)) {
print "$line";
}
</pre>
ちょっと調べてみると、マニュアルにmaxintervalなるものがある。<br />
<a href="http://search.cpan.org/~mgrabnar/File-Tail-0.99.3/Tail.pm">http://search.cpan.org/~mgrabnar/File-Tail-0.99.3/Tail.pm</a><br />
<br />
<blockquote class="tr_bq">
<br />
<br />
<dt style="background-color: white; font-family: arial, sans-serif; margin-top: 1em;"><a href="https://www.blogger.com/null" name="maxinterval">maxinterval</a></dt>
<dd style="background-color: white; font-family: arial, sans-serif;">The maximum number of seconds (real number) that will be spent sleeping. Default is 60, meaning <code>File::Tail</code> will never spend more than sixty seconds without checking the file.</dd></blockquote>
<br />
これか。要は60秒ほど待ってしまうわけだ。<br />
さっきのサンプルを動かして、放置しておくと1分経てば出力されていた。<br />
<br />
なるほど。<br />
<br />
とりあえずすぐ見たいので、maxintervalを1秒に変更すると、更新から1秒後に出力されるようになった。<br />
<br />
<br />
<br />
ただ、本当はファイル全体を読み込んで、かつ、tail -f のようにしたい。<br />
<br />
これは<br />
<blockquote class="tr_bq">
$file->tail(-1);</blockquote>
すれば出来ますよ、みたいなのを見つけてやってみたけど、動かない。<br />
<br />
マニュアルに戻ると、tailはnewのargmentsになってるので、以下のように書き換え。<br />
<br />
<pre class="brush: perl">
use File::Tail;
$file = File::Tail->new(name => "test.txt", maxinterval => 1, tail => -1) or die("cannot tail test.txt");
while( defined($line = $file->read)) {
print "$line";
}
</pre>
ちゃんと動くようになった。AllBlackhttp://www.blogger.com/profile/06421415357994139295noreply@blogger.com0tag:blogger.com,1999:blog-8583627557863039448.post-60838457926243599572013-02-28T15:47:00.000+09:002013-02-28T15:47:36.244+09:00Win7で2012年12月から802.1xが繋がらない無線LANに802.1xで繋いでいるんだけれど、Windows 7から急に繋がらなくなった。<br />
思い当たるのはWindows Update。<br />
でも、なかなか情報がなくて放ったらかし状態にしていたが、少し仕事が落ち着いたのでやっと調べてみることに。<br />
<br />
ズバリこれでした。<br />
<a href="http://serverfault.com/questions/391959/nps-eap-authentication-failing-after-windows-update">http://serverfault.com/questions/391959/nps-eap-authentication-failing-after-windows-update</a><br />
<br />
<br />
<blockquote>
In December 2012, this issue occurred for many people when Microsoft messed up update KB931125 on December 11th 2012 by accidentally applying the root cert update to clients <em style="background-color: transparent; border: 0px; font-size: 14px; margin: 0px; padding: 0px; vertical-align: baseline;">and servers</em>, when it should've only been applied on clients. This added hundreds of 3rd-party root certificates to the trusted root certs list on servers, causing problems like you showed.<br />Took me long enough to find it, but MS has an article and fix available at <a href="http://support.microsoft.com/kb/2801679" rel="nofollow" style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: 0px; color: #456583; cursor: pointer; font-size: 14px; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline;">KB2801679 "SSL/TLS communication problems after you install KB 931125"</a>.The faulty update has since been expired on Windows Update and WSUS, but if you've already applied it, <strong style="background-color: transparent; border: 0px; font-size: 14px; margin: 0px; padding: 0px; vertical-align: baseline;">you can clean up the root cert list by running the Fix-it</strong> provided in the article on all affected servers. </blockquote>
どうやらMicrosoftがルート認証局の更新を間違って、サーバにも当ててしまったらしい。<br />
で、大量のルート認証局の情報を送ってしまい、認証時のメッセージのサイズが肥大化し、適切なサイズにおさまらなくなって、認証失敗、と。<br />
<br />
サーバでリンクのFix itを動かせばすぐに直りました。<br />
<br />
解決してよかったけど…、FixもUpdateで送ってくれ、放置しないでくれ、と思ったり。<br />
AllBlackhttp://www.blogger.com/profile/06421415357994139295noreply@blogger.com0tag:blogger.com,1999:blog-8583627557863039448.post-64054461821603250802013-02-28T15:39:00.001+09:002013-02-28T15:48:51.324+09:00ネットワーク ポリシー サーバのイベントログが記録されない802.1xでうまく繋げないPCがあり、なんでだろう?と調べようとしたところ、ネットワーク ポリシー サーバ(Network Policy Server, NPS)のイベントログが記録されていないことに気が付いた。<br />
<br />
デフォルトで勝手に記録されるはずなんだけど…。<br />
<br />
強制的に書く方法もあったので、手順通りにやってみた。<br />
<a href="http://support.microsoft.com/kb/951005/ja">http://support.microsoft.com/kb/951005/ja</a><br />
<br />
機械翻訳とはいえ、ひどい日本語だな…。<br />
なんとなくわかるけど、コマンドを勝手に訳すのはやめてくれ。<br />
これじゃ通らない…。<br />
"ネットワーク ポリシー サーバ"とかやってみたが、エラーになる…。<br />
スペースが全角かとか英語にしてみるとかやってみたけど、問題は"サーバ"じゃなくて、"サーバー"なのね。<br />
<br />
正しくはこちら<br />
<br />
<span style="background-color: #f0f0a0; color: #0f0f5f; font-family: Meiryo, メイリオ, Verdana, Arial, Helvetica, sans-serif, 'MS UI Gothic'; font-size: 13px; font-weight: bold;">auditpol /set /subcategory:"ネットワーク ポリシー サーバー" /success:enable /failure:enable</span><br />
<span style="background-color: #f0f0a0; color: #0f0f5f; font-family: Meiryo, メイリオ, Verdana, Arial, Helvetica, sans-serif, 'MS UI Gothic'; font-size: 13px; font-weight: bold;"><br /></span>
実は地道に<br />
<br />
<span style="background-color: #f0f0a0; color: #0f0f5f; font-family: Meiryo, メイリオ, Verdana, Arial, Helvetica, sans-serif, 'MS UI Gothic'; font-size: 13.333333969116211px; font-weight: bold;">auditpol /list /category /v</span><br />
<br />
でGUID出して、<br />
<br />
<span style="background-color: #f0f0a0; color: #0f0f5f; font-family: Meiryo, メイリオ, Verdana, Arial, Helvetica, sans-serif, 'MS UI Gothic'; font-size: 13.333333969116211px; font-weight: bold;">auditpol /list /subcategory:{...上で取ったGUID...}</span><br />
<br />
と、頑張って正しい名前を見つけたんだけど…。<br />
<br />
しかし、こういうサービス名は訳して欲しくないなぁ…。<br />
個人的には日本語にするんでも、表示名だけとかにして欲しいけど、「全部日本語で!」という人もいるんだろう。<br />
Microsoftも悩ましいところかな。AllBlackhttp://www.blogger.com/profile/06421415357994139295noreply@blogger.com0tag:blogger.com,1999:blog-8583627557863039448.post-63417397387332829492013-01-23T14:47:00.002+09:002013-01-24T08:33:33.610+09:00perlでPicasaの写真をダウンロードperlでPicasaウェブアルバム上の写真を取りたくなった。<br />
CPANでモジュールを探してみたところ、ちゃんとありました。<br />
<a href="http://search.cpan.org/~hanenkamp/Net-Google-PicasaWeb-0.11/">http://search.cpan.org/~hanenkamp/Net-Google-PicasaWeb-0.11/</a><br />
<br />
cpanでインストールして早速試してみる。<br />
<br />
アルバムごとにディレクトリを作って、その下に写真をダウンロードするスクリプト。<br />
<br />
<br />
<pre style="background-color: white;"><pre style="background-color: black; color: #d1d1d1;"><span style="color: #e66170; font-weight: bold;">use</span> <span style="color: #904050;">Net</span><span style="color: #d2cd86;">::</span><span style="color: #904050;">Google</span><span style="color: #d2cd86;">:</span><span style="color: #d2cd86;">:</span>PicasaWeb<span style="color: #b060b0;">;</span>
<span style="color: #e66170; font-weight: bold;">my</span> $service <span style="color: #d2cd86;">=</span> <span style="color: #904050;">Net</span><span style="color: #d2cd86;">::</span><span style="color: #904050;">Google</span><span style="color: #d2cd86;">:</span><span style="color: #d2cd86;">:</span>PicasaWeb<span style="color: #d2cd86;">-></span>new<span style="color: #b060b0;">;</span>
$service<span style="color: #d2cd86;">-></span>login<span style="color: #d2cd86;">(</span><span style="color: #00c4c4;">'YOUR USER ID'</span><span style="color: #d2cd86;">,</span><span style="color: #00c4c4;">'YOUR PASSWORD'</span><span style="color: #d2cd86;">)</span><span style="color: #b060b0;">;</span>
<span style="color: #e66170; font-weight: bold;">my</span> @albums <span style="color: #d2cd86;">=</span> $service<span style="color: #d2cd86;">-></span>list_albums<span style="color: #d2cd86;">(</span>user_id <span style="color: #d2cd86;">=></span> <span style="color: #00c4c4;">'YOUR USER ID'</span><span style="color: #d2cd86;">)</span><span style="color: #b060b0;">;</span>
<span style="color: #e66170; font-weight: bold;">foreach</span> <span style="color: #e66170; font-weight: bold;">my</span> $album <span style="color: #d2cd86;">(</span>@albums<span style="color: #d2cd86;">)</span> <span style="color: #b060b0;">{</span>
<span style="color: #e66170; font-weight: bold;">print</span> <span style="color: #00c4c4;">"Album ID: "</span><span style="color: #d2cd86;">,</span> $album<span style="color: #d2cd86;">-></span>entry_id<span style="color: #d2cd86;">,</span> <span style="color: #00c4c4;">"</span><span style="color: teal;">\n</span><span style="color: #00c4c4;">"</span><span style="color: #b060b0;">;</span>
<span style="color: #e66170; font-weight: bold;">mkdir</span> $album<span style="color: #d2cd86;">-></span>entry_id<span style="color: #b060b0;">;</span>
<span style="color: #e66170; font-weight: bold;">my</span> @photos <span style="color: #d2cd86;">=</span> $album<span style="color: #d2cd86;">-></span>list_media_entries<span style="color: #b060b0;">;</span>
<span style="color: #e66170; font-weight: bold;">foreach</span> <span style="color: #e66170; font-weight: bold;">my</span> $photo <span style="color: #d2cd86;">(</span>@photos<span style="color: #d2cd86;">)</span> <span style="color: #b060b0;">{</span>
<span style="color: #e66170; font-weight: bold;">my</span> $media_info <span style="color: #d2cd86;">=</span> $photo<span style="color: #d2cd86;">-></span>photo<span style="color: #b060b0;">;</span>
<span style="color: #e66170; font-weight: bold;">my</span> $main_photo <span style="color: #d2cd86;">=</span> $media_info<span style="color: #d2cd86;">-></span>content<span style="color: #b060b0;">;</span>
<span style="color: #e66170; font-weight: bold;">print</span> <span style="color: #00c4c4;">"Image URL: "</span><span style="color: #d2cd86;">,</span> $main_photo<span style="color: #d2cd86;">-></span>url<span style="color: #d2cd86;">,</span> <span style="color: #00c4c4;">"</span><span style="color: teal;">\n</span><span style="color: #00c4c4;">"</span><span style="color: #b060b0;">;</span>
<span style="color: #e66170; font-weight: bold;">my</span> $photo_data <span style="color: #d2cd86;">=</span> $main_photo<span style="color: #d2cd86;">-></span>fetch<span style="color: #b060b0;">;</span>
$main_photo<span style="color: #d2cd86;">-></span>fetch<span style="color: #d2cd86;">(</span> file <span style="color: #d2cd86;">=></span> $album<span style="color: #d2cd86;">-></span>entry_id <span style="color: #d2cd86;">.</span> <span style="color: #00c4c4;">"/"</span> <span style="color: #d2cd86;">.</span> $media_info<span style="color: #d2cd86;">-></span>title <span style="color: #d2cd86;">)</span><span style="color: #b060b0;">;</span>
<span style="color: #b060b0;">}</span>
<span style="color: #b060b0;">}</span></pre>
</pre>
<br />
<br />
<br />
アルバム名の方が分かりやすいけど、日本語を使いたくなかったのでアルバムIDを使っただけなので、アルバム名の方がよければ<br />
$album->title<br />
を使ってください。<br />
<br />
list_albumsで指定するuser_idは自分にアクセス権があれば他のユーザ名でもいけるらしい。試してないけど。AllBlackhttp://www.blogger.com/profile/06421415357994139295noreply@blogger.com0tag:blogger.com,1999:blog-8583627557863039448.post-22945692111079480292013-01-23T14:30:00.001+09:002013-01-23T14:37:29.037+09:00ALMiniumでbashのシンタックスハイライトredmine+backlogsの環境を構築するのに、ALMiniumを利用した。<br />
(自分でやってハマったせいもある)<br />
<a href="https://github.com/alminium/alminium">https://github.com/alminium/alminium</a><br />
<br />
便利になったなぁ…。<br />
インストールに時間はかかるけど、シェルスクリプト起動しただけでほとんど終わった。<br />
<br />
そのまま利用していたが、bashやperlのシンタックスハイライト(syntax highlight)が出来ない。<br />
よく使うのになぁ…。<br />
<br />
シンタックスハイライトにはcoderayというものを使っており、現在のバージョン(1.0.8)だと対応言語が少ない…。<br />
<a href="http://coderay.rubychan.de/">http://coderay.rubychan.de/</a><br />
<span style="background-color: white; color: #484848; font-family: Meiryo, 'Hiragino Kaku Gothic Pro', 'MS PGothic', Verdana, sans-serif; font-size: 12px;">1.1ではかなり増やす予定らしいが、現時点では使えない</span><br />
<br />
ultravioletという似たようなツールもあり、こっちの方が圧倒的に対応言語が多いのでこっちを使ってみたかったけど、redmineのプラグインは1.3までしか対応してないし、開発も2年前くらいで止まってしまっているような感じ…。<br />
一応、試してみたけどエラーが出てしまって、うまく行かない<br />
<br />
coderayでなんとかするしかないかなぁ~と探してみたところ、bashのcoderayスキャナーは発見。<br />
<a href="https://github.com/pejuko/coderay_bash" style="background-color: white; color: #0f65bc; font-family: Meiryo, 'Hiragino Kaku Gothic Pro', 'MS PGothic', Verdana, sans-serif; font-size: 12px; text-decoration: initial;">https://github.com/pejuko/coderay_bash</a><br />
<a href="http://odd-eyed-code.org/issues/31" style="background-color: white; color: #0f65bc; font-family: Meiryo, 'Hiragino Kaku Gothic Pro', 'MS PGothic', Verdana, sans-serif; font-size: 12px; text-decoration: initial;">http://odd-eyed-code.org/issues/31</a><br />
でも、どっちも動かなかった…。<br />
<br />
で、発見したのがこちら。<br />
<a href="http://www.redmine.org/boards/3/topics/29926" style="background-color: white; color: #0f65bc; font-family: Meiryo, 'Hiragino Kaku Gothic Pro', 'MS PGothic', Verdana, sans-serif; font-size: 12px; text-decoration: initial;">http://www.redmine.org/boards/3/topics/29926</a><br />
<br />
ここのbash.rbをダウンロードして、rubyの<span style="background-color: white; color: #484848; font-family: Meiryo, 'Hiragino Kaku Gothic Pro', 'MS PGothic', Verdana, sans-serif; font-size: 12px;">/coderay-1.0.8/lib/coderay/scanners</span>入れたら、あっさり動いた!<br />
<br />
自分の場合は、/usr/lib/ruby と /usr/lib64/ruby の両方があって、困惑したけど以下のスクリプト書いてパスを出させたらすぐ分かった。<br />
<br />
<pre style="background-color: #fafafa; border: 1px solid rgb(226, 226, 226); color: #484848; font-size: 12px; margin: 1em 1em 1em 1.6em; overflow-x: auto; overflow-y: hidden; padding: 8px; width: auto;"><code class="ruby syntaxhl">require <span class="string"><span class="delimiter" style="color: #4466aa;">'</span><span class="content" style="color: #4466aa;">rubygems</span><span class="delimiter" style="color: #4466aa;">'</span></span>
version = <span class="string"><span class="delimiter" style="color: #4466aa;">'</span><span class="content" style="color: #4466aa;">1.0.8</span><span class="delimiter" style="color: #4466aa;">'</span></span>
gem <span class="string"><span class="delimiter" style="color: #4466aa;">'</span><span class="content" style="color: #4466aa;">coderay</span><span class="delimiter" style="color: #4466aa;">'</span></span>, version
print <span class="constant" style="color: #225588; font-weight: bold;">Gem</span>.bin_path(<span class="string"><span class="delimiter" style="color: #4466aa;">'</span><span class="content" style="color: #4466aa;">coderay</span><span class="delimiter" style="color: #4466aa;">'</span></span>, <span class="string"><span class="delimiter" style="color: #4466aa;">'</span><span class="content" style="color: #4466aa;">coderay</span><span class="delimiter" style="color: #4466aa;">'</span></span>, version)</code></pre>
<br />
<br />
こんな感じで動きました!<br />
<br />
<pre style="background-color: #fafafa; border: 1px solid rgb(226, 226, 226); color: #484848; font-size: 12px; margin: 1em 1em 1em 1.6em; overflow-x: auto; overflow-y: hidden; padding: 8px; width: auto;"><code class="bash syntaxhl"><span class="CodeRay"><span class="comment" style="color: #338855;"># .bashrc</span>
<span class="comment" style="color: #338855;"># Source global definitions</span>
<span class="keyword" style="color: #993399; font-weight: bold;">if</span> [ -f /etc/bashrc ]; <span class="keyword" style="color: #993399; font-weight: bold;">then</span>
. /etc/bashrc
<span class="keyword" style="color: #993399; font-weight: bold;">fi</span>
<span class="comment" style="color: #338855;"># User specific aliases and functions</span></span></code></pre>
<br />
<br />
<br />AllBlackhttp://www.blogger.com/profile/06421415357994139295noreply@blogger.com0tag:blogger.com,1999:blog-8583627557863039448.post-28440746424982726892012-11-09T16:07:00.001+09:002012-11-09T16:09:11.723+09:00Javaから表示灯を操作するJavaからPatlite社やアイエスアイ社の警子ちゃんを操作するクラスを書いたので、公開。
SNMPでやってます(rshでも書いたけど、Linuxから動かしたらPermission deniedになってしまったので)。<br />
<a href="https://github.com/doitnow420/snmp-tool">https://github.com/doitnow420/snmp-tool </a><br />
<br />
あ、snmp4jのフリー版使ってます。<br />
<a href="http://www.snmp4j.org/">http://www.snmp4j.org/</a><br />
<br />
赤、黄色、緑とブザーしか対応してません。<br />
それぞれにON/OFFのステータスを持ってて、状態変化がなければSNMPは発行しない。<br />
秒数対応もなし。
<br />
いろいろ足りないと思うので、適当にひな形というかサンプル程度と思って使ってください。AllBlackhttp://www.blogger.com/profile/06421415357994139295noreply@blogger.com0tag:blogger.com,1999:blog-8583627557863039448.post-63949369758365523102012-08-23T17:50:00.000+09:002013-03-06T17:52:24.351+09:00Ciscoの設定ファイルを自動SVN管理Ciscoの設定をいじって、あとあと「しまった!」と思うことがあったりする。
何をどう変えたか分からなくなってしまったり…。
変更ごとにtftpでローカルに落として、自分で世代管理して、とかやってたけど、やっぱり面倒。
世代管理はSVNに任せられるから、リポジトリを作ってみた。<br />
そうすると欲が出てきて、なんとか自動的にできないかなぁ、と思ってきた。<br />
Linuxサーバからなんらかの方法でconfigが取れれば、あとはSVNのワーキングディレクトリに突っ込めばどうとでもなる。
ここがどうにかならないか、と調べて分かったのが、PerlのNet::Telnet::Ciscoモジュール。
Perlで、Ciscoデバイスにtelnet接続し、任意のコマンドを実行できるモジュールらしい。
これで入って、show running-config でも show startup-config でも実行すれば求めるものは取れる。
ということで、簡単なPerlスクリプトを書いてみた。
とりあえずget_config.plと命名。<br />
<br />
<pre class="prettyprint"><pre style="background-color: black; color: #d1d1d1;"><span style="color: #9999a9;">#!</span><span style="color: #007997;">/usr/bin/perl</span>
<span style="color: #9999a9;"># オプション解析モジュールのロード</span>
<span style="color: #e66170; font-weight: bold;">use</span> <span style="color: #904050;">Getopt</span><span style="color: #d2cd86;">::</span><span style="color: #904050;">Long</span><span style="color: #b060b0;">;</span>
<span style="color: #9999a9;"># Ciscoコマンド操作モジュールのロード</span>
<span style="color: #e66170; font-weight: bold;">use</span> <span style="color: #904050;">Net</span><span style="color: #d2cd86;">::</span><span style="color: #904050;">Telnet</span><span style="color: #d2cd86;">:</span><span style="color: #d2cd86;">:</span><span style="color: #904050;">Cisco</span><span style="color: #b060b0;">;</span>
<span style="color: #9999a9;"># IPアドレス</span>
<span style="color: #e66170; font-weight: bold;">my</span> $host <span style="color: #d2cd86;">=</span> <span style="color: #00c4c4;">''</span><span style="color: #b060b0;">;</span>
<span style="color: #9999a9;"># ユーザ名</span>
<span style="color: #e66170; font-weight: bold;">my</span> $username <span style="color: #d2cd86;">=</span> <span style="color: #00c4c4;">''</span><span style="color: #b060b0;">;</span>
<span style="color: #9999a9;"># vtyログインパスワード</span>
<span style="color: #e66170; font-weight: bold;">my</span> $password <span style="color: #d2cd86;">=</span> <span style="color: #00c4c4;">''</span><span style="color: #b060b0;">;</span>
<span style="color: #9999a9;"># ENABLEモード パスワード</span>
<span style="color: #e66170; font-weight: bold;">my</span> $epassword <span style="color: #d2cd86;">=</span> <span style="color: #00c4c4;">''</span><span style="color: #b060b0;">;</span>
GetOptions<span style="color: #d2cd86;">(</span> <span style="color: #00c4c4;">'host=s'</span> <span style="color: #d2cd86;">=</span><span style="color: #d2cd86;">></span> <span style="color: #d2cd86;">\</span>$host<span style="color: #d2cd86;">,</span> <span style="color: #00c4c4;">'username=s'</span> <span style="color: #d2cd86;">=</span><span style="color: #d2cd86;">></span> <span style="color: #d2cd86;">\</span>$username<span style="color: #d2cd86;">,</span> <span style="color: #00c4c4;">'password=s'</span> <span style="color: #d2cd86;">=</span><span style="color: #d2cd86;">></span> <span style="color: #d2cd86;">\</span>$password<span style="color: #d2cd86;">,</span> <span style="color: #00c4c4;">'epassword=s'</span> <span style="color: #d2cd86;">=</span><span style="color: #d2cd86;">></span> <span style="color: #d2cd86;">\</span>$epassword <span style="color: #d2cd86;">)</span><span style="color: #b060b0;">;</span>
<span style="color: #9999a9;"># Cisco.pm用オブジェクトの作成 -> ルータに接続</span>
<span style="color: #e66170; font-weight: bold;">my</span> $obj_Session<span style="color: #d2cd86;">=</span> <span style="color: #904050;">Net</span><span style="color: #d2cd86;">::</span><span style="color: #904050;">Telnet</span><span style="color: #d2cd86;">:</span><span style="color: #d2cd86;">:</span><span style="color: #904050;">Cisco</span><span style="color: #d2cd86;">-></span>new<span style="color: #d2cd86;">(</span> Host <span style="color: #d2cd86;">=></span> $host <span style="color: #d2cd86;">)</span><span style="color: #b060b0;">;</span>
<span style="color: #9999a9;"># vtyパスワードを用いてログイン</span>
$obj_Session<span style="color: #d2cd86;">-></span>login<span style="color: #d2cd86;">(</span>$username<span style="color: #d2cd86;">,</span> $password<span style="color: #d2cd86;">,</span> <span style="color: #d2cd86;">)</span><span style="color: #b060b0;">;</span>
<span style="color: #9999a9;"># enable</span>
$obj_Session<span style="color: #d2cd86;">-></span>enable<span style="color: #d2cd86;">(</span> $epassword <span style="color: #d2cd86;">)</span><span style="color: #b060b0;">;</span>
<span style="color: #9999a9;"># コマンドの実行</span>
@cmd_output <span style="color: #d2cd86;">=</span> $obj_Session<span style="color: #d2cd86;">-></span>cmd<span style="color: #d2cd86;">(</span><span style="color: #00c4c4;">'show running-config'</span><span style="color: #d2cd86;">)</span><span style="color: #b060b0;">;</span>
<span style="color: #9999a9;"># コマンド実行結果のアウトプット</span>
<span style="color: #e66170; font-weight: bold;">print</span> <span style="color: #00c4c4;">"Last command: <"</span><span style="color: #d2cd86;">,</span> $obj_Session<span style="color: #d2cd86;">-></span>last_cmd<span style="color: #d2cd86;">,</span> <span style="color: #00c4c4;">"></span><span style="color: teal;">\n</span><span style="color: #00c4c4;">"</span><span style="color: #b060b0;">;</span>
<span style="color: #e66170; font-weight: bold;">print</span> <span style="color: #00c4c4;">"Last error: <"</span><span style="color: #d2cd86;">,</span> $obj_Session<span style="color: #d2cd86;">-></span>errmsg<span style="color: #d2cd86;">,</span> <span style="color: #00c4c4;">"></span><span style="color: teal;">\n</span><span style="color: #00c4c4;">"</span><span style="color: #b060b0;">;</span>
<span style="color: #e66170; font-weight: bold;">print</span> <span style="color: #00c4c4;">"Cmd output: <"</span><span style="color: #d2cd86;">,</span> @cmd_output<span style="color: #d2cd86;">,</span> <span style="color: #00c4c4;">"></span><span style="color: teal;">\n</span><span style="color: #00c4c4;">"</span><span style="color: #b060b0;">;</span>
<span style="color: #e66170; font-weight: bold;">exit</span> <span style="color: #00a800;">0</span><span style="color: #b060b0;">;</span></pre>
</pre>
./get<em>config.pl -h <ホスト名> -p <パスワード> -e <特権モードパスワード>
で、sh run 結果を返してくれる。
まぁ、最初と最後に若干情報が出るけど…。
</em><br />
<blockquote class="tr_bq">
<em>$ ./get_</em>config.pl -h 172.xxx.xxx.xxx -p password -e enable_password<br />Last command:<br /> <show running-config="">Last error: <></show><show running-config="">Cmd output:</show>Current configuration : 18623 bytes
!
! Last configuration change at 11:58:40 JST Fri Aug 17 2012
! NVRAM config last updated at 11:05:37 JST Sat Aug 11 2012
!
~(省略)~
end<br />></blockquote>
ここからシェルスクリプトの出番。
最初3行と最後1行は不要なので、続くシェルスクリプトで削る。
あと、やってみると分かるけどntp clock-periodはよく変わるので、有用な情報とは言えないので削る。
Ciscoデバイスの名前、IPアドレス、ログインパスワード、特権モードパスワードをスペース区切りでテキストファイルに保存。
cisco_file.txtとしよう。
こんな感じ。<br />
<pre><code>
</code><blockquote class="tr_bq">
<code>cisco_router1 172.xxx.xxx.xxx password1 enable_password1</code><code>cisco_router2 172.yyy.yyy.yyy password2 enable_password2</code></blockquote>
</pre>
SVNのワークディレクトリを作っておく
とりあえず<br />
/home/foo/networks/trunk <br />
にした<br />
シェルスクリプトを実行すれば、指定したCiscoデバイスの設定ファイルを取って、SVNのワークディレクトリに書き込み。
で、SVNコミットさせる。
違いがあれば、コミットするし、なければコミットしない。
とそんな仕様のスクリプト。<br />
<pre class="prettyprint"><code>
<svn id="id"><svn><pre style="background-color: #f6f8ff; color: #000020;"><span style="color: #595979;">#!</span><span style="color: #007997;">/bin/bash</span>
<span style="color: #595979;"># Cisco機器のstartup-configファイルを取得し、リポジトリと違っていればコミットしておく</span>
<span style="color: #007d45;">REPO</span><span style="color: #308080;">=</span>http<span style="color: #308080;">:</span><span style="color: #40015a;">/</span><span style="color: #40015a;">/</span><span style="color: #e34adc;"><</span>リポジトリ<span style="color: #e34adc;">></span><span style="color: #40015a;">/networks/trunk</span>
<span style="color: #007d45;">WORK_DIR</span><span style="color: #308080;">=</span><span style="color: #40015a;">/home/foo/networks/trunk</span>
<span style="color: #007d45;">PNAME</span><span style="color: #308080;">=</span>$<span style="color: #406080;">(</span> basename <span style="color: #007d45;">$0</span> <span style="color: #406080;">)</span>
<span style="color: #595979;"># Cisco機器の名前、IPアドレス、ログインパスワード、Enableパスワードをスペース区切りで</span>
<span style="color: #007d45;">CISCO_FILE</span><span style="color: #308080;">=</span><span style="color: #40015a;">/home/foo/cisco_file.txt</span>
get_config<span style="color: #308080;">()</span>
<span style="color: #406080;">{</span>
<span style="color: #7779bb; font-weight: bold;">typeset</span> <span style="color: #007d45;">HOSTNAME</span><span style="color: #308080;">=</span><span style="color: #007d45;">$1</span>
<span style="color: #7779bb; font-weight: bold;">typeset</span> <span style="color: #007d45;">HOST</span><span style="color: #308080;">=</span><span style="color: #007d45;">$2</span>
<span style="color: #7779bb; font-weight: bold;">typeset</span> <span style="color: #007d45;">PASSWD</span><span style="color: #308080;">=</span><span style="color: #007d45;">$3</span>
<span style="color: #7779bb; font-weight: bold;">typeset</span> <span style="color: #007d45;">ENABLE_PASSWD</span><span style="color: #308080;">=</span><span style="color: #007d45;">$4</span>
<span style="color: #200080; font-weight: bold;">.</span><span style="color: #40015a;">/get_config.pl</span> -h <span style="color: #007d45;">$HOST</span> <span style="color: #44aadd;">-p</span> <span style="color: #007d45;">$PASSWD</span> <span style="color: #44aadd;">-e</span> <span style="color: #007d45;">$ENABLE_PASSWD</span> <span style="color: #e34adc;">|</span> <span style="color: #7779bb; font-weight: bold;">sed</span> <span style="color: #1060b6;">'/^ntp clock-period/d'</span> <span style="color: #e34adc;">|</span> <span style="color: #7779bb; font-weight: bold;">sed</span> <span style="color: #44aadd;">-e</span> <span style="color: #1060b6;">'1,3d'</span> <span style="color: #e34adc;">|</span> <span style="color: #7779bb; font-weight: bold;">sed</span> <span style="color: #44aadd;">-e</span> <span style="color: #1060b6;">'$d'</span> &gt<span style="color: #406080;">;</span> <span style="color: #007d45;">$WORK_DIR</span><span style="color: #40015a;">/</span><span style="color: #007d45;">${</span>HOSTNAME<span style="color: #007d45;">}</span><span style="color: #200080; font-weight: bold;">.</span>config
<span style="color: #406080;">}</span>
<span style="color: #200080; font-weight: bold;">while</span> <span style="color: #7779bb; font-weight: bold;">read</span> LINE
<span style="color: #200080; font-weight: bold;">do</span>
get_config <span style="color: #007d45;">$LINE</span>
<span style="color: #200080; font-weight: bold;">done</span> &lt<span style="color: #406080;">;</span> <span style="color: #007d45;">$CISCO_FILE</span>
<span style="color: #200080; font-weight: bold;">if</span> <span style="color: #308080;">[</span> <span style="color: #1060b6;">"</span><span style="color: #007d45;">$1</span><span style="color: #1060b6;">"</span> <span style="color: #44aadd;">!=</span> <span style="color: #1060b6;">""</span> <span style="color: #308080;">]</span>
<span style="color: #200080; font-weight: bold;">then</span>
<span style="color: #7779bb; font-weight: bold;">echo</span> <span style="color: #1060b6;">"You can commit by $ svn commit -m </span><span style="color: #0f69ff;">\"</span><span style="color: #1060b6;">comments</span><span style="color: #0f69ff;">\"</span><span style="color: #1060b6;"> </span><span style="color: #007d45;">$WORK_DIR</span><span style="color: #1060b6;">"</span>
<span style="color: #200080; font-weight: bold;">else</span>
svn commit --username --password -m <span style="color: #1060b6;">"Change detected. Automatically commited by </span><span style="color: #007d45;">$PNAME</span><span style="color: #1060b6;">"</span> <span style="color: #007d45;">$WORK_DIR</span>
fi</pre>
</svn></svn></code></pre>
これをcheck<em>cisco</em>config.shと命名して、crontabで毎晩23:30とかに仕込んでおけば、その日の変更は必ずコミットされる。<br />
<blockquote>
30 23 * * * /home/foo/check<em>cisco</em>config.sh > /dev/null</blockquote>
コメントは実態を反映していないけど、「忘れた!」よりマシという考え。<br />
手動実行でちゃんとコメント付けてコミットしたいときは、<br />
./check<em>cisco</em>config.sh manual <br />
とか、とにかく引数を与えてやれば設定ファイルだけをとってくるようになってます。AllBlackhttp://www.blogger.com/profile/06421415357994139295noreply@blogger.com0tag:blogger.com,1999:blog-8583627557863039448.post-80408613914191497522012-08-21T15:12:00.002+09:002013-06-05T08:34:25.367+09:00TeraTerm Menuのリストを移行<br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">TeraTerm Menuを便利に使ってます。</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">サーバ情報がそれなりにあるので、これはかなり便利。</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">なんだけど、PCを移行しようとしたらレジストリに保存していることが分かった。</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">レジストリをエクスポートしてインポートすれば行けるのかもしれないが、あんまりやりたくないなぁ…。</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">調べていたら、ttpmenu.iniをttpmenu.exeと同じディレクトリに作れば、テキストファイルで管理できる、とあった。</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">「それは便利じゃん!」と思ったが、もう少し調べると、それをやっちゃったら設定全部消える。</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><a href="http://es.sourceforge.jp/ticket/browse.php?tid=11329&group_id=1412">http://es.sourceforge.jp/ticket/browse.php?tid=11329&group_id=1412</a></span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><a href="http://www.trapon.jp/log/201205/teraterm_menu.html">http://www.trapon.jp/log/201205/teraterm_menu.html</a></span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">まだサーバ情報何も入れていない新しいPCでttpmenu.iniを作成。</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">TeraTerm Menuを起動して、適当に情報を入れてみる。</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">で、ttpmenu.iniを確認。</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">古いPCのレジストリも確認。</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">当たり前だけど、フォーマットはほぼ同じ。</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">あ、これ変換スクリプトとか書けそうかも、と思い、作ってみました。</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">レジストリからttpmenu.iniへの変換になります。</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">1. regeditで「HKEY_CURREN_USER\Software\ShinpeiTools\TTermMenu」以下をエクスポート(仮にttermmenu.regとする)</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">2. シェルスクリプトが動かせる環境で以下を作成(仮にmake_ttpmenu.shと命名)</span><br />
<pre class="prettyprint"><pre style="background-color: #f6f8ff; color: #000020;"><span style="color: #595979;">#!</span><span style="color: #007997;">/bin/bash</span>
<span style="color: #200080; font-weight: bold;">while</span> <span style="color: #7779bb; font-weight: bold;">read</span> LINE
<span style="color: #200080; font-weight: bold;">do</span>
<span style="color: #7779bb; font-weight: bold;">echo</span> <span style="color: #007d45;">$LINE</span> <span style="color: #e34adc;">|</span>
<span style="color: #7779bb; font-weight: bold;">sed</span> s<span style="color: #40015a;">/</span><span style="color: #0f69ff;">\"</span><span style="color: #40015a;">/</span><span style="color: #40015a;">/g</span> <span style="color: #e34adc;">|</span>
<span style="color: #7779bb; font-weight: bold;">sed</span> s<span style="color: #40015a;">/</span><span style="color: #308080;">:</span><span style="color: #40015a;">/</span><span style="color: #40015a;">/g</span> <span style="color: #e34adc;">|</span>
<span style="color: #7779bb; font-weight: bold;">sed</span> <span style="color: #1060b6;">"</span><span style="color: #200080; font-weight: bold;">s</span><span style="color: maroon;">/</span><span style="color: #1060b6;">,</span><span style="color: maroon;">/</span><span style="color: #1060b6;"> </span><span style="color: maroon;">/</span><span style="color: #200080; font-weight: bold;">g</span><span style="color: #1060b6;">"</span> <span style="color: #e34adc;">|</span>
<span style="color: #7779bb; font-weight: bold;">sed</span> <span style="color: #40015a;">s/dword</span><span style="color: #40015a;">/</span><span style="color: #40015a;">/g</span> <span style="color: #e34adc;">|</span>
<span style="color: #7779bb; font-weight: bold;">sed</span> <span style="color: #40015a;">s/hex</span><span style="color: #40015a;">/</span><span style="color: #40015a;">/g</span>
<span style="color: #200080; font-weight: bold;">done</span> <span style="color: #e34adc;"><</span> <span style="color: #e34adc;"><</span><span style="color: #406080;">(</span> nkf --utf8 <span style="color: #007d45;">$1</span> <span style="color: #e34adc;">|</span> <span style="color: #7779bb; font-weight: bold;">sed</span> <span style="color: #44aadd;">-e</span> <span style="color: #1060b6;">'1,2d'</span> <span style="color: #e34adc;">|</span> <span style="color: #7779bb; font-weight: bold;">sed</span> <span style="color: #1060b6;">"</span><span style="color: #200080; font-weight: bold;">s</span><span style="color: maroon;">/</span><span style="color: #1060b6;">HKEY_CURRENT_USER</span><span style="color: #0f69ff;">\\</span><span style="color: #007d45;">\S</span><span style="color: #1060b6;">oftware</span><span style="color: #0f69ff;">\\</span><span style="color: #007d45;">\S</span><span style="color: #1060b6;">hinpeiTools</span><span style="color: #0f69ff;">\\</span><span style="color: #0f69ff;">\/</span><span style="color: maroon;">/</span><span style="color: #1060b6;">g" | sed "s</span><span style="color: maroon;">/</span><span style="color: #1060b6;">TTermMenu\\\//g"</span> <span style="color: #406080;">)</span></pre>
</pre>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">3. 上記スクリプトにエクスポートした*.regファイルを与えると、標準出力に吐き出すので、リダイレクトさせてttpmenu.iniを作成</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">$ make_ttpmenu.sh ttermmenu.reg > ttpmenu.ini</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">4. これを新しいPCのttpmenu.exeと同じフォルダに置けば移行完了。</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">見ての通り、適当に作ったので「うまく引き継がれていない」等あるかと思うけど、自己責任でお願いします。</span>AllBlackhttp://www.blogger.com/profile/06421415357994139295noreply@blogger.com0tag:blogger.com,1999:blog-8583627557863039448.post-41622480663180940512012-08-17T16:58:00.000+09:002012-08-17T16:58:18.111+09:00EIGRPあれこれ <br />
EIGRPで分かったこと<br />
詳しい人から見たら当たり前なんだろうけど…。<br />
<br />
<br />
<ul>
<li>インターフェイスの遅延と帯域幅<br />EIGRPのデフォルトでメトリック計算に使われる。<br />
誤解していたんだが、「遅延」は実際のパケットの到達時間とかで自動的に割り出してくれるものではない。<br />
両方とも静的。<br />
管理者の裁量である程度変えてもよさそう。<br />
</li>
<li>VLAN上のインターフェイスの遅延と帯域幅<br />VLAN上にインターフェイスを乗っけていたら、いくらインターフェイスの帯域幅と遅延をいじってもメトリックが変わらなかった。<br />
なんで?と調べてみたら、こういう場合はインターフェイスをいじっても仕方ないのね。<br />
該当のVLANを変えないと。<br />
int vlan <id></id><br />
でdelay 500<br />
とかやったらすぐに反映された。<br />
</li>
</ul>
<br />
<br />
AllBlackhttp://www.blogger.com/profile/06421415357994139295noreply@blogger.com0tag:blogger.com,1999:blog-8583627557863039448.post-9496813147251557302012-08-17T16:37:00.003+09:002012-08-17T16:46:21.644+09:00Nagios備忘録<br />
Nagiosを3.0rc3から3.2.3にした。<br />
これでも古いけど、rpmが見つからなかったのでとりあえず。<br />
<br />
<br />
<ul>
<li>設定ファイル<br />3.0:<br />
/usr/local/nagios/etc/nagios.cfg<br />
/usr/local/nagios/etc/minimal.cfg<br />
(やり方によるんだろうが、自分はminimal.cfgで設定してた)<br /><br />
3.2.3:<br />
/etc/nagios/nagios.cfg<br />
/etc/nagios/objects/以下<br />
</li>
<li>プラグイン<br />
3.0:<br />
/usr/local/nagios/libexec<br />
<br />
3.2.3:<br />
/usr/lib/nagios/plugins<br />
</li>
<li>ホスト追加<br />
<br />
/etc/nagios/objects/ホスト名.cfg で<br />
define host {...}<br />
を埋める<br /><br />
</li>
<li>サービス追加<br />/usr/lib/nagios/plugins に新サービスとなるプログラム、スクリプトを作成<br />
/etc/nagios/objects/commands.cfg で<br />
define command {...}<br />
を埋める<br />
<br />
</li>
<li>追加対象のホストのファイル<br />/etc/nagios/nagios.cfg で<br />
cfg_file=/etc/nagios/objects/ホスト名.cfg<br />
を追加<br />
<br />
</li>
<li>設定ファイルのチェック<br />/usr/bin/nagios -v /etc/nagios/nagios.cfg<br />
でチェック可能<br />
</li>
<li>メール通知先の変更<br />/etc/nagios/objects/contacts.cfg で<br />
email nagios@localhost<br />
部分を任意のアドレスに変更<br />
</li>
<li>通知メールの文面変更(メール本文)<br />/etc/nagios/objects/commands.cfg の<br />
'notify-service-by-email'のcommand_line部分を変更</li>
</ul>
<br />
デフォルトでは、Additional Infoだとブラウザで見たときに見える詳細が見えない。<br />
わざわざ参考になる情報を出すようにスクリプトを組んだのに、通知メール→ブラウザで確認するんじゃワンアクションもったいない。<br />
なので、ここを変えてみる。<br />
<blockquote class="tr_bq">
command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$\n<span style="color: red;">\n$LONGSERVICEOUTPUT</span>" | /bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$</blockquote>
<br />
<span style="color: red;">$LONGSERVICEOUTPUT</span>を足しただけ。<br />
<br />
<br />
こちらが参考になった。<br />
<a href="http://www.marsandares.jp/tools/nagios-config.html">http://www.marsandares.jp/tools/nagios-config.html</a>AllBlackhttp://www.blogger.com/profile/06421415357994139295noreply@blogger.com0tag:blogger.com,1999:blog-8583627557863039448.post-51654778104105919112012-02-17T16:47:00.000+09:002012-02-17T16:47:26.055+09:00BitNami Redmineの自動起動<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">便利だけどインストールまでにいろいろすることが多いRedmine。</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">その面倒なところを全部やってくれるのでBitNamiでインストールしてみた。</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">メニューで選択していくだけなんで、ものすごく簡単。</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">「こりゃあ快適~」なんて悦に入っていたけど、サーバを再起動したら動いてない…。</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">「どこから起動するんだっけ?」と思い、調べてみると</span><br />
<blockquote class="tr_bq">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"># /opt/redmine-<バージョン>/ctlscript.sh start</span></blockquote>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">でOK。</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">でも、毎回起動するのメンドイなぁ。</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">ctlscript.shを/etc/init.d/に持ってきてchkconfig -addでうまく行くか?と思ったけど、chkconfigから「サポートしてない形式」、と言われてしまった。</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">ってことでさらに調べてみるとここにあたった。</span><br />
<a href="http://bitnami.org/article/how-to-install-services-on-linux"><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">http://bitnami.org/article/how-to-install-services-on-linux</span></a><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">上の例はdrupalだけど、redmineでも他のでも応用可能なはず。</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span><br />
<blockquote class="tr_bq">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"># cp /opt/redmine-<バージョン>/ctlscript.sh /etc/init.d/bitnami-redmine</span></blockquote>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">としただけではダメで、ちょっと編集しないといけないらしい。</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">最初の4行がこうなるように</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span><br />
<blockquote class="tr_bq">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">#!/bin/sh</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">#</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"># chkconfig: 2345 80 30</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"># description: BitNami Service</span></blockquote>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">runラベルが2345のときは起動して、起動の優先度を80、停止の優先度を30にしてくれるはず。</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">これで</span><br />
<blockquote class="tr_bq">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"># chkconfig --add bitnami-redmine</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"># chkconfig --list bitnami-redmine</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">bitnami-redmine 0:off 1:off 2:on 3:on 4:on 5:on 6:off</span></blockquote>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">素晴らしい!</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">再起動してみても、ちゃんと自動起動してくれました!</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">一応、/etc/rc.d/rc3.dを見てみるとちゃんとS80で動いてる</span><br />
<blockquote class="tr_bq">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"># ll /etc/rc.d/rc3.d/*bitnami*</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">lrwxrwxrwx 1 root root 25 2月 17 16:33 /etc/rc.d/rc3.d/S80bitnami-redmine -> ../init.d/bitnami-redmine</span></blockquote>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">さらにrc0.dを見るとK30となってました</span><br />
<blockquote class="tr_bq">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"># ll /etc/rc.d/rc0.d/*bitnami*</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">lrwxrwxrwx 1 root root 25 2月 17 16:33 /etc/rc.d/rc0.d/K30bitnami-redmine -> ../init.d/bitnami-redmine</span></blockquote>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">これで楽々!</span><br />
<div>
<br /></div>AllBlackhttp://www.blogger.com/profile/06421415357994139295noreply@blogger.com0tag:blogger.com,1999:blog-8583627557863039448.post-48979530395815294182012-02-14T11:53:00.002+09:002013-01-24T08:41:47.131+09:00HP-UXのシェルスクリプトで親プロセスのIDを取得する<br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">GNUコマンドがふんだんに使えるLinuxが好きだけど、職務上HP-UXも使ったりする。</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">シェルスクリプトで親プロセスを取得したくて、いろいろ調べた時に分かったのでちょっと書いておきます。</span><br />
<br />
<br />
<pre style="background-color: #f6f8ff; color: #000020;"><span style="color: #595979;">#!</span><span style="color: #007997;">/bin/sh</span>
<span style="color: #007d45;">PID</span><span style="color: #308080;">=</span><span style="color: #007d45;">$$</span>
<span style="color: #007d45;">PPID</span><span style="color: #308080;">=</span>$<span style="color: #406080;">(</span> <span style="color: #007d45;">UNIX95</span><span style="color: #308080;">=</span><span style="color: #1060b6;">""</span> ps <span style="color: #44aadd;">-o</span> ppid <span style="color: #44aadd;">-p</span> <span style="color: #007d45;">$PID</span> <span style="color: #e34adc;">|</span> tail -<span style="color: #008c00;">1</span> <span style="color: #406080;">)</span>
<span style="color: #007d45;">PCOMM</span><span style="color: #308080;">=</span>$<span style="color: #406080;">(</span> <span style="color: #007d45;">UNIX95</span><span style="color: #308080;">=</span><span style="color: #1060b6;">""</span> ps <span style="color: #44aadd;">-o</span> comm <span style="color: #44aadd;">-p</span> <span style="color: #007d45;">$PPID</span> <span style="color: #e34adc;">|</span> tail -<span style="color: #008c00;">1</span> <span style="color: #406080;">)</span>
<span style="color: #7779bb; font-weight: bold;">echo</span> PID<span style="color: #308080;">:</span> <span style="color: #007d45;">$PID</span>
<span style="color: #7779bb; font-weight: bold;">echo</span> PPID<span style="color: #308080;">:</span> <span style="color: #007d45;">$PPID</span>
<span style="color: #7779bb; font-weight: bold;">echo</span> PPCOM<span style="color: #308080;">:</span> <span style="color: #007d45;">$PCOMM</span></pre>
<br />
<br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">実行結果</span><br />
<blockquote class="tr_bq">
% sh ./test.sh<br />
PID: 27324<br />
PPID: 25107<br />
PPCOM: -zsh</blockquote>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">と一致しているので大丈夫でしょう。</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">分かりにくいのはここ。</span><br />
<blockquote class="tr_bq">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">PPID=$( UNIX95="" ps -o ppid -p $PID | tail -1 )</span></blockquote>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">というのもpsもmanを見てみると、-o format とあるものの「UNIX標準の構文」の部分。</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">英語だとXPG4の部分。</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">普通に</span><br />
<blockquote class="tr_bq">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">ps -o pid</span></blockquote>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">としても</span><br />
<blockquote class="tr_bq">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">ps: オプションが正しくありません。-- o</span></blockquote>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">とか出てくる。</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">なにこれ、どうすんの?と思ったら、ここを見つけた。</span><br />
<a href="http://d.hatena.ne.jp/cartooh/20050611"><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">http://d.hatena.ne.jp/cartooh/20050611</span></a><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">要は環境変数UNIX95がセットしてあればいいらしい。値はダミーでもいいみたい。</span><br />
<blockquote class="tr_bq">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">% UNIX95="dummy" ps -o pid<br /> PID<br />26857<br />25107</span></blockquote>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">…やっぱりLinuxが好きだなぁ~。</span><br />
<div>
<br /></div>
AllBlackhttp://www.blogger.com/profile/06421415357994139295noreply@blogger.com0tag:blogger.com,1999:blog-8583627557863039448.post-14919174679389133162012-02-08T09:59:00.000+09:002012-02-08T16:15:59.466+09:00DELL PowerEdgeのRAID状態を監視<br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">RAID1で組んでいたDELLのLinuxサーバで、ディスクが片方死んでいたのに気付かず、片肺のまま放置されていた。</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">再起動をきっかけに死んでいたディスクが一時的に復活し、数週間前の状態に両方のディスクを同期してくれた…。</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">つまりは、ここ数週間にあった更新が全て消えた…。</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">バックアップは取っていたけど、一世代前しかなくて、さらにそれも同期された後に気付いた。</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">どうしようもない…。</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">実話だけど、二度とこんなことがないようにバックアップ先を複数にして、さらに世代化した。</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">で、RAIDが死んでたのに気付かない、なんてことがないように監視をしたい。</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">DELLサーバなので、Open Manage Server Administratorを使えばいいらしい。</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">参考にしたのはこの辺り。</span><br />
<a href="http://d.hatena.ne.jp/kno1020/20081007/1223387709"><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">http://d.hatena.ne.jp/kno1020/20081007/1223387709</span></a><br />
<a href="http://satospo.sakura.ne.jp/blog_archives/tech/hardware/r210_omsa.html"><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">http://satospo.sakura.ne.jp/blog_archives/tech/hardware/r210_omsa.html</span></a><br />
<a href="http://linux.dell.com/wiki/index.php/Repository/OMSA"><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">http://linux.dell.com/wiki/index.php/Repository/OMSA</span></a><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">yumでインストールするために、リポジトリを追加</span><br />
<blockquote class="tr_bq">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"># wget -q -O - http://linux.dell.com/repo/hardware/latest/bootstrap.cgi | bash</span></blockquote>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">コマンドだけあればいいので、srvadmin-baseとsrvadmin-storageservicesをyumでインストール</span><br />
<blockquote class="tr_bq">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"># yum install srvadmin-base srvadmin-storageservices</span></blockquote>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">インストール完了後、勇んでコマンドを打ってみる</span><br />
<blockquote class="tr_bq">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"># omreport<br />-bash: omreport: command not found</span></blockquote>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">「あれ?」と思い、ログを見たら</span><br />
<blockquote class="tr_bq">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"> **********************************************************<br /> After the install process completes, you may need<br /> to log out and then log in again to reset the PATH<br /> variable to access the Dell OpenManage CLI utilities<br /> **********************************************************</span></blockquote>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">としっかり書いてありました。</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">一回ログアウトして、ログインし直したら、ちゃんとUsageが出た。</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">よしよし、いい調子。</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">試しにちょっとやってみよう。</span><br />
<blockquote class="tr_bq">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"># omreport chassis memory<br />Memory Information<br />Error : Memory object not found</span></blockquote>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">え、メモリが見えないって…。</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">他にもポートもプロセッサもやってみたけど、どれもnot found。</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">CentOSのバージョン?PowerEdge T100はサポートされない?インストールの問題?とかいろいろ考えたけど、ちょっと調べてみたら、OMSAが起動してない、と。</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">では、OMSAを起動する方法は?と調べたところ、以下でいいらしい</span><br />
<blockquote class="tr_bq">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"># /opt/dell/srvadmin/sbin/srvadmin-services.sh start<br />Starting Systems Management Device Drivers:<br />Starting dcdbas: [ OK ]<br />Starting dell_rbu: [ OK ]<br />Starting Systems Management Data Engine:<br />Starting dsm_sa_datamgrd: [ OK ]<br />Starting dsm_sa_eventmgrd: [ OK ]<br />Starting DSM SA Shared Services: [ OK ]<br />libstdc++.so.5 is required to run the Inventory Collector.</span></blockquote>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">あら、何かエラーだ。</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">libstdc++がないならインストールしてやればいいだけか。</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span><br />
<blockquote class="tr_bq">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"># yum install compat-libstdc++-33</span></blockquote>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">サービスの再起動</span><br />
<blockquote class="tr_bq">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"># /opt/dell/srvadmin/sbin/srvadmin-services.sh restart<br />Shutting down DSM SA Shared Services: [ OK ]<br /><br />Stopping Systems Management Data Engine:<br />Stopping dsm_sa_eventmgrd: [ OK ]<br />Stopping dsm_sa_datamgrd: [ OK ]<br />Stopping Systems Management Device Drivers:<br />Stopping dcdbas: [ OK ]<br />Stopping dell_rbu: [ OK ]<br />Starting Systems Management Device Drivers:<br />Starting dcdbas: [ OK ]<br />Starting dell_rbu: [ OK ]<br />Starting Systems Management Data Engine:<br />Starting dsm_sa_datamgrd: [ OK ]<br />Starting dsm_sa_eventmgrd: [ OK ]<br />Starting DSM SA Shared Services: [ OK ]</span></blockquote>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">エラーもなし。毎回ここで起動するのも面倒。</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">あ、enableすればそれでいいらしい</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"></span><br />
<blockquote class="tr_bq">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"># /opt/dell/srvadmin/sbin/srvadmin-services.sh enable<br />instsvcdrv 0:on 1:off 2:off 3:on 4:on 5:on 6:on<br />dataeng 0:off 1:off 2:off 3:on 4:on 5:on 6:off<br />dsm_om_shrsvc 0:off 1:off 2:off 3:on 4:on 5:on 6:off</span></blockquote>
<br />
<br />
<blockquote class="tr_bq">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"># omreport storage pdisk controller=0</span></blockquote>
<blockquote class="tr_bq">
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">List of Physical Disks on Controller SAS 6/iR Adapter (Slot 2)<br />Controller SAS 6/iR Adapter (Slot 2)<br />ID : 0:0<br />Status : Ok<br />Name : Physical Disk 0:0<br />State : Online<br />~(略)~<br />ID : 0:1<br />Status : Ok<br />Name : Physical Disk 0:1<br />State : Online<br />~(略)~</span></blockquote>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">うまく行った!!</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">あとはこれをNagiosかなんかで定期的に実行してステータス確認すればよさそう。</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">コマンドのマニュアルはこちら</span><br />
<a href="http://support.dell.com/support/edocs/software/svradmin/5.4/ja/cli/report.htm">http://support.dell.com/support/edocs/software/svradmin/5.4/ja/cli/report.htm</a>
<br />
<div>
<br /></div>AllBlackhttp://www.blogger.com/profile/06421415357994139295noreply@blogger.com0tag:blogger.com,1999:blog-8583627557863039448.post-80239121225489494752011-12-27T11:48:00.002+09:002012-02-13T10:56:31.439+09:00Visioで接続ポイントを追加する<br />
プログラムの相関図をVisioで描いていて、「一つのオブジェクトに複数のプログラムがアクセスする」という事象に遭遇した。<br />
単に、そのままコネクタを接続させれば目的は果たせるんだけど、一つの図形にコネクタが何本もくっついて、コネクタの方はみんな重なって表示されてしまって、どうにも見づらい…。<br />
どうにかならないのかなぁ、と思って調べていたらオブジェクトの接続ポイント増やせばいいことが分かった。<br />
<a href="http://office.microsoft.com/ja-jp/visio-help/HP001231166.aspx">http://office.microsoft.com/ja-jp/visio-help/HP001231166.aspx</a><br />
<br />
簡単に書くと<br />
<br />
<ol>
<li>メニューの[表示]から[接続ポイント]をクリックして、接続ポイントツールを使えるようにする</li>
<li>接続ポイントを追加したい図形をクリック</li>
<li>[コネクタツール]の横の▽をクリックして[接続ポイントツール]を選択</li>
<li>接続ポイントを追加した図形上で、Ctrlを押しながら、クリックすればOK</li>
</ol>
<br />
<br />
これで見やすくなった!AllBlackhttp://www.blogger.com/profile/06421415357994139295noreply@blogger.com0tag:blogger.com,1999:blog-8583627557863039448.post-72286552409900762242011-12-15T14:50:00.003+09:002013-01-24T08:44:58.930+09:00pg_queryでSQLの失敗時にFALSEを返さない<br />
PHPからPostgreSQLへpg_queryでSQL文を実行してみている。<br />
その時に、構文間違いやデータ整合性などの理由で失敗する。<br />
で、エラーを出して終了してしまう。<br />
<br />
<a href="http://www.php.net/manual/ja/function.pg-query.php">マニュアル</a>によるとFALSEを返すはずなんだけど…。<br />
とりあえずset_error_handlerでカスタムエラーハンドラを作って対処してみた。<br />
<br />
<br />
<pre style="background-color: black; color: #d1d1d1;"><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #f6c1d0;"><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"></span>
<span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #e66170; font-weight: bold;">function</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"> pg_query_test</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #d2cd86;">(</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"> </span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;">$conn</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"> </span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #d2cd86;">)</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"></span>
<span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #b060b0;">{</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"></span>
<span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"> </span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;">$sql</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"> </span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #d2cd86;">=</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"> </span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #00c4c4;">"INSERT INTO NO_EXIST_TABLE VALUES ( 1 );"</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #b060b0;">;</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"></span>
<span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"> </span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #9999a9;">// エラー終了させないようエラーハンドラをセット</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"></span>
<span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"> </span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #e66170; font-weight: bold;">set_error_handler</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #d2cd86;">(</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"> </span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #00c4c4;">"my_error_handler"</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"> </span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #d2cd86;">)</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #b060b0;">;</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"></span>
<span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"> </span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;">$result</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"> </span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #d2cd86;">=</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"> </span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #e66170; font-weight: bold;">pg_query</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #d2cd86;">(</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"> </span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;">$conn</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #d2cd86;">,</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"> </span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;">$sql</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"> </span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #d2cd86;">)</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #b060b0;">;</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"></span>
<span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"> </span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #e66170; font-weight: bold;">restore_error_handler</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #d2cd86;">(</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #d2cd86;">)</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #b060b0;">;</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #e66170; font-weight: bold;">if</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"> </span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #d2cd86;">(</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"> </span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;">$result</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"> </span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #d2cd86;">)</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"></span>
<span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"> </span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #b060b0;">{</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"></span>
<span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"> </span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #e66170; font-weight: bold;">return</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"> </span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #e66170; font-weight: bold;">true</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #b060b0;">;</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"></span>
<span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"> </span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #b060b0;">}</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"></span>
<span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"> </span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #e66170; font-weight: bold;">else</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"></span>
<span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"> </span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #b060b0;">{</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"></span>
<span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"> </span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #e66170; font-weight: bold;">return</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"> </span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #e66170; font-weight: bold;">false</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #b060b0;">;</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"></span>
<span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"> </span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #b060b0;">}</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"></span>
<span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #b060b0;">}</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"></span>
<span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #e66170; font-weight: bold;">function</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"> my_error_handler</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #d2cd86;">(</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"> </span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;">$errno</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #d2cd86;">,</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"> </span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;">$errstr</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #d2cd86;">,</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"> </span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;">$errfile</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #d2cd86;">,</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"> </span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;">$errline</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"> </span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #d2cd86;">)</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"></span>
<span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #b060b0;">{</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"></span>
<span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"> </span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #e66170; font-weight: bold;">echo</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"> </span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #00c4c4;">"[errno]: </span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #00c4c4;">$errno</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: teal;">\n</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #00c4c4;">"</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #b060b0;">;</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"></span>
<span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"> </span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #e66170; font-weight: bold;">echo</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"> </span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #00c4c4;">"[errstr]: </span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #00c4c4;">$errstr</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: teal;">\n</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #00c4c4;">"</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #b060b0;">;</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"></span>
<span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"> </span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #e66170; font-weight: bold;">echo</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"> </span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #00c4c4;">"[errfile]: </span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #00c4c4;">$errfile</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: teal;">\n</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #00c4c4;">"</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #b060b0;">;</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"></span>
<span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"> </span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #e66170; font-weight: bold;">echo</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"> </span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #00c4c4;">"[errline]: </span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #00c4c4;">$errline</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: teal;">\n</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #00c4c4;">"</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #b060b0;">;</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"></span>
<span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #b060b0;">}</span><span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: white;"></span>
<span style="background-color: #281800; background-position: initial initial; background-repeat: initial initial; color: #f6c1d0;">?></span></span></pre>
<br />
<br />
実行してみて、errnoは2(E_WARNING)と分かった。<br />
しかし、pg_queryの前でset_error_handlerして、終わったらrestore_error_handlerってのもあんまりスマートなやり方じゃないね…。<br />
ひとまずこれで行っておくか…。<br />
<br />
と思いきや、pg_queryだけじゃなくて、pg_copy_fromなんかでも同じようにエラーを出して終了しちゃう…。<br />
さすがにpg_系が全部間違っているとは考えにくいので、DBかPHPの設定?と思い、とりあえず/etc/php.iniを見てみた。<br />
"Error handling and logging"の部分で、<br />
<blockquote class="tr_bq">
error_reporting = E_ALL</blockquote>
となっているのを発見。<br />
<br />
試しに関数内で<br />
error_reporting( E_ERROR );<br />
にしてみたところ、失敗してもちゃんとFALSEを返すようになった!<br />
<br />
ただ、これだと毎回error_reporting関数を呼ばなくちゃいけないので、面倒。<br />
/etc/php.iniを変えて問題なければ、書き換えたほうが楽だね。<br />
多分、問題ないけど検証してからやってみよう!<br />
<div>
<br /></div>
AllBlackhttp://www.blogger.com/profile/06421415357994139295noreply@blogger.com0tag:blogger.com,1999:blog-8583627557863039448.post-83223173754921094012011-12-14T09:48:00.002+09:002011-12-14T09:48:52.899+09:00シェルスクリプトの関数にパイプで渡す<br />
bashでシェルスクリプトを書いていて、関数を使っていたんだけど、パイプで標準入力を渡したくなった。<br />
で、どうしたもんかと思っていたら、こちらに出会った。<br />
<a href="http://dsas.blog.klab.org/archives/51060184.html">http://dsas.blog.klab.org/archives/51060184.html</a><br />
<br />
これは素晴らしい!<br />
実はパイプでどう受けるとかも知らなかったので、<br />
cat -<br />
を知っただけで目からウロコ。<br />
<br />
さらには、testコマンドで パイプで繋いできてるのかまで判定できると知って衝撃。<br />
これは便利。<br />
<br />
助かりました!AllBlackhttp://www.blogger.com/profile/06421415357994139295noreply@blogger.com0tag:blogger.com,1999:blog-8583627557863039448.post-13825174359317654272011-11-29T15:59:00.001+09:002011-11-29T16:00:05.977+09:00rootでパスワードなしのSSHを使用してrsync…危険じゃないの?<br />
元々はFTPだけしか使えない、ログイン不可のユーザ(シェルが/sbin/nologin)でrsyncも出来るようにしたかった。<br />
でも、nologinのユーザだとrsync -e sshとしても失敗。<br />
rsyncはログインしなくちゃできないから、それも当然。<br />
<br />
そこで、rsync用のユーザを作って、rsyncすることにした。<br />
sshでパスワードなしにすることも簡単。<br />
ただ、ファイルの権限がrsyncになってしまう…。chmodで変更が出来ない…。<br />
chmodはrootじゃないとダメだから。<br />
<br />
じゃあ、rootでパスワードなしのSSHなら出来る。<br />
いや、それはさすがにマズイ。<br />
どうしたもんか、と思っていたところ見つけた。<br />
<a href="http://sonic64.com/2004-11-17.html">http://sonic64.com/2004-11-17.html</a><br />
<a href="http://www.ice.is.kit.ac.jp/~umehara/misc/comp/20061121.html">http://www.ice.is.kit.ac.jp/~umehara/misc/comp/20061121.html</a><br />
<br />
つまり、鍵ファイルによって実行できるコマンドを絞ることが出来る。<br />
authorized_keyの鍵情報にcommandを追加。<br />
そこにrsyncコマンドを入れておけば、いいわけだ。<br />
通常のsshは鍵なしだから、普通にsshしてきたら普通に使える。<br />
鍵を指定してsshしてきたら、指定したcommandだけ実行して終わり。<br />
<br />
全然知らなかったけど、sshは奥が深いね!なんとなく世界が広がる気がする!AllBlackhttp://www.blogger.com/profile/06421415357994139295noreply@blogger.com0tag:blogger.com,1999:blog-8583627557863039448.post-84442232653592626012011-11-21T10:37:00.001+09:002011-11-21T10:38:58.752+09:00MCITP合格<br />
70-663 Pro: Designing and Deploying Messaging Solusions with Microsoft Exchange Server 2010に合格。<br />
この前受けた、70-662の上位資格。<br />
<br />
日本語では情報が乏しいので、英語のテキストや問題集を使い、英語で受けた。<br />
変な訳とかないので、その辺は英語の方がいいのかも。<br />
テキストは一回通して読みつつ、あとは問題集を繰り返しやった。<br />
多分、7回ぐらい。<br />
分からないところをテキストとtechnet等でチェック。<br />
<br />
他の人の合格体験記を読むと、technetだけで合格してたりするね。<br />
スゴイわ、尊敬。<br />
問題集なかったら絶対ダメだったと思う。<br />
<br />
Exchange Server 2010の上位資格なんだけど、未だに本社のExchange Serverには触れないまま…。<br />
忘れてしまう前に触っておきたいなぁ…。<br />AllBlackhttp://www.blogger.com/profile/06421415357994139295noreply@blogger.com0tag:blogger.com,1999:blog-8583627557863039448.post-49123881252897065912011-11-17T10:51:00.001+09:002011-11-17T10:52:01.748+09:00PostgreSQLで文字列の結合(||)をすると勝手にトリムされる<br />
開発中に「あれ?!」と思ったので記録の意味で。<br />
<br />
DBからデータを引っ張っていて、フィールド定義はtext型だが、固定長で出力する必要があったため、<br />
<blockquote class="tr_bq">
SELECT 'hoge ' || field1::char(20) FROM table1;</blockquote>
というように書いた。<br />
<br />
が、結果は<br />
<blockquote class="tr_bq">
hoge AAA↵(改行コード)</blockquote>
というように勝手にトリム(trim)されている。<br />
<br />
なんで?と思って、調べたら文字列を結合する演算子の||は、返す型がtextのため、不要な空白は消してくれているらしい。<br />
<br />
なので、実装には<br />
<blockquote class="tr_bq">
SELECT 'hoge ' || rpad( field1, 20 ) FROM table1;</blockquote>
というようにしたら大丈夫になりました。<br />AllBlackhttp://www.blogger.com/profile/06421415357994139295noreply@blogger.com0tag:blogger.com,1999:blog-8583627557863039448.post-14715327858382884312011-11-15T16:40:00.001+09:002011-11-17T10:52:23.179+09:00redmine 1.2.1にredmine_importerをインストール<br />
CSV形式でチケットをインポートできるredmine_importerをインストールした。<br />
ホントはMS Projectからそのままが一番よくて、suerさんが作成してくれたXML形式なら対応している<a href="http://d.hatena.ne.jp/suer/20091115/1258298023">プラグイン</a>もあるんだけど、データが大きすぎたようで読み込めなくなっちゃったので、一旦CSVにしてからインポートすることに。<br />
<br />
<br />
redmine_importerを元々知ってたわけじゃなく、調べているうちに知っただけ。<br />
rchadさんが作り、junoさんが改良してくれて、ネットではこちらの手順がいっぱいあった。<br />
日本語で使う時には、langフォルダにあるja.ymlをconfig/localesに置いて、インデント揃えて、といろいろあってやってみたけど、結局うまく行かず。<br />
もしかして、バージョンが違うから合わない?と思い、探ってみると2年以上更新がない…。<br />
<br />
どうしよう…と思ったけど、githubで同じ名前で検索かけたら、tsukanoさんって方が作っているじゃないですか!<br />
<a href="https://github.com/tsukano/redmine_importer">https://github.com/tsukano/redmine_importer</a><br />
これを入れたらすんなり動きました!<br />
どうもありがとうございます!!<br />
<div>
<br /></div>AllBlackhttp://www.blogger.com/profile/06421415357994139295noreply@blogger.com2tag:blogger.com,1999:blog-8583627557863039448.post-18603893952801605482011-10-21T13:34:00.004+09:002011-10-21T13:34:54.296+09:00コマンド置換でタブが消える<br />
Korn shellでのコマンド置換をしていた。<br />
タブ区切りのファイルの一行目だけを変数に代入しようと<br />
<br />
<blockquote>
hoge=`head -1 tab_file`</blockquote>
<br />
として無事格納。<br />
なんだけど、その後の処理で、どうも躓く。<br />
<br />
保存されている文字列は<br />
<blockquote>
aaa<span class="Apple-tab-span" style="white-space: pre;"> </span>bbbb<span class="Apple-tab-span" style="white-space: pre;"> </span>cc</blockquote>
というような形で当然、これがタブ区切りになっているはず。<br />
<br />
しかし、<br />
<blockquote>
$ echo $hoge | cat -t</blockquote>
とやると<br />
<blockquote>
aaa<span class="Apple-tab-span" style="white-space: pre;"> </span>bbbb<span class="Apple-tab-span" style="white-space: pre;"> </span>cc</blockquote>
となるだけ…。<br />
<br />
本来、タブ区切りになっていれば<br />
<blockquote>
aaa^Ibbbb^Icc</blockquote>
とタブの部分が「^I」になるはず…。<br />
<br />
念のため、od -xコマンドでダンプをしてみると、やはりタブ(0x09)ではなくスペース(0x20)になっている。<br />
<br />
<blockquote>
<span class="Apple-style-span" style="color: blue;">$ echo $hoge | od -x<br />0000000 6161 61</span><span class="Apple-style-span" style="color: red;">20</span><span class="Apple-style-span" style="color: blue;"> 6262 6262 </span><span class="Apple-style-span" style="color: red;">20</span><span class="Apple-style-span" style="color: blue;">63 630a<br />0000014<br />$ head -1 tab_file | od -x<br />0000000 6161 61</span><span class="Apple-style-span" style="color: red;">09</span><span class="Apple-style-span" style="color: blue;"> 6262 6262 </span><span class="Apple-style-span" style="color: red;">09</span><span class="Apple-style-span" style="color: blue;">63 630a<br />0000014</span></blockquote>
<br />
headが悪いのかと思い、awkやperlで一行目だけ取ってみたが結果は同様。<br />
「シェルの問題?」と思い、zshに変えたら、うまく行った。<br />
<br />
<blockquote>
% echo $hoge | cat -t<br />aaa^Ibbbb^Icc</blockquote>
<br />
とりあえずなんとかなったけど、それしかないのかなぁ…?<br />
どなたか何か知ってたら教えてください!!<br />AllBlackhttp://www.blogger.com/profile/06421415357994139295noreply@blogger.com0tag:blogger.com,1999:blog-8583627557863039448.post-21596732170124787432011-10-20T15:05:00.000+09:002012-12-27T10:57:54.736+09:00シェル変数をperlで扱う備忘録。<br />
<br />
シェルスクリプトを書いていて、便利なperlの力を借りたくなる時がある。<br />
何度か「どうだったっけ?」と調べているので、備忘録として書いておこう。<br />
<br />
hogeというシェル変数をperl上で扱いたいなら、シェルに展開させればいいので<br />
<br />
<blockquote>
<span class="Apple-style-span" style="background-color: white; color: #333333; font-family: sans-serif; font-size: 14px; line-height: 19px;">hoge="hogehoge"</span></blockquote>
<blockquote>
<span class="Apple-style-span" style="background-color: white; color: #333333; font-family: sans-serif; font-size: 14px; line-height: 19px;">perl -e 'print \"$hoge\";'</span> </blockquote>
<blockquote>
<span class="Apple-style-span" style="background-color: white; color: #333333; font-family: sans-serif; font-size: 14px; line-height: 19px;">あるいは</span><span class="Apple-style-span" style="background-color: white; color: #333333; font-family: sans-serif; font-size: 14px; line-height: 19px;">perl -e 'print "'$hoge'"';</span></blockquote>
<div>
<span class="Apple-style-span" style="background-color: white; color: #333333; font-family: sans-serif; font-size: 14px; line-height: 19px;"><span class="Apple-style-span" style="color: black; font-family: 'MS PGothic'; font-size: small; line-height: normal;">参考:<a href="http://oshiete.goo.ne.jp/qa/2844904.html">http://oshiete.goo.ne.jp/qa/2844904.html</a></span></span></div>
<div>
<span class="Apple-style-span" style="color: #333333; font-family: sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 19px;"><br /></span></span>
<span class="Apple-style-span" style="color: #333333; font-family: sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 19px;">環境によってはどっちかしか動かなかったりするみたい。</span></span><br />
<span class="Apple-style-span" style="color: #333333; font-family: sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 19px;"><br /></span></span>
<span class="Apple-style-span" style="color: #333333; font-family: sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 19px;">joinコマンドに渡すパラメタを作りたくて使ったのが下記。</span></span><br />
<span class="Apple-style-span" style="color: #333333; font-family: sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 19px;">( $field_num はフィールド数を格納したシェル変数 )</span></span><br />
<span class="Apple-style-span" style="color: #333333; font-family: sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 19px;"><br /></span></span>
<blockquote>
<span class="Apple-style-span" style="color: #333333; font-family: sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 19px;">OUT_PARAM=`perl -e 'foreach ( 1..'$field_num' ) { print "1.$_ ";}'`</span></span></blockquote>
<span class="Apple-style-span" style="color: #333333; font-family: sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 19px;">これで1.1 1.2 1.3 1.4 ...というような文字列が返される</span></span><br />
<span class="Apple-style-span" style="color: #333333; font-family: sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 19px;"><br /></span></span></div>
<div>
<span class="Apple-style-span" style="color: #333333; font-family: sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 19px;"><br /></span></span>
<span style="color: #333333; font-family: sans-serif;"><span style="font-size: 14.44444465637207px; line-height: 19px;"><i>2012.12.27 追記</i></span></span><br />
<span style="color: #333333; font-family: sans-serif;"><span style="font-size: 14.44444465637207px; line-height: 19px;"><i><br /></i></span></span>
<span style="color: #333333; font-family: sans-serif;"><span style="font-size: 14.44444465637207px; line-height: 19px;">perlのバージョンなのか、別のサーバでうまく動かなかったので、再度調べてみた。</span></span><br />
<span style="color: #333333; font-family: sans-serif;"><span style="font-size: 14.44444465637207px; line-height: 19px;">一番いいのは、環境変数に突っ込んでしまうことみたい。</span></span><br />
<span style="color: #333333; font-family: sans-serif;"><span style="font-size: 14.44444465637207px; line-height: 19px;"><br /></span></span>
<br />
<blockquote>
<span class="Apple-style-span" style="background-color: white; color: #333333; font-family: sans-serif; font-size: 14px; line-height: 19px;">export hoge="hogehoge"</span> </blockquote>
<blockquote>
<span class="Apple-style-span" style="background-color: white; color: #333333; font-family: sans-serif; font-size: 14px; line-height: 19px;">perl -e 'print "$ENV{hoge}";'</span> </blockquote>
<blockquote>
※export の代わりにtypeset -x でもOK</blockquote>
<br />
<span style="color: #333333; font-family: sans-serif;"><span style="font-size: 14.44444465637207px; line-height: 19px;"><br /></span></span>
<span style="color: #333333; font-family: sans-serif;"><span style="font-size: 14.44444465637207px; line-height: 19px;">シェルスクリプトの中で環境変数に入れれば、子プロセスには引き継がれるけど、親が終われば、そこで元に戻るので、他に影響はないはず。</span></span><br />
<span style="color: #333333; font-family: sans-serif;"><span style="font-size: 14.44444465637207px; line-height: 19px;"><br /></span></span>
<span style="color: #333333; font-family: sans-serif;"><span style="font-size: 14.44444465637207px; line-height: 19px;">こっちの方が確実みたいです!</span></span></div>
AllBlackhttp://www.blogger.com/profile/06421415357994139295noreply@blogger.com0tag:blogger.com,1999:blog-8583627557863039448.post-24599739192978513592011-10-13T14:28:00.000+09:002011-10-13T14:28:13.434+09:00rpmが固まる<br />
rpmが固まってしまい、無理矢理killするしかなくなってしまった…。<br />
調べてみたら、<br />
<blockquote>
# rpm --rebuilddb</blockquote>
すれば直る、とあったのでやってみた。なんかDBがおかしくなっちゃったのね。<br />
無理矢理killしたりも悪かったんだろう。<br />
<br />
コマンド打って放置。<br />
あれ、20分ぐらい経つけど、まだやってる…。<br />
また固まってない??<br />
<br />
さらに調べてみると、どうやらロックファイルが残っているため固まってしまうらしい。<br />
<a href="http://his.luky.org/ML/linux-users.a/msg00348.html">http://his.luky.org/ML/linux-users.a/msg00348.html</a><br />
<blockquote>
# rm -f /var/lib/rpm/__db.*<br /># rpm -vv --rebuilddb</blockquote>
-vvを付けたので今度は動いているかは確認出来る。<br />
お、5分もかからず復活!<br />
よかったよかった!<br />
<br />
しかし、killするしかないってのはキビシイ…。<br />AllBlackhttp://www.blogger.com/profile/06421415357994139295noreply@blogger.com0tag:blogger.com,1999:blog-8583627557863039448.post-62544823799947065822011-10-13T09:41:00.002+09:002011-10-13T14:28:38.459+09:00Seleniumを使ってみた その3<br />
<a href="http://dice-k-0.blogspot.com/2011/10/selenium-2.html">前回</a>、<a href="http://dice-k-0.blogspot.com/2011/10/selenium-1.html">前々回</a>と引き続きSelenium 2.0の話。<br />
Webアプリのテストに便利そうだけど、全部自分でスクリプト書くのはちょっと面倒だなぁ、なんて思っていたら、ちゃんとツールがあった。<br />
<a href="http://seleniumhq.org/projects/ide/">Selenium IDE</a><br />
<br />
Firefoxのアドインで、実際にブラウザ操作しながら記録できる。<br />
しかも、その記録はJava, PHP, Perl, Rubyなど多種の言語にエクスポート可能!!<br />
もちろんエクスポートしたコードはSeleniumが動いているサーバに置けば実行可能。<br />
これはスゴイ!<br />
<br />
自分でソース見ながら「このテキストボックスのIDがこれで、パスワードのIDがこれ…」とか地味な作業が一気になくなる。<br />
なんて便利なんだ!!<br />
<br />
とりあえずPerlでやってみる。<br />
cpanでいろいろインストールが必要だったが、特に問題なく終了。<br />
ただUTF8が前提なので、is_test_present_okなどで日本語の文字列の存在確認をしようとするとそのままだと失敗する。<br />
<blockquote>
use utf8;</blockquote>
を最初にくっつければ動くようになった!AllBlackhttp://www.blogger.com/profile/06421415357994139295noreply@blogger.com0