Island Life

< キプロス土産 | 病院の一日 >

2008/07/25

環境設定メモ

サブマシン(Athron 64X2, socket 939)のオンボードGPUがしばらく前に壊れてしまった。 ビデオカードだけ挿そうにも、マザーボードの挿し口はPCIE、 手持ちのビデオカードはAGPのやつしかない。 で、置き換えを検討していたのだが、 新しめのマザボはどれもsocket AM2でDDR2になってしまっている。 どうせCPUとメモリまで総取っ替えするなら、もう6年使ってるメインマシンの方を変えたい。 ということで中身総取っ替え計画発動。メインマシンをCore2 Quad / DDR2 にして、 サブマシン用には壊れたマザボと同世代のやつ(ただしオンボードGPU無し、AGP、DDR)を 購入、メインマシンのビデオカードを流用することにした。サブのCPUとメモリも流用。

メインの新しいボードはSATAなので、HDDはIDE-SATAコンバータを介して接続。 さて、grubから/bootにあるカーネルを読むまではいいんだがlogical volumeが 見つけられないと申す(元のシステムはFedora8/i386)。Ubuntu 64のインストールCDで 立ち上げたらちゃんとlogical volumeも見えてマウントできるのに。もう面倒なので そのままUbuntuをインストールしてしまうことにする。

Ubuntu 7.10 x86_64 をCDからインストール。だいたいスムースに進む。 ただ、nvidiaのドライバがうまく動かないのと、オンボードether (Realtek 8111c) が認識されるにもかかわらずパケットが出てかない。

Update managerから8.04へとアップグレード。 localedefで刺さる問題に引っかかる。killall locale-genでインストールを通してから 古いカーネルでリブートしてdpkg --configure -aでOK。 8.04ではnvidiaドライバもオンボードetherもout of boxで使えた。

iptablesの設定がデフォルトでは何にも無いのだが、クライアント用途だからかな。 設定手書きも面倒くさいのでFirestarterを入れた。

XEmacsでトラブル。日本語を表示しようとすると落ちる。ぐぐるとx86_64でしばしば 見られる症状のようだが、解決法が見つからない。emacsに生活の大部分を依存している 身としてはemacsで日本語が使えないと話にならないので、たぶん10年以上慣れ親しんだ XEmacsから決別してGNU Emacsに乗り換えることにする。

んでemacs-snapshot (GNU Emacs 23.0.60.1)を入れてみたところ、mew (5.2) でメールを フェッチする際にArgument out of boundでエラーになることがある。 この問題っぽい。 原因となったasetの仕様については こちら。 文字列にunibyte stringとmultibyte stringがあって、unibyte stringに asetでASCIIレンジ外の文字をセットしようとするとout of boundエラーになると。 (こういう、ascii stringとそれ以外を区別することのあまりの煩わしさがGaucheを 作ることになった強い動機なのであった)。 この問題はmewのMLのスレッドを見るとより新しいemacsのHEADでは直っているっぽいが、 emacsをビルドするのも面倒なのでmewの方をいじって誤魔化した。

*** mew-header.el.orig  Fri Jul 25 11:26:36 2008
--- mew-header.el       Fri Jul 25 11:25:45 2008
***************
*** 276,282 ****
        (setq str (string-as-unibyte str))) ;; A bug of Emacs 20.7
      (let* ((i 0) (len (length str))
           (par-cnt 0) (tmp-cnt 0) (sep-cnt 0)
!          (tmp (make-string len ?x))
           c ret)

        (catch 'max
        (while (< i len)
--- 276,283 ----
        (setq str (string-as-unibyte str))) ;; A bug of Emacs 20.7
      (let* ((i 0) (len (length str))
           (par-cnt 0) (tmp-cnt 0) (sep-cnt 0)
!          ;(tmp (make-string len ?x))
!          (tmp (make-string len ?\x3030))
           c ret)
        (catch 'max
        (while (< i len)

バッファの文字列を無理やりmutibyte stringで作るだけ。

文字列をmutableなarrayと考えることについても大いに問題ありと思うが、 さすがにemacsくらい巨大なソフトになると簡単には変えられないだろうなあ。

Tag: PC