日曜日, 6月 12, 2011

インストールされたファイルを探す方法 [MacOS X]

パッケージインストーラーでインストールされたファイルやアプリケーションを削除したいとき、アプリ以外のファイルがどこかに残ってしまったり、そもそもアプリとしてインストールされてないのでどこにそれがあるのか分からないなど、困ることがありますが、以下の方法で

●インストールされているパッケージの一覧を見る
   pkgutil --pkgs
●インストールされているパッケージの一覧を見る(正規表現で絞る)
   pkgutil --pkgs='パターン'
●パッケージの情報を見る(インストールされるディレクトリなど)
   pkgutil --pkg-info パッケージ名
●パッケージがインストールするファイルの一覧を見る
   pkgutil --files パッケージ名
●ファイルがどのパッケージからインストールされたのか見る
   pkgutil --file-info ファイル名(パス)

便利です。

日曜日, 1月 09, 2011

PureData をMacでコンパイルするには…(続き)

続き。

結論としては、PureData のコンパイルには失敗した。
stdarg.h の問題は、-isysroot のオプションを、10.6 sdk に変えたらすんなり通ったんだけど、また別の○○が定義されていない系のエラーが出たので、もう追いかけるのをやめた。
というのも、pd をコンパイルせずとも、flext はビルドできたのだ。ソースがありさえすれば良いみたい。インストールされているアプリケーションの Resource の下に src を置いておけば良い。シンボリックリンクでも良い。

さて、vst~ をビルドに取りかかるも、これはかなり難儀。
まず、vstsdk2.3 が必要。mac os x の sdk も 10.4 が必要っぽい。だが、gcc4.2 は dsk10.4 に対応していない。うーん、泣けてくる。vstsdk2.3 -> vstsdk2.4 や、macosx sdk 10.4 -> 10.6 で変わっているところがいろいろあって、ソースレベルで手を入れないとビルドできなさそう。

なので、vst~ のビルドは諦めて素直に windows でやることに方針転換。

PureData をMacでコンパイルするには…(メモ)

PureData 用の vst~ が使いたいのだが、バイナリでは落ちてないみたいなので、ソースからコンパイルする事にした。
そしたら、flextというPD/Max用のプラグイン開発ライブラリが必要ってんで、それもコンパイルすることに。
ところがそれは、PDのソースが必要らしく、それもコンパイルすることに…。

というわけで、以下は PureData-0.42.5 がコンパイルできるようになるまでの経緯。
#現時点ではできるかどうか解らないけど。

さて、早速 make しても stdio.h が見つからないとか言われる。
コンパイルオプションを見たら -isysroot /Developer/SDKs/MacOSX10.4u.sdk というのがあって、どうやら 10.4 用のSDKが必要ということらしいってんで、インストールDVDから 10.4 SDK を入れたら(デフォルトではoffになっている)、おお、コンパイルが通った。

あれれ、また止まった。
今度は何だ。

 /Developer/SDKs/MacOSX10.4u.sdk/usr/include/stdarg.h:4:25: error: stdarg.h: No such file or directory

stdarg.h から呼ばれている stdarg.h が無い?あるじゃん、そもそも読んでるじゃん。
10.4Sdkの下の stdarg.h を見たら、おっ、何だこれは?

 #include_next

見た事無いぞこんなの。
なるほど、サーチパスにある次の同名ファイルを読むんだ、なるほど。(←ググった)

が、そもそも SYSROOT/usr/include/stdarg.h だから、それより優先度の低いパスは無いから見つかるはず無いなー。困ったなー。
何かがおかしいな、これは…。

(続く)

日曜日, 11月 28, 2010

VPSとCentOS

お手軽になったVPSを申し込んだ。
今のサーバーをrootも使えるサーバーに乗り換えようという算段。

デフォルトのOSはCentOS。CentOSは初めてだし、rpm系のOSは好きではないのだが、エンタープライズ用で信頼性が高そうなので勉強もかねて使ってみることにする。

CentOSのリポジトリにはpython2.6が無いのだが、それは困るので、以下からインストール。システムのpython2.4に傷つけずにインストールできる。
http://www.activestate.com/activepython/downloads
これを/opt配下にインストールする。(標準)

ggs_betaを動かすためにpythonのライブラリを2つ追加
easy_install httplib2
easy_install simplejson

その他の構築や設定は以下のサイトを参考にした。
http://centos.server-manual.com/
http://www.crimson-snow.net/hmsvr/centos/ticentos.html

水曜日, 10月 13, 2010

夢2

夢の中で、「これは夢だ」と感じるときがあると聞いたことがある。
夢の内容を思い出しながらさっきのエントリーを書いていて思ったが、今日の夢はそういう状態に近かった。「これは夢だ」ほど明確ではないが、「これは現実ではないな」程度には意識している。起こることが論理的でないとしても、自分では逆らいようのない何らかの状況設定が外側にあって、自分もその中で動いている(あるいは演じている)と感じていたように思う。

夢の中で、これは夢だ、と意識できるようになると、夢の内容をコントロールできるらしい。いつかそれをやってみたい。

それでは、また寝るとしよう。

かなりはっきり夢の内容を覚えているので、メモ。

青山付近のビルの中。豪華なデートを終えたばかりの友人と、食事する店を探して外に出る。
場面は変わって、夜。お台場のプロムナードらしきところ。不意にサバイバルゲームが始まり、私な逃げながら茂みに飛び込む。これは映像であたり判定をするシステム。銃は持っているが、目も悪いし、装備について何も考えていなかったので、かなり不利な状況。敵に見つからないようにするにはどうすべきだったか考える。メタルディテクタは機器が発光するので必ずしも有利ではない。
場面は進んで電車の中。多分目黒線の目黒駅だが、路面電車の雰囲気。ホームの端に止まった先頭車両の中から、通りの向こうの人物を射撃。崩れ落ちる様子がAR合成されて照準スコープ越しに見える。立ったままの実像がこちらを睨む。
電車はそのまま出発。となりから薄茶色の超旧型の車両が出発して並走。しかも1両編成。途中で分岐してレトロな街角に入って行った。夢の中では多分武蔵小山という事になっている。(この風景が超いい感じ!)。おそらくこれは過去の風景を見ているのだろう、と内心思っている。その時気づいたが、並走する車両はバスだった。後輪は1輪。(このバスがまた超いい感じ!)
自分の乗っている車両も、いつのまにかバスに変わって、狭い路地に入り込む。横の家の壁際にぶつかり、立っていた柵が倒れて進路を阻む。私と、もう一人の女性の乗客で柵を立てて直そうとするが、うまく行かない。柵のパイプフレームを曲げたり、いろいろやってるうちに柵はバラバラになり、直すまでもなくどけておけば良しになる。路地を抜けた空き地で壊れたパイプを拾う。パイプにはトランペットのマウスピースが付いている。吹いてみると何とか寂しく音が出る。何かの上によじ登り、パイプを吹く。下には女の子が壊れたバイオリンを持って立っている。一緒に弾こうか?と誘ってみる。女の子、嬉しそうな顔をする。私の手には中華料理が盛られた器。私はそれを箸で食べることを知らなかった。(…という設定になっているが、当然それは設定なだけで、本当に知らないわけはなかろう、と夢の中で思っている。)ここで、目が覚める。

最後に見た中華料理が、汁麺のような、焼きそばのような、シュウマイのような、今まで見たこともないような料理。よーく覚えているので、いつか作ってみたい。このことを覚えておきたくて、このエントリーを書いたのだ。

木曜日, 9月 30, 2010

ディスクリカバリー再び(その3)

ハードディスクが不調な時は、生のままでいいからとにかくデータを安全な場所に移したい。というわけで、dd コマンドを使ってローカルに持ってきている。買ったばかりのマックがあって良かった。なにせディスクが空に近いから。

まずは1GBずつ、エラったら128MBずつ小分けにして、その中でエラった箇所を4MB、128KB と小分けにしながら dd コマンドで吸い上げてゆく。9番目のGBブロックの5番目の128MBブロックならこんな感じ。

dd if=/dev/disk2s10 of=disk2s10_08.4 bs=4k count=32k skip=8x32k

大きなブロックで読めないときは、その中のどこかにエラー箇所があるだろうと思うけど、実際にやってみると、小分けにするとエラーにならずに読める場合がある。というか、意外とそういうことが多かった。(解せないので操作ミスも疑ったが、そうではなくて本当に読めているみたい。騙し騙しやるには小刻みの方が良い、ということか?)
とにかく、小さく分けて読んでいったら、結局のところ、一番細かい128KBブロックが1個読めないだけで、あとは全部読み出す事ができた。最後に、読めなかった128KBのブロックだけを、

dd if=/dev/disk2s10 of=disk2s10_06.3.00.00 bs=4k count=32 skip=1671168 conv=noerror,sync

でエラーを無視して読み込んだら、最終的に回収できなかったのは48KB分のみ、となった。まずは満足。
回収したデータをcatで繋いでひとつのファイルにまとめ、amazonで買ったNASに放り込む。さすがに80GB分だと時間がかかるので、続きの作業は明日にする。

ともかくこれで、ハードウェアのトラブルを気にせずに、純粋に論理的な修復作業に移れる。

この先の作業には、二つのやり方がある。
望ましいのは、まとめたファイルをディスクイメージとしてマウントできるようになること。ext3のマウントについてはここに情報があったので、MacFUSE と fuse-ext2 をインストールして試してみる。正常なディスクイメージではないので、もうひと手間かかるかも知れない。それが難しそうなら(面倒そうなら)、PhotoRecを使ってファイルだけでもサルベージする。写真や映像がほとんどなので、意外とこの方法でも十分かもしれない。

月曜日, 9月 27, 2010

ディスクリカバリー再び(その2)

エラーになる度に手作業でやるのはシンドイので、1GBずつ小分けに読み込んでファイル化し、読めなかった部分は更に128MBずつに小分けにしてファイルにし…、という戦法でいくことにした。128MBの読み込みは、1GBの時のエラー出力を元に自動化するようにスクリプトをつくる。

で、1GBごとに次々読ませてゆくと…、途中で

dd: /dev/disk2s10: Device not configured

というエラーが出て、その後は全部

dd: /dev/disk2s10: No such file or directory

になる。
これはパーティション全体を読み終えたのかな?と思ったがそうではなく、途中でディスクの認識が切れてしまったみたい。うーむ、ハードのトラブルだとこういうことも起こるか。
USBを抜き差ししてドライブを再認識させ、その続きを実行する、と。

さて、まだ時間がかかりそうだし、ひとまず寝るとするか。また途中で認識が切れるんだろうなー。週末で片付けるつもりだったけど、多少気長にやるしか無いかな。

そして、amazon に NAS を注文した。BUFFALO の LinkStation LS-XH1.0TL。あさってには届くであろう。

日曜日, 9月 26, 2010

ディスクリカバリー再び

外付けハードディスクがマウントできなくなった。読みに行くと、時計の秒針のような嫌な音が続く状態…。あ、これは物理的にやられたな、と思う訳だけど、昔の仕事やプライベートのムービーやら写真やら入っていて簡単には諦められない。ので、なんとかデータだけでも救い出したいと思う。

160GBのディスクを、80GBづつ、2つのパーティションに分けて使っているが、1つめのパーティションは以前ディスクエラーがあったパーティションで、今は使っていない。(考えてみたら、その時に、ディスクごと交換しておけば良かったのだ…。)

ディスクユーティリティ等で見ると、パーティションは見えているので、テーブルは読み出せている。問題のパーティションは/dev/sdb10と見えている。ext3フォーマットだ。が、パーティションの冒頭がやられているらしく、スーパーブロックが読めなくてマウントできず。

 e2fsck -b 32768 /dev/sdb10

などと代替スーパーブロックを指定してもダメ。

ヘタってるディスクをいつまでもいじっていたくないので、ディスクの空いている別のマシンにつなぎ直し、ddコマンドで必要なパーティションだけローカルのファイルにコピーする事にした。しかし、


 ch01% dd if=/dev/disk2s10 of=disk2s10 bs=4k
 dd: /dev/disk2: Input/output error
 0+0 records in
 0+0 records out
 0 bytes transferred in 28.886230 secs (0 bytes/sec)


というエラーで止まってしまう。skipでずっと先のブロックを指定すると読み込めるので、全部が読めないわけではないらしい。読めるとこまで読んで、エラーで止まったらその次のブロックから読む、というのを手作業でやっても良いが、以下のコマンドを走らせる事にした。


 dd if=/dev/disk2s10 of=disk2s10 bs=8k conv=noerror,sync >& disk2s10.error


conv=noerror を付けると、読み書きにエラーがあっても処理を中断せずに続けてくれる。今回の場合はディスクの読み込みエラーが頻発するので、その度にskipを手作業で指定して続けるのは大変なのでこうした。conv=syncを指定しておくと、エラーがあったブロックもnullを書き出してくれる。これをしないと後でサイズが合わなくなるので必須。

さて、読み出しを始めたが…、遅い。すごく遅い。エラーにぶつかる度に待ちが入るので、平均1.5kbyte/sec。エラーブロックの割合によるが、このままでは読み込みに数ヶ月かかる計算。これはまずい。
どうせゼロしか埋まってないんだから、ある程度手探りで、読めそうなところを読むか…。

というわけで、作業続く…。