sbcl
丁度今頃発売の雑誌は、豪華付録が付いていて、見ていて楽しい。付録が大きすぎて、付録と 雑誌がセパレートになって陳列されてたり。。そそっかしい人は付録だけ持ってレジに 並んだりして。シャトンじゃなくてビトンだかシャネルの付録が付いていた雑誌は何でしたかね? 女房が買ってこないか、ちょっとハラハラドキドキしてる。だって、貧乏丸出しじゃないですか。
後は、このご時世を繁栄してか、ECOバックってのが多かったな。面白いのは、スノボの雑誌に 付いていた、DVDになったレッスンビデオ。進化したものだ。おいらの頃(どんだけ、昔だ)は パラパラ漫画宜しく、連続写真が載ってて、ページをパラパラして、オーーオ、こうやって ターンするんだなんて、感心して見入ったものです。今なら、YouTubeあたりで、適当に見繕って、 アップルのえーと、何て言うんですかね、、あたりに入れて、スキー場に連れてってあげるのが 、ナウイ人のやる事ですかね。(ああ、すっかり、ITオンチだな)
女房は、家計簿は買ってこないけど、この時期、猫手(帖)付録の、ニャン子カレンダーを 目当てで、雑誌を買ってくる。CMで有名になった、あの猫はエントリーしてるのだろうか? ちょっと、興味があるな。
portsのupdate
今までは、portsのupdateを pkgから取ってきた、cvsupで賄っていたけど、SDを見てたら デフォで、FreeBSDに用意されてる事を知った。何でも、下記を/etc/src.confに書いて おいて、cd /usr/ports; make update すればいいらしい。
SUP_UPDATE= yes SUP= /usr/bin/csup SUPFLAGS= -g -L 2 SUPHOST= cvsup2.jp.FreeBSD.org SUPFILE= /usr/share/examples/cvsup/standard-supfile PORTSSUPFILE= /usr/share/examples/cvsup/ports-supfile
で、実際にやってみたら、portsnapが起動しちゃう。manと勘を頼りに、上記を/etc/make.confに 追加してあげたら、無事に動き出した。私のBSDがおかしいのかしらん? 動いているから、いいか。
今回からは、/usr/srcを元に、buildworld や buildkernel を実行するのを止める事にした。 その変わり、binaryでのupdateだけを行う事にしよう。
[root@fb8 ~]# freebsd-update fetch Looking up update.FreeBSD.org mirrors... 3 mirrors found. Fetching metadata signature for 8.0-RELEASE from update5.FreeBSD.org... done. Fetching metadata index... done. Inspecting system... done. Preparing to download files... done. The following files will be updated as part of updating to 8.0-RELEASE-p1: /usr/src/etc/mtree/BSD.var.dist /usr/src/libexec/rtld-elf/rtld.c /usr/src/sys/conf/newvers.sh /usr/src/usr.sbin/freebsd-update/freebsd-update.sh [root@fb8 ~]# freebsd-update install Installing updates... done. [root@fb8 ~]# shutdown -r now
失敗した時は、rollback で、一つ前だけど戻せるそうだ。
clisp-hyperspec
前回、どんな風の吹き回しか sbcl を入れちゃったけど、まともに使おうと思ったらhelperが 必要な事に気が付いた。で、hyperspecなんてのがあるかと思って探したら、portsの中に 紛らわしい名前で登録されてた。clisp-hyperspecですって。
これって、clisp用のそれかと思ったら、CommonLisp用のhyperspecなのね。早速入れて あげましたよ。そして、hyperspecをemacs上から引けるように、.emacsにちと追加。
;;;;;;;; Common lisp hyper-spec --> C-c C-d h (require 'hyperspec) (setq common-lisp-hyperspec-root (concat "file://" (expand-file-name "/usr/local/share/doc/clisp-hyperspec/HyperSpec/")) common-lisp-hyperspec-symbol-table (expand-file-name "/usr/local/share/doc/clisp-hyperspec/HyperSpec/Data/Map_Sym.txt")) (require 'w3m) (setq browse-url-browser-function 'w3m-browse-url)
ここまではいいんだけど、www/emacs-w3mを入れようとしたら、開発版を入れろですって。そんなの 何処にあるんかいな? Makefileを見れば手がかりが得られるかな?
MASTER_SITES= http://emacs-w3m.namazu.org/
と言う事で、行ってみたら開発版がCVSで提供されてた。取ってきて入れた。portsって宝の山だ なあ。
sbclのupdate
portsを更新して、pkg_version したら、sbclが新しくなっている事が判明。早速 portmaster sbcl-1.0.30.0 して、新しくしようとしたら、冒頭で、メモリーたくさんいるぜ と 言われつつも、更新が始まった。いやな予感がするなあと思っていたら、途中で ldbに に落ちちゃったよ。quitで ldbを抜けると、メモリー不足でしたって! 嘘警告じゃ無かった 訳ね。
そもそも、メインメモリーが128M、スワップを256Mにして使ってるんだけど、これだとemacsを 起動して、goshなりghciを起動してもSWAPせずに快適に使えていたんだ。お祭りの時は、特別仕立て の環境にしないとだめかい脳。
VMWareの設定を変更して、メモリーを384Mにした。後、SWAPも増設してあげる事にした。
[root@fb8 ~]# dd if=/dev/zero of=/usr/home/myswap bs=1024k count=512 512+0 records in 512+0 records out 536870912 bytes transferred in 34.833419 secs (15412524 bytes/sec) [root@fb8 ~]# chmod 0600 /usr/home/myswap [root@fb8 ~]# mdconfig -a -t vnode -f /usr/home/myswap -n 0 0 [root@fb8 ~]# swapon /dev/md0 [root@fb8 ~]# swapinfo Device 512-blocks Used Avail Capacity /dev/da0s1b 524288 0 524288 0% /dev/md0 1048576 0 1048576 0% Total 1572864 0 1572864 0%
この状態でUpdateしたら、無事に sbcl-1.0.31になった。そのうちに、ghcなんかのupdateでも この技が必要になるのだろうな。/etc/rc.conf に swapfile="/usr/home/myswap" と書いて おくと、次回起動時に自動的にSWAPを増やしてくれる。
ldb とは、何物ぞ?
sbclのupdate時に、ldb に落ちたと書いたけど、気が動転しててそのままスルーしちゃった。 折角の機会なので、よく観察してみる。まずは、どんな風に落ちるか再現実験。
; compiling (DEFUN CLASS-OF ...) ; compiling (DEFUN EVAL-FORM ...)mmap: Cannot allocate memory fatal error encountered in SBCL pid 1365: remap_free_pages: page moved, 0x00001c28 ==> 0x00000000 Welcome to LDB, a low-level debugger for the Lisp runtime environment. ldb>
ようこそいっらっしゃいませー って、言われてもねえ。場末のキャバレーの、おばちゃんホステス に声を掛けられたみたいで、ちっとも嬉しくないんですが。。。
ldb> ? help Display this help information. ? (an alias for help) backtrace Backtrace up to N frames. catchers Print a list of all the active catchers. context Print interrupt context number I. dump Dump memory starting at ADDRESS for COUNT words. d (an alias for dump) exit Exit this instance of the monitor. flush Flush all temp variables. grab-signals Set the signal handlers to call LDB. kill Kill ourself with signal number N (useful if running under gdb) purify Purify. (Caveat purifier!) print Print object at ADDRESS. p (an alias for print) quit Quit. regs Display current Lisp registers. search Search for TYPE starting at ADDRESS for a max of COUNT words. s (an alias for search)
まあ、初めてのご対面なので、どんなサービスが提供されてるかだな。で、さすが底辺だけ あるわい。
ldb> backtrace Backtrace: 0: Foreign function ldb_monitor, fp = 0x286fed68, ra = 0x8055c07 1: Foreign function lose, fp = 0x286fed98, ra = 0x8053865 2: Foreign function zero_pages_with_mmap, fp = 0x286fedb8, ra = 0x805bbb0 3: Foreign function collect_garbage, fp = 0x286fee98, ra = 0x805e1d6 4: SB-KERNEL::COLLECT-GARBAGE 5: (COMMON-LISP::FLET SB-THREAD::WITH-MUTEX-THUNK) 6: (COMMON-LISP::FLET WITHOUT-INTERRUPTS-BODY-[SUB-GC]13) 7: (SB-C::TL-XEP SB-KERNEL::SUB-GC) 8: Foreign function call_into_lisp, fp = 0x286ff018, ra = 0x805fd3b 9: Foreign function funcall0, fp = 0x286ff038, ra = 0x8050bcd 10: Foreign function maybe_gc, fp = 0x286ff058, ra = 0x8051771 11: Foreign function interrupt_handle_pending, fp = 0x286ff088, ra = 0x80546e7 12: Foreign function unblock_signals_in_context_and_maybe_warn, fp = 0x286ff0a8, ra = 0x80550f6 13: Foreign fp = 0x286ff3e8, ra = 0xbfbfffb4 14: SB-C::READ-FOR-COMPILE-FILE 15: SB-C::SUB-SUB-COMPILE-FILE 16: (COMMON-LISP::LAMBDA ()) 17: (COMMON-LISP::FLET SB-THREAD::WITH-RECURSIVE-LOCK-THUNK) 18: (SB-C::TL-XEP SB-C::%WITH-COMPILATION-UNIT) 19: SB-C::SUB-COMPILE-FILE 20: (SB-C::TL-XEP COMMON-LISP::COMPILE-FILE) 21: (COMMON-LISP::LAMBDA ()) 22: SB-INT::SIMPLE-EVAL-IN-LEXENV 23: SB-FASL::LOAD-AS-SOURCE 24: (COMMON-LISP::FLET SB-FASL::LOAD-STREAM) 25: (SB-C::TL-XEP COMMON-LISP::LOAD) 26: SB-INT::SIMPLE-EVAL-IN-LEXENV 27: (SB-C::TL-XEP SB-EXT::INTERACTIVE-EVAL) 28: SB-IMPL::REPL-FUN 29: (COMMON-LISP::LAMBDA ()) 30: SB-IMPL::%WITH-REBOUND-IO-SYNTAX 31: SB-IMPL::TOPLEVEL-REPL 32: SB-IMPL::TOPLEVEL-INIT 33: SB-KERNEL::!COLD-INIT
また、随分深い所だ事。後使えそうなものは?
ldb> catchers 0x286FFD54: uwp: 0x286FFF5C fp: 0x286FFD7C code: 0x580E63C7 entry: 0x580E6C65 tag: $1= 0x5801c917: other pointer 0x286FFF48: uwp: 0x00000000 fp: 0x286FFF7C code: 0x59695F57 entry: 0x59696A6C tag: $2= 0x580db7c7: other pointer ldb> regs CSP = 0x286ff3d0 CFP = 0x00000000 ALLOC = 0x5b320000
catchersって、客引きの事かいと言い。それにしても、regが3つだけとは、インテルの石より も貧弱? 長居は無用じゃ、さっさと退散しましょ。
ldb> quit Really quit? [y] y 1059.50 real 21.83 user 11.48 sys *** Error code 1 Stop in /usr/ports/lang/sbcl. *** Error code 1 Stop in /usr/ports/lang/sbcl. [root@fb8 /usr/ports/lang/sbcl]#
ああ、やっと娑婆に復帰したわい。これから、忘年会シーズン、夢々、へんな所に引っ張り こまれないように注意めされ。