とは言いつつ、FreeBSDだけに関する話題ではなく、いわゆるPC-UNIX一般のものも含まれている。なお、主にFreeBSD 3.*以前にだけ関連すると思われるものは「古い話題」に移した。
しばらくGNOME+Enlightenmentを使っていたが、気まぐれで、ウィンドウマネージャを久しぶりにWindow Makerに戻してみた。さすがにアイコンなど画面はきれいだが、GNOMEとWindow Makerの仕事がダブっていて、アイコンがやたらに表示されたり操作できないメニューがあったりするし、そもそも起動時にGNOME対応のウィンドウマネージャではないと言われる。
ports-currentのpackagesにあったwindowmaker-i18n-0.62.1_1.tgz
を入れたのだが、これはGNOME対応ではコンパイルされてないようだ(当り前か)。そこでports-currentをmakeすると、GNOMEがあるので問題なく--enable-gnome
でconfigureされてインストールできた。
しかし、やはり両者の役割分担がうまくいってないので、Using WindowMaker with GNOMEやGnomeMaker、gnome-list 0938などを参考にしながら、好みとして以下のように設定している。
~/GNUstep/Defaults/WMWindowAttributes
の"*"エントリを"*" = {Icon = defaultAppIcon.tiff;NoAppIcon = Yes;};
に変更。ja-gnomecore-1.2.4
とwindowmaker-i18n-0.62.1_1
を入れると、GNOMEのControl CenterでWindow Makerの設定ツールが起動しない。/usr/X11R6/share/gnome/wm-properties/WindowMaker.desktop
でのWPrefsの指定が正しくないので、ConfigExec=/usr/X11R6/GNUstep/Apps/WPrefs.app/WPrefs
に変更。ln -s /usr/X11R6/GNUstep /usr/X11R6/share/GNUstep
でもいいのだろうが、一長一短か。これまではjless
で日本語を表示させるために、setenv LESSCHARSET japanese-euc
していたのだが、4.1-RELEASEにアップグレードしたら、more
がinvalid charset name
で起動しなくなった。
setenv LESSCHARSET japanese
が正しいようだが、LANGがja_JP.EUCであればLESSCHARSETの指定は止めても、とりあえずは問題なく動く。
more
のmanはless
になっているので、4.1-RELEASEからはmore
はless
になっているようだ。試してはいないが、jless
用だけの指定をするならJLESSCHARSETですればいいのかもしれない。
portsをmake installするとき、古いヴァージョンが既にインストールされているときなどは、それを削除して再度make installするか、または環境変数FORCE_PKG_REGISTERを設定してmake installしろ、というメッセージが出る。
しかし、後者を選んでしまうと、FreeBSD 4.0-RELEASEでは、それまでの/var/db/pkg/
以下のファイルが消えてしまい、いまインストールしたアプリケーションの+COMMENT
などだけに置き換わってしまう。
/var/db/pkg/
に登録するときのディレクトリの階層が間違っているわけで、これまでインストールしたpackagesやportsのリストが消えてしまった(笑)。ご注意を。
その後同じようなことが起こってないので確認できないが、これはsetenv FORCE_PKG_REGISTERとしてしまったためであって、setenv FORCE_PKG_REGISTER yesとすれば問題ないのかもしれない。
メールの読み書きにはWindowsやMacintoshのいろんなソフトも使ってきたが、やはりUNIXシステム上のMewがいちばん使いやすい。カスタマイズがしやすいこと、最終的に送信するテキストを自分で確認できること、MIMEなどの仕様に忠実なこと、そして何よりもemacs上で使えること、などのためだが、電子ニュース(ネットニュース)については、ver.2でサポートが予定されてはいるものの現在はまだ公式にはできていないので、読むときには(emacs上の)Gnus、記事の保存のときはGnusからMew形式で行い、書くときにはMewのcontribのmew-gnus.el
を使ってMew、という風に使うことになる。
ところで、このように使う場合、読み書きするニュースサーバは普通は最初にプロバイダのものに設定しておくだけで十分だが、そこで接続されてないニュースグループに読み書きするときは、あらかじめ各々のソフト上でそのサーバを設定しておく必要がある。
読むためのGnusについては、.emacs
で(setq gnus-select-method '(nntp "netnews.rim.or.jp"))
などに続いて、(setq gnus-secondary-servers '(nntp "news.hogehoge"))
などと指定しておけば、M-x gnusで標準に立ち上がるGnusではgnus-select-methodのサーバに接続し、C-u M-x gnusにした場合は、gnus-secondary-serversのリストに設定してあるものをtabキーで補完して、選択できる。
Mewでの投稿については、IMの設定ファイル~/.im/Config
でcase hogehoge
として該当ニュースサーバをNntpServersで指定し、Mewで送信する際にヘッダにConfig: hogehoge
の1行を追加すればよい。
とはいっても、ヘッダに1行追加するのは面倒だし間違いも起こりうるので、以下のように.emacs
に書いておけば、Mewで送信直前にC-c C-mしたときに、Newsgroups:がhogehoge.newsであるものにはConfig: hogehoge
が自動挿入されて準備されるし、それ以外についても過去の履歴に基づいて、ある程度の補完候補を示してくれる。
(setq mew-config 'guess) (setq mew-config-list '("hogehoge")) (setq mew-config-insert-when-composed t) (setq mew-config-guess-alist '(("Newsgroups:" ("hogehoge.news" . "hogehoge"))))
FreeBSD 4.0-RELEASEのpackagesにあるacroread-4.0
は、私の環境ではSegmentation fault
になり、Unable to initialize user interface.
となって起動できなかった。
portsのacroread4
(acroread-4.05
)をmake;make installすれば、問題なく動く。
と、した後でhttp://www.jp.freebsd.org/QandA/HTML/604.htmlに気が付いたが、それによるとXのリソースでAcroRead*inputMethod: none
とするか、XMODIFIERS="@im=none"; export XMODIFIERS
で起動すれば、packagesのacroread-4.0
も使えるらしい。
私が使っているサウンド・カードはSound Blaster PCI Digitalだが、このようなプラグ・アンド・プレイ対応のPCIカードの場合、FreeBSD 4.0-RELEASEではカーネル・コンフィグレーションファイルGENERIC
にdevice pcm
を追加してカーネルを再構築し、# cd /dev; sh MAKEDEV snd0でデバイスファイルを作成して、リブートすればよい。
ちなみに、GNOME CD Playerを使う場合、デフォルトではCD-ROMデバイスが/dev/cdrom
になっているので、IDEドライブであれば/dev/acd0c
に変更し、# chmod a+r /dev/acd0cとする。
Porting JDK 1.2.2に従って、インストールする。
なお、コンパイルの際にブートストラップとして使うlinux-jdk1.2.2については、FreeBSD Ports: JavaのSourcesにあるjdk-1.2.2-RC4-linux-i386-glibc-2.1.2.tar.bz2
は、PortsのSourceというよりはDistfileなので、ダウンロードして/usr/ports/distfiles/
に置く。五橋研究所発行の『FreeBSD 4.0 Complete Package』のCD-ROMにはlinux-jdk-1.2.2のPortsのスケルトンが含まれていないので、Linux JDK 1.2 ports for FreeBSD(http://www.jmcm.org/tech/ports/linux_jdk.html)などにあるlinux-jdk-1.2.2.tar.gz
をダウンロードして、例えば/usr/ports/java/
以下(または/usr/ports/linux
を作って、それ以下)に展開し、make; make installする。
また、Howto'sには、buildscript
の例として
#!/bin/sh # # Script to build JDK 1.2.2 for FreeBSD # STARTTIME=`date` ALT_BOOTDIR=/usr/local/linux-jdk1.2.2 export ALT_BOOTDIR ALT_MOTIF_DIR=/usr/X11R6 export ALT_MOTIF_DIR ALT_ODBCDIR=/usr/local export ALT_ODBCDIR ALT_DPSDIR=/usr/X11R6 export ALT_DPSDIR _JDK11DIR=/usr/local/jdk1.1.8 _JDK11DIR (以下略)
とあるが、当然、上記の最終行はexport _JDK11DIR
とする必要がある。
ちなみに、「必要なPorts」のうち、lesstifは古い0.89.9を使ったが、問題はないようだ。なお、buildscript
によるコンパイルの時間は、Pentium III 600MHz、メモリ256MBで、約47分だった。
上記のインストールでは日本語の扱いがいまいちで、ln -s /usr/share/locale/ja_JP.EUC /usr/share/locale/jaとしたりjava -Duser.language=ja -Dfile.encoding=EUCJISなどとしてもencoding is not supported
となり、うまくいかないことが多かったが、freebsd-jdk122-patches-10.tar.gz
が出て、だいぶ実用的になった。
Portsにもなったので、make; make installだけでインストールできる。
ただし、FreeBSD 4.1.1-RELEASE(4.2-RELEASE?)からportsの仕組みが変わっているようなので、4.1-RELEASEのPortsスケルトンにports-currentからjdk-1.2.2b10を持ってきただけでは、make installでpacking listを作るときにエラーになり止まってしまうで、/usr/ports/Mk
をcurrentのものに置き換える必要がある。
Xerces+XT(またはSmartdoc)でHTML出力をJISにすると、たまに一部分が文字化けしていることに気づいた。
入力(処理対象の文書)を日本語EUCではなく、JISやシフトJIS、utf-8にしても、まったく同じ部分が文字化けする。
化けてしまう箇所を含む部分を別ファイルにして処理すれば問題は起こらないし、元の文書でも他の箇所を修正すると問題なくなったりすることもあるので、この箇所の文字列そのものの問題ではなく、文脈によることになる。
結局、[sdocusersj 373](<200102201247.VAA35616@ml.asahi-net.or.jp>)で指摘されたが、現状のFreeBSD版jdk-1.2.2では、出力は日本語EUCにしないと、このようなことが、たまに起こるようだ。
1999年12月にリムネットのメールサーバの仕様が変更になり、以前のsendmailの設定では外部のドメインには送信できなくなった。
以前はCFの定義ファイルsendmail.def
は、local宛て以外をプロバイダのメールサーバにリレーする場合、とりあえず以下のようにしておけばよかった。
OS_TYPE=bsd4.4 CF_TYPE=R8V8 DIRECT_DELIVER_DOMAINS=none DEFAULT_RELAY='mail.t3.rim.or.jp' FROM_ADDRESS='$m'
しかし、これだと、外部ドメインに送信する場合MXサーバに接続してしまい、Relay operation rejected
でエラーになるようになった。
SMTPだけにリレーさせる必要があるので、sendmail.def
は、とりあえず以下のようにすればよい。
OS_TYPE=bsd4.4 CF_TYPE=R8V8 DIRECT_DELIVER_DOMAINS=none DEFAULT_RELAY='smtp:[mail.t3.rim.or.jp]' FROM_ADDRESS='$m'
GNU Emacsのヴァージョン20からはMuleが統合されるようになり、20.2はMule 3.0、20.3はMule 4.0になっている。
もっとも、Emacs 19.34ベースのMule 2.3の全機能は取り込めていないみたいようにもみえるし、また、かな漢字変換は標準ではSKKなどしか使えないので、例えばCannaを使う場合はEmacsの部屋にあるemacs-20.3+canna-9.diff.gz
などの非公式のパッチをソースに当ててコンパイルしなければならない(ちなみにこのファイルをXEmacs 20.4で開こうとするとなぜか凍ってしまう)。
./configureは、FreeBSDの場合Cannaのヘッダは/usr/local/include/canna
にあるはずだが、上記パッチではcanna/
を探しにいくようになるので、以下のようにする。
% ./configure i386--freebsd --with-x-toolkit --with-pop --with-canna --with-canna-includes=/usr/local/include --with-canna-libraries=/usr/local/lib
とりあえず、日本語文字が表示できるようにするには、k14フォントを使う場合は、~/.Xresources
などに以下のように書けばよい。
Emacs.Font: -*-fixed-medium-r-normal--14-*-*-*-c-*-fontset-k14 Emacs.Fontset-0: -*-fixed-medium-r-normal--14-*-*-*-c-*-fontset-k14,\ ascii:-*-fixed-medium-r-normal--14-*-*-*-c-*-iso8859-1,\ latin-iso8859-1:-*-fixed-medium-r-normal--14-*-*-*-c-*-iso8859-1,\ katakana-jisx0201:-*-fixed-medium-r-normal--14-*-*-*-c-*-jisx0201.1976-0,\ japanese-jisx0208:-*-fixed-medium-r-normal--14-*-*-*-c-*-jisx0208.1983-0,\ japanese-jisx0212:-*-fixed-medium-r-normal--14-*-*-*-c-*-jisx0212.1990-0
Emacs 20では文字集合ごとにフォントを設定できるので、他のものも使いたい場合は追加すればよい。
また、ボールド体やイタリック体はFontset-1
などとして設定できる(日本語文字についてはX-TTとTrueTypeフォントが必要)。
ハードディスクの容量が小さいときは、場合によってはパーティションを分けずに全てを/
にしてしまう方が効率がよくていいということもあるだろうが、一般的には、システムをアップグレードするときの便利さや安全性などの点で、分割しておいた方がいい。ただ、どのくらいのサイズで切るかは、なやましいところだ。
経験的には、/usr/local
はフリー・ソフトの大部分が入るわけだが、XEmacs、Mule、Netscape Communicator、LaTeX、Ghostscript、Afterstep、JDK、その他基本的なソフトやフォントを入れたら、300MBを超えた。
また、/usr/X11R6
はX-TTをmake worldしたときには、256MBでは溢れて「マイナス」の状態になってしまった(もっとも今はX-TTもバイナリが提供されているので、それを使うならこの半分以下で十分)。
あと、/usr/home
は私の場合、フリーソフトのソースなども入れて他のOSと共有するため別のスライスにしたいし、また、Mozilla(5.0のβ版)をコンパイルするためにはスワップは128MB以上必要らしい。
そのため、現在は、内蔵IDEの600MBと外付SCSIの1GB×2を以下のような設定で使っている。
/dev/wd0s2a / 32MB /dev/wd0s2b swap 41MB /dev/wd0s2e /var 30MB /dev/wd0s2f /usr 514MB /dev/sd0s2b swap 48MB /dev/sd0s2e /usr/local 659MB /dev/sd0s2f /usr/X11R6 320MB /dev/sd0s3b swap 64MB /dev/sd0s3e /usr/home 963MB
ちなみに、/usr
が大きいが、これはスライスの余りを割り当ててしまったためで、ports全部を展開せずにカーネル再構築程度をするくらいならこの半分程度で十分か(本来は、その分/tmp
を別パーティションにするべきだろう)。
現時点での使用状態は以下のようになっている。
% df Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/wd0s2a 31775 21263 7970 73% / /dev/wd0s2f 510079 222405 246868 47% /usr /dev/sd0s2f 317903 68714 223757 23% /usr/X11R6 /dev/sd0s3e 955839 455044 424328 52% /usr/home /dev/sd0s2e 654303 252628 349331 42% /usr/local /dev/wd0s2e 29727 2950 24399 11% /var
上記の文章も、数十GBのハードディスクが一般化した今では昔話になってしまった。
実際、私も、30GBのハードディスクのうち、約7GBのスライスをFreeBSD専用に使うことにしたため、パーティションが溢れるといったことは心配する必要もなくなっている。また、packagesも含めてフリーソフトは/usr/X11R6
にインストールされるものが多くなってきたので、/usr/local
と/usr/X11R6
を分けることの意義も小さくなった。なので、インストーラがデフォルトで割り振る、/
、swap
、/var
、/usr
だけでもよかったと思うのだが、考えるのも面倒になって、結局、なんとなく過去のことに縛られ/usr/local
と/usr/X11R6
は分け、さらに/tmp
も独立させて、以下のようにしてしまった。
% df Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/ad0s3a 49583 27218 18399 60% / /dev/ad0s3f 254063 431 233307 0% /tmp /dev/ad0s3g 4667525 1830613 2463510 43% /usr /dev/ad0s3h 1016303 247305 687694 26% /usr/X11R6 /dev/ad0s3d 1017071 526468 409238 56% /usr/local /dev/ad0s3e 19815 3605 14625 20% /var
しかし、既にこの切り方には後悔している。次に切り直すときには、たぶん、/usr/local
と/usr/X11R6
は独立させず、代わりにもう一度/usr/home
を独立させ、また/var
をもっと大きくするだろう。
ローカルマシンをIP接続する場合、Ethernetボードを入れて接続するのが王道だが、それがなく、とりあえず2台だけを接続すればよくてそれほどの速度でなくてもいい場合は、シリアルケーブルでSLIPを使うと安上がりになる。
その場合は、以下のようにする。
があることを確認し、ない場合は追加してカーネルを再構築。
pseudo-device sl 1
/etc/hosts
で、それらをエントリし、リブート。/dev/cuaa0
(COM2なら/dev/cuaa1
)なので、ルートから、
のコマンドを打ち、反対側のマシンでも同様に行う(相互に19200bpsを超えて使える場合は、そのように指定すればよいが、今回つなごうとしたNECのPC-9801 NS/Aでは、これが限界だった)。# slattach -a -h -l -s 19200 /dev/cuaa0
/etc/start_if.sl0
に、
などと書いておけば、
slattach -a -h -l /dev/cuaa0
/etc/netstart
から実行される。
と打ち、反対側のマシンからも、IPアドレスを入れ換えて、同様に行えば接続される。# ifconfig sl0 inet 192.168.0.2 192.168.0.3 netmask 255.255.255.0
/etc/rc.conf
を修正し、
などとしておく。
network_interfaces="lo0 sl0"
ifconfig_lo0="inet 127.0.0.1"
ifconfig_sl0="inet 192.168.0.2 192.168.0.3 netmask 255.255.255.0"
メールをPOPで取り込むときはpopclient
を使って/var/mail/
に取り込んでMewで読んでいて、OSのヴァージョンアップによってpopclient
がpackagesになくなってからもソースをコンパイルして使い続けていたのだが、さすがに将来性がないのかと思ってfetchmail
に換えてみたら、ちょっと失敗してしまった。
fetchmail
は、デフォルトではmimedecode
で取り込むことになっているので、ヘッダのMIMEのdecodeをMewに任せる使い方をしている場合などは、受け取ったメールのヘッダの日本語は「化けて」しまう。
結局この場合は、~/.fetchmailrc
のオプションで、
poll mail.xxx.ne.jp protocol auto username hogehoge password xxxx no mimedecode
などとすればいいわけだが、このno mimedecode
の指定の仕方は、私の英語力ではマニュアルを読んでもなかなか分からなかったです > Eric S. Raymondさん