2009年4月15日水曜日

(FreeBSD) portsのsysutils/halは、pkgtools.confのAFTERINSTALLにcmd_start_rc(origin)や cmd_restart_rc(origin)を書いておいても、portupgradeしたとき、haldが起動しない。不思議なことに

/usr/local/etc/pkgtools.confのAFTERINSTALLというところに、



  AFTERINSTALL = {
    'ナントカ' => proc { |origin|
         cmd_restart_rc(origin)
    },
  }



とか書いておくと、portupgradeでナントカをアップデートしたとき、「/usr/local/etc/rc.d/ナントカの起動スクリプト restart」が自動的に実行される、という機能があります。



サーバーとして動作しているソフト(デーモン)のバージョンアップをしたときに、自動的に、デーモンを再起動してくれるので、けっこう便利な機能です。



ちなみに、勝手に再起動してもらっちゃ困るぞ!というタイプのソフトウェアについては、私の場合、HOLD_PKGSのほうに書いておいて、portupgradeで不用意にバージョンアップさせないようにしています。portupgrade -f ~と、「-f」オプションを付ければ、バージョンアップできます。





さて、sysutils/halなんですが、pkgtools.confに



  AFTERINSTALL = {
    'sysutils/hal' => proc { |origin|
         cmd_restart_rc(origin)
    },
  }



と書いておいても、portupgradeが完了した時点で、hal(コマンド名はhald)は動いてくれません。もともとhaldが動いていた状態でportupgradeすると、haldが停止した状態で終了してしまいます。なんか、昔からそういう挙動をしています。haldが動いていないと、困ったことになる場合があるので、この挙動、かなり嫌なんです。



portupgradeが終わるころのログメッセージはこんな感じです。



cmd_start_rcを書いた場合



===> Installing rc.d startup script(s)
===>   Compressing manual pages for hal-0.5.11_23
===>   Running ldconfig
/sbin/ldconfig -m /usr/local/lib
===>   Registering installation for hal-0.5.11_23
[Updating the pkgdb <format:bdb_btree> in /var/db/pkg ... - 922 packages found (-0 +1) . done]
--->  Executing a post-install command for 'sysutils/hal': /usr/local/etc/rc.d/hald start
Starting hald.
--->  Cleaning out obsolete shared libraries



cmd_restart_rcを書いた場合



===>   Compressing manual pages for hal-0.5.11_23
===>   Running ldconfig
/sbin/ldconfig -m /usr/local/lib
===>   Registering installation for hal-0.5.11_23
===>  Cleaning for hal-0.5.11_23
[Updating the pkgdb <format:bdb_btree> in /var/db/pkg ... - 922 packages found (-0 +1) . done]
--->  Executing a post-install command for 'sysutils/hal': /usr/local/etc/rc.d/hald stop; sleep 3; /usr/local/etc/rc.d/hald start
hald not running? (check /var/run/hald/hald.pid).
Starting hald.
--->  Cleaning out obsolete shared libraries


これを見る限り、どちらの場合も、/usr/local/etc/rc.d/hald startを実行しているようです。
ちょっとports/sysutils/hal/files/hald.inに小細工をして調べてみたところ、確かに、haldを起動しようとしていることは確認できました。



+ debug checkyesno: hald_enable is set to YES.
+ return 0
+ echo Starting hald.
Starting hald.
+ _return=0
+ [ 0 -ne 0 ]
+ return 0
+ _run_rc_postcmd
+ [ -n  ]
+ return 0
+ return 0+
iter=0
--->  Cleaning out obsolete shared libraries


「/usr/local/etc/rc.d/hald start」を手で実行すれば、ちゃんと起動するのに、portupgradeから「/usr/local/etc/rc.d/hald start」を実行した場合は、なぜかhaldが起動しない。
なんとも、謎の現象です。



問題の中心は、/usr/local/etc/rc.d/haldの以下の部分らしいです。



hald_start()
{
    if ! checkyesno hald_enable ; then
        return 0
    fi
    echo "Starting ${name}."



    ( iter=0
    while ! ps -axoargs | grep "^/usr/libexec/getty " | grep -qv grep >/dev/null 2>&1; do
        if [ ${iter} -eq 60 ]; then
            break
        fi
        sleep 1
        iter=$(expr ${iter} + 1)
    done
    ${command} ${hald_flags} ) &
}



iter=0は実行されているようですが、そこで終わっていて(???)、${command} ${hald_flags}が実行されていないみたいです。



ところで、ここの処理、こんなことをやってるんですね。



  • gettyが起動するのを待ってから、haldを起動させたい


  • でも永遠に待ち続けるのはナニなので、せいぜい60秒くらいまでにしておく


  • ほかのrcスクリプトを実行したいので、/usr/local/etc/rc.d/haldの実行は、60秒も待つことなく、すぐに終わらせたい


( ~ )で囲んであるので、subshellで実行されるんだと思いますが、ためしに、このカッコをとっぱらって、



    iter=0
    while ! ps -axoargs | grep "^/usr/libexec/getty " | grep -qv grep >/dev/null 2>&1; do
        if [ ${iter} -eq 60 ]; then
            break
        fi
        sleep 1
        iter=$(expr ${iter} + 1)
    done
    ${command} ${hald_flags}



にしてみたところ、portupgrade完了後、ちゃんとhaldが起動しました!



うーん、なぜだ?!
/bin/shのバグでしょうか?



2009年4月14日火曜日

メタキャラクタのエスケープ処理が、けっこうやっかい

いまごろになって、メタキャラクタのエスケープ処理を、自分はきちんと理解できてないなぁ、と思うことがあります。



メタキャラクタというのは、



  • 「'」(シングルクォート)


  • 「"」(ダブルクォート)


  • 「\」 (バックスラッシュ、場合によっては¥マーク)


  • 「$」(ドル)


など、単なる記号文字として以外にも、何か別の意味ありげな機能を持っている文字のことです。



何か別の意味ってのは、たとえば、シェルのコマンドライン上で、「$」を使った場合、

% echo $LANG
C

というように、「$LANG」と書くと、変数LANGの値へと展開されます。



エスケープ処理というのは、たとえばこの「$」の機能を無効化することです。
ひとつの方法としては、「'」で囲んでやることで

% echo '$LANG'
$LANG

というように、「'」で全体を囲むと、「$」がそのまま出てきます。
エスケープ処理の方法は、何通りもあることがあり、たとえば「\」を使っても、同じ結果が得られます。

% echo \$LANG
$LANG

このエスケープ処理なんですが、けっこう間違えやすくて、やっかいものです(そう思ってるのは、私の技量不足とか、思慮が足りないとか、ダメダメだとか・・・)。



たとえば、「"」をエスケープしたいと思った場合、



/bin/sh の場合

$ echo "aaaa\"hoge\"bbbb"
aaaa"hoge"bbbb

なんていう風に書くことができます。
ところが、/bin/csh の場合、同じようにやっても

% echo "aaaa\"hoge\"bbbb"
Unmatched ".

と、エラー扱いされてしまいます。ツールによって、メタキャラクタの働き方が微妙に違うんですよね。この、「ツールによって解釈が違う」ってのが、ものすごくやっかいだと思います。



「'」(シングルクォート)は、たいてい、かなり強力にエスケープしてくれるんですが、「'」で囲まれた中に「'」を書けないんですよね。



/bin/sh の場合

$ echo 'aaaa\'hoge\'bbbb'
>  ・・・まだコマンド文字列の続きだと思われてしまっている。

/bin/csh の場合

% echo 'aaaa\'hoge\'bbbb'
Unmatched '.

「'」をそのまま出したいだけなら、たとえば、ダブルクォートの中に、シングルクォートを書くと、できちゃいます。



/bin/sh の場合

$ echo "aaaa'hoge'bbbb"
aaaa'hoge'bbbb

/bin/csh の場合

% echo "aaaa'hoge'bbbb"
aaaa'hoge'bbbb

なんかもう、こういうルールを何個も覚えなくちゃならないかと思うと、頭が混乱してきます。



PHPで、PostgreSQLを使うスクリプトを書いているとき、SQL文を書くときに、どういうわけか、ときどき、「\\\\」と、「\」を4個も重ねて書かなくてはならないときがあって、あーもー何がなんだか[E:sign03] と思うことがあります。



この前やった失敗は、途中で「"」が消えてなくなると思って書いてたら、意に反して、最後まで「"」が生き残って、その結果、データベースに、「"Hello world"」のように、「"」がついたまま、文字列が登録されてた、とか [E:bearing]



ある文字集合を使っているときに、エスケープ文字も同じ文字集合に含まれているために、こういうやっかいなことになるわけだから、もしもエスケープ文字が、別の文字集合から持ってこれたらいい、でも別の文字集合を使うときは、また別の別の文字集合からエスケープ文字を持ってきて、・・・あーもー何が何だか[E:sign03]



2009年4月13日月曜日

日めくりタイムトラベル 昭和40年

昨日の「日めくりタイムトラベル」は、昭和40年をとりあげてました。個人的になぜか好きな昭和40年代なので、興味津々。



生まれたときから存在してたので、あって当たり前、と思っていたものが、実はこの年に始まっていた、とか知るのはおもしろいです。



献血が本格化したのもこの年だったそうですが・・・



200904121



売血は、名前だけは知ってましたが・・・
お金がもらえるなんていいな~とか思ってたときもありましたが・・・



200904122



映像を見てて、なんか、すごく不気味で、気分が悪くなってきました(そういう雰囲気になるように、意図的に編集されているような)。



200904123





ヨイトマケって言葉は「三丁目の夕日」で覚えたんですけど、ヨイトマケの唄は、しばらく前にSONGSでやったので初めて知りました。いいね、これ。



200904124





この歩行者用の信号機も、昭和40年に登場したそうで。



200904125





新幹線で電話が使えるようになったのも、昭和40年。開業から1年と、わりと早い気もしました。



200904126





自分は「東京~大阪3時間」と思い込んでいたんですが、最初の1年間は、最高速度はもっと低かったんですね。



200904127





今回の番組で、大きく取り上げられていたものの1つが、エレキギターのブーム。



不良になるからエレキ禁止!と、大人から禁止されちゃったとか。



最近の携帯電話禁止!と同じような感じがする・・・



200904128



関係ないけど、現代では「LANパーティー」ってものがあるそうですね。



200904129



「エレキの若大将」が、カッコイイと認識されていたことを、この番組ではじめて知りました。



20090412a





えっ、秋葉原?



20090412b



日本一のエスカレーター・・・ はぁ、そうですか。そんなのありましたっけ?



20090412c





ジェミニ6号と7号がランデブーしたよ、っていう話。このディスプレイ(?)には、なんか不思議な映像が映し出されているんですが、これがベクトルスキャンディスプレイ?



20090412d





次回は昭和45年かと思ったら、昭和64年&平成元年。BS放送20周年にひっかけて、その年になっちゃったようです。






2009年4月12日日曜日

Windows XP Home Editionで、ファイルに「アクセスが拒否されました。」 ~ そういえばCACLS.EXE

Windows XP Home Editionなパソコン上で、昔使っていたハードディスクをUSBで接続して、ファイルの整理をしてました。



すると、「アクセスが拒否されました。」と表示されて、表示できないファイルやフォルダがあることに気がつきました。



200904111



この現象、Windows 2000とかで使っていたハードディスクを、Windows XPでそのまま使ったりした場合、よく見ますよね???



Windows XPのProfessional Editionだと、えいや、とファイルの所有者とか、アクセス権限を変更して、解決できてしまうのですが、Home Editionだとできません。
 「けちんぼ!」 > マイクロソフト社



でも、「CACLS.EXE」というコマンドを使うと、ファイルのアクセス権限を変更できる、とかいう話を思い出しましたので、やってみました。



10分後。



うーん、よくわかりません。どうしても、うまくいかなくて、「ACCESS_DENIED」とか表示されてしまうファイルがあります。



200904112



あとで気がついたんですが、これ、ファイルの所有者が、不明なユーザーになってしまっていて、そのために、アクセス権限も変更できない、ということらしいです。



Home Editionの場合は、どうも、セーフモードで起動してAdministratorでログインすれば、なんとかなるみたいです。



でも、わざわざセーフモードで再起動するのもめんどくさかったので、別の、Media Center Edition(Professional Edition相当)なパソコンで、強制的に解決させてしまいました。



以下、Professional Editionの場合。



問題となっているファイルやフォルダにアクセスしようとしたとき、「現在のアクセス許可の設定を表示または編集するアクセス許可はありませんが、所有権を取得するか、または監査設定を変更することができます。」とか表示されました。



200904113



はい、はい、なんか言ってますが、全然意味わかんないです[E:coldsweats01]



とりあえず、あちこち、適当にいじってみます。



200904114



おっと、ここみたいです↓。「現在の所有者を表示できません。」と出てます。



200904115



所有者の変更をしてみたところ、「S-1-5-21-数字・・・」なユーザーが出現しました。こいつが、行方不明になってしまったユーザーってことらしいです(昔使ってたWindows 2000上でのユーザー、ってことなんだと思われ)。



200904116



あまりよくないですが、とりあえず、Everyoneでフルコントロールにしちゃいました。



200904117



とりあえず、これで、なんとかファイルやフォルダにアクセスできるようになりました。



やれやれ、これで問題解決した・・・と思ったら、とんでもないことになっていました!!!



最初に使っていたWindows XP Home Editionなパソコンで、「なんたらはできません」とか、変なエラーメッセージが出るようになってるじゃありませんか。



いったい何が起きたか?!



どういうわけか、「C:\WINDOWS」のアクセス権限が変化しちゃってました~



うひゃー[E:happy02]



CACLS.EXEコマンドを、よくわかんないまま使ったら、





200904118



上↑のように、「処理ディレクトリ: C:\WINDOWS」と表示されていて、このときに、アクセス権限が変更されてしまってました。



わーん、困った、困った[E:shock]



別のWindows XP Home Editionなパソコンで、本当のC:\WINDOWSはどうなっているのかを確認。こうなってました。



200904119



CACLS.EXEでいろいろやってみたんですが、どうやっても、GENERIC_READとかGENERIC_EXECUTEというのを、くっつけることができません。



XCACLS.EXEというコマンドもあることを知り、それをインストールして、いろいろ試したんですが・・・こんな感じで実行すると



C:\>xcacls c:\windows /G builtin\users:RXE builtin\administrators:F system:f "creator owner":f
Are you sure (Y/N)?y
processed dir: c:\WINDOWS



20090411a



これが、一番、元の状態に近いですかね・・・[E:despair]



20090411b



C:\>cacls c:\windows
c:\WINDOWS BUILTIN\Users:(OI)(IO)(特殊なアクセス:)
                                 READ_CONTROL
                                 SYNCHRONIZE
                                 GENERIC_EXECUTE
                                 FILE_GENERIC_READ
                                 FILE_GENERIC_EXECUTE
                                 FILE_READ_DATA
                                 FILE_READ_EA
                                 FILE_EXECUTE
                                 FILE_READ_ATTRIBUTES

           BUILTIN\Users:(CI)R
           BUILTIN\Administrators:(OI)(IO)F
           BUILTIN\Administrators:(CI)F
           NT AUTHORITY\SYSTEM:(OI)(IO)F
           NT AUTHORITY\SYSTEM:(CI)F
           CREATOR OWNER:(OI)(IO)F
           CREATOR OWNER:(CI)F





うーん、なんだかよくわかんないよ、NTFS・・・



 



2009年4月11日土曜日

ザ☆ネットスター 4月号

「ねとすた」、見ました。



ネットで話題となっているらしい事象は、すべて、ねとすたから学ぶ ・・・ そんなことに気がつき、毎回、かなり落ち込みます。



というか、「今、世の中では、これが流行してんだぜ!」という姿勢で、ごく限られた情報を大衆へ押し付けるってのは、旧時代のマスコミの手法なんじゃないの~ インターネットでそんなこと言うの恥ずかしい~ とか思わないと、やっていけません[E:despair]



200904101



とか言いつつも、まあ、一応、この番組でとりあげられる内容くらいは、知っておかないとまずいのかも、なんて強迫観念もあるわけでして。[E:gawk]



でさ、もう、こういう↓↓↓ちょっとしたネタを仕込んでおけば、「君ら、よろこぶんだろ?」なんていう制作側の臭い意図がプンプンしてるるわけですが[E:catface]



200904102



えーと、何ですか?



200904103





まずは、ファミリーコンピュータと、ディスクシステムですね。昔は、よく、不燃物のゴミの日に出されているのを見かけました。



200904104





白いのは、ピピンアットマークですよね。
オレンジのがよくわかんない、クソ[E:bearing] 小学生のころ、お金持ちの友達の家に遊びに行くと、必ずあったあのテレビゲームっぽいけど(ブロックくずし、とか)



200904105





こっちば、バーチャルボーイですか。



200904106





この手袋のようなものは、よく知らなかったんですが、パワーグローブというものだそうです。



200904107





今回、一番ずっこけた[E:sweat01]のは、桃井はるこの口から「オープンソース」という単語が飛び出たことでしょうか。



200904108



ところで。



ソースコードのことを設計図と説明するのは、個人的見解としては、全然しっくりときません。



設計図というのは、まだ、完成品に至るまでには、多くの困難を伴う状態のものです。たとえば、「かくばくだんの作り方」という設計図があったとしても、いったいどこから「ぷるとにうむ」とかを手に入れるんだよ、みたいな?



一方、ソースコードは、もうそれ自体が、ほぼ完成品なわけです。



設計図は、いわば、料理のレシピであり、ソースコードは、あとはレンジでチンするだけでOKみたいなところまで到達したものではないかと。



と思ったけど、「動かないソフトウェア」(=食べられません)のソースコードが公開されてたりもするわけで。



ソフトウェアの設計図といったら、「仕様書にちょっと毛がはえたレベルのもの」なんじゃないかな~。





2009年4月10日金曜日

コッペパン 富の川越いもあん&マーガリン

コッペパン
富の川越いもあん&マーガリン



彩の国さいたま
埼玉県産富の川越いも入りのあん使用



200904091



川越ブームだとか言われてますが・・・



200904092



こんなところに「つばさ」



今週は、iPodでつばさを見るのを止めてしまいました。



帰ってきてから、その日のうちに、大きな画面で楽しんで見ています。





 



2009年4月9日木曜日

04月09日のココロ日記(BlogPet)

おなかすきました!はぅぅ~、にょほほさんって帰ってくるのおそいですよ~。料理冷めちゃいます。

*このエントリは、ブログペットのココロが書いてます♪