FreeBSD ハンドブック

FreeBSD ドキュメンテーションプロジェクト

改訂: 47284

Copyright

Redistribution and use in source (XML DocBook) and 'compiled' forms (XML, HTML, PDF, PostScript, RTF and so forth) with or without modification, are permitted provided that the following conditions are met:

  1. Redistributions of source code (XML DocBook) must retain the above copyright notice, this list of conditions and the following disclaimer as the first lines of this file unmodified.

  2. Redistributions in compiled form (transformed to other DTDs, converted to PDF, PostScript, RTF and other formats) must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

重要:

THIS DOCUMENTATION IS PROVIDED BY THE FREEBSD DOCUMENTATION PROJECT "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FREEBSD DOCUMENTATION PROJECT BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

FreeBSD は The FreeBSD Foundation の登録商標です。

3Com および HomeConnect は 3Com Corporation の登録商標です。

3ware は 3ware Inc. の登録商標です。

ARM は ARM Limited の登録商標です。

Adaptec は Adaptec, Inc. の登録商標です。

Adobe, Acrobat, Acrobat Reader, Flash および PostScript は アメリカ合衆国および/またはその他の国の Adobe Systems Incorporated の登録商標または商標です。

Apple, AirPort, FireWire, iMac, iPhone, iPad, Mac, Macintosh, Mac OS, Quicktime および TrueType は Apple Inc. の商標で、 アメリカ合衆国およびその他の国で登録されています。

Android は Google Inc. の商標です。

Heidelberg, Helvetica, Palatino, および Times Roman はアメリカ合衆国およびその他の国における Heidelberger Druckmaschinen AG の登録商標または商標です。

IBM, AIX, OS/2, PowerPC, PS/2, S/390 および ThinkPad は アメリカ合衆国、その他の国、または両方における International Business Machines Corporation の商標です。

IEEE, POSIX および 802 は アメリカ合衆国における Institute of Electrical and Electronics Engineers, Inc. の登録商標です。

Intel, Celeron, Centrino, Core, EtherExpress, i386, i486, Itanium, Pentium および Xeon はアメリカ合衆国およびその他の国における Intel Corporation またはその関連会社の商標または登録商標です。

Intuit および Quicken は アメリカ合衆国およびその他の国における Intuit Inc. またはその関連会社の 商標および/または登録商標です。

Linux は Linus Torvalds の登録商標です。

LSI Logic, AcceleRAID, eXtremeRAID, MegaRAID および Mylex は LSI Logic Corp. の商標または登録商標です。

Microsoft, IntelliMouse, MS-DOS, Outlook, Windows, Windows Media および Windows NT は アメリカ合衆国および/またはその他の国における Microsoft Corporation の登録商標または商標です。

Motif, OSF/1 および UNIX は アメリカ合衆国およびその他の国における The Open Group の登録商標で、 IT DialTone および The Open Group は同じく商標です。

Oracle は Oracle Corporation の登録商標です。

RealNetworks, RealPlayer および RealAudio は RealNetworks, Inc. の登録商標です。

Red Hat, RPM は アメリカ合衆国およびその他の国における Red Hat, Inc. の商標または登録商標です。

Sun, Sun Microsystems, Java, Java Virtual Machine, JDK, JRE, JSP, JVM, Netra, OpenJDK, Solaris, StarOffice, SunOS および VirtualBox は アメリカ合衆国およびその他の国における Sun Microsystems, Inc. の 商標または登録商標です。

MATLAB は The MathWorks, Inc. の登録商標です。

SpeedTouch は Thomson の商標です。

VMware は VMware, Inc. の商標です。

Mathematica は Wolfram Research, Inc. の登録商標です。

XFree86 は The XFree86 Project, Inc. の商標です。

Ogg Vorbis および Xiph.Org は Xiph.Org の商標です。

製造者および販売者が製品を区別するのに 用いている表示の多くは、商標とされています。 この文書に登場する表示のうち FreeBSD Project がその商標を確認しているものには、その表示に続いて または ® 記号がおかれています。

2015-08-19 : ryusuke.
概要

FreeBSD へようこそ! このハンドブックは FreeBSD 9.3-RELEASEFreeBSD 10.2-RELEASE のインストールおよび、日常での使い方について記述したものです。 本ハンドブックは改編作業中であり、 さまざまな人々が編集に携わっています。 いま存在するセクションの中には情報が古くなってしまったため、 更新作業の必要があるものも含まれています。 もし、このハンドブックを編集するプロジェクトに協力したいとお考えなら、 FreeBSD documentation project メーリングリスト まで電子メールを(英語で)送ってください。 この文書の最新バージョンは、いつでも 日本国内版の FreeBSD ウェブサイト および FreeBSD ウェブサイト から入手できます (この文書の以前のバージョンは http://docs.FreeBSD.org/doc/ から入手できます)。 また、他のさまざまな文書形式、圧縮形式のものが FreeBSD FTP サーバ や数多くの ミラーサイト からダウンロードできます。 このハンドブックの書籍版 (英語版) は、 FreeBSD Mall から購入できます。また、ハンドブックの検索 を行なうこともできます。

FreeBSD ハンドブック日本語版の作成は FreeBSD 日本語ドキュメンテーションプロジェクト (FreeBSD doc-jp) がおこなっています。 ハンドブックの日本語訳に関することは FreeBSD 日本語ドキュメンテーションプロジェクト において日本語で議論されています。

文書の日本語訳に関するお問い合わせや、 文書の原文に関する問い合わせをしたいが英語が得意でないという方は FreeBSD 日本語ドキュメンテーションプロジェクト まで、日本語でコメントをお寄せください。

[ 分割版 / 単一版 ]

目次
前書き
I. 導入
1. はじめに
1.1. この章では
1.2. FreeBSD へようこそ!
1.3. FreeBSD プロジェクトについて
2. FreeBSD のインストール
2.1. この章では
2.2. 最小ハードウェア要件
2.3. インストール前に行う作業
2.4. インストールの開始
2.5. bsdinstall の使用
2.6. ディスク領域の割り当て
2.7. インストール操作の確定
2.8. インストール後の作業
2.9. トラブルシューティング
2.10. Live CD を使う
3. UNIX の基礎知識
3.1. この章では
3.2. 仮想コンソールと端末
3.3. 許可属性
3.4. ディレクトリ構造
3.5. ディスク構成
3.6. ファイルシステムのマウントとアンマウント
3.7. プロセス
3.8. デーモン、シグナルとプロセス終了
3.9. シェル
3.10. テキストエディタ
3.11. デバイスとデバイスノード
3.12. さらに詳しい情報を得るには...
4. アプリケーションのインストール - packages と ports
4.1. この章では
4.2. ソフトウェアのインストール
4.3. ソフトウェアの探し方
4.4. pkg によるバイナリ package の管理
4.5. Ports Collection の利用
4.6. Poudriere を用いた package の構築
4.7. インストール後の作業
4.8. うまく動作しない ports に遭遇した場合には
5. X Window System
5.1. この章では
5.2. 用語の説明
5.3. X11 のインストール
5.4. X11 の設定
5.5. X11 でのフォントの使用
5.6. X ディスプレイマネージャ
5.7. デスクトップ環境
II. 日々の生活
6. デスクトップアプリケーション
6.1. この章では
6.2. ブラウザ
6.3. 生産的なアプリケーション
6.4. ドキュメントビューア
6.5. 財務管理ソフトウェア
7. マルチメディア
7.1. この章では
7.2. サウンドカードの設定
7.3. MP3 オーディオ
7.4. ビデオ再生
7.5. TV カードの設定
7.6. MythTV
7.7. 画像スキャナ
8. FreeBSD カーネルのコンフィグレーション
8.1. この章では
8.2. なぜカスタムカーネルを作るか?
8.3. システムのハードウェアについて知る
8.4. コンフィグレーションファイル
8.5. カスタムカーネルの構築とインストール
8.6. 問題が起きた場合には
9. プリンタの利用
9.1. この章では
9.2. はじめに
9.3. 基本的な設定
9.4. プリンタ設定上級編
9.5. プリンタを使う
9.6. 標準スプーラの代替品
9.7. トラブルシューティング
10. Linux バイナリ互換機能
10.1. この章では
10.2. インストール
10.3. Mathematica のインストール
10.4. Oracle のインストール
10.5. SAP R/3 (4.6B - IDES) のインストール
10.6. 高度なトピックス
III. システム管理
11. 設定とチューニング
11.1. この章では
11.2. 中核となる設定
11.3. アプリケーションの設定
11.4. サービスの起動
11.5. バーチャルホスト
11.6. 設定ファイル
11.7. sysctl によるチューニング
11.8. ディスクのチューニング
11.9. Kernel 制限のチューニング
12. FreeBSD の起動のプロセス
12.1. この章では
12.2. 起動時の問題
12.3. ブートマネージャと起動ステージ
12.4. カーネル起動時の応答
12.5. Device Hints
12.6. init: プロセス制御の初期化
12.7. シャットダウン動作
13. ユーザと基本的なアカウントの管理
13.1. この章では
13.2. アカウントの種類
13.3. アカウント情報の管理
13.4. ユーザへの制限
13.5. グループの管理
14. セキュリティ
14.1. この章では
14.2. はじめに
14.3. FreeBSDの安全性を高める
14.4. DES, MD5 と Crypt
14.5. S/Key
14.6. Kerberos
14.7. ファイアウォール
14.8. OpenSSL
14.9. IPsec
14.10. OpenSSH
14.11. ファイルシステムアクセス制御リスト
15. ストレージ
15.1. この章では
15.2. デバイス名
15.3. ディスクの追加
15.4. RAID
15.5. 光メディア (CD & DVD) の作成と使用
15.6. フロッピーディスクの作成と使用
15.7. データテープの作成と使用
15.8. フロッピーディスクへのバックアップ
15.9. バックアップの基本
15.10. ネットワーク、メモリ、そしてファイルベースのファイルシステム
15.11. ファイルシステムのスナップショット
15.12. ファイルシステムクォータ
15.13. ディスクパーティションの暗号化
16. 地域化 (localization) - I18N/L10N の利用と設定
16.1. この章では
16.2. 基礎知識
16.3. 地域化の利用
16.4. 国際化に対応したプログラムのコンパイル
16.5. FreeBSD を特定の言語に地域化する
17. FreeBSD のアップデートとアップグレード
17.1. この章では
17.2. FreeBSD Update
17.3. ドキュメントのアップデート
17.4. 開発ブランチを追いかける
17.5. ソースの同期
17.6. world の再構築
17.7. 複数のマシンで追いかける
IV. ネットワーク通信
18. シリアル通信
18.1. この章では
18.2. はじめに
18.3. シリアル端末
18.4. ダイアルインサービス
18.5. ダイアルアウトサービス
18.6. シリアルコンソールの設定
19. PPP と SLIP
19.1. この章では
19.2. ユーザ ppp の利用
19.3. カーネル PPP の利用
19.4. PPP オーバイーサネット (PPPoE) の利用
19.5. SLIP の利用
20. 電子メール
20.1. この章では
20.2. 電子メールを使う
20.3. sendmail の設定
20.4. MTA の変更
20.5. トラブルシュート
20.6. 先進的なトピックス
20.7. UUCP とともに SMTP を使う
20.8. ダイアルアップ接続でメールを使う
20.9. SMTP 認証
21. 高度なネットワーク
21.1. この章では
21.2. ゲートウェイと経路
21.3. 無線ネットワーク
21.4. Bluetooth
21.5. ブリッジ
21.6. NFS
21.7. ディスクレス稼働
21.8. ISDN
21.9. NIS/YP
21.10. DHCP
21.11. DNS
21.12. NTP
21.13. ネットワークアドレス変換 (NAT)
21.14. inetd スーパサーバ
21.15. パラレルライン IP (PLIP)
21.16. IPv6
V. 付録
A. FreeBSD の入手方法
A.1. CD および DVD セット
A.2. FTP サイト
A.3. CTM を使う
A.4. Subversion を使う
A.5. rsync を使用する
B. 参考図書
B.1. FreeBSD 専門の書籍
B.2. 利用者向けのガイド
B.3. 管理者向けのガイド
B.4. プログラマ向けのガイド
B.5. オペレーティングシステム内部
B.6. セキュリティの参考資料
B.7. ハードウェアの参考資料
B.8. UNIX® の歴史
B.9. 定期刊行物、雑誌およびジャーナル
C. インターネット上のリソース
C.1. メーリングリスト
C.2. Usenet ニュースグループ
C.3. World Wide Web サイト
C.4. Email アドレス
C.5. シェルアカウント
D. PGP 公開鍵
D.1. オフィサ
FreeBSD Glossary
索引
図の一覧
2.1. FreeBSD ブートローダメニュー
2.2. FreeBSD ブートオプションメニュー
2.3. ウェルカムメニュー
2.4. キーマップの選択
2.5. キーボードメニューの選択
2.6. 拡張キーマップメニュー
2.7. ホスト名の設定
2.8. インストールするコンポーネントの設定
2.9. ネットワークからのインストール
2.10. ミラーサイトの選択
2.11. FreeBSD 9.x におけるパーティションの分割の選択肢
2.12. FreeBSD 10.x 以降でのパーティション分割の選択
2.13. 複数のディスクから選択する
2.14. Entire Disk または Partition の選択
2.15. 作成されたパーティションの確認
2.16. Manual によるパーティションの分割
2.17. 手動でパーティションを作成する
2.18. 手動でパーティションを作成する
2.19. ZFS パーティションメニュー
2.20. ZFS プールタイプ
2.21. ディスクの選択
2.22. 問題のある選択
2.23. ディスクの解析
2.24. ディスク暗号化パスワード
2.25. 最終確認
2.26. 最後の確認
2.27. 配布ファイルのダウンロード
2.28. 配布ファイルの検証
2.29. 配布ファイルの取り出し
2.30. root パスワードの設定
2.31. イーサネットインタフェースの選択
2.32. ワイヤレスアクセスポイントのスキャン
2.33. ワイヤレスネットワークの選択
2.34. WPA2 のセットアップ
2.35. IPv4 ネットワークの選択
2.36. IPv4 DHCP 設定の選択
2.37. IPv4 の静的な設定
2.38. IPv6 ネットワークの選択
2.39. IPv6 SLAAC 設定の選択
2.40. IPv6 の静的な設定
2.41. DNS の設定
2.42. ローカルまたは UTC クロックの選択
2.43. 地域の選択
2.44. 国名の選択
2.45. タイムゾーンの選択
2.46. タイムゾーンの確定
2.47. 追加で有効にするサービスの選択
2.48. クラッシュダンプの設定
2.49. 新しいユーザのアカウントの作成
2.50. ユーザ情報の入力
2.51. ユーザおよびグループの管理を終了する
2.52.
2.53. Manual Configuration
2.54. インストールの終了
表の一覧
2.1. パーティションスキーム
3.1. ディスクデバイス記号
7.1. 良くあるエラーメッセージ
15.1. 物理ディスクへの名前付け
21.1. ネットワーク向けのパラレル (クロス) ケーブル結線
21.2. 予約された IPv6 アドレス
例の一覧
2.1. 伝統的なファイルシステムのパーティションを作成する。
3.1. ディスク名、スライス名、パーティション名のサンプル
3.2. ディスクの概念的構成
12.1. boot0 のスクリーンショット
12.2. boot2 のスクリーンショット
12.3. /etc/ttys の insecure コンソール
13.1. スーパーユーザ権限でプログラムをインストールする
13.2. FreeBSD におけるユーザの追加
13.3. rmuser による対話的なアカウントの削除
13.4. スーパユーザによる対話的な chpass
13.5. 通常のユーザによる対話的な chpass
13.6. 自分のパスワードの変更
13.7. スーパーユーザ権限での他のユーザのパスワード変更
13.8. pw(8) によるグループの追加
13.9. pw(8) により新しいグループにメンバを追加する
13.10. pw(8) によるグループへのユーザ追加
13.11. グループに所属しているユーザを調べるための id(1) の使い方
14.1. SSH を用いた SMTP 用の安全なトンネルの作成
15.1. ssh 越しの dump の利用
15.2. RSH を設定した ssh 越しの dump を利用
15.3. ブートフロッピーを作成するスクリプト
15.4. FreeBSD 4.X での vnconfig を用いた既存のファイルシステムイメージのマウント
15.5. vnconfig を用いたファイルベースディスクの新規作成
15.6. FreeBSD 5.X での mdconfig を用いた既存のファイルシステムイメージのマウント
15.7. mdconfig を用いたファイルシステムイメージの新規作成
15.8. mdmfs を用いたファイルベースディスクの設定とマウント
15.9. FreeBSD 4.X での md メモリディスク
15.10. mdconfig を用いたメモリベースディスクの新規作成
15.11. mdmfs を用いたメモリベースディスクの新規作成
18.1. 端末の項目を /etc/ttys に追加する
20.1. sendmail アクセスデータベースの設定
20.2. メールエイリアス
20.3. 仮想ドメインメール対応表の例
21.1. amd によるエクスポートされたファイルシステムのマウント
21.2. 支店または家庭のネットワーク
21.3. 本社 LAN や他の LAN
21.4. inetd への HangUP シグナル送付

前書き

想定している読者

最初の部分は FreeBSD を使い始めた人向けで、FreeBSD のインストールの過程を手引きし、UNIX® の基礎となっている概念や慣習を丁寧に紹介します。 この部分に取り組むために必要なのは、探究心と、 紹介された新たな概念を理解する能力だけです。

その次の、ハンドブックのはるかに大きな部分では、FreeBSD システム管理者が興味を抱くあらゆる種類の話題が分かりやすく言及されています。 一部の章は、その章の前に読んでおくべきことが推奨されており、 各章の始めの概要で述べられています。

さらなる情報源の一覧は、付録B 参考図書 をご覧ください。

第 3 版からの変更

オンライン版のハンドブックは、FreeBSD ドキュメンテーションプロジェクトの献身的なメンバーによる 10 年以上に渡る作業の頂点に立つものです。 2004 年に出版された 2 巻組の第 3 版からの主な変更は、次のようなものです。

  • 強力なパフォーマンス解析ツール DTrace に関する情報が追加されました。

  • ファイルシステム対応の章が追加されました。 Sun™ の ZFS のような FreeBSD ネイティブではないファイルシステムへの対応について説明しています。

  • セキュリティ監査の章が追加されました。 FreeBSD における新しい監査のケイパビリティおよびその使用方法について説明しています。

  • 仮想化の章が追加されました。os; を仮想化ソフトへインストールする方法などを取り上げています。

  • 新しいインストールユーティリティの bsdinstall を用いた FreeBSD のインストール方法を説明する 2章FreeBSD のインストール という章が追加されました。

第 2 版 (2004) からの変更

第 3 版は、FreeBSD ドキュメンテーションプロジェクトの献身的なメンバーによる 2 年以上に渡る作業の頂点に立つものです。 サイズが大きくなったため、印刷版は、2 巻での出版となりました。 この新たな版における主な変更は、次のようなものです。

  • 11章設定とチューニング に、ACPI 電源管理、cron システムユーティリティ、 およびカーネルチューニングオプションに関するより多くの情報が追加されました。

  • 14章セキュリティ に、 Virtual Private Network (VPN)、 ファイルシステムアクセスコントロールリスト (ACL)、 およびセキュリティ勧告に関する情報が追加されました。

  • Mandatory Access Control (MAC) の章がこの版で追加されました。 MAC がどのようなもので、 このメカニズムがどのように FreeBSD システムを安全にするかについて説明しています。

  • 15章ストレージ に、 USB ストレージデバイス、ファイルシステムスナップショット、 ファイルシステムクォータ、 ファイルおよびネットワークベースのファイルシステム、 暗号化されたディスクパーティションに関する情報が追加されました。

  • 19章PPP と SLIP に、 トラブルシューティングの節が追加されました。

  • 20章電子メール, に、 他のメール転送エージェント、SMTP 認証、UUCP, fetchmail, procmail や他の高度な話題についての情報が追加されました。

  • ネットワークサービスの章が、この版で新しく追加されました。 この章では、Apache HTTP サーバfptd および Samba を用いて Microsoft® Windows® クライアント用にサーバを設定する方法などを取り上げています。 再構成によりいくつかの節が、21章高度なネットワーク から移動してきました。

  • 21章高度なネットワーク に、 FreeBSD での Bluetooth® デバイスの使用、 ワイヤレスネットワークの設定、 Asynchronous Transfer Mode (ATM) ネットワークに関する情報が追加されました。

  • 本書で使われている専門用語の定義をまとめた用語集が追加されました。

  • 本書を通じて表および図の表現において数多くの改良がおこなわれました。

第 1 版 (2001) からの変更

第 2 版は、FreeBSD ドキュメンテーションプロジェクトの献身的なメンバーによる 2 年以上に渡る作業の頂点に立つものでした。 この新たな版における主な変更は、次のようなものでした。

  • 完備した索引が追加されました。

  • ASCII キャラクタによる図はすべて画像に置き換えられました (訳注: 日本語版は作業中です)。

  • 各章に、章に記載されている内容と、 読者に期待される予備知識がすぐに分かるように、 一定の内容の概要が付け加えられました。

  • 内容は、始めにシステム管理付録 の 3 つの論理的な部分に再構成されました。

  • 3章UNIX の基礎知識 には、プロセス、デーモン、 シグナルに関する情報が追加されました。

  • 4章アプリケーションのインストール - packages と ports には、バイナリパッケージの管理に関する情報が追加されました。

  • 5章X Window System は、 XFree86™ 4.X 上で KDEGNOME のような近代的なデスクトップテクノロジーを利用することに力点をおいて、 完全に書き直されました。

  • 12章FreeBSD の起動のプロセス が拡張されました。

  • 15章ストレージ は、 ディスクバックアップ の 2 つの章に分かれていたものをまとめて書き直されました。私たちは、 この話題は 1 つの章にまとめて示した方が分かりやすいと感じています。 RAID (ハードウェアとソフトウェアの両方) に関する節も追加されました。

  • 18章シリアル通信 は FreeBSD 4.X/5.X 向けに一から再構成されました。

  • 19章PPP と SLIP は大幅に更新されました。

  • 21章高度なネットワーク に、多くの新しい節が追加されました。

  • 20章電子メール に、sendmail の設定についてより多くの情報が加えられました。

  • 10章Linux バイナリ互換機能 には、Oracle®Mathematica® のインストール情報が加えられました (訳注: 日本語版は作業中です)。

  • この第 2 版では、以下の新たな話題が扱われています。

この文書の構成

この文書は 5 部構成になっています。 第 1 部導入では、 FreeBSD のインストールと基本的な使い方を扱います。 各章は順に読むことを想定していますが、 馴染み深い話題を扱った章は飛ばしてもよいでしょう。 第 2 部日々の生活では、 FreeBSD で良く使われる機能について説明します。 この章とそれに続く章は、順不同に読むことができます。 各章の始めにはその章が何を扱っていて、 読者にどんな予備知識が期待されるかを簡潔に述べた概要がおかれています。 第 3 部システム管理は、 システム管理に関する話題を扱っています。 第 4 部ネットワーク通信では、 ネットワークおよびサーバに関する話題を扱っています。 第 5 部は参考情報からなる付録です。

1章はじめに

新規ユーザに FreeBSD を紹介します。ここでは、FreeBSD プロジェクトの歴史、目標と開発モデルについて述べています。

2章FreeBSD のインストール

bsdinstall を用いた FreeBSD 9.x 以降のシステムのインストール過程を一通りユーザに案内しています。

3章UNIX の基礎知識

FreeBSD オペレーティングシステムの基本的なコマンドや機能を扱っています。 Linux® やその他の UNIX® 風のものに馴染んでいたら、 この章を飛ばしても構わないでしょう。

4章アプリケーションのインストール - packages と ports

FreeBSD の革新的な Ports Collection および標準的なバイナリパッケージによるサードパーティアプリケーションのインストールについて説明しています。

5章X Window System

X Window System 全般と、特に FreeBSD 上での X11 の利用について述べています。 また、KDEGNOME のような一般的なデスクトップ環境にも触れています。

6章デスクトップアプリケーション

Web ブラウザや生産性向上ツールのような一般的なデスクトップアプリケーションをいくつか挙げ、 FreeBSD におけるインストール方法を説明しています。

7章マルチメディア

システムを音声やビデオ再生に対応させるためにどう設定するかを説明します。 また、音声やビデオアプリケーションも例示しています。

8章FreeBSD カーネルのコンフィグレーション

どのような場合に新たにカーネルを構成する必要があるかを説明し、 カスタムカーネルのコンフィグレーション、構築、 インストールについて詳しく説明しています。

9章プリンタの利用

FreeBSD におけるプリンタの取り扱いを説明しています。たとえば、 バナーページ、プリンターの課金、初期設定といったことです。

10章Linux バイナリ互換機能

FreeBSD の Linux® バイナリ互換機能を説明しています。また、 Oracle®, Mathematica® といった人気の高い Linux® アプリケーションのインストールを詳しく説明しています。

11章設定とチューニング

システム管理者が FreeBSD システムを調整して最適な性能を引き出すのに利用できるパラメータについて述べています。 また、FreeBSD で利用されている様な設定ファイルとそのありかも解説しています。

12章FreeBSD の起動のプロセス

FreeBSD の起動プロセスを解説し、 このプロセスを設定オプションで制御する方法を説明しています。

14章セキュリティ

FreeBSD システムを安全に保つために役立つ Kerberos, IPsec および OpenSSH といった利用可能なさまざまなツールについて説明しています。

15章ストレージ

FreeBSD でストレージメディアやファイルシステムをどう扱うかを説明しています。 対象は、物理ディスク、RAID アレイ、 光学およびテープメディア、メモリベースのディスク、 ネットワークファイルシステムなどです。

16章地域化 (localization) - I18N/L10N の利用と設定

FreeBSD を英語以外の言語で使う方法を説明しています。 システムとアプリケーション両方のレベルの地域化を扱っています。

17章FreeBSD のアップデートとアップグレード

FreeBSD-STABLE, FreeBSD-CURRENT と FreeBSD のリリースの違いを説明します。 どんなユーザにとって開発システムを追随するのが有用かを述べ、 その方法の概要をまとめています。 システムを最新のセキュリティリリースへアップデートする方法についても説明しています。

18章シリアル通信

FreeBSD システムに端末やモデムを、 ダイヤルインまたはダイヤルアウト用に接続する方法を説明しています。

19章PPP と SLIP

FreeBSD で、PPP を使ってリモートシステムに接続する方法を説明しています。

20章電子メール

電子メールサーバの構成要素をそれぞれ説明し、 最もよく使われているメールサーバソフトウェアである sendmail について、 単純な設定をとりあげています。

21章高度なネットワーク

LAN 上の他のコンピュータとインターネット接続の共有、 高度なルーティングに関するトピックス、ワイヤレスネットワーク、 Bluetooth®, ATM, IPv6 等々、 ネットワークに関するさまざまな話題を取り扱っています。

付録A FreeBSD の入手方法

FreeBSD を収録した CDROM や DVD の様々な入手先や、FreeBSD をダウンロードしてインストールできるインターネット上のサイトを挙げています。

付録B 参考図書

この文書は、 もっと詳しい説明が欲しくなるかもしれないさまざまな題目について触れています。 参考図書には、このハンドブックで参照している、 多くの素晴らしい本が挙げられています。

付録C インターネット上のリソース

FreeBSD ユーザが FreeBSD について質問したり、 技術的な議論に参加できる、 多くの公開された場について説明しています。

付録D PGP 公開鍵

多くの FreeBSD 開発者の PGP fingerprint を載せています。

この文書で用いられている表記法

一貫して読みやすい文章を提供するために、 この文書全体では以下の表記法が用いられています。

書体による表記

イタリック体

イタリック体 のフォントは、ファイル名、URL, 強調表現、技術用語の最初の使用を表すのに使われています。

等幅

等幅フォントは、エラーメッセージ、 コマンド、環境変数、ports の名称、ホスト名、ユーザ名、 グループ名、デバイスの名称、変数、 コードの断片を表すのに使われています。

太字

太字のフォントは、 アプリケーション、コマンド、キーを表すのに使われています。

ユーザー入力

文章の他の部分と区別するため、 キーは太字で示されています。 同時に押すことを意図したキーの組み合わせは、キーの間に `+' を入れて表されます。たとえば

Ctrl+Alt+Del

は、ユーザーが Ctrl, Alt それから Del キーを同時に押すことを意図しています。

順に押すことを意図したキーは、カンマで区切って表されます。 たとえば

Ctrl+X, Ctrl+S

は、ユーザーが Ctrl キーと X キーを同時に押してから、 Ctrl キーと S キーを同時に押すことを意図しています。

C:\> で始まる例は、MS-DOS® コマンドを表しています。特に注釈がなければ、それらのコマンドは最近の Microsoft® Windows® の コマンドプロンプト 環境でも実行できます。

E:\> tools\fdimage floppies\kern.flp A:

# で始まる例は、FreeBSD 上でスーパーユーザ権限で実行しなければならないコマンドを示しています。 そのコマンドを入力するには、 root としてログインするか、 通常のアカウントでログインして、スーパーユーザ権限を取得するために su(1) を使います。

# dd if=kern.flp of=/dev/fd0

% で始まる例は、 通常のユーザアカウントで実行するべきコマンドを示しています。 特に断りのない限り、環境変数の設定やその他のシェルコマンドには C シェルの文法が使われています。

% top

謝辞

あなたが手にしている文書は、 世界中の何百人もの人々の努力の賜物です。 誤字脱字の修正を送ったのか、文章を丸々投稿したのかによらず、 すべての貢献が役に立ちました。

多くの会社が、 著者らを雇用してフルタイムでこの文書に取り掛かれるようにしたり、 出版費用を出したりして、この文書を作り上げるのを援助してくれました。 特に、BSDi (その後 Wind River Systems に買収されました) は、フルタイムでこの文書の改善作業をするように FreeBSD ドキュメンテーションプロジェクトのメンバーを雇用し、それが 2000 年 3 月の最初の出版 (ISBN 1-57176-241-8) につながりました。 その後、Wind River Systems は、印刷出力の仕組みを整備し、 章を追加するために著者を何名か追加で雇用してくれました。この作業は、 2001 年 11 月の第 2 版の出版 (ISBN 1-57176-303-1) に結実しました。 2003-2004 年には、ハンドブック第 3 版の出版準備のために FreeBSD Mall, Inc が貢献者を雇用してくれました。

パート〓I.〓導入

FreeBSD ハンドブックの第 1 部はユーザと FreeBSD が初めての管理者向けです。各章の内容は以下のとおりです。

  • FreeBSD の紹介

  • インストールの手順の解説

  • UNIX® の基礎

  • FreeBSD で利用できる豊富なサードパーティ製のアプリケーションの インストール方法

  • UNIX® におけるウィンドウシステム X、 およびクリエイティブなデスクトップ環境の設定の詳細の紹介

このハンドブックでは頻繁にページを飛すことなく前から後へと スムーズに読み進めるように、 後方への参照を極力抑えるようにしています。

第1章 はじめに

再構成、部分的な改訂: Mock Jim [FAMILY Given].

1.1. この章では

FreeBSD に興味を持っていただきありがとうございます! この章では FreeBSD の歴史、目標、開発モデルなど、 FreeBSD プロジェクトに関するさまざまな事柄を扱います。

この章に書かれている話題は、次のようなものです。

  • FreeBSD とその他のオペレーティングシステムとの違い

  • FreeBSD プロジェクトの歴史

  • FreeBSD プロジェクトの目標

  • FreeBSD オープンソース開発モデルの基本的な考え方

  • そして、FreeBSD という名前の由来について

1.2. FreeBSD へようこそ!

FreeBSD は、4.4BSD-Lite から派生したオペレーティングシステムで、 Intel (x86 および Itanium®), AMD64, Sun UltraSPARC® コンピュータに対応しています。 他のアーキテクチャに対する移植も進行中です。 FreeBSD の歴史や、 現在のリリースについても読むことができます。 プロジェクトへの何らかの貢献 (ソースコード、ハードウェア、 資金の提供など) について興味があれば、 FreeBSD への貢献をご覧ください。

1.2.1. FreeBSD で何ができるの?

FreeBSD には多くの注目すべき機能があります。 例を挙げれば以下のようになります:

  • 優先度を動的に調節する機能を備えることで アプリケーションとユーザとの間で円滑かつ公平な コンピュータ資源共有を実現し、 特に高い負荷にも耐えることができる堅牢さを備えた プリエンプティブマルチタスキング

  • 多くの人々が 1 つの FreeBSD システムをさまざまな目的で同時に使うことを可能にする マルチユーザ機能。 これは例えば、プリンタやテープデバイスといったシステムの周辺機器が、 そのシステムを利用する全てのユーザだけでなく ネットワーク経由においても自然な形で共有され、 さらに重要なシステム資源の使い過ぎを防ぐために 個々の資源に対する制限がユーザ単位、 グループ単位で設定できる、というようなことを意味しています。

  • SCTP や DHCP, NFS, NIS, PPP, SLIP, IPsec, IPv6 といった業界標準規格のサポートを含んだ堅固な TCP/IP ネットワーキング。これによって、FreeBSD マシンが商用サーバと同じように相互に運用でき、 NFS (リモートファイルアクセス) や、 電子メールサービスのような極めて重要な機能を提供します。 また、WWW や FTP, ルーティング、ファイアウォール (セキュリティ) サービスを用いてインターネットと接続できます。

  • アプリケーション (あるいはユーザ) がお互いに干渉できない ようにするメモリ保護機能。 アプリケーションがクラッシュしても、 どのような場合でも他のアプリケーションには影響を与えません。

  • 業界標準である X Window システム (X11R7) は、普通の VGA カードやモニタでグラフィカルユーザインタフェース (GUI) を提供し、すべてのソースコードも一緒に提供されます。

  • Linux や SCO, SVR4, BSDI, NetBSD 用に作られた多くのプログラムとの バイナリ互換性

  • 何千ものすぐに実行可能な アプリケーションが FreeBSD の portspackages コレクションで利用可能です。 ここに用意されているものはネットを探し回る必要がありません

  • インターネット上で入手可能な、 移植が容易な 何千ものアプリケーションを追加できます。FreeBSD は最も評判のよい商用の UNIX® システムとソースコードレベルで互換性があります。 このため、ほとんどのアプリケーションは、 もしあったとしてもほんの少しの変更でコンパイルすることができます。

  • デマンドページング仮想メモリ とそれに 付随の VM/buffer キャッシュ の設計は、 多くのメモリを要求するアプリケーションに対して 効率よくメモリを与えるようにする一方で、 他のユーザに対しても対話的な応答を維持します。

  • 複数の CPU を搭載したマシンにおける SMPのサポート。

  • 完全な CC++ の開発ツール。進んだ研究や開発のための多くの他の言語も ports や packages コレクションで提供されています。

  • システム全体のソースコードが提供されているので、 要求に合わせて環境を最大限に適合させることができます。 真のオープンシステムが利用できるのですから、 所有権のある解決方法に締めつけられ、 ベンダのなすがままになる必要はありません。

  • 膨大な量の オンラインドキュメント

  • もう書ききれません!

FreeBSD はカリフォルニア大学バークレイ校の Computer Systems Research Group (CSRG) による 4.4BSD-Lite リリースを基にしており、 BSD システムの開発の優れた伝統を守り続けています。 CSRG による素晴らしい活動に加えて、 FreeBSD プロジェクトは何千時間もの時間を注ぎ込んで、 実際の使用の場において最大の性能と信頼性を 発揮するためにシステムのチューニングをおこなっています。 多くの大企業が PC オペレーティングシステムの分野で 実現しようと奮闘しているそのような機能や性能、信頼性を FreeBSD は今すぐ提供できます!

あなたの思いつく限りのアプリケーションは、何でも FreeBSD で実行できます。ソフトウェア開発からファクトリオートメーション、 在庫制御から遠く離れた人工衛星のアンテナの方向調整まで; 商用 UNIX® 製品でできることは、FreeBSD でも十分にできるのです! また、FreeBSD は世界中の研究センターや大学によって開発される 文字通り何千もの高品質で、たいていはほとんど無料で利用できる アプリケーションによる恩恵を得ることができます。 商用のアプリケーションも提供されており、 日々増え続けています。

FreeBSD のソースコードは広く提供されているので、 システムも特別なアプリケーションやプロジェクトに合わせて、 いくらでもカスタマイズすることができます。 これは有名な商業ベンダから出ているほとんどのオペレーティング システムでは不可能なことです。以下に現在 FreeBSD を 使っている人々のアプリケーションの例をいくつか上げます:

  • インターネットサービス: FreeBSD に組み込まれている 頑強な TCP/IP ネットワーキング機能は次のようなさまざまな インターネットサービスの理想的なプラットフォームになります:

    • FTP サーバ

    • World Wide Web サーバ (標準、もしくは安全な [SSL])

    • IPv4 および IPv6 ルーティング

    • ファイアウォールと NAT (IP マスカレード) ゲートウェイ

    • 電子メールサーバ

    • USENET ニュースおよび電子掲示板システム

    • さらにいろいろ…

    FreeBSD を利用すれば、小規模で安価な 386 クラスの PC でも気軽に導入することができますし、 事業の成長に合わせてアップグレードした 4 つの Xeon プロセッサと RAID ストレージデバイスを備えたシステムでも、 全くそのまま使うことができるのです。

  • 教育: あなたは、計算機科学または関連分野の工学を専攻する学生さんですか? オペレーティングシステムやコンピュータアーキテクチャ、 ネットワークについて学習するなら、 実際に FreeBSD のソースコードを読んで、 それがどのように動作するのかを学ぶのが一番よい方法です。 また、無料で利用できる CAD や数学、 グラフィックデザインのパッケージがいくつもあるので、 コンピュータに関わる主要な目的が、 のことをすることにある方にも、 大いに役立ちます。

  • 研究: システム全体のソースコードが利用できるため、 FreeBSD はオペレーティングシステムの研究だけでなく、 計算機科学の他の部門においても優れたプラットフォームです。 自由に利用できる FreeBSD の特長は、オープンフォーラムで 議論される特別なライセンスの同意や制限について心配することなく、 離れたグループでもアイディアや開発の共有による共同研究を可能にします。

  • ネットワーキング: 新しいルータが必要? ネームサーバ (DNS) は? 内部のネットワークを人々から守るファイアウォールは? FreeBSD はすみに眠っている使われていない 386 や 486 の PC を簡単に 洗練されたパケットフィルタリング機能を持つ高級なルータに 変えることができます。

  • X Window ワークステーション: 自由に利用できる X11 サーバを使うことによって、 安価な X 端末として FreeBSD を使うこともできます。 X 端末とは違って FreeBSD は多くのアプリケーションをローカルに走らせることもでき、 中心のサーバの負荷を軽減することも可能です。 FreeBSD はディスクレスでもブート可能であり、 個々のワークステーションを安価で、 容易に管理することさえ可能にします。

  • ソフトウェア開発: 基本的な FreeBSD システムには、有名な GNU の C/C++ コンパイラやデバッガを含んだ完全な開発ツールがついてきます。

FreeBSD は、ソースとバイナリの両方とも、CD-ROM または anonymous FTP で入手可能です。 詳しくは 付録A FreeBSD の入手方法 をご覧ください。

1.2.2. FreeBSD はどこに使われていますか?

FreeBSD は、以下に代表されるような世界最大クラスの IT 会社のデバイスおよび製品のプラットフォームとして利用されています。

FreeBSD は、以下のサイトに代表されるような、 インターネット上で最大クラスのサイトでも利用されています。

また、この他にもあります。

1.3. FreeBSD プロジェクトについて

以下の節では簡単な歴史やプロジェクトの目標、 開発モデルなど、普段は表にでない話題を提供しています。

1.3.1. FreeBSD 小史

FreeBSD プロジェクトは 1993 年の始めに Unofficial 386BSD Patchkit の最後の 3 人のまとめ役によって、部分的に patchkit から派生する形で開始されました。ここでの 3 人のまとめ役というのは、Nate Williams, Rod Grimes と、 Jordan Hubbard です。

このプロジェクトのもともとの目標は、patchkit という仕組みではもう十分に解決できなくなってしまった 386BSD の数多くの問題を修正するための、386BSD の暫定的なスナップショットを作成することでした。 こういった経緯を経ているので、 このプロジェクトの初期の頃の名前は 386BSD 0.5 や 386BSD 暫定版 (Interim) でした。

386BSD は、Bill Jolitz が (訳注: バークレイ Net/2 テープを基に) 作成したオペレーティングシステムです。当時の 386BSD は、ほぼ一年にわたって放っておかれていた (訳注: 作者がバグの報告を受けても何もしなかった) というひどい状況に苦しんでいました。 作者の代わりに問題を修正し続けていた patchkit は日を追うごとに不快なまでに膨張してしまっていました。 このような状況に対して、彼らは暫定的な クリーンアップ スナップショットを作成することで Bill を手助けしようと決めました。しかし、 この計画は唐突に終了してしまいました。Bill Jolitz が、 このプロジェクトに対する受け入れ支持を取り下げることを突然決意し、 なおかつこのプロジェクトの代わりに何をするのかを一切言明しなかったのです。

たとえ Bill が支持してくれないとしても、 彼ら 3 人の目標には依然としてやる価値があると考えていたため、 David Greenman が考案した名称 FreeBSD をプロジェクトの名前に採用し、新たなスタートを切りました。 この時点でのプロジェクトの初期目標は、すでにこのシステム (訳注: 386BSD + Patchkit) を使っていた利用者たちと相談して決められました。 プロジェクトが実現に向けて軌道に乗ってきたことが明確になった時点で、 Jordan は Walnut Creek CDROM 社に連絡してみました。CD-ROM を使って FreeBSD を配布することによって、 インターネットに容易に接続できない多くの人々が FreeBSD を簡単に入手できるようになると考えたからです。Walnut Creek CDROM 社は FreeBSD を CD で配布するというアイデアを採用してくれたばかりか、 作業するためのマシンと高速なインターネット回線をプロジェクトに提供してくれました。 当時は海のものとも山のものともわからなかったこのプロジェクトに対して、Walnut Creek CDROM 社が信じられないほどの信頼を寄せてくれたおかげで、 FreeBSD は短期間のうちにここまで大きく成長したのです。

CD-ROM による最初の配布 (そしてネットでの、 ベータ版ではない最初の一般向け配布) は FreeBSD 1.0 で、1993 年 12 月に公開されました。これはカリフォルニア大学バークレイ校の 4.3BSD-Lite (Net/2) を基とし、386BSD や Free Software Foundation からも多くの部分を取り入れたものです。 これは初めて公開したものとしては十分に成功しました。続けて 1994 年 5 月に FreeBSD 1.1 を公開し、 非常に大きな成功を収めました。

この時期、 あまり予想していなかった嵐が遠くから接近してきていました。 バークレイ Net/2 テープの法的な位置づけについて、Novell 社とカリフォルニア大学バークレイ校との間の長期にわたる 法廷論争において和解が成立したのです。和解の内容は、Net/2 のかなりの部分が 権利つき (encumbered) コードであり、それは Novell 社の所有物である、 というバークレイ校側が譲歩したものでした。なお、Novell 社はこれらの権利を裁判が始まる少し前に AT&T 社から買収していました。 和解における譲歩の見返りにバークレイ校が得たのは、 4.4BSD-Lite が最終的に発表された時点で、 4.4BSD-Lite は権利つきではないと公式に宣言されること、 そしてすべての既存の Net/2 の利用者が 4.4BSD-Lite の利用へと移行することが強く奨励されること、という Novell 社からの ありがたき天からの恵み でした (訳注: 4.4BSD-Lite はその後 Novell 社のチェックを受けてから公開された)。FreeBSD も Net/2 を利用していましたから、1994 年の 7 月の終わりまでに Net/2 ベースの FreeBSD の出荷を停止するように言われました。ただし、 このときの合意によって、 私たちは締め切りまでに一回だけ最後の公開をすることを許されました。 そしてそれは FreeBSD 1.1.5.1 となりました。

それから FreeBSD プロジェクトは、まっさらでかなり不完全な 4.4BSD-Lite を基に、文字どおり一から再度作り直すという、 難しくて大変な作業の準備を始めました。Lite バージョンは、部分的には本当に軽くて、中身がなかったのです。 起動し、 動作できるシステムを実際に作り上げるために必要となるプログラムコードのかなりの部分がバークレイ校の CSRG (訳注: BSDを作っているグループ) によって (いろいろな法的要求のせいで) 削除されてしまっていたということと、4.4BSD の Intel アーキテクチャ対応が元々かなり不完全であったということがその理由です。 この移行作業は結局 1994 年の 11 月までかかりました。 そしてその時点で FreeBSD 2.0 をネットと CD-ROM (12 月末ごろ) を通じて公開しました。これは、 かなり粗削りなところが残っていたにもかかわらず、 かなりの成功を収めました。そしてその後に、より信頼性が高く、 そしてインストールが簡単になった FreeBSD 2.0.5 が 1995 年の 6 月に公開されました。

これ以降、FreeBSD の安定性、速さや機能は改善され、 リリースが行われてきました。

長期的な開発プロジェクトは 10.X-CURRENT 開発ブランチ (トランク) で続けられ、 10.X のスナップショットリリースは、開発の進行状況に応じて スナップショットサーバ より継続して入手できます。

1.3.2. FreeBSD プロジェクトの目標

寄稿: Hubbard Jordan [FAMILY Given].

FreeBSD プロジェクトの目的は、いかなる用途にも使用でき、 何ら制限のないソフトウェアを供給することです。 私たちの多くは、 コード (そしてプロジェクト) に対してかなりの投資をしてきており、 これからも多少の無駄はあっても投資を続けて行くつもりです。ただ、 他の人達にも同じような負担をするように主張しているわけではありません。 FreeBSD に興味を持っている一人の残らず全ての人々に、 目的を限定しないでコードを提供すること。これが、 私たちの最初のそして最大の 任務 であると信じています。そうすれば、コードは可能な限り広く使われ、 最大の恩恵をもたらすことができるでしょう。これが、 私たちが熱烈に支持しているフリーソフトウェアの最も基本的な目的であると、 私は信じています。

私たちのソースツリーに含まれるソースのうち、 GNU 一般公有使用許諾 (GPL) または GNU ライブラリ一般公有使用許諾 (LGPL) に従っているものについては、多少制限が課せられています。ただし、 ソースコードへのアクセスの保証という、 一般の制限とはいわば逆の制限 (訳注1) です。 GPL ソフトウェアの商利用には、そのライセンスにある 複雑な側面が影響してくることがあります。 ですから私たちは、そうすることが合理的であると判断されたときには、 より制限の少ない、BSD 著作権表示を採用しているソフトウェアを選択するようにしています。

(訳注1) GPL では、「ソースコードを実際に受け取るか、 あるいは、希望しさえすればそれを入手することが可能であること」 を求めています。

1.3.3. FreeBSD の開発モデル

寄稿: 浅見 [FAMILY Given].

FreeBSD の開発は非常に開かれた、柔軟性のあるプロセスです。 貢献者リスト を見ていただければわかるとおり、 FreeBSD は文字通り世界中の何百という人々の努力によって開発されています。 FreeBSD の開発環境は、 この何百という開発者がインターネット経由で共同作業できるようになっているのです。 新しい開発者はいつでも大歓迎ですので、FreeBSD technical discussions メーリングリスト にメールを送ってください。 FreeBSD announcements メーリングリスト もありますので、他の FreeBSD ユーザに自分のやっていることを宣伝したい時にはどうぞ使ってください。

あと、FreeBSD プロジェクトとその開発プロセスについて、 どなたにも知っていていただきたいのは以下のようなことです。

SVN リポジトリ

長年にわたり FreeBSD のソースツリーは CVS (Concurrent Versions System) によってメンテナンスされてきました。 CVS はソースコード管理用のフリーソフトウェアで、 FreeBSD のリリースにも含まれています。 2008 年 6 月、プロジェクトはソースコード管理のシステムを SVN (Subversion) に移行しました。 ソースツリーの急速な増加や、 これまでに蓄積された膨大な量の履歴によって、 CVS の持つ技術的な限界が明かになってきたためです。 ドキュメンテーションプロジェクトと Ports Collection リポジトリも、それぞれ 2012 年 5 月と 7 月に CVS から SVN へと移行しました。 FreeBSD src/ リポジトリを取得するための情報は ソースツリーの同期 の章を、FreeBSD Ports Collection を取得するための詳細については Ports Collection の利用 の章をご覧ください。

ソースツリー管理者

コミッター (committers) は Subversion ツリーへの書き込み権限を持っている人、 FreeBSD のソースに変更を加えることができる人です (リポジトリに変更を加えるには、ソースをコントロールする commit というコマンドを使うので、 これらの人々は英語では committers と呼ばれます)。 開発者にコードを送って見てもらうのに一番いい方法は send-pr(1) コマンドを使うことです。 もし、何か問題があって send-pr が使えないなら FreeBSD committer's メーリングリスト にメールを送っていただいても構いません。

FreeBSD コアチーム

FreeBSD コアチームは FreeBSD プロジェクトが会社だとすると取締役会にあたるものです。 コアチームとして一番重要な役割は FreeBSD プロジェクトが全体としてよい方向に向かっていることを確認することです。 責任感あふれる開発者を上記のソースツリー管理者として招くこと、 また仕事上の都合などでコアチームをやめた人たちの後任を見つけることもコアチームの役割です。 現在のコアチームは FreeBSD 開発者 (committer) の中から 2014 年 7 月に選挙によって選出されました。 コアチームを選出するための選挙は、2 年ごとに行なわれています。

コアチームのうち何人かは特定の担当分野を持っており、 システムのうち一部に特に重点をおいて面倒を見ています。 FreeBSD 開発者と担当分野の完全なリストは コントリビュータのリストをご覧ください。

注記:

忘れてほしくないのは、 コアチームのほとんどは FreeBSD に対してボランティアの立場であり、 FreeBSD プロジェクトからは何ら金銭的な支援を受けていない、 ということです。ですから、 ここでの責任保証されたサポートではありません。 そういう意味で、上記の取締役会 という例えはあまりよくないかもしれません。むしろ、FreeBSD のために人生を棒に振ってしまった人の集まりといった方が正しいかも…。

その他のコントリビュータ

最後になりますが、 もっとも重要で多数をしめる開発者はフィードバックやバグフィクスをどんどん送ってくれるユーザ自身です。 FreeBSD の開発に関わっていきたいという人は、 議論の場である FreeBSD technical discussions メーリングリスト に参加するとよいでしょう。 FreeBSD 関連メーリングリストに関する詳細は、 付録C インターネット上のリソース をご覧ください。

FreeBSD への貢献者リスト は日に日に長くなっています。 あなたも今日、何か送ることからはじめてみませんか?

もちろん FreeBSD に貢献するには、 コードを書くほかにもいろいろな方法があります。 助けが求められている分野については、 FreeBSD プロジェクトのウェブサイトをご覧ください。

ひとことで言うと、FreeBSD の開発組織はゆるやかな同心円状になっています。 ともすると中央集権的に見えがちなこの組織は、 FreeBSD のユーザがきちんと管理されたコードベースを 容易に追いかけられるようにデザインされているもので、 貢献したいという人を締め出す意図は全くありません! 私たちの目標は安定したオペレーティングシステムと 簡単にインストールして使うことのできる アプリケーションを提供することです。 この方法は、それを達成するために非常にうまくはたらきます。

これから FreeBSD の開発にたずさわろうという人に、 私たちが望むことはただ一つです。 FreeBSD の成功を継続的なものにするために、 現在の開発者と同じような情熱を持って接してください!

1.3.4. サードパーティ製プログラム

FreeBSD では基本配布セットに加え、 移植されたソフトウェア集として数千の人気の高いプログラムを提供しています。 この文書を書いている時点で 24,000 以上の ports (移植ソフトウェア) が存在します。 ports には http サーバから、ゲーム、言語、 エディタまでありとあらゆるものが含まれています。 ports はオリジナルソースに対する 差分という形で表現されており、 Ports Collection 全体でも 500 MB 程度にしかなりません。 ports をコンパイルするには、 インストールしたいと思っているプログラムのディレクトリに移動し、 make install とすると、 あとはすべてシステムがやってくれます。 どの ports もオリジナルの配布セットを動的に取ってくるので、 ディスクは構築したいと思っている ports の分だけを準備しておけば十分です。 ほとんどの ports は、すでにコンパイルされた状態で package として提供されており、 ソースコードからコンパイルしたくない場合、これを使うと (pkg install というコマンドで) 簡単にインストールできます。 package と ports に関する詳細は、 4章アプリケーションのインストール - packages と ports をご覧ください。

1.3.5. ドキュメント

最近の FreeBSD では、システムの最初のセットアップ時に、 インストーラ (sysinstall(8) または bsdinstall(8) のどちらでも) 上で、ドキュメントを /usr/local/share/doc/freebsd 以下にインストールすることを選択できます。 システムのインストール後でも、「ports を用いたドキュメンテーションのアップデート」 に記述されている package を使うことで、いつでもドキュメントをインストールできます。 これらのローカルにインストールされたドキュメントは、HTML ブラウザを使って以下の URL から参照できます。

FreeBSD ハンドブック (英文オリジナル)

/usr/local/share/doc/freebsd/handbook/index.html

FreeBSD に関する FAQ (英文オリジナル)

/usr/local/share/doc/freebsd/faq/index.html

また、 http://www.FreeBSD.org/ にはマスタ (かなり頻繁に更新されます) がありますので、 こちらも参照してください。

第2章 FreeBSD のインストール

再構成、部分的に書き直し: Mock Jim [FAMILY Given].
bsdinstall に向けた改訂: Atkinson Gavin [FAMILY Given]Block Warren [FAMILY Given].
root-on-ZFS に向けた改訂: Jude Allan [FAMILY Given].

2.1. この章では

FreeBSD 9.0-RELEASE から、 bsdinstall と呼ばれる、 テキストベースの使いやすいインストールプログラムが FreeBSD に用意されました。 この章では、bsdinstall の使い方について説明します。

この章で記載されているインストールの手順は、 i386™ および AMD64 アーキテクチャを対象にしています。 必要に応じて、他のプラットフォーム特有の手順についても明記しています。 インストーラとこの文書で記載している内容には、 いくらかズレがあることがありますので、 この章を正確で忠実な手順書としてではなく、 一般的なガイドとしてご利用ください。

注記:

グラフィカルなインストーラで FreeBSD をインストールしたいと考えているユーザは、 PC-BSD プロジェクトのインストーラである pc-sysinstall に興味を持たれるかもしれません。 このインストーラは、グラフィカルなデスクトップ (PC-BSD) や、コマンドラインの FreeBSD のインストールに利用できます。 詳細については、PC-BSD のユーザハンドブック http://wiki.pcbsd.org/index.php/PC-BSD%C2%AE_Users_Handbook/10.1) をご覧ください。

この章を読むと、以下のことがわかります。

  • 最小ハードウェア要件、および FreeBSD が対応しているアーキテクチャについて。

  • FreeBSD インストールメディアの作り方。

  • bsdinstall をどのように起動するか。

  • bsdinstall が聞いてくる質問がどのような意味であり、 またどのように答えれば良いか。

  • インストールに失敗した時の問題の解決方法。

  • インストールを確定する前に、 FreeBSD の live 版へアクセスする方法。

この章を読む前に、以下のことを確認して下さい。

  • インストールしようとしているバージョンに付属しているサポートハードウェア一覧を読み、 システムのハードウェアがサポートされているかどうかを確認して下さい。

2.2. 最小ハードウェア要件

FreeBSD をインストールするシステムのハードウェア要件は、 FreeBSD のバージョンやハードウェアのアーキテクチャによって異なります。 FreeBSD の各リリースが対応しているハードウェアアーキテクチャやデバイスの一覧は、 FreeBSD ウェブサイトのリリース情報のページ (http://www.FreeBSD.org/ja/releases/index.html) にまとめられています。

FreeBSD の最小のインストールでは、 少なくとも 64 MB の RAM、 および 1.5 GB のハードディスクの空き容量が必要です。 しかしならが、これは 最小 のインストールであり、 自由に使える領域はほとんどありません。 必要となる RAM は、使用目的によります。 ある目的に特化された FreeBSD システムは、 128MB の RAM で動作できる可能性がありますが、 デスクトップ用途のシステムでは、少なくとも 4 GB の RAM が必要となります。

各アーキテクチャごとに必要とされるプロセッサの要件は以下の通りです。

amd64

デスクトップおよびラップトップで最も一般的なプロセッサです。 このアーキテクチャを x86-64 と呼ぶベンダもあります。

amd64 プロセッサのベンダは 2 つあります。 Intel64 クラスのプロセッサを製造する Intel® と AMD64 を製造する AMD です。

amd64 互換のプロセッサの例は、 AMD Athlon™64, AMD Opteron™, マルチコアの Intel® Xeon™ および Intel® Core™ 2 以降のプロセッサです。

i386

32 ビットの X86 アーキテクチャです。

浮動小数点演算ユニットを持つ i386 互換のほとんどのプロセッサに対応しています。 486 以上のすべての Intel® プロセッサに対応しています。

FreeBSD は、Physical Address Extensions (PAE) に対応した CPU でこの機能を利用可能です。 PAE 機能を有効にしたカーネルでは、 4 ギガバイト以上のメモリを認識し、システムが利用できます。 この機能は、FreeBSD のデバイスドライバや他の機能に制限を課してしまいます。 詳細については pae(4) を参照してください。

ia64

現在 Itanium® および Itanium® 2 プロセッサに対応しています。 対応しているチップセットは、HP zx1, Intel® 460GX および Intel® E8870 です。 どちらのプロセッサもユニプロセッサ (UP) および対称マルチプロセッサ (SMP) の設定に対応しています。

pc98

i386 互換のプロセッサである 80486, Pentium®, Pentium® Pro および Pentium® II を搭載しているほとんどすべての NEC PC-9801/9821 シリーズに対応しています。 AMD, Cyrix, IBM および IDT によるすべての i386 互換のプロセッサに対応しています。 NEC PC-9801 シリーズに互換の EPSON PC-386/486/586 シリーズに対応しています。 NEC FC-9801/9821 および NEC SV-98 シリーズに対応しています。

ハイレゾリューションモードには対応していません。 NEC PC-98XA/XL/RL/XL^2 および NEC PC-H98 シリーズには、 ノーマル (PC-9801 互換) モードでのみ対応しています。 SMP に関連した FreeBSD の機能には対応していません。 PC-H98, SV-H98 および FC-H98 シリーズで使われている New Extend Standard Architecture (NESA) バスには対応していません。

powerpc

USB 内蔵のすべての New World ROM Apple® Mac® システムに対応しています。 複数の CPU を持つコンピュータは SMP に対応しています。

32-bit カーネルは、RAM の最初の 2 GB だけを利用できます。

sparc64

FreeBSD/sparc64 が対応しているハードウェアの一覧については、 FreeBSD/sparc64 プロジェクト (http://www.freebsd.org/ja/platforms/sparc.html) をご覧ください。

複数のプロセッサを搭載するすべてのシステムにおいて、 SMP に対応しています。現時点では、 他のオペレーティングシステムとディスクの共有ができないので、 FreeBSD/sparc64 専用のディスクが必要です。

2.3. インストール前に行う作業

システムが FreeBSD のインストールにおける最小ハードウェア要件を満たしていることを確認したら、 インストールファイルをダウンロードして、 インストール用のメディアを用意する必要があります。 その前に、以下のチェックリストを確認して、 システムをインストールする準備ができていることを確認してください。

  1. 重要なデータのバックアップ

    オペレーティングシステムをインストールする前に、 常に 価値のあるすべてのデータを最初にバックアップしてください。 インストールしようとしているシステムにはバックをとらないでください。 そのかわり、USB ドライブ、 ネットワーク上の他のシステム、 もしくはオンラインのバックアップサービスといったリムーバルディスクにデータを保存してください。 インストールを始める前に、バックアップを調べて、 必要なすべてのファイルがバックアップに含まれていることを確認してください。 インストーラがシステムのディスクをフォーマットしてしまうと、 ディスクに保存されていたすべてのデータは失われます。

  2. FreeBSD をインストールする場所の決定

    インストールするオペレーティングシステムが FreeBSD のみであれば、 このステップは飛ばすことができます。 しかし、ディスクに FreeBSD と 他のオペレーティングシステムを共存させる必要がある場合には、FreeBSD が利用するディスクおよびパーティションを決める必要があります。

    i386 および amd64 アーキテクチャでは、 二つのパーティションスキームのどちらかを使って、 ハードディスクを複数の塊に分割することができます。 伝統的な Master Boot Record (MBR) では、 ディスク 1 台あたり最大 4 つの プライマリパーティション をパーティションテーブルに持つことができます 歴史的な理由により、FreeBSD では、これらのパーティションのことを スライス と呼びます。 プライマリパーティションの 1 つに、 複数の 論理パーティション を含む 拡張パーティション を作成できます。 GUID Partition Table (GPT) は、 ディスクをパーティションに分ける簡単で新しい方法です。 一般的な GPT の実装では、 1 つのディスクに 128 個までのパーティションの作成が可能であり、 論理パーティションは必要ありません。

    警告:

    Windows® XP のような古いオペレーティングシステムは、 GPT パーティションと互換性がありません。 FreeBSD をこのようなオペレーティングシステムとディスク上で共存させる場合には、 MBR パーティションテーブルを使う必要があります。

    FreeBSD のブートローダは、プライマリまたは GPT パーティションのどちらかを必要とします。 ディスク上のプライマリ、もしくは GPT パーティションがすべて使われているのであれば、 そのひとつを FreeBSD のために開放してください。 ディスクにあるデータを消去せずにパーティションを作成するには、 パーティションサイズを変更するツールを使って今あるパーティションのサイズを小さくし、 空いたスペースに新しいパーティションを作成してください。

    パーティションサイズを変更するフリーや商用のツールは、 http://en.wikipedia.org/wiki/List_of_disk_partitioning_software にまとめられています。 GParted Live (http://gparted.sourceforge.net/livecd.php) は、GParted パーティションエディタを含む完全なライブ CD です。 多くの Linux Live CD ディストリビューションでも GParted を利用できます。

    警告:

    ディスクパーティションを縮小するユーティリティは、 適切に用いるとパーティション用の空き容量を新しく安全に作成できます。 すでにあるパーティションを間違って選択してしまう可能性があるので、 ディスクのパーティションを変更する前に、 必ず重要なデータのバックアップをとり、 バックアップが正しくとれていることを検証してください。

    ディスクパーティションごとに異なるオペレーティングシステムをインストールすることで、 一つのコンピュータに複数のオペレーティングシステムをインストールできます。 仮想化技術 を用いると、ディスクパーティションを変更することなく、 複数のオペレーティングシステムを同時に起動できます。

  3. ネットワーク情報の収集

    FreeBSD のインストール方法によっては、ネットワークに接続し、 インストールファイルをダウンロードする必要があります。 インストールする方法に関わらず、インストール後に、 インストーラはシステムのネットワークインタフェースの設定をする機会を提供します。

    ネットワークに DHCP サーバがあると、 自動的にネットワークの設定情報を取得できます。 DHCP を利用できない環境では、 システムの以下のネットワーク情報について、 システム管理者かプロバイダにネットワーク情報を問い合わせる必要があります。

    必要となるネットワーク情報
    1. IP アドレス

    2. サブネットマスク

    3. デフォルトゲートウェイの IP アドレス

    4. ネットワークのドメイン名

    5. ネットワークの DNS サーバの IP アドレス

  4. FreeBSD Errata の確認

    FreeBSD プロジェクトでは FreeBSD の各リリースができる限り安定するよう努力していますが、 時々バグが発生してしまうことがあります。極まれに、 発生したバグがインストールプロセスに影響を与えることがあります。 これらの問題は発見され解決されると、 FreeBSD のウェブサイトの FreeBSD Errata (http://www.freebsd.org/releases/10.2R/errata.html) に記載されます。 インストールに影響するような既知の問題が無いことを、 インストールする前に Errata で確認してください。

    すべてのリリースに関する情報や Errata は、FreeBSD のウェブサイトの リリース情報の項 (http://www.freebsd.org/ja/releases/index.html) で確認できます。

2.3.1. インストールメディアの準備

FreeBSD のインストーラは、 他のオペレーティングシステムで実行できるようなプログラムではありません。 そのかわり、FreeBSD インストールファイルをダウンロードしたら、 ファイルタイプやサイズに合わせてメディア (CD, DVD または USB) に焼いてください。そして、挿入したメディアからインストールするように、 システムを起動してください。

FreeBSD のインストールファイルは www.freebsd.org/ja/where.html#download から入手できます。 各インストールファイルの名前は、FreeBSD のリリースバージョンおよびアーキテクチャ、ファイルタイプからなります。 たとえば、amd64 システムに DVD から FreeBSD 10.0 をインストールするには、 FreeBSD-10.0-RELEASE-amd64-dvd1.iso をダウンロードして、ファイルを DVD に焼き、DVD を挿入してからシステムを起動してください。

さまざまなファイル形式が用意されていますが、 すべてのアーキテクチャに対して、 すべての形式のファイルが用意されているわけではありません。 利用可能な形式は以下の通りです。

  • -bootonly.iso: インストーラのみを含む最小のインストールファイルです。 インストールを行う間、インストーラは FreeBSD をインストールするために必要なファイルをダウンロードするため、 ネットワーク接続が必要です。 このファイルは、CD を焼くためのアプリケーションを用いて、 CD に書き込む必要があります。

  • -disc1.iso: FreeBSD のインストールに必要となる、ソースおよび Ports Collection といったすべてのファイルが含まれています。 このファイルは、CD を焼くためのアプリケーションを用いて、 CD に書き込む必要があります。

  • -dvd1.iso: FreeBSD のインストールに必要となる、ソースおよび Ports Collection といったすべてのファイルが含まれています。 インターネットに接続することなく、 メディアのみでシステムのインストールを完了できるように、 良く使われるウィンドウマネージャおよびアプリケーションをインストールするためのバイナリ package も含まれています。 DVD を焼くためのアプリケーションを使って、 DVD に書き込む必要があります。

  • -memstick.img: FreeBSD のインストールに必要となる、ソースおよび Ports Collection といったすべてのファイルが含まれています。 以下の手順に従って、USB スティックに書き込んでください。

また、イメージファイルと同じディレクトリから CHECKSUM.SHA256 をダウンロードし、 チェックサム を計算してイメージファイルの完全性を確認してください。 FreeBSD では sha256(1) を用いてチェックサムを計算できますが、 他のオペレーティングシステムも同様のプログラムを持っています。 計算したチェックサムと CHECKSUM.SHA256 に示されている値を比較してください。 チェックサムは完全に一致している必要があります。 もしチェックサムが一致していなければ、 ファイルは壊れているのでもう一度ダウンロードしてください。

2.3.1.1. イメージファイルを USB に書き込む

*.img ファイルは、 完全なメモリスティックの内容の イメージ です。これは、 通常のファイルのように対象のデバイスにコピーすることは できませんUSB スティックへ *.img を書き込むためのアプリケーションは複数あります。 この節ではこのうちの二つのユーティリティについて説明します。

重要:

先に進む前に、USB スティックに存在する重要なデータをバックアップしてください。 以下の手順を実行すると、 スティックに存在するデータは削除されます。

手順2.1 dd を使ってイメージを書き込む

警告:

この例では、イメージの書き込み先のターゲットデバイスとして、 /dev/da0 が使われています。 ここで使われるコマンドは、 指定したターゲットデバイスに存在しているデータを破壊してしまうので、 正しいデバイスが指定されていることに 細心の注意を払ってください

  • dd(1) コマンドユーティリティは、 BSD, Linux®, および Mac OS® システムで利用できます。 dd を使ってイメージを焼くには、 USB スティックを挿入して、 デバイス名を確定してください。 その後、ダウンロードしたインストールファイルおよび、 USB スティックのデバイス名を指定してください。 この例では、amd64 インストールイメージを FreeBSD システムの最初の USB デバイスに書き込みます。

    # dd if=FreeBSD-10.0-RELEASE-amd64-memstick.img of=/dev/da0 bs=1m conv=sync

    もし上記のコマンドに失敗するようでしたら、 USB スティックがマウントされていないことや、 デバイス名がディスクに対してのものであり、 パーティションではないことを確認してください。 オペレーティングシステムによっては、このコマンドを sudo(8) で実行することが求められる場合があります。 Linux® のようなシステムでは、書き込みをバッファします。 すべての書き込みを完了させるには、 sync(8) を使用してください。

手順2.2 Windows® を使ってイメージを書き込む

警告:

適切なドライブレターを出力先に設定していることを十分に確認してください。 さもなければ、現在あるデータは上書きされ、 破壊されてしまうでしょう。

  1. Image Writer for Windows® を入手する

    Image Writer for Windows® は、 イメージファイルをメモリスティックに正しく書き込むことのできるフリーのアプリケーションです。 https://launchpad.net/win32-image-writer/ からダウンロードして、フォルダに展開してください。

  2. イメージライタを使ってイメージを書き込む

    Win32DiskImager アイコンをダブルクリックして、プログラムを起動してください。 Device の下に表示されるデバイスレターが、 メモリスティックのドライブであることを確認してください。 フォルダのアイコンをクリックして、 メモリスティックに書き込むイメージファイルを選択します。 [ Save ] をクリックして、 イメージファイルの名前を確定してください。 すべてが正しく行われたかどうか、また、 他のウィンドウでメモリスティックのフォルダが開かれていないことを確認してください。 準備ができたら、[ Write ] をクリックして、 メモリスティックにイメージファイルを書き込んでください。

これで FreeBSD をインストールする用意ができました。

2.4. インストールの開始

重要:

デフォルトでは、次のメッセージが表示されるまで インストーラはディスクに何の変更も加えません。

Your changes will now be written to disk.  If you
have chosen to overwrite existing data, it will
be PERMANENTLY ERASED. Are you sure you want to
commit your changes?

この警告の前であれば、いつでもインストールを中断できます。 もし、何かを間違って設定してしまったことが心配ならば、 最後の警告の前に単にコンピュータをオフにしてください。 システムのハードディスクを変更せずに済みます。

この章では、「インストールメディアの準備」 で説明されている手順によって準備されたインストールメディアから、 システムを起動する方法について説明します。 起動可能な USB スティックを使用する場合には、 コンピュータを立ち上げる前に、 USB スティックを挿入してください。 CD もしくは DVD から起動する場合には、 コンピュータを立ち上げ、 すぐにメディアを挿入してください。 挿入したメディアからシステムを起動するように設定する方法は、 アーキテクチャによって異なります。

2.4.1. i386™ および amd64 での起動

これらのアーキテクチャでは、 BIOS メニューが用意されており、 ブートデバイスを選択できます。 利用するインストールメディアに合わせて、 最初のブートデバイスに、 CD/DVD または USB を選択してください。 ほとんどのシステムでは、BIOS に入らずとも、起動時に特定のキーを押すことで、 起動するデバイスを選択できます。 通常、このキーは、 F10, F11, F12 または Escape のどれかです。

もし、コンピュータが FreeBSD のインストーラではなく、 すでに存在しているオペレーティングシステムで起動してしまったのであれば、 以下の原因が考えられます。

  1. インストールメディアが起動プロセスにおいて十分早いタイミングで挿入されていません。 メディアをそのままにしてコンピュータを再起動してください。

  2. BIOS の変更が適切に行われていなかったり、 変更が保存されていません。 最初のブートデバイスに正しいブートデバイスが設定されていることを確認してください。

  3. システムが古く、 希望しているメディアからの起動に対応していません。 この場合には、Plop Boot Manager (http://www.plop.at/en/bootmanagers.html) を使うと、選択したメディアからシステムを起動できます。

2.4.2. PowerPC® での起動

ほとんどのコンピュータでは、 起動中にキーボードの C を押しておくと、CD から起動します。 別の方法では Command+Option+O+F、 または non-Apple® キーボードでは Windows+Alt+O+F を押してください。0 > プロンプトで

boot cd:,\ppc\loader cd:0

と入力してください。

2.4.3. SPARC64® での起動

ほとんどの SPARC64® システムは、 ディスクから自動的に起動するように設定されています。 FreeBSD を CD からインストールするには、 PROM に入る必要があります。

PROM に入るにはシステムを再起動し、 ブートメッセージが表示されるまで待ってください。 モデルによりますが、以下のようなメッセージが表示されます。

Sun Blade 100 (UltraSPARC-IIe), Keyboard Present
Copyright 1998-2001 Sun Microsystems, Inc.  All rights reserved.
OpenBoot 4.2, 128 MB memory installed, Serial #51090132.
Ethernet address 0:3:ba:b:92:d4, Host ID: 830b92d4.

もしシステムがこの時点でディスクから起動するようでしたら、 キーボードから L1+A または Stop+A を押すか、シリアルコンソールから BREAK を送信してください。 tip または cu を使用する場合には、~# によって BREAK を送ることができます。 単一の CPU を持つシステムでの PROM プロンプトは、ok で、 SMP システムのプロンプトは、 ok {0} です。 数字はアクティブな CPU の数を表しています。

ここで、CD をドライブに挿入し、 PROM プロンプトで boot cdrom と入力してください。

2.4.4. FreeBSD ブートメニュー

インストールメディアからシステムが起動すると、 以下のようなメニューが表示されます。

図2.1 FreeBSD ブートローダメニュー
FreeBSD ブートローダメニュー

デフォルトでは、メニューは、FreeBSD インストーラが起動するまで (FreeBSD がインストールされているシステムでは、FreeBSD が起動するまで)、 ユーザからの入力を 10 秒間受け付けます。 タイマーを停止してオプションを確認には、 Space を押してください。オプションを選択するには、 ハイライトされている番号、文字、もしくはキーを押してください。 以下のオプションが利用可能です。

  • Boot Multi User: FreeBSD の起動プロセスを続けます。 ブートタイマが停止しているのであれば 1、 大文字もしくは小文字の B または、 Enter を押してください。

  • Boot Single User: このモードは、 すでにインストールされている FreeBSD を修復するために利用できます。  シングルユーザモードについては、 「シングルユーザモード」 で説明されています。 2 もしくは、小文字もしくは、大文字の S を押すとこのモードに入ることができます。

  • Escape to loader prompt: 制限された低レベルのコマンドのみが利用可能な修復用プロンプトでシステムを起動します。 このプロンプトについては、 「起動ステージ 3 /boot/loader で説明されています。 3 または Esc を押すとこのプロンプトで起動します。

  • Reboot: システムを再起動します。

  • Configure Boot Options: 図2.2「FreeBSD ブートオプションメニュー」 で示されるメニューを開きます。

図2.2 FreeBSD ブートオプションメニュー
FreeBSD ブートオプションメニュー

この起動オプションメニューは、 2 つのセクションから構成されています。 最初のセクションは、メインのブートメニューに戻ったり、 オプションをデフォルト値に戻すために利用できます。

次のセクションでは、変更可能なオプションついて、 選択されている番号や文字を、OnOff に変更できます。 システムは、これらのオプションが変更されない限り、 常に変更されたオプションで起動します。 このメニューで変更可能なオプションは以下の通りです。

  • ACPI Support: 起動中にシステムが固まるようでしたら、このオプションを Off にしてください。

  • Safe Mode: 上記のオプションの対応を行ってもシステムが起動時に固まるようでしたら、 ACPI SupportOff にし、このオプションを On に設定してください。

  • Single User: シングルユーザモードでインストールされている FreeBSD を修復には、 On にしてください。 シングルユーザモードについては、 「シングルユーザモード」 で説明されています。 問題が修正された後は、Off に戻してください。

  • Verbose: 起動プロセスの表示をより詳細に表示したい場合には、 このオプションを On にしてください。 ハードウェアの問題を解決する際には有効です。

設定が終わったら、 1 または Backspace を押してメインブートメニューに戻り、 Enter を押して FreeBSD の起動を続けてください。 FreeBSD がハードウェアの検出を行い、 インストールプログラムをロードしている間、 ブートメッセージが表示されます。 起動後、図2.3「ウェルカムメニュー」 に示されるウェルカムメニューが表示されます。

図2.3 ウェルカムメニュー
ウェルカムメニュー

Enter を押して、デフォルトの [ Install ] を選択すると、インストール作業が始まります。 この章の残りの部分では、このインストーラの使い方について説明します。 そのほかには、左右の矢印キーまたは色が変わっている文字を使って、 選択したいメニューの項目を選択してください。 [ Shell ] を使うと、 インストールの前に、FreeBSD シェルからコマンドラインユーティリティでディスクを準備できます。 [ Live CD ] オプションを選択すると、 インストール前に FreeBSD を試すことができます。 live 版については、「Live CD を使う」 で説明されています。

ヒント:

ハードウェアの検出などのブートメッセージを見るには 大文字または小文字の S を押してください。 その後、Enter を押して、 シェルにアクセスしてください。 シェルプロンプトから、more /var/run/dmesg.boot を入力してください。 メッセージのスクロールには、スペースバーを使ってってください。 終わったら、exit を押して、 ウェルカムメニューに戻ってください。

2.5. bsdinstall の使用

この章では、 bsdinstall メニューの順番と、 システムがインストールされる前に、 尋ねられる情報の形式について紹介します。 メニューオプションの選択には、矢印キーを使い、 メニューの項目の選択や解除する場合には、Space キーを使ってください。 設定が終わったら、Enter を押して設定を保存し、次の画面へ移動してください。

2.5.1. キー配列メニューの選択

使用しているシステムのコンソールにもよりますが、図2.4「キーマップの選択」 で表示されるメニューが最初に表示されます。

図2.4 キーマップの選択
キーマップの選択

キーボードのレイアウトを設定するには、 [ YES ] が選択されている状態で、 Enter を押してください。図2.5「キーボードメニューの選択」 で表示されているメニューが表示されます。 デフォルトのレイアウトを使用する場合には、カーソルキーを使って、 [ NO ] を選択し、 Enter を押して、 このメニュー画面をスキップしてください。

図2.5 キーボードメニューの選択
キーボードメニューの選択

キーボードレイアウトを設定するには、 システムのキーボードに最も近いキーマップをカーソルキーの上下キーので選択してください。 選択を保存するには、Enter キーを押してください。

注記:

Esc を押すと、メニューを終了し、 デフォルトのキーボードマップを使うようになります。 どのキーボードマップを選べばよいかわからない場合には、 United States of America ISO-8859-1 を選ぶとよいでしょう。

FreeBSD 10.0-RELEASE 以降では、このメニューが拡張されました。 デフォルトの選択と共に、キーマップのすべて選択項目が表示されます。 さらに、異なるキーマップを選択した時には、 ダイアログが表示され、インストールを先に進む前に、 ユーザがキーマップの試験を行い、適切かどうかを確認できます。

図2.6 拡張キーマップメニュー
拡張キーマップメニュー

2.5.2. ホスト名の設定

次の bsdinstall のメニューでは、 新しくインストールするシステムに与えるホスト名を設定します。

図2.7 ホスト名の設定
ホスト名の設定

ネットワーク上でユニークなホスト名を入力してください。 入力するホスト名は、machine3.example.com のように完全修飾のホスト名で入力してください。

2.5.3. インストールするコンポーネントの設定

次に、 bsdinstall は、インストールするオプションのコンポーネントの選択に移ります。

図2.8 インストールするコンポーネントの設定
インストールするコンポーネントの設定

どのコンポーネントをインストールするかは、 システムの用途と用意されているディスク容量に依存します。 base system として知られている FreeBSD カーネルとユーザランドは、 常にインストールされます。 アーキテクチャによっては、表示されないコンポーネントもあります。

  • doc - 追加の文書。 多くは歴史的な興味のもので、/usr/share/doc にインストールされます。 FreeBSD ドキュメンテーションプロジェクトが提供している文書は、 後で、「ドキュメントのアップデート」 に書かれている手順でインストールされます。

  • games - fortune, rot13 などの伝統的な BSD ゲームをインストールします。

  • lib32 - 32-bit のアプリケーションを 64-bit 版の FreeBSD で実行する際に必要となる互換ライブラリ。

  • ports - FreeBSD Ports Collection は、 サードパーティ製ソフトウェアパッケージのダウンロード、 コンパイル、 インストールを自動化するように設計されたファイルの集まりです。 Ports Collection の使い方については、 4章アプリケーションのインストール - packages と ports で説明します。

    警告:

    インストールプログラムは、 システムのディスクに十分な空き容量があるかどうかを確認しないので、 ハードディスクに十分な容量があるときだけ、 このオプションを選択するしてください。 FreeBSD 9.0 では、Ports Collection が必要とする容量は、 約 500 MB です。

  • src - FreeBSD のカーネルおよびユーザランド両方の完全なソースコードです。 ほとんどのアプリケーションは必要としませんが、 デバイスドライバやカーネルモジュール、 Ports Collection のアプリケーションによってはコンパイル時に必要となります。 このソースは、FreeBSD そのものの開発に使うこともできます。 すべてのソースツリーをインストールするには 1 GB のディスク容量を必要とします。 また、FreeBSD システム全体のコンパイルには、 さらに 5 GB の容量が必要です。

2.5.4. ネットワークからのインストール

図2.9「ネットワークからのインストール」 で示されているメニューは、 -bootonly.iso CD からインストールする時のみ表示されます。この インストールメディアは、インストールファイルを含んでいません。 ネットワーク経由でインストールファイルをダウンロードする必要があるため、 このメニューは、ネットワークインタフェースを最初に設定する必要があることを示しています。

図2.9 ネットワークからのインストール
ネットワークからのインストール

ネットワーク接続の設定を行うには、 Enter を押して、 「ネットワークインタフェースの設定」 に示されている手順に従ってください。 ネットワーク接続の設定が終わったら、 FreeBSD をインストールするコンピュータと同じ地域のミラーサイトを選んでください。 ターゲットコンピュータの近くにミラーサイトがあると、 ファイルのダウンロードは早く終わるので、 インストールの時間は短くなります。

図2.10 ミラーサイトの選択
ミラーサイトの選択

ローカルメディアにインストールファイルが用意されているように、 インストールは先に進みます。

2.6. ディスク領域の割り当て

次のメニューでは、ディスク領域を割り当てる方法を選択します。 メニューで選択できるオプションは、インストールする FreeBSD のバージョンに依存します。

図2.11 FreeBSD 9.x におけるパーティションの分割の選択肢
FreeBSD 9.x におけるパーティションの分割の選択肢

図2.12 FreeBSD 10.x 以降でのパーティション分割の選択
FreeBSD 10.x 以降でのパーティション分割の選択

Guided によるパーティションの分割方法では、 ディスクパーティションを自動的に設定します。 Manual によるパーティションの分割方法は、 高度な知識を持つユーザ向けで、 メニューオプションからカスタマイズしたパーティションを作成できます。 Shell は、シェルプロンプトを起動し、 高度な知識を持つユーザが、 gpart(8), fdisk(8), bsdlabel(8) のようなコマンドラインのプログラムを実行して、 カスタマイズしたパーティションを作成できます。 FreeBSD 10 以降で利用可能な ZFS オプションは、 ブート環境に対応した root-on-ZFS システムを構築します。 暗号化された root-on-ZFS システムを構築することもできます。

この章では、 ディスクパーティションをレイアウトする際の検討事項を説明します。 その後、各パーティションの作成方法について説明します。

2.6.1. パーティションレイアウトのデザイン

ファイルシステムのレイアウトを行う際には、 ハードディスクの外周部は内周部よりもデータ転送が速いということを思い出してください。 これに従えば、 小さくて激しくアクセスされるファイルシステムを外周付近に、 /usr のようなより大きなパーティションはディスクの内側に配置すべきでしょう。 そのため、パーティションを作成する際には、/、 スワップ、/var, /usr のような順で作ってゆくのがよいでしょう。

/var パーティションのサイズは、 あなたが計算機をどのように使おうとしているかを反映します。 このパーティションには主としてメールボックスやログファイル、 プリンタスプールが置かれます。 メールボックスとログファイルは、 システムのユーザ数やログの保持期間に依存して予期し得ぬサイズにまで成長する可能性があります。 概して、ほとんどのユーザは、/var にギガバイト以上の空き容量を必要とはしないでしょう。

注記:

時には、たくさんのディスク容量が /var/tmp に必要になるときがあります。 新しいソフトウェアをインストールする際、 package のツールは、package の一時的なコピーを /var/tmp 以下に展開します。 /var/tmp 以下に十分なディスク容量が用意されていないと、 Firefox, OpenOfficeLibreOffice のような、 大きなソフトウェア package のインストールが、 困難になることがあります。

/usr パーティションには、 FreeBSD Ports Collection およびシステムのソースコードを含む、 システムをサポートするのに必要な多くのファイル群が置かれます。 このパーティションには、少なくとも 2 ギガバイトを用意することをおすすめします。

パーティションのサイズを考える時、 必要量を念頭に置いてください。 別のパーティションには潤沢にスペースが余っているのに、 あるパーティションでスペースが足らないままというのは、 フラストレーションがたまるものです。

経験からスワップパーティションのサイズは物理メモリ (RAM) の 2 倍というのが一般的です。 RAM の少ないシステムでは、 もっとスワップを増した方が性能がよくなります。 スワップが少なすぎる設定は、 あなたが後にメモリを増設したときに問題を起すばかりではなく、 VM ページスキャニングコードの能率を落します。

複数の SCSI ディスクや異なるコントローラで操作される複数の IDE ディスクを持つ大規模なシステムでは、 それぞれのドライブ (4 台まで) にスワップを設定することを推奨します。 各ドライブのスワップパーティションはほぼ同一サイズであるべきです。 カーネルは任意のサイズを扱うことができますが、 内部のデータ構造は最大のスワップパーティションの 4 倍に調節されます。 スワップパーティションをほぼ同一のサイズにしておくことで、 カーネルはスワップスペースを最適なかたちでディスクをまたいでストライプさせることができます。 あなたが通常スワップをたくさん使わないとしても、 多くのスワップサイズを用意しておくと良いでしょう。 プログラムが暴走しても再起動させられる前に回復することが容易になります。

システムを適切にパーティション化することで、 小さいが書き込みの激しいパーティションによって引き起こされるフラグメント化を、 読み出し専門のパーティションにまで波及させずにすみます。 また、書き込みの激しいパーティションをディスクの周辺部に配置することで、 I/O パフォーマンスを増大させることができます。 大きなパーティション内の I/O パフォーマンスもまた必要とされているでしょうが、 ディスク周辺部へ移動させたとしても、 /var を周辺部に移動させることによって大きな効果が得られたのとは対照的に、 意味のあるパフォーマンスの増加は見込めないでしょう。

2.6.2. Guided によるパーティションの分割

この方法を選択すると、 メニューには利用可能なディスクが表示されます。 複数のディスクが接続されている場合には、 FreeBSD をインストールするディスクを選択してください。

図2.13 複数のディスクから選択する
複数のディスクから選択する

ディスクを選択したら、次のメニューでは、 ディスクのすべてにインストールを行うか、 または空き容量にパーティションを作成してインストールを行うかを設定します。 [ Entire Disk ] を選択すると、 一般的なパーティションレイアウトが自動的に作成されます。 [ Partition ] を選択すると、 ディスクの使用していない領域にパーティションレイアウトを作成します。

図2.14 Entire Disk または Partition の選択
Entire Disk または Partition の選択

パーティションのレイアウトを作成したら、 インストールの条件を満たしているかどうかを深く確認してください。 [ Revert ] を選択すると、 パーティションをオリジナルの値にリセットします。 また、[ Auto ] を選択すると、 FreeBSD パーティションを自動的に作成します。 パーティションを手動で作成、変更、削除することもできます。 正しくパーティションを作成出来たら、 [ Finish ] を選択し、 インストールを進めてください。

図2.15 作成されたパーティションの確認
作成されたパーティションの確認

2.6.3. Manual によるパーティションの分割

この方法を選択すると、 パーティションエディタが起動します。

図2.16 Manual によるパーティションの分割
Manual によるパーティションの分割

インストール先のドライブ (この例では ada0) を選び、 [ Create ] を選択すると、 利用可能なパーティションスキームの一覧が表示されます。

図2.17 手動でパーティションを作成する
手動でパーティションを作成する

amd64 コンピュータでは、通常 GPT が最も適切な選択となります。 GPT に対応していないような古いコンピュータでは、 MBR を使う必要があります。 他のパーティションスキームは、使うことがまれであったり、 古いコンピュータで用いられるものです。

表2.1 パーティションスキーム
省略形説明
APMPowerPC® で使われている Apple Partition Map
BSDMBR を用いない BSD ラベル。 BSD 以外のディスクユーティリティは認識しないため、しばしば dangerously dedicated mode と呼ばれます。
GPTGUID Partition Table (http://en.wikipedia.org/wiki/GUID_Partition_Table)
MBRMaster Boot Record (http://en.wikipedia.org/wiki/Master_boot_record)
PC98NEC PC-98 コンピュータで使われている MBR の亜種 (http://en.wikipedia.org/wiki/Pc9801)
VTOC8Volume Table Of Contents。 Sun SPARC64 および UltraSPARC コンピュータで使われます。

パーティションスキームを選択して作成した後で、 もう一度 [ Create ] を選択すると、 パーティションが作成されます。

図2.18 手動でパーティションを作成する
手動でパーティションを作成する

標準の FreeBSD GPT のインストールでは、 少なくとも 3 つのパーティションが使われます。

  • freebsd-boot - FreeBSD ブートコードを含んでいます。

  • freebsd-ufs - FreeBSD UFS ファイルシステム。

  • freebsd-swap - FreeBSD スワップ空間。

他のパーティション形式に freebsd-zfs があります。 これは FreeBSD ZFS ファイルシステム ( The Z File System (ZFS)) を含めるためのものです。 利用可能な GPT パーティションタイプについては、gpart(8) をご覧ください。

複数のファイルシステムのパーティションを作成できます。 /, /var, /tmp そして /usr といった伝統的なパーティション分割のレイアウトを好む人もいます。 レイアウトの例が 例2.1「伝統的なファイルシステムのパーティションを作成する。」 にあります。

Size には、 K (キロバイト)、 M (メガバイト)、 G (ギガバイト) といった通常の省略形を使用出来ます。

ヒント:

セクタを適切に配置することで、 最良のパフォーマンスを得ることができます。 また、パーティションサイズを 4K バイトの偶数倍にすると、 512 バイトまたは 4K バイトのセクタでドライブが配置しやすくなります。 一般的に、 4K の偶数倍の場所からパーティションが開始するように設定する簡単な方法は、 1M または 1G の偶数倍のパーティションサイズを用いることです。 ただし、例外があります。 freebsd-boot パーティションは、 ブートコードの制限により 512K 以下である必要があります。

ファイルシステムを持つパーティションでは、 Mountpoint が必要となります。 1 つの UFS パーティションだけを作成したのであれば、 マウントポイントは / となります。

Label は作成したパーティションを認識するための名前です。 ドライブ名や番号は、 ドライブが別のコントローラやポートに接続されると変わることがありますが、 パーティションラベルは変わりません。 /etc/fstab のようなファイルの中で、 ドライブ名やパーティション番号ではなく、ラベルを参照することにより、 システムがハードウェアの変更に対して、より寛容になります。 GPT ラベルは、 ディスクが接続されると /dev/gpt/ に現れます。他のパーティションスキームでは別のラベルとなり、 /dev/ 以下の異なるディレクトリにラベルが現れます。

ヒント:

名前の衝突を避けるため、 各パーティションには、一意的な名前使ってください。 コンピュータ名、使用、位置情報を表す単語をラベルに追加できます。 たとえば、lab という名前のコンピュータの UFS の root パーティションには、 labroot または rootfs-lab といった名前を使ってください。

例2.1 伝統的なファイルシステムのパーティションを作成する。

伝統的なパーティションレイアウト (/, /var, /tmp および /usr ディレクトリが各パーティションの別のファイルシステム) を作成するには、 GPT パーティションスキームを作成し、 その後、示されているようにパーティションを作成してください。 示されているパーティションサイズは 20G のディスク用です。 ディスクにより多くの容量があれば、swap または /var パーティションを大きく取ると良いでしょう。 ここで示されているラベルには、 example を意味する ex が付けられていますが、 実際には上で説明したように、 これとは別のユニークなラベルをつけてください。

FreeBSD の gptboot は、 デフォルトでは最初に見つかった UFS パーティションが、 / パーティションであることを前提としています。

パーティションタイプサイズマウントポイントラベル
freebsd-boot512K
freebsd-ufs2G/exrootfs
freebsd-swap4Gexswap
freebsd-ufs2G/varexvarfs
freebsd-ufs1G/tmpextmpfs
freebsd-ufsデフォルト (ディスクの残りのすべての容量)/usrexusrfs

カスタムパーティション を作成したら [ Finish ] を選択して、 インストールを先に進んでください。

2.6.4. root-on-ZFS パーティションの自動作成

root-on-ZFS のインストール時の自動作成は、 FreeBSD 10.0-RELEASE から対応しました。 このパーティションのモードは、 ディスクのすべての領域に対して機能するので、 ディスク上にあるすべての内容を消去してしまいます。 インストーラは、ZFS が 4k セクタを使うように、 自動的に 4k の境界にアラインするようパーティションを作成します。 512 バイトセクタのディスクでも利用できます。 512 バイトのディスクで作成されたプールに、 将来ストレージ空間を追加したり、壊れたディスクの置き換えにおいて、4k セクタのディスクを追加できるようにしておくことにはメリットがあります。 インストーラはオプションとして、 GELI ディスクの暗号化にも対応しています。 暗号化を有効にすると、/boot ディレクトリを含む 2 GB の暗号化されていないブートプールが作成されます。 ここには、カーネルとシステムを起動するのに必要なファイルが含まれます。 ユーザがサイズを選択可能な swap パーティションも作成され、 残りのスペースが ZFS プールとして使われます。

インストーラの ZFS 設定メニューには、 プールの作成をコントロールする数多くのオプションが用意されています。

図2.19 ZFS パーティションメニュー
ZFS パーティションメニュー

T を選択して、Pool Type およびプールに対応するディスクを選択してください。 現在のところ、自動の ZFS インストーラは、 ストライプモードを除き、 単一のトップレベルの仮想デバイスの作成のみに対応しています。 より複雑なプールを作成するには、「シェルモードによるパーティションの作成」 で説明されている方法で作成してください。 インストーラは、ストライプ (推奨されません。冗長性なし)、ミラー (ベストなパフォーマンス。使用できる容量は最小) および RAID-Z 1, 2 および 3 (それぞれ 1, 2 および 3 ディスクの同時障害へ対応)、 といったさまざまなタイプのプールの作成に対応しています。 選択されているプールタイプに対しては、スクリーンの下に、 必要なディスク数、RAID-Z の場合には、 各設定に対して最適なディスクの数についてのアドバイスが表示されます。

図2.20 ZFS プールタイプ
ZFS プールタイプ

Pool Type を選択したら、 利用可能なディスクの一覧が表示されます。 その後、プールを構成するディスクを、1 つまたは複数選択してください。 十分なディスクが選択されているかどうかについて検証が行われます。 もし、問題があるようでしたら、 <Change Selection> を選択して、ィスクの一覧に戻ってください。 もしくは、 <Cancel> を選択して、 プールのタイプを変更してください。

図2.21 ディスクの選択
ディスクの選択

図2.22 問題のある選択
問題のある選択

この一覧の中に抜けているディスクがある時や、 インストーラが立ち上がった後にディスクを接続した場合に、 最新の利用可能なディスクの一覧を見るには、 - Rescan Devices を選択してください。 間違ったディスクをアクシデントで破壊しないように、 適切なディスクが選択されていることを確認するには、 - Disk Info メニュー選択して、 各ディスクのパーティションテーブル、および、 デバイスモデル番号およびシリアル番号などのさまざまな情報を確認してください。

図2.23 ディスクの解析
ディスクの解析

メインの ZFS 設定メニューでは、 pool 名の入力、4k セクタ制限の設定の無効化、 暗号化の有効 / 無効の設定、パーティションテーブルタイプの GPT (推奨) と MBR の切り替え、 そしてスワップ領域の容量を設定できます。 すべてのオプションが適切な値に設定されたら、 メニューのトップにある >>> Install オプションを選択してください。

GELI ディスク暗号化を有効にしていたら、 ディスクを暗号化するために用いるパスフレーズを 2 度求められます。

図2.24 ディスク暗号化パスワード
ディスク暗号化パスワード

インストーラは ZFS プールを作成するために選択されたドライブの中身を破棄することの最終確認を行います。

図2.25 最終確認
最終確認

その後のインストールの過程は、通常通りに進みます。

2.6.5. シェルモードによるパーティションの作成

高度なインストールを行うには、bsdinstall が提供するパーティション分割のメニューは柔軟性にかけることがあります。 高度な技術を持つユーザは、パーティションメニューで Shell オプションを選択することで、 手動でドライブを分割して、ファイルシステムを作成し、 /tmp/bsdinstall_etc/fstab を作成し、 /mnt 以下にファイルシステムをマウントできます。 以上を実行したら、 exit を実行して bsdinstall に戻り、 インストールを続けてください。

2.7. インストール操作の確定

ディスクを一度設定すると、次のメニューは、 選択したハードドライブをフォーマットする前に、 設定を変更する最後のチャンスです。 もし変更が必要であれば、 [ Back ] を選択してメインのパーティションエディタまで戻ってください。 [ Revert & Exit ] を選択すると、 ハードドライブへの変更なしにインストールを終了します。

図2.26 最後の確認
最後の確認

本当にインストールを開始するのであれば、 [ Commit ] を選択して、 Enter を押してください。

インストールにかかる時間は、どのディストリビューションを選んだか、 どのインストールメディアを使ったか、 そしてコンピュータの速度にも依存します。 進行状況を表すメッセージが逐次表示されます。

まず最初に、インストーラは選択されているディスクをフォーマットし、 パーティションを初期化します。 bootonly メディアを用いたインストールでは、 選択されたコンポーネントがダウンロードされます。

図2.27 配布ファイルのダウンロード
配布ファイルのダウンロード

次に、ダウンロードの際にエラーが含まれなかったか、 インストールメディアからの読み取り中に読み間違いが起きなかったかどうか等、 配布ファイルの完全性の検証が行われます。

図2.28 配布ファイルの検証
配布ファイルの検証

最後に、検証された配布ファイルがディスクへ取り出されます。

図2.29 配布ファイルの取り出し
配布ファイルの取り出し

必要な配布ファイルがすべて取り出されたら、 bsdinstall は、 インストール後の設定画面を表示します。 利用可能なインストール後のオプションについては次の章で説明します。

2.8. インストール後の作業

FreeBSD のインストールが完了したら、 新しくインストールしたシステムで起動する前に、 bsdinstall は、 さまざまなオプションの設定に移ります。 この章では、これらのオプションについて説明します。

ヒント:

一度システムを起動した後は、 bsdconfig を使って、メニュー形式により、 ここで説明するオプションや追加のオプションでシステムを設定できます。

2.8.1. root パスワードの設定

最初に root のパスワードを設定する必要があります。 パスワードを入力している際には、 入力している文字は画面に表示されません。 パスワードの入力後、もう一度入力する必要があります。 これは入力ミスを防ぐためです。

図2.30 root パスワードの設定
root パスワードの設定

2.8.2. ネットワークインタフェースの設定

次に、 コンピュータが認識したすべてのネットワークインタフェースが表示されます。 設定するネットワークインタフェースを選んでください。

注記:

bootonly によるインストールの一部として、 すでにネットワークの設定を終えているのであれば、 このネットワークの設定メニューは飛ばしてください。

図2.31 イーサネットインタフェースの選択
イーサネットインタフェースの選択

イーサネットインタフェースを選択したのであれば、図2.35「IPv4 ネットワークの選択」 で表示されるメニューまで飛びます。 ワイヤレスネットワークを選択したのであれば、 システムはワイヤレスアクセスポイントをスキャンします。

図2.32 ワイヤレスアクセスポイントのスキャン
ワイヤレスアクセスポイントのスキャン

ワイヤレスネットワークは Service Set Identifier (SSID) によって識別されます。 SSID は、それぞれのネットワークに与えられる、 短く、一意的な名前です。 スキャンで見つかった SSID の一覧は、 そのネットワークで利用できる暗号化のタイプの説明とともに表示されます。 もし、期待した SSID が一覧に表示されていなければ、 [ Rescan ] を選択してもう一度スキャンしてください。 もし、期待したネットワークが表示されなければ、 接続のためのアンテナを確認したり、 コンピュータをアクセスポイントの近くに移動させてみてください。 その後もう一度スキャンしてください。

図2.33 ワイヤレスネットワークの選択
ワイヤレスネットワークの選択

次に、 ワイヤレスネットワークに接続するための暗号情報を入力してください。 WEP のような古い暗号の安全性は低いので、 WPA2 暗号が強く推奨されます。 WPA2 を使用してるネットワークでは、 Pre-Shared Key (PSK) と呼ばれるパスワードを入力してください。 セキュリティ上の観点から、 入力ボックスに入力した文字はアスタリスクで表示されます。

図2.34 WPA2 のセットアップ
WPA2 のセットアップ

次は、イーサネットもしくはワイヤレスインタフェースに対して、 IPv4 を設定するかどうかを選択します。

図2.35 IPv4 ネットワークの選択
IPv4 ネットワークの選択

IPv4 の設定方法は 2 通りあります。 DHCP はネットワークインタフェースを自動的に適切に設定する方法で、 DHCP サーバのあるネットワークでは使用すべきです。 もし、DHCP を利用できない環境では、 静的な設定として、 ネットワークのアドレス情報を手動で入力する必要があります。

注記:

適当なネットワーク情報を入力しても動かないので、 DHCP サーバが利用できなのであれば、 ネットワーク管理者またはサービスプロバイダから 必要となるネットワーク情報 に示されている情報を入手してください。

DHCP サーバを利用できるのであれば、 次のメニューで [ Yes ] を選択して、 ネットワークインタフェースの設定を自動的に行ってください。 インストーラは DHCP サーバを検索し、 システムに対するアドレス情報を入手するために、 少しの間停止しているように表示されます。

図2.36 IPv4 DHCP 設定の選択
IPv4 DHCP 設定の選択

DHCP サーバを利用できない環境では、 [ No ] を選択し、 このメニューにおいて以下のアドレス情報を入力してください。

図2.37 IPv4 の静的な設定
IPv4 の静的な設定

  • IP Address - コンピュータに手動で与える IPv4 アドレスです。 このアドレスは一意的なものである必要があり、 すでにローカルネットワーク上の他のネットワーク機器で使われているものではいけません。

  • Subnet Mask - ネットワークのサブネットマスクです。

  • Default Router - このネットワークのデフォルトゲートウェイの IP アドレスです。

次の画面では、インタフェースを IPv6 で設定すべきかを選択します。 IPv6 が利用でき、希望するのであれば、 [ Yes ] を選択してください。

図2.38 IPv6 ネットワークの選択
IPv6 ネットワークの選択

IPv6 の設定に関しても 2 つの方法があります。 StateLess Address AutoConfiguration (SLAAC) は、ローカルルータから適切なネットワーク設定情報を入手するように、 自動的にリクエストします。 詳細については http://tools.ietf.org/html/rfc4862 を参照してください。静的な設定では、 ネットワーク情報を手動で入力する必要があります。

IPv6 ルータを利用できるのであれば、 次のメニューで [ Yes ] を選択し、 ネットワークインタフェースの設定を自動的に行ってください。 インストーラはルータを見つけ出し、 システムに対するアドレス情報を入手するために、 少しの間停止しているように表示されます。

図2.39 IPv6 SLAAC 設定の選択
IPv6 SLAAC 設定の選択

IPv6 ルータが利用できない環境では、 [ No ] を選択して、 表示されるメニューで以下のアドレス情報を入力する必要があります。

図2.40 IPv6 の静的な設定
IPv6 の静的な設定

  • IPv6 Address - このコンピュータに割り当てられた IPv6 アドレスです。 このアドレスは一意的なものである必要があり、 すでにローカルネットワーク上の他のネットワーク機器で使われているものではいけません。

  • Default Router - このネットワークのデフォルトゲートウェイの IPv6 アドレスです。

最後のネットワークメニューでは、 Domain Name System (DNS) リゾルバを設定します。 これは、ホスト名とネットワークアドレスを変換します。 すでに DHCP または SLAAC を使って自動的にネットワークインタフェースを設定したのであれば、 Resolver Configuration には値がすでに入っているでしょう。 そうでなければ、Search フィールドにローカルネットワークのドメイン名を入力してください。 DNS #1 および DNS #2 は、 ローカル DNS サーバの IPv4 または IPv6 アドレスです。 少なくとも、1 つの DNS サーバは必要です。

図2.41 DNS の設定
DNS の設定

2.8.3. タイムゾーンの設定

次のメニューでは、システムのクロックが UTC を使うか、ローカルタイムを使うかを設定します。 迷ったら、[ No ] を選択して、 良く使われているローカルタイムを選択してください。

図2.42 ローカルまたは UTC クロックの選択
ローカルまたは UTC クロックの選択

次のメニューでは、地域、国、タイムゾーンを指定します。 使用しているシステムのタイムゾーンを設定することで、 夏時間などの地域による時刻の違いが自動的に調整され、 タイムゾーンに関連した機能が適切に取り扱われます。

ここでの例では、United States の Eastern タイムゾーンにあるコンピュータに対するものです。 実際の地理的位置に対応するタイムゾーンを設定してください。

図2.43 地域の選択
地域の選択

矢印キーを使って、適切な地域を選択し、 Enter を押してください。

図2.44 国名の選択
国名の選択

矢印キーを使って、適切に国名を選び、 Enter を押してください。

図2.45 タイムゾーンの選択
タイムゾーンの選択

矢印キーを使って適切なタイムゾーンを選択し、 Enter を押してください。

図2.46 タイムゾーンの確定
タイムゾーンの確定

タイムゾーンの省略形が正しいかどうかを確認してください。 問題がないようであれば Enter を押して、 インストール後の設定を続けてください。

2.8.4. サービスを有効にする

次のメニューでは、システムが起動した時に、 起動するシステムサービスを設定します。 これらのサービスはすべてオプションです。 システムの機能として必要なサービスだけを起動するようにしてください。

図2.47 追加で有効にするサービスの選択
追加で有効にするサービスの選択

このメニューで有効にできるサービスは以下の通りです。

  • sshd - セキュアシェル (SSH) デーモンは、 暗号化された接続上でリモートアクセスするために使われます。 システムがリモートログインを必要とする場合のみ、 このサービスを有効にしてください。

  • moused - システムのコンソールで、 マウスを利用する時に、このサービスを有効にしてください。

  • ntpd - 自動時刻同期のための The Network Time Protocol (NTP) デーモン。 ネットワーク上に、 Windows®, Kerberos または LDAP サーバがあるときには、このサービスを有効にしてください。

  • powerd - 電源の管理およびエネルギーを節約するための電源コントロールユーティリティ

2.8.5. クラッシュダンプの設定

次のメニューでは、 クラッシュダンプを有効にするかどうかを設定します。 システムのデバッグを行う上で、 クラッシュダンプにより得られる情報は非常に有用です。 可能であればクラッシュダンプを有効にすると良いでしょう。

図2.48 クラッシュダンプの設定
クラッシュダンプの設定

2.8.6. ユーザの追加

次のメニューでは、少なくとも一人のユーザを追加してください。 システムには root ではなく、ユーザアカウントでログインすることが推奨されています。 root 権限でログインすると、実行に対して制限がなく、また、保護されません。 通常のユーザでログインすることにより、 安全でセキュリティ的に危険が少なくなります。

[ Yes ] を選択し、 新しいユーザを追加してください。

図2.49 新しいユーザのアカウントの作成
新しいユーザのアカウントの作成

プロンプトに従い、 ユーザアカウントの作成で必要となる情報を入力してください。 図2.50「ユーザ情報の入力」 で示されている例では、asample ユーザアカウントを作成します。

図2.50 ユーザ情報の入力
ユーザ情報の入力

以下は、入力情報のまとめです。

  • Username - ログイン時のユーザ名を入力します。一般的な慣習では、 ファーストネームの最初の文字とラストネームを、 ユーザ名がシステムで一意的になる長さで組み合わせます。 ユーザ名は、大文字と小文字を区別し、 空白を含んではいけません。

  • Full name - ユーザのフルネーム。 空白を含むことは可能です。 また、この情報はユーザアカウントの説明の記述に使われます。

  • Uid - ユーザ ID 番号。 通常は、システムが自動的に割り当てるように、 空欄のままにします。

  • Login group - 新しいユーザのログイングループ。 空欄のままにすると、デフォルトに割り当てられます

  • Invite user into other groups? - ユーザを別のグループのメンバーとして追加するかどうか。 ユーザが管理者としてのアクセス必要であれば、 ここで wheel を入力してください。

  • Login class - 空欄にするとデフォルトの設定になります。

  • Shell - 一覧の中から、ユーザのシェルを入力してください。 シェルに関する詳細については 「シェル」 をご覧ください。

  • Home directory - ユーザのホームディレクトリ。 通常は、デフォルトの場所が適切です。

  • Home directory permissions - ユーザのホームディレクトリの権限。 通常は、デフォルトが適切です。

  • Use password-based authentication? - 通常は、ユーザがログイン時にパスワードの入力が要求されるように yes と入力してください。

  • Use an empty password? - 通常は、パスワードがないと安全ではなくなるので、 no です。

  • Use a random password? - 通常は、次のプロンプトでユーザ自身のパスワードを入力できるように、 no です。

  • Enter password - ユーザのパスワードです。 入力している文字は画面に表示されません。

  • Enter password again - 確認のため、パスワードをもう一度入力します。

  • Lock out the account after creation? - 通常は、ユーザがログインできるようにするため、 no です。

すべてを入力したら、サマリが表示され、 正しいかどうかの確認を求められます。 入力した情報に間違いがあれば、 no を入力してもう一度作業を行なってください。 すべてが正しく入力されていれば、 yes を入力して、 新しいユーザを作成してください。

図2.51 ユーザおよびグループの管理を終了する
ユーザおよびグループの管理を終了する

さらにユーザを追加するのであれば、 Add another user? の質問に対し、 yes を入力してください。 no を入力すると、ユーザの追加が終わり、次に進みます。

ユーザの追加や、ユーザ管理の詳細については、 「この章では」 を参照してください。

2.8.7. 最後の設定

すべてをインストールし、設定が終わった後に、 最後に設定を修正する機会が与えられます。

図2.52

インストールを完了する前に、 このメニューを使って変更、または、追加の設定を行なってください。

最終の設定オプション

最後の設定が完了したら、Exit を選んでください。

図2.53 Manual Configuration
Manual Configuration

新しいシステムを再起動する前に、 bsdinstall は追加の設定が必要かどうかを尋ねてきます。 [ Yes ] を選択して新しいシステムのシェルに入るか、または [ No ] を選択して、インストールの最後のステップに進んでください。

図2.54 インストールの終了
インストールの終了

追加の設定や、特別なセットアップが必要であれば、 [ Live CD ] を選んでインストールメディアを Live CD で起動してください。

インストールが終わったら、 [ Reboot ] を選んで、 コンピュータを再起動し、新しい FreeBSD システムで起動してください。 再起動する前には、忘れずに FreeBSD インストールメディアを外してください。 さもないと、もう一度インストールメディアから起動してしまいます。

FreeBSD の起動時には、多くのメッセージが画面に表示されます。 システムの起動後には、ログインプロンプトが表示されます。 login: プロンプトで、 インストール時に追加したユーザ名を入力してください。 root でのログインは避けてください。管理者の権限が必要となった時に、 スーパユーザになる方法については、「スーパーユーザアカウント」 を参照してください。

起動時に表示されていたメッセージは、 Scroll-Lock を押し、 scroll-back buffer で見ることができます。 PgUp, PgDn そして矢印キーでメッセージをスクロールバックできます。 メッセージの確認が終わったら、Scroll-Lock をもう一度押すと、ディスプレイのロックを外し、 コンソールに戻ることができます。 何度かシステムを起動した後で、これらのメッセージを見るには、 コマンドプロンプトから less /var/run/dmesg.boot と入力してください。 確認後に q を押すと、 コマンドラインに戻ります。

図2.47「追加で有効にするサービスの選択」 にて、 sshd を有効に設定した場合には、 最初の起動時にシステムが RSA および DSA キーを生成するため、 少々時間がかかるかもしれません。 その後の起動はより速くなるでしょう。 鍵のフィンガープリントは、以下の例のように表示されます。

Generating public/private rsa1 key pair.
Your identification has been saved in /etc/ssh/ssh_host_key.
Your public key has been saved in /etc/ssh/ssh_host_key.pub.
The key fingerprint is:
10:a0:f5:af:93:ae:a3:1a:b2:bb:3c:35:d9:5a:b3:f3 root@machine3.example.com
The key's randomart image is:
+--[RSA1 1024]----+
|    o..          |
|   o . .         |
|  .   o          |
|       o         |
|    o   S        |
|   + + o         |
|o . + *          |
|o+ ..+ .         |
|==o..o+E         |
+-----------------+
Generating public/private dsa key pair.
Your identification has been saved in /etc/ssh/ssh_host_dsa_key.
Your public key has been saved in /etc/ssh/ssh_host_dsa_key.pub.
The key fingerprint is:
7e:1c:ce:dc:8a:3a:18:13:5b:34:b5:cf:d9:d1:47:b2 root@machine3.example.com
The key's randomart image is:
+--[ DSA 1024]----+
|       ..     . .|
|      o  .   . + |
|     . ..   . E .|
|    . .  o o . . |
|     +  S = .    |
|    +  . = o     |
|     +  . * .    |
|    . .  o .     |
|      .o. .      |
+-----------------+
Starting sshd.

フィンガープリントおよび SSH についての詳細については、「OpenSSH」 をご覧ください。

FreeBSD はデフォルトでは、グラフィカルな環境をインストールしません。 グラフィカルなウィンドウマネージャのインストール、 および設定に関するより多くの情報については、 5章X Window System をご覧ください。

適切に FreeBSD をシャットダウンすることは、 ハードウェアをダメージから守ったり、データの保護につながります。 システムを適切にシャットダウンする前に、 電源を落すということはしないでください! wheel グループのメンバとなっているユーザは、 コマンドラインから su と入力し、 root のパスワードを入力してスーパユーザとなってください。 その後、shutdown -p now と入力すると、システムは正しくシャットダウンし、 ハードウェアが対応していれば、電源が落ちます。

2.9. トラブルシューティング

この章では、インストールの際の、 これまで報告された共通の問題に対する解決のための情報が書いてあります。

インストールする FreeBSD のバージョンのハードウェアノート (http://www.freebsd.org/ja/releases/index.html) を調べて、 使用しているハードウェアに対応しているかどうかを確認してください。 もしハードウェアがサポートされているにもかかわらず、 動作しなかったり他の問題点がある時は、 8章FreeBSD カーネルのコンフィグレーション で説明されている方法で カスタムカーネルを構築して、GENERIC カーネルに含まれていないデバイスへのサポートを追加してください。 起動ディスクのカーネルでは、ほとんどのハードウェアデバイスの IRQ, I/O アドレス、 DMA チャネルが工場出荷時の状態であると設定されています。 もしハードウェアの設定が変更されている場合には、 カーネルコンフィグレーションファイルを編集することにより、 FreeBSD に設定することが可能です。

注記:

いくつかのインストール上の問題は、さまざまなハードウェア装置、 特にマザーボードのファームウェアのアップデートで回避または緩和することができます。 マザーボードのファームウェアは、通常 BIOS と呼ばれます。 多くのマザーボードまたはコンピュータ製造メーカーは、 アップデートやアップグレード情報を載せているウェブサイトを用意しています。

通常、製造メーカーは、 重要な更新のようなそれなりの理由がない限り、マザーボードの BIOS のアップグレードは行わないよう推奨しています。 アップデートの過程で失敗する可能性があり、 その場合 BIOS が不完全な状態になり、 コンピュータが動作しない原因となり得るからです。

システムの起動時に、ハードウェアの検出中にシステムが固まったり、 インストール中におかしな振る舞いをする場合には、 ACPI が原因の可能性があります。 i386, amd64 および ia64 プラットフォームにおいて、 FreeBSD はシステムの設定を手助けするシステム ACPI サービスを、 起動時に検出された場合に広く使います。 残念ながら、まだいくつかの不具合が、 ACPI ドライバとシステムのマザーボードおよび BIOS ファームウェア両方に存在しています。 起動ステージ 3 において、ヒント情報 hint.acpi.0.disabled を以下のように設定すると ACPI を無効にできます。

set hint.acpi.0.disabled="1"

この設定はシステムが起動するたびにリセットされるので、 /boot/loader.conf ファイルに hint.acpi.0.disabled="1" を追加する必要があります。 ブートローダのより詳しい情報については 「この章では」 で説明します。

2.10. Live CD を使う

図2.3「ウェルカムメニュー」 で示されている bsdinstall のウェルカムメニューは、 [ Live CD ] オプションを提供します。 これは、 オペレーティングシステムに FreeBSD を使うべきかどうか迷っていて、 インストール前に機能を試して見たいと思っている方に有用です。

[ Live CD ] を使う際は、以下のことに気をつけてください。

  • システムにアクセスする際には、認証を求められます。 ユーザ名は root、 パスワードは空欄としてください。

  • システムはインストールメディアから直接起動するので、 ハードディスクにインストールされたシステムに比べ、 パフォーマンスはかなり遅い可能性があります。

  • このオプションのユーザインタフェースは、 コマンドプロンプトのみです。 グラフィカルなユーザインタフェースではありません。

第3章 UNIX の基礎知識

改訂Shumway Chris [FAMILY Given].

訳: 中井 幸博 , 1996 年 10 月 12 日.

3.1. この章では

この章では FreeBSD オペレーティングシステムの基本的なコマンドと機能について記述しています。 ここに書かれてあることのほとんどは、 どんな UNIX® オペレーティングシステムにもあてはまります。 この章に書いてあることに馴染みがあるなら、 この章は気軽に流し読みしてください。 あなたが FreeBSD の初心者なら、 何か質問する前にこの章を読んでおいた方がきっといいはずです。

この章を読んで分かることは、次のようなことです。

  • FreeBSD の 仮想コンソール の使い方

  • UNIX® のファイルの許可属性の仕組みと FreeBSD のファイルフラグについて

  • FreeBSD のファイルシステムの構成

  • FreeBSD のディスク構成

  • ファイルシステムをマウント、アンマウントする方法

  • プロセス、デーモンとシグナルとはなにか

  • シェルとはなにか。 また、デフォルトのログイン環境を変える方法

  • テキストエディタの基本的な使い方

  • デバイスおよびデバイスノードとはなにか

  • さらに詳しい情報を得るためのマニュアルページの読み方

3.2. 仮想コンソールと端末

FreeBSD は様々な使い方ができます。その中の一つが、 テキスト端末でコマンドを入力することです。この方法で FreeBSD を使えば、 UNIX® オペレーティングシステムの能力と柔軟性を手にすることができます。 この節では、コンソール端末 はどのようなもので、FreeBSD でどう使うかを 説明します。

3.2.1. コンソール

起動時に自動的にグラフィカルな環境が起動するように FreeBSD を設定していなければ、システムが起動してスタートアップ スクリプトが実行されると、すぐにログインプロンプトが出てくるでしょう。 次のようものが表示されるはずです。

Additional ABI support:.
Local package initialization:.
Additional TCP options:.

Fri Sep 20 13:01:06 EEST 2002

FreeBSD/i386 (pc3.example.org) (ttyv0)

login:

あなたのシステムではメッセージが多少異なるかもしれませんが、 似たようなものが見られるはずです。 最後の 2 行が、今関心を向けているものです。 最後から 2 行目は、以下のようになっています。

FreeBSD/i386 (pc3.example.org) (ttyv0)

この行には、 起動したばかりのシステムについていくばくかの情報があります。 あなたは、x86 アーキテクチャ上の Intel または その互換プロセッサ上で動作している FreeBSD の コンソールを目にしているのです[1]。このマシンの名称 (どの UNIX® 機にも名前がついて います) は pc3.example.org で、 あなたはそのシステムコンソール、ttyv0 端末に向かっています。

最後の行は、常に以下のものになります。

login:

ここは、FreeBSD にログインするために ユーザ名 を入力するところです。次の節でどうするか説明します。

3.2.2. FreeBSD にログインする

FreeBSD は、マルチユーザ、マルチプロセスなシステムです。 これは、1 台のマシンで何人もの人が交互に多くのプログラムを 動かせるシステムに与えられる正式な説明です。

あらゆるマルチユーザシステムには、ある ユーザ を他のユーザと区別する何がしかの手段が必要です。 FreeBSD (とすべての UNIX® like なオペレーティングシステム) では、 すべてのユーザに対してプログラムの実行を可能にするのに、システムに ログイン することを義務付けてこれを実現しています。 どのユーザにも、一意な名前 (ユーザ名) と個人的な秘密の鍵 (パスワード) があります。 FreeBSD はユーザにプログラムの実行を許可する前に、 この 2 つの入力を要求します。

FreeBSD が起動してスタートアップスクリプトを実行し終わった 直後に[2]、プロンプトを表示して有効なユーザ名の入力を促します。

login:

この例では john というユーザ名を使う ことにしましょう。このプロンプトに対して john と入力して、Enter を 押してください。そうすると、 次のようなパスワードの入力を要求するプロンプトが 表示されます。

login: john
Password:

それでは john のパスワードを入力して Enter を押してください。パスワードは 表示されません。これについては、当面は 気にする必要はありません。セキュリティのためといえば十分でしょう。

パスワードを正確に入力したら、FreeBSD にログインして 利用可能なすべてのコマンドを試せるようになっているはずです。

MOTD、もしくはコマンドプロンプト (#, $ または %) に表示されるメッセージを読むようにしましょう。 これは FreeBSD へのログインに成功したときに表示されます。

3.2.3. 多数のコンソール

一つのコンソールで UNIX® コマンドを動かすのは結構なことですが、 FreeBSD は多くのプログラムを一度に動かせます。 コマンドを入力できるコンソールが一つというのは、 FreeBSD のようにいくつものプログラムを同時に動かせる オペレーティングシステムの場合は少しもったいないことです。 ここで、仮想コンソール が非常に役に立ちます。

FreeBSD は、異なる仮想コンソールを複数 表示するように設定できます。キーボード上である組合せのキーを押せば、 その中の一つから他の仮想コンソールのどれかに切り替えられます。 それぞれのコンソールは、個別の出力チャンネルを持っており、 また FreeBSD はある仮想コンソールから次に切り替えるのに応じて、 キーボード入力とモニター出力を適切につなぎ直します。

FreeBSD は、コンソールを切り替えるために、 特別なキーの組合せを予約しています[3]。FreeBSD では Alt+F1, Alt+F2 から Alt+F8 までを、 別の仮想コンソールに切り替えるのに使えます。

あるコンソールから他に切り替えるのに応じて、FreeBSD は画面 への出力を保存して戻します。結果として、FreeBSD で動かすコマン ドを入力するのに使える複数の画面とキーボードを 仮想的に 実現できるのです。 ある仮想コンソールで実行したプログラムは、 そのコンソールが見えなくなっている時も実行を停止しません。 別の仮想コンソールに切り替えても動き続けます。

3.2.4. /etc/ttys ファイル

初期設定では、FreeBSD は 8 つの仮想コンソールを立ち上げます。 この設定はもともと埋め込まれているわけではなく、 インストールしたものが、もっと多いまたは少ない数の仮想コンソールで 起動するように、容易にカスタマイズできます。仮想コンソールの数と 設定は /etc/ttys ファイルに書かれています。

FreeBSD の仮想コンソールを設定するには /etc/ttys ファイルを利用します。 このファイルのコメントアウトされていない (# 文字で始まっていない) 行は、一つの端末または仮想コンソールの 設定があります。FreeBSD の初期設定では、 仮想コンソールを 9 つ設定し、そのうち 8 つを有効にしています。 ttyv で始まる行がそれです。

# name  getty                           type    status          comments
#
ttyv0   "/usr/libexec/getty Pc"         cons25  on  secure
# Virtual terminals
ttyv1   "/usr/libexec/getty Pc"         cons25  on  secure
ttyv2   "/usr/libexec/getty Pc"         cons25  on  secure
ttyv3   "/usr/libexec/getty Pc"         cons25  on  secure
ttyv4   "/usr/libexec/getty Pc"         cons25  on  secure
ttyv5   "/usr/libexec/getty Pc"         cons25  on  secure
ttyv6   "/usr/libexec/getty Pc"         cons25  on  secure
ttyv7   "/usr/libexec/getty Pc"         cons25  on  secure
ttyv8   "/usr/X11R6/bin/xdm -nodaemon"  xterm   off secure

このファイルのそれぞれのカラムと仮想コンソールに設定可能な 全オプションの詳しい説明は、ttys(5) のマニュアルを 参照してください。

3.2.5. シングルユーザモードのコンソール

シングルユーザモード とは何かという詳しい説明は、 「シングルユーザモード」 にあります。FreeBSD を シングルユーザモードで動かしている場合は一つしかコンソールが ないということは注意しておくに値するでしょう。仮想コンソールは 利用できません。シングルユーザモードのコンソールの設定は、同じく /etc/ttys ファイルにあります。 console で始まる行を探してください。

# name  getty                           type    status          comments
#
# If console is marked "insecure", then init will ask for the root password
# when going to single-user mode.
console none                            unknown off secure

注記:

console 行の上のコメントが示すように、 この行を編集して secureinsecure に変更できます。そうすると、 FreeBSD がシングルユーザモードで起動した場合にも root のパスワードを要求します。

これを insecure に 変更する場合は十分注意してください。 root のパスワードを忘れてしまったら、 シングルユーザモードで起動するのは少しややこしくなります。 できることはできますが、FreeBSD の起動の過程とそれに関わる プログラムにあまり親しんでいない人には少し難しいかも知れません。

3.2.6. コンソールのビデオモードの変更

FreeBSD のデフォルトのビデオモードは 1024x768 や 1280x1024 など、 グラフィックカードとディスプレイが対応しているサイズに調整されます。 別のビデオモードを使うには、以下の 2 つのオプションを有効にしてカーネルを再コンパイルする必要があります。

options VESA
options SC_PIXEL_MODE

1 度このオプションを有効にしてカーネルを再コンパイルしたら、 あなたのハードウェアがどのビデオモードに対応しているか、 vidcontrol(1) を用いて知ることができます。 以下を実行すると、どのビデオモードに対応しているかを知ることができます。

# vidcontrol -i mode

このコマンドの出力結果があなたのハードウェアが対応しているビデオモードです。 その後 root ユーザで vidcontrol(1) を実行することで、 新しくどのビデオモードを使うかを選択できます。

# vidcontrol MODE_279

このビデオモードで良いと思ったら、起動時に自動的に設定されるように /etc/rc.conf ファイルに以下のように設定してください。

allscreens_flags="MODE_279"

3.3. 許可属性

FreeBSD は BSD UNIX® の直系の子孫であり、 いくつかの鍵となる UNIX® 思想にもとづいています。 まず最も際だった特徴として最初に言えるのは、FreeBSD がマルチユーザのオペレーティングシステムだということです。 FreeBSD は同時に働いている複数のユーザすべてを、 完全に分離したタスク上で処理する能力を持っています。 また FreeBSD は、ハードウェアデバイス、周辺装置、メモリ、 CPU 時間等への要求を、各ユーザが平等に利用できるように適切に共有し、 管理する役割を担っています。

システムがマルチユーザをサポートしているため、 システムが管理する資源はすべて、 誰がその資源を読み・書き・実行できるかを支配する、 一組の許可属性を持っています。 これらの許可属性は 3 つの部分からなる 3 桁の 8 進数の形で格納されています。 それはそのファイルの所有者 (owner) に対するもの、 そのファイルが所属するグループ (group) に対するもの、 その他 (others) に対するものの 3 つです。 これを数字を使って表現すると、次のようになります。

許可属性ディレクトリの表示
0読み込み不可、書き込み不可、実行不可---
1読み込み不可、書き込み不可、実行可能--x
2読み込み不可、書き込み可能、実行不可-w-
3読み込み不可、書き込み可能、実行可能-wx
4読み込み可能、書き込み不可、実行不可r--
5読み込み可能、書き込み不可、実行可能r-x
6読み込み可能、書き込み可能、実行不可rw-
7読み込み可能、書き込み可能、実行可能rwx

ls(1) に対してコマンドライン引数 -l を使うと、 詳細なディレクトリリストを見ることができ、 ファイルの所有者、グループ、その他への許可属性を示す欄があるのがわかります。 例えば、ls -l を実行して、 適当なディレクトリを表示させると以下のようになります。

% ls -l
total 530
-rw-r--r--  1 root  wheel     512 Sep  5 12:31 myfile
-rw-r--r--  1 root  wheel     512 Sep  5 12:31 otherfile
-rw-r--r--  1 root  wheel    7680 Sep  5 12:31 email.txt
...

以下に示すのは、 ls -l の最初の行を抜き出したものです。

-rw-r--r--

最初の (一番左の) 文字は、それが 普通のファイルなのか、ディレクトリなのか、 キャラクタ型のデバイス特殊ファイルなのか、 ソケットなのか、 その他の特殊な疑似ファイルデバイスなのかといった種類を示す特別な文字です。 この場合、- という文字は、 普通のファイルであることを示します。 この例でその次に来る rw- と書かれた 3 文字は、 そのファイルの所有者に許可を与えるものです。 その次の r-- の 3 文字は、 そのファイルが所属しているグループに許可を与えます。 最後の r-- の 3 文字は、 システムに存在するその他のユーザに許可を与えます。 - は許可が与えられていないことを示します。 このファイルの例では、ファイルの所有者はこのファイルを読み書きでき、 ファイルの所属しているグループに属するユーザはファイルを読むことだけでき、 そのどちらでもないユーザは、 このファイルを読むだけできるように許可属性が与えられています。 上の表によれば、このファイルに与えられた許可属性は 644 となります。 ここで各数字は、このファイルの許可属性の 3 つの部分を表しています。

ファイルについてはここまでの説明で十分です。 しかし、 デバイスの場合の許可属性はどのようにコントロールされているのでしょうか? FreeBSD は、大部分のハードウェアをファイルとして取り扱います。 そのため、プログラムからは普通のファイルとまったく同じようにオープンし、 データの読み書きができるようになっています。 これらのデバイス特殊ファイルは /dev ディレクトリに収められています。

ディレクトリもまた、ファイルと同様に扱われます。 それは読み込み/書き込み/実行の許可属性を持ちます。 ディレクトリの実行ビットはファイルのそれとは少し違った意味を持ちます。 ディレクトリが実行可能になっているとき、 そのディレクトリに移動することができます。 つまり、そのディレクトリに cd (change directory) することが可能です。 また、実行可能属性がついているディレクトリでは、 名前が分かっているファイルにアクセスすることもできます (もちろんそのファイル自体の許可属性によります)。

特に、ディレクトリの中の一覧を表示するには、 そのディレクトリに読み込み属性が設定されていなければなりません。 一方、名前が分かっているファイルを削除するには、 そのファイルが含まれているディレクトリに 書き込み属性実行属性 の両方が必要です。

この他にも許可属性ビットはありますが、いずれも setuid バイナリや sticky ディレクトリなどといった特殊な状況で使われます。 ファイルの許可属性そのものについて、 また、それらの設定のしかたに関する詳しい情報は、 chmod(1) マニュアルページを参照してください。

3.3.1. シンボリック表記

寄稿: Rhodes Tom [FAMILY Given].

シンボリック表記と呼ばれる許可属性を表す方法では、 ファイルやディレクトリの許可属性を、 8 進数ではなく記号を用いて設定します。 シンボリック表記では、(who), (action), (permissions) という書式が用いられます。 利用できる値は以下の通りです。

オプション文字意味
(who)uユーザ
(who)gファイルを所持しているグループ
(who)oその他
(who)aすべて (world)
(action)+許可属性を与える
(action)-許可属性を取り除く
(action)=許可属性を指定したものにする
(permissions)r読み込み
(permissions)w書き込み
(permissions)x実行
(permissions)tSticky ビット
(permissions)sUID または GID を設定する

これらの値は、これまでと同様に chmod(1) コマンドで用いますが、文字で指定します。 たとえば、FILE に対して自分以外のユーザからアクセスを一切受け付けたくない、 というときには以下のコマンドを実行してください。

% chmod go= FILE

カンマ区切りで設定することで、 ファイルの属性を一度に 2 つ以上変更できます。 以下の例では、FILE に対して自分以外のユーザから書き込みの権限を取り上げ、 かわりにすべてのユーザが FILE を実行できるようにします。

% chmod go-w,a+x FILE

3.3.2. FreeBSD のファイルフラグ

寄稿: Rhodes Tom [FAMILY Given].

先ほど説明したファイルの許可属性に加え、 FreeBSD では ファイルフラグ を使えます。 これはファイルにセキュリティや管理上の属性を追加するものですが、 ディレクトリには追加しません。

これらのファイルフラグはファイルに管理上の属性を追加し、 root ユーザでさえ誤ってファイルを消去、変更してしまうことを防ぎます。

ファイルフラグは、chflags(1) を使って、簡単なインタフェースで設定できます。 例えば、file1 というファイルにシステムレベルで消去不可のフラグを設定するには、 以下のコマンドを実行してください。

# chflags sunlink file1

また、消去不可のフラグを削除するには、 以下のように先ほどのコマンドの sunlink の前に no をつけるだけです。

# chflags nosunlink file1

ファイルにどのフラグが設定されているのかを見るには、ls(1) コマンドを -lo オプションと一緒に使ってください。

# ls -lo file1
  

出力は以下のようになります。

-rw-r--r--  1 trhodes  trhodes  sunlnk 0 Mar  1 05:54 file1

いくつかのフラグの追加、削除は root ユーザしかできません。 他のフラグは、ファイルの所有者が変更できます。 システム管理者は chflags(1)chflags(2) から、 より詳細な情報を得ることをおすすめします。

3.4. ディレクトリ構造

FreeBSD のディレクトリ構造は、 システム全体を理解するに当たって重要です。 把握しておくべき最も重要なものは、/ ディレクトリです。 このディレクトリは起動時に一番最初にマウントされ、 オペレーティングシステムをマルチユーザで動作させるために 必要な基本システムが含まれています。 また、ルートディレクトリには、 マルチユーザへの移行中に他のファイルシステムをマウントするためのマウントポイントも含まれます。

マウントポイントとは、 追加のファイルシステムと接続するためのディレクトリのことです (普通はルートファイルシステムにあります) 。 より詳細な説明は 「ディスク構成」 の節にあります。 標準的なマウントポイントには /usr, /var, /tmp, /mnt, /cdrom があります。 通常これらのディレクトリについては、 /etc/fstab というファイル中のエントリが参照されます。 /etc/fstab はさまざまなファイルシステムとマウントポイントの表であり、 システムが参照します。 /etc/fstab に書かれたファイルシステムは noauto オプションが指定されていなければ、 起動時に rc(8) スクリプトによって自動的にマウントされます。 詳細は fstab ファイル」 をご覧ください。

ファイルシステム構造を網羅した説明は hier(7) に書かれています。 ここでは、もっともよく使われるディレクトリについて簡単に 見るだけで十分でしょう。

ディレクトリ説明
/ファイルシステムのルートディレクトリ
/bin/シングルユーザ環境とマルチユーザ環境の両方で重要な ユーザユーティリティ
/boot/オペレーティングシステムの起動時に使われるプログラムと設定ファイル
/boot/defaults/デフォルトの起動設定ファイル; loader.conf(5) 参照
/dev/デバイスノード; intro(4) 参照
/etc/システム設定ファイルとスクリプト
/etc/defaults/デフォルトのシステム設定ファイル; rc(8) 参照
/etc/mail/sendmail(8) のようなメール転送エージェントの設定ファイル
/etc/namedb/named 設定ファイル; named(8) 参照
/etc/periodic/cron(8) 経由で毎日・毎週・毎月実行されるスクリプト; periodic(8) 参照
/etc/ppp/ppp 設定ファイル; ppp(8) 参照
/mnt/システム管理者が一時的なマウントポイントとしてよく使う 空のディレクトリ
/proc/プロセスファイルシステム; procfs(5)mount_procfs(8) 参照
/rescue/緊急時のために静的にリンクされているプログラム; 詳しくは rescue(8) 参照
/root/root アカウントのホームディレクトリ
/sbin/シングルユーザ環境とマルチユーザ環境の両方で重要な システムプログラムと管理ユーティリティ
/tmp/一時的なファイル。 通常、/tmp の内容はシステムの再起動で失われます。 メモリファイルシステムはよく /tmp にマウントされます。 これは rc.conf(5) の tmpmfs 関係の変数を使うか、 /etc/fstab に設定項目を記入することで自動化できます。 詳しくは mdmfs(8) を参照して下さい。
/usr/大部分のユーザユーティリティとアプリケーション
/usr/bin/よく使うユーティリティとプログラミングツールとアプリケーション
/usr/include/C の標準ヘッダファイル
/usr/lib/ライブラリ
/usr/libdata/いろいろなユーティリティのデータファイル
/usr/libexec/システムデーモンとシステムユーティリティ (他のプログラムから実行される)
/usr/local/ローカルのプログラムやライブラリなど。 FreeBSD ports 構成のデフォルトインストール先としても使われます。 /usr/local 内では、 hier(7) に書かれている /usr のための一般構造が使われます。 例外は man ディレクトリで、 /usr/local/share の下ではなく /usr/local の下に直接置かれ、 ports 関係文書は share/doc/port にあります。
/usr/obj//usr/src ツリーのビルドで作られる アーキテクチャ依存のターゲットツリー
/usr/portsFreeBSD Ports Collection (インストールしなくてもよい)。
/usr/sbin/(ユーザが実行する) システムデーモンとシステムユーティリティ
/usr/share/アーキテクチャに依存しないファイル
/usr/src/BSD のソースファイルまたはローカルのソースファイル、 あるいは両方
/usr/X11R6/X11R6 のプログラム、ライブラリなど (インストールしなくてもよい)
/var/ログ・一時的なファイル・スプールファイルなどいろいろな用途。 メモリファイルシステムは時々 /var にマウントされます。 これは rc.conf(5) の varmfs 関係の変数を使うか、 /etc/fstab に設定項目を記入することで自動化できます。 詳しくは mdmfs(8) を参照して下さい。
/var/log/いろいろなシステムログファイル
/var/mail/ユーザのメールボックスファイル
/var/spool/プリンタとメールシステムのスプールディレクトリなどなど
/var/tmp/一時的なファイル。 /var がメモリファイルシステムでなければ、 ここにあるファイルはシステムが再起動しても失われません。
/var/ypNIS のマップ

3.5. ディスク構成

ファイルを見つけるために FreeBSD が使用する構成の一番小さな単位はファイル名です。 ファイル名は、大文字と小文字を区別します。 このことは readme.txt および README.TXT が異なる二つのファイルであることを意味します。 FreeBSD はそのファイルがプログラム、または文書、 あるいはその他の形式かどうかを決定するために拡張子を使用しません。

ファイルはディレクトリ内に格納されます。 ディレクトリはファイルを一つも含んでいないかもしれせんし、 または数百のファイルを含んでいるかもしれません。 ディレクトリはまた別のディレクトリを含むことができます。 つまり、ディレクトリの階層構造を構築することができます。 このことにより、データ構造がはるかに簡単になります。

ファイルおよびディレクトリは、 必要な他のディレクトリ名とスラッシュ (/) を後に続けて ファイル名またはディレクトリ名を与えることによって参照されます。 foo ディレクトリがあって、その中に bar ディレクトリがあるとします。 そして、その中に readme.txt があるとすると、 ファイルへのフルネーム、またはパスfoo/bar/readme.txt となります。

ディレクトリおよびファイルはファイルシステム内に格納されます。 どのファイルシステムは、そのファイルシステムのための ルートディレクトリ とよばれる、 まさに頂点の位置にちょうど一つのディレクトリを含んでいます。 このルートディレクトリは他のディレクトリを含むことができます。

これまでのところ、これはあなたの使ったことのある他の OS とおそらく似ているかもしれません。少し違いがあります。 たとえば、MS-DOS® ではファイル名とディレクトリ名を分けるのに \ を使います。 一方、Mac OS® では : を使います。

FreeBSD はパス内にドライブレターまたは他のドライブ名を使いません。 あなたは FreeBSD で c:/foo/bar/readme.txt とは書かないでしょう。

その代わり、一つのファイルシステムは ルートファイルシステムとして設計されています。 ルートファイルシステムのルートディレクトリは / として参照されます。それから、他のすべてのファイルシステムは、 ルートファイルシステム以下に マウント されます。 あなたが FreeBSD システムでどんなに多くのディスクを使用しても、 すべてのディレクトリは、 同じディスクの一部であるように見えるので問題ありません。

A,B および C と呼ばれる三つのファイルシステムがあると仮定しましょう。 それぞれのファイルファイルシステムには一つのルートディレクトリがあり、 A1, A2 と呼ばれている二つの他のディレクトリを含んでいます (同様に B1, B2 および C1, C2 があります)。

A をルートファイルシステムとします。 このディレクトリになにが含まれているか見るために ls コマンドを使うと、 A1 および A2 の二つのサブディレクトリが現れるでしょう。 ディレクトリツリーは以下のようになります。

ファイルシステムはファイルシステム内のディレクトリにマウントしなければいけません。 それでは、A1 ディレクトリに B ファイルシステムをマウントすると仮定します。 B のルートディレクトリは A1 に置き換えられ、 そして B 内のディレクトリがそれに応じて現れます。

B1 または B2 内にあるどんなファイルも、必要なときに /A1/B1 または /A1/B2 で到達できます。 /A1 にあったすべてのファイルは一時的に隠されました。 それらは B が A からアンマウントされたら再び現れるでしょう。

もし BA2 にマウントされていたら、この図のようになります。

そして、パスはそれぞれ /A2/B1 および /A2/B2 となるでしょう。

ファイルシステムは互いのファイルシステム上にもマウントできます。 上記の最後の例に続けて、C ファイルシステム は B ファイルシステム内の B1 ディレクトリ上にマウントできます。 次の図のようになります。

または CA1 の下の A ファイルシステムに直接マウントできます。

もしあなたが MS-DOS® を使いなれているなら、 まったく同じではありませんが、これは join コマンドと 似ています。

これは、通常あなた自身が心配する必要のあるものではありません。 一般的に、FreeBSD をインストールするときにファイルシステムを作成し、 どこにマウントするか決定します。そして、 新しいディスクを追加しなければそれらを変更することはありません。

一つの大きなファイルシステムを用意し、 他のファイルシステムを作成する必要としないことはまったくもって可能です。 この方法にはいくつかの短所と一つの利点があります。

マルチファイルシステムの利点
  • 異なったファイルシステムは異なった マウントオプション を使用できます。 たとえば、注意深い考えなのですが、 ルートファイルシステムを読みだし専用でマウントして、 不注意によって重大なファイルを削除、 または編集できないようににすることができます。 また、/home のようなユーザが書き込み可能なファイルシステムを他のファイルシステムと分けることによって、 nosuid でマウントすることも可能になります。 このオプションは、ファイルシステムに記録されている suid/guid の実行可能ビットを有効にしないので、安全性を高めることができるでしょう。

  • FreeBSD はファイルシステムがどのように使われているかによって、 自動的にファイルシステム上のファイルの配置を最適化します。 したがって、連続的に書き込まれた多くの小さなファイルが含まれているファイルシステムは、 より大きく少ないファイルが含まれているファイルシステムと異なる最適化をするでしょう。 一つの大きなファイルシステムを作成すると、 この最適化は成り立たなくなります。

  • FreeBSD のファイルシステムはトラブルが起きてもとても強固です。 しかしながら臨界点でのトラブルは、 ファイルシステムの構造にまだ損害を与えるかもしれません。 マルチファイルシステムへデータを分割しておくことで、 必要なときにバックアップからレストアすることをより容易にして、 まだシステムが回復するかもしれません。

シングルファイルシステムの利点
  • ファイルシステムは固定サイズです。 FreeBSD をインストールするときにファイルシステムを作成して、 固定サイズを割りあてたなら、 後になってそのパーティションをより大きくする必要があると気づくかもしれません。 パーティションのサイズを変更するには、 バックアップ、新しいサイズを指定したファイルシステムの再作成、 バックアップしたデータをリストアする作業が必要となるでしょう。

    重要:

    FreeBSD には、 growfs(8) コマンドがあります。 このコマンドは、この制限を取り除いて、 ファイルシステムのファイルを直ちに増加させることを可能にします。

ファイルシステムはパーティション内に含まれています。 FreeBSD の UNIX® 遺産のために、 これは普段使われるパーティション (例えば MS-DOS® パーティション) という用語の意味とは違う意味を持っています。 それぞれのパーティションは a から h までの文字で区別されます。 それぞれのパーティションは、 一つのファイルシステムだけを含むことができます。 このことは、ファイルシステムがファイルシステムの階層上の典型的なマウントポイント、 または含まれているパーティションの文字によって記述されることを意味します。

FreeBSD は スワップ領域 にもまたディスク領域を使用します。 スワップ領域は FreeBSD に 仮想メモリ を提供します。 これはあなたのコンピュータが、 実際に搭載している以上のメモリがあるかのように振舞います。 FreeBSD がメモリを使い果たしたときに、 現在使用されていないデータのいくつかをスワップ領域に移動し、 そのデータが必要となったときに (その他のデータをスワップ領域に移動させてから) メモリ内に移動しなおします。

いくつかのパーティションはある慣習と関係づけられています。

パーティション慣習
a通常、ルートパーティションを含みます。
b通常、スワップ領域を含みます。
c通常、スライス全体と同じサイズです。 これは、スライス全体にアクセス必要のあるユーティリティ (たとえば、ひどいブロックスキャナ) が、 c パーティションにアクセスすることを可能にします。通常、 このパーティション内にファイルシステムを作成しないでしょう。
dd パーティションは、 それに関連づけられた特別な意味を持っていましたが、 今は無いので、普通のパーティションとして動作するでしょう。

ファイルシステムを含んだそれぞれのパーティションは、FreeBSD が スライス と呼ぶものの中に格納されます。 スライスは FreeBSD の用語で、 普通はパーティションと呼ばれるものです。 もう一度言及しますが、これは FreeBSD の UNIX® 背景によるものです。 スライスは 1 から 4 までの番号がつけられます。

スライス番号は 1 から始まり s を前につけられて、デバイス名の後に続きます。 したがって、da0s1 は一番目の SCSI ドライブ上の 一番目のスライスです。 ディスク上に四つの物理スライスだけが存在できます。しかし、 適切な種類の物理スライス内に論理スライスをもつことができます。 これらの拡張されたスライス番号は 5 から始まります。したがって、 ad0s5 は、一番目の IDE ディスク上の一番目の拡張スライスです。 これらのデバイスは、 スライスを占有することを予期するファイルシステムによって使用されます。

スライスや 危険な専用 の物理ドライブ、 そして他のドライブは a から h までの文字として表される パーティション を含んでいます。 この文字はデバイス名に追加されます。したがって、 da0a は一番目の 危険な専用 da ドライブ上の a パーティションです。 ad1s3e は、 二番目の IDE ディスク上の 三番目のスライス内にある五番目のパーティションです。

最後に、システム上のそれぞれのディスクは識別されます。 ディスク名はどの種類のディスクであるかを示す記号ではじまり、 どのディスクかを示す数字が続きます。 スライスとは違いディスクの番号づけは 0 から始まります。 共通の記号は 表3.1「ディスクデバイス記号」 に示されます。

パーティションを参照するときには、 FreeBSD はパーティションを含むスライスおよびパーティションも指定することを必要とします。 そしてスライスを参照するときはディスク名も参照しないといけません。 したがって、ディスク名、s、スライス番号、 そしてパーティション文字を並べることによってパーティションを参照します。 例3.1「ディスク名、スライス名、パーティション名のサンプル」に例があります。

例3.2「ディスクの概念的構成」 は理解をより明らかにすることを助けるための、 ディスク構成の概念のモデルを示します。

FreeBSD をインストールするために、 まずはじめにディスクスライスの設定をし、 次に FreeBSD に用いるスライス内のパーティションを作成し、 それからそれぞれのパーティション内にファイルシステム (またはスワップ領域) を作成し、 ファイルシステムがどこにマウントされるか決定しなければいけません。

表3.1 ディスクデバイス記号
記号意味
adATAPI (IDE) ディスク
daSCSI ダイレクトアクセスディスク
acdATAPI (IDE) CDROM
cdSCSI CDROM
fdフロッピーディスク

例3.1 ディスク名、スライス名、パーティション名のサンプル
記号意味
ad0s1a一番目の IDE ディスク (ad0) 上の一番目のスライス (s1) 内の一番目のパーティション (a)。
da1s2e二番目の SCSI ディスク (da1) 上の二番目のスライス (s2) 内の五番目のパーティション (e)。

例3.2 ディスクの概念的構成

これはシステムに接続された一番目の IDE ディスクの FreeBSD から見た図を示します。 ディスクサイズは 4 GB と仮定し、 2 GB のスライス (MS-DOS® でいうパーティション) が二つあるとします。 一番目のスライスは MS-DOS® ディスクの C: を含んでいます。 そして、二番目のスライスは FreeBSD のディスクを含んでいます。 これは FreeBSD インストーラが三つのデータパーティションと一つのスワップパーティションを作成した例です。

三つのパーティションはそれぞれファイルシステムを含んでいます。 a パーティションはルートファイルシステムに使用され、 e パーティションは /var ディレクトリ階層に、 f パーティションは /usr ディレクトリ階層に使用されるでしょう。


3.6. ファイルシステムのマウントとアンマウント

ファイルシステムは / をルート (根) とする木構造として考えると視覚的に理解しやすいでしょう。 ルートディレクトリにある /dev/usr、 その他のディレクトリは枝に相当し、 それらには、/usr/local などのように、さらに枝分かれすることができます。

さまざまな理由がありますが、 ディレクトリをいくつかの異なるファイルシステム上に構築するのが良いでしょう。 たとえば /var には、 log/spool/ など、さまざまな種類の一時ファイルを置くディレクトリがあるため、 あふれてしまう可能性があります。 ルートファイルシステムをあふれさせるのは得策ではありませんので、 普通は /var/ から分離します。

また、次のような場合も、ディレクトリツリーを 別のファイルシステムに置く理由として良くあげられます。 それは、たとえば物理的に別のディスクにディレクトリツリーを置く場合、 ネットワークファイルシステム (Network File System) や CDROM ドライブのような別の仮想ディスクに置くという場合です。

3.6.1. fstab ファイル

/etc/fstab に書かれているファイルシステムは (noauto オプションがなければ) 起動プロセスの途中で 自動的にマウントされます。

/etc/fstab ファイルは、 次のような書式で書かれた行のリストになっています。

device       /mount-point fstype     options      dumpfreq     passno
device

デバイスの名前 (存在していなければなりません)。 「デバイス名」 に説明があります。

mount-point

ファイルシステムがマウントするディレクトリの名前 (存在していなければなりません)。

fstype

mount(8) に渡されるファイルシステムタイプ。 FreeBSD ファイルシステムのデフォルトは ufs です。

options

読み書きするファイルシステムには rw、読み込み専用のファイルシステムには ro を、必要な他のオプションの前に指定します。 よく使われるオプションは noauto で、 起動時にはマウントされないファイルシステムに使います。 その他のオプションは mount(8) マニュアルページに載っています。

dumpfreq

これは dump(8) が使うもので、 どのファイルシステムにダンプが必要なのかを決めます。 この項目がなければ、0 であるものとみなされます。

passno

これはファイルシステムをチェックする順番を決めます。 ファイルシステムチェックを飛ばしたいファイルシステムには、 passno を 0 に設定してください。 ルートファイルシステム (どれよりも先にチェックしなければなりません) は passno を 1 に設定してください。 他のファイルシステムの passno は 1 以上に設定してください。 同じ passno のファイルシステムがあった場合、 fsck(8) は可能であれば並行してファイルシステムのチェック を行なおうとします。

/etc/fstab ファイルの書式やオプションに関しての詳細は、 fstab(5) をご覧ください。

3.6.2. mount コマンド

mount(8) コマンドは、 ファイルシステムをマウントするために使われるものです。

基本的には、次のように使います。

# mount device mountpoint

mount(8) マニュアルページにはたくさんのオプションが書かれていますが、 いちばんよく使われるのは次のものです。

マウントオプション
-a

/etc/fstab にある全てのファイルシステムをマウントします。 例外は noauto の印がついているものと、 -t フラグで除外されたものと、 すでにマウントされているファイルシステムです。

-d

実際にマウントシステムコールする以外のすべてのことをします。 このオプションは -v フラグと組み合わせて使い、 mount(8) が実際なにをしようとしているのか調べるのに便利です。

-f

クリーンでないファイルシステムを強制的にマウントします (危険です)。もしくは、ファイルシステムのマウント状態を 読み書き可能から読み込みのみに変更するとき、 書き込みアクセスを強制的に取り消します。

-r

ファイルシステムを読み込み専用でマウントします。 これは ro (5.2 より前の FreeBSD では rdonly です) 引数を -o オプションに使うのと同じです。

-t fstype

ファイルシステムを指定のファイルシステムタイプでマウントします。 または、-a を使った場合、 指定したタイプのファイルシステムのみマウントします。

デフォルトのファイルシステムタイプは ufs です。

-u

ファイルシステムのマウントオプションを更新します。

-v

詳細な出力にします。

-w

ファイルシステムを読み書き可能にマウントします。

-o には、 次のようなオプションを複数カンマで区切って指定します。 以下に挙げるのはその一部です。

noexec

そのファイルシステム上のバイナリの実行を禁止します。 セキュリティのために有用なオプションです。

nosuid

そのファイルシステム上の setuid や setgid フラグを解釈しません。 これもセキュリティのために有用なオプションです。

3.6.3. umount コマンド

umount(8) コマンドは、パラメータとしてマウントポイントの一つ、 デバイス名、もしくは -a-A といったオプションを取ります。

いずれの形式でも -f で強制的なアンマウントを行ない、 -v で詳細な出力を出します。 ただしほとんどの場合、-f は使わないほうがよいでしょう。 強制的にファイルシステムをアンマウントすると、 計算機がクラッシュしたりファイルシステム上部のデータが 破壊されたりする恐れがあるためです。

オプション -a-A はマウントされているファイルシステムすべてをアンマウントするのに使います。 -t にファイルシステムタイプを指定すると、 指定されたものだけがアンマウントされます。 また、-A を使うとルートファイルシステムはアンマウントしません。

3.7. プロセス

FreeBSD はマルチタスクのオペレーティングシステムです。 つまり、1つ以上のプログラムがあたかも同時に動いているかのように見える、 ということです。動作中のプログラムはそれぞれ プロセス と呼ばれます。 コマンドを実行すると、最低でも1つの新しいプロセスがスタートします。 システムを正常に機能させるために常に動作しているシステムプロセスもたくさんあります。

各プロセスはプロセス ID、もしくは PID と呼ばれる数字でただ一つに識別されます。 また、ファイルのように各プロセスには所有者とグループがあります。 所有者とグループの情報は、 これまでに見たファイル許可属性を用い、 そのプロセスが開けるファイルやデバイスを決定するために使われます。 多くのプロセスには親プロセスもあります。 親プロセスとは、そのプロセスをスタートさせたプロセスのことです。 例えば、シェルにコマンドを打ち込んでいるときはシェルがプロセスで、 動かすコマンドもまたどれもプロセスです。 このようにして起動するプロセスはそれぞれシェルが親プロセスになります。 これの例外は init(8) という特別なプロセスです。 init は常に最初のプロセスなので、 PID は必ず 1 になります。 init は FreeBSD がスタートするときカーネルによって自動的に起動されます。

ps(1)top(1) という2つのコマンドが システム上のプロセスを確認するために特に便利です。 ps コマンドは現在動作中のプロセスのリストを見るために使い、 PID やプロセスが使っているメモリの量、 どういうコマンドラインで起動されたのか、 などを表示させることができます。 top コマンドは動作中の全てのプロセスを表示し、 数秒ごとに表示を更新するので、 計算機がなにをしているのかインタラクティブに知ることができます。

デフォルトでは、ps は動作中かつ所有者が自分のコマンドのみを表示します。 例えば:

% ps
  PID  TT  STAT      TIME COMMAND
  298  p0  Ss     0:01.10 tcsh
 7078  p0  S      2:40.88 xemacs mdoc.xsl (xemacs-21.1.14)
37393  p0  I      0:03.11 xemacs freebsd.dsl (xemacs-21.1.14)
48630  p0  S      2:50.89 /usr/local/lib/netscape-linux/navigator-linux-4.77.bi
48730  p0  IW     0:00.00 (dns helper) (navigator-linux-)
72210  p0  R+     0:00.00 ps
  390  p1  Is     0:01.14 tcsh
 7059  p2  Is+    1:36.18 /usr/local/bin/mutt -y
 6688  p3  IWs    0:00.00 tcsh
10735  p4  IWs    0:00.00 tcsh
20256  p5  IWs    0:00.00 tcsh
  262  v0  IWs    0:00.00 -tcsh (tcsh)
  270  v0  IW+    0:00.00 /bin/sh /usr/X11R6/bin/startx -- -bpp 16
  280  v0  IW+    0:00.00 xinit /home/nik/.xinitrc -- -bpp 16
  284  v0  IW     0:00.00 /bin/sh /home/nik/.xinitrc
  285  v0  S      0:38.45 /usr/X11R6/bin/sawfish

この例で分かるとおり、 ps(1) の出力はいくつかの行に整形されています。 PID は先ほど見たプロセス ID です。 PID は 1 から順に 99999 まで割り当てられ、 足りなくなると最初に戻って使い回されます (使用中の PID は割り当てられません) 。 TT の列はプログラムが動いている tty を示します。 差し当たって無視してもかまわないでしょう。 STAT はプログラムの状態を示しますが、 これもまた無視してよいでしょう。 TIME はプログラムがその CPU 上で動いている時間の長さです― 通常はプログラムをスタートさせたときからの経過時間ではありません。 CPU 上で時間を使う必要があるまでかなりの時間を費すようなプログラムもあるからです。 最後に、COMMAND はそのプログラムを起動するのに使われたコマンドラインとなります。

ps(1) は表示する情報を変えるためのオプションをたくさんサポートしています。 いちばん便利なのは auxww でしょう。 a は自分のプロセスだけではなく、 動作中のプロセス全部についての情報を表示します。 u はプロセスの所有者の名前をメモリ使用量と同様に表示します。 x はデーモンプロセスについての情報を表示し、 ww で、スクリーンに入りきらないほど長くなったコマンドラインでも省略せず、 ps(1) に各プロセスの全コマンドラインを表示させます。

top(1) の出力も同様です。 例は以下の通りです。

% top
last pid: 72257;  load averages:  0.13,  0.09,  0.03    up 0+13:38:33  22:39:10
47 processes:  1 running, 46 sleeping
CPU states: 12.6% user,  0.0% nice,  7.8% system,  0.0% interrupt, 79.7% idle
Mem: 36M Active, 5256K Inact, 13M Wired, 6312K Cache, 15M Buf, 408K Free
Swap: 256M Total, 38M Used, 217M Free, 15% Inuse

  PID USERNAME PRI NICE  SIZE    RES STATE    TIME   WCPU    CPU COMMAND
72257 nik       28   0  1960K  1044K RUN      0:00 14.86%  1.42% top
 7078 nik        2   0 15280K 10960K select   2:54  0.88%  0.88% xemacs-21.1.14
  281 nik        2   0 18636K  7112K select   5:36  0.73%  0.73% XF86_SVGA
  296 nik        2   0  3240K  1644K select   0:12  0.05%  0.05% xterm
48630 nik        2   0 29816K  9148K select   3:18  0.00%  0.00% navigator-linu
  175 root       2   0   924K   252K select   1:41  0.00%  0.00% syslogd
 7059 nik        2   0  7260K  4644K poll     1:38  0.00%  0.00% mutt
...

出力は2つのセクションに分かれています。 ヘッダ (最初の 5 行です) は動作している最新のプロセスの PID、 システムの平均負荷 (システムがどれくらい忙しいかの指標)、 システムの稼働時間 (最後の再起動からの時間) と現在の時刻を示します。 ヘッダの中の他の数字は動作中のプロセスの数 (この場合 47 ですね)、 使われているメモリとスワップ領域の量、 そしてシステムが異なる CPU 状態に消費した時間と関係します。

その下には ps(1) の出力と同じような情報を持った行が続きます。 前と同様 PID にユーザ名、消費 CPU 時間と実行中のコマンドを知ることができます。 top(1) を使うとデフォルトでプロセスが使っているメモリ容量も分かります。 メモリ使用量の欄は2項目に分かれており、 一方は合計使用量、 そしてもう一方は実使用量です―合計使用量はアプリケーションが必要としているメモリ量で、 実使用量はその時点で実際に使われているメモリ量です。 この例では、Netscape® がだいたい 30 MB の RAM を必要としていますが、 いまのところ 9 MB しか使っていないことが分かります。

top(1) は自動的に2秒ごとに画面を更新します。 s オプションを使えば更新間隔を変更することができます。

3.8. デーモン、シグナルとプロセス終了

エディタを使っている場合、エディタを操作するのは簡単です。 ファイルを開く、などと動かせばよいのです。 このように操作できるのは、エディタにそういった機能があり、 かつエディタが端末に関連づけられているからです。 一方、ユーザから始終入力があるように設計されていないプログラムもあり、 そういったプログラムは最初から端末と切り離されます。 例えば、ウェブサーバは一日中ウェブのリクエストばかり処理するので、 通常全く入力を必要としません。 サイトからサイトへとメールを転送するプログラムも、 こういった種類のアプリケーションの一例です。

このようなプログラムは、デーモンと呼ばれます。 デーモンはギリシャ神話の登場人物で、 善でも悪でもなく、大雑把にいうと、 人間のために役立つことをしてくれる小さな妖精さんです。 今日の便利なウェブサーバやメールサーバととてもよく似ていますね。 このため、長い間 BSD のマスコットはスニーカーをはいてフォークを携えた かわいらしい姿のデーモンなのです。

通常デーモンとして動作するプログラムには末尾に d を持った名前をつける慣習があります。 BIND は Berkeley Internet Name Domain ですが、 実際実行されるプログラムは named という名前です。 Apache ウェブサーバのプログラムは httpd と呼ばれ、 ラインプリンタスプーリングデーモンは lpd、 などなどです。 これは単なる慣習で、しっかりがっちりとしたルールではありません。 例えば、Sendmail アプリケーションの主なメールデーモンは sendmail という名前で、 連想しそうな maild ではありません。

時々、デーモンプロセスと通信したいときがあります。 一つの方法として、それ (に限らずどんな動作中のプロセスでも) に シグナルと呼ばれるものを送信する方法です。 送信可能なシグナルはたくさんあります―特別な意味があるものもあれば、 アプリケーションによって解釈されるものもありますし、 アプリケーションがシグナルをどう解釈するかは そのアプリケーションの文章を読めば分かるでしょう。 自分が持っているプロセスにしかシグナルを送ることはできません。 他人のプロセスに kill(1)kill(2) を使ってシグナルを送っても、許可されないでしょう。 これの例外は root ユーザで、 ルートユーザは誰のプロセスでもシグナルを送ることができます。

FreeBSD もアプリケーションにシグナルを送ることがあります。 アプリケーションを下手に書くと、 予想外のメモリにアクセスしようとするので、 FreeBSD がプロセスに セグメンテーション違反 シグナル (SIGSEGV) を送ります。 ある程度の時間が経ったら alarm(3) システムコールを使って警告してもらうようなアプリケーションには、 警告シグナル (SIGALRM) が送信される、 などです。

プロセスを止めるためには2つのシグナル、 SIGTERMSIGKILL を使います。 SIGTERM は穏かにプロセスを終了させる方法です。 プロセスはシグナルを受け取ることができ、 終了させたいのだなということを理解し、 開いているログファイルを全部を閉じ、 一般的に終了前にしていたことを終えることができます。 中断できない処理の途中だと、SIGTERM をプロセスが無視することもあるかもしれません。

プロセスは SIGKILL を無視することができません。 これは、なにをしていようが構わないから今すぐ止まれ というシグナルです。 プロセスに SIGKILL を送ると、 FreeBSD はそのプロセスをそこで止めます[4]

使う可能性のあるシグナルは、他に SIGHUPSIGUSR1、と SIGUSR2 があります。 これらは一般的な用途のシグナルで、 このシグナルが送信されたときアプリケーションによって別のことをします。

ウェブサーバの設定ファイルを変更したとしましょう―ウェブサーバに新しい設定を再読み込みさせたいですね。 httpd を止めて再起動することもできますが、 そうするとウェブサーバは一瞬ながら停止してしまいますし、 ちょっとでも止まってほしくないこともあるでしょう。 ほとんどのデーモンは SIGHUP シグナルに対して設定ファイルを再読み込みする反応を返すよう書かれています。 従って、httpd を止めて再起動する代わりに、 SIGHUP シグナルを送りましょう。 これらのシグナルへの標準的な反応というものがないために、 デーモンごとに行動が違うので、 疑問があれば必ずそのデーモンの文書を読んでください。

kill(1) コマンドを使って送るシグナルはこの例をご覧ください。

手順3.1 プロセスにシグナルを送る

この例では、inetd(8) にシグナルを送る方法を示します。 inetd の設定ファイルは /etc/inetd.conf で、 inetdSIGHUP が送信されるとこの設定ファイルを再読み込みします。

  1. シグナルを送りたいプロセスのプロセス ID を探します。 それには ps(1)grep(1) を使います。 grep(1) コマンドは出力を検索するために使い、 指定した文字列を探します。 このコマンドは一般ユーザで実行しますが、 inetd(8)root で実行されているので、 ps(1) には ax オプションを与える必要があります。

    % ps -ax | grep inetd
      198  ??  IWs    0:00.00 inetd -wW

    ということで、inetd(8) の PID は 198 です。 grep inetd コマンドがこの出力に出てくる場合もあります。 それは、ps(1) が動作中のプロセスのリストを見つける方法によります。

  2. kill(1) を使ってシグナルを送ります。 inetd(8)root で起動されているために、 まず su(1) を使って root にならなければなりません。

    % su
    Password:
    # /bin/kill -s HUP 198

    大部分の UNIX® コマンドと同じく、 成功したら kill(1) は何の出力も表示しません。 自分のものではないプロセスにシグナルを送ると、 kill: PID: Operation not permitted と表示されます。 PID を打ち間違えると、 悪いことに間違ったプロセスにシグナルを送ってしまうか、 もしくは運がよければその時点で使われていない PID にシグナルを送ったことになり、kill: PID: No such process と表示されます。

    なぜ /bin/kill を使うんでしょう?:

    多くのシェルは kill コマンドを組み込みコマンドとして備えています。 つまり、/bin/kill を実行するのではなく、 シェルが直接シグナルを送ります。 これはとても便利なのですが、 シェルが違うと送るシグナルの名前の指定の仕方が違います。 シェルによって異なるシグナルの指定の仕方を全部覚えようとはせずに、 /bin/kill ... コマンドを直接使うほうが簡単です。

他のシグナルの送り方はほとんど同じで、 コマンドラインの TERMKILL を必要に応じて変えるだけです。

重要:

システム上のランダムプロセスを終了させるのはよくありません。 特に、プロセス ID が 1 の init(8) は特別です。 /bin/kill -s KILL 1 を使うといとも簡単にシステムをシャットダウンさせることができます。 Return を押すkill(1) を実行する引数を二重にチェックするをつけてください。

3.9. シェル

FreeBSD では日々の作業のほとんどは、 「シェル」と呼ばれるコマンドラインインタフェイスを通して行われます。 シェルの主な仕事はコマンドを入力チャンネルから受け取り、 そしてそれらを実行することです。 大部分のシェルはさらに組み込みの機能を持っていて、日々の作業、 ファイル管理やファイル名の展開、コマンドライン編集、 コマンドマクロ、環境変数などに便利です。 FreeBSD には sh (Bourne Shell) や tcsh (高機能 C-shell) が含まれています。 また、 これ以外にも zshbash などたくさんのシェルが FreeBSD Ports Collection から利用可能です。

「あなたは、どのシェルを使いますか?」という質問は、 まったく趣味の問題です。 あなたが C のプログラマだったとすれば、 tcsh のような C 風のシェルの方が落ち着くかもしれません。 Linux から来た人や UNIX® のコマンドラインインタフェイスになじみがなければ、 bash を試すのも良いでしょう。 ポイントは、それぞれのシェルは、 あなたの好みの作業環境で利用できる (もしくはできない) 独自の機能を持っているということ、 そして、どのシェルを使うことにするかを決めるのはあなた自身だということです。

シェルの一般的な機能の一つに、ファイル名の補完があります。 コマンドやファイル名の最初の数文字を与えて Tab キーを押すことで、 シェルにコマンドやファイル名の残りの部分を自動的に補完させることができます。 例をあげましょう。 二つのファイル foobar, foo.bar が あったとします。 ここで foo.bar の方を削除するには、 rm fo[Tab].[Tab] と入力します。

するとシェルは rm foo[BEEP].bar と出力するでしょう。

[BEEP] のところはコンソールのベル (訳注: 通常はビープ音が鳴ります) です。 これは複数のファイルがマッチしたため、 ファイル名の補完を完全に行なえなかったことを伝えています。 foobarfoo.bar は 両方とも fo ではじまるため、 補完できるのは foo までです。 ここで . を入力して Tab を押せば、 シェルはファイル名の残りの部分を補完できます。

もう一つあげられるシェルの特徴として、環境変数があります。 環境変数とは、シェルの環境変数空間におけるキーと値とのペアです。 この変数空間は、そのシェルから起動されたプログラムから参照でき、 それを利用してプログラムの設定を保存するのに利用されます。 下の表は、一般的な環境変数とその意味を示したものです。

変数名意味
USER現在のログインユーザのユーザ名。
PATHコロンで区切られた実行ファイル探索のための ディレクトリのリスト。
DISPLAY接続する X11 ディスプレイのネットワーク名 (存在する場合のみ)。
SHELL現在のシェル。
TERMユーザの端末種名。 端末のケーパビリティを決定するのに使われる。
TERMCAP種々の端末の機能を実現する端末のエスケープコードの データベースのエントリ。
OSTYPEオペレーティングシステムの種別。 たとえば FreeBSD。
MACHTYPEシステムが動作している CPU のアーキテクチャ。
EDITORユーザの選んだテキストエディタ。
PAGERユーザの選んだテキストページャ。
MANPATHコロンで区切られたマニュアルページ探索のための ディレクトリのリスト。

環境変数をセットする方法は、 それぞれのシェルごとに多少異なります。 たとえば、tcshcsh 等の C シェルでは setenv を使います。 shbash 等の Bourne シェルでは setexport を使います。 たとえば cshtcshEDITOR 環境変数の値を /usr/local/bin/emacs に セットするか変更するには、次のようにします。

% setenv EDITOR /usr/local/bin/emacs

Bourne シェルでは次のようになります。

% export EDITOR="/usr/local/bin/emacs"

ほとんどのシェルでは、 コマンドライン中の変数名の前に $ 文字を置くことで、 環境変数を展開させることができます。 たとえば、 echo $TERM$TERM が セットされている内容を表示します。 それはシェルが $TERM を展開して echo に渡しているからです。

シェルはさまざまな特殊文字を、特別なデータを表すものとして扱います。 その特殊文字はメタキャラクタと呼ばれます。 もっとも一般的なものは * で、 これはファイル名に含まれる、あらゆる文字を表します。 これらの特殊なメタキャラクタはファイル名の展開に使われます。 たとえば、echo * と入力すると ls と入力したのとほとんど同じ結果を得られます。 これはシェルが * とマッチするすべてのファイルを 受け取って echo のコマンドラインに渡し、表示するからです。

これらの特殊文字をシェルに解釈させないようにするため、 特殊文字の前にバックスラッシュ文字 (\) を置くことができます。 echo $TERM は、 あなたの端末が何にセットされているかを表示します。 echo \$TERM$TERM と そのまま表示します。

3.9.1. シェルの変更

シェルを変更する一番簡単な方法は chsh コマンドを使うことです。 chsh を実行すると 環境変数 EDITOR で示されたエディタが立ち上がります。 環境変数をセットしていなかった時は vi が立ち上がります。 Shell: の行を適宜変更してください。

chsh-s オプションをつけると、 エディタを起動せずにシェルを変更することが可能です。 たとえば、シェルを bash に変えたいなら、次のようにしてください。

% chsh -s /usr/local/bin/bash

注記:

使おうと思っているシェルは必ず /etc/shells 中に書かれているものでなければなりません。 シェルを Ports Collection からインストールしていたのであれば、すでにそれは行なわれていますが、 手動でインストールした場合は、それを忘れずに行ってください。

たとえば、bash を手動で /usr/local/bin にインストールした場合 以下のようにする必要があります。

# echo "/usr/local/bin/bash" >> /etc/shells

そして chsh を実行してください。

3.10. テキストエディタ

さまざまな FreeBSD の設定は、テキストファイルを編集することで行われます。 そのため、テキストエディタの扱いに慣れると良いでしょう。 FreeBSD には、基本システムの一部として二、三提供されるものと、 Ports Collection から利用できる、たくさんのテキストエディタが用意されています。

最も学習が簡単なエディタは、 easy editor の略で ee と呼ばれるものです。 ee を立ち上げるには、コマンドラインから ee filename と入力します。 ここで filename は、 編集しようとしているファイルの名前です。 たとえば、/etc/rc.conf を編集するには ee /etc/rc.conf と入力します。 一旦 ee の中に入れば、 エディタの機能を操作するコマンドはすべてディスプレイの上部に 表示されています。キャレット ^ 文字は キーボードの Ctrl キーを意味しますので、 ^e はキーのコンビネーション Ctrl+e を押すという意味になります。 ee を終了するには Esc キーを押し、 そして leave editor を選びます。 ファイルが更新されていたときは、 エディタは変更をセーブするかどうかプロンプトを出します。

FreeBSD には、基本システムの一部として vi、 一方 Emacsvim といった他のエディタは Ports Collection の一部として、 より強力なテキストエディタが用意されています (editors/emacs, editors/vim)。 これらのエディタはやや学習が複雑ですが、より強力で高い機能性を提供します。 しかし、あなたが多量のテキストを編集することを考えているなら、 vimEmacs といった強力なエディタを習得することは、 より多くの時間を節約することでしょう。

3.11. デバイスとデバイスノード

デバイスとはシステム上のハードウェアに関するものに対してよく使われる用語で、 ディスクやプリンタ、グラフィックカードやキーボードが含まれます。 FreeBSD が起動するとき、FreeBSD が表示しているものの大部分は検出されたデバイスです。 /var/run/dmesg.boot を眺めれば起動メッセージを読み直すことができます。

例えば、acd0 は最初の IDE CDROM ドライブで、kbd0 はキーボードを表します。

UNIX® オペレーティングシステムにおけるデバイスのほとんどは、 デバイスノードと呼ばれる /dev ディレクトリにあるスペシャルファイルを通してアクセスしなければなりません。

3.11.1. デバイスノードを作成する

新しいデバイスをシステムにつけ足したり、 追加デバイスのサポートをコンパイルして加えたりするときは、 デバイスノードを作成しなければなりません。

3.11.1.1. DEVFS (デバイスファイルシステム: Device File System)

デバイスファイルシステム DEVFS は、 グローバルファイルシステム名前空間の中のカーネルデバイス名前空間へのアクセスを提供します。 デバイスノードを作成したり変更したりするのではなく、 DEVFS がこの特別なファイルシステムを管理するのです。

詳しくは devfs(5) マニュアルページをご覧ください。

3.12. さらに詳しい情報を得るには...

3.12.1. オンラインマニュアル

FreeBSD についてのもっとも包括的な文書は、 マニュアルページの形式になっているものです。 FreeBSD システム上のほとんどすべてのプログラムには、 基本的な操作方法とさまざまな引数を説明しているリファレンスマニュアルが添付されています。 これらのマニュアルは man コマンドで見ることができます。man コマンドの使い方は簡単です。

% man コマンド名

コマンド名 のところには、知りたいコマンドの名前を入れます。 たとえば ls コマンドについて知りたい場合には、 次のように入力します。

% man ls

オンラインマニュアルは、 セクション番号で分類されています。

  1. ユーザコマンド

  2. システムコールとエラー番号

  3. C のライブラリ関数

  4. デバイスドライバ

  5. ファイル形式

  6. ゲームや娯楽

  7. さまざまな情報

  8. システムの管理と操作のためのコマンド

  9. カーネル開発者のための情報

時折、 同じトピックがオンラインマニュアルの複数のセクションに記載されている場合があります。 たとえば、chmod ユーザコマンドと chmod() システムコールの場合がそれに該当します。 この場合、man コマンドにセクション番号を与えることで、 どちらを参照したいかを指定することができます。

% man 1 chmod

上のようにすれば、 ユーザコマンド chmod のマニュアルページが表示されます。 オンラインマニュアルの特定セクションへの参照は、 慣習的に書かれている文書で括弧の中に示されます。 すなわち、chmod(1)chmod ユーザコマンドを、chmod(2) はシステムコールの方を示しています。

コマンドの名前を知っていて、 単純にその使い方を知りたい場合はここまでの説明で十分でしょう。 しかし、 もしコマンドの名前を思い出せない場合にはどうしたら良いのでしょうか? man-k スイッチをつければ、 コマンド解説 (description) の文章から、 指定したキーワードを検索することができます。

% man -k mail

このコマンドにより、 mail というキーワードをコマンド解説に含むコマンドの一覧が表示されます。 実際には、これは apropos コマンドを使う場合と同等の機能です。

それでは、/usr/bin にあるさまざまなコマンドすべてを見ていて、 それらが実際にどう働くのかが、まったく見当もつかないときには どうしたら良いでしょう? そのときは単純に、

% cd /usr/bin
% man -f *

とするか、あるいは同じ働きをする

% cd /usr/bin
% whatis *

としてください。

3.12.2. GNU の Info ファイル

FreeBSD には Free Software Foundation (FSF) によるアプリケーションや ユーティリティがたくさん含まれています。 これらのプログラムには、マニュアルページに加えて info ファイルと呼ばれる ハイパーテキスト形式の文書が付属しています。 この文書は info コマンド、 あるいは emacs をインストールしているなら emacs の info モードで読むことができます。

info(1) コマンドを使うには、単に次のように入力します。

% info

h と入力すると、 簡単な手引きを読むことができます。 クイックコマンドリファレンスは ? を入力してください。



[1] i386 が意味しているのはそういうことです。 FreeBSD を Intel の 386 CPU 上で動かしていなくても、 ここは i386 になります。 ここで表示されるのはプロセッサの種類ではなく、プロセッサの アーキテクチャです。

[2] スタートアップスクリプトは、 起動時に FreeBSD が自動的に実行するプログラムです。 主な機能は、全プログラムが動作するように設定を行なうことと、 バックグラウンドで動作するように設定した 有用なサービスを開始することです。

[3] FreeBSD のコンソールとキーボードドライバの詳細全体に ついて、それなりに技術的かつ正確な説明は syscons(4), atkbd(4), vidcontrol(1) および kbdcontrol(1) のマニュアルにあります。 ここではその詳細には立ち入りませんが、 興味をもった方は、いつでもマニュアルを参照して、 動作に関する詳細な説明を読むことができます。

[4] 正確ではありません―中断できないものはわずかながら存在します。 例えば、プロセスがネットワーク上の別の計算機にあるファイルを読もうとして、 その計算機がなんらかの理由 (電源を落とされたとか、ネットワークに問題があるとか) でいなくなった場合、そのプロセスは中断不可能と言われます。 最終的にはそのプロセスはタイムアウトします。普通は2分後です。 タイムアウトした直後、そのプロセスは終了します。

第4章 アプリケーションのインストール - packages と ports

4.1. この章では

FreeBSD の基本システムには数多くのシステムツールが含まれています。 FreeBSD は、サードパーティ製のソフトウェアの導入を支援するために、 ソースコードをコンパイルしてインストールする Ports Collection と、 コンパイル済みのバイナリをインストールする packages という相補的な 2 つの技術を提供しています。 どちらのシステムを用いても、 ローカルメディアやネットワーク上からソフトウェアをインストールできます。

この章を読むと、以下のことがわかります。

  • packages と ports の違い

  • FreeBSD に移植されたサードパーティ製のソフトウェアの探し方

  • pkg を用いてバイナリ package を管理する方法

  • Ports Collection を用いてサードパーティ製のソフトウェアをソースコードから構築する方法

  • インストール後の設定のために、 アプリケーションとともにインストールされたファイルを探す方法

  • ソフトウェアのインストールに失敗した場合に、どうしたらよいか

4.2. ソフトウェアのインストール

UNIX® システムでは、 サードパーティ製ソフトウェアの典型的なインストール手順は以下のようになります。

  1. ソースコード、 またはバイナリ形式で配布されているソフトウェアを探し出し、 ダウンロードする。

  2. 配布時のフォーマットからソフトウェアを取り出す。 一般的には compress(1), gzip(1) または bzip2(1) で圧縮された tarball です。

  3. INSTALL または README ファイル、あるいは doc/ サブディレクトのファイルからドキュメントを探しだし、 ソフトウェアのインストール方法を調べる。

  4. ソース形式でソフトウェアが配布されている場合はコンパイルを行う。 ここでは、Makefile の編集、 または、configure スクリプトの実行を伴うことがあります。

  5. ソフトウェアの動作を確認し、インストールする。

インストールしているソフトウェアパッケージが、 FreeBSD を意識して移植されたものでなかったり、 FreeBSD 上でテストされていなければ、 正しくインストールが行われ、適切に動くようにコードを調べ、 編集する必要があるかもしれません。 この文書を書いている時点では、24,000 を越えるサードパーティ製アプリケーションが利用可能です。

FreeBSD の package は、コンパイル済みのアプリケーションの全コマンド、 各種設定ファイルやドキュメントを含んでいます。 pkg コマンドでは、pkg install といったコマンドで、 package を扱うことができます。

FreeBSD port は、 アプリケーションをソースコードからコンパイルする際の処理を自動化するように設計されたファイルの集まりです。 port を構成するファイルは、 自動的にアプリケーションをダウンロードし、展開、パッチ作業、 コンパイル、そしてインストールを行うために必要な情報を含んでいます。

さらに ports システムは、FreeBSD の package 管理コマンドで扱うことのできる packages を生成できます。

packages と ports は依存関係を理解します。 package または port を用いてアプリケーションをインストールすると、 依存するライブラリがまだインストールされていない場合には、 最初にライブラリが自動的にインストールされます。

2 つの技術は類似していますが、 packages と ports にはそれぞれ独自の特徴があります。 それぞれのアプリケーションのインストールに対する必要要件に応じてどちらかを選択してください。

package の利点
  • 一般的に、あるアプリケーションの package の tarball は、 ソースコードを含む tarball より小さなサイズとなります。

  • packages はコンパイルの時間を必要としません。 このことは、遅いシステム上で Mozilla, KDE, または GNOME といった大きなアプリケーションを扱う場合に重要となります。

  • packages を用いれば、 ソフトウェアのコンパイルに関する知識は必要ありません。

port の利点
  • packages は、通常最も多くのシステムで実行できるように、 非常に保守的な設定で構築されています。 port からコンパイルすることで、 コンパイルオプションを指定できます。

  • アプリケーションのなかには、 どの機能をインストールするかをコンパイル時に設定するものがあります。 たとえば、Apache は多種多様な ビルトインオプションを設定できます。

    設定を区別するために、同じアプリケーションに対して 複数の packages が存在することがあります。 たとえば、GhostscriptXorg がインストールされているかどうかにより、 ghostscript package と ghostscript-nox11 package が選択可能となっています。 アプリケーションのコンパイルオプションが 1 つもしくは 2 つ以上になると、 複数の packages を用意することは困難になります。

  • ライセンス条項で、 バイナリでの配布を禁止しているソフトウェアがあります。 このようなソフトウェアはソースコードで配布される必要があり、 エンドユーザがコンパイルしなくてはなりません。

  • バイナリ配布を信用していない人や、 潜在的な問題点を見つけ出すためにソースコードを読むことを好む人がいます。

  • カスタマイズしたパッチを適用するためには、 ソースコードが必要になります。

ports の更新状況を把握するために、 FreeBSD ports メーリングリストFreeBSD ports bugs メーリングリスト を購読するとよいでしょう。

警告:

アプリケーションをインストールする前に、 そのアプリケーションに関連したセキュリティ上の問題がないことを http://vuxml.freebsd.org/ で確認するか、pkg audit -F と入力して、 インストールされているアプリケーションに既知の脆弱性がないことを確認してください。

この章では、packages と ports を用いた FreeBSD 上での サードパーティ製ソフトウェアのインストール方法や管理方法について説明します。

4.3. ソフトウェアの探し方

FreeBSD 上で利用可能なアプリケーションのリストは常に増えています。 インストールするソフトウェアを探す方法はたくさん用意されています。

  • FreeBSD ウェブサイトは、 利用可能なすべてのアプリケーションの最新の一覧を、検索できる形で http://www.FreeBSD.org/ja/ports/ において公開しています。 ports はアプリケーションの名前や、ソフトウェアのカテゴリで検索出来ます。

  • Dan Langille は、包括的な検索ユーティリティや Ports Collection にあるアプリケーションの変更点を追跡する FreshPorts.org を公開しています。 登録したユーザは、監視している ports がアップデートされた時に、 そのことを自動的にメールで知らせてくれるような、 カスタマイズ可能な監視リストを使うことができます。

  • アプリケーションを見つけることが難しい場合には、SourceForge.net または GitHub.com のようなサイトで探してみてください。 その後、そのアプリケーションが ports で利用可能かどうかを FreeBSD サイト で調べて下さい。

  • バイナリ package リポジトリでアプリケーションを探すには、 以下のように実行してください。

    # pkg search subversion
    git-subversion-1.9.2
    java-subversion-1.8.8_2
    p5-subversion-1.8.8_2
    py27-hgsubversion-1.6
    py27-subversion-1.8.8_2
    ruby-subversion-1.8.8_2
    subversion-1.8.8_2
    subversion-book-4515
    subversion-static-1.8.8_2
    subversion16-1.6.23_4
    subversion17-1.7.16_2

    package 名にはバージョン番号が含まれます。 また、python ベースの ports では、 共に構築された python のバージョン番号も含まれます。 ports によっては、複数のバージョンを利用できるものがあります。 subversion では、 複数のバージョンを利用できますが、 異なるコンパイルオプションで構築されたものも利用できます。 インストールする package を指定する際には、 アプリケーションに、port ツリーのパスである、 port のオリジンを指定すると良いでしょう。 pkg search-o オプションを付けて、実行してください。 各 package のオリジンの一覧が表示されます。

    # pkg search -o subversion
    devel/git-subversion
    java/java-subversion
    devel/p5-subversion
    devel/py-hgsubversion
    devel/py-subversion
    devel/ruby-subversion
    devel/subversion16
    devel/subversion17
    devel/subversion
    devel/subversion-book
    devel/subversion-static

    pkg search は、 リポジトリデータベースの説明やその他のフィールドにおいて、 シェルグロブ、正規表現、完全一致にも対応しています。 詳細については、ports-mgmt/pkg または ports-mgmt/pkg-devel のインストール後、 pkg-search(8) をご覧ください。

  • Ports Collection がすでにインストールされていれば、 ports ツリーのローカルバージョンを調べることができます。 port がどのカテゴリに分類されているのかを知りたければ、 whereis(1) コマンドで調べることができます。 whereis ファイル と入力してください。ファイル の部分にはインストールを考えているプログラム名を入れます。

    # whereis lsof
    lsof: /usr/ports/sysutils/lsof

    さらに、以下の例のように echo(1) を使って調べることもできます。

    # echo /usr/ports/*/*lsof*
    /usr/ports/sysutils/lsof

    この方法では /usr/ports/distfiles 以下にダウンロードされたファイル名にもマッチします。

  • また、Ports Collection に備わっている検索機能を利用して port を検索する方法もあります。 この検索機能を利用するには、 cd コマンドを用いて /usr/ports ディレクトリに移動し、make search name=プログラム名 と入力してください。 プログラム名 の部分には検索したいソフトウェアの名前を入れてください。 たとえば、lsof を探すには次のようにします。

    # cd /usr/ports
    # make search name=lsof
    Port:   lsof-4.88.d,8
    Path:   /usr/ports/sysutils/lsof
    Info:   Lists information about open files (similar to fstat(1))
    Maint:  ler@lerctr.org
    Index:  sysutils
    B-deps:
    R-deps: 

    ヒント:

    Ports Collection に用意されている検索のメカニズムでは、 インデックスファイルを利用して検索を行います。 もし INDEX が必要であるというメッセージが表示されたら、 make fetchindex を実行して、 最新のインデックスファイルをダウンロードしてください。 INDEX が用意されれば、 make search で検索を実行できるでしょう。

    Path: という行は、 port がどこにあるかを示しています。

    より絞られた情報を得るには、 quicksearch と呼ばれる機能を使ってください。

    # cd /usr/ports
    # make quicksearch name=lsof
    Port:   lsof-4.88.d,8
    Path:   /usr/ports/sysutils/lsof
    Info:   Lists information about open files (similar to fstat(1))

    もっと詳しく検索するには、 make search key=string または make quicksearch key=string と入力してください。 string の部分には検索したいテキストを入れます。 プログラムの名前がわからない場合でも、 ある目的に関連した ports の検索に利用できるよう、 テキストの部分には、コメント、 説明文および依存情報を入れることができます。

    search および quicksearch を使う場合には、 検索文字列中の大文字と小文字を区別せずに検索が行われるので、 LSOF を検索した結果は、 lsof と同じ検索結果になります。

4.4. pkg によるバイナリ package の管理

pkg は、FreeBSD における伝統的な package 管理ツールの置き換えとなる次世代の管理ツールで、 バイナリ packages をより早く、 より簡単に管理できるようにする数多くの機能を提供します。

pkgports-mgmt/portmasterports-mgmt/portupgrade などの port 管理ツールの置き換えではありません。 これらのツールは、 サードパーティ製ソフトウェアをバイナリ packages と Ports Collection の両形式からインストールできますが、 一方で pkg はバイナリ packages のみをインストールします。

4.4.1. pkg 入門

FreeBSD 8.4 以降では、 pkg とマニュアルページをダウンロードし、 インストールするためのブートストラップユーティリティが用意されています。

システムをブートストラップするためには、 以下を実行してください。

# /usr/sbin/pkg

これより前のバージョンの FreeBSD では、かわりに Ports Collection または packages を用いてインストールする必要があります。

port をインストールするには以下を実行してください。

# cd /usr/ports/ports-mgmt/pkg
# make
# make install clean

古い package システムを用いているシステムをアップグレードする際には、 新しいツールがすでにインストールされている package に認識するよう、 データベースを新しいフォーマットへと変換する必要があります。 pkg をインストールしたら、 以下のコマンドを実行して、package データベースをこれまでの伝統的なフォーマットから新しいフォーマットへと変換する必要があります。

# pkg2ng

注記:

このステップは、 サードパーティ製ソフトウェアがまだインストールされていないような、 新しくインストールされた直後のシステムでは必要ありません。

重要:

このステップは非可逆です。 一度 package データベースを pkg フォーマットへと変換したら、伝統的な pkg_* ツールを使うべきではありません。

注記:

package データベースを変換する際には、 新しいバージョンへのデータ変換に伴ったエラーが出力されることがあります。 通常、これらのエラーは無視して構いませんが、 pkg2ng 終了後に表示される、 変換に失敗したサードパーティ製ソフトウェアの一覧については、 これらのソフトウェアを手動で再インストールする必要があります。

FreeBSD のバージョンが 10.X より前であれば、 以下の行を /etc/make.conf に追加して、 FreeBSD Ports Collection がソフトウェアの登録に、伝統的な package のフォーマットではなく、pkg を用いるように設定してください。

WITH_PKGNG=	yes

pkg は、 FreeBSD の package ミラーをデフォルトで用います。 カスタム package リポジトリの構築については、Poudriere を用いた package の構築」 をご覧ください。

その他の pkg の設定オプションは、pkg.conf(5) に記述されています。

pkg の利用情報は、 pkg(8) や、 pkg を引数なしに実行すると表示されます。

pkg コマンドの引数は、 コマンドに固有なマニュアルページに記述されています。 たとえば、pkg install のマニュアルページを読むには、 以下のコマンドのどちらかを実行してください。

# pkg help install
# man pkg-install

以下の節では、pkg を用いた通常のバイナリ package の管理について説明します。 各コマンドでは、カスタマイズのために、 多くのオプションが使われています。 詳細や、他の例については、 コマンドのヘルプやマニュアルページを参照してください。

4.4.2. インストールされている package の情報を入手する

オプションを使用しないで pkg info を実行すると、 システムにインストールされているすべての package もしくは、 ある特定の package の情報が得られます。

たとえば、インストールされている pkg の情報を調べるには、 以下のように実行してください。

# pkg info pkg
pkg-1.1.4_1

4.4.3. package のインストールと削除

バイナリ package をインストールするには、 以下のコマンドを使ってください。 ここで packagename は、インストールする package の名前です。

# pkg install packagename

このコマンドは、リポジトリデータを使用して、 インストールすべきソフトウェアのバージョン、および、 インストールされていない依存ソフトウェアがあるかどうかを調べます。 たとえば、curl をインストールするには以下を実行してください。

# pkg install curl
Updating repository catalogue
/usr/local/tmp/All/curl-7.31.0_1.txz          100% of 1181 kB 1380 kBps 00m01s

/usr/local/tmp/All/ca_root_nss-3.15.1_1.txz   100% of  288 kB 1700 kBps 00m00s

Updating repository catalogue
The following 2 packages will be installed:

        Installing ca_root_nss: 3.15.1_1
        Installing curl: 7.31.0_1

The installation will require 3 MB more space

0 B to be downloaded

Proceed with installing packages [y/N]: y
Checking integrity... done
[1/2] Installing ca_root_nss-3.15.5_1... done
[2/2] Installing curl-7.31.0_1... done
Cleaning up cache files...Done

新しい package と依存関係から追加された package は、 インストール済み package 一覧に表示されます。

# pkg info
ca_root_nss-3.15.5_1	The root certificate bundle from the Mozilla Project
curl-7.31.0_1	Non-interactive tool to get files from FTP, GOPHER, HTTP(S) servers
pkg-1.1.4_6	New generation package manager

必要のなくなった packages は、 pkg delete を使って削除できます。 たとえば、以下のようにして削除できます。

# pkg delete curl
The following packages will be deleted:

	curl-7.31.0_1

The deletion will free 3 MB

Proceed with deleting packages [y/N]: y
[1/1] Deleting curl-7.31.0_1... done

4.4.4. インストールされている package のアップグレード

以下のコマンドを実行すると、 インストールされている packages が最新のバージョンにアップグレードされます。

# pkg upgrade

このコマンドは、インストールされているソフトウェアのバージョンと、 リポジトリのカタログから利用できるバージョンとを比較し、 リポジトリからアップグレードします。

4.4.5. インストールされている package の検証

時折、 サードウェア製のアプリケーションに脆弱性が見つかることがあります。 脆弱性を調べるために、 pkg は、検証機能を持っています。 システムにインストールされているソフトウェアに既知の脆弱性がないかどうかを調べるには、 以下のように実行してください。

# pkg audit -F

4.4.6. リーフ依存 ports の自動削除

package を削除すると、不必要な依存 ports が残されることがあります。 依存のために導入され、現在は不必要になった package は、 以下のようにすると自動的に検出され、削除されます。

# pkg autoremove
Packages to be autoremoved:
	ca_root_nss-3.13.5

The autoremoval will free 723 kB

Proceed with autoremoval of packages [y/N]: y
Deinstalling ca_root_nss-3.15.1_1... done

4.4.7. package データベースのリストア

伝統的な package 管理システムとは異なり、 pkg には package データベースをバックアップするメカニズムがあります。 この機能はデフォルトで有効に設定されています。

ヒント:

スクリプトによる定期的な package データベースのバックアップを無効にするには、 periodic.conf(5) の中で、 daily_backup_pkgdb_enable="NO" と設定してください。

過去にバックアップした package データベースの中身をリストアするには、 以下のコマンドを実行してください。 以下のコマンドの /path/to/pkg.sql については、バックアップのある場所に置き換えて実行してください。

# pkg backup -r /path/to/pkg.sql

注記:

システムの定期的なスクリプトによって取得されたバックアップをリストアする場合には、 リストアの前に展開しておく必要があります。

手動で pkg データベースをバックアップするには、以下のコマンドを実行してください。 以下のコマンドの /path/to/pkg.sql については、適切なファイル名と場所に置き換えて下さい。

# pkg backup -d /path/to/pkg.sql

4.4.8. 古くなった package の削除

デフォルトでは、pkg は、pkg.conf(5)PKG_CACHEDIR 変数で定義されるキャッシュディレクトリにバイナリ packages を保存します。 インストールされている package の最新のコピーのみが保存されます。 古いバージョンの pkg では、 過去にインストールされたすべての package が保存されていました。 これらの古くなったバイナリ package を削除するには、 以下を実行してください。

# pkg clean

キャッシュ全体を削除するには以下を実行してください。

# pkg clean -a

4.4.9. package メタデータの変更

FreeBSD Ports Collection では、メジャーバージョン番号が変更になることがあります。 これに対応するために、pkg には、 package の情報をアップデートするコマンドが組み込まれています。 たとえば、lang/php5 が、 バージョン 5.4 を表すようになり、 lang/php5lang/php53 と名前を変更する必要があるような場合に、有用です。

上記の例の package の情報を変更するには、 以下のように実行してください。

# pkg set -o lang/php5:lang/php53

別の例として、lang/ruby18lang/ruby19 にアップデートするには、 以下のようにしてください。

# pkg set -o lang/ruby18:lang/ruby19

最後の例として、 libglut 共有ライブラリの情報を graphics/libglut から graphics/freeglut へと変更するには、 以下のように実行してください。

# pkg set -o graphics/libglut:graphics/freeglut

注記:

package の情報を変更したら、 情報が変更された package に依存している packages を再インストールすることが重要となります。 依存 packages を再インストールするには、 以下のように実行してください。

# pkg install -Rf graphics/freeglut

4.5. Ports Collection の利用

Ports Collection とは、/usr/ports 以下に置かれる Makefile, 修正パッチ、 説明文などの一連のファイルのことです。このファイルのセットは、 アプリケーションをコンパイルして FreeBSD にインストールするのに用いられます。 port を用いてアプリケーションをコンパイルできるようにするには、 まず最初に Ports Collection をインストールする必要があります。 FreeBSD のインストール時に Ports Collection をインストールしなかった場合に、 以下の方法のどれかを用いてインストールしてください。

手順4.1 Portsnap を利用する方法

FreeBSD のベースシステムには、Portsnap が含まれています。 これはは Ports Collection を取得するための速くて使いやすく、 多くのユーザに推奨されるツールです。 このユーティリティは、FreeBSD のサイトに接続し、セキュリティキーを検証し、 Ports Collection の最新版をダウンロードします。 セキュリティキーは、 ダウンロードしたすべてのファイルの検証に用いられます。

  1. 圧縮された Ports Collection のスナップショットを /var/db/portsnap にダウンロードするには以下を実行してください。

    # portsnap fetch
  2. 初めて Portsnap を使う時は、 スナップショットをまず /usr/ports に展開してください。

    # portsnap extract
  3. 上で示した Portsnap を初めて利用する際に行うコマンドを実行した後は、 以下のコマンドで /usr/ports をアップデートしてください。

    # portsnap fetch
    # portsnap update

    fetch を使う場合には、以下のよう extract または update を連続して行うことができます。

    # portsnap fetch update
手順4.2 Subversion を用いる方法

ports ツリーの管理が必要な場合や、 ローカルで変更点をメンテナンスする必要がある場合には、 Subversion を使って Ports Collection を取得する方法があります。 Subversion のより詳細な説明については、 Subversion Primer を参照してください。

  1. Subversion を使って ports ツリーをチェックアウトする前に、 Subversion をインストールしておく必要があります。 ports ツリーがすでにインストールされていれば、 以下のようにして Subversion をインストールできます。

    # cd /usr/ports/devel/subversion
    # make install clean

    ports ツリーが利用できない場合や、 package の管理に pkg を使っているのであれば、package から Subversion をインストールできます。

    # pkg install subversion
  2. ports ツリーをチェックアウトしてください。 パフォーマンスを良くするため、 svn0.us-east.FreeBSD.orgSubversion ミラー の中から地理的に近い場所にあるミラーに置き換えてください。

    # svn checkout https://svn0.us-east.FreeBSD.org/ports/head /usr/ports
  3. Subversion で最初のチェックアウトを行ったら、必要に応じて /usr/ports をアップデートしてください。

    # svn update /usr/ports

Ports Collection はソフトウェアのカテゴリを表すディレクトリを持ち、 各カテゴリには、各アプリケーションのサブディレクトリがあります。 ports スケルトンとも呼ばれる各サブディレクトリには、 プログラムを FreeBSD 上で正しくコンパイルしてインストールする方法を提供するファイルのセットが含まれています。 それぞれの port スケルトンには、 次のファイルおよびディレクトリが含まれています。

  • Makefile: このファイルにはアプリケーションのコンパイル方法やシステムのどこにインストールするかを指定する命令文が含まれています。

  • distinfo: このファイルには、その port を構築するためにダウンロードする必要があるファイルのファイル名と、 チェックサム情報が含まれています。

  • files: このディレクトリには FreeBSD 上でプログラムをコンパイルし、 インストールするための修正パッチが含まれています。 このディレクトリには、その port の構築に必要なその他のファイルが入る場合もあります。

  • pkg-descr: このファイルにはプログラムに関する、 より詳しい説明文が含まれます。

  • pkg-plist: これは、その port によってインストールされる全ファイルのリストです。 これにはプログラムを削除する際に、 どのファイルを削除すれば良いのかを ports システムに伝える役割もあります。

これらの他に pkg-message や特殊な状況に対応するためのファイルを含む ports もあります。 これらのファイルについての詳細および ports の一般的な説明については、 port 作成者のためのハンドブック をご覧下さい。

port は実際のソースコード (distfile とも呼ばれます) を含んではいません。 port の構築の展開部で、ダウンロードされたソースは自動的に /usr/ports/distfiles に保存されます。

4.5.1. ports のインストール

この節では、Ports Collection を利用してプログラムをインストールしたり、 システムから削除したりする基本的な手順について説明します。 利用可能な make のターゲットや環境変数についての詳細は ports(7) をご覧ください。

警告:

いかなる port でも、構築する前には、 前節に書かれているように、Ports Collection をアップデートしてください。 サードパーティ製のソフトウェアをインストールすると、 セキュリティの脆弱性を引き起こす可能性があります。 その port に関連したセキュリティ上の問題がないことを、まずは http://vuxml.freebsd.org/ で確認してください。または、 新しい port をインストールする前に、 pkg audit -F を実行してください。 毎日のシステムのセキュリティ確認時に、 自動的にセキュリティの検査およびデータベースの更新を行うようにこのコマンドを設定できます。 詳しくは、pkg-audit(8) および periodic(8) を参照してください。

Ports Collection は、ネットワークに接続できることを想定しています。 また、superuser の権限も必要となります。

port をコンパイルしてインストールするには、 インストールしたい port のディレクトリに移動してください。 その後、プロンプトから make install と入力してください。 すると、次のような出力が現われるはずです。

# cd /usr/ports/sysutils/lsof
# make install
>> lsof_4.88D.freebsd.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
>> Attempting to fetch from ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/.
===>  Extracting for lsof-4.88
...
[extraction output snipped]
...
>> Checksum OK for lsof_4.88D.freebsd.tar.gz.
===>  Patching for lsof-4.88.d,8
===>  Applying FreeBSD patches for lsof-4.88.d,8
===>  Configuring for lsof-4.88.d,8
...
[configure output snipped]
...
===>  Building for lsof-4.88.d,8
...
[compilation output snipped]
...
===>  Installing for lsof-4.88.d,8

===>  Installing for lsof-4.88.d,8
...
[installation output snipped]
...
===>   Generating temporary packing list
===>   Compressing manual pages for lsof-4.88.d,8
===>   Registering installation for lsof-4.88.d,8
===>  SECURITY NOTE:
      This port has installed the following binaries which execute with
      increased privileges.
/usr/local/sbin/lsof
#

lsof は高い権限で動作するプログラムなので、 インストールする時にセキュリティに関する警告が表示されます。 インストールが終わったら、プロンプトが戻ります。

シェルによってはコマンドの実行ファイルを探す時間を短縮するために、 環境変数 PATH に登録されている ディレクトリのコマンド一覧をキャッシュするものがあります。 tcsh シェルを使っているのであれば、 フルパスを指定することなく新しくインストールしたコマンドを利用できるように、 rehash を実行してください。 sh シェルを使っているのであれば かわりに hash -r を実行してください。 詳細については、 あなたの使っているシェルのドキュメントをご覧ください。

インストールの間に、作業用ディレクトリが作成されます。 このディレクトリにはコンパイル時に使用されるすべての一時ファイルが含まれています。 このディレクトリを削除することで、ディスク容量を節約でき、また port を新しいバージョンへアップデートする際に問題が起こる可能性を小さくします。

# make clean
===>  Cleaning for lsof-88.d,8
#

注記:

port を構築する際に、 make install clean と実行することで、 これらの余分な手順を省くことができます。

4.5.1.1. ports のインストールのカスタマイズ

ports の中にはビルドオプションを指定できるものがあります。 このオプションを指定することで、 アプリケーションの機能の一部を有効もしくは無効にできます。 また、セキュリティオプションを設定したり、 その他のカスタマイズを行うことができます。 このようなアプリケーションには www/firefox, security/gpgmemail/sylpheed-claws などがあります。 port が他のカスタマイズ可能なオプションを持つ ports に依存する場合には、デフォルトでは、ユーザに port のオプションをメニューから選択させる設定のため、 何度もユーザとの対話が起こり待たされることがあります。 これを避けるには、まず最初に port スケルトンで make config-recursive を実行して設定を一括で行い、その後 make install [clean] を実行して port を構築してインストールしてください。

ヒント:

config-recursive を実行する際、 all-depends-list を実行すると、設定すべき ports の一覧を得ることができます。 多くの場合は、すべての依存 ports のオプションが定義され、 ports オプションの画面が表示されなくなり、 すべてのオプションが設定されたことを確認できるまで make config-recursive を実行すると良いでしょう。

port の構築後、 再びこのメニューを表示させてオプションの追加や削除、 設定の変更を行う方法はたくさんあります。 一つ目は port のディレクトリに cd で移動し、 make config と入力する方法です。 別の方法は make showconfig を使う方法です。 他の方法は make rmconfig の実行です。 このコマンドを実行すると選択されているすべてのオプションが削除され、 設定をもう一度やり直すことができます。 これらの方法や他の方法についての詳細は、 ports(7) マニュアルで説明されています。

ports は、いくつかの環境変数を参照する fetch(1) を用いてソースファイルをダウンロードします。 FreeBSD システムがファイアウォールの内側であったり、 FTP/HTTP プロキシを使う場合には、 FTP_PASSIVE_MODE, FTP_PROXY, FTP_PASSWORD の環境変数を設定することなります。 対応している環境変数の一覧については fetch(3) をご覧ください。

インターネットに常時接続できないユーザのために make fetch コマンドが用意されています。 このコマンドを /usr/ports で実行してすべての distfiles をダウンロードするか、 /usr/ports/net といったカテゴリや、あるスケルトンにおいても実行できます。 ある port がライブラリやその他の ports に依存している場合には、 別のカテゴリの ports の distfiles はダウンロードされないことに注意してください。 port が依存しているすべての distfiles をダウンロードしたければ、 make fetch-recursive を使ってください。

めったにないことかもしれませんが、 ローカルに distfiles のリポジトリがあるような場合に、 MASTER_SITES 変数を変更することで Makefile で指定されているダウンロードの場所を 変更することができます。 設定する場合には、変更先を以下のようにして指定してください。

# cd /usr/ports/directory
# make MASTER_SITE_OVERRIDE= \
ftp://ftp.organization.org/pub/FreeBSD/ports/distfiles/ fetch

WRKDIRPREFIX 変数と PREFIX 変数を変更することで、 作業ディレクトリやターゲットディレクトリをデフォルトのものから変更できます。

# make WRKDIRPREFIX=/usr/home/example/ports install

とすると、ports は /usr/home/example/ports でコンパイルされ、すべて /usr/local 以下にインストールされます。

# make PREFIX=/usr/home/example/local install

この場合、port のコンパイルは /usr/ports でおこない、/usr/home/example/local にインストールします。そして

# make WRKDIRPREFIX=../ports PREFIX=../local install

とすれば両者を組み合わせることが可能です。

これらを環境変数に設定する方法もあります。 どのように環境変数を設定するかについては、 あなたの使っているシェルのマニュアルページを参照してください。

4.5.2. インストールした ports の削除

インストールされた ports は、 pkg delete コマンドで削除できます。 このコマンドの使用例は、pkg-delete(8) にあります。

あるいは、port のディレクトリにて make deinstall を実行することでも削除できます。

# cd /usr/ports/sysutils/lsof
make deinstall
===>  Deinstalling for sysutils/lsof
===>   Deinstalling
Deinstallation has been requested for the following 1 packages:

	lsof-4.88.d,8

The deinstallation will free 229 kB
[1/1] Deleting lsof-4.88.d,8... done

port が削除されるときに表示されるメッセージを読むことをお勧めします。 もし削除した port に依存するアプリケーションがあった場合には、 その情報が表示されますが、port の削除は行われます。 そのようなケースでは、依存を直すためにアプリケーションを再インストールするとよいでしょう。

4.5.3. ports のアップグレード

ports のインストール後、時間が経過すると、Ports Collection で新しいバージョンのソフトウェアを利用できるようになります。 この章では、 どのようにしてアップグレードする必要のあるソフトウェアを判断するか、 そしてアップグレードの方法について説明します。

インストールされている ports の新しいバージョンを利用できるかどうかを知るには、まず、 最新の ports ツリーがインストールされていることを確認してください。 これには、手順4.1「Portsnap を利用する方法」 もしくは 手順4.2「Subversion を用いる方法」 で書かれているアップデートのコマンドを使ってください。 FreeBSD 10 以降のシステム、または、pkg に変換されたシステムでは、 以下のコマンドを実行すると、現在利用可能なバージョンよりも古い ports の一覧が表示されます。

# pkg version -l "<"

FreeBSD 9.X より前のシステムでは、 現在利用可能なバージョンよりも古い ports の一覧を表示されるには、以下のコマンドを実行してください。

# pkg_version -l "<"

重要:

アップグレードする前に /usr/ports/UPDATING を、ファイルの頭から、ports を最後にアップデートした日、 もしくはシステムをインストールをした日に最も近い日まで目を通してください このファイルには port をアップグレードする際にユーザが遭遇するであろう問題や、 追加で必要な作業などが記述されています。 例えば、ファイル形式の変更や設定ファイルの場所の変更、 前のバージョンと互換性がなくなったことなどが書かれています。 アップグレードする必要のある ports に関連した手順に注意し、 アップグレードする際にはこれらの手順に従ってください。

実際にアップグレードを行うには、 Portmaster もしくは Portupgrade を使ってください。

4.5.3.1. portmaster を用いた ports のアップグレード

ports-mgmt/portmaster package または port は、 FreeBSD と共にインストールされているツールだけを使うので、 インストールされている ports のアップグレードに推奨されているツールです。 portmaster は、 他の ports に依存せずに、base システムのツールのみを使うように設計されています。 このアプリケーションは、 どの ports をアップグレードすべきかの判断を、 /var/db/pkg/ の情報を使って行います。port からこのユーティリティをインストールするには以下のようにしてください。

# cd /usr/ports/ports-mgmt/portmaster
# make install clean

Portmaster は、 ports を 4 つのカテゴリに分類します。

  • Root ports: 他の port に依存せず、 他の port からも依存されない ports。

  • Trunk ports: 他の port には依存しないが、 他の port から依存されている ports。

  • Branch ports: 他の port に依存し、 他の port からも依存されている ports。

  • Leaf ports: 他の port に依存するが、 他の port からは依存されない ports。

これらのカテゴリの一覧や、アップデート可能な port の一覧を表示するには以下のようにしてください。

# portmaster -L
===>>> Root ports (No dependencies, not depended on)
===>>> ispell-3.2.06_18
===>>> screen-4.0.3
        ===>>> New version available: screen-4.0.3_1
===>>> tcpflow-0.21_1
===>>> 7 root ports
...
===>>> Branch ports (Have dependencies, are depended on)
===>>> apache22-2.2.3
        ===>>> New version available: apache22-2.2.8
...
===>>> Leaf ports (Have dependencies, not depended on)
===>>> automake-1.9.6_2
===>>> bash-3.1.17
        ===>>> New version available: bash-3.2.33
...
===>>> 32 leaf ports

===>>> 137 total installed ports
        ===>>> 83 have new versions available

以下のコマンドを使うと、 古くなった ports をすべてアップデートします。

# portmaster -a

注記:

Portmaster のデフォルトの設定では、 インストールされている port を削除する前にバックアップ用の package が作成されます。 このバックアップは、 新しいバージョンのインストールに成功すると削除されます。 -b を使うと、 Portmaster の自動的なバックアップの削除は行いません。 -i を追加すると、 Portmaster をインタラクティブモードで使用できます。 このモードでは、各 port をアップグレードするかどうかの選択を対話的に行うことがでます。 多くのオプションが利用可能です。portmaster(8) のマニュアルページから、 それらの使用方法に関する詳細な説明を読んでください。

アップグレードの過程でエラーに遭遇した場合には、 -f を使ってすべての ports のアップグレードや再構築を行なってください。

# portmaster -af

Portmaster を使ってシステムに新しい ports をインストールしたり、 新しい port のコンパイルやインストール前に依存するすべての port をアップグレードできます。この機能を使う時には、 Ports Collection の場所を指定してください。

# portmaster shells/bash

4.5.3.2. Portupgrade を用いた ports のアップグレード

Portupgrade は、 インストールした ports のアップグレードを行なうためのもう一つのユーティリティです。 ports-mgmt/portupgrade package または port から利用できます。 このユーティリティは ports を管理するために用いられるアプリケーションをインストールします。 Ruby に依存します。 port をインストールするには、以下を実行してください。

# cd /usr/ports/ports-mgmt/portupgrade
# make install clean

このユーティリティを使ってアップグレードを行う前に、 pkgdb -F を使って、 インストールされている ports の一覧を調べてください。 矛盾が検出された場合には修復してください。

システムにインストールされている port の中で古くなったものをすべてアップデートするには portupgrade -a を実行してください。 もし、すべての ports に対して個別にアップグレードするかどうかを確認したいのであれば、 -i を追加してください。

# portupgrade -ai

ports で利用可能なすべてのアプリケーションではなく、 ある特定のアプリケーションだけを更新したいのであれば、 portupgrade pkgname を実行してください。 アップグレードするアプリケーションが依存しているすべての ports をまず先に更新したい場合には、 -R を使ってください。

# portupgrade -R firefox

-P オプションを使うと、 portupgradePKG_PATH に登録されているローカルディレクトリから、 利用可能な package を探します。 ローカルに利用可能な packages が見つからなければ、 リモートサイトから package のダウンロードを試みます。 packages をローカルに見つけることができず、 リモートサイトからもダウンロードできない場合には、 portupgrade は ports からインストールを行ないます。 ports を使用したくなければ、-PP オプションを指定してください。 この最後のオプションを設定すると、 もし package が利用できなければ Portupgrade は終了します。

# portupgrade -PP gnome2

また、ビルドやインストールを行なわず、 distfiles または packages だけをダウンロードしたければ、 -F オプションを指定してください。 利用可能なすべてのオプションについては、 portupgrade(1) のマニュアルを参照してください。

4.5.4. ports とディスク容量

Ports Collection を使い続けていると、 そのうちディスクを食いつぶしてしまうでしょう。 ports をビルドしてインストールした後、 ports スケルトンで make clean を実行すると、作業用の work ディレクトリを削除します。 Portmaster を使って port をインストールする場合には、-K を使わなければこのディレクトリは自動的に削除されます。 Portupgrade がインストールされている場合には、 以下のコマンドはローカルの Ports Collection に見つかったすべての work ディレクトリを削除します。

# portsclean -C

さらに、時間が経つにつれ /usr/ports/distfiles には、古くなったソースファイルがたまっていきます。 Portupgrade がインストールされている場合には、 次のコマンドで、どの ports からも使われていない distfiles を削除できます。

# portsclean -D

Portupgrade を使って、システムにインストールされている port から使われていない distfiles をすべて削除するには、以下のコマンドを使ってください。

# portsclean -DD

もし Portmaster がインストールされているのであれば、以下を実行してください。

# portmaster --clean-distfiles

デフォルトでは、このコマンドはインタラクティブに設定されているため、 ユーザに対して distfile を削除すべきかどうかを確認するプロンプトが表示されます。

これらのコマンドに加え、ports-mgmt/pkg_cutleaves package または port は、 必要なくなった ports を削除する作業を自動化します。

4.6. Poudriere を用いた package の構築

poudriere は、FreeBSD package を作成したり、試験に用いられる BSD ライセンスのユーティリティです。 このユーティリティは、FreeBSD jails を用いて、 独立したコンパイル環境を構築します。 これらの jail を使って、 インストールされている FreeBSD のバージョンとは異なるバージョンの package を作成したり、ホストが amd64 のシステムでは、 i386 用の package を構築することもできます。 構築された package のレイアウトは公式のミラーと同じです。 これらの package は、pkg(8) や他の package 管理ツールで利用できます。

ports-mgmt/poudriere package または port から poudriere をインストールしてください。 アプリケーションをインストールすると、サンプルの設定ファイルである /usr/local/etc/poudriere.conf.sample もインストールされます。 このファイルを /usr/local/etc/poudriere.conf にコピーして、 ローカルの環境に合わせて編集してください。

poudriere を実行するシステムで、 必ずしも ZFS を使う必要はありませんが、 有用です。ZFS を使う際には、 /usr/local/etc/poudriere.conf の中で ZPOOL を指定する必要があります。 そして、FREEBSD_HOST を最も近いミラーに設定してください。 CCACHE_DIR を定義することで、 devel/ccache を使ったコンパイルのキャッシュが可能となり、 コンパイルで頻繁に使われるコードの構築時間を短縮できます。 poudriere データセットを /poudriere にマウントされた独立したツリーに置くと良いでしょう。 他の値はデフォルトの値で十分です。

同時に走らせるコンパイル数の定義には、 認識されたコアプロセッサの数が用いられます。 RAM もしくはスワップ空間のどちらかの仮想メモリを十分用意してください。 もし、仮想メモリを使い切ってしまったら、jail の構築は中断し、 異常なメッセージが表示されることでしょう。

4.6.1. Jails および Port ツリーの初期化

設定が終わったら、poudriere を初期化して、必要とする FreeBSD ツリーおよび jail、 そして ports ツリーをインストールしてください。 jail の名前を -j、 FreeBSD のバージョンを -v で指定してください。 FreeBSD/amd64 システムでは、 -a を使ってアーキテクチャに i386 または amd64 を設定できます。 デフォルトでは、uname で表示されるアーキテクチャに設定されます。

# poudriere jail -c -j 10amd64 -v 10.0-RELEASE
====>> Creating 10amd64 fs... done
====>> Fetching base.txz for FreeBSD 10.0-RELEASE amd64
/poudriere/jails/10amd64/fromftp/base.txz      100% of   59 MB 1470 kBps 00m42s
====>> Extracting base.txz... done
====>> Fetching src.txz for FreeBSD 10.0-RELEASE amd64
/poudriere/jails/10amd64/fromftp/src.txz       100% of  107 MB 1476 kBps 01m14s
====>> Extracting src.txz... done
====>> Fetching games.txz for FreeBSD 10.0-RELEASE amd64
/poudriere/jails/10amd64/fromftp/games.txz     100% of  865 kB  734 kBps 00m01s
====>> Extracting games.txz... done
====>> Fetching lib32.txz for FreeBSD 10.0-RELEASE amd64
/poudriere/jails/10amd64/fromftp/lib32.txz     100% of   14 MB 1316 kBps 00m12s
====>> Extracting lib32.txz... done
====>> Cleaning up... done
====>> Jail 10amd64 10.0-RELEASE amd64 is ready to be used
# poudriere ports -c -p local
====>> Creating local fs... done
====>> Extracting portstree "local"...
Looking up portsnap.FreeBSD.org mirrors... 7 mirrors found.
Fetching public key from ec2-eu-west-1.portsnap.freebsd.org... done.
Fetching snapshot tag from ec2-eu-west-1.portsnap.freebsd.org... done.
Fetching snapshot metadata... done.
Fetching snapshot generated at Tue Feb 11 01:07:15 CET 2014:
94a3431f0ce567f6452ffde4fd3d7d3c6e1da143efec76100% of   69 MB 1246 kBps 00m57s
Extracting snapshot... done.
Verifying snapshot integrity... done.
Fetching snapshot tag from ec2-eu-west-1.portsnap.freebsd.org... done.
Fetching snapshot metadata... done.
Updating from Tue Feb 11 01:07:15 CET 2014 to Tue Feb 11 16:05:20 CET 2014.
Fetching 4 metadata patches... done.
Applying metadata patches... done.
Fetching 0 metadata files... done.
Fetching 48 patches.
(48/48) 100.00%  done.
done.
Applying patches...
done.
Fetching 1 new ports or files... done.
/poudriere/ports/tester/CHANGES
/poudriere/ports/tester/COPYRIGHT

[...]

Building new INDEX files... done.

一つのコンピュータ上で、 複数の設定、複数の jails、異なる port ツリーから poudriere は port をビルドできます。 これらのコンビネーションのカスタム設定は セット と呼ばれます。 詳細については、ports-mgmt/poudriere もしくは ports-mgmt/poudriere-devel をインストール後、 poudriere(8) の CUSTOMIZATION の章をご覧下さい。

ここで示される基本設定では、jail, ports そしてセット固有の make.conf/usr/local/etc/poudriere.d に置いてください。 この例でのファイル名 10amd64-local-workstation-make.conf は、jail 名、port 名そして、セット名の組み合わせで付けられています。 システムの make.conf と、この新しいファイルは、ビルド時に結合され、構築した jail で用いられる make.conf を作成します。

ビルドする package を 10amd64-local-workstation-pkglist に記載してください。

editors/emacs
devel/git
ports-mgmt/pkg
...

特定の ports に対し、 オプションや依存を設定してください。

# poudriere options -j 10amd64 -p local -z workstation -f 10amd64-local-workstation-pkglist

最後に packages を構築し、 package リポジトリを生成してください。

# poudriere bulk -j 10amd64 -p local -z workstation -f 10amd64-local-workstation-pkglist

Ctrl+t は現在のビルド状況を表示します。 Poudriere/poudriere/logs/bulk/jailname にあるファイルも構築します。 このファイルをウェブサーバと共に使うことで、 ビルド情報を表示できます。

これで poudriere リポジトリを package のインストールに利用できるようになりました。

poudriere を利用する上でのより多くの情報については、 poudriere(8) およびメインのウェブサイトである https://github.com/freebsd/poudriere/wiki を参照してください。

4.6.2. Poudriere リポジトリを使うための pkg クライアントの設定

カスタムリポジトリと公式のリポジトリの両方を並行して使用することは可能ですが、 公式リポジトリを無効にすると有用な場合があります。 このように設定するには、設定ファイルを作成し、 設定ファイルの中で公式リポジトリを無効にしてください。 /usr/local/etc/pkg/repos/FreeBSD.conf を作成して、以下を含めてください。

FreeBSD: {
	enabled: no
}

通常は、HTTP 経由で poudriere リポジトリをクライアントコンピュータに公開すると簡単です。 package ディレクトリを公開するようにウェブサーバを設定してください。 通常は /usr/local/poudriere/data/packages/10amd64 のようになります。 ここで 10amd64 は構築名です。

もし、package リポジトリの URL が http://pkg.example.com/10amd64 であれば、 リポジトリの設定ファイルである /usr/local/etc/pkg/repos/custom.conf は、 以下のようになります。

custom: {
	url: "http://pkg.example.com/10amd64",
	mirror_type: "http",
	enabled: yes,
}

4.7. インストール後の作業

バイナリ package もしくは port のどちらを用いてソフトウェアをインストールするかに関わらず、 サードパーティ製のアプリケーションの多くは、 インストール後にある程度の設定を必要とします。 以下のコマンドや場所の情報は、 アプリケーションとともに何がインストールされたかを知るための助けとなるでしょう。

  • 多くのアプリケーションでは、 デフォルトの設定ファイルが、少なくとも一つは /usr/local/etc にインストールされます。 数多くの設定ファイルを持つようなアプリケーションでは、 それらのファイルを格納するためにサブディレクトリを作成するものもあります。 サンプルの設定ファイルは、しばしば .sample といった拡張子がついた名前でインストールされます。 設定ファイルを確認し、 必要に応じてシステムの要求に合うように編集してください。 最初にサンプルファイルを .sample を外した名前のファイルにコピーしてから、編集してください。

  • ドキュメントが付属しているアプリケーションは、 ドキュメントを /usr/local/share/doc にインストールします。また、 多くのアプリケーションは、マニュアルページもインストールします。 これらのドキュメントは、 アプリケーションを使い続ける前に見ておくべきものです。

  • ある種のアプリケーションでは、 サービスを実行するためには、 アプリケーションの起動前に、 /etc/rc.conf に追加する必要があります。 これらのアプリケーションでは、通常、 スタートアップスクリプトが /usr/local/etc/rc.d にインストールされます。詳細は、 サービスの起動 をご覧ください。

  • csh(1) のユーザは、 rehash を実行して、 シェルの PATH のバイナリリストを再構築してください。

  • pkg info を使って、アプリケーションと共にインストールされたファイル、 マニュアルページ、およびバイナリを調べることができます。

4.8. うまく動作しない ports に遭遇した場合には

port をうまくコンパイルできなかったりインストールできない場合には、 以下を試してください。

  1. その port に対する修正案が提出されていないかどうかを 障害報告 (Problem Report) データベース で調べてください。 もし提案されていれば、 その提案されている修正によって問題を解決できるかもしれません。

  2. port の保守担当者に対応してもらいましょう。 port スケルトンで make maintainer と入力するか、 port の Makefile を読み、 保守担当者の電子メールアドレスを調べてください。 保守担当者にメールを送る際には、port の Makefile$FreeBSD: 行、 そしてエラーが出力されるまでの出力ログを忘れずに添付してください。

    注記:

    特定の保守担当者が存在せず、かわりに メーリングリスト が保守している ports があります。 そのような場合には、メールアドレスは のようになります。 メールを送る際には、このことに気をつけてください。

    特に が保守している ports には、保守担当者がいません。 そのかわり、 そのメーリングリストを購読する人々からなるコミュニティが、 修正や対応をおこなっています。 もっとボランティアが必要です!

    メールに対して返信がなければ、 FreeBSD 障害報告の書き方 に書かれている手順にしたがい、 Bugzilla を使ってバグレポートを提出してください。

  3. 自分で直しましょう! ports システムに関する詳細な情報は port 作成者のためのハンドブック にあります。 このセクションを読むと、壊れてしまった port を直したり、 自分で作った port を提出したりできるようになります!

  4. pkg によるバイナリ package の管理」 に書かれている手順にしたがって、 package をインストールしてください。

第5章 X Window System

X.Org X11 サーバ対応: Tom Ken [FAMILY Given]Fonvieille Marc [FAMILY Given].

5.1. この章では

FreeBSD では、ユーザに強力なグラフィカルインタフェースを提供するために X11 を採用しています。 X11 は、 Xorg (他のソフトウェアパッケージについてはここでは述べません) に実装された、 フリーで利用できる X Window System です。 FreeBSD におけるデフォルトかつ公式の X11 サーバは X.Org Foundation が開発している Xorg です。 FreeBSD に似たライセンスに従って配布されています。

X11 がサポートするビデオハードウェアについての情報は、 Xorg のウェブサイトをご覧ください。

この章を読めば以下のことがわかります。

  • X Window System のさまざまなコンポーネントと、 それらが互いにどのように連携しているか。

  • X11 のインストールおよび設定方法

  • さまざまなウィンドウマネージャのインストール方法

  • X11 での TrueType® フォントの使い方

  • GUI ログイン (XDM) の設定方法

この章を読み始める前に以下のことを理解しておく必要があります。

5.2. 用語の説明

X Window System のさまざまなコンポーネントについての詳細や、 それらがどのようにやり取りするかについてすべて理解する必要はありませんが、 これらのコンポーネントについて基本的なことを知っていると、 強力な武器になるでしょう。

X サーバ

X は最初からネットワークを意識してデザインされており、 クライアント - サーバ モデルを採用しています。 このモデルでは、X サーバ はキーボードやモニタ、 マウスが接続されたコンピュータ上で動きます。 このサーバはディスプレイの表示を管理したり、キーボード、 マウスからの入力を処理したり、 タブレットやビデオプロジェクタ等の他の装置からの入出力を処理します。 これは、ある人々を混乱させることがあります。 X での用語は彼らが想定するものとは正反対だからです。 彼らは X サーバ は地下にある大きなパワフルなマシンであり、 X クライアント が自分たちのデスク上にあると想像するのです。

X クライアント

XTermFirefox などの各 X アプリケーションは、 クライアント になります。 クライアントは この座標にウィンドウを描いてください といったメッセージをサーバへ送り、サーバは ユーザが OK ボタンを押しました といったメッセージを送り返します。

家庭や小さなオフィスのような環境では、X サーバと X クライアントは通常同じコンピュータ上で動いています。 X サーバを非力なコンピュータで動かし、 X アプリケーションをより高性能なマシンで動かすことも可能です。 この場合、 X のクライアントとサーバの通信はネットワーク越しに行なわれます。

ウィンドウマネージャ

X はスクリーン上でウィンドウがどのように見えるべきか、 マウスでそれらをどうやって動かすか、 ウィンドウ間を移動するのにどういうキーストロークを使うべきか、 各ウィンドウのタイトルバーはどのように見えるべきか、 クローズボタンを持つべきかどうか、 といったことは規定しません。そのかわりに、X ではそういったことを ウィンドウマネージャ と呼ばれるアプリケーションに任せます。ウィンドウマネージャはたくさん あります。 これらのウィンドウマネージャの見た目や使い勝手はそれぞれ異なっています。 バーチャルデスクトップをサポートしているものもありますし、 デスクトップを操作するキーストロークをカスタマイズできたり、 スタート ボタンやそれに類するものを持っているものもあります。 テーマに対応しており、 デスクトップの見た目や使い勝手を完全に変えられるものもあります。 ウィンドウマネージャは Ports Collection の x11-wm カテゴリに用意されています。

それぞれのウィンドウマネージャは異なる設定機構を備えています。 手で設定ファイルを編集しなければならないものや、 設定作業のほとんどを GUI ツールで行うことができるものもあります。

デスクトップ環境

KDEGNOME は、デスクトップ環境です。 これらは、共通のデスクトップのタスクを実行するための完全なアプリケーションスイートを含んでいます。 オフィススイート、ウェブブラウザやゲームを含んでいるものもあります。

フォーカスポリシ

ウィンドウマネージャは、 マウスのフォーカスポリシに責任を持ちます。 このポリシは、どのウィンドウがアクティブにキーストロークを 受け付けるようにするための方法を提供し、 そして、どのウィンドウがアクティブなのかを示します。

よく知られているフォーカスポリシは click-to-focus と呼ばれるものです。 このポリシは、 あるウィンドウ内でマウスをクリックすればそのウィンドウがアクティブになる、 というものです。 focus-follows-mouse ポリシでは、 マウスポインタの下にいるウィンドウがフォーカスされるというものです。 フォーカスを変えるには他のウィンドウにマウスポインタを動かすだけです。 マウスがルートウィンドウに移動した時には、 このウィンドウがフォーカスされます。 sloppy-focus モデルでは、 マウスがルートウィンドウに移動した時には、 直前に使われていたウィンドウがフォーカスされています。 sloppy-focus では、 ポインタが別のウィンドウに移った時のみフォーカスが変わり、 現在のウィンドウから出ただけでは変わりません。 click-to-focus ポリシでは、 マウスクリックによりアクティブなウィンドウが選択されます。 ウィンドウは前面に表示され、他のすべてのウィンドウの前にきます。 ポインタが別のウィンドウ上に移動した時でも、 すべてのキーストロークがこのウィンドウに届きます。

それぞれのウィンドウマネージャは、 それぞれのフォーカスポリシに対応しています。 すべてのものは click-to-focus をサポートしていますし、 多くのものは他の方法もサポートしています。 どのフォーカスモデルを利用可能かどうかについては、 ウィンドウマネージャのドキュメントをご覧ください。

ウィジェット

ウィジェットはクリック可能であったり、 他の方法で操作可能なすべてのユーザインタフェース用アイテムを指す用語です。 ボタンやチェックボックス、ラジオボタン、アイコン、リスト、などがそうです。 ウィジェットツールキットはグラフィカルアプリケーションを作成するために使われます。 KDE で使われている Qt や GNOME プロジェクトで使われている GTK+ といった有名なウィジェットセットがあります。 そのため、アプリケーションのルックアンドフィールは、 アプリケーションを作成するのに使われたウィジェットツールキットに依存し、 異なります。

5.3. X11 のインストール

FreeBSD における X11 の実装は、Xorg です。 Xorg は X.Org Foundation がリリースしている X Window System のオープンソースな実装です。 XorgXFree86™ 4.4RC2 と X11R6.6 のコードを元にしています。 現在 FreeBSD Ports Collection で利用可能な Xorg のバージョンは 7.7 です。

Ports Collection から Xorg をビルドしインストールするには、以下のように入力します。

# cd /usr/ports/x11/xorg
# make install clean

注記:

Xorg をすべてビルドするには、 少なくとも 4 GB の空き容量が必要です。

package から直接 X11 をインストールすることもできます。 pkg_add(1) ツールで扱われるバイナリパッケージが X11 についても提供されています。 pkg_add(1) のリモート取得機能を利用する時は、 package のバージョンは外してください。 pkg_add(1) は自動的にそのアプリケーションの最新版を取得します。

ですから、Xorg の package を取得してインストールするには、 次のように入力します。

# pkg_add -r xorg

注記:

上記の例では、サーバ、クライアント、フォントなどを含んだ X11 ディストリビューション全体をインストールします。 分割された X11 のパッケージや ports も利用できます。

最小の構成で X11 をインストールをするには、 x11/xorg-minimal をインストールしてください。

この章の残りでは、X11 をどのように設定すればよいか、 また生産性の高いデスクトップ環境をどのように設定するかについて解説します。

5.4. X11 の設定

寄稿: Shumway Christopher [FAMILY Given].

5.4.1. はじめに

X11 は、ほとんどの機器を自動で設定します。 古かったり、一般的ではないような機器を使う場合には、設定を始める前に、 以下のハードウェア情報を集めておくと助けになるでしょう。

  • モニタ同期周波数

  • ビデオカードのチップセット

  • ビデオカードのメモリ

画面の解像度とリフレッシュレートは、 モニタの水平および垂直同期周波数により決定されます。 ほとんどすべてのモニタは、これらの値を自動検出します。 これらの値を自動検出しないモニタもありますが、 こういった仕様は、付属のマニュアルや、 製造元のウェブサイトから取得できます。

ビデオカードのチップセットも自動検出され、 ビデオドライバの選択に使われます。 正常に認識されない時のために、 どのチップセットが使われているかを知っておくとよいでしょう。

ビデオカードのメモリは、 グラフィックアダプタがどの解像度とどの色数で動くことができるかを決めます。

5.4.2. X11 の設定

Xorg は、 HAL を用いてキーボードやマウスを自動認識します。 x11/xorg の依存として、 sysutils/hal および devel/dbus port がインストールされますが、以下のようなエントリを /etc/rc.conf ファイルに追加し、 有効にする必要があります。

hald_enable="YES"
dbus_enable="YES"

これらのサービスは、 Xorg の設定や起動が行われる前に (手動や再起動によって) 起動している必要があります。

Xorg は、設定をすることなく

% startx

と入力するだけで起動します。

ある種のハードウェアは、自動設定で動作しなかったり、 期待したような設定が行われないかもしれません。 そのような場合には、手動で設定する必要があります。

注記:

GNOME, KDE および Xfce などのデスクトップ環境では、 解像度などのスクリーンパラメータを簡単に設定できるツールがあります。 したがって、デフォルトの設定が満足するようなものではない場合でも、 これらのデスクトップ環境をインストールすることを考えているのであれば、 デスクトップ環境をインストールして、 スクリーン設定ツールを利用してください。

X11 の設定は複数の段階を経て行います。 まずは初期設定ファイルを作りましょう。 スーパーユーザになって次のようにしてください。

# Xorg -configure

これにより、/root ディレクトリに xorg.conf.new という X11 の設定ファイルの雛形が生成されます (su(1) か直接ログインのどちらを利用したかが、受け継がれる $HOME 環境変数に影響します)。 X11 プログラムはシステム上のグラフィックハードウェアを検出し、 そのハードウェア用の適切なドライバを読み込む設定ファイルを作ります。

次のステップは、作成した設定ファイルで Xorg がそのグラフィックハードウェアで動くことを確認することです。 以下を実行してください。

# Xorg -config xorg.conf.new -retro

黒とグレーのグリッドと X のマウスポインタが現われればその設定は成功です。 テストを終了するには、コマンドを実行した仮想コンソールに Ctrl+Alt+Fn (1 番目の仮想コンソールへは F1) と入力して切り替え、 Ctrl+C と入力してください。

注記:

Ctrl+Alt+Backspace キーの組み合わせでも Xorg を終了できます。 このキー操作を利用する場合には、 X 端末エミュレータで以下のコマンドを入力してください。

% setxkbmap -option terminate:ctrl_alt_bksp

または、hald 用のキーボード設定ファイル x11-input.fdi を作成して、/usr/local/etc/hal/fdi/policy ディレクトリに保存してください。 このファイルには以下を含める必要があります。

<?xml version="1.0" encoding="iso-8859-1"?>
<deviceinfo version="0.2">
  <device>
    <match key="info.capabilities" contains="input.keyboard">
	  <merge key="input.x11_options.XkbOptions" type="string">terminate:ctrl_alt_bksp</merge>
    </match>
  </device>
</deviceinfo>

hald がこのファイルを読み込むように、 コンピュータを再起動してください。

xorg.conf.newServerLayout もしくは ServerFlags セクションに、以下の行を追加する必要もあるでしょう。

Option	"DontZap"	"off"

もしマウスが動作しなければ、 先へ進む前にマウスの設定を行う必要があります。 さらに、 最近の Xorg では、デバイスの自動認識のため、 xorg.confInputDevice セクションは無視されます。 古い設定の記述を利用するには、 以下の行をファイルの ServerLayout もしくは、 ServerFlags セクションに追加してください。

Option "AutoAddDevices" "false"

これで、以前のバージョンのように、入力デバイスを (キーボードレイアウトの変更のように) 必要なオプションを用いて設定できるようになります。

注記:

すでに説明したように、デフォルトで hald デーモンがキーボードを自動的に認識します。 キーボードレイアウトやモデルを正しく認識しない場合でも、 GNOME, KDE もしくは Xfce のようなデスクトップ環境が、 キーボードの設定ツールを提供している可能性があります。 しかしながら、 setxkbmap(1) ユーティリティや hald の設定を利用することで、 キーボードのプロパティを直接設定できます。

たとえば、フランス語のレイアウトの PC 102 キーボードを使いたい場合には、 hald のキーボード設定ファイル x11-input.fdi を作成し、/usr/local/etc/hal/fdi/policy ディレクトリに保存してください。 このファイルは以下を含んでいる必要があります。

<?xml version="1.0" encoding="iso-8859-1"?>
<deviceinfo version="0.2">
  <device>
    <match key="info.capabilities" contains="input.keyboard">
	  <merge key="input.x11_options.XkbModel" type="string">pc102</merge>
	  <merge key="input.x11_options.XkbLayout" type="string">fr</merge>
    </match>
  </device>
</deviceinfo>

このファイルがすでに存在する場合には、 キーボードの設定に関する部分をただ単にコピーし、 ファイルに追加してください。

hald がこのファイルを読み込むように、 コンピュータを再起動してください。

X 端末やスクリプトから以下のコマンドラインを実行することでも、 同様に設定できます。

% setxkbmap -model pc102 -layout fr

/usr/local/share/X11/xkb/rules/base.lst ファイルは、利用可能なキーボード、レイアウトおよびオプションの一覧です。

次に xorg.conf.new を好みに合うように調整します。 emacs(1)ee(1) のようなテキストエディタでファイルを開いてください。 モニタが古い場合や、通常とは異なるモデルでは、 同期周波数の自動認識に対応していないので、 これらの値を xorg.conf.new"Monitor" セクションに次のように書き加えます。

	Section "Monitor"
        Identifier   "Monitor0"
        VendorName   "Monitor Vendor"
        ModelName    "Monitor Model"
        HorizSync    30-107
        VertRefresh  48-120
	EndSection
      

ほとんどのモニタは同期周波数の自動認識に対応しているので、 これらの値を手動で入力する必要はありません。 自動認識に対応していないモニタでは、 ダメージの可能性を避けるため、 メーカーが提供している値のみを入力してください。

X はモニタが対応していれば DPMS (Energy Star) 機能を使うことができます。 xset(1) プログラムでタイムアウトをコントロールしたり、 強制的にスタンバイ、サスペンドや電源オフにすることができます。 モニタの DPMS 機能を有効にしたい場合は、 "Monitor" セクションに次の行を加えてください。

Option       "DPMS"

xorg.conf.new はエディタで開いたままにしておき、 デフォルトの解像度と色数を好みで選びましょう。 "Screen" セクションに以下のように書きます。

Section "Screen"
        Identifier "Screen0"
        Device     "Card0"
        Monitor    "Monitor0"
        DefaultDepth 24
        SubSection "Display"
                Viewport  0 0
                Depth     24
                Modes     "1024x768"
        EndSubSection
EndSection

DefaultDepth というキーワードは 実行時のデフォルトの色数について記述するためのものです。 Xorg(1) のコマンドラインスイッチ -depth が使用された場合はそちらが優先されます。 Modes というキーワードは、 与えられた色数におけるデフォルトの解像度を記述しておくためのものです。 ターゲットのシステムのグラフィックハードウェアによって定義されている、 VESA スタンダードモードのみがサポートされていることに注意してください。 上の例ではデフォルトの色数はピクセルあたり 24 ビットであり、 この色数での解像度は 1024 ピクセル× 768 ピクセルです。

最後に、設定ファイルを保存し、 上の例にあるようにテストしてみてください。

注記:

トラブルシューティングの過程で手助けするツールのひとつに X11 のログファイルがあります。これには、 X11 サーバが検知したデバイスそれぞれについての情報があります。 Xorg のログファイル名は /var/log/Xorg.0.log という形式です。実際のログファイル名は Xorg.0.log から Xorg.8.log のように変わります。

すべてうまくいったなら、設定ファイルを Xorg(1) が見つけることができる共通の場所に置きます。 これは、通常は /etc/X11/xorg.conf/usr/local/etc/X11/xorg.conf です。

# cp xorg.conf.new /etc/X11/xorg.conf

これで X11 の設定は完了です。 startx(1) ユーティリティで Xorg を起動できます。また、 xdm(1) を使って X11 サーバを起動することもできます。

5.4.3. 高度な設定

5.4.3.1. Intel® i810 グラフィックチップセットの設定

Intel® i810 統合チップセットを設定するには、 X11 にカードを制御させるために AGP プログラミングインタフェースである agpgart が必要になります。 詳しくは、agp(4) ドライバのマニュアルページをご覧ください。

このドライバを用いることで、 他のグラフィックカードと同様に設定を行うことができるようになります。 カーネルに agp(4) ドライバが組み込まれていないシステムでは、 このモジュールを kldload(8) を使って読み込もうとしても動作しないことに注意してください。 このドライバは、 起動時にカーネル内に存在するようにカーネル内部に組み込むか、 /boot/loader.conf を使わなければなりません。

5.4.3.2. ワイドスクリーンフラットパネルの追加

この章では、設定に関する幾分高度な知識を必要とします。 これまでに述べた標準ツールを使って設定に失敗する場合は、 ログファイルを参照してください。 ログファイルには、 設定のために有用な情報が十分含まれています。 テキストエディタを使用する必要があるでしょう。

現在のワイドスクリーン (WSXGA, WSXGA+, WUXGA, WXGA, WXGA+ など) は、 16:10 や 10:9 形式、または (問題を含む可能性のある) 他のアスペクト比に対応しています。 以下は、16:10 アスペクト比のスクリーン解像度の例です。

  • 2560x1600

  • 1920x1200

  • 1680x1050

  • 1440x900

  • 1280x800

これらの解像度のひとつを以下のように "Screen" セクションMode に追加してください。

Section "Screen"
Identifier "Screen0"
Device     "Card0"
Monitor    "Monitor0"
DefaultDepth 24
SubSection "Display"
	Viewport  0 0
	Depth     24
	Modes     "1680x1050"
EndSubSection
EndSection

Xorg は、I2C/DDC を通してワイドスクリーンの解像度に関する情報を取得できるので、 モニタの周波数や解像度の範囲を把握しています。

もし、これらの ModeLines についての情報がドライバに存在しないのであれば、 Xorg にヒントを与えなけれならないでしょう。 ModeLine を手動で設定するのに十分な情報を /var/log/Xorg.0.log から得ることができます。 以下のような情報を探してください。

(II) MGA(0): Supported additional Video Mode:
(II) MGA(0): clock: 146.2 MHz   Image Size:  433 x 271 mm
(II) MGA(0): h_active: 1680  h_sync: 1784  h_sync_end 1960 h_blank_end 2240 h_border: 0
(II) MGA(0): v_active: 1050  v_sync: 1053  v_sync_end 1059 v_blanking: 1089 v_border: 0
(II) MGA(0): Ranges: V min: 48  V max: 85 Hz, H min: 30  H max: 94 kHz, PixClock max 170 MHz

これは EDID と呼ばれる情報です。 この情報を用いて ModeLine を作成するには、 正しい順番に数字を入力するだけです。

 ModeLine <name> <clock> <4 horiz. timings> <4 vert. timings>

この例では "Monitor" セクションの ModeLine は以下のようになります。

Section "Monitor"
Identifier      "Monitor1"
VendorName      "Bigname"
ModelName       "BestModel"
ModeLine        "1680x1050" 146.2 1680 1784 1960 2240 1050 1053 1059 1089
Option          "DPMS"
EndSection

以上の簡単な編集作業が終わったら、 新しいワイドスクリーンモニタ上で X が動作するでしょう。

5.5. X11 でのフォントの使用

寄稿: Stokely Murray [FAMILY Given].

5.5.1. Type1 フォント

X11 に付いてくるデフォルトのフォントは、 通常のデスクトップパブリッシングアプリケーションにとっては理想的とは言えない程度のものです。 文字を大きくするとジャギーになりプロフェッショナルとは言えないようなものになりますし、 小さなフォントは頭が悪そうに見えます。 しかし、世の中には質の高い Type1 (PostScript®) フォントがいくつかあり、 X11 ではそれらを簡単に利用することができます。 例えば、URW フォントコレクション (x11-fonts/urwfonts) には高品質の Type1 フォント (Times Roman®, Helvetica®, Palatino® など) が含まれています。freefont コレクション (x11-fonts/freefonts) にはもっとたくさんのフォントが含まれていますが、 それらは Gimp のようなグラフィックソフトウェアで使用するためのものであり、 スクリーンフォントとしては十分ではありません。さらに、X11 は簡単に TrueType® フォントを使うように設定することも可能です。 詳しくは、X(7) のマニュアルページか TrueType® フォントの節 を参照してください。

上記の Type1 フォントコレクションを Ports Collection から入れる場合には次のコマンドを実行してください。

# cd /usr/ports/x11-fonts/urwfonts
# make install clean

freefont や他のコレクションでも同じようにします。 X サーバがこれらのフォントを検出できるようにするには X サーバ設定ファイル (/etc/X11/xorg.conf) の適切な場所に次のような行を加えます。

FontPath "/usr/local/lib/X11/fonts/URW/"

別の方法としては、 X のセッション中に次のようなコマンドラインを実行します。

% xset fp+ /usr/local/lib/X11/fonts/URW
% xset fp rehash

これは動くのですが、X のセッションが終了すると消えてしまいます。 消えないようにするには X の起動時に読み込まれるファイル (通常の startx セッションの場合は ~/.xinitrc, XDM のようなグラフィカルなログインマネージャを通してログインする時は ~/.xsession) に加えておきます。 三番目の方法は新しい /usr/local/etc/fonts/local.conf ファイルを使うことです。 これに関しては アンチエイリアス 節をご覧ください。

5.5.2. TrueType® フォント

Xorg には、 TrueType® フォントのレンダリング機能が組み込まれています。 この機能を実現するために 2 つの異なるモジュールがあります。 ここでは、freetype の方が他のフォントレンダリングバックエンドと整合性が高いので、 このモジュールを使うことにします。 freetype モジュールを使うためには /etc/X11/xorg.conf ファイルの "Module" セクションに以下の行を追加するだけです。

Load  "freetype"

さて、まずは TrueType® フォント用のディレクトリ (例えば /usr/local/lib/X11/fonts/TrueType) を作り、そこに TrueType® フォントをすべて放り込みましょう。 Macintosh® の TrueType® フォントは、そのままでは使うことができませんので注意してください。 X11 で使うには UNIX®/MS-DOS®/Windows® 用のフォーマットでなければなりません。 ファイルを置いたら ttmkfdir を使って fonts.dir ファイルを作り、 X のフォントレンダラが新しいファイルがイントールされたことを分かるようにしてください。 ttmkfdir は FreeBSD Ports Collection の x11-fonts/ttmkfdir からインストールできます。

# cd /usr/local/lib/X11/fonts/TrueType
# ttmkfdir -o fonts.dir

次に TrueType® フォントのディレクトリをフォントパスに追加します。 上の Type1 フォントの場合と同じように、

% xset fp+ /usr/local/lib/X11/fonts/TrueType
% xset fp rehash

とするか、もしくは xorg.conf ファイルに FontPath 行を追加します。

これで終わりです。 GimpApache OpenOffice といったすべての X アプリケーションから TrueType® フォントを使うことができます。 (高解像度なディスプレイで見るウェブページ上のテキストみたいな) とても小さなフォントや (StarOffice にあるような) 非常に大きなフォントもかなり綺麗に見えるようになることでしょう。

5.5.3. フォントのアンチエイリアス

更新 : Clarke Joe Marcus [FAMILY Given].

/usr/local/lib/X11/fonts/~/.fonts/ にあるすべての X11 のフォントが、Xft に対応しているアプリケーションで自動的にアンチエイリアス表示できるようになりました。 KDE, GNOME および Firefox のような最新のアプリケーションは、Xft に対応しています。

どのフォントがアンチエイリアスされるかを制御するため、 もしくはアンチエイリアスの特性を設定するために、 /usr/local/etc/fonts/local.conf ファイルを作成 (すでに存在しているのなら編集) します。 多くの Xft フォントシステムの高度な機能をこのファイルを使って調整できます。 この節ではいくつか簡単なところだけを紹介します。 詳しくは、fonts-conf(5) をご覧ください。

このファイルは XML 形式でなければなりません。 大文字小文字の区別に注意を払い、 すべてのタグが正しく閉じられているか確認してください。 ファイルは一般的な XML ヘッダで始まり、DOCTYPE 定義と <fontconfig> タグがその後にきます。

        <?xml version="1.0"?>
        <!DOCTYPE fontconfig SYSTEM "fonts.dtd">
        <fontconfig>
      

すでに説明したように、 /usr/local/lib/X11/fonts/~/.fonts/ にあるすべてのフォントは Xft 対応のアプリケーションで利用できます。 これら 2 つ以外に別のディレクトリを追加したいのなら、 /usr/local/etc/fonts/local.conf に以下のような行を追加します。

<dir>/path/to/my/fonts</dir>

新しいフォント、 そして特に新しいフォントディレクトリを追加したら、 以下のコマンドを実行してフォントキャッシュを再構築してください。

# fc-cache -f

アンチエイリアスをかけることによって境界が少しぼやけ、 そのためにとても小さなテキストはさらに読みやすくなり、 大きなフォントでは ギザギザ が消えるのです。 しかし、普通のテキストにかけた場合には目が疲れてしまうこともあります。 14 ポイント以下のサイズのフォントについて、 アンチエイリアスをかけないようにするには次の行を加えます。

        <match target="font">
            <test name="size" compare="less">
                <double>14</double>
            </test>
            <edit name="antialias" mode="assign">
                <bool>false</bool>
            </edit>
        </match>
        <match target="font">
            <test name="pixelsize" compare="less" qual="any">
                <double>14</double>
            </test>
            <edit mode="assign" name="antialias">
                <bool>false</bool>
            </edit>
        </match>

いくつかの等幅フォントは、 アンチエイリアスをかけるとスペーシングがうまくいかなくなる場合があります。 特に KDE でその傾向があるようです。 解決策の一つとして、そういったフォントのスペーシングを 100 に設定する方法があります。 そうするためには次の行を加えてください。

        <match target="pattern" name="family">
            <test qual="any" name="family">
                <string>fixed</string>
            </test>
            <edit name="family" mode="assign">
                <string>mono</string>
            </edit>
        </match>
        <match target="pattern" name="family">
            <test qual="any" name="family">
                <string>console</string>
            </test>
            <edit name="family" mode="assign">
                <string>mono</string>
            </edit>
        </match>

(これは固定サイズのフォントに "mono" という一般的な別名をつけます) そして以下を追加します。

        <match target="pattern" name="family">
            <test qual="any" name="family">
                <string>mono</string>
            </test>
            <edit name="spacing" mode="assign">
                <int>100</int>
            </edit>
        </match>

Helvetica の様なある種のフォントは、 アンチエイリアスすると問題が起こるでしょう。 たいてい、フォントが縦に半分に切られて表示されます。 最悪の場合、アプリケーションがクラッシュします。 これを回避するには、以下を local.conf に追加します。

        <match target="pattern" name="family">
            <test qual="any" name="family">
                <string>Helvetica</string>
            </test>
            <edit name="family" mode="assign">
                <string>sans-serif</string>
            </edit>
        </match>

local.conf の編集を終えたら、 ファイルの末尾が </fontconfig> タグで終わるようにしてください。 これを行わなければ、変更は無視されるでしょう。

最後に、ユーザは自分だけの設定を各自の .fonts.conf ファイルに追加できます。 これを行うためには、それぞれのユーザが単に ~/.fonts.conf を作成するだけです。 このファイルも XML 形式でなければなりません。

最後に一つ。LCD スクリーンではサブピクセルサンプリングが必要な場合があります。 これは、基本的には (水平方向に分かれている) 赤、緑、 青の各コンポーネントを別々に扱うことによって水平方向の解像度を良くするというもので、 劇的な結果が得られます。 これを有効にするには local.conf ファイルに次の行を加えます。

        <match target="font">
            <test qual="all" name="rgba">
                <const>unknown</const>
            </test>
            <edit name="rgba" mode="assign">
                <const>rgb</const>
            </edit>
        </match>
      

注記:

ディスプレイの種類にもよりますが、 rgb ではなく bgrvrgb、もしくは vbgr の場合もあるので、 試してみて最も良いものを使ってください。

5.6. X ディスプレイマネージャ

寄稿: Kingsley Seth [FAMILY Given].

5.6.1. 概要

X ディスプレイマネージャ (XDM) は X Window System のオプショナルな一部分であり、 ログインセッションの管理に用います。 最低限の機能を実装した X 端末 やデスクトップ、 大規模なネットワークディスプレイサーバといった場面ではこれが有用です。 X Window System はネットワークとプロトコルから独立しているため、 ネットワークで繋がれた X のクライアントとサーバを動かすための設定はかなり幅が広くなります。 XDM はどのディスプレイサーバに接続するかを選択でき、 ログイン名とパスワードの組み合わせなど認証情報を入力できるグラフィカルなインタフェースを提供しています。

XDM がユーザに getty(8) (詳しくは 「設定」 をご覧ください) と同じ機能を提供することを考えてみてください。 つまり、ディスプレイ上でシステムへのログインができ、 ユーザの代わりにセッションマネージャ (通常は X のウィンドウマネージャ) を起動することができるのです。 それから XDM は、 ユーザが作業を終えてディスプレイからログアウトする合図を送ってきてプログラムが終了するのを待ちます。 この時点で、XDM は次にログインするユーザのためにログイン画面や chooser 画面を表示できます。

5.6.2. XDM の使用

XDM を使用するには、 x11/xdm port をインストールしてください (最近の Xorg のバージョンでは、 デフォルトでインストールされません)。 XDM のデーモンプログラムは /usr/local/bin/xdm にあります。 このプログラムは root になればいつでも起動することができ、 ローカルマシン上のディスプレイの管理を始めます。 マシンをブートする際、いつも XDM を起動したい場合には、/etc/ttys にそのためのエントリを加えておくのが簡単です。 このファイルのフォーマットや使用方法についての詳細は /etc/ttys へのエントリの追加」 を参照してください。 デフォルトの /etc/ttys ファイルには仮想端末上で XDM デーモンを起動するための行:

ttyv8	"/usr/local/bin/xdm -nodaemon"	xterm	off secure

があります。 このエントリはデフォルトでは無効になっており、有効にするには 5 番目のカラムを off から on にし、init にファイル /etc/ttys の再読み込みをさせる」 の指示に従って init(8) を再起動します。 最初のカラムはこのプログラムが管理する端末の名前で、この場合 ttyv8 になります。 つまり、XDM は 9 番目の仮想端末で起動されるということです。

5.6.3. XDM の設定

XDM の設定用ディレクトリは /usr/local/lib/X11/xdm です。 このディレクトリには XDM の振る舞いや見た目を変更するために用いられるいくつかのファイルがあります。 だいたいは以下のような感じです。

ファイル説明
Xaccessクライアント認証のルールセット
Xresourcesデフォルトの X リソース
Xservers管理すべきリモートやローカルのディスプレイのリスト
Xsessionデフォルトのログイン時のセッションスクリプト
Xsetup_*ログインインタフェースの前にアプリケーションを起動するためのスクリプト
xdm-configこのマシンで動いているすべてのディスプレイのグローバルな設定
xdm-errorsサーバプログラムによって生成されるエラー
xdm-pid現在動いている XDM のプロセス ID

このディレクトリにはまた、XDM の動作中にデスクトップをセットアップするために用いられるスクリプトやプログラムがいくつかあります。 それぞれのファイルの目的を簡単に解説しましょう。 正確な文法や使い方は xdm(1) に記述されています。

デフォルトの設定では、単純な四角のログインウィンドウがあり、 そこにはマシンのホスト名が大きなフォントで表示され、 Login:Password: のプロンプトがその下に表示されています。 XDM スクリーンの見ためや使い勝手を変えるにはここから始めるのがいいでしょう。

5.6.3.1. Xaccess

XDM がコントロールするディスプレイに接続するためのプロトコルは X Display Manager Connection Protocol (XDMCP) と呼ばれます。 このファイルにはリモートのマシンからの XDMCP 接続をコントロールするためのルールセットが書かれます。 これは、xdm-config を変更してリモートからのコネクションを待ち受けるようにしない限り無視されます。 デフォルトでは、どのクライアントからの接続も拒否します。

5.6.3.2. Xresources

これはディスプレイの chooser とログインスクリーン用の application-defaults ファイルです。 このファイルでログインプログラムの見た目を変更することができます。 フォーマットは X11 のドキュメントで記述されている app-defaults ファイルのものと同じです。

5.6.3.3. Xservers

これは、chooser が選択肢として提供するリモートのディスプレイの一覧です。

5.6.3.4. Xsession

XDM でログインした後に実行されるデフォルトのセッションスクリプトです。 通常、各ユーザは ~/.xsession というカスタマイズしたセッションスクリプトを持っており、 こちらが優先されます。

5.6.3.5. Xsetup_*

これらは chooser やログインインタフェースが表示される前に自動的に実行されます。 それぞれのディスプレイに対して、Xsetup_ に続けてローカルのディスプレイ番号を付けた (たとえば Xsetup_0) 名前のついたスクリプトがあります。 典型的な使い方は xconsole のようなバックグラウンドで動かすプログラムを一つか二つ起動することです。

5.6.3.6. xdm-config

app-defaults の書式で書かれた、 このインストレーションで管理されるすべてのディスプレイに適用される設定を保持しています。

5.6.3.7. xdm-errors

このファイルには XDM が起動しようとしている X サーバからの出力が書き出されます。 XDM が起動しようとしているディスプレイがなんらかの理由でハングした場合、 このファイルのエラーメッセージを見てください。 そういったメッセージは各ユーザの ~/.xsession-errors にもセッション毎に書き出されます。

5.6.4. ネットワークディスプレイサーバの起動

あるディスプレイサーバに他のクライアントが接続することができるようにするために、 アクセスコントロールのルールを編集し、 コネクションリスナを有効にする必要があります。 デフォルトでは保守的な設定になっています。 XDM がそういったコネクションを待ち受けるようにするためには xdm-config にある次の行をコメントアウトします。

! SECURITY: do not listen for XDMCP or Chooser requests
! Comment out this line if you want to manage X terminals with xdm
DisplayManager.requestPort:     0

そして、XDM を再起動します。 app-defaults ファイルにおけるコメントは ! であっていつものような # ではないことに注意してください。 アクセス制限はもっと厳しくしてもよいかもしれません。 Xaccess にある例を参考にしたり、詳細についてオンラインマニュアル xdm(1) を参照してください。

5.6.5. XDM の代わりになるもの

デフォルトの XDM に代わるものがいくつかあります。 一つは KDM (KDE に付属しています) はその一つであり、この章の後ろで解説します。 KDM ディスプレイマネージャは、 ログイン時にウィンドウマネージャを選ぶことができるのに加え、 見た目もかなり綺麗にしてくれます。

5.7. デスクトップ環境

寄稿: Vaschetto Valentino [FAMILY Given].

このセクションでは、FreeBSD 上の X で利用可能ないくつかのデスクトップ環境について解説します。 デスクトップ環境 とは、 単なるウィンドウマネージャから KDEGNOME といったような完全なデスクトップアプリケーションスイートまでカバーします。

5.7.1. GNOME

5.7.1.1. GNOME について

GNOME はユーザフレンドリなデスクトップ環境で、 ユーザはコンピュータを簡単に使ったり設定したりできるようになります。 GNOME にはパネル (アプリケーションを起動したり状態を表示したりするもの)、 デスクトップ (データやアプリケーションが置かれる場所)、 標準的なデスクトップツールやアプリケーションのセット、 そしてアプリケーションが互いにうまくやり取りできるような仕組みが含まれています。 他の OS や環境に慣れている人でも GNOME の提供するグラフィック環境であれば心地よく感じるでしょう。 FreeBSD 上の GNOME に関するもっと詳しい情報は、 FreeBSD GNOME Project のウェブサイトで見ることができます。 ウェブサイトには、GNOME のインストール、設定、管理に関する非常に分かりやすい FAQ も用意されています。

5.7.1.2. GNOME のインストール

package や Ports Collection を利用してソフトウェアを簡単にインストールできます。

GNOME package をネットワークからインストールするには、 以下のようにするだけです。

# pkg_add -r gnome2

pkgng ユーザは、 以下のコマンドを使用してください。

# pkg install gnome2

GNOME をソースから構築する場合、 次のように ports ツリーを使いましょう。

# cd /usr/ports/x11/gnome2
# make install clean

GNOME を適切に動作させるには、 /proc ファイルシステムをマウントする必要があります。 以下を /etc/fstab に追加して、起動中に procfs(5) をマウントするように設定してください。

proc           /proc       procfs  rw  0   0

GNOME がインストールできたら、 デフォルトのウィンドウマネージャの代わりに GNOME を起動するように X サーバに指示しなければなりません。

GNOME を起動する最も簡単な方法は、GNOME ディスプレイマネージャ GDM を使うことです。 GDM は、 GNOME デスクトップの一部としてインストールされますが、 デフォルトでは無効になっています。 有効にするには、以下の行を /etc/rc.conf に追加してください。

gdm_enable="YES"

再起動すると、GDM が自動的に起動します。

GNOME のすべてのサービスを、 GDM とともに起動するようにしておくと良いでしょう。 このように設定するには、以下の行を /etc/rc.conf ファイルに追加してください。

gnome_enable="YES"

GNOME.xinitrc という名前のファイルを適切に設定することで、 コマンドラインから起動することもできます。 自分の .xinitrc が既にある場合には、ウィンドウマネージャを起動する行を /usr/local/bin/gnome-session を起動するように変更するだけです。 特にこのファイルを用意していない場合には、 次のようにすれば十分でしょう。

% echo "/usr/local/bin/gnome-session" > ~/.xinitrc

次に、startx と入力すれば GNOME デスクトップ環境が起動します。

注記:

もし XDM のような古いディスプレイマネージャを使っているなら、 この方法ではうまくいきません。その代わり、実行可能な .xsession というファイルを作成し、 同じコマンドを起動するようにします。 そのためには、このファイルを編集してウィンドウマネージャを /usr/local/bin/gnome-session で置き換えます。

% echo "#!/bin/sh" > ~/.xsession
% echo "/usr/local/bin/gnome-session" >> ~/.xsession
% chmod +x ~/.xsession

もう一つの方法は、 ログイン時にウィンドウマネージャを選択できるようにディスプレイマネージャを設定することです。 KDE の詳細についてのセクションで KDE のディスプレイマネージャである KDM を使ってどのようにすればいいのかを解説しています。

5.7.2. KDE

5.7.2.1. KDE について

KDE は最近の簡単に使えるデスクトップ環境です。 KDE によりユーザは以下のようなメリットを亨受します。

  • 美しい現代風のデスクトップ

  • ネットワーク透過なデスクトップ

  • KDE デスクトップやそのアプリケーションを使う際に、 ヘルプへのアクセスを便利で統一されたものにする統合されたヘルプシステム

  • すべての KDE アプリケーションで統一された見ためや使い勝手

  • 標準化されたメニュー、ツールバー、 キーバインディング、カラースキームなど

  • 国際化: KDE は 55 を越える言語で利用可能

  • 一元的で、首尾一貫した、ダイアログベースのデスクトップ設定

  • 膨大な数の KDE アプリケーション

KDE には Konqueror と呼ばれるウェブブラウザも付属しており、これは UNIX® システム上の他のウェブブラウザの強力な競争相手です。 KDE の詳細については KDE のウェブサイト をご覧ください。 KDE に関する FreeBSD 特有の情報とリソースについては、 KDE/FreeBSD initiative のウェブサイトをご覧ください。

5.7.2.2. KDE のインストール

GNOME や他のデスクトップ環境とまったく同じように、 package や Ports Collection から簡単にインストールできます。

KDE 4 package をネットワーク越しにインストールするには次のようにします。

# pkg_add -r kde4

pkg_add(1) は自動的にアプリケーションの最新版を取得します。

pkgng ユーザは、 以下のコマンドを使用してください。

# pkg install kde4

KDE をソースから構築するには、次のように ports ツリーを使いましょう。

# cd /usr/ports/x11/kde4
# make install clean

port を最初にインストールするときには、 オプションを選択するメニューが表示されます。 デフォルトが推奨されます。

KDE 4 は大きなアプリケーションのため、 高速のコンピュータでもコンパイルに長い時間がかかります。

KDE がインストールできたら X サーバに、デフォルトのウィンドウマネージャの代わりにこのアプリケーションを立ち上げるように教えます。 .xinitrc ファイルを次のように編集しましょう。

% echo "exec /usr/local/kde4/bin/startkde" > ~/.xinitrc

さぁ、これで startx でいつ X Window System を立ち上げても KDE がデスクトップになります。

XDM のようなディスプレイマネージャを使っている場合、 設定は少し異なります。代わりに .xsession ファイルを編集しましょう。 KDM 用の説明はこの章の後のほうにあります。

5.7.3. KDE の詳細について

さぁ、KDE のインストールができました。 ほとんどのことはヘルプページを見たりいろんなメニューをつつけばわかるでしょう。 Windows® や Mac® のユーザにも簡単なはずです。

KDE の最も良いリファレンスはオンラインドキュメントです。 KDE には独自のウェブブラウザ Konqueror が付属していますし、 膨大な数の便利なアプリケーションや詳しいドキュメントも用意されています。 このセクションの残りではなんとなく使っているだけでは理解し難い技術的なところを解説します。

5.7.3.1. KDE ディスプレイマネージャ

マルチユーザシステムの管理者であれば、 ユーザを迎えるにあたってグラフィカルなログイン画面が欲しいと思うかもしれません。 前の章で述べたように XDM はそのために使えますが、 KDE にはその代わりになる KDM が付いています。 見た目がより魅力的で、ログイン時のオプションもたくさんあります。 特に (メニューを使って) ログイン後に使うデスクトップ環境 (KDEGNOME など) を簡単に選ぶことができます。

KDE 4 では、 procfs(5) をマウントする必要があります。 /etc/rc.conf に以下の行を追加してください。

kdm4_enable="YES"

5.7.4. Xfce

5.7.4.1. Xfce について

XfceGNOME で使われている GTK+ ツールキットをベースにしたデスクトップ環境ですが、 ずっと軽いので、 シンプルで効率的でありながら使いやすく設定が簡単なデスクトップ環境を求める人に向いています。 見ためは商用 UNIX® システムが採用している CDE にかなり似ています。Xfce の機能をいくつか以下に挙げます。

  • シンプルで使いやすいデスクトップ

  • マウスのドラッグアンドドロップなどですべての設定が可能

  • CDE に似たメインパネルとメニューやアプレット、 アプリケーションランチャ

  • 統合されたウィンドウマネージャ、ファイルマネージャ、 サウンドマネージャと GNOME 準拠のモジュールなど

  • (GTK+ なので) テーマをサポート

  • 速くて軽くて効率的: 古いマシンや遅いマシン、 メモリの限られたマシンに向いています

Xfce に関する詳しい情報は Xfce のウェブサイト で得られます。

5.7.4.2. Xfce のインストール

Xfce をネットワークからインストールするには、 次のように実行してください。

# pkg_add -r xfce4

pkgng ユーザは、 以下のコマンドを使用してください。

# pkg install xfce4

また、Ports Collection を利用してソースからインストールすることも可能です。

# cd /usr/ports/x11-wm/xfce4
# make install clean

インストール後、次回 X を起動した時に Xfce が立ち上がるように設定します。 次のようにしてください。

% echo "/usr/local/bin/startxfce4" > ~/.xinitrc

X を次に起動すると Xfce が立ち上がります。 XDM のようなディスプレイマネージャを使っている場合には、 GNOME のセクションに書いてあるように .xsession ファイルを作成し、 /usr/local/bin/startxfce4 を起動するように追加します。 または KDM のセクションにあるように、 ログイン時にディスプレイマネージャからデスクトップ環境を選択できるように設定してください。

パート〓II.〓日々の生活

第 1 部では基礎的なことがらを説明したので、 FreeBSD ハンドブックの第 2 部では FreeBSD でよく使われる機能について説明します。 各章の内容は以下のとおりです。

  • ブラウザ、生産的なツール、ドキュメントビューアといった、 人気があって便利なデスクトップアプリケーションの紹介

  • FreeBSD で利用可能なマルチメディアツールの紹介

  • システムで特別な機能を有効にするために、 カスタムカーネルを構築する手順の説明

  • デスクトップおよびネットワーク接続両方のプリンタの設定に関する、 印刷システムの詳細な説明

  • FreeBSD システムで Linux アプリケーションを実行する方法

これらの章では、読み飛ばしを推奨しているものもあります。 これについてはそれぞれの章の始めにある概要に書かれています。

第6章 デスクトップアプリケーション

6.1. この章では

FreeBSD は性能や安定性によりサーバとして人気がある一方で、 日々のデスクトップとしての利用にも適しています。 packages や ports から 24,000 を超えるアプリケーションを利用できるので、 さまざまなアプリケーションを動かせるようにカスタマイズしたデスクトップを作り上げることができます。 この章では、ウェブブラウザ、生産的なソフトウェア、ドキュメントビューア、 および財務管理ソフトウェアといった、 数多くのデスクトップアプリケーションのインストール方法について説明します。

注記:

一から構築するのではなく、 事前に構築されたデスクトップバージョンの FreeBSD をお望みのユーザは、pcbsd.org ウェブサイト をご覧ください。

この章の読者は、以下のことを理解しておく必要があります。

マルチメディア環境を整える方法については 7章マルチメディア を参照してください。

訳注:

この文書は英語で書かれている原文をそのまま邦訳したものです。 必ずしも各アプリケーションで日本語が扱えるとは限らないことに注意してください。 日本語に対応したアプリケーションは、Ports Collection の japanese ディレクトリにあるかもしれません。

6.2. ブラウザ

FreeBSD では Web ブラウザは事前にインストールされていません。 そのかわり、Ports Collection の www カテゴリには数多くの Web ブラウザ が用意されており、 多くのプログラムを packages からインストールしたり、 Ports Collection からコンパイルできます。

KDEGNOME デスクトップ環境には、 それぞれ HTML ブラウザが用意されています。 これらのデスクトップ環境を設定するための情報については 「デスクトップ環境」 を参照してください。

軽量なブラウザには、 www/dillo2, www/links, および www/w3m といったものがあります。

この節では、広く使われている以下の web ブラウザのインストール方法について説明します。 もし、アプリケーションがリソースを大量に消費したり、 ports からのコンパイルに時間がかかったり、 他の ports に大きく依存する場合には、そのことについても触れます。

アプリケーション名必要なリソースport からのインストール備考
FirefoxFreeBSD, Linux® および地域化されたバージョンを利用できます。
OperaFreeBSD と Linux® 版を利用できます。
KonquerorKDE ライブラリを必要とします。
ChromiumGtk+ を必要とします。

6.2.1. Firefox

Firefox は、 FreeBSD に完全に対応したオープンソースのブラウザです。 標準に準拠した HTML 表示エンジン、タブブラウジング、ポップアップブロック、 拡張性、高い安全性などが特徴です。 FirefoxMozilla のコードベースから派生したブラウザです。

最新の Firefox の package をインストールするには以下のように入力してください。

# pkg install firefox

Firefox 延長サポート版 (ESR: Extended Support Release) を利用したい場合には、 かわりに以下のように入力してください。

# pkg install firefox-esr

ローカライズ版は、www/firefox-i18n および www/firefox-esr-i18n から利用できます。

かわりにソースコードから希望の firefox をコンパイルすることもできます。 この例では www/firefox をビルドしますが、 firefox の部分は、 インストールする ESR やローカライズに置き換えることもできます。

# cd /usr/ports/www/firefox
# make install clean

6.2.1.1. Firefox と Java™ プラグイン

Firefox をインストールしただけでは、 Java™ には対応していません。 java/icedtea-web は、 Java アプレットを実行するための、 フリーソフトの web ブラウザのプラグインです。 package からインストールできます。port からコンパイルするには、 以下のようにしてください。

# cd /usr/ports/java/icedtea-web
# make install clean

ports をコンパイルする際のコンフィグレーションオプションは、 デフォルトのままにしてください。

インストールしたら、ブラウザを起動し、ロケーションバーに about:plugins と入力して Enter を押してください。 インストールされているプラグイン一覧のページが表示されます。 Java プラグインが一覧に追加されているでしょう。

プラグインが一覧に追加されていない場合には、 ユーザごとに以下のコマンドを実行し、ブラウザを再起動してください。

% ln -s /usr/local/lib/IcedTeaPlugin.so \
  $HOME/.mozilla/plugins/

6.2.1.2. Firefox と Adobe® Flash® プラグイン

FreeBSD 用の Adobe® Flash® プラグインは提供されていませんが、 Linux® 版のプラグインを実行するためのソフトウェア wrapper を利用できます。 この wrapper は、RealPlayer® プラグインといった他のブラウザのプラグインにも対応しています。

プラグインをインストールして有効にするには、 以下を実行してください。

  1. port から www/nspluginwrapper をインストールしてください。 ライセンスの制限のため package は利用できません。 この port は、emulators/linux_base-c6 を必要とします。

  2. port から www/linux-c6-flashplugin11 をインストールしてください。 ライセンスの制限により、package は利用できません。

  3. プラグインを最初に使う前に、 ユーザごとに以下を実行しておく必要があります。

    % nspluginwrapper -v -a -i

    プラグインの port がアップデートされ、 再インストールされた際には、 各ユーザは以下を実行する必要があります。

    % nspluginwrapper -v -a -u

    ブラウザを起動し、ロケーションバーに about:plugins と入力して Enter を押してください。 現在利用可能なプラグインの一覧が表示されます。

6.2.1.3. Firefox と Swfdec Flash® プラグイン

SwfdecFlash® アニメーションのデコーダーおよびレンダラーです。 Swfdec-Mozilla は、 Firefox ブラウザにおいて SWF ファイルを実行するためのプラグインで、 Swfdec ライブラリを利用しています。

package をインストールするには、以下を実行してください。

# pkg install swfdec-plugin

package を利用できない場合は、Ports Collection からコンパイルしてインストールしてください。

# cd /usr/ports/www/swfdec-plugin
# make install clean

その後、ブラウザを再起動してプラグインを有効にしてください。

6.2.2. Opera

Opera は、 機能満載で、標準規格に準拠したブラウザで、 軽量で高速です。 メールおよびニュースリーダや、IRC クライアント、 RSS/Atom フィードリーダ、その他いろいろなものが組み込まれています。 FreeBSD ネイティブ版と、Linux® バイナリ互換機能によって動作するバージョンを利用できます。

以下のコマンドは、FreeBSD 版の Opera package をインストールします。 Linux® 版をインストールするには、 operalinux-opera に置き換えてください。

# pkg install opera

あるいは Ports Collection からインストールしてください。 以下のコマンドで、ネイティブ版がインストールされます。

# cd /usr/ports/www/opera
# make install clean

Linux® 版の Opera をインストールするには、operalinux-opera に置き換えてください。

Adobe® Flash® プラグインをインストールするには、 まず www/linux-c6-flashplugin11 port をコンパイルしてください。 ライセンスの制限により package は利用できません。 その後、www/opera-linuxplugins をインストールしてください。 以下の例では、両方のアプリケーションを ports からコンパイルします。

# cd /usr/ports/www/linux-c6-flashplugin11
# make install clean
# cd /usr/ports/www/opera-linuxplugins
# make install clean

インストールが終了したら、 プラグインがインストールされたかどうかをブラウザを起動して確認してください。 ロケーションバーに about:plugins と入力して Enter を押してください。 現在利用可能なプラグインの一覧が表示されます。

Java プラグインを追加するには、 「Firefox と Java™ プラグイン」 に書かれている手順に従ってください。

6.2.3. Konqueror

Konqueror はブラウザであると同時に、 ファイルマネージャおよびマルチメディアビューアの役割も果たします。 x11/kde4-baseapps package または port に含まれています。

Konqueror は、KHTML とともに、WebKit にも対応しています。WebKit は Chromium など最近のブラウザの多くで採用されているレンダリングエンジンです。 FreeBSD の Konqueror で WebKit を使うには、www/kwebkitpart package または port をインストールしてください。 以下の例では、port をコンパイルします。

# cd /usr/ports/www/kwebkitpart
# make install clean

Konqueror で、WebKit を有効にするには、 Settings, Configure Konqueror をクリックしてください。 General の設定ページにおいて、 Default web browser engine の隣の ドロップダウンメニューをクリックし、WebKitKHTML に変更してください。

KonquerorFlash® にも対応しています。 KonquerorFlash® を導入するための How To ガイドが http://freebsd.kde.org/howtos/konqueror-flash.php にあります。

6.2.4. Chromium

Chromium は、 オープンソースのブラウザのプロジェクトで、 より安全かつより高速、 より安定したウェブブラウジングを目指しています。 Chromium は、タブブラウジング、 ポップアップブロック、拡張機能などの機能を持っています。 Chromium は、Google Chrome ウェブブラウザがベースとしているオープンソースのプロジェクトです。

Chromium は、 以下のように入力することで package からインストールできます。

# pkg install chromium

または、Ports Collection を用いて ソースから Chromium をコンパイルしてインストールできます。

# cd /usr/ports/www/chromium
# make install clean

注記:

Chromium の実行可能ファイルは、 /usr/local/bin/chrome です。 /usr/local/bin/chromium ではありません。

6.2.4.1. Chromium と Java™ プラグイン

Chromium をインストールしただけでは、 Java™ には対応していません。 Java™ プラグインをインストールするには、 「Firefox と Java™ プラグイン」 に書かれている手順に従ってください。

Java™ のサポートをインストールしたら、 Chromium を起動し、アドレスバーに、 about:plugins と入力してください。 インストールされているプラグインの一覧に IcedTea-Web が追加されているはずです。

Chromium に IcedTea-Web プラグインが追加されていない場合には、 以下のコマンドを実行し、ブラウザを再起動してください。

# mkdir -p /usr/local/share/chromium/plugins
# ln -s /usr/local/lib/IcedTeaPlugin.so \
  /usr/local/share/chromium/plugins/

6.2.4.2. Chromium と Adobe® Flash® プラグイン

ChromiumAdobe® Flash® の設定は、「Firefox と Adobe® Flash® プラグイン」 に書かれている手順と同じです。 Chromium は、他のブラウザのプラグインを用いることができるので、 追加の設定は必要ありません。

6.3. 生産的なアプリケーション

生産的なアプリケーションということになると、 新しいユーザはしばしばオフィススイートや、 使いやすい文書作成ソフトウェアを求めるでしょう。 デフォルトの生産的なアプリケーションはありませんが、 KDE のような デスクトップ環境 はオフィススイートを提供しています。 インストールされているウィンドウマネージャにかかわらず、FreeBSD では、 いくつものオフィススイート、 グラフィカルな文書作成ソフトウェアを利用できます。

この節では、 以下の人気のある生産的なソフトウェアのインストール方法について説明します。 もし、アプリケーションがリソースを大量に消費したり、 ports からのコンパイルに時間がかかったり、 もしくは他の ports に大きく依存する場合には、 そのことについても触れます。

アプリケーション名必要なリソースport からのインストール実行に必要となる主な環境
CalligraKDE
AbiWordGtk+ または GNOME
GimpGtk+
Apache OpenOffice莫大JDK および Mozilla
LibreOfficeやや多莫大Gtk+ または KDE/ GNOME または JDK

6.3.1. Calligra

KDE デスクトップには、 KDE 環境以外でも利用可能なオフィススイートがあります。 Calligra には、他のオフィススイートと同様に、 標準的なアプリケーションが含まれています。 Words は文書作成ソフトウェア、 Sheets は表計算ソフトウェア、 Stage はプレゼンテーションソフトウェア、そして Karbon は図形描画ソフトウェアです。

FreeBSD では package または port から editors/calligra をインストール出来ます。 package からインストールするには次のようにします。

# pkg install calligra

package を入手できない場合は、かわりに Ports Collection を利用してください。

# cd /usr/ports/editors/calligra
# make install clean

6.3.2. AbiWord

AbiWord は、Microsoft® Word のような見た目や操作感を持つフリーの文書作成ソフトウェアです。 速く、多くの機能を持ち、ユーザフレンドリです。

AbiWord は、 Microsoft® .rtf のような独自仕様を含む多くの形式のファイルを読み書きできます。

AbiWord package をインストールするには、以下のようにしてください。

# pkg install abiword

package を入手できない場合は、 Ports Collection からコンパイルしてください。

# cd /usr/ports/editors/abiword
# make install clean

6.3.3. GIMP

画像を描画したり写真を修正することに関して、 GIMP は洗練された編集プログラムです。 単純にお絵かきソフトウェアとして使うこともできますし、 高品質な写真の加工ツールとしても使えます。 多くのプラグインに対応しており、 スクリプトインタフェースを特徴としています。 GIMP はさまざまな形式のファイルを読み書きでき、 スキャナやタブレットとのインタフェースにも対応しています。

package をインストールするには、以下のようにしてください。

# pkg install gimp

もしくは、Ports Collection を利用してください。

# cd /usr/ports/graphics/gimp
# make install clean

Ports Collection の graphics カテゴリ (freebsd.org/ja/ports/graphics.html) には、GIMP に関連したプラグイン、 ヘルプファイルおよびユーザマニュアルなどがあります。

6.3.4. Apache OpenOffice

Apache OpenOffice は、 Apache Software Foundation のインキュベータプロジェクトとして開発が行われているオープンソースのオフィススイートです。 Apache OpenOffice は、完全なオフィススイートに必須のアプリケーション (文書作成ソフトウェア、表計算ソフトウェア、 プレゼンテーションソフトウェア、そして図形描画ソフトウェア) をひととおり揃えています。 ユーザインタフェースは他のオフィススイートと似ており、 広く用いられているさまざまな形式のファイルを読み書きできます。 多くの言語で利用でき、インタフェース、スペルチェッカ、 辞書は国際化されています。

Apache OpenOffice の文書作成ソフトウェアは、ネイティブの XML ファイル形式を採用することでポータビリティや柔軟性を高めています。 表計算ソフトウェアにはマクロ機能があり、 外部データベースと接続することもできます。 Apache OpenOffice は、 Windows®, Solaris™, Linux®, FreeBSD および Mac OS® X において安定してネイティブに動作しています。 Apache OpenOffice についてのより詳しい情報は、 openoffice.org をご覧ください。 また、porting.openoffice.org/freebsd/ から、FreeBSD 特有の情報を参照してください。

Apache OpenOffice package をインストールするには、以下のように入力してください。

# pkg install apache-openoffice

package をインストールしたら、以下のコマンドを入力して Apache OpenOffice を起動してください。

% openoffice-X.Y.Z

ここで X.Y.Z は、 インストールされている Apache OpenOffice のバージョン番号です。 Apache OpenOffice の初回起動時に、いくつかの質問が行われ、 ユーザのホームディレクトリに .openoffice.org フォルダが作成されます。

希望の Apache OpenOffice の packages を利用できない場合には、port を利用する方法もあります。 しかしながら、コンパイルには大きなディスクスペースと、 本当にかなり長い時間を必要とします。

# cd /usr/ports/editors/openoffice-4
# make install clean

注記:

地域化されたバージョンをビルドするには、 上記のコマンドの代わりに以下を実行して下さい。

# make LOCALIZED_LANG=your_language install clean

your_language を正しい言語 ISO コードに置き換えてください。 サポートされている言語コードは、同じ port ディレクトリにある files/Makefile.localized に書かれています。

6.3.5. LibreOffice

LibreOffice は、documentfoundation.org が開発しているフリーソフトウェアのオフィススイートです。 他のメジャーなオフィススイートと互換性があり、 さまざまなプラットフォームで利用できます。 OpenOffice.org からの新しいフォークで、 完全なオフィススイートに必須のアプリケーション (文書作成ソフトウェア、表計算ソフトウェア、 プレゼンテーションソフトウェア、図形描画ソフトウェア、 データベース管理ソフトウェア、数式エディタ) をすべて揃えています。 多くの言語で利用でき、 インタフェース、スペルチェッカ、辞書は国際化されています。

LibreOffice の文書作成ソフトウェアは、 ネイティブのファイル形式に XML を採用することで ポータビリティや柔軟性を高めています。 表計算ソフトウェアにはマクロ機能があり、 外部データベースと接続することもできます。 LibreOffice は、 Windows®, Solaris™, Linux®, FreeBSD, Mac OS® X において安定してネイティブに動作しています。 LibreOffice についての詳しい情報は、libreoffice.org をご覧ください。

英語版の LibreOffice package をインストールするには、以下のように入力してください。

# pkg install libreoffice

Ports Collection の edtors カテゴリ (freebsd.org/ja/ports/editors.html) カテゴリには、地域化された LibreOffice が用意されています。 地域化された package をインストールするには、 libreoffice を地域化された package 名に置き換えてください。

package をインストールしたら、以下のコマンドで LibreOffice を起動してください。

% libreoffice

初回起動時には、いくつかの質問が行われ、 ユーザのホームディレクトリに .libreoffice フォルダが作成されます。

希望の LibreOffice の packages を利用できない場合には、port からコンパイルする方法もあります。 しかしながら、コンパイルには大きなディスクスペースと、 本当にかなり長い時間を必要とします。 以下の例では、英語版をコンパイルします。

# cd /usr/ports/editors/libreoffice
# make install clean

注記:

地域化されたバージョンをビルドしたいのなら、 希望の言語の port ディレクトリに cd コマンドで移動してください。 対応している言語は、Ports Collection の editors カテゴリ (freebsd.org/ja/ports/editors.html) にあります。

6.4. ドキュメントビューア

UNIX® の出現以降、 いくつかの新しい文書形式が広く使われるようになりました。 基本システムには、それらの文書が要求するビューアがないかもしれません。 この節ではそれらのドキュメントビューアのインストール方法について説明します。

アプリケーション名必要なリソースport からのインストール実行に必要になる主な環境
XpdfFreeType
gvXaw3d
GQviewGtk+ または GNOME
ePDFViewGtk+ または GNOME
OkularKDE

6.4.1. Xpdf

FreeBSD 向けの軽い PDF ビューアを使いたいのなら Xpdf を試してみてください。 これは少ないリソースで動作するビューアで、軽くて効率的です。 標準の X フォントを利用し、 他の X ツールキットを必要としません。

Xpdf の package をインストールするには次のコマンドを入力してください。

# pkg install xpdf

package を入手できない場合は、 Ports Collection を利用してください。

# cd /usr/ports/graphics/xpdf
# make install clean

インストールが完了したら xpdf を起動してください。 メニューを表示するにはマウスの右ボタンを押してください。

6.4.2. gv

gvPostScript® と PDF のビューアです。これは ghostview をベースとしていますが、 Xaw3d ウィジットツールキットによってより良い外観になっています。 gv は向きや用紙のサイズ、 拡大縮小、アンチエイリアスなどたくさんの設定可能な機能を持っています。 ほとんどすべての操作をキーボードかマウスのどちらかだけで行なうことができます。

package から gv をインストールするには次のようにします。

# pkg install gv

package を利用できない場合には、Ports Collection を使ってください。

# cd /usr/ports/print/gv
# make install clean

6.4.3. GQview

GQview は画像管理ソフトウェアです。 クリックひとつで画像ファイルを開いたり、外部エディタを起動したり、 サムネイル画像を作成できます。 また、スライドショーや基本的なファイル操作機能も備えており、 画像のコレクションの管理や、 重複したファイルを見つけることが簡単にできます。 GQview は全画面表示、 および国際化にも対応しています。

GQview package をインストールするには次のコマンドを入力してください。

# pkg install gqview

package を入手できない場合は、 Ports Collection を利用してください。

# cd /usr/ports/graphics/gqview
# make install clean

6.4.4. ePDFView

ePDFView は軽量な PDF ドキュメントビューアです。 このビューアは、 Gtk+ および Poppler ライブラリのみを使います。 このソフトウェアは、現在開発中ですが、ほぼすべての PDF ファイル (暗号化されたものを含む) を開くことが可能で、ドキュメントのコピーを保存でき、 CUPS を用いた印刷にも対応しています。

package から ePDFView をインストールするには以下のようにしてください。

# pkg install epdfview

package が利用できないようでしたら、 Ports Collection を使ってインストールしてください。

# cd /usr/ports/graphics/epdfview
# make install clean

6.4.5. Okular

Okular は、 KDEKPDF をベースとした一般的なドキュメントビューアです。 このビューアは、PDF, PostScript®, DjVu, CHM, XPS, および ePub といった、多くの形式のファイルを開くことができます。

package で Okular をインストールするには、以下のようにしてください。

# pkg install okular

package が利用できないようでしたら、 Ports Collection を使ってインストールしてください。

# cd /usr/ports/graphics/okular
# make install clean

6.5. 財務管理ソフトウェア

FreeBSD のデスクトップで個人的な財務管理ができるように、 強力で簡単に使えるアプリケーションが用意されています。 それらのアプリケーションの中には QuickenExcel などの広く行き渡った形式のファイルと互換性があるものもあります。

この節では次のアプリケーションについて説明します。

アプリケーション名必要なリソースport からのインストール実行に必要になる主な環境
GnuCashGNOME
GnumericGNOME
KMyMoneyKDE

6.5.1. GnuCash

GnuCash は、 GNOME の一部で、 使いやすくかつ強力なアプリケーションとしてエンドユーザに提供されています。 GnuCash を使えば、 収入や支出、銀行口座、あるいは株を管理できます。 直観的なインタフェースを特徴としていますが、 高度な機能も提供しています。

GnuCash は洗練された登録機能、 階層構造の勘定システム、多くのキーボードショートカット、 自動補完機能を提供しています。 単一のトランザクションをより小さな要素に分解できます。 GnuCash は、 Quicken の QIF ファイルの読み込みやマージができます。 また、国際的な日付および通貨形式も扱えます。

GnuCash package をインストールするには次のようにしてください。

# pkg install gnucash

package が手に入らなければ、Ports Collection を使ってください。

# cd /usr/ports/finance/gnucash
# make install clean

6.5.2. Gnumeric

Gnumeric は、 GNOME コミュニティによって開発されている表計算ソフトウェアです。 セルの書式に従ってユーザの入力を自動的に推測する便利な機能や、 多くのシーケンスに対する自動補完機能があります。 Excel, Lotus 1-2-3, Quattro Pro といった広く行き渡っている多くの形式のファイルを読みこめます。 多くの関数を内蔵しており、 数値、通貨、日付、時間などのよく使うセルの書式が利用できます。

Gnumeric package をインストールするには次のように入力してください。

# pkg install gnumeric

package が手に入らなければ、Ports Collection を使ってください。

# cd /usr/ports/math/gnumeric
# make install clean

6.5.3. KMyMoney

KMyMoney は、KDE コミュニティが作成している個人用財務管理アプリケーションです。 KMyMoney は、 商用の個人用財務管理ソフトウェアに見られる重要な機能を提供することを目指しています。 また、使いやすい複式簿記機能も特徴です。 KMyMoney は標準の Quicken QIF ファイルをインポート可能で、 投資履歴や複数通貨の取扱い、財政状況のレポートを提供します。

package から KMyMoney をインストールするには次のようにします。

# pkg install kmymoney-kde4

package が手に入らない場合は、 Ports Collection を使ってください。

# cd /usr/ports/finance/kmymoney-kde4
# make install clean

第7章 マルチメディア

編集: Lippert Ross [FAMILY Given].

7.1. この章では

FreeBSD は数多くの種類のサウンドカードに対応しており、 FreeBSD システムで原音に忠実な出力を楽しむことができます。 これには録音機能と、MPEG Audio Layer 3 (MP3) や Waveform Audio File (WAV), Ogg Vorbis などをはじめとした多くの形式の音楽の再生機能が含まれます。 加えて FreeBSD の Ports Collection には、 録音した音楽を編集したり、音響効果を加えたり、接続された MIDI 機器を制御するためのアプリケーションが用意されています。

FreeBSD ではビデオファイルおよび DVD の再生もできます。 FreeBSD の Ports Collection には、さまざまなビデオメディアをエンコード、 変換、再生するアプリケーションが用意されています。

この章では FreeBSD 上でサウンドカード、ビデオの再生、TV チューナカード、 スキャナを設定する方法について説明します。 また、これらのデバイスを使うためのアプリケーションについても説明します。

この章を読むと、以下のことがわかります。

  • FreeBSD でのサウンドカードの設定方法

  • サウンドの設定に関するトラブルシューティング

  • MP3 およびその他の形式の音声を再生、エンコードする方法

  • FreeBSD システムでのビデオ再生の準備

  • DVD, .mpg および .avi ファイルを再生する方法

  • CD および DVD の情報をファイルに抽出する方法

  • TV カードの設定方法

  • MythTV を FreeBSD にインストールして設定する方法

  • 画像スキャナの設定方法

この章を読む前に、以下のことを理解しておく必要があります。

7.2. サウンドカードの設定

寄稿: Moore Moses [FAMILY Given].
再構成: Fonvieille Marc [FAMILY Given].

設定をはじめる前に、サウンドカードのモデル、 そのカードが使用しているチップを確認してください。 FreeBSD は サウンドカードに幅広く対応しています。 使用しているカードが対応しているかどうか、 どの FreeBSD ドライバを使うかについて、 ハードウェアノート の対応オーディオデバイスの一覧を確認してください。

サウンドデバイスを使うためには、 デバイスドライバを読み込まなければいけません。 もっとも簡単な方法は kldload(8) を使ってサウンドカードのカーネルモジュールを読み込むことです。 次の例は、Intel 仕様のビルトインオーディオチップセットのドライバを読み込む例です。

# kldload snd_hda

このドライバを起動時に読み込むように設定するためには、 /boot/loader.conf にドライバを追加してください。 このドライバの場合は以下の行になります。

snd_hda_load="YES"

他に利用可能な読み込み可能なサウンドモジュールは /boot/defaults/loader.conf に記載されています。 どのドライバを利用すればいいか確かでなければ、 snd_driver モジュールを読み込んでください。

# kldload snd_driver

snd_driver モジュールは、 一般に使用されるカードに対応したドライバをまとめて一度に読み込むメタドライバです。 このドライバを使用すれば、速やかに正しいドライバを探し出すことができます。 /boot/loader.conf ファイルを使用して、 すべてのサウンドドライバを読み込むこともできます。

snd_driver メタドライバの読み込み後に、 どのドライバがサウンドカードに選択されたのかを知るには、 cat /dev/sndstat と入力してください。

7.2.1. サウンドに対応したカスタムカーネルを設定する

この節は、 サウンドカードのドライバをカーネルへ静的に組み込もうと考えているユーザ向けです。 カーネル再構築の詳細は 8章FreeBSD カーネルのコンフィグレーション を参照してください。

サウンドに対応したカスタムカーネルを使うときには、 オーディオフレームワークドライバをカーネルコンフィグレーションファイルに追加してください。

device sound

次に、サウンドカードに対応したドライバを追加します。 前節の Intel 仕様のビルトインオーディオチップセットの例では、 カスタムカーネルコンフィグレーションファイルに以下の行を追加してください。

device snd_hda

ドライバのマニュアルページを読んで、 ドライバが使用するデバイス名を調べてください。

PnP 非対応の ISA サウンドカードでは、 IRQ および I/O ポートの設定を /boot/device.hints  に指定する必要があるかもしれません。 システムの起動時に、loader(8) はこのファイルを読み、設定情報をカーネルに渡します。 たとえば、PnP 非対応の古い Creative SoundBlaster® 16 (ISA 接続) には snd_sb16 とともに snd_sbc(4) ドライバを使用します。 このカードを使用する場合には、 カーネルコンフィグレーションファイルに以下の行を追加してください。

device snd_sbc
device snd_sb16

もしカードが 0x220 I/O port と IRQ 5 を使用している場合には、 /boot/device.hints に以下の行を追加してください。

hint.sbc.0.at="isa"
hint.sbc.0.port="0x220"
hint.sbc.0.irq="5"
hint.sbc.0.drq="1"
hint.sbc.0.flags="0x15"

この例では、 I/O ポートに 0x220 を、 IRQ に 5 を使用します。

/boot/device.hints に用いるべき構文は、sound(4) および、 サウンドカードの各ドライバのマニュアルページに記載されています。

これまでの設定はデフォルトのものです。 カードを使用する状況によっては、 IRQ やその他の設定を変更する必要があるかもしれません。 このカードについての詳細は、 snd_sbc(4) をご覧ください。

7.2.2. サウンドのテスト

必要となるモジュールを読み込むか、カスタムカーネルで再起動すると、 サウンドカードが検出されます。 確認をするには、dmesg | grep pcm と実行してください。 この例は、ビルトイン Conexant CX20590 チップセットを搭載したシステムのものです。

pcm0: <NVIDIA (0x001c) (HDMI/DP 8ch)> at nid 5 on hdaa0
pcm1: <NVIDIA (0x001c) (HDMI/DP 8ch)> at nid 6 on hdaa0
pcm2: <Conexant CX20590 (Analog 2.0+HP/2.0)> at nid 31,25 and 35,27 on hdaa1

サウンドカードの状態は、 以下のコマンドを使用して確認することもできます。

# cat /dev/sndstat
FreeBSD Audio Driver (newpcm: 64bit 2009061500/amd64)
Installed devices:
pcm0: <NVIDIA (0x001c) (HDMI/DP 8ch)> (play)
pcm1: <NVIDIA (0x001c) (HDMI/DP 8ch)> (play)
pcm2: <Conexant CX20590 (Analog 2.0+HP/2.0)> (play/rec) default

この出力は、サウンドカードによって異なります。 pcm デバイスがなければ、 適切なデバイスドライバが読み込まれているか、 カーネルに追加されてコンパイルされているかどうかを確認してください。 次の節では、良くある問題とその解決方法をリストアップしています。

すべてうまくいけば、サウンドカードが FreeBSD で機能するでしょう。 CD または DVD ドライブのオーディオ出力端子がサウンドカードと適切に接続されていれば、 cdcontrol(1) を使ってドライブ内のオーディオ CD を再生できます。

% cdcontrol -f /dev/acd0 play 1

警告:

オーディオ CD は特別なエンコーディングが行われているため、 mount(8) を使ってマウントすべきではありません。

audio/workman のように、 よりよいインタフェースを提供するさまざまなアプリケーションがあります。 audio/mpg123 port をインストールして MP3 オーディオファイルを聞くことができます。

手っ取り早くカードをテストするには、 /dev/dsp デバイスにデータを送ってみてください。

% cat filename > /dev/dsp

ここで filename は、どのような形式のファイルでも構いません。 このコマンドラインを実行すると雑音が発生するはずです。 これにより、サウンドカードが動作していることを確認できます。

注記:

/dev/dsp* デバイスノードは、 必要に応じて自動的に作成されます。 デバイスノードが使用されていない場合には存在せず、 ls(1) の出力に表示されません。

7.2.3. サウンドカードの問題についてのトラブルシューティング

表 8.1 は、良くあるエラーメッセージとその解決法の一覧です。

表7.1 良くあるエラーメッセージ
エラー解決方法
sb_dspwr(XX) timed out

使用する I/O ポートが適切に設定されていません。

bad irq XX

使用する IRQ が正しく設定されていません。 サウンドカードの IRQ と設定した IRQ が同じかどうか確かめてください。

xxx: gus pcm not attached, out of memory

デバイスを使用するのに十分なメモリを確保できません。

xxx: can't open /dev/dsp!

fstat | grep dsp と入力して、 他のアプリケーションがデバイスを使用しているか調べてください。 注目すべきトラブルメーカは esoundKDE のサウンド機能です。


最近のグラフィックカードの中には、 HDMI を利用するため、 グラフィックカード自身がサウンドカードを持つものがあります。 このようなサウンドデバイスには、 時としてサウンドカードより若い番号が付けられることがあります。 そのような場合には、 サウンドカードをデフォルトプレイバックデバイスとして利用できません。 このことが原因かどうかを確認するには、dmesg を実行して pcm を探してください。 以下のような出力を得るかもしれません。

...
hdac0: HDA Driver Revision: 20100226_0142
hdac1: HDA Driver Revision: 20100226_0142
hdac0: HDA Codec #0: NVidia (Unknown)
hdac0: HDA Codec #1: NVidia (Unknown)
hdac0: HDA Codec #2: NVidia (Unknown)
hdac0: HDA Codec #3: NVidia (Unknown)
pcm0: <HDA NVidia (Unknown) PCM #0 DisplayPort> at cad 0 nid 1 on hdac0
pcm1: <HDA NVidia (Unknown) PCM #0 DisplayPort> at cad 1 nid 1 on hdac0
pcm2: <HDA NVidia (Unknown) PCM #0 DisplayPort> at cad 2 nid 1 on hdac0
pcm3: <HDA NVidia (Unknown) PCM #0 DisplayPort> at cad 3 nid 1 on hdac0
hdac1: HDA Codec #2: Realtek ALC889
pcm4: <HDA Realtek ALC889 PCM #0 Analog> at cad 2 nid 1 on hdac1
pcm5: <HDA Realtek ALC889 PCM #1 Analog> at cad 2 nid 1 on hdac1
pcm6: <HDA Realtek ALC889 PCM #2 Digital> at cad 2 nid 1 on hdac1
pcm7: <HDA Realtek ALC889 PCM #3 Digital> at cad 2 nid 1 on hdac1
...

この例では、グラフィックカード (NVidia) には、サウンドカード (Realtek ALC889) より若い番号が付けられています。 サウンドカードをデフォルトのプレイバックデバイスとして利用するには、 hw.snd.default_unit をプレイバックで使用するユニット番号に変更してください。

# sysctl hw.snd.default_unit=n

ここで、n は使用するサウンドデバイスの番号です。 この例では 4 です。 /etc/sysctl.conf に以下の行を入れると、 設定の変更が常に反映されるようになります。

hw.snd.default_unit=4

7.2.4. 複数音源の利用

寄稿: Chopra Munish [FAMILY Given].

同時に再生することのできる音源を複数実装していることは、 多くの場合望ましいことです。 FreeBSD では、仮想サウンドチャネル を使ってカーネル内でサウンドを合成することにより、 サウンドカードの再生を多重化することができます。

仮想チャネルの数を決めるのに三つの sysctl(8) 変数を設定できます。

# sysctl dev.pcm.0.play.vchans=4
# sysctl dev.pcm.0.rec.vchans=4
# sysctl hw.snd.maxautovchans=4

この例では四つの仮想チャネルを設定しています。 これは通常利用する上で十分実用的な数です。 dev.pcm.0.play.vchans=4dev.pcm.0.rec.vchans=4 は、 デバイスが取り付けられた後で設定できます。 これらは pcm0 が再生や録音のために持っている仮想チャネルの数です。 hw.snd.maxautovchans は、 kldload(8) を用いて認識された新しいデバイスの仮想チャネル数です。 pcm モジュールはハードウェアドライバとは独立して読み込むことができるので、 hw.snd.maxautovchans は、オーディオデバイスが取り付けられた時に、 デバイスに与えられる仮想チャネルの数を表しています。 より詳細な情報については pcm(4) を参照してください。

注記:

デバイスを使用しているときに仮想チャンネルの数を変更することはできません。 まず、ミュージックプレーヤやサウンドデーモンといった デバイスを使用しているすべてのプログラムを終了してください。

/dev/dsp0 を必要とするプログラムが意識しなくても、 適切な pcm デバイスが自動的に設定されます。

7.2.5. ミキサチャネルの初期値を設定する

寄稿: El-Rayes Josef [FAMILY Given].

各ミキサチャネルの初期値は pcm(4) ドライバのソースコードにハードコーディングされています。 mixer(8) および他のサードパーティ製のアプリケーションやデーモンによって、 サウンドカードのミキサレベルを変更できますが、 永続的な解決方法ではありません。 そのかわり以下の例のように、 適切な値を /boot/device.hints ファイルに記述することによって、 ドライバレベルでミキサの初期値を設定することができます。

hint.pcm.0.vol="50"

この例では、pcm(4) が読み込まれたと同時に、 ボリュームチャネルの初期値を 50 に設定します。

7.3. MP3 オーディオ

寄稿: Lee Chern [FAMILY Given].

この節では、FreeBSD で利用できる MP3 プレイヤや、オーディオ CD トラックを吸い出す方法、 および MP3 のエンコード、 デコードの方法について説明します。

7.3.1. MP3 プレイヤ

XMMS は 人気のあるグラフィカルな MP3 プレイヤです。 Winamp スキンや追加のプラグインに対応しています。 XMMS のプレイリスト、 グラフィックイコライザ等のインタフェースは直感的です。 Winamp を使いなれている人は簡単に XMMS を使えるでしょう。 FreeBSD では、XMMSmultimedia/xmms の port または package からインストールできます。

audio/mpg123 package もしくは port は、 は代替となる コマンドライン上の MP3 プレイヤです。インストールしたら、再生する MP3 ファイルをコマンドラインから指定してください。 もしシステムが、複数のオーディオデバイスを搭載しているのであれば、 サウンドデバイスを同様に指定してください。

# mpg123 -a /dev/dsp1.0 Foobar-GreatesHits.mp3
High Performance MPEG 1.0/2.0/2.5 Audio Player for Layers 1, 2 and 3
        version 1.18.1; written and copyright by Michael Hipp and others
        free software (LGPL) without any warranty but with best wishes

Playing MPEG stream from Foobar-GreatestHits.mp3 ...
MPEG 1.0 layer III, 128 kbit/s, 44100 Hz joint-stereo

他の MP3 プレイヤも Ports Collection から利用できます。

7.3.2. CD オーディオトラックの抽出

CD 全体または CD トラックを MP3 に変換する前に、CD 上のオーディオデータをハードディスク上に抽出する必要があります。 これは raw CD Digital Audio (CDDA) データを WAV ファイルにコピーすることで行われます。

sysutils/cdrtools スイートからインストールされる cdda2wav ツールを用いて、CD からオーディオデータを抽出できます。

CD をドライブにいれて次のコマンドを root 権限で実行すると、 CD 全体をトラックごとに個々の WAV ファイルに抽出できます。

# cdda2wav -D 0,1,0 -B

この例では、-D 0,1,0SCSI デバイス 0,1,0 が抽出する CD を表します。 cdrecord -scanbus を使って、 システムの適切なデバイスパラメータを取得してください。

個々のトラックを抽出するには、 次のように -t でトラックを指定してください。

# cdda2wav -D 0,1,0 -t 7

範囲を指定して、 一番目から七番目のトラックまで抽出したい場合、 次のようにします。

# cdda2wav -D 0,1,0 -t 1+7

ATAPI (IDE) CDROM ドライブから抽出するには、 SCSI ユニット番号をデバイス名に置き換えて指定します。 たとえば IDE ドライブから七番目のトラックを抽出するには、 次のようにします。

# cdda2wav -D /dev/acd0 -t 7

または、「オーディオ CD の複製」 で説明されているように、dd を使って ATAPI ドライブ上のオーディオトラックを展開できます。

7.3.3. MP3 のエンコードとデコード

lame は、 ポピュラーな MP3 エンコーダです。 audio/lame port からインストールできます。 特許の問題から、package は利用できません。

次のコマンドを実行すると、抽出した WAV ファイル audio01.wav を使って audio01.mp3 に変換します。

# lame -h -b 128 --tt "曲名" --ta "アーティスト名" --tl "アルバム名" \
--ty "" --tc "コメント" --tg "ジャンル" audio01.wav audio01.mp3

ここで指定している 128 kbits は、MP3 の標準のビットレートです。 160 kbits または 192 kbits のビットレートは、 さらに高音質を提供します。 ビットレートが高くなるにつれて作成される MP3 ファイルは多くのディスク領域を消費します。 -h オプションを指定すると 低速高品質 モードとなります。 --t ではじまるオプションは ID3 タグを設定します。 このタグにはたいてい曲の情報が含まれており、 MP3 ファイルに格納されます。 Lame のマニュアルを参照すれば、 他のエンコーディングのオプションが見つかるでしょう。

MP3 からオーディオ CD を作成するには、 まず非圧縮のファイル形式に変換しなければなりません。 XMMSWAV 形式へ変換できますが、 mpg123 は raw Pulse-Code Modulation (PCM) オーディオデータに変換します。

mpg123 を使って audio01.mp3 を変換するには、PCM ファイルを指定してください。

# mpg123 -s audio01.mp3 > audio01.pcm

XMMS を使って MP3WAV 形式に変換するには、 以下の手順に従ってください。

手順7.1 XMMS を使って WAV 形式に変換する
  1. XMMS を起動します。

  2. 右クリックで XMMS メニューを表示します。

  3. Options から Preferences を選択します。

  4. Output Plugin を Disk Writer Plugin に変更します。

  5. Configure を押します。

  6. 非圧縮ファイルを書き出すディレクトリを入力、 または選択します。

  7. 普段通り XMMSMP3 ファイルを読み込みます。 音量は 100% でイコライザの設定はオフにします。

  8. Play を押します。 XMMSMP3 を再生しているかのように表示しますが、 音声はきこえません。 実際には MP3 をファイルに出力しています。

  9. 終了したら、再び MP3 を聴けるように Output Plugin を以前のように元に戻すのを忘れないでください。

WAVPCM 形式は、 cdrecord で利用できます。 WAV ファイルを使用する場合、 それぞれのトラックの先頭に小さなノイズが入るのに気づくでしょう。 これは WAV ファイルのヘッダ情報です。 audio/sox port または package を使うとヘッダ情報を削除できます。

% sox -t wav -r 44100 -s -w -c 2 track.wav track.raw

FreeBSD での CD 作成の詳しい情報は 「光メディア (CD & DVD) の作成と使用」 を参照してください。

7.4. ビデオ再生

寄稿: Lippert Ross [FAMILY Given].

ビデオ再生のための設定をはじめる前に、 ビデオカードのモデルおよびチップセットを確認する必要があります。 Xorg はさまざまなビデオカードに対応していますが、 すべてのカードがビデオ再生に性能を発揮できるとは限りません。 利用しているビデオカードの Xorg サーバが対応している拡張機能のリストを得るには、 Xorg を実行中に xdpyinfo を実行してください。

さまざまなプレイヤやオプションを試すのに、 テストファイルとして小さな MPEG ファイルを用意しておくのはよい考えです。 いくつかの DVD アプリケーションは DVD メディアを /dev/dvd として初期設定しているか、ハードコーディングしているので、 次のように適切なデバイスにシンボリックリンクを張っておくと便利かもしれません。

# ln -sf /dev/cd0 /dev/dvd

devfs(5) の仕様により、 このように手動で作成されたリンクはシステムを再起動すると消えてしまいます。 システムの起動時にこれらのシンボリックリンクを自動的に作成するには、 /etc/devfs.conf に下記の設定を追加してください。

link cd0 dvd

特別な機能を必要とする DVD の抽出には、 DVD デバイスへの書き込み権限が必要です。

Xorg インタフェースの使う共有メモリを拡張するために、 以下の sysctl(8) 変数の値を増やすことが推奨されています。

kern.ipc.shmmax=67108864
kern.ipc.shmall=32768

7.4.1. ビデオ機能の決定

Xorg においてビデオ表示性能を改善する方法はいくつかあり、 正しく動作するかどうかはハードウェアに大きく依存しています。 下記に説明したどの方法でも、 ハードウェアが変わると品質が変わるでしょう。

よく知られたビデオインタフェースは次の通りです。

  1. Xorg: 共有メモリを用いた通常の出力

  2. XVideo: 特別なアクセラレータによって、 drawable オブジェクトに直接ビデオを表示する Xorg インタフェースの拡張機能です。 この拡張を使うことで廉価なコンピュータでも高品質の再生が可能になります。 次の節では、 この拡張が動作していることの確認方法について説明します。

  3. SDL: Simple Directmedia Layer は、 さまざまなオペレーティングシステムの間でサウンドとグラフィックスを効果的に利用したクロスプラットホームアプリケーションを開発することを目的としたレイヤです。 SDL はハードウェアに対する低レベルの抽象的概念を提供し、 時には Xorg インタフェースを使用するよりも効果的なことがあります。 FreeBSD では、SDL は、 devel/sdl20 package または port によりインストールできます。

  4. DGA: Direct Graphics Access は、 プログラムが Xorg サーバを介せず直接フレームバッファを変更することを可能にする Xorg の拡張機能です。 低レベルのメモリマッピングが実行できることを期待しているので、 この機能を使うプログラムは root 権限で実行されなければなりません。 DGA 機能拡張は dga(1) によってテストとベンチマークができます。 dga 実行中はキーボードを押せばいつでもディスプレイ色が変更されます。 中止するには q を押します。

  5. SVGAlib: 低レベルコンソールグラフィックレイヤ

7.4.1.1. XVideo

この拡張機能が動作しているかどうかを調べるには、 xvinfo を使います。

% xvinfo

以下のような結果が得られたならば、カードは XVideo に対応しています。

X-Video Extension version 2.2
  screen #0
  Adaptor #0: "Savage Streams Engine"
    number of ports: 1
    port base: 43
    operations supported: PutImage
    supported visuals:
      depth 16, visualID 0x22
      depth 16, visualID 0x23
    number of attributes: 5
      "XV_COLORKEY" (range 0 to 16777215)
              client settable attribute
              client gettable attribute (current value is 2110)
      "XV_BRIGHTNESS" (range -128 to 127)
              client settable attribute
              client gettable attribute (current value is 0)
      "XV_CONTRAST" (range 0 to 255)
              client settable attribute
              client gettable attribute (current value is 128)
      "XV_SATURATION" (range 0 to 255)
              client settable attribute
              client gettable attribute (current value is 128)
      "XV_HUE" (range -180 to 180)
              client settable attribute
              client gettable attribute (current value is 0)
    maximum XvImage size: 1024 x 1024
    Number of image formats: 7
      id: 0x32595559 (YUY2)
        guid: 59555932-0000-0010-8000-00aa00389b71
        bits per pixel: 16
        number of planes: 1
        type: YUV (packed)
      id: 0x32315659 (YV12)
        guid: 59563132-0000-0010-8000-00aa00389b71
        bits per pixel: 12
        number of planes: 3
        type: YUV (planar)
      id: 0x30323449 (I420)
        guid: 49343230-0000-0010-8000-00aa00389b71
        bits per pixel: 12
        number of planes: 3
        type: YUV (planar)
      id: 0x36315652 (RV16)
        guid: 52563135-0000-0000-0000-000000000000
        bits per pixel: 16
        number of planes: 1
        type: RGB (packed)
        depth: 0
        red, green, blue masks: 0x1f, 0x3e0, 0x7c00
      id: 0x35315652 (RV15)
        guid: 52563136-0000-0000-0000-000000000000
        bits per pixel: 16
        number of planes: 1
        type: RGB (packed)
        depth: 0
        red, green, blue masks: 0x1f, 0x7e0, 0xf800
      id: 0x31313259 (Y211)
        guid: 59323131-0000-0010-8000-00aa00389b71
        bits per pixel: 6
        number of planes: 3
        type: YUV (packed)
      id: 0x0
        guid: 00000000-0000-0000-0000-000000000000
        bits per pixel: 0
        number of planes: 0
        type: RGB (packed)
        depth: 1
        red, green, blue masks: 0x0, 0x0, 0x0

リストにある形式、YUV2, YUV12 などが XVideo のすべての実装で存在するとは限りません。 対応している形式が少ないために、 あるプレイヤでは悪影響が出るかもしれないことにも注意してください。

出力が以下のような場合、

X-Video Extension version 2.2
screen #0
no adaptors present

カードはおそらく XVideo に対応していないのでしょう。 このことはディスプレイでビデオを表示するのに、 ビデオカードおよびプロセッサによっては、 計算上の要求を満たすことがより困難になることを意味します。

7.4.2. ビデオを扱う ports および packages

この節では Ports Collection で利用可能な、 ビデオの再生に使用できるソフトウェアについて紹介します。

7.4.2.1. MPlayer および MEncoder

MPlayer はコマンドラインのビデオプレイヤで、 高速性と柔軟性をもたらすグラフィカルなインタフェースも持っています。 MPlayer の他のグラフィカルなフロントエンドも Ports Collection からインストールできます。

MPlayermultimedia/mplayer package または port からインストールできます。 いくつかのコンパイル時のオプションを設定することができ、また、 構築の際にさまざまなハードウェアのチェックがおこなわれます。 そのため、package からインストールを行わず、 port から構築することを好むユーザもいます。

port を構築する際に、メニューのオプションは、port にコンパイル時にオプションとしてどの形式に対応するかを決定するため、 見ておく必要があります。 オプションが選択されていなければ、 MPlayer はその形式のビデオ形式を表示することは出来ません。 矢印キーとスペースキーを使って必要な形式を選択してください。 選択が終わったら、Enter を押して、 port の構築とインストールを続けてください。

デフォルトでは、この packege または port は、 mplayer コマンドラインユーティリティと gmplayer グラフィカルユーティリティを構築します。 ビデオをエンコードする必要があれば、 multimedia/mencoder port をコンパイルしてください。 ライセンスの制限のため、 MEncoder の package は利用できません。

MPlayer を初めて起動すると、 各自のホームディレクトリ内に ~/.mplayer が作成されます。このサブディレクトリには、 ユーザ固有の設定ファイルのデフォルトバージョンが含まれています。

この節では、一般的な使用法についてのみ説明します。 数多くのオプションの完全な説明については、 mplayer(1) のマニュアルに記載されています。

testfile.avi というファイルを再生するには、以下の例のように、 -vo とともに、 ビデオインタフェースを指定してください。

% mplayer -vo xv testfile.avi
% mplayer -vo sdl testfile.avi
% mplayer -vo x11 testfile.avi
# mplayer -vo dga testfile.avi
# mplayer -vo 'sdl:dga' testfile.avi

ビデオ再生の相対的性能は多くの要因に依存し、 ハードウェアに応じて著しく変わると思われるので、 これらのオプションをすべて試してみる価値はあるでしょう。

DVD を再生するには、 testfile.avidvd://N -dvd-device DEVICE に置き換えてください。 <N> には再生するタイトル番号を、 DEVICEDVD のデバイスノードを指定します。 たとえば、/dev/dvd から 2 番目のタイトルを再生するには以下のようにします。

# mplayer -vo xv dvd://3 -dvd-device /dev/dvd

注記:

デフォルトの DVD デバイスは、 MPlayer port の構築時に WITH_DVD_DEVICE=/path/to/desired/device を追加することでで定義できます。 デフォルトでは、デバイスは /dev/cd0 です。 詳細はこの port の Makefile.options をご覧ください。

停止、休止、 再生などをするにはキーバインディングを使ってください。 キーバインディングの一覧を見るには、mplayer -h を実行するか、もしくは、mplayer(1) を読んでください。

再生に関する追加のオプションがあります。 全画面モードにする -fs -zoom オプションと、 性能を向上させる -framedrop オプションです。

よく使用するオプションについては、各ユーザの .mplayer/config に以下のように追加してください。

vo=xv
fs=yes
zoom=yes

mplayer を使って、 DVD タイトルを .vob に抽出できます。 DVD から 2 番目のタイトルをダンプするには次のようにします。

# mplayer -dumpstream -dumpfile out.vob dvd://2 -dvd-device /dev/dvd

出力された out.vob ファイルは MPEG 形式です。

UNIX® ビデオについて、 高レベルのノウハウを得たいと考えている方は mplayerhq.hu/DOCS をご覧ください。技術的な情報があります。 このドキュメントは、 バグを報告する前に、読むべきものです。

mencoder を使う前に、mplayerhq.hu/DOCS/HTML/en/mencoder.html を読んでオプションに慣れておくのはよい考えです。 品質向上、低ビットレート、形式変換をする方法が無数にあります。 これらの要素の調節具合で、性能が良かったり悪かったりするなど、 結果に違いが出るかもしれません。 コマンドラインオプションを不適切に組合せると、 mplayer でさえ再生できない出力ファイルを作成してしまいます。

はじめは単純なファイルのコピーです。

% mencoder input.avi -oac copy -ovc copy -o output.avi

したがって、単にファイルを抽出したいときには、 mplayer-dumpfile をつけます。

input.avi を音声に MPEG3 エンコードを使用して MPEG4 コーデックに変換するには、まず最初に audio/lame port をインストールしてください。 ライセンスの制限により、package は利用できません。 インストールしたら、以下のように入力してください。

% mencoder input.avi -oac mp3lame -lameopts br=192 \
	 -ovc lavc -lavcopts vcodec=mpeg4:vhq -o output.avi

これは mplayerxine といったアプリケーションで再生可能な出力ファイルを作成します。

DVD タイトルを直接再エンコードするためには、 上記のコマンドラインの input.avidvd://1 -dvd-device /dev/dvd に置き換えて、 root 権限で実行します。 期待する結果を得るには何度か繰り返すことになるので、 かわりにタイトルをファイルにダンプして、 ファイルに対して作業することをおすすめします。

7.4.2.2. xine ビデオプレイヤ

xine は、 再利用可能な基本ライブラリと、 プラグインで拡張できる実行可能なモジュールを提供するビデオプレイヤです。 multimedia/xine package または port からインストールできます。

実用上、xine を使用するには高速なビデオカードとともに高速な CPU があるか、 またはビデオカードが XVideo 拡張に対応している必要があります。 XVideo インタフェースとともに xine ビデオプレイヤを使うのが最良です。

デフォルトでは、xine プレイヤは GUI 付きで起動するでしょう。 メニューを使用して特定のファイルを開くことができます。

xine は、 再生するファイル名を指定することで、 コマンドラインから実行することもできます。

% xine -g -p mymovie.avi

xine-project.org/faq には、より多くの情報やトラブルシューティングがあります。

7.4.2.3. Transcode ユーティリティ

Transcode は、 ビデオおよびオーディオファイルを再エンコードするためのツール一式です。 Transcode を使えば、stdin/stdout ストリームインタフェースとともにコマンドラインツールを用いることで、 ビデオファイルの統合や、壊れたファイルの修復ができます。

FreeBSD では、Transcode は、 multimedia/transcode package もしくは port からインストールできます。 多くのユーザは port からコンパイルすることを好みます。 port では、 コンパイルで有効にするサポートやコーデックを指定するコンパイルオプションのメニューを利用できるためです。 オプションを選択しないと、Transcode は、その形式をエンコード出来ないでしょう。 矢印キーとスペースバーを使って、 必要とするフォーマットを選択してください。 選択が終わったら、 Enter を押して、port のコンパイルとインストールを続けてください。

この例では、DivX ファイルを PAL MPEG-1 (PAL VCD) に変換する使用例を示します。

% transcode -i
input.avi -V --export_prof vcd-pal -o output_vcd
% mplex -f 1 -o output_vcd.mpg output_vcd.m1v output_vcd.mpa

作成された MPEG ファイル、 output_vcd.mpg は、 MPlayer を使って再生できます。 また、multimedia/vcdimager および sysutils/cdrdao といったユーティリティを使って、 ファイルを CD メディアに書き込むことでビデオ CD も作成できます。

transcode のマニュアルページに加え、transcoding.org/cgi-bin/transcode から、更なる情報や使用例を得てください。

7.5. TV カードの設定

原作: El-Rayes Josef [FAMILY Given].
改訂: Fonvieille Marc [FAMILY Given].

TV カードを使用することで、 TV 放送をコンピュータで見ることができます。 これらの多くのカードは RCA または S-video 入力端子を備えており、 FM ラジオチューナを装備したカードもあります。

FreeBSD は、Brooktree Bt848/849/878/879 をビデオキャプチャチップに採用した PCI TV カードに bktr(4) ドライバで対応しています。 このドライバは、ほとんどの Pinnacle PCTV ビデオカードに対応しています。 TV カードを購入する前に、対応しているチューナの一覧について、 bktr(4) を参照してください。

7.5.1. ドライバを読み込む

カードを使用するには、bktr(4) ドライバを読み込む必要があります。 起動時に自動的に読み込むためには、 /boot/loader.conf に以下の行を追加してください。

bktr_load="YES"

あるいは、カスタムカーネルに TV ビデオカードへのサポートを静的に組み込むこともできます。 この場合には、 次の行をカーネルコンフィギュレーションファイルに追加してください。

device	 bktr
device	iicbus
device	iicbb
device	smbus

カードコンポーネントは I2C バス経由で連結されているため、 bktr(4) ドライバに加えてこれらのデバイスが必要になります。 編集したら新しいカーネルを構築し、インストールします。

チューナが適切に検出されたかどうかを確認するため、 システムを再起動してください。 起動時のメッセージに TV カードが以下のように認識されるでしょう。

bktr0: <BrookTree 848A> mem 0xd7000000-0xd7000fff irq 10 at device 10.0 on pci0
iicbb0: <I2C bit-banging driver> on bti2c0
iicbus0: <Philips I2C bus> on iicbb0 master-only
iicbus1: <Philips I2C bus> on iicbb0 master-only
smbus0: <System Management Bus> on bti2c0
bktr0: Pinnacle/Miro TV, Philips SECAM tuner.

これらのメッセージはハードウェアに応じて異なります。 必要であれば、sysctl(8) や、 カーネルコンフィギュレーションファイルオプションで、 検知されたいくつかのパラメータを変更できます。 たとえば、チューナを Philips SECAM チューナとして検知されるようにするには、 カーネルコンフィギュレーションファイルに以下の行を追加します。

options OVERRIDE_TUNER=6

または、直接 sysctl(8) を使用して変更します。

# sysctl hw.bt848.tuner=6

利用可能な sysctl(8) パラメータおよびカーネルオプションについては bktr(4) を参照してください。

7.5.2. 便利なアプリケーション

TV カードを使用するためには、 以下のアプリケーションの一つをインストールする必要があります。

  • multimedia/fxtv はウィンドウ内に TV 映像を映します。 画像/音声/ビデオを取り込むこともできます。

  • multimedia/xawtv も同様の機能を持った TV アプリケーションです。

  • audio/xmradio は TV カードに搭載された FM ラジオチューナを使用するためのアプリケーションです。

他にも多くのアプリケーションが FreeBSD の Ports Collection に収録されています。

7.5.3. トラブルシューティング

TV カードに関する問題が起きたときには、bktr(4) が本当にビデオキャプチャチップおよびチューナに対応しているか、 オプションが正しく設定されているかどうかをまず確認してください。 TV カードに関するサポートや質問に関しては、 freebsd-multimedia メーリングリストを参照してください。

7.6. MythTV

MythTV は、広く使われているオープンソースの Personal Video Recorder (PVR) アプリケーションです。 この節では、FreeBSD に MythTV をインストールし、 設定する方法について説明します。 MythTV の使用法に関するより詳細な情報については、mythtv.org/wiki をご覧ください。

MythTV は、フロントエンドおよびバックエンドを必要とします。 これらは、同じシステム上でも、 異なるコンピュータ上でも動かすことが可能です。

フロントエンドについては、 multimedia/mythtv-frontend package または port から FreeBSD にインストールできます。 5章X Window System で説明されているように、 Xorg をインストールして設定する必要もあります。 このシステムは X-Video Motion Compensation (XvMC) に対応し、 オプションとして、Linux Infrared Remote Control (LIRC)-互換のリモートに対応したビデオカードを持っていることが理想的です。

FreeBSD にバックエンドとフロントエンドの両方をインストールするには、 multimedia/mythtv package または port を使ってください。 MySQL™ データベースサーバも必要となりますが、 自動的に依存でインストールされます。オプションで、 チューナカードと録音したデータを保存するためのストレージが必要です。

7.6.1. ハードウェア

MythTV は、 エンコーダやチューナなどのビデオ入力デバイスへのアクセスに Video for Linux (V4L) を用います。 FreeBSD では、USB DVB-S/C/T カードにおいて最もよく動作します。 なぜならば、このカードは、 V4L ユーザランドアプリケーションを提供する multimedia/webcamd package または port により良くサポートされているためです。 webcamd により対応している Digital Video Broadcasting (DVB) カードは、MythTV で動作するはずです。 動作することが知られているカードの一覧が wiki.freebsd.org/WebcamCompat にあります。 Hauppauge カードのドライバもまた、 multimedia/pvr250 および multimedia/pvrxxx port として利用可能ですが、 標準的ではないドライバのインタフェースを提供しており、 0.23 より後の MythTV では動作しません。 ライセンスの制限により、package は利用できません。 そのため、これらの ports はコンパイルをしなければなりません。

wiki.freebsd.org/HTPC ページは、DVB ドライバのすべての一覧を提供しています。

7.6.2. MythTV バックエンドの設定

port を使って MythTV をインストールしてください。

# cd /usr/ports/multimedia/mythtv
# make install

インストールが終わったら、 MythTV データベースを設定してください。

# mysql -uroot -p < /usr/local/share/mythtv/database/mc.sql

その後、バックエンドを設定してください。

# mythtv-setup

最後にバックエンドを起動してください。

# echo 'mythbackend_enable="YES"' >> /etc/rc.conf
# service mythbackend start

7.7. 画像スキャナ

寄稿: Fonvieille Marc [FAMILY Given].

FreeBSD では、画像スキャナに対するアクセスは SANE (Scanner Access Now Easy) によって実現されており、 FreeBSD の Ports Collection で提供されています。 SANE はスキャナのハードウェアにアクセスするために FreeBSD デバイスドライバを使用します。

FreeBSD は SCSI 接続および USB 接続のスキャナのどちらにも対応しています。 スキャナのインタフェースに依存して、異なるドライバが必要となります。 設定を始める前に、 SANE がスキャナに対応していることを確認してください。 対応しているスキャナに関してのより詳細な情報については、 http://www.sane-project.org/sane-supported-devices.html をご覧ください。

この節では、FreeBSD がどのようにしてスキャナを認識するかについて説明します。 その後、FreeBSD システム上で SANE を設定して使用する方法の概要について説明します。

7.7.1. スキャナの確認

GENERIC カーネルには USB スキャナに対応するためのデバイスドライバが搭載されています。 カスタムカーネルを使用する際には、 以下の行がカーネルコンフィグレーションファイルにあることを確認してください。

device usb
device uhci
device ohci
device ehci

USB スキャナが認識されたかを確認するには、 スキャナを接続して、dmesg を利用し、 システムメッセージバッファで、 スキャナが認識されているかどうかを確認してください。 認識されていたら、以下のようなメッセージが表示されます。

ugen0.2: <EPSON> at usbus0

この例では、EPSON Perfection® 1650 USB スキャナが /dev/ugen0.2 上で認識されています。

スキャナのインタフェースが SCSI であれば、 どの SCSI コントローラボードを使用するかを知ることが重要です。 使用する SCSI チップセットによって、 カスタムカーネルコンフィグレーションファイルを調整する必要があります。 GENERIC カーネルは、 一般に使用される SCSI コントローラのほとんどに対応しています。 /usr/src/sys/conf/NOTES ファイルを読んで、 適切な行をカーネルコンフィグレーションファイルに追加してください。 また、SCSI アダプタドライバに加えて、 以下の行をカスタムカーネルコンフィグレーションファイルに記述する必要があります。

device scbus
device pass

デバイスがメッセージバッファに出力されていることを確認してください。

pass2 at aic0 bus 0 target 2 lun 0
pass2: <AGFA SNAPSCAN 600 1.10> Fixed Scanner SCSI-2 device
pass2: 3.300MB/s transfers

システムを起動する際にスキャナの電源を入れてなければ、 camcontrol を使用して SCSI バスをスキャンし、 以下のように手動でデバイスを検出させることもできます。

# camcontrol rescan all
Re-scan of bus 0 was successful
Re-scan of bus 1 was successful
Re-scan of bus 2 was successful
Re-scan of bus 3 was successful

すると、スキャナは SCSI デバイスの一覧に現れるでしょう。

# camcontrol devlist
<IBM DDRS-34560 S97B>              at scbus0 target 5 lun 0 (pass0,da0)
<IBM DDRS-34560 S97B>              at scbus0 target 6 lun 0 (pass1,da1)
<AGFA SNAPSCAN 600 1.10>           at scbus1 target 2 lun 0 (pass3)
<PHILIPS CDD3610 CD-R/RW 1.00>     at scbus2 target 0 lun 0 (pass2,cd0)

FreeBSD における SCSI デバイスについての詳細は、 scsi(4) および camcontrol(8) をご覧ください。

7.7.2. SANE の設定

SANE システムは、 二つの部分、すなわちバックエンド (graphics/sane-backends) とフロントエンド (graphics/sane-frontends もしくは、graphics/xsane) に分割されています。 バックエンドはスキャナに対するアクセスを提供します。 どのバックエンドが画像スキャナに対応しているかについては、http://www.sane-project.org/sane-supported-devices.html を参照してください。 フロントエンドはグラフィカルなスキャニングインタフェースを提供します。 graphics/sane-frontends は、 xscanimage をインストールし、一方、 graphics/xsane は、 xsane をインストールします。

graphics/sane-backends port または package をインストールしたら、 sane-find-scanner コマンドを使用して、 SANE システムで検出されているスキャナを確認してください。

# sane-find-scanner -q
found SCSI scanner "AGFA SNAPSCAN 600 1.10" at /dev/pass3

この出力から、 スキャナインタフェースの種類と システムに接続されているスキャナが使用するデバイスノードがわかります。 ベンダ名や製品のモデル名は表示されないかも知れません。

注記:

いくつかの USB スキャナではファームウェアを読み込む必要がある場合があります。 詳細については、sane-find-scanner(1) および sane(7) を参照してください。

次に、スキャナがフロントエンドで認識されるか調べてください。 SANE のバックエンドには scanimage が付属します。 このコマンドを使用すると、 デバイスの一覧を表示したり画像を取得することができます。 スキャナデバイスの一覧を表示するには、 -L オプションを使ってください。 以下の最初の例は、SCSI スキャナ用のもので、 次の例は、USB スキャナ用のものです。

# scanimage -L
device `snapscan:/dev/pass3' is a AGFA SNAPSCAN 600 flatbed scanner
# scanimage -L
device 'epson2:libusb:/dev/usb:/dev/ugen0.2' is a Epson GT-8200 flatbed scanner

2 番目の出力の中で、 'epson2:libusb:/dev/usb:/dev/ugen0.2' がスキャナが使用するバックエンド名 (epson2) および /dev/ugen0.2 は、デバイスノードです。

scanimage がスキャナの認識に失敗した場合には、 以下のようなメッセージが表示されます。

# scanimage -L

No scanners were identified. If you were expecting something different,
check that the scanner is plugged in, turned on and detected by the
sane-find-scanner tool (if appropriate). Please read the documentation
which came with this software (README, FAQ, manpages).

このような場合には、/usr/local/etc/sane.d/ にあるバックエンドの設定ファイルを編集して、 使用するスキャナデバイスを設定してください。 例えば、認識されなかったスキャナのモデルが、 EPSON Perfection® 1650 で、epson2 バックエンドを使っているのであれば、 /usr/local/etc/sane.d/epson2.conf を編集してください。 編集作業を行う際には、 使用するインタフェースとデバイスノードを指定する行を追加します。 この例では、以下の行を追加します。

usb /dev/ugen0.2

編集を保存し、 適切なバックエンド名とデバイスノードでスキャナが認識されたかどうかを確認してください。

# scanimage -L
device 'epson2:libusb:/dev/usb:/dev/ugen0.2' is a Epson GT-8200 flatbed scanner

scanimage -L を実行してスキャナが認識されたことがわかれば、設定は終了です。 スキャナを使用する準備ができました。

scanimage を使用してコマンドラインから画像を取得することができますが、 GUI を使用して画像を取得できるとより望ましいでしょう。 graphics/sane-frontends package および port は、シンプルですが、 効率的なグラフィカルインタフェース xscanimage をインストールします。

一方、graphics/xsane package または port からインストールされる xsane は、 広く使われているもう一つのグラフィカルなスキャニングフロントエンドです。 Xsane には、さまざまなスキャニングモード、 色補正、バッチスキャンなど先進的な機能があります。 これらのアプリケーションの両方とも GIMP のプラグインとして使用することができます。

7.7.3. スキャナの許可属性

スキャナにアクセスするには、 ユーザはスキャナが使用するデバイスノードへの読み込み権限と書き込み権限が必要です。 今回の例では、USB スキャナは /dev/ugen0.2 デバイスノードを使用しています。 このデバイスノードは、 /dev/usb/0.2.0 へのシンボリックリンクです シンボリックリンクとデバイスノードは、 それぞれ wheel および operator グループが所有しています。 ユーザをこれらのグループに加えると、 スキャナを使用できるようになりますが、 ユーザを wheel に追加することは、セキュリティの観点からお勧めできません。 良い方法は、 スキャナデバイスにアクセスできるグループを作成することです。

この例では、usb という名前のグループを作成します。

# pw groupadd usb

その後、シンボリックリンク /dev/ugen0.2 および、/dev/usb/0.2.0 デバイスノードに対して、 usb グループが利用できるように書き込みの許可属性 0660 または 0664 を設定してください。 /etc/devfs.rules に次の行を追加すれば設定できます。

[system=5]
add path ugen0.2 mode 0660 group usb
add path usb/0.2.0 mode 0666 group usb

最後に、スキャナを利用するユーザを usb グループに追加してスキャナを利用できるようにしてください。

# pw groupmod usb -m joe

詳細については、pw(8) をご覧ください。

第8章 FreeBSD カーネルのコンフィグレーション

8.1. この章では

カーネルは FreeBSD オペレーティングシステムの中核をなすものです。 カーネルは、メモリ管理、セキュリティ制御の強制、ネットワーク、 ディスクアクセスなどを担っています。 FreeBSD の大部分は動的に構成することができるようになっていますが、 まだ、時にはカスタムカーネルを設定してコンパイルする必要があります。

この章では、以下のことを扱っています。

  • いつカスタムカーネルの構築が必要になるか。

  • ハードウェア一覧の作成方法。

  • カーネルコンフィグレーションファイルのカスタマイズの方法。

  • カーネルコンフィグレーションファイルから新しいカーネルを構築する方法。

  • 新しいカーネルのインストール方法。

  • うまく行かないときの問題解決法。

この章で表示されているすべてのコマンドは、root 権限で実行する必要があります。

8.2. なぜカスタムカーネルを作るか?

伝統的に、FreeBSD はモノリシック (monolithic) カーネルを使っていました。 このカーネルは、単一の巨大なプログラムで、 扱えるデバイスは固定されていて、 カーネルの振る舞いを変えたければ構築してコンピュータを再起動し、 新しいカーネルを動かさなれければなりませんでした。

今日では、FreeBSD カーネルのかなりの機能はモジュールに含まれるようになり、 必要に応じて動的にカーネルに組み込んだり外したりできるようになりました。 この移行により、 動作しているカーネルが新しいハードウェアに迅速に対応したり、 カーネルに新たな機能を取り入れられるようになります。 このようなカーネルは、モジュラ (modular) カーネルと呼ばれます。

しかしながら、 いまだにいくらかは静的にカーネルを構成する必要があります。 機能がカーネルとあまりに密接に結びついているため、 動的に組み込むことができない場合があるためです。 環境によっては、セキュリティの観点から、 カーネルモジュールを読み込んだり外すことができず、 必要となる機能を静的にカーネルにコンパイルしなければならない場合もあります。

システムに合わせたカーネルを構築することは、多くの場合、 高度な知識を持つ BSD ユーザが避けて通ることのできない通過儀礼です。 この作業は多くの時間を必要としますが、FreeBSD システムに利益をもたらします。 広範囲のハードウェアをサポートしなければならない GENERIC カーネルとは異なり、カスタムカーネルは、 使用しているコンピュータのハードウェアのみをサポートするように、 必要のない機能を省くことができます。これは、 次にあげるような利益をもたらします。

  • 素早く起動します。 カーネルはシステム上にあるハードウェアしか検出しないので、 システムの起動にかかる時間を短くできます。

  • メモリの消費量を減らすことができます。 システムに合わせたカーネルは、 使用しない機能やデバイスドライバを含まないので、 大抵 GENERIC カーネルより少ないメモリしか消費しません。 カーネルコードは常に物理メモリ上に存在し、 アプリケーションはその容量分のメモリを使用できないので、 これは重要なことです。 したがって、メモリが少ないシステムでは、 カーネルの再構築は重要です。

  • 追加のハードウェアをサポートします。 カスタムカーネルは、GENERIC カーネルに存在しないデバイスのサポートを追加することができます。

カスタムカーネルを構築する前に、再構築する理由を考えてください。 ある特定のハードウェアに対応する必要がある場合に、 そのハードウェアに対応するためのモジュールがすでに用意されていることがあります。

カーネルモジュールは /boot/kernel にあります。モジュールによっては kldload(8) により、 すでに実行中のカーネルに動的に読み込まれています。 ほとんどのカーネルドライバには、 読み込み可能なモジュールやマニュアルページが用意されています。 たとえば、ath(4) ワイヤレスイーサネットドライバのマニュアルページには以下のような記述があります。

Alternatively, to load the driver as a module at boot time, place the
following line in loader.conf(5):

    if_ath_load="YES"

/boot/loader.confif_ath_load="YES" を追加すると、 起動時にモジュールが読み込まれるようになります。

対応するモジュールが /boot/kernel に存在しないこともあります。 特定のサブシステムでは、ほとんど多くの場合存在しません。

8.3. システムのハードウェアについて知る

カーネルコンフィグレーションファイルの編集を始める前に、 コンピュータのハードウェア一覧を作成すると良いでしょう。 デュアルブートシステムでは、 現在インストールされている別のオペレーティングシステムの設定を調べることで、 一覧を作成できます。 たとえば、Microsoft® の デバイスマネージャ は、インストールされているデバイスに関する情報を持っています。

注記:

Microsoft® Windows® のバージョンによっては、 システム アイコンを使って、 デバイスマネージャ にアクセスできます。

インストールされているオペレーティングシステムが FreeBSD だけであれば、dmesg(8) を使い、 起動時に検出されたハードウェアの一覧を調べてください。 FreeBSD のほとんどのデバイスドライバにはマニュアルページが用意され、 対応しているハードウェアの一覧を提供しています。 たとえば、以下の行は、psm(4) ドライバがマウスを検出したことを示しています。

psm0: <PS/2 Mouse> irq 12 on atkbdc0
psm0: [GIANT-LOCKED]
psm0: [ITHREAD]
psm0: model Generic PS/2 mouse, device ID 0

このハードウェアはシステムに存在するので、 カスタムカーネルコンフィグレーションファイルからこのドライバを外さないでください。

dmesg が起動時の検出結果を表示しない場合には、 かわりに /var/run/dmesg.boot で出力を確認してください。

ハードウェアを見つけるためのもうひとつのツールは、 より冗長な出力を行う pciconf(8) です。 たとえば、以下のようになります。

% pciconf -lv
ath0@pci0:3:0:0:        class=0x020000 card=0x058a1014 chip=0x1014168c rev=0x01 hdr=0x00
    vendor     = 'Atheros Communications Inc.'
    device     = 'AR5212 Atheros AR5212 802.11abg wireless'
    class      = network
    subclass   = ethernet

この出力は、ath ドライバがワイヤレスイーサネットデバイスにあることを示しています。

man(1)-k フラグで実行すると、 有用な情報を得ることができます。たとえば、 ある特定の単語を含むマニュアルページの一覧を表示するには、 以下のようになります。

# man -k Atheros
ath(4)                   - Atheros IEEE 802.11 wireless network driver
ath_hal(4)               - Atheros Hardware Access Layer (HAL)

ハードウェアの一覧を作成したら、 この一覧を利用して、 カスタムカーネルのコンフィグレーションファイルを編集している時に、 インストールされているハードウェアのドライバが削除されていないことを確認してください。

8.4. コンフィグレーションファイル

カスタムカーネルのコンフィグレーションファイルを作成し、 カスタムカーネルを構築するには、 FreeBSD の全ソースツリーがまずインストールされている必要があります。

もし /usr/src/ が存在していなかったり、空であれば、 カーネルのソースはインストールされていません。 Subversion を使う」 で説明した Subversion を使ってソースをインストールしてください。

ソースをインストールしたら、 /usr/src/sys を確認して下さい。 このディレクトリには、いくつものサブディレクトリがあります。 その中には、サポートされている各アーキテクチャ amd64, i386, ia64, pc98, powerpc および sparc64 のサブディレクトリがあります。 各アーキテクチャのディレクトリ内部にあるファイルはすべてそのアーキテクチャでのみ使用されます。 残りのコードは、アーキテクチャに依存しない、 すべてのプラットフォームで共有されるコードです。 サポートされている各アーキテクチャには、 conf サブディレクトリがあり、 そのアーキテクチャ用の GENERIC カーネルコンフィグレーションファイルが用意されています。

この GENERIC は編集しないでください。 かわりに、このファイルを別名でコピーし、コピーを編集してください。 慣習として、この名前はすべて大文字でつづられます。もし、 いくつかの異なるハードウェアの FreeBSD マシンを扱うなら、 この名前にホスト名を含めるとよいでしょう。ここでは、例として MYKERNEL という名前の amd64 アーキテクチャ用の GENERIC コンフィグレーションファイルのコピーを作成します。

# cd /usr/src/sys/amd64/conf
# cp GENERIC MYKERNEL

これで、MYKERNELASCII テキストエディタで編集できます。 初心者に対してより簡単なエディタである ee も FreeBSD とともにインストールされていますが、 デフォルトのエディタは vi です。

コンフィグレーションファイルのフォーマットはシンプルです。 各行はデバイスやサブシステム、引数、または簡単な説明を含んでいます。 # に続くテキストはすべてコメントとして扱われ、 無視されます。 カーネルからデバイスもしくはサブシステムのサポートを外すには、 対応する行の最初に # を入れてください。 理解していない行に対しては、# を追加したり削除しないでください。

警告:

デバイスやオプションのサポートを外すことは簡単で、 その結果、カーネルを壊すことがあります。 たとえば ata(4) ドライバをカーネルコンフィグレーションファイルから除くと、 ATA ディスクドライバを用いているシステムは起動しません。 確信が持てないものについては、 カーネルにサポートを残したままにしてください。

このファイルで与えられる説明の他に、 そのアーキテクチャの GENERIC と同じディレクトリにある NOTES にも説明があります。 アーキテクチャに依存しないオプションについては、 /usr/src/sys/conf/NOTES をご覧ください。

ヒント:

カーネルコンフィグレーションファイルの編集を終えたら、 ファイルのバックアップを /usr/src 以外の場所に保存してください。

または、カーネルコンフィグレーションファイルは他の場所において、 シンボリックリンクを張る方法もあります。

# cd /usr/src/sys/amd64/conf
# mkdir /root/kernels
# cp GENERIC /root/kernels/MYKERNEL
# ln -s /root/kernels/MYKERNEL

コンフィグレーションファイルでは include ディレクティブを利用できます。 コンフィグレーションファイルに他のファイルを取り込むことができるので、 すでに存在するファイルに対する小さな変更の管理が簡単にできます。 オプションやドライバの追加が少しだけの場合には、 以下の例のように GENERIC からの差分による管理が可能になります。

include GENERIC
ident MYKERNEL

options         IPFIREWALL
options         DUMMYNET
options         IPFIREWALL_DEFAULT_TO_ACCEPT
options         IPDIVERT

この方法では、ローカルのコンフィグレーションファイルには、 ローカルにある GENERIC カーネルとの差分が記述されています。 アップグレードが行われると、 GENERIC に追加された新しい機能は、 (nooptionsnodevice によって外されない限り) ローカルのカーネルにも反映されます。 コンフィグレーションの構成要素に関する包括的な一覧と説明は config(5) にあります。

注記:

利用可能なすべてのオプションを含むファイルを構築するには、 以下のコマンドを root 権限で実行してください。

# cd /usr/src/sys/arch/conf && make LINT

8.5. カスタムカーネルの構築とインストール

カスタムコンフィグレーションファイルを編集して保存したら、 カーネルのソースコードを以下の手順でコンパイルしてください。

手順8.1 カーネルの構築
  1. 以下のディレクトリに移動してください。

    # cd /usr/src
  2. カスタムコンフィグレーションファイルの名前を指定して新しいカーネルをコンパイルします。

    # make buildkernel KERNCONF=MYKERNEL
  3. 指定したカーネルコンフィグレーションファイルでコンパイルされた新しいカーネルをインストールします。 以下のコマンドは、新しいカーネルを /boot/kernel/kernel に、 今までのカーネルを /boot/kernel.old/kernel という名前で保存します。

    # make installkernel KERNCONF=MYKERNEL
  4. 新しいカーネルを使うために、 システムをシャットダウンして再起動してください。 うまく行かない場合は、カーネルが起動しない を参照してください。

デフォルトでは、カスタムカーネルを構築すると、 すべてのカーネルモジュールが再構築されます。 カーネルのアップデートをより早く行いたい、または、 カスタムモジュールのみを構築したいといった場合は、 カーネルの構築を開始する前に、以下のように /etc/make.conf を編集してください。

例として、以下の変数は、 デフォルトのすべてのモジュールを構築する設定を変更し、 構築するモジュール一覧を指定します。

MODULES_OVERRIDE = linux acpi

また、以下の変数は、構築を行わないモジュールを指定します。

WITHOUT_MODULES = linux acpi sound

他の変数については、make.conf(5) を参照してください。

8.6. 問題が起きた場合には

カスタムカーネルを作る際に起こりうるトラブルは、 次の 4 種類に分けられます。

config コマンドの失敗

config で失敗した時には、 トラブルの起きた行番号が出力されます。 たとえば、次のように出力された場合には、 17 行目が正しく入力されているかどうか、 GENERICNOTES と比較して修正してください。

config: line 17: syntax error
make コマンドの失敗

make が失敗した場合には、 通常、カーネルコンフィグレーションファイルにおいて、 config がとらえられなかったような間違いをしています。 コンフィグレーションファイルを見直してください。 それでも問題を解決することができなければ、 FreeBSD general questions メーリングリスト へカーネルコンフィグレーションファイルを添付して送ってください。

カーネルが起動しない

新しいカーネルが起動しなかったり、 デバイスの認識をしない場合でもあわてないでください! さいわい、FreeBSD には利用できないカーネルから復帰する洗練されたメカニズムがあります。 FreeBSD のブートローダで起動したいカーネルを選択してください。 システムの起動メニューが表示されている時に、 Escape to a loader prompt オプションを選択するとアクセスできます。 プロンプトで boot kernel.old か他の正常に起動するカーネルを入力してください。

問題のないカーネルで起動した後、 コンフィグレー ションファイルを調べ、 再び構築を試みてください。 /var/log/messages にはすべての成功した起動時のカーネルメッセージの記録があり、 これは問題を解決するための助けになる情報の一つでしょう。また、 dmesg(8) は現在の起動時のカーネルメッセージを出力します。

注記:

カーネルの構築中にトラブルが起きた時には、 次回の構築で消されないように、 GENERIC のコピーや他の正常に起動するカーネルを別の名前で保存するようにしてください。 kernel.old は新しいカーネルをインストールする時に、 その一つ前にインストールした、 うまく動かないかもしれないカーネルで上書きされてしまうため、 起動するカーネルを保存しておくことは重要です。 できる限り早く以下のようにして、 正しく起動するカーネルを含むディレクトリ名に変更してください。

# mv /boot/kernel /boot/kernel.bad
# mv /boot/kernel.good /boot/kernel
カーネルは動きますが ps(1) は動きません!

システムユーティリティの構築されたバージョンと異るバージョンのカーネルをインストールした場合、 たとえば -CURRENT のソースから構築したカーネルを -RELEASE システム上にインストールするような場合には、 ps(1)vmstat(8) のような多くのシステムステータスコマンドは動かなくなります。 修正するには、カーネルと同じバージョンのソースツリーで world を再構築し、インストール してください。 カーネルとそれ以外で異なるバージョンを組み合わせてオペレーティングシステムを使用することは推奨されていません。

第9章 プリンタの利用

寄稿: Kelly Sean [FAMILY Given].
改訂:Mock Jim [FAMILY Given].

9.1. この章では

FreeBSD は古いインパクトプリンタから最新のレーザープリンタまで幅広いプリンタが利用でき、 実行しているアプリケーションから高品質な印刷出力が行えます。

FreeBSD はネットワーク上のプリンタサーバとして動作するように設定することもできます。 この機能は、他の FreeBSD コンピュータや、Windows® や Mac OS® ホストから印刷ジョブを受け取ることができます。 FreeBSD は印刷ジョブを 1 つずつ処理することを保証します。 また、どのユーザやマシンが最も多く印刷しているかの統計を取り、 どの印刷物が誰の物か表示する バナー ページの作成などを行うことができます。

この章を読めば以下のことがわかります。

  • FreeBSD プリントスプーラの設定方法。

  • 入力ドキュメントをプリンタが扱える印刷フォーマットへ変換するなどといった、 特別な印刷ジョブを別に取り扱うための印刷フィルタのインストール方法。

  • 印刷物へのヘッダやバナーの適用方法。

  • 他のコンピュータに接続されたプリンタで印刷する方法。

  • ネットワークに直接接続されたプリンタで印刷する方法。

  • 印刷ジョブの上限サイズや特定のユーザからの印刷拒否といった、 プリンタの制限の制御方法。

  • 印刷の統計とプリンタの使用状況の取得方法。

  • 印刷問題のトラブルシューティング方法。

この章を読み始める前に以下を済ませておいてください。

9.2. はじめに

FreeBSD でプリンタを使うために、それらを LPD スプーリングシステム、 または単に LPD としても知られる Berkeley ラインプリンタスプーリングシステムで動作するように設定できます。 これは FreeBSD での標準的なプリンタ制御システムです。 この章では、LPD を紹介し、 その設定方法について説明します。

あなたがすでに LPD やその他のプリンタスプーリングシステムに詳しいのなら、 基本的な設定 まで読み飛ばしてもかまいません。

LPD はホストのプリンタに関するあらゆることを制御します。 ここで言う制御としては、次のことがあげられます。

  • ホストに接続されたプリンタ、 あるいはネットワーク上の他ホストに接続されたプリンタに対するアクセス制御を行ないます。

  • ファイルをプリントする要求に対して許可を与えます。 この要求は特にジョブと呼ばれています。

  • 各々のプリンタのキューを管理することにより、 複数のユーザがあるプリンタに対して同時にアクセスすることを防ぎます。

  • ヘッダページ (バナーまたは バーストページとしても知られています) をプリントすることができます。 これにより、 プリントアウトの山の中から自分がプリントしたジョブを見つけやすくなります。

  • シリアルポートに接続したプリンタ用に通信パラメータを管理します。

  • ネットワーク経由で他のホスト上の LPD スプーラにジョブを送ることができます。

  • 様々なプリンタ言語やプリンタの能力に応じてジョブの形式を整えるため、 特別なフィルタを起動することができます。

  • プリンタの使用に対して課金を行なうことができます。

設定ファイル (/etc/printcap) を通して、専用のフィルタプログラムを用いることにより、 多種多様なプリンタ機器に対して、上述の機能の全部または一部を LPD システムに行なわせることができます。

9.2.1. どうしてスプーラを使うべきなのか

あなたのシステムを利用するのがあなた一人だけだとしても、 スプーラは有用ですし、使用すべきです。その理由は以下のとおりです。

  • LPD はジョブをバックグラウンドで処理します。 データがプリンタに送信されるまで待つ必要がなくなります。

  • LPD ではジョブをフィルタを通してプリントすることが簡単にできます。 これにより、印刷物のヘッダに時刻や日付を入れたり、 特別なファイル形式 (TeX の DVI ファイルなど) をプリンタが処理できる形式に変更することができ、 これらの作業を手動で行なう必要がなくなります。

  • プリント処理を行なうフリー、 または商用のプログラムのほとんどは、 システムのスプーラとやりとりするように作られています。 スプーリングシステムをセットアップすることで、 今後加えるかもしれない、あるいは、 すでに持っている別のソフトウェアをより簡単にサポートすることができるでしょう。

9.3. 基本的な設定

LPD スプーリングシステムを用いてプリンタを使用するためには、 プリンタ機器と LPD 用ソフトウェアの両方を準備する必要があります。 本文書では次の二段階のレベルに分けて説明をします。

  • プリンタを接続する方法、 プリンタにどのように通信するかを LPD に指示する方法や、 プレインテキストをプリンタで印字する方法については、 プリンタの簡単な設定をご覧ください。

  • 様々な形式のファイルを印字する方法、 ヘッダページを印字する方法、 ネットワーク経由でプリンタに印字する方法、 プリンタを制御する方法、 プリンタの使用に対する課金を行なう方法についてはプリンタ設定上級編をご覧ください。

9.3.1. プリンタ設定導入編

この節では、プリンタ機器やプリンタを使用するための LPD 用ソフトウェアを設定する方法について述べます。 この節の概要は次のとおりです。

  • プリンタ機器の設定では、 プリンタをコンピュータに接続するためのヒントがいくつか書かれています。

  • ソフトウェアの設定では、 LPD のスプーラ設定ファイル (/etc/printcap) の設定方法について書かれています。

データをプリンタに送るのにコンピュータのローカルインタフェースではなく、 ネットワークプロトコルを使用する場合は、 ネットワークにおけるデータストリームインタフェースを持つプリンタをご覧ください。

この節のタイトルは プリンタ設定導入編 ですが、 実際の設定はかなり複雑です。 プリンタをコンピュータに接続し、 LPD スプーラを起動させることは一番困難な作業です。 ヘッダページを出力させたり課金したりするオプションの設定は、 一度プリンタがうまく動くようになればとても簡単です。

9.3.1.1. プリンタ機器の設定

この節では、プリンタに PC を接続するための様々な方法について説明しています。 ここでは、ポートやケーブルの種類、 FreeBSD がプリンタとの通信に必要なカーネルコンフィグレーションについても言及しています。

もしプリンタが既に接続されていて、 他のオペレーティングシステム上でプリンタからの印字に成功している場合は、 ソフトウェアの設定まで読み飛ばすことが多分できるでしょう。

9.3.1.1.1. ポートとケーブル

今日 PC 用に売られているプリンタには通常、 次の 3 つのインタフェースのうち、どれか 1 つ以上がついてきます。

  • シリアルインタフェース (RS-232 または COM ポートとも呼ばれます) は、 コンピュータにあるシリアルポートを使ってプリンタにデータを送信します。 シリアルインタフェースはコンピュータ業界で共通して使用されています。 そのケーブルは容易に手に入りますし、簡単に自作することもできます。 シリアルインタフェースの場合は時々、 特別なケーブルや何か複雑な通信方式選択の設定が必要になることがあります。 ほとんどの PC のシリアルポートは通信速度が最大で 115200 bps であり、 大きな画像を印刷するのには実用的ではありません。

  • パラレルインタフェースではプリンタにデータを送信するために、 コンピュータにあるパラレルポートを使用します。 パラレルインタフェースは PC 業界ではよく使われており、 RS-232 シリアルよりも速いです。 ケーブルの入手は容易ですが、 自作するのはシリアルよりも困難です。 パラレルインタフェースには通常、通信方式の選択はなく、 設定は極めて単純です。

    パラレルインタフェースは セントロニクス インタフェースとして知られています。 これは、プリンタ用のコネクタタイプとして採用された後に名付けられました。

  • USB インタフェースは、Universal Serial Bus (汎用シリアルバス) の略で、パラレルや RS-232 シリアルよりさらに速く動作します。 ケーブルは単純で安価です。USB は、印刷目的には RS-232 シリアルやパラレルよりも向いていますが、UNIX® システムでは十分対応されていません。 この問題を回避する手としては、多くのプリンタがそうですが、 USB とパラレルの両方のインタフェースを備えたプリンタを購入することが挙げられます。

パラレルインタフェースでは、普通は (コンピュータからプリンタへの) 単方向通信のみを行なうのに対して、 シリアルおよび USB インタフェースは双方向通信を行ないます。 FreeBSD でも IEEE1284 準拠のケーブルを使えば、 最近のパラレルポート (EPP や ECP) とプリンタの多くで双方向通信を行なうことができます。

パラレルポート経由のプリンタとの双方向通信には、 通常 2 つの方法のどちらかが使われます。一つ目の方法は、 プリンタが使用しているプロプライエタリな言語を話す FreeBSD 用に作成されたプリンタドライバを使うものです。 これはインクジェットプリンタではよく使われる方法で、 インクの残量やその他の状態の情報を知らせるのに使えます。 二つ目の方法は、プリンタが PostScript® に対応している時に使われます。

PostScript® ジョブは、実際にはプリンタに送信されるプログラムです。 印字作業を行う必要は必ずしありませんし、 プログラムの結果を直接コンピュータに返してもよいのです。 PostScript® プリンタでは双方向通信を使って PostScript® プログラムのエラーや紙づまりといった問題をコンピュータに報告します。 ユーザはそれらの情報を知りたいと思うかも知れません。 また、PostScript® プリンタで課金作業をもっとも効率よく行なうためには、 双方向通信が必要となります。 この方法ではまず、プリンタの現在のページカウント (起動してから今まで何枚の紙を印字したか) の情報を得ます。 次に、ユーザのジョブを実行し、終了後、再びページカウントを得ます。 この二つの数を差によって、 課金対象となる紙の枚数を知ることができるのです。

9.3.1.1.2. パラレルポート

プリンタをパラレルインタフェースを使って接続する場合は、 セントロニクスケーブルでプリンタとコンピュータを接続してください。 詳しい説明はプリンタやコンピュータに付属する説明書に書かれているはずです。

その際、 どのパラレルポートを使用したかを覚えておいてください。 FreeBSD では最初のポートは ppc0、 二番目が ppc1 であり、 三番目以降も同様に続きます。 プリンタのデバイス名にも同じ形式が使われており、 最初のパラレルポートに接続されたプリンタは /dev/lpt0 などとなります。

9.3.1.1.3. シリアルポート

シリアルインタフェースを使ってプリンタを使う場合は、 適切なシリアルケーブルでプリンタとコンピュータを接続してください。 詳しい説明はプリンタ、コンピュータ、あるいは両方に付属する説 明書に書かれているはずです。

適切なシリアルケーブル が良くわからないときは、 次のどれかを試してみてください。

  • モデム用ケーブルでは、 それぞれのピンは他方のコネクタの対応するピンと線でつながっています。 このタイプのケーブルは DTE-DCE 間ケーブルとしても知られています (訳注: 日本ではストレートケーブルという名前で売られています)。

  • ヌルモデム用ケーブルでは、 あるピンは対応するピンとを接続していますが、 あるピン (たとえば、データ送信用とデータ受信用のピン) が交差して接続したり、 いくつかのピンは内部で短絡していたりします。 このタイプのケーブルは、 DTE-DTE 間ケーブルと呼ばれています (訳注: 日本ではクロスケーブルという名前で売られています)。

  • A シリアルプリンタ用ケーブルは、 ある特定のプリンタで必要とされるものです。 ヌルモデムケーブルと似ていますが、 内部で短絡させる代わりに、 ある信号を他方側に送るために使用しています。

この他に、 プリンタ用の通信パラメータを設定する必要があります。 通常、プリンタのフロントパネルや DIP スイッチによって制御します。 コンピュータとプリンタの双方で設定できる最高の通信速度 [bps] (ビット/秒、 ボーレートと示されているときもある) を選んでください。そして、データビット (7 または 8)、 パリティ (偶/奇/なし)、ストップビット (1 または 2) を選んでください。 そして、フローコントロールの有無 (制御なし、または XON/XOFF (イン・バンド または ソフトウェア フローコントロールとも呼ばれる)) を選びます。 以下に続くソフトウェアの設定のために、 ここでの設定を覚えておいてください。

9.3.1.2. ソフトウェアの設定

本節では FreeBSD の LPD スプーリングシステムで印字をおこなうために 必要となるソフトウェアの設定について説明しています。

本節の概要は次のようになります。

  1. プリンタで使用するポートのために、必要があれば、 カーネルの書き変えをおこないます。「カーネルの変更」で、 このためにしなくてはならないことを説明しています。

  2. パラレルポートを使用している場合は、 パラレルポートのための通信モードを設定します。 詳細は、 「 パラレルポートの通信モードを設定する」 で説明しています。

  3. オペレーティングシステムからプリンタにデータが送ら れているかをテストします。「プリンタとの通信状況を調べる」で、 どのようにテストするかの提案をいくつかおこなっています。

  4. ファイル/etc/printcapを変更し、 LPD の設定をおこないます。 この節で、どのように変更するかを説明しています。

9.3.1.2.1. カーネルの変更

オペレーティングシステムのカーネルの コンパイルをおこなうことによって、 指定されたデバイスが機能するようになります。シリアル、 または、パラレルインタフェースをプリンタで使用する場合、 必要なデバイスがこの指定の中に含まれていなくてはなりません。 したがって、 必要なデバイスがカーネルに組み込まれていない場合、 追加のシリアル、または、パラレルポートをサポートするために、 カーネルの再コンパイルが必要となるかもしれません。

シリアルポートが現在使用しているカーネルで サポートされているかどうかを調べるためには、 次のように入力します。

# grep sioN /var/run/dmesg.boot

ここで、N はシリアルポートの番号を示し、この番号は 0 から始まります。 次のような出力があった場合、 カーネルはそのポートをサポートしています。

sio2 at port 0x3e8-0x3ef irq 5 on isa
 sio2: type 16550A

パラレルポートが現在使用しているカーネルで サポートされているかどうかを調べるためには、 次のように入力します。

# grep ppcN /var/run/dmesg.boot

ここで、N はパラレルポートの番号を示し、この番号は 0 から始まります。 次のような出力があった場合、 カーネルはそのポートをサポートしています。

ppc0: <Parallel port> at port 0x378-0x37f irq 7 on isa0
ppc0: SMC-like chipset (ECP/EPP/PS2/NIBBLE) in COMPATIBLE mode
ppc0: FIFO with 16/16/8 bytes threshold

上記の出力が得られない場合、プリンタを使うため、 オペレーティングシステムにパラレル、または、 シリアルポートを認識し、使用できるようにするためには カーネルを変更する必要があります。

シリアルポートをサポートさせるには、「 FreeBSD カーネルのコンフィグレーション」の節をご覧く ださい。パラレルポートをサポートさせる場合も、その節と、 あわせて、 この節に続く節もご覧ください。

9.3.1.3. パラレルポートの通信モードを設定する

パラレルインタフェースを使用している場合、FreeBSD では、 割り込み駆動型にするか、 プリンタとの通信の状況をカーネルに監視させるかのいずれかを選択できます。 FreeBSD の汎用プリンタデバイスドライバ (lpt(4)) は ppbus(4) システムを利用しています。 これは ppc(4) ドライバを使ってパラレルポートのチップセットを制御します。

  • GENERIC カーネルでは割り込み駆動方式がデフォルトになっています。 この方式では、 オペレーティングシステムはプリンタがデータを受け付けられるかどうかを調べるために、 IRQ ラインを一つ使用します。

  • 監視方式では、 オペレーティングシステムにプリンタがもっとデータを受け付けられるかどうかを繰り返し尋ねるように指示します。 そして、受け付けるという応答を受けたとき、 カーネルはさらなるデータを送信します。

割り込み駆動方式は一般的にいくらか高速になりますが、貴重な IRQ ラインを一つ消費します。 HP の新しいプリンタの一部には、明らかに何かしらのタイミングの問題 (まだ正確にはわかっていません) で割り込みモードでは正常に動作しないものがあると言われています。 これらのプリンタにはポーリングモードが必要になります。 どちらかうまく機能する方を使ってください。 一部のプリンタはどちらの方式でも動作しますが、 割り込みモードでは苦痛を感じるほど低速です。

通信モードを設定するためには 2 つの方法があります。 1 つはカーネルを変更することで、もう一つは lptcontrol(8) プログラムを使用する方法です。

カーネルを設定することによって、 通信モードを変更する。

  1. カーネルコンフィグレーションファイルを変更します。 ppc0 のエントリを探してください。 2 番目のパラレルポートを設定するときは、代わりに ppc1 を使います。 以下、3 番目のポートは ppc2 となっていきます。

    • 割り込み駆動方式にする場合は、 /boot/device.hints ファイルの以下の行を編集して、 N を適切な IRQ 番号に置き換えてください。

      hint.ppc.0.irq="N"

      カーネルの設定ファイルには ppc(4) ドライバも入れなければなりません。

      device ppc
    • ポーリングモードを使用する場合は、 /boot/device.hints ファイルの以下の行を削除してください。

      hint.ppc.0.irq="N"

      場合によっては、これだけでは FreeBSD でポートをポーリングモードにするには十分ではないことがあります。 多くの場合これは acpi(4) ドライバと併せて動作します。 これはデバイスのプローブとアタッチを行うので、 プリンタポートへのアクセスモードを制御できます。 問題を修正するために acpi(4) の設定を確認してください。

  2. ファイルをセーブし、config プログラムを起動し、 カーネルの構築、インストールをおこないます。そして、 リブートしてください。詳細は、「 FreeBSDカーネルのコンフィグレーション」を参照 してください。

lptcontrol(8) で通信モードを設定する場合

  1. lptN をイベント駆動方式に設定する場合は、 次のように入力します。

    # lptcontrol -i -d /dev/lptN
  2. lptN を監視方式に設定する場合は、次のように入力します。

    # lptcontrol -p -d /dev/lptN

これらのコマンドを /etc/rc.local ファイルに追加 しておくと、システムをブートする度に通信モードを設定する ことができます。詳細については、 lptcontrol(8) をご覧ください。

9.3.1.4. プリンタとの通信状況を調べる

スプーリングシステムの設定に進む前に、オペレーティング システムがプリンタにデータを送ることに成功しているかどうか を確かめるべきでしょう。これにより、印字がうまくいかないと き、プリンタとの通信が問題なのか、スプーリングシステムが問 題なのかを分けて調べることがかなり容易になります。

プリンタをテストするためには、 プリンタに何かのテキストを送 信してみます。送信した文字をすぐに印字してくれるプリンタに は、lptest(1) コマンドを使うと有用です。このコマンドは印 字可能な 96 文字の ASCII 文字すべてを 96 行生成します。

PostScript® (または他の言語に対応した) プリンタの場合 は、もっと巧妙なテストが必要になります。次のような、簡単な PostScript® プログラムを使えば十分でしょう。

%!PS
100 100 moveto 300 300 lineto stroke
310 310 moveto
/Helvetica findfont 12 scalefont setfont
(Is this thing working?) show
showpage

上の PostScript® コードはファイルに保存し、 以降の節で例として示されているように利用することができます。

注記:

このドキュメントでプリンタ用言語を参照するときは、 PostScript® のような言語を仮定しており、Hewlett Packard の PCL は考慮していません。PCL は非常に機能的なの ですが、 プレインテキストにエスケープシーケンスを混ぜること ができます。PostScript® ではプレインテキストを直接印字 することはできません。 このような種類のプリンタ言語に対しては、 特別な対応をおこなわなければなりません。

9.3.1.4.1. パラレルポートのプリンタとの接続を調べる

この節では、FreeBSD がパラレルポートに接続されたプリ ンタと通信できているかどうかを調べる方法について説明し ています。

パラレルポートのプリンタをテストするために

  1. su(1) コマンドで root になります。

  2. プリンタにデータを送ります。

    • プリンタがプレインテキストを印字できる場合、 lptest(1) コマンドを使います。 次のように入力してください。

      # lptest > /dev/lptN

      ここで、N はパラレルポートの番号で、番号は 0 から始まります。

    • プリンタが PostScript® か他のプリンタ 言語を使用している場合、そのプリンタに簡単なプロ グラムを送信してください。次のように入力します。

      # cat > /dev/lptN

      そして、一行一行、 プログラムを慎重に入力して 下さい。RETUREN または ENTER キーを入力してしま うと、その行は編集できなくなります。プログラムの 入力が終わったら、CONTROL+D か、あなたが設定して いるファイル終了のキーを押してください。

      もしくは、プログラムを入力したファイルがある 場合は、次のように入力してください。

      # cat file > /dev/lptN

      ここで、file はプログラムが格納されていて、 プリンタに送信するファイルの名前です。

これで何かが印刷されるはずです。 印字されたテキストがおかしくても心配は無用です。 それについては、後で修正します。

9.3.1.4.2. シリアルポートのプリンタとの接続を調べる

この節では、FreeBSD がシリアルポートに接続されたプリ ンタと通信できているかどうかを調べる方法について述べられ ています。

シリアルポートのプリンタをテストするために

  1. su(1) コマンドで root になります。

  2. /etc/remote ファイルを編集します。次のエントリを加えてください。

    printer:dv=/dev/port:br#bps-rate:pa=parity

    ここで、port シリアルポート (ttyu0ttyu1 など) のデバイスエントリで、 bps-rateは プリンタとの通信の転送速度[bit/秒]、 parityはプリ ンタとの通信で必要とされるパリティ (evenoddnonezeroのいずれか) を表わしていま す。

    次の例は、 プリンタをシリアルケーブルでパリティなし、転送速度 19200 bps で第 3 番目のシリアルポートに接続した場 合です。

    printer:dv=/dev/ttyu2:br#19200:pa=none
  3. tip(1) コマンドでプリンタと接続します。 次のように入力してください。

    # tip printer

    これがうまくいかなかった場合は、 /etc/remoteを編集して、 /dev/ttyuN の代わりに /dev/cuaaN を試してみてください。

  4. プリンタにデータを送ります。

    • プリンタがプレインテキストを印字できる場合、 lptest(1) コマンドを使います。 次のように入力してください。

      % $lptest
    • プリンタが PostScript® か他のプリンタ言語を使用している場合、 そのプリンタに簡単なプログラムを入力します。 一行一行、プログラムを慎重に入力してください。 バックスペースキーや他の編集用のキーは、 プリンタの制御コードに割り当てられているかもしれません。 プログラムが終了したことをプリンタに伝えるための特別なファイル終了キーを 入力する必要があるかもしれません。 PostScript® プリンタの場合、 CONTROL+D を入力します。

      もしくは、プログラムを入力したファイルがある場合は、 次のように入力してください。

      % >file

      ここで、file はプログラムが格納されているファイル名です。 tip(1) コマンドでファイルを送信した後は、 ファイル終了を表わすキーを入力する必要があります。

これで何かがプリントされることでしょう。 印字されたテキ ストがおかしくても心配しなくても構いません。 それについては、後で修正します。

9.3.1.5. スプーラに許可を与える: /etc/printcap ファイル

ここまでで、プリンタはコンピュータに接続され、(必要なら) プリンタと通信できるようにカーネルを変更し、 簡単なデータをプリンタに送信することができているはずです。 これで、LPD にプリンタへのアクセスを 制御させる設定をおこなう準備が整いました。

LPD の設定は /etc/printcap を編集することでおこないます。 LPD スプーリングシステムは スプーラが使われる毎にこのファイルを参照します。 そのため、ファイルを更新するとすぐにその変更が反映されます。

printcap(5) ファイルの書式は簡単です。 /etc/printcap の編集はお好みのテキストエディタをお 使いください。このファイルの書式は、 /usr/share/misc/termcap/etc/remote といった他のケイパビリティファイルと一致しています。 この書式 についての詳細な情報については cgetent(3) をご覧ください。

スプーラの単純な設定法は、 次のステップでおこないます。

  1. プリンタに名前 (と簡単な別名 2 〜 3 個) を付け、それを /etc/printcap ファイルに記述します。 これについては、「 プリンタに名前を付ける」 を参照してください。

  2. sh の項目を追加することで、 ヘッダページの出力を禁止します (デフォルトは許可)。 これについては、「 ヘッダページの印字を禁止する」 を参照してください。

  3. スプール用のディレクトリを作成し、その位置を sd 項目で指定します。これについては、 「 スプーリングディレクトリの作成」 を参照してください。

  4. プリンタを使用するために /dev エントリを設定し、/etc/printcaplp 項目でそのエントリを指定します。 これについては、「 プリンタデバイスの特定」 を参照してください。 プリンタをシリアルポートに接続した場合は、 ms# の項目を設定する必要があります。こちらについては、 「 スプーラのための通信パラメータの設定」 を参照してください。

  5. プレインテキスト用の入力フィルタのインストールをおこないます。 「テキストフィルタのインストール」 を参照してください。

  6. lpr(1) コマンドで何かを印字することで設定のテストをおこないます。 印字してみようトラブルシューティング を参照してください。

注記:

PostScript® プリンタのような、 プリンタ言語を使用しているプリンタには、 プレインテキストを直接印字させることができません。 上にアウトラインを示し、 以下の節で説明する簡単な設定方法の説明では、 そのようなプリンタを設置している場合は、 プリンタが認識できるファイルだけを印字の対象としているという 仮定をしています。

多くの場合、 利用者はシステムに設置されているプリンタすべてで プレインテキストが印字できることを期待しています。 印字作業をおこなうために LPD のインタフェースを利用するプログラムでも、 通常、そのような仮定を置きます。 プリンタ言語を使用するプリンタを設置しており、 そのプリンタ言語で記述されたジョブと、 これに加えて、 プレインテキストのジョブも印字できるようにしたいならば、 上で示した簡単な設定方法に加えて、 さらなる設定をおこなうことを強くお勧めします。すなわち、 自動的にプレインテキストから PostScript® (もしくは、 他のプリンタ言語) に変換するプログラムをインストールしてください。「 プレインテキストのジョブを PostScript® プリンタで印字する」 で、それをどのようにおこなえばよいのかが説明されています。

訳注:

日本語を印字したい場合は、プリンタ言語を使用し ていない「日本語プリンタ」についても、 プリンタ固有のエスケープシーケンスを送る必要があります。 また、漢字コードをプリン タが設定しているものに変換したりする必要があり、 各プリンタ毎に、日本語用のフィルタが必要になります。

9.3.1.5.1. プリンタに名前を付ける

最初の (簡単な) ステップで、プリンタの名前を考えます。 プリンタには別名をいくつか付けることもできるので、 機能的な名前 でも風変わりな名前でもどちらを選んでもまったく 問題はありません。

少なくとも1つのプリンタには、 /etc/printcap の中で、 lp という別名を持たせるべきでしょう。 この名前はデフォルトのプリンタ名になっています。 ユーザが環境変数 PRINTER を設定しておらず、 かつ、LPD コマンドのコマンドラインで プリンタの名前が指定されていない場合、lp がデフォルトのプリンタ名となり、 そのプリンタに出力されます。

それから、これは共通の慣習ですが、 プリンタの最後の別名には、 メーカーやモデル名を含むプリンタの完全な名称をつけることに なっています。

名前と別名のいくつかを決めたら、 /etc/printcap ファイルに設定します。 プリンタ名は一番左のカラムから書き始めます。 別名はそれぞれ縦棒によって区切られ、 最後の別名の後ろにコロンを置きます。

次の例では、2 台のプリンタ (Diablo 630 ラインプリンタと Panasonic KX-P4455 PostScript® レーザライタプリンタ) が定義 されている /etc/printcap のスケルトンを記しています。

#
#  /etc/printcap for host rose
#
rattan|line|diablo|lp|Diablo 630 Line Printer:

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:

この例では、最初のプリンタに rattan という名前と別名として、linediablolp そして Diablo 630 Line Printer が付けられています。別名とし て lp があるので、このプリンタはデフォルトのプリンタとなっ ています。2 番目は bamboo と名付けられ、 別名として、psPSSpanasonicPanasonic KX-P4455 PostScript v51.4 が付けられています。

9.3.1.5.2. ヘッダページの印字を禁止する

LPD スプーリングシステムでは、 デフォルトでジョブ毎に ヘッダページを印字します。 ヘッダページにはジョブを要求したユーザ名、 ジョブが送られたホスト名、そして、ジョブの名前が素晴 らしい大きな文字で印字されています。 残念なことに、この余分なテキストすべてが、 簡単なプリンタ設定法のデバッグの際に紛れ込んできてしまいます。 このため、ヘッダページの出力を禁止しておきます。

ヘッダページの出力を禁止するには、 /etc/printcap にあるプリンタのエントリに sh の項目を追加します。次に、sh を加えた /etc/printcap の例を示します。

#
#  /etc/printcap for host rose - no header pages anywhere
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
        :sh:

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
        :sh:

この書式を正しく使うための注意をしておきます。 最初の行は左端のカラムから始めます。 それに続く行は字下げします。最後の行以外のすべての行は、 行末にバックスラッシュを記述します。

9.3.1.5.3. スプーリングディレクトリの作成

スプーラの簡単な設定の次のステップでは、 スプーリングディレクトリを作成します。 プリンタに送られるジョブは、 その印字が終了するまでこのディレクトリに置かれます。また、 他のたくさんのスプーラもこのディレクトリにファイルを置きます。

様々な事情によりスプーリングディレクトリは、通常、慣例 として /var/spool の下に置きます。 また、スプーリングディレクトリの内容は バックアップをする必要はありません。 mkdir(1) によってディレクトリを 作るだけでスプーリングディレクトリの復旧は完了します。

スプーリングディレクトリの名前は、これも慣例ですが、 次のようにプリンタの名前と同じにします。

# mkdir /var/spool/printer-name

しかしながら、ネットワーク上に使用可能なプリンタがたく さんあるならば、LPD で印字するための専用のディレクトリにスプーリングディレクトリを置きたくなるかもしれません。 例に出てきたプリンタ rattanbamboo について、この方式を採用すると、 次のようになります。

# mkdir /var/spool/lpd
# mkdir /var/spool/lpd/rattan
# mkdir /var/spool/lpd/bamboo

注記:

各ユーザが印字するジョブのプライバシを守りた いと考えているならば、スプーリングディレクトリを保護し て、これを誰からでもアクセスできないようにしたいと思う かもしれません。スプーリングディレクトリは、 daemon ユーザと daemon グループに所有され、 読み込み、書き込み、検 索可能であり、他からはアクセスできないようにするべきで す。例題のプリンタに対して、次のようにすることにしましょ う。

# chown daemon:daemon /var/spool/lpd/rattan
# chown daemon:daemon /var/spool/lpd/bamboo
# chmod 770 /var/spool/lpd/rattan
# chmod 770 /var/spool/lpd/bamboo

最後に、/etc/printcap ファイルで、 これらのディレクトリの位置を LPD に伝える必要があります。 スプーリングディレクトリのパス名は sd 項目で指定します。

#
#  /etc/printcap for host rose - added spooling directories
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
        :sh:sd=/var/spool/lpd/rattan:

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
        :sh:sd=/var/spool/lpd/bamboo:

プリンタ名が最初のカラムから始まっており、 そのプリンタに関して記述される他の項目は字下げされていること、 各行がバックスラッシュで終わっていることに注意してください。

sd によりスプーリングディレクトリが指定されていない場合、 スプーリングシステムは /var/spool/lpd をデフォルト値として使用します。

9.3.1.5.4. プリンタデバイスの特定

プリンタ機器の設定 の節では、FreeBSD でプリンタとの通信に使用されるポートおよび /dev ディレクトリ内のエントリを特定します。 そして、LPD にその情報を伝えます。 印字するジョブを受け取ると、スプーリングシステムは、 (プリンタにデータを渡す義務がある) フィルタプログラムに代わって指定されたデバイスをオープンします。

/etc/printcap ファイルで lp 項目を使って /dev エントリを記入します。

ここでの例では、rattan は 1 番目のパラレルポートに、bamboo は 6 番目のシリアルポートに接続されていることにしましょう。 このとき、/etc/printcap には 次のようになります。

#
#  /etc/printcap for host rose - identified what devices to use
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
        :sh:sd=/var/spool/lpd/rattan:\
        :lp=/dev/lpt0:

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
        :sh:sd=/var/spool/lpd/bamboo:\
        :lp=/dev/ttyu5:

/etc/printcap でプリンタの lp 項目が指定されていない場合は、 LPD はデフォルトとして /dev/lp を使用します。/dev/lp は、現在の FreeBSD には存在していません。

設置したプリンタがパラレルポートに 接続されている場合は、 「 テキストフィルタのインストール」 まで読み飛ばしてください。 そうでない場合は、次節の説明に続いてください。

9.3.1.5.5. スプーラのための通信パラメータの設定

シリアルポートにプリンタを接続した場合、 LPD は、プリンタにデータを送信するフィルタプログラムに代わり、 通信速度やパリティ、 その他のシリアル通信パラメータを設定することができます。 このことによる利点は、

  • /etc/printcap を編集するだけで、 様々な通信パラメータを試してみることができます。 フィルタプログラムを再コンパイルする必要はありません。

  • スプーリングシステムで、 シリアル通信の設定が異なっているかもしれない複数のプリンタに 同じフィルタプログラムを使うことが可能になります。

次の /etc/printcap の項目で、 lp で指定された デバイスのシリアル通信パラメータを制御できます。

br#bps-rate

デバイスの通信速度を bps-rate に設定します。 ここで、bps-rate は 50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, 4800, 9600, 19200, 38400, 57600, 115200 [bit/秒] のいずれかです。

ms#stty-mode

デバイスをオープンした後にターミナルデバイスのオプションを設定します。 利用できるオプションについては stty(1) を参照してください。

lp で指定されたデバイスをオープンするとき、 LPDms# で指定されたデバイスの特性を設定します。 特に関係があるのは、parenb, parodd, cs5, cs6, cs7, cs8, cstopb, crtscts, ixon モードです。 これらは stty(1) のマニュアルページで説明されています。

例題のプリンタで6番目のシリアルポートに接続された プリンタの設定を追加してみましょう。 通信速度は 38400bps に設定します。 モードとして、-parenb でパリティ無し、 cs8 で 8 ビットキャラクタ、 clocal でモデム制御無し、 そして crtscts でハードウェアフロー制御を設定します。

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
        :sh:sd=/var/spool/lpd/bamboo:\
        :lp=/dev/ttyu5:ms#-parenb cs8 clocal crtscts:
9.3.1.5.6. テキストフィルタのインストール

ここまでで、 プリンタにジョブを送るために使うテキストフィルタを LPD に設定する準備が整いました。 テキストフィルタとは、 入力フィルタとしても知られていますが、 印字するジョブがあるときに LPD が起動するプログラムです。 LPD がプリンタのためにテキストフィルタを起動するとき、 LPD はフィルタの標準入力からプリントするジョブを入力し、 フィルタの標準出力に項目 lp で指定されたプリンタデバイスを接続します。フィルタは、 標準入力からジョブを読み込み、 プリンタのための必要な変換をおこなった後、 その結果を標準出力に出力する、 これにより印字がなされることを期待されています。 テキストフィルタについての更に詳しい情報については、「 フィルタはどのように機能しているか」 をご覧ください。

ここでの簡単なプリンタ設定では、 プリンタにジョブを送るため、/bin/cat を実行するだけの簡単なシェルスクリプトで間に合います。 FreeBSD に標準で付属している lpf というフィルタでは、バックスペース文字を使った 下線引きの動作をおこなう文字ストリームをうまく扱うことができない プリンタのための代替処理をおこなってくれます。 もちろん、 他のどんなフィルタプログラムを使っても構いません。 フィルタ lpf については、「テキストフィルタ lpf」で詳しく説明します。

最初に、簡単なテキストフィルタであるシェルスクリプト /usr/local/libexec/if-simple を作ってみましょう。 次のテキストをお好みのテキストエディタでファイルに 書き込んでください。

#!/bin/sh
#
# if-simple - Simple text input filter for lpd
# Installed in /usr/local/libexec/if-simple
#
# Simply copies stdin to stdout.  Ignores all filter arguments.

/bin/cat && exit 0
exit 2

そして、このファイルを実行可能にします。

# chmod 555 /usr/local/libexec/if-simple

LPD にこのテキストフィルタを使うことを設定するためには、 /etc/printcapif 項目を使って指定します。これまでの /etc/printcap の例のプリンタ 2 台に、 このフィルタを加えてみましょう。

#
#  /etc/printcap for host rose - added text filter
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
        :sh:sd=/var/spool/lpd/rattan:\ :lp=/dev/lpt0:\
        :if=/usr/local/libexec/if-simple:

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
        :sh:sd=/var/spool/lpd/bamboo:\
        :lp=/dev/ttyu5:ms#-parenb cs8 clocal crtscts:\
        :if=/usr/local/libexec/if-simple:

注記:

if-simple スクリプトのコピーが /usr/share/examples/printing ディレクトリにあります。

9.3.1.5.7. LPD の起動

lpd(8)lpd_enable 変数に従って /etc/rc から実行されます。この変数の デフォルト値は NO です。まだ そうしていなかったならば

lpd_enable="YES"

の行を /etc/rc.conf に追加して 計算機を再起動するか、そのまま lpd(8) を 起動してください。

# lpd
9.3.1.5.8. 印字してみよう

簡単な LPD 設定も終わりにたどり着きました。 残念ながら、設定はこれでおしまいというわけではありません。 なぜなら、さらに、設定をテストし、 すべての問題点を解決しなくてはならないからです。 設定をテストするために、 何かを印字してみましょう。 LPD システムで印字をするためには、 lpr(1) コマンドを使います。このコマンドは、 印字するためのジョブを投入する働きをします。

lpr(1) コマンドを 「 プリンタとの通信状況を調べる」で紹介した、 あるテスト用のテキストを生成してくれる lptest(1) プログラムと一緒に使うこともできます。

簡単な LPD 設定のテスト

次のように入力してください。

# lptest 20 5 | lpr -Pprinter-name

ここで、printer-name/etc/printcap で指定したプリンタ名 (もしくはその別名) です。デフォルト のプリンタを使用する場合は、 -P 引数を付けないで lpr(1) を打ち込んでください。もう一度述べますが、 PostScript® を期待しているプリンタをテストするならば、 lptest(1) を使う代わりに PostScript® で書かれた プログラムをプリンタに送ってください。 プログラムを送るためには、プログラムをファイルに格納して、 lpr file と打ち込みます。

PostScript® プリンタの場合、 送信したプログラムによる結果が得られるでしょう。 lptest(1) を使った場合は、 以下のような結果が見られるでしょう。

!"#$%&'()*+,-./01234
"#$%&'()*+,-./012345
#$%&'()*+,-./0123456
$%&'()*+,-./01234567
%&'()*+,-./012345678

更にプリンタをテストしたい場合は、 (言語ベースのプリンタのための) もっと大きなプログラムを送信するか、 引数を変えて lptest(1) を実行します。たとえば、lptest 80 60 で、それぞれ 80 文字の行を 60 行生成します。

プリンタがうまく動かなかった場合は、次の節、「 トラブルシューティング」をご覧ください。

9.4. プリンタ設定上級編

この節では、特殊な形式のファイルを印字するためのフィルタ、 ヘッダページ、ネットワーク越しのプリンタへの印字、そして、 プリンタ使用の制限や課金について説明しています。

9.4.1. フィルタ

LPD は、ネットワークプロトコル、キュー、アクセス制御などの 印刷にかかわるさまざまな点を扱いますが、 実際の作業のほとんどは フィルタによっておこなわれています。 フィルタは、プリンタと通信し、 プリンタのデバイス依存性や特殊な要求を扱うプログラムです。 簡単なプリンタ設定では、 プレインテキストのためのフィルタをインストールしました。 このプレインテキストフィルタは、 ほとんどのプリンタで機能する極めて単純なものでした (「 テキストフィルタのインストール」を参照)。

しかしながら、形式変換やプリンタ課金、特定のプリンタの癖、 など をうまく利用するためには、 フィルタがどのように機能するかという ことを理解しておくべきです。これらの側面を扱うことは、 最終的には、フィルタの責任であるからです。 そして、これは悪い情報ですが、ほとんどの場合において、 あなた自身が フィルタを供給する必要があるということです。また都合のよいことには、 たくさんのフィルタが一般的に利用できるということです。 もしフィルタがなかったとしても、 普通はフィルタを作るのは簡単です。

FreeBSD にも、プレインテキストを印字させることができる /usr/libexec/lpr/lpf というフィルタが 1 つ付いています (このフィルタはファイルに含まれるバックスペースやタブを扱います。 また、課金をすることもできますが、 できることはこれだけしかありません)。 いくつかのフィルタとフィルタの構成要素は FreeBSD Ports Collection にもあります。

この節で述べることは次の通りです。

  • フィルタはどのように機能しているか」では、 印字の過程におけるフィルタの役割を概説します。 この節を読むことで、LPD がフィルタを使うときに、見えないところで 何が起こっているかが理解できるでしょう。このことを知っておくと、 プリンタそれぞれに様々なフィルタをインストールしたときに 遭遇するかもしれない問題を予期したり、 デバッグするときに役立つでしょう。

  • LPD は、すべてのプリンタがデフォルトでプレインテキストを印字できることを期待しています。 これは、プレインテキストを直接印字できない PostScript® (または他の言語対応の) プリンタで問題になります。「 プレインテキストのジョブを PostScript® プリンタで印字する」 で、 この問題を克服する方法について述べます。 PostScript® プリンタをお持ちの方は、 この節をお読みになることをおすすめします。

  • PostScript® は様々なプログラムのための有名な出力形式です。 PostScript® のコードを直接書いてしまう人すらいます。 残念ながら、PostScript® プリンタは高価です。「PostScript® プリンタによる PostScript® のシミュレート」節では、PostScript® データをPostScript® プリンタに受けつけさせ、印字させるために、 どのようにしてプリンタ用のテキストフィルタをさらに変更すればよいのか、 ということについて説明しています。PostScript® プリンタを持っていない方は、 この節をお読みになることをおすすめします。

  • 変換フィルタ」では、 図形や組版データといった特定のファイル形式を、 プリンタが理解できる形式へ変換する作業を自動的におこなわせる方法について述べます。 この節を読むと、troff のデータを印字するには lpr -t, または、TeX DVI を印字するには lpr -d、 ラスタイメージデータを印字するには lpr -v、 などといったようにユーザが入力することができるように プリンタの設定をおこなうことができます。 この節もお読みになることをお薦めします。

  • 出力フィルタ」 では、あまり使われない LPD の機能のすべて、すなわち、 出力フィルタに関することが記述されています。ヘッダページ (「 ヘッダページ」参照) を印字させていない場合は、 多分、この節は飛ばしても構わないでしょう。

  • テキストフィルタ lpf」では、lpf についての説明が、ほぼ完全におこなわれています。これは FreeBSD に付属するラ インプリンタ (または、 ラインプリンタのように動作するレーザプリンタ) のための、 単純なテキストフィルタです。 プレインテキストを印字したことに対して課金をおこなう方法が 至急必要な場合、もしくは、バックスペース文字を印字しようと すると煙を発するプリンタを持っている場合は、絶対に lpf を検討するべきです。

注記:

以下で述べられているさまざまなスクリプトは、/usr/share/examples/printing ディレクトリにあります。

9.4.1.1. フィルタはどのように機能しているか

既に言及したように、フィルタとは、プリンタにデータを送る際に、 デバイスに依存した部分を取り扱うために LPD によって起動される実行プログラムです。

LPD がジョブ中のファイルを印字しようとするとき、 LPD はフィルタプログラムを起動します。このとき、 フィルタの標準入力を印字するファイルに、 標準出力をプリンタに、そして、標準エラー出力を エラーログファイル (/etc/printcap 内の lf 項目で指定されたファイル、または、 指定されていない場合は、デフォルトとして /dev/console) にセットします。

LPD が起動するフィルタと、その引数が何であるかは、 /etc/printcap ファイルの内容と、ジョブの起動時にユーザが指定した lpr(1) コマンドの引数に依存しています。 たとえば、ユーザが lpr -t と入力した場合は、 LPD は出力先のプリンタ用の tf 項目で指定されている troff 用のフィルタを起動させるでしょう。 ユーザがプレインテキストの印字を指示したときは、 if で指定されたフィルタが起動されるでしょう (このことはほとんどの場合にあてはまります。 詳細については、「 出力フィルタ」をご覧ください)。

/etc/printcap で指定可能なフィルタは次の3種類があります。

  • テキストフィルタ (LPD のドキュメントでは紛らわしいことに 入力フィルタと呼んでいますが) は一般のテキストの印字を扱います。これはデフォルトのフィルタと 考えてください。LPD では、すべてのプリンタに対して、 デフォルトでプレインテキストが印字できることを期待しています。 さらに、バックスペースやタブを正しく扱い、また、 他の特殊な文字が入力されてもプリンタに混乱を来さないように するのはテキストフィルタの仕事であると考えています。 プリンタの使用に対して課金をしなくてはならない環境にあ るときは、テキストフィルタが印字したページ数を数える作 業もしなくてはなりません。この作業は、通常、印字した行 数を数え、これをプリンタが 1 ページ当たりに印字できる行 数と比較することでおこなわれます。 テキストフィルタは、次のような引数を付けて起動されます。

    filter-name [-c] -w width -l length -i indent -n login -h host acct-file

    ここで、

    -c

    lpr -l によってジョブが入力されたときに与えられます。

    width

    /etc/printcap で指定された pw (page width) 項目の値が与えられます。デフォルトは、 132 です。

    length

    pl (page length) 項目で指定された値が与えられます。 デフォルトは 66 です。

    indent

    lpr -i によって与えられた字下げの量で、 デフォルトは 0 です。

    login

    ファイルを印字したユーザのアカウント名が 与えられます。

    host

    ジョブが入力されたホスト名が 与えられます。

    acct-file

    af 項目で指定されている課金データファイル の名前が与えられます。

  • 変換フィルタは、 特定のファイル形式をプリンタ が紙に印字できるようなものに変換します。たとえば、 プリンタで ditroff 組版データを直接印字することはできません。 しかし、ditroff データをプリンタが消化し、 印字することができる形式へ変換するために、ditroff ファイル用フィルタをインストールすることができます。 「 変換フィルタ」 で、これらに関するすべてについて説明します。 プリンタの課金をする必要がある場合は、 変換フィルタでも印字ページを数える作業が必要となります。 変換フィルタは次の引数をとって起動されます。

    filter-name -x pixel-width -y pixel-height -n login -h host acct-file

    ここで、pixel-width は、 px 項目で指定された値 (デフォルトは 0)、 pixel-height は、 py 項目で指定された値 (デフォルトは 0) です。

  • 出力フィルタは、 テキストフィルタが指定されて おらず、かつ、 ヘッダページの出力が許可されている場合にのみ使われます。 「 出力フィルタ」で、これらのことについて説明します。 出力フィルタに対する引数は次の 2 つだけです。

    filter-name -w width -l length

    ここで、-w-l は、 テキストフィルタの場合と同じです。

フィルタは、次に示す終了状態をもってプログラムを exit するべきです。

exit 0

フィルタがファイルを正常に印字した場合。

exit 1

フィルタはファイルの印字に失敗したが、 LPD に再度ファイルの印字を試みて欲しい場合。 この終了状態で終了した場合、LPD はフィルタを再スタートします。

exit 2

フィルタはファイルの印字に失敗し、かつ、LPD に再出力を試みて欲しくない場合。この場合、LPD はそのファイルを放棄します。

FreeBSD に付属するテキストフィルタ /usr/libexec/lpr/lpf は、FORM FEED 文字が送られたときやプリンタ使用に対する課金をどのようにするかを決定するために、 ページ幅やページ長の引数を利用します。また、 課金用のエントリを作成するため、ログイン名、ホスト名、 課金ファイル名の引数を利用します。

もし、フィルタの購入を検討しているならば、LPD と互換性があるかどうかを確認してください。もしそうならば、 上述の引数リストをサポートしていなければなりません。 一般向けの使用のためにフィルタを作成する計画をしている場合は、 同じ引数リストと終了コードをサポートしてください。

9.4.1.2. プレインテキストのジョブを PostScript® プリンタで印字する

コンピュータと PostScript® (または、他の言語に対応した) プリンタをあなたしか使用しない場合は、プリンタにプレ インテキストを絶対に送らない、そして、 プリンタにプレインテキストを送りたがっている 様々なプログラムの機能を決して使わないことにしてください。そうすれば、 この節に書かれたことに心を煩わせる必要はまったくなくなります。

しかし、PostScript® とプレインテキストの両方のジョブをプリンタへ送りたいと思っている場合は、 プリンタ設定についての要求が増えるでしょう。 両者をプリンタへ送信するためには、 到着したジョブがプレインテキストであるか PostScript® であるかを検出するテキストフィルタが必要です。 PostScript® のジョブはすべて %! で始まらなければならないことになっています (他のプリンタ言語に関しては、 プリンタのドキュメントをご覧ください)。 ジョブの最初の 2 文字がこれならば、PostScript® であることが分かります。 したがって、 ジョブのそれ以降の部分をプリンタに直接送ることができます (訳注: PostScript® では、% 以降はコメントとして扱われるので、最初の %! の行を読み捨てても問題はない)。 最初の2文字が %! でない場合は、 フィルタはテキストを PostScript® に変換し、 その結果を使って印字をおこないます。

この作業をどうやってやればよいのでしょうか。

シリアルポートにプリンタを接続した場合は、 lprps をインストールすることをお勧めします。 lprpsPostScript® 用のフィルタで、 プリンタとの双方向通信をおこないます。 このフィルタでは、プリンタからの冗長な情報を得ることで、 プリンタの状況を示すファイルが更新されていきます。 したがって、ユーザや管理者は (トナー残量少紙詰まりといった) プリンタの状況を正確に知ることができます。しかし、 もっと重要なことは、psif と呼ばれるプログラムが含まれているということです。 このプログラムは、 入力されたジョブがプレインテキストかどうかを検出し、 これを PostScript® に変換するために、textps (lprps に付属する別のプログラム) を呼び出します。そして、このジョブをプリンタに送るために、 lprps が使われます。

lprps は FreeBSD Ports Collection に含まれています (Ports Collection を参照してください)。 紙のサイズに合わせて print/lprps-a4 または print/lprps-letter port をインストールしてください。lprps をインストールした後は、lprps の一部である psif プログラムのパス名を指定するだけです。Ports Collection から lprps をインストールしたときは、 /etc/printcap の中のシリアル接続した PostScript® プリンタのエントリに対して、次を使ってください。

:if=/usr/local/libexec/psif:

LPD にプリンタをリード・ライトモードでオープンさせるために、 rw 項目も指定すべきです。

パラレルポート接続の PostScript® プリンタの場合 (すなわち、 lprps が 必要としているプリンタとの双方向通信ができない)、 テキストフィルタとして次のシェルスクリプトを使うことができます。

#!/bin/sh
#
#  psif - Print PostScript or plain text on a PostScript printer
#  Script version; NOT the version that comes with lprps
#  Installed in /usr/local/libexec/psif
#

IFS="" read -r first_line
first_two_chars=`expr "$first_line" : '\(..\)'`

if [ "$first_two_chars" = "%!" ]; then
   #
   #  PostScript job, print it.
   #
   echo "$first_line" && cat && printf "\004" && exit 0
   exit 2
else
   #
   #  Plain text, convert it, then print it.
   #
   ( echo "$first_line"; cat ) | /usr/local/bin/textps && printf "\004" && exit 0
   exit 2
fi

上記のスクリプトにおいて、textps はプレインテキストから PostScript® へ変換するために別にインストールしたプログラムです。 テキストから PostScript® へ変換するのには、 お好みのどんなプログラムでも使うことができます。FreeBSD Ports Collection (Ports Collection を参照してください) には、a2ps と呼ばれるテキストから PostScript® に変換するプログラムが入っています。

9.4.1.3. 非 PostScript® プリンタによる PostScript® のシミュレート

PostScript® は質の高い組版と印字をおこなうための 事実上の標準です。しかしながら、PostScript® は、高価な標準です。ありがたいことに、 Aladdin Enterprises から Ghostscript と呼ばれる、 PostScript® 互換の動作をするフリーのプログラムが出されていて、 FreeBSD で動きます。 Ghostscript はほとんどの PostScript® ファイルを読むことができ、 これらの各ページを多くのブランドの非 PostScript® プリンタを含む 様々なデバイス用に変換することができます。 Ghostscript をインストールし、 プリンタ用の特別なテキストフィルタを使うことによって、 非 PostScript® プリンタをあたかも本物の PostScript® プリンタであるかのように動作させることができます。

Ghostscript は FreeBSD Ports Collection に入っています。 複数のバージョンがありますが、最も良く使われているバージョンは print/ghostscript-gpl です。

PostScript® プリンタをシミュレートさせる場合は、 テキストフィルタに PostScript® ファイルを印字しようとしているかどうかを検出させます。 PostScript® ファイルでない場合は、 フィルタはそのファイルを直接プリンタに送ります (訳注: テキストファイルを直接印字できない場合は、もちろん、 変換フィルタを通す必要があります)。PostScript® の場合は、 まず、Ghostscript を使い、 ファイルをそのプリンタが理解できる形式へ変換します。

次の例のスクリプトは、Hewlett Packard DeskJet 500 プリンタ用 のテキストフィルタです。 他のプリンタで用いるときは、-sDEVICE 引数を gs (Ghostscript) コマンドに変えてください (gs -h と入力すると、現在インストールされている Ghostscript でサポートされているデバイスのリストが得られます)。

#!/bin/sh
#
#  ifhp - Print Ghostscript-simulated PostScript on a DeskJet 500
#  Installed in /usr/local/libexec/ifhp

#
#  Treat LF as CR+LF (to avoid the "staircase effect" on HP/PCL
#  printers):
#
printf "\033&k2G" || exit 2

#
#  Read first two characters of the file
#
IFS="" read -r first_line
first_two_chars=`expr "$first_line" : '\(..\)'`

if [ "$first_two_chars" = "%!" ]; then
    #
    #  It is PostScript; use Ghostscript to scan-convert and print it.
    #
    /usr/local/bin/gs -dSAFER -dNOPAUSE -q -sDEVICE=djet500 \
      -sOutputFile=- - && exit 0

else
    #
    #  Plain text or HP/PCL, so just print it directly; print a form feed
    #  at the end to eject the last page.
    #
    echo "$first_line" && cat && printf "\033&l0H" &&
    exit 0
fi

exit 2

最後に、if 項目を通して、LPD にこのフィルタを教えてやる必要があります。

:if=/usr/local/libexec/ifhp:

これでおしまいです。lpr plain.text とか lpr whatever.ps と入力してみましょう。どちらも正常に印字されるはずです。

訳注:

日本語を印字する場合は、 日本語対応の Ghostscript が必要です。日本語対応版の Ghostscript も Ports Collection に入っています。

9.4.1.4. 変換フィルタ

プリンタ設定導入編」 に書かれた簡単な設定が完了したら、最初に、 やってみたいと思うことは、多分 (プレイン ASCII テキストに加えて) 好みのファイル形式のための変換フィルタをインストールすることでしょう。

9.4.1.4.1. なぜ、変換フィルタをインストールするのか?

変換フィルタによって、 様々な種類のファイルを印字することが簡単になります。たとえば、TeX 組版システムでたくさんの仕事をしたと仮定しましょう。 そして、PostScript® プリンタが接続 されているとします。 すると、TeX で DVI ファイルを作成する度に、DVI ファイルを印字するために、 これを PostScript® ファイルに変換する必要があります。 このコマンドは次のようになるでしょう。

% dvips seaweed-analysis.dvi
% lpr seaweed-analysis.ps

DVI ファイル用の変換フィルタがインストールしてあると、 LPD に変換を肩代わりさせることで毎回毎回 おこなわなければならなかった面倒な変換作業を省くことができます。 つまり、DVI を生成したら、 次のようなコマンドを入力するだけで、これが印字されます。

% lpr -d seaweed-analysis.dvi

LPD に DVI ファイルの変換をさせるためには、 -d オプション を指定します。 変換オプションのリストは「 整形と変換に関するオプション」 に載せてあります。

変化のオプションのそれぞれをプリンタに サポートさせるためには、 変換フィルタをインストールし、 そのパス名を /etc/printcap の中で指定しなくてはなりません。変換フィルタは、 プレインテキストを印字する代わりに、フィルタはファイルを プリンタが理解できる形式に変換するところを除けば、 「プリンタの簡単な設定」で説明したテキストファイル (「 テキストフィルタのインストール」 を見て下さい) に似ています。

9.4.1.4.2. どの変換フィルタをインストールすべきか?

使いたいと思う変換フィルタをインストールすべきです。 DVI のデータを頻繁に印字するならば、DVI 変換フィルタ をインストールするのが適切でしょう。印字しなくてはなら ない troff を大量に抱えている場合は、多分、 troff フィルタが欲しくなるはずです。

次の表は、LPD で動作するフィルタと、 /etc/printcap ファイルでのエントリする項目、そして、 lpr コマンドで呼び出す方法をまとめたものです。

ファイル形式/etc/printcap項目lpr オプション
cifplotcf-c
DVIdf-d
plotgf-g
ditroffnf-n
FORTRAN textrf-f
trofftf-f
rastervf-v
プレインテキストifなし、-p、または -l

先の例のように、lpr -d を使うためには、出力先のプリンタの /etc/printcap 内のエントリで、 df 項目が必要であることが分かります。

反論はあるかも知れませんが、FORTRAN テキストや plot のような形式は、多分、廃れてていくでしょう。 あなたのサイトで、自前のフィルタをインストールするだけで、 プリントオプションのいくつか、あるいは、 全部に新しい意味を与えることができます。たとえば、 Printerleaf ファイル (Interleaf デスクトップパブリッシングプログラムによるファイル) を直接印字したいとします。 そして、Printerleaf 用の変換フィルタを gf 項目で 指定したパスにインストールすれば、lpr -g の意味は Printerleaf ファイルを印字する 意味だとユーザに教えることができます。

9.4.1.4.3. 変換フィルタのインストール

変換フィルタは FreeBSD の基本システムのインストールとは別にインストールするプログラムなので、 変換フィルタは、 /usr/local ディレクトリの下に置くべきでしょう。 フィルタは LPD だけが実行する特別なプログラム、 すなわち、一般ユーザが実行する必要すらないプログラムなので、 /usr/local/libexec ディレクトリに置くのが普通です。

変換フィルタを使用可能にするためには、 /etc/printcap の目的のプリンタの適切な項目に フィルタがあるパス名を指定します。

DVI 変換フィルタをプリンタ bamboo のエントリに加えてみましょう。プリンタ bamboodf 項目を新たに加えた /etc/printcap ファイルの例を以下に再掲します。

#
#  /etc/printcap for host rose - added df filter for bamboo
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
        :sh:sd=/var/spool/lpd/rattan:\
        :lp=/dev/lpt0:\
        :if=/usr/local/libexec/if-simple:

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
        :sh:sd=/var/spool/lpd/bamboo:\
        :lp=/dev/ttyu5:ms#-parenb cs8 clocal crtscts:rw:\
        :if=/usr/local/libexec/psif:\
        :df=/usr/local/libexec/psdf:

DVI フィルタは /usr/local/libexec/psdf という 名前のシェルスクリプトです。 このスクリプトは次のようになっています。

#!/bin/sh
#
#  psdf - DVI to PostScript printer filter
#  Installed in /usr/local/libexec/psdf
#
#  Invoked by lpd when user runs lpr -d
#
exec /usr/local/bin/dvips -f | /usr/local/libexec/lprps "$@"

このスクリプトでは、dvips をフィルタモード (引数 -f) で、 標準入力上で起動しています。標準入力は印字するジョブです。 それから、PostScript® プリンタ用フィルタ lprps (これについては「 プレインテキストのジョブを PostScript® プリンタで印字する」 を参照してください) を LPD に与えられた引数を付けて起動します。 lprps はこれらの引数を印字されたページ分の課金をおこなうために使われます。

9.4.1.4.4. 変換フィルタのその他の例

変換フィルタのインストールには決まったステップがないので、 この節では、例をもっと挙げることにします。 これを自分でフィルタを作る際のガイドにしてください。 適当な例があったら、それをそのまま使ってください。

次のスクリプト例は、Hewlett Packard LaserJet III-Si のための、raster (ええと・・実は、GIF ファイル) 用の変換フィルタです。

#!/bin/sh
#
#  hpvf - Convert GIF files into HP/PCL, then print
#  Installed in /usr/local/libexec/hpvf

PATH=/usr/X11R6/bin:$PATH; export PATH

giftopnm | ppmtopgm | pgmtopbm | pbmtolj -resolution 300 \
    && exit 0 \
    || exit 2

ここでは、GIF ファイルから PNM (portable anymap) 形式に変換し、次に PGM (portable graymap) 形式に変換してから、 LaserJet/PCL-互換データに変換しています。

上記のフィルタを使うプリンタのためのエントリを付け加えた /etc/printcap ファイルは次のようになります。

#
#  /etc/printcap for host orchid
#
teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\
        :lp=/dev/lpt0:sh:sd=/var/spool/lpd/teak:mx#0:\
        :if=/usr/local/libexec/hpif:\
        :vf=/usr/local/libexec/hpvf:

次のスクリプトは、PostScript® プリンタ bamboo のための groff 組版システムの troff データのための変換フィルタです。

#!/bin/sh
#
#  pstf - Convert groff's troff data into PS, then print.
#  Installed in /usr/local/libexec/pstf
#
exec grops | /usr/local/libexec/lprps "$@"

上記のスクリプトではプリンタとの通信をおこなうため、 lprps をまた利用しています。 プリンタがパラレルポートに接続されている場合は、代わりに、 次のスクリプトを使うかもしれません。

#!/bin/sh
#
#  pstf - Convert groff's troff data into PS, then print.
#  Installed in /usr/local/libexec/pstf
#
exec grops

これで完成しました。次に、フィルタを使用可能にするため に /etc/printcap に加える必要があるエントリを示します。

:tf=/usr/local/libexec/pstf:

次の例をみたら、FORTRAN のベテランは赤面するかもしれません。 この FORTRAN テキストフィルタは、 プレインテキストを直接印字できるすべてのプリンタで利用できます。 このフィルタをプリンタ teak にインストールすることにしましょう。

#!/bin/sh
#
# hprf - FORTRAN text filter for LaserJet 3si:
# Installed in /usr/local/libexec/hprf
#

printf "\033&k2G" && fpr && printf "\033&l0H" && exit 0
exit 2

そして、このフィルタを使用可能にするため、以下の行を /etc/printcap のプリンタ teak のエントリに加えます。

:rf=/usr/local/libexec/hprf:

これが最後の、そして、若干複雑な例です。前に紹介した LaserJet プリンタ teak に、DVI フィルタを加える ことにしましょう。最初に、 簡単な部分をおこないます。すなわち、DVI フィルタの位置を /etc/printcap に書き加えます。

:df=/usr/local/libexec/hpdf:

さて、難しい部分であるフィルタの作成をおこないます。 このために、DVI から LaserJet/PCL への変換プログラムが必要です。FreeBSD の Ports Collection (Ports Collection を参照してください) には、それがあります。 dvi2xx というのがその port の名前です。 これをインストールすると、必要なプログラム dvilj2p が使えます。このプログラムは DVI を LaserJet IIp、LaserJet III、そして LaserJet 2000 の互換コードへ変換してくれます。

dvilj2p はフィルタ hpdf を極めて複雑にしています。 なぜなら、dvilj2p は標準入力からデータを読み込むことができないからです。 このプログラムを働かせるためには、ファイル名が必要です。 もっと悪いことに、ファイル名は .dvi で終わっている必要があり、標準入力の代わりに、 /dev/fd/0 を使うのは問題があります。 この問題は、(.dvi で終わる) 一時的なファイル名から/dev/fd/0 に (シンボリックな) リンクを張る ことで回避することができます。これで、 dvilj2p に強制的に標準入力からデータを読み込ませることができます。

もう1つの問題は、一時的なリンクを張るために /tmp ディレクトリを使うことができないという事実です。 シンボリックリンクはユーザ、グループが bin であるユーザに所有されています。フィルタはユーザ daemon として起動します。そして、 /tmp ディレクトリはスティッキービットが立っています。 フィルタはリンクを作ることができます。しかし、 リンクは別のユーザに所有されているため、 作業が終了したとき、このリンクを削除することができません。

その代わりに、シンボリックリンクは現在の作業ディレクトリ、 すなわち、スプーリングディレクトリ (/etc/printcapsd 項目で指定する) に作ることにします。 フィルタが作業するにはここの場所は完璧な場所で、なぜなら、 特に、スプーリングディレクトリのディ スクの空き容量は (ときどき) /tmp ディレクトリよりもたくさんあるからです。

以下に示すのが最後のフィルタです。

#!/bin/sh
#
#  hpdf - Print DVI data on HP/PCL printer
#  Installed in /usr/local/libexec/hpdf

PATH=/usr/local/bin:$PATH; export PATH

#
#  Define a function to clean up our temporary files.  These exist
#  in the current directory, which will be the spooling directory
#  for the printer.
#
cleanup() {
   rm -f hpdf$$.dvi
}

#
#  Define a function to handle fatal errors: print the given message
#  and exit 2.  Exiting with 2 tells LPD to do not try to reprint the
#  job.
#
fatal() {
    echo "$@" 1>&2
    cleanup
    exit 2
}

#
#  If user removes the job, LPD will send SIGINT, so trap SIGINT
#  (and a few other signals) to clean up after ourselves.
#
trap cleanup 1 2 15

#
#  Make sure we are not colliding with any existing files.
#
cleanup

#
#  Link the DVI input file to standard input (the file to print).
#
ln -s /dev/fd/0 hpdf$$.dvi || fatal "Cannot symlink /dev/fd/0"

#
#  Make LF = CR+LF
#
printf "\033&k2G" || fatal "Cannot initialize printer"

#
#  Convert and print.  Return value from dvilj2p does not seem to be
#  reliable, so we ignore it.

#
dvilj2p -M1 -q -e- dfhp$$.dvi

#
#  Clean up and exit
#
cleanup
exit 0
9.4.1.4.5. 自動変換: その他の変換フィルタ

ここまでに述べてきたフィルタによって、 印字環境の能率が上がったことと思います。しかし、 これはどのフィルタを使うかを (lpr(1) のコマンドライン上で) ユーザが指定しなくてはならないという代価を支払って実現されています。 コンピュータの事情にあまり詳しくないユーザにとって、 フィルタのオプションを指定させられるということは いらいらさせられるものになるでしょう。更に悪いことに、 間違ったフィルタオプションを指定されると、 間違った形式のファイルがそのフィルタに適用されることになり、 その結果、何百枚もの紙を吐き出すことになるかもしれません。

そのような結果になるならば、 変換フィルタをインストールするよりもむしろ、 テキストフィルタ (これがデフォルトフィルタなので) に印字するよう要求されたファイルの形式を検出させ、自動的に、 適切な変換フィルタを起動するようにしたいと思うかもしれません。 ここでは file コマンドのようなツールを役立たせることができます。 もちろん、いくつかの ファイル形式の違いを見分けることは難しいことでしょう。 そして、もちろん、それらのファイルに対しては、 変換フィルタを提供するだけで済ますこともできるのです。

FreeBSD Ports Collection には、apsfilter (print/apsfilter) と呼ばれる自動変換をおこなうテキストフィルタがあります。 このフィルタは プレインテキスト、PostScript®, DVI など、ほとんどすべてのファイル形式を検出し、適当な変換をおこなった後、 データを印字することができます。

9.4.1.5. 出力フィルタ

LPD スプーリングシステムでは、 ここまでにまだ取り上げていないフィルタ形式、 出力フィルタをサポートしています。出力フィルタは、 テキストフィルタのように、 プレインテキストのみを印字するために意図されたものですが、 非常に簡単化されています。テキストフィルタを用いずに、 出力フィルタを使っている場合は、次のようになります。

  • LPD はジョブ中の各ファイルに一度ではなく、 ジョブ全体に対して一度だけ出力フィルタを起動します。

  • LPD は出力フィルタに対し、 ジョブ中のファイルの先頭や末尾を特定するための対策を 一切おこなっていません。

  • LPD はユーザのログイン名やホスト名をフィルタに渡しません。 したがって、課金の処理をおこなうことは考えていません。 実際、出力フィルタには、以下2つの引数しか与えられません。

    filter-name -wwidth -llength

    ここで、width は対象となるプリンタの pw 項目、 lengthpl 項目に指定された数です。

出力フィルタの簡便さに誘惑されてはいけません。もし、 ジョブ中のそれぞれのファイルに別のページ番号を付加しようとしても、 出力フィルタはうまく動作しないでしょう。 そのような動作を期待しているならば、 (入力フィルタとしても知られている) テキストフィルタを使ってください。 詳しくは、「 テキストフィルタのインストール」をご覧ください。 さらに、出力フィルタは、実のところ、 もっと複雑になっています。まず、 特殊なフラグ文字を検出するために、 フィルタに送られてくるバイトストリームを検査する必要があります。 また、LPD に代わって、 自分自身にシグナルを送らなければなりません。

しかしながら、ヘッダページの印字をおこないたくて、 エスケープシーケンスやヘッダページを印字できるようにするその他の初期化文字列を送信する必要がある場合は、 出力ファイルが必要です。 (しかし、 ヘッダページを要求したユーザに対して課金しようとするのもまた無駄なことです。 LPD は出力フィルタにユーザやホストの情報を渡しません)。

1 台のプリンタに対し、LPD では出力フィルタとテキストやその他のフィルタを両方使うことができます。 このような場合、LPD はヘッダページ (「 ヘッダページ」 を参照してください) だけを印字させるために、出力フィルタを起動させます。 それから LPD では、出力フィルタに 2 バイトの文字 (ASCII 031 の次に ASCII 001) を送ることで、 出力フィルタが自分自身を停止することを期待しています。 2 バイト (031, 001) が出力フィルタに送られたとき、 出力フィルタは自分自身にシグナル SIGSTOP を送ることによって停止するはずです。 LPD がその他のフィルタを動かし終わると、 出力フィルタにシグナル SIGCONT を送って、出力フィルタを再起動します。

出力フィルタがあり、 テキストフィルタがない場合、 LPD はプレインテキストジョブを扱う場合に、 出力フィルタを使います。前述したように、出力フィルタでは、 ジョブ中の各ファイルの間に FORM FEED 文字や紙を送る他の文字を入れることはしません。 この動作は多分、 あなたが求めているものとは異なっているでしょう。 ほとんどの場合において、テキストフィルタが必要なはずです。

プログラム lpf は、 テキストフィルタの項で既に紹介しましたが、 出力フィルタとしても動作させることができます。もし、 簡便で極悪な出力フィルタが必要で、かつ、 バイトストリームを検査したりシグナルを送るコードを書きたくないときには、 lpf をお試しください。 あるいは、プリントが要求する初期化コードを送るために、 lpf をシェルスクリプトに包んで使うこともできます。

9.4.1.6. テキストフィルタ lpf

プログラム /usr/libexec/lpr/lpf は、 FreeBSD の バイナリ配布に付属しているテキストフィルタ (入力フィルタ) で、出力を字下げしたり (lpr -i でジョブが入力さ れたとき)、 文字を未処理のままプリンタに送ったり (lpr -l でジョブが入力されたとき)、 ジョブ中のバックスペースやタブの印字位置を調節したり、 印字したページに対して課金したりすることができます。また、 このフィルタは出力フィルタとしても動作させることができます。

lpf フィルタは多くの印字環境において使用することに適しています。 このフィルタには、プリンタに初期化文字列を送る機能はありませんが、 必要とされる初期化をおこない、それから lpf を実行させるためのシェルスクリプトを作成するのはたやすいことです。

lpf に対して、 印字ページへの課金を正確におこなわせるためには、 /etc/printcap ファイルの中の pwpl の項目に正確な値を入れておく必要があります。これらの値は、 どのくらいの量のテキストがページにフィットするか、また、 ユーザのジョブが何ページあるのかを調べるために使われます。 プリンタの課金についての詳しい情報については、「 プリンタの利用に対する課金」をご覧ください。

9.4.2. ヘッダページ

あなたが管理するシステムのユーザが たくさんおり、 ユーザ全員が様々なプリンタを使用する場合、多分、 必要悪であるヘッダページを 印字させることを検討したいと思うかもしれません。

ヘッダページは、バナー とか バーストページ としても知られていますが、 出力されたジョブが誰によるものなのかを特定させる働きがあります。 印字結果の山の中において、 ユーザのジョブによって印字された本物のドキュメント部分よりも際立たせるために、 ヘッダページは、通常、多分、縁が装飾されている大きな太文字で印字されます。 ヘッダページにより、 ユーザは自分が出したジョブがどこにあるのかをすばやく見つけることができます。 ヘッダページの欠点は、明らかに、すべてのジョブに対して、 紙が 1 枚余分に印字されるということです。 この紙の有効期間は短く、2 〜 3 分も続きません。最終的に、 これらの紙は再利用紙入れの中かくずの山に入れられることでしょう (ヘッダページはジョブ中の各ファイル毎に印字されるのではなく、 ジョブ毎に印字されるということに注意してください。したがって、 紙の消費はそれほどひどくはないかもしれません)。

もし、 プリンタがプレインテキストを直接印字できるならば、LPD システムは印字物に対して自動的にヘッダページを付けることができます。 PostScript® プリンタを使っている場合は、 ヘッダページを生成する外部プログラムが必要になります。これについては、 「PostScript® プリンタでのヘッダページ」をご覧ください。

9.4.2.1. ヘッダページの印字を許可する

プリンタ設定導入編 」節では、/etc/printcap ファイルの sh (``suppress header'' : ヘッダを供給しない という意味) を指定して、 ヘッダページの印字を止めていました。 プリンタでのヘッダページの印字を許可するには、 sh 項目を取り除くだけでよいのです。

とても簡単そうに見えるけど、本当かな?

それは本当です。 プリンタに初期化文字列を送るための 出力フィルタを用意しなくてはならないかもしれません。次に、Hewlett Packard PCL 互換プリンタの例を挙げます。

#!/bin/sh
#
#  hpof - Output filter for Hewlett Packard PCL-compatible printers
#  Installed in /usr/local/libexec/hpof


printf "\033&k2G" || exit 2
exec /usr/libexec/lpr/lpf

of 項目に出力フィルタのパス名を指定してください。 詳細については、「出力フィルタ」節 をご覧ください。

次に、以前紹介したプリンタ teak のための /etc/printcap ファイルの例を示します。ここでは、 ヘッダページの印字を許可し、上記の出力フィルタを追加しました。

#
#  /etc/printcap for host orchid
#
teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\
        :lp=/dev/lpt0:sd=/var/spool/lpd/teak:mx#0:\
        :if=/usr/local/libexec/hpif:\
        :vf=/usr/local/libexec/hpvf:\
        :of=/usr/local/libexec/hpof:

さて、ユーザが teak からジョブを印字させたとき、 それぞれのジョブ毎にヘッダページが印字されます。 もし、ユーザが印字物を探すのに時間を費やしたいと思うなら、 lpr -h によってジョブを入力することで、 ヘッダページの印字を止めることができます。 これ以外の lpr(1) のオプションについては、 「 ヘッダページ用オプション」節をご覧ください。

注記:

LPD では、ヘッダページの最後に、 FORM FEED 文字が印字されます。 プリンタに紙排出をさせるために、別な文字、 もしくは、別な文字列が利用されている場合は、 /etc/printcap 中の ff 項目で指定することができます。

9.4.2.2. ヘッダページを制御する

ヘッダページの印字が許可されていると、LPD長いヘッダを作ります。これには、 紙全面に大きな文字でユーザ名、ホスト名、 ジョブ名が書かれています。次に、このヘッダページの例を示 します (kelly がジョブ名 outlinerose というホストから印字 された場合)。

      k                   ll       ll
      k                    l        l
      k                    l        l
      k   k     eeee       l        l     y    y
      k  k     e    e      l        l     y    y
      k k      eeeeee      l        l     y    y
      kk k     e           l        l     y    y
      k   k    e    e      l        l     y   yy
      k    k    eeee      lll      lll     yyy y
                                               y
                                          y    y
                                           yyyy


                                   ll
                          t         l        i
                          t         l
       oooo    u    u   ttttt       l       ii     n nnn     eeee
      o    o   u    u     t         l        i     nn   n   e    e
      o    o   u    u     t         l        i     n    n   eeeeee
      o    o   u    u     t         l        i     n    n   e
      o    o   u   uu     t  t      l        i     n    n   e    e
       oooo     uuu u      tt      lll      iii    n    n    eeee









      r rrr     oooo     ssss     eeee
      rr   r   o    o   s    s   e    e
      r        o    o    ss      eeeeee
      r        o    o      ss    e
      r        o    o   s    s   e    e
      r         oooo     ssss     eeee







                                              Job:  outline
                                              Date: Sun Sep 17 11:04:58 1995

LPD はこのテキストの終わりに FORM FEED 文字を加えます ので、ジョブは新しいページから開始されます (ただし、 /etc/printcap で出力先のプリンタのエントリに sf (suppress form feeds) が指定されているときはこ の限りではありません)。

お望みならば、LPD短いヘッダページを出力させることもできます。 この場合は、 /etc/printcap ファイルの中で sb (short banner) を指定してください。 ヘッダページは次のようになります。

rose:kelly  Job: outline  Date: Sun Sep 17 11:07:51 1995

デフォルトでは、LPD はヘッダページを最初に印字し、次にジョブの印字をおこないます。 この順番を逆にするときは、 /etc/printcaphl (header last) を指定してください。

9.4.2.3. ヘッダページに対する課金

LPD に備わっているヘッダページ出力機能を使うと、 入力されたジョブに対して課金をおこなうことができても、 ヘッダページは無料で提供しなくてはならない、 という特有のやり方を強要されます。

なぜでしょうか。

出力フィルタは単なる外部プログラムなので、 課金をするための制御をおこなうとすれば、 それはヘッダページを印字するときですが、出力フィルタには、 ユーザ名とホスト名 の情報や課金情報を格納するファイルがどれな のかということが知らされません。それゆえ、出力ファイルには、 誰にプリンタ利用の課金をおこなえばよいのかが分からないのです。 テキストフィルタやその他の変換フィルタ (これらのフィルタはユーザやホストの情報が知らされます) が出力ページの枚数に 1 ページ分水増しする だけでは十分ではありません。 なぜなら、ユーザは lpr -h に よってヘッダページの出力を止めることができるからです。 やみくもに 1 ページを水増しすると、 印字されてもいないヘッダページに対する 料金をとることになります。基本的に、lpr -h は環境に優しい心を持つユーザに好まれるオプションですが、 これを使うように奨励することもできません。

各々のフィルタに独自のヘッダページを生成させる (その結果、ヘッダページに課金することができる) という方法でも十分であるとはいえません。 この場合、LPD はフィルタに -h の情報を送りませんので、lpr -h によってヘッダページを印字しないオプションを選択したとしても、 依然としてヘッダページは印字され、 その分の課金がおこなわれてしまいます。

では、どのような選択肢があるのでしょうか。

ヘッダページへの課金に関しては、 次のことができます。

  • LPD のやり方を受け入れ、 ヘッダページは無料とする。

  • LPRng などの LPD の代替品をインストールする。 LPD と入れ替えが可能な他のスプーリングソフトウェアに関しては、 標準スプーラの代替品 をご覧ください。

  • スマートな 出力フィルタを作成する。通常、 出力フィルタはプリンタを初期化するか、 単純な文字列変換をする程度の働きしかしません。 (テキスト (入力) フィルタがない場合) 出力フィルタはヘッダページとプレインテキストの印字をおこなうのに適しています。 プレインテキストを印字するためのテキストフィルタがない場合、 LPD はヘッダページを印字するためだけの目的で出力フィルタを起動します。 そして、LPD が生成するヘッダページのテキストを解析することにより、 出力フィルタはヘッダページに課金するために必要なユーザ名と ホスト名を取得することができます。この方式の唯一の問題点は、 出力フィルタは課金情報を格納するデータファイルの名前を知ることが できないということです (af 項目で指定されたファイル名は 出力ファイルに渡されません)。しかし、既知の 名前の課金データファイルを使うのならば、 その名前を出力フィルタのプログラム中に埋め込むことができます。 解析の手順を簡単にするためには、 /etc/printcapsh 項目 (短いヘッダを指定) を使うとよいでしょう。 そしてまた、 ここまでの方法は少なからぬトラブルを生じさせるかもしれません。 そうなれば、もちろんユーザはヘッダページを無料で 提供してくれる気前のよいシステム管理者に感謝することでしょう。

9.4.2.4. PostScript® プリンタでのヘッダページ

これまでに述べたように、LPD ではプレインテキストのヘッダページをたくさんのプリンタに合うように生成することができます。 残念ながら、PostScript® プリンタは、 プレインテキストを直接印字することができません。ですから、 LPD のヘッダページ機能はまったく、 あるいはほとんどの場合、役に立ちません。

ヘッダページを出力するための自明な方法の1つに、 すべての変換フィルタとテキストフィルタにヘッダページを生成させる方法があります。 フィルタは、 適切なヘッダページを生成するために、 ユーザ名とホスト名の引数を使うべきです。この方法の欠点は、いつでも、 lpr -h によってジョブが入力された場合でさえも、 ヘッダページが印字されるということです。

この方法で試してみましょう。次のスクリプトは、3 つの引数 (ユーザ のログイン名、ホスト名、ジョブ名) をとり、簡単な PostScript® 用 のヘッダページを生成します。

#!/bin/sh
#
#  make-ps-header - make a PostScript header page on stdout
#  Installed in /usr/local/libexec/make-ps-header
#

#
#  These are PostScript units (72 to the inch).  Modify for A4 or
#  whatever size paper you are using:
#
page_width=612
page_height=792
border=72

#
#  Check arguments
#
if [ $# -ne 3 ]; then
    echo "Usage: `basename $0` <user> <host> <job>" 1>&2
    exit 1
fi

#
#  Save these, mostly for readability in the PostScript, below.
#
user=$1
host=$2
job=$3
date=`date`

#
#  Send the PostScript code to stdout.
#
exec cat <<EOF
%!PS

%
%  Make sure we do not interfere with user's job that will follow
%
save

%
%  Make a thick, unpleasant border around the edge of the paper.
%
$border $border moveto
$page_width $border 2 mul sub 0 rlineto
0 $page_height $border 2 mul sub rlineto
currentscreen 3 -1 roll pop 100 3 1 roll setscreen
$border 2 mul $page_width sub 0 rlineto closepath
0.8 setgray 10 setlinewidth stroke 0 setgray

%
%  Display user's login name, nice and large and prominent
%
/Helvetica-Bold findfont 64 scalefont setfont
$page_width ($user) stringwidth pop sub 2 div $page_height 200 sub moveto
($user) show

%
%  Now show the boring particulars
%
/Helvetica findfont 14 scalefont setfont
/y 200 def
[ (Job:) (Host:) (Date:) ] {
200 y moveto show /y y 18 sub def
} forall

/Helvetica-Bold findfont 14 scalefont setfont
/y 200 def
[ ($job) ($host) ($date) ] {
        270 y moveto show /y y 18 sub def
} forall

%
%  That is it
%
restore
showpage
EOF

そして、変換フィルタやテキストフィルタがそれぞれ、 最初にこのスクリプトを起動することで、 ヘッダページが出力され、それから、 ユーザのジョブの印字をおこないます。次に、 このドキュメントの始めのほうで紹介した DVI 変換フィルタを、 ヘッダページを印字するように変更したものを示します。

#!/bin/sh
#
#  psdf - DVI to PostScript printer filter
#  Installed in /usr/local/libexec/psdf
#
#  Invoked by lpd when user runs lpr -d
#

orig_args="$@"

fail() {
    echo "$@" 1>&2
    exit 2
}

while getopts "x:y:n:h:" option; do
    case $option in
        x|y)  ;; # Ignore
        n)    login=$OPTARG ;;
        h)    host=$OPTARG ;;
        *)    echo "LPD started `basename $0` wrong." 1>&2
              exit 2
              ;;
    esac
done

[ "$login" ] || fail "No login name"
[ "$host" ] || fail "No host name"

( /usr/local/libexec/make-ps-header $login $host "DVI File"
  /usr/local/bin/dvips -f ) | eval /usr/local/libexec/lprps $orig_args

このフィルタがユーザ名やホスト名を決定するために 引数リストをどのように解析しなくてはならないかという点に注意してください。 この解析方法は他の変換フィルタに対しても同様です。 しかしながら、テキストフィルタについては、 引数の設定が少し異なっています (これについては、「 フィルタはどのように機能しているか」 をご覧ください)。

前述の通り、上記の手法は、極めて単純なのにも関らず、 lprヘッダページを印字しない オプション (-h オプション) が使えなくなっています。 ユーザが森林資源を (あるいは、 ヘッダページが課金されているならば、その僅かな金額を)、 節約したいと望んでいる場合でも、 すべてのフィルタがすべてのジョブ毎にヘッダページを印字 することになっているので、節約することはできません。

ジョブ毎に印字されるヘッダページを ユーザが抑制できるようにするためには、「 ヘッダページに対する課金」で紹介したトリックを 使う必要があります。すなわち、LPD が生成するヘッダページの解析をおこない、PostScript® 版のヘッダページを出力させる出力フィルタを作るのです。 この場合、ユーザが lpr -h でジョブを入力すると、 LPD はヘッダページを生成しなくなり、また、 出力フィルタも起動されません。そうでないならば、 作成した出力フィルタが LPD からのテキストを読み込み、ヘッダページを印字する適当な PostScript® のコードがプリンタに送られるでしょう。

PostScript® プリンタがシリアルポートに接続されている場合、 出力フィルタとして lprps を、 上記の動作をおこなうものとして psof を使うことができます。ただし、psof はヘッダページに対して課金をおこないませんので注意してください。

9.4.3. リモートプリンタからの出力

FreeBSD では、ネットワーク越しの印字、すなわち、 ジョブをリモートプリンタに送ることをサポートしています。 リモートプリンタからの出力をするには、一般に、 次の 2 つを参照してください。

  • リモートホストに接続されたプリンタにアクセスする方法。 プリンタがあるホストのシリアル、 または、パラレルインタフェースに接続されている場合、 ネットワーク上の他のホストからこのプリンタにアクセスできるように LPD を設定します。「リモートホストに 接続されたプリンタ」 でどのようにするかを説明します。

  • ネットワークに直接接続されているプリンタにアクセスする方法。 プリンタに、旧来のシリアル、または、 パラレルインタフェースに加えて (もしくは、これらに代わって) ネットワーク用のインタフェースがある場合。 そのようなプリンタは次のように動作するでしょう。

    • そのプリンタが LPD のプロトコルを理解でき、リモートホストからのジョブを キューに入れることさえできる場合。この場合、 プリンタは、LPD が起動している一般のホストのように振る舞います。 そのようなプリンタを設定するために、 「 リモートホストに接続されたプリンタ」 と同様の手順をおこなってください。

    • そのプリンタが、 データストリームによるネットワーク接続をサポートしている場合。 この場合、ネットワーク上の1つのホストとしてプリンタを 接続 します。 このホストは、ジョブをスプーリングする責任を負い、 スプーリングされたジョブはプリンタに送られます。 そのようなプリンタをインストールするためのいくつかの提案が 「 ネットワークにおけるデータストリームの インタフェースを持つプリンタ」にあります。

9.4.3.1. リモートホストに接続されたプリンタ

LPD スプーリングシステムでは LPD (または LPD 互換のシステム) が起動している他のホストへジョブを送る機能が 始めからサポートされています。この機能により、 あるホストに接続されたプリンタへ、 他のホストからアクセスできるようになります。また、 LPD プロトコルを理解するネットワークインタフェースを持ったプリンタに対しても、 この機能は働きます。

リモートプリンタへの出力を許可するためには、最初に、 あるホスト (これを、 プリンタホストと呼びます) にプリンタを接続します。そして、「 プリンタ設定導入編」 に書かれた簡単なプリンタの設定をおこなってください。 必要ならば、「プリンタ設定上級編」 にある、更に進んだ設定をおこなってください。そして、 そのプリンタをテストしてうまく動作することを確認し、LPD に許可した機能がうまく働くかどうかを見てください。さらに ローカルホストプリンタホストLPD サービスの使用を許可されているか確認して下さい (「 リモートホストからの利用を制限する 」参照)。

LPD 互換のネットワークインタフェースを持つプリンタを使用している場合は、 そのプリンタ自身が以下で説明する プリンタホストになります。そして、 プリンタ名とは、 そのプリンタに設定した名前のことを指します。 これについては、プリンタ、および (または)、 プリンタのネットワークインタフェースに付属するドキュメントを参照してください。

ヒント:

ヒューレット・パッカード社の Laserjet シリーズを使用している場合には、 プリンタ名を text とすると、 自動的に LF から CRLF への変換が行なわれます。 そのため、hpif スクリプトは必要ありません。

次に、 そのプリンタにアクセスしたいと思っている他ホストにおいて、 そのホストの /etc/printcap ファイルに次にあげるエントリを作ります。

  1. 名前のエントリ。どんな名前でもよいのですが、簡単のため、多分、 プリンタホストで設定されたプリンタ名や別名と同じものを使いたいと思うでしょう。

  2. lp 項目で指定されるデバイスは明示的に空にします (:lp=: とします)。

  3. スプーリングディレクトリを作成し、 sd 項目でその位置を指定します。 LPD では、プリンタホストにジョブを送信するまでの間、 このディレクトリにジョブを格納します。

  4. rm 項目でプリンタホストの名前を指定します。

  5. rp 項目で プリンタホストに接続したプリンタ名を指定します。

これで終わりです。 変換フィルタやページの大きさやその他の事項を /etc/printcap に加える必要はありません。

次に、 リモートホストに接続されたプリンタで印字するための設定例を示します。 ホスト rose には 2 台のプリンタ bamboorattan が接続されています。これらのプリンタをホスト orchid のユーザが使えるようにしましょう。最初に orchid/etc/printcap を示します (このファイルは、「 ヘッダページの出力を許可する」 で参照することができます)。このファイルには、既に、プリンタ teak 用のエントリがありました。以下では、 これに、ホスト rose にある2台のプリンタ用のエントリが加えられています。

#
#  /etc/printcap for host orchid - added (remote) printers on rose
#

#
#  teak is local; it is connected directly to orchid:
#
teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\
        :lp=/dev/lpt0:sd=/var/spool/lpd/teak:mx#0:\
        :if=/usr/local/libexec/ifhp:\
        :vf=/usr/local/libexec/vfhp:\
        :of=/usr/local/libexec/ofhp:

#
#  rattan is connected to rose; send jobs for rattan to rose:
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
        :lp=:rm=rose:rp=rattan:sd=/var/spool/lpd/rattan:

#
#  bamboo is connected to rose as well:
#
bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
        :lp=:rm=rose:rp=bamboo:sd=/var/spool/lpd/bamboo:

orchid で必要となる作業はスプーリングディレクトリを作ることだけです。

# mkdir -p /var/spool/lpd/rattan /var/spool/lpd/bamboo
# chmod 770 /var/spool/lpd/rattan /var/spool/lpd/bamboo
# chown daemon:daemon /var/spool/lpd/rattan /var/spool/lpd/bamboo

これで、orchid のユーザが rattanbamboo で印字することができるようになりました。 たとえば、orchid のユーザが次のように入力したとします。

% lpr -P bamboo -d sushi-review.dvi

すると、orchidLPD システムは、 ジョブをスプーリングディレクトリ /var/spool/lpd/bamboo にコピーし、これが DVI ファイルを印字するジョブであることを記録します。 ホスト rosebamboo スプーリングディレクトリに十分な容量が確保でき次第、 両者の LPD は、ジョブのファイルを rose に転送します。 このファイルは、そのすべてが印字されるまで、rose のキューに留まります。 (bambooPostScript® プリンタなので) DVI から PostScript® への変換は rose でおこなわれます。

9.4.3.2. ネットワークにおけるデータストリームの インタフェースを持つプリンタ

プリンタのネットワークインタフェースカードは、 2 種類に分類することができます。 1 つはスプーラをエミュレートするもの (高価) で、もう 1 つはシリアルやパラレルポートを使うように プリンタにデータを送ることができるだけのもの (安価) です。この節では、 後者の使い方を説明します。前者のプリンタは、前節「 リモートホストに接続されたプリンタ」 の方法が適用できます。

/etc/printcap ファイルでは、 シリアルかパラレルのインタフェースのどちらを使うのか、 そして、(シリアルインタフェースを使う場合) そのボーレートはいくらであるか、フロー制御は使うのか、 タブのための遅延を加えるのか、 改行文字を変換するかなどの指定をおこなうことができます。 しかし、TCP/IP や他のネットワークポートからデータを受け取るプリンタを 接続するための指定をおこなうことはでき ません。

ネットワーク接続されたプリンタにデータを送るためには、 テキストフィルタと変換フィルタから呼び出すことができる 通信プログラムを開発する必要があります。以下に、 そのようなプログラムの例を示します。スクリプト netprint では、 標準入力から印字データをすべて受け取り、 ネットワーク接続されたプリンタにこれを送ります。 netprint の最初の引数でプリンタのホスト名を、 2 番目の引数で接続するポート番号を指定します。 このプログラムでは単方向通信 (FreeBSD からプリンタ) のみをサポートしていることに注意してください。 ネットワークプリンタの多くは双方向通信をサポートしていますので、 その恩恵 (プリンタの状態を得たり、 課金をおこなうなど) にあずかりたいと思われるかもしれません。

#!/usr/bin/perl
#
#  netprint - Text filter for printer attached to network
#  Installed in /usr/local/libexec/netprint
#

$#ARGV eq 1 || die "Usage: $0 <printer-hostname> <port-number>";

$printer_host = $ARGV[0];
$printer_port = $ARGV[1];

require 'sys/socket.ph';

($ignore, $ignore, $protocol) = getprotobyname('tcp');
($ignore, $ignore, $ignore, $ignore, $address)
    = gethostbyname($printer_host);

$sockaddr = pack('S n a4 x8', &AF_INET, $printer_port, $address);

socket(PRINTER, &PF_INET, &SOCK_STREAM, $protocol)
    || die "Can't create TCP/IP stream socket: $!";
connect(PRINTER, $sockaddr) || die "Can't contact $printer_host: $!";
while (<STDIN>) { print PRINTER; }
exit 0;

このスクリプトは、 様々なフィルタが利用することができます。仮に、Diablo 750-N ラインプリンタを持っており、 これがネットワークに接続されているとしましょう。 プリンタはポート番号 5100 にて印字するデータを受け取ります。 プリンタのホスト名は scrivener とします。このとき、 このプリンタのテキストフィルタは次のようになります。

#!/bin/sh
#
#  diablo-if-net - Text filter for Diablo printer `scrivener' listening
#  on port 5100.  Installed in /usr/local/libexec/diablo-if-net
#

exec /usr/libexec/lpr/lpf "$@" | /usr/local/libexec/netprint scrivener 5100

9.4.4. プリンタの利用に制約を与える

本節では、プリンタの利用に制約を与えるための情報を記しています。 LPD システムでは、プリンタ (ローカル、 リモートのいずれに接続されていても) にアクセスできる人を制限する機能、 複数部のコピーの印字の可否を制御する機能、 ジョブのサイズの最大値やプリンタキューに入る ジョブの最大個数を制御する機能を提供しています。

9.4.4.1. 複数部のコピーの印字を制限する

LPD システムではユーザが複数部のコピーの印字を簡単におこなう 機能を提供しています。ユーザが、(たとえば) lpr -#5 コマンドを使ってジョブを印字すると、 ジョブのそれぞれのファイルのコピーを 5 部得ることができます。 これがよい機能であると思うかどうかは人それぞれでしょう。

複数部のコピーの印字によってプリンタが 必要以上に消耗してしまうと感じるならば、 /etc/printcap ファイルに sc 項目を加えてください。これにより、 lpr(1)-# オプションの使用が禁止されます。 このオプションが指定されているにも関らず、 -# オプションを使うと、 次のようなメッセージが表示され、 このオプションの利用できない旨を伝えます。

lpr: multiple copies are not allowed

リモートホストからプリンタをアクセスできる 設定にしている場合 (この 設定については、「 リモートホストに接続されたプリンタ」 をご覧ください)、そのリモートホストの /etc/printcap にも同じように sc 項目を追加する必要があることに注意してください。 そうしないと、ユーザは別なホストから複数部のコピーの 印字をすることができてしまいます。

例を使って説明しましょう。次に示す /etc/printcap ファイルは、ホスト rose のものです。プリンタ rattan は極めて頑丈なので、 複数部のコピーの印字は許可されています。しかし、 レーザプリンタの bamboo はもう少しデリケートで、 このプリンタから複数部のコピーを印字することを sc 項目を追加することで禁止しています。

#
#  /etc/printcap for host rose - restrict multiple copies on bamboo
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
        :sh:sd=/var/spool/lpd/rattan:\
        :lp=/dev/lpt0:\
        :if=/usr/local/libexec/if-simple:

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
        :sh:sd=/var/spool/lpd/bamboo:sc:\
        :lp=/dev/ttyu5:ms#-parenb cs8 clocal crtscts:rw:\
        :if=/usr/local/libexec/psif:\
        :df=/usr/local/libexec/psdf:

さらに、orchid の /etc/printcap にも

sc

項目を追加する必要があります (orchid でこの編集をおこなっているときに、ついでに、プリンタ teak でも複数部のコピーの印字を禁止することにしましょう)。

#
#  /etc/printcap for host orchid - no multiple copies for local
#  printer teak or remote printer bamboo

teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\
        :lp=/dev/lpt0:sd=/var/spool/lpd/teak:mx#0:sc:\
        :if=/usr/local/libexec/ifhp:\
        :vf=/usr/local/libexec/vfhp:\
        :of=/usr/local/libexec/ofhp:

rattan|line|diablo|lp|Diablo 630 Line Printer:\
        :lp=:rm=rose:rp=rattan:sd=/var/spool/lpd/rattan:

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
        :lp=:rm=rose:rp=bamboo:sd=/var/spool/lpd/bamboo:sc:

sc 項目を指定することにより、 lpr -# の使用を防ぐことができます。しかし、この状態では lpr(1) を複数回起動したり、 1 回のジョブで次のように同じファイルを複数個指定することを防ぐまでには至っていません。

% lpr forsale.sign forsale.sign forsale.sign forsale.sign forsale.sign

このような悪用を防ぐ方法は (その指示を無視することも含めて) たくさんあります。 各自で調べてみてください。

9.4.4.2. プリンタを使用できる人を限定する

それぞれのプリンタを使用できる人を限定するには、UNIX® の グループ権限のメカニズムを利用し、さらに、 /etc/printcaprg 項目を指定することでおこないます。 あるプリンタにアクセスさせてもよいと思うユーザすべてを グループのどれかに入れてください。そして、 そのグループ名を rg で指定します。

このとき、そのグループに含まれないユーザ (root も含みます) がプリントしようとすると、次のようなメッセージが表示されます。

lpr: Not a member of the restricted group

sc (suppress multiple copies : 複数部のコピーの印字を禁止する) を指定するときと同様に、rg が指定されたプリンタがリモートホストからもアクセスでき (この設定については、 「 リモートホストに接続されたプリンタ」 をご覧ください)、かつ、 そのホストでもプリンタを使用できる人を限定するのが 妥当であると思う場合は、 そのホストの /etc/printcap にも rg 指定をおこなう必要があります。

たとえば、プリンタ rattan は誰でも利用できるが、bamboo はグループ artists に属している人のみが利用できるようにしてみましょう。 以下に、もうお馴染みとなったホスト rose/etc/printcap を示します。

#
#  /etc/printcap for host rose - restricted group for bamboo
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
        :sh:sd=/var/spool/lpd/rattan:\
        :lp=/dev/lpt0:\
        :if=/usr/local/libexec/if-simple:

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
        :sh:sd=/var/spool/lpd/bamboo:sc:rg=artists:\
        :lp=/dev/ttyu5:ms#-parenb cs8 clocal crtscts:rw:\
        :if=/usr/local/libexec/psif:\
        :df=/usr/local/libexec/psdf:

これ以外の /etc/printcap ファイル (ホスト orchid のもの) はそのままにしておくことにします。もちろん、 orchid のユーザは全員 bamboo を利用することができます。これは、 orchid には特定のユーザのみにしかアクセスさせておらず、 そのユーザにはプリンタを利用させたいと思っているからなのかもしれませんし、 そうでないかもしれません。

注記:

1台のプリンタを複数グループのユーザに利用させることはできません。

9.4.4.3. 入力可能なジョブのサイズを制限する

たくさんのユーザからプリンタが利用される場合には、多分、 ユーザが印字要求を出すことができるファイルのサイズに 上限値を置く必要が生じるでしょう。結局のところ、 スプーリングディレクトリ が置かれているファイルシステムの空き容量がその 上限値になる訳ですが、 あるユーザがこれを独占的に使用すること避けるために、 他ユーザからのジョブ用の空き容量を確保する必要もあります。

LPD では、mx 項目を指定することにより、 ジョブ中の個々のファイルのサイズの上限値を制限する機能を提供しています。 指定される ファイルサイズの単位は BUFSIZ ブロックで、1 BUFSIZ ブロックは 1024バイトを表わします。この mx 項目の値として 0 が指定されると、 ファイルサイズの制限はなくなります。 mx が指定されない場合は、 デフォルトの制限として 1000 ブロックが使われます。

注記:

この制限はジョブ中の各 ファイルに対して適用されるものであり、 ジョブ全体のサイズ を制限するものではありません

ところで、 プリンタに設定された上限値を超えるファイルサイズの ファイルが入力された場合でも、LPD はこれを拒否しません。その代わりに、このファイルは、 その先頭から上限値のファイルサイズまでしかキューに入れられません。 そして、その部分までが印字され、 残りの部分は捨てられます。 これが正しい動作といえるのかどうかは議論の余地があるところです。

それでは、設定例に登場しているプリンタ rattanbamboo の印字可能なファイルサイズに制限を加えてみましょう。 artists グループの人達が作る PostScript® ファイルのサイズは 巨大になる傾向があるので、上限値を 5M バイトとします。 それから、 プレインテキスト用のラインプリンタは無制限とします。

#
#  /etc/printcap for host rose
#

#
#  No limit on job size:
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
        :sh:mx#0:sd=/var/spool/lpd/rattan:\
        :lp=/dev/lpt0:\
        :if=/usr/local/libexec/if-simple:

#
#  Limit of five megabytes:
#
bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
        :sh:sd=/var/spool/lpd/bamboo:sc:rg=artists:mx#5000:\
        :lp=/dev/ttyu5:ms#-parenb cs8 clocal crtscts:rw:\
        :if=/usr/local/libexec/psif:\
        :df=/usr/local/libexec/psdf:

この場合もそうですが、この制限はローカル (ホスト rose) のユーザのみに適用されます。 リモートホストからプリンタを利用できるように設定している場合は、 そのリモートホストのユーザはこの制限を受けません。 これらのユーザにも制限を加える場合は、リモートホストの /etc/printcapmx を指定する必要があります。 リモートホストから印字するための詳しい情報については、 「 リモートホストに接続されたプリンタ」 を参照してください。

リモートホストに接続されたプリンタへのジョブの サイズを制限する特別な方法は他にもあります。これについては、 「 リモートホストからの利用を制限する」 を参照してください。

9.4.4.4. リモートホストからの利用を制限する

LPD スプーリングシステムでは、 リモートホストから要求されたジョブの印字を制限するための方法がいくつか提供されています。

ホストの制限

ローカルの LPD が印字要求を受け付けるリモートホストは、ファイル /etc/hosts.equiv/etc/hosts.lpd によって制御することができます。LPD では、あるホストから印字の要求がきたとき、 このホストの名前がこれら 2 つのファイルのどちらかに含まれている かどうかを調べます。これが含まれていない場合は、LPD はこの要求を拒否します。

これらのファイルの形式は単純です。 各行にホストの名前を 1つずつ書いていきます。ファイル /etc/hosts.equiv の方は ruserok(3) プロトコルでも利用され、 rsh(1)rcp(1) といったプログラムの動作に影響するので注意が必要です。 /etc/hosts.equiv の記述は慎重におこないましょう。

例として、以下にホスト rose/etc/hosts.lpd を示します。

orchid
violet
madrigal.fishbaum.de

この例では、rose はホスト orchid, violet そして madrigal.fishbaum.de からの要求を受け付けることになります。 その他のホストが roseLPD にアクセスしようとしても、 LPD はそのジョブを拒否します (訳注: 拒否されるのは、そのホストが /etc/hosts.equiv にも含まれていない場合です)。

サイズの制限

スプーリングディレクトリがある ファイルシステムに残しておく必要がある 空き容量の大きさを制御することができます。 ローカルプリンタ用のスプーリングディレクトリに minfree という名前のファイルを作成します。そして、 そのファイルの中にリモートホストからのジョブの 要求を受け付けるために必要な空き容量のディスクブロックサイズ (1 ディスクブロック = 512 バイト) を記します。

これで、 リモートホストのユーザにファイルシステムを満杯にされないことが保証されます。 この機能を使うと、 ローカルホストのユーザに対してある種の優先権を与えることもできます。 ローカルホストのユーザは、 minfree ファイルで指定された値よりもディスクの空き容量が下回った後でもずっと、 ジョブをキューに入れることができるのです。

たとえば、プリンタ bamboo 用の minfree を作ってみましょう。 このプリンタのスプーリングディレクトリを調べるために、 /etc/printcap を調べてみましょう。 以下に、bamboo のエントリ部分を示します。

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
        :sh:sd=/var/spool/lpd/bamboo:sc:rg=artists:mx#5000:\
        :lp=/dev/ttyu5:ms#-parenb cs8 clocal crtscts:rw:mx#5000:\
        :if=/usr/local/libexec/psif:\
        :df=/usr/local/libexec/psdf:

スプーリングディレクトリは sd 項目で指定されます。LPD がリモートホストからのジョブを受け付けるために必要な ファイルシステムの空き容量を 3M バイト (= 6144 ディスクブロック) にすることにしましょう。

# echo 6144 > /var/spool/lpd/bamboo/minfree
              
利用ユーザの制限

/etc/printcaprs 項目を指定することで、 ローカルプリンタを利用できるリモートホストのユーザを制限することができます。 ローカルホストに接続されたプリンタ用のエントリに rs 項目が指定されている場合、 LPD は、印字を要求したユーザのアカウントと同じログイン名が ローカルホストに登録されている場合に限り、 そのジョブを受け付けます。それ以外のジョブを LPD は拒否します。

この機能は、(たとえば) 複数の部署がネットワークを共有しており、 この内のあるユーザが部署の境界を越えて活動している場合には特に有用です。 そのようなユーザに対して、システムのアカウントを与えるだけで、 これらのユーザは自分が所属する部署のシステムから そのシステムに接続されているプリンタを使用することができます。 これらのユーザにはむしろ、 プリンタの使用だけを認め、 その他のコンピュータ資源を利用させたくないときは、 それらのユーザにはホームディレクトリを与えず、 ログインシェルはシェルとしては何の役にも立たない /usr/bin/false などを指定して、 これらのユーザのアカウントはプリンタ用の 形式的な ものとします。

9.4.5. プリンタの利用に対する課金

という訳で、印字するためには料金をとることが必要です。 取らない理由などありましょうか。紙やインクにはお金がかかります。 そして、プリンタの維持費もかかります。 プリンタには可動部分が搭載されており、 これらの部分は壊れやすいという傾向があります。 プリンタや、その利用形態、維持費について調査をし、1 ページ (1 フィート、1 メートルなど) 当たりにかかるコストを調べておいてください。 これに基づき、プリンタの利用に対する課金を、実際に、 どのように始めればよいのでしょうか。

さて、残念ながら、この部分に関しては LPD スプーリングシステムはほとんど役に立ちません。 課金は使用しているプリンタの種類、印字するもののファイルの形式、 プリンタの利用に対する課金での あなた自身の要求に大きく左右されます。

課金システムを実現するためには、プリンタのテキストフィルタ (プレインテキストのジョブに対して課金するため) と変換フィルタ (その他のファイル形式に対して課金するため) を変更して、 印字したページを数えたり、 プリンタに印字したページ数を取得するための要求を送る必要があります。 ただし、出力フィルタのみを利用している場合は、 課金をおこなうことができません。フィルタに関しては、 「 フィルタ」をご覧ください。

一般に、課金方式には次の 2 つがあります。

  • 定期的に課金する方法 はよく利用される方法です。この理由は、 恐らく比較的簡単に実現できるからです。 誰かがジョブを印字する度に、フィルタはそのユーザ名、 ホスト名、印字したページ数を課金データファイルに記録します。 毎月、毎学期、毎年、その他お好みの時期に、 各プリンタの課金用ファイルを集め、 それぞれのユーザが印字したページ数を合計して その分の課金をおこないます。 次回の課金期間をデータを 0 にして課金を再開するために、 すべてのログファイルを削除します。

  • 利用毎に課金する方法 はあまり利用されていません。これは、 実現するのが比較的難しいからです。この方式では、 プリンタを使用したらすぐに、 フィルタがユーザにその利用に対する課金をおこないます。 ディスククォータのように、課金作業は瞬時におこなわれます。 この方式では、ユーザのアカウントが赤字になる場合に、 ユーザが印字をおこなうことを拒否することができます。 また、ユーザに プリンタ版 quota を調べたり、 調整したりする方法を提供したいと思うかもしれ ません。 これを実現するためには、ユーザとその quota を追跡するために、 あるデータベース用のコードが必要となります。

LPD スプーリングシステムでは、 どちらの方式にも簡単に対応できます。(ほとんどの場合は) フィルタを用意しなければならないので、 課金作業のためのコードも用意しなければなりません。 しかし、明るい面もあります。 それは、課金方式に関して、非常に大きな柔軟性が与えられたということです。 たとえば、「定期的に課金する方法」か、 「利用毎に課金する方法」のどちらかを選びまず、そして、 どんな情報 (ユーザ名、ホスト名、ジョブのタイプ、印字された頁数、 使用した紙の大きさ、印字をするために要した時間など) をログに記録するかを決めます。 以上のことをおこなうには、上記の情報を保持するために、 フィルタを変更しなくてはなりません。

9.4.5.1. 手軽なプリンタ課金方法

FreeBSD には、「定期的に課金する方法」による課金を すぐに設定できるように、2 個のプログラムを添付しています。 その内の1つはテキストフィルタ lpf で、 これについては、「 テキストフィルタ lpf」をご覧ください。もう1つは、 pac(8) で、 これはプリンタの課金データファイルからのエントリを集め、 これを合計するプログラムです。

フィルタはどのように機能しているか」で述べたように、 LPD ではテキストフィルタや変換フィルタを起動しますが、 そのコマンドラインで使用している課金データファイルの名前が指定されます。 両フィルタはこの引数を使って、 どの課金データファイルのエントリに書き込めばよいのかを知ることができます。 このファイルの名前は /etc/printcap 中の af 項目によって指定されます。 このファイルが絶対パ スで指定されない場合は、 スプーリングディレクトリからの相対パスとして扱われます。

LPD は、紙のページの幅と行数 (pwpl 項目で 指定される) を引数として lpf を起動します。lpf フィルタでは、 何ページ印字したかを決定するためにこれらの引数を使用します。 ファイルをプリンタに送った後、 課金情報を課金データファイルに書き込みます。 このファイルは次のようになります。

2.00 rose:andy
3.00 rose:kelly
3.00 orchid:mary
5.00 orchid:mary
2.00 orchid:zhang

課金データファイルはプリンタ毎に分けて作るべきです。 これは、lpf にはファイルをロックする機構が組み込まれていないためです。 したがって、lpf が 2 つ起動されたとき、 同じファイルに同時に書き込みをおこなった場合、 お互いのエントリを破壊してしまうかもしれません。 課金用ファイルを各プリンタ毎に確実に分けるには、 /etc/printcap 中の af=acct 項目を使います。 そうすれば、それぞれの課金用ファイルがプリンタのスプーリングディレクトリに、 acct という名称で作成されます。

プリンタの利用に対してユーザに課金する準備ができたら、 pac(8) プログラムを実行してください (課金したいプリンタのスプーリングディレクトリに移動した後、 pac と入力してください)。 次のような、ドル中心主義の課金リストが表示されます (訳注: ドル中心主義という表現は、 表示がドルで出ることへの著者の皮肉でしょう。 セントがあるので小数点以下が表示されますが、 この機能も日本では邪魔ですね)。

  Login               pages/feet   runs    price
orchid:kelly                5.00    1   $  0.10
orchid:mary                31.00    3   $  0.62
orchid:zhang                9.00    1   $  0.18
rose:andy                   2.00    1   $  0.04
rose:kelly                177.00  104   $  3.54
rose:mary                  87.00   32   $  1.74
rose:root                  26.00   12   $  0.52

total                     337.00  154   $  6.74

pac(8) が受け付ける引数には次のようなものがあります。

-Pprinter

プリンタ printer の利用に対する課金リストを作成します。 このオプションは、/etc/printcapaf が絶対パスで指定されていた場合に限り、動作します。

-c

ユーザ名のアルファベット順ではなく、 課金額の低い順にリストを並べます。

-m

課金データファイルにあるホスト名を無視します。 このオプションを使用すると、ホスト alpha のユーザ smith とホスト gamma のユーザ smith は同一人物として扱われます。 このオプションが指定されない場合は、 両者は別なユーザとして扱います。

-pprice

/etc/printcappc 項目で指定された値、または、 デフォルトの値 (2 セント) に代わり、紙1ページ、または、 1フィート当たりの価格を指定します。 price として、 浮動小数点数を指定することができます。

-r

リストの並べる順番を逆順にします。

-s

課金リストを作成し、 課金データファイルを削除します。

name

ユーザ names に対する課金情報のみを表示します。

pac(8) が生成するデフォルトのリストには、 各ホストのユーザ別に印字ページ数が表示されます。 (ユーザがサイト内のすべてのホストを使用できるため) ホスト名の情報が意味を持たない場合、 pac -m を実行してください。次のようなリストが得られます。

  Login               pages/feet   runs    price
andy                        2.00    1   $  0.04
kelly                     182.00  105   $  3.64
mary                      118.00   35   $  2.36
root                       26.00   12   $  0.52
zhang                       9.00    1   $  0.18

total                     337.00  154   $  6.74

課金額を決めるために、 pac(8)/etc/printcap ファイルの pc 項目で指定された値 (デフォルト値は 200、すなわち 1 ページ当たり 2 セント) を使います。この項目で、印字物に課金したい ファと思う 1 ページ当たり、 または、1 フィート当たりの価格を 100 分の 1 セント単位で指定します。 pac(8)-p オプション付きで起動すると、 この値を置き換えることができます。 この -p オプションで指定する額の単位は、 100 分の 1 セント単位ではなく、ドル単位です。たとえば、次の指定では、 1 ページ当たりの単価が 1 ドル 50 セントになります。

# pac -p1.50

このオプションを使うと、 実際の課金額を集計することができます。

最後に、pac -s を起動すると、課金情報は課金データ累計ファイルに保存されます。 このファイルの名前は、プリンタの課金データファイルの後ろに _sum を付けたものとなります。そして、 課金データファイルは削除されます。次に pac(8) が起動されると、 その時点までの累計金額を得るために、 課金データ累計ファイルが読み込まれ、 通常の課金データファイルからの情報に加算されます。

9.4.5.2. 印字されたページ数をどのように数えるか?

課金を、リモートホストからの印字でさえも、 正確におこなうためには、 ジョブで使用された紙が何ページであるかを特定できる必要があります。 このことは、プリンタ利用に対する課金をおこなう上の根本的な問題です。

プレインテキストのジョブの場合、 問題を解決するのはさほど難しくはありません。 ジョブが何行であったかを数え、プリンタがサポートしている紙 1 ページに印字できる最大の行数と比較すればよいのです。 重ね打ちするために利用されるファイル中のバックスペース文字や、 物理的に複数の行に渡る長い論理行に対する取り扱いを忘れずにおこなってください。

(「テキストフィルタ lpf」で紹介した) テキストフィルタ lpf では、課金をおこなうときに、 これらの取り扱いをおこなってくれます。 課金をおこなうために必要なテキストフィルタを作成している方は、 lpf のソースコードが参考になるでしょう。

これに対して、他のファイル形式の処理はどのようにすれば よいのでしょうか。

まず、DVI から LaserJet, または、DVI から PostScript® への変換の場合、フィルタが dviljdvips の 出力メッセージを解析することで、 何ページ分の変換がおこなわれたかを知ることができます。 他のファイル形式とその変換プログラムに関しても、 同様のことができるかもしれません。

しかし、この方式には問題点があります。それは、 変換されたページがすべて印字されるとは限らないということです。 たとえば、プリンタが紙詰まりを起こしたり、トナー切れになったり、 はたまた、爆発したりするかもしれません。 そのような状況により印字が途中で中止されたとしても、この方式では、 ユーザは全ページ分の料金を課されてしまうのです。

それでは、どのような対策をたてることができるのでしょうか。

正確な 課金をおこなうための唯一の確実な方法は、 何ページ印字したのかを知らせることができるプリンタを入手し、 これをシリアルポートかネットワークに接続することです。 ほとんどすべての PostScript® プリンタではこの概念がサポートされています。 他のプリンタも同様です (Imagen レーザプリンタをネットワーク接続するなど)。 それぞれのプリンタのフィルタを、 ジョブを印字した後で印字ページ数を得るように変更してください。 そして、課金情報はここで得られた値のみに 基づいて記録してください。行数を数えたり、 エラーが生じやすいファイルの調査は必要とされません。

もちろん、 気前よく印字料金をすべて無料にすることもできます。

9.5. プリンタを使う

この節では、FreeBSD で設定したプリンタを使う方法について説明します。 ここでは、ユーザレベルでのコマンドを概説します。

lpr(1)

印字をおこないます。

lpq(1)

プリンタキューを調べます。

lprm(1)

プリンタキューにあるジョブを削除します。

また、「プリンタの管理」 節で説明されている管理者用コマンド lpc(8) もあり、 プリンタやそのキューの制御のために用いられています。

lpr(1)lprm(1)、そして lpq(1) の 3 コマンドは、-Pprinter-name オプションをとり、これによって、 /etc/printcap のように操作の対象となる プリンタやキューを指定します。 これによって、様々なプリンタに対してジョブを送る、 取り消す、調査することができます。 -P が使われなかった場合は、これらのコマンドは PRINTER 環境変数で指定されたプリンタを使用します。 そして、PRINTER 環境変数がなかった場合は、 これらのコマンドはデフォルトのプリンタ lp を使います。

以下では、デフォルトプリンタ という用語が意味するプリンタは、PRINTER 環境変数で指定されたプリンタ、もしくは、PRINTER 環境変数がない場合は、lp という名前のプリンタです。

9.5.1. 印字する

ファイルを印字するためには、 次のように入力してください。

% lpr filename ...

これにより、 入力されたファイルのそれぞれをデフォルトのプリンタ から印字します。ファイル名が与えられなかった場合、 lpr(1) は標準入力から印字するデータを読み込みます。たとえば、 次のコマンドにより、ある重要なシステムファイルが印字されます。

% lpr /etc/host.conf /etc/hosts.equiv

印字させるプリンタを選択するためには、 次のように入力します。

% lpr -P printer-name filename ...

次の例では、プリンタ rattan に、 カレントディレクトリにあるファイルの詳細なリストを印字しています。

% ls -l | lpr -P rattan

上記の lpr(1) コマンドではファイル名の指定がないので、 lpr は標準入力から印字するデータ、 この場合、ls -l コマンドの出力、を読み込みます。

lpr(1) コマンドでは、 出力の整形を制御したり、ファイル変換を適用したり、 複数部数のコピーを作成したり、 などといた様々な幅広いオプションを受け付けることもできます。 詳細については、 「 その他の印字オプション」をご覧ください。

9.5.2. ジョブの処理状況を調べる

lpr(1) コマンドを使って印字をする場合、プリントしようと するデータは プリントジョブ と呼ばれる箱に一緒に置かれ、 これが LPD スプーリングシステムに送られます。 プリンタにはそれぞれジョブ用のキューがあり、 送られてきたジョブはあなたや他のユーザからの別のジョブと一緒にそのキューで並んで、 処理される順番を待ちます。 プリンタは到着順にこれらのジョブの印字をおこないます。

デフォルトプリンタのキューの状態を表示するには、 lpq(1) と入力します。プリンタを指定するときは、 -P オプションを使います。たとえば、次のコマンド

% lpq -P bamboo

は、プリンタ bamboo のキューの状態を表示します。この lpq コマンドの出力結果の例を次に示します。

bamboo is ready and printing
Rank   Owner    Job  Files                              Total Size
active kelly    9    /etc/host.conf, /etc/hosts.equiv   88 bytes
2nd    kelly    10   (standard input)                   1635 bytes
3rd    mary     11   ...                                78519 bytes

この例では、bamboo のキューに 3 つのジョブがあることが分かります。 最初のジョブはユーザ kelly からのものであり、 ジョブ番号 9 が割り当てられています。 プリンタのすべてのジョブには一意なジョブ番号が付けられています。 ほとんどの場合、このジョブ番号は無視することができますが、 ジョブをキャンセルするときにはこの番号が必要になります。 このことの詳細については、「ジョブの削除 」をご覧ください。

ジョブ番号 9 のジョブは 2 つのファイルを処理します。すなわち、 lpr(1) のコマンドラインに複数のファイル名が与えられたときは、 1つのジョブとして扱われるのです。このジョブは、現在、 アクティブジョブ (Rank の欄の active という後に注目) になっています。 これは、プリンタからそのジョブが現在印字されているはずであることを意味しています。 2 番目のジョブでは、 lpr(1) コマンドに標準入力からデータが与えられています。 3番目のジョブはユーザ mary から与えられました。 このジョブのサイズはとても大きくなっています。 彼女がプリントしようとしたファイルのパス名はここで表示させるには長すぎるため、 lpq(1) コマンドはドットを 3 つだけ表示しています。

lpq(1) からの出力で一番最初の行もまた有益な情報を与えています。 この行から、プリンタが現在何をしているか (あるいは、少なくとも LPD がプリンタがしていると思っていること) が分かります。

lpq(1) コマンドは -l オプションもサポートしています。 これにより、 詳しい情報が表示されます。 lpq -l の実行例を次に示します。

waiting for bamboo to become ready (offline ?)
kelly: 1st                               [job 009rose]
       /etc/host.conf                    73 bytes
       /etc/hosts.equiv                  15 bytes

kelly: 2nd                               [job 010rose]
       (standard input)                  1635 bytes

mary: 3rd                                [job 011rose]
      /home/orchid/mary/research/venus/alpha-regio/mapping 78519 bytes

9.5.3. ジョブの削除

印字するようジョブを 送った後で印字を中断したくなったときは、 lprm(1) コマンドで、 キューの中からそのジョブを削除することができます。 大抵の場合、アクティブジョブでさえも lprm(1) を使って削除することができますが、 そのジョブの一部またはすべてが印字されてしまうかもしれません。

デフォルトプリンタへのジョブを削除するためには、最初に、 lpq(1) を使ってそのジョブ番号を調べます。 すなわち、それから、 次のように入力して、ジョブを削除します。

% lprm job-number

特定のプリンタへのジョブを削除するときは、 -P オプションを使ってそのプリンタを指定します。 たとえば、プリンタ bamboo のキューからジョブ番号 10 のジョブを削除するには次のようにします。

% lprm -P bamboo 10

lprm(1) コマンドには略記法がいくつかあります。

lprm -

あなたが (デフォルトプリンタへ) 送ったジョブをすべて削除します。

lprm user

ユーザ user が (デフォルトプリンタへ) 送ったジョブをすべて削除します。 他のユーザのジョブを削除できるのはスーパユーザだけです。 あなたは、あなた自身のジョブしか削除することはできません。

lprm

ジョブ番号もユーザ名もシンボル -も指定されないときは、 lprm(1) は現在のアクティブジョブを、 そのジョブを送ったのがあなた自身であるときに限り、 デフォルトプリンタから削除します。ただし、 スーパユーザは任意のアクティブジョブを削除することができます。

上記の略記法をデフォルトプリンタではなく 特定のプリンタに対しておこなうときは、-P オプションでそのプリンタを指定するだけよいのです。たとえば、 プリンタ rattan のキューへあなたが送ったジョブを すべて削除するためには次のようにします。

% lprm -P rattan -

注記:

ネットワーク環境で作業をしている場合、 あるホストから送られたプリンタジョブは、これを送ったホストで lprm(1) を使った場合に限って、 これを削除することができます。 他のホストで同じプリンタを使えたとしても、 このジョブを削除することはできません。 次の例では、他ホストからジョブを削除することを試みています。

% lpr -P rattan myfile
% rlogin orchid
% lpq -P rattan
Rank   Owner      Job  Files                          Total Size
active seeyan     12    ...                           49123 bytes
2nd    kelly      13   myfile                         12 bytes
% lprm -P rattan 13
rose: Permission denied
% logout
% lprm -P rattan 13
dfA013rose dequeued
cfA013rose dequeued
	

9.5.4. その他の印字オプション

lpr(1) コマンドには、テキストの整形や、 図や他のファイル形式の変換、複数部コピーの生成、 ジョブの扱いなどを制御することができます。 この節では、これに関するオプションについて記しています。

9.5.4.1. 整形と変換に関するオプション

以下の lpr(1) 用のオプションはジョブにおける ファイルの整形の制御に関するものです。 このオプションは、ジョブにプレインテキストが含まれない場合や pr(1) ユーティリティを使ってプレインテキストを整形する場合に用いてください。

次の例では、プリンタ bamboo に (TeX 組版システムによる) DVI ファイル fish-report.dvi を印字しています。

% lpr -P bamboo -d fish-report.dvi

このオプションは、 ジョブに含まれるすべてのファイルに対して適用されます。 したがって、1 つのジョブに (たとえば) DVI ファイルと ditroff ファイルを混在させることはできません。その代わりに、 ファイルを形式毎に別々のジョブに分け、 それぞれのジョブでその形式用の変換オプションを使って印字してください。

注記:

-p-T を除くすべてのオプションを使用 するためには、 出力先プリンタ用の変換フィルタが必要です。たとえば、 -d オプションを使用するには、DVI 用の変換フィルタが必要 です。詳細については、「 変換フィルタ」で説明しています。

-c

cifplot ファイルを印字します。

-d

DVI ファイルを印字します。

-f

FORTRAN プログラムを印字します。

-g

plot のデータを印字します。

-i number

出力に対して、number カラム分の字下げをおこないます。 number が省略されると、 8 カラム分字下げされます。 このオプションはある変換フィルタと一緒の指定されたときのみに機能します。

注記:

-i と数字の間に空白を入れてはいけません。

-l

制御文字を含む文字通りのテキストデータを印字します。

-n

ditroff (device independent troff) データを印字します。

-p

印字する前に pr(1) によってプレインテキストを整形します。 詳細については pr(1) をご覧ください。

-T title

pr(1) コマンドにより生成されるヘッダを、 ファイル名の代わりに title とする。 このオプションは、-p と一緒に使ったときのみ機能する。

-t

troff データを印字します。

-v

ラスタのデータを印字します。

次の例では、ls(1) のマニュアルを美しく整形したものをデフォルトプリンタで印字しています。

% zcat /usr/share/man/man1/ls.1.gz | troff -t -man | lpr -t

zcat(1) コマンドで ls(1) のマニュアルのソースファイルの圧縮を復元し、これを troff(1) コマンドに渡しています。 これによりソースファイルが整形され GNU troff の形式となります。 その結果は lpr(1) に渡され、 LPD スプーラへジョブの要求が発せられます。 lpr(1) には -t オプションが使われているため、 スプーラでジョブを印字したときに GNU troff の形式から、デフォルトプリンタが解釈できる形式へと変換されます。

9.5.4.2. ジョブに関するオプション

以下のオプションは、lpr(1) によって、 そのジョブを特殊な扱いにするよう LPD に指示するためのものです。

-# copies

ジョブに含まれるファイルのそれぞれを 1 部だけ印字するのではなく、 copies 部のコピーを生成させるものです。管理者によっては、 プリンタの消耗を避け、コピー機による複製を奨励するために このオプションの使用が禁止されているかもしれません。 これに関しては、「 複数部のコピーの印字を制限する 」をご覧ください。

次の例では、デフォルトプリンタで parser.c を 3 部コピーし、次に、 parser.h を 3 部コピーしています。

% lpr -#3 parser.c parser.h
-m

印字ジョブが完了した後で、メールを送ります。 このオプションを付けると、LPD システムはジョブの処理が終了したときに、 あなたのアカウントにメールを送ります。 メールのメッセージには、ジョブが正常終了したのか、あるいは、 何か異常があり、(しばしば) その異常が何であったのかが書かれています。

-s

印字ファイルをスプールディレクトリにコピーせず、 代わりに、 シンボリックリンクを作成するよう指示します。

印字させるジョブのサイズが大きいとき、 このオプションを使うと便利かもしれません。このオプションにより、 スプー ルディレクトリの容量が節約されます (それに、 巨大なジョブのお陰でスプールディレクトリのあるファイルシステムの空き容量がなくなってしまうかもしれません)。 さらに、LPD がいちいちすべてのデータをコピーする必要がなくなりますので、 時間の節約にもなります。

ただし、欠点もあります。LPD はオリジナルのファイルを直接参照するので、 印字が終了するまでそのファイルを変更したり削除することができません。

注記:

リモートのプリンタで印字している場合、 LPD は、結局のところ、 ローカルホストからリモートホストにファイルをコピーする必要があります。 したがって、-s オプションはローカルのスプーリングディレクトリの空き容量を節約するだけで、 リモート側では節約されません。 それでも、このオプションは有用です。

-r

ジョブに含まれるファイルを、 スプーリングディレクトリに ファイルをコピーした後に削除します。もしくは、 -s オプションと一緒に使われた場合は、 印字終了後に削除されます。 このオプションの使用には十分注意して下さい。

9.5.4.3. ヘッダページ用オプション

以下のオプションにより、 ジョブのヘッダページに通常印字さ れるテキストを lpr(1) に調整させることができます。 対象のプリンタからヘッダページが出力されない場合は、 これらのオプションは何の効力も持ちません。 ヘッダページの設定に関する情報については、 「 ヘッダページ」を参照してください。

-C text

ヘッダページに印字されるホスト名を text に置き換えます。なお、 ホスト名の場所には、通常、 ジョブの要求があったホストの名前が印字されます。

-J text

ヘッダページに印字されるジョブ名を text に置き換えます。 ジョブ名の場所には、通常、ジョブの最初のファイル名、 または、標準入力からデータが印字されたときは stdin が印字されます。

-h

ヘッダページの出力を禁止します。

注記:

サイトによっては、 そのヘッダページの生成方法により、 このオプションの効果が現れないかもしれません。 詳細は、「 ヘッダページ」をご覧ください。

9.5.5. プリンタの管理

プリンタの管理者として、プリンタの設置、設定、 そして、それらのテストをおこなう必要がありました。 lpc(8) コマンドにより、 これまでとは別な管理方法がプリンタと対話的におこなわれます。 lpc(8) により、次のことが可能となります。

  • プリンタの起動、停止をおこなう。

  • キューへの入力の許可、禁止をおこなう。

  • それぞれのキューにあるジョブの順番を変更する。

最初に用語に関する注意をしておきます。 プリンタが停止しているとは、 キューの中にあるどのジョブも印字されることがない状態 を言います。この状態においても、 ユーザはまだジョブの要求をおこなうことができますが、 これらのジョブはキューの中で、 プリンタがスタートする状態になるまで、 あるいは、キューの内容が削除されるまで待たされることになります。

キューが禁止状態にあると、 (root 以外の) すべてのユーザがプリンタにジョブを要求することができません。 キューが許可状態にある場合は、 ジョブの入力が許可されます。 キューが禁止状態にある場合でも、 プリンタをスタートす る状態にすることは可能です。この場合は、 キューが空になるまで、 キュー内のジョブの印字が続けられます。

一般的に、lpc(8) コマンドを使用するには root 権限を持っている必要があります。 一般のユーザも lpc(8) コマンドを使うことはできますが、 プリンタの状態を取得することとハングしたプリンタ を再スタートすることだけに使用が制限されています。

以下に、 lpc(8) コマンドに関する説明の要約を述べます。 ほとんどのコマンドでは、操作対象となるプリンタを指定するため printer-name 引数を与えます。 printer-name の代わりに all が与えられると、操作は /etc/printcap 内にある全プリンタに対しておこなわれることになります。

abort printer-name

現在のジョブをキャンセルし、プリンタを停止させます。 キューが許可状態にある場合は、 ユーザはまだジョブを入力することができます。

clean printer-name

プリンタのスプーリングディレクトリから、 ジョブの古いファイルを削除します。状況によって、 とりわけ、印字途中でエラーが発生していたり、 管理操作が頻発していた場合には、 ジョブで作られたファイルを LPD が完全に削除しないことがあります。このコマンドでは、 スプーリングディレクトリに入っていないファイルを見つけ出し、 それを削除しています。

disable printer-name

キューに新しいジョブを入れることを禁止します。 プリンタが動作しているときは、 キューに残っているジョブの印字は続けられます。ただし、 キューが禁止状態にあったとしても、スーパーユーザ (root) は常にジョブを入力することができます。

このコマンドは、 新しいプリンタやフィルタを設置している間に使用すると有用です。 すなわち、キューを禁止状態にしておくと、 root によるジョブのみが入力されます。 そして、他のユーザは、テストが完了し、 enable コマンドでキューが再度許可状態になるまで、 ジョブの入力はできなくなります。

down printer-name message

プリンタをダウンさせます。これは、 disable をおこなった後で、 stop をおこなった場合と等価になります。 message は、ユーザが lpq(1) コマンドでプリンタのキューの状態を調べたり、 lpc status でプリンタの状態を調べたときに、 プリンタの状況として表示されるメッセージです。

enable printer-name

プリンタのキューを許可状態にします。 ユーザはジョブの入力ができるようになりますが、 プリンタがスタートの状態になるまでは、 プリンタからは何も印字されません。

help command-name

command-name コマンドのヘルプメッセージを表示します。 command-name が指定されなかった場合は、 利用できるコマンドの要約が表示されます。

restart printer-name

プリンタをスタートさせます。通常のユーザは、 LPD がある異常な状況でハングしたときに限り、 このコマンドを使用することができます。しかし、 stop または down コマンドにより、 停止状態にあるプリンタをスタートさせることはできません。 restart コマンドは、 abort の後に start をおこなったことと同じになります。

start printer-name

プリンタをスタートさせます。 プリンタのキューにあるジョブを印字することでしょう。

stop printer-name

プリンタを停止します。プリンタは、 現在のジョブを終了させ、そして、 キューにあるその他のジョブは印字しません。 プリンタが停止状態にあったとしても、まだ、 許可状態にあるキューに対して、ジョブを送ることができます。

topq printer-name job-or-username

printer-name のキューに対して、ジョブ番号 job のジョブ、または、ユーザ username から送られたジョブを置き換えて、キューの先頭に持ってきます。 このコマンドに関しては、 printer-name の代わりに all を使用することはできません。

up printer-name

プリンタをアップ状態にします。これの反対のコマンドが down です。start の次に enable をおこなったことと等しくなります。

コマンドラインから上記のコマンドを入力すると、 lpc(8) はこれを受け付けます。コマンドが入力されなかった場合は、 lpc(8) は対話モードに入り、 exitquit、 または、 ファイル終端文字が入力されるまでコマンドの入力ができます。

9.6. 標準スプーラの代替品

このマニュアルを最初から通読されている方ならば、ここまでで、 FreeBSD 付属の LPD スプーリングシステムに関して知っておくべきことすべてを学ばれたことと思います。 多分、このシステムにあるたくさんの欠点について認識できたことでしょう。 そこから (FreeBSD 上で動作する) スプーリングシステムには他にどのようなものがあるのか という疑問が自然と湧いてきます。

LPRng

次世代 LPR を称するLPRng は、 PLP を完全に書き換えたものです。 Patrick Powell と Justin Mason (PLP の主要な管理者) が共同で LPRng を作成しました。 LPRng の本サイトは http://www.lprng.org/ です。

CUPS

CUPS (the Common UNIX Printing System) は、UNIX® ベースのオペレーティングシステムに対して、 移植性の高い印刷レイヤを提供します。 CUPS は Easy Software Products によって、すべての UNIX® ベンダとユーザに、 標準的な印刷ソリューションを普及するために開発されています。

CUPS は、プリントジョブとキューを管理する基盤として Internet Printing Protocol (IPP) を使っています。機能は限定されますが、 ラインプリンタデーモン (LPD)、 サーバーメッセージブロック (SMB) や AppSocket (JetDirect とも呼ばれています) プロトコルにも対応しています。 CUPS は、UNIX® に現実的なプリント機能を備えるため、 ネットワークプリンタの検索、 PostScript プリンタ記述言語 (PPD) に基づいた印刷オプションを追加します。

CUPS のメインサイトは http://www.cups.org/ です

HPLIP

HPLIP (the HP Linux® Imaging and Printing system) は、 HP アプライアンス用に HP が開発した、 プリンタ、スキャナ、ファックスへの対応のためのプログラム群です。 このプログラムでは、印刷機能において CUPS 印刷システムをバックエンドとして利用しています。

HPLIP のメインサイトは、 http://hplipopensource.com/hplip-web/index.html です。

9.7. トラブルシューティング

lptest(1) を使った簡単なテストをおこなった結果、 正しい出 力を得られずに、以下に示すような出力が得られるかもしれません。

しばらくしたら出力される、または、 紙の全体が出てこない

プリンタは上で示されたような印字を おこなったのですが、しばらくして止まってしまい、 動かなくなってしまいました。 印字された結果をプリンタから取り出すためには、 プリンタにある PRINT REMAINING ボタン、または、FORM FEED ボタンを押す必要があるようです。

この場合は、 おそらくジョブはプリントをする前に 更にデータが送られてこないか待ち続けているのでしょう。 この問題を解決するためには、プリンタに FORM FEED 文字 (あるいは特定の必要な文字コード) を 送るテキストフィルタを使ってください。 プリンタ内部に残ったデータをプリンタにすぐに印字させるには、 普通はこれで十分です。 次のジョブが前のジョブの最終ページの中央の どこかから印字を開始させないためにも、 紙の途中で印字のジョブが終了したかどうかを確認するのは有益です。

シェルスクリプト /usr/local/libexec/if-simple を次のように変更して、プリンタへジョブを送信した後に FORM FEED 文字を印字させるようにします。

#!/bin/sh
#
# if-simple - Simple text input filter for lpd
# Installed in /usr/local/libexec/if-simple
#
# Simply copies stdin to stdout.  Ignores all filter arguments.
# Writes a form feed character (\f) after printing job.

/bin/cat && printf "\f" && exit 0
exit 2
階段効果 が現れた

出力された紙には次のように印字されていました。

!"#$%&'()*+,-./01234
                 "#$%&'()*+,-./012345
                                 #$%&'()*+,-./0123456

あなたは「階段効果」 の新たなる犠牲者になってしまいました。この原因は、 改行を表わすべき文字がなんであるか の解釈が混乱していることにあります。UNIX® スタイルのオペレーティングシステムでは、改行文字は ASCII コード 10 の line feed (LF) の 1 文字が使われています。MS-DOS®OS/2® などは ASCII コード 10の LF 、ASCII コード 13 の文字 (carriage return または CR) をペアで使います (訳注: Macintosh では CR のみで表現されています)。大抵のプリンタでは、 改行を表わすために MS-DOS® の慣習にしたがいます。

FreeBSD で印字する場合、印字したテキストは LF 文字だけ が使われていました。プリンタでは LF 文字を見つけると、紙を 1 行分送り出しました。しかし、 次の文字を印字するた めの紙の水平方向の位置は維持されました。すなわち、CR 文字が意味することは、 次の文字を印字する位置を紙の左端に動かすことです。

FreeBSD がプリンタに動作をして欲しいと思っている動作を以下に示します。

プリンタが CR を受け取ったときCR 動作 (復帰) をおこなう
プリンタが LF を受け取ったときCR + LF 動作 (復帰、改行) をおこなう

このように動作させるための方法がいくつかあります。

  • これらの文字の解釈を変えるために、 プリンタの設定スイッチかコントロールパネルを操作する方法。 どのようにして設定をするかはプリンタのマニュアルを参照してください。

    注記:

    FreeBSD 以外のオペレーティングシステムを切り替えて使う場合、 CR と LF 文字の解釈をそのオペレーティングシステムで使われているようにプリンタを 再設定する必要があるかもしれません。 以下に示す解決方法のいずれかを 選ぶのがよいかもしれませんね。

  • 自動的に LF を CR+LF に変換してくれる FreeBSD 用のシリアルドライバを入手する方法。 もちろん、このドライバはプリンタ専用に接続される シリアルポート のみで動作します。 この機能を許可するためには、 ms# 項目を使い、 対象プリンタの /etc/printcap ファイルでonlcr モードを設定します。

  • LF 文字の扱いを一時的に変更するための エスケープコード をプリンタに送る方法。 プリンタがサポートしているかもしれないエスケープコード については、 プリンタのマニュアルを参照してください。 適切なエスケープコードが見つかったら、 最初にそのコードを送り、次にプリントジョブを送信 するようにテキストフィルタを変更してください。

    次に、Hewlett Packard 社の PCL エスケープコードに対応しているプリンタのための テキストフィルタの例を示します。 このフィルタでは、プリンタ に LF 文字を LF と CR の2文字として扱わせます。 その後に、プリンタにジョブを送ります。最後に、 ジョブの最終ページの紙を排出するため、FROM FEED 文字を送ります。このフィルタは Hewlett Packard 社のほとんどすべてのプリンタで機能するはずです。

    #!/bin/sh
    #
    # hpif - Simple text input filter for lpd for HP-PCL based printers
    # Installed in /usr/local/libexec/hpif
    #
    # Simply copies stdin to stdout.  Ignores all filter arguments.
    # Tells printer to treat LF as CR+LF.  Ejects the page when done.
    
    printf "\033&k2G" && cat && printf "\f" && exit 0
    exit 2

    ホスト orchid/etc/printcap の例を以下に示します。ここには、 一番目のパラレルポートにプリンタ (Hewlett Packard LaserJet 3Si) が一台接続されており、そのプリンタ名は teak です。

    #
    #  /etc/printcap for host orchid
    #
    teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\
            :lp=/dev/lpt0:sh:sd=/var/spool/lpd/teak:mx#0:\
            :if=/usr/local/libexec/hpif:
  • 訳注:

    LF を CR+LF に置き換える cat コマンドを作る方法も当然考えられます。 そして、このコマンドと、if-simple の cat の部分を置き換えればよいわけです。 具体的にどのようにするかは、 読者への練習問題としましょう。

各行が重ね書きされてしまった

プリンタは紙送りをまったくしませんでした。 テキストすべての行がある行の上で重ねて印字されてしまいました。

この問題は、 階段現象とは 正反対 な問題で、 ほとんどまれにしか起こりません。FreeBSD では行末として扱われる LF 文字が、紙の左端に印字位置を復帰しますが、 紙送りはしない CR 文字として扱われています。

プリンタの設定スイッチかコントロールパネルを使って、 LF と CR の文字を次のような解釈をするようにしてください。

プリンタが受け取ったときプリンタがおこなう
CRCR 動作 (復帰)
LFCR + LF (復帰、改行)

訳注:

LF を CR+LF に置き換える cat コマンドを作る方法も当然考えられます。 そして、このコマンドと、 if-simple の cat の部分を置き換えればよいわけです。 具体的にどのようにするかは、 読者への練習問題としましょう。

プリンタが文字を紛失してしまう

印字しているのですが、 各行の 2 〜 3 文字が印字されません。 プリンタを動かせば動かすほど、 もっとたくさんの文字が紛失されていき、 この問題は更に悪くなっていくかもしれませんでした。

この問題は、 シリアルポートを通してコンピュータから送られてくるデータの速度に、 プリンタがついていけないことに起因します (この問題は、パラレルポートに接続された プリンタでは発生することはありません)。 この問題を克服する方法が2つあります。

  • プリンタが XON/XOFF のフロー制御をサポート している場合は、項目 ms#ixon モードをセットして、FreeBSD にこの機能を使用させてください。

  • プリンタが Request to Send / Clear to Send ハードウェアハンドシェイク (通称 RTS/CTS) をサポートして いる場合は、項目 ms#crtscts モードをセットして下さい。それから、 プリンタとコンピュータを接続しているシリアルケーブルが ハードウェアフロー制御用に正しく配線されたものかどうかを確認してください。

プリンタは意味不明な文字列を印字した

プリンタはランダムなゴミのように 見えるものを印字しましたが、 意図したテキストは印字してくれませんでした。

この問題は、通常、 シリアルポートに接続したプリンタでの 通信パラメータの誤りからくる前項とは別の症状です。 br 項目の通信速度と ms# 項目を再確認してください。 また、プリンタでの設定が /etc/printcap ファイルで設定した 内容と一致しているかどうかも確認してください。

訳注:

simple-if のような単純なフィルタだけの状態で、 日本語を含むテキストを印字しようとした場合にも、 シリアルポート、パラレルポートの使用に関係なく、 このような症状は見られます。日本語プリンタの場合、 漢字コードそのもの を送信しただけでその漢字を印字してくれるものは、 少なくとも訳者は見たことがありません。 漢字を印字するための制御 コードを別途送信するフィルタが必要となります。 また、そのようなフィルタを使用していても、 そのフィルタが想定してる漢字コードと異なった文書を プリントしようとしたときもこのような症状は出ます。 もちろん、これはプリンタ用の 言語を持たないプリンタの話で、PostScript® プリンタ などにプレインテキストを送信しても、日本語対応、 非対応に関らず、意味不明な文字列が印字される (もしくは、何も印字されない) ことでしょう。

何も起きない

もしプリンタが何の動作もしないのであれば、 ハード的な問題ではなく、多分 FreeBSD の中に問題があります。 /etc/printcap ファイルで、 デバッグしているプリンタのエントリに (lf 項目で) ログファイルを取るように 設定を追加してください。たとえば、プリンタ rattan 用のエントリの項目 lf は次のようになります。

rattan|line|diablo|lp|Diablo 630 Line Printer:\
        :sh:sd=/var/spool/lpd/rattan:\
        :lp=/dev/lpt0:\
        :if=/usr/local/libexec/if-simple:\
        :lf=/var/log/rattan.log

次に、もう一度印字をおこなってみます。そして、 発生したと思われるエラーメッセージを見るためにログファイル (上記の例では、 /var/log/rattan.log) を調べます。そこで見られたメッセージを元に、 問題を解決してみてください。

項目 lf が指定されていない場合、LPD はデフォルトのログファイルとして /dev/console を使います。

第10章 Linux バイナリ互換機能

再構成と一部の更新: Mock Jim [FAMILY Given].
オリジナルの文書を執筆: Handy Brian N. [FAMILY Given]Murphey Rich [FAMILY Given].

訳: はらだ きろう 、1996 年 9 月 24 日

10.1. この章では

FreeBSD は、Linux を含む Unix-like なオペレーティングシステムとのバイナリ互換機能を提供しています。 現時点では、一体なぜ FreeBSD が Linux バイナリを実行できるようにならなければならないのか自問しているのではないでしょうか? 答えはきわめて簡単です。 Linux は現在コンピュータの世界では最もホットなモノなのでたくさんの会社や開発者たちが Linux のためだけに開発を行なっています。そのため、残された私たち FreeBSD ユーザは彼らに対して FreeBSD ネイティブなアプリケーションも出すように言うしかないのです。 問題は、FreeBSD バージョンも出した場合にどれくらいの数のユーザーが使うのかわからない、 ということであり、そのため Linux 版のみを開発しているということなのです。 そこで FreeBSD では Linux バイナリ互換機能が役に立つのです。

簡単に言ってしまえば、この機能により全ての Linux アプリケーションの 90% が修正なしに FreeBSD 上で起動できます。 この中には Star Office や Linux 版の NetscapeAdobe AcrobatRealPlayer 5 と 7、 VMWareOracleWordPerfectDoomQuake などがあります。 また、ある状況においては Linux バイナリを Linux で動かすよりも FreeBSD で動かすほうが良いパフォーマンスが出るという報告もあります。

しかしながら、いくつかの Linux に特有な OS の機能は FreeBSD ではサポートされていません。 例えば、Linux の /proc ファイルシステムを過度に使うような Linux バイナリは FreeBSD では動きません (FreeBSD の /proc ファイルシステムとは異なるのです) し、 仮想 8086 モードを有効にするような i386 特有の呼び出しも動きません。

この章を読むと、以下のことがわかります。

  • Linux バイナリ互換機能を有効にする方法。

  • Linux 共有ライブラリを追加する方法。

  • Linux アプリケーションを FreeBSD システムにインストールする方法

  • FreeBSD における Linux 互換機能の実装の詳細。

この章を読む前に、以下のことを理解しておく必要があります。

10.2. インストール

Linux バイナリ互換機能は、デフォルトでは有効ではありません。 この機能を有効にする最も簡単な方法は、 linux KLD オブジェクト (Kernel LoaDable object) を読み込むことです。 コマンドプロンプトで linux と打つだけでモジュールを読み込むことができます。

Linux 互換機能を常に有効にする場合には、 /etc/rc.conf に以下の行を追加してください。

linux_enable="YES"

この設定により、/etc/rc.i386 では次のような操作が行なわれます。

# Start the Linux binary compatibility if requested.
#
case ${linux_enable} in
[Yy][Ee][Ss])
	echo -n ' linux';	linux > /dev/null 2>&1
	;;
esac
    

望みの KLD モジュールがロードされているか確認したい時には kldstat(8) コマンドを利用します。

% kldstat
Id Refs Address    Size     Name
 1    2 0xc0100000 16bdb8   kernel
 7    1 0xc24db000 d000     linux.ko

何らかの理由で Linux KLD をロードしたくない、 あるいはロードできないような場合には、 options LINUX をカーネルの設定ファイルに指定して、 Linux バイナリ互換機能をカーネルにスタティックリンクしてください。 そして、8章FreeBSD カーネルのコンフィグレーション の記述にしたがって新しいカーネルをインストールしてください。

10.2.1. Linux ランタイムライブラリのインストール

これは、linux_base port を用いるか、もしくは 手動で インストールします。

10.2.1.1. linux_base の port を用いたインストール

ランタイムライブラリをインストールするには最も簡単な方法です。 Ports Collection から他の port をインストールするのと全く同じようにできます。

# cd /usr/ports/emulators/linux_base
# make install distclean

これで Linux バイナリ互換機能が使えるはずです。 いくつかのプログラムはシステムライブラリのマイナーバージョンが違うと文句を言うかもしれませんが一般的には大した問題ではありません。

10.2.1.2. 手動でのライブラリのインストール

ports コレクションをインストールしていない場合、 代わりに手動でライブラリをインストールすることができます。 プログラムが必要とする Linux のシェアードライブラリとランタイムリンカが必要です。 また Linux ライブラリ用の shadow root ディレクトリ、 /compat/linux を作成する必要があります。 FreeBSD で動作する Linux プログラムが使用するシェアードライブラリは、 まずこのファイルツリーから検索されます。例えば、 Linux のプログラムが /lib/libc.so をロードしようとした場合には、FreeBSD はまず /compat/linux/lib/libc.so を開こうとします。これが存在しなかった場合には、次に /lib/libc.so を試します。 シェアードライブラリは、Linux の ld.so が報告するパスではなく、 /compat/linux/lib 以下にインストールする必要があります。

Linux のプログラムが必要とする シェアードライブラリを探す必要があるのは、FreeBSD のシステムに Linux のプログラムをインストールする最初の数回だけでしょう。 それが過ぎれば、十分な Linux のシェアードライブラリがシステムにインストールされ、 新しくインストールした Linux のバイナリも余計な作業をせずに動作させることができるようになります。

10.2.1.3. シェアードライブラリの追加

linux_base port をインストールした後に、 アプリケーションが必要なライブラリが存在しないというエラーを出したらどうしたらよいでしょうか? Linux のバイナリがどのシェアードライブラリを必要とし、 そしてどこで入手できるか、どのように探したらよいでしょうか? 基本的には、以下の 2 種類の方法があります (以下の手順に従う場合には、 必要なインストール作業をおこなう FreeBSD システム上で root として作業をおこなう必要があります)。

Linux システムにアクセス可能ならば、 そのアプリケーションがどういうシェアードライブラリを必要としているのか調べ、 単に FreeBSD にそのライブラリをコピーするだけです。 次の例を見てみましょう。

FTP を使って Doom の Linux バイナリを取ってきて、 アクセスできる Linux システムに置いたとしましょう。 次のように ldd linuxdoom とするだけでどのシェアードライブラリが必要かチェックできます。

% ldd linuxxdoom
libXt.so.3 (DLL Jump 3.1) => /usr/X11/lib/libXt.so.3.1.0
libX11.so.3 (DLL Jump 3.1) => /usr/X11/lib/libX11.so.3.1.0
libc.so.4 (DLL Jump 4.5pl26) => /lib/libc.so.4.6.29

最後のカラムに表示されているすべてのファイルを持って来て、 /compat/linux の下に置き、 最初のカラムに示されるファイル名にシンボリックリンクを張ります。 すなわち、FreeBSD システムでは以下のようなファイルが必要となります。

/compat/linux/usr/X11/lib/libXt.so.3.1.0
/compat/linux/usr/X11/lib/libXt.so.3 -> libXt.so.3.1.0
/compat/linux/usr/X11/lib/libX11.so.3.1.0
/compat/linux/usr/X11/lib/libX11.so.3 -> libX11.so.3.1.0
/compat/linux/lib/libc.so.4.6.29 /compat/linux/lib/libc.so.4 -> libc.so.4.6.29

注記:

最初のカラムに表示されているファイルとメジャーバージョンが同じ Linux シェアードライブラリを既にインストールしている場合は、 新たにコピーする 必要はありません。 既にあるライブラリで動作するはずです。 ただ、新しいバージョンのものをコピーすることをお奨めします。 新しいライブラリにシンボリックリンクを変更したら、 古いライブラリは削除してかまいません。

/compat/linux/lib/libc.so.4.6.27
/compat/linux/lib/libc.so.4 -> libc.so.4.6.27

従って、以上のようなライブラリがインストールされており、 新しいバイナリに対する ldd の出力が以下のようになる場合を考えます。

libc.so.4 (DLL Jump 4.5pl26) -> libc.so.4.6.29

このように最後の番号が 1 つか 2 つ古いだけならば、普通は /lib/libc.so.4.6.29 をコピーする必要はありません。わずかに古いライブラリでもプログラムは動作するはずだからです。 もちろん、以下のように新しいライブラリと置き換えても構いません。

/compat/linux/lib/libc.so.4.6.29
/compat/linux/lib/libc.so.4 -> libc.so.4.6.29

注記:

シンボリックリンクのメカニズムは Linux バイナリにのみ必要なことに注意してください。 FreeBSD のランタイムリンカはメジャーリビジョン番号の一致したライブラリを検索するので、 ユーザが気にする必要はありません。

10.2.2. Linux の ELF バイナリのインストール

ELF のバイナリを使うためには、 マークをつける (branding) 作業が必要になります。 マークのない ELF バイナリを実行しようとすると以下のようなエラーメッセージを受けとってしまうことでしょう。

% ./my-linux-elf-binary
ELF binary type not known
Abort

カーネルが FreeBSD の ELF バイナリと Linux のバイナリとを 見分けられるようにするためには、brandelf(1) ユーティリティを以下のようにして使ってください。

% brandelf -t Linux my-linux-elf-binary

今では GNU のツールたちが ELF バイナリに自動的に適切なマークを付加するようになったので、 今後はこの作業もだんだんと必要なくなってゆくでしょう。

10.2.3. ホストネームリゾルバの設定

DNS がうまく動作しなかったり、 以下のようなエラーメッセージが表示され る場合は、/compat/linux/etc/host.conf ファイルを設定する必要があります。

resolv+: "bind" is an invalid keyword resolv+:
"hosts" is an invalid keyword

ファイルの内容を以下のように設定してください。

order hosts, bind
multi on

ここで、order は /etc/hosts を最初に検索し、 次に DNS を検索するように指定します。 /compat/linux/etc/host.conf がインストールされていない場合、 Linux アプリケーションは FreeBSD の /etc/host.conf を使用しようとして、 文法の違いによる警告を出力します。 /etc/resolv.conf を利用してネームサーバの設定をしていない場合には、 bind を削除してください。

10.3. Mathematica のインストール

Mathematica 4.X 用に Murray Stokely がアップデートし、Bojan Bistrovic がマージしました。

この章では、Mathematica 4.X Linux 版の FreeBSD へのインストールについて説明します。

Linux 版の Mathematica は FreeBSD においても完璧に動きます。 ただ、実行する際に Linux ABI を用いる必要があることを FreeBSD に教えるために、Wolfram によって出荷されているバイナリにマーク付け (branded) をする必要があります。

MathematicaMathematica for Students の Linux 版は Wolfram (http://www.wolfram.com/) から直接注文することができます。

10.3.1. Linux バイナリへのマーク付け (branding)

Linux 用バイナリは Wolfram の Mathematica CD-ROM の Unix ディレクトリにあります。 インストーラーを起動する前にこのディレクトリをローカルディスクにコピーし、 brandelf(1) により Linux バイナリにマークを付けます。

# mount /cdrom
# cp -rp /cdrom/Unix/ /localdir/
# brandelf -t Linux /localdir/Files/SystemFiles/Kernel/Binaries/Linux/*
# brandelf -t Linux /localdir/Files/SystemFiles/FrontEnd/Binaries/Linux/*
# brandelf -t Linux /localdir/Files/SystemFiles/Installation/Binaries/Linux/*
# brandelf -t Linux /localdir/Files/SystemFiles/Graphics/Binaries/Linux/*
# brandelf -t Linux /localdir/Files/SystemFiles/Converters/Binaries/Linux/*
# brandelf -t Linux /localdir/Files/SystemFiles/LicenseManager/Binaries/Linux/mathlm
# cd /localdir/Installers/Linux/
# ./MathInstaller

また以下のようにすると、マーク付けされていない ELF バイナリすべての扱いを、デフォルトで Linux バイナリとすることが可能です。

# sysctl -w kern.fallback_elf_brand=3

これは FreeBSD システムに対して、 マーク付けされていない ELF バイナリが Linux ABI を利用するように設定します。こうすることで、 CDROM から直接インストーラを実行することが可能になります。

10.3.2. Mathematica パスワードの取得

Mathematica を起動する前に Wolfram から自分の マシン ID に対応したパスワードを取得しなければいけません。

一旦 Linux 互換ランタイムライブラリをインストールし、 Mathematica を展開すれば Install ディレクトリにある mathinfo プログラムを起動して マシン ID を得ることができます。 このマシン ID は、最初に見つかったイーサネットカードの MAC アドレスをベースに生成されます。

# cd /localdir/Files/SystemFiles/Installation/Binaries/Linux
# mathinfo
disco.example.com 7115-70839-20412

電子メールや電話、FAX などで Wolfram に登録する時にはこの マシン ID を渡します。 するといくつかの数字から構成されるパスワードが返されるので、 他の Mathematica プラットホームでするのと全く同じように最初に Mathematica を立ち上げる時にその情報を入力します。

10.3.3. ネットワーク経由での Mathematica フロントエンドの起動

Mathematica は標準フォントセットにない特別な記号 (積分記号、総和記号、ギリシャ文字など) を表示するために特殊なフォントを使用します。 X プロトコルは、これらのフォントが ローカルマシンに インストールされていることを要求します。 これはつまり、ローカルマシンに (CD-ROM や Mathematica がインストールされているホストマシンから) そのフォントをコピーしなければならないということです。 これらのフォントは通常、CD-ROM の /cdrom/Unix/Files/SystemFiles/Fonts か、もしくはハードディスクの /usr/local/mathematica/SystemFiles/Fonts に置かれており、実際に使用されるフォントは Type1X のサブディレクトリに格納されています。 これらを利用するには次のような二つ方法があります。

一つは、フォントファイルをすべて /usr/X11R6/lib/X11/fonts/ 以下にある既存のフォントディレクトリにコピーする方法です。 この場合、fonts.dir にフォント名を追加し、 先頭行のフォント総数を変更することも必要になります。 あるいは、フォントをコピーしたディレクトリで mkfontdir を実行するだけでもかまいません。

もう一つの方法は、 /usr/X11R6/lib/X11/fonts/ にフォントディレクトリごとコピーする方法です。

# cd /usr/X11R6/lib/X11/fonts
# mkdir X
# mkdir MathType1
# cd /cdrom/Unix/Files/SystemFiles/Fonts
# cp X/* /usr/X11R6/lib/X11/fonts/X
# cp Type1/* /usr/X11R6/lib/X11/fonts/MathType1
# cd /usr/X11R6/lib/X11/fonts/X
# mkfontdir
# cd ../MathType1
# mkfontdir

そして、フォントパスに新しいフォントディレクトリを追加します。

# xset fp+ /usr/X11R6/lib/X11/fonts/X
# xset fp+ /usr/X11R6/lib/X11/fonts/MathType1
# xset fp rehash

XFree86 サーバを使用しているなら、 /etc/XF86Config に加えることでこれらのフォントを自動的に読み込むことができます。

/usr/X11R6/lib/X11/fonts/Type1 という ディレクトリが存在していない場合には、 上記例の MathType1Type1 とすることができます。

10.4. Oracle のインストール

寄贈: Moolenaar Marcel [FAMILY Given].

10.4.1. はじめに

このドキュメントでは Oracle 8.0.5 と Oracle 8.0.5.1 Enterprise Edition の Linux 版を FreeBSD にインストールするための手順を解説します。

10.4.2. Linux 環境のインストール

まずは Ports Collection から linux_baselinux_devtools をインストールしてください。 これらの ports は FreeBSD 3.2 のリリース後にコレクションに加えられました。 もし FreeBSD 3.2 もしくはそれよりも古いものを使っている場合は ports コレクションをアップデートしましょう。ついでに FreeBSD をアップデートするのもいいでしょう。もし linux_base-6.1linux_devtools-6.1 でうまくいかなければ 5.2 を試してみてください。

もし賢いエージェント (intelligent agent) を起動したいなら Red Hat Tcl パッケージ tcl-8.0.3-20.i386.rpm もインストールする必要があるでしょう。 公式の RPM パッケージをインストールするには一般的に次のようにします。

# rpm -i --ignoreos --root /compat/linux --dbpath /var/lib/rpm package

パッケージのインストール時にエラーが出てはいけません。

10.4.3. Oracle 環境の構築

Oracleをインストールする前に、適切な環境を設定する必要があります。 このドキュメントでは、 Oracle のインストールガイドに書いてあるようなことではなく FreeBSD で Linux 用 Oracle を動かすために特別に必要なことのみを解説します。

10.4.3.1. カーネルのチューニング

Oracle インストールガイドにあるように、 シェアードメモリーの最大サイズを設定しなければいけません。 FreeBSD では SHMMAX を使わないようにしてください。 SHMMAX は単に SHMMAXPGSPGSIZE から計算されるだけなのです。 従って、SHMMAXPGS を使うようにしましょう。 インストールガイドに記述されている他のオプションは使えます。 例えば以下のようにします。

options SHMMAXPGS=10000
options SHMMNI=100
options SHMSEG=10
options SEMMNS=200
options SEMMNI=70
options SEMMSL=61

これらのオプションを意図した Oracle の使い方に合わせて設定してください。

また、 次のオプションがカーネルのコンフィギュレーションファイルにあることも確認します。

options SYSVSHM #SysV shared memory
options SYSVSEM #SysV semaphores
options SYSVMSG #SysV interprocess communication

10.4.3.2. Oracle 用アカウント

他のアカウントを作るのと同じように Oracle 用のアカウントを作ります。 Oracle 用のアカウントに特別なのは Linux のシェルを割り当てるところだけです。 /etc/shells/compat/linux/bin/bash を加え、Oracle 用のアカウントに設定します。

10.4.3.3. 環境設定

ORACLE_HOMEORACLE_SID といった通常の Oracle 用の変数の他に次の変数も設定しなければなりません。

変数
LD_LIBRARY_PATH$ORACLE_HOME/lib
CLASSPATH$ORACLE_HOME/jdbc/lib/classes111.zip
PATH/compat/linux/bin /compat/linux/sbin /compat/linux/usr/bin /compat/linux/usr/sbin /bin /sbin /usr/bin /usr/sbin /usr/local/bin $ORACLE_HOME/bin

全ての環境変数は .profile で設定することをお勧めします。 完璧なサンプルは以下の通りです。

ORACLE_BASE=/oracle; export ORACLE_BASE
ORACLE_HOME=/oracle; export ORACLE_HOME
LD_LIBRARY_PATH=$ORACLE_HOME/lib
export LD_LIBRARY_PATH
ORACLE_SID=ORCL; export ORACLE_SID
ORACLE_TERM=386x; export ORACLE_TERM
CLASSPATH=$ORACLE_HOME/jdbc/lib/classes111.zip
export CLASSPATH
PATH=/compat/linux/bin:/compat/linux/sbin:/compat/linux/usr/bin:/compat/linux/usr/sbin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:$ORACLE_HOME/bin
export PATH

10.4.4. Oracle のインストール

インストーラーを起動する前に、/var/tmp.oracle という名前のディレクトリを作る必要がありますが、 これは Linux エミュレーターにおけるちょっとした不整合のためです。 このディレクトリは誰でもが書けるか、もしくは oracle ユーザーのものにしておきます。 これで特に問題なく Oracle がインストールできるでしょう。 もし問題が起こったら、まずは Oracle の配布物や設定をチェックしてください。 Oracle のインストールが終わったら次の二つのサブセクションで解説するパッチを当てます。

よくあるトラブルは、TCP プロトコルアダプターが正しくインストールされていないことです。 そのため、一切 TCP リスナーを起動することができないのです。 次の操作はこの問題を解決するのに役立ちます。

# cd $ORACLE_HOME/network/lib
# make -f ins_network.mk ntcontab.o
# cd $ORACLE_HOME/lib
# ar r libnetwork.a ntcontab.o
# cd $ORACLE_HOME/network/lib
# make -f ins_network.mk install

もう一度 root.sh を起動するのを忘れないように!

10.4.4.1. root.sh へのパッチ

Oracle をインストールする時、root で行なう必要のあるいくつかの操作は root.sh と呼ばれるシェルスクリプトに記録されます。 root.shorainst ディレクトリにあります。次のパッチを root.sh に当てて 正しい場所にある chown コマンドを使うようにするか、 代わりに Linux ネイティブなシェルのもとでスクリプトを走らせましょう。

*** orainst/root.sh.orig Tue Oct 6 21:57:33 1998
--- orainst/root.sh Mon Dec 28 15:58:53 1998
***************
*** 31,37 ****
# This is the default value for CHOWN
# It will redefined later in this script for those ports
# which have it conditionally defined in ss_install.h
! CHOWN=/bin/chown
#
# Define variables to be used in this script
--- 31,37 ----
# This is the default value for CHOWN
# It will redefined later in this script for those ports
# which have it conditionally defined in ss_install.h
! CHOWN=/usr/sbin/chown
#
# Define variables to be used in this script

CD-ROM からのインストールでない場合は root.sh のソースにパッチを当ててもいいでしょう。 rthd.sh という名前でソースツリーの orainst というディレクトリにあります。

10.4.4.2. genclntsh へのパッチ

genclntsh スクリプトは一つの共有クライアントライブラリを生成するのに用いられます。 これはデモを作る時に使われます。 PATH の定義をコメントアウトするために次のパッチを当ててください。

*** bin/genclntsh.orig Wed Sep 30 07:37:19 1998
--- bin/genclntsh Tue Dec 22 15:36:49 1998
***************
*** 32,38 ****
#
# Explicit path to ensure that we're using the correct commands
#PATH=/usr/bin:/usr/ccs/bin export PATH
! PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin export PATH
#
# each product MUST provide a $PRODUCT/admin/shrept.lst
--- 32,38 ----
#
# Explicit path to ensure that we're using the correct commands
#PATH=/usr/bin:/usr/ccs/bin export PATH
! #PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin export PATH
#
# each product MUST provide a $PRODUCT/admin/shrept.lst

10.4.5. Oracle の起動

インストラクションに従えば、Linux でと同じように Oracle を起動できるでしょう。

10.5. SAP R/3 (4.6B - IDES) のインストール

寄稿: Kipp Holger [FAMILY Given].
SGML への変換: Vaschetto Valentino [FAMILY Given].

SAP サポートチームは、 認定されたプラットフォームのみをサポートしているので、 FreeBSD 上への SAP システムのインストールについてはサポートしていません。

10.5.1. まえがき

この文書は、SAP R/3 4.6B IDES-System with Oracle 8.0.5 for Linux を FreeBSD 4.3 上にインストールする方法を、FreeBSD 4.3-STABLE と Oracle 8.0.5 のインストール方法と一緒に説明しています。

この文書では、重要な手順をすべて詳しく説明しようとしていますが、 Oracle および SAP R/3 のインストールの手引きを置き換えるものではありません。

SAPOracle に特有の質問については、SAP R/3 の Linux 版についてくる文書や OracleSAP OSS が出している資料をご覧ください。

10.5.2. ソフトウェア

SAP のインストールには以下の CDROM を使いました。

名称番号説明
KERNEL51009113SAP Kernel Oracle / Installation / AIX, Linux, Solaris
RDBMS51007558Oracle / RDBMS 8.0.5.X / Linux
EXPORT151010208IDES / DB-Export / Disc 1 of 6
EXPORT251010209IDES / DB-Export / Disc 2 of 6
EXPORT351010210IDES / DB-Export / Disc3 of 6
EXPORT451010211IDES / DB-Export / Disc4 of 6
EXPORT551010212IDES / DB-Export / Disc5 of 6
EXPORT651010213IDES / DB-Export / Disc6 of 6

更に、Oracle 8 Server (Pre-production バージョン 8.0.5 for Linux, カーネルバージョン 2.0.33) の CD も使いましたが、これは必ずしも必要ではありません。 また、もちろん FreeBSD 4.3-STABLE (4.3-RELEASE から間もない時期のものです) も利用しました。

10.5.3. SAP ノート

以下のノートは、SAP R/3 をインストールする前に読んでおくべき、 もしくはインストールの際に役立つことが分かっているものです。

番号題名
0171356SAP Software auf Linux: grundlegenden Anmerkungen
0201147INST: 4.6C R/3 Inst. on UNIX - Oracle
0373203Update / Migration Oracle 8.0.5 --> 8.0.6/8.1.6 LINUX
0072984Release of Digital UNIX 4.0B for Oracle
0130581R3SETUP step DIPGNTAB terminates
0144978Your system has not been installed correctly
0162266Questions and tips for R3SETUP on Windows NT / W2K

10.5.4. ハードウェア要件

以下の機器であれば SAP R/3 System (4.6B) を動かすのに十分です。

構成部品4.6B4.6C
プロセッサ2 × 800MHz Pentium III2 × 800MHz Pentium III
メモリ1GB ECC2GB ECC
ハードディスク容量50-60GB (IDES)50-60GB (IDES)

業務で利用するなら、大容量キャッシュメモリを備えた Xeon プロセッサ、高速なディスク (SCSI, ハードウェア RAID コントローラ)、 USV および ECC-RAM を推奨します。 ハードディスク容量が大きいのは、設定済みの IDES システムが、 インストール時に 27 GB のデータベースファイルを作成するためです。 通常、インストール後には一部のテーブル領域を拡張する必要があります。

私は、800MHz の Pentium III を 2 個、Adaptec 29160 Ultra160 SCSI アダプタ (40/80 GB DLT テープドライブと CDROM にアクセスするため)、Mylex AcelleRAID (2 チャンネル、ファームウェアバージョン 6.00-1-00、32MB RAM) を積んだデュアルプロセッサボードを使いました。Mylex RAID コントローラには 17GB のハードディスク 2 台 (ミラー) と 36GB のハードディスク (RAID 5) 4 台が接続されています。

10.5.5. FreeBSD 4.3-STABLE のインストール

まず、FreeBSD 4.3-STABLE をインストールしました。FTP 経由のデフォルトインストールを行いました。

10.5.5.1. FTP 経由のインストール

ディスクイメージ kern.flp と mfsroot.flp を入手して、 フロッピーディスクに書き込んでください (私は ftp7.de.freebsd.org から入手しました。 適切なミラーサイトを選んでください)。

# dd if=kern.flp of=/dev/fd0
# dd if=mfsroot.flp of=/dev/fd0 

2 つのイメージファイルそれぞれについて、 別のディスクを使うようにしてください。それから kern.flp を書き込んだフロッピーディスクで起動して、指示に従ってください。 私は、次のようにディスクを分割しました。

ファイルシステム容量 (1kB ブロック)容量 (GB)マウントポイント
/dev/da0s1a1.016.3031/
/dev/da0s1b 6<swap>
/dev/da0s1e2.032.6232/var
/dev/da0s1f8.205.3398/usr
/dev/da1s1e45.734.36145/compat/linux/oracle
/dev/da1s1f2.032.6232/compat/linux/sapmnt
/dev/da1s1g2.032.6232/compat/linux/usr/sap

はじめに、Mylex のソフトウェアで論理ドライブ 2 台を設定して初期化しなければなりませんでした。 このソフトウェアはボードに組み込まれていて、 PC 起動時に動かせます。

このディスクの割り当て方は SAP の推奨と少し異なることに注意してください。SAP は oracle (その他) サブディレクトリを別途マウントするように提案していますが、 私は簡便であることを優先して、 実際にサブディレクトリとして作成するだけにしました。

10.5.5.2. 最新の STABLE のソースコードの入手

FreeBSD 4.3-STABLE 以降では、 最新のソースコードは楽に手に入ります。それより前のバージョンの FreeBSD では、/etc/cvsup に自分で書いたスクリプトを置いていました。FreeBSD 4.3 で CVSup を設定するのは簡単です。 root で以下を実行してください。

# cp /etc/defaults/make.conf /etc/make.conf
# vi /etc/make.conf 

/etc/make.conf ファイルで、 以下の項目を有効にしておかねばなりません。

SUP_UPDATE=    yes
SUP=           /usr/local/bin/cvsup
SUPFLAGS=      -g -L 2
SUPHOST=       cvsup8.FreeBSD.org
SUPFILE=       /usr/share/examples/cvsup/stable-supfile
PORTSSUPFILE=  /usr/share/examples/cvsup/ports-supfile
DOCSUPFILE=    /usr/share/examples/cvsup/doc-supfile

SUPHOST の値は適切なものに変更してください。 /usr/share/examples/cvsup にある supfile で十分でしょう。 もしもすべてのドキュメントを持ってくるのが嫌なら、 DOCSUPFILE の項は無効なままにしておいてください。 ここまでくれば、cvsup を起動して stable の最新のソースコードを入手するのはたやすいことです。

# cd /usr/src
# make update 

10.5.5.3. make world と新しいカーネル

最初にすべきことは、ソースコードのインストールです。root ユーザで次の作業を行ってください。

# cd /usr/src
# make world 

最後まで実行できたら、 新しいカーネルの作成と設定を行えます。 通常はここでカーネルコンフィグレーションファイルをカスタマイズします。 コンピュータに troubadix という名前をつけているので、 コンフィグレーションファイルを troubadix という名称にするのが自然です。

# cd /usr/src/sys/i386/conf
# cp GENERIC TROUBADIX
# vi TROUBADIX 

この段階で、どのドライバを使うか、 使わないかといったことを決定できます。詳しい説明は、適当な文書や LINT ファイルをご覧ください。

また、後述するパラメータをいれることもできます。 新しいカーネルを作成するには次のようにしてください。

# cd /usr/src/sys/i386/conf
# config TROUBADIX
# cd /usr/src/sys/compile/TROUBADIX
# make depend
# make
# make install 

make install が無事終わったら、 コンピュータを再起動して新しいカーネルを動かしてください。

10.5.6. Linux 環境のインストール

(2001 年 5 月 2 日時点の 4.3-STABLE 用に) 必要な RPM ファイルをダウンロードするのに多少問題があったので、 以下の場所も (他がすべてだめで、ここが古くなってしまっていなければ) 試してみるとよいかもしれません。

  • ftp7.de.freebsd.org/pub/FreeBSD/distfiles/rpm

  • ftp.redhat.com/pub/redhat/linux/6.1/en/os/i386/RedHat/RPMS

10.5.6.1. Linux ベースシステムのインストール

まず、Linux のベースシステムを (root で) インストールしなければなりません。

# cd /usr/ports/emulators/linux_base
# make package 

10.5.6.2. Linux 開発環境のインストール

次に、必要なら Linux 開発環境をインストールします。

# cd /usr/ports/devel/linux_devtools
# make package 

10.5.6.3. 必要な RPM のインストール

R3SETUP プログラムを動かすには、pam サポートが必要になります。 これが更に他の package を必要としているので、 私は結局いくつもの package をインストールすることになりました。 それでも、pam は足りない package があると文句をいうので、 強制的にインストールしたら動きました。 pam 以外にインストールした package が本当に必要なのか、pam package をインストールするのに十分だったのかよくわかっていません。

なんにせよ、これが私がインストールした package 一覧です。

  • cracklib-2.7-5.i386.rpm

  • cracklib-dicts-2.7-5.i386.rpm

  • pwdb-0.60-1.i386.rpm

  • pam-0.68-7.i386.rpm

これらの package は、 以下のコマンドでインストールしました。

# rpm -i --ignoreos --root /compat/linux --dbpath /var/lib/rpm <package_name> 

ただし、pam パッケージは次のようにして強制的にインストールしました。

# rpm -i --ignoreos --nodeps --root /compat/linux --dbpath /var/lib/rpm pam-0.68-7.i386.rpm 

Oracle が intelligent agent を動作させるには、次の RedHat Tcl package を (FreeBSD ハンドブックにあるように) インストールしなければなりませんでした。 tcl-8.0.5-30.i386.rpm (そうしないと、 Oracle インストール中の再リンクがうまくゆきません)。 Oracle の再リンクについては他にも問題がありますが、 私が理解している限りでは Oracle-Linux の問題で、FreeBSD に特有のものではありません。

10.5.7. SAP/R3 環境の構築

10.5.7.1. 必要となるファイルシステムとマウントポイントの作成

単純なインストールでは、 次のファイルシステムを作成すれば事足ります。

マウントポイントサイズ (GB)
/compat/linux/oracle45 GB
/compat/linux/sapmnt2 GB
/compat/linux/usr/sap2 GB

また、私は FreeBSD が正しいパスを見付けられるように、 いくつかリンクを作成しました。

# ln -s /compat/linux/oracle /oracle
# ln -s /compat/linux/sapmnt /sapmnt
# ln -s /compat/linux/usr/sap /usr/sap 

10.5.7.2. ユーザとディレクトリの作成

SAP R/3 には、 2 名のユーザと 3 つのグループが必要です。 ユーザ名は 3 文字からなる SAP システム ID (SID) に準じています。SID の中には SAP が予約しているものがあります (たとえば SAPNIX です。すべて網羅した一覧は SAP のドキュメントをご覧ください)。 IDES のインストールでは、IDS を使いました。 したがって、次のグループができます (グループ ID は異なっていてもかまいません。 これは単に私がインストールした時に使用した値です)。

グループ IDグループ名説明
100dbaデータベース管理者
101sapsysSAP システム
102operデータベースオペレータ

デフォルトの Oracle のインストールでは、 dba グループだけが使われます。 oper グループとして、 dba を使う人もいます。(詳しくは Oracle と SAP のドキュメントを参照してください)。

以下のユーザも必要になります。

ユーザ IDユーザ名一般名称グループ追加グループ説明
1000idsadm<sid>admsapsysoperSAP 管理者
1002oraidsora<sid>dbaoperDB 管理者

adduser でユーザを追加するには、 以下の項目が必要になります (シェルとホームディレクトリを控えてください)。 SAP 管理者については、

Name: idsadm            <sid>adm
Password: ******
Fullname: SAP IDES Administrator
Uid: 1000
Gid: 101 (sapsys)
Class:
Groups: sapsys dba
HOME: /home/idsadm      /home/<sid>adm
Shell: /bin/sh

そしてデータベース管理者については、

Name: oraids          ora<sid>
Password: ******
Fullname: Oracle IDES Administrator
Uid: 1002
Gid: 100 (dba)
Class:
Groups: dba
HOME: /oracle/IDS     /oracle/<sid>
Shell: /bin/sh

あなたが dbaoper の両方のグループを使っていたら、 ここには oper グループもいれるべきです。

10.5.7.3. ディレクトリ作成

以下のディレクトリは、 普通は別のファイルシステムとして作成します。 どうするかは、あなたの要件に応じて決めてください。 結局はすべてが同じ RAID 5 におかれるので、 私は単なるディレクトリにしました。

まず、一部のディレクトリに (root ユーザで) 所有者と権限を設定しましょう。

# chmod 775 /oracle
# chmod 777 /sapmnt
# chown root:dba /oracle
# chown idsadm:sapsys /compat/linux/usr/sap
# chmow 775 /compat/linux/usr/sap 

第二に、ユーザ ora<sid> 権限でディレクトリを作成します。 すべて /oracle/IDS のサブディレクトリになります。

# su - oraids
# mkdir mirrlogA mirrlogB origlogA origlogB
# mkdir sapdata1 sapdata2 sapdata3 sapdata4 sapdata5 sapdata6
# mkdir saparch sapreorg
# exit 

第三段階では、idsadm (<sid>adm) ユーザ権限でディレクトリを作成します。

# su - idsadm
# cd /usr/sap
# mkdir IDS
# mkdir trans
# exit 

10.5.7.4. /etc/services 内の項目

SAP R/3 は、/etc/services にいくつか項目を必要としますが、FreeBSD にインストールする場合は正しく設定されません。 次の項目を追加してください (少なくとも、インスタンス番号に対応する項目が必要で、 この場合は 00 です。 dp, gw, sp および ms について 00 から 99 まで項目を追加してもなんの問題もないでしょう)。

sapdp00  3200/tcp # SAP Dispatcher.      3200 + インスタンス番号
sapgw00  3300/tcp # SAP Gateway.         3300 + インスタンス番号
sapsp00  3400/tcp #                      3400 + インスタンス番号
sapms00  3500/tcp #                      3500 + インスタンス番号
sapmsIDS 3600/tcp # SAP Message Server.  3600 + インスタンス番号

10.5.7.5. 必要となるロケール

SAP は、デフォルトの RedHat のインストールでは入らないロケールを少なくとも 2 つ必要とします。 SAP は、必要な RPM を FTP サーバからダウンロードする形で提供しています (OSS アクセス契約している顧客でなければアクセスできません)。 必要な RPM の一覧は note 0171356 をご覧ください。

適切なリンクを (たとえば de_DEen_US から) 作成するという手もありますが、 業務用システムでそうすることはお勧めしません (いまのところ、IDES システムで問題なく動いてはいますが)。 必要なのは、次のロケールです。

de_DE.ISO-8859-1
en_US.ISO-8859-1

このロケールがないと、 インストール時になんらかの問題が起きるでしょう。 それを (たとえば CENTRDB.R3S ファイルで問題の段階を OK にして) 無視してしまうと、追加でなにかしないと SAP システムにログオンできないでしょう。

10.5.7.6. カーネルのチューニング

SAP R/3 システムには多くのリソースが必要です。 そのため、私はカーネルコンフィグレーションファイルに 以下のパラメータを追加しました。

# Set these for memory pigs (SAP and Oracle):
options MAXDSIZ="(1024*1024*1024)"
options DFLDSIZ="(1024*1024*1024)" # System V options needed.
options SYSVSHM #SYSV-style shared memory
options SHMMAXPGS=262144 #max amount of shared mem. pages
options SHMMNI=256 #max number of shared memory ident if.
options SHMSEG=100 #max shared mem.segs per process
options SYSVMSG #SYSV-style message queues
options MSGSEG=32767 #max num. of mes.segments in system
options MSGSSZ=32 #size of msg-seg. MUST be power of 2
options MSGMNB=65535 #max char. per message queue
options MSGTQL=2046 #max amount of msgs in system
options SYSVSEM #SYSV-style semaphores
options SEMMNU=256 #number of semaphore UNDO structures
options SEMMNS=1024 #number of semaphores in system
options SEMMNI=520 #number of semaphore indentifiers
options SEMUME=100 #number of UNDO keys

SAP についてくる文書に最小値が指定されています。Linux に関する記述はないので、詳しいことは HP-UX (32-bit) の節を参照してください。

10.5.8. SAP R/3 のインストール

10.5.8.1. SAP CDROM の準備

インストールの際にマウントしてアンマウントしなければならない CDROM が山ほどあります。十分な数の CDROM ドライブを持っていれば、 すべてマウントしてしまえばよいでしょう。私は、CDROM の中身をそれぞれに対応するディレクトリにコピーすることにしました。

/oracle/IDS/sapreorg/<cd-name>

ここで、<cd-name> は KERNEL, RDBMS, EXPORT1, EXPORT2, EXPORT3, EXPORT4, EXPORT5 および EXPORT6 のいずれかです。すべてのファイル名を大文字にするか、 さもなければ、マウントする際に -g オプションをつけるべきです。 次のコマンドを使ってください。

# mount_cd9660 -g /dev/cd0a /mnt
# cp -R /mnt/* /oracle/IDS/sapreorg/<cd-name>
# umount /mnt 

10.5.8.2. インストールスクリプトの実行

まず、インストールディレクトリを用意しなければなりません。

# cd /oracle/IDS/sapreorg
# mkdir install
# cd install 

その後、インストールスクリプトを起動すると、 関連するファイルがほぼすべてインストールディレクトリにコピーされます。

/oracle/IDS/sapreorg/KERNEL/UNIX/INSTTOOL.SH

これは、完全にカスタマイズされた SAP R/3 デモシステム付きの IDES のインストールなので、EXPORT CD は 3 枚ではなく 6 枚あります。この時点では、 インストールテンプレート CENTRDB.R3S は標準の中心インスタンス (R/3 とデータベース) をインストールするためのもので、 IDES 中心インスタンスをインストールするためのものではありません。 ですから、それに対応する CENTRDB.R3S ファイルを EXPORT1 ディレクトリからコピーしてください。さもないと、 R3SETUP は EXPORT CD を 3 枚しか要求しません。

10.5.8.3. R3SETUP の起動

LD_LIBRARY_PATH が正しく設定されていることを確認してください。

# export LD_LIBRARY_PATH=/oracle/IDS/lib:/sapmnt/IDS/exe:/oracle/805_32/lib 

インストールディレクトリから root ユーザで R3SETUP を起動してください。

# cd /oracle/IDS/sapreorg/install
# ./R3SETUP -f CENTRDB.R3S 

スクリプトがいくつか質問してきます (デフォルトが括弧に囲まれて表示され、 その後に実際に入力します)。

質問デフォルト入力
Enter SAP System ID (SAP システム ID を入力してください)[C11]IDS<ret>
Enter SAP Instance Number (SAP インスタンス番号を入力してください)[00]<ret>
Enter SAPMOUNT Directory (SAPMOUNT ディレクトリを入力してください)[/sapmnt]<ret>
Enter name of SAP central host (SAP 中心ホストの名称を入力してください)[troubadix.domain.de]<ret>
Enter name of SAP db host (SAP データベースホストの名称を入力してください)[troubadix]<ret>
Select character set (文字集合を選択してください)[1] (WE8DEC)<ret>
Enter Oracle server version (Oracle サーバのバージョンを入力してください) (1) Oracle 8.0.5, (2) Oracle 8.0.6, (3) Oracle 8.1.5, (4) Oracle 8.1.6 1<ret>
Extract Oracle Client archive (Oracle クライアントアーカイブを展開しますか)[1] (はい、展開します)<ret>
Enter path to KERNEL CD (KERNEL CD へのパスを入力してください)[/sapcd]/oracle/IDS/sapreorg/KERNEL
Enter path to RDBMS CD (RDBMS CD へのパスを入力してください)[/sapcd]/oracle/IDS/sapreorg/RDBMS
Enter path to EXPORT1 CD (EXPORT1 CD へのパスを入力してください)[/sapcd]/oracle/IDS/sapreorg/EXPORT1
Directory to copy EXPORT1 CD (EXPORT1 CD をコピーするディレクトリ)[/oracle/IDS/sapreorg/CD4_DIR]<ret>
Enter path to EXPORT2 CD (EXPORT2 CD へのパスを入力してください)[/sapcd]/oracle/IDS/sapreorg/EXPORT2
Directory to copy EXPORT2 CD (EXPORT2 CD をコピーするディレクトリ)[/oracle/IDS/sapreorg/CD5_DIR]<ret>
Enter path to EXPORT3 CD (EXPORT3 CD へのパスを入力してください)[/sapcd]/oracle/IDS/sapreorg/EXPORT3
Directory to copy EXPORT3 CD (EXPORT3 CD をコピーするディレクトリ)[/oracle/IDS/sapreorg/CD6_DIR]<ret>
Enter path to EXPORT4 CD (EXPORT4 CD へのパスを入力してください)[/sapcd]/oracle/IDS/sapreorg/EXPORT4
Directory to copy EXPORT4 CD (EXPORT4 CD をコピーするディレクトリ)[/oracle/IDS/sapreorg/CD7_DIR]<ret>
Enter path to EXPORT5 CD (EXPORT5 CD へのパスを入力してください)[/sapcd]/oracle/IDS/sapreorg/EXPORT5
Directory to copy EXPORT5 CD (EXPORT5 CD をコピーするディレクトリ)[/oracle/IDS/sapreorg/CD8_DIR]<ret>
Enter path to EXPORT6 CD (EXPORT6 CD へのパスを入力してください)[/sapcd]/oracle/IDS/sapreorg/EXPORT6
Directory to copy EXPORT6 CD (EXPORT6 CD をコピーするディレクトリ)[/oracle/IDS/sapreorg/CD9_DIR]<ret>
Enter amount of RAM for SAP + DB (SAP + DB に割り当てる RAM の合計を入力してください) 850<ret> (MB)
Service Entry Message Server[3600]<ret>
Enter Group-ID of sapsys (sapsys のグループ ID を入力してください)[101]<ret>
Enter Group-ID of oper (oper のグループ ID を入力してください)[102]<ret>
Enter Group-ID of dba (dba のグループ ID を入力してください)[100]<ret>
Enter User-ID of <sid>adm (<sid>adm のユーザ ID を入力してください)[1000]<ret>
Enter User-ID of ora<sid> (ora<sid> のユーザ ID を入力してください)[1002]<ret>
Number of parallel procs (並列プロセスの数)[2]<ret>

CD をそれぞれ別の場所にコピーしないと、SAP インストーラは (CD 内の LABEL.ASC ファイルで識別される) 必要な CD を見つけられず、CD を挿入 / マウントして承認するかマウントパスを入力するよう求めてくるでしょう。

CENTRDB.R3S ファイルには、間違いがないわけではありません。 私の場合は、EXPORT4 を再度要求されました (が、正しいキーを表示していたので (6_LOCATION、それから 7_LOCATION など))、 正しい値を入力して進めて問題ありませんでした。 いらいらしないようにしてください。

後で触れるいくつかの問題を除けば、Oracle データベースソフトウェアをインストールするところまでは 素直に進むはずです。

10.5.9. Oracle 8.0.5 のインストール

Linux と Oracle DB で起こりうる問題についての SAP-Notes と Oracle の Readme を読むようにしてください。 すべてではないにしても、 ほとんどは互換性のないライブラリに起因しています。

Oracle のインストールについて詳しいことは、Oracle のインストール の章をご覧ください。

10.5.9.1. orainst による Oracle 8.0.5 のインストール

Oracle 8.0.5 を利用する予定なら、 無事に再リンクするのにライブラリがいくつか追加で必要です。 なぜなら、Oracle 8.0.5 は古い glibc (RedHat 6.0) とリンクされていますが、RedHat 6.1 は新しい glibc を利用しているからです。 ですから、リンクが行われることを保証するには、 次の追加パッケージをインストールしなければなりません。

compat-libs-5.2-2.i386.rpm

compat-glibc-5.2-2.0.7.2.i386.rpm

compat-egcs-5.2-1.0.3a.1.i386.rpm

compat-egcs-c++-5.2-1.0.3a.1.i386.rpm

compat-binutils-5.2-2.9.1.0.23.1.i386.rpm

詳しくは、対応する SAP-Note や Oracle Readme をご覧ください。他に選択肢がなければ (私がインストールした時は、確認している暇がありませんでした)、 元のバイナリまたは再リンクされたバイナリを、 元の RedHat システムから持ってきて使うこともできるでしょう。

インテリジェントエージェントをコンパイルするために、 RedHat Tcl パッケージがインストールされていなければなりません。 tcl-8.0.3-20.i386.rpm が入手できないなら、RedHat 6.1 用の tcl-8.0.5-30.i386.rpm など新しいものでも構いません。

再リンク以外は、インストールは簡単です。

# su - oraids
# export TERM=xterm
# export ORACLE_TERM=xterm
# export ORACLE_HOME=/oracle/IDS
# cd /ORACLE_HOME/orainst_sap
# ./orainst 

ソフトウェアのインストールが終わるまで、すべての画面で Enter を押して承認してください。ただし、 Oracle On-Line Text Viewer は現時点では Linux 版がないので選択を外してください。 その後、Oracle は利用可能な gcc, egcsi386-redhat-linux-gcc ではなく、 i386-glibc20-linux-gcc で再リンクしようとします。

時間が限られていたので、私は Oracle 8.0.5 PreProduction リリースのバイナリを利用することにしました。 最初 RDBMS-CD 収録のバージョンを動かそうとして失敗し、 その時点では正しい RPM を見つけて利用するのはまるで悪夢のようだったからです。

10.5.9.2. Linux (Kernel 2.0.33) 用の Oracle 8.0.5 Pre-Production リリースのインストール

これをインストールするのは簡単です。 CD をマウントして、インストーラを起動してください。 インストーラが Oracle ホームディレクトリの位置をたずねて、 そこにすべてのバイナリをコピーします。 もっとも、私はその前の RDBMS インストールを試した時の残りを削除していませんでした。

この後、Oracle データベースは問題なく起動できました。

10.5.10. SAP R/3 のインストールの続行

まず、idsamd (<sid>adm) ユーザと oraids (ora<sid>) ユーザの環境設定を確認してください。 両者とも、.profile, .login.cshrc をもっていて、いずれも hostname を使っているはずです。 そのシステムのホスト名が完全修飾名であれば、すべてのファイルで hostnamehostname -s に変更する必要があります。

10.5.10.1. データベースの読み込み

その後、(exit を選択したかどうかによって) R3SETUP を再起動または継続実行します。R3SETUP は、テーブル領域を作成し、EXPORT1 から EXPORT6 までデータを R3load でデータベースに読み込みます (これは IDES システムです。違う場合は、EXPORT1 から EXPORT3 だけになります)。

データベースの読み込みが完了したら (数時間に渡るかもしれません)、何かパスワードを要求されます。 テスト用にインストールしたのであれば、 周知のデフォルトパスワードを使ってもよいでしょう (セキュリティが問題になるなら、異なるものを使ってください!)。

質問入力
Enter Password for sapr3 (sapr3 のパスワードを入力してください)sap<ret>
Confirum Password for sapr3 (sapr3 のパスワードを再入力してください)sap<ret>
Enter Password for sys (sys のパスワードを入力してください)change_on_install<ret>
Confirm Password for sys (sys のパスワードを再入力してください)change_on_install<ret>
Enter Password for system (system のパスワードを入力してください)manager<ret>
Confirm Password for system (system のパスワードを再入力してください)manager<ret>

ここで、dipgntab で少し問題がありました。

10.5.10.2. Listener

次のように、Oracle-Listener を oraids (ora<sid>) ユーザで起動してください。

umask 0; lsnrctl start

そうしないと、ソケットが正しいパーミッションにならないので、 ORA-12546 が発生するかもしれません。SAP note 072984 をご覧ください。

10.5.11. インストール後の手順

10.5.11.1. SAP R/3 ライセンスキーの要求

一時ライセンスは 4 週間だけ有効なので、これが必要になります。 オペレーティングシステムを正しく入力するようにしてください: (X) Other (その他): FreeBSD 4.3 Stable。 まず、ハードウェアキーを入手してください。 idsadm ユーザでログオンし、 saplicense を呼び出してください。

# /sapmnt/IDS/exe/saplicense -get

saplicense をオプションなしで起動すると、オプション一覧を出力します。 ライセンスキーを受け取ったら、 次のようにしてインストールできます。

# /sapmnt/IDS/exe/saplicense -install

そうしたら、次の値を入力します。

SAP SYSTEM ID   = <SID, 3 chars>
CUSTOMER KEY    = <hardware key, 11 chars>
INSTALLATION NO = <installation, 10 digits>
EXPIRATION DATE = <yyyymmdd, usually "99991231">
LICENSE KEY     = <license key, 24 chars>

10.5.11.2. ユーザの作成

クライアント 000 内でユーザを作成します (クライアント 000 内で行わなければなりませんが、 ユーザ sap*ddic 以外のユーザでなければならないタスクのためです)。 ユーザ名として、私は通常 wartung (または 英語で service) を選択しています。必要となるプロファイルは sap_newsap_all です。セキュリティを高めるため、 すべてのクライアントのデフォルトユーザのパスワードを変更すべきです (ユーザ sap*ddic を含みます)。

10.5.11.3. トランスポートシステム、プロファイル、操作モードなどの設定

クライアント 000 内で、ddic と sap* 以外のユーザについて、少なくとも次のことを行ってください。

作業トランザクション
トランスポートシステムの設定。たとえば、 スタンドアロントランスポートエンティティSTMS
システム用のプロファイルの作成・編集RZ10
操作モードとインスタンスの維持管理RZ04

これらのインストール後の手順は、それ以外も含めて SAP インストールガイドにすべて書かれています。

10.5.11.4. Edit init<sid>.sap (initIDS.sap)

/oracle/IDS/dbs/initIDS.sap ファイルには SAP バックアッププロファイルが含まれます。ここで、 使用するテープの容量、 圧縮の種類などを定義しなければなりません。 sapdbabrbackup と共に動かすため、以下の値を変更しました。

compress = hardware
archive_function = copy_delete_save
cpio_flags = "-ov --format=newc --block-size=128 --quiet"
cpio_in_flags = "-iuv --block-size=128 --quiet"
tape_size = 38000M
tape_address = /dev/nsa0
tape_address_rew = /dev/sa0

説明:

compress 私が使っているテープは HP DLT1 で、ハードウェア圧縮を行います。

archive_function この変数は、Oracle のアーカイブログを保存する際のデフォルトの振る舞いを定義します。 新規のログファイルはテープに保存され、 保存済みのログファイルは再度保存された後、削除されます。 これは、もし、データベースを復旧しなければならなくなったのに、 アーカイブテープのどれかが駄目になっていたという場合にも問題を回避します。

cpio_flags デフォルトはブロックサイズを 5120 バイトに設定する -B が使われます。DLT テープについては、HP はブロックサイズに 32 キロバイト以上を推奨していますので、64 キロバイトに設定する --block-size=128 を用いました。65535 より多くの inode 番号があるので、--format=newc が必要になります。 最後のオプション --quiet は、cpio が保存したブロック数を出力すると brbackup が文句をいうので必要になります。

cpio_in_flags は、データをテープから読み込むのに必要となるフラグです。 データ形式は自動的に認識されます。

tape_size これは通常、テープの raw (生の) 容量を表します。 (ハードウェア圧縮を利用しているので) 安全のため、

value は実際の値よりもわずかに小さくしています。

tape_address cpio と組み合わせて用いる巻き戻し不可なデバイス。

tape_address_rew cpio と組み合わせて用いる巻き戻し可能なデバイス。

10.5.11.5. インストール後の設定

以下の SAP パラメータについてはインストール後に調整する必要があります。

名前
ztta/roll_extension250000000
abap/heap_area_dia300000000
abap/heap_area_nondia400000000
em/initial_size_MB256
em/blocksize_kB1024
ipc/shm_psize_4070000000

SAP-Note 0013026:

名前
ztta/dynpro_area2500000

SAP-Note 0157246:

名前
rdisp/ROLL_MAXFS16000
rdisp/PG_MAXFS30000

注記:

以上のパラメータと、1 ギガバイトのメモリを持つシステムでは、 以下のようなメモリ使用量となるでしょう。

Mem: 547M Active, 305M Inact, 109M Wired, 40M Cache, 112M Buf, 3492K Free

10.5.12. インストール中の問題

10.5.12.1. R3SETUP 中の OSUSERSIDADM_IND_ORA エラー

この段階で R3SETUP がエラーを報告したら、CENTRDB.R3S ファイルを編集します。[OSUSERSIDADM_IND_ORA] という項目を探して、以下の値を変更します。

HOME=/home/idsadm (was empty)
STATUS=OK (had status ERROR)

以下のように、R3SETUP を再起動します。

# ./R3SETUP -f CENTRDB.R3S

10.5.12.2. R3SETUP 中の OSUSERDBSID_IND_ORA

この段階で R3SETUP がエラーを報告する可能性もあります。 CENTRDB.R3S を編集して、[OSUSERDBSID_IND_ORA] という項目を探し、その項目内の次の値を変更してください。

STATUS=OK

その後、R3SETUP を再起動します。

# ./R3SETUP -f CENTRDB.R3S

10.5.12.3. Oracle のインストール中に oraview.vrf ファイルがみつからないという (FILE NOT FOUND) エラー

インストールを開始する前に Oracle On-Line Text Viewer の選択を外すのを忘れています。この選択肢は現在 Linux にはないにもかかわらず、インストール対象に選ばれています。 Oracle のインストールメニューでこの製品を選択しているのを外して、 インストールを再開してください。

10.5.12.4. R3SETUP, RFC または SAPGUI 起動時に TEXTENV_INVALID エラー

このエラーが起きた場合は、正しいロケールがありません。 SAP note 0171356 にインストールしておかなければならない RPM が挙げられています (たとえば、RedHat 6.1 なら saplocales-1.0-3, saposcheck-1.0-1)。R3SETUP がこれに関係するエラーを出してもすべて無視して、対応する状態を ERROR から OK に (CENTRDB.R3S で) 変更して R3SETUP を再起動していると、SAP システムは正しく設定されず、 システムを起動できたとしても、sapgui でシステムに接続することはできません。古い Linux 版 sapgui で接続しようとすると、次のメッセージがでます。

Sat May 5 14:23:14 2001
*** ERROR => no valid userarea given [trgmsgo. 0401]
Sat May 5 14:23:22 2001
*** ERROR => ERROR NR 24 occured [trgmsgi. 0410]
*** ERROR => Error when generating text environment. [trgmsgi. 0435]
*** ERROR => function failed [trgmsgi. 0447]
*** ERROR => no socket operation allowed [trxio.c 3363]
Speicherzugriffsfehler

これは、SAP R/3 がロケールを割り当てられないか、 正しく設定されていない (データベーステーブルの一部の項目が不足している) ためです。SAP に接続するためには、次の項目をファイル DEFAULT.PFL に追加してください (note 0043288 参照)。

abap/set_etct_env_at_new_mode =0
install/collate/active =0
rscp/TCP0B =TCP0B

SAP システムを再起動してください。 地域特有の言語設定が期待どおりに動かないかもしれませんが、 システムに接続できるはずです。 地域設定を修正 (して、適切なロケールを提供) したら、 これらの項目を DEFAULT.PFL から削除して SAP システムを再起動してかまいません。

10.5.12.5. ORA-12546 エラー。リスナーの適切なパーミッションによる操作

次のコマンドを実行して、Oracle リスナーをユーザ oraids で起動してください。

# umask 0; lsnrctl start

そうしないと、 ソケットが正しいパーミッションになっていないという ORA-12546 エラーを受け取るかもしれません。 SAP note 0072984 をご覧ください。

10.5.12.6. R3SETUP 中の [DIPGNTAB_IND_IND] エラー

一般的なことは SAP note 0130581 (R3SETUP の DIPGNTAB 段階での終了) をご覧ください。 この特定のインストール段階において、 なぜかインストールプロセスは、適切な SAP システム名 "IDS" を使うかわりに、空文字列 "" を使います。 ディレクトリにアクセスするのにパスを <sid> (この場合は IDS) を使って生成するので、 これはちょっとした問題を起こすことがあります。

/usr/sap/IDS/SYS/...
/usr/sap/IDS/DVMGS00

にアクセスするかわりに、 つぎのパスを使います。

/usr/sap//SYS/...
/usr/sap/D00i

インストールを続けるため、 リンクと追加のディレクトリを作成します。

# pwd
/compat/linux/usr/sap
# ls -l
total 4
drwxr-xr-x 3  idsadm sapsys 512 May 5 11:20 D00
drwxr-x--x 5  idsadm sapsys 512 May 5 11:35 IDS
lrwxr-xr-x 1  root   sapsys 7 May 5 11:35 SYS -> IDS/SYS
drwxrwxr-x 2  idsadm sapsys 512 May 5 13:00 tmp
drwxrwxr-x 11 idsadm sapsys 512 May 4 14:20 trans 

この現象を解説している SAP notes (0029227 and 0008401) があります。

10.5.12.7. R3SETUP 中の [RFCRSWBOINI_IND_IND] エラー

(ファイル CENTRDB.R3S で) 問題の段階の状態 (STATUS) を ERROR から OK に設定して R3SETUP を再起動してください。 インストール後、レポート RSWBOINS をトランザクション SE38 から実行しなければなりません。 RFCRSWBOINI および RFCRADDBDIF 段階の詳細については SAP note 0162266 をご覧ください。

10.5.12.8. R3SETUP 中の [RFCRADDBDIF_IND_IND] エラー

(ファイル CENTRDB.R3S で) 問題の段階の状態 (STATUS) を ERROR から OK に設定して R3SETUP を再起動してください。 インストール後、レポート RADDBDIF をトランザクション SE38 から実行しなければなりません。詳しくは SAP note 0162266 をご覧ください。

10.6. 高度なトピックス

Linux バイナリ互換機能がどのような仕組みなのか興味がある人はこのセクションを読んでください。 以下の文章で説明されていることのほとんどは FreeBSD chat メーリングリスト に投稿された Terry Lambert () 氏のメール (Message ID: <199906020108.SAA07001@usr09.primenet.com>) をもとにしています。

10.6.1. どのように動くのでしょう?

FreeBSD は、“実行クラスローダ (execution class loader) ” と呼ばれる抽象的な機構を持っています。これは execve(2) システムコールへの楔という形で実装されています。

FreeBSD は、シェルインタプリタやシェルスクリプトを実行するための #! ローダを持った単一のプログラムローダではなく、 ローダのリストを持っているのです。

歴史的には、Unix プラットフォーム上の唯一のローダーがマジックナンバー (一般的にはファイルの先頭の 4 ないし 8 バイトの部分) の検査を行ないシステムで実行できるバイナリかどうかを検査し、 もしそうならバイナリローダーを呼び出すというようになっていました。

もし、そのシステム用のバイナリでない場合には、 execve(2) システムコールの呼び出しは失敗の戻り値を返し、 シェルがシェルコマンドとして実行しようと試みていたわけです。

この仮定は現在利用しているシェルがどのようなものであっても変わりません。

後に sh(1) に変更が加えられ、先頭の 2 バイトを検査した結果 :\n であれば代わりに csh(1) を呼び出す、 というようになりました (この変更は SCO が最初に行なったと思われます)。

現在の FreeBSD は、プログラムローダリストを走査します。 その際、空白文字までの文字列をインタプリタとして認識する、 通常の #! ローダを用いるため、 該当するものが存在しなければ最終的に /bin/sh がロードされます。

Linux ABI をサポートするため、FreeBSD は ELF バイナリを示すマジックナンバを確認します。 (ただし、この段階では FreeBSD、Solaris、Linux、そしてその他の ELF イメージ形式を使っている OS を区別することはできません)。

ELF ローダは、特殊なマーク (brand) があるかどうか探します。 このマークとは、ELF イメージのコメントセクションのことです。 SVR4/Solaris の ELF バイナリには、このセクションは存在しません。

Linux バイナリを実行するためには、 ELF バイナリに brandelf(1) で説明されている Linux のマークが付けられていなければなりません。

# brandelf -t Linux file

上のようにすることで、指定されたファイルは Linux のマークが付けられ、 ELF ローダが認識できるようになります。

ELF ローダが Linux マークを確認すると、 ローダは proc 構造体内の ある一つのポインタを置き換えます。システムコールは全て、 このポインタ (伝統的な Unix システムではこれは構造体の配列 sysent[] で、システムコールが含まれています) を通してインデックスされます。 さらに、そのプロセスには Linux カーネルモジュールに必要な シグナルトランポリンコード (訳注: シグナルの伝播を実現するコード) 用の特殊なトラップベクタの設定や、 他の (細かな) 調整のための設定が行なわれます。

Linux システムコールベクタは、 さまざまなデータに加えて sysent[] エントリーのリストを含んでおり、それらのアドレスはカーネルモジュール内にあります。

Linux バイナリがシステムコールを発行する際、トラップコードは proc 構造体を用いてシステムコール関数ポインタを 解釈します。そして FreeBSD ではなく Linux 用のシステムコールエントリポイントを得るわけです。

さらに、Linux モードは状況に応じてファイルシステム本来のルートマウントポイントを置き換えてファイルの参照を行ないます。 これは、union オプションを指定してマウントされたファイルシステム (unionfs ではありません!)が行なっていることと同じです。 ファイルを検索する際にはまず /compat/linux/original-path ディレクトリを、それから見つけられなかったときにのみ、 /original-path を調べます。 こうすることで、他のバイナリを要求するバイナリの実行を可能にしています (したがって、Linux 用プログラムツールは Linux ABI サポート環境下で完全に動作するわけです)。 またこれは、もし対応する Linux バイナリが存在しない場合に Linux バイナリが FreeBSD バイナリをロードしたり、実行したりすることが可能であること、 その Linux バイナリに自分自身が Linux 上で実行されていないことを 気付かせないようにする目的で、uname(1) コマンドを /compat/linux ディレクトリに置くことができる、 ということを意味します。

要するに、Linux カーネルが FreeBSD カーネルの内部に存在しているわけです。 カーネルによって提供されるサービス全ての実装の基礎となるさまざまな関数は FreeBSD システムコールテーブルエントリと Linux システムコールテーブルエントリの両方で共通に利用されています。 これらにはファイルシステム処理、仮想メモリ処理、シグナル伝送、System V IPC などが含まれますが、 FreeBSD バイナリは FreeBSD グルー (訳注: glue; 二者の間を仲介するという意味) 関数群、 そして Linux バイナリは Linux グルー関数群を用いる、 という点だけが異なります (過去に存在したほとんどの OS は、 自分自身のためのグルー関数群しか備えていません。 前述したように、システムコールを発行する際、 各々のプロセスの proc 構造体内にある、 ローダによって動的に初期化されるポインタを参照してアドレスを得る代わりに、 静的でグローバルな sysent[] 構造体の配列に システムコール関数のアドレスが直接格納されているのです)。

さて、どちらを本来の FreeBSD ABI (訳注: Applications Binary Interface; 同じ CPU を利用したコンピュータ間でバイナリを共有するための規約のこと) と呼ぶべきなのでしょうか? 実は、どちらが本来のものであるかということを論ずることに意味はありません。 基本的に、FreeBSD グルー関数群はカーネルの中に静的にリンクされていて、 Linux グルー関数群は静的にリンクすることも、 カーネルモジュールを介して利用することもできるようになっている、 という違いがあるだけ (ただしこれは現時点においての話であり、 将来のリリースで変更される可能性がありますし、 おそらく実際に変更されるでしょう) です。

あ、「でもこれは本当にエミュレーションと呼べるのか」って? 答えは「いいえ」です。これは ABI の実装であり、 エミュレーションとは異なります。エミュレータが呼び出されているわけではありません (シミュレータでもないことをあらかじめ断っておきましょう)。

では、これがよく Linux エミュレーションと呼ばれるのは何故でしょうか? それはもちろん FreeBSD の売りにするためでもあるのですが、 実際には、次のような理由によります。 この機能が初めて実装された頃、 動作原理を説明する以外にこの機能を表現する言葉はありませんでした。 しかし、コードをコンパイルしたりモジュールをロードしない場合、 「FreeBSD 上で Linux バイナリを実行する」という表現は、 厳密に考えると適切ではありません。 そこで、その際にロードされているもの自身を表現する言葉 ― すなわち Linux エミュレータが必要だったのです。

パート〓III.〓システム管理

FreeBSD ハンドブックの以下の章は、 FreeBSD のシステム管理の面について書かれています。 各章のはじめでは、その章で学ぶ内容や 実際に取り組む前に知っておくべきことについて説明します。

各章は、必要になった時に個別に参照できるように構成されています。 どの順番で読んでも構いませんし、FreeBSD を使うのに、 すべてを読み通す必要がある、というわけでもありません。

目次
11. 設定とチューニング
11.1. この章では
11.2. 中核となる設定
11.3. アプリケーションの設定
11.4. サービスの起動
11.5. バーチャルホスト
11.6. 設定ファイル
11.7. sysctl によるチューニング
11.8. ディスクのチューニング
11.9. Kernel 制限のチューニング
12. FreeBSD の起動のプロセス
12.1. この章では
12.2. 起動時の問題
12.3. ブートマネージャと起動ステージ
12.4. カーネル起動時の応答
12.5. Device Hints
12.6. init: プロセス制御の初期化
12.7. シャットダウン動作
13. ユーザと基本的なアカウントの管理
13.1. この章では
13.2. アカウントの種類
13.3. アカウント情報の管理
13.4. ユーザへの制限
13.5. グループの管理
14. セキュリティ
14.1. この章では
14.2. はじめに
14.3. FreeBSDの安全性を高める
14.4. DES, MD5 と Crypt
14.5. S/Key
14.6. Kerberos
14.7. ファイアウォール
14.8. OpenSSL
14.9. IPsec
14.10. OpenSSH
14.11. ファイルシステムアクセス制御リスト
15. ストレージ
15.1. この章では
15.2. デバイス名
15.3. ディスクの追加
15.4. RAID
15.5. 光メディア (CD & DVD) の作成と使用
15.6. フロッピーディスクの作成と使用
15.7. データテープの作成と使用
15.8. フロッピーディスクへのバックアップ
15.9. バックアップの基本
15.10. ネットワーク、メモリ、そしてファイルベースのファイルシステム
15.11. ファイルシステムのスナップショット
15.12. ファイルシステムクォータ
15.13. ディスクパーティションの暗号化
16. 地域化 (localization) - I18N/L10N の利用と設定
16.1. この章では
16.2. 基礎知識
16.3. 地域化の利用
16.4. 国際化に対応したプログラムのコンパイル
16.5. FreeBSD を特定の言語に地域化する
17. FreeBSD のアップデートとアップグレード
17.1. この章では
17.2. FreeBSD Update
17.3. ドキュメントのアップデート
17.4. 開発ブランチを追いかける
17.5. ソースの同期
17.6. world の再構築
17.7. 複数のマシンで追いかける

第11章 設定とチューニング

寄稿: Lee Chern [FAMILY Given].
基にしたチュートリアルの執筆: Smith Mike [FAMILY Given].
基にした tuning(7) の執筆: Dillon Matt [FAMILY Given].

11.1. この章では

システムを正しく設定することは、 メンテナンスや将来の更新の際の作業の量を減らします。 この章では FreeBSD システムの管理上の設定の側面について記述します。

またこの章では FreeBSD システムのパフォーマンスを最適化する チューニングについても記述します。

この章を読むと、以下のことがわかります。

  • rc.conf の設定と /usr/local/etc/rc.d スタートアップシステムの基礎

  • ネットワークデバイスに対する、仮想ホストの設定方法

  • /etc ディレクトリ内のさまざまな設定ファ イルの使い方

  • sysctl 変数を使った FreeBSD のチューニング方法

  • ディスク性能のチューニング方法と、カーネルの制限の変更方法

この章を読む前に、以下のことをやっておくとよいでしょう。

11.2. 中核となる設定

システムの設定情報が収められている主な場所は /etc/rc.conf です。 このファイルにはシステムの起動時にシステムの設定を行なうものをはじめ 多岐に渡る設定情報が含まれています。 そのファイル名はダイレクトに、それが rc* ファイル群の設定情報であることを示しています。

管理者は /etc/defaults/rc.conf のデフォルトの設定を rc.conf ファイルにエン トリを作ることで上書きすべきです。 デフォルトのファイルをそのまま /etc にコピーするのはやめるべきです。 それはデフォルト値であってサンプルではないのです。 システム固有のすべての変更は rc.conf ファイ ルの中でするべきです。

管理の手間を減らす為、クラスター化されたアプリケーションには サイト共通の設定とシステム固有の設定を分離するさまざまな戦略が適用できます。 推奨されるアプローチは、サイト共通の設定は /etc/rc.conf.site のような別のファイルに置き、 それをシステム固有の設定情報しか含ませない /etc/rc.conf からインクルードすることです。

rc.confsh(1) によって読み込まれているので、これはじつに簡単に達成できます。 たとえば、

  • rc.conf:

    	. rc.conf.site
    	hostname="node15.example.com"
    	network_interfaces="fxp0 lo0"
    	ifconfig_fxp0="inet 10.1.1.1"
  • rc.conf.site:

    	defaultrouter="10.1.1.254"
    	saver="daemon"
    	blanktime="100"

rc.conf.site ファイルは rsync のようなプログラムを使うことで全システ ムに配布でき、一方 rc.conf ファイルはユニークなままを保つことができます。

システムを sysinstall(8)make world 等で 更新した場合 rc.conf ファイルは上書きされません。 なのでシステムの設定情報が失われることもありません。

11.3. アプリケーションの設定

基本的に、インストールされたアプリケーションには独自の文法を持つ 固有の設定ファイルがあります。 これらのファイルがベースシステムから分離されているということは重要で、 このためパッケージ管理ツールによる配置と管理が容易になっています。

基本的に、それらのファイルは /usr/local/etc にインストールされます。 設定ファイルの数が多数にのぼるアプリケーションに対しては、 それら用にサブディレクトリが作られます。

通常、ports やパッケージがインストールされると 設定ファイルのサンプルが一緒にインストールされます。 大抵、識別のためにサフィックスとして .default がついています。 アプリケーションのための設定ファイルがまだ存在していなければ、 .defaults ファイルをコピーすることで作成できます。

/usr/local/etc/apache ディレクトリの例をご覧ください。

-rw-r--r--  1 root  wheel   2184 May 20  1998 access.conf
-rw-r--r--  1 root  wheel   2184 May 20  1998 access.conf.default
-rw-r--r--  1 root  wheel   9555 May 20  1998 httpd.conf
-rw-r--r--  1 root  wheel   9555 May 20  1998 httpd.conf.default
-rw-r--r--  1 root  wheel  12205 May 20  1998 magic
-rw-r--r--  1 root  wheel  12205 May 20  1998 magic.default
-rw-r--r--  1 root  wheel   2700 May 20  1998 mime.types
-rw-r--r--  1 root  wheel   2700 May 20  1998 mime.types.default
-rw-r--r--  1 root  wheel   7980 May 20  1998 srm.conf
-rw-r--r--  1 root  wheel   7933 May 20  1998 srm.conf.default

ファイルサイズの差から、srm.conf ファイルだけが変更されていることが分かります。 後に apache を更新した時にも、 この変更されたファイルは上書きされることはありません。

11.4. サービスの起動

一つのシステムでサービスをいくつも立ち上げているということは よくあることです。 それらには独自の立ち上げかたがあることがあり、 それぞれ有利な点があります。

Ports collection やパッケージからインストールしたソフトウェアは しばしば /usr/local/etc/rc.d にスクリプトを置き、 システムが起動した時には start、システムをシャッ トダウンする時には stop を引数にして実行します。 これは root で実行すべき、または root で起動することを期待されているシステム ワイドなサービスを起動する場合に推奨される方法です。 これらのスクリプトはパッケージの一部としてインストール時に記録され、 パッケージとともに削除されます。

/usr/local/etc/rc.d にある 一般的なスクリプトは次のようなものです。

#!/bin/sh
echo -n ' FooBar'

case "$1" in
start)
        /usr/local/bin/foobar
        ;;
stop)
        kill -9 `cat /var/run/foobar.pid`
        ;;
*)
        echo "Usage: `basename $0` {start|stop}" >&2
        exit 64
        ;;
esac

exit 0
    

このスクリプトはその目的を果すべく起動時に start、 シャットダウン時に stop をつけて呼ばれます。

サービスの中には固有のポートに接続を受けたときに inetd(8) から起動されるものもあります。 これはメールリーダサーバ (POP や IMAP 等) の場合によくあります。 これらのサービスは /etc/inetd.conf ファイルを編集することで有効化されます。 このファイルの編集に関する詳細は inetd(8) を見てください。

これらの他に /etc/rc.conf による有効化/無効化がカバーされていないサービスもあります。 それらは伝統的に /etc/rc.local にコマンドを書き込むことで実行されていました。 FreeBSD 3.1 にはデフォルトの /etc/rc.local は存在していません。 もし管理者によって作られていれば、 その時は一般的なやりかたとして認められるべきでしょう。 rc.local は最後の場所と考えられているということを 知っておいてください。 サービスを起動させるのにもっといい場所があるなら そこから始めてください。

注記:

/etc/rc.conf でその他のコマンドを実行しないでください。 そのかわり、デーモンの起動やブート時のコマンド実行は /usr/local/etc/rc.d にスクリプトを配置してください。

この他にサービスの起動に cron(8) を利用することもできます。 このアプローチには、cron(8) がそのプロセスを crontab の所有者権限で実行したり、サービスが 非特権ユーザによって立ち上げられ管理されるなどといった有利な点が いくつもあります。

これで cron(8) の機能の利点を得ることができます。 日時の指定を @reboot で置き換えることでジョブは システムがブートした直後、cron(8) が起動した時に実行されます。

11.5. バーチャルホスト

FreeBSD の非常にありふれた用途の一つにバーチャルサイトの ホスティングがあります。 これは一つのサーバがネットワークには複数のサーバとして現れるものです。 これは一つのネットワークインタフェイスに 複数のアドレスを割当てることで実現されます。

ネットワークインタフェイスは 真の アドレスを 一つと 別名 のアドレスを複数持ちます。これらの別 名は通常 /etc/rc.conf に別名のエントリを置くことで追加されます。

fxp0 インタフェイスへの別名のエント リは以下の様なものです。

ifconfig_fxp0_alias0="inet xxx.xxx.xxx.xxx netmask xxx.xxx.xxx.xxx"

別名のエントリは alias0 から始まり昇順に命名されなければなり ません (たとえば、_alias1, _alias2 の様になります)。設定プロセス は最初に欠けた番号のところで停まります。

別名のネットマスクの計算は重要ですが、幸いなことに非常に簡単です。 個々のインタフェイスについてそのネットワークのネットマスクを正しく 表現しているアドレスが必ず一つ必要です。 そのネットワークに所属しているそれ以外のアドレスのネットマスクは すべて 1 でなければなりません。

例として、fxp0 インタフェイスが二つ のネットワークに接続されているものを考えてみましょう。 一つはネットマスクが 255.255.255.0 である 10.1.1.0 ネットワークで、もう一つはネットマスクが 255.255.255.240 である 202.0.75.16 ネットワークです。 システムは 10.1.1.0 には 10.1.1.1 として、 202.0.75.20 には 202.0.75.17 として現れるようにします。

以下のエントリはネットワークインタフェイスを上述の環境に正しく 設定するものです。

 ifconfig_fxp0="inet 10.1.1.1 netmask 255.255.255.0"
 ifconfig_fxp0_alias0="inet 10.1.1.2 netmask 255.255.255.255"
 ifconfig_fxp0_alias1="inet 10.1.1.3 netmask 255.255.255.255"
 ifconfig_fxp0_alias2="inet 10.1.1.4 netmask 255.255.255.255"
 ifconfig_fxp0_alias3="inet 10.1.1.5 netmask 255.255.255.255"
 ifconfig_fxp0_alias4="inet 202.0.75.17 netmask 255.255.255.240"
 ifconfig_fxp0_alias5="inet 202.0.75.18 netmask 255.255.255.255"
 ifconfig_fxp0_alias6="inet 202.0.75.19 netmask 255.255.255.255"
 ifconfig_fxp0_alias7="inet 202.0.75.20 netmask 255.255.255.255"

11.6. 設定ファイル

11.6.1. /etc のレイアウト

設定のための情報が含まれているディレクトリはたくさんあります。 それぞれ以下のものを含んでいます。

/etcシステム全般の設定情報。 ここにあるデータはシステム 固有のものです。
/etc/defaultsデフォルトのシステム設定ファイル。
/etc/mail追加的な sendmail(8) の設定、他の MTA の設定ファイル。
/etc/pppユーザモード、およびカーネルモードの ppp プログラムの設定。
/etc/namedbnamed(8) のデータのデフォルトの置場。通常 boot ファイルはここに置かれ、 /var/db に置かれた他のデータを 参照するディレクティブを含みます。
/usr/local/etcインストールされたアプリケーションの設定ファイル。 アプリケーションごとのサブディレクトリを含んでいることがあります。
/usr/local/etc/rc.dインストールされたアプリケーションの起動/停止スクリプト。
/var/db永続的なシステム固有のデータファイル。 たとえば named(8) のゾーンファイル、データベースファイル等。

11.6.2. ホスト名

11.6.2.1. /etc/resolv.conf

/etc/resolv.conf は FreeBSD に インターネットドメインネームシステム (DNS) にどのようにアクセスするかを指定します。

resolv.conf の最もよくあるエントリは

nameserverリゾルバが問い合わせるべきネームサーバの IP アドレス。 サーバはリストの順に 3 番目まで問い合わせられます。
searchホスト名をルックアップするための検索リスト。 通常、ローカルなホスト名のドメインから決定されます。
domainローカルドメイン名。

基本的な resolv.conf

search example.com
nameserver 147.11.1.11
nameserver 147.11.100.30

注記:

search オプションと domain オプションは、 どちらか一方しか使ってはいけません。

DHCP を利用している場合、dhclient(8) は通常 resolv.conf を DHCP サーバから受け取っ た情報で書き換えます。

11.6.2.2. /etc/hosts

/etc/hosts は古きインターネットを 偲ばせるシンプルなテキストのデータベースです。 これはホスト名と IP アドレスをマッピングする DNS や NIS と組み合わせて使われます。 LAN でつながれているローカルな計算機は、 名前引きを簡単にするために named(8) サーバを立ち上げるかわりにここに書くことができます。 さらに /etc/hosts はインターネット名のローカルなレコードを提供し、 よくアクセスされる名前を外部に問い合わせるのを減らすためにも使えます。

# $FreeBSD$
#
# Host Database
# This file should contain the addresses and aliases
# for local hosts that share this file.
# In the presence of the domain name service or NIS, this file may
# not be consulted at all; see /etc/nsswitch.conf for the resolution order.
#
#
::1                     localhost localhost.my.domain myname.my.domain
127.0.0.1               localhost localhost.my.domain myname.my.domain

#
# Imaginary network.
#10.0.0.2               myname.my.domain myname
#10.0.0.3               myfriend.my.domain myfriend
#
# According to RFC 1918, you can use the following IP networks for
# private nets which will never be connected to the Internet:
#
#       10.0.0.0        -   10.255.255.255
#       172.16.0.0      -   172.31.255.255
#       192.168.0.0     -   192.168.255.255
#
# In case you want to be able to connect to the Internet, you need
# real official assigned numbers.  PLEASE PLEASE PLEASE do not try
# to invent your own network numbers but instead get one from your
# network provider (if any) or from the Internet Registry (ftp to
# rs.internic.net, directory `/templates').
#

/etc/hosts は、 次のようなごく簡単なフォーマットになっています。

[インターネットアドレス] [正式なホスト名] [別名1] [別名2] ...

例:

10.0.0.1 myRealHostname.example.com myRealHostname foobar1 foobar2

これ以上の情報は hosts(5) をあたってください。

11.6.3. ログファイルに関係する設定

11.6.3.1. syslog.conf

syslog.confsyslogd(8) プログラムのための設定ファイルです。 これはどのタイプの syslog メッセージを対応する ログファイルに記録するかを指定します。

# $FreeBSD$
#
#       Spaces ARE valid field separators in this file. However,
#       other *nix-like systems still insist on using tabs as field
#       separators. If you are sharing this file between systems, you
#       may want to use only tabs as field separators here.
#       Consult the syslog.conf(5) manual page.
*.err;kern.debug;auth.notice;mail.crit          /dev/console
*.notice;kern.debug;lpr.info;mail.crit;news.err /var/log/messages
security.*                                      /var/log/security
mail.info                                       /var/log/maillog
lpr.info                                        /var/log/lpd-errs
cron.*                                          /var/log/cron
*.err                                           root
*.notice;news.err                               root
*.alert                                         root
*.emerg                                         *
# uncomment this to log all writes to /dev/console to /var/log/console.log
#console.info                                   /var/log/console.log
# uncomment this to enable logging of all log messages to /var/log/all.log
#*.*                                            /var/log/all.log
# uncomment this to enable logging to a remote log host named loghost
#*.*                                            @loghost
# uncomment these if you're running inn
# news.crit                                     /var/log/news/news.crit
# news.err                                      /var/log/news/news.err
# news.notice                                   /var/log/news/news.notice
!startslip
*.*                                             /var/log/slip.log
!ppp
*.*                                             /var/log/ppp.log

これ以上の情報は syslog.conf(5) のマニュアルページに あたってください。

11.6.3.2. newsyslog.conf

newsyslog.conf は、通常 cron(8) によって予定を決めて実行されるプログラム newsyslog(8) のための設定ファイルです。 newsyslog(8) は、 ログファイルをいつ保存して再編するかを決定します。 logfilelogfile.0 に移され、logfile.0logfile.1 に、そして以下同様に移されます。 また、ログファイルを gzip(1) 形式で保存することもできます。 この場合ファイル名は logfile.0.gz, logfile.1.gz の様になります。

newsyslog.conf はどのログファイルが管理され、どのくらいの期間保存され、 そしていつ touch されるかを指定します。 ログファイルはあるサイズに到達するか、ある決められた時刻・ 日時で再編されあるいは保存されます。

# configuration file for newsyslog
# $FreeBSD$
#
# filename          [owner:group]    mode count size when [ZB] [/pid_file] [sig_num]
/var/log/cron                           600  3     100  *     Z
/var/log/amd.log                        644  7     100  *     Z
/var/log/kerberos.log                   644  7     100  *     Z
/var/log/lpd-errs                       644  7     100  *     Z
/var/log/maillog                        644  7     *    @T00  Z
/var/log/sendmail.st                    644  10    *    168   B
/var/log/messages                       644  5     100  *     Z
/var/log/all.log                        600  7     *    @T00  Z
/var/log/slip.log                       600  3     100  *     Z
/var/log/ppp.log                        600  3     100  *     Z
/var/log/security                       600  10    100  *     Z
/var/log/wtmp                           644  3     *    @01T05 B
/var/log/daily.log                      640  7     *    @T00  Z
/var/log/weekly.log                     640  5     1    $W6D0 Z
/var/log/monthly.log                    640  12    *    $M1D0 Z
/var/log/console.log                    640  5     100  *     Z

これ以上の情報は newsyslog(8) のマニュアルページに あたってください。

11.6.4. sysctl.conf

sysctl.confrc.conf によく似ています。 値は変数=値のかたちでセットされます。 指定された値はシステムがマルチユーザモードに移行した後でセットされます。 すべての変数がこのモードで設定可能というわけではありません。

以下は sysctl.conf のサンプルで 致命的なシグナルを記録しないように、また Linux プログラムに それらが実際は FreeBSD 上で動いていることを知らせる様に チューニングしています。

kern.logsigexit=0       # Do not log fatal signal exits (e.g. sig 11)
compat.linux.osname=FreeBSD
compat.linux.osrelease=4.3-STABLE

11.7. sysctl によるチューニング

sysctl(8) は稼働中の FreeBSD システムに変更を加えるためのインタフェイスです。 これには経験を積んだ管理者用の TCP/IP スタックや 仮想メモリシステムのパフォーマンスを劇的に改善する 先進的なオプションが含まれます。 500 を越えるシステム変数を sysctl(8) で読んだり セットしたりできます。

本質的には sysctl(8) の機能は次の二つ、 システムの設定を読むことと変更することです。

読み取り可能なすべての変数を表示するには以下のようにします。

% sysctl -a

個々の変数、たとえば kern.maxproc を読むには以下のようにします。

% sysctl kern.maxproc
kern.maxproc: 1044

特定の変数をセットするには、直感的な文法 変数= を使ってください。

# sysctl kern.maxfiles=5000
kern.maxfiles: 2088 -> 5000

sysctl 変数の値は通常、文字列、数値、真偽値のいずれかです。 (真偽値は yes の場合には 1 で no の場合には 0 です)。

11.8. ディスクのチューニング

11.8.1. sysctl 変数

11.8.1.1. vfs.vmiodirenable

vfs.vmiodirenable sysctl 変数のデフォルトは 1 (オン) で、 0 (オフ) または 1 (オン) にセットすることができます。 このパラメータはディレクトリがシステムによってどのように キャッシュされるかを制御します。 ほとんどのディレクトリは小さく、 ファイルシステムにおいては単一フラグメント (典型的には 1K) であり、バッファキャッシュではさらに小さくなっています (典型的には 512 バイト)。 しかしデフォルトモードで動作している時は、 大量のメモリを搭載していても バッファキャッシュは固定数のディレクトリしかキャッシュしません。 この sysctl をオンにすると、バッファキャッシュが VM ページキャッシュを、 ディレクトリをキャッシュするために使うことを可能にします。 これによる利点は、全てのメモリがディレクトリを キャッシュするのに使えるようになるということです。 欠点は、キャッシュに使われる最小のメモリの大きさが 512 バイトではなく 物理ページサイズ (大抵は 4K) になることです。 多数のファイルを操作するサービスを稼動しているなら、 常にこのオプションをオンにすることを推奨します。 そのようなサービスには、web キャッシュや大規模なメールシステム、 ニューズシステムなどが含まれます。 このオプションは一般にメモリを消費しますが、 性能を削減することはありません。 ただし実験して調べてみるべきでしょう。

11.8.1.2. hw.ata.wc

FreeBSD 4.3 では IDE のライトキャッシュがオフになりました。 これは IDE ディスクへの書き込み帯域幅を減らしてしまうことになりますが、 ハードドライブベンダに起因するデータの一貫性に関する 重大な問題のために必要なことだと考えられました。 基本的には、書き込み完了時期について IDE ドライブが嘘をつくという問題です。 IDE ライトキャッシュがオンであると IDE ハードドライブはデータを順番に書きこまないばかりか、 ディスクの負荷が高い時にはいくつかのブロックの書き込みを 無期限に延期してしまいます。 クラッシュや電源故障の場合、 ファイルシステムの重大な破壊をもたらします。 したがって私たちはデフォルトを安全側に変更しました。 残念ながらこれは大変な性能の低下をもたらし、 私たちはあきらめてこのリリース後にオンに戻しました。 hw.ata.wc sysctl 変数を見てデフォルトを チェックしてみるべきです。 もし IDE ライトキャッシュがオフになっていたら、 hw.ata.wc カーネル変数を 1 に戻すことでオンに戻すことができます。 これはブート時にブートローダから行わなければなりません。 カーネルがブートした後に行っても効果はありません。

詳しくは ata(4) を見てください。

11.8.2. ソフトアップデート

tunefs(8) プログラムはファイルシステムを細かくチュー ニングするのに使えます。このプログラムにはさまざまなオプションがありま すが、ここではソフトアップデートをオンオフすることだけを考えま す。以下の様にして切り替えます。

# tunefs -n enable /filesystem
# tunefs -n disable /filesystem

ファイルシステムはマウントされているあいだは tunefs(8) で変更することができません。 ソフトアップデートを有効にする いい機会はシングルユーザモードでどのパーティションもマウント されていない時です。

注記:

FreeBSD 4.5 からは、ファイルシステム生成時に newfs(8)-U オプションを使って ソフトアップデートを有効化できるようになりました。

ソフトアップデートはメタデータの性能、 主にファイルの作成と削除の性能を劇的に改善します。 すべてのファイルシステムでソフトアップデートを有効にすることを推奨します。 ソフトアップデートに関して、2 つの欠点を意識すべきです。 1 つめは、ソフトアップデートはクラッシュ時におけるファイルシス テムの一貫性は保証しますが、 物理ディスクの更新が何秒か (1 分に達することもあります!) 遅れる可能性が高いことです。 システムがクラッシュした場合、より多くの作業結果が消えてしまうかもしれません。 2 つめは、ソフトアップデート はファイルシステムブロックを解放するのを遅らせるということです。 あるファイルシステム (たとえばルートファイルシステム) が満杯近くの時に それに対する大規模な更新、たとえば make installworld をすると、空き領域を使い果たして更新が失敗してしまうことがあります。

11.9. Kernel 制限のチューニング

11.9.1. File/Process 制限

11.9.1.1. kern.maxfiles

kern.maxfiles はあなたのシステムの要求に 応じて増減させることができます。 この変数はあなたのシステムのファイル記述子の最大値を示します。 ファイル記述子テーブルが溢れるような時には、システムメッセー ジバッファに頻繁に file: table is full と表示されます。これは、 dmesg コマンドで確認できます。

ファイル、ソケット、パイプ (fifo) は それぞれオープンされるとファイル記述子を一つ消費します。 大規模なプロダクションサーバでは その時実行されているサービスの種類や数に応じては あっさり数千のファイル記述子が必要になります。

kern.maxfile のデフォルト値はカーネル コンフィグレーションファイルの MAXUSERS オ プションで決まります。kern.maxfilesMAXUSERS の値に比例して増加します。 カスタムカーネルをコンパイルする際は、このカーネルコンフィグ レーションオプションをシステムの利用法に合わせて設定するとよ いでしょう。カーネルは、この数値からほとんどの制限の初期値を 決定します。業務用マシンに、実際に 256 名のユーザが一度に接 続することはないかもしれませんが、大規模なウェブサーバに必要 なリソースは同程度になります。

注記:

FreeBSD 4.5 からは、 カーネルコンフィグレーションファイルで MAXUSERS0 に設定すると、システムの RAM 容量に基づいて適切なデフォルト値が選択されます。

11.9.2. ネットワークの制限

カーネルコンフィグレーションオプション NMBCLUSTERS は、そのシステムで利用可能なネッ トワーク mbuf の量を決定します。通信量の多いサーバで MBUF の量 が少ないと、FreeBSD の性能が低下してしまいます。クラスタ一つは およそ 2kB のメモリに対応しているので、1024 だとカーネルメモリ から約 2 MB をネットワークバッファに予約することになります。ど れだけ必要になるかを、簡単な計算で出すことができます。同時に最 大 1000 接続までゆくウェブサーバがあり、それぞれの接続によって 受信バッファ 16kB と送信バッファ 16kB が消費されるなら、ウェ ブサーバをまかなうのに 32MB 程度のネットワークバッファが必要 になります。経験的に有用な値は、それを 2 倍したものなので、 32MBx2 = 64MB/2K = 32768 になります。

第12章 FreeBSD の起動のプロセス

12.1. この章では

計算機を起動しオペレーティングシステムをロードするプロセスは、