第 5章ユーザアプリケーション

訳: 山下 淳 、 広瀬 昌一 、 1997 年 11 月 8 日

5.1. そういうユーザアプリケーションはどこにあるの?
5.2. なぜ /bin/sh はこんなに低機能なのですか? どうして bash や他のシェルを採用しないのでしょう?
5.3. libc.so.3.0 はどこにありますか?
5.4. Error: can't find libc.so.4.0 というメッセージが表示されるのですが。
5.5. 386/486SX のマシンで ghostscript を動かすとエラーがでます。
5.6. SCO/iBCS2 のアプリケーションを実行すると、 socksys で落ちてしまいます。 (FreeBSD 3.0 とそれ以前のみ)
5.7. INN (インターネットニュース) の設定方法は?
5.8. どのバージョンの Microsoft FrontPage を手に入れる必要がありますか?
5.9. FreeBSD は Java をサポートしていますか?
5.10. 3.x-STABLE を載せているマシンで port がコンパイルできないことがあります。それはどうしてですか?
5.11. ld.so はどこにありますか?
5.12. ソースコードを更新しました。さて、インストール済みの ports を更新するにはどうすればよいでしょうか?

5.1. そういうユーザアプリケーションはどこにあるの?

FreeBSDに移植されたソフトウェアパッケージについては、 FreeBSD Ports Collection のページをご覧ください。 このリストには現在 3400 を越える項目があり、 しかも毎日更新されています。このページをこまめに訪れるか、 freebsd-announce メーリングリストを購読すると、 新しく入った ports を定期的にチェックすることができます。

大部分の ports は 2.2 と 3.x および 4.x ブランチで利用できるはずです。 多くは 2.1.x 系のシステムでも同様に動作するでしょう。 FreeBSD のリリースが出る度に、そのリリースの時点での ports ツリーの スナップショットが撮られ、ports/ ディレクトリに 納められることになっています。

また、“package” という考えも採用されています。これは基本的には gzip で圧縮されたバイナリディストリビューションに、 インストール時に環境に合わせた作業が必要になった場合、 行う機能を多少付け加えたものです。 package を使えば、どのようなファイルが配布物として含まれているか、 と言った細かい事柄にいちいち煩わされることなく、 簡単にインストールやアンインストールを繰り返すことができます。

インストールしたい package があるなら、 /stand/sysinstallの、 「インストール後の FreeBSD の設定を行う」の下にある package のインストールメニューを使うか、 package のファイル名を指定して pkg_add(1) を使用してください。 package のファイル名には、 通常末尾に .tgz がついています。 CDROM をご使用の方は、CD の packages/All ディレクトリからそれらのファイルを利用することができます。 また、以下の場所から、 FreeBSD の各種バージョンにあわせた package をダウンロードする こともできます。

お近くのミラーサイトもご利用ください。

新しい ports が続々と追加されている状態なので、すべての ports に 対応する package が存在するわけではないことを覚えておいてください。 定期的に ftp.FreeBSD.org マスターサイトを訪れて、どのような package が利用できるのかチェックするのも良いでしょう。

5.2. なぜ /bin/sh はこんなに低機能なのですか? どうして bash や他のシェルを採用しないのでしょう?

それは、POSIX がそのようなシェルがあることを規定しているからです。

もっと込み入った回答: 多くのユーザは、多くのシステムで同じように動作できるシェルスクリプトを書く必要があります。 これが、POSIX でシェルやユーティリティコマンドが細く規定されている理由です。 ほとんどすべてのスクリプトは Bourne shell で書かれているのですが、 それは、数多くの重要なプログラミングインタフェイス (make(1)system(3)popen(3)、や Perl や Tcl 等の類似の 高水準スクリプト言語) が、コマンドの解釈に Bourne shell を使うからです。 このように Bourne shell が極めて頻繁にかつ広範囲で使われているため、 素早く起動できて確実に動作し、メモリを少ししか消費しないということが 重要になります。

既存の実装は、 私たちに可能な限りこれらの多くの要求を同時に満足することができる最良のものです。 /bin/sh を小さいままに保つため、 私たちは他のシェルが持つ様々な便利な機能を提供していません。 Ports コレクションが bash や scsh、tcsh、zsh などの 多機能なシェルを含んでいるからです (これらのシェルすべての メモリ使用状況は、ps -u の “VSZ” や “RSS” の行で、あなた自身が確認することができます)。

5.3. libc.so.3.0 はどこにありますか?

FreeBSD 2.1.x のシステムで 2.2 以降用の package を動かそうとしていますね? 前のセクションを読んで、システムに合った正しい port/package を入手してください。

5.4. Error: can't find libc.so.4.0 というメッセージが表示されるのですが。

何かの手違いで、4.X と 5.X のシステム用 package をダウンロードし、 FreeBSD 2.X、もしくは 3.X のシステムにインストールしてしまったのでしょう。 対応する正しいバージョンの package をダウンロードしてください。

5.5. 386/486SX のマシンで ghostscript を動かすとエラーがでます。

あなたのマシンには数値演算プロセッサが搭載されていませんね? カーネルにコプロセッサの代わりとなる数値演算エミュレータを追加する必要があります。 以下のオプションをカーネルのコンフィグレーションファイルに追加して、 カーネルを再構築してください。

options GPL_MATH_EMULATE

注意: このオプションを追加する場合、 MATH_EMULATE の行を削除してください。

5.6. SCO/iBCS2 のアプリケーションを実行すると、 socksys で落ちてしまいます。 (FreeBSD 3.0 とそれ以前のみ)

まず最初に /etc/sysconfig (または /etc/rc.conf, rc.conf(5) 参照) の最後のセクションを編集し、 以下の変数を YES に直します。

# Set to YES if you want ibcs2 (SCO) emulation loaded at startup
ibcs2=NO

これでシステムの起動時に ibcs2 カーネルモジュールが読み込まるようになります。

次に /compat/ibcs2/dev/ を以下のように編集します。

lrwxr-xr-x  1 root  wheel         9 Oct 15 22:20 X0R@ -> /dev/null
lrwxr-xr-x  1 root  wheel         7 Oct 15 22:20 nfsd@ -> socksys
-rw-rw-r--  1 root  wheel         0 Oct 28 12:02 null
lrwxr-xr-x  1 root  wheel         9 Oct 15 22:20 socksys@ -> /dev/null
crw-rw-rw-  1 root  wheel   41,   1 Oct 15 22:14 spx

open や close の処理は、 socksys から /dev/null (null(4) 参照) へシンボリックリンクを張ることで代用します。 残りの処理は、-CURRENT に入っているコードが担当しています。 これは以前のものより ずっとスッキリした方法です。

5.7. INN (インターネットニュース) の設定方法は?

inn の package や port をインストールしたあとに Dave Barr's INN Page を見てみましょう。初心者向けの INN FAQ があります。

5.8. どのバージョンの Microsoft FrontPage を手に入れる必要がありますか?

ルーク、ports を使うのだ! パッチ処理済みの Apache が ports ツリーから入手できます。

5.9. FreeBSD は Java をサポートしていますか?

はい。 http://www.FreeBSD.org/java/ をご覧ください。 日本語訳 もあります。

5.10. 3.x-STABLE を載せているマシンで port がコンパイルできないことがあります。それはどうしてですか?

もし、その時点の -CURRENT か -STABLE に比べてずっと古いバージョンの FreeBSD を利用しているなら、 http://www.FreeBSD.org/ports/ にある ports アップグレードキットが必要です。 最新の FreeBSD を利用しているのに発生する場合はおそらく、 -CURRENT では正常なのに -STABLE ではうまく動かなくなるような変更がその port に対して行なわれ、受理されてしまっているのでしょう。 ports コレクションは -CURRENT と -STABLE、 両方のブランチで動かなければならないものですので、 もしそれを発見したら send-pr(1) コマンドを使ってバグレポートの提出をお願いします。

5.11. ld.so はどこにありますか?

3.1-R 以降などの Elf 化されたマシンで Netscape Navigator などの aout 形式のアプリケーションを動かすときには、 /usr/libexec/ld.so と aout ライブラリのファイルが必要です。 それらは配布物の compat22 に納められています。 /stand/sysinstallcompat22 サブディレクトリ内の install.sh を使って compat22 をインストールしてください。 合わせて 3.1-R と 3.2-R の ERRATA もお読みください。

5.12. ソースコードを更新しました。さて、インストール済みの ports を更新するにはどうすればよいでしょうか?

残念ながら、インストール済みの ports を更新する簡単な 方法はありません。pkg_version コマンドを 用いて ports ツリー中の新しいバージョンに更新する スクリプトを次のように生成することができます。

# pkg_version -c > /tmp/myscript

出力されたスクリプトを使う前に、手で 編集しなければなりません。現在のバージョンの pkg_version では、スクリプトの先頭に exit を挿入して強制しています。

スクリプトの出力には、更新された packages に依存する packages が記載されているので、保存しておきましょう。これらも やはり更新する必要があるかもしれません。通常、更新が 必要となるのは、共有ライブラリのバージョンが変化し、 そのライブラリを利用している ports が新しいライブラリを用いるために 再構築する必要がある場合です。

システムが常時稼動しているならば、 /etc/periodic.confweekly_status_pkg_enable="YES" を 設定して、periodic(8) システムによって毎週更新が必要な ports の一覧を生成できます。

本文書、および他の文書は ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/ からダウンロードできます。

FreeBSD に関する質問がある場合には、ドキュメント を読んだ上で <[email protected]> まで (英語で) 連絡してください。
本文書に関する質問については、<[email protected]> まで電子メールを (英語で) 送ってください。