goo blog サービス終了のお知らせ 

ttt

getttyent

(FreeBSD) emacs-24でM-x gdb

2014-03-20 23:59:00 | デジタル・インターネット

しばらく前から薄々気がついてはいたのですが

Emacsで、M-x gdb して、gdbでデバッグしようとすると、なんか変。

Emacsgdb1

調べてみてわかったのですが、「gdb -i=mi」と表示されてるのが、実はミソらしいのですが…

Emacsgdb2

(gdb) というプロンプトのあとに、余計なものが表示されていたりして、思うような動作をしてくれない、という不具合。

どうも、Emacsをバージョン24にしてから、こういう挙動になったようで、Emacs 22なら、ちゃんとしていました。なのでgdbの問題ではなく、Emacsの問題らしいです。

ネット検索してみたら、とりあえずの回避方法を発見。

M-x gud-gdb とすればよいそうです。

Emacsgdb3

gud-gdbは、昔ながらの機能だそうです。じゃあ新しいほうは、なぜ思い通りに動いてくれないのか?という疑問もあるのですが、それは後回しにして…

Emacsgdb4

ああ、あの感じだ、ちゃんと動きました。

・・・で、いまどきのEmacsでgdb、どうすればいいんでしょうかね

というかgdbに限らず、いまどきのEmacsの作法、ぜんぜんわかっていない気がします。時代遅れにならないよう、ちゃんと勉強しないといけないのかなぁと、反省。

でも、今の若い人、Emacsを使わないんですよね・・・



インパク

2014-03-14 23:59:00 | デジタル・インターネット

押し入れをガサガサやってたら、昔のビデオテープを発掘してしまったので、

「しょうがない、キャプチャしておくか」

・・・ということで、寝てる間にやってました。

その中で、こんなCMがありました。

201403141

インパクはインターネットによる博覧会です。

201403142
www.inpaku.go.jp

201403143
楽網楽座
インパク
インターネット博覧会
INTERNET FAIR 2001 JAPAN
夏あそび 開催中!
新千年紀記念行事推進室

・ ・ ・ えーっと ・ ・ ・

「あ~!あ~!そういえばあった!!


テレビ番組って、どんなつまらない番組でも、20年くらいたつと、けっこうおもしろくなります。

(どちらかというと、つまらない番組のほうがおもしろくなるし、番組よりCMのほうがおもしろい)

2020年ころに、インパクを「再放送」(というか再アップロード?)したら、かなりおもしろいんじゃないかと思います。

データ、残ってるんでしょうかね?

というか、大原麗子さん?!


(FreeBSD) gnome2を起動直後、metacityが落ちてまともに使えない

2014-03-13 23:59:00 | デジタル・インターネット

FreeBSDのportsでインストールしたgnome2なんですが、しばらく前から、startxでXを立ち上げて、gnome2が動き出して、使えるようになったかな、と思ったころに、バツ印や白紙のアイコンが表示されて、まともに使えない、という症状がでてました。

いつもそうなる、というわけではなく、動いたり動かなかったり、という感じ。

startxではなく、gdmからログインしてもそうなることがありました。

metacityが落ちては、自動起動して、また落ちる、を延々と繰り返していました。

gdbで見てみると、meta_ui_get_default_window_iconというところで、死んでました。

(gdb) where
#0  0x000000080974623c in thr_kill () from /lib/libc.so.7
#1  0x00000008097ea63b in abort () from /lib/libc.so.7
#2  0x0000000806ef94e4 in g_assertion_message ()
   from /usr/local/lib/libglib-2.0.so.0
#3  0x0000000806ef9ab2 in g_assertion_message_expr ()
   from /usr/local/lib/libglib-2.0.so.0
#4  0x0000000000480a63 in meta_ui_get_default_window_icon (ui=0x80aed0500)
    at ui/ui.c:752
#5  0x0000000000430c1b in get_fallback_icons (screen=0x80abbed00,
    iconp=0x7fffffffc9f8, ideal_width=32, ideal_height=32,
    mini_iconp=0x7fffffffc9f0, ideal_mini_width=16, ideal_mini_height=16)
    at core/iconcache.c:45
#6  0x0000000000432078 in meta_read_icons (screen=0x80abbed00,
    xwindow=12582952, icon_cache=0x80b048868, wm_hints_pixmap=0,
    wm_hints_mask=0, iconp=0x7fffffffc9f8, ideal_width=32, ideal_height=32,
    mini_iconp=0x7fffffffc9f0, ideal_mini_width=16, ideal_mini_height=16)
    at core/iconcache.c:824
#7  0x0000000000456e7d in meta_window_update_icon_now (window=0x80b048800)
    at core/window.c:5775
#8  0x000000000044ddda in meta_window_new_with_attrs (display=0x80aefca00,
    xwindow=12582952, must_be_viewable=1, attrs=0x80aef2788)
    at core/window.c:601
#9  0x000000000043eb5a in meta_screen_manage_all_windows (screen=0x80abbed00)
    at core/screen.c:766
#10 0x0000000000420ddd in meta_display_open () at core/display.c:735
#11 0x0000000000438169 in main (argc=1, argv=0x7fffffffd578)
    at core/main.c:585
(gdb)

ネット検索して調べてみると

http://lists.freebsd.org/pipermail/freebsd-gnome/2013-August/028988.html
Metacity fails after updates

で報告されているのと、ぴったり同じようです。

このスレッドを読んでいくと、とりあえずの解決方法が見つかりました

http://lists.freebsd.org/pipermail/freebsd-gnome/2013-August/028990.html

To fix the problem, click on the System menu item and select "Preferences->Appearance".

メニューの、「システム」 - 「設定」 - 「外観の設定」 を選べばいいようです。

たしかに、直りました。
今まで、再起動させていたので(なぜかXサーバを2回起動すると、OSごとフリーズすることがあるので)、かなりましになりました


gnome-settings-daemonが動いていないときに、そういう現象がおきるそうで、メニュー
「システム」 - 「設定」 - 「外観の設定」を選ぶと、gnome-settings-daemonが起動されるため、直る、とのこと。

何かプロセスが競合して、gnome-settings-daemonが正常起動しないことがあるんでしょうかね?


また、デスクトップなどにあるアイコンが、白紙の絵柄になってしまっていることがあったので、そのときはnautilusをkillしてみました。
nautilusが再起動して、元のアイコンに戻ります。

この不具合は、Linux方面でも報告されていて、FreeBSD固有ではなく、GNOME2の問題らしいです。GNOME2の開発はもう活発ではないので、放置状態になっているんだとか。

20140313


Intel Galileoのシリアルケーブル

2014-03-09 22:50:25 | デジタル・インターネット

買ったけど、ほとんど触っていないGalileoですが・・・
とりあえずminiPCIeなWiFiカードを入手して、Linux上で無線LAN接続できることくらいは確認しました。あいかわらず、Arduinoな部分はほぼ放置いや保留状態です。

さて先月のこと。
RS232Cなシリアル接続するのに、ステレオミニプラグなケーブルが必要。

・・・あれ?そんなケーブル、たしかもっていたような気がする!と思って、押し入れの中をゴソゴソ。

あった!ラッキー!

20140309

なんでこんなの持ってたんだろう?でもよかったなぁ・・・と思いながら、ケーブルをさすと・・・

スカッ

なんじゃこりゃ、プラグが細い・・・よく見たら、ふつうのステレオミニプラグよりも一回り細いプラグでした

仕方ないので、あまってたオーディオ用のステレオミニプラグケーブルをちょんぎって、つなぎました。

ちなみに、PCではRS232Cインターフェイスなんて、今はもうほとんど無くなってしまった過去の代物ですが、うちにあったPCの1台についてました DSUB25ピンとかじゃなくて、9ピンでした。押し入れからは、25ピンのケーブルも出てきたのですけどねぇ。

それにしても、Galileo側で、USBシリアルにしてくれれば便利だったのに・・・

シリアルコンソールだと、電源オンの直後のブートメニューを見られるので、やっぱりシリアルインターフェイスはあったほうがよさそうです。

■ 過去記事


freebsd-update IDS でファイルが正しいかチェックできる

2014-03-06 23:59:00 | デジタル・インターネット

ふだん一番よく使っているFreeBSDマシンが、先日、ひさびさにkernel panic。
/var/crash/以下にできたファイルを見ると、どうもzfsがらみらしい。

いろいろ試すと、zfs.koがロードされただけでkernel panicしている(合計3回kernel panicさせた)。

そのマシンではZFSは使っていなかったので、そもそもなぜzfs.koがロードされたのかがわからなかったけど、それはさておき、なぜzfs.koをロードすると落ちるのだろうか・・・という疑問。

別のFreeBSDマシンとで、/boot/kernel/以下のファイルを比較してみたところ、見事に、zfs.koだけ不一致。どうやら、/boot/kernel/zfs.koが、いつのまにか別のファイルに置き換わってしまったらしい・・・なぜだ! 怖い!

よ~く比較してみると、まったく別のファイルというわけではなくて、hexdumpして比較してみると、途中までは同じで、symbol tableっぽいものが現れるあたりから不一致してた。別バージョンのファイルと置き換わってしまっただろうか・・・

おかしなことに、/var/db/freebsd-update/ 以下に残っていた、zfs.koファイルは正常なものだった(ちなみに、ファイルのfull pathをSHA256ハッシュ値にしたものが、/var/db/freebsd-update/以下のファイル名になっているらしい)。

なぜこんなことが起こったんだろうか、気持ち悪い。

今回は、別のFreeBSDマシンと比較してみたわけですが、freebsd-updateを使っているんだったら、もっとカンタンにチェックできるんじゃない?と思いつき、man freebsd-update ・・・

ありました。

freebsd-update IDS というコマンドで、インターネットから正常なファイルのハッシュ値のファイルをダウンロードしてきて、インストール済みのファイルと比較して、不一致を見つけてくれます。

こんな感じです。

Looking up update3.FreeBSD.org mirrors... none found.
Fetching metadata signature for 9.2-RELEASE from update3.FreeBSD.org... done.
Fetching metadata index... done.
Inspecting system... done.
/boot/kernel/linker.hints has SHA256 hash b0cc18fa3c52568d8b6fa814044e1dc536ca57d4ceee815f38dc80fa140eeca1, but should have SHA256 hash 1027485d3bbea91931b1289c751d8530c33b67f562376237d39085133096bcfd.
/boot/kernel/zfs.ko has SHA256 hash 507b234cd4643e8d4ac4dfa28c56747c86f1f536a3b7ef5dff6abc45c015335c, but should have SHA256 hash 5af7feb5541a3874450cbeecccca9f69b0351f56cf45cb701cc0a057becb3b4f.
/etc/crontab has SHA256 hash 96cd2e3c7c7d423f0deb0deb57e66bd1269cd4fe2ccf42cce880ee0c0a4d4fb4, but should have SHA256 hash da4b2db5e7b40015da2b162a238b6a588766e988111ef9f43d7ecae4a04c9436.
以下省略

たしかに/boot/kernel/zfs.koが不一致だと言われました。
/etc/以下の、たしかに自分で書き換えたぞ、というファイルまで、どうしても不一致だといわれてしまいますが・・・まあ、freebsd-update IDS、知っていると便利かもしれません。自分で、kernel reconfigしている人、stableやcurrentをおっかけている人では、使えませんが。

置き換わっていたファイルのSHA256から、「実はそれはFreeBSD 10-RELEASEのzfs.koだ」とかわかるんじゃないかと思ったのですが、まあいいか、と放置しました。

それにしても気持ち悪いです。

20140306


(PHP) Undefined symbol "ps_globals" in Unknown on line 0

2014-03-05 23:59:00 | デジタル・インターネット

FreeBSDのportsで、phpなんとかや、peclなんとかをアップデートしたあと、たとえばphp -vとかしたときに、

PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/local/lib/php/20090626/http.so' - /usr/local/lib/php/20090626/http.so: Undefined symbol "ps_globals" in Unknown on line 0
PHP 5.3.28 with Suhosin-Patch (cli) (built: Feb 18 2014 13:51:11)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2013 Zend Technologies
    with Xdebug v2.2.3, Copyright (c) 2002-2013, by Derick Rethans

とか出てくる問題があるのですが、これはどうやらextensions.iniで、
extension=session.so
を上のほうにもっていけばいいらしいです。
いままでは、portupgrade -f pecl* とやってました。

それよりも、5.3をなんとかしなければいけないです・・・

20140305


インターネットできない(笑)

2014-02-22 23:24:24 | デジタル・インターネット

またしても、実家のネットワーク接続が途切れまして、いろいろ手をつくしてみたもののダメだったので、復旧作業へ向かいました。

えーと、ルータがPPP接続してくれなくなってました。

サーバの問題かと思っていたのですが、出入り口の部分の問題でしたか。それでは、何やってもダメですな。

ルータの設定画面を見たら「障害」とか出てました。IP電話は問題なかったようです。

こんなわかりやすいところに「再起動」ボタンがあるってことは、ときどき押す必要がある、ってことなんですかね・・・

20140222

■ 過去記事


(FreeBSD) make install packageするとpkg-staticがcore dump

2014-02-20 23:59:00 | デジタル・インターネット

FreeBSDの新しいパッケージ管理の仕組み「pkgng」の使い方がだんだんわかってきたところです。

ついでに、portupgradeをやめてportmasterに移行しました。portmasterのほうがキビキビ動作して、気持ちいいです

バイナリパッケージは、公式のものではなく、自前でビルドしたものを使えるようにしておきたいと思っているので、make packageとかやるんですけど・・・

make packageは、すでにインストール済みのファイルからパッケージを作成する

という動作に、いつのころからか変わっていたんですね。昔は、make installもやったあとに、パッケージを作成していたと思ってたんですが、今は、make packageだけでは、installはしてくれないようです。

portsをmakeしたり、portmasterを実行したときに、依存関係のあるportsもついでにビルドしてインストールされたりアップデートされますが、それらのバイナリパッケージも作成したいため、/etc/make.confにてDEPENDS_TARGET=install package と書いておいたら、pkg-staticがcore dumpするようになりました。

gdbでちょっとだけ調べてみたのですが・・・

This GDB was configured as "amd64-marcel-freebsd"...
Core was generated by `pkg-static'.
Program terminated with signal 11, Segmentation fault.
#0  0x00000000005a0bcc in ucl_obj_ref (obj=0x0) at ucl.h:743
743             obj->ref ++;
[New Thread 801009400 (LWP 100485/pkg-static)]
(gdb) where
#0  0x00000000005a0bcc in ucl_obj_ref (obj=0x0) at ucl.h:743
#1  0x00000000005a0b99 in ucl_parser_get_object (parser=0x80105de70)
    at /....../ports/ports-mgmt/pkg/work/pkg-1.2.6/libpkg/../external/libucl/src/ucl_util.c:230
#2  0x0000000000564795 in pkg_parse_manifest_file (pkg=0x8010611c0,
    file=0x7fffffffce60 "/....../ports/x11/smproxy/work/.metadir/+MANIFEST", keys=0x8010258d0) at pkg_manifest.c:748
#3  0x000000000043d83d in pkg_create_staged (
    outdir=0x7fffffffd954 "/usr/ports/packages/10-stable/amd64/All",
    format=TXZ,
    rootdir=0x7fffffffd875 "/....../ports/x11/smproxy/work/stage",
    md_dir=0x7fffffffd8bc "/....../ports/x11/smproxy/work/.metadir",
    plist=0x7fffffffd906 "/....../ports/x11/smproxy/work/.PLIST.mktmp", old=false) at pkg_create.c:248
#4  0x0000000000407e93 in exec_create (argc=1, argv=0x7fffffffd570)
    at create.c:262
#5  0x000000000040bd47 in main (argc=10, argv=0x7fffffffd528) at main.c:774
Current language:  auto; currently minimal

#0  0x00000000005a0bcc in ucl_obj_ref (obj=0x0) at ucl.h:743
743             obj->ref ++;
(gdb) l
738      * Icrease reference count for an object
739      * @param obj object to ref
740      */
741     static inline ucl_object_t *
742     ucl_obj_ref (ucl_object_t *obj) {
743             obj->ref ++;
744             return obj;
745     }
746
747     /**
(gdb) p obj
$1 = (ucl_object_t *) 0x0

nullポインタなわけですね。

NULLかどうかチェックする処理を追加してみたのですが、

===>  Installing for xcalc-1.0.5
===>  Checking if x11/xcalc already installed
===>   Registering installation for xcalc-1.0.5 as automatic
Installing xcalc-1.0.5... done
===>  Building package for xcalc-1.0.5
pkg-static: fopen(/....../ports/x11/xcalc/work/.metadir/+MANIFEST): No such file or directory
*** Error code 1

Stop.
make[3]: stopped in /usr/ports/x11/xcalc
*** Error code 1

となるので、まあそうカンタンには直らないバグのようです。


なぜNULLになるのか、すぐにはわからないので諦めました。

bsd.port.mkを見ると、package-recursiveというターゲットがあるので、それでもよさそうな気がしますが、直近にインストールしたものだけでなくて、全部?のバイナリパッケージを作ってしまうような感じがしました。

20140220


(FreeBSD) portsのmail/imap-uwでUnable to load certif

2014-02-19 23:59:00 | デジタル・インターネット

最近、pkgngに移行して、ついでにバイナリパッケージをビルドしなおしています。
ふと気がつけば、imap-uwなPOP3/IMAPが動かなくなっていました。

ログメッセージでは、Unable to load certificate from /SOMEWHERE/cclient/work/stage/usr/local/certs/ipop3d.pem, host=HOSTNAME [IP ADDRESS]というエラーが記録されていました。

どうやら、portsのmail/cclientをビルドしたときに、OSCFLAGSというファイルのSSL_CERT_DIRECTORYで、

-I/usr/include -I/usr/include/openssl -DSSL_CERT_DIRECTORY="/SOMEWHERE/cclient/work/stage/usr/local/certs" -DSSL_KEY_DIRECTORY="/SOMEWHERE/cclient/work/stage/usr/local/certs"

という感じで、SSL_CERT_DIRECTORYとSSL_KEY_DIRECTORYにて、ビルド中の作業ディレクトリのパスが指定されてビルドされているのが原因のようです。本来は、/usr/local/certsにならないといけないと思うのですが・・・

なぜそうなるのかは、portsの、mail/cclient/Makefileのpost-patchの部分で、書き換えを行っているからみたいです。

どういう意図なのかよくわからなかったのですが、とりあえずimap-uwのサービス復旧を急ぐために、make clean、make patchしたあと、どこかの(忘れた)Makefileの以下のような部分を見つけて、SSLCERTSとSSLKEYSの指定を/usr/local/certsへ手で書き換えて、makeしなおしました。

bsf:    an
        $(TOUCH) ip6
        $(BUILD) BUILDTYPE=$@ IP=$(IP6) \                                       
        PASSWDTYPE=pam \                                                       
        SPECIALS="SSLINCLUDE=/usr/include SSLLIB=/usr/lib SSLCERTS=/SOMEWHERE/cclient/work/stage/usr/local/certs SSLKEYS=/SOMEWHERE/cclient/work/stage/usr/local/certs GSSINCLUDE=/usr/include GSSLIB=/usr/lib PAMLDFLAGS=-lpam"

とりあえず復旧。

なぜこうなったんでしょうかね。
いつからこうなったんでしょうかね。

20140219


(FreeBSD) つながっていないシンボリックリンクを、findコマンドで削除する

2014-02-18 23:59:00 | デジタル・インターネット

この前、たまたまman findして見つけたのですが、EXAMPLESにこんなのが載っていました。

     find -L /usr/ports/packages -type l -exec rm -- {} +
             Delete all broken symbolic links in /usr/ports/packages.

参照先が存在しないシンボリックリンクを削除できる、ということです。

一瞬、「あれれ?これじゃ、すべてのシンボリックリンクを削除してしまうんじゃないの?」と思ったのですが、「-L」オプションのおかげで、そうはならないのでした。

     -L      Cause the file information and file type (see stat(2)) returned
             for each symbolic link to be those of the file referenced by the
             link, not the link itself.  If the referenced file does not
             exist, the file information and type will be for the link itself.

             This option is equivalent to the deprecated -follow primary.

-Lオプションがついてると、

  • シンボリックリンクの場合は、参照先の情報が使われるようになって、
  • しかし、参照先が存在しない場合のみシンボリックリンクそのものの情報が使われる

とのこと。なるほど。だから、「-type l」でひっかかるのは、参照先が存在しないシンボリックリンク、ということになるんですね。

それから、「-exec ... {} +」という指定方法があるのも初めて知りました。

     -exec utility [argument ...] {} +
             Same as -exec, except that ``{}'' is replaced with as many path-
             names as possible for each invocation of utility.  This behaviour
             is similar to that of xargs(1).

なるほど、こっちを使った方がプロセスを起動する回数が減るので、効率がいい場合がありますね。xargsは、いつも使い方を忘れてしまうので、findだけでできるなら手間いらず。

まだまだfindコマンドは知らない機能がたくさんあるなと思いました

20140218