Copyright © 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 The FreeBSD Documentation Project
FreeBSD へようこそ! このハンドブックは FreeBSD 8.3-RELEASE と FreeBSD 9.0-RELEASE のインストールおよび、日常での使い方について記述したものです。 本ハンドブックは改編作業中であり、 さまざまな人々が編集に携わっています。 いま存在するセクションの中には情報が古くなってしまったため、 更新作業の必要があるものも含まれています。 もし、このハンドブックを編集するプロジェクトに協力したいとお考えなら、 FreeBSD documentation project メーリングリスト まで電子メールを(英語で)送ってください。 この文書の最新バージョンは、いつでも 日本国内版の FreeBSD ウェブサイト および FreeBSD ウェブサイト から入手できます (この文書の以前のバージョンは http://docs.FreeBSD.org/doc/ から入手できます)。 また、他のさまざまな文書形式、圧縮形式のものが FreeBSD FTP サーバ や数多くの ミラーサイト からダウンロードできます。 このハンドブックの書籍版 (英語版) は、 FreeBSD Mall から購入できます。 また、ハンドブックの検索 を行なうこともできます。
FreeBSD ハンドブック日本語版の作成は FreeBSD 日本語ドキュメンテーションプロジェクト
(FreeBSD doc-jp) がおこなっています。 ハンドブックの日本語訳に関することは FreeBSD
日本語ドキュメンテーションプロジェクト <doc-jp@jp.FreeBSD.org>
において日本語で議論されています。
文書の日本語訳に関するお問い合わせや、
文書の原文に関する問い合わせをしたいが英語が得意でないという方は FreeBSD
日本語ドキュメンテーションプロジェクト <doc-jp@jp.FreeBSD.org>
まで、日本語でコメントをお寄せください。
Redistribution and use in source (SGML DocBook) and 'compiled' forms (SGML, HTML, PDF, PostScript, RTF and so forth) with or without modification, are permitted provided that the following conditions are met:
Redistributions of source code (SGML DocBook) must retain the above copyright notice, this list of conditions and the following disclaimer as the first lines of this file unmodified.
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.
Important: 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 および Escalade は 3ware Inc. の登録商標です。
ARM は ARM Limited の登録商標です。
Adaptec は Adaptec, Inc. の登録商標です。
Adobe, Acrobat, Acrobat Reader および PostScript は アメリカ合衆国および/またはその他の国の Adobe Systems Incorporated の登録商標または商標です。
Apple, FireWire, Mac, Macintosh, Mac OS, Quicktime および TrueType は Apple Computer, Inc. の商標で、 アメリカ合衆国およびその他の国で登録されています。
Corel および WordPerfect は カナダ、アメリカ合衆国および/またはその他の国における Corel Corporation および/またはその関連会社の商標または登録商標です。
Sound Blaster は アメリカ合衆国および/またはその他の国における Creative Technology Ltd. の商標です。
CVSup は John D. Polstra の登録商標です。
Heidelberg, Helvetica, Palatino, and Times Roman はアメリカ合衆国およびその他の国における Heidelberger Druckmaschinen AG の登録商標または商標です。
IBM, AIX, EtherJet, Netfinity, OS/2, PowerPC, PS/2, S/390 および ThinkPad は アメリカ合衆国および/またはその他の国における International Business Machines Corporation の商標です。
IEEE, POSIX および 802 は アメリカ合衆国における Institute of Electrical and Electronics Engineers, Inc. の登録商標です。
Intel, Celeron, EtherExpress, i386, i486, Itanium, Pentium および Xeon はアメリカ合衆国およびその他の国における Intel Corporation またはその関連会社の商標または登録商標です。
Intuit および Quicken は アメリカ合衆国およびその他の国における Intuit Inc. またはその関連会社の 登録商標です。
Linux は Linus Torvalds の登録商標です。
LSI Logic, AcceleRAID, eXtremeRAID, MegaRAID および Mylex は LSI Logic Corp. の商標または登録商標です。
M-Systems および DiskOnChip は M-Systems Flash Disk Pioneers, Ltd. の商標または登録商標です。
Macromedia, Flash および Shockwave は アメリカ合衆国および/またはその他の国における Macromedia, Inc. の商標または登録商標です。
Microsoft, IntelliMouse, MS-DOS, Outlook, Windows, Windows Media および Windows NT は アメリカ合衆国および/またはその他の国における Microsoft Corporation の登録商標または商標です。
Netscape および the Netscape Navigator は アメリカ合衆国およびその他の国における Netscape Communications Corporation の登録商標です。
GateD および NextHop は アメリカ合衆国およびその他の国における NextHop の登録商標および商標です。
Motif, OSF/1 および UNIX は アメリカ合衆国およびその他の国における The Open Group の登録商標で、 IT DialTone および The Open Group は同じく商標です。
Oracle は Oracle Corporation の登録商標です。
PowerQuest および PartitionMagic は アメリカ合衆国およびその他の国における PowerQuest Corporation の登録商標です。
RealNetworks, RealPlayer および RealAudio は RealNetworks, Inc. の登録商標です。
Red Hat, RPM は アメリカ合衆国およびその他の国における Red Hat, Inc. の商標または登録商標です。
SAP, R/3 および mySAP は ドイツおよび世界中のいくつもの国における SAP AG の登録商標です。
Sun, Sun Microsystems, Java, Java Virtual Machine, JavaServer Pages, JDK, JSP, JVM, Netra, Solaris, StarOffice, Sun Blade, Sun Enterprise, Sun Fire, SunOS および Ultra は アメリカ合衆国およびその他の国における Sun Microsystems, Inc. の 商標または登録商標です。
Symantec および Ghost は アメリカ合衆国およびその他の国における Symantec Corporation の 登録商標です。
MATLAB は The MathWorks, Inc. の登録商標です。
SpeedTouch は Thomson の商標です。
U.S. Robotics および Sportster は U.S. Robotics Corporation の登録商標です。
VMware は VMware, Inc. の商標です。
Waterloo Maple および Maple は Waterloo Maple Inc. の商標または登録商標です。
Mathematica は Wolfram Research, Inc. の登録商標です。
XFree86 は The XFree86 Project, Inc. の商標です。
Ogg Vorbis および Xiph.Org は Xiph.Org の商標です。
製造者および販売者が製品を区別するのに 用いている表示の多くは、商標とされています。 この文書に登場する表示のうち FreeBSD Project がその商標を確認しているものには、その表示に続いて “™” または “®” 記号がおかれています。
最初の部分は FreeBSD を使い始めた人向けで、FreeBSD のインストールの過程を手引きし、UNIX® の基礎となっている概念や慣習を丁寧に紹介します。 この部分に取り組むために必要なのは、探究心と、 紹介された新たな概念を理解する能力だけです。
その次の、ハンドブックのはるかに大きな部分では、FreeBSD システム管理者が興味を抱くあらゆる種類の話題が分かりやすく言及されています。 一部の章は、その章の前に読んでおくべきことが推奨されており、 各章の始めの概要で述べられています。
さらなる情報源の一覧は、Appendix B をご覧ください。
第 2 版は、FreeBSD ドキュメンテーションプロジェクトの献身的なメンバーによる 2 年以上に渡る作業の頂点に立つものです。 この新たな版における主な変更は、次のようなものです。
完備した索引が追加されました。
ASCII キャラクタによる図はすべて画像に置き換えられました (訳注: 日本語版は作業中です)。
各章に、章に記載されている内容と、 読者に期待される予備知識がすぐに分かるように、 一定の内容の概要が付け加えられました。
内容は、“始めに”、“システム管理”、 “付録” の 3 つの論理的な部分に再構成されました。
Chapter 2 (“FreeBSD のインストール”) は新規ユーザーが文章の内容を理解しやすいように多くのスクリーンショットを入れて完全に書き直されました。
Chapter 4 (“UNIX の基礎知識 ”) には、 プロセス、デーモン、シグナルに関する情報が追加されました。
Chapter 5 (“アプリケーションのインストール”) には、バイナリパッケージの管理に関する情報が追加されました。
Chapter 6 (“The X Window System”) は、 XFree86™ 4.X 上で KDE や GNOME のような近代的なデスクトップテクノロジーを利用することに力点をおいて、 完全に書き直されました。
Chapter 13 (“FreeBSD の起動プロセス”) が拡張されました。
Chapter 16 (“ストレージ”) は、 “ディスク” と “バックアップ” の 2 つの章に分かれていたものをまとめて書き直されました。私たちは、 この話題は 1 つの章にまとめて示した方が分かりやすいと感じています。 RAID (ハードウェアとソフトウェアの両方) に関する節も追加されました。
Chapter 19 (“シリアル通信”) は FreeBSD 4.X/5.X 向けに一から再構成されました。
Chapter 20 (“PPP と SLIP”) は大幅に更新されました。
Chapter 22 (“高度なネットワーク”) に、多くの新しい節が追加されました。
Chapter 21 (“電子メール”) に、 sendmail の設定についてより多くの情報が加えられました。
Chapter 11 (“Linux バイナリ互換機能”) には、Oracle® や SAP® R/3® のインストール情報が加えられました (訳注: 日本語版は作業中です)。
この第 2 版では、以下の新たな話題が扱われています。
設定とチューニング (Chapter 12)
マルチメディア (Chapter 8)
この文書は 3 部構成になっています。 第 1 部導入では、 FreeBSD のインストールと基本的な使い方を扱います。 各章は順に読むことを想定していますが、 馴染み深い話題を扱った章は飛ばしてもよいでしょう。 第 2 部システム管理は、より上級の FreeBSD ユーザの関心をひく話題を広く扱っています。 各章の始めにはその章が何を扱っていて、 読者にどんな予備知識が期待されるかを簡潔に述べた概要がおかれています。 これは、その章に関心のない読者がそこを飛ばして興味のある章を見つけられるようにするためです。 第 3 部は参考情報からなる付録です。
新規ユーザに FreeBSD を紹介します。ここでは、FreeBSD プロジェクトの歴史、目標と開発モデルについて述べています。
インストール過程を一通りユーザに案内しています。 また、シリアルコンソール経由でのインストールのような高度な話題もいくらか扱っています。
FreeBSD オペレーティングシステムの基本的なコマンドや機能を扱っています。 Linux やその他の UNIX 風のものに馴染んでいたら、 この章を飛ばしても構わないでしょう。
FreeBSD の革新的な “Ports Collection” および標準的なバイナリパッケージによるサードパーティアプリケーションのインストールについて説明しています。
X Window System 全般と、特に FreeBSD 上での XFree86 の利用について述べています。 また、KDE や GNOME のような一般的なデスクトップ環境にも触れています。
システム管理者が FreeBSD システムを調整して最適な性能を引き出すのに利用できるパラメータについて述べています。 また、FreeBSD で利用されている様な設定ファイルとそのありかも解説しています。
FreeBSD の起動プロセスを解説し、 このプロセスを設定オプションで制御する方法を説明しています。
ユーザアカウントの生成、操作について述べています。また、 ユーザーに課すことができる資源の制限やその他のアカウント管理作業について議論しています。
どのような場合に新たにカーネルを構成する必要があるかを説明し、 カスタムカーネルのコンフィグレーション、構築、 インストールについて詳しく説明しています。
FreeBSD システムを安全に保つために役立つ Kerberos, IPsec, OpenSSH, ネットワークファイアウォールといった利用可能な様々なツールについて説明しています。
FreeBSD におけるプリンタの取り扱いを説明しています。たとえば、 バナーページ、プリンターの課金、初期設定といったことです。
FreeBSD でストレージメディアやファイルシステムをどう扱うかを説明しています。 対象は、物理ディスク、RAID アレイ、 光学およびテープメディア、メモリベースのディスク、 ネットワークファイルシステムなどです。
FreeBSD を英語以外の言語で使う方法を説明しています。 システムとアプリケーション両方のレベルの地域化を扱っています。
Web ブラウザや生産性向上ツールのような一般的なデスクトップアプリケーションをいくつか挙げ、 FreeBSD におけるインストール方法を説明しています。
システムを音声やビデオ再生に対応させるためにどう設定するかを説明します。 また、音声やビデオアプリケーションも例示しています。
FreeBSD システムに端末やモデムを、 ダイヤルインまたはダイヤルアウト用に接続する方法を説明しています。
FreeBSD で、PPP, SLIP や PPP over Ethernet を使ってリモートシステムに接続する方法を説明しています。
LAN 上の他のコンピュータとインターネット接続の共有、 ネットワークファイルシステムの利用、NIS 経由のアカウント情報の共有、 ドメインネームサーバの設定等々、 ネットワークに関する様々な話題を取り扱っています。
電子メールサーバの構成要素をそれぞれ説明し、 最もよく使われているメールサーバソフトウェアである sendmail について、 単純な設定をとりあげています。
FreeBSD-STABLE, FreeBSD-CURRENT と FreeBSD のリリースの違いを説明します。 どんなユーザにとって開発システムを追随するのが有用かを述べ、 その方法の概要をまとめています。
FreeBSD の Linux バイナリ互換機能を説明しています。また、 Oracle, SAP R/3, Mathematica® といった人気の高い Linux アプリケーションのインストールを詳しく説明しています。
FreeBSD を収録した CDROM や DVD の様々な入手先や、FreeBSD をダウンロードしてインストールできるインターネット上のサイトを挙げています。
この文書は、 もっと詳しい説明が欲しくなるかもしれないさまざまな題目について触れています。 参考図書には、このハンドブックで参照している、 多くの素晴らしい本が挙げられています。
FreeBSD ユーザが FreeBSD について質問したり、 技術的な議論に参加できる、 多くの公開された場について説明しています。
多くの FreeBSD 開発者の PGP fingerprint を載せています。
一貫して読みやすい文章を提供するために、 この文書全体では以下の表記法が用いられています。
イタリック体 のフォントは、ファイル名、URL, 強調表現、技術用語の最初の使用を表すのに使われています。
等幅等幅フォントは、エラーメッセージ、
コマンド、環境変数、ports の名称、ホスト名、ユーザ名、
グループ名、デバイスの名称、変数、 コードの断片を表すのに使われています。
太字のフォントは、 アプリケーション、コマンド、キーを表すのに使われています。
文章の他の部分と区別するため、 キーは太字で示されています。 同時に押すことを意図したキーの組み合わせは、キーの間に `+' を入れて表されます。たとえば
Ctrl+Alt+Del
は、ユーザーが Ctrl, Alt それから Del キーを同時に押すことを意図しています。
順に押すことを意図したキーは、カンマで区切って表されます。 たとえば
Ctrl+X, Ctrl+S
は、ユーザーが Ctrl キーと X キーを同時に押してから、 Ctrl キーと S キーを同時に押すことを意図しています。
E:\> で始まる例は、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) に結実しました。
FreeBSD ハンドブックの第 1 部はユーザと FreeBSD が初めての管理者向けです。各章の内容は以下のとおりです。
FreeBSD の紹介
インストールの手順の解説
UNIX の基礎
FreeBSD で利用できる豊富なサードパーティ製のアプリケーションの インストール方法
UNIX におけるウィンドウシステム X、 およびクリエイティブなデスクトップ環境の設定の詳細の紹介
このハンドブックでは頻繁にページを飛すことなく前から後へと スムーズに読み進めるように、 後方への参照を極力抑えるようにしています。
FreeBSD に興味を持っていただきありがとうございます! この章では FreeBSD の歴史、目標、開発モデルなど、 FreeBSD プロジェクトに関するさまざまな事柄を扱います。
この章に書かれている話題は、次のようなものです。
FreeBSD とその他のオペレーティングシステムとの違い
FreeBSD プロジェクトの歴史
FreeBSD プロジェクトの目標
FreeBSD オープンソース開発モデルの基本的な考え方
そして、“FreeBSD” という名前の由来について
FreeBSD は、4.4BSD-Lite から派生したオペレーティングシステムで、 Intel (x86 および Itanium®), AMD64, Sun UltraSPARC® コンピュータに対応しています。 他のアーキテクチャに対する移植も進行中です。 FreeBSD の歴史や、 現在のリリースについても読むことができます。 プロジェクトへの何らかの貢献 (ソースコード、ハードウェア、 資金の提供など) について興味があれば、 FreeBSD への貢献をご覧ください。
FreeBSD には多くの注目すべき機能があります。 例を挙げれば以下のようになります:
優先度を動的に調節する機能を備えることで アプリケーションとユーザとの間で円滑かつ公平な コンピュータ資源共有を実現し、 特に高い負荷にも耐えることができる堅牢さを備えた プリエンプティブマルチタスキング。
多くの人々が 1 つの FreeBSD システムをさまざまな目的で同時に使うことを可能にする マルチユーザ機能。 これは例えば、プリンタやテープデバイスといったシステムの周辺機器が、 そのシステムを利用する全てのユーザだけでなく ネットワーク経由においても自然な形で共有され、 さらに重要なシステム資源の使い過ぎを防ぐために 個々の資源に対する制限がユーザ単位、 グループ単位で設定できる、というようなことを意味しています。
SCTP や DHCP, NFS, NIS, PPP, SLIP, IPsec, IPv6 といった業界標準規格のサポートを含んだ堅固な TCP/IP ネットワーキング。 これによって、FreeBSD マシンが商用サーバと同じように相互に運用でき、 NFS (リモートファイルアクセス) や、 電子メールサービスのような極めて重要な機能を提供します。 また、WWW や FTP, ルーティング、ファイアウォール (セキュリティ) サービスを用いてインターネットと接続できます。
アプリケーション (あるいはユーザ) がお互いに干渉できない ようにするメモリ保護機能。 アプリケーションがクラッシュしても、 どのような場合でも他のアプリケーションには影響を与えません。
FreeBSD は 32ビット のオペレーティングシステム (Itanium 版、AMD64 版および UltraSPARC 版は 64 ビット) であり、 最初からそのようにこつこつと設計されました。
業界標準である X Window システム (X11R7) は、普通の VGA カードやモニタでグラフィカルユーザインタフェース (GUI) を提供し、すべてのソースコードも一緒に提供されます。
Linux や SCO, SVR4, BSDI, NetBSD 用に作られた多くのプログラムとの バイナリ互換性。
何千ものすぐに実行可能な アプリケーションが FreeBSD の ports や packages コレクションで利用可能です。 ここに用意されているものはネットを探し回る必要がありません
インターネット上で入手可能な、 移植が容易な 何千ものアプリケーションを追加できます。FreeBSD は最も評判のよい商用の UNIX システムとソースコードレベルで互換性があります。 このため、ほとんどのアプリケーションは、 もしあったとしてもほんの少しの変更でコンパイルすることができます。
デマンドページング仮想メモリ とそれに “付随の VM/buffer キャッシュ” の設計は、 多くのメモリを要求するアプリケーションに対して 効率よくメモリを与えるようにする一方で、 他のユーザに対しても対話的な応答を維持します。
複数の CPU を搭載したマシンにおける SMP 機能のサポート。
完全な C や C++ の開発ツール。進んだ研究や開発のための多くの他の言語も 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 で入手可能です。 詳しくは Appendix A をご覧ください。
FreeBSD は、以下に代表されるような世界最大クラスの IT 会社のデバイスおよび製品のプラットフォームとして利用されています。
FreeBSD は、以下のサイトに代表されるような、 インターネット上で最大クラスのサイトでも利用されています。
また、この他にもあります。
以下の節では簡単な歴史やプロジェクトの目標、 開発モデルなど、普段は表にでない話題を提供しています。
FreeBSD プロジェクトは 1993 年の始めに “Unofficial 386BSD Patchkit” の最後の 3 人のまとめ役によって、部分的に patchkit から派生する形で開始されました。ここでの 3 人のまとめ役というのは、Nate Williams と、Rod Grimes と、私 (Jordan K. Hubbard) です。
私たちのもともとの目標は、patchkit という仕組みではもう十分に解決できなくなってしまった 386BSD の数多くの問題を修正するための、386BSD の暫定的なスナップショットを作成することでした。 こういった経緯を経ているので、 このプロジェクトの初期の頃の名前が “ 386BSD 0.5 ” や “386BSD 暫定版 (Interim)” であったということを覚えている人もいるでしょう。
386BSD は、Bill Jolitz が (訳注: バークレイ Net/2 テープを基に) 作成したオペレーティングシステムです。当時の 386BSD は、ほぼ一年にわたって放っておかれていた (訳注: 作者がバグの報告を受けても何もしなかった) というひどい状況に苦しんでいました。 作者の代わりに問題を修正し続けていた patchkit は日を追うごとに不快なまでに膨張してしまっていました。 このような状況に対して、このままではいけない、 何か行動を起こさなければ、 ということで異議を唱えるものは私たちのなかにはいませんでした。 そして私たちは挑戦することを決断し、 暫定的な “クリーンアップ” スナップショットを作成することで Bill を手助けしようと決めたのです。しかし、 この計画は唐突に終了してしまいました。Bill Jolitz が、 このプロジェクトに対する受け入れ支持を取り下げることを突然決意し、 なおかつこのプロジェクトの代わりに何をするのかを一切言明しなかったのです。
たとえ Bill が支持してくれないとしても、 われわれの目標には依然として やる価値があると決心するのにさしたる時間はかかりませんでした。 そこで David Greenman が考案した名称 “FreeBSD” を私たちのプロジェクトの名前に採用し、 新たなスタートを切りました。 この時点でのプロジェクトの初期目標は、すでにこのシステム (訳注: 386BSD + Patchkit) を使っていた利用者たちと相談して決められました。 プロジェクトが実現に向けて軌道に乗ってきたことが明確になった時点で、 私は 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 月に公開されました。
私たちは 1996 年の 8 月に FreeBSD 2.1.5 を公開しました。 この出来が非常に良く、特に業務で運用しているサイトや ISP での人気が高かったので、私たちは 2.1-STABLE 開発分流から更に公開をおこなうことにメリットがあると考えました。 それが FreeBSD 2.1.7.1 で、2.1-STABLE 開発分流の最後を締めくくるものとして、 1997 年の 2月に公開されました。2.1-STABLE 開発分流 (RELENG_2_1_0) は現在、 保守のみをおこなう状態になっており、今後は、 セキュリティの改善や他の何か重要なバグフィックスのみがおこなわれるでしょう。
FreeBSD 2.2 の開発は、RELENG_2_2 開発ブランチとして、 開発の本流 (“-CURRENT”) から 1996 年 11 月に分岐し、そして 1997 年 4 月に最初のリリース (2.2.1) が行なわれました。2.2 開発ブランチからは、さらに 97 年の夏と秋にリリースが行なわれ、 98 年 11 月に 2.2 開発ブランチの最終リリース (2.2.8) が行なわれています。1998 年 10 月に FreeBSD 3.0 最初の公式リリースが行なわれ、 2.2 開発ブランチは開発の終了を迎えることになりました。
1999 年 1 月 20 日には、FreeBSD の開発ツリーが 4.0-CURRENT と 3.X-STABLE の各ブランチに再び分岐しました。 3.X-STABLE からは 3.1 が 1999 年 2 月 15 日に、 3.2 が 1999 年 5 月 15 日に、 3.3 が 1999 年 9 月 16 日に、 3.4 が 1999 年 12 月 20 日に、 そして 3.5 が 2000 年 6 月 24 日にリリースされました。 3.5 はリリースの数日後、Kerberos に対するセキュリティ上の修正を組み込むために小規模な更新がなされ、 3.5.1 になりました。3.5.1 は、この 3.X ブランチにおける最終リリースになる予定です。
2000 年 3 月 13 日に 4.X-STABLE ブランチが作成されました。 このブランチからはこれまでいくつものリリースが公開されています。 2000 年 3 月に初めて 4.0-RELEASE が公開され、 最終版の 4.11-RELEASE は 2005 年 1 月 に公開されました。
長い間延期されていた 5.0-RELEASE は、2003 年 1 月 19 日にアナウンスされました。これは 3 年近くにわたる作業の集大成であり、 このリリースより、FreeBSD は先進的なマルチプロセッサとアプリケーションスレッドに対応し、 また、UltraSPARC と ia64 プラットフォームへの対応も始まりました。 これに続いて 5.1 が 2003 年 6 月に公開されています。 -CURRENT ブランチからの最後の 5.X リリースは 5.2.1-RELEASE で、 2004 年 2 月に公開されました。
2004 年 8 月に RELENG_5 ブランチが作成され、続いて 5.3-RELEASE が 5-STABLE ブランチからのリリースの始まりを飾りました。 最新の 5.5-RELEASE は 2006 年 5 月に公開されました。 今後 RELENG_5 ブランチからのリリースは行われません。
2005 年 7 月に RELENG_6 ブランチが作成され、 6.X ブランチの最初のリリースである 6.0-RELEASE は 2005 年 11 月に公開されました。 最新の 6.4-RELEASE は 2008 年 11 月に公開されました。 今後 RELENG_6 ブランチからのリリースは行われません。 このブランチは、 Alpha アーキテクチャに対応する最後のブランチです。
2007 年 10 月に RELENG_7 ブランチが作成され、 このブランチの最初のリリースである 7.0-RELEASE は 2008 年 2 月に公開されました。 このブランチからの最新の 7.4-RELEASE は 2011 年 2 月に公開されました。 今後 RELENG_7 ブランチからのリリースは行われません
2009 年 8 月に RELENG_8 ブランチが作成され、 8.X ブランチの最初のリリースである 8.0-RELEASE は 2009 年 11 月に公開されました。 このブランチからの最新の 8.3-RELEASE は 2012 年 4 月 に公開されました。 RELENG_8 ブランチからのリリースは、引き続き行われる予定です。
2011 年 9 月に RELENG_9 ブランチが作成され、 このブランチからの最初のリリースである 9.0-RELEASE は 2012 年 1 月 に公開されました。 RELENG_9 ブランチからのリリースは、引き続き行われます。
長期的な開発プロジェクトは 10.X-CURRENT 開発ブランチ (トランク) で続けられ、 10.X のスナップショットリリースが収録された CD-ROM (もちろん、ネットワーク上でも) は、開発の進行状況に応じて スナップショットサーバ より継続して入手できます。
FreeBSD プロジェクトの目的は、いかなる用途にも使用でき、 何ら制限のないソフトウェアを供給することです。 私たちの多くは、 コード (そしてプロジェクト) に対してかなりの投資をしてきており、 これからも多少の無駄はあっても投資を続けて行くつもりです。ただ、 他の人達にも同じような負担をするように主張しているわけではありません。 FreeBSD に興味を持っている一人の残らず全ての人々に、 目的を限定しないでコードを提供すること。これが、 私たちの最初のそして最大の “任務” であると信じています。そうすれば、コードは可能な限り広く使われ、 最大の恩恵をもたらすことができるでしょう。これが、 私たちが熱烈に支持しているフリーソフトウェアの最も基本的な目的であると、 私は信じています。
私たちのソースツリーに含まれるソースのうち、 GNU 一般公有使用許諾 (GPL) または GNU ライブラリ一般公有使用許諾 (LGPL) に従っているものについては、多少制限が課せられています。ただし、 ソースコードへのアクセスの保証という、 一般の制限とはいわば逆の制限 (訳注1) です。 GPL ソフトウェアの商利用には、そのライセンスにある 複雑な側面が影響してくることがあります。 ですから私たちは、そうすることが合理的であると判断されたときには、 より制限の少ない、BSD 著作権表示を採用しているソフトウェアを選択するようにしています。
(訳注1) GPL では、「ソースコードを実際に受け取るか、 あるいは、希望しさえすればそれを入手することが可能であること」 を求めています。
FreeBSD の開発は非常に開かれた、柔軟性のあるプロセスです。 貢献者リスト を見ていただければわかるとおり、 FreeBSD は文字通り世界中の何百という人々の努力によって開発されています。 FreeBSD の開発環境は、 この何百という開発者がインターネット経由で共同作業できるようになっているのです。 新しい開発者はいつでも大歓迎ですので、FreeBSD technical discussions メーリングリスト にメールを送ってください。 FreeBSD announcements メーリングリスト もありますので、他の FreeBSD ユーザに自分のやっていることを宣伝したい時にはどうぞ使ってください。
あと、FreeBSD プロジェクトとその開発プロセスについて、 どなたにも知っていていただきたいのは以下のようなことです。
長年にわたり FreeBSD のソースツリーは CVS (Concurrent Versions System) によってメンテナンスされてきました。 CVS はソースコード管理用のフリーソフトウェアで、 FreeBSD のリリースにも含まれています。 2008 年 6 月、プロジェクトはソースコード管理のシステムを SVN (Subversion) に移行しました。 ソースツリーの急速な増加や、 これまでに蓄積された膨大な量の履歴によって、 CVS の持つ技術的な限界が明かになってきたためです。 メインリポジトリは SVN によって管理されますが、 SVN リポジトリにおける変更点は CVS に反映されるので、 csup といった CVS のクライアントツールはこれまで通り正常に動きます。 現在はベースシステムのみが SVN を採用し、 ドキュメント、World Wide Web および Ports リポジトリは、 これまでと同じく CVS によって管理されています。 FreeBSD の メインリポジトリは米国カリフォルニア州のサンタクララ市に存在し、 そこから世界中のたくさんのミラーサイトにコピーされています。 -CURRENT と -STABLE が含まれている SVN ツリーそのものは、 あなたのマシンにも簡単に取ってくることができます。 これについては ソースツリーの同期の章をご覧ください。
コミッター (committers) は CVS ツリーへの書き込み権限を持っている人、 FreeBSD のソースに変更を加えることができる人です (CVS でリポジトリに変更を加えるには cvs(1) commit というコマンドを使うので、 これらの人々は英語では “committers” と呼ばれます)。 開発者にコードを送って見てもらうのに一番いい方法は send-pr(1) コマンドを使うことです。 もし、何か問題があって send-pr が使えないなら FreeBSD committer's メーリングリスト にメールを送っていただいても構いません。
FreeBSD コアチーム は FreeBSD プロジェクトが会社だとすると取締役会にあたるものです。 コアチームとして一番重要な役割は FreeBSD プロジェクトが全体としてよい方向に向かっていることを確認することです。 責任感あふれる開発者を上記のソースツリー管理者として招くこと、 また仕事上の都合などでコアチームをやめた人たちの後任を見つけることもコアチームの役割です。 現在のコアチームは FreeBSD 開発者 (committer) の中から 2010 年 7 月に選挙によって選出されました。 コアチームを選出するための選挙は、2 年ごとに行なわれています。
コアチームのうち何人かは特定の担当分野を持っており、 システムのうち一部に特に重点をおいて面倒を見ています。 FreeBSD 開発者と担当分野の完全なリストは コントリビュータのリストをご覧ください。
Note: 忘れてほしくないのは、 コアチームのほとんどは FreeBSD に対してボランティアの立場であり、 FreeBSD プロジェクトからは何ら金銭的な支援を受けていない、 ということです。ですから、 ここでの“責任”は “保証されたサポート”ではありません。 そういう意味で、上記の“取締役会” という例えはあまりよくないかもしれません。むしろ、FreeBSD のために人生を棒に振ってしまった人の集まりといった方が正しいかも…。
最後になりますが、 もっとも重要で多数をしめる開発者はフィードバックやバグフィクスをどんどん送ってくれるユーザ自身です。 FreeBSD の開発に関わっていきたいという人は、 議論の場である FreeBSD technical discussions メーリングリスト に参加するとよいでしょう。 FreeBSD 関連メーリングリストに関する詳細は、 Appendix C をご覧ください。
FreeBSD への貢献者リスト は日に日に長くなっています。 あなたも今日、何か送ることからはじめてみませんか?
もちろん FreeBSD に貢献するには、 コードを書くほかにもいろいろな方法があります。 助けが求められている分野については、 FreeBSD プロジェクトのウェブサイトをご覧ください。
ひとことで言うと、FreeBSD の開発組織はゆるやかな同心円状になっています。 ともすると中央集権的に見えがちなこの組織は、 FreeBSD のユーザがきちんと管理されたコードベースを 容易に追いかけられるようにデザインされているもので、 貢献したいという人を締め出す意図は全くありません! 私たちの目標は安定したオペレーティングシステムと 簡単にインストールして使うことのできる アプリケーションを提供することです。 この方法は、それを達成するために非常にうまくはたらきます。
これから FreeBSD の開発にたずさわろうという人に、 私たちが望むことはただ一つです。 FreeBSD の成功を継続的なものにするために、 現在の開発者と同じような情熱を持って接してください!
FreeBSD は自由に利用でき、 Intel i386™, i486™, Pentium®, Pentium Pro, Celeron®, Pentium II, Pentium III, Pentium 4 (とその互換品), Xeon™, Sun UltraSPARC ベースのコンピュータで動作する、 4.4BSD-Lite ベースの全ソースつきのリリースです。 これはもともとカリフォルニア大学バークレイ校 CSRG グループのソフトウェアがベースとなっており、NetBSD, OpenBSD, 386BSD, そして Free Software Foundation の ソフトウェアなどにより拡張されています。
1994 年末の FreeBSD 2.0 のリリースからみると、FreeBSD は性能、 機能、安定性の面で劇的に改善されました。 もっとも大きな変化は仮想メモリシステムに おける改良で、 統合化された VM/file バッファキャッシュを用いることで性能を向上させながらも FreeBSD のメモリの使用量を減らすことができたことです。そのおかげで、最低 5 MB メモリという制約上でも動作するようになりました。 その他の拡張としては、NIS のクライアントとサーバの完全なサポート、 トランザクション TCP のサポート、ダイヤルオンデマンド PPP, 統合された DHCP のサポート、改良された SCSI サブシステム、 ISDN, ATM, FDDI, Fast Ethernet や Gigabit Ethernet (1000 Mbit) アダプタへの対応、最新の Adaptec コントローラ対応の改良や、 数百件におよぶバグの修正などがあります。
FreeBSD では基本配布セットに加え、 移植されたソフトウェア集として数千の人気の高いプログラムを提供しています。 この文書を印刷している時点で 23,000 以上の ports (移植ソフトウェア) が存在します。 ports には http (WWW) サーバから、ゲーム、言語、 エディタまでありとあらゆるものが含まれています。 ports はオリジナルソースに対する “差分”という形で表現されており、 Ports Collection 全体でも 500 MB 程度にしかなりません。 こうすることで ports の更新を容易にし、昔の 1.0 Ports Collection が要求したディスクスペースよりも少なくて済むようになります。 ports をコンパイルするには、 インストールしたいと思っているプログラムのディレクトリに移動し、 make install とすると、 あとはすべてシステムがやってくれます。 どの ports もオリジナルの配布セットを動的に CD-ROM や近くの FTP サーバから取ってくるので、 ディスクは構築したいと思っている ports の分だけを準備しておけば十分です。 ほとんどの ports は、すでにコンパイルされた状態で “package” として提供されており、 ソースコードからコンパイルしたくない場合、これを使うと (pkg_add というコマンドで) 簡単にインストールできます。 package と ports に関する詳細は、 Chapter 5 をご覧ください。
最近の FreeBSD では、システムの最初のセットアップ時に、 インストーラ (sysinstall(8) または bsdinstall(8) のどちらでも) 上で、ドキュメントを /usr/local/share/doc/freebsd 以下にインストールすることを選択できます。 システムのインストール後でも、 Using Documentation Packages の章に記述されている package を使うことで、いつでもドキュメントをインストールできます。 これらのローカルにインストールされたドキュメントは、HTML ブラウザを使って以下の URL から参照できます。
また、 http://www.FreeBSD.org/ にはマスタ (かなり頻繁に更新されます) がありますので、 こちらも参照してください。
FreeBSD では、 テキストベースの使いやすいインストールプログラムが用意されています。 FreeBSD 9.0-RELEASE 以降では bsdinstall と呼ばれるインストールプログラムを使い、 9.0-RELEASE より前のリリースでは sysinstall を使います。 この章では、sysinstall を使った FreeBSD のインストール方法を説明します。 bsdsysinstall の利用については Chapter 3 で説明します。
この章を読めば、次のことがわかるでしょう:
FreeBSD インストールディスクの作り方。
FreeBSD がハードディスクをどのように参照するか、 またどのように分割するか。
sysinstall をどのように起動するか。
sysinstall が聞いてくる質問がどのような意味であり、 またどのように答えれば良いか。
この章を読む前に、以下のことを確認して下さい:
インストールしようとするバージョンの FreeBSD に付属しているサポートハードウェア一覧を読んで、 あなたの使っているハードウェアがサポートされているかどうか確認して下さい。
Note: 通常、これらのインストール説明書は i386 (“PC 互換”) アーキテクチャのコンピュータを対象にしています。 他のプラットフォームに特有の説明については明記しています。 このガイドでは、出来る限り最新の情報を提供するように努力していますが、 インストーラとこの文書で記述している内容との間にはいくらかズレがあります。 この章を正確なインストールマニュアルとしてではなく、 一般的なガイドとしてご利用ください。
FreeBSD をインストールする最小構成は、 FreeBSD のバージョンやハードウェアのアーキテクチャによって異なります。
以下の節では、最小構成についての情報をまとめています。 また、FreeBSD のインストール方法によって、フロッピードライブや、 対応している CDROM ドライブ、 場合によってはネットワークアダプタが必要となります。 これに関しては、Section 2.3.7 で説明されています。
FreeBSD/i386 と FreeBSD/pc98 の両方のアーキテクチャは、 486 以上のプロセッサと、 少なくとも 24 MB の RAM が必要です。 最小のインストールでは、 少なくとも 150 MB のハードディスクの空き容量が必要です。
Note: 通常、古い構成のシステムでは、 速いプロセッサを入手するより、より多くの RAM やより多くの容量のハードドライブを用意するほうが重要です。
FreeBSD/amd64 を実行可能なプロセッサには 2 つのクラスがあります。 1 つ目のクラスは、AMD Athlon™64, AMD Athlon64-FX, AMD Opteron™ やそれより新しいプロセッサです。
もう 1 つのクラスは、 Intel® EM64T アーキテクチャを採用しているプロセッサです。 これらのプロセッサの例は、 Intel Core™ 2 Duo, Quad, Extreme プロセッサファミリおよび Intel Xeon 3000, 5000, および 7000 系のプロセッサです。
nVidia nForce3 Pro-150 ベースのコンピュータを使用するには、 BIOS のセットアップを使って、IO APIC を無効にする 必要があります。 もし、このようなオプションがなければ、 代わりに ACPI を無効にする必要があるでしょう。 Pro-150 チップセットには回避策が見つかっていないバグがあります。
FreeBSD/sparc64 をインストールするには、 サポートされているハードウェアが必要です (Section 2.2.2 をご覧ください)。
現時点では、他のオペレーティングシステムとディスクの共有ができないので、 FreeBSD/sparc64 専用のディスクが必要です。
サポートされるハードウェアのリストは FreeBSD のリリースと一緒に FreeBSD ハードウェアノートとして提供されます。 このドキュメントは通常 CDROM や FTP 配布の一番上のディレクトリや sysinstall のドキュメントメニューにある HARDWARE.TXT という名のファイルで見ることができます。 アーキテクチャごとに用意されるそのリストを見ることで、FreeBSD の各リリースでどのようなハードウェア装置がサポートされるかがわかります。 リリースごと、およびアーキテクチャごとのハードウェアリストは、 FreeBSD のウェブサイトの リリース情報 のページにあります。
FreeBSDをインストールする前に、 あなたのコンピュータで使用している部品の一覧を作っておいたほうがいいでしょう。 FreeBSD のインストールルーチンは、部品 (ハードディスク、 ネットワークカード、CDROM ドライブなど) のモデル番号とメーカーを表示し、 さらにこれらのデバイスについて、使用する IRQ, IO ポートまで含めて正しい設定を認識しようと試みます。しかし、PC ハードウェアによっては、この過程は完全には成功せず、FreeBSD が認識した設定を修正しなければならないこともあります。
Windows や Linux などの、 他のオペレーティングシステムが既にインストールされている場合、 それらのオペレーティングシステムでのあなたのハードウェアの設定を参考にすると良いでしょう。 拡張カードなどの設定がよく分からない場合は、 カード上の印刷を見ることで分かることもあります。 よく使われる IRQ は 3, 5, 7 で、IO ポートアドレスは通常 0x330 のような 16 進数で書かれています。
FreeBSD をインストールする前に、 この情報を印刷するか書き留めておくかすることを勧めます。 例えば次のような表です:
Table 2-1. サンプルデバイス一覧
| デバイスの名前 | IRQ | IO ポート | メモ |
|---|---|---|---|
| 1 台目のハードディスク | N/A | N/A | 40 GB, Seagate 製、プライマリ IDE マスタ |
| CDROM | N/A | N/A | プライマリ IDE スレーブ |
| 2 台目のハードディスク | N/A | N/A | 20 GB, IBM 製、セカンダリ IDE マスタ |
| 1 つ目の IDE コントローラ | 14 | 0x1f0 | |
| ネットワークカード | N/A | N/A | Intel 10/100 |
| モデム | N/A | N/A | 3Com® 56K ファックスモデム、COM1 に接続 |
| ... |
コンピュータで使用している部品の一覧を作成したら、 インストールする FreeBSD のリリースのハードウェア要件を満たしているかどうかを確認してください。
FreeBSD をインストールするコンピュータに価値のあるデータが入っている場合、 確実にバックアップをとり、 さらに正しくバックアップがとれていることを確認して下さい。FreeBSD のインストールルーチンは、ハードディスクに実際に書き込む前に確認を求めますが、 一度実際に書き込む作業が始まってしまうと、 もう元に戻すことはできません。
FreeBSD を、ハードディスクすべてを使ってインストールする場合は、 この時点で確認しなければならないことは何もありません -- この節を飛ばすことができます。
しかし FreeBSD を他のオペレーティングシステムと共存させる必要がある場合は、 データがディスクにどのように配置されており、 それがどのように影響するかを大まかに理解する必要があります。
PC のディスクは個別の塊に分割することができます。 これらの塊は パーティション と呼ばれます。 FreeBSD は内部にもパーティションを持つので、この名称は混乱をおこします。 そのため、FreeBSD ではこの塊をディスクスライスまたは単にスライスと呼びます。 たとえば、PC ディスクパーティションを操作する FreeBSD のユーティリティの fdisk は、パーティションではなくスライスと呼びます。 PC では、ディスク 1 台あたり 4 つまでパーティションを作成できます。 これらのパーティションはプライマリパーティションと呼ばれます。 この制限を回避し、 4 つ以上のパーティションを作成するために拡張パーティションと呼ばれる新しいパーティション形式が作られました。 ディスク 1 台につき 1 つだけ拡張パーティションを作成できます。 論理パーティションと呼ばれる特別のパーティションは、 この拡張パーティションの内部に作成できます。
それぞれのパーティションは、 そのパーティションに含まれるデータの形式を示す数字である、 パーティション ID を持ちます。FreeBSD パーティションのパーティション ID は 165です。
通常、各オペレーティングシステムは、 それぞれ独自の方法で個々のパーティションを識別します。例えば MS-DOS や Windows などの MS-DOS の子孫は、 プライマリパーティション及び論理パーティションそれぞれに C: から始まる ドライブレターを割り当てます。
FreeBSD はプライマリパーティションにインストールしなければなりません。 FreeBSD はあなたが作成したファイルを含むすべてのデータを、 この一つのパーティションに保持できます。 しかし複数のディスクがある場合はそのうちのいくつか、もしくはすべてに、 FreeBSD パーティションを作成することもできます。 FreeBSD をインストールする時は 1 つのパーティションを使用可能にしておかなければなりません。 このパーティションは、新たに用意した空白のパーティションでもいいですし、 または無くなっても構わないデータしか入っていない、 既存のパーティションでも構いません。
すべてのディスクで、既にすべてのパーティションを使用している場合は、 他のオペレーティングシステムで提供されているツール (例えば MS-DOS または Windows の fdisk) を使用して、 そのうちの 1 つを FreeBSD のために解放しなければなりません。
予備のパーティションがある場合にはそれを使うこともできます。 しかし、まず始めは 1 つまたは複数の既存のパーティションを縮小することを考えても良いでしょう。
FreeBSD の最小のインストールには、100 MB 程度のディスク容量が必要です。 しかしこれは非常に小さなインストールであり、 自分のファイルを作成するスペースはほとんど残らないでしょう。 現実的には、グラフィカルな環境が必要ないのであれば 250 MB、 グラフィカルユーザインタフェースを使用するのであれば 350 MB 以上は必要でしょう。 その上、多くのサードパーティ製ソフトウェアをインストールするならば、 さらに多くのスペースが必要になるでしょう。
FreeBSD のためのスペースを用意する際、 パーティションサイズを変更するために、 PartitionMagic® などの商用ツールや GParted などのフリーのツールを使用できます。 PartitionMagic と GParted は、 NTFS のサイズを変更できることが知られています。 SystemRescueCD といった多くの Live CD Linux ディストリビューションで GParted を利用できます。
Microsoft Vista のパーティションサイズの変更に関して問題が報告されています。 このような作業を行う際は、 Vista のインストール CDROM を手元に置いておくことをお勧めします。 また、このようなディスク管理の作業を行う時には、 現在のバックアップを取っておくことが強く推奨されています。
Warning: これらのツールの使用方法を誤ると、 ディスク上のデータが消えてしまう可能性があります。 使用前には必ずバックアップをとって下さい。
Example 2-1. 既存のパーティションを変更せずに使用
既に Windows がインストールされている 4 GB のハードディスクが 1 台接続されており、そのハードディスクは 2 つのドライブレター C: 及び D: に分割されており、それぞれのサイズが 2 GB である PC を使用していると仮定します。 またこの時、C: には 1 GB, D: には 0.5 GB のデータがあるとします。
ドライブレター 1 つあたり 1 つのパーティションですから、 あなたのディスクには合計で 2 つのパーティションがあることを意味します。 この場合、D: にあるデータをすべて C: にコピーすれば、 2 つ目のパーティションを解放し、FreeBSD のために使うことができるでしょう。
Example 2-2. 既存のパーティションを縮小する
既に Windows がインストールされている 4 GB のハードディスクが 1 台接続された PC を使用していると仮定します。さらに Windows をインストールする際、1 つの大きなパーティションを作成し C: ドライブとして 4 GB を割り当てたとします。 そして現在 1.5 GB 使用しており、FreeBSD で 2 GB 使いたいとします。
FreeBSD をインストールするためには、 以下のどちらかを行わなければなりません。
Windows のデータをバックアップし、インストール時に 2 GB のパーティションを作成して再インストールする。
先に述べた PartitionMagic をはじめとする Windows パーティションを縮小するツールを使用する。
FreeBSD をネットワークを利用してインストールする場合は (例えば FTP サイト、または NFS サーバからインストールする場合), ネットワークの設定を知る必要があります。 FreeBSD のインストールを完了するためにネットワークに接続できるよう、 インストール中にこれらの情報を入力する必要があります。
イーサネットのネットワークに接続する場合、 もしくはケーブル / DSL モデム経由でイーサネットアダプタを利用してインターネットに接続する場合は、 次の情報が必要になります:
IP アドレス
デフォルトゲートウェイの IP アドレス
ホスト名
DNS サーバの IP アドレス
サブネットマスク
これらの情報がわからない場合、 システム管理者かプロバイダに問い合わせて下さい。 問い合わせると、DHCP を使用して自動的に割り当てていると言われるかもしれません。その場合は DHCP を使用しているということを書き留めておいて下さい。
非常に長い時間がかかりますが、 通常のモデムを使用したダイアルアップで ISP に接続している場合でも、 インターネット経由で FreeBSD をインストールすることができます。
この場合、以下の内容をあらかじめ確認しておく必要があります:
ISP にダイアルする際の電話番号
接続に使用する COM: ポート
ISP のアカウントのユーザ名及びパスワード
FreeBSD プロジェクトでは FreeBSD の各リリースができる限り安定するよう努力していますが、 時々バグが発生してしまうことがあります。極まれに、 発生したバグによりインストールプロセスに影響を与えることがあります。 これらの問題は発見され解決されるとともに、 FreeBSD のウェブサイトの FreeBSD Errata に掲示されます。 注意すべき既知の問題が無いことを確かめるために、インストールする前に Errata を確認するべきです。
Errata を含む、すべてのリリースに関する情報は、 FreeBSD のウェブサイト の リリース情報 の項で確認することができます。
FreeBSD のインストールプロセスでは、 以下のいずれかの場所に置いてあるファイルから FreeBSD をインストールします。
ローカルメディア
CDROM または DVD
USB メモリスティック
同じコンピュータ上の MS-DOS パーティション
SCSI または QIC テープ
フロッピーディスク
ネットワーク
FTP サイト (必要に応じてファイアウォールを経由、 または HTTP プロキシを利用)
NFS サーバ
パラレルまたはシリアル専用接続
FreeBSD を CD または DVD で購入しているのであれば、 必要なものはすべてそろっているので、次の節 (Section 2.3.7) を読み飛ばしてください。
FreeBSD のインストールファイルをまだ持っていないのであれば、 Section 2.13 まで読み飛ばしてください。 FreeBSD を上で示した場所からインストールするための準備について説明しています。 このセクションを読み終わった後、ここに戻ってきて、 Section 2.3.7 を読んでください。
FreeBSD のインストールプロセスは、FreeBSD インストーラでコンピュータを起動することから始まります--インストーラは、 別のオペレーティングシステムで実行するプログラムではありません。 通常、コンピュータはハードディスクにインストールされたオペレーティングシステムから起動しますが、 “起動可能な” フロッピーディスクから起動するように設定することもできます。 最近のコンピュータの多くは、CDROM ドライブの CDROM や USB ディスクからも起動できます。
Tip: FreeBSD の CDROM または DVD を (購入したり、自分自身で準備をして) 持っており、 あなたのコンピュータで CDROM 及び DVD からの起動が可能である場合 (通常 “Boot Order” または類似の BIOS オプションを指定します)、この節を飛ばしてください。 FreeBSD の CDROM と DVD イメージは起動可能であり、 他の特別な準備をすることなく FreeBSD のインストールで利用できます。
起動可能なメモリスティックを作成する場合には、 以下の手順にしたがってください。
メモリスティックのイメージの取得
FreeBSD 8.X 以前のメモリスティックのイメージは、 ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/arch/ISO-IMAGES/version/FreeBSD-version-RELEASE-arch-memstick.img の ISO-IMAGES/ ディレクトリからダウンロードできます。 ここで、 arch と version の部分を、 それぞれインストールするアーキテクチャとバージョン番号に置き換えてください。 たとえば、FreeBSD/i386 8.3-RELEASE のメモリスティックのイメージは、ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/i386/ISO-IMAGES/8.3/FreeBSD-8.3-RELEASE-i386-memstick.img から入手できます。
Tip: FreeBSD 9.0-RELEASE からは、 異なるディレクトリパスが使われています。 FreeBSD 9.0-RELEASE 以降のバージョンのダウンロードとインストールの詳細については、 Chapter 3 で説明します。
メモリスティックイメージには、.img という拡張子がついています。ISO-IMAGES/ ディレクトリには複数の異なるイメージがあり、インストールする FreeBSD のバージョンによって、 また場合によってはインストールするハードウェアによって、 使い分ける必要があります。
Important: 以下の作業によってデータが消去されるので、 先に進む前に、使用する USB スティックにあるデータをバックアップしてください。
イメージファイルをメモリスティックに書き込む
FreeBSD を使ってイメージを書き込む
Warning: 以下の例では、起動するデバイスを /dev/da0 としています。 適切なデバイスを出力先に設定していることを十分確認してくだい。 さもなければ、現在あるデータを破壊してしまうでしょう。
イメージを dd(1) を使って書き込む
.img ファイルは、 メモリスティックにコピーされるような、 通常のファイルではありません。 ディスクの完全な内容のイメージです。 したがって、ディスクから他のディスクへのコピーは簡単にはできません。 そのかわりに、 イメージを直接ディスクに書き込む dd(1) を使用する必要があります。
# dd if=FreeBSD-8.3-RELEASE-i386-memstick.img of=/dev/da0 bs=64k
Operation not permitted エラーが表示されたら、ターゲットデバイスが他で利用されていないかどうか、 マウントされていないかどうか、 ユーティリティプログラムが気を利かせて自動的にマウントしていないかどうかを確認してください。 その後、もう一度実行してください。
Windows® を使ってイメージを書き込む
Warning: 以下の例では、起動するデバイスを H: としています。 適切なデバイスを出力先に設定していることを十分確認してくだい。 さもなければ、現在あるデータを破壊してしまうでしょう。
Image Writer for Windows を入手する
Image Writer for Windows は、 イメージファイルをメモリスティックに正しく書き込むことのできるフリーのアプリケーションです。 https://launchpad.net/win32-image-writer/ からダウンロードして、フォルダに展開してください。
イメージライタを使ってイメージを書き込む
Win32DiskImager アイコンをダブルクリックして、プログラムを起動します。 Device の下に表示されるデバイスレターが、 メモリスティックのドライブであることを確認してください。 フォルダのアイコンをクリックして、 メモリスティックに書き込むイメージファイルを選択します。 Save をクリックして、 イメージファイルの名前をアクセプトしてください。 すべてが正しく行われたかどうか、また、 他のウィンドウでメモリスティックのフォルダが開かれていないことを確認してください。 最後に、Write を押して、ドライブにイメージファイルを書き込みます。
起動フロッピーディスクを作成するためには、 次のステップに従って下さい:
起動フロッピーイメージの取得
Important: FreeBSD 8.X では、 フロッピーイメージは用意されていません。 上記の USB メモリや、CDROM や DVD を用いた FreeBSD のインストール法に従ってください。
起動ディスクは、インストールメディアの floppies ディレクトリや、 ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/arch/version-RELEASE/floppies/ から入手できます。 ここで、arch と version の部分を、 それぞれインストールするアーキテクチャとバージョン番号に置き換えてください。 たとえば、FreeBSD/i386 8.3-RELEASE の起動フロッピーイメージは、 ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/i386/8.3-RELEASE/floppies/ からダウンロードできます。
フロッピーイメージは .flp という拡張子がついています。floppies/ ディレクトリには複数の異なるイメージがあり、インストールする FreeBSD のバージョンによって、 また場合によってはインストールするハードウェアによって、 使い分ける必要があります。 多くの場合は、 boot.flp, kern1.flp, kern2.flp および kern3.flp の 4 つのフロッピーを必要とします。 これらのフロッピーイメージに関する最新の情報は、 同じディレクトリにある README.TXT で確認して下さい。
Important: FTP プログラムを使用してこれらのディスクイメージをダウンロードする時は、 必ずバイナリモードにして下さい。 Web ブラウザによってはテキスト (またはアスキー) モードでダウンロードしてしまうものがあり、 ディスクから起動できないときは大抵これが原因です。
フロッピーディスクの用意
ダウンロードするイメージファイル 1 つにつき 1 枚のフロッピーディスクを用意する必要があります。 これらのディスクに欠陥があってはいけません。 これを確認する最も簡単な方法は、 自分自身でフォーマットしてみることです。 フォーマットする前のフロッピーを信用してはいけません。 Windows のフォーマットユーティリティは、 不良ディスクがあっても教えてはくれないでしょう。 それらを “bad” とマークして、無視するだけです。 もし、フロッピーを用いてインストールを行うのであれば、 新品のフロッピーを使うことをお薦めします。
Important: FreeBSD をインストールしようとした時に、 インストールプログラムがクラッシュしたりフリーズしたり、 おかしな動作をした時、 まずはじめに疑うべきもののうちの 1 つはフロッピーです。 フロッピーイメージを新しいディスクに書き込んで、 もう一度試してみて下さい。
フロッピーディスクへイメージファイルを書き込む。
.flp ファイルは、 いつも行われているようにディスクにコピーされるような、 通常のファイルではありません。 ディスクの完全な内容のイメージです。 したがって、ディスクから他のディスクへのコピーは簡単には できません。 そのかわりに、 イメージを直接ディスクに書き込む特別なツールを使用する必要があります。
MS-DOS / Windows が動作しているコンピュータでフロッピーを作成する場合は、 私たちが用意した fdimage というツールを使用することができます。
CDROM に入っている フロッピーイメージを使おうとしており、 この時 CDROM が E: ドライブであった場合、 次のように実行します:
E:\> tools\fdimage floppies\boot.flp A:
毎回フロッピーディスクを入れ換え、 ディスクにコピーしたファイルの名前を示すラベルを付けながら、 それぞれの .flp ファイルに対してこのコマンドを繰り返します。 .flp ファイルを置いた場所に応じて、 コマンドラインを変更して下さい。 CDROM を持っていない場合、fdimage は FreeBSD の FTP サイトの tools ディレクトリからダウンロードすることができます。
(別の FreeBSD システムのような) UNIX システム上でフロッピーへの書き込みを行う場合は、 イメージファイルを直接ディスクに書き込むために dd(1) コマンドを使うことができます。FreeBSD 上では、 次のように実行します:
# dd if=boot.flp of=/dev/fd0
FreeBSD においては、/dev/fd0 が 1 台目のフロッピーディスクドライブ (A: ドライブ) を表します。同様に /dev/fd1 は B: ドライブを表します。 他の UNIX の変形では、 フロッピーディスクデバイスには別の名前がついているかもしれないので、 必要に応じてそのシステムのドキュメントを確認して下さい。
これで FreeBSD をインストールする用意ができました。
Important: デフォルトでは、次のメッセージが表示されるまで インストーラはディスクに何の変更も加えません。
Last Chance: Are you SURE you want continue the installation? If you're running this on a disk with data you wish to save then WE STRONGLY ENCOURAGE YOU TO MAKE PROPER BACKUPS before proceeding! We can take no responsibility for lost disk contents!この最後の警告の前であれば、 いつでもハードディスクの内容を変更することなくインストールを中断できます。 もし、何かを間違って設定してしまったことが心配ならば、 最後の警告の前に単にコンピュータをオフにしてください。 被害を残さずに済みます。
まず、コンピュータの電源を切ります。
コンピュータの電源をいれます。 起動が始まると、すぐにシステムまたは BIOS のセットアップメニューに入るためのオプションが表示されるはずです。 一般的には F2, F10, Del のようなキーまたは Alt+S のようなキーの組合せです。 画面上に示されるキーを使用してください。場合によっては、 起動すると画像を表示するコンピュータがあるかもしれません。 大抵の場合、Esc キーを押すと、 画像が消えて必要なメッセージを見ることができます。
どの装置からシステムが起動するかを制御する設定を探してください。 通常は “Boot Order” と呼ばれ、 一般的には、Floppy, CDROM, First Hard Disk などの装置の一覧として表示されています。
CDROM から起動する場合には CDROM が選択されていることを、 USB ディスクまたはフロッピーディスクから起動するなら USB ディスクまたはフロッピーディスクが選択されていることを確認してください。 自信が無い場合は、 コンピュータやマザーボードのマニュアルを参照してください。
変更を保存して終了してください。 コンピュータが再起動するはずです。
Section 2.3.7 で説明されている “起動” USB スティックを使用する場合には、 コンピュータを立ち上げる前に、USB スティックを挿入してください。
CDROM から起動する場合、コンピュータを立ち上げ、 すぐに CDROM を挿入する必要があります。
Note: FreeBSD 7.X では、 Section 2.3.7 で説明されている方法で作成した起動フロッピーを用いてインストールできます。 boot.flp が最初に挿入する disc です。 このディスクをフロッピードライブに挿入して、 コンピュータを起動してください。
もし、コンピュータがすでに存在している OS を読み込み、 通常通り起動してしまったのであれば、 以下の原因が考えられます。
起動ディスクが起動プロセスにおいて十分早いタイミングで挿入されていません。 ディスクをそのままにしてコンピュータを再起動してください。
先程の BIOS の変更が適切に行われていません。 正しいオプションを設定してやり直してください。
使用している BIOS は、 希望しているメディアからのブートに対応していません。
FreeBSD は起動を開始します。CDROM から起動している場合、 次のような画面が表示されるでしょう (バージョン情報は省略しています)。
Booting from CD-Rom... 645MB medium detected CD Loader 1.2 Building the boot loader arguments Looking up /BOOT/LOADER... Found Relocating the loader and the BTX Starting the BTX loader BTX loader 1.00 BTX version is 1.02 Consoles: internal video/keyboard BIOS CD is cd0 BIOS drive C: is disk0 BIOS drive D: is disk1 BIOS 636kB/261056kB available memory FreeBSD/i386 bootstrap loader, Revision 1.1 Loading /boot/defaults/loader.conf /boot/kernel/kernel text=0x64daa0 data=0xa4e80+0xa9e40 syms=[0x4+0x6cac0+0x4+0x88e9d] \
フロッピーディスクから起動している場合、 次のような画面が現れるでしょう (バージョン情報は省略しています)。
Booting from Floppy... Uncompressing ... done BTX loader 1.00 BTX version is 1.01 Console: internal video/keyboard BIOS drive A: is disk0 BIOS drive C: is disk1 BIOS 639kB/261120kB available memory FreeBSD/i386 bootstrap loader, Revision 1.1 Loading /boot/defaults/loader.conf /kernel text=0x277391 data=0x3268c+0x332a8 | Insert disk labelled "Kernel floppy 1" and press any key...
上記の説明にしたがって、 boot.flp ディスクを抜き、 kern1.flp ディスクを挿入し、 Enter を押してください。 最初のディスクで起動し、プロンプトが表示されたら、 要求される通りに他のディスクを挿入してください。
CDROM, USB スティックまたはフロッピーのどれから起動するかにかかわらず、 起動プロセスは FreeBSD ブートローダメニューに到達します。
10 秒間待つか、Enter を押してください。
ほとんどの SPARC64® システムは、 ディスクから自動的に起動するように設定されています。 FreeBSD をインストールするには、ネットワークまたは CDROM から起動する必要があり、そのためには PROM (OpenFirmware) に入る必要があります。
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(1) または cu(1) では ~#) を送信して、PROM プロンプトを表示してください。 次のような表示です。
okok {0}
![]()
ここで、CDROM をドライブに挿入し、 PROM プロンプトで boot cdrom と入力してください。
画面に表示される数百行の文字列は (バッファに) 記憶されており、 再表示することが出来ます。
バッファを再表示するには、Scroll Lock キーを押します。 これで、画面をスクロールできます。結果を見るためには、矢印キーもしくは PageUp か PageDown を使います。 Scroll Lock をもう一度押すと、スクロールを停止します。
直ちにこの作業を行って、カーネルがデバイス検出を実行している時に 画面の外に流れた文字列を再表示してください。 Figure 2-2 によく似た画面が現われるでしょうが、 あなたのコンピュータに搭載されているデバイスによって、表示される文字列は異なるでしょう。
Figure 2-2. 古典的なデバイス検出結果の例
avail memory = 253050880 (247120K bytes) Preloaded elf kernel "kernel" at 0xc0817000. Preloaded mfs_root "/mfsroot" at 0xc0817084. md0: Preloaded image </mfsroot> 4423680 bytes at 0xc03ddcd4 md1: Malloc disk Using $PIR table, 4 entries at 0xc00fde60 npx0: <math processor> on motherboard npx0: INT 16 interface pcib0: <Host to PCI bridge> on motherboard pci0: <PCI bus> on pcib0 pcib1:<VIA 82C598MVP (Apollo MVP3) PCI-PCI (AGP) bridge> at device 1.0 on pci0 pci1: <PCI bus> on pcib1 pci1: <Matrox MGA G200 AGP graphics accelerator> at 0.0 irq 11 isab0: <VIA 82C586 PCI-ISA bridge> at device 7.0 on pci0 isa0: <iSA bus> on isab0 atapci0: <VIA 82C586 ATA33 controller> port 0xe000-0xe00f at device 7.1 on pci0 ata0: at 0x1f0 irq 14 on atapci0 ata1: at 0x170 irq 15 on atapci0 uhci0 <VIA 83C572 USB controller> port 0xe400-0xe41f irq 10 at device 7.2 on pci 0 usb0: <VIA 83572 USB controller> on uhci0 usb0: USB revision 1.0 uhub0: VIA UHCI root hub, class 9/0, rev 1.00/1.00, addr1 uhub0: 2 ports with 2 removable, self powered pci0: <unknown card> (vendor=0x1106, dev=0x3040) at 7.3 dc0: <ADMtek AN985 10/100BaseTX> port 0xe800-0xe8ff mem 0xdb000000-0xeb0003ff ir q 11 at device 8.0 on pci0 dc0: Ethernet address: 00:04:5a:74:6b:b5 miibus0: <MII bus> on dc0 ukphy0: <Generic IEEE 802.3u media interface> on miibus0 ukphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto ed0: <NE2000 PCI Ethernet (RealTek 8029)> port 0xec00-0xec1f irq 9 at device 10. 0 on pci0 ed0 address 52:54:05:de:73:1b, type NE2000 (16 bit) isa0: too many dependant configs (8) isa0: unexpected small tag 14 orm0: <Option ROM> at iomem 0xc0000-0xc7fff on isa0 fdc0: <NEC 72065B or clone> at port 0x3f0-0x3f5,0x3f7 irq 6 drq2 on isa0 fdc0: FIFO enabled, 8 bytes threshold fd0: <1440-KB 3.5'' drive> on fdc0 drive 0 atkbdc0: <Keyboard controller (i8042)> at port 0x60,0x64 on isa0 atkbd0: <AT Keyboard> flags 0x1 irq1 on atkbdc0 kbd0 at atkbd0 psm0: <PS/2 Mouse> irq 12 on atkbdc0 psm0: model Generic PS/@ mouse, device ID 0 vga0: <Generic ISA VGA> at port 0x3c0-0x3df iomem 0xa0000-0xbffff on isa0 sc0: <System console> at flags 0x100 on isa0 sc0: VGA <16 virtual consoles, flags=0x300> sio0 at port 0x3f8-0x3ff irq 4 flags 0x10 on isa0 sio0: type 16550A sio1 at port 0x2f8-0x2ff irq 3 on isa0 sio1: type 16550A ppc0: <Parallel port> at port 0x378-0x37f irq 7 on isa0 pppc0: SMC-like chipset (ECP/EPP/PS2/NIBBLE) in COMPATIBLE mode ppc0: FIFO with 16/16/15 bytes threshold plip0: <PLIP network interface> on ppbus0 ad0: 8063MB <IBM-DHEA-38451> [16383/16/63] at ata0-master UDMA33 acd0: CD-RW <LITE-ON LTR-1210B> at ata1-slave PIO4 Mounting root from ufs:/dev/md0c /stand/sysinstall running as init on vty0
丹念に検出結果をチェックして、あなたが予期したすべてのデバイスを FreeBSD が検出できた事を確認してください。デバイスが見つからなかった場合、 検出結果へ表示されません。 カスタムカーネル を構築することで、 サウンドカードのように GENERIC カーネルに含まれていないデバイスのサポートを追加することができます。
デバイス検出後、 Figure 2-3 が表示されます。 矢印キーを使って、国、地域、グループを選択してください。 その後、Enter を押してください。 国を簡単に設定できます。
国に United States を選択した場合には、 標準のアメリカのキーボードマップが使われます。 他の国を選択すると以下のメニューが表示されます。 矢印キーを使って、適切なキーボードマップを選択して Enter を押してください。
国の設定が終わったら、sysinstall メインメニューが表示されます。
sysinstall ユーティリティは FreeBSD プロジェクトが提供するインストール用アプリケーションです。 これは、コンソール上で動作し、 インストールの設定や制御に使えるいくつものメニューや画面に分かれています。
sysinstall のメニューはカーソルキー、 Enter, Tab, Space 等で操作します。 キーの詳しい解説とその意味については sysinstall の使用法に説明されています。
この説明を読むには、Figure 2-5 に示すように、 Usage の項目が強調表示され、 [Select] ボタンが選択されていることを確認して、 Enter を押してください。
メニューシステムの使い方が表示されます。読み終ったら、 Enter を押してメインメニューに戻りましょう。
メインメニューから、カーソルキーで Doc を選択して Enter を押してください。
これでドキュメントメニューが表示されます。
用意されたドキュメントを読むのは大切なことです。
ドキュメントを読むには、カーソルキーで選択して Enter を押してください。読み終えたら、 Enter を押すとドキュメントメニューに戻ります。
メインのインストールメニューに戻るには、カーソルキーで Exit を選択して、 Enter を押してください。
キーボード配列を変更するには、カーソルキーで Keymap を選択して、 Enter を押してください。 使用しているキーボードが、標準ではなかったり、 または US ではない場合に変更作業が必要となります。
上下のカーソルキーでメニュー項目を選択して Space を押せば異なるキーボード配列を選択できます。 もう一度 Space を押すと、選択を解除します。 完了したら、カーソルキーで [ OK ] を選択して Enter を押してください。
このスクリーン表示では、リストの一部しか表示されていません。 Tab を押して [ Cancel ] を選択すると、 デフォルトのキーマップを使用して、 メインインストールメニューに戻ります。
Options を選択して、 Enter を押してください。
ほとんどのユーザーにはデフォルトの値でよく、変更する必要はありません。 リリース名は、インストールするバージョンによって変わります。
選択された項目の説明が、画面の下部に青く強調表示されます。 オプションの 1 つは Use Defaults という、 すべての値を初期値に戻すものであることに気をつけてください。
F1 を押すと、 さまざまなオプションについての説明を読むことができます。
Q を押すと、 メインインストールメニューに戻ります。
UNIX や FreeBSD が初めての人には Standard インストールがお奨めです。 カーソルキーで Standard を選択して、 Enter を押してインストールを始めてください。
最初の課題は、FreeBSD 用にディスク領域を割り当て、 sysinstall が使えるようにラベルを作成することです。 そうするためには、FreeBSD がディスク上にどのような情報があることを前提としているかを知らなければなりません。
FreeBSD をインストールして設定する前に、 特に複数のハードディスクを持っているならば気をつけておかなければならない重要なことがあります。
MS-DOS や Microsoft Windows のような BIOS に依存したオペレーティングシステムが動いている PC では、 BIOS がディスクドライブの順序を構成でき、 OS はその変化に追従します。これにより、ユーザはいわゆる “プライマリーマスタ” 以外のディスクから起動することができます。 この仕組みを用いればシステムのバックアップを取る最も簡単で安価な方法を構築できます。 もう一つ同じディスクを買い、 Ghost® や XCOPY を用いて一つ目のディスクから二つめのディスクへのコピーを定期的に取ればいいのです。 そして、一つ目のディスクに障害が起きたり、ウィルスに感染したり、 オペレーティングシステムの不具合でめちゃくちゃにされてしまった時には、 BIOS に対してドライブを論理的に交換するように指示することで簡単に復旧できるのです。 この方法はドライブのケーブルを交換するのと同じようなことなのですが、 ケースを開ける必要がありません。
SCSI コントローラを備えたもっと高価なシステムでは、 しばしば BIOS に拡張が施されており、同じように 7 台までのドライブの順番を組み換えることができるようになっています。
以上のような機能を便利に使っているユーザは、 FreeBSD では同じような結果にならないことに驚くかもしれません。FreeBSD は BIOS を利用しないため、“論理 BIOS ドライブマッピング” については知らないのです。 このため、特にいくつかのドライブが同じジオメトリを持っている時に、 そしてまたあるものをもう一つのクローンとして使っている時に、 非常にややこしい状況になり得ます。
FreeBSD を使う時は、 インストール前にドライブの番号付けが自然なものになるように、 必ず BIOS の設定を忘れずに戻しておきましょう。 もしドライブの番号付けを変更する必要がある場合には、 ケースを開けジャンパーやケーブルを移動するというハードウェア的なやりかたをとってください。
Note: この段階でなにも変更を加えないとしても、 そのことはディスクに書きこまれるでしょう。 もし間違いをしたと考えてもう一度やり直したいのなら、 メニューを使って sysinstall を終了してやり直すか、U を押して Undo オプションを利用してください。 なにをすればいいか分からなくなって、終了する方法が分からないときは、 いつでもコンピュータを切ることができます。
sysinstall メインメニューでスタンダードインストールを選択したあとには、 次のメッセージが表示されるでしょう。
Message
In the next menu, you will need to set up a DOS-style ("fdisk")
partitioning scheme for your hard disk. If you simply wish to devote
all disk space to FreeBSD (overwriting anything else that might be on
the disk(s) selected) then use the (A)ll command to select the default
partitioning scheme followed by a (Q)uit. If you wish to allocate only
free space to FreeBSD, move to a partition marked "unused" and use the
(C)reate command.
[ OK ]
[ Press enter or space ]
指示されたとおり Enter を押してください。 次に、デバイスの走査を実行したときにカーネルが見付けた、 すべてのハードドライブのリストが表示されるでしょう。 Figure 2-13 は IDE ディスクを二つもつシステムの例です。 これらは ad0 および ad2 と名付けられています。
なぜ ad1 がここに表示されないか不思議に思うかもしれません。 なぜ忘れられたのか?
IDE ハードディスクを一つ目はプライマリ IDE コントローラのマスタとして、 二つ目はセカンダリ IDE コントローラのマスタとして二つ接続している場合、 なにが起こるか考えてください。 もし FreeBSD がこれらを ad0 と ad1 のように、 見付けた順番で番号をつけたとしてもすべては動作するでしょう。
しかし、その後プライマリ IDE コントローラのスレーブとして 三つ目のディスクを追加したとしたら、 それはたった今 ad1 となり、 以前の ad1 は ad2 となるでしょう。 デバイス名 (ad1s1a のような) はファイルシステムを見つけるのに使われるので、 ファイルシステムのいくつかは突然正しく現れなくなるかもしれず、 FreeBSD の設定を変更する必要があるでしょう。
これを解決するために、ディスクが見つかった順番ではなく、 どこに接続されているかということに基づいて IDE ディスクを名前づけするようにカーネルを設定できます。 この機構によって、セカンダリ IDE コントローラのマスタディスクは、 たとえ ad0 または ad1 デバイスがないとしてもいつでも ad2 になるでしょう。
この設定は FreeBSD カーネルの標準設定です。 これがこの画面で ad0 および ad2 を表示する理由です。 このスクリーンショットが得られたマシンには、 IDE コントローラの両方のマスタチャネルにディスクがあり、 スレーブチャネルにはありません。
FreeBSD をインストールしたいディスクを選択して、 [ OK ] を押してください。 Figure 2-14 のような表示とともに fdisk が起動するでしょう。
fdisk の画面は三つのセクションに分かれます。
一つ目のセクションは、これは表示の先頭二行にわたっているのですが、 現在選択されているディスクの詳細を表示します。 ディスクの詳細には FreeBSD でのデバイス名、ディスクのジオメトリ、 そしてディスクの全容量が含まれます。
二つ目のセクションは現在ディスク上にあるスライスを表示します。 スライスの開始セクタと終了セクタ、大きさ、FreeBSD 上での名前、 種類とサブタイプが表示されます。 この例では、PC 上のディスクレイアウト機能が生み出した、 未使用の小さなスライスを二つ表示しています。 また大きな FAT スライスも一つ表示しています。これはほとんどの場合、 MS-DOS または Windows において C: ドライブ および他のドライブ名の拡張スライスとして現れます。
三つ目のセクションは fdisk において利用可能なコマンドを表示します。
今から行うことは、 あなたがどのようにディスクを分割したいかによります。
FreeBSD をディスク全体で使いたいなら、 Use Entire Disk オプションを表す A キーを押すことができます。 このことは sysinstall がインストールプロセスの残りを続けることにあなたが同意したとき、 このディスクのすべてのデータを削除するでしょう。 存在しているスライスは取り除かれ、 unused の小さな領域 (PCディスクレイアウト機能の副産物) と、 FreeBSD のための大きなスライスへ置きかわるでしょう。 これを行ったら、次に方向キーを使って新しく作成された FreeBSD スライスを選択し、スライスに起動可能の印をつけるために S キーを押してください。 そのとき、画面の見た目は Figure 2-15 とよく似たものとなるでしょう。 Flags 列の A に注意してください。 これはこのスライスが アクティブ で、 ここから起動することを示します。
FreeBSD のための空き領域を作成するために、 存在しているスライスを削除しようとしているのなら、 方向キーをつかってスライスを選択して D キーを押してください。 それから C キーを押すと、 作成したいスライスの大きさの入力を促されます。 適切な数字を入力して Enter キーを押してください。 この欄に表示されているデフォルト値は、スライスに対して割り当てることのできる最大の値です。 この値は、割り当てられていない領域の連続したブロック、または、ハードディスクの全サイズです。
FreeBSD のための空き領域を既に作成しているなら (おそらく PartitionMagic などのツールを利用したのでしょう) 、 そのときは C キーを押して新しいスライスを作成できます。 再び、作成したいスライスの大きさの入力を促されるでしょう。
終了したら Q キーを押します。 あなたの変更は sysinstall 内に保存されるでしょう。 しかし、まだディスクには書きこまれません。
ブートマネージャをインストールするかどうか考えましょう。一般的に、次の場合は FreeBSD ブートマネージャをインストールするべきです。
二つ以上のドライブがあり、 一番目のドライブ以外に FreeBSD をインストールした場合
FreeBSD を同じディスク内に他の OS と共存させてインストールしており、 コンピュータを起動する際に FreeBSD か他の OS かを選択したい場合
もし、コンピュータに FreeBSD のみをインストールするのであれば、 最初のハードディスクにインストールし、 Standard ブートマネージャを選択してください。 もし、FreeBSD をブート可能なサードパーティ製のブートマネージャを使うのであれば、 None を選択してください。
選択をして Enter キーを押してください。
F1 キーを押すと表示されるヘルプ画面では、 ハードディスクを OS 間で共有する場合に起こり得る問題について議論しています。
二つ以上ドライブがある場合、 ブートマネージャを選択した後、ドライブ選択画面に戻ります。 FreeBSD を二つ以上のディスクにインストールしたいのなら、 そのときはここで他のディスクを選択し、 fdisk を用いてスライス作成の作業を繰りかえすことができます。
Important: 一番目以外のドライブに FreeBSD をインストールするのであれば、 両方のドライブに FreeBSD のブートマネージャをインストールする必要があります。
Tab キーを押すことで、 最後に選択したドライブと [ OK ] および [ Cancel ] の間を切りかえられます。
[ OK ] に移るために Tab キーを一度押し、 それからインストールを続けるために Enter キーを押してください。
さて、作成したばかりのスライス内にパーティションをいくつか作成しなければなりません。 それぞれのパーティションには a から h までの文字がつけられ、 b, c そして d パーティションは守るべき慣習的な意味を持っていることを忘れないでください。
特定のアプリケーションは、特別のパーティション構成 (特に二つ以上のディスクにわたってパーティションを構成している場合) から利益を得ることができます。 しかしこのことについては、はじめて FreeBSD をインストールする場合、 ディスクをどのようにパーティションに区切るか、 ということをあまり大げさに考えることはありません。 FreeBSD をインストールして使い方を学びはじめることの方がより重要です。 OS により詳しくなったときに、パーティション構成を変更するために FreeBSD をいつでも再インストールできます。
以下は四つのパーティション -- 一つはスワップ領域、 三つはファイルシステム、の構成です。
Table 2-2. 一つ目のディスクのパーティションレイアウト
| パーティション | ファイルシステム | サイズ | 説明 |
|---|---|---|---|
| a | / | 1 GB | これはルートファイルシステムです。 他のファイルシステムはすべてこの下のどこかにマウントされるでしょう。 1 GB はこのファイルシステムに手ごろなサイズです。 通常の FreeBSD インストールがここに約 128 MB のデータを配置するように、 ここにはあまり多くのデータを格納しないでしょう。 残りの領域は一時的なデータのためにあり、そして FreeBSD の将来のバージョンが / により多くの領域を必要とした場合の拡張領域として残します。 |
| b | なし | メモリの 2-3 倍 |
b パーティションには、 システムのスワップ領域が保持されています。 スワップ領域の正しい容量を決めることは、 ちょっとした芸術かもしれません。 確実な経験則は、物理的なメモリ (RAM) の 2-3 倍のサイズのスワップ領域とするように、としています。 また、最低 64 MB のスワップを確保するといいでしょう。 したがって、あなたのコンピュータが 32 MB 未満のメモリを搭載している時は、 スワップ領域を 64 MB にしてください。 二つ以上のディスクがあるときには、 それぞれのディスクにスワップを置くことができます。 FreeBSD はそれぞれのディスクをスワップに用い、 スワップ動作を効果的に高速化させるでしょう。 この場合、必要とするスワップサイズの合計を計算し (たとえば 128 MB)、 それぞれのディスクに置くスワップサイズを求めるために、 あなたの持っているディスク数 (たとえば二つ) で割ってください。 この例の場合は、 一つのディスクごとに 64 MB のスワップとなります。 |
| e | /var | 512 MB 〜 4096 MB | /var ディレクトリには、ログファイルやその他の管理ファイルといった、 絶えず変化するファイルが保存されています。 これらのファイルの多くは FreeBSD の毎日の動作の間に広範囲にわたって読みこまれ、 書きこまれます。 (訳注: /とは) 別のファイルシステムにこれらのファイルを置くことは、 異なったアクセス頻度のディレクトリ内にある他のファイルに影響を与えずに、 FreeBSD がこれらのファイルへのアクセスを最適化することを可能とします。 |
| f | /usr | ディスクの残り (少なくとも 8 GB) | 他のすべてのファイルは、主に /usr およびそのサブディレクトリ内に保存されます。 |
Warning: 上記のサイズの値は、例として載せたものです。 経験のあるユーザのみが使ってください。 FreeBSD パーティションエディタの Auto Defaults で選択できる自動パーティションレイアウトが推奨されています。
二つ以上のディスクに FreeBSD をインストールしようとしているのなら、 設定した他のスライスにもパーティションを作成しないといけません。 最も簡単な方法は、 それぞれのディスクに二つのパーティションを作成することです。 一つはスワップ領域、 そして一つはファイルシステムのためのパーティションです。
Table 2-3. 残りのディスクのパーティション構成
| パーティション | ファイルシステム | サイズ | 説明 |
|---|---|---|---|
| b | なし | 説明を参照 | すでに議論したように、 スワップ領域をそれぞれのディスクにわたって分割できます。 たとえ a パーティションが (訳注: そのスライスに) ないとしても、 慣習により、スワップ領域は b パーティションとなります。 |
| e | /diskn | ディスクの残り | ディスクの残りは一つの大きなパーティションとなります。 これは e パーティションの代わりに、 a パーティション上へ簡単に置くことができるかもしれません。 しかしながら慣習により、スライス上の a パーティションはルート (/) ファイルシステムとなるファイルシステムのために予約されています。 あなたはこの慣習にしたがう必要はありませんが sysinstall が代わりにやってくれます。 したがってこのことにより、 インストールが少しだけより簡単になります。 このファイルシステムをマウントする場所をどこでも選択できます。 この例では、これらを /diskn ディレクトリとしてマウントするよう提案しています。 n はそれぞれのディスクごとに変更する数字です。 しかしあなたが望むなら他の構成を使用できます。 |
パーティション構成を決定したら、 今から sysinstall を用いて作成できます。 このメッセージが現れるでしょう。
Message
Now, you need to create BSD partitions inside of the fdisk
partition(s) just created. If you have a reasonable amount of disk
space (1GB or more) and don't have any special requirements, simply
use the (A)uto command to allocate space automatically. If you have
more specific needs or just don't care for the layout chosen by
(A)uto, press F1 for more information on manual layout.
[ OK ]
[ Press enter or space ]
disklabel と呼ばれる FreeBSD パーティションエディタをはじめるために Enter キーを押してください。
Figure 2-18 は disklabel をはじめて起動したときの画面表示です。 この画面は三つのセクションに分かれています。
はじめの数行は現在作業しているディスクの名前、 そして作成しようとしているパーティションを含むスライスを表示します (この時点で disklabel はスライスのことをスライス名ではなくパーティション名と呼びます) 。 この画面はスライス内の空き領域の合計も表示しています。 この空き領域はスライス内に存在していて、 しかしまだパーティションに割り当てられていない領域です。
画面の中段は作成したパーティションを表示しています。 それぞれのパーティションが含むファイルシステムの名前、サイズ、 ファイルシステム作成にまつわるいくつかのオプションが表示されます。
画面の下段にある三つ目のセクションは disklabel で有効なキー操作を表示します。
disklabel は自動的にパーティションを作成し、 デフォルトのサイズを割りあてることができます。 デフォルトのサイズは、 ディスクのサイズからパーティションサイズを決めるアルゴリズムによって計算されます。 A キーを押して、今試してください。 Figure 2-19 とよく似た画面となるでしょう。 あなたが使用しているディスクのサイズに依存しているので、 デフォルトは希望しているものになるかもしれませんし、 ならないかもしれません。 デフォルトをそのまま受け入れる必要はないので、 このことは問題になりません。
Note: デフォルトのパーティション構成は /tmp ディレクトリに / パーティションの一部ではなく、 それ自身のパーティションを割り当てます。 このことは、一時ファイルによって / パーティションがあふれてしまうことを防ぐのに役立ちます。
デフォルトのパーティションを使わないで、 あなた自身のパーティション構成に置き換えるには、 方向キーを用いて、一番目のパーティションを選択し、 削除するために D キーを押してください。 提案されたすべてのパーティションを削除するために、 これを繰り返してください。
一番目のパーティション (/ としてマウントされる a パーティション -- ルート) を作成するには、 画面の先頭の適切なディスクスライスが選択されていることを確認して、 C キーを押してください。 新しいパーティションのサイズの入力をうながすダイアログが現れるでしょう (Figure 2-20)。 使用したいサイズをブロックの数で入力できます。 または、 メガバイト単位で指定する M、 ギガバイト単位で指定する G、 シリンダ単位で指定する C を数の後につけて入力できます。
(訳注: ダイアログに) 表示されるデフォルトのサイズは、 スライスに残っているサイズのパーティションを作成するでしょう。 上述したパーティションサイズを用いる場合は Backspace キーを用いて表示されている数字を削除し Figure 2-21 のように 512M と入力してください。そして [ OK ] を押してください。
パーティションのサイズを入力すると、 次にこのパーティションはファイルシステムなのか、 それともスワップ領域なのかを聞かれるでしょう。 Figure 2-22 のようにダイアログが表示されます。 この一番目のパーティションにはファイルシステムが含まれるので、 FS を選択し、 Enter キーを押します。
ファイルシステムを作成しようとしているので、 最後に disklabel に対して、 このファイルシステムがどこにマウントされるか教えなければなりません。 Figure 2-23 のようなダイアログが表示されます。 ルートファイルシステムのマウントポイントは / なので、/ と入力し Enter キーを押します。
その後、 新しく作成したパーティションを表示するために画面は更新するでしょう。 他のパーティションを作成するために、この作業を繰りかえしてください。 スワップパーティションはマウントされないので、 スワップパーティションを作成したときには、 ファイルシステムのマウントポイントの入力は促されないでしょう。 最後のパーティションの /usr を作成するときは、 スライスに残っているサイズを使用するために、 表示されたサイズをそのままにしておくことができます。
最終的な FreeBSD ディスクラベルエディタ の画面は、 選択された数値は異なっているかもしれませんが、 Figure 2-24 のようになるでしょう。 Q キーを押して終了します。
インストールするディストリビューションセットを選択します。 これは使おうとするシステムや利用可能なディスクの容量に依存します。 最小構成のインストールから全てのインストールまでのオプションがあらかじめ用意されています。 UNIX や FreeBSD に慣れてない人はほぼ間違いなくこれらの用意されたオプションのうちの 1 つを選ぶべきです。 ディストリビューションセットのカスタマイズは、主としてより経験を積んだユーザーのためにあります。
F1 キーを押すとそのディストリビューションセットのオプションやそれらが何を含んでいるかというより詳しい情報が表示されます。 ヘルプを見終わった後には、 Enter キーを押すことでディストリビューションの選択メニューに戻ることができます。
グラフィカルユーザインタフェースを望む場合には、 FreeBSD のインストール後に X サーバについての設定とデフォルトデスクトップの選択を行ってください。 X サーバのインストールや設定に関する詳細な情報は Chapter 6 にあります。
カスタムカーネルをコンパイルする予定ならばソースコードを含むオプションを選択します。 なぜカスタムカーネルを構築するのか、またカスタムカーネルの構築方法に関しては Chapter 9 を参照してください。
当然ながら、全てを含むシステムが最も多くのことを行えます。 十分なディスクスペースがあるならば、Figure 2-25 で示されるように All を矢印キーで選択し、 Enter を押します。 ディスクスペースに懸念があるならば、状況に合ったよりふさわしいオプションを選択します。 インストール後にそのほかのディストリビューションを加えることができるので、 完璧な選択をしようとして悩まないでください。
お望みのディストリビューションを選ぶと、 FreeBSD Ports Collection をインストールするかどうかを尋ねてきます。 Ports Collection とは、簡単にソフトウェアをインストールする方法です。 これはソフトウェアをコンパイルするのに必要なソースコードを含みません。 その代わり、サードパーティ製のソフトウェアパッケージを自動的にダウンロード、コンパイル、インストールを行うためのファイルの集まりです。 Chapter 5 で Ports Collection の使用方法が解説されています。
インストールプログラムはディスクに十分な空き容量があるかどうかをチェックしませんので、 十分な空き容量がある場合のみこのオプションを選択してください。 FreeBSD 9.0 では、FreeBSD Ports Collection は、約 500 MB のディスク容量を必要とします。 より最新の FreeBSD のバージョンでは、安全のためもう少し大きなサイズを想定してください。
User Confirmation Requested
FreeBSD Ports Collection をインストールしますか?
これをインストールすることにより、23,000 以上の移植ソフトウェアパッケー
ジにアクセスすることができます。これは、「クリーンな」状態では約 500 MB
のディスク容量を占めますが、配布されている tarball をダウンロードしていくと、更に
大きな領域を占めることになります (ただし、FreeBSD の CD/DVD で配布されている
extra disk を持っていて、それを /cdrom にマウントして使用する場合には、
さほど問題にはならないでしょう) 。
Ports Collection は、非常に有用な資源であり、/usr パーティションに置
いておくだけの価値は十分にあります。この質問には Yes と答えるのが賢明で
しょう。
Ports Collection に関するさらに詳しい情報や、最新の Ports に関しては、
以下の場所を参照してください。
http://www.FreeBSD.org/ports
[ Yes ] No
Ports Collection をインストールするなら [ Yes ] を、このオプションを選択しないのであれば [ No ] を矢印キーで選んでください。 Enter キーを押して先に進みます。 ディストリビューションの選択メニューが再度表示されます。
オプションを選択したら矢印キーで Exit を選び、[ OK ] がハイライトされていることを確認し、 Enter を押して先に進んでください。
CD-ROM または DVD からインストールする場合、矢印キーを使って Install from a FreeBSD CD/DVD を選んで下さい。 [ OK ] が選択されていることを確認して、 Enter キーを押しインストールを開始してください。
そのほかの方法でインストールする場合には、 適切なオプションを選択しその後の指示に従ってください。
F1 キーを押すとインストールメディアに関するオンラインヘルプが表示されます。 メディア選択メニューに戻るには Enter キーを押してください。
FTP インストールモード: FTP 経由のインストールを行う場合、active FTP, passive FTP, HTTP proxy 経由の三種類の FTP インストールモードを選択することができます。
- FTP Active: Install from an FTP server
すべての FTP 転送の際に “Active” モードを使用します。 ファイアウォール内部のマシンではうまく動きませんが、 多くの場合 passive モードに対応していないような古い FTP サーバでも動作します。 passive モードでの FTP 転送 (こちらがデフォルトです) に失敗した場合には、active モードで確かめましょう!
- FTP Passive: Install from an FTP server through a firewall
このオプションでは、 sysinstall は、すべての FTP 転送の際に “Passive” モードを使用します。 このモードを使用すると、 ランダム TCP ポートによる外部からの接続を許可していないファイアウォールを越えることができるようになります。
- HTTP proxy 経由の FTP: Install from an FTP server through a http proxy
この方法では、sysinstall は、 (ウェブブラウザと同様に) HTTP プロトコルを使って proxy サーバに接続し、FTP の操作を実現します。 proxy サーバは FTP 要求を (訳注: HTTP から FTP に) 変換して FTP サーバに送るため、ファイアウォールが FTP 接続を禁止していても、HTTP proxy サーバが提供されていれば ファイアウォールを超えた FTP 接続を行なうことが可能です。 この方法を用いる場合には、FTP サーバの他に proxy サーバを指定する必要があります。
通常 proxy FTP サーバに対しては、ユーザ名の一部として 実際に接続したいサーバの名前を “@” 記号に続けて与える必要があります。 そうすると proxy サーバは本当のサーバの“ふり” をするようになります。 たとえば、1234 ポートで要求を待つ proxy FTP サーバ foo.example.com を使って、 ftp.FreeBSD.org からインストールしたいとします。
この場合、オプションメニューで FTP ユーザ名に ftp@ftp.FreeBSD.org を、 パスワードとしてあなたのメールアドレスを設定します。 そして、インストールメディアに FTP (proxy サーバが対応しているならば passive FTP)、URL として ftp://foo.example.com:1234/pub/FreeBSD を指定します。
このように設定すると、 ftp.FreeBSD.org の /pub/FreeBSD に対する FTP 要求については foo.example.com が代理で処理をおこなうことになり、その マシンからインストールすることができます (インストール時の要求に応じて ftp.FreeBSD.org からファイルを取り寄せます)。
これで良いと思ったら、ここでインストールを進めることができます。 インストールするためにおこなうハードディスクに対する変更をやめるなら、 ここが最後のチャンスでもあります。
User Confirmation Requested
Last Chance! Are you SURE you want to continue the installation?
If you're running this on a disk with data you wish to save then WE
STRONGLY ENCOURAGE YOU TO MAKE PROPER BACKUPS before proceeding!
We can take no responsibility for lost disk contents!
[ Yes ] No
[ Yes ] を選択して Enter キーを押すことでインストールは進みます。
インストールにかかる時間は、どのディストリビューションを選んだか、 どのインストールメディアを使ったか、 そしてコンピュータの速度にも依存します。 インストール状況に従って、メッセージが逐次表示されます。
次のメッセージが表示されればインストールは終わりです。
Message
Congratulations! You now have FreeBSD installed on your system.
We will now move on to the final configuration questions.
For any option you do not wish to configure, simply select No.
If you wish to re-enter this utility after the system is up, you may
do so by typing: /usr/sbin/sysinstall.
[ OK ]
[ Press enter or space ]
Enter キーを押せばインストール後の設定画面に 移ることができます。
[ No ] を選択して Enter キーを押すと、インストールを中断して システムには何の変更もおこないません。 そのときには次のメッセージが表示されます。
Message
Installation complete with some errors. You may wish to scroll
through the debugging messages on VTY1 with the scroll-lock feature.
You can also choose "No" at the next prompt and go back into the
installation menus to retry whichever operations have failed.
[ OK ]
何もインストールされなかったため、このメッセージが表示されています。 Enter キーを押しますと、 インストーラを終了するためにメインメニューに戻ります。
インストール完了後に数々のオプション設定を行います。 オプションは、インストールした FreeBSD を起動する前に configuration の項目に入りなおすか、再起動後に sysinstall の中にある Configure の項目で設定することができます。
もし、FTP インストールのために PPP を設定したのならば、 この画面は表示されず、前項で述べたように後から設定できます。
LAN の詳細情報と、FreeBSD のゲートウェイ・ルータの設定については 高度なネットワーク の章を参照してください。
User Confirmation Requested
Would you like to configure any Ethernet or PPP network devices?
(訳:イーサネットや SLIP/PPP ネットワークデバイスを設定したいですか?)
[ Yes ] No
ネットワークデバイスを設定するには [ Yes ] を選び、Enter キーを押します。 設定しないのであれば、[ No ] を選びます。
設定したいインタフェースを矢印キーで選び、Enter キーを押します。
User Confirmation Requested
Do you want to try IPv6 configuration of the interface?
(訳:このインタフェース上で IPv6 の設定を行ないたいですか?)
Yes [ No ]
プライベートな LAN において、現行のインターネットプロトコル (IPv4) で十分なのであれば、矢印キーで [ No ] を選び Enter を押してください。
RA サーバと IPv6 ネットワークで接続しているのであれば、 [ Yes ] を選んで Enter を押してください。 すると、数秒間 RA サーバを検索します。
User Confirmation Requested
Do you want to try DHCP configuration of the interface?
(訳:このインタフェース上で DHCP 設定を行ないたいですか?)
Yes [ No ]
もし、DHCP (Dynamic Host Configuration Protocol) が必要なければ、矢印で [ No ] を選び Enter を押してください。
[ Yes ] を選んだ場合、 dhclient を実行します。設定が成功すると、 ネットワーク設定情報が自動補完されます。 詳細については Section 22.8 を参照してください。
次のネットワーク設定画面では、LAN 用ゲートウェイシステムのイーサネットデバイス構成が表示されます。
Tab をつかって項目を選び、 適切な情報を入力してください。
完全修飾されたホスト名。この例では、k6-2.example.com。
コンピュータのドメイン名。この例では example.com。
ローカル以外のホストへパケットを送る際に使う IP アドレスです。 もしコンピュータがネットワーク上にいる場合は入力する必要があります。 このコンピュータがネットワークのインターネットゲートウェイである場合には この項目は空白のままにします。 IPv4 ゲートウェイはデフォルトゲートウェイまたはデフォルトルートとも呼ばれます。
ローカル DNS サーバの IP アドレスを指定します。 ローカル DNS サーバがプライベート LAN 上にないので、 プロバイダの DNS サーバ (208.163.10.2) を指定しました。
このインタフェースで使う IP アドレスは 192.168.0.1。
この例では、LAN で使うアドレスブロックは、 192.168.0.0 - 192.168.0.255 です。 ネットマスクは (255.255.255.0) です。
あなたが加えたい ifconfig への オプションを入力してください。今回はありませんでした。
終了するときは、Tab キーを使って [ OK ] を選び、 Enter を押します。
User Confirmation Requested
Would you like to bring the ed0 interface up right now?
(訳:このインタフェースへの設定を今すぐ有効にしますか?)
[ Yes ] No
[ Yes ] を選んで Enter を押すと、ネットワークへの設定を行い、利用可能な状態にします。 しかしながら、コンピュータをまだ再起動する必要があるので、 インストールの間には、多くのことは出来ません。
User Confirmation Requested
Do you want this machine to function as a network gateway?
(訳:このマシンにネットワークゲートウェイ機能を搭載しますか?)
[ Yes ] No
もし、マシンが LAN のゲートウエイであり、他マシン間の パケットを転送している場合は、[ Yes ] を選んで Enter を押します。 もし、マシンがネットワーク上のノードである場合、[ No ] を選び Enter を押して先に進んでください。
User Confirmation Requested
Do you want to configure inetd and the network services that it provides?
(訳:inetd 及び提供するネットワークサービスの設定を行いますか?)
Yes [ No ]
もし [ No ] を選んだ場合には、さまざまなサービス、 たとえば telnetd などは有効になりません。 これは、リモートユーザがこのマシンに対して telnet を使えないことを意味します。 ローカルユーザは未だにリモートマシンへのアクセスに telnet を重宝しているでしょう。
これらのサービスは、インストール後に /etc/inetd.conf を自分の好きなテキストエディタで編集することで有効になります。 詳しくは inetd の章 を見てください。
これらのサービスを利用したいと考えているならば, [ Yes ] を選びインストールしてください。 追加の確認事項が表示されるでしょう。
User Confirmation Requested
The Internet Super Server (inetd) allows a number of simple Internet
services to be enabled, including finger, ftp and telnetd. Enabling
these services may increase risk of security problems by increasing
the exposure of your system.
(訳:inetd は finger,ftp,telnet を含む数多くのインターネットサービスを
許可します。この機能を有効にするとシステムへのアクセスの増加による
セキュリティ上のリスクが増加することがあります。)
With this in mind, do you wish to enable inetd?
[ Yes ] No
[ Yes ] を選んで続けます。
User Confirmation Requested
inetd(8) relies on its configuration file, /etc/inetd.conf, to determine
which of its Internet services will be available. The default FreeBSD
inetd.conf(5) leaves all services disabled by default, so they must be
specifically enabled in the configuration file before they will
function, even once inetd(8) is enabled. Note that services for
IPv6 must be seperately enabled from IPv4 services.
Select [Yes] now to invoke an editor on /etc/inetd.conf, or [No] to
use the current settings.
(訳:inetd(8) が利用可能にするインターネットサービスの種類については
設定ファイル (/etc/inetd.conf) に依存します。FreeBSD に付属する
inetd.conf(5) の初期設定は、すべてのサービスが無効になっています。
従って、inetd(8) を一度有効にした後に設定ファイルの中で
必要なサービスを有効にする必要があります。なお、IPv4 サービス側から
IPv6 のサービスを個別に設定する必要があることに注意してください。
[Yes] を選ぶと /etc/inetd.conf をエディタで編集できます。
[No] を選ぶと、現在の設定をつかいます。)
[ Yes ] No
[ Yes ] を選ぶと、 先頭行から設定がはじまります。 # を削除することでサービスを許可することができます。
希望するサービスを追加したら、Esc を押し、 表示されるメニューで exiting and saving the changes (変更を保存して終了) を選んでください。
User Confirmation Requested
Would you like to enable SSH login?
Yes [ No ]
[ Yes ] を選択すると、OpenSSH のデーモンである sshd(8) が有効になります。 コンピュータへの安全なリモートアクセスを許可します。 OpenSSH のより詳しい情報については、 Section 15.10 をご覧ください。
User Confirmation Requested
Do you want to have anonymous FTP access to this machine?
Yes [ No ]
デフォルトの [ No ] を選択して Enter を押してください。 アカウントを持ったユーザは、パスワードを使い FTP でコンピュータにアクセスできます。
anonymous FTP の接続を許可すると、 誰でもコンピュータにアクセスできるようになります。 このオプションを有効にする前に、 セキュリティ上の問題点を検討してください。 セキュリティに関する詳細については、 Chapter 15 をご覧ください。
anonymous FTP を有効にするには、矢印キーを使って [ Yes ] を選択し、Enter を押してください。以下のような確認事項が表示されるでしょう。
User Confirmation Requested
Anonymous FTP permits un-authenticated users to connect to the system
FTP server, if FTP service is enabled. Anonymous users are
restricted to a specific subset of the file system, and the default
configuration provides a drop-box incoming directory to which uploads
are permitted. You must separately enable both inetd(8), and enable
ftpd(8) in inetd.conf(5) for FTP services to be available. If you
did not do so earlier, you will have the opportunity to enable inetd(8)
again later.
If you want the server to be read-only you should leave the upload
directory option empty and add the -r command-line option to ftpd(8)
in inetd.conf(5)
Do you wish to continue configuring anonymous FTP?
[ Yes ] No
このメッセージは、/etc/inetd.conf においても FTP サービスを有効にする必要があることを示しています。 もし、anonymous FTP 接続を許可するのであれば、Section 2.10.3 をご覧ください。 [ Yes ] を選び Enter を押して先に進むと、 以下の画面が表示されます。
Tab を使って項目を選び、 適切な情報で埋めてください。
anonymous FTP ユーザに対して割り当てられるユーザ ID。 アップロードされるすべてのファイルの所有者はこの ID となります。
anonymous FTP ユーザが所属するグループ
/etc/passwd 内のユーザ情報を表す文字列
anonymous FTP で利用可能なファイルの置き場
anonymous FTP ユーザによりアップロードされるファイルが置かれる場所
デフォルトでは、FTP のルートディレクトリは /var に設定されています。 FTP が必要とする十分な容量が用意されていない場合には、 /usr ディレクトリを使って、 FTP のルートディレクトリを /usr/ftp と設定できます。
十分な設定ができたら、 Enter を押して先に進んでください。
User Confirmation Requested
Create a welcome message file for anonymous FTP users?
[ Yes ] No
[ Yes ] を選択し Enter を押すと、 メッセージ編集用のエディタが自動的に起動します。
これは ee と呼ばれるテキストエディタです。 このエディタでメッセージを変更するか、または、 後で希望するエディタを使ってメッセージを変更してください。 エディタの画面の下に表示されるファイルの名前、場所に注意してください。
Esc を押すと、ポップアップメニューが表示されます。 デフォルトは a) leave editor です。 Enter を押して終了し、先に進んでください。 変更を行った場合には、もう一度 Enter を押して、変更点を保存してください。
ネットワークファイルシステム (NFS) を用いると、 ネットワークを介してファイルの共有を行うことができます。 コンピュータをサーバ、クライアントまたは両方に設定できます。 より詳しい情報については Section 22.4 を参照してください。
User Confirmation Requested
Do you want to configure this machine as an NFS server?
Yes [ No ]
ネットワークファイルシステムサーバの機能を必要としないのであれば、 [ No ] を選択し Enter を押してください。
[ Yes ] を選んだ場合には、 exports ファイルを作成する必要があることを示すメッセージが表示されます。
Message
Operating as an NFS server means that you must first configure an
/etc/exports file to indicate which hosts are allowed certain kinds of
access to your local filesystems.
Press [Enter] now to invoke an editor on /etc/exports
[ OK ]
Enter を押して先に進んでください。 exports ファイルの作成、 編集するためにテキストエディタが立ち上がります。
ここで、実際共有されるファイルシステムを追加するか、 後で希望するテキストエディタを使って追加してください。 エディタのスクリーンの下に表示されているファイル名、 位置の情報に注意してください。
Esc を押すとポップアップメニューが表示されます。 デフォルトは a) leave editor です。 Enter を押して終了し、先に進んでください。
利用しているコンピュータが NFS クライアントによって NFS サーバにアクセスできるようになります。
User Confirmation Requested
Do you want to configure this machine as an NFS client?
Yes [ No ]
矢印キーを使って、適切に [ Yes ] または [ No ] を選択してください。
システムコンソールをカスタマイズするオプションがあります。
User Confirmation Requested
Would you like to customize your system console settings?
[ Yes ] No
[ Yes ] を選択し、Enter を押してオプションの確認および設定をしてください。
良く使われるオプションはスクリーンセーバです。 矢印キーを使って Saver を選択し、 Enter を押してください。
矢印キーを使って、お望みのスクリーンセーバを選択し、 Enter を押してください。 システムコンソールの設定メニューが再び表示されます。
デフォルトの時間の間隔は 300 秒です。 時間の間隔を変更する場合には、 もう一度 Saver を選択してください。 スクリーンセーバのオプションメニューにて、 矢印キーで Timeout を選択して Enter を押してください。 ポップアップメニューが表示されます。
値を変更したら [ OK ] を選択し、 Enter を押して、 システムコンソールの設定メニューに戻ってください。
Exit を選択し、Enter を押して、インストール後の設定を続けてください。
使用しているコンピュータのタイムゾーンを設定することで、 地域による時刻の違いが自動的に調整され、 タイムゾーンに関連した機能が適切に取り扱われます。
ここでの例では、コンピュータが United States の Eastern タイムゾーンにあるものとします。 実際の地理的位置を選択してください。
User Confirmation Requested
Would you like to set this machine's time zone now?
[ Yes ] No
[ Yes ] を選択し Enter を押して、タイムゾーンを設定してください。
User Confirmation Requested
Is this machine's CMOS clock set to UTC? If it is set to local time
or you don't know, please choose NO here!
Yes [ No ]
コンピュータのクロックがどのように設定されているかに従って、 [ Yes ] または [ No ] を選択し、Enter を押してください。
矢印キーを使って、適切な地域を選択し、 Enter を押してください。
矢印キーを使って、適切に国名を選び、 Enter を押してください。
矢印キーを使って適切なタイムゾーンを選択し、 Enter を押してください。
Confirmation
Does the abbreviation 'EDT' look reasonable?
[ Yes ] No
タイムゾーンの短縮形が適切かどうかを確認をしてください。 問題なければ Enter を押して、インストール後の設定を続けてください。
Note: 以下は FreeBSD 7.X のインストールに当てはまります。 FreeBSD 8.X をインストール際には、以下の画面は表示されません。
User Confirmation Requested
Would you like to enable Linux binary compatibility?
[ Yes ] No
[ Yes ] を選択して Enter を押すと、 FreeBSD 上で Linux のソフトウエアを実行できるようになります。 Linux 互換のために必要な package が追加されます。
FTP からインストールを行っている場合には、 コンピュータがインターネットに接続できる必要があります。 Linux バイナリ互換など、すべての package を配布していないリモート ftp サイトがあります。 必要であれば、後でインストールできます。
このオプションを設定することで、 コンソールやユーザプログラムにおいて 3-ボタンマウスによるテキストのカットアンドペーストが可能になります。 2-ボタンマウスを使っている場合には、インストールをした後に 3-ボタンのエミュレートについて moused(8) マニュアルページを参照してください。 ここでは、非 USB マウス (PS/2 または COM ポートマウス) の設定を例に説明します。
User Confirmation Requested
Does this system have a PS/2, serial, or bus mouse?
[ Yes ] No
PS/2、シリアルまたはバスマウスを使っている場合には [ Yes ] を選択してください。 USB マウスを利用する場合には、[ No ] を選択し Enter を押してください。
矢印キーで Type を選択し、 Enter を押してください。
この例では PS/2 マウスを使うので、デフォルトの Auto が適切です。 プロトコルを変更するには、矢印キーを使って他のプロトコルを選択してください。 [ OK ] がハイライトされていることを確認し、 Enter を押してこのメニューを終了してください。
矢印キーで Port を選択して Enter を押してください。
このシステムでは PS/2 マウスを使っているので、デフォルトの PS/2 が適切です。 ポートを変更する場合には、矢印キーで選択して Enter を押してください。
最後に、矢印キーで Enable を選択して Enter を押し、マウスデーモンを有効にして、 テストしてください。
スクリーン上でマウスを動かし、 カーソルが正しく反応することを確認してください。 確認ができたら、 [ Yes ] を選択して Enter を押してください。 もし、うまく動かないのであれば、マウスの設定が適切に行われていません。 -- [ No ] を選択して、 他の設定オプションを使って試してください。
矢印キーで Exit を選択し、 Enter を押してインストール後の設定を続けてください。
packages はコンパイル済みのバイナリで、 ソフトウェアをインストールするのに便利な方法です。
説明では、例としてひとつの package をインストールしますが、 お望みであれば、ここで複数の package を追加してインストールすることもできます。 インストール後は、sysinstall を使って package を追加できます。
User Confirmation Requested
The FreeBSD package collection is a collection of hundreds of
ready-to-run applications, from text editors to games to WEB servers
and more. Would you like to browse the collection now?
[ Yes ] No
[ Yes ] を選択して、 Enter を押すと、 Package を選択する画面が表示されます。
現在のインストールメディアに存在する packages のみをインストールできます。
All を選ぶと、 利用可能なすべての package が表示されます。 もしくは、特定のカテゴリを選択することもできます。 矢印キーで選択したいカテゴリをハイライトし、 Enter を押してください
選択したカテゴリで利用可能なすべての package のメニューが表示されます。
ここでは、bash シェルが選択されています。 希望する数だけ package を選択し (ハイライトで表示されます)、 Space キーを押して選択してください。 それぞれの package の簡単な説明がスクリーン下の左端に表示されます。
Tab キーを押すと、最後に選択した package と [ OK ], [ Cancel ] で選択が切り替わります。
インストールする package の選択が終わったら、 Tab を一度押して [ OK ] に切り替え、 その後 Enter を押して Package 選択メニューに戻ってください。
左右の矢印キーでも、[ OK ] と [ Cancel ] 切り替えることができます。 この方法で [ OK ] を選択することもできますので、 その後、Enter を押して Package 選択メニューに戻ってください。
Tab と矢印キーで [ Install ] を選択し、Enter を押してください。 その後、インストールする package の確認を行います。
[ OK ] を選択し、Enter を押すと package のインストールが始まります。 インストール中は、インストールのメッセージが表示されますので、 エラーメッセージが表示されないかどうか注意してください。
packages をインストールしたら、最後の設定に進みます。 package を選択せず、最後の設定に戻りたい場合も Install を選択してください。
システムに root でログインすることを避けるため、 インストール時には、少なくとも一人のユーザを追加する必要があります。 通常 root パーティッションの容量は小さいので、 root 権限でアプリケーションを実行すると、 すぐに消費してしまいます。
User Confirmation Requested
Would you like to add any initial user accounts to the system? Adding
at least one account for yourself at this stage is suggested since
working as the "root" user is dangerous (it is easy to do things which
adversely affect the entire system).
[ Yes ] No
[ Yes ] を選択し、 Enter を押して、ユーザを追加してください。
矢印キーで User を選択して、 Enter を押してください。
Tab で項目を選択すると、 必要とされる情報の入力を助けるため、 スクリーンの下に以下の説明が表示されます。
新しいユーザのログインネーム (必須)
新しいユーザの ID 番号 (空欄のままにすると、自動的に割り当てられます)
新しいユーザのログイングループ (空欄のままにすると、自動的に割り当てられます)
このユーザのパスワード (このフィールドは注意して入力してください!)
ユーザのフルネーム (コメント)
このユーザの所属するグループについて (すなわち、どのようなアクセス権を持つか)
ユーザのホームディレクトリ (空欄にするとデフォルトで設定されます)
ユーザのログインシェル (空欄にするとデフォルト (例 /bin/sh) に設定されます。)
ログインシェルは /bin/sh から、 先ほど package でインストールした bash シェルを使うよう、/usr/local/bin/bash に変更されています。 インストールされていないシェルを選ぶと、ログインできなくなりますので、 インストールされていないシェルは選ばないでください。 BSD の世界では、最も標準的なシェルは C シェルです。 /bin/tcsh で指定できます。
ユーザは、root 権限を持つスーパユーザになることができる wheel グループにも追加されています。
十分に記述したら、[ OK ] を押して、 User および Group 管理メニューを再び表示してください。
特別に必要があれば、この時にグループを追加することもできます。 または、インストールが終わってから sysinstall を利用してアクセスできます。
ユーザを追加したら、矢印キーで、 Exit を選択して、 Enter を押して、次のインストール項目に進んでください。
Message
Now you must set the system manager's password.
This is the password you'll use to log in as "root".
[ OK ]
[ Press enter or space ]
Enter を押して、 root パスワードを設定してください。
パスワードは、正しく 2 回入力してください。 言うまでもなく、パスワードを忘れたときのために、 思い出す方法を用意しておいてください。 パスワードとして入力した文字は表示されませんし、 アスタリスクが表示されることもありません。
New password: Retype new password :
パスワードの入力に成功したら、インストールは次に進みます。
さらに ネットワークサービスの設定 や他の設定を行う必要がある場合、 この時点で行うこともできますし、インストールの後から sysinstall を用いて設定することもできます。
User Confirmation Requested
Visit the general configuration menu for a chance to set any last
options?
Yes [ No ]
[ No ] を選択し、 Enter を押すことでメインインストールメニューに戻ります。
方向キーで [X Exit Install] を選択し、Enterを押します。 インストールを終了してもよいか確認を求められるでしょう。
User Confirmation Requested
Are you sure you wish to exit? The system will reboot.
[ Yes ] No
[ Yes ] を選択してください。 CDROM ドライブから起動しているのなら、 ディスクを取り出すこと示す以下のメッセージが表示されます。
Message
Be sure to remove the media from the drive.
[ OK ]
[ Press enter or space ]
マシンが再起動し始めると CDROM ドライブはロックされるので、 ドライブから (素早く) ディスクを取り出してください。 [ OK ] を押して再起動してください。
システムは再起動するので、 表示されるかもしれないすべてのエラーメッセージに注意してください。 詳細については、Section 2.10.16 をご覧ください。
ネットワークサービスの設定は、新しいユーザにとって、 この領域について基本的な知識を持たないと気が遠くなるような作業となるでしょう。 インターネットを含むネットワークは、FreeBSD を含む現代のすべてのオペレーティングシステムにとって重要なので、FreeBSD の広範囲にわたるネットワークの能力を理解することはとても役に立ちます。 インストール中にネットワークサービスの設定を理解すると、 ユーザが利用できるさまざまなサービスを理解できます。
ネットワークサービスは、 ネットワーク上のどこからでもアクセスを許可するプログラムです。 これらのプログラムが、“有害” なことをしないように、 あらゆる努力が行われています。 残念ながら、プログラマは完ぺきではないので、 時間が経過するとネットワークサービスのバグが攻撃者により発見され、 悪事が行われるケースがあります。 必要なネットワークサービスのみを有効にすることは重要です。 もし、あるネットワークサービスが必要かどうか疑わしい場合には、 あなたがそれを必要であると理解できるまでは、 そのネットワークサービスを有効にしないことが最善です。 後で sysinstall を再び実行するか、 /etc/rc.conf ファイルで提供される機能を使うことで、 ネットワークサービスをいつでも有効にできます。
Networking オプションを選択すると、 以下のようなメニューが表示されます。
最初のオプションである Interfaces については、 すでに Section 2.10.1 で説明したので、 無視して構いません。
AMD オプションを選択すると BSD 自動マウントユーティリティに対応します。 このオプションは、通常 NFS プロトコル (以下をご覧ください) とともに、リモートファイルシステムの自動マウントのために使われます。 ここでは特別な設定を必要としません。
次の行は AMD Flags オプションです。 選択すると AMD フラグを入力するためのメニューが表示されます。 メニューには以下のようなデフォルトのオプションのセットが含まれています。
-a /.amd_mnt -l syslog /host /etc/amd.map /net /etc/amd.map
-a
オプションは、デフォルトのマウント位置を指定します。 ここでは /.amd_mnt を指定しています。 -l
オプションは、 デフォルトの log ファイルを指定します。
ただし、syslogd が指定されていると、
すべてのログはシステムログのデーモンに送られます。 /host ディレクトリは、
リモートホストからエクスポートされたシステムのマウントに使われます。 一方 /net ディレクトリは、IP
アドレスからエクスポートされたファイルシステムのマウントに使われます。 /etc/amd.map ファイルは、 AMD エクスポートのデフォルトオプションを定義します。
Anon FTP は、anonymous FTP 接続を許可します。 使用しているコンピュータを FTP サーバとして利用する場合には、 このオプションを選択してください。 このオプションを選択した際のセキュリティ上のリスクについて把握しておいてください。 セキュリティリスクの説明、および、詳細の設定のためのメニューが表示されます。
すでに説明したように、Gateway コンフィグレーションメニューでは、 コンピュータをゲートウェイに設定します。 もし、インストールの過程で Gateway オプションを間違って選択したのであれば、ここで無効にできます。
Inetd オプションを使うと、これまでに議論した inetd(8) デーモンを設定したり、完全に無効にできます。
Mail オプションでは、システムのデフォルトの MTA (Mail Transfer Agent) を設定できます。 このオプションを選択すると、以下のメニューが起動します。
ここでは、インストールしてデフォルトに設定する MTA を選択できます。 MTA は、 システム上またはインターネット上のユーザにメールを配送するメールサーバにすぎません。
Sendmail を選択すると、 FreeBSD のデフォルトで一般的な sendmail サーバがインストールされます。 Sendmail local オプションは、 sendmail をデフォルトの MTA に設定しますが、 インターネットからの電子メールの受け取りを無効にします。 他のオプションである Postfix や Exim も、 Sendmail と同じようにメールを配送します。 あるユーザは、sendmail MTA よりこれらを好みます。
MTA を選択するか、または MTA をインストールしないことを選ぶと、 ネットワークメニューには、次のオプションである NFS client が表示されます。
NFS クライアントは、システムを NFS 経由でサーバと通信するように設定します。 NFS サーバは、 NFS プロトコルを通して、 ネットワーク上の別のマシンのファイルシステムを利用できるようにします。 利用しているコンピュータがスタンドアローンであれば、 このオプションを選択しないままにしておくことが出来ます。 システムは更なる設定を後で必要とします。 クライアントやサーバの設定についての詳細は Section 22.4 をご覧ください。
その下のオプションが NFS server オプションです。 システムを NFS サーバにセットアップできます。 このオプションは、RPC (remote procedure call) サービスに必要なオプションを追加します。 RPC は、 ホストとプログラム間の接続の調整に利用できます
次の行は Ntpdate オプションです。 これは、時刻の同期を取り扱います。 選択すると下のようなメニューが表示されます。
このメニューでは、 ネットワーク的に最も近いサーバを選択してください。 遠い場所のサーバを選ぶと、 ネットワークの応対時間が長くなる可能性があるので、 最も近いサーバを選択することにより、 より正確な時刻の同期ができるようになります。
次のオプションは、PCNFSD の選択です。 このオプションは、Ports Collection から net/pcnfsd package をインストールします。 Microsoft の MS-DOS オペレーティングシステムのような、自分自身では NFS 認証サービスを提供できないシステムに対し、NFS 認証サービスを提供する有効なユーティリティです。
ここで、他のオプションを見るために、 少しスクロールダウンしてください。
rpcbind(8), rpc.statd(8) および rpc.lockd(8) ユーティリティは、すべて Remote Procedure Calls (RPC) に利用されます。 rpcbind ユーティリティは、 NFS サーバとクライアントの通信を取り扱い、 NFS サーバが正しく機能するために必要です。 rpc.statd デーモンは、 他のホストの rpc.statd デーモンと通信し、 ステータスを監視します。 報告されたステータスは、通常 /var/db/statd.status ファイルに記録されます。 ここで紹介する最後のオプションは rpc.lockd オプションです。 このオプションを選択すると、ファイルロックサービスを提供します。 この機能は通常 rpc.statd と共に、 どのホストがロックを必要としているか、 どのくらいの頻度でリクエストするかをモニタするために利用されます。 最後の二つのオプションは、デバッグ時に非常に有用ですが、 NFS サーバおよびクライアントの動作時には必要ありません。
リストを降りていくと、次の項目は、ルーティングデーモンの Routed です。 routed(8)
ユーティリティは、ネットワークルーティングテーブルを管理し、
マルチキャストルーターを理解し、
そして、リクエストがあると、物理的に接続したホストに対し、
ネットワークを通してルーティングテーブルを提供します。 このユーティリティは、
主にローカルネットワークのゲートウェイマシンで利用されます。
選択すると、ユーティリティのデフォルトの場所を要求するメニューが表示されます。
デフォルトの場所はすでに定義されていて、 Enter
キーを押すと選択されます。 その後、別のメニューが表示され、 routed に与えるフラグを要求します。
メニューには、デフォルトのフラグの -q
がすでに表示されていることでしょう。
次の行は Rwhod オプションです。 このオプションを選択すると、システムの初期化時に rwhod(8) デーモンが起動します。 rwhod ユーティリティは、ネットワークにブロードキャストし、 システムのメッセージを発信します。 また “consumer” モードでは、 システムのメッセージを収集します。 詳細な情報は、ruptime(1) および rwho(1) マニュアルページにあります。
リストの最後から 2 番目のオプションは、 sshd(8) デーモンです。 これは OpenSSH のためのセキュアシェルサーバです。 標準の telnet や FTP サーバではなく、このサーバが強く推奨されています。 sshd サーバは、暗号化された通信を行い、 あるホストと他のホストを安全に接続します。
最後のオプションが TCP Extensions オプションです。 このオプションは、RFC 1323 および RFC 1644 で定義される TCP 拡張を有効にします。 多くのホストにおいて、このオプションはコネクションを高速にする一方で、 いくつかのコネクションも破棄します。 サーバに対して推奨はされませんが、 スタンドアローンなコンピュータには有益でしょう。
以上でネットワークサービスの設定が終わりました。 一番上の X Exit までスクロールアップして次の設定項目に進むか、 X Exit を 2 回選択し、その後 [X Exit Install] を選び、 sysinstall を終了してください。
すべてがうまくいっていれば、画面上にメッセージがスクロールし、 ログインプロンプトが表示されるでしょう。Scroll-Lock を押し、さらに PgUp および PgDn キーを用いることで、メッセージの内容を見ることができます。 Scroll-Lock をもう一度押すとプロンプトに戻ることができるでしょう。
すべてのメッセージは (バッファの容量制限により) 表示されないかもしれませんが、 ログインの後にプロンプトからコマンドラインで dmesg と入力することによってそれを見ることができます。
インストールの際に設定したユーザ名 (この例の場合、rpratt) とパスワードを用いてログインしてください。 必要な時を除き root としてログインすることは避けてください。
典型的なブートメッセージ (バージョン情報は省略しています)
Copyright (c) 1992-2002 The FreeBSD Project. Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994 The Regents of the University of California. All rights reserved. Timecounter "i8254" frequency 1193182 Hz CPU: AMD-K6(tm) 3D processor (300.68-MHz 586-class CPU) Origin = "AuthenticAMD" Id = 0x580 Stepping = 0 Features=0x8001bf<FPU,VME,DE,PSE,TSC,MSR,MCE,CX8,MMX> AMD Features=0x80000800<SYSCALL,3DNow!> real memory = 268435456 (262144K bytes) config> di sn0 config> di lnc0 config> di le0 config> di ie0 config> di fe0 config> di cs0 config> di bt0 config> di aic0 config> di aha0 config> di adv0 config> q avail memory = 256311296 (250304K bytes) Preloaded elf kernel "kernel" at 0xc0491000. Preloaded userconfig_script "/boot/kernel.conf" at 0xc049109c. md0: Malloc disk Using $PIR table, 4 entries at 0xc00fde60 npx0: <math processor> on motherboard npx0: INT 16 interface pcib0: <Host to PCI bridge> on motherboard pci0: <PCI bus> on pcib0 pcib1: <VIA 82C598MVP (Apollo MVP3) PCI-PCI (AGP) bridge> at device 1.0 on pci0 pci1: <PCI bus> on pcib1 pci1: <Matrox MGA G200 AGP graphics accelerator> at 0.0 irq 11 isab0: <VIA 82C586 PCI-ISA bridge> at device 7.0 on pci0 isa0: <ISA bus> on isab0 atapci0: <VIA 82C586 ATA33 controller> port 0xe000-0xe00f at device 7.1 on pci0 ata0: at 0x1f0 irq 14 on atapci0 ata1: at 0x170 irq 15 on atapci0 uhci0: <VIA 83C572 USB controller> port 0xe400-0xe41f irq 10 at device 7.2 on pci0 usb0: <VIA 83C572 USB controller> on uhci0 usb0: USB revision 1.0 uhub0: VIA UHCI root hub, class 9/0, rev 1.00/1.00, addr 1 uhub0: 2 ports with 2 removable, self powered chip1: <VIA 82C586B ACPI interface> at device 7.3 on pci0 ed0: <NE2000 PCI Ethernet (RealTek 8029)> port 0xe800-0xe81f irq 9 at device 10.0 on pci0 ed0: address 52:54:05:de:73:1b, type NE2000 (16 bit) isa0: too many dependant configs (8) isa0: unexpected small tag 14 fdc0: <NEC 72065B or clone> at port 0x3f0-0x3f5,0x3f7 irq 6 drq 2 on isa0 fdc0: FIFO enabled, 8 bytes threshold fd0: <1440-KB 3.5" drive> on fdc0 drive 0 atkbdc0: <keyboard controller (i8042)> at port 0x60-0x64 on isa0 atkbd0: <AT Keyboard> flags 0x1 irq 1 on atkbdc0 kbd0 at atkbd0 psm0: <PS/2 Mouse> irq 12 on atkbdc0 psm0: model Generic PS/2 mouse, device ID 0 vga0: <Generic ISA VGA> at port 0x3c0-0x3df iomem 0xa0000-0xbffff on isa0 sc0: <System console> at flags 0x1 on isa0 sc0: VGA <16 virtual consoles, flags=0x300> sio0 at port 0x3f8-0x3ff irq 4 flags 0x10 on isa0 sio0: type 16550A sio1 at port 0x2f8-0x2ff irq 3 on isa0 sio1: type 16550A 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/15 bytes threshold ppbus0: IEEE1284 device found /NIBBLE Probing for PnP devices on ppbus0: plip0: <PLIP network interface> on ppbus0 lpt0: <Printer> on ppbus0 lpt0: Interrupt-driven port ppi0: <Parallel I/O> on ppbus0 ad0: 8063MB <IBM-DHEA-38451> [16383/16/63] at ata0-master using UDMA33 ad2: 8063MB <IBM-DHEA-38451> [16383/16/63] at ata1-master using UDMA33 acd0: CDROM <DELTA OTC-H101/ST3 F/W by OIPD> at ata0-slave using PIO4 Mounting root from ufs:/dev/ad0s1a swapon: adding /dev/ad0s1b as swap device Automatic boot in progress... /dev/ad0s1a: FILESYSTEM CLEAN; SKIPPING CHECKS /dev/ad0s1a: clean, 48752 free (552 frags, 6025 blocks, 0.9% fragmentation) /dev/ad0s1f: FILESYSTEM CLEAN; SKIPPING CHECKS /dev/ad0s1f: clean, 128997 free (21 frags, 16122 blocks, 0.0% fragmentation) /dev/ad0s1g: FILESYSTEM CLEAN; SKIPPING CHECKS /dev/ad0s1g: clean, 3036299 free (43175 frags, 374073 blocks, 1.3% fragmentation) /dev/ad0s1e: filesystem CLEAN; SKIPPING CHECKS /dev/ad0s1e: clean, 128193 free (17 frags, 16022 blocks, 0.0% fragmentation) Doing initial network setup: hostname. ed0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255 inet6 fe80::5054::5ff::fede:731b%ed0 prefixlen 64 tentative scopeid 0x1 ether 52:54:05:de:73:1b lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384 inet6 fe80::1%lo0 prefixlen 64 scopeid 0x8 inet6 ::1 prefixlen 128 inet 127.0.0.1 netmask 0xff000000 Additional routing options: IP gateway=YES TCP keepalive=YES routing daemons:. additional daemons: syslogd. Doing additional network setup:. Starting final network daemons: creating ssh RSA host key 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: cd:76:89:16:69:0e:d0:6e:f8:66:d0:07:26:3c:7e:2d root@k6-2.example.com creating ssh DSA host key 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: f9:a1:a9:47:c4:ad:f9:8d:52:b8:b8:ff:8c:ad:2d:e6 root@k6-2.example.com. setting ELF ldconfig path: /usr/lib /usr/lib/compat /usr/X11R6/lib /usr/local/lib a.out ldconfig path: /usr/lib/aout /usr/lib/compat/aout /usr/X11R6/lib/aout starting standard daemons: inetd cron sshd usbd sendmail. Initial rc.i386 initialization:. rc.i386 configuring syscons: blank_time screensaver moused. Additional ABI support: linux. Local package initialization:. Additional TCP options:. FreeBSD/i386 (k6-2.example.com) (ttyv0) login: rpratt Password:
低速なマシンでは、 RSA および DSA キーを作成するのに少々時間がかかるかもしれません。 これは初めてインストールした後に初めてブートする時だけ起こります。 その後のブートはより速くなるでしょう。
X サーバが設定され、デフォルトデスクトップが選択されていた場合、 コマンドラインで startx と入力することで起動することが可能です。
オペレーティングシステムを適切にシャットダウンすることは重要です。 ただ電源を落すということはしないでください。 まず、コマンドラインから su と入力し、 root パスワードを入力してスーパユーザとなります。 これは wheel グループのメンバとなっているユーザだけが行うことができます。 または root としてログインし、 shutdown -h now を使用します。
The operating system has halted. Please press any key to reboot.
シャットダウンコマンドが実行され、 “Please press any key to reboot” というメッセージが現れた後に電源を落すことは安全です。 電源を落す代わりに何らかのキーが押された場合、 システムはリブートするでしょう。
Ctrl+Alt+Del というキーの組合せを使ってシステムをリブートすることもできますが、 通常の運用においてこれは推奨されません。
この節では、インストールの際の、これまで報告された共通の問題に対する解決のための情報が書いてあります。 また、FreeBSD と MS-DOS または、Windows のデュアルブートを行う際のいくつかの質問と回答も書いてあります。
PC アーキテクチャの様々な制限により、100% 確実に原因を突き止めることは不可能ですが、 失敗した時にいくつかできることがあります。
インストールする FreeBSD のバージョンの ハードウェアノート を調べて、 使っているハードウェアに対応しているかどうかを確認してください。
もしハードウェアがサポートされているにもかかわらず、 動作しなかったり他の問題点がある時は、カスタムカーネル を構築する必要があります。GENERIC カーネルに含まれていないデバイスのサポートを追加することができます。 起動ディスクのカーネルでは、ほとんどのハードウェアデバイスの IRQ, IO アドレス、 DMA チャネルが工場出荷時の状態であると設定されています。 もしハードウェアの設定が変更されていると、 カーネルコンフィグレーションファイルを編集し、 再コンパイルを行なって、これらの値を FreeBSD に設定しなければなりません。
存在しないデバイスを認識してしまうことにより、 その後実際に存在するデバイスの認識を失敗してしまうことがあります。 このような場合は衝突しているドライバを無効にします。
Note: いくつかのインストール上の問題はさまざまなハードウェア装置の、 特にマザーボードのファームウェアのアップデートで回避または緩和することができます。 マザーボードのファームウェアは BIOS と呼ばれることもあり、 多くのマザーボードまたはコンピュータ製造メーカーはアップグレード情報を載せているウェブサイトを用意しています。
多くの製造メーカーは、 重要な更新のようなそれなりの理由がない限りマザーボードの BIOS のアップグレードは行わないよう強く推奨しています。 アップデートの過程で失敗するかもしれず、 BIOS チップに深刻なダメージを与える原因となり得るからです。
現時点では、FreeBSD は、 Double Space™ アプリケーションで圧縮されたファイルシステムに対応していません。 そのため、FreeBSD がデータにアクセスする前に、 ファイルシステムを展開しておく必要があります。 展開するには、Start> Programs > System Tools メニューの Compression Agent を実行してください。
FreeBSD は、MS-DOS ファイルシステム (FAT ファイルシステムとも呼ばれます) に対応しています。 mount_msdosfs(8) コマンドは、 ファイルシステムの内容にアクセスできるように、 ファイルシステムを現存のディレクトリ構成にマウントします。 通常 mount_msdosfs(8) プログラムは、直接用いられることはありません。 システムから /etc/fstab 経由で利用されたり、 mount(8) ユーティリティから適切なパラメータとともに用いられます。
/etc/fstab の典型的な記述例は以下のようになります。
/dev/ad0sN /dos msdosfs rw 0 0
Note: この記述がうまくいくためには、/dos ディレクトリが存在している必要があります。 /etc/fstab のフォーマットの詳細については、 fstab(5) をご覧ください。
MS-DOS ファイルシステムをマウントする mount(8) の典型例は以下となります。
# mount -t msdosfs /dev/ad0s1 /mnt
この例では、MS-DOS ファイルシステムは、 プライマリのハードディスクの最初のパーティションに配置されています。 MS-DOS ファイルシステムの位置は、使用している環境によって変わりますので、 dmesg や mount コマンドの出力を確認してください。 これらのコマンドを実行することによって、 パーティションレイアウトを把握するのに十分な情報を得ることが出来ます。
Note: FreeBSD が割り当てるディスクスライス (すなわち、MS-DOS パーティション) の番号は、 他のオペレーティングシステムのものとは異なることがあります。 特に拡張 MS-DOS パーティションには、プライマリの MS-DOS パーティションより大きなスライス番号が通常割り当てられます。 fdisk(8) ユーティリティは、どのスライスが FreeBSD に属し、 どのスライスが他のオペレーティングシステムに属するかを決めるのに役立ちます。
NTFS パーティションについても、同様に mount_ntfs(8) コマンドでマウントできます。
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" を追加してください。 ブートローダのより詳しい情報については Section 13.1 で説明します。
2.11.3.2. FreeBSD をインストールした後の最初のハードウェアからの起動で、 カーネルが読み込まれ、ハードウェアを検出しましたが、 次のようなメッセージを表示して停止しました。
changing root device to ad1s1a panic: cannot mount root
何が問題ですか? 何かできることはありますか?
ブートのヘルプで表示される、 bios_drive:interface(unit,partition)kernel_name は何を意味していますか?
起動ディスクがシステムの最初のディスクではない場合には、 長年の問題があります。BIOS は、FreeBSD とは異なる番号付けを用い、 どの番号がどの番号に対応するかを正しく見つけ出すことは簡単ではありません。
起動ディスクがシステムの 1 番目のディスクではない場合には、 FreeBSD がディスクを見つけることができるように設定する必要があります。 2 つの一般的な状況があります。どちらの場合でも、 ルートファイルシステムがどこにあるかを FreeBSD に指定する必要があります。 BIOS ディスク番号と、ディスクのタイプおよびそのディスクタイプに対する FreeBSD ディスク番号を設定することで指定できます。
最初の状況は、システムにそれぞれ IDE バスのマスタに接続された 2 つの IDE ディスクがあり、2 番目のディスクから FreeBSD を起動する場合です。 BIOS は、これらのデバイスをディスク 0 および ディスク 1 と認識し、 一方 FreeBSD は、ad0 および ad2 と認識します。
BIOS ディスク 1 に FreeBSD があり、 ディスクタイプが ad で、 FreeBSD ディスク番号が 2 の場合には、次のようになるでしょう。
1:ad(2,a)kernel
プライマリバスにスレーブが接続されている場合には、 上記は必要ありません (実際上、間違いです)。
2 番目の状況は、システムに 1 つまたはそれ以上の IDE ディスクがあるときに、SCSI ディスクから起動するような場合です。 このようなケースでは、FreeBSD ディスク番号は、 BIOS ディスク番号より小さな番号になります。 2 つの IDE ディスクと SCSI ディスクがある場合には、 SCSI ディスクは BIOS ディスク 2 であり、 ディスクタイプが da、FreeBSD ディスク番号が 0 となるので、 FreeBSD に BIOS ディスク 2 (システムの 1 番目の SCSI ディスク) から起動するように設定するには以下のようになります。
2:da(0,a)kernel
IDE ディスクが 1 つの場合には、 代わりに 1: を指定してください。
使用する適切な値が決まったら、 通常のテキストエディタを使って、コマンドを入力した通りに /boot.config ファイルに正確に記述してください。 他に指定がなければ、FreeBSD はこのファイルの内容を、 デフォルトの boot: プロンプトへのレスポンスとして使います。
FreeBSD のインストール時に、 パーティションエディタで指定したハードウェアのディスクジオメトリが正しくありません。 パーティションエディタまで戻り、 ハードディスクの正しいジオメトリを指定してください。 正しいジオメトリの設定でもう一度最初から FreeBSD をインストールする必要があります。
使用しているコンピュータの正しいジオメトリがまったくわからない場合には、 以下のような tip があります。 ディスクの最初に小さな MS-DOS パーティションをインストールし、 その後 FreeBSD をインストールしてください。 インストールプログラムは MS-DOS パーティションを認識し、 このパーティションから正しいジオメトリを推測します。 通常はこれでうまくいきます。
次の tip は、もはや推奨されませんが、 参考のために残しておきます。
FreeBSD 専用のサーバやワークステーションとして設定し、 MS-DOS, Linux や他のオペレーティングシステムとの互換性を (将来的に) 考える必要がなければ、FreeBSD が (セクタの最初から最後まで) ディスクのすべてを用いる非標準のオプションを選択することで、 ディスク全体 (パーティションエディタで A) を使うこともできます。 この場合には、ジオメトリについて考える必要はなくなりますが、 FreeBSD 以外でディスクを利用することはできなくなります。
使用しているカードの IRQ が、 /boot/device.hints ファイルで指定された IRQ と異なる可能性があります。 ed(4) ドライバは、デフォルトでは “ソフトウェア” コンフィグレーション (MS-DOS の EZSETUP で入力された値) を用いません。 インターフェースのヒント情報に -1 を指定した場合には、 ソフトウェアコンフィグレーションが用いられます。
カードのジャンパを変更して、 ハードウェアコンフィグレーションの設定を行うか (必要があれば、カーネルの設定を変更してください)、 hint.ed.0.irq="-1" と指定して IRQ に -1 を設定してください (このように設定すると、 カーネルがソフトウェアコンフィグレーションを利用します)。
その他として、利用しているカードが IRQ 9 を使っている可能性があります。 この IRQ は IRQ 2 と共有され、しばしば問題を引き起こします (特に、IRQ 2 を使っている VGA カードを持っている場合には !)。 できるだけ IRQ 2 や 9 を避けるべきでしょう。
この節では特殊な状況での FreeBSD のインストール方法が記述してあります。
この形式のインストールは “表示のないインストール” と呼ばれます。 なぜなら、FreeBSD をインストールしようとするマシンにモニタが接続されていないか、 VGA 出力さえもっていないからです。 どのようにすればよいでしょうか? シリアルコンソールを使ってください。 シリアルコンソールは基本的に別のマシンをシステムの主ディスプレイやキーボードとして使います。 これを行うには、Section 2.3.7 の説明に従い、インストール用の USB メモリスティックを作成するか、 Section 2.13.1 で説明されているインストール用の ISO イメージをダウンロードしてください。
以下の説明に従って、 これらのメディアをシリアルコンソールを使って起動するように変更してください (CDROM を使うのであれば、最初の手順を飛ばしてください)。
インストール用 USB スティックのシリアルコンソールへの起動を有効にする
作成した USB スティックで起動すると、 FreeBSD は通常のインストールモードで起動します。 インストールにシリアルコンソールを使って FreeBSD を起動したいので、 そのためには、まず FreeBSD のシステムに mount(8) コマンドを使って USB ディスクをマウントする必要があります。
# mount /dev/da0a /mnt
Note: デバイスノードおよびマウントポイントの部分は、 利用している環境に合わせてください。
スティックをマウントしたら、USB スティックをシリアルコンソールを使って起動するように設定しなければなりません。 シリアルコンソールをシステムのコンソールに設定する行を含んだ loader.conf ファイルを USB スティックのファイルシステムに作成します。
# echo 'console="comconsole"' >> /mnt/boot/loader.conf
USB スティックを正しく設定することができたら、 umount(8) コマンドを使ってディスクをアンマウントしてください。
# umount /mnt
その後 USB スティックを抜き、3 番目の手順に進んでください。
インストール用 CD のシリアルコンソールへの起動を有効にする
インストール用の ISO イメージ (Section 2.13.1 をご覧ください) から作成した CD で起動すると、 FreeBSD は通常のインストールモードで起動します。 インストールにシリアルコンソールを使って FreeBSD を起動したいので、 そのためには、ISO イメージを CD-R メディアに焼く前に、 展開して、変更し、再び ISO イメージを作成する必要があります。
インストール用の ISO イメージ (ここでは FreeBSD-9.0-RELEASE-i386-disc1.iso とします) が保存されている FreeBSD のシステムで、 以下のようにすべてのファイルを tar(1) ユーティリティを使って展開してください。
# mkdir /path/to/headless-iso # tar -C /path/to/headless-iso -pxvf FreeBSD-9.0-RELEASE-i386-disc1.iso
次に、 インストールメディアをシリアルコンソールを使って起動するように設定します。 シリアルコンソールをシステムのコンソールに設定する行を含んだ loader.conf ファイルを、 展開した ISO イメージに作成します。
# echo 'console="comconsole"' >> /path/to/headless-iso/boot/loader.conf
その後、修正されたツリーを使って ISO イメージを作成します。 以下のように、sysutils/cdrtools port の mkisofs(8) ツールを使ってください。
# mkisofs -v -b boot/cdboot -no-emul-boot -r -J -V "Headless_install" \ -o Headless-FreeBSD-9.0-RELEASE-i386-disc1.iso /path/to/headless-iso
適切な ISO イメージを作成できたので、 お気に入りの CD ライタ用のアプリケーションを使って CD-R に焼いてください。
ヌルモデムケーブルの接続
2 つのマシン間を ヌルモデムケーブル で接続する必要があります。 ケーブルで 2 つのマシンのシリアルポート同士をつなげてください。 普通のシリアルケーブルはここでは使えません。 内部配線のいくつかがクロスされたヌルモデムケーブルが必要です。
インストールのために起動
いよいよインストールを開始します。 USB メモリスティックを、画面のない、 インストールを行おうとしているマシンに挿入し、 電源を投入してください。作成した CDROM を使う場合には、 マシンの電源を投入し、ディスクを挿入して起動してください。
画面がないマシンへの接続
cu(1) でインストールを行いたいマシンに接続してください:
# cu -l /dev/cuau0
FreeBSD 7.X では、 かわりに以下のコマンドを使ってください。
# cu -l /dev/cuad0
できました! cu のセッションを通して画面がないマシンを操作することができます。 インストーラが kern1.flp を挿入するように要求し、 その後どの種類の端末を使うか選ぶよう問われます。 FreeBSD カラーコンソールを選んでインストールを続行してください!
Note: 省略のため、以下において “FreeBSD ディスク”というのは、 あなたが購入、もしくは自分で作成した FreeBSD の CDROM または DVD のことを意味することにします。
自分用の FreeBSD インストールメディアやソースを用意しなければならない場合があるかもしれません。 これは磁気テープのような物理的なメディアであったり、 ローカル FTP サイトまたは MS-DOS パーティションといった sysinstall がファイルを持ってくることのできるリソースの場合もあります。
たとえば、以下のような状況です。
ローカルネットワークに繋がったたくさんのマシンと、 1 つの FreeBSD ディスクがあるとします。 FreeBSD ディスクの内容を使ってローカル FTP サイトを作成し、 インターネットに接続する必要の代わりにこのローカル FTP サイトを使うようにします。
FreeBSD ディスクを持っていて、FreeBSD はあなたの CD/DVD ドライブを認識できないが、 MS-DOS / Windows はそれができるとします。 コンピュータ上の MS-DOS パーティションに FreeBSD のインストールファイルをコピーして、FreeBSD のインストールにこれらのファイルを使います。
インストールを行いたいコンピュータが CD/DVD ドライブやネットワークカードを搭載してなくても、 “Laplink スタイルの”シリアルまたはパラレルケーブルで、 そのコンピュータに接続できます。
FreeBSD のインストールに使える磁気テープを作成します。
FreeBSD プロジェクトは、それぞれのリリースに対して 少なくとも 2 つの CDROM イメージ (“ISO イメージ”) をそれぞれのアーキテクチャごとに用意しています。 CD ライタを持っているのであれば、イメージを CD に書き込む (“焼く”) ことができ、 それを使って FreeBSD をインストールできます。 CD ライタを持っていて、バンド幅を安く利用できるのであれば、 これが FreeBSD をインストールする最も簡単な方法です。
適切な ISO イメージのダウンロード
それぞれのリリースの ISO イメージは、 ftp://ftp.FreeBSD.org/pub/FreeBSD/ISO-IMAGES-arch/version もしくは近くのミラーからダウンロードできます。 ここで、arch と version の部分は適切なものに置き換えてください。
通常、このディレクトリには以下のイメージが置いてあります。
Table 2-4. FreeBSD 7.X および 8.X ISO イメージの名前と内容
| ファイル名 | 内容 |
|---|---|
| FreeBSD-version-RELEASE-arch-bootonly.iso | CD-ROM ドライブを備えたマシンで起動できるイメージです。 この CD のみを使って FreeBSD をインストールすることはできません。 この CD から起動した後は、(FTP サーバなどから) ネットワーク経由でインストール作業をします。 |
| FreeBSD-version-RELEASE-arch-dvd1.iso.gz | この DVD イメージには、 FreeBSD オペレーティングシステムのベースシステム、 コンパイル済みの package 一式、 ドキュメントをインストールするために必要なものが入っています。 “livefs” ベースのレスキューモードで起動することも可能です。 |
| FreeBSD-version-RELEASE-arch-memstick.img | USB メモリスティックに書き込めるイメージです。 USB ドライブからの起動可能なコンピュータでは、 これをインストールに使うことができます。 “livefs” ベースのレスキューモードで起動することも可能です。 package は、ドキュメントに関連するもののみが入っています。 FreeBSD 7.X 以前ではこのイメージを利用できません。 |
| FreeBSD-version-RELEASE-arch-disc1.iso | この CD イメージには、 FreeBSD オペレーティングシステムのベースシステムとドキュメントインストールするために必要なものが入っています。 その他の package は含まれていません。 |
| FreeBSD-version-RELEASE-arch-disc2.iso | この CD イメージには、ディスクに収まる容量のサードパーティ製 package が含まれています。このイメージは、 FreeBSD 8.X 以降では利用できません。 |
| FreeBSD-version-RELEASE-arch-disc3.iso | ディスクに収まる容量のサードパーティ製 package を含むもう 1 つの CD イメージです。このイメージは、 FreeBSD 8.X 以降では利用できません。 |
| FreeBSD-version-RELEASE-arch-docs.iso | FreeBSD ドキュメント。このイメージは、 FreeBSD 8.X 以降では利用できません。 |
| FreeBSD-version-RELEASE-arch-livefs.iso | “livefs” ベースのレスキューモードで起動できるイメージです。 この CD のみを使ってシステムをインストールすることはできません。 |
Note: FreeBSD 7.3 より前の FreeBSD 7.X および FreeBSD 8.0 では、 上記とは異なる名前付けが行われています。 ISO イメージには、FreeBSD- の接頭辞がありません。
bootonly ISO イメージまたは disc1 イメージのどちらかをダウンロード しなければ なりません。 disc1 には、bootonly ISO イメージに含まれているものはすべて含まれているので、 両方をダウンロードする必要はありません。
インターネットへのアクセスが安く利用できるのであれば、 bootonly ISO を使ってください。 FreeBSD をインストールし、その後必要であれば、 ports/packages システム (Chapter 5 をご覧ください) を用いてサードパーティ製の package をダウンロードし、インストールできます。
FreeBSD のリリースをインストールし、 サードパーティ製の package をディスク上から利用したいのであれば、 dvd1 を使ってください。
その他の追加のディスクイメージも有用ですが、 インターネットへのアクセスが高速の環境では、 必須ではありません。
イメージを CD へ書き込む
次に、CD イメージをディスクに書き込んでください。 他の FreeBSD システム上で書き込みを行う場合には、 Section 16.5 (特に、Section 16.5.3 および Section 16.5.4) を読んで、 より詳しい情報を得てください。
他のプラットフォーム上で書き込みを行う場合には、 そのシステムにインストールされている CD ライタ用のユーティリティを利用してください。 提供されているイメージは標準の ISO フォーマットです。多くの CD ライタ用のアプリケーションがこのフォーマットに対応しています。
Note: カスタマイズした FreeBSD のリリースの構築に興味があるのであれば、 Release Engineering Article をご覧ください。
FreeBSD のディスクは FTP サイトと同じ配置がなされています。 これは FreeBSD をインストールする時において、 ネットワーク上の他のマシンが使うことのできるローカルな FTP サイトを簡単に構築できることをあらわしています。
FTP サイトのホストとなる FreeBD のコンピュータには、 CDROM をドライブに入れ /cdrom にマウントしてください。
# mount /cdrom
anonymous FTP のアカウントを /etc/passwd に作成してください。 /etc/passwd の編集には vipw(8) を使用して次の行を加えてください。
ftp:*:99:99::0:0:FTP:/cdrom:/nonexistent
FTP サービスを請け負うために /etc/inetd.conf で有効にしてください。
あなたのマシンにネットワークで繋がっているどのマシンも、 インストール時にメディアタイプで FTP を選択し、 FTP サイトメニューで “Other” を選んだ後 ftp://your machine と打ち込むことができます。
Note: もし FTP クライアントの起動メディア (通常はフロッピーディスク) の FreeBSD のバージョンが FTP サイトで提供されているバージョンと正確に同じでなければ、 sysinstall でのインストールはうまくいきません。 もしバージョンが異なり、バージョンを書き換えたいのであれば、 Options メニューで distribution name を any に変更してください。
Warning: この方法はローカルネットワーク上の、 ファイアウォールで保護されたマシンに有用です。 インターネットを介した (ローカルネットワークではない) 他のマシンに FTP サービスを提供することは、 あなたのマシンをクラッカーやその他好ましくない状況にさらします。 この方法を用いるときにはセキュリティの状態に注意することを 強く提言します。
あなたがフロッピーディスクからのインストールをしなければならない場合 (私たちはこの方法をとらないことを提案します)、 その理由はハードウェアがサポートされてなかったためか、 単にいばらの道を通ることを楽しんでいるからでしょうが、 インストール用のフロッピーディスクを用意する必要があります。
最低でも base ディレクトリ内のすべてのファイルをいれられるだけの 1.44 MB のフロッピーディスクが必要です。 これらのフロッピーを MS-DOS で作成している場合は、 フロッピーディスクは MS-DOS の FORMAT コマンドで初期化されなくてはなりません。 Windows をお使いの場合には、 エクスプローラーを使用してディスクを初期化してください (A: ドライブを右クリックして、 “フォーマット”を選択します)。
工場での初期化済みディスクを信用しないでください。 念のため自分でフォーマットし直してください。 ユーザからのトラブル報告の多くはきちんとフォーマットされていないディスクを使用したことが原因となっています。 フォーマットし直してくださいと述べているのは、 こういった理由からです。
他の FreeBSD マシンでフロッピーディスクを作成している場合、 フォーマットすることは悪いことではありません。 いちいち MS-DOS ファイルシステムのフロッピーディスクを作成する必要はありませんので、 bsdlabel コマンドと newfs コマンドを使って、 次のような手順で (3.5 インチ 1.44 MB ディスク用の) UFS ファイルシステムを作成することもできます:
# fdformat -f 1440 fd0.1440 # bsdlabel -w fd0.1440 floppy3 # newfs -t 2 -u 18 -l 1 -i 65536 /dev/fd0
これで他のファイルシステムと同様に mount して書き込むことができます。
フォーマットされたフロッピーディスクを用意したら、 それらにファイルをコピーしなくてはなりません。 配布ファイルはいくつかのかたまりにわかれていて、 これらかたまり 5 つで一般的な 1.44 MB のフロッピーに収まるようになっています。 フロッピーディスクに入るだけファイルを入れていって、 配布ファイルをすべてコピーしてください。 それぞれの配布ファイルはサブディレクトリにコピーする必要があります。 たとえば、 a:\base\base.aa, a:\base\base.ab のようになります。
Important: base セットの最初のフロッピーには、 base.inf ファイルも必要です。 インストールプログラムはこのファイルを読み込み、 配布ファイルを fetch し、連結する際に、 どれだけの数のかたまりに分かれているかを理解します。
インストールメディアの選択場面になったら、 Floppy を選択して、 残りの指定を行ってください。
ハードディスクの MS-DOS パーティションからインストールするときには、 配布ファイルを例えば c:\freebsd などとしてそのパーティションのルートディレクトリの freebsd ディレクトリにコピーします。 CDROM や FTP サイトにあるディレクトリ構造を反映してコピーしなければなりません。 そこで CD からコピーする場合には MS-DOS の xcopy コマンドの使用をおすすめします。 例えば、最低限の FreeBSD のインストールを行うには、 次のように準備します:
C:\> md c:\freebsd C:\> xcopy e:\bin c:\freebsd\bin\ /s C:\> xcopy e:\manpages c:\freebsd\manpages\ /s
ここで C: ドライブには十分な空き容量があり、 CDROM は E: ドライブに接続されているものとします。
CDROM ドライブを持っていない場合には、 ftp.FreeBSD.org から配布ファイルをダウンロードすることができます。 それぞれの配布ファイルは独自のディレクトリに入っています。 例えば、base 配布ファイルは 9.0/base/ ディレクトリにあります。
MS-DOS パーティションからたくさんの配布ファイルをインストールしたい (そしてディスクの容量がある) 場合、 それぞれ c:\freebsd ディレクトリ以下にインストールします。 -- BIN 配布ファイルは、最低限必要なものです。
テープからのインストールはおそらく FTP を利用したオンラインインストールか CDROM インストールを除けばもっとも簡単な方法でしょう。 インストールプログラムはファイルが単純に tar されていることを期待します。 必要な配布ファイルをすべて用意したら、 それらをテープ上に単純に tar します。
# cd /freebsd/distdir # tar cvf /dev/rwt0 dist1 ... dist2
インストールを行う際、 一時使用ディレクトリに十分な空きスペースを確保して、 作成したテープのすべてのファイルを格納できることを確認してください (一時使用ディレクトリは自分で選ぶことができます)。 テープの特性上、ランダムアクセスすることができませんので、 一時的にきわめて大量の容量を必要とします。
Note: インストールを始める時には、 起動フロッピーから立ち上げる前にテープをドライブにいれておかなくてはなりません。 さもないとインストール時のデバイス検出時にドライブを見つけられません。
3 種類のネットワークインストールを行うことができます。 イーサネット (標準的なイーサネットコントローラ)、 シリアルポート (PPP)、または、 パラレルポート (PLIP (laplink ケーブル使用)) を使用することができます。
ネットワークインストールのうちもっとも高速なものとして、 イーサネットアダプタがいつもよい選択となります。 FreeBSD はきわめて多くの PC イーサネットカードをサポートしています。 サポートされているカードの一覧 (と、必要な設定) は FreeBSD それぞれのリリースのハードウェアノートで提供されます。 サポートされている PCMCIA イーサネットカードを使う場合、 ラップトップの電源を入れる前に差し込んでおくことにも注意してください。 残念ながら、今の FreeBSD はインストール時の PCMCIA カードの活線挿抜には対応していません。
ネットワークでの IP アドレス、 アドレスクラスに対応したネットマスク、 マシン名を知っておくことも必要です。 PPP 接続を利用したインストールを行いたいが、 固定 IP アドレスを持っていないという場合は、 ISP が自動的に IP アドレスを割り当てます。 ネットワーク管理者に尋ねればどんな値を使ったらよいか教えてくれるでしょう。 もし他のホストを IP アドレスではなく名前で引きたい場合、 ネームサーバと、それを使うためのゲートウェイのアドレス (PPP をご使用の場合は、プロバイダの IP アドレスになります) も知らなくてはなりません。 HTTP プロキシ経由で FTP インストールを行いたい場合には、 プロキシサーバのアドレスも必要となります。 これらのうちすべて、またはいくつかを知らない場合には、 イーサネット経由でのインストールを始める前に、 ネットワーク管理者か ISP に相談するべきでしょう。
もしモデムを使用しているなら、 残された選択肢はほぼ間違いなく PPP でしょう。 早く正しくインストールするのに必要となりますので、 サービスプロバイダに関する情報を用意しておきましょう。
もし ISP に接続するのに PAP や CHAP を用いるなら (言い換えると、もし Windows で ISP に接続する時にスクリプトを使用していないのであれば)、 dial と ppp のプロンプトに対して入力するだけでいいです。 それ以外の場合、モデム固有の “AT コマンド”を使って ISP にダイヤルする方法を知っておく必要があります。 これで PPP ダイヤラはとてもシンプルな端末エミュレータのみを提供します。 これ以上の情報については ハンドブック や FAQ のユーザー PPP エントリーを参照してください。 問題が起きた場合には set log local ... コマンドを用いてログを画面に吐くこともできます。
FreeBSD の動いている別のマシンと直接接続が可能でしたら、 “laplink” パラレルポートケーブルを介してインストールすることもまた考えてみましょう。 パラレルポート経由のデータ転送スピードは、 シリアルラインでの一般的なスピード (最高 50 kbytes/sec) よりもずっと高速なので、より早くインストールすることができます。
NFS インストールはまったく単純明快です。 FreeBSD の配布ファイルを NFS サーバの好きな場所にコピーしておいて、 メディア選択で NFS を選択します。
もしサーバが“特権ポート”へのアクセスのみをサポートしている場合、 (Sun ワークステーションの標準はこうなっています) インストールを進める前に Options メニューで NFS Secure を選択してください。
イーサネットカードの性能が悪く、 転送速度が遅くて困っている場合には、 NFS Slow フラグを選択するといいでしょう。
NFS 経由でインストールするためには、 サブディレクトリも含んだマウントにサーバが対応している必要があります。 例えば FreeBSD 9.0 の配布ファイルが ziggy:/usr/archive/stuff/FreeBSD にあるとすると、マシン ziggy では /usr や /usr/archive/stuff だけでなく /usr/archive/stuff/FreeBSD の直接マウントが可能になっていなければなりません。
FreeBSD の /etc/exports ファイルでは、このことは -alldirs オプションによって制御されています。 他の NFS
サーバの場合だとまた話が違ってくるかもしれません。 もしサーバから “permission denied” が返ってくるようでしたら、
サブディレクトリマウントをちゃんと有効にできていないことが考えられます。
FreeBSD では、テキストベースの使いやすいインストールプログラムが用意されています。 FreeBSD 9.0-RELEASE 以降では bsdinstall、 FreeBSD 9.0-RELEASE より前のリリースでは sysinstall と呼ばれるインストールプログラムを使います。 この章では、bsdinstall の使い方について説明します。 sysinstall の利用については、 Chapter 2 で説明しています。
この章を読むと、以下のことがわかります。
FreeBSD インストールメディアの作り方。
FreeBSD がハードディスクをどのように分割し、参照するか。
bsdinstall をどのように起動するか。
bsdinstall が聞いてくる質問がどのような意味であり、 またどのように答えれば良いか。
この章を読む前に、以下のことを確認して下さい。
インストールしようとしているバージョンに付属しているサポートハードウェア一覧を読み、 あなたの使っているハードウェアがサポートされているかどうかを確認して下さい。
Note: このインストールの説明書は i386 (“PC 互換”) アーキテクチャのコンピュータを対象にしています。 他のプラットフォームに特有の説明についてはそのつど明記しています。 インストーラとこの文書で記述している内容の間には、 いくらかズレがあることがあります。 この章を正確で忠実な手順書としてではなく、 一般的なガイドとしてご利用ください。
FreeBSD をインストールする最小構成は、 FreeBSD のバージョンやハードウェアのアーキテクチャによって異なります。
以下の節では、最小構成についての情報をまとめています。 また、FreeBSD のインストール方法によって、 対応している CDROM ドライブ、 場合によってはネットワークアダプタが必要となります。 これに関しては Section 3.3.5 で説明します。
FreeBSD/i386 アーキテクチャは、 486 以上のプロセッサと、 少なくとも 64 MB の RAM が必要です。 最小のインストールでは、 少なくとも 1.1 MB のハードディスクの空き容量が必要です。
Note: 古いコンピュータでは、 速いプロセッサを入手するより、より多くの RAM やより多くの容量のハードドライブを用意するほうが重要です。
FreeBSD/amd64 を実行可能なプロセッサには 2 つのクラスがあります。 1 つ目のクラスは、AMD Athlon64, AMD Athlon64-FX, AMD Opteron やそれより新しいプロセッサです。
もう 1 つのクラスは、 Intel EM64T アーキテクチャを採用しているプロセッサです。 これらのプロセッサの例は、 Intel Core 2 Duo, Quad, Extreme プロセッサファミリ、 Intel Xeon 3000, 5000, 7000 系のプロセッサ、 および Intel Core i3, i5, i7 プロセッサです。
nVidia nForce3 Pro-150 ベースのコンピュータを使用するには、 BIOS のセットアップを使って、IO APIC を無効にする 必要があります。 もし、このようなオプションがなければ、 代わりに ACPI を無効にする必要があるでしょう。 Pro-150 チップセットには回避策が見つかっていないバグがあります。
すべての USB 内蔵の New World Apple® Macintosh® システムに対応しています。 複数の CPU を持つコンピュータは SMP に対応しています。
32-bit カーネルは、RAM の最初の 2 GB だけを利用できます。 Blue & White PowerMac G3 では、FireWire® に対応していません。
FreeBSD/sparc64 が対応しているハードウェアの一覧については、 FreeBSD/sparc64 プロジェクトをご覧ください。
現時点では、 他のオペレーティングシステムとディスクの共有ができないので、 FreeBSD/sparc64 専用のディスクが必要です。
FreeBSD がサポートしているハードウェアアーキテクチャやデバイスの一覧は、 各リリースのハードウェアノートとして提供されます。 このドキュメントは通常リリースメディアのルートディレクトリにある HARDWARE.TXT という名前のファイルで見ることができます。 ハードウェアリストは、FreeBSD のウェブサイトの リリース情報 のページにもあります。
FreeBSD をインストールするコンピュータに残されている価値のあるデータをすべてバックアップしてください。 そして、インストール作業を進める前にバックアップが正しく取れていることを確認してください。 FreeBSD のインストーラは、ハードディスクに変更を加える前に確認を求めますが、 一度実際に書き込む作業が始まってしまうと、 もう元に戻すことはできません。
インストールするオペレーティングシステムが FreeBSD のみで、 ハードディスクすべてを使ってインストールする場合には、 この節の後半を飛ばすことができます。 しかし、ハードディスクに FreeBSD と他のオペレーティングシステムを共存させる必要がある場合には、 ディスクレイアウトに関する基本的な部分を理解しておく必要があります。
ハードディスクを複数の塊に分割することができます。 これらの塊は パーティション と呼ばれます。
ディスクをパーティションに分割する方法は 2 通りあります。 伝統的な Master Boot Record (MBR) では、 ディスク 1 台あたり 4 つまでのパーティションテーブルを持つことができます (歴史的な理由により、FreeBSD は、これらのパーティションのことを スライス と呼びます)。 大きなディスクにとって、作成できるパーティションの数が 4 つという制限は限定的なので、 プライマリパーティションの 1 つに拡張パーティションを作成できます。 論理パーティション と呼ばれる特別のパーティションは、 この拡張パーティションの内部に作成できます。 これは、多少扱いにくいものです。
GUID Partition Table (GPT) は、 ディスクをパーティションに分ける簡単で新しい方法です。 伝統的な MBR パーティションテーブルと比べると、 GPT ははるかに万能です。一般的な GPT の実装では、 1 つのディスクに 128 個までのパーティションの作成が可能です。 扱いにくい論理パーティションのような回避策は必要ありません。
Warning: Windows XP のような古いオペレーティングシステムは、 GPT パーティションと互換性がありません。 FreeBSD をこのようなオペレーティングシステムとディスク上で共存させる場合には、 MBR パーティションテーブルを使う必要があります。
FreeBSD の標準のブートローダは、プライマリまたは GPT パーティションに対応しています (FreeBSD の起動プロセスのより詳しい情報については、 Chapter 13 をご覧ください)。 ディスク上のすべてのプライマリ、もしくは GPT パーティションが使われているのであれば、 そのひとつを FreeBSD のために開放してください。
FreeBSD の最小のインストールでは、1 GB 程度のディスク容量が必要です。 しかし、これは 非常に 小さなインストールであり、 自分のファイルを作成するスペースはほとんど残らないでしょう。 現実的には、グラフィカルな環境が必要なければ 3 GB、 グラフィカルユーザインタフェースを使用するのであれば 5 GB 以上は必要でしょう。 サードパーティ製ソフトウェアをインストールするならば、 さらに多くのスペースが必要になります。
さまざまな パーティションサイズを変更するフリーや商用のツール を利用できます。 GParted Live は、GParted パーティションエディタを含む完全なライブ CD です。 多くの Linux Live CD ディストリビューションでも GParted を利用できます。
Warning: ディスクパーティションのアプリケーションは、 ディスク上のデータを壊す可能性があります。 ディスクのパーティションを変更する前に、 必ず全体のバックアップをとり、完全性を検証してください。
Microsoft Vista のパーティションサイズの変更は、難しい可能性があります。 このような作業を行う際は、 Vista のインストール CDROM を手元に置いておくことをお勧めします。
Example 3-1. 既存のパーティションを使用
既に Windows がインストールされている 40 GB のハードディスクが 1 台接続されており、そのハードディスクは、 20 GB の 2 つのパーティションに分割されていると仮定します。 Windows では、それぞれ C: および D: と呼びます。 C: パーティションには 10 GB のデータ、 D: パーティションには 5 GB のデータがあるとします。
D: にあるデータをすべて C: にコピーすれば、 2 つ目のパーティションを解放し、FreeBSD のために使うことができるようになります。
Example 3-2. 既存のパーティションを縮小する
Windows がインストールされている 40 GB のハードディスクが 1 台接続された PC を使用していると仮定します。 ディスクのすべてを 1 つの大きなパーティションとして使用しています。 Windows では、この 40 GB のパーティションを 1 つの C: ドライブとして表示します。 15 GB のデータがあるとします。 Windows が 20 GB パーティション、 残りの 20 GB パーティションを FreeBSD で使いたいとします。
インストールを行うには、2 つの方法があります。
Windows のデータをバックアップし、インストール時に 20 GB のパーティションを作成して再インストールする。
先に述べた GParted をはじめとするパーティションを縮小するツールを使って、 Windows のパーティションを縮小し、フリーの空間上に、 FreeBSD のためのパーティションを作成する。
異なるオペレーティングシステムを含むディスクパーティションでは、 どのオペレーティングシステムも同時に実行できるのは 1 つです。 複数のオペレーティングシステムを同時に実行する方法については、 Virtualization の章で説明します。
FreeBSD のインストール方法によっては、ネットワークに接続し、 ファイルのダウンロードが必要です。 イーサネットに接続 (または、ケーブル / DSL モデム経由でイーサネットインタフェースを利用して接続) するためには、 インストール中にこれらの情報を入力する必要があります。
DHCP は、 自動的にネットワークの設定情報を得るのによく使われます。 DHCP を利用できない場合には、 システム管理者かプロバイダにネットワーク情報を問い合わせる必要があります。
ネットワーク情報
IP アドレス
サブネットマスク
デフォルトルータの IP アドレス
ローカルネットワークのドメイン名
DNS サーバの IP アドレス
FreeBSD プロジェクトでは FreeBSD の各リリースができる限り安定するよう努力していますが、 時々バグが発生してしまうことがあります。極まれに、 発生したバグがインストールプロセスに影響を与えることがあります。 これらの問題は発見され解決されるとともに、 FreeBSD のウェブサイトの FreeBSD Errata に掲示されます。 インストールに関して注意すべき既知の問題が無いことを確かめるために、 インストールする前に Errata を確認してください。
すべてのリリースに関する情報や Errata は、 FreeBSD のウェブサイト の リリース情報 の項で確認することができます。
FreeBSD のインストールは、 インストール用の CD, DVD または USB メモリスティックとともに、コンピュータを起動するところから始まります。 インストーラは、オペレーティングシステムで実行できるようなプログラムではありません。
FreeBSD のインストールファイルをすべて含んでいる通常のインストールメディアに加え、 bootonly を利用できます。 bootonly インストールメディアは、インストールファイルを含んでいません。 そのかわり、インストールの途中ですべてのファイルをネットワークからダウンロードします。 そのため、bootonly インストール CD は小さく、 また、インストール中に必要なファイルだけをダウンロードするので、 使用するバンド幅を減らすことが出来ます。
FreeBSD のインストールメディアは FreeBSD ウェブサイト から入手できます。
Tip: FreeBSD の入っている CDROM や DVD, USB メモリスティックを持っているのであれば、 この章を飛ばしてもかまいません。
FreeBSD の CD および DVD イメージは、 起動可能な ISO ファイルです。 インストールには、一枚の CD または DVD があれば十分です。 現在使用しているオペレーティングシステムにインストールされている、 ISO イメージを CD に書き込むアプリケーションを用いて、 起動可能な CD または DVD を作成してください。
起動可能なメモリスティックを作成する場合には、 以下の手順にしたがってください。
メモリスティックのイメージの取得
FreeBSD 9.0-RELEASE 以降のメモリスティックのイメージは、 ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/arch/arch/ISO-IMAGES/version/FreeBSD-version-RELEASE-arch-memstick.img の ISO-IMAGES/ ディレクトリからダウンロードできます。 ここで、arch と version の部分を、 それぞれインストールするアーキテクチャとバージョン番号に置き換えてください。 たとえば、FreeBSD/i386 9.0-RELEASE のメモリスティックのイメージは、ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/i386/i386/ISO-IMAGES/9.0/FreeBSD-9.0-RELEASE-i386-memstick.img から入手できます。
Tip: FreeBSD 8.X 以前では、 これとは異なるディレクトリパスが使われています。 FreeBSD 8.X 以前のバージョンのダウンロードとインストールの詳細については、 Chapter 2 で説明しています。
メモリスティックイメージには、.img という拡張子がついています。ISO-IMAGES/ ディレクトリには複数の異なるイメージがあり、インストールする FreeBSD のバージョンや、インストールするハードウェアによって、 必要なファイルが変わります。
Important: 以下の作業によってデータが 消去 されるので、 先に進む前に、使用する USB スティックにあるデータをバックアップしてください。
イメージファイルをメモリスティックに書き込む
FreeBSD を使ってイメージを書き込む
Warning: 以下の例では、イメージを書き込むデバイスを /dev/da0 としています。 正しいデバイスを出力先に設定していることを十分確認してくだい。 さもなければ、現在あるデータを破壊してしまうことになります。
dd(1) を使ってイメージを書き込む
.img ファイルは、 通常のファイルではありません。 メモリスティックの完全な内容の イメージ です。 通常のファイルのようなコピーは できません。dd(1) を使用して直接ターゲットディスクに書き込む必要があります。
# dd if=FreeBSD-9.0-RELEASE-i386-memstick.img of=/dev/da0 bs=64k
Windows を使ってイメージを書き込む
Warning: 適切なドライブレターを出力先に設定していることを十分確認してくだい。 さもなければ、現在あるデータを破壊してしまうでしょう。
Image Writer for Windows を入手する
Image Writer for Windows は、 イメージファイルをメモリスティックに正しく書き込むことのできるフリーのアプリケーションです。 https://launchpad.net/win32-image-writer/ からダウンロードして、フォルダに展開してください。
イメージライタを使ってイメージを書き込む
Win32DiskImager アイコンをダブルクリックして、プログラムを起動します。 Device の下に表示されるデバイスレターが、 メモリスティックのドライブであることを確認してください。 フォルダのアイコンをクリックして、 メモリスティックに書き込むイメージファイルを選択します。 [ Save ] をクリックして、 イメージファイルの名前をアクセプトしてください。 すべてが正しく行われたかどうか、また、 他のウィンドウでメモリスティックのフォルダが開かれていないことを確認してください。 準備ができたら、[ Write ] を押して、 メモリスティックにイメージファイルを書き込みます。
Note: フロッピーディスクからのインストールにはもはや対応していません。
これで FreeBSD をインストールする用意ができました。
Important: デフォルトでは、次のメッセージが表示されるまで インストーラはディスクに何の変更も加えません。
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?この警告の前であれば、 いつでもハードディスクの内容を変更することなくインストールを中断できます。 もし、何かを間違って設定してしまったことが心配ならば、 最後の警告の前に単にコンピュータをオフにしてください。 被害を残さずに済みます。
Section 3.3.5 で説明されている “起動” USB スティックを使用する場合には、コンピュータを立ち上げる前に、 USB スティックを挿入してください。
CDROM から起動する場合には、コンピュータを立ち上げ、 すぐに CDROM を挿入してください。
CDROM または USB から起動するようにコンピュータを設定してください。 この作業は、インストールに用いるメディアによって異なります。 起動するデバイスを BIOS で設定できます。 ほとんどのシステムでは、通常、起動時に F10, F11, F12 または Escape キーを押すことで、起動するデバイスを選択できます。
もし、コンピュータがすでに存在している OS を読み込み、 通常通り起動してしまったのであれば、 以下の原因が考えられます。
起動ディスクが起動プロセスにおいて十分早いタイミングで挿入されていません。 ディスクをそのままにしてコンピュータを再起動してください。
先程の BIOS の変更が適切に行われていません。 正しいオプションを設定してやり直してください。
使用している BIOS は、 希望しているメディアからの起動に対応していません。 Plop Boot Manager を使うと、古いコンピュータを CD や USB メディアから起動できます。
FreeBSD は起動を開始します。CDROM から起動している場合、 次のような画面が表示されるでしょう (バージョン情報は省略しています)。
Booting from CD-ROM... 645MB medium detected CD Loader 1.2 Building the boot loader arguments Looking up /BOOT/LOADER... Found Relocating the loader and the BTX Starting the BTX loader BTX loader 1.00 BTX version is 1.02 Consoles: internal video/keyboard BIOS CD is cd0 BIOS drive C: is disk0 BIOS drive D: is disk1 BIOS 636kB/261056kB available memory FreeBSD/i386 bootstrap loader, Revision 1.1 Loading /boot/defaults/loader.conf /boot/kernel/kernel text=0x64daa0 data=0xa4e80+0xa9e40 syms=[0x4+0x6cac0+0x4+0x88e9d] \
FreeBSD ブートローダは以下を表示します。
10 秒間待つか、Enter を押してください。
ほとんどのコンピュータでは、 起動中にキーボードの C を押しておくと、CD から起動します。 別な方法では Command+Option+O+F、 または non-Apple キーボードでは Windows+Alt+O+F を押してください。 0 > プロンプトで
boot cd:,\ppc\loader cd:0
と入力してください。
キーボードのない Xserves では、 Open Firmware に起動する方法について Apple's support web site を参照してください。
ほとんどの SPARC64 システムは、 ディスクから自動的に起動するように設定されています。 FreeBSD をインストールするには、ネットワークまたは CDROM から起動する必要があり、そのためには PROM (OpenFirmware) に入る必要があります。
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(1) または cu(1) では ~#) を送信して、 PROM プロンプトを表示してください。 次のような表示です。
okok {0}
![]()
ここで、CDROM をドライブに挿入し、 PROM プロンプトで boot cdrom と入力してください。
画面に表示される数百行の文字列は (バッファに) 記憶されており、 再表示することが出来ます。
バッファを再表示するには、Scroll Lock キーを押します。 これで、画面をスクロールできます。結果を見るためには、矢印キーもしくは PageUp か PageDown を使います。 Scroll Lock をもう一度押すと、スクロールを停止します。
直ちにこの作業を行って、カーネルがデバイス検出を実行している時に 画面の外に流れた文字列を再表示してください。 Figure 3-2 によく似た画面が現われるでしょうが、 あなたのコンピュータに搭載されているデバイスによって、表示される文字列は異なるでしょう。
Figure 3-2. 典型的なデバイス検出結果の例
Copyright (c) 1992-2011 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
The Regents of the University of California. All rights reserved.
FreeBSD is a registered trademark of The FreeBSD Foundation.
FreeBSD 9.0-RELEASE #0 r225473M: Sun Sep 11 16:07:30 BST 2011
root@psi:/usr/obj/usr/src/sys/GENERIC amd64
CPU: Intel(R) Core(TM)2 Duo CPU T9400 @ 2.53GHz (2527.05-MHz K8-class CPU)
Origin = "GenuineIntel" Id = 0x10676 Family = 6 Model = 17 Stepping = 6
Features=0xbfebfbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CLFLUSH,DTS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE>
Features2=0x8e3fd<SSE3,DTES64,MON,DS_CPL,VMX,SMX,EST,TM2,SSSE3,CX16,xTPR,PDCM,SSE4.1>
AMD Features=0x20100800<SYSCALL,NX,LM>
AMD Features2=0x1<LAHF>
TSC: P-state invariant, performance statistics
real memory = 3221225472 (3072 MB)
avail memory = 2926649344 (2791 MB)
Event timer "LAPIC" quality 400
ACPI APIC Table: <TOSHIB A0064 >
FreeBSD/SMP: Multiprocessor System Detected: 2 CPUs
FreeBSD/SMP: 1 package(s) x 2 core(s)
cpu0 (BSP): APIC ID: 0
cpu1 (AP): APIC ID: 1
ioapic0: Changing APIC ID to 1
ioapic0 <Version 2.0> irqs 0-23 on motherboard
kbd1 at kbdmux0
acpi0: <TOSHIB A0064> on motherboard
acpi0: Power Button (fixed)
acpi0: reservation of 0, a0000 (3) failed
acpi0: reservation of 100000, b6690000 (3) failed
Timecounter "ACPI-safe" frequency 3579545 Hz quality 850
acpi_timer0: <24-bit timer at 3.579545MHz> port 0xd808-0xd80b on acpi0
cpu0: <ACPI CPU> on acpi0
ACPI Warning: Incorrect checksum in table [ASF!] - 0xFE, should be 0x9A (20110527/tbutils-282)
cpu1: <ACPI CPU> on acpi0
pcib0: <ACPI Host-PCI bridge> port 0xcf8-0xcff on acpi0
pci0: <ACPI PCI bus> on pcib0
vgapci0: <VGA-compatible display> port 0xcff8-0xcfff mem 0xff400000-0xff7fffff,0xe0000000-0xefffffff irq 16 at device 2.0 on pci0
agp0: <Intel GM45 SVGA controller> on vgapci0
agp0: aperture size is 256M, detected 131068k stolen memory
vgapci1: <VGA-compatible display> mem 0xffc00000-0xffcfffff at device 2.1 on pci0
pci0: <simple comms> at device 3.0 (no driver attached)
em0: <Intel(R) PRO/1000 Network Connection 7.2.3> port 0xcf80-0xcf9f mem 0xff9c0000-0xff9dffff,0xff9fe000-0xff9fefff irq 20 at device 25.0 on pci0
em0: Using an MSI interrupt
em0: Ethernet address: 00:1c:7e:6a:ca:b0
uhci0: <Intel 82801I (ICH9) USB controller> port 0xcf60-0xcf7f irq 16 at device 26.0 on pci0
usbus0: <Intel 82801I (ICH9) USB controller> on uhci0
uhci1: <Intel 82801I (ICH9) USB controller> port 0xcf40-0xcf5f irq 21 at device 26.1 on pci0
usbus1: <Intel 82801I (ICH9) USB controller> on uhci1
uhci2: <Intel 82801I (ICH9) USB controller> port 0xcf20-0xcf3f irq 19 at device 26.2 on pci0
usbus2: <Intel 82801I (ICH9) USB controller> on uhci2
ehci0: <Intel 82801I (ICH9) USB 2.0 controller> mem 0xff9ff800-0xff9ffbff irq 19 at device 26.7 on pci0
usbus3: EHCI version 1.0
usbus3: <Intel 82801I (ICH9) USB 2.0 controller> on ehci0
hdac0: <Intel 82801I High Definition Audio Controller> mem 0xff9f8000-0xff9fbfff irq 22 at device 27.0 on pci0
pcib1: <ACPI PCI-PCI bridge> irq 17 at device 28.0 on pci0
pci1: <ACPI PCI bus> on pcib1
iwn0: <Intel(R) WiFi Link 5100> mem 0xff8fe000-0xff8fffff irq 16 at device 0.0 on pci1
pcib2: <ACPI PCI-PCI bridge> irq 16 at device 28.1 on pci0
pci2: <ACPI PCI bus> on pcib2
pcib3: <ACPI PCI-PCI bridge> irq 18 at device 28.2 on pci0
pci4: <ACPI PCI bus> on pcib3
pcib4: <ACPI PCI-PCI bridge> at device 30.0 on pci0
pci5: <ACPI PCI bus> on pcib4
cbb0: <RF5C476 PCI-CardBus Bridge> at device 11.0 on pci5
cardbus0: <CardBus bus> on cbb0
pccard0: <16-bit PCCard bus> on cbb0
isab0: <PCI-ISA bridge> at device 31.0 on pci0
isa0: <ISA bus> on isab0
ahci0: <Intel ICH9M AHCI SATA controller> port 0x8f58-0x8f5f,0x8f54-0x8f57,0x8f48-0x8f4f,0x8f44-0x8f47,0x8f20-0x8f3f mem 0xff9fd800-0xff9fdfff irq 19 at device 31.2 on pci0
ahci0: AHCI v1.20 with 4 3Gbps ports, Port Multiplier not supported
ahcich0: <AHCI channel> at channel 0 on ahci0
ahcich1: <AHCI channel> at channel 1 on ahci0
ahcich2: <AHCI channel> at channel 4 on ahci0
acpi_lid0: <Control Method Lid Switch> on acpi0
battery0: <ACPI Control Method Battery> on acpi0
acpi_button0: <Power Button> on acpi0
acpi_acad0: <AC Adapter> on acpi0
acpi_toshiba0: <Toshiba HCI Extras> on acpi0
acpi_tz0: <Thermal Zone> on acpi0
attimer0: <AT timer> port 0x40-0x43 irq 0 on acpi0
Timecounter "i8254" frequency 1193182 Hz quality 0
Event timer "i8254" frequency 1193182 Hz quality 100
atkbdc0: <Keyboard controller (i8042)> port 0x60,0x64 irq 1 on acpi0
atkbd0: <AT Keyboard> irq 1 on atkbdc0
kbd0 at atkbd0
atkbd0: [GIANT-LOCKED]
psm0: <PS/2 Mouse> irq 12 on atkbdc0
psm0: [GIANT-LOCKED]
psm0: model GlidePoint, device ID 0
atrtc0: <AT realtime clock> port 0x70-0x71 irq 8 on acpi0
Event timer "RTC" frequency 32768 Hz quality 0
hpet0: <High Precision Event Timer> iomem 0xfed00000-0xfed003ff on acpi0
Timecounter "HPET" frequency 14318180 Hz quality 950
Event timer "HPET" frequency 14318180 Hz quality 450
Event timer "HPET1" frequency 14318180 Hz quality 440
Event timer "HPET2" frequency 14318180 Hz quality 440
Event timer "HPET3" frequency 14318180 Hz quality 440
uart0: <16550 or compatible> port 0x3f8-0x3ff irq 4 flags 0x10 on acpi0
sc0: <System console> at flags 0x100 on isa0
sc0: VGA <16 virtual consoles, flags=0x300>
vga0: <Generic ISA VGA> at port 0x3c0-0x3df iomem 0xa0000-0xbffff on isa0
ppc0: cannot reserve I/O port range
est0: <Enhanced SpeedStep Frequency Control> on cpu0
p4tcc0: <CPU Frequency Thermal Control> on cpu0
est1: <Enhanced SpeedStep Frequency Control> on cpu1
p4tcc1: <CPU Frequency Thermal Control> on cpu1
Timecounters tick every 1.000 msec
hdac0: HDA Codec #0: Realtek ALC268
hdac0: HDA Codec #1: Lucent/Agere Systems (Unknown)
pcm0: <HDA Realtek ALC268 PCM #0 Analog> at cad 0 nid 1 on hdac0
pcm1: <HDA Realtek ALC268 PCM #1 Analog> at cad 0 nid 1 on hdac0
usbus0: 12Mbps Full Speed USB v1.0
usbus1: 12Mbps Full Speed USB v1.0
usbus2: 12Mbps Full Speed USB v1.0
usbus3: 480Mbps High Speed USB v2.0
ugen0.1: <Intel> at usbus0
uhub0: <Intel UHCI root HUB, class 9/0, rev 1.00/1.00, addr 1> on usbus0
ugen1.1: <Intel> at usbus1
uhub1: <Intel UHCI root HUB, class 9/0, rev 1.00/1.00, addr 1> on usbus1
ugen2.1: <Intel> at usbus2
uhub2: <Intel UHCI root HUB, class 9/0, rev 1.00/1.00, addr 1> on usbus2
ugen3.1: <Intel> at usbus3
uhub3: <Intel EHCI root HUB, class 9/0, rev 2.00/1.00, addr 1> on usbus3
uhub0: 2 ports with 2 removable, self powered
uhub1: 2 ports with 2 removable, self powered
uhub2: 2 ports with 2 removable, self powered
uhub3: 6 ports with 6 removable, self powered
ugen2.2: <vendor 0x0b97> at usbus2
uhub8: <vendor 0x0b97 product 0x7761, class 9/0, rev 1.10/1.10, addr 2> on usbus2
ugen1.2: <Microsoft> at usbus1
ada0 at ahcich0 bus 0 scbus1 target 0 lun 0
ada0: <Hitachi HTS543225L9SA00 FBEOC43C> ATA-8 SATA 1.x device
ada0: 150.000MB/s transfers (SATA 1.x, UDMA6, PIO 8192bytes)
ada0: Command Queueing enabled
ada0: 238475MB (488397168 512 byte sectors: 16H 63S/T 16383C)
ada0: Previously was known as ad4
ums0: <Microsoft Microsoft 3-Button Mouse with IntelliEyeTM, class 0/0, rev 1.10/3.00, addr 2> on usbus1
SMP: AP CPU #1 Launched!
cd0 at ahcich1 bus 0 scbus2 target 0 lun 0
cd0: <TEAC DV-W28S-RT 7.0C> Removable CD-ROM SCSI-0 device
cd0: 150.000MB/s transfers (SATA 1.x, ums0: 3 buttons and [XYZ] coordinates ID=0
UDMA2, ATAPI 12bytes, PIO 8192bytes)
cd0: cd present [1 x 2048 byte records]
ugen0.2: <Microsoft> at usbus0
ukbd0: <Microsoft Natural Ergonomic Keyboard 4000, class 0/0, rev 2.00/1.73, addr 2> on usbus0
kbd2 at ukbd0
uhid0: <Microsoft Natural Ergonomic Keyboard 4000, class 0/0, rev 2.00/1.73, addr 2> on usbus0
Trying to mount root from cd9660:/dev/iso9660/FREEBSD_INSTALL [ro]...
丹念に検出結果をチェックして、あなたが予期したすべてのデバイスを FreeBSD が検出できた事を確認してください。デバイスが見つからなかった場合、 検出結果へ表示されません。 カーネルモジュール を構築することで、 GENERIC カーネルに含まれていないデバイスのサポートを追加することができます。
デバイス検出後、 Figure 3-3 が表示されます。 インストールメディアは、FreeBSD のインストール、"live CD"、または FreeBSD シェルへのアクセスの 3 つの目的に利用出来ます。 矢印キーを使ってオプションを選択し、 Enter を押してください。
ここで [ Install ] を選択すると、インストール作業が始まります。
bsdinstall は、Nathan Whitehorn <nwhitehorn@FreeBSD.org>
により書かれた、 テキストベースのインストールプログラムです。 2011 年の FreeBSD 9.0
で導入されました。
Note: Kris Moore
<kmoore@FreeBSD.org>の pc-sysinstall は、 PC-BSD に含まれており、 FreeBSD のインストール にも使用できます。 bsdinstall と混同されることもありますが、 この 2 つのインストーラには関係はありません。
bsdinstall のメニューは、カーソルキー、 Enter, Tab, Space 等で操作します。
使用しているシステムのコンソールにもよりますが、 bsdinstall は、 最初にデフォルト以外のキーボードレイアウト使うかどうかを尋ねてきます。
[ YES ] を選択すると、 以下のキーボード選択画面が表示されます。 そうでなければ、この選択メニューは表示されず、 デフォルトのキーボードマップが使われます。
システムのキーボードに最も近いキーマップを上下のカーソルキーで選び、 Enter キーを押してください。
Note: Esc を押すと、 デフォルトのキーボードマップを使うようになります。 どのキーボードマップを選べばよいかわからない場合には、 United States of America ISO-8859-1 キーマップを選ぶとよいでしょう。
次に bsdinstall は、 新しくインストールするシステムに与えるホスト名の入力に移ります。
入力するホスト名は、 machine3.example.com のように完全修飾のホスト名で入力してください。
次に、 bsdinstall は、インストールするオプションのコンポーネントの選択に移ります。
どのコンポーネントをインストールするかは、 システムの用途と用意されているディスク容量に依存します。 FreeBSD カーネルとユーザランド (総称 は “base system”) は、 常にインストールされます。
インストールのタイプによっては表示されないコンポーネントもあります。
オプションのコンポーネント
doc - 追加の文書。多くは歴史的な興味のものです。 FreeBSD ドキュメンテーションプロジェクトが提供している文書は、 あとでインストールされます。
games - fortune, rot13 などの伝統的な BSD ゲームをインストールします。
lib32 - 32-bit のアプリケーションを 64-bit 版の FreeBSD で実行する際に必要となる互換ライブラリ。
ports - FreeBSD Ports Collection
Ports Collection は、 ソフトウェアのインストールを簡単に行う方法を提供します。 Ports Collection は、 ソフトウェアをコンパイルするのに必要なソースコードを含んでいません。 サードパーティ製ソフトウェアパッケージのダウンロード、 コンパイル、インストールを自動化するように設計されたファイルの集まりです。 Chapter 5 で Ports Collection の使い方を説明します。
Warning: インストールプログラムは、 システムのディスクに十分な空き容量があるかどうかを確認しないので、 このオプションを選択する際には、 ハードディスクの容量が十分あることを確認してください。 FreeBSD 9.0 では、Ports Collection が必要とする容量は、 約 500 MB です。 より最新の FreeBSD のバージョンでは、 安全のためにもう少し大きなサイズを想定してください。
src - システムのソースコード
FreeBSD には、 カーネルとユーザランド両方のソースコードが付属しています。 ほとんどのアプリケーションは必要としませんが、 ソースで提供されているソフトウェア (デバイスドライバやカーネルモジュールなど) によってはコンパイル時、 または FreeBSD そのものを開発する場合に必要となります。
すべてのソースツリーをインストールするには 1 GB のディスク容量を必要とします。 また、FreeBSD システム全体のコンパイルには、 さらに 5 GB の容量が必要です。
bootonly インストールメディアは、 インストールファイルを含んでいません。 bootonly インストールメディアを使う場合には、 ネットワーク経由でファイルをダウンロードする必要があります。
Section 3.9.2 に示されているように、 ネットワーク接続の設定が終わっていれば、ミラーサイトが選択されます。 ミラーサイトは、FreeBSD ファイルのコピーをキャッシュしています。 FreeBSD をインストールするコンピュータと同じ地域のミラーサイトを選んでください。 ターゲットコンピュータの近くにミラーがあると、 ファイルのダウンロードは早く終わるので、インストールの時間が短くなります。
インストールファイルをローカルメディアに用意できたら、 インストールは先に進みます。
FreeBSD へディスク領域を割り当てるには 3 つの方法があります。 Guided によるパーティションの分割方法では、 ディスクパーティションを自動的に設定します。 一方 Manual によるパーティションの分割方法は、 高度な知識を持つユーザ向けで、 カスタマイズしたパーティションを作成できます。 3 つ目の方法として、gpart(8), fdisk(8), bsdlabel(8) のようなコマンドラインのプログラムを実行できるシェルを利用する方法を選択できます。
複数のディスクが接続されている場合には、 FreeBSD をインストールするディスクを選択してください。
ディスクのすべて、または一部を FreeBSD に割り当てます。 [ Entire Disk ] を選択すると、 一般的なパーティションレイアウトが作成されます。 [ Partition ] を選択すると、 ディスクの使用していない領域にパーティションレイアウトを作成します。
パーティションのレイアウトを作成したら、 正しく作成できているかを注意深く確認してください。 間違いを発見したら、 [ Revert ] を選択して、 直前に作成したパーティションをリセットしてください。 また、[ Auto ] を選択すると、 自動的にもう一度 FreeBSD パーティションを作成します。 パーティションを手動で作成、変更、削除できます。 正しくパーティションを作成出来たら、 [ Finish ] を選択し、 インストールを進めてください。
Manual によるパーティションの分割では、 直接パーティションエディタが起動します。
ドライブ (この例では ada0) をハイライトし、 [ Create ] を選択すると、 partitioning scheme を選択するメニューが表示されます。
PC 互換のコンピュータでは、通常 GPT によるパーティション分割が最も適切な選択となります。 GPT に対応していないような古い PC オペレーティングシステムでは、 MBR パーティションを使う必要があります。 他のパーティションスキームは、使うことがまれであったり、 古いコンピュータで用いられます。
Table 3-1. パーティションスキーム
| 省略形 | 説明 |
|---|---|
| APM | Apple パーティションマップ。 PowerPC® Macintosh で使われます。 |
| BSD | MBR を用いない BSD ラベル。しばしば "dangerously dedicated mode" と呼ばれます。 bsdlabel(8) をご覧ください。 |
| GPT | GUID パーティションテーブル |
| MBR | Master Boot Record |
| PC98 | MBR の亜種。NEC PC-98 コンピュータで使われます。 |
| VTOC8 | Volume Table Of Contents。 Sun SPARC64 および UltraSPARC コンピュータで使われます。 |
パーティションスキームを選択して作成した後で、 もう一度 [ Create ] を選択すると、 新しいパーティションを作成します。
標準の FreeBSD GPT のインストールでは、 少なくとも 3 つのパーティションが使われます。
標準的な FreeBSD GPT パーティション
freebsd-boot - FreeBSD ブートコード。 このパーティションは、ディスクの先頭にある必要があります。
freebsd-ufs - FreeBSD UFS ファイルシステム。
freebsd-swap - FreeBSD スワップ空間。
複数のファイルシステムのパーティションを使うことができます。 /, /var, /tmp そして /usr といった伝統的なパーティション分割のレイアウトを好む人もいます。 レイアウトの例が Example 3-3 にあります。
利用可能な GPT パーティションタイプの一覧については、gpart(8) をご覧ください。
サイズを入力する際に、 K (キロバイト)、M (メガバイト)、 G (ギガバイト) といった通常の省略形を使用出来ます。
Tip: セクタを適切に配置することで、 最良のパフォーマンスを得ることができます。 また、パーティションサイズを 4K バイトの偶数倍にすると 512 バイトまたは 4K バイトのセクタでドライブが配置しやすくなります。 一般的に、 4K の偶数倍の場所からパーティションが開始するように設定する簡単な方法は、 1M または 1G の偶数倍のパーティションサイズを用いることです。 ただし、例外があり、現在のところ freebsd-boot パーティションは、 ブートコードの制限により 512K 以下である必要があります。
ファイルシステムを持つパーティションでは、 マウントポイントが必要となります。 1 つの UFS パーティションだけを作成するのであれば、 マウントポイントは / となります。
同様に label の作成も必要です。 ラベルは作成したパーティションを認識するための名前です。 ドライブ名や番号は、 ドライブが別のコントローラやポートに接続されると変わることがありますが、 パーティションラベルは変わりません。 /etc/fstab のようなファイルの中で、 ドライブ名やパーティション番号ではなく、ラベルを参照することにより、 システムがハードウェアの変更に対して、より寛容になります。 GPT のラベルは、ディスクが接続されると /dev/gpt/ に現れます。他のパーティションスキームでは別のラベルとなり、 /dev/ 以下の異なるディレクトリにラベルが現れます。
Tip: 同じ名前による衝突を避けるため、 すべてのファイルシステムに対し、一意的な名前使ってください。 コンピュータ名、使用、位置情報を表す単語をラベルに追加できます。 たとえば、研究室のコンピュータの UFS のルートパーティションを "labroot" または "rootfs-lab" とします。
Example 3-3. 伝統的なファイルシステムのパーティションを作成する。
伝統的なパーティションレイアウト (/, /var, /tmp および /usr ディレクトリが各パーティションの別のファイルシステム) を作成するには、 GPT パーティションスキームを作成し、 その後、示されているようにパーティションを作成してください。 示されているパーティションサイズは 20G のディスク用です。 ディスクにより多くの容量があれば、swap または /var パーティションを大きく取ると良いでしょう。 ここで示されているラベルには、"example" を意味する ex が付けられていますが、 実際には上で説明したように、 これとは別のユニークなラベルをつけてください。
カスタムパーティション を作成したら [ Finish ] を選択して、 インストールを先に進んでください。
インストールのためにおこなうハードディスクに対する変更をやめるなら、 ここが最後のチャンスでもあります。
[ Commit ] を選択して、 Enter キーを押すとインストールが開始します。 もし変更が必要であれば、 [ Back ] を選択してパーティションエディタまで戻ってください。 [ Revert & Exit ] を選択すると、 ハードドライブへの変更なしにインストールを終了できます。
インストールにかかる時間は、どのディストリビューションを選んだか、 どのインストールメディアを使ったか、 そしてコンピュータの速度にも依存します。 進行状況を表すメッセージが逐次表示されます。
まず最初に、インストーラは、ディスクにパーティション情報を書き込み、 newfs を実行してパーティションを初期化します。
ネットワーク経由でのインストールでは、 bsdinstall は、 インストールに必要な配布ファイルをダウンロードします。
次に、ダウンロードの際にエラーが含まれなかったか、 インストールメディアからの読み取り中に読み間違いが起きなかったかどうか等、 配布ファイルの完全性の検証が行われます。
最後に、検証された配布ファイルがディスクへ取り出されます。
必要な配布ファイルがすべて取り出されたら、 bsdinstall は、 インストール後の作業 (Section 3.9) に進みます。
FreeBSD のインストールが完了したら、 さまざまなオプションの設定に移ります。 新しくインストールした FreeBSD を起動する前に、 最後のメニューの configuration オプションの項目に入りなおすことでも、 オプションの設定を変更できます。
root のパスワードを設定する必要があります。 パスワードを入力している際に、入力している文字は画面に表示されません。 パスワードの入力後、もう一度入力する必要があります。 これは入力ミスを防ぐためのものです。
パスワードの入力に成功したら、インストールは次に進みます。
Note: bootonly によるインストール作業の一部として、 すでにネットワークの設定を終えているのであれば、 この作業を飛ばすことができます。
次に、コンピュータが認識したすべてのネットワークインタフェースが表示されます。 設定するネットワークインタフェースを選んでください。
ワイヤレスネットワークインタフェースを選択したのであれば、 ネットワークに接続するようにワイヤレス認証およびセキュリティパラメータの入力が必要となります。
ワイヤレスネットワークは Service Set Identifier (SSID) によって識別されます。 SSID は、それぞれのネットワークに与えられる、短く、一意的な名前です。
ほとんどのワイヤレスネットワークは、 送信データを暗号化して、情報を盗聴から保護します。 WEP のような古い暗号の安全性は低いので、 WPA2 暗号を強く薦めます。
ワイヤレスネットワークへ接続する最初のステップは、 ワイヤレスアクセスポイントのスキャンです。
スキャンで見つかった SSID の一覧が、 そのネットワークで利用できる暗号化のタイプの説明とともに表示されます。 もし、期待した SSID が一覧に表示されないのであれば、 [ Rescan ] を選択してもう一度スキャンしてください。 もし、期待したネットワークが表示されないのであれば、 接続のためのアンテナやコンピュータをアクセスポイントの近くに移動させてみてください。 その後もう一度スキャンしてください。
ネットワークの選択後、ワイヤレスネットワークに接続するための暗号情報を入力します。 WPA2 では、 パスワード (Pre-Shared Key または PSK とも呼ばれます) のみが必要です。 セキュリティ上の観点から、入力ボックスに入力した文字はアスタリスクで表示されます。
ワイヤレスネットワークを選択後、 ネットワークの設定は接続情報の入力に進みます。
IPv4 ネットワークを使うかどうかを選択してください。 これは、ネットワーク接続の最も一般的なタイプです。
IPv4 の設定方法は 2 通りあります。 DHCP はネットワークインタフェースを自動的に適切に設定する方法で、 推奨されています。 Static 設定では、 ネットワーク情報を手動で入力する必要があります。
Note: 適当なネットワーク情報を入力しても動かないので、 ネットワーク管理者またはサービスプロバイダから Section 3.3.3 に示されている情報を入手してください。
静的なネットワークインタフェースの設定では、 いくつかの IPv4 情報を入力する必要があります。
IP Address - コンピュータに手動で与える IP アドレスです。 このアドレスは一意的なものである必要があり、 ローカルネットワーク上の他のネットワーク機器で使われていてはいけません。
Subnet Mask - ローカルネットワークで用いられるサブネットマスクです。 一般的には 255.255.255.0 です。
Default Router - このネットワークのデフォルトルータの IP アドレスです。 これは、通常ルータか、 ローカルネットワークをインターネットへ接続するネットワーク機器のことです。 デフォルトゲートウェイ とも呼ばれます。
IPv6 はネットワークの設定の新しい方法です。 IPv6 が利用でき、希望するのであれば、 [ Yes ] を選択してください。
IPv6 の設定に関しても 2 つの方法があります。 SLAAC (StateLess Address AutoConfiguration) は、ネットワークインタフェースを自動的に適切に設定します。 Static 設定では、ネットワーク情報を手動で入力する必要があります。
SLAAC では、IPv6 ネットワークコンポーネントがローカルルータから自動設定に関する情報をリクエストできるようにします。 詳細については、 RFC4862 をご覧ください。
静的なネットワークインタフェースの設定では、 IPv6 の設定についての情報を入力する必要があります。
IPv6 Address - このコンピュータに割り当てられた IP アドレスです。 手動で設定します。 このアドレスは一意的なものである必要があり、 ローカルネットワーク上の他のネットワーク機器で使われていてはいけません。
Default Router - このネットワークのデフォルトルータの IPv6 アドレスです。 これは、通常ルータか、 ローカルネットワークをインターネットへ接続するネットワーク機器のことです。 デフォルトゲートウェイ とも呼ばれます。
Domain Name System (または DNS) リゾルバは、ホスト名とネットワークアドレスを変換します。 すでに DHCP または SLAAC をネットワークの自動設定に使ったのであれば、 リゾルバの設定はすでに行われています。そうでなければ、Search フィールドにローカルネットワークのドメイン名を入力してください。 DNS #1 および DNS #2 は、 ローカル DNS サーバの IP アドレスです。 少なくとも、1 つの DNS サーバは必要です。
使用しているコンピュータのタイムゾーンを設定することで、 地域による時刻の違いが自動的に調整され、 タイムゾーンに関連した機能が適切に取り扱われます。
ここでの例では、コンピュータが United States の Eastern タイムゾーンにあるものとします。 実際の地理的位置を選択してください。
コンピュータのクロックの設定にしたがい、 [ Yes ] または、 [ No ] を選択し、Enter を押しください。 UTC とローカルタイムのどちらを選ぶべきかわからない場合には、 [ No ] を選択して、より一般的なローカルタイムに設定してください。
矢印キーを使って、適切な地域を選択し、 Enter を押してください。
矢印キーを使って、適切に国名を選び、 Enter を押してください。
矢印キーを使って適切なタイムゾーンを選択し、 Enter を押してください。
タイムゾーンの省略形が正しいかどうかを確認してください。 問題がないようであれば Enter を押して、 インストール後の設定を続けてください。
ブート時に起動するシステムサービスを追加で有効に出来ます。 これらのサービスはすべてオプションです。
追加のサービス
sshd - 安全なリモートアクセスのためのセキュアシェル (SSH) デーモン
moused - システムのコンソールで、 マウスを利用できるようにします。
ntpd - 自動時刻同期のネットワークプロトコル (NTP) デーモン
powerd - 電源の管理およびエネルギーを節約するための電源コントロールユーティリティ
次に bsdinstall は、 クラッシュダンプの設定に移ります。 システムのデバッグを行う上で、 クラッシュダンプにより得られる情報は非常に有用です。 可能であればクラッシュダンプを有効にすると良いでしょう。 [ Yes ] を選択してクラッシュダンプを有効にするか、または [ No ] を選択してクラッシュダンプを無効化し、先に進んでください。
システムに root でログインすることを避けるため、 インストール時には、少なくとも一人のユーザを追加してください。 root 権限では、実行に対して制限がなく、また、 保護されません。 通常のユーザでログインすることにより、 安全でセキュリティ的に危険が少なくなります。
[ Yes ] を選択し、 新しいユーザを追加してください。
追加するユーザの情報を入力してください。
ユーザの情報
Username - ログイン時のユーザ名を入力します。典型的なものでは、 ファーストネームの最初の文字とラストネームを組み合わせます。
Full name - ユーザのフルネーム
Uid - ユーザ ID 番号。 通常は、システムが自動的に割り当てるように、 空欄のままにします。
Login group - 新しいユーザのログイングループ。 空欄のままにすると、自動的に割り当てられます
Invite user into other groups? - ユーザを別のグループのメンバーとして追加するかどうか。
Login class - 空欄にするとデフォルトの設定になります。
Shell - ユーザのログインシェル。 この例では csh(1) に設定されています。
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 を入力して、新しいユーザを作成してください。
さらにユーザを追加するのであれば、 "Add another user?" の質問に対し、 yes を入力してください。 no を入力すると、ユーザの追加が終わり、次に進みます。
ユーザの追加や、ユーザ管理の詳細については、 Chapter 14 を参照してください。
すべてをインストールし、設定が終わった後に、 最後に設定を修正する機会が与えられます。
インストールを完了する前に、 このメニューを使って変更、または、追加の設定を行なってください。
最終の設定オプション
Add User - Section 3.9.6 で説明しています。
Root Password - Section 3.9.1 で説明しています。
Hostname - Section 3.5.2 で説明しています。
Network - Section 3.9.2 で説明しています。
Services - Section 3.9.4 で説明しています。
Time Zone - Section 3.9.3 で説明しています。
Handbook - FreeBSD ハンドブック (現在あなたが読んでいるこの文章のことです) のダウンロードとインストール。
最後の設定を完了後、Exit を選んでインストールを終了してください。
新しいシステムを再起動する前に、追加の設定が必要かどうかを bsdinstall が尋ねてきます。 [ Yes ] を選択して新しいシステムのシェルに入るか、または [ No ] を選択して、インストールの最後のステップに進んでください。
もし追加の設定や、特別なセットアップが必要なのであれば、 [ Live CD ] を選んでインストールメディアを Live CD モードで起動してください。
インストールが終わったら、 [ Reboot ] を選んで、 コンピュータを再起動し、新しい FreeBSD システムを動かしてください。 再起動する前には、忘れずに FreeBSD インストール CD, DVD または USB メモリスティックを外してください。 さもないと、もう一度インストールメディアから起動してしまいます。
FreeBSD の起動時には、多くのメッセージが画面に表示されます。 ほとんどは、画面上からスクロールして見えなくなってしまいますが、 これは正常です。システムの起動が終わった後で、 ログインプロンプトが表示されます。 画面上からスクロールして消えてしまったメッセージは Scroll-Lock を押し、 scroll-back buffer で、みることができます。 PgUp, PgDn そして矢印キーでメッセージの内容を見ることができます。 Scroll-Lock をもう一度押すと、画面のロックを外し、 通常の画面に戻ることができます。
login: プロンプトで、 インストール時に追加したユーザ名を入力してください。 この例では、asample です。 必要のない限り、root でのログインを避けてください。
上で示した scroll-back buffer では、バッファの容量制限により、 すべてが表示されないかもしれません。 ログインの後にプロンプトからコマンドラインで dmesg | less と入力することによって、すべてを見ることができます。 確認後に q を押すと、コマンドラインに戻ります。
典型的なブートメッセージ (バージョン情報は省略しています)
Copyright (c) 1992-2011 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
The Regents of the University of California. All rights reserved.
FreeBSD is a registered trademark of The FreeBSD Foundation.
root@farrell.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC amd64
CPU: Intel(R) Core(TM)2 Duo CPU E8400 @ 3.00GHz (3007.77-MHz K8-class CPU)
Origin = "GenuineIntel" Id = 0x10676 Family = 6 Model = 17 Stepping = 6
Features=0x783fbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,MMX,FXSR,SSE,SSE2>
Features2=0x209<SSE3,MON,SSSE3>
AMD Features=0x20100800<SYSCALL,NX,LM>
AMD Features2=0x1<LAHF>
real memory = 536805376 (511 MB)
avail memory = 491819008 (469 MB)
Event timer "LAPIC" quality 400
ACPI APIC Table: <VBOX VBOXAPIC>
ioapic0: Changing APIC ID to 1
ioapic0 <Version 1.1> irqs 0-23 on motherboard
kbd1 at kbdmux0
acpi0: <VBOX VBOXXSDT> on motherboard
acpi0: Power Button (fixed)
acpi0: Sleep Button (fixed)
Timecounter "ACPI-fast" frequency 3579545 Hz quality 900
acpi_timer0: <32-bit timer at 3.579545MHz> port 0x4008-0x400b on acpi0
cpu0: <ACPI CPU> on acpi0
pcib0: <ACPI Host-PCI bridge> port 0xcf8-0xcff on acpi0
pci0: <ACPI PCI bus> on pcib0
isab0: <PCI-ISA bridge> at device 1.0 on pci0
isa0: <ISA bus> on isab0
atapci0: <Intel PIIX4 UDMA33 controller> port 0x1f0-0x1f7,0x3f6,0x170-0x177,0x376,0xd000-0xd00f at device 1.1 on pci0
ata0: <ATA channel 0> on atapci0
ata1: <ATA channel 1> on atapci0
vgapci0: <VGA-compatible display> mem 0xe0000000-0xe0ffffff irq 18 at device 2.0 on pci0
em0: <Intel(R) PRO/1000 Legacy Network Connection 1.0.3> port 0xd010-0xd017 mem 0xf0000000-0xf001ffff irq 19 at device 3.0 on pci0
em0: Ethernet address: 08:00:27:9f:e0:92
pci0: <base peripheral> at device 4.0 (no driver attached)
pcm0: <Intel ICH (82801AA)> port 0xd100-0xd1ff,0xd200-0xd23f irq 21 at device 5.0 on pci0
pcm0: <SigmaTel STAC9700/83/84 AC97 Codec>
ohci0: <OHCI (generic) USB controller> mem 0xf0804000-0xf0804fff irq 22 at device 6.0 on pci0
usbus0: <OHCI (generic) USB controller> on ohci0
pci0: <bridge> at device 7.0 (no driver attached)
acpi_acad0: <AC Adapter> on acpi0
atkbdc0: <Keyboard controller (i8042)> port 0x60,0x64 irq 1 on acpi0
atkbd0: <AT Keyboard> irq 1 on atkbdc0
kbd0 at atkbd0
atkbd0: [GIANT-LOCKED]
psm0: <PS/2 Mouse> irq 12 on atkbdc0
psm0: [GIANT-LOCKED]
psm0: model IntelliMouse Explorer, device ID 4
attimer0: <AT timer> port 0x40-0x43,0x50-0x53 on acpi0
Timecounter "i8254" frequency 1193182 Hz quality 0
Event timer "i8254" frequency 1193182 Hz quality 100
sc0: <System console> at flags 0x100 on isa0
sc0: VGA <16 virtual consoles, flags=0x300>
vga0: <Generic ISA VGA> at port 0x3c0-0x3df iomem 0xa0000-0xbffff on isa0
atrtc0: <AT realtime clock> at port 0x70 irq 8 on isa0
Event timer "RTC" frequency 32768 Hz quality 0
ppc0: cannot reserve I/O port range
Timecounters tick every 10.000 msec
pcm0: measured ac97 link rate at 485193 Hz
em0: link state changed to UP
usbus0: 12Mbps Full Speed USB v1.0
ugen0.1: <Apple> at usbus0
uhub0: <Apple OHCI root HUB, class 9/0, rev 1.00/1.00, addr 1> on usbus0
cd0 at ata1 bus 0 scbus1 target 0 lun 0
cd0: <VBOX CD-ROM 1.0> Removable CD-ROM SCSI-0 device
cd0: 33.300MB/s transfers (UDMA2, ATAPI 12bytes, PIO 65534bytes)
cd0: Attempt to query device size failed: NOT READY, Medium not present
ada0 at ata0 bus 0 scbus0 target 0 lun 0
ada0: <VBOX HARDDISK 1.0> ATA-6 device
ada0: 33.300MB/s transfers (UDMA2, PIO 65536bytes)
ada0: 12546MB (25694208 512 byte sectors: 16H 63S/T 16383C)
ada0: Previously was known as ad0
Timecounter "TSC" frequency 3007772192 Hz quality 800
Root mount waiting for: usbus0
uhub0: 8 ports with 8 removable, self powered
Trying to mount root from ufs:/dev/ada0p2 [rw]...
Setting hostuuid: 1848d7bf-e6a4-4ed4-b782-bd3f1685d551.
Setting hostid: 0xa03479b2.
Entropy harvesting: interrupts ethernet point_to_point kickstart.
Starting file system checks:
/dev/ada0p2: FILE SYSTEM CLEAN; SKIPPING CHECKS
/dev/ada0p2: clean, 2620402 free (714 frags, 327461 blocks, 0.0% fragmentation)
Mounting local file systems:.
vboxguest0 port 0xd020-0xd03f mem 0xf0400000-0xf07fffff,0xf0800000-0xf0803fff irq 20 at device 4.0 on pci0
vboxguest: loaded successfully
Setting hostname: machine3.example.com.
Starting Network: lo0 em0.
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
options=3<RXCSUM,TXCSUM>
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3
inet 127.0.0.1 netmask 0xff000000
nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM>
ether 08:00:27:9f:e0:92
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
media: Ethernet autoselect (1000baseT <full-duplex>)
status: active
Starting devd.
Starting Network: usbus0.
DHCPREQUEST on em0 to 255.255.255.255 port 67
DHCPACK from 10.0.2.2
bound to 192.168.1.142 -- renewal in 43200 seconds.
add net ::ffff:0.0.0.0: gateway ::1
add net ::0.0.0.0: gateway ::1
add net fe80::: gateway ::1
add net ff02::: gateway ::1
ELF ldconfig path: /lib /usr/lib /usr/lib/compat /usr/local/lib
32-bit compatibility ldconfig path: /usr/lib32
Creating and/or trimming log files.
Starting syslogd.
No core dumps found.
Clearing /tmp (X related).
Updating motd:.
Configuring syscons: blanktime.
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.
Starting cron.
Starting background file system checks in 60 seconds.
Thu Oct 6 19:15:31 MDT 2011
FreeBSD/amd64 (machine3.example.com) (ttyv0)
login:
低速なマシンでは、 RSA および DSA キーを作成するのに少々時間がかかるかもしれません。 これはインストール後の最初の起動時に、sshd のセットアップが自動的に開始する時に実行されます。 その後の起動はより速くなるでしょう。
FreeBSD はデフォルトでは、グラフィカルな環境をインストールしませんが、 多くのものを利用できます。 Chapter 6 を読んでください。
適切に FreeBSD をシャットダウンするは、 ハードウェアをダメージから守ったり、データの保護につながります。 ただ電源を落すということはしないでください。 wheel グループのメンバとなっているユーザは、 コマンドラインから su と入力し、 root パスワードを入力して root となってください。 または root としてログインし、 shutdown -p now を使用します。システムは正しくシャットダウンし、電源が落ちます。
Ctrl+Alt+Del というキーの組合せを使ってシステムをリブートすることもできますが、 通常の運用においてこれは推奨されません。
この節では、インストールの際の、 これまで報告された共通の問題に対する解決のための情報が書いてあります。
PC アーキテクチャのさまざまな制限により、 100% 確実に原因を突き止めることは不可能ですが、 失敗した時にいくつかできることがあります。
インストールする FreeBSD のバージョンの ハードウェアノート を調べて、 使っているハードウェアに対応しているかどうかを確認してください。
もしハードウェアがサポートされているにもかかわらず、 動作しなかったり他の問題点がある時は、カスタムカーネル を構築する必要があります。GENERIC カーネルに含まれていないデバイスのサポートを追加することができます。 起動ディスクのカーネルでは、ほとんどのハードウェアデバイスの IRQ, IO アドレス、 DMA チャネルが工場出荷時の状態であると設定されています。 もしハードウェアの設定が変更されていると、 カーネルコンフィグレーションファイルを編集し、 再コンパイルを行なって、これらの値を FreeBSD に設定しなければなりません。
存在しないデバイスを認識してしまうことにより、 その後実際に存在するデバイスの認識を失敗してしまうことがあります。 このような場合は衝突しているドライバを無効にします。
Note: いくつかのインストール上の問題はさまざまなハードウェア装置の、 特にマザーボードのファームウェアのアップデートで回避または緩和することができます。 マザーボードのファームウェアは BIOS と呼ばれることもあり、 多くのマザーボードまたはコンピュータ製造メーカーは、 アップデートやアップグレード情報を載せているウェブサイトを用意しています。
通常、製造メーカーは、 重要な更新のようなそれなりの理由がない限り、マザーボードの BIOS のアップグレードは行わないよう推奨しています。 アップデートの過程で失敗するかもしれず、 その場合に、BIOS が不完全な状態になり、 コンピュータが動作しない原因となり得るからです。
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" を追加してください。 ブートローダのより詳しい情報については Section 13.1 で説明します。
訳: 中井 幸博 <nakai@mlab.t.u-tokyo.ac.jp>, 1996
年 10 月 12 日.
この章では FreeBSD オペレーティングシステムの基本的なコマンドと機能について記述しています。 ここに書かれてあることのほとんどは、 どんな Unix オペレーティングシステムにもあてはまります。 この章に書いてあることに馴染みがあるなら、 この章は気軽に流し読みしてください。 あなたが FreeBSD の初心者なら、 何か質問する前にこの章を読んでおいた方がきっといいはずです。
この章を読んで分かることは、次のようなことです。
Unix のファイルの許可属性の仕組み
ファイルシステムの ACL (アクセス制御リスト) とは何か、またその使用法
プロセス、デーモンとシグナルとはなにか
シェルとはなにか。 また、デフォルトのログイン環境を変える方法
テキストエディタの基本的な使い方
さらに詳しい情報を得るためのマニュアルページの読み方
FreeBSD の “仮想コンソール” の使い方
FreeBSD は BSD Unix の直系の子孫であり、 いくつかの鍵となる Unix 思想にもとづいています。 まず最も際だった特徴として最初に言えるのは、FreeBSD がマルチユーザのオペレーティングシステムだということです。 FreeBSD は同時に働いている複数のユーザすべてを、 完全に分離したタスク上で処理する能力を持っています。 また FreeBSD は、ハードウェアデバイス、周辺装置、メモリ、 CPU 時間等への要求を、各ユーザが平等に利用できるように適切に共有し、 管理する役割を担っています。
システムがマルチユーザをサポートしているため、 システムが管理する資源はすべて、 誰がその資源を読み・書き・実行できるかを支配する、 一組の許可属性を持っています。 これらの許可属性は 3 つの部分からなる 2 桁の 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 の最初の部分だけ抜き出したものです。
-rw-r--r--
最初の (一番左の) 文字は、それが 普通のファイルなのか、ディレクトリなのか、 キャラクタ型のデバイス特殊ファイルなのか、 ソケットなのか、 その他の特殊な疑似ファイルデバイスなのかといった種類を示す特別な文字です。 この場合、- という文字は、 普通のファイルであることを示します。 この例でその次に来る rw- と書かれた 3 文字は、 そのファイルの所有者に許可を与えるものです。 その次の r-- の 3 文字は、 そのファイルが所属しているグループに許可を与えます。 最後の r-- の 3 文字は、 システムに存在するその他のユーザに許可を与えます。 “-” は許可が与えられていないことを示します。 このファイルの例では、ファイルの所有者はこのファイルを読み書きでき、 ファイルの所属しているグループに属するユーザはファイルを読むことだけでき、 そのどちらでもないユーザは、 このファイルを読むだけできるように許可属性が与えられています。 上の表によれば、このファイルに与えられた許可属性は 644 となります。 ここで各数字は、このファイルの許可属性の 3 つの部分を表しています。
ファイルについてはここまでの説明で十分です。 しかし、 デバイスの場合の許可属性はどのようにコントロールされているのでしょうか? FreeBSD は、大部分のハードウェアをファイルとして取り扱います。 そのため、プログラムからは普通のファイルとまったく同じようにオープンし、 データの読み書きができるようになっています。 これらのデバイス特殊ファイルは /dev ディレクトリに収められています。
ディレクトリもまた、ファイルと同様に扱われます。 それは読み込み/書き込み/実行の許可属性を持ちます。 ディレクトリの実行ビットはファイルのそれとは少し違った意味を持ちます。 ディレクトリが実行可能になっているとき、 そのディレクトリに移動することができます。 つまり、そのディレクトリに “cd” することが可能です。 また、実行可能属性がついているディレクトリでは、 名前が分かっているファイルにアクセスすることもできます (もちろんそのファイル自体の許可属性によります)。
特に、ディレクトリの中の一覧を表示するには、 そのディレクトリに読み込み属性が設定されていなければなりません。 一方、名前が分かっているファイルを削除するには、 そのファイルが含まれているディレクトリに 書き込み属性と実行属性 の両方が必要です。
この他にも許可属性ビットはありますが、いずれも setuid バイナリや sticky ディレクトリなどといった特殊な状況で使われます。 ファイルの許可属性そのものについて、 また、それらの設定のしかたに関する詳しい情報は、 chmod(1) マニュアルページを参照してください。
スナップショットのようなファイルシステムの拡張と連携して、 FreeBSD 5.0 以降ではファイルシステムアクセス制御リスト (ACLs) によるセキュリティを提供しています。
アクセス制御リストは、標準的な UNIX のパーミッションモデルを、 非常に互換性の高い (POSIX.1e) やり方で拡張しています。 この機能は、管理者がより洗練されたセキュリティモデルを利用し、 その恩恵を受けられるようにします。
UFS ファイルシステム用の ACL サポートを有効にするには、 次のオプションをカーネルに組み込まなければなりません。
options UFS_ACL
もしこのオプションが組み込まれていなければ、ACLs に対応したファイルシステムをマウントしようとすると、 警告が表示されます。このオプションは GENERIC カーネルに含まれています。ACLs は、ファイルシステムの拡張属性が有効になっていることに依存しています。 拡張属性は、次世代 UNIX ファイルシステムである UFS2 でネイティブ対応されています。
Note: UFS1 に拡張属性を付すように設定するのは、 UFS2 よりも高いレベルの管理オーバヘッドが必要になります。 また、UFS2 における拡張属性のパフォーマンスも大きく上がっています。 その結果、アクセス制御リストを利用する上では、一般的には UFS1 よりも UFS2 の方がおすすめです。
ACLs は、マウント時の管理フラグ acls で有効にされます。これは /etc/fstab
に記述できます。 マウント時のフラグは、tunefs(8)
を使って、ファイルシステムヘッダのスーパブロックにある ACLs フラグを変更するという方法で、
常に自動で設定されるようになります。一般的には、
下記の理由からスーパブロックフラグを使う方がよいでしょう。
マウント時に指定した ACLs
フラグは再マウント (mount(8) -u) 時に変更できません。完全に umount(8)
した上で、新たに mount(8)
するしかありません。これは、起動後にルートファイルシステムで ACLs を有効にできないことを意味します。
また、ファイルシステムを利用し始めた後では、
その配列を変えられないことも意味しています。
スーパブロックフラグを設定すると、fstab に記述されていなかったり、デバイスの順番が変わってしまっても、常に ACLs が有効な状態でマウントされます。 こうすることで、ファイルシステムを ACLs を有効にしないままマウントしてしまい、ACLs が正しくないかたちで強制され、 セキュリティ問題につながることを防ぎます。
Note: ACLs の動作を変更して、まったく新たに mount(8) を行わなくてもフラグを有効にできるようにすることも可能でしょう。 しかし、我々は、うっかり ACLs を有効にしないでマウントしてしまうのを防ぐようにした方が望ましいと考えました。 ACLs を有効にし、その後無効にしてから、 拡張属性を取り消さないでまた有効にしてしまうと、 鬱陶しい状態に自分で入り込んでしまえるからです。 一般的には、一度ファイルシステムで ACLs を有効にしたら、無効にすべきではありません。そうしてしまうと、 ファイル保護がシステムのユーザの意図と齟齬をきたす可能性があるばかりか、 ACLs を再度有効にすると、 それまでパーミッションが変更されてきたファイルに古い ACLs を割り当ててしまい、 予想しない動作につながることも考えられます。
ACLs を有効にしたファイルシステムは、 パーミッション設定の表示に + (プラス) 記号がつきます。例えば、次のようになります。
drwx------ 2 robert robert 512 Dec 27 11:54 private drwxrwx---+ 2 robert robert 512 Dec 23 10:57 directory1 drwxrwx---+ 2 robert robert 512 Dec 22 10:20 directory2 drwxrwx---+ 2 robert robert 512 Dec 27 11:57 directory3 drwxr-xr-x 2 robert robert 512 Nov 10 11:54 public_html
ここでは、ディレクトリ directory1, directory2 および directory3 のすべてで ACLs が働いています。 ディレクトリ public_html は対象外です。
FreeBSD のディレクトリ構造は、 システム全体を理解するに当たって重要です。 把握しておくべき最も重要なものは、“/” ディレクトリです。 このディレクトリは起動時に一番最初にマウントされ、 オペレーティングシステムをマルチユーザで動作させるために 必要な基本システムが含まれています。 また、ルートディレクトリには、 他のファイルシステムをマウントするためのマウントポイントも含まれます。
マウントポイントとはルートファイルシステムに存在する、
追加のファイルシステムと接続するためのディレクトリのことです。
標準的なマウントポイントには /usr, /var, /mnt, /cdrom があります。 通常これらのディレクトリについては、 /etc/fstab というファイル中のエントリが参照されます。 /etc/fstab
はさまざまなファイルシステムとマウントポイントの表であり、 システムが参照します。 /etc/fstab に書かれたファイルシステムは noauto オプションが指定されていなければ、 起動時に rc(8)
スクリプトによって自動的にマウントされます。 /etc/fstab
ファイルの書式やオプションに関しての詳細は fstab(5)
をご覧ください。
ファイルシステム構造を網羅した説明は 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) 参照 |
| /root/ | root アカウントのホームディレクトリ |
| /sbin/ | シングルユーザ環境とマルチユーザ環境の両方で重要な システムプログラムと管理ユーティリティ |
| /stand/ | スタンドアロン環境で使われるプログラム |
| /tmp/ | 一時的なファイル、mfs(8) メモリファイルシステムであることが多い (普通 /tmp の内容はシステムの再起動で失われる) |
| /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/ports | FreeBSD Ports Collection (インストールしなくてもよい)。 |
| /usr/sbin/ | (ユーザが実行する) システムデーモンとシステムユーティリティ |
| /usr/share/ | アーキテクチャに依存しないファイル |
| /usr/src/ | BSD のソースファイルまたはローカルのソースファイル、 あるいは両方 |
| /usr/X11R6/ | X11R6 のプログラム、ライブラリなど (インストールしなくてもよい) |
| /var/ | ログ・一時的なファイル・スプールファイルなどいろいろな用途 |
| /var/log/ | いろいろなシステムログファイル |
| /var/mail/ | ユーザのメールボックスファイル |
| /var/spool/ | プリンタとメールシステムのスプールディレクトリなどなど |
| /var/tmp/ | システムが再起動しても消えない一時的なファイル |
| /var/yp | NIS のマップ |
ファイルシステムは / をルート (根) とする木構造として考えると視覚的に理解しやすいでしょう。 ルートディレクトリにある /dev や /usr、 その他のディレクトリは枝に相当し、 それらには、/usr/local などのように、さらに枝分かれすることができます。
さまざまな理由がありますが、 ディレクトリをいくつかの異なるファイルシステム上に構築するのが良いでしょう。 たとえば /var には、 log/ や spool/ など、さまざまな種類の一時ファイルを置くディレクトリがあるため、 あふれてしまう可能性があります。 ルートファイルシステムをあふれさせるのは得策ではありませんので、 普通は /var を / から分離します。
また、次のような場合も、ディレクトリツリーを 別のファイルシステムに置く理由として良くあげられます。 それは、たとえば物理的に別のディスクにディレクトリツリーを置く場合、 ネットワークファイルシステム (Network File System) や CDROM ドライブのような別の仮想ディスクに置くという場合です。
/etc/fstab に書かれているファイルシステムは (noauto オプションがなければ) 起動プロセスの途中で 自動的にマウントされます。
/etc/fstab ファイルは、 次のような書式で書かれた行のリストになっています。
device /mount-point fstype options dumpfreq passno
デバイスの名前 (存在していなければなりません)。 Section 16.2 に説明があります。
ファイルシステムがマウントするディレクトリの名前 (存在していなければなりません)。
mount(8) に渡されるファイルシステムタイプ。 FreeBSD ファイルシステムのデフォルトは ufs です。
読み書きするファイルシステムには rw、読み込み専用のファイルシステムには ro を、必要な他のオプションの前に指定します。
よく使われるオプションは noauto で、
起動時にはマウントされないファイルシステムに使います。 その他のオプションは mount(8)
マニュアルページに載っています。
これは dump(8) が使うもので、 どのファイルシステムにダンプが必要なのかを決めます。 この項目がなければ、0 であるものとみなされます。
これはファイルシステムをチェックする順番を決めます。 ファイルシステムチェックを飛ばしたいファイルシステムには、 passno を 0 に設定してください。 ルートファイルシステム (どれよりも先にチェックしなければなりません) は passno を 1 に設定してください。 他のファイルシステムの passno は 1 以上に設定してください。 同じ passno のファイルシステムがあった場合、 fsck(8) は可能であれば並行してファイルシステムのチェック を行なおうとします。
mount(8) コマンドは、 ファイルシステムをマウントするために使われるものです。
基本的には、次のように使います。
mount(8) マニュアルページにはたくさんのオプションが書かれていますが、 いちばんよく使われるのは次のものです。
マウントオプション
-a/etc/fstab
にある全てのファイルシステムをマウントします。 例外は “noauto”
の印がついているものと、 -t フラグで除外されたものと、
すでにマウントされているファイルシステムです。
-d実際にシステムコールする以外の全てのことをします。 このオプションは -v フラグと組み合わせて使い、 mount(8)
が実際なにをしようとしているのか調べるのに便利です。
-fクリーンでないファイルシステムを強制的にマウントします (危険です)。もしくは、ファイルシステムのマウント状態を 読み書き可能から読み込みのみに変更するとき、 書き込みアクセスを強制的に取り消します。
-rファイルシステムを読み込み専用でマウントします。 これは rdonly 引数を -o
オプションに使うのと同じです。
-t fstypeファイルシステムを指定のファイルシステムタイプでマウントします。 または、-a を使った場合、
指定したタイプのファイルシステムのみマウントします。
デフォルトのファイルシステムタイプは “ufs” です。
-uファイルシステムのマウントオプションを更新します。
-v詳細な出力にします。
-wファイルシステムを読み書き可能にマウントします。
-o には、
次のようなオプションを複数カンマで区切って指定します。 以下に挙げるのはその一部です。
ファイルシステム上のスペシャルデバイスを解釈しません。 セキュリティのために有用なオプションです。
そのファイルシステム上のバイナリの実行を禁止します。 セキュリティのために有用なオプションです。
そのファイルシステム上の setuid や setgid フラグを解釈しません。 これもセキュリティのために有用なオプションです。
umount(8)
コマンドは、パラメータとしてマウントポイントの一つ、 デバイス名、もしくは -a や -A
といったオプションを取ります。
いずれの形式でも -f で強制的なアンマウントを行ない、 -v で詳細な出力を出します。 ただしほとんどの場合、-f は使わないほうがよいでしょう。
強制的にファイルシステムをアンマウントすると、
計算機がクラッシュしたりファイルシステム上部のデータが
破壊されたりする恐れがあるためです。
オプション -a と -A
はマウントされているファイルシステムすべてをアンマウントするのに使います。 -t にファイルシステムタイプを指定すると、
指定されたものだけがアンマウントされます。 また、-A
を使うとルートファイルシステムはアンマウントしません。
FreeBSD はマルチタスクのオペレーティングシステムです。 つまり、1つ以上のプログラムがあたかも同時に動いているかのように見える、 ということです。動作中のプログラムはそれぞれ プロセス と呼ばれます。 コマンドを実行すると、最低でも1つの新しいプロセスがスタートします。 システムを正常に機能させるために常に動作しているシステムプロセスもたくさんあります。
各プロセスはプロセス ID、もしくは PID と呼ばれる数字でただ一つに識別されます。 また、ファイルのように各プロセスには所有者とグループがあります。 所有者とグループの情報は、 これまでに見たファイル許可属性を用い、 そのプロセスが開けるファイルやデバイスを決定するために使われます。 多くのプロセスには親プロセスもあります。 親プロセスとは、そのプロセスをスタートさせたプロセスのことです。 例えば、シェルにコマンドを打ち込んでいるときはシェルがプロセスで、 動かすコマンドもまたどれもプロセスです。 このようにして起動するプロセスはそれぞれシェルが親プロセスになります。 これの例外は init という特別なプロセスです。 init は常に最初のプロセスなので、 PID は必ず 1 になります。 init は FreeBSD がスタートするときカーネルによって自動的に起動されます。
ps(1) と top(1) という2つのコマンドが システム上のプロセスを確認するために特に便利です。 ps(1) コマンドは現在動作中のプロセスのリストを見るために使い、 PID やプロセスが使っているメモリの量、 どういうコマンドラインで起動されたのか、 などを表示させることができます。 top(1) コマンドは動作中の全てのプロセスを表示し、 数秒ごとに表示を更新するので、 計算機がなにをしているのかインタラクティブに知ることができます。
デフォルトでは、ps(1) は動作中かつ所有者が自分のコマンドのみを表示します。 例えば:
% 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 まで割り当てられ、 足りなくなると最初に戻って使い回されます。 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
オプションを使えば更新間隔を変更することができます。
エディタを使っている場合、エディタを操作するのは簡単です。 ファイルを開く、などと動かせばよいのです。 このように操作できるのは、エディタにそういった機能があり、 かつエディタが端末に関連づけられているからです。 一方、ユーザから始終入力があるように設計されていないプログラムもあり、 そういったプログラムは最初から端末と切り離されます。 例えば、ウェブサーバは一日中ウェブのリクエストばかり処理するので、 通常全く入力を必要としません。 サイトからサイトへとメールを転送するプログラムも、 こういった種類のアプリケーションの一例です。
このようなプログラムは、デーモンと呼ばれます。 デーモンはギリシャ神話の登場人物で、 善でも悪でもなく、大雑把にいうと、 人間のために役立つことをしてくれる小さな妖精さんです。 今日の便利なウェブサーバやメールサーバととてもよく似ていますね。 このため、長い間 BSD のマスコットはスニーカーをはいてフォークを携えた かわいらしい姿のデーモンなのです。
通常デーモンとして動作するプログラムには末尾に “d” を持った名前をつける慣習があります。 BIND は Berkeley Internet Name Daemon ですし (実際実行されるプログラムは named という名前です)、 Apache ウェブサーバのプログラムは httpd と呼ばれますし、 ラインプリンタスプーリングデーモンは lpd、 などなどです。 これは単なる慣習で、しっかりがっちりとしたルールではありません。 例えば、Sendmail アプリケーションの主なメールデーモンは sendmail という名前で、 連想しそうな maild ではありません。
時々、デーモンプロセスと通信したいときがあります。 この通信はシグナルと呼ばれ、 デーモンにシグナルを送ることによってデーモン (に限らずどんな動作中のプロセスでも) と通信することができます。 送信可能なシグナルはたくさんあります--特別な意味があるものもあれば、 アプリケーションによって解釈されるものもありますし、 アプリケーションがシグナルをどう解釈するかは そのアプリケーションの文章を読めば分かるでしょう。 自分が持っているプロセスにしかシグナルを送ることはできません。 他人のプロセスに kill(1) や kill(2) を使ってシグナルを送っても、許可されないでしょう。 これの例外は root ユーザで、 ルートユーザは誰のプロセスでもシグナルを送ることができます。
FreeBSD もアプリケーションにシグナルを送ることがあります。 アプリケーションを下手に書くと、 予想外のメモリにアクセスしようとするので、 FreeBSD がプロセスに セグメンテーション違反 シグナル (SIGSEGV) を送ります。 ある程度の時間が経ったら alarm(3) システムコールを使って警告してもらうようなアプリケーションには、 警告シグナル (SIGALRM) が送信される、 などです。
プロセスを止めるためには2つのシグナル、 SIGTERM か SIGKILL を使います。 SIGTERM は穏かにプロセスを終了させる方法です。 プロセスはシグナルを受け取ることができ、 終了させたいのだなということを理解し、 開いているログファイルを全部を閉じ、 一般的に終了前にしていたことを終えることができます。 中断できない処理の途中だと、SIGTERM をプロセスが無視することもあるかもしれません。
プロセスは SIGKILL を無視することができません。 これは、“なにをしていようが構わないから今すぐ止まれ” というシグナルです。 プロセスに SIGKILL を送ると、 FreeBSD はそのプロセスをそこで止めます[1]。
使う可能性のあるシグナルは、他に SIGHUP、SIGUSR1、と SIGUSR2 があります。 これらは一般的な用途のシグナルで、 このシグナルが送信されたときアプリケーションによって別のことをします。
ウェブサーバの設定ファイルを変更したとしましょう--ウェブサーバに新しい設定を再読み込みさせたいですね。 httpd を止めて再起動することもできますが、 そうするとウェブサーバは一瞬ながら停止してしまいますし、 ちょっとでも止まってほしくないこともあるでしょう。 ほとんどのデーモンは SIGHUP シグナルに対して設定ファイルを再読み込みする反応を返すよう書かれています。 従って、httpd を止めて再起動する代わりに、 SIGHUP シグナルを送りましょう。 これらのシグナルへの標準的な反応というものがないために、 デーモンごとに行動が違うので、 疑問があれば必ずそのデーモンの文書を読んでください。
kill(1) コマンドを使って送るシグナルはこの例をご覧ください。
プロセスにシグナルを送る
この例では、inetd(8) にシグナルを送る方法を示します。 inetd(8) の設定ファイルは /etc/inetd.conf で、 inetd(8) は SIGHUP が送信されるとこの設定ファイルを再読み込みします。
シグナルを送りたいプロセスのプロセス 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) が動作中のプロセスのリストを見つける方法によります。
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 ... コマンドを直接使うほうが簡単です。
他のシグナルの送り方はほとんど同じで、 コマンドラインの TERM や KILL を必要に応じて変えるだけです。
FreeBSD では日々の作業のほとんどは、 「シェル」と呼ばれるコマンドラインインタフェイスを通して行われます。 シェルの主な仕事はコマンドを入力チャンネルから受け取り、 そしてそれらを実行することです。 大部分のシェルはさらに組み込みの機能を持っていて、日々の作業、 ファイル管理やファイル名の展開、コマンドライン編集、 コマンドマクロ、環境変数などに便利です。 FreeBSD には sh (Bourne Shell) や tcsh (高機能 C-shell) が含まれています。 また、 これ以外にも zsh や bash などたくさんのシェルが FreeBSD Ports Collection から利用可能です。
「あなたは、どのシェルを使いますか?」という質問は、 まったく趣味の問題です。 あなたが C のプログラマだったとすれば、 tcsh のような C 風のシェルの方が落ち着くかもしれません。 Linux から来た人や Unix のコマンドラインインタフェイスになじみがなければ、 bash を試すのも良いでしょう。 ポイントは、それぞれのシェルは、 あなたの好みの作業環境で利用できる (もしくはできない) 独自の機能を持っているということ、 そして、どのシェルを使うことにするかを決めるのはあなた自身だということです。
シェルの一般的な機能の一つに、ファイル名の補完があります。 コマンドやファイル名の最初の数文字を与えて Tab キーを押すことで、 シェルにコマンドやファイル名の残りの部分を自動的に補完させることができます。 例をあげましょう。 二つのファイル foobar, foo.bar が あったとします。 ここで foo.bar の方を削除するには、 rm fo[Tab].[Tab] と入力します。
するとシェルは rm foo[BEEP].bar と出力するでしょう。
[BEEP] のところはコンソールのベル (訳注: 通常はビープ音が鳴ります) です。 これは複数のファイルがマッチしたため、 ファイル名の補完を完全に行なえなかったことを伝えています。 foobar と foo.bar は 両方とも fo ではじまるため、 補完できるのは foo までです。 ここで . を入力して Tab を押せば、 シェルはファイル名の残りの部分を補完できます。
もう一つあげられるシェルの特徴として、環境変数があります。 環境変数とは、シェルの環境変数空間におけるキーと値とのペアです。 この変数空間は、そのシェルから起動されたプログラムから参照でき、 それを利用してプログラムの設定を保存するのに利用されます。 下の表は、一般的な環境変数とその意味を示したものです。
| 変数名 | 意味 |
|---|---|
| USER | 現在のログインユーザのユーザ名。 |
| PATH | コロンで区切られた実行ファイル探索のための ディレクトリのリスト。 |
| DISPLAY | 接続する X11 ディスプレイのネットワーク名 (存在する場合のみ)。 |
| SHELL | 現在のシェル。 |
| TERM | ユーザの端末名。 端末のケーパビリティを決定するのに使われる。 |
| TERMCAP | 種々の端末の機能を実現する端末のエスケープコードの データベースのエントリ。 |
| OSTYPE | オペレーティングシステムの種別。 たとえば FreeBSD。 |
| MACHTYPE | システムが動作している CPU のアーキテクチャ。 |
| EDITOR | ユーザの選んだテキストエディタ。 |
| PAGER | ユーザの選んだテキストページャ。 |
| MANPATH | コロンで区切られたマニュアルページ探索のための ディレクトリのリスト。 |
環境変数をセットする方法は、 それぞれのシェルごとに多少異なります。 たとえば、tcsh や csh 等の C シェルでは setenv を使います。 sh や bash 等の Bourne シェルでは set と export を使います。 たとえば csh か tcsh で EDITOR 環境変数の値を /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 と そのまま表示します。
シェルを変更する一番簡単な方法は chsh コマンドを使うことです。 chsh を実行すると 環境変数 EDITOR で示されたエディタが立ち上がります。 環境変数をセットしていなかった時は vi が立ち上がります。 “Shell:” の行を適宜変更してください。
chsh に -s オプションをつけると、
エディタを起動せずにシェルを変更することが可能です。 たとえば、シェルを bash に変えたいなら、次のようにしてください。
% chsh -s /usr/local/bin/bash
chsh をパラメータなしで実行し、 エディタでシェルを変更しても同じことができます。
Note: 使おうと思っているシェルは必ず /etc/shells 中に書かれているものでなければなりません。 シェルを Ports Collection からインストールしていたのであれば、すでにそれは行なわれていますが、 手動でインストールした場合は、それを忘れずに行ってください。
たとえば、bash を手動で /usr/local/bin にインストールした場合 以下のようにする必要があります。
# echo "/usr/local/bin/bash" >> /etc/shellsそして chsh を実行してください。
さまざまな 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、 一方 emacs や vim といった他のエディタは Ports Collection の一部として、 より強力なテキストエディタが用意されています。 これらのエディタはやや学習が複雑ですが、より強力で高い機能性を提供します。 しかし、あなたが多量のテキストを編集することを考えているなら、 vim や emacs といった強力なエディタを習得することは、 より多くの時間を節約することでしょう。
デバイスとはシステム上のハードウェアに関するものに対してよく使われる用語で、 ディスクやプリンタ、グラフィックカードやキーボードが含まれます。 FreeBSD が起動するとき、FreeBSD が表示しているものの大部分は検出されたデバイスです。 /var/run/dmesg.boot を眺めれば起動メッセージを読み直すことができます。
例えば、acd0 は最初の IDE CDROM ドライブで、kbd0 はキーボードを表します。
Unix オペレーティングシステムにおけるデバイスのほとんどは、 デバイスノードと呼ばれる /dev ディレクトリにあるスペシャルファイルを通してアクセスしなければなりません。
新しいデバイスをシステムにつけ足したり、 追加デバイスのサポートをコンパイルして加えたりするときは、 デバイスノードを追加で作成しなければならない場合があります。
DEVFS がないシステム (5.0 より前のすべてのバージョンの FreeBSD にあてはまります) では、 以下に示すように MAKEDEV(8) スクリプトを使ってデバイスノードを作成します。
# cd /dev # sh MAKEDEV ad1
この例では、取りつけられたとき2番目に当たる IDE ドライブにとって適切なデバイスノードを作ります。
デバイスファイルシステム DEVFS は、 グローバルファイルシステム名前空間の中のカーネルデバイス名前空間へのアクセスを提供します。 デバイスノードを作成したり変更したりするのではなく、 DEVFS がこの特別なファイルシステムを管理するのです。
詳しくは devfs(5) マニュアルページをご覧ください。
FreeBSD 5.0 では DEVFS がデフォルトで使われています。
FreeBSD は様々な使い方ができます。その中の一つが、 テキスト端末でコマンドを入力することです。この方法で FreeBSD を使えば、 UNIX オペレーティングシステムの能力と柔軟性を手にすることができます。 この節では、“コンソール” と “端末” はどのようなもので、FreeBSD でどう使うかを 説明します。
起動時に自動的にグラフィカルな環境が起動するように 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” の コンソールを目にしているのです[2]。このマシンの名称 (どの UNIX 機にも名前がついて います) は pc3.example.org で、 あなたはそのシステムコンソール、ttyv0 端末に向かっています。
最後の行は、常に以下のものになります。
login:
ここは、FreeBSD にログインするために “ユーザ名” を入力するところです。次の節でどうするか説明します。
FreeBSD は、マルチユーザ、マルチプロセスなシステムです。 これは、1 台のマシンで何人もの人が交互に多くのプログラムを 動かせるシステムに与えられる正式な説明です。
あらゆるマルチユーザシステムには、ある “ユーザ” を他のユーザと区別する何がしかの手段が必要です。 FreeBSD (とすべての UNIX ライクなオペレーティングシステム) では、 すべてのユーザに対してプログラムの実行を可能にするのに、システムに “ログイン” することを義務付けてこれを実現しています。 どのユーザにも、一意な名前 (“ユーザ名”) と個人的な秘密の鍵 (“パスワード”) があります。 FreeBSD はユーザにプログラムの実行を許可する前に、 この 2 つの入力を要求します。
FreeBSD が起動してスタートアップスクリプトを実行し終わった 直後に[3]、プロンプトを表示して有効なユーザ名の入力を促します。
login:
この例では john というユーザ名を使う ことにしましょう。このプロンプトに対して john と入力して、Enter を 押してください。そうすると、 次のような“パスワード”の入力を要求するプロンプトが 表示されます。
login: john Password:
それでは john のパスワードを入力して Enter を押してください。パスワードは 表示されません。これについては、当面は 気にする必要はありません。セキュリティのためといえば十分でしょう。
パスワードを正確に入力したら、FreeBSD にログインして 利用可能なすべてのコマンドを試せるようになっているはずです。
一つのコンソールで UNIX コマンドを動かすのは結構なことですが、 FreeBSD は多くのプログラムを一度に動かせます。 コマンドを入力できるコンソールが一つというのは、 FreeBSD のようにいくつものプログラムを同時に動かせる オペレーティングシステムの場合は少しもったいないことです。 ここで、“仮想コンソール” が非常に役に立ちます。
FreeBSD は、異なる仮想コンソールを複数 表示するように設定できます。キーボード上である組合せのキーを押せば、 その中の一つから他の仮想コンソールのどれかに切り替えられます。 それぞれのコンソールは、個別の出力チャンネルを持っており、 また FreeBSD はある仮想コンソールから次に切り替えるのに応じて、 キーボード入力とモニター出力を適切につなぎ直します。
FreeBSD は、コンソールを切り替えるために、 特別なキーの組合せを予約しています[4]。FreeBSD では Alt-F1, Alt-F2 から Alt-F8 までを、 別の仮想コンソールに切り替えるのに使えます。
あるコンソールから他に切り替えるのに応じて、FreeBSD は画面 への出力を保存して戻します。結果として、FreeBSD で動かすコマン ドを入力するのに使える複数の画面とキーボードを “仮想的に” 実現できるのです。 ある仮想コンソールで実行したプログラムは、 そのコンソールが見えなくなっている時も実行を停止しません。 別の仮想コンソールに切り替えても動き続けます。
初期設定では、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) のマニュアルを 参照してください。
“シングルユーザモード” とは何かという詳しい説明は、 Section 13.6.2 にあります。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
Note: console 行の上のコメントが示すように、 この行を編集して secure を insecure に変更できます。そうすると、 FreeBSD がシングルユーザモードで起動した場合にも root のパスワードを要求します。
ただし、これをinsecure に 変更する場合は十分注意してください。 root のパスワードを忘れてしまったら、 シングルユーザモードで起動するのは少しややこしくなります。 できることはできますが、FreeBSD の起動の過程とそれに関わる プログラムにあまり親しんでいない人には少し難しいかも知れません。
FreeBSD についてのもっとも包括的な文書は、 マニュアルページの形式になっているものです。 FreeBSD システム上のほとんどすべてのプログラムには、 基本的な操作方法とさまざまな引数を説明しているリファレンスマニュアルが添付されています。 これらのマニュアルは man コマンドで見ることができます。man コマンドの使い方は簡単です。
% man コマンド名
コマンド名 のところには、知りたいコマンドの名前を入れます。 たとえば ls コマンドについて知りたい場合には、 次のように入力します。
% man ls
オンラインマニュアルは、 セクション番号で分類されています。
ユーザコマンド
システムコールとエラー番号
C のライブラリ関数
デバイスドライバ
ファイル形式
ゲームや娯楽
さまざまな情報
システムの管理と操作のためのコマンド
カーネル開発者のための情報
時折、
同じトピックがオンラインマニュアルの複数のセクションに記載されている場合があります。
たとえば、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 *
としてください。
FreeBSD には Free Software Foundation (FSF) によるアプリケーションや ユーティリティがたくさん含まれています。 これらのプログラムには、マニュアルページに加えて info ファイルと呼ばれる ハイパーテキスト形式の文書が付属しています。 この文書は info コマンド、 あるいは emacs をインストールしているなら emacs の info モードで読むことができます。
info(1) コマンドを使うには、単に次のように入力します。
% info
h と入力すると、 簡単な手引きを読むことができます。 クイックコマンドリファレンスは ? を入力してください。
FreeBSD の基本システムには数多くのシステムツールが含まれています。 しかしながら、サードパーティ製のアプリケーションをインストールしないと、 実用的にはそれほどたくさんのことはできません。 FreeBSD は、サードパーティ製のソフトウェアの導入を支援するために、 ソースコードをコンパイルしてインストールする Ports Collection と、 コンパイル済みのバイナリをインストールする packages という相補的な 2 つの技術を提供しています。 どちらのシステムを用いても、ローカルメディアやネットワーク上からお気に入りのアプリケーションの最新版をインストールできます。
この章を読むと、以下のことがわかります。
packages を用いてサードパーティ製のソフトウェアをバイナリからインストールする方法
Ports Collection を用いてサードパーティ製のソフトウェアをソースコードからコンパイルする方法
インストールした packages や ports を削除する方法
Ports Collection が用いるデフォルトの設定を変更する方法
お望みのソフトウェア package を探しだす方法
アプリケーションをアップグレードする方法
UNIX システムを使ったことのある人なら、 サードパーティ製ソフトウェアの典型的なインストール手順が以下のようになることをご存知でしょう。
ソースコード、 またはバイナリ形式で配布されているソフトウェアをダウンロードする。
配布時のフォーマット (一般的には compress(1), gzip(1) または bzip2(1) で圧縮された tarball) からソフトウェアを取り出す。
ドキュメント (INSTALL または README ファイル、あるいは doc/ サブディレクト中のファイル) を探しだし、 ソフトウェアのインストール方法を調べる。
ソース形式でソフトウェアが配布されている場合はコンパイルを行う。 ここでは、Makefile の編集、 または、configure スクリプトの実行、 あるいは他の作業を伴うことがある。
ソフトウェアの動作を確認し、インストールする。
すべてがうまくいったならば、インストール作業は以上です。 もしインストールしているソフトウェアパッケージが、 FreeBSD を意識して移植されたものでなければ、 適切に動くようコードを調べ、編集する必要があるかもしれません。
あなたが望むのであれば、FreeBSD 上へのソフトウェアのインストールに “従来” の方法を使い続けることができます。 しかしながら、FreeBSD は インストール時にかかるたくさんの労力を軽減する 2 つの技術、 すなわち packages と ports を提供しています。 この文書を書いている時点では、23,000 を越えるサードパーティ製アプリケーションがこれらの方法で利用可能となっています。
FreeBSD package では、いかなるアプリケーションに対しても ダウンロードする必要のあるファイルはただ一つです。 package には、コンパイル済みのアプリケーションの全コマンド、 各種設定ファイルやドキュメントが含まれています。 FreeBSD に用意されている pkg_add(1), pkg_delete(1), pkg_info(1) といった package 管理コマンドで、 ダウンロードした package ファイルを扱うことができます。 新しいアプリケーションをインストールするには、 たった一つのコマンドを実行するだけです。
FreeBSD port は、 アプリケーションをソースコードからコンパイルする際の処理を自動化するように設計されたファイルの集まりです。
プログラムをコンパイルする時のことを思い出して下さい。 通常、とてもたくさんの手順 (ダウンロード、展開、パッチ作業、コンパイル、インストール) を踏まなくてはなりません。 port を構成するファイルは、 これらすべての作業をあなたの代わりに行うために必要な情報を含んでいます。 いくつかの簡単なコマンドを実行すると、 自動的にアプリケーションのソースコードがダウンロードされ、展開、 パッチ作業、コンパイル、そして、インストール作業が行われます。
さらに ports システムは、pkg_add コマンドや他の package 管理コマンドで扱うことのできる packages を生成できます。 これらのコマンドについては後の節で簡単に紹介します。
packages と ports は依存関係を理解します。 ある特定のライブラリに依存する アプリケーションをインストールするとします。 また、アプリケーションとライブラリは FreeBSD ports や packages によって 入手可能であるとします。 アプリケーションを追加するために pkg_add コマンドまたは ports システムを用いると、 インストールされていないライブラリが検出され、 先に依存するライブラリが自動的にインストールされます。
2 つの技術が非常に類似していて、 なぜ FreeBSD がわざわざ両者を採用しているのか不思議に思うでしょう。 packages と ports にはそれぞれ独自の特徴があり、 どちらを使うかはあなたの好みによります。
package の利点
一般的に、あるアプリケーションの package の tarball は、 ソースコードを含む tarball より小さなサイズとなります。
packages はコンパイル作業を必要としません。 このことは、Mozilla, KDE, または GNOME といった大きなアプリケーションで重要となります。 特にシステムが遅い場合にはなおさら重要です。
packages を用いれば、 ソフトウェアのコンパイルに関する知識は必要ありません。
ports の利点
packages は、通常最も多くのシステムで実行できるように、 非常に保守的な設定で構築されています。 port からインストールすることで、 たとえば Pentium 4 や Athlon プロセッサに特化したコードを生成するような コンパイルオプションを指定できます。
アプリケーションのなかには、コンパイル時に プログラムの機能を決めるようなオプションを設定するものがあります。 たとえば、Apache は多種多様な ビルトインオプションを設定できます。 port から構築することで、デフォルトオプションではなく、 自分でオプションを設定することができます。
設定を区別するために、同じアプリケーションに対して 複数の packages が存在することがあります。 たとえば、Ghostscript は X11 サーバーがインストールされているかどうかにより、 ghostscript package と ghostscript-nox11 package が選択可能となっています。 packages でもこのような方法が可能ですが、 アプリケーションのコンパイルオプションがさらに用意されている場合は困難となります。
ライセンス条項で、 バイナリでの配布を禁止しているソフトウェアがあります。 それらはソースコードで配布されなくてはいけません。
バイナリ配布を信用していない人もいます。 ソースコードがあれば、少なくともソースコードを読んで (理論的には) 潜在的な問題点を自分で見つけ出すことができます。
ローカルなパッチがある場合、 それを適用するためにソースコードが必要になります。
ソースコードを手元に置いておきたい人たちもいます。 彼らは、退屈したときに眺めたり、あちこち解析してみたり、 ソースコードを借用したり (もちろん、 ライセンスが許せばの話ですが) するのです。
ports の更新状況を把握するために、 FreeBSD ports メーリングリスト や FreeBSD ports bugs メーリングリスト を購読するとよいでしょう。
Warning: アプリケーションをインストールする前に、 そのアプリケーションに関連したセキュリティ上の問題がないことを http://vuxml.freebsd.org/ で確認してください。
また、 インストールされているアプリケーションに既知の脆弱性がないことを自動的に調べる ports-mgmt/portaudit をインストールしてもよいでしょう。 このコマンドは、ビルド前の port についても調査します。 インストールされている packages を確認する場合には、 portaudit -F -a コマンドを使ってください。
この章では、packages と ports を用いた FreeBSD 上での サードパーティ製ソフトウェアのインストール方法や管理方法について説明します。
どんなアプリケーションをインストールするにしても、 まずあなたが何を望んで、 またその名前がなんというのかを理解している必要があります。
FreeBSD 上で利用可能なアプリケーションのリストは常に増えています。 幸運にも、多くの方法で望むものを探すことができます。
FreeBSD ウェブサイトは、 利用可能なすべてのアプリケーションの最新の一覧を、検索できる形で http://www.FreeBSD.org/ja/ports/ において公開しています。 ports はカテゴリに分類されています。 アプリケーションは、(名前を知っているならば) 名前で検索でき、 あるカテゴリで利用可能な アプリケーションをすべて表示させることもできます。
Dan Langille は http://www.FreshPorts.org/ で FreshPorts を公開しています。 FreshPorts は ports ツリー中のアプリケーションの変更を追跡します。 一つまたはそれ以上の ports を “監視” することができ、 変更があるとメールで更新情報を送ってくれます。
ご希望のアプリケーションの名前がわからなければ、 FreshMeat (http://www.freshmeat.net/) のようなサイトでアプリケーションを探して下さい。 その後、そのアプリケーションが ports で利用可能かどうかを FreeBSD サイトで調べて下さい。
port の正確な名前を知っていて、 どのカテゴリに分類されているのかを知りたいだけなら、 whereis(1) コマンドで調べることができます。 単に whereis file と入力してください。file の部分にはインストールしたいプログラム名を入れます。 システム上でプログラムが見つかったら、 そのプログラムのパスが次のように表示されます。
# whereis lsof lsof: /usr/ports/sysutils/lsof
この表示は、lsof (システムユーティリティの一つ) が /usr/ports/sysutils/lsof というディレクトリにあることを示しています。
さらに、以下の例のように echo(1) を使って port が存在するかどうかを簡単に調べることもできます。
# echo /usr/ports/*/*lsof* /usr/ports/sysutils/lsof
この方法では /usr/ports/distfiles 以下にダウンロードされたファイル名にもマッチします。
また、Ports Collection に備わっている検索機能を利用して port を検索する方法もあります。 この検索機能を利用するには、カレントディレクトリが /usr/ports である必要があります。 そのディレクトリに移動したら、 make search name=プログラム名 と入力してください。 プログラム名の部分には検索したいプログラム名を入れます。 たとえば、lsof を探したい場合には次のようにします。
# cd /usr/ports # make search name=lsof Port: lsof-4.56.4 Path: /usr/ports/sysutils/lsof Info: Lists information about open files (similar to fstat(1)) Maint: obrien@FreeBSD.org Index: sysutils B-deps: R-deps:
出力のうち特に注意して見なければならないのは “Path:” という行です。 この行は port がどこにあるかを示しています。 出力される他の情報は port をインストールする際には必要となるものではありませんので、 ここでは触れないでおきます。
もっと詳しく検索するには、 make search key=string と入力してください。 string の部分には検索したいテキストを入れます。 port 名、コメント、説明文および依存情報が検索されます。 探しているプログラムの名前を知らない場合でも、 ある目的に関連した ports の検索に利用できます。
どちらの場合でも、 検索文字列中の大文字と小文字を区別せずに検索が行われるので、 “LSOF” を検索した結果は、 “lsof” と同じ検索結果になります。
FreeBSD には packages を管理するツールが複数あります。
sysinstall からシステムに packages をインストールしたり削除できます。 また、インストールされた packages や利用可能な packages の一覧を表示できます。 詳細については、Section 2.10.11 を参照してください。
この章では、コマンドラインの package 管理ツールについて説明します。
pkg_add(1) は、ローカルファイルやネットワーク上のサーバから FreeBSD ソフトウェア package を インストールするためのユーティリティです。
Example 5-1. 手動で package をダウンロードしてローカルからインストールする
# ftp -a ftp2.FreeBSD.org Connected to ftp2.FreeBSD.org. 220 ftp2.FreeBSD.org FTP server (Version 6.00LS) ready. 331 Guest login ok, send your email address as password. 230- 230- This machine is in Vienna, VA, USA, hosted by Verio. 230- Questions? E-mail freebsd@vienna.verio.net. 230- 230- 230 Guest login ok, access restrictions apply. Remote system type is UNIX. Using binary mode to transfer files. ftp> cd /pub/FreeBSD/ports/packages/sysutils/ 250 CWD command successful. ftp> get lsof-4.56.4.tgz local: lsof-4.56.4.tgz remote: lsof-4.56.4.tgz 200 PORT command successful. 150 Opening BINARY mode data connection for 'lsof-4.56.4.tgz' (92375 bytes). 100% |**************************************************| 92375 00:00 ETA 226 Transfer complete. 92375 bytes received in 5.60 seconds (16.11 KB/s) ftp> exit # pkg_add lsof-4.56.4.tgz
(FreeBSD CD-ROM セットのような) ローカルな packages がない場合は、 pkg_add(1) に -r オプションをつける方が楽でしょう。
このユーティリティは、このオプションを指定して実行すると
自動的に適切なオブジェクトの形式とリリースを判断し、 package を FTP
サイトからダウンロードしてインストールします。
# pkg_add -r lsof
上の例では適当な package がダウンロードされた後、インストールされます。 ユーザはこのほかに何もする必要はありません。 メインの配布サイトではなく FreeBSD Package ミラーサイトの package を使うには、 PACKAGESITE 環境変数に利用したいサイトを設定してください。 pkg_add(1) は、FTP_PASSIVE_MODE, FTP_PROXY, FTP_PASSWORD といった環境変数を参照する fetch(3) を用いてファイルをダウンロードします。 ファイアウォールの内側であったり、 FTP/HTTP プロキシを使う場合には、 これらの環境変数を設定することになります。 環境変数の一覧については fetch(3) をご覧ください。 また、上の例で lsof-4.56.4 の代わりに lsof を使っていることに注意してください。 リモートフェッチ機能を使用する場合には、 package のバージョン番号を取り除かなければなりません。 pkg_add(1) は自動的に最新版のアプリケーションを取得します。
Note: FreeBSD-CURRENT または、FreeBSD-STABLE を使用している場合、 pkg_add(1) は最新版のアプリケーションをダウンロードします。 -RELEASE を使用している場合には、 そのバージョンのリリース時にビルドされた package がダウンロードされます。 この設定は PACKAGESITE を上書きすることで変更できます。 たとえば、FreeBSD 8.1-RELEASE を使用している場合には、 pkg_add(1) を実行するとデフォルトで ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-8.1-release/Latest/ から packages をダウンロードします。 もし、pkg_add(1) を使って FreeBSD 8-STABLE の packages をダウンロードしたければ、 PACKAGESITE 環境変数を ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-8-stable/Latest/ に設定してください。
package は .tgz や .tbz という拡張子を持つファイルとして配布されており、 ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/packages/ や FreeBSD CD-ROM にあります。 FreeBSD 4-CD セット (または PowerPak など) の CD はすべて、 /packages ディレクトリに packages があります。packages のレイアウトは、 /usr/ports ツリーのものと同様です。 カテゴリごとにディレクトリがあり、 All ディレクトリにはすべての package があります。
package システムのディレクトリ構造は ports のレイアウトと同一です。 両者が組み合わさって package/port システムが構成されます。
pkg_info(1) は、インストールされている packages の一覧と説明を表示するユーティリティです。
# pkg_info cvsup-16.1 A general network file distribution system optimized for CV docbook-1.2 Meta-port for the different versions of the DocBook DTD ...
pkg_version(1) は、インストールされている packages のバージョンを要約して表示するユーティリティです。 package のバージョンを、現在の ports ツリーのバージョンと 比較します。
# pkg_version cvsup = docbook = ...
2 列目の記号は、インストールされているバージョンの ローカル ports ツリーのバージョンに対する 新旧を表します。
| 記号 | 意味 |
|---|---|
| = | インストールされている package のバージョンは、 ローカル ports ツリーのものと一致しています。 |
| < | インストールされているバージョンは、 ローカル ports ツリーのものより古いです。 |
| > | インストールされているバージョンは、 ローカル ports ツリーのものより新しいです (おそらくローカル ports ツリーは古くなっています)。 |
| ? | インストールされた package を ports インデックスの中に見つけることができません (インストールされた port が Ports Collection から削除されたり、 名前が変更された場合などに起こります)。 |
| * | 複数のバージョンの package が存在します。 |
| ! | インストールされた package はインデックス中に存在しますが、何らかの理由で、 インストールされた package のバージョン番号をインデックス中のエントリと比較できません。 |
インストールされている package を削除するには、 pkg_delete(1) ユーティリティを使ってください。
# pkg_delete xchat-1.7.1
pkg_delete(1) は package 名とバージョン番号の両方を必要とします。 すなわち、先ほどの例において xchat-1.7.1 を xchat とした場合には動作しません。 インストールされている package のバージョンは、 pkg_version(1) を使うと簡単に調べることができます。 バージョン番号のかわりにワイルドカードも使えます。
# pkg_delete xchat\*
上の例では、名前が xchat で始まるすべての packages が削除されます。
package に関するすべての情報は /var/db/pkg ディレクトリ以下に置かれています。 このディレクトリの下にあるファイルの中に、 インストールされたファイルの一覧やインストールされた各 package についての説明が含まれています。
このセクションでは、Ports Collection を利用してシステムにプログラムをインストールしたり、 システムから削除したりする基本的な手順について説明します。 利用可能な make のターゲットや環境変数についての詳細は ports(7) をご覧ください。
ports をインストールするためには、まず Ports Collection を用意しなくてはなりません。 Ports Collection とは、/usr/ports 以下に置かれる Makefile, 修正パッチ、 説明文などの一連のファイルのことです。
FreeBSD のシステムインストール時に、 sysinstall が Ports Collection をインストールするかどうかを尋ねてきたはずです。 No を選んだ場合、以下の作業をおこない Ports Collection をインストールしてください。
CVSup を利用する方法
ここでは、CVSup プロトコルを利用して Ports Collection をインストールする方法や最新の状態に保つ方法を簡単に説明します。 CVSup についてもっと知りたいのであれば、 CVSup を使う をご覧ください。
Note: csup は、 FreeBSD システムにおける CVSup プロトコルの実装です。
はじめて csup を使う際には、 /usr/ports が空であることを確認してください! 他の方法により Ports Collection がすでに用意されていると、 csup は削除されたパッチを Ports Collection から取り除かないでしょう。
csup を実行してください。
# csup -L 2 -h cvsup.FreeBSD.org /usr/share/examples/cvsup/ports-supfile
cvsup.FreeBSD.org を最寄りの CVSup サーバに変更してください。 ミラーサイトの完全なリストは CVSup サイト (Section A.6.7) にあります。
Note: 自分用の ports-supfile を使って、 コマンドラインから CVSup サーバを指定することを省略したいと思う方もいるでしょう。
そのような場合には、 まず root ユーザ権限で、 /usr/share/examples/cvsup/ports-supfile を /root や、あなたのホームディレクトリなどへコピーしてください。
次に ports-supfile を編集します。
CHANGE_THIS.FreeBSD.org を最寄りの CVSup サーバに変更してください。 ミラーサイトの完全なリストは CVSup サイト (Section A.6.7) にあります。
その後、以下のように csup を実行してください。
# csup -L 2 /root/ports-supfile
csup(1) コマンドを時間をおいて実行すると、 最新の変更点がダウンロードされて、あなたの手元の Ports Collection に加えられます。 Ports Collection 全体が再度ダウンロードされることはありません。
Portsnap を利用する方法
Portsnap は Ports Collection を配布するための新しいシステムです。 Portsnap の機能についての詳細は Portsnap を使う を参照してください。
圧縮された Ports Collection のスナップショットを /var/db/portsnap にダウンロードしてください。 この作業が終われば、ネットワークへの接続を終了してもかまいません。
# portsnap fetch
初めて Portsnap を使う時は、 スナップショットをまず /usr/ports に展開してください。
# portsnap extract
すでに /usr/ports が用意されていて、 アップデートだけを行ないたいのであれば、 代わりに以下のコマンドを実行してください。
# portsnap update
sysinstall を利用する方法
ここでは、sysinstall を利用してインストールメディアから Ports Collection をインストールする方法について説明します。 この方法では、リリース時の古い Ports Collection がインストールされることに注意してください。 もし、インターネットへの接続が可能であれば、 これまでに説明した方法を使ってください。
root ユーザ権限で、以下のように sysinstall を実行してください。
# sysinstall
スクロールダウンして Configure を選び、 Enter を押してください。
スクロールダウンして Distributions を選び、 Enter を押してください。
スクロールダウンして ports を選び、 Space キーを押してください。
Exit までスクロールアップして、 Enter を押してください。
CDROM や FTP といったインストールメディアを選択してください。
Exit までスクロールアップして、Enter を押してください。
X を押して、 sysinstall を終了してください。
一番最初に知らなければならないのは、 Ports Collection は “スケルトン” と呼ばれるもので構成されているという事実です。 port スケルトンは簡単に言うと、アプリケーションを FreeBSD 上で正しくコンパイルしインストールする方法を提供する最小限のファイルのセットのことです。 それぞれの port スケルトンには、次のファイルが含まれています。
Makefile。 Makefile にはアプリケーションのコンパイル方法やシステムのどこにインストールするかを指定する、 さまざまな命令文が含まれています。
distinfo ファイル。 このファイルには、その port を構築するためにダウンロードする必要があるファイルのファイル名と、 それらのファイルがダウンロードによって壊れていないかを (sha256(1) を使って) 確認するためのチェックサム情報が含まれています。
files ディレクトリ。 このディレクトリには FreeBSD システム上でプログラムをコンパイルし、 インストールするための修正パッチが含まれています。 修正パッチ (patch) とは基本的に、 個々のファイルに対する変更点を表した小さなファイル群のことです。 ファイルはプレインテキスト形式で、 “10 行目を削除” や “26 行目を ... に変更” などと書かれています。 修正パッチは、“diff (差分)” とも呼ばれます。 これは、修正パッチが diff(1) プログラムで作成されるからです。
このディレクトリには、その port の構築に必要な その他のファイルが入る場合もあります。
pkg-descr ファイル。 これにはプログラムの、複数行にわたる詳しい説明文が含まれます。
pkg-plist ファイル。 これは、その port によってインストールされる全ファイルのリストです。 これにはプログラムを削除する際に、 どのファイルを削除すれば良いのかを ports システムに伝える役割もあります。
これらの他に pkg-message といったファイルを含む ports もあります。 ports システムは、 このようなファイルを用いて特殊な状況にも対応しています。 これらのファイルについての詳細および ports の一般的な説明については、port 作成者のためのハンドブック をご覧下さい。
port はソースコードからアプリケーションを構築する方法を提供しますが、 実際のソースコードを含んではいません。 ソースコードは CD-ROM やインターネットから入手できます。 ソースコードはソフトウェア作者のお気に入りの形式で配布されます。 たいてい、tar と gzip で作成された圧縮アーカイブとして配布されますが、 他のツールで圧縮されていたり、圧縮されずに配布されることもあります。 どのような形式で配布されているかに関わらず、 これらのプログラムのソースコードは “distfile” と呼ばれています。 以下では FreeBSD port をインストールする 2 つの方法について説明します。
Note: ports をインストールするには、 root としてログインする必要があります。
Warning: port をインストールする前に、 Ports Collection が最新であることを確認してください。 また、そのアプリケーションに関連したセキュリティ上の問題がないことを http://vuxml.freebsd.org/ で確認してください。
アプリケーションをインストールする前に、 portaudit を使って セキュリティに関する脆弱性を自動的に調べることができます。 このツールは Ports Collection (ports-mgmt/portaudit) に用意されています。 新しく port をインストールする前に、 portaudit -F コマンドを実行すると、 最新の脆弱性に関するデータベースがダウンロードされます。 セキュリティの検査およびデータベースの更新は、 日々のセキュリティチェックで行なわれます。 詳しくは、 portaudit(1) および periodic(8) のマニュアルページを参照してください。
Ports Collection は、ネットワークに接続できることを想定しています。 もし接続できなければ、distfile のコピーを /usr/ports/distfiles に手動で置いてください。
まず、インストールしたい port のディレクトリに移動してください。
# cd /usr/ports/sysutils/lsof
lsof ディレクトリに移動すると、 port スケルトンがあるのが確認できると思います。 次に行なうのは、port のコンパイルまたは “ビルド (build)” です。 これは、プロンプトから単に make と入力するだけで行なえます。 そうすると、次のような出力が現われるはずです。
# make >> lsof_4.57D.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.57 ... [extraction output snipped] ... >> Checksum OK for lsof_4.57D.freebsd.tar.gz. ===> Patching for lsof-4.57 ===> Applying FreeBSD patches for lsof-4.57 ===> Configuring for lsof-4.57 ... [configure output snipped] ... ===> Building for lsof-4.57 ... [compilation output snipped] ... #
コンパイルが終了してプロンプトに戻ることを確認してください。 次に port のインストールを行ないます。 port をインストールするのに必要なのは、 make コマンドに一つの単語、 install を指定することだけです。
# make install
===> Installing for lsof-4.57
...
[installation output snipped]
...
===> Generating temporary packing list
===> Compressing manual pages for lsof-4.57
===> Registering installation for lsof-4.57
===> SECURITY NOTE:
This port has installed the following binaries which execute with
increased privileges.
#
プロンプトに戻ったら、 インストールしたプログラムは実行できるようになっています。 lsof は高い権限で動作するプログラムなので、 セキュリティに関する警告が表示されます。 ports のコンパイルや インストール中に表示されるこれらの警告に注意してください。
コンパイル時に作成される作業用ディレクトリを削除すると良いでしょう。 このディレクトリにはコンパイル時に使用されるすべての一時ファイルが含まれています。 このディレクトリを残しておくと、ディスク容量を消費するだけでなく、 port を新しいバージョンへアップデートする際に問題を引き起こす可能性があります。
# make clean ===> Cleaning for lsof-4.57 #
Note: make、make install および make clean と三つに分けられた手順の代わりに、 最初から make install clean と実行することで、 余分な手順を二つ省くことができます。
Note: シェルによってはコマンドの実行ファイルを探す時間を短縮するために、 環境変数 PATH に登録されている ディレクトリのコマンド一覧をキャッシュするものがあります。 このようなシェルを使っているのであれば、 port をインストールしたあとで、 新しくインストールされたコマンドを用いる前に、 rehash コマンドを実行する必要があります。 このコマンドは tcsh などのシェルで動作します。 sh のようなシェルを使っているのであれば hash -r を実行してください。 詳細については、 あなたの使っているシェルのドキュメントをご覧ください。
FreeBSD Mall の FreeBSD Toolkit のようなサードパーティ製の DVD-ROM 製品の中には distfiles を収録しているものがあります。 これらを Ports Collection で使うことができます。 DVD-ROM を /cdrom にマウントしてください。 ほかのマウントポイントを使用したければ、 CD_MOUNTPTS 変数を設定してください。 ディスク上に必要な distfiles が存在すると、 自動的に利用されます。
Note: port には CD-ROM への収録を許可しないライセンス条項を持つものがあることに 注意してください。 これにはダウンロード前に登録を必要としたり、 再配布が禁止されているなどという理由があります。 CD-ROM に含まれていない port をインストールしたい場合には、 ネットワークに接続する必要があります。
ports は、FTP_PASSIVE_MODE, FTP_PROXY, FTP_PASSWORD といった環境変数を参照する fetch(1) を用いてファイルをダウンロードします。 ファイアウォールの内側であったり、 FTP/HTTP プロキシを使う場合には、 これらの環境変数を設定することなります。 環境変数の一覧については fetch(3) をご覧ください。
ネットワークに常時接続できないユーザのために make fetch コマンドが用意されています。 (ネットワークに接続している時に) このコマンドを ports のトップディレクトリ (/usr/ports) で実行してください。 必要なファイルがダウンロードされます。 このコマンドは /usr/ports/net といった、より下の階層のカテゴリにおいても使うことができます。 ある port がライブラリやその他の ports に依存している場合には、 それらの distfiles はダウンロードされないことに注意してください。 port が依存しているものもダウンロードしたければ fetch の代わりに fetch-recursive を使って下さい。
Note: 前述した make fetch と同じように、トップディレクトリで make を実行するとすべての port がビルドされます。 しかしながら ports の中には同時に存在できないものがあったり、 異なる ports の別のファイルが同じ名前で インストールされる場合があることに注意してください。
めったにないことかもしれませんが、 MASTER_SITES (ファイルをダウンロードしてくる場所) に書かれているサイト以外から tarball を持ってくることが必要になる場合があります。 そのような場合には以下のように MASTER_SITES を変更してください。
# cd /usr/ports/directory # make MASTER_SITE_OVERRIDE= \ ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/ fetch
上の例では MASTER_SITES を ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/ に変更しています。
Note: ports の中にはビルドオプションを指定できる (または要求してくる) ものがあります。 このオプションを指定することで、 アプリケーションの機能の一部を有効もしくは無効にできます。 また、セキュリティオプションを設定したり、 その他のカスタマイズを行うことができます。 このようなアプリケーションには www/firefox, security/gpgme や mail/sylpheed-claws などがあります。 利用可能なオプションがある場合にはメッセージが表示されます。
作業ディレクトリやターゲットディレクトリを デフォルトのものから変更したほうが有用な場合 (もしくは変更しなければならない場合) があります。 WRKDIRPREFIX 変数と PREFIX 変数を変更することで、 違うディレクトリを使用することができます。 たとえば、
# make WRKDIRPREFIX=/usr/home/example/ports install
とすると、ports は /usr/home/example/ports でコンパイルされ、すべて /usr/local 以下にインストールされます。
# make PREFIX=/usr/home/example/local install
この場合、コンパイルは /usr/ports でおこない、 /usr/home/example/local にインストールします。
もちろん、
# make WRKDIRPREFIX=../ports PREFIX=../local install
とすれば両者を組み合わせることが可能です (省略せずに記述したらこのページに収めるには長すぎるのですが、 考え方は理解していただけたと思います)。
あるいは、これらを環境変数に設定する方法もあります。 どのようにすれば良いかについては、 あなたの使っているシェルのマニュアルページを参照してください。
(X Window System に含まれる) imake を使用する ports の場合は PREFIX が機能せず、 /usr/X11R6 にインストールしようとします。 また、Perl 関連の ports も同様に PREFIX を無視して Perl ツリーにインストールします。 これらの ports で PREFIX がきちんと参照されるように変更するのは、ほとんど不可能です。
ports をコンパイルする際、ビルドオプションを設定するために ncurses ベースのメニューが表示されることがあります。 port の構築後、再びこのメニューを表示させてオプションの追加や削除、設定の変更を行いたいと思うことがあるでしょう。 このための方法はたくさんあります。 一つ目の方法は port のディレクトリに移動し、 make config と入力する方法です。 現在の設定を反映させたメニューが再び表示されます。 別の方法は make showconfig を使う方法です。 port の設定可能なオプションがすべて表示されます。 他の方法は make rmconfig の実行です。 このコマンドを実行すると選択されているすべてのオプションが削除され、 設定をもう一度やり直すことができます。 これらの方法や他の方法についての詳細は、 ports(7) マニュアルで説明されています。
ports のインストール方法について知ればおそらく、 インストールした後になって間違っていたことに気付いた時などに備えて、 それらを削除するにはどうすれば良いのか疑問に感じることでしょう。 さて、前の例 (例のまま何も変更していない人は lsof) を削除してみましょう。 packages を削除する時とまったく同じく (packages の章 で説明したように) pkg_delete(1) コマンドで ports を削除できます。
# pkg_delete lsof-4.57
まず最初に pkg_version(1) コマンドを使って、 古くなってしまった ports の中で新しいバージョンにアップデート可能なものを Ports Collection からリストアップしてください。
# pkg_version -v
Ports Collection を更新したら、port をアップグレードする前に /usr/ports/UPDATING ファイルに目を通してください。 このファイルには port をアップグレードする際にユーザが遭遇するであろう問題や、 追加で必要な作業などが記述されています。 例えば、ファイル形式の変更や設定ファイルの場所の変更、 前のバージョンと互換性がなくなったことなどが書かれています。
もし、この節に書いてあることと UPDATING に書かれていることが矛盾している場合には、 UPDATING を優先してください。
portupgrade は、 インストールした ports のアップグレードを簡単に行なうためのユーティリティです。 ports-mgmt/portupgrade port から利用できます。 他の port と同じように make install clean コマンドでインストールしてください。
# cd /usr/ports/ports-mgmt/portupgrade # make install clean
pkgdb -F コマンドを使って、 インストールされている ports を調べてください。 矛盾が検出された場合には修復してください。 アプリケーションをアップデートする前には、 この作業を定期的に行なうとよいでしょう。
portupgrade -a を実行すると、 portupgrade はシステムにインストールされている port
の中で古くなったものをすべてアップデートします。 もし、すべての ports
に対して個別にアップグレードするかどうかを確認したいのであれば、 -i オプションを使ってください。
# portupgrade -ai
ports で利用可能なすべてのアプリケーションではなく、
ある特定のアプリケーションだけを更新したいのであれば、 portupgrade pkgname
を実行してください。 アップグレードするアプリケーションが依存しているすべての
ports をまず先に更新したい場合には、 -R
オプションを使ってください。
# portupgrade -R firefox
ports ではなく packages を用いてインストールを行ないたい場合には、 -P オプションを使ってください。 このオプションを使うと、portupgrade は PKG_PATH
に登録されているローカルディレクトリを検索します。 ローカルに packages
が見つからなければ、 リモートサイトからダウンロードを試みます。 packages
をローカルに見つけることができず、
リモートサイトからもダウンロードできない場合には、 portupgrade は ports からインストールを行ないます。
ports を使用したくなければ、-PP
オプションを指定してください。
# portupgrade -PP gnome2
また、ビルドやインストールを行なわず、 distfiles (-P
が指定されている場合は packages) だけをダウンロードしたければ、 -F オプションを指定してください。 詳細は
portupgrade(1)
を参照してください。
インストールした ports のアップグレードを簡単に行なうためのもうひとつのユーティリティが Portmanager です。 ports-mgmt/portmanager port から利用できます。
# cd /usr/ports/ports-mgmt/portmanager # make install clean
インストールされているすべての ports を次のような簡単なコマンドでアップグレードできます。
# portmanager -u
Portmanager の作業を確認しながら行いたい場合には、
-ui フラグを追加して上記のコマンドを実行 (portmanager -u -ui) してください。 Portmanager を使って、 システムに新しい ports
をインストールすることもできます。 通常の make install clean コマンドと異なり、 選択した port
をビルドしインストールする前に、 依存している port
をすべてアップグレードします。
# portmanager x11/gnome2
選択した port の依存関係について問題が発生した場合には、 Portmanager を使って修復することができます。 修正が終ったら、問題を含んでいた port は再構築されます。
# portmanager graphics/gimp -f
詳細については portmanager(1) を参照してください。
インストールした ports のアップグレードを行うためのもう一つのユーティリティが Portmaster です。 Portmaster は、 どの ports をアップグレードすべきかの判断を、 (他の ports に依存せずに) “base” システムのツールと /var/db/pkg/ の情報から行うよう設計されています。 ports-mgmt/portmaster から利用できます。
# cd /usr/ports/ports-mgmt/portmaster # make install clean
Portmaster は、ports を 4 つのカテゴリに分類します。
Root ports (他の port に依存しません。他の port からも依存されません。)
Trunk ports (他の port に依存しませんが、他の port から依存されます。)
Branch ports (他の port に依存し、他の port からも依存されます。)
Leaf ports (他の port に依存しますが、他の port からは依存されません。)
-L オプションを使うと、 インストールした 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)
===>>> apache-2.2.3
===>>> New version available: apache-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
Note: Portmaster のデフォルトの設定では、 インストールされている port を削除する前にバックアップ用の package が作成されます。 このバックアップは、新しいバージョンのインストールに成功すると削除されます。
-bオプションを使うと、 Portmaster はバックアップを自動的に削除しません。-iオプションを追加すると、 Portmaster をインタラクティブモードで使用できます。 このモードでは、各 port をアップグレードするかどうかの選択を対話的に行うことがでます。
アップグレードの過程でエラーに遭遇した場合には、 -f
オプションを使ってすべての ports のアップグレードや再構築をできます。
# portmaster -af
Portmaster を使ってシステムに新しい ports をインストールしたり、新しい port のコンパイルやインストール前に依存するすべての port をアップグレードできます。
# portmaster shells/bash
詳細については portmaster(8) を参照してください。
Ports Collection を使い続けていると、 そのうちディスクを食いつぶしてしまうでしょう。 ports からソフトウェアをビルドしてインストールした後には、 常に作業用の work ディレクトリを make clean コマンドで削除するようにしましょう。 以下のコマンドで Ports Collection を掃除することができます。
# portsclean -C
distfiles ディレクトリには、たくさんのソースファイルがたまっていきます。 手動でそれらのファイルを削除してもよいのですが、 どの ports からも使われていない distfiles を次のコマンドで削除できます。
# portsclean -D
また、システムにインストールされている port から使われていない distfiles をすべて削除するには、以下のコマンドを使ってください。
# portsclean -DD
Note: portsclean ユーティリティは portupgrade ツール群の一部です。
インストールした ports のうちで、 必要なくなったものは削除してください。 ports-mgmt/pkg_cutleaves port は、 この作業を自動化するツールです。
新しいアプリケーションのインストールが終わったら、 次に付属のドキュメントを読みたいと思うでしょう。 また、必要な設定ファイルを編集したり、 (デーモンの場合には) システムの起動時にプログラムが開始することを確認したくなるでしょう。
port のインストール後に追加で行わなければならない作業の詳細は、 アプリケーションごとに異なります。 しかしながら、新しいアプリケーションをインストールしたばかりで、 “次は何 ?” と思っているのであれば、 以下の tips は役に立つでしょう。
どのようなファイルがどこにインストールされているのかを知りたければ、 pkg_info(1) を使ってください。 たとえば、FooPackage の 1.0.0 バージョンをインストールしたのであれば、 以下を実行してください。
# pkg_info -L foopackage-1.0.0 | less
上のコマンドを実行すると package としてインストールされているすべてのファイルが表示されます。 特に、man/, etc/, doc/ ディレクトリのファイルに注目してください。 それぞれ、マニュアルページ、 設定ファイル、より包括的なドキュメントが設置されています。
もし、アプリケーションのバージョンがわからなければ、 次のコマンドを実行してください。
# pkg_info | grep -i foopackage
インストールされた packages の中から、名前に foopackage を含む package が表示されます。 必要に応じてコマンドラインの foopackage を置き換えてください。
アプリケーションのマニュアルページがインストールされているのであれば、 man(1) を使ってマニュアルを読んでください。 同様に、設定ファイルのサンプルや提供されているドキュメントにも目を通してください。
アプリケーションのウェブサイトがあれば、 そのサイトに更なるドキュメントや FAQ がないかを調べてください。 ウェブサイトのアドレスがわからなければ、 次のコマンドで表示されるかもしれません。
# pkg_info foopackage-1.0.0
ウェブサイトが存在すると、 URL が WWW: を含む行に表示されます。
(インターネットサーバのように) システム起動時に立ち上げる必要のある port は、 サンプルスクリプトを通常 /usr/local/etc/rc.d にインストールします。 このスクリプトを調べ、 必要があれば編集したりスクリプトの名前を変更してください。 詳細は サービスの起動 をご覧ください。
port がうまく動作しない状況に遭遇したら、 あなたにできることは次のようなことしかありません。
その port に対する修正案が提出されていないかどうかを 障害報告 (Problem Report) データベース で調べてください。 もし提案されていれば、 その修正を使うことができるかもしれません。
port の保守担当者に対応してもらいましょう。 make maintainer と入力するか、 Makefile を直接読み、 保守担当者の電子メールアドレスを調べます。 メールを送る際には、port 名とバージョン番号 (Makefile の $FreeBSD: 行)、 そしてエラーが出力されるまでの出力ログを忘れずに添付してください。
Note: 特定の保守担当者が存在せず、かわりに メーリングリスト が保守している ports があります。 そのような場合には、メールアドレスは
<freebsd-listname@FreeBSD.org>のようになります。 質問する際には、このことに気をつけてください。特に
<ports@FreeBSD.org>が保守している ports には、保守担当者が本当にいません。 そのメーリングリストを購読する人々からなるコミュニティが、 修正や対応をおこなっています。 もっとボランティアが必要です!
保守担当者から返信がなければ、send-pr(1) を使ってバグレポートを提出しても構いません ( FreeBSD 障害報告の書き方 をご覧ください)。
自分で直しましょう! “Ports” システムに関する詳細な情報は port 作成者のためのハンドブック にあります。 このセクションを読むと、壊れてしまった port を直したり、 自分で作った port を提出したりできるようになります!
近くの FTP サイトから package を入手しましょう。 “マスタ” package コレクションは、 ftp.FreeBSD.org の package のディレクトリ にありますが、 まずはあなたの地域の ミラーサイト を最初に調べてください。 ソースからコンパイルすることを試みるより確実ですし、 時間もかかりません。 package をシステムにインストールするには、pkg_add(1) を使います。
FreeBSD では、ユーザに強力なグラフィカルインタフェースを提供するために X11 を採用しています。 X11 は、 Xorg (他のソフトウェアパッケージについてはここでは述べません) に実装された、 フリーで利用できる X Window System です。 FreeBSD におけるデフォルトかつ公式の X11 サーバは X.Org Foundation が開発している Xorg です。 FreeBSD に似たライセンスに従って配布されています。 FreeBSD 用の商用 X サーバも入手できます。
X11 がサポートするビデオハードウェアについての情報は、 Xorg のウェブサイトをご覧ください。
この章を読めば以下のことがわかります。
X Window System のさまざまなコンポーネントと、 それらが互いにどのように連携しているか。
X11 のインストールおよび設定方法
さまざまなウィンドウマネージャのインストール方法
X11 での TrueType® フォントの使い方
GUI ログイン (XDM) の設定方法
この章を読み始める前に以下のことを理解しておく必要があります。
サードパーティ製ソフトウェアのインストール方法 (Chapter 5)
初めて X を使う場合、Microsoft Windows や Mac OS® といった他の GUI 環境に慣れている人は多少ショックを受けるでしょう。
さまざまな X のコンポーネントについての詳細や、 それらがどのようにやり取りするかについては理解する必要はありませんが、 基本的なことをいくつか知っていると X を使う際に強力な武器になるでしょう。
X は、UNIX 用に書かれた最初のウィンドウシステムではありませんが、 それらの中では最も広まっているものです。 X のオリジナルの開発チームは X を書く前に別のウィンドウシステムを開発していました。 そのシステムの名前は “W” (“Window” の W) です。 X は単にローマ字でその次の文字だというだけなのです。
X は “X”, “X Window System”, “X11” などといった多くの用語で呼ばれます。 X11 を “X Windows” と呼ぶと気を悪くする人もいるでしょう。 これについてもう少し見識を深めるには X(7) をご覧ください。
X は最初からネットワークを意識してデザインされており、 “クライアント - サーバ” モデルを採用しています。
X では、“X サーバ” はキーボードやモニタ、 マウスが接続されたコンピュータ上で動きます。 このサーバはディスプレイの表示を管理したり、キーボード、 マウスからの入力を処理したり、他の入出力装置 (すなわち、入力装置として “タブレット” を利用できますし、 出力装置としてビデオプロジェクタを利用することもできます) を取り扱います。 各 X アプリケーション (XTerm や Netscape® など) は “クライアント” になります。 クライアントは “この座標にウィンドウを描いてください” といったメッセージをサーバへ送り、サーバは “ユーザが OK ボタンを押しました” といったメッセージを送り返します。
家庭や小さなオフィスのような環境では、X サーバと X クライアントは同じコンピュータ上で動くことになるでしょう。 しかし、X サーバを非力なデスクトップコンピュータで動かし、 X アプリケーション (クライアント) は例えばオフィス全体を捌くような 高機能で高価なマシンで動かすことも可能なのです。この場合、 X のクライアントとサーバの通信はネットワーク越しに行なわれます。
これは、ある人々を混乱させることがあります。 X での用語は彼らが想定するものとは正反対だからです。 彼らは “X サーバ” は地下にある大きなパワフルなマシンであり、 “X クライアント” が自分たちのデスク上にあると想像するのです。
X サーバとはモニタとキーボードがついているマシンのことであり、 X クライアントとはウィンドウを表示するプログラムだということを覚えておいてください。
X のプロトコルには、クライアントとサーバのマシンが同じ OS で動いていなければならないといったことを強制するものはなにもありませんし、 同じ機種で動いている必要もありません。 X サーバを Microsoft Windows や Apple の Mac OS で動かすことも可能ですし、 そのようなソフトウェアもフリーのものから商用のものまでいろいろとあります。
X のデザイン哲学は UNIX のそれに非常によく似ており、 “ツールであってポリシーではない” のです。 つまり、X はあるタスクがどのように達成されるべきかを示すものではありません。 その代わり、ユーザにはツールが与えられ、 それらをどうするかはユーザに委ねられているのです。
この哲学は、X ではスクリーン上でウィンドウがどのように見えるべきか、 マウスでそれらをどうやって動かすか、ウィンドウ間を移動するのに どういうキーストロークを使うべきか (例えば Microsoft Windows における Alt+Tab)、 各ウィンドウのタイトルバーはどのように見えるべきか、 それらはクローズボタンを持つべきかどうか、 といったことを示すものではないというところまで拡大して解釈できます。
その代わりに、X ではそういったことを “ウィンドウマネージャ” と呼ばれるアプリケーションに任せるのです。 X 用のウィンドウマネージャは以下のようにたくさんあります。 AfterStep, Blackbox, ctwm, Enlightenment, fvwm, Sawfish, twm, Window Maker などなど。 これらのウィンドウマネージャの見た目や使い勝手はそれぞれ異なっています。 “バーチャルデスクトップ” をサポートしているものもありますし、 デスクトップを操作するキーストロークをカスタマイズできたり、 “スタート” ボタンやそれに類するものを持っているものもあります。 “テーマ” に対応しており、 新しいテーマを適用して見た目や使い勝手を完全に変えられるものもあります。 これらの、およびその他多くのウィンドウマネージャは Ports Collection の x11-wm というカテゴリからインストールできます。
さらに、KDE や GNOME デスクトップ環境には、 それぞれのデスクトップに統合された独自のウィンドウマネージャがあります。
それぞれのウィンドウマネージャはまた異なる設定機構を備えており、 手で設定ファイルを編集しなければならないものや、 設定作業のほとんどを GUI ツールで行うことができるものもあります。 少なくとも 1 つ (Sawfish) は Lisp 言語の変種で書かれた設定ファイルを持っています。
フォーカスポリシー: ウィンドウマネージャのもう一つの機能はマウスの “フォーカスポリシー” に関するものです。 すべてのウィンドウシステムは、ウィンドウを選択しキーストロークを 受け付けるようにするための方法が必要です。 そして、どのウィンドウがアクティブなのかを示す必要もあります。
よく知られているフォーカスポリシーは “click-to-focus” と呼ばれるもので、 このモデルは Microsoft Windows で利用されており、 あるウィンドウ内でマウスをクリックすればそのウィンドウがアクティブになる、 というものです。
X は特定のフォーカスポリシーを採用していません。 代わりにウィンドウマネージャがそれをコントロールします。 それぞれのウィンドウマネージャが、 それぞれのフォーカスポリシーをサポートしています。 すべてのものは click-to-focus をサポートしていますし、 多くのものは他の方法もサポートしています。
最もポピュラーなフォーカスポリシーは次のものでしょう
- focus-follows-mouse
マウスポインタの下にいるウィンドウがフォーカスされるというものです。 ウィンドウは最前面にある必要はありません。 フォーカスを変えるには他のウィンドウにマウスポインタを動かすだけです。 クリックする必要はありません。
- sloppy-focus
これは focus-follows-mouse を少し拡張したものです。 focus-follows-mouse では、 マウスがルートウィンドウ (背景) に移動した時には、 フォーカスされているウィンドウがなくなり、 キーストロークは単に破棄されます。 sloppy-focus であれば、 ポインタが別のウィンドウに移った時のみフォーカスが変わり、 現在のウィンドウから出ただけでは変わりません。
- click-to-focus
マウスクリックによりアクティブなウィンドウが選択されます。 ウィンドウは “前面に持ち上げられ”、 他のすべてのウィンドウの前にきます。 ポインタが別のウィンドウ上に移動した時でも、 すべてのキーストロークがこのウィンドウに届きます。
多くのウィンドウマネージャはこういったものに加え、 その他のポリシーにも対応しています。 ウィンドウマネージャそのもののドキュメントもよく読んでください。
X のツールを提供してもポリシーは提供しないというアプローチは、 各アプリケーションでスクリーンに現われるウィジェットにも適用されます。
“ウィジェット” はクリック可能であったり、 他の方法で操作可能なすべてのユーザインタフェース用アイテムを指す用語です。 ボタンやチェックボックス、ラジオボタン、アイコン、リスト、などがそうです。 Microsoft Windows はこれらを “コントロール” と呼んでいます。
Microsoft Windows や Apple の Mac OS はともに非常に厳密なポリシーをウィジェットに課しています。 アプリケーション開発者は共通のルックアンドフィールに 確実に従うことを想定されているわけです。 X では、特定のグラフィカルなスタイルやウィジェットのセットを 強制することが重要とは考えてられていませんでした。
したがって、X アプリケーションに共通の見た目や使い勝手を期待してはいけません。 MIT のオリジナルの Athena ウィジェットや Motif® (Microsoft Windows のウィジェットセットはこれを基にしており、 斜度のついた縁と三方に灰色の陰影がついています)、 OpenLook をはじめとして 有名なウィジェットセットやその亜種が何種類もあります。
比較的新しい X アプリケーションのほとんどが、 KDE で使われている Qt や GNOME プロジェクトで使われている GTK+ のどちらかのウィジェットセットを使っています。 これらのウィジェットセットはモダンな見た目を持っています。 この点で言えば、UNIX のルックアンドフィールは収斂されてきており、 初心者がより簡単に使えるようになってきています。
FreeBSD のデフォルトの X11 は、Xorg です。 Xorg は X.Org Foundation がリリースしている X Window System のオープンソースな実装です。 Xorg は XFree86 4.4RC2 と X11R6.6 のコードを元にしています。 現在 FreeBSD Ports Collection で利用可能な Xorg のバージョンは 7.5.2 です。
Ports Collection から Xorg をビルドしインストールするには、以下のように入力します。
# cd /usr/ports/x11/xorg # make install clean
Note: Xorg をすべてビルドするには、 少なくとも 4 GB の空き容量が必要です。
package から直接 X11 をインストールすることもできます。 pkg_add(1) ツールで扱われるバイナリパッケージが X11 についても提供されています。 pkg_add(1) のリモート取得機能を利用する時は、 package のバージョンは外してください。 pkg_add(1) は自動的にそのアプリケーションの最新版を取得します。
ですから、Xorg の package を取得してインストールするには、 次のように入力します。
# pkg_add -r xorg
Note: 上記の例では、サーバ、クライアント、フォントなどを含んだ X11 ディストリビューション全体をインストールします。 分割された X11 のパッケージや ports も利用できます。
最小の構成で X11 をインストールをするには、 x11/xorg-minimal をインストールしてください。
この章の残りでは、X11 をどのように設定すればよいか、 また生産性の高いデスクトップ環境をどのように設定するかについて解説します。
X11 の設定を始める前に、 次の情報が必要となります。
モニタの仕様
ビデオアダプタのチップセット
ビデオアダプタのメモリ
モニタの仕様は、X11 がどの解像度とリフレッシュレートで動作するかを決定するために用いられます。 こういった仕様は、通常モニタに付いてくるドキュメントや、 製造元のウェブサイトから取得できます。 必要なものは、水平走査周波数と垂直同期周波数の 2 つの数値範囲です。
ビデオアダプタのチップセットは X11 がグラフィックハードウェアとやり取りするために どのドライバモジュールを使うかを定義します。 ほとんどのチップセットが自動認識されますが、 正常に認識されない時のために知っておくとよいでしょう。
ビデオメモリは、 グラフィックアダプタがどの解像度とどの色数で動くことができるかを決めます。 これは、ユーザが自分のシステムにおける制限を理解するために知っておくことが重要です。
Xorg は、 HAL を用いてキーボードやマウスを自動認識します。 x11/xorg の依存として、 sysutils/hal および devel/dbus port がインストールされますが、以下のようなエントリを /etc/rc.conf ファイルに追加し、 有効にする必要があります。
hald_enable="YES" dbus_enable="YES"
これらのサービスは、 Xorg の設定や起動が行われる前に (手動や再起動によって) 起動している必要があります。
Xorg は、設定をすることなく
% startx
と入力するだけで起動します。
ある種のハードウェアは、自動設定で動作しなかったり、 期待したような設定が行われないかもしれません。 そのような場合には、手動で設定する必要があります。
Note: 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 と入力してください。
Note: 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.new の ServerLayout もしくは ServerFlags セクションに、以下の行を追加する必要もあるでしょう。
Option "DontZap" "off"
もしマウスが動作しなければ、 先へ進む前にマウスの設定を行う必要があります。 FreeBSD インストールの章の Section 2.10.10 を参照してください。 さらに、 最近の Xorg では、デバイスの自動認識のため、 xorg.conf の InputDevice セクションは無視されます。 古い設定の記述を利用するには、以下の行を ファイルの ServerLayout もしくは、 ServerFlags セクションに追加してください。
Option "AutoAddDevices" "false"
これで、以前のバージョンのように、入力デバイスを (キーボードレイアウトの変更のように) 必要なオプションを用いて設定できるようになります。
Note: すでに説明したように、デフォルトで 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
HorizSync と VertRefresh というキーワードが設定ファイル中にない場合があります。 その場合には、 HorizSync キーワードの後には水平走査周波数の、 VertRefresh キーワードの後には垂直同期周波数の正しい値を加えてください。 上の例では対象となるモニタの周波数が書かれています。
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 ピクセルです。
最後に、設定ファイルを保存し、 上の例にあるようにテストしてみてください。
Note: トラブルシューティングの過程で手助けするツールのひとつに 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 サーバを起動することもできます。
Intel i810 統合チップセットを設定するには、 X11 にカードを制御させるために AGP プログラミングインタフェースである agpgart が必要になります。 詳しくは、agp(4) ドライバのマニュアルページをご覧ください。
このドライバを用いることで、 他のグラフィックカードと同様に設定を行うことができるようになります。 カーネルに agp(4) ドライバが組み込まれていないシステムでは、 このモジュールを kldload(8) を使って読み込もうとしても動作しないことに注意してください。 このドライバは、 起動時にカーネル内に存在するようにカーネル内部に組み込むか、 /boot/loader.conf を使わなければなりません。
この章では、設定に関する幾分高度な知識を必要とします。 これまでに述べた標準ツールを使って設定に失敗する場合は、 ログファイルを参照してください。 ログファイルには、 設定のために有用な情報が十分含まれています。 テキストエディタを使用する必要があるでしょう。
現在のワイドスクリーン (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 が動作するでしょう。
X11 に付いてくるデフォルトのフォントは、 通常のデスクトップパブリッシングアプリケーションにとっては理想的とは言えない程度のものです。 文字を大きくするとジャギーになりプロフェッショナルとは言えないようなものになりますし、 Netscape での小さなフォントは頭が悪そうに見えます。 しかし、世の中には質の高い 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 ファイルを使うことです。 これに関しては アンチエイリアス 節をご覧ください。
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 行を追加します。
これで終わりです。Netscape や Gimp, StarOffice™ といったすべての X アプリケーションから TrueType フォントを使うことができます。 (高解像度なディスプレイで見るウェブページ上のテキストみたいな) とても小さなフォントや (StarOffice にあるような) 非常に大きなフォントもかなり綺麗に見えるようになることでしょう。
/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>
Note: ディスプレイの種類にもよりますが、 rgb ではなく bgr や vrgb、もしくは vbgr の場合もあるので、 試してみて最も良いものを使ってください。
X ディスプレイマネージャ (XDM) は X Window System のオプショナルな一部分であり、 ログインセッションの管理に用います。 最低限の機能を実装した “X 端末” やデスクトップ、 大規模なネットワークディスプレイサーバといった場面ではこれが有用です。 X Window System はネットワークとプロトコルから独立しているため、 ネットワークで繋がれた X のクライアントとサーバを動かすための設定はかなり幅が広くなります。 XDM はどのディスプレイサーバに接続するかを選択でき、 ログイン名とパスワードの組み合わせなど認証情報を入力できるグラフィカルなインタフェースを提供しています。
XDM がユーザに getty(8) (詳しくは Section 19.3.3 をご覧ください) と同じ機能を提供することを考えてみてください。 つまり、ディスプレイ上でシステムへのログインができ、 ユーザの代わりにセッションマネージャ (通常は X のウィンドウマネージャ) を起動することができるのです。 それから XDM は、 ユーザが作業を終えてディスプレイからログアウトする合図を送ってきてプログラムが終了するのを待ちます。 この時点で、XDM は次にログインするユーザのためにログイン画面や chooser 画面を表示できます。
XDM を使用するには、 x11/xdm port をインストールしてください (最近の Xorg のバージョンでは、 デフォルトでインストールされません)。 XDM のデーモンプログラムは /usr/local/bin/xdm にあります。 このプログラムは root になればいつでも起動することができ、 ローカルマシン上のディスプレイの管理を始めます。 マシンをブートする際、いつも XDM を起動したい場合には、/etc/ttys にそのためのエントリを加えておくのが簡単です。 このファイルのフォーマットや使用方法についての詳細は Section 19.3.3.1 を参照してください。 デフォルトの /etc/ttys ファイルには仮想端末上で XDM デーモンを起動するための行:
ttyv8 "/usr/local/bin/xdm -nodaemon" xterm off secure
があります。 このエントリはデフォルトでは無効になっており、有効にするには 5 番目のカラムを off から on にし、Section 19.3.3.6 の指示に従って init(8) を再起動します。 最初のカラムはこのプログラムが管理する端末の名前で、この場合 ttyv8 になります。 つまり、XDM は 9 番目の仮想端末で起動されるということです。
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 スクリーンの見ためや使い勝手を変えるにはここから始めるのがいいでしょう。
XDM がコントロールするディスプレイに接続するためのプロトコルは X Display Manager Connection Protocol (XDMCP) と呼ばれます。 このファイルにはリモートのマシンからの XDMCP 接続をコントロールするためのルールセットが書かれます。 これは、xdm-config を変更してリモートからのコネクションを待ち受けるようにしない限り無視されます。 デフォルトでは、どのクライアントからの接続も拒否します。
これはディスプレイの chooser とログインスクリーン用の application-defaults ファイルです。 このファイルでログインプログラムの見た目を変更することができます。 フォーマットは X11 のドキュメントで記述されている app-defaults ファイルのものと同じです。
XDM でログインした後に実行されるデフォルトのセッションスクリプトです。 通常、各ユーザは ~/.xsession というカスタマイズしたセッションスクリプトを持っており、 こちらが優先されます。
これらは chooser やログインインタフェースが表示される前に自動的に実行されます。 それぞれのディスプレイに対して、Xsetup_ に続けてローカルのディスプレイ番号を付けた (たとえば Xsetup_0) 名前のついたスクリプトがあります。 典型的な使い方は xconsole のようなバックグラウンドで動かすプログラムを一つか二つ起動することです。
このファイルには XDM が起動しようとしている X サーバからの出力が書き出されます。 XDM が起動しようとしているディスプレイがなんらかの理由でハングした場合、 このファイルのエラーメッセージを見てください。 そういったメッセージは各ユーザの ~/.xsession-errors にもセッション毎に書き出されます。
あるディスプレイサーバに他のクライアントが接続することができるようにするために、 アクセスコントロールのルールを編集し、 コネクションリスナを有効にする必要があります。 デフォルトでは保守的な設定になっています。 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) を参照してください。
デフォルトの XDM に代わるものがいくつかあります。 一つは kdm (KDE に付属しています) はその一つであり、この章の後ろで解説します。 kdm ディスプレイマネージャは、 ログイン時にウィンドウマネージャを選ぶことができるのに加え、 見た目もかなり綺麗にしてくれます。
このセクションでは、FreeBSD 上の X で利用可能ないくつかのデスクトップ環境について解説します。 “デスクトップ環境” とは、 単なるウィンドウマネージャから KDE や GNOME といったような完全なデスクトップアプリケーションスイートまでカバーします。
GNOME はユーザフレンドリなデスクトップ環境で、 ユーザはコンピュータを簡単に使ったり設定したりできるようになります。 GNOME にはパネル (アプリケーションを起動したり状態を表示したりするもの)、 デスクトップ (データやアプリケーションが置かれる場所)、 標準的なデスクトップツールやアプリケーションのセット、 そしてアプリケーションが互いにうまくやり取りできるような仕組みが含まれています。 他の OS や環境に慣れている人でも GNOME の提供するグラフィック環境であれば心地よく感じるでしょう。 FreeBSD 上の GNOME に関するもっと詳しい情報は、 FreeBSD GNOME Project のウェブサイトで見ることができます。 ウェブサイトには、GNOME のインストール、設定、管理に関する非常に分かりやすい FAQ も用意されています。
package や Ports Collection を利用してソフトウェアを簡単にインストールできます。
GNOME package をネットワークからインストールするには、 以下のようにするだけです。
# pkg_add -r 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 デスクトップ環境が起動します。
Note: もし XDM のような古いディスプレイマネージャを使っているなら、 この方法ではうまくいきません。その代わり、実行可能な .xsession というファイルを作成し、 同じコマンドを起動するようにします。 そのためには、このファイルを編集してウィンドウマネージャを /usr/local/bin/gnome-session で置き換えます。
% echo "#!/bin/sh" > ~/.xsession % echo "/usr/local/bin/gnome-session" >> ~/.xsession % chmod +x ~/.xsession
もう一つの方法は、 ログイン時にウィンドウマネージャを選択できるようにディスプレイマネージャを設定することです。 KDE の詳細についてのセクションで KDE のディスプレイマネージャである kdm を使ってどのようにすればいいのかを解説しています。
KDE は最近の簡単に使えるデスクトップ環境です。 KDE によりユーザは以下のようなメリットを亨受します。
美しい現代風のデスクトップ
ネットワーク透過なデスクトップ
KDE デスクトップやそのアプリケーションを使う際に、 ヘルプへのアクセスを便利で統一されたものにする統合されたヘルプシステム
すべての KDE アプリケーションで統一された見ためや使い勝手
標準化されたメニュー、ツールバー、 キーバインディング、カラースキームなど
国際化: KDE は 40 を越える言語で利用可能
一元的で、首尾一貫した、ダイアログベースのデスクトップ設定
膨大な数の KDE アプリケーション
KDE には Konqueror と呼ばれるウェブブラウザも付属しており、これは UNIX システム上の他のウェブブラウザの強力な競争相手です。 KDE の詳細については KDE の ウェブサイト をご覧ください。 KDE に関する FreeBSD 特有の情報とリソースについては、 KDE on FreeBSD チーム のウェブサイトをご覧ください。
FreeBSD で利用できる KDE には 2 つのバージョンがあります。 バージョン 3 は、長い間広く使われ、安定しています。 バージョン 4 は、次世代のバージョンで、Ports Collection から利用できます。 これらを共存する形でインストールすることもできます。
GNOME や他のデスクトップ環境とまったく同じように、 package や Ports Collection から簡単にインストールできます。
KDE3 package をネットワーク越しにインストールするには次のようにします。
# pkg_add -r kde
KDE4 package をネットワーク越しにインストールするには次のようにします。
# pkg_add -r kde4
pkg_add(1) は自動的にアプリケーションの最新版を取得します。
KDE3 をソースから構築するには、次のように ports ツリーを使いましょう。
# cd /usr/ports/x11/kde3 # make install clean
KDE4 をソースから構築するには、次のように ports ツリーを使いましょう。
# cd /usr/ports/x11/kde4 # make install clean
KDE がインストールできたら X サーバに、デフォルトのウィンドウマネージャの代わりにこのアプリケーションを立ち上げるように教えます。 .xinitrc ファイルを次のように編集しましょう。
KDE3 では、以下のように入力してください。
% echo "exec startkde" > ~/.xinitrc
KDE4 では、以下のように入力してください。
% echo "exec /usr/local/kde4/bin/startkde" > ~/.xinitrc
さぁ、これで startx でいつ X Window System を立ち上げても KDE がデスクトップになります。
XDM のようなディスプレイマネージャを使っている場合、 設定は少し異なります。代わりに .xsession ファイルを編集しましょう。 kdm 用の説明はこの章の後のほうにあります。
さぁ、KDE のインストールができました。 ほとんどのことはヘルプページを見たりいろんなメニューをつつけばわかるでしょう。 Windows や Mac® のユーザにも簡単なはずです。
KDE の最も良いリファレンスはオンラインドキュメントです。 KDE には独自のウェブブラウザ Konqueror が付属していますし、 膨大な数の便利なアプリケーションや詳しいドキュメントも用意されています。 このセクションの残りではなんとなく使っているだけでは理解し難い技術的なところを解説します。
マルチユーザシステムの管理者であれば、 ユーザを迎えるにあたってグラフィカルなログイン画面が欲しいと思うかもしれません。 前の章で述べたように XDM はそのために使えますが、 KDE にはその代わりになる kdm が付いています。 見た目がより魅力的で、ログイン時のオプションもたくさんあります。 特に (メニューを使って) ログイン後に使うデスクトップ環境 (KDE や GNOME など) を簡単に選ぶことができます。
kdm を有効にするには、ファイルを編集する必要がありますが、 編集するファイルは、KDE のバージョンに依存します。
KDE3 では、 /etc/ttys の項目 ttyv8 を以下のように変更してください。
ttyv8 "/usr/local/bin/kdm -nodaemon" xterm on secure
KDE4 では、 /etc/rc.conf に以下の行を追加してください。
local_startup="${local_startup} /usr/local/kde4/etc/rc.d"
kdm4_enable="YES"
Xfce は GNOME で使われている GTK+ ツールキットをベースにしたデスクトップ環境ですが、 ずっと軽いので、 シンプルで効率的でありながら使いやすく設定が簡単なデスクトップ環境を求める人に向いています。 見ためは商用 UNIX システムが採用している CDE にかなり似ています。Xfce の機能をいくつか以下に挙げます。
シンプルで使いやすいデスクトップ
マウスのドラッグアンドドロップなどですべての設定が可能
CDE に似たメインパネルとメニューやアプレット、 アプリケーションランチャ
統合されたウィンドウマネージャ、ファイルマネージャ、 サウンドマネージャと GNOME 準拠のモジュールなど
(GTK+ なので) テーマをサポート
速くて軽くて効率的: 古いマシンや遅いマシン、 メモリの限られたマシンに向いています
Xfce に関する詳しい情報は Xfce のウェブサイト で得られます。
(この文章を書いている時点では) Xfce のバイナリパッケージが用意されています。 次のように実行するだけでインストールできます。
# pkg_add -r 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 のセクションにあるように、 ログイン時にディスプレイマネージャからデスクトップ環境を選択できるように設定してください。
第 1 部では基礎的なことがらを説明したので、 FreeBSD ハンドブックの第 2 部では FreeBSD でよく使われる機能について説明します。 各章の内容は以下のとおりです。
ブラウザ、生産的なツール、ドキュメントビューアといった、 人気があって便利なデスクトップアプリケーションの紹介
FreeBSD で利用可能なマルチメディアツールの紹介
システムで特別な機能を有効にするために、 カスタムカーネルを構築する手順の説明
デスクトップおよびネットワーク接続両方のプリンタの設定に関する、 印刷システムの詳細な説明
FreeBSD システムで Linux アプリケーションを実行する方法
これらの章では、読み飛ばしを推奨しているものもあります。 これについてはそれぞれの章の始めにある概要に書かれています。
FreeBSD では、Web ブラウザやワードプロセッサといった たくさんの種類のデスクトップアプリケーションを利用できます。 その多くは packages や Ports Collection を用いて導入できます。 新しいユーザの多くは、 デスクトップにこの種のアプリケーションがあることを期待しているでしょう。 この章では、人気の高いデスクトップアプリケーションを packages や Ports Collection から簡単にインストールする方法について説明します。
ports からプログラムをインストールする場合、 そのプログラムはソースからコンパイルされることに注意してください。 コンパイルする対象やマシンの性能にもよりますが、 この作業にはとても時間がかかることがあります。 ソースからコンパイルする時間がない場合には、 Ports Collection に収録されているほとんどのプログラムを、 あらかじめコンパイルされた packages からインストールできます。
FreeBSD における Linux バイナリ互換機能によって、Linux 用に開発された多くのアプリケーションを あなたのデスクトップでも利用できます。 どんな Linux アプリケーションをインストールする場合でも、 事前に Chapter 11 を読んでおくことをおすすめします。 Linux バイナリ互換機能を用いた port の多くは “linux-” からはじまる名前となっています。 whereis(1) などを使って特定の port を探す場合には、このことを思い出してください。 この章では、Linux アプリケーションをインストールする前に Linux バイナリ互換機能を有効にしてあることを前提とします。
この章では、以下の分野について説明します。
Web ブラウザ (Firefox, Opera, Konqueror, Chromium など)
生産的なアプリケーション (KOffice, AbiWord, GIMP, OpenOffice.org, LibreOffice など)
ドキュメントビューア (Acrobat Reader®, gv, Xpdf, GQview など)
財務管理ソフトウェア (GnuCash, Gnumeric, Abacus など)
この章を読む前に、以下のことを理解しておく必要があります。
サードパーティ製ソフトウェアのインストール方法 (Chapter 5)
Linux ソフトウェアのインストール方法 (Chapter 11)
マルチメディア環境を整える方法については Chapter 8 を、 電子メールを設定して使いたい場合には Chapter 21 を参照してください。
訳注: この文書は英語で書かれている原文をそのまま邦訳したものです。 必ずしも各アプリケーションで日本語が扱えるとは限らないことに注意してください。 日本語に対応したアプリケーションは、Ports Collection の japanese ディレクトリにあるかもしれません。
FreeBSD では Web ブラウザは事前にインストールされていません。 そのかわり、Ports Collection の www ディレクトリには数多くの Web ブラウザ が用意されており、 すぐにインストールできます。ソースからコンパイルする時間がない場合 (ソースからのコンパイルは大変な時間がかかることがあります)、 多くのプログラムを packages からインストールできます。
KDE と GNOME では、はじめから HTML ブラウザが用意されています。 これらのデスクトップ環境を設定するための情報については Section 6.7 を参照してください。
軽快な Web ブラウザを探している場合には、Ports Collection から www/dillo2, www/links, www/w3m を試してみてください。
この節では次のアプリケーションについて説明します。
| アプリケーション名 | 必要なリソース | port からのインストール | 実行に必要となる主な環境 |
|---|---|---|---|
| Firefox | 中 | 重 | Gtk+ |
| Opera | 少 | 軽 | FreeBSD 版と Linux 版を利用することができます。 Linux 版のバイナリを実行するには、 Linux バイナリ互換機能を有効にし、 linux-openmotif をインストールする必要があります。 |
| Konqueror | 中 | 重 | KDE ライブラリ |
| Chromium | 中 | 中 | Gtk+ |
Firefox は、 先進的で無料かつオープンソースの安定したブラウザです。 FreeBSD に完全に対応しています。 標準によく準拠した HTML 表示エンジン、タブブラウジング、ポップアップブロック、 拡張性、高い安全性などが特徴です。 Firefox は Mozilla のコードベースから派生したブラウザです。
package をインストールするには以下のように入力してください。
# pkg_add -r firefox
上の例では、Firefox の最新版がインストールされます。 Firefox 延長サポート版 (ESR: Extended Support Release) を利用したい場合には、 かわりに以下のように入力してください。
# pkg_add -r firefox-esr
ソースコードからコンパイルする方が好きなら、Ports Collection を使って以下のようにインストールすることもできます。
# cd /usr/ports/www/firefox # make install clean
Firefox ESR を利用する場合は、 上のコマンドの firefox を firefox-esr に置き換えてください。
Note: この節と次の 2 つの節では、Firefox があらかじめインストールされていることを前提としています。
以下のように入力して、Ports Collection から OpenJDK 6 をインストールしてください。
# cd /usr/ports/java/openjdk6 # make install clean
その後、java/icedtea-web 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/
FreeBSD 用の Adobe® Flash™ プラグインは提供されていません。 しかしながら、Linux バージョンのプラグインを実行するためのソフトウェアレイヤ (wrapper) が存在します。 この wrapper は、Adobe Acrobat® プラグインや RealPlayer® プラグインなどにも対応しています。
使用している FreeBSD のバージョンによって必要な作業は異なります。
FreeBSD 7.X
www/nspluginwrapper port をインストールします。 この port は、emulators/linux_base-fc4 という大きな port を必要とします。
次に、www/linux-flashplugin9 port をインストールします。 この port は、FreeBSD 7.X において正常に動作する Flash 9.X をインストールします。
FreeBSD 8.X 以降
www/nspluginwrapper port をインストールします。 この port は、emulators/linux_base-f10 という大きな port を必要とします。
次に、www/linux-f10-flashplugin11 port から Flash 11.X をインストールします。
このバージョンでは、 以下のようにシンボリックリンクを作成する必要があります。
# ln -s /usr/local/lib/npapi/linux-f10-flashplugin/libflashplayer.so \ /usr/local/lib/browser_plugins/
/usr/local/lib/browser_plugins ディレクトリが存在しない場合には、 手動で作成する必要があります。
使用している FreeBSD のバージョンに対して適切な Flash port をインストールした後は、 各ユーザごとに nspluginwrapper を使ってプラグインをインストールしてください。
% nspluginwrapper -v -a -i
Flash アニメーションを再生したいのであれば、 Linux® プロセスファイルシステム linprocfs(5) を /compat/linux/proc にマウントする必要があります。 以下のコマンドでマウントしてください。
# mount -t linprocfs linproc /compat/linux/proc
/etc/fstab に以下の行を追加すると、 起動時に自動的にマウントされます。
linproc /compat/linux/proc linprocfs rw 0 0
その後、ブラウザを起動し、 ロケーションバーに about:plugins と入力して Enter を押してください。 現在利用可能なプラグインの一覧が表示されます。
Swfdec は Flash アニメーションのデコードやレンダリングを行うライブラリです。 Swfdec-Mozilla は、Firefox ブラウザにおいて SWF ファイルを実行するためのプラグインで、Swfdec ライブラリを利用しています。 このライブラリは、現在でも盛んに開発されています。
もし、コンパイルできなかったり、コンパイルしたくない場合には、 ネットワークから package をダウンロードしてインストールしてください。
# pkg_add -r swfdec-plugin
package を入手できない場合は、Ports Collection からコンパイルしてインストールしてください。
# cd /usr/ports/www/swfdec-plugin # make install clean
その後、ブラウザを再起動してプラグインを有効にしてください。
Opera は、 機能満載で、標準規格に準拠した Web ブラウザです。 また、メールおよびニュースリーダや、IRC クライアント、 RSS/Atom フィードリーダ、その他いろいろなものが組み込まれています。 それにもかかわらず、Opera は比較的軽く、非常に速く動作します。 FreeBSD “ネイティブ”バージョンと、 Linux バイナリ互換機能によって動作するバージョンの 2 つがあります。
FreeBSD 版の Opera で Web を見るには、次の package をインストールします。
# pkg_add -r opera
一部の FTP サイトでは、すべての packages は用意されていません。 以下のように入力することで、Opera を Ports Collection からインストールできます。
# cd /usr/ports/www/opera # make install clean
Linux 版の Opera をインストールするには、上の例で opera を linux-opera に置き換えてください。
FreeBSD 用の Adobe Flash プラグインは提供されていませんが、 Linux 版のプラグインが存在します。 このプラグインをインストールするには、まず www/linux-f10-flashplugin11 port をインストールしてください。 その後、www/opera-linuxplugins port をインストールしてください。
# cd /usr/ports/www/linux-f10-flashplugin11 # make install clean # cd /usr/ports/www/opera-linuxplugins # make install clean
プラグインがインストールされているかどうかを次のようにして確認できます。 ブラウザを起動し、ロケーションバーに about:plugins と入力して Enter を押してください。 現在利用可能なプラグインの一覧が表示されます。
Java プラグインを追加するには、 Firefox での手順 にしたがってください。
Konqueror は KDE を構成するソフトウェアです。 ただし、KDE をインストールしなくても、 x11/kdebase3 をインストールすることにより、単体で動作させることができます。 Konqueror はブラウザであると同時に、 ファイルマネージャおよびマルチメディアビューアの役割も果たします。
Konqueror にはプラグイン一式が用意されており、 misc/konq-plugins を利用してインストールできます。
Konqueror は Flash にも対応しています。 Konqueror に Flash を導入するための “How To” ガイドが http://freebsd.kde.org/howtos/konqueror-flash.php にあります。
Chromium は、 オープンソースのブラウザのプロジェクトで、 安全かつ高速、安定したウェブブラウジングの体感を目指しています。 Chromium は、タブブラウジング、 ポップアップブロック、拡張機能などの機能を持っています。 Chromium は、Google Chrome ウェブブラウザがベースとしているオープンソースのプロジェクトです。
Chromium は、 以下のように入力することで package からインストールできます。
# pkg_add -r chromium
または、Ports Collection を用いて Chromium をソースからコンパイルしてインストールできます。
# cd /usr/ports/www/chromium # make install clean
Note: Chromium は、 /usr/local/bin/chrome としてインストールされます。 /usr/local/bin/chromium ではありません。
Note: この節では、Chromium がインストールされていることを前提としています。
以下のように入力して、Ports Collection から OpenJDK 6 をインストールしてください。
# cd /usr/ports/java/openjdk6 # make install clean
その後、Ports Collection から java/icedtea-web をインストールしてください。
# cd /usr/ports/java/icedtea-web # make install clean
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/
Note: この節では、Chromium がインストールされていることを前提としています。
Chromium と Adobe Flash の設定は、Firefox の手順 と同じです。 FreeBSD に Adobe Flash をインストールする方法の詳細については、 上記の章を参考にしてください。 Chromium は、他のブラウザのプラグインを用いることができるので、 追加の設定は必要ありません。
生産的なアプリケーションということになると、 新しいユーザはしばしば魅力的なオフィススイートや 親しみのあるワードプロセッサを求めるでしょう。 デフォルトアプリケーションではありませんが、 KDE のような デスクトップ環境 はオフィススイートを提供しています。 FreeBSD は、デスクトップ環境にかかわらず 必要なものはすべて提供しています。
この節では次のアプリケーションについて説明します。
| アプリケーション名 | 必要なリソース | port からのインストール | 実行に必要となる主な環境 |
|---|---|---|---|
| KOffice | 少 | 重 | KDE |
| AbiWord | 少 | 軽 | Gtk+ または GNOME |
| Gimp | 少 | 重 | Gtk+ |
| OpenOffice.org | 多 | 莫大 | JDK™, Mozilla |
| LibreOffice | やや多 | 莫大 | Gtk+ または KDE/ GNOME または JDK |
KDE コミュニティはデスクトップ環境とともに、 KDE 環境以外でも利用可能な オフィススイートを提供しています。 このオフィススイートには、他のオフィススイートと同様に、 4 つの標準的なアプリケーションが含まれています。 KWord はワードプロセッサ、 KSpread は表計算ソフトウェア、 KPresenter はプレゼンテーションソフトウェア、そして Kontour は図形描画ソフトウェアです。
最新の KOffice をインストールする場合には、事前に KDE を最新のバージョンにしておいてください。
KDE4 の KOffice を package からインストールするには次のようにします。
# pkg_add -r koffice-kde4
package を入手できない場合でも Ports Collection を利用できます。 たとえば、KDE4 の KOffice をインストールするには次のようにします。
# cd /usr/ports/editors/koffice-kde4 # make install clean
AbiWord は、Microsoft Word のような見た目や操作感を持つフリーのワードプロセッサです。 書類や手紙、報告書、メモなどを書くのに適しています。 非常に速く、多くの特徴があり、非常にユーザフレンドリです。
AbiWord は、 Microsoft .doc のような独自仕様を含む多くの形式のファイルを読み書きできます。
次のようにして AbiWord を package からインストールできます。
# pkg_add -r abiword
package を入手できない場合でも Ports Collection を利用できます。 おそらく Ports Collection の方が新しいでしょう。 次のようにしてインストールします。
# cd /usr/ports/editors/abiword # make install clean
画像を描画したり写真を修正することに関して、 GIMP はとても洗練された編集プログラムです。 単純にお絵かきソフトウェアとして使うこともできますし、 高品質な写真の加工ツールとしても使えます。 多くのプラグインに対応しており、 スクリプトインタフェースを特徴としています。 GIMP はさまざまな形式のファイルを読み書きでき、 スキャナやタブレットとのインタフェースにも対応しています。
次のコマンドにより package をインストールできます。
# pkg_add -r gimp
利用している FTP サイトにこの package がない場合でも、 Ports Collection からインストールできます。 Ports Collection の graphics ディレクトリには Gimp マニュアルもあります。 インストールする方法は次のとおりです。
# cd /usr/ports/graphics/gimp # make install clean # cd /usr/ports/graphics/gimp-manual-pdf # make install clean
Note: Ports Collection の graphics ディレクトリには GIMP の開発版である graphics/gimp-devel があります。 Gimp マニュアル の HTML バージョンは graphics/gimp-manual-html にあります。
OpenOffice.org は、完全なオフィススイートに必須のアプリケーション (ワードプロセッサ、表計算ソフトウェア、 プレゼンテーションソフトウェア、そして図形描画ソフトウェア) をひととおり揃えています。 ユーザインタフェースは他のオフィススイートと似ており、 広く用いられているさまざまな形式のファイルを読み書きできます。 インタフェース、スペルチェッカ、辞書は国際化されており、 多くの言語で利用できます。
OpenOffice.org のワードプロセッサは、ネイティブのファイル形式に XML を採用することで ポータビリティや柔軟性を高めています。 表計算ソフトウェアにはマクロ機能があり、 外部データベースと接続することもできます。 OpenOffice.org は、すでに Windows, Solaris™, Linux, FreeBSD, Mac OS X において安定してネイティブに動作しています。 OpenOffice.org についての詳しい情報は、 OpenOffice.org web サイト をご覧ください。また、 FreeBSD OpenOffice.org プロジェクトチーム の Web サイトから、FreeBSD 特有の情報や packages を直接取得することもできます。
OpenOffice.org をインストールするには、以下のように入力してください。
# pkg_add -r openoffice.org
Note: FreeBSD のリリース版を使用している場合には、この操作はうまくいくでしょう。 それ以外の版を使用している場合、FreeBSD OpenOffice.org Porting Team の web サイトから適切なパッケージをダウンロードして、 pkg_add(1) を使用してインストールしてください。 ここからはリリース版と開発版の両方がダウンロードできます。
package をインストールしたら、以下のコマンドを入力すると、 OpenOffice.org が起動します。
% openoffice.org
Note: 初回起動時に、いくつかの質問が表示され、 ホームディレクトリに .openoffice.org フォルダが作成されます。
OpenOffice.org の packages を利用できない場合には、port を利用する方法もありますが、 コンパイルには大きなディスクスペースと、 本当にかなり長い時間を必要とすることを心に留めておく必要があります。
# cd /usr/ports/editors/openoffice.org-3 # make install clean
Note: 地域化されたバージョンをビルドしたいのなら、 上記コマンドの代わりに以下のコマンドを実行して下さい。
# make LOCALIZED_LANG=your_language install cleanyour_language を正しい言語 ISO コードに置き換えてください。 サポートされている言語コードは、同じ port ディレクトリにある files/Makefile.localized ファイルに書かれています。
インストールが終わったら、以下のコマンドで OpenOffice.org を起動してください。
% openoffice.org
LibreOffice は、 The Document Foundation が開発しているフリーソフトウェアのオフィススィートです。 他のメジャーなオフィススィートと互換性があり、 さまざまなプラットフォームで利用できます。 完全なオフィス生産性スィートに必須のアプリケーション (ワードプロセッサ、表計算ソフトウェア、プレゼンテーションソフトウェア、 図形描画ソフトウェア、データベース管理ソフトウェア、数式エディタ) をすべて揃えている OpenOffice.org からの新しいフォークです。 インタフェース、スペルチェッカ、辞書は国際化されており、 多くの言語で利用できます。
LibreOffice のワードプロセッサは、 ネイティブのファイル形式に XML を採用することで ポータビリティや柔軟性を高めています。 表計算ソフトウェアにはマクロ機能があり、 外部データベースと接続することもできます。 LibreOffice は、すでに Windows, Solaris, Linux, FreeBSD, Mac OS X において安定してネイティブに動作しています。 LibreOffice についての詳しい情報は、 LibreOffice ウェブサイト をご覧ください。
package から LibreOffice をインストールするには、以下のように入力してください。
# pkg_add -r libreoffice
Note: FreeBSD のリリース版を使用している場合には、 この操作はうまくいくでしょう。
package をインストールしたら、以下のコマンドで LibreOffice を起動してください。
% libreoffice
Note: 初回起動時には、いくつかの質問が表示され、 ホームディレクトリに .libreoffice フォルダが作成されます。
LibreOffice.org の packages を利用できない場合には、port を利用する方法もありますが、 コンパイルには大きなディスクスペースと、 本当にかなり長い時間を必要とすることを心に留めておく必要があります。
# cd /usr/ports/editors/libreoffice # make install clean
Note: 地域化されたバージョンをビルドしたいのなら、 上記コマンドの代わりに以下のコマンドを実行して下さい。
# make LOCALIZED_LANG=your_language install cleanyour_language を正しい言語 ISO コードに置き換えてください。 サポートされている言語コードの一覧は、port の Makefile の pre-fetch ターゲットにあります。
インストールが終わったら、以下のコマンドで LibreOffice を起動してください。
% libreoffice
UNIX の出現以降、いくつかの新しい文書形式がよく使われるようになりました。 基本システムには、それらの文書が要求するビューアがないかもしれません。 この節ではそれらのドキュメントビューアのインストール方法について説明します。
この節では次のアプリケーションについて説明します。
| アプリケーション名 | 必要なリソース | port からのインストール | 実行に必要になる主な環境 |
|---|---|---|---|
| Acrobat Reader | 少 | 軽 | Linux バイナリ互換機能 |
| gv | 少 | 軽 | Xaw3d |
| Xpdf | 少 | 軽 | FreeType |
| GQview | 少 | 軽 | Gtk+ または GNOME |
今や多くの文書が “Portable Document Format” を意味する PDF ファイル形式で配布されています。 PDF ファイルを読むのに推奨されるビューアの一つが Acrobat Reader で、 Adobe から Linux 向けにリリースが提供されています。 FreeBSD は Linux バイナリを実行できるので、 FreeBSD でもこのアプリケーションを利用できます。
Ports Collection から Acrobat Reader 8 をインストールするには次のようにします。
# cd /usr/ports/print/acroread8 # make install clean
ライセンスの制限のため、パッケージを利用することはできません。
gv は PostScript と PDF のビューアです。これはもともと ghostview をベースとしていますが、 Xaw3d ライブラリによってより良い外観になっています。 動作が速くて、ユーザインタフェースもシンプルです。 gv は用紙の向きやサイズ、 拡大縮小、アンチエイリアスなどたくさんの機能を持っています。 ほとんどすべての操作はキーボードとマウスの両方で行なうことができます。
package から gv をインストールするには次のようにします。
# pkg_add -r gv
package が手に入らない場合には Ports Collection を使ってください。
# cd /usr/ports/print/gv # make install clean
FreeBSD 向けの軽い PDF ビューアを使いたいのなら、 Xpdf を試してみてください。 Xpdf は軽くて効率的なビューアです。 とても少ないリソースでも動作し、とても安定しています。 標準の X フォントを利用し、 Motif, その他の X ツールキットを必要としません。
Xpdf の package をインストールするには次のコマンドを入力します。
# pkg_add -r xpdf
package を入手できない場合や、 Ports Collection を利用したい場合には次のようにしてください。
# cd /usr/ports/graphics/xpdf # make install clean
インストールが完了したら Xpdf を起動できます。 メニューを表示するにはマウスの右ボタンを押してください。
GQview は画像管理ソフトウェアです。 クリックひとつで画像ファイルを開いたり、外部エディタを起動したり、 サムネイル画像を作成したり、そのほかにもいろいろできます。 また、スライドショーや基本的なファイル操作機能も備えています。 画像のコレクションを管理でき、重複したファイルも簡単に見つけられます。 GQview は全画面表示もでき、 国際化にも対応しています。
GQview の package をインストールするには次のコマンドを入力します。
# pkg_add -r gqview
package を入手できない場合や、 Ports Collection を利用したい場合には次のようにしてください。
# cd /usr/ports/graphics/gqview # make install clean
FreeBSD デスクトップで個人的な財務管理ができるように、 強力で簡単に使えるアプリケーションが用意されています。 それらのアプリケーションの中には Quicken® や Excel などの広く行き渡った形式のファイルと互換性があるものもあります。
この節では次のアプリケーションについて説明します。
| アプリケーション名 | 必要なリソース | port からのインストール | 実行に必要になる主な環境 |
|---|---|---|---|
| GnuCash | 少 | 重 | GNOME |
| Gnumeric | 少 | 重 | GNOME |
| Abacus | 少 | 軽 | Tcl/Tk |
| KMyMoney | 少 | 重 | KDE |
GnuCash は、 GNOME の一部で、 使いやすくかつ強力なアプリケーションとしてエンドユーザに提供されています。 GnuCash を使えば、 収入や支出、銀行口座、あるいは株を管理できます。 直観的なインタフェースを特徴としていますが、 非常に高度な機能も提供しています。
GnuCash は洗練された登録機能、 階層構造の勘定システム、多くのキーボードショートカット、 自動補完機能を提供しています。 単一のトランザクションをより小さな要素に分解できます。 GnuCash は、 Quicken の QIF ファイルの読み込みやマージができます。 また、国際的な日付および通貨形式も扱えます。
GnuCash をインストールするには次のようにします。
# pkg_add -r gnucash
package が手に入らないならば、Ports Collection を使ってください。
# cd /usr/ports/finance/gnucash # make install clean
Gnumeric は、 GNOME デスクトップ環境に含まれている表計算ソフトウェアです。 セルの書式に従ってユーザの入力を自動的に “推測”する便利な機能や、 多くのシーケンスに対する自動補完機能があります。 Excel, Lotus 1-2-3, Quattro Pro といった広く行き渡っている多くの形式のファイルを読みこめます。 Gnumeric は、グラフ描画ソフトウェアの math/guppi を介してグラフ機能を提供しています。 多くの関数を内蔵しており、 数値、通貨、日付、時間などのよく使うセルの書式が利用できます。
package から Gnumeric をインストールするには次のように入力します。
# pkg_add -r gnumeric
package が手に入らないならば、Ports Collection を使ってください。
# cd /usr/ports/math/gnumeric # make install clean
Abacus は、軽くて使いやすい表計算ソフトウェアです。 統計、財務、数学などの分野で 役にたつ多くの関数を内蔵しています。 Abacus は Excel 形式のファイルを読み書きでき、 PostScript 形式のファイルも作成できます。
package から Abacus をインストールするには次のようにします。
# pkg_add -r abacus
package が手に入らないならば、Ports Collection を使ってください。
# cd /usr/ports/deskutils/abacus # make install clean
KMyMoney は、 KDE の個人用財務管理ソフトウェアです。 商用の個人用財務管理ソフトウェアに見られる機能を取り入れ、 提供することを目指しています。 また、使いやすい複式簿記機能も特徴です。 KMyMoney は標準の Quicken Interchange Format (QIF) ファイルをインポート可能で、 投資履歴や複数通貨の取扱い、財政状況のレポートを提供します。 また、プラグインを用いることにより OFX のインポートもできます。
package から KMyMoney をインストールするには次のようにします。
# pkg_add -r kmymoney2
package が手に入らない場合は、Ports Collection を使ってください。
# cd /usr/ports/finance/kmymoney2 # make install clean
FreeBSD はその性能や安定性によって インターネットサービスプロバイダに人気がある一方で、 日常のデスクトップでの用途にも完全に対応しています。 数千のアプリケーションが packages や ports から利用できます。 これらによりあなたのニーズを完全に満たすデスクトップを構築できます。
以下は、この章で説明した デスクトップアプリケーションの一覧です。
| アプリケーション名 | package 名 | port 名 |
|---|---|---|
| Opera | opera | www/opera |
| Firefox | firefox | www/firefox |
| Chromium | chromium | www/chromium |
| KOffice | koffice-kde4 | editors/koffice-kde4 |
| AbiWord | abiword | editors/abiword |
| GIMP | gimp | graphics/gimp |
| OpenOffice.org | openoffice | editors/openoffice.org-3 |
| LibreOffice | libreoffice | editors/libreoffice |
| Acrobat Reader | acroread | print/acroread8 |
| gv | gv | print/gv |
| Xpdf | xpdf | graphics/xpdf |
| GQview | gqview | graphics/gqview |
| GnuCash | gnucash | finance/gnucash |
| Gnumeric | gnumeric | math/gnumeric |
| Abacus | abacus | deskutils/abacus |
| KMyMoney | kmymoney2 | finance/kmymoney2 |
FreeBSD は数多くの種類のサウンドカードに対応しており、 コンピュータで原音に忠実な出力を楽しむことができます。 これには録音機能と、MPEG Layer 3 Audio (MP3) や WAV, Ogg Vorbis などをはじめとした多くの形式の音楽の再生機能が含まれます。 加えて FreeBSD の Ports Collection には、録音した音楽を 編集したり、音響効果を加えたり、接続された MIDI 機器を制御するためのアプリケーションがあります。
多くの試みによって、FreeBSD ではビデオファイルおよび DVD の 再生ができるようになりました。さまざまなビデオメディアをエンコード、 変換、再生するアプリケーションの数は、 音声用のアプリケーションほど充実していません。 この文書を執筆している時点では、たとえば audio/sox のようなファイル形式を変換するためのすぐれたアプリケーションは Ports Collection にありません。しかしながら、 この分野のソフトウェアの状況は急速に変わりつつあります。
この章ではサウンドカードを設定するために必要な方法を説明します (ただし、高音質で再生するためには若干の微調整が必要かもしれません)。 ビデオカードのハードウェアに関する問題は、 X11 (Chapter 6) のインストールと設定においてすでに扱いましたので、 そちらをご覧ください。
この章を読むと、以下のことがわかります。
サウンドカードを認識させるためにシステムを設定する方法
サウンドカードがうまく動作しているかどうかテストする方法
サウンドの設定に関するトラブルシューティング
MP3 およびその他の形式の音声を再生、エンコードする方法
X サーバで どのようにビデオに対応しているか
ビデオを再生、エンコードするのに役に立つ ports
DVD の .mpg ファイルおよび .avi ファイルを再生する方法
CD および DVD の情報を抽出する方法
TV カードの設定方法
画像スキャナの設定方法
この章を読む前に、以下のことを理解しておく必要があります。
新しいカーネルを設定してインストールする方法 (Chapter 9)
Warning: オーディオ CD を mount(8) でマウントしようとすると、少なくともエラーになります。 最悪の場合、カーネルパニックが発生するでしょう。 これらのメディアは通常の ISO ファイルシステムとは異なり、 特別なエンコードが施されているからです。
設定をはじめる前に、あなたが持っているカードのモデル、 そのカードが使用しているチップ、そして PCI, ISA どちらのカードなのかを確認する必要があります。 FreeBSD は PCI および ISA の両方のカードに幅広く対応しています。 使用しているカードが対応しているかどうかは、 ハードウェアノート の対応オーディオデバイスの一覧を調べてください。 このハードウェアノートには、 カードに対してどのドライバを利用すればよいかについても言及されています。
サウンドデバイスを使うために、 適切なデバイスドライバを読み込まなければいけません。 これには二つの方法のどちらかでできるでしょう。 もっとも簡単な方法は kldload(8) を使ってサウンドカードのカーネルモジュールを単に読み込むことです。 次のコマンドで実現できます。
# kldload snd_emu10k1
または /boot/loader.conf ファイルにこのような適切な行を加えて実現することもできます。
snd_emu10k1_load="YES"
以上は Creative SoundBlaster® Live! サウンドカードの例です。 他に利用可能な読み込み可能なサウンドモジュールは /boot/defaults/loader.conf に記載されています。 どのドライバを利用すればいいか確かでなければ、 snd_driver モジュールを読み込んでみてください。
# kldload snd_driver
snd_driver モジュールは、 一般に使用されるカードに対応したドライバをまとめて一度に読み込むメタドライバです。 このドライバを使用すれば、速やかに正しいドライバを探し出すことができるでしょう。 /boot/loader.conf ファイルを使用して、 すべてのサウンドドライバを読み込むこともできます。
snd_driver メタドライバの読み込み後に、 どのドライバがサウンドカードに選択されたのかを知りたいのなら cat /dev/sndstat コマンドで /dev/sndstat ファイルを調べてください。
二つ目の方法は、 サウンドカードのドライバをカーネルへ静的に組み込むことです。 以下の節では、この方法でハードウェアを対応させる方法を説明します。 カーネル再構築の詳細は Chapter 9 を参照してください。
はじめに、オーディオフレームワークドライバ sound(4) をカーネルに追加します。 カーネルコンフィグレーションファイルに以下の行を追加してください。
device sound
次に、サウンドカードに対応したドライバを追加します。 それには、どのドライバがカードに対応しているかを知る必要があります。 使用しているカードに対する正しいドライバを決定するために、 ハードウェアノート の対応オーディオデバイスの一覧を調べてください。 たとえば、Creative SoundBlaster Live! サウンドカードは snd_emu10k1(4) ドライバが対応しています。 このカードを使用するためには、 カーネルコンフィグレーションファイルに以下の行を追加してください。
device snd_emu10k1
ドライバのマニュアルページを読んで、 追加すべき構文を調べてください。 対応しているすべてのサウンドドライバに関するカーネルコンフィグレーションの具体的な構文は、 /usr/src/sys/conf/NOTES にもあります。
すべての PnP 非対応の ISA カードに当てはまるように、 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
/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) マニュアルページをご覧ください。
カーネルを変更して再起動するか、必要となるモジュールを読み込むと、 システムのメッセージバッファ (dmesg(8)) にサウンドカードが認識されたことが示されます。 たとえば、次のようなメッセージが出力されます。
pcm0: <Intel ICH3 (82801CA)> port 0xdc80-0xdcbf,0xd800-0xd8ff irq 5 at device 31.5 on pci0 pcm0: [GIANT-LOCKED] pcm0: <Cirrus Logic CS4205 AC97 Codec>
サウンドカードの状態は、/dev/sndstat ファイルを使用して確認することができます。
# cat /dev/sndstat FreeBSD Audio Driver (newpcm) Installed devices: pcm0: <Intel ICH3 (82801CA)> at io 0xd800, 0xdc80 irq 5 bufsz 16384 kld snd_ich (1p/2r/0v channels duplex default)
この出力はシステムによって異なるでしょう。 pcm デバイスがなければ、 今までの手順を振り返ってみてください。 カーネルコンフィグレーションファイルをもう一度見直して、 正しいデバイスドライバを選択しているかどうか確認してください。 トラブルシューティングは Section 8.2.2.1 を参照してください。
すべてうまくいけば、サウンドカードが機能するでしょう。 CD-ROM または DVD-ROM ドライブのオーディオ出力端子がサウンドカードと適切に接続されていれば、 cdcontrol(1) を使ってドライブ内の CD を再生できます。
% cdcontrol -f /dev/acd0 play 1
audio/workman のように、よりよいインタフェースを提供するさまざまなアプリケーションがあります。 MP3 オーディオファイルを聴くために audio/mpg123 のようなアプリケーションをインストールしようと思うかもしれません。
手っ取り早くカードをテストするには、 /dev/dsp デバイスにデータを送ってみてください。 たとえば、以下のようにします。
% cat filename > /dev/dsp
ここで filename はどんなファイルでも構いません。 このコマンドラインを実行すると雑音が発生するはずです。 これにより、サウンドカードが実際に動作していることを確認できます。
Note: デバイスノード /dev/dsp* は、 必要とされる時に自動的に作成されます。 デバイスノードが使用されていない場合には存在せず、 ls(1) の出力に表示されません。
サウンドカードのミキサレベルは mixer(8) コマンドで変更することができます。 詳細は mixer(8) マニュアルページをご覧ください。
| エラー | 解決方法 |
|---|---|
| “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 を使って、 他のアプリケーションがデバイスを使用しているか調べてください。 注目すべきトラブルメーカは esound と KDE のサウンド機能です。 |
最近のグラフィックカードの中には、 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
特定のアプリケーションとのサウンドデバイスの共用に対応していない時、 esound または artsd のように 同時に再生することのできる音源を複数実装していることは、 多くの場合望ましいことです。
FreeBSD では、 仮想サウンドチャネル を使ってこれを実現でき、sysctl(8) で設定できます。 仮想チャネルはカーネル内でサウンドを合成することにより、 サウンドカードの再生を多重化することができます。
仮想チャネルの数を決めるのに三つの sysctl 変数を設定できます。 root ユーザで以下のようにします。
# sysctl dev.pcm.0.play.vchans=4 # sysctl dev.pcm.0.rec.vchans=4 # sysctl hw.snd.maxautovchans=4
上記の例では四つの仮想チャネルを設定しています。
これは通常利用する上で十分実用的な数です。 dev.pcm.0.play.vchans=4 と dev.pcm.0.rec.vchans=4 は、 pcm0
が再生や録音のために持っている仮想チャネルの数で、
一度デバイスが取り付けられると設定できます。 hw.snd.maxautovchans は、 kldload(8)
を用いて認識された新しいデバイスの仮想チャネル数です。 pcm
モジュールはハードウェアドライバとは独立して読み込むことができるので、
後でどんなにデバイスを認識しても hw.snd.maxautovchans は仮想チャネルを格納できます。
より詳細な情報については pcm(4)
のマニュアルページを参照してください。
Note: デバイスを使用しているときに 仮想チャンネルの数を変更することはできません。 まず、ミュージックプレーヤやサウンドデーモンといった デバイスを使用しているすべてのプログラムを終了してください。
/dev/dsp0 を必要とするプログラムが意識しなくても、 適切な pcm デバイスが自動的に設定されます。
各ミキサチャネルの初期値は pcm(4) ドライバのソースにハードコーディングされています。 起動時に記録されていた値をミキサに設定する さまざまなアプリケーションやデーモンがありますが、 あまりよい解決方法ではありません。 適切な値を /boot/device.hints ファイルに記述することにより、 ドライバレベルでミキサの初期値を設定することができます。 たとえば、以下のような行を追加します。
hint.pcm.0.vol="50"
この例では、pcm(4) が読み込まれたと同時に、 ボリュームチャネルの初期値を 50 に設定します。
MP3 (MPEG Layer 3 Audio) は CD に匹敵する音質でサウンドを再生できます。あなたの FreeBSD ワークステーションにこのプレイヤをインストールしない理由はないでしょう。
XMMS (X Multimedia System) は とても人気のある X11 ベースの MP3 プレイヤです。 XMMS のグラフィカルインタフェースは Nullsoft の Winamp とほとんど同一なので、Winamp のスキンを使うことができます。 XMMS はネイティブプラグインにも対応しています。
XMMS は multimedia/xmms の port または package からインストールできます。
XMMS のプレイリスト、グラフィックイコライザそしてその他のインタフェースは 直感的です。 Winamp を使いなれている人は 簡単に XMMS を使えるでしょう。
audio/mpg123 はコマンドライン上の代替となる MP3 プレイヤの port です。
mpg123 はサウンドデバイスと MP3 ファイルを指定して実行できます。 /dev/dsp1.0 デバイスを使用して MP3 ファイル Foobar-GreatestHits.mp3 を再生するのであれば、次のように実行してください。
# mpg123 -a /dev/dsp1.0 Foobar-GreatestHits.mp3 High Performance MPEG 1.0/2.0/2.5 Audio Player for Layer 1, 2 and 3. Version 0.59r (1999/Jun/15). Written and copyrights by Michael Hipp. Uses code from various people. See 'README' for more! THIS SOFTWARE COMES WITH ABSOLUTELY NO WARRANTY! USE AT YOUR OWN RISK! Playing MPEG stream from Foobar-GreatestHits.mp3 ... MPEG 1.0 layer III, 128 kbit/s, 44100 Hz joint-stereo
CD 全体または CD トラックを MP3 に変換する前に、CD 上のオーディオデータをハードディスク上に抽出する必要があります。 これには raw CDDA (CD Digital Audio) データを WAV ファイルにコピーします。
sysutils/cdrtools スイートの一部である cdda2wav ツールは CD からオーディオデータを抽出したり、 情報を関係づけるのに使われます。
CD をドライブにいれて次のコマンドを (rootで) 実行して、 CD 全体を (トラックごとに) 個々の WAV ファイルに抽出できます。
# cdda2wav -D 0,1,0 -B
cdda2wav は ATAPI (IDE) CDROM ドライブにも対応しています。 IDE ドライブから抽出するには、 SCSI ユニット番号をデバイス名に置き換えて指定します。 たとえば IDE ドライブから七番目のトラックを抽出するには、 次のようにします。
# cdda2wav -D /dev/acd0 -t 7
-D 0,1,0 は SCSI
デバイス 0,1,0 を表します。 これは cdrecord -scanbus の出力に一致します。
個々のトラックを抽出するには、 次のように -t
オプションを使用します。
# cdda2wav -D 0,1,0 -t 7
上記の例はオーディオ CDROM の七番目のトラックを抽出します。 範囲を指定して、 たとえば一番目から七番目のトラックまで抽出したい場合、 次のようにします。
# cdda2wav -D 0,1,0 -t 1+7
dd(1) ユーティリティも ATAPI ドライブ上のオーディオトラックを展開するのに使われます。 何ができるか詳しいことは オーディオ CD の複製について Section 16.5.5 を参照してください。
現在、一般に好まれている MP3 エンコーダは lame です。 lame は Ports Collection の audio/lame に収録されています。
次のコマンドを実行すると、抽出した WAV ファイル audio01.wav を使って audio01.mp3 に変換します。
# lame -h -b 128 \ --tt "曲名" \ --ta "アーティスト名" \ --tl "アルバム名" \ --ty "年" \ --tc "コメント" \ --tg "ジャンル" \ audio01.wav audio01.mp3
128 kbits が標準のビットレートのようです。 多くの人はさらに高音質の
160 kbits または 192 kbits を好むでしょう。
ビットレートが高くなるにつれて作成される MP3
ファイルは多くのディスク領域を消費しますが、より高音質となります。 -h オプションを指定すると “低速高品質”
モードとなります。 --t ではじまるオプションは ID3
タグを設定します。 このタグにはたいてい曲の情報が含まれており、 MP3
ファイルに格納されます。 lame
のマニュアルを参照すれば他のオプションが見つかるでしょう。
MP3 からオーディオ CD を作成するには、 MP3 形式を非圧縮 WAV 形式に変換しなければなりません。 XMMS と mpg123 の両方が MP3 から非圧縮ファイル形式への出力に対応しています。
XMMS でディスクへ書き出す方法は次の通りです。
XMMS を起動します。
右クリックで XMMS メニューを表示します。
Options から Preference を選択します。
Output Plugin を “Disk Writer Plugin” に変更します。
Configure を押します。
非圧縮ファイルを書き出すディレクトリを入力 (または選択) します。
普段通り XMMS へ MP3 ファイルを読み込みます。 音量は 100% で イコライザの設定はオフにします。
Play を押します-- XMMS は MP3 を再生しているかのように表示しますが、 音声はきこえません。 実際には MP3 をファイルに出力しています。
再び MP3 を聴けるように Output Plugin を以前のように元に戻すのを忘れないでください。
mpg123 で標準出力へ書き出す方法は次の通りです。
mpg123 -s audio01.mp3 > audio01.pcm を実行します。
XMMS は WAV 形式でファイルに書き出しますが、 mpg123 は MP3 を PCM オーディオデータに変換します。 両形式は cdrecord を使ってオーディオ CD を作成するのに利用することができます。 burncd(8) を使う場合は raw PCM データが必要です。 WAV ファイルを使用する場合、 それぞれのトラックの先頭に小さなノイズが入るのに気づくでしょう。 これは WAV ファイルのヘッダ情報です。 SoX (audio/sox の port または package からインストールできます) を使うと簡単に WAV ファイルのヘッダ情報を削除できます。
% sox -t wav -r 44100 -s -w -c 2 track.wav track.raw
FreeBSD での CD 作成の詳しい情報は Section 16.5 を参照してください。
ビデオ再生は今まさに成長中の新しいアプリケーション分野です。 辛抱強くしてください。 音声のようにすべてが順調にいくとは限りません。
設定をはじめる前に、あなたが持っているビデオカードのモデル、 そのカードが使用しているチップを確認する必要があります。 Xorg はさまざまなビデオカードに対応していますが、 ビデオ再生に申し分のない性能を発揮できるカードはわずかです。 あなたのビデオカードの利用している X サーバが対応している拡張機能のリストを得るには、 X11 を実行中に xdpyinfo(1) コマンドを実行してください。
さまざまなプレイヤやオプションを試すのに、 テストファイルとして小さな MPEG ファイルを用意しておくのはよい考えです。 いくつかの DVD プレイヤは DVD メディアを /dev/dvd として 初期設定しているか、ハードコーディングされているので、 次のように適切なデバイスにシンボリックリンクを張っておくと便利かもしれません。
# ln -sf /dev/acd0 /dev/dvd # ln -sf /dev/acd0 /dev/rdvd
devfs(5) の仕様により、 このように手動で作成されたリンクは再起動すると消えてしまいます。 システムの起動時にこれらのシンボリックリンクを自動的に作成するには、 /etc/devfs.conf に下記の設定を追加します。
link acd0 dvd link acd0 rdvd
加えて、特別な DVD-ROM 機能を必要とする DVD 解読は、 DVD デバイスへの書き込み権限が必要です。
共有メモリ X11 インタフェースを改善するために、 いくつかの sysctl(8) 変数の値を増やすことが推奨されています。
kern.ipc.shmmax=67108864 kern.ipc.shmall=32768
X11 においてビデオ表示性能を改善する方法はいくつかあると思われます。 ちゃんと動作するかどうかはハードウェアに大きく依存しています。 下記に説明したどの方法でも、 ハードウェアが変わると品質が変わるでしょう。 二つ目に、X11 でのビデオレンダリングは最近多くの注目を集めるトピックです。 そして Xorg のバージョンを追うごとに、著しく改良されているかもしれません。
よく知られたビデオインタフェースは次の通りです。
X11: 共有メモリを用いた通常の X11 出力
XVideo: X11 drawable 内でのビデオ再生に対応した X11 インタフェースの拡張機能
SDL: Simple Directmedia Layer
DGA: Direct Graphics Access
SVGAlib: 低レベルコンソールグラフィックレイヤ
Xorg には XVideo (または Xvideo, Xv, xv) と呼ばれる拡張機能があります。 これは特別なアクセラレーションによって drawable オブジェクト に直接ビデオを表示することができます。 この拡張機能によって、 低速なマシンでも、とてもすぐれた品質の再生が可能となります。
この拡張機能が動作しているかどうかを調べるには、 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 に対応していないのでしょう。
あなたのカードが XVideo に対応していないとしても、 このことはあなたのディスプレイでビデオを表示するのに、 計算上の要求を満たすことがより困難になるだけのことです。 しかしながら、あなたのビデオカードおよびプロセッサによっては、 それでも満足のいく性能が得られるかもしれません。 性能を向上させるには Section 8.4.3 をよく読むとよいでしょう。
Simple Directmedia Layer (SDL) は Microsoft Windows, BeOS そして UNIX の間で サウンドとグラフィックスを効果的に利用した クロスプラットホームアプリケーションを 開発することを目的としたレイヤです。 SDL レイヤはハードウェアに対する低レベルの抽象的概念を提供し、 時には X11 インタフェースを使用するよりも効果的なことがあります。
SDL は devel/sdl12 からインストールできます。
Direct Graphics Access は、 プログラムが X サーバを介せず 直接フレームバッファを変更することを可能にする X11 の拡張機能です。 共有メモリを使用するために 低レベルのメモリマッピングが実行できることを期待しているので、 この機能を使うプログラムは root 権限で実行されなければなりません。
DGA 機能拡張は dga(1) によってテストとベンチマークができます。 dga 実行中はキーボードを押せばいつでもディスプレイ色が変更されます。 中止するには q を押します。
この節では Ports Collection で利用可能な、 ビデオの再生に使用できるソフトウェアについて論じます。 ビデオ再生は大変活発なソフト開発分野で、 さまざまなアプリケーションの機能は、 ここでの説明から省かざるをえません。
はじめに、FreeBSD で実行できるビデオアプリケーションの多くは、 Linux アプリケーションとして開発されたということを知ることは重要です。 これらのアプリケーションの多くはまだベータ版の品質です。 FreeBSD でこれらのビデオアプリケーションを使用する際に、 以下のような問題が起こるかもしれません。
あるアプリケーションが、 他のアプリケーションの作成したファイルを再生できない。
あるアプリケーションが、 自身の作成したファイルを再生できない。
二つの異なるマシンで構築した同じアプリケーションが、 同じファイルを再生する挙動がそれぞれ異なる。
イメージサイズ変更のように見たところではありふれたフィルタが、 バグの多いサイズ変更ルーチンによってひどい人工物を作成する。
アプリケーションがよくコアダンプする。
文書が port と一緒にインストールされない (文書は web サイトにあったり、その port の work ディレクトリの中に 残っていることがある)。
これらのアプリケーションの多くはさらに “Linux 主義” を主張するかもしれません。 すなわち、アプリケーションの作者が仮定した、 Linux ディストリビューションでのみ実装されている ある標準ライブラリの使用方法や Linux カーネルの特定の機能に起因する問題が生じるかもしれません。 必ずしも port 保守担当者がこれらの問題を把握して作業しているとは限らず、 次のような問題が発生する可能性があります。
プロセッサの特性を検知するための /proc/cpuinfo の利用
本当はプログラムを終了させるはずであるのに、 停止させてしまうようなスレッドの誤用
一般的にアプリケーションとともに使用され、まだ FreeBSD の Ports Collection に収録されていないソフトウェアを必要とする
これまで、これらのアプリケーションの開発者は、 移植に必要だったその場しのぎの回避方法を最小化し 問題を解決するために port 保守担当者と協力しています。
MPlayer は最近開発され、 急激に成長しつつあるビデオプレイヤです。 MPlayer チームの目的は、 Linux や他の Unix 系 OS 上で高速性と柔軟性をもたらすことです。 このプロジェクトは、 チーム創設者が当時利用可能だったビデオプレイヤの ひどい再生能力にうんざりしたのをきっかけとして始まりました。 合理化された設計のために GUI が犠牲にされたと言う人もいます。 しかしながら、コマンドラインオプションおよびキーボード操作に 一度慣れれば非常によく動作します。
MPlayer は multimedia/mplayer にあります。 MPlayer は 構築の際にさまざまなハードウェアのチェックをするため、 あるシステムで作成されたバイナリは、 別のシステムで利用できないかもしれません。 したがって port から構築し、 バイナリパッケージを利用しないことが重要です。 さらに、Makefile や構築のはじめに説明されるように、 make のコマンドラインで多くのオプションを指定することができます。
# cd /usr/ports/multimedia/mplayer # make N - O - T - E Take a careful look into the Makefile in order to learn how to tune mplayer towards you personal preferences! For example, make WITH_GTK1 builds MPlayer with GTK1-GUI support. If you want to use the GUI, you can either install /usr/ports/multimedia/mplayer-skins or download official skin collections from http://www.mplayerhq.hu/homepage/dload.html
ほとんどのユーザにとっては port のデフォルトオプションで十分でしょう。 しかしながら、XviD コーデックが必要なら、 WITH_XVID オプションをコマンドラインで指定しなければなりません。 また、デフォルトの DVD デバイスを WITH_DVD_DEVICE オプションで定義することもできます (デフォルトでは /dev/acd0 が使用されます)。
この文書を執筆している時点では、 MPlayer の port は HTML 文書、そして mplayer と mencoder という二つの実行可能なバイナリを構築します。 mencoder はビデオを再エンコーディングするためのツールです。
MPlayer のための HTML 文書は非常に有益です。この章で不足した ビデオハードウェアおよびインタフェースに関する情報があれば、 MPlayer の文書は非常に詳細な補足になります。 UNIX のビデオ対応情報を探しているのなら、時間を割いて MPlayer の文書を読むべきなのは 明らかです。
MPlayer を使用する人はすべて、 各自のホームディレクトリ内に .mplayer サブディレクトリを用意しなければなりません。 この必要となるサブディレクトリを作成するために、 次のコマンドを入力します。
% cd /usr/ports/multimedia/mplayer % make install-user
mplayer のコマンドオプションはマニュアルに記載されています。 さらにより詳細な説明について知りたいなら、HTML 文書をご覧ください。 この節では、一般的な使用法についてほんの少し説明します。
さまざまなビデオインタフェースの一つを用いて 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.avi を dvd://N -dvd-device DEVICE に置き換えてください。
<N> には再生するタイトル番号を、 DEVICE は DVD-ROM
のデバイスノードを指定します。 たとえば、/dev/dvd
から 2 番目のタイトルを再生するには以下のようにします。
# mplayer -vo xv dvd://3 -dvd-device /dev/dvd
Note: デフォルトの DVD デバイスは、 MPlayer port の構築時に WITH_DVD_DEVICE で定義することができます。 デフォルトでは /dev/acd0 になります。 詳細はこの port の Makefile をご覧ください。
停止、休止、再生などをするにはキーの割り当てを調べてください。 mplayer -h を実行したり、 マニュアルを読めばわかります。
再生に関してさらに重要なオプションがあります。 全画面モードにする -fs -zoom オプションと、 性能を向上させる -framedrop オプションです。
mplayer に指定するコマンドラインが長くなりすぎないように、 .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 形式で、 この節で説明される他のアプリケーションで編集できます。
mencoder を使う前に、 HTML 文書を読んでオプションに慣れておくのはよい考えです。 マニュアルもありますが、HTML 文書なしではあまり有用ではありません。 品質向上、低ビットレート、形式変換をする方法が無数にあります。 これらの要素の調節具合で、性能が良かったり悪かったりするなど、 結果に違いが出るかもしれません。 ここにいくつか例を示します。 はじめは単純なファイルのコピーです。
% mencoder input.avi -oac copy -ovc copy -o output.avi
コマンドラインオプションを不適切に組合せると、 mplayer
でさえ再生できない出力ファイルを作成してしまいます。
したがって、単にファイルを抽出したいときには、 mplayer に
-dumpfile オプションをつけます。
input.avi を音声に MPEG3 エンコードを使用して MPEG4 コーデックに変換するには次のようにします (audio/lame が必要です)。
% mencoder input.avi -oac mp3lame -lameopts br=192 \ -ovc lavc -lavcopts vcodec=mpeg4:vhq -o output.avi
これは mplayer や xine で再生可能な出力ファイルを作成します。
DVD タイトルを直接再エンコードするためには、 上記のコマンドラインの input.avi を dvd://1 -dvd-device /dev/dvd に置き換えて、 root 権限で実行します。
はじめの作業結果に不満をもつと思われるので、
タイトルをファイルにダンプして、ファイルに対して作業することを おすすめします。
xine ビデオプレイヤは オールインワンのビデオソリューションであるだけでなく、 プラグインで拡張できる再利用可能な基本ライブラリと 実行可能なモジュールを提供する広範囲のプロジェクトです。 multimedia/xine の port と package の両方からインストールできます。
xine プレイヤは開発途上であり まだ非常に荒削りですが、通常の利用には十分安定しています。 実用上、xine を使用するには高速なビデオカードとともに高速な CPU があるか、 またはビデオカードが XVideo 拡張に対応していることが必要です。 GUI も利用できますがすこし扱いにくいです。
この文書を執筆している時点では、 xine と一緒に提供されている CSS エンコードされた DVD を再生する入力モジュールはありません。 このモジュールがあるサードパーティの構築物はいくつかありますが、 これらのどれも FreeBSD の Ports Collection には収録されていません。
xine は MPlayer と比べて 利用者にとって多くのことをしてくれますが、 と同時にきめの細かい制御ができません。なお、 xine ビデオプレイヤは、 XVideo インタフェース上で最良の性能を発揮します。
デフォルトでは、xine プレイヤは GUI 付きで起動するでしょう。 その後、メニューを使用して特定のファイルを開くことができます。
% xine
GUI なしでファイルを直ちに再生するには、 次のコマンドを実行します。
% xine -g -p mymovie.avi
transcode というソフトウェアは、 プレイヤではなくビデオおよびオーディオファイルを再エンコードするためのツール一式です。 transcode を使えば、 stdin/stdout インタフェースとともに コマンドラインツールを用いることによって、 ビデオファイルの統合や、壊れたファイルの修復ができます。
multimedia/transcode port では、数多くのビルドオプションを指定できますが、 以下のコマンドラインのように transcode を構築することをおすすめします。
# make WITH_OPTIMIZED_CFLAGS=yes WITH_LIBA52=yes WITH_LAME=yes WITH_OGG=yes \ WITH_MJPEG=yes -DWITH_XVID=yes
ほとんどのユーザにとっては、この設定で十分です。
transcode の能力を示す例として、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 を使って再生できます。 また、ファイルを CD-R メディアに書き込むことでビデオ CD も作成できます。 この場合には、multimedia/vcdimager および sysutils/cdrdao プログラムをインストールする必要があるでしょう。
transcode のマニュアルもありますが、 transcode wiki から、更なる情報や使用例を得てください。
FreeBSD 用のさまざまなビデオソフトウェアは急速に成長しています。 近い将来、ここにあげた問題の多くが解決している可能性は高いでしょう。 それまでの間、FreeBSD の A/V 能力を最大限発揮させたい人々は、 FAQ およびチュートリアルから得た知識を寄せ集めて、 わずかなアプリケーションを使用しなければならないでしょう。 この節は、読者に そのような付加的な情報へのポインタを提供するために存在します。
MPlayer の文書 は技術的に非常に有益です。 おそらく、UNIX ビデオの高水準な専門的知識を得たい人はすべて、 これらの文書を調べるべきです。 MPlayer メーリングリストを購読している人たちは、 文書を面倒がって読まない人には、それが誰であれ反感を持ちます。 そのため、彼らにバグ報告をするときには、マニュアルを読んでください。
xine HOWTO にはすべてのプレイヤに一般的な性能向上についての章が含まれています。
最後に、読者が試みるかもしれない 有望なアプリケーションをいくつかあげます。
Avifile. port が multimedia/avifile にあります。
Ogle. port が multimedia/ogle にあります。
multimedia/dvdauthor. DVD コンテンツをオーサリングするためのオープンソースパッケージです。
TV カードを使用することで、 TV 放送をコンピュータで見ることができます。 これらの多くは RCA コンポジットまたは S-video 入力端子を備えており、 FM ラジオチューナを装備したカードもあります。
FreeBSD は Brooktree Bt848/849/878/879 または Conexant CN-878/Fusion 878a をビデオキャプチャチップに採用した PCI TV カードに bktr(4) ドライバで対応しています。 対応しているチューナを搭載したボードかどうかを bktr(4) マニュアルページの一覧を参照して確認してください。
TV カードを使用するために bktr(4) ドライバを読み込む必要があります。 /boot/loader.conf ファイルに以下の行を追加してください。
bktr_load="YES"
あるいは、カーネルにドライバを静的に組み込むこともできます。 この場合、次の行をカーネルコンフィギュレーションファイルに追加します。
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) による MIB の設定や、 カーネルコンフィギュレーションファイルオプションで、 検知されたいくつかのパラメータを変更できます。 たとえば、チューナを Philips SECAM チューナとして検知されるようにするには、 カーネルコンフィギュレーションファイルに以下の行を追加します。
options OVERRIDE_TUNER=6
または、直接 sysctl(8) を使用して変更します。
# sysctl hw.bt848.tuner=6
利用可能なオプションの詳細については bktr(4) マニュアルページおよび /usr/src/sys/conf/NOTES ファイルを参照してください。
TV カードを使用するためには、以下のアプリケーションの一つをインストールする必要があります。
multimedia/fxtv はウィンドウ内に TV 映像を映します。 画像/音声/ビデオを取り込むこともできます。
multimedia/xawtv も TV アプリケーションです。 fxtv と同様の機能があります。
misc/alevt は文字放送 (ビデオテキスト/テレテキスト) のデコードと表示をします。
audio/xmradio は TV カードに搭載された FM ラジオチューナを使用するためのアプリケーションです。
audio/wmtune はラジオチューナのためのお手軽なデスクトップアプリケーションです。
他にも多くのアプリケーションが FreeBSD Ports Collection に収録されています。
TV カードに関する問題が起きたときには、 bktr(4) ドライバが本当にビデオキャプチャチップおよびチューナに 対応しているか、オプションが正しく設定されているかどうかをまず確認してください。 TV カードに関するサポートやさまざまな質問に関しては、 freebsd-multimedia メーリングリストに参加したり、 過去のアーカイブを検索してみてください。
MythTV はオープンソースの PVR ソフトウェアプロジェクトです。
このアプリケーションは、たくさんのアプリケーションやライブラリに依存するため、 Linux の世界ではインストールが難しいアプリケーションとして認識されています。 FreeBSD ports システムは、インストールのほとんどのプロセスを自動化しますが、 ある部分は手動で設定しなければなりません。 この章は、MythTV の設定を助けるためのガイドです。
MythTV は、エンコーダやチューナなどのビデオ入力デバイスへのアクセスに V4L を用いるように設計されています。 現時点では、multimedia/webcamd によりサポートされている USB DVB-S/C/T カードにおいて最もよく動作します。 なぜならば、webcamd は、V4L ユーザランドアプリケーションを提供するためです。 webcamd に対応している DVB カードは、MythTV で動作するはずです。 動作することが知られているカードの一覧が ここ にあります。 Hauppauge カードもまた、 multimedia/pvr250 および multimedia/pvrxxx package として利用可能ですが、 標準的ではないドライバのインタフェースを提供しており、 0.23 より後の MythTV では動作しません。
HTPC は、DVB ドライバのすべての一覧を提供しています。
MythTV は、柔軟で、モジュール化されており、 異なるコンピュータでフロントエンドとバックエンドを利用できます。
フロントエンドとしては x11/xorg の X サーバとともに multimedia/mythtv-frontend が必要です。 フロントエンドコンピュータは、XvMC に対応しているビデオカードを持ち、オプションとして、LIRC 互換のリモートコントローラを持っていることが理想的です。
バックエンドでは、MySQL™ データベースとともに multimedia/mythtv が必要です。 オプションで、録音のためにはチューナ、ストレージが必要です。 MySQL package は、multimedia/mythtv のインストール時に、 依存として自動的にインストールされます。
以下のステップで、MythTV をインストールしてください。 まず FreeBSD Ports Collection を用いて、 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 # /usr/local/etc/rc.d/mythbackend start
FreeBSD では、画像スキャナに対するアクセスは SANE (Scanner Access Now Easy) API によって実現されており、 FreeBSD Ports Collection でも提供されています。 SANE はスキャナのハードウェアにアクセスするために FreeBSD デバイスドライバを使用します。
FreeBSD は SCSI 接続および USB 接続のスキャナのどちらにも対応しています。 設定を始める前に、 SANE がスキャナに対応しているか確認してください。 SANE には スキャナについての情報とその状況がまとめられている 対応デバイスの一覧 があります。FreeBSD 8.X より前のシステムでは、 FreeBSD の uscanner(4) マニュアルページにも対応 USB スキャナの一覧が記載されています。
前述のように、FreeBSD はスキャナのインタフェースとして SCSI と USB の両方に対応しています。 スキャナのインタフェースによって、必要となるドライバが異なります。
GENERIC カーネルにはデフォルトで USB スキャナに対応するためのデバイスドライバが搭載されています。 カスタムカーネルを使用する際には、 以下の行がカーネルコンフィグレーションファイルにあることを 確認してください。
device usb device uhci device ohci device ehci
FreeBSD 8.X より前のシステムでは以下の行も必要となります。
device uscanner
このバージョンの FreeBSD では、uscanner(4) デバイスドライバが USB スキャナへのアクセスを提供しています。 FreeBSD 8.0 以降では、libusb(3) ライブラリが直接提供します。
適切なドライバを組み込んだカーネルで再起動後、 USB スキャナをシステムに接続します。 すると、メッセージバッファ (dmesg(8)) にスキャナが認識されたことを示すメッセージが出力されます。
ugen0.2: <EPSON> at usbus0
FreeBSD 7.X システムでは、 以下のようなメッセージが出力されます。
uscanner0: EPSON EPSON Scanner, rev 1.10/3.02, addr 2
これらの例では、使用している FreeBSD のバージョンに応じて、 スキャナが /dev/ugen0.2 または、/dev/uscanner0 デバイスノードを使用していることがわかります。 この例では、EPSON Perfection® 1650 USB スキャナが使われています。
スキャナに付属しているインタフェースが SCSI であれば、 重要なのはどの SCSI ボードを使用すればよいか把握することです。 使用する SCSI チップセットによって、 カーネルコンフィグレーションファイルを調整する必要があります。 GENERIC カーネルは 一般に使用される SCSI コントローラのほとんどに対応しています。 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(8) コマンドを使用して 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)
SCSI デバイスについての詳細は、scsi(4) および camcontrol(8) のマニュアルページをご覧ください。
SANE システムは、 二つの部分、すなわちバックエンド (graphics/sane-backends) とフロントエンド (graphics/sane-frontends) に分割されています。 バックエンドはスキャナそのものに対するアクセスを提供します。 SANE の 対応デバイスの一覧 には、どのバックエンドが画像スキャナに対応しているかが記載されています。 デバイスを使用するためには、正しいバックエンドを決定するのは必須です。 また、フロントエンドはグラフィカルなスキャニングインタフェース (xscanimage) を提供します。
はじめに、 graphics/sane-backends の port または package をインストールしましょう。 次に、sane-find-scanner コマンドを使用して、 SANE システムで使用するバックエンドを検出します。
# sane-find-scanner -q found SCSI scanner "AGFA SNAPSCAN 600 1.10" at /dev/pass3
この出力から、 スキャナインタフェースの種類と システムに接続されているスキャナが使用するデバイスノードがわかります。 ベンダ名や製品のモデル名は表示されないかも知れませんが、 重要ではありません。
Note: USB スキャナではファームウェアを読み込む必要がある場合があります。 これはバックエンドのマニュアルページで説明されています。 sane-find-scanner(1) と sane(7) のマニュアルページも読んでください。
スキャナがフロントエンドで認識されるか調べてみましょう。 デフォルトでは、SANE のバックエンドには
scanimage(1)
と呼ばれるコマンドラインツールが付属します。 このコマンドを使用すると、
デバイスの一覧を表示したり画像を取得することができます。 -L オプションを使うと、
スキャナデバイスの一覧が出力されます。
# scanimage -L device `snapscan:/dev/pass3' is a AGFA SNAPSCAN 600 flatbed scanner
また、Section 8.7.2.1 で使用した USB スキャナの例では、以下の出力が得られるでしょう。
# scanimage -L device 'epson2:libusb:/dev/usb:/dev/ugen0.2' is a Epson GT-8200 flatbed scanner
これは、FreeBSD 8.X システムでの出力例であり、 'epson2:libusb:/dev/usb:/dev/ugen0.2' から、 使用しているスキャナのバックエンド名 (epson2) とデバイスノード (/dev/ugen0.2) の情報を得ることができます。
Note: 何も出力が得られなかったり、 スキャナが見つからなかったというメッセージが表示されたら、 scanimage(1) はスキャナを認識できなかったのでしょう。 このような場合は、バックエンドの設定ファイルを編集し、 使用するスキャナデバイスを定義する必要があります。 /usr/local/etc/sane.d/ ディレクトリには、 バックエンドが使用するすべての設定ファイルがあります。 このデバイスの認識による問題は、 特定の USB スキャナで発生するものです。
たとえば、 Section 8.7.2.1 で使用した USB スキャナは、 FreeBSD 8.X において正常に認識され動作します。 しかし、それより前のバージョンの (uscanner(4) ドライバを利用する) FreeBSD では、 sane-find-scanner コマンドを実行すると、以下のような情報が得られます。
# sane-find-scanner -q found USB scanner (UNKNOWN vendor and product) at device /dev/uscanner0スキャナは正しく検出されました。 USB インタフェースを使用し、 /dev/uscanner0 デバイスノードに接続されていることがわかります。 次に、スキャナが正しく認識されているかどうか確認してみましょう。
# 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/epson2.conf ファイルを編集する必要があります。 このスキャナのモデルは EPSON Perfection 1650 なので、 epson2 バックエンドを使用すればいいことがわかります。 バックエンドの設定ファイルに書かれているコメントを必ず読んでください。 設定ファイルを変更するのは非常に簡単です。 使用しているスキャナには不適切なインタフェースをすべてコメントアウトし (今回の場合は、USB インタフェースを使用するので scsi という語で始まる行をすべてコメントアウトします)、 ファイルの末尾に使用するインタフェースとデバイスノードを追加します。 この例では、以下の行を追加しました。
usb /dev/uscanner0詳細と使用すべき構文は、 バックエンドのマニュアルページはもちろんのこと、 バックエンドの設定ファイルに書かれているコメントも読んでください。 以上の設定で、スキャナが認識されたかどうかを確認できます。
# scanimage -L device `epson:/dev/uscanner0' is a Epson GT-8200 flatbed scannerUSB スキャナが認識されました。 ブランドやモデルがスキャナに一致しなかったとしても、それほど重要ではありません。 着目すべきは `epson:/dev/uscanner0' という部分で、 バックエンド名とデバイスノードが正しく認識されていることがわかります。
scanimage -L コマンドを実行してスキャナが認識されたことがわかれば、設定は終了です。 デバイスはスキャンする準備ができました。
scanimage(1) コマンドを使用すると コマンドラインから画像を取得することができます。その一方で、 GUI を使用して画像を取得できると一層良いでしょう。 SANE は、簡素ですが役に立つグラフィカルなインタフェース xscanimage (graphics/sane-frontends) を提供しています。
Xsane (graphics/xsane) はもう一つのグラフィカルなスキャニングフロントエンドで、 人気があります。 Xsane には、さまざまなスキャニングモード (写真、FAX など)、 色補正、バッチスキャンなど先進的な機能があります。 これらのアプリケーションの両方とも GIMP のプラグインとして使用することができます。
前述の操作には、 すべて root 権限が必要となります。 しかしながら、他のユーザがスキャナに アクセスできるようにすることも可能です。 そのためには、スキャナが使用するデバイスノードへの 読み込み権限と書き込み権限をユーザに与えます。 一例として、USB スキャナが、/dev/ugen0.2 デバイスノードを使用しているものとします。 このデバイスノードは、 /dev/usb/0.2.0 へのシンボリックリンクです (/dev ディレクトリを調べると、 簡単に確認できます)。 シンボリックリンクとデバイスノードは、 それぞれ wheel および operator グループが所有しています。 ユーザ joe を これらのグループに加えると、彼はスキャナを使用できるようになります。 もちろん、ユーザをどんなグループ (特にグループ wheel) に追加する時はいつでも、 セキュリティ上の理由から二度は検討を行うべきです。 良い方法は、USB デバイスを利用するためにグループを作成し、 このグループに対してスキャナデバイスを利用できるようにすることです。
例として、usb という名前のグループを使用します。 まず最初に、pw(8) コマンドを使ってグループを作成します。
# pw groupadd usb
その後、シンボリックリンク /dev/ugen0.2 および、/dev/usb/0.2.0 デバイスノードに対して、 usb グループが利用できるように適切な許可属性 (0660 または 0664) を設定する必要があります。 デフォルトでは、これらのファイルの所有者 (root) のみが書き込み可能です。 /etc/devfs.rules に次の行を追加してください。
[system=5] add path ugen0.2 mode 0660 group usb add path usb/0.2.0 mode 0666 group usb
FreeBSD 7.X のユーザは、デバイスノード /dev/uscanner0 に対し、 以下のような行の追加が必要となるでしょう。
[system=5] add path uscanner0 mode 660 group usb
次に、/etc/rc.conf に以下の行を追加して システムを再起動します。
devfs_system_ruleset="system"
/etc/devfs.rules で設定した内容についての詳細は、devfs(8) のマニュアルページをご覧ください。
最後に、スキャナを利用するユーザを usb グループに追加します。
# pw groupmod usb -m joe
詳細については、pw(8) のマニュアルページをご覧ください。
カーネルは FreeBSD オペレーティングシステムの中核をなすものです。 カーネルは、メモリ管理、セキュリティ制御の強制、ネットワーク、 ディスクアクセスなどを担っています。 FreeBSD はどんどん動的に構成することができるようになっていますが、 まだ、時にはカーネルコンフィグレーションをやり直して、 再構築する必要があります。
この章では、以下のことを扱っています。
なぜカスタムカーネルの構築が必要になることがあるのか。
コンフィグレーションファイルの書き方や、 既存のコンフィグレーションファイルの置き換え。
カーネルコンフィグレーションファイルから新しいカーネルを構築する方法。
新しいカーネルのインストール方法。
うまく行かないときの問題解決法。
この章で表示されているコマンドは、 root 権限で実行する必要があります。
伝統的に、FreeBSD のカーネルは “モノリシック” (monolithic) カーネルと呼ばれるものでした。 これは、カーネルが単一の巨大なプログラムで、 扱えるデバイスは固定されていて、 カーネルの振る舞いを変えたければ新しいカーネルを構築して、 コンピュータを再起動して新しいカーネルを動かさなれければならなかったということです。
今日では FreeBSD は、 カーネルのかなりの機能が必要に応じて動的にカーネルに組み込んだり外したりできるモジュールにおかれているモデルへと、 急速に移行しています。こうしてカーネルは (ノート PC の PCMCIA カードのように) 突如使えるようになったハードウェアに対応したり、 カーネルが作成された時点では必要なかった新たな機能を取り入れられるようになります。 このようなカーネルは、モジュラ (modular) カーネルと呼ばれます。
しかしながら、いまだにいくらかは静的にカーネルを構成する必要があります。 ある場合においては、機能がカーネルとあまりに密接に結びついているため、 動的に組み込むことができません。ほかには、 単に誰もその機能に対する組み込み可能なカーネルモジュールを書く時間をとっていないだけということもあります。
システムに合わせたカーネルの構築は、高度な知識を持つ BSD ユーザが避けて通ることのできない最も重要な通過儀礼の 1 つです。 この作業は、多くの時間を必要としますが、あなたの FreeBSD システムに多くの利益をもたらします。 広範囲のハードウェアをサポートしなければならない GENERIC カーネルとは異なり、 システムに合わせたカーネルは あなたの PC のハードウェアのみをサポートします。これは、 次にあげるような利益をもたらします。
素早く起動します。 カーネルはあなたのシステム上にあるハードウェアしか検出を行わないので、 あなたのシステムの起動にかかる時間を劇的に短くできます。
メモリの消費量を減らすことができます。 システムに合わせたカーネルは、 使用しない機能やデバイスドライバを含まないので、 大抵 GENERIC カーネルより少ないメモリしか消費しません。 カーネルコードは常に物理メモリ上に存在し、 アプリケーションはその容量分のメモリを使用できないので、 これは重要なことです。 したがって、メモリが少ないシステムでは、 カーネルの再構築は大変重要です。
追加のハードウェアをサポートします。 システムに合わせたカーネルは、サウンドカードなど GENERIC カーネルに存在しないデバイスのサポートを追加することができます。
カーネルコンフィグレーションの冒険を始める前に、 コンピュータのハードウェア一覧を作成すると良いでしょう。 もし、FreeBSD 以外のオペレーティングシステムがすでにインストールされているのであれば、 現在インストールされているオペレーティングシステムの設定を調べることで、 簡単に一覧を作成できます。 たとえば、Microsoft の デバイスマネージャ は、インストールされているデバイスに関する重要な情報を持っています。 デバイスマネージャ は、 コントロールパネルから開くことが出来ます。
Note: Microsoft Windows のバージョンによっては、 デバイスマネージャ にアクセス可能なウィンドウを表示する システム アイコンがあります。
もし他のオペレーティングシステムがコンピュータにインストールされていないのであれば、 管理者はこれらの情報を手動で収集する必要があります。 情報を集める方法のひとつが、dmesg(8) ユーティリティと man(1) コマンドを用いる方法です。 FreeBSD のほとんどのデバイスドライバにはマニュアルページが用意され、 対応しているハードウェアの一覧を提供しています。 また、起動時には検出されたハードウェアの一覧が表示されます。 たとえば、以下の行は、psm ドライバがマウスを検出したことを示しています。
psm0: <PS/2 Mouse> irq 12 on atkbdc0 psm0: [GIANT-LOCKED] psm0: [ITHREAD] psm0: model Generic PS/2 mouse, device ID 0
このドライバがカスタムカーネルコンフィグレーションファイルに含まれている、 もしくは loader.conf(5) によって読み込まれる必要があります。
場合によっては、dmesg が起動時の検出結果ではなく、 システムメッセージだけを表示することがあります。 このような場合には、/var/run/dmesg.boot ファイルで出力を確認できます。
ハードウェアを見つけるためのもうひとつの方法は、 より冗長な出力を行う pciconf(8) ユーティリティを用いる方法です。 たとえば、以下のようになります。
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
この出力は pciconf -lv
を用いて得られ、 ath
ドライバがワイヤレスイーサネットデバイスにあることを示しています。 man ath を実行すると ath(4)
のマニュアルページが表示されます。
man(1) を -k フラグで実行すると、
有用な情報を得ることができます。上のケースでは以下のようになります。
# man -k Atheros
ある特定の単語を含むマニュアルページの一覧が表示されます。
ath(4) - Atheros IEEE 802.11 wireless network driver ath_hal(4) - Atheros Hardware Access Layer (HAL)
ハードウェアの一覧を作っておくと、 カスタムカーネルを構築する過程であわてずにすむでしょう。
カスタムカーネルを構築する前に、再構築する理由を考えてください。 ある特定のハードウェアに対応することが目的であれば、 そのハードウェアに対応するためのモジュールがすでに用意されている場合には再構築の必要はありません。
カーネルモジュールは、 /boot/kernel ディレクトリにあります。kldload(8) によって、 すでに実行中のカーネルに動的に読み込まれているモジュールもあるかもしれません。 すべてというわけではありませんが、ほとんどのカーネルドライバには、 モジュールやマニュアルページが用意されています。 たとえば、前の章で例として出た ath ワイヤレスイーサネットドライバのマニュアルページには以下の記述があります。
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.conf ファイルに if_ath_load="YES" 行を追加すると、 起動時にモジュールが読み込まれるようになります。
ただし、特定のサブシステムであったり、 とても重要なドライバのような場合には、 対応するモジュールが存在しないこともあります。 たとえば、Fast File System (FFS) は、 カーネルでのみ設定可能なオプションです。 ネットワークサポート (INET) も同様です。 残念ながら、ドライバが必要かどうかを知るには、 モジュールそのものを調べる方法しかありません。
Warning: カーネルを壊すことは簡単で、 デバイスやオプションのサポートをビルドから削除するだけで壊れてしまうことがあります。 たとえば、ata(4) ドライバをカーネルコンフィグレーションファイルから除くと、 ATA ディスクドライバを用いるシステムは、 loader.conf に記述がないかぎり起動しません。 もし、確信がないのであれば、モジュールを確認し、 カーネルにサポートを残したままにしてください。
Note: カーネルを構築するには、FreeBSD のすべてのソースファイルが必要です。
まず、 カーネル再構築に必要なディレクトリをざっと見てみましょう。 ここではディレクトリはすべて /usr/src/sys 以下の相対位置で示します。 また、パス名 /sys からもアクセス可能です。 ここには、カーネルの各部分を構成するサブディレクトリがいくつもあります。 しかし、私たちの目的で最も重要なのは arch/conf です。 ここで、あなたのシステムに合わせてカーネルコンフィグレーションを編集します。 それから compileディレクトリ、 ここはカーネルが作られる場所です。 arch は、i386, amd64, ia64, powerpc, sparc64 または pc98 (日本で普及している PC のための開発ブランチ) のいずれかを表します。 各アーキテクチャのディレクトリ内部にあるファイルはすべてそのアーキテクチャでのみ使用されます。 残りのコードは、アーキテクチャに依存しない、 FreeBSD が移植されるすべてのプラットフォームで共有されるコードです。 サポートされているデバイス、ファイルシステム、オプションが、 それぞれのサブディレクトリに分かれている、 という論理的な構成に注意してください。
この章で示されるコマンドの例は、 i386 アーキテクチャを使用していることを仮定しています。 他のアーキテクチャを使用しているのであれば、 使用しているアーキテクチャに適したパス名に変更してください。
Note: もし、あなたのシステムに /usr/src/ ディレクトリが存在しない (または、空である) のであれば、 カーネルのソースがインストールされていません。 すべてのソースツリーをインストールするもっとも簡単な方法は、 root 権限で sysinstall を実行し、次のようにすることです。 Configure を選んでから Distribution を選択し、その後 src を選択し、最後に All を選んでください。 もし、/sys/ が存在していないようであれば、以下のように /usr/src/sys/ へのシンボリックリンクも作成してください。
# ln -s /usr/src/sys /sys
つぎに、 arch/conf に移動して、 GENERIC コンフィグレーションファイルをカーネルに与えたい名前にコピーしてください。 たとえば次のようにします。
# cd /usr/src/sys/i386/conf # cp GENERIC MYKERNEL
慣習として、この名前はすべて大文字でつづられます。もし、 いくつかの異なるハードウェアの FreeBSD マシンを扱うなら、 この名前にホスト名を含めるとよいでしょう。ここでは、例として MYKERNEL と呼ぶことにします。
Tip: カーネルコンフィグレーションファイルを、直に /usr/src の下に置くのはよい考えとはいえません。 なにか問題が起きたときに、 /usr/src を消してやり直したいと思うかもしれません。 その後で、あなたがカスタマイズしたカーネルコンフィグレーションファイルを消してしまったことに気づくのに時間はかからないでしょう。 また、GENERIC ファイルを直接編集しないでください。 なぜなら、編集後に ソースツリーをアップデート すると、ファイルが上書きされ、変更点が失われてしまいます。
カーネルコンフィグレーションファイルは他の場所において、 i386 ディレクトリにシンボリックリンクを張る方がよいでしょう。
たとえば、次のようにします。
# cd /usr/src/sys/i386/conf # mkdir /root/kernels # cp GENERIC /root/kernels/MYKERNEL # ln -s /root/kernels/MYKERNEL
では、MYKERNEL をあなたの好きなエディタで編集してください。もし、 システムをインストールしたばかりならば、利用できるエディタは vi だけかもしれません。ここでは使い方の説明はしませんが、 参考図書 にあるような多くの本で詳しく説明 されていますので、 そちらを参照してください。FreeBSD にはより簡単なエディタとして ee があります。初心者の方であればこちらをエディタに選ぶとよいでしょう。 まずファイルの最初の方のコメント行を編集し、 あなたのコンフィグレーションに合せて変更した点などを記述して GENERIC と区別がつくようにしておきましょう。
もし SunOS™ や他の BSD オペレーティングシステムでカーネルの再構築をしたことがあれば、 このファイルはとても親しみやすいでしょう。しかし、DOS のようなその他の オペレーティングシステムしか知らない人から見れば、 GENERIC コンフィグレーションファイルはとてもなじみにくいものかもしれません。 そのような場合は、 コンフィグレーションファイル の節をゆっくりと注意深く読んでください。
Note: FreeBSD プロジェクトの最新のソースファイルと、あなたのソースツリーを同期させている 場合、アップデートを行う際には、必ず /usr/src/UPDATING ファイルをチェックしてください。 このファイルには、 アップデートされたソースコードに関する重要な問題や特別に注意すべき点がすべて書かれています。 /usr/src/UPDATING は常にあなたの FreeBSD のソースと同期しているので、 ハンドブックの記述よりも内容が新しいことがあります。
さあ、カーネルのソースコードをコンパイルしましょう。
カーネルの構築
Note: カーネルを構築するには、FreeBSD のすべてのソースファイルが必要です。
/usr/src ディレクトリに移動します。
# cd /usr/src
カーネルをコンパイルします。
# make buildkernel KERNCONF=MYKERNEL
新しいカーネルをインストールします。
# make installkernel KERNCONF=MYKERNEL
Tip: デフォルトでは、カスタムカーネルを構築すると すべて のカーネルモジュールが同時に構築されます。 カーネルのアップデートをより早く行いたい、または、 カスタムモジュールのみを構築したいといった場合には、 カーネルの構築を開始する前に、以下のように /etc/make.conf を編集してください。
MODULES_OVERRIDE = linux acpi sound/sound sound/driver/ds1 ntfsこの変数は、すべてのモジュールのかわりに構築するモジュールを指定します。
WITHOUT_MODULES = linux acpi sound ntfsこの変数は、構築を行わないトップレベルのモジュールを指定します。 カーネルの構築のプロセスに関する、他の有益な変数については、 make.conf(5) を参照してください。
新しいカーネルは /boot/kernel ディレクトリに /boot/kernel/kernel という名前でコピーされ、 今までのカーネルは /boot/kernel.old/kernel という名前へ変更されます。 では、新しいカーネルを使うために、システムをシャットダウンして再起動してください。 うまく行かない場合は、この章の終りの 問題が起きた場合には を参照してください。有用な情報があるかもしれません。この章の新しいカーネルが 起動しない 場合のリカバリの方法を注意深く読んでおいてください。
Note: ブートローダ (loader(8)) や設定などのブートプロセスに関係する他のファイルは、 /boot に置かれます。 サードパーティ製やカスタムモジュールを /boot/kernel に置くこともできますが、 コンパイルしたカーネルとモジュールを同期しておく必要があります。 コンパイルしたカーネルとモジュールが対応しない場合には、 システムが不安定になったり、正常に動作しない可能性があります。
コンフィグレーションファイルの一般的なフォーマットはとてもシンプルです。 各行は 1 つのキーワードと 1 つ以上の引数を含んでいます。 見やすくするために、ほとんどのキーワードは引数を 1 つしか書いてありません。 # に続くものはすべてコメントとして扱われ、 無視されます。ここでは、それぞれのキーワードについて GENERIC に出てくる順番で説明します。 アーキテクチャ依存のおびただしい数のオプション一覧については、 GENERIC と同じディレクトリにある NOTES ファイルをご覧ください。 アーキテクチャに依存しないオプションについては、 /usr/src/sys/conf/NOTES ファイルをご覧ください。
コンフィグレーションファイルでは include ディレクティブを利用できます。 コンフィグレーションファイルに他のファイルを取り込むことができるので、 すでに存在するファイルに対する小さな変更を簡単に維持できます。 たとえば、オプションやドライバを少しだけ追加した GENERIC カーネルを必要としているのであれば、 include を用いて、以下のように GENERIC からの差分だけの記述でコンフィグレーションファイルを作成できます。
include GENERIC ident MYKERNEL options IPFIREWALL options DUMMYNET options IPFIREWALL_DEFAULT_TO_ACCEPT options IPDIVERT
多くの管理者は、 コンフィグレーションファイルを個別に管理していたこれまでの手法にくらべ、 このモデルが大変有益だと考えるでしょう。 ローカルのコンフィグレーションファイルには、GENERIC とローカルとの差分のみが記述されており、 GENERIC がアップグレードされて新しい機能が追加されると、 (nooptions や nodevice によって外されない限り) ローカルのカーネルにも反映されます。 この章のここから先は、典型的なコンフィグレーションファイルの中身と、 さまざまなオプションやデバイスの役割について説明します。
Note: 利用可能なすべてのオプションを含むファイルを (通常はテスト目的で) 構築するには、 以下のコマンドを root 権限で実行してください。
# cd /usr/src/sys/i386/conf && make LINT
以下は必要に応じてコメントを追加した GENERIC カーネルのコンフィグレーションファイルの例です。 この設定例は /usr/src/sys/i386/conf/GENERIC に極めて近いものになっているはずです。
machine i386
マシンのアーキテクチャです。これは amd64, i386, ia64, pc98, powerpc または sparc64 のいずれかでなければなりません。
cpu I486_CPU cpu I586_CPU cpu I686_CPU
上記のオプションは、あなたのシステムの CPU タイプを指定します。 複数の行を書いても構いません (例: I586_CPU とすべきか I686_CPU とすべきかはっきり分からない場合)。 しかしながら、カスタムカーネルを作る場合、あなたの持つ CPU だけを指定するのがベストです。 もしあなたの CPU がどのタイプか分からない場合、 /var/run/dmesg.boot ファイルを確認して起動メッセージを調べるとよいでしょう。
ident GENERIC
ここにはカーネルの識別名を書きます。 (前記の例の MYKERNEL のように) あなたがカーネルに付けたい名前に書き換えて下さい。 ident に書いた名前はカーネルを起動する時に表示されるので、 (実験的なカーネルを構築する場合など) 普段使っているカーネルと区別したいときは、 新しいカーネルに違う名前を付けると良いでしょう。
#To statically compile in device wiring instead of /boot/device.hints #hints "GENERIC.hints" # Default places to look for devices.
デバイスドライバのオプションは device.hints(5) を用いて設定されます。 loader(8) は、起動時にデフォルトで /boot/device.hints を確認します。 hints オプションを用いると、 カーネルにこれらのヒント情報を静的に加えてコンパイルできます。 その場合には、/boot に device.hints ファイルを作成する必要はありません。
makeoptions DEBUG=-g # Build kernel with gdb(1) debug symbols
通常の FreeBSD のビルド過程では、-g
オプションとともにカーネルを構築すると、デバッグ情報を含みます。 このオプションは gcc(1)
がデバッグ情報を生成するようにします。
options SCHED_ULE # ULE scheduler
FreeBSD のデフォルトのスケジューラです。 このオプションはこのままにしてください。
options PREEMPTION # Enable kernel thread preemption
カーネル空間において、優先度の高いスレッドがプリエンプションできるようにします。 このオプションを使うことでインタラクティブになり、 待ち状態になるよりすぐに実行状態になるようスレッドの割り込みを許可します。
options INET # InterNETworking
ネットワークのサポート。 ネットワークに接続する予定がなくてもこのオプションは残して下さい。 殆どのプログラムは少なくともループバックネットワーク (あなたの PC の中でのネットワーク接続) を必要としますので、 基本的にこの行は必須です。
options INET6 # IPv6 communications protocols
このオプションは IPv6 通信プロトコルを利用可能にします。
options FFS # Berkeley Fast Filesystem
これは標準のハードドライブファイルシステムです。 ハードディスクから起動する場合は残して下さい。
options SOFTUPDATES # Enable FFS Soft Updates support
このオプションは、カーネル内の Soft Updates 機能を有効にし、 ディスクへの高速な書き込みを支援します。 カーネルがこの機能を提供していても、 特定のディスクに対してはこのオプションを有効にする必要があります。 mount(8) の出力を見て、使用しているディスクで Soft Updates が有効になっているかどうかを確認してください。 soft-updates オプションが見当たらなければ、 (現在使用しているファイルシステムには) tunefs(8) や、 (新規のファイルシステムには) newfs(8) コマンドで有効にする必要があります。
options UFS_ACL # Support for access control lists
このオプションは、カーネルのアクセス制御リストのサポートを有効にします。 この機能は拡張属性および UFS2 が有効になっていることに依存し、 Section 4.3 で機能の説明が行われています。 ACL はデフォルトで有効にされています。 もし、これまでにファイルシステムで有効にしていたのであれば、 カーネルの中で無効にすべきではありません。 なぜなら、無効にするとアクセス制御リストが削除され、 ファイルの保護が予想できない方法で行われるためです。
options UFS_DIRHASH # Improve performance on big directories
このオプションは、メモリを多少余分に食うものの、 大きなディレクトリに対するディスク操作を高速化する機能を有効にします。 大規模なサーバや対話的なワークステーションではこのオプションを残しておいて、 ファイアウォールのように、 メモリが貴重でディスクアクセス速度がそれほど重要でない小規模なシステムでは削除するとよいでしょう。
options MD_ROOT # MD is a potential root device
このオプションは、メモリディスクによる root デバイスのサポートを有効にします。
options NFSCLIENT # Network Filesystem Client options NFSSERVER # Network Filesystem Server options NFS_ROOT # NFS usable as /, requires NFSCLIENT
ネットワークファイルシステム。 UNIX ファイルサーバから TCP/IP を介してパーティションをマウントするのでない限り、 これらの行をコメントアウトして下さい。
options MSDOSFS # MSDOS Filesystem
MS-DOS ファイルシステム。 起動時に DOS でフォーマットされたハードドライブをマウントするのでない限り、 この行は安全にコメントアウトできます。 この機能は最初に DOS パーティションをマウントする時に自動的にロードされます。 又、優秀な emulators/mtools を使ってもマウント、 アンマウントすることなしに DOS フロッピーにアクセスすることができます。 (MSDOSFS は必要としません)
options CD9660 # ISO 9660 Filesystem
CD-ROM 用の ISO 9660 ファイルシステム。 もしあなたが CD-ROM ドライブを持っていないか、 時々データ CD をマウントするだけならこの行をコメントアウトしても大丈夫です (データ CD を最初にマウントする時、自動的にロードされます)。 音楽 CD はこのファイルシステムを必要としません。
options PROCFS # Process filesystem (requires PSEUDOFS)
プロセスファイルシステム。 これは /proc にマウントされる、 ファイルシステムの “ふりをする” もので、 ps(1) のようなプログラムに、 どんなプロセスが走っているかに関するより多くの情報を提供させる事ができます。 ほとんどのデバッグおよびモニタリングツールが PROCFS なしで起動するので、 ほとんどの環境では PROCFS を必要としません。 新しくインストールした場合には、 デフォルトではプロセスファイルシステムをマウントしません。
options PSEUDOFS # Pseudo-filesystem framework
カーネルで PROCFS を使う場合には、 PSEUDOFS のサポートが必要です。
options GEOM_PART_GPT # GUID Partition Tables.
このオプションは、 ひとつのディスクに数多くのパーティションを作成可能にします。
options COMPAT_43 # Compatible with BSD 4.3 [KEEP THIS!]
4.3BSD との互換機能です。 有効なままにして下さい。 この行をコメントアウトするとおかしな動きをするプログラムがあります。
options COMPAT_FREEBSD4 # Compatible with FreeBSD4
このオプションは、 古いバージョンの FreeBSD でコンパイルされた古いシステムコールインターフェースを用いるアプリケーションを利用する場合に必要とされます。 古いアプリケーションを実行するすべての i386 システムで、このオプションの利用を推奨します。 5.X でのみサポートされている ia64 や SPARC64 といったプラットフォームでは、 このオプションは必要ありません。
options COMPAT_FREEBSD5 # Compatible with FreeBSD5
このオプションは、 FreeBSD 5.X でコンパイルされた FreeBSD 5.X のシステムコールインタフェースを用いるアプリケーションを利用する場合に必要とされます。
options COMPAT_FREEBSD6 # Compatible with FreeBSD6
このオプションは、 FreeBSD 6.X でコンパイルされた FreeBSD 6.X のシステムコールインタフェースを用いるアプリケーションを利用する場合に必要とされます。
options COMPAT_FREEBSD7 # Compatible with FreeBSD7
このオプションは、FreeBSD 8 以降において FreeBSD 7.X でコンパイルされた FreeBSD 7.X のシステムコールインタフェースを用いるアプリケーションを利用する場合に必要とされます。
options SCSI_DELAY=5000 # Delay (in ms) before probing SCSI
この行は、カーネルがそれぞれの SCSI 機器を検出する前に 5 秒間待つようにします。 あなたが IDE ドライブしか持たないなら無視して結構です。 そうでないなら、起動時間を短くするために、この数字を小さく変更できます。 勿論、そうした場合に FreeBSD が SCSI 機器を認識しなくなってしまったら、もう一度数字を増やしてください。
options KTRACE # ktrace(1) support
この行はデバッグに役立つカーネルプロセスのトレースを可能にします。
options SYSVSHM # SYSV-style shared memory
このオプションは System V 共有メモリを提供します。 この機能の最も一般的な使用方法は X における XSHM 拡張です。 多くのグラフィックス重視のプログラムではこの機能を自動的に描画のスピードアップに利用します。 X を使っているなら、これを含めておいた方がいいでしょう。
options SYSVMSG # SYSV-style message queues
System V のメッセージのサポート。 このオプションはカーネルサイズを数百バイト大きくするだけです。
options SYSVSEM # SYSV-style semaphores
System V セマフォのサポート。 あまり使われませんが、カーネルサイズは数百バイト大きくなるだけです。
Note: ipcs(1) コマンドを
-pオプションで実行すると、これらの System V 機能を使っているプロセスのリストを表示します。
options _KPOSIX_PRIORITY_SCHEDULING # POSIX P1003_1B real-time extensions
リアルタイム拡張が 1993 POSIX® に追加されました。 Ports Collection の内のいくつかのアプリケーション (たとえば StarOffice) はこれを使っています。
options KBD_INSTALL_CDEV # install a CDEV entry in /dev
キーボードデバイスノードを /dev に作成するにはこのオプションが必要です。
options ADAPTIVE_GIANT # Giant mutex is adaptive.
Giant は、カーネル資源の広い範囲をプロテクトする mutex 排他メカニズム (sleep mutex) の名前です。 このメカニズムは、今日では受け入れがたいほどにパフォーマンスのボトルネックとなっており、 個々の資源をプロテクトするロック機構に移行しています。 ADAPTIVE_GIANT オプションは、 スピンしている適応型 mutex のセットに Giant を追加します。 すなわち、スレッドが Giant mutex をロックしようとする際、 他の CPU 上のスレッドによってすでにロックされていた場合には、 最初のスレッドは実行状態のままロックが解除されるのを待ちます。 通常、スレッドは実行の機会をスリープ状態で待ちます。 もし、よくわからないのであれば、そのままにしておいてください。
Note: FreeBSD 8.0-RELEASE 以降では (NO_ADAPTIVE_MUTEXES オプションでコンパイルを行って非適合型にするのでなければ) すべての mutex はデフォルトで適合型になりました。 現在の Giant は適合型なので、ADAPTIVE_GIANT オプションはカーネルコンフィグレーションから外されました。
device apic # I/O APIC
apic デバイスは、I/O APIC の割り込みを有効にします。 ユニプロセッサおよび SMP カーネル両方で使用できますが、 SMP カーネルでは必須です。 マルチプロセッサに対応するには options SMP を追加してください。
Note: apic デバイスは i386 アーキテクチャにのみ存在します。 他のアーキテクチャでは、この行を含まないでください。
device eisa
あなたが EISA マザーボードを持っている場合、 この行を含めて下さい。これは EISA バスに接続されているすべてのデバイスの自動検出と設定を可能にします。
device pci
あなたが PCI マザーボードを持っている場合、この行を含めて下さい。 これは PCI カードの自動検出と PCI から ISA バスへのゲートウエイを可能にします。
# Floppy drives device fdc
これはフロッピーディスクコントローラです。
# ATA and ATAPI devices device ata
このドライバはすべての ATA と ATAPI デバイスをサポートします。 最近のマシンでは device ata 行を 1 行書くだけですべての PCI ATA/ATAPI デバイスを検出することができます。
device atadisk # ATA disk drives
ATA ディスクドライブには device ata と共にこの行が必要です。
device ataraid # ATA RAID drives
ATA RAID ドライブには device ata と共にこのデバイスが必要です。
device atapicd # ATAPI CDROM drives
ATAPI CDROM ドライブには device ata と共にこの行が必要です。
device atapifd # ATAPI floppy drives
ATAPI フロッピードライブには device ata と共にこの行が必要です。
device atapist # ATAPI tape drives
ATAPI テープドライブには device ata と共にこの行が必要です。
options ATA_STATIC_ID # Static device numbering
この行はコントローラ番号を静的に割り当てます。 このオプションがない場合、デバイス番号は動的に割り当てられます。
# SCSI Controllers
device ahb # EISA AHA1742 family
device ahc # AHA2940 and onboard AIC7xxx devices
options AHC_REG_PRETTY_PRINT # Print register bitfields in debug
# output. Adds ~128k to driver.
device ahd # AHA39320/29320 and onboard AIC79xx devices
options AHD_REG_PRETTY_PRINT # Print register bitfields in debug
# output. Adds ~215k to driver.
device amd # AMD 53C974 (Teckram DC-390(T))
device isp # Qlogic family
#device ispfw # Firmware for QLogic HBAs- normally a module
device mpt # LSI-Logic MPT-Fusion
#device ncr # NCR/Symbios Logic
device sym # NCR/Symbios Logic (newer chipsets + those of `ncr')
device trm # Tekram DC395U/UW/F DC315U adapters
device adv # Advansys SCSI adapters
device adw # Advansys wide SCSI adapters
device aha # Adaptec 154x SCSI adapters
device aic # Adaptec 15[012]x SCSI adapters, AIC-6[23]60.
device bt # Buslogic/Mylex MultiMaster SCSI adapters
device ncv # NCR 53C500
device nsp # Workbit Ninja SCSI-3
device stg # TMC 18C30/18C50
SCSI コントローラです。 あなたのシステムにないデバイスはコメントアウトして下さい。 もし IDE しかないシステムならこれらすべてを削除できます。 *_REG_PRETTY_PRINT 行は、 対応するドライバに対するデバッグオプションです。
# SCSI peripherals device scbus # SCSI bus (required for SCSI) device ch # SCSI media changers device da # Direct Access (disks) device sa # Sequential Access (tape etc) device cd # CD device pass # Passthrough device (direct SCSI access) device ses # SCSI Environmental Services (and SAF-TE)
SCSI 周辺機器です。 あなたが持っていないデバイスはコメントアウトして下さい。 もし IDE しか持っていないならこれらを完全に削除できます。
Note: USB umass(4) ドライバ、およびその他のいくつかのドライバは、 本当の SCSI デバイスではないにもかかわらず、 SCSI サブシステムを利用します。 そのため、そのようなドライバがカーネルコンフィグレーションに含まれている場合には、 SCSI サポートを削除しないでください。
# RAID controllers interfaced to the SCSI subsystem device amr # AMI MegaRAID device arcmsr # Areca SATA II RAID device asr # DPT SmartRAID V, VI and Adaptec SCSI RAID device ciss # Compaq Smart RAID 5* device dpt # DPT Smartcache III, IV - See NOTES for options device hptmv # Highpoint RocketRAID 182x device hptrr # Highpoint RocketRAID 17xx, 22xx, 23xx, 25xx device iir # Intel Integrated RAID device ips # IBM (Adaptec) ServeRAID device mly # Mylex AcceleRAID/eXtremeRAID device twa # 3ware 9000 series PATA/SATA RAID # RAID controllers device aac # Adaptec FSA RAID device aacp # SCSI passthrough for aac (requires CAM) device ida # Compaq Smart RAID device mfi # LSI MegaRAID SAS device mlx # Mylex DAC960 family device pst # Promise Supertrak SX6000 device twe # 3ware ATA RAID
サポートされる RAID コントローラです。 これらのどれも持っていない場合、 すべてをコメントアウト又は削除することができます。
# atkbdc0 controls both the keyboard and the PS/2 mouse device atkbdc # AT keyboard controller
キーボードコントローラ (atkbdc) は AT キーボード及び PS/2 スタイルポインティングデバイスの I/O サービスを提供します。 キーボードドライバ (atkbd) と PS/2 ポインティングデバイスドライバ (psm) はこのコントローラを必要とします。
device atkbd # AT keyboard
atkbd ドライバ。 atkbdc コントローラと協調して動作し、 AT キーボードコントローラに接続された AT 84 キーボードや AT 拡張キーボードへのアクセスを提供します。
device psm # PS/2 mouse
あなたのマウスが PS/2 マウスポートに接続するタイプならこのデバイスを使って下さい。
device kbdmux # keyboard multiplexer
標準のキーボードマルチプレクサのサポート。 2 つ以上のキーボードを用いる予定がないのであれば、 この行を削除してもかまいません。
device vga # VGA video card driver
ビデオカードドライバです。
device splash # Splash screen and screen saver support
起動時にスプラッシュスクリーンが表示されます! スクリーンセーバもこのデバイスを必要とします。
# syscons is the default console driver, resembling an SCO console device sc
sc は SCO に類似したデフォルトのコンソールドライバです。 殆どのフルスクリーンのプログラムは termcap のようなターミナルデータベールライブラリにアクセスするので、 sc を使うか VT220 互換のコンソールドライバである vt を使うかは重要ではありません。 ログイン時、このコンソールでフルスクリーンプログラムが動かないときは TERM 変数を scoansi に設定して下さい。
# Enable this for the pcvt (VT220 compatible) console driver #device vt #options XSERVER # support for X server on a vt console #options FAT_CURSOR # start with block cursor
これは VT220 互換のコンソールドライバで、 VT100/102 と後方互換性があります。 sc とハード的に互換性がないラップトップでも問題なく動きます。 ここでもログイン時に TERM 変数を vt100 又は vt220 と設定して下さい。 このドライバは、sc デバイス用の termcap や terminfo のエントリが無い、ネットワーク上の多くの異なったマシンに接続する際にも有用です -- vt100 は仮想的にすべてのプラットフォームで有効であるべきです。
device agp
システムが AGP カードを搭載している場合には、 この行を含めてください。 AGP および (ボードが機能を持っている場合には) AGP GART に対応します。
# Power management support (see NOTES for more options) #device apm
先進的な電源管理機能 (APM) のサポート。 GENERIC ではデフォルトで無効にされていますが、 ラップトップでは役に立つでしょう。
# Add suspend/resume support for the i8254. device pmtimer
APM および ACPI といった電源管理イベントのためのタイマデバイスドライバです。
# PCCARD (PCMCIA) support # PCMCIA and cardbus bridge support device cbb # cardbus (yenta) bridge device pccard # PC Card (16-bit) bus device cardbus # CardBus (32-bit) bus
PCMCIA サポート。ラップトップを使っているなら必要でしょう。
# Serial (COM) ports device sio # 8250, 16[45]50 based serial ports
これらは MS-DOS/Windows の世界では COM と呼ばれているシリアルポートです。
Note: もしあなたが内蔵モデムを COM4 に、 シリアルポートを COM2 に設定している場合、FreeBSD からアクセスするには、 (IRQ2=IRQ9 という、不明瞭な技術的理由により) モデムの IRQ を 2 に変更する必要があります。 もしマルチポートシリアルカードを持っていて、これらを /boot/device.hints に追加する正しい数値に関する情報がほしい場合は、マニュアルページ sio(4) を参照して下さい。 ビデオカードのいくつかは (S3 チップベースのものは特に) IO アドレスを 0x*2e8 と言う形式で表現する一方、 多くの安価なシリアルカードは 16 ビットの IO アドレスを完全に デコードしないので、これらのカードを使った場合衝突が起こり、 事実上 COM4 ポートを使用不可能にします。
各々のシリアルポートは (共有割り込み番号をサポートするマルチポートカードを使っていない限り) 固有の IRQ を必要とします。 従って COM3 と COM4 用のデフォルト IRQ は利用できません。
# Parallel port device ppc
ISA バスパラレルポートインタフェースです。
device ppbus # Parallel port bus (required)
パラレルポートバスのサポートを提供します。
device lpt # Printer
パラレルポートプリンタのサポートです。
Note: 上の 3 つはすべてパラレルプリンタを利用可能にするために必要です。
device plip # TCP/IP over parallel
パラレルネットワークインタフェース用のドライバです。
device ppi # Parallel port interface device
汎用I/O (“geek port”) + IEEE1284 I/O です。
#device vpo # Requires scbus and da
Iomega の Zip ドライブ用です。scbus と da サポートが必要です。 EPP 1.9モードを使うと最高の性能が得られます。
#device puc
puc(4) glue ドライバがサポートしている “dumb” シリアル、 またはパラレル PCI カードを持っているのであれば、 このデバイスを有効にしてください。
# PCI Ethernet NICs. device de # DEC/Intel DC21x4x (“Tulip”) device em # Intel PRO/1000 adapter Gigabit Ethernet Card device ixgb # Intel PRO/10GbE Ethernet Card device txp # 3Com 3cR990 (“Typhoon”) device vx # 3Com 3c590, 3c595 (“Vortex”)
PCI ネットワークカードのドライバです。 あなたのシステムにないものはコメントアウトするか削除して下さい。
# PCI Ethernet NICs that use the common MII bus controller code. # NOTE: Be sure to keep the 'device miibus' line in order to use these NICs! device miibus # MII bus support
MII バスサポートはいくつかの PCI 10/100 イーサネット NIC、 すなわち MII に従うトランシーバや MII のようなトランシーバ制御インタフェースを実装するもの、に必要となります。 カーネルコンフィギュレーションに device miibus を追加することで、汎用 miibus API のサポートと、 特定のドライバを必要としない場合に利用される汎用のものを含むすべての PHY ドライバが導入されます。
device bce # Broadcom BCM5706/BCM5708 Gigabit Ethernet device bfe # Broadcom BCM440x 10/100 Ethernet device bge # Broadcom BCM570xx Gigabit Ethernet device dc # DEC/Intel 21143 and various workalikes device fxp # Intel EtherExpress PRO/100B (82557, 82558) device lge # Level 1 LXT1001 gigabit ethernet device msk # Marvell/SysKonnect Yukon II Gigabit Ethernet device nge # NatSemi DP83820 gigabit ethernet device nve # nVidia nForce MCP on-board Ethernet Networking device pcn # AMD Am79C97x PCI 10/100 (precedence over 'lnc') device re # RealTek 8139C+/8169/8169S/8110S device rl # RealTek 8129/8139 device sf # Adaptec AIC-6915 (“Starfire”) device sis # Silicon Integrated Systems SiS 900/SiS 7016 device sk # SysKonnect SK-984x & SK-982x gigabit Ethernet device ste # Sundance ST201 (D-Link DFE-550TX) device stge # Sundance/Tamarack TC9021 gigabit Ethernet device ti # Alteon Networks Tigon I/II gigabit Ethernet device tl # Texas Instruments ThunderLAN device tx # SMC EtherPower II (83c170 “EPIC”) device vge # VIA VT612x gigabit ethernet device vr # VIA Rhine, Rhine II device wb # Winbond W89C840F device xl # 3Com 3c90x (“Boomerang”, “Cyclone”)
MII バスコントローラコードを利用するドライバです。
# ISA Ethernet NICs. pccard NICs included. device cs # Crystal Semiconductor CS89x0 NIC # 'device ed' requires 'device miibus' device ed # NE[12]000, SMC Ultra, 3c503, DS8390 cards device ex # Intel EtherExpress Pro/10 and Pro/10+ device ep # Etherlink III based cards device fe # Fujitsu MB8696x based cards device ie # EtherExpress 8/16, 3C507, StarLAN 10 etc. device lnc # NE2100, NE32-VL Lance Ethernet cards device sn # SMC's 9000 series of Ethernet chips device xe # Xircom pccard Ethernet # ISA devices that use the old ISA shims #device le
ISA イーサネットドライバです。 どのカードがどのドライバによりサポートされているかの詳細は、 /usr/src/sys/i386/conf/NOTES を参照して下さい。
# Wireless NIC cards device wlan # 802.11 support
標準の 802.11 サポート。ワイヤレスネットワークではこの行が必要です。
device wlan_wep # 802.11 WEP support device wlan_ccmp # 802.11 CCMP support device wlan_tkip # 802.11 TKIP support
802.11 デバイスの暗号化サポート。 暗号化および 802.11i セキュリティプロトコルを使うことを考えているのであれば、 これらの行が必要です。
device an # Aironet 4500/4800 802.11 wireless NICs. device ath # Atheros pci/cardbus NIC's device ath_hal # Atheros HAL (Hardware Access Layer) device ath_rate_sample # SampleRate tx rate control for ath device awi # BayStack 660 and others device ral # Ralink Technology RT2500 wireless NICs. device wi # WaveLAN/Intersil/Symbol 802.11 wireless NICs. #device wl # Older non 802.11 Wavelan wireless NIC.
ワイヤレスカードのサポートです。
# Pseudo devices device loop # Network loopback
TCP/IP の汎用ループバックデバイスです。 localhost (すなわち 127.0.0.1) に対して telnet や FTP で接続すると、このデバイスを通して戻ってきます。 これは必須です。
device random # Entropy device
暗号化されたセキュア乱数ジェネレータです。
device ether # Ethernet support
ether はイーサネットカードを持っている場合にのみ必要です。 汎用イーサネットプロトコルコードを含みます。
device sl # Kernel SLIP
sl は SLIP サポートを行います。 SLIP は設定のより簡単な、モデム-モデム間の接続にはより適していてより高機能な PPP に殆ど取って代わられています。
device ppp # Kernel PPP
これはダイアルアップ接続用のカーネル PPP サポートです。 他にも tun を利用し、 デマンドダイアリングのような柔軟性と機能を提供するユーザーランドのアプリケーションとして実装された PPP が存在します。
device tun # Packet tunnel.
これはユーザーランド PPP ソフトウエアにより利用されます。 詳細はこの本の PPP セクションを参照して下さい。
device pty # Pseudo-ttys (telnet etc)
これは “疑似ターミナル” 或いはシミュレートされたログインポートです。 これは入ってくる telnet と rlogin セッション、 xterm やその他の Emacs のようなアプリケーションにより利用されます。
device md # Memory “disks”
メモリディスク疑似デバイス。
device gif # IPv6 and IPv4 tunneling
この行は IPv6 over IPv4 トンネル、IPv4 over IPv6 トンネル、 IPv4 over IPv4 トンネル、IPv6 over IPv6 トンネルを提供します。 gif デバイスは “auto-cloning (自動複製)” し、 必要に応じてデバイスノードを作成します。
device faith # IPv6-to-IPv4 relaying (translation)
この疑似デバイスは自分宛に送られたパケットを受け取り、 IPv4/IPv6 変換デーモンに渡します。
# The `bpf' device enables the Berkeley Packet Filter. # Be aware of the administrative consequences of enabling this! # Note that 'bpf' is required for DHCP. device bpf # Berkeley packet filter
これはバークレーパケットフィルタです。 この疑似デバイスはネットワークインタフェースを、 イーサネットのようなブロードキャストネットワーク上ですべてのパケットを拾うことのできる promiscuous モードに設定できるようにします。 これらのパケットはディスクに取り込むこともできますし、 tcpdump(1) を使ってチェックをすることもできます。
Note: bpf(4) デバイスは、dhclient(8) がデフォルトルータ (ゲートウェイ) の IP アドレスなどを取得するためにも使われています。 DHCP を使っているなら、これはコメントアウトしないでください。
# USB support device uhci # UHCI PCI->USB interface device ohci # OHCI PCI->USB interface device ehci # EHCI PCI->USB interface (USB 2.0) device usb # USB Bus (required) #device udbp # USB Double Bulk Pipe devices device ugen # Generic device uhid # “Human Interface Devices” device ukbd # Keyboard device ulpt # Printer device umass # Disks/Mass storage - Requires scbus and da device ums # Mouse device ural # Ralink Technology RT2500USB wireless NICs device urio # Diamond Rio 500 MP3 player device uscanner # Scanners # USB Ethernet, requires mii device aue # ADMtek USB Ethernet device axe # ASIX Electronics USB Ethernet device cdce # Generic USB over Ethernet device cue # CATC USB Ethernet device kue # Kawasaki LSI USB Ethernet device rue # RealTek RTL8150 USB Ethernet
さまざまな USB デバイスのサポートです。
# FireWire support device firewire # FireWire bus code device sbp # SCSI over FireWire (Requires scbus and da) device fwe # Ethernet over FireWire (non-standard!)
Firewire デバイスのサポートです。
より詳細な情報と、FreeBSD によりサポートされる他のデバイスについては /usr/src/sys/i386/conf/NOTES を参照して下さい。
大容量のメモリを搭載したコンピュータは、 ユーザ+カーネル仮想アドレス (KVA) 空間における 4 ギガバイトの制限を越えてメモリにアクセスする必要があります。 Intel は Pentium Pro およびそれ以降の CPU において、 36-bit 物理アドレス空間に対応しました。
Intel Pentium Pro
およびそれ以降の CPU では、 Physical Address Extensions (PAE) を用いて 64 ギガバイトまでのメモリの構成を可能にします。
FreeBSD は、PAE
カーネルコンフィグレーションオプションを用いることで PAE に対応します。
現在すべてのバージョンの FreeBSD で利用できます。 Intel
のメモリアーキテクチャの制限により、 4 ギガバイト以上または以下の区別をしません。
4 ギガバイト以上に割り当てられたメモリは、
利用可能なメモリのプールに単純に追加されます。
PAE サポートをカーネルで有効にするには、 以下の行を単にカーネルコンフィグレーションファイルに追加してください。
options PAE
Note: FreeBSD の PAE のサポートは、 Intel IA-32 プロセッサでのみ利用できます。 また、FreeBSD における PAE サポートは広くテストが行われているわけではないので、 FreeBSD の他の機能と比較するとベータ品質に位置づけられます。
FreeBSD における PAE サポートには、 以下のような制限があります。
プロセスは、4 ギガバイト以上の VM 空間にアクセスできません。
bus_dma(9) インタフェースを用いないデバイスドライバは、 PAE が有効なカーネルにおいてデータの破損を引き起こす可能性があるため、 利用することは推奨されません。 そのため FreeBSD で提供される PAE カーネルコンフィグレーションファイルでは、PAE が有効なカーネルで動作することが知られていないすべてのドライバが外されています。
いくつかの調整可能なシステムパラメータは、
利用可能な物理メモリによるメモリリソースを調整します。 PAE を必要とするような大きなメモリのシステムでは、
そのような調整可能なリソースが不必要に割り当てられることがあります。
そのような例のひとつが kern.maxvnodes sysctl です。この
sysctl は、カーネルで許される vnode の最大数を調節します。 この sysctl
や同様に変更可能なパラメータを適切な値に調整することをお奨めします。
カーネルバーチャルアドレス (KVA)
の枯渇を避けるため、KVA
空間を大きくとる、または、 (上記のように)
激しく消費される特定のカーネルリソースの量を減らす必要があるでしょう。 KVA_PAGES カーネルオプションを用いて KVA 空間を増やすことができます。
パフォーマンスや安定性については、 tuning(7) マニュアルページを調べることをお奨めします。 pae(4) マニュアルページは、FreeBSD の PAE サポートに関する最新の情報を含んでいます。
カスタムカーネルを作る場合に起きるトラブルは、 次の 4 種類に分けられます。
カーネルコンフィグレーションファイルの設定後に config(8) コマンドが失敗したのであれば、 おそらくファイルのどこかに単純な間違いがあります。 さいわい、config(8) はトラブルの起きた行番号を出力するので、 エラーを含む行を素早く見つけることができます。 例えば、次のように出力された場合
config: line 17: syntax error
GENERIC カーネルのファイルや、 他のリファレンスと比較して注意深く修正してください。
make コマンドが失敗した場合には、 カーネル設定で config(8) がとらえられなかったような間違いをしていることが多いようです。 もう一度コンフィグレーションファイルを見直してください。 それでも問題を解決することができなければ、 FreeBSD general questions メーリングリスト へあなたのカーネルコンフィグレーションファイルをつけてメールしてください。 誰かが素早く間違いを見つけてくれるでしょう。
新しいカーネルが起動しなかったり、 デバイスの認識をしない場合でもあわてないでください! さいわい、FreeBSD には利用できないカーネルから復帰する洗練されたメカニズムがあります。 それは、FreeBSD のブートローダで起動したいカーネルを選択するだけです。 システムの起動メニューが表示されている時に、この機能を使えます。 6 番目の “Escape to a loader prompt” オプションを選択してください。 プロンプトで boot kernel.old か他の正常に起動するカーネルを入力してください。 カーネルの再設定をおこなう場合にはいつも、 確実に動くことが分かっているカーネルを用意しておくようにすると良いでしょう。
問題のないカーネルで起動した後にあなたのコンフィグレー ションファイルを調べ、 再び構築を試みてください。 /var/log/messages ファイルにはすべての成功した起動時のカーネルメッセージやその他の記録があり、 これは助けになる情報の一つでしょう。また、 dmesg(8) コマンドは現在の起動時のカーネルメッセージを出力します。
Note: カーネルの構築中にトラブルが起きた時に使うために、 GENERIC や他のカーネルを次回の構築で消されないよう別の名前で保存するようにしてください。kernel.old は新しいカーネルをインストールする時に、 その一つ前にインストールした、 うまく動かないかもしれないカーネルで上書きされてしまうので当てにできません。 またできる限り早く動作しているカーネルを本来の /boot/kernel の位置に移動させてください。 そうしないと ps(1) のようなコマンドが正しく動きません。これを行うには、 以下のように正しく起動するカーネルを含むディレクトリ名に変更するだけです。
# mv /boot/kernel /boot/kernel.bad # mv /boot/kernel.good /boot/kernel
システムユーティリティと異るバージョンのカーネルをインストールした場合、 例えば -CURRENT のカーネルを -RELEASE 上にインストールするような場合、 ps(1) や vmstat(8) のような多くのシステムステータスコマンドは動かなくなります。 カーネルと同じバージョンのソースツリーで world を再構築し、インストール してください。 これは、カーネルとそれ以外で異なるバージョンを組み合わせてオペレーティングシステムを使用することが推奨されない理由の一つとなっています。
FreeBSD は古いインパクトプリンタから最新のレーザープリンタまで幅広いプリンタが利用でき、 実行しているアプリケーションから高品質な印刷出力が行えます。
FreeBSD はネットワーク上のプリンタサーバとして動作するように設定することもできます。 この機能は、他の FreeBSD コンピュータや、Windows や Mac OS ホストから印刷ジョブを受け取ることができます。 FreeBSD は印刷ジョブを 1 つずつ処理することを保証します。 また、どのユーザやマシンが最も多く印刷しているかの統計を取り、 どの印刷物が誰の物か表示する “バナー” ページの作成などを行うことができます。
この章を読めば以下のことがわかります。
FreeBSD プリントスプーラの設定方法。
入力ドキュメントをプリンタが扱える印刷フォーマットへ変換するなどといった、 特別な印刷ジョブを別に取り扱うための印刷フィルタのインストール方法。
印刷物へのヘッダやバナーの適用方法。
他のコンピュータに接続されたプリンタで印刷する方法。
ネットワークに直接接続されたプリンタで印刷する方法。
印刷ジョブの上限サイズや特定のユーザからの印刷拒否といった、 プリンタの制限の制御方法。
印刷の統計とプリンタの使用状況の取得方法。
印刷問題のトラブルシューティング方法。
この章を読み始める前に以下を済ませておいてください。
新しいカーネルの設定とインストール方法について理解すること (Chapter 9)。
FreeBSD でプリンタを使うために、それらを LPD スプーリングシステム、 または単に LPD としても知られる Berkeley ラインプリンタスプーリングシステムで動作するように設定できます。 これは FreeBSD での標準的なプリンタ制御システムです。 この章では、LPD を紹介し、 その設定方法について説明します。
あなたがすでに LPD やその他のプリンタスプーリングシステムに詳しいのなら、 基本的な設定 まで読み飛ばしてもかまいません。
LPD はホストのプリンタに関するあらゆることを制御します。 ここで言う制御としては、次のことがあげられます。
ホストに接続されたプリンタ、 あるいはネットワーク上の他ホストに接続されたプリンタに対するアクセス制御を行ないます。
ファイルをプリントする要求に対して許可を与えます。 この要求は特にジョブと呼ばれています。
各々のプリンタのキューを管理することにより、 複数のユーザがあるプリンタに対して同時にアクセスすることを防ぎます。
ヘッダページ (バナーまたは バーストページとしても知られています) をプリントすることができます。 これにより、 プリントアウトの山の中から自分がプリントしたジョブを見つけやすくなります。
シリアルポートに接続したプリンタ用に通信パラメータを管理します。
ネットワーク経由で他のホスト上の LPD スプーラにジョブを送ることができます。
様々なプリンタ言語やプリンタの能力に応じてジョブの形式を整えるため、 特別なフィルタを起動することができます。
プリンタの使用に対して課金を行なうことができます。
設定ファイル (/etc/printcap) を通して、専用のフィルタプログラムを用いることにより、 多種多様なプリンタ機器に対して、上述の機能の全部または一部を LPD システムに行なわせることができます。
あなたのシステムを利用するのがあなた一人だけだとしたら、 アクセス制御もヘッダページもプリンタ利用に対する課金も必要ないのに、 なぜわざわざスプーラに煩わされなければならないのか疑問に思うかも知れません。 プリンタに対する直接アクセスを許可することもできるのですが、 とにかくスプーラを使用するべきです。その理由は、
LPD はジョブをバックグラウンドで処理します。 データがプリンタに送信されるまで待つ必要がなくなります。
LPD ではジョブをフィルタを通してプリントすることが簡単にできます。 これにより、印刷物のヘッダに時刻や日付を入れたり、 特別なファイル形式 (TeX の DVI ファイルなど) をプリンタが処理できる形式に変更することができ、 これらの作業を手動で行なう必要がなくなります。
プリント処理を行なうフリー、 または商用のプログラムのほとんどは、 システムのスプーラとやりとりするように作られています。 スプーリングシステムをセットアップすることで、 今後加えるかもしれない、あるいは、 すでに持っている別のソフトウェアをより簡単にサポートすることができるでしょう。
LPD スプーリングシステムを用いてプリンタを使用するためには、 プリンタ機器と LPD 用ソフトウェアの両方を準備する必要があります。 本文書では次の二段階のレベルに分けて説明をします。
プリンタを接続する方法、 プリンタにどのように通信するかを LPD に指示する方法や、 プレインテキストをプリンタで印字する方法については、 プリンタの簡単な設定をご覧ください。
様々な形式のファイルを印字する方法、 ヘッダページを印字する方法、 ネットワーク経由でプリンタに印字する方法、 プリンタを制御する方法、 プリンタの使用に対する課金を行なう方法についてはプリンタ設定上級編をご覧ください。
この節では、プリンタ機器やプリンタを使用するための LPD 用ソフトウェアを設定する方法について述べます。 この節の概要は次のとおりです。
プリンタ機器の設定では、 プリンタをコンピュータに接続するためのヒントがいくつか書かれています。
ソフトウェアの設定では、 LPD のスプーラ設定ファイル (/etc/printcap) の設定方法について書かれています。
データをプリンタに送るのにコンピュータのローカルインタフェースではなく、 ネットワークプロトコルを使用する場合は、 ネットワークにおけるデータストリームインタフェースを持つプリンタをご覧ください。
この節のタイトルは “プリンタ設定導入編” ですが、 実際の設定はかなり複雑です。 プリンタをコンピュータに接続し、 LPD スプーラを起動させることは一番困難な作業です。 ヘッダページを出力させたり課金したりするオプションの設定は、 一度プリンタがうまく動くようになればとても簡単です。
この節では、プリンタに PC を接続するための様々な方法について説明しています。 ここでは、ポートやケーブルの種類、 FreeBSD がプリンタとの通信に必要なカーネルコンフィグレーションについても言及しています。
もしプリンタが既に接続されていて、 他のオペレーティングシステム上でプリンタからの印字に成功している場合は、 ソフトウェアの設定まで読み飛ばすことが多分できるでしょう。
今日 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 プリンタで課金作業をもっとも効率よく行なうためには、 双方向通信が必要となります。 この方法ではまず、プリンタの現在のページカウント (起動してから今まで何枚の紙を印字したか) の情報を得ます。 次に、ユーザのジョブを実行し、終了後、再びページカウントを得ます。 この二つの数を差によって、 課金対象となる紙の枚数を知ることができるのです。
プリンタをパラレルインタフェースを使って接続する場合は、 セントロニクスケーブルでプリンタとコンピュータを接続してください。 詳しい説明はプリンタやコンピュータに付属する説明書に書かれているはずです。
その際、 どのパラレルポートを使用したかを覚えておいてください。 FreeBSD では最初のポートは ppc0、 二番目が ppc1 であり、 三番目以降も同様に続きます。 プリンタのデバイス名にも同じ形式が使われており、 最初のパラレルポートに接続されたプリンタは /dev/lpt0 などとなります。
シリアルインタフェースを使ってプリンタを使う場合は、 適切なシリアルケーブルでプリンタとコンピュータを接続してください。 詳しい説明はプリンタ、コンピュータ、あるいは両方に付属する説 明書に書かれているはずです。
“適切なシリアルケーブル” が良くわからないときは、 次のどれかを試してみてください。
モデム 用ケーブルでは、 それぞれのピンは他方のコネクタの対応するピンと線でつながっています。 このタイプのケーブルは “DTE-DCE” 間ケーブルとしても知られています (訳注: 日本ではストレートケーブルという名前で売られています)。
ヌルモデム 用ケーブルでは、 あるピンは対応するピンとを接続していますが、 あるピン (たとえば、データ送信用とデータ受信用のピン) が交差して接続したり、 いくつかのピンは内部で短絡していたりします。 このタイプのケーブルは、 “DTE-DTE” 間ケーブルと呼ばれています (訳注: 日本ではクロスケーブルという名前で売られています)。
A シリアルプリンタ用ケーブルは、 ある特定のプリンタで必要とされるものです。 ヌルモデムケーブルと似ていますが、 内部で短絡させる代わりに、 ある信号を他方側に送るために使用しています。
この他に、 プリンタ用の通信パラメータを設定する必要があります。 通常、プリンタのフロントパネルや DIP スイッチによって制御します。 コンピュータとプリンタの双方で設定できる最高の通信速度 [bps] (ビット/秒、 ボーレートと示されているときもある) を選んでください。そして、データビット (7 または 8)、 パリティ (偶/奇/なし)、ストップビット (1 または 2) を選んでください。 そして、フローコントロールの有無 (制御なし、または XON/XOFF (“イン・バンド” または “ソフトウェア” フローコントロールとも呼ばれる)) を選びます。 以下に続くソフトウェアの設定のために、 ここでの設定を覚えておいてください。
本節では FreeBSD の LPD スプーリングシステムで印字をおこなうために 必要となるソフトウェアの設定について説明しています。
本節の概要は次のようになります。
プリンタで使用するポートのために、必要があれば、 カーネルの書き変えをおこないます。「カーネルの変更」で、 このためにしなくてはならないことを説明しています。
パラレルポートを使用している場合は、 パラレルポートのための通信モードを設定します。 詳細は、 「 パラレルポートの通信モードを設定する」 で説明しています。
オペレーティングシステムからプリンタにデータが送ら れているかをテストします。「プリンタとの通信状況を調べる」で、 どのようにテストするかの提案をいくつかおこなっています。
ファイル/etc/printcapを変更し、 LPD の設定をおこないます。 この節で、どのように変更するかを説明しています。
オペレーティングシステムのカーネルの コンパイルをおこなうことによって、 指定されたデバイスが機能するようになります。シリアル、 または、パラレルインタフェースをプリンタで使用する場合、 必要なデバイスがこの指定の中に含まれていなくてはなりません。 したがって、 必要なデバイスがカーネルに組み込まれていない場合、 追加のシリアル、または、パラレルポートをサポートするために、 カーネルの再コンパイルが必要となるかもしれません。
シリアルポートが現在使用しているカーネルで サポートされているかどうかを調べるためには、 次のように入力します。
# 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 カーネルのコンフィグレーション」の節をご覧く ださい。パラレルポートをサポートさせる場合も、その節と、 あわせて、 この節に続く節もご覧ください。
パラレルインタフェースを使用している場合、FreeBSD では、 割り込み駆動型にするか、 プリンタとの通信の状況をカーネルに監視させるかのいずれかを選択できます。 FreeBSD の汎用プリンタデバイスドライバ (lpt(4)) は ppbus(4) システムを利用しています。 これは ppc(4) ドライバを使ってパラレルポートのチップセットを制御します。
GENERIC カーネルでは割り込み駆動方式がデフォルトになっています。 この方式では、 オペレーティングシステムはプリンタがデータを受け付けられるかどうかを調べるために、 IRQ ラインを一つ使用します。
監視方式では、 オペレーティングシステムにプリンタがもっとデータを受け付けられるかどうかを繰り返し尋ねるように指示します。 そして、受け付けるという応答を受けたとき、 カーネルはさらなるデータを送信します。
割り込み駆動方式は一般的にいくらか高速になりますが、貴重な IRQ ラインを一つ消費します。 HP の新しいプリンタの一部には、明らかに何かしらのタイミングの問題 (まだ正確にはわかっていません) で割り込みモードでは正常に動作しないものがあると言われています。 これらのプリンタにはポーリングモードが必要になります。 どちらかうまく機能する方を使ってください。 一部のプリンタはどちらの方式でも動作しますが、 割り込みモードでは苦痛を感じるほど低速です。
通信モードを設定するためには 2 つの方法があります。 1 つはカーネルを変更することで、もう一つは lptcontrol(8) プログラムを使用する方法です。
カーネルを設定することによって、 通信モードを変更する。
カーネルコンフィグレーションファイルを変更します。 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) の設定を確認してください。
ファイルをセーブし、config プログラムを起動し、 カーネルの構築、インストールをおこないます。そして、 リブートしてください。詳細は、「 FreeBSDカーネルのコンフィグレーション」を参照 してください。
lptcontrol(8) で通信モードを設定する場合
lptN をイベント駆動方式に設定する場合は、 次のように入力します。
# lptcontrol-i-d/dev/lptN
lptN を監視方式に設定する場合は、次のように入力します。
# lptcontrol-p-d/dev/lptN
これらのコマンドを /etc/rc.local ファイルに追加 しておくと、システムをブートする度に通信モードを設定する ことができます。詳細については、 lptcontrol(8) をご覧ください。
スプーリングシステムの設定に進む前に、オペレーティング システムがプリンタにデータを送ることに成功しているかどうか を確かめるべきでしょう。これにより、印字がうまくいかないと き、プリンタとの通信が問題なのか、スプーリングシステムが問 題なのかを分けて調べることがかなり容易になります。
プリンタをテストするためには、 プリンタに何かのテキストを送 信してみます。送信した文字をすぐに印字してくれるプリンタに は、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 コードはファイルに保存し、 以降の節で例として示されているように利用することができます。
Note: このドキュメントでプリンタ用言語を参照するときは、 PostScript のような言語を仮定しており、Hewlett Packard の PCL は考慮していません。PCL は非常に機能的なの ですが、 プレインテキストにエスケープシーケンスを混ぜること ができます。PostScript ではプレインテキストを直接印字 することはできません。 このような種類のプリンタ言語に対しては、 特別な対応をおこなわなければなりません。
この節では、FreeBSD がパラレルポートに接続されたプリ ンタと通信できているかどうかを調べる方法について説明し ています。
パラレルポートのプリンタをテストするために
su(1) コマンドで root になります。
プリンタにデータを送ります。
プリンタがプレインテキストを印字できる場合、 lptest(1) コマンドを使います。 次のように入力してください。
# lptest > /dev/lptN
ここで、N はパラレルポートの番号で、番号は 0 から始まります。
プリンタが PostScript か他のプリンタ 言語を使用している場合、そのプリンタに簡単なプロ グラムを送信してください。次のように入力します。
# cat > /dev/lptN
そして、一行一行、 プログラムを慎重に入力して 下さい。RETUREN または ENTER キーを入力してしま うと、その行は編集できなくなります。プログラムの 入力が終わったら、CONTROL+D か、あなたが設定して いるファイル終了のキーを押してください。
もしくは、プログラムを入力したファイルがある 場合は、次のように入力してください。
# cat file > /dev/lptN
ここで、file はプログラムが格納されていて、 プリンタに送信するファイルの名前です。
これで何かが印刷されるはずです。 印字されたテキストがおかしくても心配は無用です。 それについては、後で修正します。
この節では、FreeBSD がシリアルポートに接続されたプリ ンタと通信できているかどうかを調べる方法について述べられ ています。
シリアルポートのプリンタをテストするために
su(1) コマンドで root になります。
/etc/remote ファイルを編集します。次のエントリを加えてください。
printer:dv=/dev/port:br#bps-rate:pa=parity
ここで、port シリアルポート (ttyd0、 ttyd1 など) のデバイスエントリで、 bps-rateは プリンタとの通信の転送速度[bit/秒]、 parityはプリ ンタとの通信で必要とされるパリティ (even、odd、 none、 zeroのいずれか) を表わしていま す。
次の例は、 プリンタをシリアルケーブルでパリティなし、転送速度 19200 bps で第 3 番目のシリアルポートに接続した場 合です。
printer:dv=/dev/ttyd2:br#19200:pa=none
tip(1) コマンドでプリンタと接続します。 次のように入力してください。
# tip printer
これがうまくいかなかった場合は、 /etc/remoteを編集して、 /dev/ttydN の代わりに /dev/cuaaN を試してみてください。
プリンタにデータを送ります。
プリンタがプレインテキストを印字できる場合、 lptest(1) コマンドを使います。 次のように入力してください。
% $lptest
プリンタが PostScript か他のプリンタ言語を使用している場合、 そのプリンタに簡単なプログラムを入力します。 一行一行、プログラムを慎重に入力してください。 バックスペースキーや他の編集用のキーは、 プリンタの制御コードに割り当てられているかもしれません。 プログラムが終了したことをプリンタに伝えるための特別なファイル終了キーを 入力する必要があるかもしれません。 PostScript プリンタの場合、 CONTROL+D を入力します。
もしくは、プログラムを入力したファイルがある場合は、 次のように入力してください。
% >file
ここで、file はプログラムが格納されているファイル名です。 tip(1) コマンドでファイルを送信した後は、 ファイル終了を表わすキーを入力する必要があります。
これで何かがプリントされることでしょう。 印字されたテキ ストがおかしくても心配しなくても構いません。 それについては、後で修正します。
ここまでで、プリンタはコンピュータに接続され、(必要なら) プリンタと通信できるようにカーネルを変更し、 簡単なデータをプリンタに送信することができているはずです。 これで、LPD にプリンタへのアクセスを 制御させる設定をおこなう準備が整いました。
LPD の設定は /etc/printcap を編集することでおこないます。 LPD スプーリングシステムは スプーラが使われる毎にこのファイルを参照します。 そのため、ファイルを更新するとすぐにその変更が反映されます。
printcap(5) ファイルの書式は簡単です。 /etc/printcap の編集はお好みのテキストエディタをお 使いください。このファイルの書式は、 /usr/share/misc/termcap や /etc/remote といった他のケイパビリティファイルと一致しています。 この書式 についての詳細な情報については cgetent(3) をご覧ください。
スプーラの単純な設定法は、 次のステップでおこないます。
プリンタに名前 (と簡単な別名 2 〜 3 個) を付け、それを /etc/printcap ファイルに記述します。 これについては、「 プリンタに名前を付ける」 を参照してください。
sh の項目を追加することで、 ヘッダページの出力を禁止します (デフォルトは許可)。 これについては、「 ヘッダページの印字を禁止する」 を参照してください。
スプール用のディレクトリを作成し、その位置を sd 項目で指定します。これについては、 「 スプーリングディレクトリの作成」 を参照してください。
プリンタを使用するために /dev エントリを設定し、/etc/printcap の lp 項目でそのエントリを指定します。 これについては、「 プリンタデバイスの特定」 を参照してください。 プリンタをシリアルポートに接続した場合は、 ms# の項目を設定する必要があります。こちらについては、 「 スプーラのための通信パラメータの設定」 を参照してください。
プレインテキスト用の入力フィルタのインストールをおこないます。 「テキストフィルタのインストール」 を参照してください。
lpr(1) コマンドで何かを印字することで設定のテストをおこないます。 印字してみよう と トラブルシューティング を参照してください。
Note: PostScript プリンタのような、 プリンタ言語を使用しているプリンタには、 プレインテキストを直接印字させることができません。 上にアウトラインを示し、 以下の節で説明する簡単な設定方法の説明では、 そのようなプリンタを設置している場合は、 プリンタが認識できるファイルだけを印字の対象としているという 仮定をしています。
多くの場合、 利用者はシステムに設置されているプリンタすべてで プレインテキストが印字できることを期待しています。 印字作業をおこなうために LPD のインタフェースを利用するプログラムでも、 通常、そのような仮定を置きます。 プリンタ言語を使用するプリンタを設置しており、 そのプリンタ言語で記述されたジョブと、 これに加えて、 プレインテキストのジョブも印字できるようにしたいならば、 上で示した簡単な設定方法に加えて、 さらなる設定をおこなうことを強くお勧めします。すなわち、 自動的にプレインテキストから PostScript (もしくは、 他のプリンタ言語) に変換するプログラムをインストールしてください。「 プレインテキストのジョブを PostScript プリンタで印字する」 で、それをどのようにおこなえばよいのかが説明されています。
訳注: 日本語を印字したい場合は、プリンタ言語を使用し ていない「日本語プリンタ」についても、 プリンタ固有のエスケープシーケンスを送る必要があります。 また、漢字コードをプリン タが設定しているものに変換したりする必要があり、 各プリンタ毎に、日本語用のフィルタが必要になります。
最初の (簡単な) ステップで、プリンタの名前を考えます。 プリンタには別名をいくつか付けることもできるので、 機能的な名前 でも風変わりな名前でもどちらを選んでもまったく 問題はありません。
少なくとも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 という名前と別名として、line、 diablo、lp そして Diablo 630 Line Printer が付けられています。別名とし て lp があるので、このプリンタはデフォルトのプリンタとなっ ています。2 番目は bamboo と名付けられ、 別名として、ps と PS、S、 panasonic、Panasonic KX-P4455 PostScript v51.4 が付けられています。
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:
この書式を正しく使うための注意をしておきます。 最初の行は左端のカラムから始めます。 それに続く行は字下げします。最後の行以外のすべての行は、 行末にバックスラッシュを記述します。
スプーラの簡単な設定の次のステップでは、 スプーリングディレクトリを作成します。 プリンタに送られるジョブは、 その印字が終了するまでこのディレクトリに置かれます。また、 他のたくさんのスプーラもこのディレクトリにファイルを置きます。
様々な事情によりスプーリングディレクトリは、通常、慣例 として /var/spool の下に置きます。 また、スプーリングディレクトリの内容は バックアップをする必要はありません。 mkdir(1) によってディレクトリを 作るだけでスプーリングディレクトリの復旧は完了します。
スプーリングディレクトリの名前は、これも慣例ですが、 次のようにプリンタの名前と同じにします。
# mkdir /var/spool/printer-name
しかしながら、ネットワーク上に使用可能なプリンタがたく さんあるならば、LPD で印字するための専用のディレクトリにスプーリングディレクトリを置きたくなるかもしれません。 例に出てきたプリンタ rattan と bamboo について、この方式を採用すると、 次のようになります。
# mkdir /var/spool/lpd # mkdir /var/spool/lpd/rattan # mkdir /var/spool/lpd/bamboo
Note: 各ユーザが印字するジョブのプライバシを守りた いと考えているならば、スプーリングディレクトリを保護し て、これを誰からでもアクセスできないようにしたいと思う かもしれません。スプーリングディレクトリは、 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 をデフォルト値として使用します。
プリンタ機器の設定 の節では、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/ttyd5:
/etc/printcap でプリンタの lp 項目が指定されていない場合は、 LPD はデフォルトとして /dev/lp を使用します。/dev/lp は、現在の FreeBSD には存在していません。
設置したプリンタがパラレルポートに 接続されている場合は、 「 テキストフィルタのインストール」 まで読み飛ばしてください。 そうでない場合は、次節の説明に続いてください。
シリアルポートにプリンタを接続した場合、 LPD は、プリンタにデータを送信するフィルタプログラムに代わり、 通信速度やパリティ、 その他のシリアル通信パラメータを設定することができます。 このことによる利点は、
/etc/printcap を編集するだけで、 様々な通信パラメータを試してみることができます。 フィルタプログラムを再コンパイルする必要はありません。
スプーリングシステムで、 シリアル通信の設定が異なっているかもしれない複数のプリンタに 同じフィルタプログラムを使うことが可能になります。
次の /etc/printcap の項目で、 lp で指定された デバイスのシリアル通信パラメータを制御できます。
デバイスの通信速度を bps-rate に設定します。 ここで、bps-rate は 50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, 4800, 9600, 19200, 38400, 57600, 115200 [bit/秒] のいずれかです。
デバイスをオープンした後にターミナルデバイスのオプションを設定します。 利用できるオプションについては stty(1) を参照してください。
lp で指定されたデバイスをオープンするとき、 LPD は ms# で指定されたデバイスの特性を設定します。 特に関係があるのは、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/ttyd5:ms#-parenb cs8 clocal crtscts:
ここまでで、 プリンタにジョブを送るために使うテキストフィルタを 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/printcap に if 項目を使って指定します。これまでの /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/ttyd5:ms#-parenb cs8 clocal crtscts:\
:if=/usr/local/libexec/if-simple:
Note: if-simple スクリプトのコピーが /usr/share/examples/printing ディレクトリにあります。
lpd(8) は lpd_enable 変数に従って /etc/rc から実行されます。この変数の デフォルト値は NO です。まだ そうしていなかったならば
lpd_enable="YES"
の行を /etc/rc.conf に追加して 計算機を再起動するか、そのまま lpd(8) を 起動してください。
# lpd
簡単な 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 行生成します。
プリンタがうまく動かなかった場合は、次の節、「 トラブルシューティング」をご覧ください。
この節では、特殊な形式のファイルを印字するためのフィルタ、 ヘッダページ、ネットワーク越しのプリンタへの印字、そして、 プリンタ使用の制限や課金について説明しています。
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 を検討するべきです。
Note: 以下で述べられているさまざまなスクリプトは、/usr/share/examples/printing ディレクトリにあります。
既に言及したように、フィルタとは、プリンタにデータを送る際に、 デバイスに依存した部分を取り扱うために 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
ここで、
-clpr -l
によってジョブが入力されたときに与えられます。
/etc/printcap で指定された pw (page width) 項目の値が与えられます。デフォルトは、 132 です。
pl (page length) 項目で指定された値が与えられます。 デフォルトは 66 です。
lpr -i
によって与えられた字下げの量で、 デフォルトは 0 です。
ファイルを印字したユーザのアカウント名が 与えられます。
ジョブが入力されたホスト名が 与えられます。
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 するべきです。
フィルタがファイルを正常に印字した場合。
フィルタはファイルの印字に失敗したが、 LPD に再度ファイルの印字を試みて欲しい場合。 この終了状態で終了した場合、LPD はフィルタを再スタートします。
フィルタはファイルの印字に失敗し、かつ、LPD に再出力を試みて欲しくない場合。この場合、LPD はそのファイルを放棄します。
FreeBSD に付属するテキストフィルタ /usr/libexec/lpr/lpf は、FORM FEED 文字が送られたときやプリンタ使用に対する課金をどのようにするかを決定するために、 ページ幅やページ長の引数を利用します。また、 課金用のエントリを作成するため、ログイン名、ホスト名、 課金ファイル名の引数を利用します。
もし、フィルタの購入を検討しているならば、LPD と互換性があるかどうかを確認してください。もしそうならば、 上述の引数リストをサポートしていなければなりません。 一般向けの使用のためにフィルタを作成する計画をしている場合は、 同じ引数リストと終了コードをサポートしてください。
コンピュータと PostScript (または、他の言語に対応した) プリンタをあなたしか使用しない場合は、プリンタにプレ インテキストを絶対に送らない、そして、 プリンタにプレインテキストを送りたがっている 様々なプログラムの機能を決して使わないことにしてください。そうすれば、 この節に書かれたことに心を煩わせる必要はまったくなくなります。
しかし、PostScript とプレインテキストの両方のジョブをプリンタへ送りたいと思っている場合は、 プリンタ設定についての要求が増えるでしょう。 両者をプリンタへ送信するためには、 到着したジョブがプレインテキストであるか PostScript であるかを検出するテキストフィルタが必要です。 PostScript のジョブはすべて %! で始まらなければならないことになっています (他のプリンタ言語に関しては、 プリンタのドキュメントをご覧ください)。 ジョブの最初の 2 文字がこれならば、PostScript であることが分かります。 したがって、 ジョブのそれ以降の部分をプリンタに直接送ることができます (訳注: PostScript では、% 以降はコメントとして扱われるので、最初の %! の行を読み捨てても問題はない)。 最初の2文字が %! でない場合は、 フィルタはテキストを PostScript に変換し、 その結果を使って印字をおこないます。
この作業をどうやってやればよいのでしょうか。
シリアルポートにプリンタを接続した場合は、 lprps をインストールすることをお勧めします。 lprps は PostScript 用のフィルタで、 プリンタとの双方向通信をおこないます。 このフィルタでは、プリンタからの冗長な情報を得ることで、 プリンタの状況を示すファイルが更新されていきます。 したがって、ユーザや管理者は (“トナー残量少”や “紙詰まり”といった) プリンタの状況を正確に知ることができます。しかし、 もっと重要なことは、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 に変換するプログラムが入っています。
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 に入っています。
「プリンタ設定導入編」 に書かれた簡単な設定が完了したら、最初に、 やってみたいと思うことは、多分 (プレイン ASCII テキストに加えて) 好みのファイル形式のための変換フィルタをインストールすることでしょう。
変換フィルタによって、 様々な種類のファイルを印字することが簡単になります。たとえば、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 の中で指定しなくてはなりません。変換フィルタは、 プレインテキストを印字する代わりに、フィルタはファイルを プリンタが理解できる形式に変換するところを除けば、 「プリンタの簡単な設定」で説明したテキストファイル (「 テキストフィルタのインストール」 を見て下さい) に似ています。
使いたいと思う変換フィルタをインストールすべきです。 DVI のデータを頻繁に印字するならば、DVI 変換フィルタ をインストールするのが適切でしょう。印字しなくてはなら ない troff を大量に抱えている場合は、多分、 troff フィルタが欲しくなるはずです。
次の表は、LPD で動作するフィルタと、 /etc/printcap ファイルでのエントリする項目、そして、 lpr コマンドで呼び出す方法をまとめたものです。
| ファイル形式 | /etc/printcap項目 | lpr オプション |
|---|---|---|
| cifplot | cf | -c |
| DVI | df | -d |
| plot | gf | -g |
| ditroff | nf | -n |
| FORTRAN text | rf | -f |
| troff | tf | -f |
| raster | vf | -v |
| プレインテキスト | if | なし、-p、または -l |
先の例のように、lpr -d
を使うためには、出力先のプリンタの /etc/printcap
内のエントリで、 df
項目が必要であることが分かります。
反論はあるかも知れませんが、FORTRAN テキストや plot
のような形式は、多分、廃れてていくでしょう。
あなたのサイトで、自前のフィルタをインストールするだけで、
プリントオプションのいくつか、あるいは、
全部に新しい意味を与えることができます。たとえば、 Printerleaf ファイル (Interleaf
デスクトップパブリッシングプログラムによるファイル)
を直接印字したいとします。 そして、Printerleaf 用の変換フィルタを gf 項目で 指定したパスにインストールすれば、lpr -g の意味は “Printerleaf
ファイルを印字する” 意味だとユーザに教えることができます。
変換フィルタは FreeBSD の基本システムのインストールとは別にインストールするプログラムなので、 変換フィルタは、 /usr/local ディレクトリの下に置くべきでしょう。 フィルタは LPD だけが実行する特別なプログラム、 すなわち、一般ユーザが実行する必要すらないプログラムなので、 /usr/local/libexec ディレクトリに置くのが普通です。
変換フィルタを使用可能にするためには、 /etc/printcap の目的のプリンタの適切な項目に フィルタがあるパス名を指定します。
DVI 変換フィルタをプリンタ bamboo のエントリに加えてみましょう。プリンタ bamboo の df 項目を新たに加えた /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/ttyd5: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
はこれらの引数を印字されたページ分の課金をおこなうために使われます。
変換フィルタのインストールには決まったステップがないので、 この節では、例をもっと挙げることにします。 これを自分でフィルタを作る際のガイドにしてください。 適当な例があったら、それをそのまま使ってください。
次のスクリプト例は、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/printcap の sd 項目で指定する) に作ることにします。 フィルタが作業するにはここの場所は完璧な場所で、なぜなら、 特に、スプーリングディレクトリのディ スクの空き容量は (ときどき) /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
ここまでに述べてきたフィルタによって、 印字環境の能率が上がったことと思います。しかし、 これはどのフィルタを使うかを (lpr(1) のコマンドライン上で) ユーザが指定しなくてはならないという代価を支払って実現されています。 コンピュータの事情にあまり詳しくないユーザにとって、 フィルタのオプションを指定させられるということは いらいらさせられるものになるでしょう。更に悪いことに、 間違ったフィルタオプションを指定されると、 間違った形式のファイルがそのフィルタに適用されることになり、 その結果、何百枚もの紙を吐き出すことになるかもしれません。
そのような結果になるならば、 変換フィルタをインストールするよりもむしろ、 テキストフィルタ (これがデフォルトフィルタなので) に印字するよう要求されたファイルの形式を検出させ、自動的に、 適切な変換フィルタを起動するようにしたいと思うかもしれません。 ここでは file コマンドのようなツールを役立たせることができます。 もちろん、いくつかの ファイル形式の違いを見分けることは難しいことでしょう。 そして、もちろん、それらのファイルに対しては、 変換フィルタを提供するだけで済ますこともできるのです。
FreeBSD Ports Collection には、apsfilter (print/apsfilter) と呼ばれる自動変換をおこなうテキストフィルタがあります。 このフィルタは プレインテキスト、PostScript, DVI など、ほとんどすべてのファイル形式を検出し、適当な変換をおこなった後、 データを印字することができます。
LPD スプーリングシステムでは、 ここまでにまだ取り上げていないフィルタ形式、 出力フィルタをサポートしています。出力フィルタは、 テキストフィルタのように、 プレインテキストのみを印字するために意図されたものですが、 非常に簡単化されています。テキストフィルタを用いずに、 出力フィルタを使っている場合は、次のようになります。
LPD はジョブ中の各ファイルに一度ではなく、 ジョブ全体に対して一度だけ出力フィルタを起動します。
LPD は出力フィルタに対し、 ジョブ中のファイルの先頭や末尾を特定するための対策を 一切おこなっていません。
LPD はユーザのログイン名やホスト名をフィルタに渡しません。 したがって、課金の処理をおこなうことは考えていません。 実際、出力フィルタには、以下2つの引数しか与えられません。
filter-name -wwidth -llength
ここで、width は対象となるプリンタの pw 項目、 length は pl 項目に指定された数です。
出力フィルタの簡便さに誘惑されてはいけません。もし、 ジョブ中のそれぞれのファイルに別のページ番号を付加しようとしても、 出力フィルタはうまく動作しないでしょう。 そのような動作を期待しているならば、 (入力フィルタとしても知られている) テキストフィルタを使ってください。 詳しくは、「 テキストフィルタのインストール」をご覧ください。 さらに、出力フィルタは、実のところ、 もっと複雑になっています。まず、 特殊なフラグ文字を検出するために、 フィルタに送られてくるバイトストリームを検査する必要があります。 また、LPD に代わって、 自分自身にシグナルを送らなければなりません。
しかしながら、ヘッダページの印字をおこないたくて、 エスケープシーケンスやヘッダページを印字できるようにするその他の初期化文字列を送信する必要がある場合は、 出力ファイルが必要です。 (しかし、 ヘッダページを要求したユーザに対して課金しようとするのもまた無駄なことです。 LPD は出力フィルタにユーザやホストの情報を渡しません)。
1 台のプリンタに対し、LPD では出力フィルタとテキストやその他のフィルタを両方使うことができます。 このような場合、LPD はヘッダページ (「 ヘッダページ」 を参照してください) だけを印字させるために、出力フィルタを起動させます。 それから LPD では、出力フィルタに 2 バイトの文字 (ASCII 031 の次に ASCII 001) を送ることで、 出力フィルタが自分自身を停止することを期待しています。 2 バイト (031, 001) が出力フィルタに送られたとき、 出力フィルタは自分自身にシグナル SIGSTOP を送ることによって停止するはずです。 LPD がその他のフィルタを動かし終わると、 出力フィルタにシグナル SIGCONT を送って、出力フィルタを再起動します。
出力フィルタがあり、 テキストフィルタがない場合、 LPD はプレインテキストジョブを扱う場合に、 出力フィルタを使います。前述したように、出力フィルタでは、 ジョブ中の各ファイルの間に FORM FEED 文字や紙を送る他の文字を入れることはしません。 この動作は多分、 あなたが求めているものとは異なっているでしょう。 ほとんどの場合において、テキストフィルタが必要なはずです。
プログラム lpf は、 テキストフィルタの項で既に紹介しましたが、 出力フィルタとしても動作させることができます。もし、 簡便で極悪な出力フィルタが必要で、かつ、 バイトストリームを検査したりシグナルを送るコードを書きたくないときには、 lpf をお試しください。 あるいは、プリントが要求する初期化コードを送るために、 lpf をシェルスクリプトに包んで使うこともできます。
プログラム /usr/libexec/lpr/lpf は、 FreeBSD の
バイナリ配布に付属しているテキストフィルタ (入力フィルタ) で、出力を字下げしたり
(lpr -i でジョブが入力さ
れたとき)、 文字を未処理のままプリンタに送ったり (lpr
-l でジョブが入力されたとき)、
ジョブ中のバックスペースやタブの印字位置を調節したり、
印字したページに対して課金したりすることができます。また、
このフィルタは出力フィルタとしても動作させることができます。
lpf フィルタは多くの印字環境において使用することに適しています。 このフィルタには、プリンタに初期化文字列を送る機能はありませんが、 必要とされる初期化をおこない、それから lpf を実行させるためのシェルスクリプトを作成するのはたやすいことです。
lpf に対して、 印字ページへの課金を正確におこなわせるためには、 /etc/printcap ファイルの中の pw と pl の項目に正確な値を入れておく必要があります。これらの値は、 どのくらいの量のテキストがページにフィットするか、また、 ユーザのジョブが何ページあるのかを調べるために使われます。 プリンタの課金についての詳しい情報については、「 プリンタの利用に対する課金」をご覧ください。
あなたが管理するシステムのユーザが たくさんおり、 ユーザ全員が様々なプリンタを使用する場合、多分、 必要悪であるヘッダページを 印字させることを検討したいと思うかもしれません。
ヘッダページは、バナー とか バーストページ としても知られていますが、 出力されたジョブが誰によるものなのかを特定させる働きがあります。 印字結果の山の中において、 ユーザのジョブによって印字された本物のドキュメント部分よりも際立たせるために、 ヘッダページは、通常、多分、縁が装飾されている大きな太文字で印字されます。 ヘッダページにより、 ユーザは自分が出したジョブがどこにあるのかをすばやく見つけることができます。 ヘッダページの欠点は、明らかに、すべてのジョブに対して、 紙が 1 枚余分に印字されるということです。 この紙の有効期間は短く、2 〜 3 分も続きません。最終的に、 これらの紙は再利用紙入れの中かくずの山に入れられることでしょう (ヘッダページはジョブ中の各ファイル毎に印字されるのではなく、 ジョブ毎に印字されるということに注意してください。したがって、 紙の消費はそれほどひどくはないかもしれません)。
もし、 プリンタがプレインテキストを直接印字できるならば、LPD システムは印字物に対して自動的にヘッダページを付けることができます。 PostScript プリンタを使っている場合は、 ヘッダページを生成する外部プログラムが必要になります。これについては、 「PostScript プリンタでのヘッダページ」をご覧ください。
「プリンタ設定導入編 」節では、/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)
のオプションについては、 「
ヘッダページ用オプション」節をご覧ください。
Note: LPD では、ヘッダページの最後に、 FORM FEED 文字が印字されます。 プリンタに紙排出をさせるために、別な文字、 もしくは、別な文字列が利用されている場合は、 /etc/printcap 中の ff 項目で指定することができます。
ヘッダページの印字が許可されていると、LPD は 長いヘッダを作ります。これには、 紙全面に大きな文字でユーザ名、ホスト名、 ジョブ名が書かれています。次に、このヘッダページの例を示 します (kelly がジョブ名 “outline” を rose というホストから印字 された場合)。
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/printcap で hl (header last) を指定してください。
LPD に備わっているヘッダページ出力機能を使うと、 入力されたジョブに対して課金をおこなうことができても、 ヘッダページは無料で提供しなくてはならない、 という特有のやり方を強要されます。
なぜでしょうか。
出力フィルタは単なる外部プログラムなので、
課金をするための制御をおこなうとすれば、
それはヘッダページを印字するときですが、出力フィルタには、 ユーザ名とホスト名
の情報や課金情報を格納するファイルがどれな
のかということが知らされません。それゆえ、出力ファイルには、
誰にプリンタ利用の課金をおこなえばよいのかが分からないのです。
テキストフィルタやその他の変換フィルタ
(これらのフィルタはユーザやホストの情報が知らされます) が出力ページの枚数に
“1 ページ分水増しする” だけでは十分ではありません。 なぜなら、ユーザは
lpr -h に
よってヘッダページの出力を止めることができるからです。 やみくもに 1
ページを水増しすると、 印字されてもいないヘッダページに対する
料金をとることになります。基本的に、lpr -h は環境に優しい心を持つユーザに好まれるオプションですが、
これを使うように奨励することもできません。
各々のフィルタに独自のヘッダページを生成させる
(その結果、ヘッダページに課金することができる) という方法でも十分であるとはいえません。 この場合、LPD はフィルタに -h
の情報を送りませんので、lpr -h
によってヘッダページを印字しないオプションを選択したとしても、
依然としてヘッダページは印字され、 その分の課金がおこなわれてしまいます。
では、どのような選択肢があるのでしょうか。
ヘッダページへの課金に関しては、 次のことができます。
LPD のやり方を受け入れ、 ヘッダページは無料とする。
LPRng などの LPD の代替品をインストールする。 LPD と入れ替えが可能な他のスプーリングソフトウェアに関しては、 標準スプーラの代替品 をご覧ください。
スマートな 出力フィルタを作成する。通常、 出力フィルタはプリンタを初期化するか、 単純な文字列変換をする程度の働きしかしません。 (テキスト (入力) フィルタがない場合) 出力フィルタはヘッダページとプレインテキストの印字をおこなうのに適しています。 プレインテキストを印字するためのテキストフィルタがない場合、 LPD はヘッダページを印字するためだけの目的で出力フィルタを起動します。 そして、LPD が生成するヘッダページのテキストを解析することにより、 出力フィルタはヘッダページに課金するために必要なユーザ名と ホスト名を取得することができます。この方式の唯一の問題点は、 出力フィルタは課金情報を格納するデータファイルの名前を知ることが できないということです (af 項目で指定されたファイル名は 出力ファイルに渡されません)。しかし、既知の 名前の課金データファイルを使うのならば、 その名前を出力フィルタのプログラム中に埋め込むことができます。 解析の手順を簡単にするためには、 /etc/printcap で sh 項目 (短いヘッダを指定) を使うとよいでしょう。 そしてまた、 ここまでの方法は少なからぬトラブルを生じさせるかもしれません。 そうなれば、もちろんユーザはヘッダページを無料で 提供してくれる気前のよいシステム管理者に感謝することでしょう。
これまでに述べたように、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 はヘッダページに対して課金をおこないませんので注意してください。
FreeBSD では、ネットワーク越しの印字、すなわち、 ジョブをリモートプリンタに送ることをサポートしています。 リモートプリンタからの出力をするには、一般に、 次の 2 つを参照してください。
リモートホストに接続されたプリンタにアクセスする方法。 プリンタがあるホストのシリアル、 または、パラレルインタフェースに接続されている場合、 ネットワーク上の他のホストからこのプリンタにアクセスできるように LPD を設定します。「リモートホストに 接続されたプリンタ」 でどのようにするかを説明します。
ネットワークに直接接続されているプリンタにアクセスする方法。 プリンタに、旧来のシリアル、または、 パラレルインタフェースに加えて (もしくは、これらに代わって) ネットワーク用のインタフェースがある場合。 そのようなプリンタは次のように動作するでしょう。
そのプリンタが LPD のプロトコルを理解でき、リモートホストからのジョブを キューに入れることさえできる場合。この場合、 プリンタは、LPD が起動している一般のホストのように振る舞います。 そのようなプリンタを設定するために、 「 リモートホストに接続されたプリンタ」 と同様の手順をおこなってください。
そのプリンタが、 データストリームによるネットワーク接続をサポートしている場合。 この場合、ネットワーク上の1つのホストとしてプリンタを “接続” します。 このホストは、ジョブをスプーリングする責任を負い、 スプーリングされたジョブはプリンタに送られます。 そのようなプリンタをインストールするためのいくつかの提案が 「 ネットワークにおけるデータストリームの インタフェースを持つプリンタ」にあります。
LPD スプーリングシステムでは LPD (または LPD 互換のシステム) が起動している他のホストへジョブを送る機能が 始めからサポートされています。この機能により、 あるホストに接続されたプリンタへ、 他のホストからアクセスできるようになります。また、 LPD プロトコルを理解するネットワークインタフェースを持ったプリンタに対しても、 この機能は働きます。
リモートプリンタへの出力を許可するためには、最初に、 あるホスト (これを、 プリンタホストと呼びます) にプリンタを接続します。そして、「 プリンタ設定導入編」 に書かれた簡単なプリンタの設定をおこなってください。 必要ならば、「プリンタ設定上級編」 にある、更に進んだ設定をおこなってください。そして、 そのプリンタをテストしてうまく動作することを確認し、LPD に許可した機能がうまく働くかどうかを見てください。さらに ローカルホストが プリンタホストの LPD サービスの使用を許可されているか確認して下さい (「 リモートホストからの利用を制限する 」参照)。
LPD 互換のネットワークインタフェースを持つプリンタを使用している場合は、 そのプリンタ自身が以下で説明する プリンタホストになります。そして、 プリンタ名とは、 そのプリンタに設定した名前のことを指します。 これについては、プリンタ、および (または)、 プリンタのネットワークインタフェースに付属するドキュメントを参照してください。
Tip: ヒューレット・パッカード社の Laserjet シリーズを使用している場合には、 プリンタ名を text とすると、 自動的に LF から CRLF への変換が行なわれます。 そのため、hpif スクリプトは必要ありません。
次に、 そのプリンタにアクセスしたいと思っている他ホストにおいて、 そのホストの /etc/printcap ファイルに次にあげるエントリを作ります。
名前のエントリ。どんな名前でもよいのですが、簡単のため、多分、 プリンタホストで設定されたプリンタ名や別名と同じものを使いたいと思うでしょう。
lp 項目で指定されるデバイスは明示的に空にします (:lp=: とします)。
スプーリングディレクトリを作成し、 sd 項目でその位置を指定します。 LPD では、プリンタホストにジョブを送信するまでの間、 このディレクトリにジョブを格納します。
rm 項目でプリンタホストの名前を指定します。
rp 項目で プリンタホストに接続したプリンタ名を指定します。
これで終わりです。 変換フィルタやページの大きさやその他の事項を /etc/printcap に加える必要はありません。
次に、 リモートホストに接続されたプリンタで印字するための設定例を示します。 ホスト rose には 2 台のプリンタ bamboo と rattan が接続されています。これらのプリンタをホスト 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 のユーザが rattan と bamboo で印字することができるようになりました。 たとえば、orchid のユーザが次のように入力したとします。
% lpr-Pbamboo-dsushi-review.dvi
すると、orchid の LPD システムは、 ジョブをスプーリングディレクトリ /var/spool/lpd/bamboo にコピーし、これが DVI ファイルを印字するジョブであることを記録します。 ホスト rose の bamboo スプーリングディレクトリに十分な容量が確保でき次第、 両者の LPD は、ジョブのファイルを rose に転送します。 このファイルは、そのすべてが印字されるまで、rose のキューに留まります。 (bamboo は PostScript プリンタなので) DVI から PostScript への変換は rose でおこなわれます。
プリンタのネットワークインタフェースカードは、 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
本節では、プリンタの利用に制約を与えるための情報を記しています。 LPD システムでは、プリンタ (ローカル、 リモートのいずれに接続されていても) にアクセスできる人を制限する機能、 複数部のコピーの印字の可否を制御する機能、 ジョブのサイズの最大値やプリンタキューに入る ジョブの最大個数を制御する機能を提供しています。
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/ttyd5: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
このような悪用を防ぐ方法は (その指示を無視することも含めて) たくさんあります。 各自で調べてみてください。
それぞれのプリンタを使用できる人を限定するには、UNIX の グループ権限のメカニズムを利用し、さらに、 /etc/printcap で rg 項目を指定することでおこないます。 あるプリンタにアクセスさせてもよいと思うユーザすべてを グループのどれかに入れてください。そして、 そのグループ名を 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/ttyd5:ms#-parenb cs8 clocal crtscts:rw:\
:if=/usr/local/libexec/psif:\
:df=/usr/local/libexec/psdf:
これ以外の /etc/printcap ファイル (ホスト orchid のもの) はそのままにしておくことにします。もちろん、 orchid のユーザは全員 bamboo を利用することができます。これは、 orchid には特定のユーザのみにしかアクセスさせておらず、 そのユーザにはプリンタを利用させたいと思っているからなのかもしれませんし、 そうでないかもしれません。
Note: 1台のプリンタを複数グループのユーザに利用させることはできません。
たくさんのユーザからプリンタが利用される場合には、多分、 ユーザが印字要求を出すことができるファイルのサイズに 上限値を置く必要が生じるでしょう。結局のところ、 スプーリングディレクトリ が置かれているファイルシステムの空き容量がその 上限値になる訳ですが、 あるユーザがこれを独占的に使用すること避けるために、 他ユーザからのジョブ用の空き容量を確保する必要もあります。
LPD では、mx 項目を指定することにより、 ジョブ中の個々のファイルのサイズの上限値を制限する機能を提供しています。 指定される ファイルサイズの単位は BUFSIZ ブロックで、1 BUFSIZ ブロックは 1024バイトを表わします。この mx 項目の値として 0 が指定されると、 ファイルサイズの制限はなくなります。 mx が指定されない場合は、 デフォルトの制限として 1000 ブロックが使われます。
Note: この制限はジョブ中の各 ファイルに対して適用されるものであり、 ジョブ全体のサイズ を制限するものではありません。
ところで、 プリンタに設定された上限値を超えるファイルサイズの ファイルが入力された場合でも、LPD はこれを拒否しません。その代わりに、このファイルは、 その先頭から上限値のファイルサイズまでしかキューに入れられません。 そして、その部分までが印字され、 残りの部分は捨てられます。 これが正しい動作といえるのかどうかは議論の余地があるところです。
それでは、設定例に登場しているプリンタ rattan と bamboo の印字可能なファイルサイズに制限を加えてみましょう。 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/ttyd5:ms#-parenb cs8 clocal crtscts:rw:\
:if=/usr/local/libexec/psif:\
:df=/usr/local/libexec/psdf:
この場合もそうですが、この制限はローカル (ホスト rose) のユーザのみに適用されます。 リモートホストからプリンタを利用できるように設定している場合は、 そのリモートホストのユーザはこの制限を受けません。 これらのユーザにも制限を加える場合は、リモートホストの /etc/printcap の mx を指定する必要があります。 リモートホストから印字するための詳しい情報については、 「 リモートホストに接続されたプリンタ」 を参照してください。
リモートホストに接続されたプリンタへのジョブの サイズを制限する特別な方法は他にもあります。これについては、 「 リモートホストからの利用を制限する」 を参照してください。
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 からの要求を受け付けることになります。 その他のホストが rose の LPD にアクセスしようとしても、 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/ttyd5: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/printcap の rs 項目を指定することで、 ローカルプリンタを利用できるリモートホストのユーザを制限することができます。 ローカルホストに接続されたプリンタ用のエントリに rs 項目が指定されている場合、 LPD は、印字を要求したユーザのアカウントと同じログイン名が ローカルホストに登録されている場合に限り、 そのジョブを受け付けます。それ以外のジョブを LPD は拒否します。
この機能は、(たとえば) 複数の部署がネットワークを共有しており、 この内のあるユーザが部署の境界を越えて活動している場合には特に有用です。 そのようなユーザに対して、システムのアカウントを与えるだけで、 これらのユーザは自分が所属する部署のシステムから そのシステムに接続されているプリンタを使用することができます。 これらのユーザにはむしろ、 プリンタの使用だけを認め、 その他のコンピュータ資源を利用させたくないときは、 それらのユーザにはホームディレクトリを与えず、 ログインシェルはシェルとしては何の役にも立たない /usr/bin/false などを指定して、 これらのユーザのアカウントはプリンタ用の “形式的な” ものとします。
という訳で、印字するためには料金をとることが必要です。 取らない理由などありましょうか。紙やインクにはお金がかかります。 そして、プリンタの維持費もかかります。 プリンタには可動部分が搭載されており、 これらの部分は壊れやすいという傾向があります。 プリンタや、その利用形態、維持費について調査をし、1 ページ (1 フィート、1 メートルなど) 当たりにかかるコストを調べておいてください。 これに基づき、プリンタの利用に対する課金を、実際に、 どのように始めればよいのでしょうか。
さて、残念ながら、この部分に関しては LPD スプーリングシステムはほとんど役に立ちません。 課金は使用しているプリンタの種類、印字するもののファイルの形式、 プリンタの利用に対する課金での あなた自身の要求に大きく左右されます。
課金システムを実現するためには、プリンタのテキストフィルタ (プレインテキストのジョブに対して課金するため) と変換フィルタ (その他のファイル形式に対して課金するため) を変更して、 印字したページを数えたり、 プリンタに印字したページ数を取得するための要求を送る必要があります。 ただし、出力フィルタのみを利用している場合は、 課金をおこなうことができません。フィルタに関しては、 「 フィルタ」をご覧ください。
一般に、課金方式には次の 2 つがあります。
定期的に課金する方法 はよく利用される方法です。この理由は、 恐らく比較的簡単に実現できるからです。 誰かがジョブを印字する度に、フィルタはそのユーザ名、 ホスト名、印字したページ数を課金データファイルに記録します。 毎月、毎学期、毎年、その他お好みの時期に、 各プリンタの課金用ファイルを集め、 それぞれのユーザが印字したページ数を合計して その分の課金をおこないます。 次回の課金期間をデータを 0 にして課金を再開するために、 すべてのログファイルを削除します。
利用毎に課金する方法 はあまり利用されていません。これは、 実現するのが比較的難しいからです。この方式では、 プリンタを使用したらすぐに、 フィルタがユーザにその利用に対する課金をおこないます。 ディスククォータのように、課金作業は瞬時におこなわれます。 この方式では、ユーザのアカウントが赤字になる場合に、 ユーザが印字をおこなうことを拒否することができます。 また、ユーザに “プリンタ版 quota” を調べたり、 調整したりする方法を提供したいと思うかもしれ ません。 これを実現するためには、ユーザとその quota を追跡するために、 あるデータベース用のコードが必要となります。
LPD スプーリングシステムでは、 どちらの方式にも簡単に対応できます。(ほとんどの場合は) フィルタを用意しなければならないので、 課金作業のためのコードも用意しなければなりません。 しかし、明るい面もあります。 それは、課金方式に関して、非常に大きな柔軟性が与えられたということです。 たとえば、「定期的に課金する方法」か、 「利用毎に課金する方法」のどちらかを選びまず、そして、 どんな情報 (ユーザ名、ホスト名、ジョブのタイプ、印字された頁数、 使用した紙の大きさ、印字をするために要した時間など) をログに記録するかを決めます。 以上のことをおこなうには、上記の情報を保持するために、 フィルタを変更しなくてはなりません。
FreeBSD には、「定期的に課金する方法」による課金を すぐに設定できるように、2 個のプログラムを添付しています。 その内の1つはテキストフィルタ lpf で、 これについては、「 テキストフィルタ lpf」をご覧ください。もう1つは、 pac(8) で、 これはプリンタの課金データファイルからのエントリを集め、 これを合計するプログラムです。
「 フィルタはどのように機能しているか」で述べたように、 LPD ではテキストフィルタや変換フィルタを起動しますが、 そのコマンドラインで使用している課金データファイルの名前が指定されます。 両フィルタはこの引数を使って、 どの課金データファイルのエントリに書き込めばよいのかを知ることができます。 このファイルの名前は /etc/printcap 中の af 項目によって指定されます。 このファイルが絶対パ スで指定されない場合は、 スプーリングディレクトリからの相対パスとして扱われます。
LPD は、紙のページの幅と行数 (pw と pl 項目で 指定される) を引数として 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/printcap の af が絶対パスで指定されていた場合に限り、動作します。
-cユーザ名のアルファベット順ではなく、 課金額の低い順にリストを並べます。
-m課金データファイルにあるホスト名を無視します。 このオプションを使用すると、ホスト alpha のユーザ smith とホスト gamma のユーザ smith は同一人物として扱われます。 このオプションが指定されない場合は、 両者は別なユーザとして扱います。
-pprice/etc/printcap の pc 項目で指定された値、または、 デフォルトの値 (2 セント) に代わり、紙1ページ、または、 1フィート当たりの価格を指定します。 price として、 浮動小数点数を指定することができます。
-rリストの並べる順番を逆順にします。
-s課金リストを作成し、 課金データファイルを削除します。
ユーザ 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)
が起動されると、 その時点までの累計金額を得るために、
課金データ累計ファイルが読み込まれ、
通常の課金データファイルからの情報に加算されます。
課金を、リモートホストからの印字でさえも、 正確におこなうためには、 ジョブで使用された紙が何ページであるかを特定できる必要があります。 このことは、プリンタ利用に対する課金をおこなう上の根本的な問題です。
プレインテキストのジョブの場合、 問題を解決するのはさほど難しくはありません。 ジョブが何行であったかを数え、プリンタがサポートしている紙 1 ページに印字できる最大の行数と比較すればよいのです。 重ね打ちするために利用されるファイル中のバックスペース文字や、 物理的に複数の行に渡る長い論理行に対する取り扱いを忘れずにおこなってください。
(「テキストフィルタ lpf」で紹介した) テキストフィルタ lpf では、課金をおこなうときに、 これらの取り扱いをおこなってくれます。 課金をおこなうために必要なテキストフィルタを作成している方は、 lpf のソースコードが参考になるでしょう。
これに対して、他のファイル形式の処理はどのようにすれば よいのでしょうか。
まず、DVI から LaserJet, または、DVI から PostScript への変換の場合、フィルタが dvilj や dvips の 出力メッセージを解析することで、 何ページ分の変換がおこなわれたかを知ることができます。 他のファイル形式とその変換プログラムに関しても、 同様のことができるかもしれません。
しかし、この方式には問題点があります。それは、 変換されたページがすべて印字されるとは限らないということです。 たとえば、プリンタが紙詰まりを起こしたり、トナー切れになったり、 はたまた、爆発したりするかもしれません。 そのような状況により印字が途中で中止されたとしても、この方式では、 ユーザは全ページ分の料金を課されてしまうのです。
それでは、どのような対策をたてることができるのでしょうか。
正確な 課金をおこなうための唯一の確実な方法は、 何ページ印字したのかを知らせることができるプリンタを入手し、 これをシリアルポートかネットワークに接続することです。 ほとんどすべての PostScript プリンタではこの概念がサポートされています。 他のプリンタも同様です (Imagen レーザプリンタをネットワーク接続するなど)。 それぞれのプリンタのフィルタを、 ジョブを印字した後で印字ページ数を得るように変更してください。 そして、課金情報はここで得られた値のみに 基づいて記録してください。行数を数えたり、 エラーが生じやすいファイルの調査は必要とされません。
もちろん、 気前よく印字料金をすべて無料にすることもできます。
この節では、FreeBSD で設定したプリンタを使う方法について説明します。 ここでは、ユーザレベルでのコマンドを概説します。
また、「プリンタの管理」 節で説明されている管理者用コマンド lpc(8) もあり、 プリンタやそのキューの制御のために用いられています。
lpr(1)、lprm(1)、そして lpq(1) の 3
コマンドは、-Pprinter-name オプションをとり、これによって、 /etc/printcap のように操作の対象となる
プリンタやキューを指定します。 これによって、様々なプリンタに対してジョブを送る、
取り消す、調査することができます。 -P
が使われなかった場合は、これらのコマンドは PRINTER
環境変数で指定されたプリンタを使用します。 そして、PRINTER
環境変数がなかった場合は、 これらのコマンドはデフォルトのプリンタ lp を使います。
以下では、デフォルトプリンタ という用語が意味するプリンタは、PRINTER 環境変数で指定されたプリンタ、もしくは、PRINTER 環境変数がない場合は、lp という名前のプリンタです。
ファイルを印字するためには、 次のように入力してください。
% lpr filename ...
これにより、 入力されたファイルのそれぞれをデフォルトのプリンタ から印字します。ファイル名が与えられなかった場合、 lpr(1) は標準入力から印字するデータを読み込みます。たとえば、 次のコマンドにより、ある重要なシステムファイルが印字されます。
% lpr /etc/host.conf /etc/hosts.equiv
印字させるプリンタを選択するためには、 次のように入力します。
% lpr -P printer-name filename ...
次の例では、プリンタ rattan に、 カレントディレクトリにあるファイルの詳細なリストを印字しています。
% ls-l| lpr-Prattan
上記の lpr(1)
コマンドではファイル名の指定がないので、 lpr
は標準入力から印字するデータ、 この場合、ls -l コマンドの出力、を読み込みます。
lpr(1) コマンドでは、 出力の整形を制御したり、ファイル変換を適用したり、 複数部数のコピーを作成したり、 などといた様々な幅広いオプションを受け付けることもできます。 詳細については、 「 その他の印字オプション」をご覧ください。
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
印字するようジョブを 送った後で印字を中断したくなったときは、 lprm(1) コマンドで、 キューの中からそのジョブを削除することができます。 大抵の場合、アクティブジョブでさえも lprm(1) を使って削除することができますが、 そのジョブの一部またはすべてが印字されてしまうかもしれません。
デフォルトプリンタへのジョブを削除するためには、最初に、 lpq(1) を使ってそのジョブ番号を調べます。 すなわち、それから、 次のように入力して、ジョブを削除します。
% lprm job-number
特定のプリンタへのジョブを削除するときは、 -P
オプションを使ってそのプリンタを指定します。 たとえば、プリンタ bamboo のキューからジョブ番号 10
のジョブを削除するには次のようにします。
% lprm -P bamboo 10
lprm(1) コマンドには略記法がいくつかあります。
あなたが (デフォルトプリンタへ) 送ったジョブをすべて削除します。
ユーザ user が (デフォルトプリンタへ) 送ったジョブをすべて削除します。 他のユーザのジョブを削除できるのはスーパユーザだけです。 あなたは、あなた自身のジョブしか削除することはできません。
ジョブ番号もユーザ名もシンボル -も指定されないときは、 lprm(1)
は現在のアクティブジョブを、 そのジョブを送ったのがあなた自身であるときに限り、
デフォルトプリンタから削除します。ただし、
スーパユーザは任意のアクティブジョブを削除することができます。
上記の略記法をデフォルトプリンタではなく
特定のプリンタに対しておこなうときは、-P
オプションでそのプリンタを指定するだけよいのです。たとえば、 プリンタ rattan のキューへあなたが送ったジョブを
すべて削除するためには次のようにします。
% lprm -P rattan -
Note: ネットワーク環境で作業をしている場合、 あるホストから送られたプリンタジョブは、これを送ったホストで lprm(1) を使った場合に限って、 これを削除することができます。 他のホストで同じプリンタを使えたとしても、 このジョブを削除することはできません。 次の例では、他ホストからジョブを削除することを試みています。
% lpr-Prattan myfile % rlogin orchid % lpq-Prattan Rank Owner Job Files Total Size active seeyan 12 ... 49123 bytes 2nd kelly 13 myfile 12 bytes % lprm-Prattan 13 rose: Permission denied % logout % lprm-Prattan 13 dfA013rose dequeued cfA013rose dequeued
lpr(1) コマンドには、テキストの整形や、 図や他のファイル形式の変換、複数部コピーの生成、 ジョブの扱いなどを制御することができます。 この節では、これに関するオプションについて記しています。
以下の lpr(1) 用のオプションはジョブにおける ファイルの整形の制御に関するものです。 このオプションは、ジョブにプレインテキストが含まれない場合や pr(1) ユーティリティを使ってプレインテキストを整形する場合に用いてください。
次の例では、プリンタ bamboo に (TeX 組版システムによる) DVI ファイル fish-report.dvi を印字しています。
% lpr -P bamboo -d fish-report.dvi
このオプションは、 ジョブに含まれるすべてのファイルに対して適用されます。 したがって、1 つのジョブに (たとえば) DVI ファイルと ditroff ファイルを混在させることはできません。その代わりに、 ファイルを形式毎に別々のジョブに分け、 それぞれのジョブでその形式用の変換オプションを使って印字してください。
Note:
-pと-Tを除くすべてのオプションを使用 するためには、 出力先プリンタ用の変換フィルタが必要です。たとえば、-dオプションを使用するには、DVI 用の変換フィルタが必要 です。詳細については、「 変換フィルタ」で説明しています。
-ccifplot ファイルを印字します。
-dDVI ファイルを印字します。
-fFORTRAN プログラムを印字します。
-gplot のデータを印字します。
-i number出力に対して、number カラム分の字下げをおこないます。 number が省略されると、 8 カラム分字下げされます。 このオプションはある変換フィルタと一緒の指定されたときのみに機能します。
Note:
-iと数字の間に空白を入れてはいけません。
-l制御文字を含む文字通りのテキストデータを印字します。
-nditroff (device independent troff) データを印字します。
-T titlepr(1)
コマンドにより生成されるヘッダを、 ファイル名の代わりに title とする。 このオプションは、-p と一緒に使ったときのみ機能する。
-ttroff データを印字します。
-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
の形式から、デフォルトプリンタが解釈できる形式へと変換されます。
以下のオプションは、lpr(1) によって、 そのジョブを特殊な扱いにするよう LPD に指示するためのものです。
ジョブに含まれるファイルのそれぞれを 1 部だけ印字するのではなく、 copies 部のコピーを生成させるものです。管理者によっては、 プリンタの消耗を避け、コピー機による複製を奨励するために このオプションの使用が禁止されているかもしれません。 これに関しては、「 複数部のコピーの印字を制限する 」をご覧ください。
次の例では、デフォルトプリンタで parser.c を 3 部コピーし、次に、 parser.h を 3 部コピーしています。
% lpr -#3 parser.c parser.h
印字ジョブが完了した後で、メールを送ります。 このオプションを付けると、LPD システムはジョブの処理が終了したときに、 あなたのアカウントにメールを送ります。 メールのメッセージには、ジョブが正常終了したのか、あるいは、 何か異常があり、(しばしば) その異常が何であったのかが書かれています。
印字ファイルをスプールディレクトリにコピーせず、 代わりに、 シンボリックリンクを作成するよう指示します。
印字させるジョブのサイズが大きいとき、 このオプションを使うと便利かもしれません。このオプションにより、 スプー ルディレクトリの容量が節約されます (それに、 巨大なジョブのお陰でスプールディレクトリのあるファイルシステムの空き容量がなくなってしまうかもしれません)。 さらに、LPD がいちいちすべてのデータをコピーする必要がなくなりますので、 時間の節約にもなります。
ただし、欠点もあります。LPD はオリジナルのファイルを直接参照するので、 印字が終了するまでそのファイルを変更したり削除することができません。
Note: リモートのプリンタで印字している場合、 LPD は、結局のところ、 ローカルホストからリモートホストにファイルをコピーする必要があります。 したがって、
-sオプションはローカルのスプーリングディレクトリの空き容量を節約するだけで、 リモート側では節約されません。 それでも、このオプションは有用です。
ジョブに含まれるファイルを、 スプーリングディレクトリに
ファイルをコピーした後に削除します。もしくは、 -s オプションと一緒に使われた場合は、
印字終了後に削除されます。
このオプションの使用には十分注意して下さい。
以下のオプションにより、 ジョブのヘッダページに通常印字さ れるテキストを lpr(1) に調整させることができます。 対象のプリンタからヘッダページが出力されない場合は、 これらのオプションは何の効力も持ちません。 ヘッダページの設定に関する情報については、 「 ヘッダページ」を参照してください。
ヘッダページに印字されるホスト名を text に置き換えます。なお、 ホスト名の場所には、通常、 ジョブの要求があったホストの名前が印字されます。
ヘッダページに印字されるジョブ名を text に置き換えます。 ジョブ名の場所には、通常、ジョブの最初のファイル名、 または、標準入力からデータが印字されたときは stdin が印字されます。
ヘッダページの出力を禁止します。
Note: サイトによっては、 そのヘッダページの生成方法により、 このオプションの効果が現れないかもしれません。 詳細は、「 ヘッダページ」をご覧ください。
プリンタの管理者として、プリンタの設置、設定、 そして、それらのテストをおこなう必要がありました。 lpc(8) コマンドにより、 これまでとは別な管理方法がプリンタと対話的におこなわれます。 lpc(8) により、次のことが可能となります。
プリンタの起動、停止をおこなう。
キューへの入力の許可、禁止をおこなう。
それぞれのキューにあるジョブの順番を変更する。
最初に用語に関する注意をしておきます。 プリンタが停止しているとは、 キューの中にあるどのジョブも印字されることがない状態 を言います。この状態においても、 ユーザはまだジョブの要求をおこなうことができますが、 これらのジョブはキューの中で、 プリンタがスタートする状態になるまで、 あるいは、キューの内容が削除されるまで待たされることになります。
キューが禁止状態にあると、 (root 以外の) すべてのユーザがプリンタにジョブを要求することができません。 キューが許可状態にある場合は、 ジョブの入力が許可されます。 キューが禁止状態にある場合でも、 プリンタをスタートす る状態にすることは可能です。この場合は、 キューが空になるまで、 キュー内のジョブの印字が続けられます。
一般的に、lpc(8) コマンドを使用するには root 権限を持っている必要があります。 一般のユーザも lpc(8) コマンドを使うことはできますが、 プリンタの状態を取得することとハングしたプリンタ を再スタートすることだけに使用が制限されています。
以下に、 lpc(8) コマンドに関する説明の要約を述べます。 ほとんどのコマンドでは、操作対象となるプリンタを指定するため printer-name 引数を与えます。 printer-name の代わりに all が与えられると、操作は /etc/printcap 内にある全プリンタに対しておこなわれることになります。
現在のジョブをキャンセルし、プリンタを停止させます。 キューが許可状態にある場合は、 ユーザはまだジョブを入力することができます。
プリンタのスプーリングディレクトリから、 ジョブの古いファイルを削除します。状況によって、 とりわけ、印字途中でエラーが発生していたり、 管理操作が頻発していた場合には、 ジョブで作られたファイルを LPD が完全に削除しないことがあります。このコマンドでは、 スプーリングディレクトリに入っていないファイルを見つけ出し、 それを削除しています。
キューに新しいジョブを入れることを禁止します。 プリンタが動作しているときは、 キューに残っているジョブの印字は続けられます。ただし、 キューが禁止状態にあったとしても、スーパーユーザ (root) は常にジョブを入力することができます。
このコマンドは、 新しいプリンタやフィルタを設置している間に使用すると有用です。 すなわち、キューを禁止状態にしておくと、 root によるジョブのみが入力されます。 そして、他のユーザは、テストが完了し、 enable コマンドでキューが再度許可状態になるまで、 ジョブの入力はできなくなります。
プリンタをダウンさせます。これは、 disable をおこなった後で、 stop をおこなった場合と等価になります。 message は、ユーザが lpq(1) コマンドでプリンタのキューの状態を調べたり、 lpc status でプリンタの状態を調べたときに、 プリンタの状況として表示されるメッセージです。
プリンタのキューを許可状態にします。 ユーザはジョブの入力ができるようになりますが、 プリンタがスタートの状態になるまでは、 プリンタからは何も印字されません。
command-name コマンドのヘルプメッセージを表示します。 command-name が指定されなかった場合は、 利用できるコマンドの要約が表示されます。
プリンタをスタートさせます。通常のユーザは、 LPD がある異常な状況でハングしたときに限り、 このコマンドを使用することができます。しかし、 stop または down コマンドにより、 停止状態にあるプリンタをスタートさせることはできません。 restart コマンドは、 abort の後に start をおこなったことと同じになります。
プリンタをスタートさせます。 プリンタのキューにあるジョブを印字することでしょう。
プリンタを停止します。プリンタは、 現在のジョブを終了させ、そして、 キューにあるその他のジョブは印字しません。 プリンタが停止状態にあったとしても、まだ、 許可状態にあるキューに対して、ジョブを送ることができます。
printer-name のキューに対して、ジョブ番号 job のジョブ、または、ユーザ username から送られたジョブを置き換えて、キューの先頭に持ってきます。 このコマンドに関しては、 printer-name の代わりに all を使用することはできません。
プリンタをアップ状態にします。これの反対のコマンドが down です。start の次に enable をおこなったことと等しくなります。
コマンドラインから上記のコマンドを入力すると、 lpc(8) はこれを受け付けます。コマンドが入力されなかった場合は、 lpc(8) は対話モードに入り、 exit、quit、 または、 ファイル終端文字が入力されるまでコマンドの入力ができます。
このマニュアルを最初から通読されている方ならば、ここまでで、 FreeBSD 付属の LPD スプーリングシステムに関して知っておくべきことすべてを学ばれたことと思います。 多分、このシステムにあるたくさんの欠点について認識できたことでしょう。 そこから “(FreeBSD 上で動作する) スプーリングシステムには他にどのようなものがあるのか” という疑問が自然と湧いてきます。
“次世代 LPR” を称する LPRng は、 PLP を完全に書き換えたものです。 Patrick Powell と Justin Mason (PLP の主要な管理者) が共同で LPRng を作成しました。 LPRng の本サイトは http://www.lprng.org/ です。
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/ です
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 がプリンタに動作をして欲しいと思っている動作を以下に示します。
このように動作させるための方法がいくつかあります。
これらの文字の解釈を変えるために、 プリンタの設定スイッチかコントロールパネルを操作する方法。 どのようにして設定をするかはプリンタのマニュアルを参照してください。
Note: 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 の文字を次のような解釈をするようにしてください。
訳注: 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 を使います。
オリジナルは Brian N. Handy <handy@sxt4.physics.montana.edu>
と Rich Murphey <rich@FreeBSD.org> によるものですが、 Jim
Mock <jim@FreeBSD.org> が 2000 年 3 月 22
日に再構成と一部の更新を行ないました。
訳: はらだ きろう <kiroh@jp.FreeBSD.org>、1996 年 9 月 24
日
この章では FreeBSD における Linux バイナリとの互換機能について、 インストール方法やその仕組みを解説します。
現時点では、一体なぜ FreeBSD が Linux バイナリを実行できるようにならなければならないのか自問しているのではないでしょうか? 答えはきわめて簡単です。 Linux は現在コンピュータの世界では最も“ホットなモノ”なのでたくさんの会社や開発者たちが Linux のためだけに開発を行なっています。そのため、残された私たち FreeBSD ユーザは彼らに対して FreeBSD ネイティブなアプリケーションも出すように言うしかないのです。 問題は、FreeBSD バージョンも出した場合にどれくらいの数のユーザーが使うのかわからない、 ということであり、そのため Linux 版のみを開発しているということなのです。 そこで FreeBSD では Linux バイナリ互換機能が役に立つのです。
簡単に言ってしまえば、この機能により全ての Linux アプリケーションの 90% が修正なしに FreeBSD 上で起動できます。 この中には Star Office や Linux 版の Netscape、Adobe Acrobat、RealPlayer 5 と 7、 VMWare、Oracle、WordPerfect、Doom、Quake などがあります。 また、ある状況においては Linux バイナリを Linux で動かすよりも FreeBSD で動かすほうが良いパフォーマンスが出るという報告もあります。
しかしながら、いくつかの Linux に特有な OS の機能は FreeBSD ではサポートされていません。 例えば、Linux の /proc ファイルシステムを過度に使うような Linux バイナリは FreeBSD では動きません (FreeBSD の /proc ファイルシステムとは異なるのです) し、 仮想 8086 モードを有効にするような i386 特有の呼び出しも動きません。
Linux バイナリ互換モードのインストールに関しては次のセクションをご覧ください。
3.0-RELEASE以降であればカーネルのコンフィギュレーションファイルに options LINUX や options COMPAT_LINUX といった行を加える必要はありません。
Linux バイナリ互換機能は今は KLD オブジェクト (“Kernel LoaDable object”) として実現されており、リブートしなくても “on-the-fly” で組み込むことができるのですが、 /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 を利用します。
% kldstat Id Refs Address Size Name 1 2 0xc0100000 16bdb8 kernel 7 1 0xc24db000 d000 linux.ko
何らかの理由で Linux KLD をロードしたくない、 あるいはロードできないような場合には、 options LINUX をカーネルの設定ファイルに指定して、 Linux バイナリ互換機能をカーネルにスタティックリンクしてください。 そして、FreeBSD カーネルのコンフィギュレーション の記述にしたがって新しいカーネルをインストールしてください。
これは、linux_base の port を用いるか、もしくは手動でインストールします。
ランタイムライブラリをインストールするには最も簡単な方法です。 ports コレクションから他の port をインストールするのと全く同じようにできます。
# cd /usr/ports/emulators/linux_base # make install distclean
これで Linux バイナリ互換機能が使えるはずです。 いくつかのプログラムはシステムライブラリのマイナーバージョンが違うと文句を言うかもしれませんが一般的には大した問題ではありません。
“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 のバイナリも余計な作業をせずに動作させることができるようになります。
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
Note: 最初のカラムに表示されているファイルとメジャーバージョンが同じ 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
Note: シンボリックリンクのメカニズムは Linux バイナリにのみ必要なことに注意してください。 FreeBSD のランタイムリンカはメジャーリビジョン番号の一致したライブラリを検索するので、 ユーザが気にする必要はありません。
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 バイナリに自動的に適切なマークを付加するようになったので、 今後はこの作業もだんだんと必要なくなってゆくでしょう。
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 を削除してください。
Mathematica 4.x 用に Murray Stokely <murray@FreeBSD.org>
がアップデートし、Bojan Bistrovic <bojanb@physics.odu.edu>
がマージしました。
この章では、Mathematica 4.X Linux 版の FreeBSD へのインストールについて説明します。
Linux 版の Mathematica は FreeBSD においても完璧に動きます。 ただ、実行する際に Linux ABI を用いる必要があることを FreeBSD に教えるために、Wolfram によって出荷されているバイナリにマーク付け (branded) をする必要があります。
Mathematica や Mathematica for Students の Linux 版は Wolfram (http://www.wolfram.com/) から直接注文することができます。
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 から直接インストーラを実行することが可能になります。
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 を立ち上げる時にその情報を入力します。
Mathematica は標準フォントセットにない特別な記号 (積分記号、総和記号、ギリシャ文字など) を表示するために特殊なフォントを使用します。 X プロトコルは、これらのフォントが ローカルマシンに インストールされていることを要求します。 これはつまり、ローカルマシンに (CD-ROM や Mathematica がインストールされているホストマシンから) そのフォントをコピーしなければならないということです。 これらのフォントは通常、CD-ROM の /cdrom/Unix/Files/SystemFiles/Fonts か、もしくはハードディスクの /usr/local/mathematica/SystemFiles/Fonts に置かれており、実際に使用されるフォントは Type1 と X のサブディレクトリに格納されています。 これらを利用するには次のような二つ方法があります。
一つは、フォントファイルをすべて /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 という ディレクトリが存在していない場合には、 上記例の MathType1 を Type1 とすることができます。
Marcel Moolenaar 寄贈 <marcel@cup.hp.com>
このドキュメントでは Oracle 8.0.5 と Oracle 8.0.5.1 Enterprise Edition の Linux 版を FreeBSD にインストールするための手順を解説します。
まずは Ports Collection から linux_base と linux_devtools をインストールしてください。 これらの ports は FreeBSD 3.2 のリリース後にコレクションに加えられました。 もし FreeBSD 3.2 もしくはそれよりも古いものを使っている場合は ports コレクションをアップデートしましょう。ついでに FreeBSD をアップデートするのもいいでしょう。もし linux_base-6.1 や linux_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
パッケージのインストール時にエラーが出てはいけません。
Oracleをインストールする前に、適切な環境を設定する必要があります。 このドキュメントでは、 Oracle のインストールガイドに書いてあるようなことではなく FreeBSD で Linux 用 Oracle を動かすために特別に必要なことのみを解説します。
Oracle インストールガイドにあるように、 シェアードメモリーの最大サイズを設定しなければいけません。 FreeBSD では SHMMAX を使わないようにしてください。 SHMMAX は単に SHMMAXPGS と PGSIZE から計算されるだけなのです。 従って、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
他のアカウントを作るのと同じように Oracle 用のアカウントを作ります。 Oracle 用のアカウントに特別なのは Linux のシェルを割り当てるところだけです。 /etc/shells に /compat/linux/bin/bash を加え、Oracle 用のアカウントに設定します。
ORACLE_HOME や ORACLE_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
インストーラーを起動する前に、/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 を起動するのを忘れないように!
Oracle をインストールする時、root で行なう必要のあるいくつかの操作は root.sh と呼ばれるシェルスクリプトに記録されます。 root.sh は orainst ディレクトリにあります。次のパッチを 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 というディレクトリにあります。
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
Holger Kipp 寄稿 <holger.kipp@alogis.com>
SGML への変換 Valentino Vaschetto <logo@FreeBSD.org>
この文書は、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 のインストールの手引きを置き換えるものではありません。
SAP や Oracle に特有の質問については、SAP R/3 の Linux 版についてくる文書や Oracle と SAP OSS が出している資料をご覧ください。
SAP のインストールには以下の CD-ROM を使いました。
| 名称 | 番号 | 説明 |
|---|---|---|
| KERNEL | 51009113 | SAP Kernel Oracle / Installation / AIX, Linux, Solaris |
| RDBMS | 51007558 | Oracle / RDBMS 8.0.5.X / Linux |
| EXPORT1 | 51010208 | IDES / DB-Export / Disc 1 of 6 |
| EXPORT2 | 51010209 | IDES / DB-Export / Disc 2 of 6 |
| EXPORT3 | 51010210 | IDES / DB-Export / Disc3 of 6 |
| EXPORT4 | 51010211 | IDES / DB-Export / Disc4 of 6 |
| EXPORT5 | 51010212 | IDES / DB-Export / Disc5 of 6 |
| EXPORT6 | 51010213 | IDES / 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 から間もない時期のものです) も利用しました。
以下のノートは、SAP R/3 をインストールする前に読んでおくべき、 もしくはインストールの際に役立つことが分かっているものです。
| 番号 | 題名 |
|---|---|
| 0171356 | SAP Software auf Linux: grundlegenden Anmerkungen |
| 0201147 | INST: 4.6C R/3 Inst. on UNIX - Oracle |
| 0373203 | Update / Migration Oracle 8.0.5 --> 8.0.6/8.1.6 LINUX |
| 0072984 | Release of Digital UNIX 4.0B for Oracle |
| 0130581 | R3SETUP step DIPGNTAB terminates |
| 0144978 | Your system has not been installed correctly |
| 0162266 | Questions and tips for R3SETUP on Windows NT / W2K |
以下の機器であれば SAP R/3 System (4.6B) を動かすのに十分です。
| 構成部品 | 4.6B | 4.6C |
|---|---|---|
| プロセッサ | 2 × 800MHz Pentium III | 2 × 800MHz Pentium III |
| メモリ | 1GB ECC | 2GB 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 テープドライブと CD-ROM にアクセスするため)、Mylex AcelleRAID (2 チャンネル、ファームウェアバージョン 6.00-1-00、32MB RAM) を積んだデュアルプロセッサボードを使いました。Mylex RAID コントローラには 17GB のハードディスク 2 台 (ミラー) と 36GB のハードディスク (RAID 5) 4 台が接続されています。
まず、FreeBSD 4.3-STABLE をインストールしました。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/da0s1a | 1.016.303 | 1 | / |
| /dev/da0s1b | 6 | <swap> | |
| /dev/da0s1e | 2.032.623 | 2 | /var |
| /dev/da0s1f | 8.205.339 | 8 | /usr |
| /dev/da1s1e | 45.734.361 | 45 | /compat/linux/oracle |
| /dev/da1s1f | 2.032.623 | 2 | /compat/linux/sapmnt |
| /dev/da1s1g | 2.032.623 | 2 | /compat/linux/usr/sap |
はじめに、Mylex のソフトウェアで論理ドライブ 2 台を設定して初期化しなければなりませんでした。 このソフトウェアはボードに組み込まれていて、 PC 起動時に動かせます。
このディスクの割り当て方は SAP の推奨と少し異なることに注意してください。SAP は oracle (その他) サブディレクトリを別途マウントするように提案していますが、 私は簡便であることを優先して、 実際にサブディレクトリとして作成するだけにしました。
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
最初にすべきことは、ソースコードのインストールです。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 が無事終わったら、 コンピュータを再起動して新しいカーネルを動かしてください。
(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
まず、Linux のベースシステムを (root で) インストールしなければなりません。
# cd /usr/ports/emulators/linux_base # make package
次に、必要なら Linux 開発環境をインストールします。
# cd /usr/ports/devel/linux_devtools # make package
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 に特有のものではありません。
単純なインストールでは、 次のファイルシステムを作成すれば事足ります。
また、私は FreeBSD が正しいパスを見付けられるように、 いくつかリンクを作成しました。
# ln -s /compat/linux/oracle /oracle # ln -s /compat/linux/sapmnt /sapmnt # ln -s /compat/linux/usr/sap /usr/sap
SAP R/3 には、2 名のユーザと 3 つのグループが必要です。 ユーザ名は 3 文字からなる SAP システム ID (SID) に準じています。SID の中には SAP が予約しているものがあります (たとえば SAP や NIX です。すべて網羅した一覧は SAP のドキュメントをご覧ください)。 IDES のインストールでは、IDS を使いました。 したがって、次のグループができます (グループ ID は異なっていてもかまいません。 これは単に私がインストールした時に使用した値です)。
デフォルトの Oracle のインストールでは、 dba グループだけが使われます。 oper グループとして、 dba を使う人もいます。(詳しくは Oracle と SAP のドキュメントを参照してください)。
以下のユーザも必要になります。
| ユーザ ID | ユーザ名 | 一般名称 | グループ | 追加グループ | 説明 |
|---|---|---|---|---|---|
| 1000 | idsadm | <sid>adm | sapsys | oper | SAP 管理者 |
| 1002 | oraids | ora<sid> | dba | oper | DB 管理者 |
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
あなたが dba と oper の両方のグループを使っていたら、 ここには oper グループもいれるべきです。
以下のディレクトリは、 普通は別のファイルシステムとして作成します。 どうするかは、あなたの要件に応じて決めてください。 結局はすべてが同じ 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
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 + インスタンス番号
SAP は、デフォルトの RedHat のインストールでは入らないロケールを少なくとも 2 つ必要とします。 SAP は、必要な RPM を ftp サーバからダウンロードする形で提供しています (OSS アクセス契約している顧客でなければアクセスできません)。 必要な RPM の一覧は note 0171356 をご覧ください。
適切なリンクを (たとえば de_DE と en_US から) 作成するという手もありますが、 業務用システムでそうすることはお勧めしません (いまのところ、IDES システムで問題なく動いてはいますが)。 必要なのは、次のロケールです。
de_DE.ISO-8859-1 en_US.ISO-8859-1
このロケールがないと、 インストール時になんらかの問題が起きるでしょう。 それを (たとえば CENTRDB.R3S ファイルで問題の段階を OK にして) 無視してしまうと、追加でなにかしないと SAP システムにログオンできないでしょう。
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) の節を参照してください。
インストールの際にマウントしてアンマウントしなければならない CD-ROM が山ほどあります。十分な数の CD-ROM ドライブを持っていれば、 すべてマウントしてしまえばよいでしょう。私は、CD-ROM の中身をそれぞれに対応するディレクトリにコピーすることにしました。
/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
まず、インストールディレクトリを用意しなければなりません。
# 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 枚しか要求しません。
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 データベースソフトウェアをインストールするところまでは 素直に進むはずです。
Linux と Oracle DB で起こりうる問題についての SAP-Notes と Oracle の Readme を読むようにしてください。 すべてではないにしても、 ほとんどは互換性のないライブラリに起因しています。
Oracle のインストールについて詳しいことは、Oracle のインストール の章をご覧ください。
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, egcs や i386-redhat-linux-gcc ではなく、 i386-glibc20-linux-gcc で再リンクしようとします。
時間が限られていたので、私は Oracle 8.0.5 PreProduction リリースのバイナリを利用することにしました。 最初 RDBMS-CD 収録のバージョンを動かそうとして失敗し、 その時点では正しい RPM を見つけて利用するのはまるで悪夢のようだったからです。
これをインストールするのは簡単です。 CD をマウントして、インストーラを起動してください。 インストーラが Oracle ホームディレクトリの位置をたずねて、 そこにすべてのバイナリをコピーします。 もっとも、私はその前の RDBMS インストールを試した時の残りを削除していませんでした。
この後、Oracle データベースは問題なく起動できました。
まず、idsamd (<sid>adm) ユーザと oraids (ora<sid>) ユーザの環境設定を確認してください。 両者とも、.profile, .login と .cshrc をもっていて、いずれも hostname を使っているはずです。 そのシステムのホスト名が完全修飾名であれば、すべてのファイルで hostname を hostname -s に変更する必要があります。
その後、(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 で少し問題がありました。
次のように、Oracle-Listener を oraids (ora<sid>) ユーザで起動してください。
umask 0; lsnrctl start
そうしないと、ソケットが正しいパーミッションにならないので、 ORA-12546 が発生するかもしれません。SAP note 072984 をご覧ください。
一時ライセンスは 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>
クライアント 000 内でユーザを作成します (クライアント 000 内で行わなければなりませんが、 ユーザ sap* や ddic 以外のユーザでなければならないタスクのためです)。 ユーザ名として、私は通常 wartung (または 英語で service) を選択しています。必要となるプロファイルは sap_new と sap_all です。セキュリティを高めるため、 すべてのクライアントのデフォルトユーザのパスワードを変更すべきです (ユーザ sap* と ddic を含みます)。
クライアント 000 内で、ddic と sap* 以外のユーザについて、少なくとも次のことを行ってください。
| 作業 | トランザクション |
|---|---|
| トランスポートシステムの設定。たとえば、 スタンドアロントランスポートエンティティ | STMS |
| システム用のプロファイルの作成・編集 | RZ10 |
| 操作モードとインスタンスの維持管理 | RZ04 |
これらのインストール後の手順は、それ以外も含めて SAP インストールガイドにすべて書かれています。
/oracle/IDS/dbs/initIDS.sap ファイルには SAP バックアッププロファイルが含まれます。ここで、 使用するテープの容量、 圧縮の種類などを定義しなければなりません。 sapdba や brbackup と共に動かすため、以下の値を変更しました。
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 と組み合わせて用いる巻き戻し可能なデバイス。
この段階で R3SETUP がエラーを報告したら、CENTRDB.R3S ファイルを編集します。[OSUSERSIDADM_IND_ORA] という項目を探して、以下の値を変更します。
HOME=/home/idsadm (was empty) STATUS=OK (had status ERROR)
以下のように、R3SETUP を再起動します。
# ./R3SETUP -f CENTRDB.R3S
この段階で R3SETUP がエラーを報告する可能性もあります。 CENTRDB.R3S を編集して、[OSUSERDBSID_IND_ORA] という項目を探し、その項目内の次の値を変更してください。
STATUS=OK
その後、R3SETUP を再起動します。
# ./R3SETUP -f CENTRDB.R3S
インストールを開始する前に Oracle On-Line Text Viewer の選択を外すのを忘れています。この選択肢は現在 Linux にはないにもかかわらず、インストール対象に選ばれています。 Oracle のインストールメニューでこの製品を選択しているのを外して、 インストールを再開してください。
このエラーが起きた場合は、正しいロケールがありません。 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 システムを再起動してかまいません。
次のコマンドを実行して、Oracle リスナーをユーザ oraids で起動してください。
# umask 0; lsnrctl start
そうしないと、 ソケットが正しいパーミッションになっていないという ORA-12546 エラーを受け取るかもしれません。 SAP note 0072984 をご覧ください。
一般的なことは 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) があります。
(ファイル CENTRDB.R3S で) 問題の段階の状態 (STATUS) を ERROR から OK に設定して R3SETUP を再起動してください。 インストール後、レポート RSWBOINS をトランザクション SE38 から実行しなければなりません。 RFCRSWBOINI および RFCRADDBDIF 段階の詳細については SAP note 0162266 をご覧ください。
(ファイル CENTRDB.R3S で) 問題の段階の状態 (STATUS) を ERROR から OK に設定して R3SETUP を再起動してください。 インストール後、レポート RADDBDIF をトランザクション SE38 から実行しなければなりません。詳しくは SAP note 0162266 をご覧ください。
Linux
バイナリ互換機能がどのような仕組みなのか興味がある人はこのセクションを読んでください。
以下の文章で説明されていることのほとんどは FreeBSD chat
メーリングリスト に投稿された Terry Lambert (<tlambert@primenet.com>) 氏のメール
(Message ID: <199906020108.SAA07001@usr09.primenet.com>)
をもとにしています。
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 の売りにするため 8-) でもあるのですが、 実際には、次のような理由によります。 この機能が初めて実装された頃、 動作原理を説明する以外にこの機能を表現する言葉はありませんでした。 しかし、コードをコンパイルしたりモジュールをロードしない場合、 「FreeBSD 上で Linux バイナリを実行する」という表現は、 厳密に考えると適切ではありません。 そこで、その際にロードされているもの自身を表現する言葉 -- すなわち “Linux エミュレータ”が必要だったのです。
FreeBSD ハンドブックの以下の章は、 FreeBSD のシステム管理の面について書かれています。 各章のはじめでは、その章で学ぶ内容や 実際に取り組む前に知っておくべきことについて説明します。
各章は、必要になった時に個別に参照できるように構成されています。 どの順番で読んでも構いませんし、FreeBSD を使うのに、 すべてを読み通す必要がある、というわけでもありません。
システムを正しく設定することは、 メンテナンスや将来の更新の際の作業の量を減らします。 この章では FreeBSD システムの管理上の設定の側面について記述します。
またこの章では FreeBSD システムのパフォーマンスを最適化する チューニングについても記述します。
この章を読むと、以下のことがわかります。
ハードディスク上で、ファイルシステムおよびスワップのパー ティションの大きさと配置を決定する理由と方法
rc.conf の設定と /usr/local/etc/rc.d スタートアップシステムの基礎
ネットワークデバイスに対する、仮想ホストの設定方法
/etc ディレクトリ内のさまざまな設定ファ イルの使い方
sysctl 変数を使った FreeBSD のチューニング方法
ディスク性能のチューニング方法と、カーネルの制限の変更方法
この章を読む前に、以下のことをやっておくとよいでしょう。
Unix と FreeBSD の基本を理解する (Chapter 4)。
FreeBSD のソースコードを最新に保つこと (Chapter 18) と、 カーネルコンフィグレーションおよび構築の基礎 (Chapter 9) に親しんでおく。
ファイルシステムのレイアウトを disklabel(8) や sysinstall(8) で行う際、ハードディスクの外周部は 内周部よりもデータ転送が速いということを覚えておくことが大事です。 これに従えば、 ルートやスワップのような小さくて激しくアクセスされるファイルシステムを外周付近に、 /usr のようなより大きなパーティションは その内側に配置すべきでしょう。 そのため、パーティションを作成する際には、ルート、スワップ、 /var、/usr のような順で作ってゆくのがよいでしょう。
/var パーティションのサイズは あなたが計算機をどのように使おうとしているかを反映します。 /var には主としてメールボックスやログファイル、 プリンタスプールが置かれます。 特にメールボックスとログファイルは、 あなたのシステムのユーザ数やログの保持期間に依存して予期し得ぬサイズにまで成長します。 もしあなたがメールサーバを運用する予定なら /var パーティションはギガバイト以上のものがよいでしょう。 さらに、/var/tmp は追加したくなるかもしれない パッケージを収められるだけの大きさが必要です。
/usr パーティションはシステムを サポートするのに必要なファイル群と、 ports(7) 階層からインストールされたファイル群を収める /usr/local と呼ばれるサブディレクトリを その中に含みます。 ports をまったく使わずシステムのソース (/usr/src) も不要だというのであれば、1 ギガバイトの /usr パーティションだけで充分です。 しかし、ports (特にウィンドウマネージャや Linux バイナリ) を少なからずインストールするのであれば 少なくとも /usr に 2 ギガバイトを薦め、 システムのソースも置こうというなら 3 ギガバイトの /usr を推奨します。 このパーティションで必要になる量を過小評価してはいけません。 それは驚く程に蔓延るものなのです!
パーティションのサイズを考える時、 必要量にシステムの成長分を見込んでおいてください。 別のパーティションには潤沢にスペースが余っているのに、 あるパーティションでスペースが足らないままというのは フラストレーションがたまるものです。
Note: sysinstall(8) の Auto-defaults パーティションサイズを使ったことのある人なら、 そのルートや /var パーティションが 小さすぎることを知っているでしょう。 賢明かつ気前よくパーティションを切ってください。
経験からスワップサイズはメインメモリの 2 倍というのが一般的です。 つまり、計算機のメモリが 128 メガバイトならばスワップファイルは 256 メガバイトになります。 メモリの少ないシステムでは、 もっとスワップを増した方が性能がよくなります。 256 メガバイト未満のスワップでシステムを設計することはお薦めできません。 またスワップサイズを決める時に、 将来のメモリ増設のことも考えておくべきです。 カーネルの VM (訳註: virtual memory(仮想メモリ)) ページングアルゴリズムはスワップパーティションがメインメモリの 2 倍以上存在するときに最も性能を発揮するように設計されています。 スワップが少なすぎる設定は、 あなたが後にメモリを増設したときに問題を起すばかりではなく、 VM ページスキャニングのコードの能率を落します。
最後に、複数の SCSI ディスク (や異なるコントローラで操作される複数の IDE ディスク) を持つ大規模なシステムでは、それぞれのドライブ (4 台まで) にスワップを設定することを強く推奨します。 各ドライブのスワップパーティションはほぼ同一サイズであるべきです。 カーネルは任意のサイズを扱うことができますが、 内部のデータ構造は最大のスワップパーティションの 4 倍に調節されます。 スワップパーティションをほぼ同一のサイズにしておくことで カーネルはスワップスペースを最適なかたちで ディスクをまたいでストライプさせることができます。 こだわりすぎる必要はありません。 スワップスペースは Unix のつつましい美点です。 あなたが通常スワップをたくさん使わないとしても、 プログラムが暴走してもリブートさせられる前に回復する時間を多く得られます。
何故パーティション化してしまうのでしょう? 何故巨大な root パーティション一発では駄目なのでしょう? そうすれば容量が溢れるかもと心配しなくてもすむのに!
いくつかの理由からそれはよいアイデアとは言えません。 まず各パーティションはアクセスの特徴がそれぞれ異なっていて、 分離しておくことでそれぞれの特徴に応じたチューニングができるようになるからです。 root パーティションや /usr パーティションはほとんどが読み出しでわずかな書き込みがあるだけですが /var や /var/tmp パーティションでは大量の読み書きが発生します。
システムを適切にパーティション化することで 小さいが書き込みの激しいパーティションによって引き起こされる フラグメント化を読み出し専門のパーティションにまで波及させずにすみます。 また書き込みの激しいパーティションをディスクの周辺部に配置することで、 たとえばパーティションテーブル内で大きなパーティションの後のかわりに前に配置することで、 それが最も必要とされているパーティションの I/O パフォーマンスを増大させることができます。 大きなパーティション内の I/O パフォーマンスもまた必要とされているでしょうが、 それらは大きすぎてディスク周辺部へ移動させてやったとしても /var を周辺部に移動させることによって大きな効果が得られたのとは対照的に 意味のあるパフォーマンスの増加は見込めないでしょう。 root パーティションを小さくまとめて 基本的にリードオンリーにすることで、 不幸にしてクラッシュが起きても無事で済む可能性が大きくなります。
システムの設定情報が収められている主な場所は /etc/rc.conf です。 このファイルにはシステムの起動時にシステムの設定を行なうものをはじめ 多岐に渡る設定情報が含まれています。 そのファイル名はダイレクトに、それが rc* ファイル群の設定情報であることを示しています。
管理者は /etc/defaults/rc.conf のデフォルトの設定を rc.conf ファイルにエン トリを作ることで上書きすべきです。 デフォルトのファイルをそのまま /etc にコピーするのはやめるべきです。 それはデフォルト値であってサンプルではないのです。 システム固有のすべての変更は rc.conf ファイ ルの中でするべきです。
管理の手間を減らす為、クラスター化されたアプリケーションには サイト共通の設定とシステム固有の設定を分離するさまざまな戦略が適用できます。 推奨されるアプローチは、サイト共通の設定は /etc/rc.conf.site のような別のファイルに置き、 それをシステム固有の設定情報しか含ませない /etc/rc.conf からインクルードすることです。
rc.conf は sh(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 ファイルは上書きされません。 なのでシステムの設定情報が失われることもありません。
基本的に、インストールされたアプリケーションには独自の文法を持つ 固有の設定ファイルがあります。 これらのファイルがベースシステムから分離されているということは重要で、 このためパッケージ管理ツールによる配置と管理が容易になっています。
基本的に、それらのファイルは /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 を更新した時にも、 この変更されたファイルは上書きされることはありません。
一つのシステムでサービスをいくつも立ち上げているということは よくあることです。 それらには独自の立ち上げかたがあることがあり、 それぞれ有利な点があります。
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 は最後の場所と考えられているということを 知っておいてください。 サービスを起動させるのにもっといい場所があるなら そこから始めてください。
Note: /etc/rc.conf でその他のコマンドを実行しないでください。 そのかわり、デーモンの起動やブート時のコマンド実行は /usr/local/etc/rc.d にスクリプトを配置してください。
この他にサービスの起動に cron(8) を利用することもできます。 このアプローチには、cron(8) がそのプロセスを crontab の所有者権限で実行したり、サービスが 非特権ユーザによって立ち上げられ管理されるなどといった有利な点が いくつもあります。
これで cron(8) の機能の利点を得ることができます。 日時の指定を @reboot で置き換えることでジョブは システムがブートした直後、cron(8) が起動した時に実行されます。
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"
設定のための情報が含まれているディレクトリはたくさんあります。 それぞれ以下のものを含んでいます。
| /etc | システム全般の設定情報。 ここにあるデータはシステム 固有のものです。 |
| /etc/defaults | デフォルトのシステム設定ファイル。 |
| /etc/mail | 追加的な sendmail(8) の設定、他の MTA の設定ファイル。 |
| /etc/ppp | ユーザモード、およびカーネルモードの ppp プログラムの設定。 |
| /etc/namedb | named(8) のデータのデフォルトの置場。通常 boot ファイルはここに置かれ、 /var/db に置かれた他のデータを 参照するディレクティブを含みます。 |
| /usr/local/etc | インストールされたアプリケーションの設定ファイル。 アプリケーションごとのサブディレクトリを含んでいることがあります。 |
| /usr/local/etc/rc.d | インストールされたアプリケーションの起動/停止スクリプト。 |
| /var/db | 永続的なシステム固有のデータファイル。 たとえば named(8) のゾーンファイル、データベースファイル等。 |
/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
Note: search オプションと domain オプションは、 どちらか一方しか使ってはいけません。
DHCP を利用している場合、dhclient(8) は通常 resolv.conf を DHCP サーバから受け取っ た情報で書き換えます。
/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) をあたってください。
syslog.conf は syslogd(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) のマニュアルページに あたってください。
newsyslog.conf は、通常 cron(8) によって予定を決めて実行されるプログラム newsyslog(8) のための設定ファイルです。 newsyslog(8) は、 ログファイルをいつ保存して再編するかを決定します。 logfile は logfile.0 に移され、logfile.0 は logfile.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) のマニュアルページに あたってください。
sysctl.conf は rc.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
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 です)。
vfs.vmiodirenablevfs.vmiodirenable sysctl 変数のデフォルトは 1
(オン) で、 0 (オフ) または 1 (オン) にセットすることができます。
このパラメータはディレクトリがシステムによってどのように
キャッシュされるかを制御します。 ほとんどのディレクトリは小さく、
ファイルシステムにおいては単一フラグメント (典型的には 1K)
であり、バッファキャッシュではさらに小さくなっています (典型的には 512
バイト)。 しかしデフォルトモードで動作している時は、
大量のメモリを搭載していても
バッファキャッシュは固定数のディレクトリしかキャッシュしません。 この sysctl
をオンにすると、バッファキャッシュが VM ページキャッシュを、
ディレクトリをキャッシュするために使うことを可能にします。
これによる利点は、全てのメモリがディレクトリを
キャッシュするのに使えるようになるということです。
欠点は、キャッシュに使われる最小のメモリの大きさが 512 バイトではなく
物理ページサイズ (大抵は 4K) になることです。
多数のファイルを操作するサービスを稼動しているなら、
常にこのオプションをオンにすることを推奨します。 そのようなサービスには、web
キャッシュや大規模なメールシステム、 ニューズシステムなどが含まれます。
このオプションは一般にメモリを消費しますが、 性能を削減することはありません。
ただし実験して調べてみるべきでしょう。
hw.ata.wcFreeBSD 4.3 では IDE のライトキャッシュがオフになりました。 これは IDE
ディスクへの書き込み帯域幅を減らしてしまうことになりますが、
ハードドライブベンダに起因するデータの一貫性に関する
重大な問題のために必要なことだと考えられました。
基本的には、書き込み完了時期について IDE ドライブが嘘をつくという問題です。
IDE ライトキャッシュがオンであると IDE
ハードドライブはデータを順番に書きこまないばかりか、
ディスクの負荷が高い時にはいくつかのブロックの書き込みを
無期限に延期してしまいます。 クラッシュや電源故障の場合、
ファイルシステムの重大な破壊をもたらします。
したがって私たちはデフォルトを安全側に変更しました。
残念ながらこれは大変な性能の低下をもたらし、
私たちはあきらめてこのリリース後にオンに戻しました。 hw.ata.wc sysctl 変数を見てデフォルトを
チェックしてみるべきです。 もし IDE ライトキャッシュがオフになっていたら、
hw.ata.wc カーネル変数を 1 に戻すことでオンに戻すことができます。
これはブート時にブートローダから行わなければなりません。
カーネルがブートした後に行っても効果はありません。
詳しくは ata(4) を見てください。
tunefs(8) プログラムはファイルシステムを細かくチュー ニングするのに使えます。このプログラムにはさまざまなオプションがありま すが、ここではソフトアップデートをオンオフすることだけを考えま す。以下の様にして切り替えます。
# tunefs -n enable /filesystem # tunefs -n disable /filesystem
ファイルシステムはマウントされているあいだは tunefs(8) で変更することができません。 ソフトアップデートを有効にする いい機会はシングルユーザモードでどのパーティションもマウント されていない時です。
Note: FreeBSD 4.5 からは、ファイルシステム生成時に newfs(8) の -U オプションを使って ソフトアップデートを有効化できるようになりました。
ソフトアップデートはメタデータの性能、 主にファイルの作成と削除の性能を劇的に改善します。 すべてのファイルシステムでソフトアップデートを有効にすることを推奨します。 ソフトアップデートに関して、2 つの欠点を意識すべきです。 1 つめは、ソフトアップデートはクラッシュ時におけるファイルシス テムの一貫性は保証しますが、 物理ディスクの更新が何秒か (1 分に達することもあります!) 遅れる可能性が高いことです。 システムがクラッシュした場合、より多くの作業結果が消えてしまうかもしれません。 2 つめは、ソフトアップデート はファイルシステムブロックを解放するのを遅らせるということです。 あるファイルシステム (たとえばルートファイルシステム) が満杯近くの時に それに対する大規模な更新、たとえば make installworld をすると、空き領域を使い果たして更新が失敗してしまうことがあります。
kern.maxfileskern.maxfiles はあなたのシステムの要求に
応じて増減させることができます。
この変数はあなたのシステムのファイル記述子の最大値を示します。
ファイル記述子テーブルが溢れるような時には、システムメッセー ジバッファに頻繁に file: table is full と表示されます。これは、 dmesg コマンドで確認できます。
ファイル、ソケット、パイプ (fifo) は それぞれオープンされるとファイル記述子を一つ消費します。 大規模なプロダクションサーバでは その時実行されているサービスの種類や数に応じては あっさり数千のファイル記述子が必要になります。
kern.maxfile のデフォルト値はカーネル
コンフィグレーションファイルの MAXUSERS オ
プションで決まります。kern.maxfiles は MAXUSERS の値に比例して増加します。
カスタムカーネルをコンパイルする際は、このカーネルコンフィグ
レーションオプションをシステムの利用法に合わせて設定するとよ
いでしょう。カーネルは、この数値からほとんどの制限の初期値を
決定します。業務用マシンに、実際に 256 名のユーザが一度に接
続することはないかもしれませんが、大規模なウェブサーバに必要
なリソースは同程度になります。
Note: FreeBSD 4.5 からは、 カーネルコンフィグレーションファイルで
MAXUSERSを 0 に設定すると、システムの RAM 容量に基づいて適切なデフォルト値が選択されます。
カーネルコンフィグレーションオプション NMBCLUSTERS
は、そのシステムで利用可能なネッ トワーク mbuf
の量を決定します。通信量の多いサーバで MBUF の量 が少ないと、FreeBSD
の性能が低下してしまいます。クラスタ一つは およそ 2kB
のメモリに対応しているので、1024 だとカーネルメモリ から約 2 MB
をネットワークバッファに予約することになります。ど
れだけ必要になるかを、簡単な計算で出すことができます。同時に最 大 1000
接続までゆくウェブサーバがあり、それぞれの接続によって 受信バッファ 16kB
と送信バッファ 16kB が消費されるなら、ウェ ブサーバをまかなうのに 32MB
程度のネットワークバッファが必要 になります。経験的に有用な値は、それを 2
倍したものなので、 32MBx2 = 64MB/2K = 32768 になります。
計算機を起動しオペレーティングシステムをロードするプロセスは、 “ブートストラッププロセス”、 もしくは単に “起動” と呼ばれます。 FreeBSD の起動プロセスを使えば、 システムをスタートするときに起きることを かなり柔軟にカスタマイズすることができます。 同じ計算機にインストールされた 別のオペレーティングシステムを選択することもできますし、 同じオペレーティングシステムの違うバージョンを選択することも、 インストールされた別のカーネルを選択することさえできます。
この章では、指定できる設定オプションと FreeBSD の起動プロセスのカスタマイズ方法について詳しく述べます。 この章では FreeBSD カーネルがスタートし、デバイスを検出し、 init(8) を起動するまでに起きることすべてを扱います。 どの最中のことだかはっきりしていない人のために補足すると、 テキストの色が明るい白から灰色に変わるまでに起きていることです。
この章を読むと、以下のことが分かります。
どのように FreeBSD のブートストラップシステムが構成され、 そしてそれらが互いにどう関係しているのか
起動プロセスを制御するために FreeBSD のブートストラップの各要素に付加できるオプション
device.hints(5) の基本的な記述方法
x86 限定: この章では Intel x86 システム上で動作する FreeBSD の起動プロセスだけを扱います。
計算機の電源を入れ、オペレーティングシステムをスタートさせるのには、 おもしろいジレンマがあります。定義により、 計算機は、オペレーティングシステムが起動するまでは、 ディスクからプログラムを動かすことも含めて、 何をどうすればよいかまったく知りません。 では、計算機はオペレーティングシステムなしに ディスクからプログラムを実行することができず、 オペレーティングシステムのプログラムがディスク上にあるのなら、 どうやってオペレーティングシステムを起動するのでしょうか?
この問題はほらふき男爵の冒険 という本の中に書かれている問題ととてもよく似ています。 登場人物がマンホールの下に半分落っこちて、 靴紐 (ブートストラップ) をつかんで自分を引っぱり、持ち上げるのです。 計算機の黎明期には、ブートストラップ という用語でオペレーティングシステムをロードする 機構のことを指していたのですが、 いまはこれを縮めて “ブート (起動)” と言います。
x86 ハードウェアでは、基本入出力システム (Basic Input/Output System: BIOS) にオペレーティングシステムをロードする責任があります。 オペレーティングシステムをロードするために、 BIOS がハードディスク上のマスターブートレコード (Master Boot Record: MBR) を探します。 MBR はハードディスク上の特定の場所になければなりません。 BIOS には MBR をロードし起動するのに十分な知識があり、 オペレーティングシステムをロードするために必要な作業の残りは、 場合によっては BIOS の助けを得た上で MBR が実行できることを仮定しています。
MBR 内部のコードは、 通常ブートマネージャと呼ばれます。 とりわけユーザとの対話がある場合にそう呼ばれます。 その場合は、通常もっと多くのブートマネージャのコードが、 ディスクの最初のトラック または OS のファイルシステム上におかれます (ブートマネージャはブートローダ と呼ばれることもありますが、 FreeBSD はこの言葉を起動のもっと後の段階に対して使います)。 よく使われるブートマネージャには、 boot0 (Boot Easy とも呼ばれる FreeBSD 標準のブートマネージャ), Grub, GAG や LILO 等があります (MBR 内に収まるのは boot0 だけです)。
ディスク上にインストールされているオペレーティングシステムが 1 つであれば、標準の PC MBR で十分です。 この MBR はディスク上の最初の起動可能な (アクティブな) スライスを探し、 そのスライスにあるコードを起動してオペレーティングシステムの残りをロードします。 デフォルトで fdisk(8) がインストールする MBR は、このような MBR です。/boot/mbr を基にしています。
ディスク上にオペレーティングシステムを複数インストールしているなら、 別のブートマネージャ (複数のオペレーティングシステムの一覧を表示できて、 起動するオペレーティングシステムを選択できるようなもの) をインストールするとよいでしょう。 このようなブートマネージャの中から 2 つを次の節で説明します。
FreeBSD ブートストラップシステムの残りは 3 段階に分かれます。 第 1 ステージは MBR によって起動されるもので、 MBR は計算機を特定の状態にするために必要なことだけ知っていて、 第 2 ステージを起動します。 第 2 ステージでは、第 3 ステージを起動する前に、 もうちょっとやることができます。 第 3 ステージでオペレーティングシステムのロード作業を完了します。 起動作業がこれらの 3 段階に分かれているのは、 PC の規格がステージ 1 とステージ 2 で実行できるプログラムのサイズに制限を課しているからです。 これらの作業をつなぎ合わせることによって、 FreeBSD はより柔軟なローダ (loader) を提供しているのです。
その後カーネルが起動し、デバイスの検出と初期化を開始します。 そしてカーネルの起動が終わると、制御はユーザープロセスの init(8) へ移されます。init(8) はまず ディスクが利用可能であることを確かめ、 ファイルシステムのマウント、 ネットワークで利用するネットワークカードのセットアップ、 そして通常 FreeBSD システムで初期時に起動されるすべてのプロセスの起動、 といったユーザーレベルでのリソース (資源) 設定を行ないます。
MBR やブートマネージャのコードは起動プロセスの第 0 ステージと呼ばれることがあります。 この節では前述の 2 つのブートマネージャ、 boot0 と LILO について説明します。
boot0 ブートマネージャ. FreeBSD のインストーラや boot0cfg(8) がデフォルトでインストールする MBR は、/boot/boot0 を基にしています (boot0 は非常に単純なプログラムです。 MBR にあるプログラムは、 スライステーブルと末尾の識別子 0x55AA があるため、 446 バイトの大きさでなければならないという制限があるためです)。 ハードディスクに boot0 と複数のオペレーティングシステムをインストールした場合、 起動時に以下のような画面が出るでしょう。
他のオペレーティングシステム、特に Windows は、 既存の MBR を自らの MBR で上書きしてしまうことで知られています。 もしそうなってしまったら、 もしくは既存の MBR を FreeBSD の MBR で置き換えたいのなら、 次のコマンドを使ってください。
# fdisk -B -b /boot/boot0 device
device は起動するデバイス名で、 たとえば 1 番目の IDE ディスクは ad0、 2 番目の IDE コントローラに接続されている 1 番目の IDE ディスクは ad2、 1 番目の SCSI ディスクは da0 などとなります。 MBR の設定をカスタマイズしたい場合は boot0cfg(8) を使ってください。
LILO ブートマネージャ. このブートマネージャをインストールして FreeBSD を起動するようにするには、まず Linux を起動して /etc/lilo.conf コンフィグレーションファイルに以下を追加してください。
other=/dev/hdXY table=/dev/hdX loader=/boot/chain.b label=FreeBSD
上記において、FreeBSD のプライマリパーティションとドライブを Linux
の識別子を使って指定してください。 X を Linux
のドライブ文字に、また Y を Linux
のプライマリパーティション番号に置き換えてください。 SCSI ドライブを使っているのであれば、 /dev/hd を /dev/sd のように読み替えてください。
同じドライブ上に両方のオペレーティングシステムが置いてあるなら、 loader=/boot/chain.b 行は不要です。 これで /sbin/lilo -v
を実行するとシステムに新しい変更が反映されます。
画面のメッセージを見て確認しておきましょう。
概念上、第 1 ステージと第 2 ステージは ハードディスクの同じ領域上の同一のプログラムの部分部分です。 スペースの制約のため 2 つに分割されていますが、 いつも一緒にインストールされます。 インストーラまたは bsdlabel は、両者を 1 つにまとめたファイル /boot/boot をコピーします (下記参照)。
第 1 ステージと第 2 ステージは、ファイルシステムの外部、 起動スライスの最初のトラックに置かれ、 先頭が最初のセクタにきます。 boot0 またはその他のブートマネージャは、 起動プロセスを続けるために必要なプログラムがそこにあると想定しています。 使用されるセクタの数は、/boot/boot の大きさから簡単に分かります。
boot1 は 512 バイトの大きさでなければならないという制限があるので、 非常に単純なプログラムです。 このプログラムは boot2 を検索し、 実行するため、そのスライスの情報を保持する FreeBSD の BSD ラベル に関する最低限の情報だけを持っています。
boot2 はもう少し高機能です。 これは FreeBSD のファイルシステム上でファイルを見つける能力を持ち、 実行するカーネルやローダを指定するための簡単なインタフェースを提供します。
ローダ (loader) はさらに高機能なもので、 使いやすく簡単な起動設定が行なえる手段を提供します。 boot2 は通常それを起動します。 以前の boot2 には、 カーネルを直接起動する機能しかありませんでした。
もし仮にインストールされた boot1 と boot2 を変更したいのであれば、 bsdlabel(8) を使ってください。
# bsdlabel -B diskslice
diskslice は起動するディスクとスライスで、 たとえば最初の IDE ディスクの 1 番目のスライスは ad0s1 となります。
Dangerously Dedicated Mode: bsdlabel(8) を使うとき、 ad0 のようにディスク名だけを指定すると、 スライスを持たない危険な専用ディスクを作成してしまいます。 これはまず間違いなく、あなたがやりたいことではないでしょうから、 必ず Return キーを押す前に bsdlabel(8) コマンドを二重にチェックしてください。
ローダは三段階の起動プロセスの最終段階です。 ローダは通常、ファイルシステム上の /boot/loader として存在しています。
ローダは、よりさまざまなコマンド群をサポートした 強力なインタプリタによって提供される簡易組み込みコマンド群を利用することで、 ユーザが利用しやすい設定手段となるように設計されています。
ローダは初期化の際にコンソールとディスクの検出を行ない、 どのディスクから起動しているかを調べます。 そして必要な変数を設定してからインタプリタを起動し、 スクリプトからコマンドを送ったり手でコマンドを入力したりできます。
ローダは次に /boot/loader.rc を読み込み、通常、変数の標準値を定義した /boot/defaults/loader.conf と、そのマシンにローカルな変数を定義した /boot/loader.conf を読み込みます。 loader.rc はそれらの変数にもとづき、 選択されたモジュールとカーネルをロードします。
ローダは最後に、標準設定で 10 秒のキー入力待ち時間を用意し、 入力がなければカーネルを起動します。 入力があった場合、簡易コマンド群が使えるプロンプトが表示され、 ユーザは変数を調整したり、 すべてのモジュールをアンロードしたり、 モジュールをロードしたりすることができます。 その後、最終的な起動や再起動へ移行します。
もっともよく使われるローダのコマンドを以下に示します。 利用可能なコマンドをすべて知りたい場合、 loader(8) を参照してください。
seconds で与えられた時間内に入力がなければ、 カーネルの起動へと進みます。 カウントダウンを表示し、標準設定では 10 秒間です。
すぐにカーネルの起動へ進みます。 オプション、カーネル名が指定されている場合は、 それらが使われます。
すべてのモジュールの設定を、 起動時と同じように変数にもとづいて自動的に行ないます。 このコマンドは、まず unload を行なって、 変数--普通 kernel など--を変更した場合にのみ有効に働きます。
/boot/loader.help を読み込み、ヘルプメッセージを表示します。 topic に index が指定された場合、利用可能な topic を表示します。
指定されたファイル名のファイルを処理します。 ローダはファイルを読み込み、行単位で解釈します。 エラーが発生した場合、 include コマンドの実行はその時点で停止します。
-t type] filename指定されたファイル名のカーネル、 カーネルモジュール、あるいは type に指定された種類のファイルをロードします。 ファイル名以降に指定された引数はファイルへと渡されます。
-l] [path]指定された path にあるファイルを表示します。
path
が指定されていなければ、ルートディレクトリを表示します。 -l が指定されていればファイルサイズも表示されます。
-v]モジュールがロード可能なすべてのデバイスを表示します。 もし -v が指定されていれば、 より詳細な出力がされます。
-v]ロード済みのモジュールを表示します。 -v
が指定されていれば、 より詳細な内容が出力されます。
LINES
行を表示するごとに停止しながら指定されたファイルを表示します。
すぐにシステムを再起動します。
ローダの環境変数を設定します。
すべてのロード済みモジュールを削除します。
次にあげるのは、ローダの実践的な使用例です。
普段使っているカーネルをシングルユーザモードで起動します。
boot -s
普段使っているカーネルとモジュールをアンロードし、 古い (もしくは別の) カーネルをロードします。
unload load kernel.old
kernel.GENERIC とすると、 インストールディスクに入っていた generic カーネルを指定することができます。 また、直前にインストールされていたカーネル (たとえば、 カーネルを自分で設定したり、 アップグレードしたりした場合) を指定するには kernel.old とします。
Note: 普段のカーネルで使っているモジュールを 指定したカーネルでロードする場合は、下のようにします。
unload set kernel="kernel.old" boot-conf
カーネルの設定スクリプト (通常、 カーネル起動時に設定される内容を自動化するスクリプト) をロードします。
load -t userconfig_script /boot/kernel.conf
カーネルがローダ (通常は) かboot2 (ローダを迂回して) によってロードされると、 起動フラグを調べます。 もし起動フラグがあれば、それに応じて動作を調整します。
良く使われる起動フラグは次のとおりです。
-aカーネル初期化中に、 ルートファイルシステムとしてマウントするデバイスを尋ねます。
-CCDROM から起動します。
-c起動時にカーネルコンフィグレーションを行なう UserConfig を実行します。
-sシングルユーザモードで起動します。
-vカーネル起動時により詳細な情報を表示します。
Note: 起動フラグはこの他にもあります。 それらについては boot(8) を参照してください。
Note: これは FreeBSD 5.0 以降の機能です。 これ以前のバージョンには存在しません。
起動プロセスの間に loader(8) は device.hints(5) を読み込みます。 このファイルにはカーネル起動の環境変数が格納されており、 これらの環境変数は “device hints” と呼ばれることがあります。“device hints” はデバイスを設定するためにデバイスドライバが使用します。
device hints は ステージ 3 ブートローダ でも設定できます。変数は set コマンドを用いて追加したり、 unset コマンドを用いて削除できます。 show コマンドを用いて一覧を見ることもできます。 /boot/device.hints に設定されている変数は このときに上書きすることができます。 ローダで設定した device hints の効果は一時的なものであるため、 次回起動するときには無効になります。
システムが起動すると、kenv(1) コマンドでカーネル環境変数をダンプすることができます。
/boot/device.hints は 1 行につき一つの変数を設定でき、行頭の “#” はその行がコメントであることを示しています。 書式は次の通りです。
hint.driver.unit.keyword="value"
ステージ 3 ブートローダ で設定するときの書式は次の通りです。
set hint.driver.unit.keyword=value
driver はデバイスドライバの名前、 unit はデバイスドライバのユニット番号、 keyword はヒントキーワードです。 キーワードは次の設定を指定します:
at: デバイスがどのバスに接続されているか指定します。
port: 使用する I/O ポートの開始アドレスを指定します。
irq: 使用する IRQ を指定します。
drq: 使用する DMA チャネルを指定します。
maddr: 使用する物理メモリアドレスを指定します。
flags: デバイスに対してさまざまなフラグを設定します。
disabled: 1 が設定されていると、そのデバイスは無効になります。
デバイスドライバはこのリスト以外の変数を設定できるかもしれませんし、 このリスト以外の変数を必要とするかもしれません。 したがって、デバイスドライバのマニュアルを読むことをおすすめします。 より多くの情報を知りたければ、 device.hints(5), kenv(1), loader.conf(5), loader(8) などのマニュアルを参照してください。
カーネルの起動が完了すると、init(8) というユーザプロセスに制御が移されます。 これは /sbin/init、 もしくは loader の init_path 変数で指定される場所にあります。
自動再起動では、 システム上で利用できるファイルシステムの一慣性を確認します。 もしそれに問題があって fsck(8) がその不一致を修復できなければ、管理者に直接対処させるため init(8) はシステムをシングルユーザモードへと移行させます。
このモードには、 自動再起動の処理中か、
ユーザが起動時に -s オプションを指定した場合、
あるいは loader で boot_single
変数を設定することによって移行します。
また、 マルチユーザモードから 再起動オプション
(-r) や停止 (halt) オプション (-h) なしで shutdown(8)
を呼び出すとこのモードに移行します。
/etc/ttys でシステムコンソール console が insecure に設定されている場合、 システムはシングルユーザモードに移行する前に root のパスワードを入力するように求めます。
Example 13-3. /etc/ttys の insecure コンソール
# 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 に "insecure" という印をつけると、シングルユーザモードへ移行する # 際に init が root のパスワードを要求するようになります。 # console none unknown off insecure
Note: insecure コンソールとは、 あなた自身、コンソールが物理的に安全でないと考えていて、 root のパスワードを知る人だけがシングルユーザモードを 使えるようにしたいという意味であり、 コンソールを安全でない状態で使いたいという意味ではありません。 そのため、安全性を求めるならば secure でなく insecure を選んでください。
init(8) がファイルシステムが正常であると判断するか、 ユーザがシングルユーザモードを終了すると、 システムはマルチユーザモードへ移行し、 リソースの設定を始めます。
リソース設定システムはデフォルト設定を /etc/defaults/rc.conf から、 そのシステム独自の細かな設定を /etc/rc.conf から読み込みます。 そして /etc/fstab に記述されるシステムファイルシステムをマウントし、 ネットワークサービスの開始、 さまざまなシステムデーモンの開始、 そして最後に、ローカルにインストールされた package の起動スクリプトの実行へと進みます。
リソース設定システムに関する参考資料は、rc(8) にあります。 これはスクリプトそのものを調べることと同じくらい優れたものです。
shutdown(8) を用いてシステムを意図的にシャットダウンした場合、 init(8) は /etc/rc.shutdown というスクリプトの実行を試みます。 そして、すべてのプロセスへ TERM シグナルを送り、続いてうまく終了できなかったプロセスへ KILL シグナルを送ります。
電源管理機能を持ったシステムで稼働している FreeBSD では shutdown -p now コマンドによって、 直ちに電源を落とすことができます。FreeBSD を再起動するには、 shutdown -r now を実行するだけです。 shutdown(8) を実行するには、root であるか、operator グループのメンバでなければなりません。halt(8) や reboot(8) コマンドを利用することもできますが、 より多くの情報を知るために、それらと shutdown(8) のマニュアルページを参照してください。
Note: 電源管理機能には acpi(4) がカーネルに組み込まれているか、 モジュールが読み込まれていることが必要です。
寄稿: Neil Blakey-Milner <nbm@FreeBSD.org>、2000
年 2 月
システムへアクセスするには、かならずユーザアカウントが使われます。 また、プロセスもすべてユーザによって実行されますので、 ユーザとアカウントの管理は FreeBSD システムにおいて欠かすことのできない重要なものです。
アカウントには大きく分けて三種類のものがあります。それは、 スーパーユーザ (Superuser)、 システムユーザ (system users)、 そしてユーザアカウント (user accounts) です。 スーパーユーザのアカウントは通常 root と呼ばれ、 無制限の特権を持つためにシステムの管理に用いられます。 また、システムユーザはサービスの運用に用いられ、 最後のユーザアカウントは、 実際にログインしてメールを読むといった作業を行なう利用者のためのものです。
スーパーユーザアカウントは通常 root と呼ばれ、初期時から設定済みです。 このアカウントはシステム管理を行なうためのもので、 メールのやりとり、システムの調査、 プログラミングといった日常的な作業を行なうために使われるべきものではありません。
その理由は、スーパーユーザが通常のユーザアカウントと異なり、 操作にまったく制限を受けないことによります。 そのためスーパーユーザアカウントで操作を間違えると、 システムに重大な影響を与えてしまう恐れがあるのです。 ユーザアカウントでは、仮に操作を間違えてもシステムを壊してしまうようなことは できないようになっています。したがって特権を必要としていないのであれば、 できるだけいつもユーザアカウントを利用する方が望ましいと言えるでしょう。
また、スーパーユーザで実行するコマンドはいつでも、 二回、三回と何度もコマンドをチェックしてください。 なぜならスペースが多かったり、文字が欠けていたりするだけで、 取り返しのつかないデータの破壊につながる可能性があるからです。 スーパーユーザになると得られる特権は、 言い換えてみれば通常のユーザアカウントの保護を受けることができない、 ということも意味しています。
ですから、この章を読んでからあなたが最初にすべきなのは、 もし用意していないなら、日常的に利用するための あなた自身のユーザアカウントを作成することです。 これはマルチユーザモード、シングルユーザモードを問わず、 同様にあてはまります。 この章のうしろの方では、アカウントの追加と通常のユーザから スーパーユーザへと移行する手順について扱います。
システムユーザとは、DNS、メール、 ウェブサーバといった各種サービスを運用するために使われます。 この目的は、セキュリティを確保するためです。 もしサービスがスーパーユーザで実行されていると、 それらのサービスは (本来意図しないような) どんな動作でも可能となり、適切な制限を適用することができません。
システムユーザの具体例として、 daemon、 operator、 bind (DNS; Domain Name Service 用) および news といったものがあります。 またシステム管理者はよく、 インストールしたウェブサーバを運用するために httpd というユーザを作成しています。
nobody ユーザは通常の特権を持たないシステムユーザですが、 nobody を利用するサービスが増えれば増えるほど、その特権も大きくなります。
ユーザアカウントは、 主に現実のユーザがシステムにアクセスする手段として用いられるものです。 このアカウントは利用するユーザとシステム環境を分離します。 そのため、システムや他のユーザに危害をおよぼす危険性をなくし、また、 他に影響を与えることなくユーザ自身の環境をカスタマイズすることを可能にしています。
システムにアクセスするすべてのユーザは、 それぞれに一人一つのユーザアカウントを持つべきです。 こうすることで誰が何を行なっているかがわかりますし、 他の人の設定を壊してしまったり、 他人にメールを読まれてしまうようなことを避けることができます。
それぞれのユーザは快適にシステムを利用するため、 シェル、エディタ、キー設定、言語など、 各自の環境をセットアップすることができます。
強力で柔軟性に富むアカウント情報の変更手段として、 pw があります。 しかし、新しいアカウントをつくる場合は adduser を、 アカウントを削除する場合は rmuser を使うことが推奨されています。
chpass を使うことで、 システム管理者、通常のユーザはパスワード、シェル、 その他の個人情報を変更することができます。 また、特にパスワードを変更する場合には、 通常 passwd の方が良く使われます。
adduser は、 新しいユーザを登録するためのシンプルなプログラムです。 このプログラムは passwd と group に新しいユーザのエントリを作成するのと同時に、 ホームディレクトリを作成して /usr/share/skel からデフォルトで使用されるドットファイル (訳注: ホームディレクトリに存在する “.” から始まるファイルのことで、各種設定に用いられます) をコピーします。 また、新しく作成されたユーザに対して、 ウェルカムメッセージをメールで送信することも可能です。
初期設定ファイルを作成するには、 adduser -s -config_create とします[5]。 そして次に adduser のデフォルト設定を行ない、 最初のユーザアカウントを作成します。 システムを日常利用する際に root を用いるのは最悪です。
Example 14-1. adduser の設定の変更
# adduser -v Use option ``-silent'' if you don't want to see all warnings and questions. Check /etc/shells Check /etc/master.passwd Check /etc/group Enter your default shell: csh date no sh tcsh [sh]: tcsh Your default shell is: tcsh -> /usr/local/bin/tcsh Enter your default HOME partition: [/home]: Copy dotfiles from: /usr/share/skel no [/usr/share/skel]: Send message from file: /etc/adduser.message no [/etc/adduser.message]: no Do not send message Use passwords (y/n) [y]: y Write your changes to /etc/adduser.conf? (y/n) [n]: y Ok, let's go. Don't worry about mistakes. I will give you the chance later to correct any input. Enter username [a-z0-9_-]: jru Enter full name []: J. Random User Enter shell csh date no sh tcsh [tcsh]: Enter home directory (full path) [/home/jru]: Uid [1001]: Enter login class: default []: Login group jru [jru]: Login group is ``jru''. Invite jru into other groups: guest no [no]: wheel Enter password []: Enter password again []: Name: jru Password: **** Fullname: J. Random User Uid: 1007 Gid: 1007 (jru) Class: Groups: jru wheel HOME: /home/jru Shell: /usr/local/bin/tcsh OK? (y/n) [y]: y Added user ``jru'' Copy files from /usr/share/skel to /home/jru Add another user? (y/n) [y]: n Goodbye! #
簡単に上の操作を説明します。 まずデフォルトシェルを tcsh (packages にある追加のシェルです) に変更し、 新しいユーザにウェルカムメッセージのメールを送付しないようにしました。 そしてその設定を保存し、wheel グループ (後に、 これが重要な意味を持っていることがわかるでしょう) に所属する jru というアカウントを作成しています。
Note: 入力したパスワードは画面に表示されません。 アスタリスク記号も表示されませんので、 パスワードを二回とも間違えて入力してしまわないように注意してください。:-)
Note: これ以降はオプション引数をつけず単に adduser を起動します。 デフォルト設定を変更する必要はありません。 もし、adduser がデフォルト設定を変更するかどうか尋ねてきたら、 adduser を終了し、
-sオプションを使うようにしてください。
rmuser は、 システムからユーザを削除します。 これにはユーザデータベースからの削除だけでなく、 その他、そのユーザに依存する情報すべてが含まれます。
rmuser は次の手順を実行します。
指定されたユーザの crontab(1) エントリを削除 (存在する場合)。
指定されたユーザの at(1) ジョブをすべて削除。
指定されたユーザが所有するすべてのプロセスを強制終了。
ローカルパスワードファイルから、 指定されたユーザのエントリを削除。
指定されたユーザのホームディレクトリを削除 (ディレクトリの所有者が指定されたユーザのものだった場合)。
/var/mail から、指定されたユーザの到着メールファイルを削除。
/tmp のような一時ファイル保存領域から、 指定されたユーザの所有するファイルを削除。
そして最後に、 /etc/group にある すべてのグループから、指定されたユーザを削除します。
Note: 指定されたユーザと同じ名前のグループで、 そのユーザが削除されると空のグループとなる場合は、 そのグループ自体が削除されます。 これは adduser(8) によってユーザごとに作成される、 ユニークなグループに対応するものです。
スーパユーザアカウントの削除に rmuser を利用することはできません。 スーパユーザアカウントの削除はほとんどすべての場合、 大規模なシステムの破壊を意味するからです。
デフォルトでは、 どういう操作を行なっているか確認できる対話モードが使われます。
Example 14-2. rmuser による対話的なアカウントの削除
# rmuser jru Matching password entry: jru:*:1000:1000::0:0:J. Random User:/home/jru:/usr/local/bin/tcsh Is this the entry you wish to remove? y Remove user's home directory (/home/jru)? y Updating password file, updating databases, done. Updating group file: trusted (removing group jru -- personal group is empty) done. Removing user's incoming mail file /var/mail/jru: done. Removing files belonging to jru from /tmp: done. Removing files belonging to jru from /var/tmp: done. Removing files belonging to jru from /var/tmp/vi.recover: done. #
pw は、 ユーザやグループの作成、削除、 変更および表示を行なうことができ、 システムユーザファイルやシステムグループファイルの編集機能を持った コマンドラインのユーティリティです。
これはシェルスクリプトからの利用や、 直接コマンドを実行する際に便利に使えるように設計されたものです。
詳細はすべて pw(8) に書かれています。
chpass は、 パスワード、シェル、その他の個人情報といった、 ユーザデータベース情報を変更します。
システム管理者に限りスーパユーザ権限で chpass を用い、 他のユーザの情報やパスワードを変更することが可能です。
ユーザ名の他にオプションを指定しないと、 chpass はユーザ情報を編集するエディタを表示します。 そのエディタを終了すると、 chpass はユーザデータベース情報の変更を試みます。
Example 14-3. スーパユーザによる対話的な chpass
#Changing user database information for jru. Login: jru Password: * Uid [#]: 1000 Gid [# or name]: 1000 Change [month day year]: Expire [month day year]: Class: Home directory: /home/jru Shell: /usr/local/bin/tcsh Full Name: J. Random User Office Location: Office Phone: Home Phone: Other information:
通常のユーザは、この情報の限られた部分のみ変更が可能です。 また、変更できるのはそのユーザ自身の情報のみです。
Example 14-4. 通常のユーザによる対話的な chpass
#Changing user database information for jru. Shell: /usr/local/bin/tcsh Full Name: J. Random User Office Location: Office Phone: Home Phone: Other information:
Note: chfn、 chsh はいずれも、 単に chpass へのハードリンクになっています。 また、ypchpass、 ypchfn および ypchsh も同様です。 NIS のサポートは自動的に行なわれますので、 コマンドの先頭に yp をつける必要はありません。
passwd は、 ユーザが自分のパスワードを変更する通常の方法です。 スーパユーザ権限では、 他のユーザのパスワードを変更するのに使われます。
Note: ユーザはパスワードを変更する前に、 もともと設定されていたパスワードを入力しなければなりません。 これはユーザがコンソールを離れた際に、 不審な人物によってパスワードが変更されることを防ぐためです。
Example 14-5. passwd
% passwd Changing local password for jru. Old password: New password: Retype new password: passwd: updating the database... passwd: done # passwd jru Changing local password for jru. New password: Retype new password: passwd: updating the database... passwd: done
Note: yppasswd は、 単に passwd へのハードリンクになっています。 NIS のサポートは自動的に行なわれますので、 コマンドの先頭に yp をつける必要はありません。
quota がシステムで有効化されていると、 システム管理者はディスク使用の上限を設定し、 ユーザは自身のディスク使用量をチェックできるようになります。 quota については、quota の章に書かれています。
地域化 (localization) とは、 それぞれ異なる言語、キャラクタセット、 日付や時間の標準などに適応させるための環境設定を、 システム管理者やユーザが行なうことを指します。 地域化については、 地域化の章に書かれています。
訳: 日野 浩志 <hino@ccm.cl.nec.co.jp>、(jpman
プロジェクトの成果を利用させ ていただきました)。
この章では、基本的なシステムセキュリティの考え方、 覚えておくべき一般的なルールを紹介し、 FreeBSD における高度な話題について簡単に説明します ここで扱う話題の多くは、 一般的なシステムやインターネットセキュリティにもあてはまります。 インターネットはもはや、誰もが親切な隣人であろうとする “友好的な” 場ではありません。 あなたのシステムを安全に保つことは、 あなたのデータ、知的財産、時間、その他を、 ハッカーやその同類から守るためには欠かせません。
FreeBSD は、 システムとネットワークの整合性と安全性を確実にする仕組みと一連のユーティリティを提供しています。
この章を読むと、以下のことがわかります。
FreeBSD に関する基本的なシステムセキュリティの考え方
DES や MD5 のような、FreeBSD で利用できるさまざまな暗号化手法について
代替認証システムである、 ワンタイムパスワード認証システム S/Key の設定方法
もう一つの代替認証システム Kerberos の設定方法
IPFW で firewall を構築する方法
IPsec の設定方法
FreeBSD で使われている SSH 実装である OpenSSH の設定および使用方法
拡張されたファイルシステムアクセス制御リスト (ACL) の UFS での設定および使用方法
この章を読む前に、次のことが必要になります。
FreeBSD およびインターネットの基本概念の理解
セキュリティとは、システム管理者をいつも悩ませる仕事の一つです。 すべての BSD Unix マルチユーザシステムは、 従来からいくつかのセキュリティ機構を備えていますが、 ユーザを疑心暗鬼に陥らせないように追加のセキュリティ機構を構築し 保守する仕事はおそらく、システム管理者としてもっとも大きな責務の一つでしょう。 マシンの安全性に反映されるのは、管理者が作業したことだけです。 またセキュリティ問題は、快適な環境に必要なものと競合します。 一般に Unix システムは膨大な数のプロセスを同時に動作させることができ、 そのプロセスの大部分は、サーバ - 外部から接続し、通信するものとして動作します。 かつてのミニコンとメインフレームがデスクトップにとってかわり、 さらにコンピュータが相互に接続されたネットワークを形成するようになった今日、 セキュリティは一層大きな関心事になってきています。
セキュリティを実装するには、 タマネギのように階層化する手法 (a layered “onion” approach) が最適です。 どうすれば良いのか簡単に説明すると、 便利な機能と同じ数だけセキュリティの階層を作り、 システムへの侵入を注意深く監視するのです。 あなたはセキュリティを過度に厳重にしたり、 侵入の監視に時間をとられたいとは思わないでしょう。 この侵入の発見という部分は、 あらゆるセキュリティ機構において最も重要な部分の一つなのです。 たとえば、システムの各バイナリに schg フラグ (chflags(1) 参照) を設定するのは、大して意味がありません。 フラグを設定すると一時的にバイナリが保護され、 侵入してきた攻撃者によってシステムに加えられる変更のうち、 容易に検出可能な変更は行なえなくなります。 しかしその結果として、セキュリティ機構がその侵入者を検出することも まったくできなくなってしまうでしょう。
また、システムセキュリティには、 さまざまな形での攻撃に対処することとも関係しています。 攻撃の中には root 権限を奪おう (“root 権限を破る”) とはしないけれども、 クラッシュやシステムの不安定状態を引き起こそうとするものもあります。 このセキュリティ問題は、いくつかに分類することが可能です。
サービス妨害攻撃 (denial of service attack)
ユーザアカウントの不正利用 (user account compromise)
アクセス可能なサーバを使った root 権限の不正利用
ユーザアカウントを経由した root 権限の不正使用
バックドアの設置
サービス妨害攻撃 (DoS 攻撃) とは、 マシンから必要な資源を奪う行為です。 通常、サービス妨害攻撃はそのマシンで実行されるサーバや ネットワークスタックを過負荷状態にしてマシンをクラッシュさせたり、 マシンを使えなくしたりするような力任せの方法です。 サービス妨害攻撃の中には、 ネットワークスタックのバグを利用して、 パケット一つでマシンをクラッシュさせようとするものもあります。 後者には、カーネルにバグ修正を施すことによってのみ対応することができます。 サーバプロセスに対する攻撃は、オプションを適切に指定することによって、 攻撃されている状況でサーバプロセスの負荷上昇に限界を設定することで 対応できる場合が多いです。これらに比べると、 ネットワークへの力任せの攻撃への対応はずっと難しくなります。 たとえば、偽造パケットによる攻撃 (spoof-packet attack) は、 インターネットからシステムを切り離す以外の方法で 防ぐことはほとんど不可能です。 この攻撃によって、マシンを落としてしまうことはできないかもしれませんが、 接続しているインターネット回線を飽和させてしまうことはできます。
ユーザアカウントの不正利用は、 サービス妨害攻撃よりもずっとよくある問題です。 このご時勢でも、自分たちのマシンで標準の telnetd, rlogind, rshd, ftpd サーバを実行させているシステ ム管理者は多いのです。これらのサーバは、デフォルトでは、暗号化さ れたコネクション上で動作していません。その結果、抱えているユーザ 数が標準くらいであれば、リモートログイン (そのシステムにログイン するには最も普通で便利な方法です) しているユーザのうち一人以上は、 パスワードを覗き見られてしまうでしょう。システム管理者が注意深い 人ならば、たとえログインが成功していたとしても、リモートアクセス ログを解析して、疑わしい送信元アドレスを探すものです。
ひとたび攻撃者がユーザアカウントへのアクセス権を入手したら、 攻撃者は root 権限を破れると仮定するべきです。 しかし、セキュリティを十分維持し、手入れの行き届いたシステムにおい ては、あるユーザアカウントへのアクセスが可能となっても、 必ずしも攻撃者に root へのアクセス権を与えるとは限りません。この違いは重要です。 というのは、一般的に root へのアクセス権がなければ、 攻撃者は自分の侵入の痕跡を隠蔽することができませんし、 そのユーザのファイルを引っかき回したり、 マシンをクラッシュさせたりするのがせいぜいです。 ユーザアカウントの不正利用はめずらしいことではありません。 なぜなら一般ユーザは、 システム管理者ほど注意を払わない傾向があるからです。
システム管理者は、あるマシン上で root 権限を奪取する方法は、 潜在的に何通りもあるということを心しておかねばなりません。 攻撃者は root のパスワードを知っているかもしれませんし、 攻撃者が root 権限で実行されているサーバのバグを見つけ、 ネットワーク接続を介して root 権限を破ることができるかもしれません。 また、攻撃者は suid-root プログラムに存在するバグを知っていて、 ユーザアカウントを破れば root 権限を奪取できるかもしれません。 攻撃者があるマシン上で root 権限を破る方法を知ったならば、 攻撃者は裏口を用意する必要がありません。 これまでに発見され、ふさがれた root の穴の多くには、攻撃者が自分のしたことの痕跡を消そうとした作業が、 かなりの割合で含まれています。 そのため、ほとんどの攻撃者は裏口を作るのです。裏口は、 攻撃者がたやすくシステムへの root アクセスを再び得られるようにしますが、 有能な管理者に侵入を検知する便利な手段を与えるものでもあります。 攻撃者に裏口を作らせないようにするということは、 セキュリティにとっては実際には良くないことかもしれません。 なぜなら、攻撃者が最初に見つけて侵入してきたセキュリティホールは ふさがれないからです。
セキュリティを改善する方法は、常に、 タマネギの皮のように階層化する手法 (a multi-layered “onion peel” approach) で実装されるべきです。これらは次のように分類できます。
root とスタッフのアカウントの安全性を高める。
root の安全性を高める - root 権限で動作するサーバと suid/sgid バイナリ。
ユーザアカウントの安全性を高める。
パスワードファイルの安全性を高める。
カーネルのコア、raw デバイス、ファイルシステムの安全性を 高める。
システムに対して行なわれた、不適切な変更をすばやく検出す る。
必要と思われる以上の対応をとる (paranoia)。
本章の次の節では、上記の各項目についてより深く掘り下げていき ます。
コマンド対プロトコル: この文書を通して、コマンドまたはアプリケーションを指すのには 太字 を使います。 たとえばプロトコルであると同時にコマンドでもある ssh などに対して使います。
以下の節では、本章の前節 でとりあげた FreeBSD システムの安全性を高める方法について 述べます。
root のアカウントの安全性を確保しないうちから スタッフのアカウントの安全性をうんぬんしてもしかたがありません。 ほとんどのシステムでは、root アカウントに割り当てたパスワードが 1 つあり ます。まず最初にすべきことは、このパスワードはいつで も不正利用の危険に晒されていると仮定することです。これは root のパスワードを消すべきだと言っているのではありません。 root のパスワードは、マシンにコンソールからアクセスするのには、 ほとんどいつでも必要なものです。ここで言いたいのは、コンソール 以外からは、そして可能なら su(1) コマンドを実行する場合も root のパスワードを使えないようにするべきである、ということで す。たとえば、あなたが使っている pty が、 /etc/ttys ファイルで insecure と指定 されているか確認してください。そうすると、 telnet や rlogin 経由では root で直接ログインできないようになります。 これは、/etc/ssh/sshd_config を編集して PermitRootLogin に NO が設定されるようにすることで実現できます。 sshd のような、別のログインサービス を使っている場合でも同様に、直接 root へログインすることを許し ていないかどうか確認してください。すべてのアクセス手段 - たとえば FTP のようなサービスが、良くクラックの対象となることを考えましょう。 root への直接ログインは、 システムコンソール経由でのみ可能であるべきなのです。
また当然、システム管理者として自分が root になれるようにしておく必要が ありますから、そのための穴をいくつか開けておきます。し かし、それらの穴を動作させるには、さらに追加のパスワード認証が 必要であるようにしておくことが重要です。 root でアクセス可能と する方法の一つとして、適切なスタッフアカウントを (/etc/group 中の) wheel グループに加えることがあります。 wheel グループに入っているスタッフメンバは su を使って root になることが許されます。 パスワードエントリにおいて、スタッフメンバを wheel グループに置くことによって直接 wheel 権限を与えてはいけません。スタッフメンバのアカウントは staff グループに所属させるべきで、その上で /etc/group ファイルを通して wheel グループに加えるべきです。実際に root アクセスの必要なスタッフメンバのみ wheel グループに置くようにすべきです。 他の認証方法の場合、たとえば Kerberos を使用する場合には、 root アカウントの Kerberos .k5login ファイルを使えば、誰も wheel グループに置く必要なく root に ksu(1) することを許可できます。このやり 方はよりよい解決策なのかもしれません。なぜなら、 wheel のメカニズムでは、侵入者がパスワード ファイルを手に入れ、スタッフアカウントのいずれか 1 つを破るこ とができると、 root を破ることがまだできてしまうからです。 wheel のメカニズムを用いる方が、 何もしないよりは良いのですが、 必ずしも最も安全な選択肢とは限りません。
スタッフのアカウント、また究極には root アカウントの安全性 を高める間接的な方法は、別のログインアクセスの方法を用いてスタッ フのアカウントの安全性を高め、その上でそのスタッフのアカウント の暗号化パスワードを “アスタリスク化” するものです。 vipw(8) コマンドを使えば、暗号化されたパスワードを “*” 1 文字に置き換えられます。 このコマンドは、/etc/master.passwd ファイルとユーザ/パスワードデータベースを更新して、 パスワード認証によるログインができないようにします。
たとえば、次のスタッフアカウントを、
foobar:R9DT/Fa1/LV9U:1000:1000::0:0:Foo Bar:/home/foobar:/usr/local/bin/tcsh
こう変更します。
foobar:*:1000:1000::0:0:Foo Bar:/home/foobar:/usr/local/bin/tcsh
暗号化されたパスワードは “*” と一致することがないので、 この変更によって通常のログインはできなくなります。 こうした後は、スタッフメンバは認証のために kerberos(1) や 公開鍵 / 秘密鍵の組を用いる ssh(1) のような代わりとなる認 証手段を利用しなければなりません。 Kerberos のようなログイン機構を使う場合は、一般に Kerberos サーバを実行するマシンと自分のデスクトップワークステーションの安全性を確保しなければなりません。 また ssh で公開鍵 / 秘密鍵の組を使う場合、 一般に、ログイン元マシン (通常は自分のワー クステーション) の安全性を確保しなければなりません。ここで、 ssh-keygen(1) で公開鍵 / 秘密鍵の組を生成する際、鍵の組 をパスワードで防御することにより、鍵の組への防御層を追加するこ ともできます。スタッフアカウントのパスワードを “アスタリスク” でつぶすことができると、 管理者自身が設定 した安全性の高い方法でしかスタッフメンバがログインできないこと も保証できます。こうして、多くの侵入者が使う重大なセキュリティ の穴である、 安全性の低い無関係なマシンからネットワークを覗き見る方法を塞ぐようなセッションを提供する、 安全性の高い暗号 化されたコネクションを使うことを、スタッフメンバ全員に強制する ことができるのです。
より間接的なセキュリティの仕組みでは、制限の強いサーバから 制限の弱いサーバへログインすることを前提としています。たとえば、 メインマシンで、様々な種類のサーバを実行させている場合、ワーク ステーションではそれらのサーバを実行させてはなりません。ワーク ステーションを十分に安全にしておくためには、実行するサーバの数 を、一つもサーバが実行されていないというくらいにまでできる限り 減らすべきです。また、パスワードで保護されたスクリーンセーバを 走らせておくべきです。ワークステーションへの物理的アクセスが与 えられたとすると、もちろん言うまでもなく、攻撃者は管理者が設定 したいかなる種類のセキュリティをもうち破ることができるのです。 このことは、管理者として必ず考えておかねばならない問題ですが、 システム破りの大多数は、ネットワーク経由でリモートから、ワーク ステーションやサーバへの物理的アクセス手段を持たない人々によっ て行われるという事実もまた、念頭に置いておく必要があります。
Kerberos のような方法を使うことで、 スタッフアカウントのパ スワードの変更もしくは停止を一箇所で行なうことと、スタッフメン バがアカウントを持つすべてのマシンに即時にその効果を及ぼすこと が可能となります。スタッフメンバのアカウントが危険に晒されたと きに、すべてのマシンでスタッフメンバのパスワードを即座に変更す る能力を過小評価してはいけません。パスワードが分散されている状 況では、N 台のマシンでパスワードを変更すると、てんやわんやの事 態を招く可能性があります。Kerberos を使用すると、パスワードの 再発行に制限 (re-passwording restriction) を課することもできま す。この機能を使うことにより、ある Kerberos チケットをしばらく 経つとタイムアウトにすることができるだけでなく、一定期間 ( 例 えば、1 ヶ月に 1 回) 経つと、ユーザに新しいパスワードを選ぶよ うに要求することもできます。
用心深いシステム管理者は、自分に必要なサーバプロセスだけを 過不足なく実行させるものです。サードパーティ製のサーバは、よくバグを持っ ていがちだということに注意して下さい。たとえば、古いバージョンの imapd や popper を実行させておくのは、全世界に万能の root の切符を与えているようなものです。自分で注意深くチェックしていない サーバは、決して実行してはいけません。root で実行させる必要のあるサーバはほとんどありません。たとえば、 ntalk, comsat, finger デーモンを、専用ユーザの 砂場 (sandbox) で実行させることができます。 管理者が膨大な数の問題を経験していないのなら、 この「砂場」は完 璧ではありませんが、セキュリティに関するタマネギ的アプローチは ここでも成り立ちます。砂場で実行されているサーバプロセスを経由 して侵入を果たすことができたとしても、攻撃者はさらに砂場から外 に脱出しなければなりません。攻撃者が通過せねばならない層の数が 増えれば増えるほど、それだけ攻撃者が侵入に成功する確率が減りま す。Root の抜け穴は歴史的に、基本システムサーバも含め、 root 権限で実行されるほとんどすべてのサーバプロセスで発見されています。 ユーザが sshd 経由でのみログインし、 telnetd, rshd, rlogind 経由でログインすることが決 してないマシンを稼働させているのであれば、それらのサービスを停 止させて下さい!
FreeBSD では、今では ntalkd, comsat, finger は砂場で実行させることがデフォ ルトになっています。次に砂場で実行させるべきプログラムの候補と して、named(8) があります。 /etc/defaults/rc.conf ファイルには、 named を砂場で実行するために必要な 引数がコメントアウトされた形式で含まれています。新しいシステム をインストールしているか、それとも既存のシステムをアップグレー ドして使っているかに依存しますが、砂場として使用する特別のユー ザアカウントがインストールされていないかもしれません。用心深い システム管理者であれば、できるだけいつでも研究を怠らず、サーバ に砂場を仕込むものでしょう。
通常、砂場で実行しないサーバが他にいくつかあります。 sendmail, popper, imapd, ftpd などです。これらのうちいくつか のサーバには代わりとなるものがありますが、代わりのものをインス トールするには、あなたが思うより多くの仕事が必要になるかもしれ ません (便利さという要素がまたも勝利を収めるわけです)。これら のサーバは、root 権限で実行しなければばならないかもしれません。また、 これらのサーバ経由で生じる侵入を検出するためには、他の仕組みに 頼らなくてはならないかもしれません。
システムの root 権限の潜在的な穴で他に大きなものには、シ ステムにインストールされた suid-root/sgid バイナリがあります。 これらのバイナリは、rlogin のように、 /bin, /sbin, /usr/bin, /usr/sbin に存在するものがほとんどです。100% 安全なものは存在しないとは いえ、システムデフォルトの siud/sgid バイナリは比較的安全とい えます。それでもなお、root セキュリティホールがこれらのバイナリにときおり発見されています。 1998 年に xterm (普通、suid 設定されています) を脆弱にしていた Xlib の root セキュリティホールが見つかりました。 安全である方がよいので、 用心深いシステム管理者は残念に思いながらも、スタッフのみが実行 する必要がある suid バイナリは、スタッフのみがアクセス可能な特 別なグループに含めるように制限を加え、誰も使わない suid バイナ リは (chmod 000 を実行して) 片付けてしまう でしょう。ディスプレイを持たないサーバは、一般的に xterm のバイナリを必要としません。 sgid バイナリもほとんど同様の危険な存在になり得ます。侵入者が kmem に sgid されたバイナリを破ることができた場合、その侵入者 は /dev/kmem を読み出すことができるように なるでしょう。つまり、暗号化されたパスワードファイルを読み出す ことができるようになるので、パスワードを持つどのアカウントをも、 潜在的な危険に晒すことになります。他にも、 kmem グループを破った侵入者が pty を通して 送られたキーストロークを監視できるという危険があります。キース トロークには、安全な方法でログインするユーザが使っている pty も含まれます。 tty グループを破った侵入者は、ほぼ任意のユーザの tty へ書き込みができます。ユーザが端末プログラムやキーボードを シミュレーションする機能を持ったエミュレータを使っている場合、 侵入者は潜在的に、結局そのユーザとして実行されるコマンドをユー ザの端末にエコーさせるデータストリームを生成できる可能性があり ます。
ユーザアカウントは、普通、安全性を高めることが最も困難です。 スタッフに対しては、とても厳格なアクセス制限を強制しパスワードを “アスタリスク” で外すことができるでしょうが、 管理者が 持ちうる一般ユーザすべてのアカウントに対して同じことはできない かもしれません。管理者が十分に統率をとることができるなら、管理 者は勝利し、ユーザのアカウントの安全を適切に確保できるかもしれ ません。それができないならば、よりいっそう気を配って一般ユーザ のアカウントを監視するよりほかありません。 一般ユーザアカウントに対し ssh や Kerberos を利用することには、 システム管理がさらに増えたりテクニカルサポートが必要に なるなどの問題があります。それでも、暗号化パスワードファイルと 比較するとはるかに良い解です。
できるだけ多くのパスワードを * で外し、 それらのアカウントのアクセスには ssh や Kerberos を使うようにすることが、唯一の確実な方法です。 暗号化パスワードファイル (/etc/spwd.db) は root でのみ読み出し可能だけれども、 たとえ、侵入者が root の書き込み権限は得られなくとも、 読み出しアクセス権限を得ることは可能かもしれません。
セキュリティスクリプトで常にパスワードファイルの変更をチェッ クし、報告するようにすべきです (ファイルの完全性のチェック 節参照)。
root の権限を破ると、攻撃者はほとんど何でもできますが、特に重宝さ れる特定の事柄もいくつかあります。たとえば、最近のカーネルは、組 み込みのパケット覗き見デバイス (packet sniffing device) ドライ バを備えているものがほとんどです。FreeBSD では bpf デバイスと呼ばれています。侵入者 は普通、侵入済みのマシンでパケット覗き見プログラムを実行させよ うと試みます。侵入者にわざわざそういう機能を提供する必要はない ので、ほとんどのシステムで bpf デバイスを組み込むべきではありません。
bpf デバイスを外しても、 /dev/mem と /dev/kmem
という悩みの種がまだ残っています。この問題に関しては、侵入者は raw
ディスクデバイスに書き込 むこともできます。ほかにも、モジュールローダ、kldload(8) とい
う、別のカーネル機能があります。やる気まんまんの侵入者は、KLD
モジュールを使って自分独自の bpf
もしくはその他覗き見デバイス
を動作中のカーネルにインストールできます。この問題を
避けるため、システム管理者はカーネルをより高い安全レベル (
securelevel)、少なくとも安全レベル 1 で実行させる必要がありま す。安全レベルは
sysctl を使って kern.securelevel
変数を操作して設定できます。ひとたび安全レベルに 1 を設定すると、raw デバ
イスに対する書き込みアクセスは拒否され、たとえば schg
のような特別な chflags フラグの機能が
強制されます。システム起動に関わる重要なバイナリやディレクトリ、
スクリプトファイルなど、安全レベルが設定されるまでの間に実行さ
れるすべてのものに対しても、確実に schg
フラグを設定してください。この設定をやり過ぎても
構いませんが、より高い安全レベルで動作している場合、システムの
アップグレードがはるかに困難になります。システムをより高い安全
レベルで実行させるようにするが、すべてのシステムファイルとディ レクトリに schg
フラグを設定しないというところで妥協するという手もあります。
もう一つの可能性としては、単純に / および /usr を読み
込み専用でマウントすることです。ここで特筆すべきことは、システ
ムを守ろうとして厳しくしすぎると、侵入を検出するという非常に重
要なことができなくなってしまうということです。
ことこの問題に至ると、システム管理者にできることは、便利さ という要素がその醜い頭を上げない程度に、コアシステムの設定と制 御ファイルを防御することだけです。たとえば、 / および /usr にある 大部分のファイルに schg ビットを設定するた めに chflags を使用するのは、おそらく逆効果 でしょう。なぜなら、そうすることでファイルは保護できますが、侵 入を検出する窓を閉ざしてしまうことにもなるからです。セキュリティ のタマネギの最後の層はおそらく最も重要なもの - 検出で す。セキュリティの残りのものは、突然の侵入を検出できなければ、 まったく有用ではありません (あるいは、もっと悪ければ、安全性に 対する間違った感覚を植え付けてしまいます)。タマネギの仕事の半 分は、もう半分の検出側が攻撃者を攻撃の最中に捕えるようにするた めに、攻撃者を食い止めるのではなく侵入を遅らせることなのです。
侵入を検出する最も良い方法は、変更されていたり、消えていた り、入れた覚えがないのに入っているファイルを探すことです。変更 されたファイルを探すのに最も良い方法は、もう一つの (しばしば中 央に集められた)、アクセスが制限されたシステムから行なうもので す。さらに安全でアクセス制限されたシステム上でセキュリティ用ス クリプトを書けば、 スクリプトは潜在的な攻撃者からはほぼ見えなくなります。 これは重要なことです。この有効性を最大限に活用 するためには、一般的に、アクセスの制限されたマシンから実際に使っている他のマシンへのかなりのアクセスを許可する必要があります。普 通は、他のマシンからアクセス制限されたマシンへ読み込み専用の NFS エクスポートをしたり、アクセス制限されたマシンから他のマシンへ ssh 接続を行なうために、 ssh 鍵のペアを作ったりすることで行います。 ネットワークのトラフィックを別にして、NFS は最も可視性 のない方法です - 各クライアント上のファイルシステムを、 事実上検出されずに監視できるようになります。アクセス制限された サーバがスイッチを通してクライアントに接続されている場合、たい てい NFS がより良い選択肢です。アクセス制限されたサーバがハブ や、いくつかのルーティング層を通してクライアントに接続している場合、 NFS は (ネットワークの面で) あまりにも危険なので、 ssh の方が認証を行った跡は残りますが、良い方法でしょう。
アクセス制限されたマシンに、監視しようとするクライアントシ ステムへの少なくとも読み込みのアクセス権を与えたら、次に実際に 監視するためのスクリプトを書かなくてはいけません。NFS マウント をすれば、find(1) や md5(1) などの単純なシステムユー ティリティでスクリプトを書くことができます。少なくとも 1 日 1 回、クライアントのファイルを直接 md5 にかけ、さらにもっと頻繁 に /etc および /usr/local/etc にあるようなコントロール用 ファイルを試験するのが一番です。アクセス制限されたマシンが正し いと知っている、基となる md5 情報と比べて違いが見つかった場合、 システム管理者に調べて欲しいと悲鳴を上げるようにすべきです。優 れたセキュリティ用スクリプトは、/ および /usr などのシステムパーティション上で不適 当に suid されたバイナリや、新たに作成されたファイルや削除され たファイルがないかどうかを調べるでしょう。
NFS ではなく、ssh を使用する場合は、 セキュリティ用スクリプトを書くのはずっと難しいことで す。スクリプトを動かすためには、クライアントに対してスクリプト を scp しなくてはいけませんし、それは目に見 えてしまいます。そして、安全のためには、スクリプトが使うバイナ リ (find など) を scp する必要もあります。 クライアントマシンの ssh クライアントはすでに攻撃されてしまっているかもしれません。 結局のところ、安全でないリンク上の場合は ssh は必要かもしれませんが、ssh を扱うのはとても大変なことです。
優れたセキュリティ用スクリプトは、ユーザやスタッフメンバの アクセス設定ファイルの変更もチェックするものです。 .rhosts, .shosts, .ssh/authorized_keys など ... MD5 チェックの範囲外になってしまうであろう ファイル群です。
ユーザ用のディスク容量が非常に大きい場合は、パーティション 上の各ファイルを見て回るのに大変な時間がかかるかもしれません。 この場合は、マウントフラグを設定して、このパーティションに suid されたバイナリやデバイスを置けないようにするのが良い考え です。nodev および nosuid オプション (mount(8) 参照) が知るべきものでしょう。 とにかく少なくとも週に 1 度はファイルシステムをスキャンするべきです。 なぜなら、この層の目的は、侵入が成功したかどうかに関わらず、侵 入があったことの検出をすることだからです。
プロセスアカウンティング (accton(8) 参照) は、 マシンへの侵入を検出するためのメカニズムとして推奨できる、 比較的オーバヘッドの少ないオペレーティングシステムの機能です。 侵入を受けた後でも当該ファイルが無傷である場合に、侵入者が 実際にどのようにしてシステムに侵入したかを追跡するのに特に役立ちます。
最後に、セキュリティスクリプトはログファイルを処理するよう にし、ログファイル自体もできるだけ安全性の高い方法で生成するよ うにすべきです - リモート syslog は極めて有益になり得ま す。侵入者は自分の侵入の痕跡を覆い隠そうとしますし、また、ログ ファイルはシステム管理者が最初の侵入の時刻と方法を追跡してゆく ために極めて重要です。ログファイルを永久に残しておくための 1 つの方法は、システムコンソールをシリアルポートにつないで走らせ、 コンソールを監視している安全なマシンを通して絶えず情報を集める ことです。
多少偏執狂的になっても決して悪いことにはなりません。原則的 に、システム管理者は、便利さに影響を与えない範囲でいくつでもセ キュリティ機能を追加することができます。 また、いくらか考慮した結果、 便利さに影響を与えるセキュリティ機能を追加することもできます。 より重要なことは、 セキュリティ管理者はこれを多少混ぜこぜにして使うべきだということです。 - もしあなたが、本文書に書かれている勧告をそのまま使用した場合は、 予想される攻撃者はやはり本文書を読んでいるわけですから、 あなたの防御策を教えてしまうことになります。
このセクションではサービス妨害攻撃 (DoS 攻撃) を扱います。 サービス妨害攻撃は、普通は、パケット攻撃です。ネットワークを飽 和させる最先端の偽造パケット (spoofed packet) 攻撃に対してシス テム管理者が打てる手はそれほど多くありませんが、一般的に、その 種の攻撃によってサーバがダウンしないことを確実にすることで、被 害をある限度に食い止めることはできます。
サーバの fork の制限。
踏み台攻撃の制限 (ICMP 応答攻撃、ping broadcast など)。
カーネルの経路情報のキャッシュ。
よくあるサービス妨害攻撃は、fork するサーバプロセスに対す
るものです。これは、サーバにプロセス、ファイル記述子、メモリを
マシンが死ぬまで食い尽くさせようとするものです。 inetd (inetd(8) 参照)
には、この種の攻撃を制限するオプションが
いくつかあります。マシンがダウンすることを防止することは可能で
すが、この種の攻撃によりサービスが中断することを防止することは
一般的に言ってできないことに注意する必要があります。 inetd のマニュアルページを注意深く読んで下さい。特に、
-c, -C, -R オプションに注意して下さい。IP 偽造攻撃 (spoofed-IP attack)
は inetd の -C
オプションの裏をかけるので、
一般にオプションを組み合わせて使用するべきであることに注意して下さ
い。スタンドアロンサーバの中には、自分自身で fork を制限するパ
ラメータを持っているものがあります。
Sendmail には、 -OMaxDaemonChildren オプションがあります。シ
ステム負荷の値変化には遅れがあるので、sendmail の負荷限界指定
オプションを使うよりも、このオプションを使う方がまともに動作す
る可能性ははるかに高いです。 sendmail
の実行を開始する際に、 MaxDaemonChildren
パラメータを設定するべき
です。その値は、通常見込まれる負荷を扱える程度に十分高いが、そ れだけの数の sendmail を操作しよう
とするとマシンが卒倒してしまうほどには高くないような値に設定す
るべきです。sendmail をキュー処理モード (-ODeliveryMode=queued) で実行することや、 sendmail デーモン
(sendmail -bd) をキュー処 理用プロセス (sendmail -q15m) と別に実行す
ることも、用心深いことと言えます。それでもなおリアルタイムでの
配送を望むのであれば、-q1m のようにすることで、
キュー処理をはるかに短い時間間隔で行うことができます。いずれに しても、MaxDaemonChildren オプションに合理
的な値を確実に指定して、sendmail がなだれをうって失敗すること
がないようにして下さい。
syslogd は直接攻撃される可能性
があるので、可能ならばいつでも -s オプション
を用いることを強く推奨します。これができないなら、 -a オプションを使って下さい。
tcpwrapper の逆 identd などの接 続返し (connect-back) を行うサービスについては十分注意を払うよ うにするべきです。これらは直接攻撃を受ける可能性があります。こ ういう事情があるので、tcpwrapper の 逆 ident 機能を使おうとは思わないのが一般的です。
境界ルータのところでファイアウォールを設けて、外部からのア
クセスに対して内部サービスを防御するという考えは実によいもので
す。この考えは、LAN の外部からの飽和攻撃を防ぐことにあり、内部
サービスをネットワークベースの root
権限への攻撃から防御するこ
とにはあまり考慮を払っていません。ファイアウォールは常に排他的
に設定して下さい。つまり、“ポート A, B, C, D と M から Z まで以外
のすべてにファイアウォールを設ける” というふうにです。このようにすることで、
named (ゾーンのプライマリである場合)、 ntalkd, sendmail
などのインターネットからア
クセスできるサービスとして特に指定するもの以外の、小さい番号の
ポートすべてをファイアウォールで防御することができます。ファイ
アウォールをこの他のやり方 - つまり包含的もしくは受容的
なファイアウォールとして設定しようとする場合、 “close”
することを忘れてしまうサービスがいくつか
出てきたり、新しい内部サービスを追加したのにファイアウォールの
更新を忘れたりする可能性がよく出てきます。ファイアウォール上の
大きい番号のポートを開けておくことにより、小さい番号のポートを
危険に晒すことなく受容的な動作を許すことができます。FreeBSD で は、net.inet.ip.portrange への sysctl
(sysctl -a | fgrep portrange)
をいろいろ使用することで、動的バインドに使用される
ポート番号の範囲を制御できることを記憶にとどめておいてください。
これによりファイアウォールの設定を簡略化することもできます。 たとえば、通常の
first/last 範囲として 4000 から 5000 を、 高位ポートの範囲として、49152 から 65535
を指定し、 (いくつかのインターネットアクセス可能
なポートをブロックから除外するのはもちろんですが) 4000
より下のすべてのポートをブロックするという設定が考えられます。
また別のよくあるサービス妨害攻撃として、踏み台攻撃 (springboard attack)
と呼ばれるものがあります - これは、
あるサーバを攻撃し、そこ結果として生成される応答が自分自身、ロー
カルネットワーク、そして他のマシンを過負荷に追い込むようにする
攻撃です。この種の攻撃の中で最もありふれたものに、 ICMP ping broadcast 攻撃があります。攻撃
者は、実際に攻撃したいマシンのアドレスを送信元アドレスに設定し た ping
パケットを偽造して、対象の LAN のブロードキャストアド
レスに向けてパケットを送信します。境界にあるルータがブロードキャ
ストアドレスに対する ping パケットを握り潰すように設定されてい ない場合、LAN
は、詐称された送信元アドレスに向けて応答パケット
を生成するはめになり、犠牲となるマシンが飽和するところまで行っ
てしまいます。攻撃者が同じトリックを異なるネットワーク上のいく
つものブロードキャストアドレスに対して同時に使用した場合、とく
にひどいことになります。これまでに、120 メガビット以上のブロー
ドキャスト攻撃が観測されています。2 番目の踏み台攻撃は、ICMP
エラー報告の仕掛けを狙うものです。攻撃者は ICMP エラー応答を生
成するパケットを生成し、サーバの受信ネットワークを飽和させ、そ
の結果としてサーバが送信ネットワークを ICMP 応答で飽和させてし
まうようにすることができます。mbuf を消費し尽くさせることによ
り、この種の攻撃でサーバをクラッシュさせることも可能です。サー バが生成した
ICMP 応答を十分速く送信できない場合、とくにひどい ことになります。FreeBSD
カーネルには、この種の攻撃の効果を抑制する ICMP_BANDLIM
と呼ばれる新しいカーネルコンパイルオプション があります。踏み台攻撃の 3
つめの主要なクラスに属する攻撃は、 udp echo サービスのような、特定の inetd 内部サービスに関連する
ものです。攻撃者は、単に送信元アドレスがサーバ A の echo ポー
トであり、送信先アドレスがサーバ B の echo ポートであるように UDP
パケットを偽造します。ここでサーバ A, B はともにあなたの LAN
に接続されています。この 2 つのサーバは、この一つのパケッ
トを両者の間で互いに相手に対して打ち返しあいます。このようにし
てパケットをほんのいくつか注入するだけで、攻撃者は両方のサーバ と LAN
を過負荷状態にすることができます。同様の問題が内部 chargen ポートにも存在します。
有能なシステム管理者はこの手の inetd
内部テストサービスのすべてを無効にしておくものです。
偽造パケット攻撃は、カーネルの経路情報キャッシュに過負荷を
生じさせるために用いられることもあります。 net.inet.ip.rtexpire, rtminexpire, rtmaxcache の sysctl パラメータを参照して下さい。でた らめな送信元 IP
アドレスを用いた偽造パケット攻撃により、カーネ
ルは、一時的なキャッシュ経路を経路情報テーブルに生成します。こ れは netstat -rna | fgrep W3 で見ることがで
きます。これらの経路は、普通は 1600 秒程度でタイムアウトになり
ます。カーネルがキャッシュ経路テーブルが大きくなり過ぎたことを
検知すると、カーネルは動的に rtexpire
を減らしますが、rtminexpire
より小さくなるようには決して減らしません。ここに問題が 2 つあります。
負荷の軽いサーバが突然攻撃された場合、カーネルが十分素 早く反応できないこと。
カーネルが持続的攻撃に耐えられるほど十分 rtminexpire が低く設定されていないこと。
自分のサーバが T3 もしくはそれより高速の回線でインターネッ
トに接続されている場合、sysctl(8) を用いて
rtexpire と rtminexpire
とを手動で上書きしておくことが思慮深いことといえます。どちらか 一方でも 0
には決してしないで下さい (自分のマシンをクラッシュ
させたくないのであれば)。両パラメータを 2 秒
に設定すれば、攻撃から経路情報テーブルを守るには十分でしょう。
もしあなたが、Kerberos と ssh を使いたいのだとしたら、
両者に関して言っておかねばならない問題がいくつかあります。 Kerberos V
は大変優れた認証プロトコルですが、Kerberos 化された telnet や rlogin
は、バイナリストリームを扱う
のに不向きになってしまうようなバグがあります。さらに、デフォル トでは、Kerberos
は -x オプションを使わない限
りセッションを暗号化してくれません。 ssh
では、デフォルトですべてを暗号 化してくれます。
ssh はあらゆる場面でとても良く働いてくれます。 ただし、デフォルトで暗号鍵を転送してしまうこと を除けばです。これはつまり、暗号鍵を持った安全なワークステーショ ンがあって、この暗号鍵で残りのシステムとアクセスできるようになっ ている場合に、安全でないマシンへ ssh 接続を行なうとあなたの暗号鍵を使えてしまうということです。 実際の鍵そのものが見えてしまうわけではありませんが、 ssh はあなたが login している間、転送用ポートを作ります。攻撃者が安全でないマシンの root を破ったら、このポートを使って暗号鍵を取得し、 この暗号鍵でロックが外れる他のマシンへのアクセスを得てしまいます。
スタッフのログインには、Kerberos を組み合せた ssh を使用することを勧めます。 ssh は、Kerberos 対応機能と一緒 にコンパイルできます。こうすると、見えてしまうかもしれない ssh 鍵をあまりあてにしないで良いようになります。 また、それと同時に、Kerberos 経由でパスワードを保護することもできます。 ssh 鍵は、安全なマシンからの自動化されたタスク (Kerberos はこの用途には不向きです) のみに使用するべきです。また、 ssh の設定で鍵転送をしないようにするか、あるいは ssh が authorized_keys ファイル中に書くことを許 している from=IP/DOMAIN オプションを使用し て、特定のマシンからログインしてきたときのみ鍵が有効であるよう にすることも勧めます。
訳: 花井 浩之 <hanai@FreeBSD.org>, 12 September
1996.
訳改訂: 日野 浩志 <hino@ccm.cl.nec.co.jp>, 12 March
2001.
Unix システムにおけるすべてのユーザは、そのアカウントに対応し た一つのパスワードを持っています。それらのパスワードはユーザ本人 と本当のオペレーティングシステムのみが知っているべきであるという ことは明らかでしょう。それらのパスワードを秘密に保っておくために、 パスワードは“一方向ハッシュ”として知られる方式で暗 号化されます。一方向ハッシュとは、簡単に暗号化はできるが解読は難 しいという方法です。言葉を換えると、先ほど明らかであると書いたの は実は正しくないのです: オペレーティングシステム自身は本当はパスワードを知らないのです。その代わりに 暗号化された形でのみパスワードを知っていま す。“素のテキスト”としてパスワードを得る唯一の方法は、 可能な限りのパスワード空間を検索するという力任せの方法です。
不幸なことに、Unix が生まれようとしているときにパスワードを 安全な形で暗号化できる方式は DES (Data Encryption Standard) に基づいたものだけでした。このことは米国に住んでいるユーザにとって は大して問題ではありませんでしたが、DES のソースコードを米国外に 輸出することはできないという問題がありました。そのために、 FreeBSD は、米国の法律を守ることと、未だに DES を使っていた他の Unix 一族との互換性を保つこととを両立する方法を探し出す必要がありました。
その解決方法は、米国のユーザは DES のライブラリをインストー ルして DES を使用できるが、米国外のユーザは国外に輸出可能な他の ひとつの暗号化方式を使用することができる、というように暗号化ライ ブラリを分割することでした。これが FreeBSD がデフォルトの暗号化 方式として MD5 を使うようになったいきさつです。MD5 は DES よりも より安全であると考えられているため、DES をインストールする一番の 理由は互換性を保つためといえます。
FreeBSD 4.4 の前までは、libcrypt.a は暗号化に使われるライブラリへのシンボリックリンクでした。 FreeBSD 4.4 で libcrypt.a は設定可能なパスワード認証ハッシュライブラリを提供するようになりました。 現在のところ、このライブラリは DES, MD5 および Blowfish ハッシュ関数に対応しています。デフォルトでは、FreeBSD はパスワードの暗号化に MD5 を利用します。
FreeBSD がどの暗号化方式を使うようにセットアップされている かを判断するのは簡単です。 /etc/master.passwd ファイルの中の暗号化さ れたパスワードを調べてみるのが一つの方法です。MD5 ハッシュで暗 号化されたパスワードは、DES ハッシュで暗号化されたパスワードよ りも長く、$1$ という文字で始まるという特徴を持っています。 $2$ で始まるパスワードは、Blowfish ハッシュ関数で暗号化されています。 DES のパスワードはこ れといって識別可能な特徴は持っていませんが、MD5 のパスワードよ りは短く、そして $ という文字を含ま ない 64 文字のアルファベットを使って表現されているので、比較的 短い文字列でドル記号で始まっていないものはおそらく DES のパス ワードでしょう。
新規パスワードがどちらのパスワード形式になるかは、 /etc/login.conf の中の “passwd_format” ログインケーパビリティによって制御されます。 その値としては、“des”、 “md5” または “blf” を設定することができます。 ログインケーパビリティに関するより詳細な情報は、 login.conf(5) マニュアルページをご覧ください。
S/Key は一方向ハッシュ関数を基にしたワンタイムパスワード方式 です。FreeBSD では、互換性のために MD4 ハッシュを用いていますが 他のシステムでは MD5 や DES-MAC を用いてます。S/Key は、バージョ ン1.1.5 以降のすべての FreeBSD に含まれていますし、FreeBSD 以外 の数多くのシステムの上でも利用されています。S/Key は Bell Communications Research, Inc. の登録商標です。
FreeBSD バージョン 5.0 以降では、S/Key は機能的に同等な OPIE (Onetime Passwords In Everything) で置き換えられました。OPIE はデフォルトでは MD5 ハッシュを使用します。
以下の説明では、三種類の異なる「パスワード」が使われます。 まず一つ目は、あなたが普段使っている普通の Unix スタイルの、もしくは Kerberos のパスワードです。ここではこれを “Unix パスワード” と呼ぶことにします。二つ目は、S/Key の key プログラム、または OPIE の opiekey プログラムによって生成され、 keyinit または opiepasswd プログラムとログインプロンプトが受け付けるパスワードです。 ここではこれを “ワンタイムパスワード” と呼ぶことにします。三つ目のパスワードは、 key/opiekey (と場合により keyinit/opiepasswd) プログラムに対してユーザが入力する秘密のパスワードで、 ワンタイムパスワードを生成するのに使われます。ここではこれを “秘密のパスフレーズ” もしくは単に “パスフレーズ” と呼ぶことにします。 (訳注: ユーザが頭の中だけにしまっておくべきものが、 この秘密のパスフレーズです。なお、原文ではこれを “password” と表記していますが、 混乱を避けるために訳文ではすべて “秘密のパスフレーズ” に統一しています)。
秘密のパスフレーズは、Unix パスワードと何の関連性もありません。 両者を同一に設定することは可能ですが、お奨めしません。Unix パスワードは長さが 8 文字に制限されています (訳注: FreeBSD で DES を導入していない場合はもっと長いパスワードも認識されます)。 これに対し、S/Key や OPIE では秘密のパスフレーズを好きなだけ長くすることができます (訳注: 実装上、key コマンドなどの バッファ長で制限されてしまう可能性があります。200 文字程度に押 えておいた方がよいでしょう :-)。 6 語から 7 語からなるパスフレーズがふつうです。ほとんどの部分で、 S/Key や OPIE システムは Unix のパスワードシステムと完全に独立して動作するようになっています。
パスフレーズに加え、S/Key や OPIE システムにとって重要な 2 種類のデータがあります。一つは “シード (seed: 種)” または “キー (key: 鍵)” と呼ばれるもので、2 つの文字と 5 つの数字で構成されます。もう一つは “シーケンス番号 (iteration count)” で、1 から 100 までの整数です。S/Key はここまで に述べたデータを利用してワンタイムパスワードを生成します。その方 法は、まずシードと秘密のパスフレーズを連結し、それに対してシーケ ンス番号の回数だけ MD4/MD5 ハッシュを繰り返し計算します。 そしてその結果を 6 つの短い英単語に変換します。 認証システム (一次的には PAM) は、前回最後に受け付けたワンタイムパスワードを記録しています。 そして、その前回 のワンタイムパスワードと、ユーザが入力したワンタイムパスワードを 1 回ハッシュ関数にかけた結果とが一致した場合に、このユーザは認証 されます。一方向ハッシュ関数を使っているので、もし正しく認証され たワンタイムパスワードが一回盗聴されたとしても、次回以降に使われ る複数のワンタイムパスワードを生成することは不可能です。シーケ ンス番号はログインが成功するたびに一つずつ減らされて、ユーザとロ グインプログラムの間で同期が取られます。シーケンス番号が 1 まで 減ったら、S/Key や OPIE を再度初期化する必要があります。
次に、それぞれのシステムで関連する 3 つのプログラムについて説明します。 key と opiekey プログラムは、シーケンス番号と、シードと、 秘密のパスフレーズを受け付けて、ワンタイムパスワード 1 つ、 または一連のワンタイムパスワードの一覧を生成します。 keyinit と opiepasswd プログラムは、それぞれ S/Key と OPIE を初期化するのに使用され、また秘密のパスフレーズ、 シーケンス番号やシードを変更するためにも使用されます。 それぞれのプログラムを実行するには、秘密のパスフレーズか、 または、シーケンス番号とシードとワンタイムパスワードの 1 組かの、どちらかを与えます。 keyinfo と opieinfo プログラムは、 それぞれに対応する認証ファイル (/etc/skeykeys または /etc/opiekeys) を調べて、プログラムを起動したユーザの現在のシーケンス番号とシードを表示します。
この文書では、4 種類の異なる操作について説明します。 1 つ目は、keyinit または opiepasswd を信頼できる通信路上で利用して、 最初にワンタイムパスワードを設定したり、 秘密のパスフレーズやシードを変更する操作です。 2 つ目は、同じことを行うために keyinit または opiepasswd を信頼できない通信路上で利用する操作です。 この場合は信頼できる通信路経由の key または opiekey を併用します。3 つ目は、key または opiekey を使い、信頼できない通信路を通じてログインする操作です。 4 番目は、key または opiekey を使って複数のワンタイムパスワードを一気に生成する操作です。 ここで生成した複数のワンタイムパスワードは、 メモしたり印刷したりして携帯し、 信頼できる通信路が一切ないところで利用することができます。 (訳注: ワンタイムパスワードを記録した紙をなくさないこと! 電話番号や IP アドレス、ユーザ名を一緒にメモしていたら最悪です!!)
信頼できる通信路 (たとえばあるマシンのコンソール画面や、ssh を使っている時など) を利用しているときに、S/Key を初めて初期化 すること、S/Key の秘密のパスフレーズを変更すること、またはシー ドを変更すること、をおこなうことができます。そのためには、まず あなた自身がログインし、keyinit コマンドを 以下のようにパラメータなしで実行します。
% keyinit
Adding unfurl:
Reminder - Only use this method if you are directly connected.
If you are using telnet or rlogin exit with no password and use keyinit -s.
) `keyinit' コマンドが出力する注意です。訳すと、
) 注意 - この動作モードはマシンに直接入力しているときのみ利用
) すること。もし今 telnet や rlogin を使っているなら、秘密のパ
) スフレーズを入力せずにこのままコマンドを終了し、かわりに
) keyinit -s を実行すること。
Enter secret password:
Again secret password:
ID unfurl s/key is 99 to17757
DEFY CLUB PRO NASH LACE SOFT
OPIE では opiepasswd が代わりに使われます。
% opiepasswd -c
[grimreaper] ~ $ opiepasswd -f -c
Adding unfurl:
Only use this method from the console; NEVER from remote. If you are using
telnet, xterm, or a dial-in, type ^C now or exit with no password.
Then run opiepasswd without the -c parameter.
) `opiepasswd' コマンドが出力する注意です。訳すと、
) この手順はコンソール以外では利用しないでください。リモートからは
) 絶対に利用してはいけません。telnet, xterm またはダイアルアップで
) 利用している場合は、^C を入力するかパスワードを入れずに終了してく
) ださい。その後、opiepasswd を -c オプションなしで実行してください。
Using MD5 to compute responses.
Enter new secret pass phrase:
Again new secret pass phrase:
ID unfurl OTP key is 499 to4268
MOS MALL GOAT ARM AVID COED
Enter new secret pass phrase: または Enter secret password: というプロンプトに対して、 あなたが考えた秘密のパスフレーズを入力します。このパスフ レーズはログインするときに使うものではなく、ログインするときに 使うワンタイムパスワードを生成するために使うものであることを覚 えておいてください。“ID” から始まる行は、 1 回分のパラメータで、 あなたのログイン名とシーケンス番号とシードです。 (訳注: keyinit コマンドは 次回にログインするときに使えるパラメータを参考のためにここで表示します)。 システムにログインするときには、 システム側が自動的にこれらのパラメータを表示してくれますから、 これらのパラメータを 覚えておく必要はありません。最後の行が、今述べたパラメータと入力 された秘密のパスフレーズから計算されたワンタイムパスワードです。 この例を実行した後、次にログインするときに打ち込むべきワンタイ ムパスワードがこれです。
信頼できない通信路を使って秘密のパスフレーズを初期化または変更するためには、 それとは別に key または opiekey プログラムを実行するための信頼できる通信路を用意しておく必要があります。 たとえばそれは、あなたが信頼できる Macintosh のデスクアクセサリや信頼できるマシンのシェルプロンプトだったり するでしょう。(訳注: ここでの通信路とはマシンそのものになりま す。信頼できるマシンとは、信頼できる人がしっかり管理しているマ シンということです)。他に準備しておくものとして、シーケンス番 号 (100 は適切な値といえるでしょう) と、場合によっては自分で考 えた、またはランダムに生成されたシードがあります。(あなたが S/Key を初期化しようとしているマシンへの) 信頼できない通信路を 使うときには、keyinit -s コマンドを以下のよ うに使用します。
% keyinit -s Updating unfurl: Old key: to17758 Reminder you need the 6 English words from the key command. ) `keyinit' コマンドが出力する注意です。訳すと、 ) 注意 - skey コマンドの出力する 6 英単語が必要になります。 Enter sequence count from 1 to 9999: 100 Enter new key [default to17759]: s/key 100 to 17759 s/key access password: s/key access password:CURE MIKE BANE HIM RACY GORE
OPIE では、opiepasswd を使います。
% opiepasswd
Updating unfurl:
You need the response from an OTP generator.
) `opiepasswd' コマンドが出力する注意です。訳すと、
) OTP 生成器の返す出力が必要になります。
Old secret pass phrase:
otp-md5 498 to4268 ext
Response: GAME GAG WELT OUT DOWN CHAT
New secret pass phrase:
otp-md5 499 to4269
Response: LINE PAP MILK NELL BUOY TROY
ID mark OTP key is 499 gr4269
LINE PAP MILK NELL BUOY TROY
デフォルトのシード (keyinit プログラム は困ったことにこれを key と呼んでいるのですが、混乱しないよう注意してください) で構わなければ、Return を押してください。次に、アクセスパスワードを入れる前に、あらか じめ用意しておいた信頼できる通信路(信頼できるマシンや信頼でき る S/Key デスクアクセサリなど) へ移って、先ほどと同じパラメータ を入力します。
% key 100 to17759 Reminder - Do not use this program while logged in via telnet or rlogin. Enter secret password: <秘密のパスフレーズ> CURE MIKE BANE HIM RACY GORE
OPIE では、
% opiekey 498 to4268 Using the MD5 algorithm to compute response. Reminder: Don't use opiekey from telnet or dial-in sessions. Enter secret pass phrase: GAME GAG WELT OUT DOWN CHAT
ここで信頼できない通信路の方に戻って、 生成されたワンタイムパスワードをコピーして対応するプログラムに入力します。
S/Key または OPIE を初期化したら、 ログイン時には以下のようなプロンプトが出てくるでしょう。
% telnet example.com Trying 10.0.0.1... Connected to example.com Escape character is '^]'. FreeBSD/i386 (example.com) (ttypa) login: <ユーザ名> s/key 97 fw13894 Password:
OPIE については、
% telnet example.com Trying 10.0.0.1... Connected to example.com Escape character is '^]'. FreeBSD/i386 (example.com) (ttypa) login: <username> otp-md5 498 gr4269 ext Password:
ここでは表示していませんが、S/Key と OPIE のプロンプトには便利な機能が備わっています。 パスワードプロンプトに対して、何も入力せずに Return を押すとエコーモードに切り替わります。 つまりタイプした文字がそのまま見えるようになるのです。 これは、紙に印刷していたりするワンタイムパスワードを 手で入力しなければならない場合に特に役立つ機能です。
次に、 このログインプロンプトに対して入力するワンタイムパスワードを生成しなければなりません。 これは、key または opiekey プログラムを使える信頼できるマシン上で行わなければなりません。 (これらのプログラムには DOS や Windows, MacOS 版があります)。 どちらも、コマンドラインからシーケンス番号とシードを指定しなければなりません。 ログインしようとしているマシンのログインプロンプトから直接カットアンドペーストすると楽でしょう。
信頼できるシステムで
% key 97 fw13894 Reminder - Do not use this program while logged in via telnet or rlogin. Enter secret password: WELD LIP ACTS ENDS ME HAAG
OPIE では
% opiekey 498 to4268 Using the MD5 algorithm to compute response. Reminder: Don't use opiekey from telnet or dial-in sessions. Enter secret pass phrase: GAME GAG WELT OUT DOWN CHAT
ここでワンタイムパスワードが得られました。 ログインを続けましょう。
login: <username> s/key 97 fw13894 Password: <return to enable echo> s/key 97 fw13894 Password [echo on]: WELD LIP ACTS ENDS ME HAAG Last login: Tue Mar 21 11:56:41 from 10.0.0.2 ...
都合によっては、信頼できるマシンや信頼できる通信路が一切確 保できないようなところで S/Key を使う必要があるでしょう。この ような場合には、key コマンドを使って複数の ワンタイムパスワードをあらかじめ一気に生成し、紙に印刷して携帯 していくことができます。たとえば
% key -n 5 30 zz99999 Reminder - Do not use this program while logged in via telnet or rlogin. Enter secret password: <秘密のパスフレーズ> 26: SODA RUDE LEA LIND BUDD SILT 27: JILT SPY DUTY GLOW COWL ROT 28: THEM OW COLA RUNT BONG SCOT 29: COT MASH BARR BRIM NAN FLAG 30: CAN KNEE CAST NAME FOLK BILK
-n 5 という引数によって 5 個のワンタイム
パスワードを順に生成します。ここで 30 は、最
後のシーケンス番号となるべき数字です。出力は普通に使う順番とは 逆に出力されていることに注意してください
(訳注: 一番最初に使うワンタイムパスワードは一番最後に出力され
たものです)。この結果をカットアンドペーストして lpr
コマンドを使って印刷すると よいでしょう。
もしあなたがセキュリティに偏執するなら、この結果を紙と鉛筆を使っ
て手で書き移した方がよいかもしれません。ここで、出力の各行はシー
ケンス番号とそれに対応する一回分のワンタイムパスワードです。 消費済みの
ワンタイムパスワードの行をペンで消していくと便利で しょう。
設定ファイル /etc/skey.access を使って Unix パスワードの利用を制限することができます。 この場合の判 断基準として、ログインを受け付ける際のホスト名、ユーザ名、端末 のポート、IP アドレスなどが利用できます。この設定ファイルの詳 細に関してはマニュアル skey.access(5) をご覧ください。マ ニュアルにはこの機能に関わるセキュリティについて、いくつかの警 告が記述してあります。この機能を使ってセキュリティを高めようと するのならば絶対にこのマニュアルを読んでください。
もし /etc/skey.access ファイルが存在 しないならば (FreeBSD のデフォルト状態ではそうです)、すべての ユーザが Unix パスワードを利用することができます。逆に、もし ファイルが存在するならば、skey.access ファ イルに明示的に記述されていない限り、すべてのユーザは S/Key の 利用を要求されます。どちらの場合においても、そのマシンのコンソー ルからはいつでも Unix パスワードを使ってログインすることが可能 です。
以下によく使われるであろう三種類の設定を含む設定ファイルの 例を示します。
permit internet 192.168.0.0 255.255.0.0 permit user fnord permit port ttyd0
はじめの行 (permit internet) で、telnet などで接続するときの IP のソースアドレス (注意: これは偽造され るおそれがあります) が特定の値とマスクに一致している場合に、 Unix パスワードの利用を許可することを指定しています。 この設定自体はセキュリティを高めるための機能ではありません。そうでは なく、ログインの権利を持つ許可されたユーザに対して、現在そのユー ザが使っているネットワークが信頼できないと考えられるので S/Key を使うべきである、ということを気づかせるための機能であると考え てください。
二行目 (permit user) によって、ある特定のユーザ、この場合は fnord、に対して、いつでも Unix パスワードの利用を許可するように指定しています。 一般的にはこの設定をおこなうべきではありません。 key プログラムがどうしても使えない環境にい る人や、ダム端末しかない環境にいる人、または何度教えても聞く耳 を持たないような人をサポートする必要がある場合にのみ設定をおこ なってください。
三行目 (permit port) によって、ある特定 の端末ポートからログインしようとするすべてのユーザに対して Unix パスワードの利用を許可するように指定しています。この設定 はダイヤルアップ回線に対する設定として利用できるでしょう。
訳: 有村 光晴 <arimura@jp.FreeBSD.org>.
Kerberosは、 サーバのサービスによってユーザが安全に認証を受けられる ようにするための、ネットワークの付加システム及びプロトコルです。 リモートログイン、リモートコピー、 システム間での安全なファイルのコピ ーやその他のリスクの高い仕事がかなり安全に、 そしてこれまでより制御 できるようになります。
以下の文章は、 FreeBSD用として配布されているKerberosをセットアップ する際のガイドとして読むことができます。しかし、 完全な説明が必要な場合には、マニュアルページを読んだ方がよい でしょう。
Kerberos は選択が任意な FreeBSD のコンポーネントです。 もっとも簡単なインストール方法は、FreeBSD のインストール時に sysinstall で 'krb4' または 'krb5' 配布物を選択することです。 そうすると、Kerberos の 'eBones' (KerberosIV) または 'Heimdal' (Kerberos5) 実装がインストールされます。 これらの実装が入っているのは、 これがアメリカ合衆国およびカナダの外で開発されたものであるため、 アメリカ合衆国からの暗号ソフトウェアの輸出が制限されていた時代でも アメリカ合衆国およびカナダ以外の国に住んでいるシステム所有者の手に入るものだったからです。
ほかに、MIT で実装された Kerberos が Ports Collection の security/krb5 から利用できます。
この作業はKerberosサーバだけでおこないます。まず、 古いKerberosの データベースが存在しないことを確認してください。 ディレクトリ/etc/kerberosIVに移って、 次のファイルだけが 存在することをチェックします。
# cd /etc/kerberosIV # ls README krb.conf krb.realms
もし他のファイル (principal.* や master_key) が 存在する場合には、 kdb_destroyというコマンドで古い Kerberosデータベースを消してください。 Kerberosが走っていなければ、 単に余計なファイルを消せばよいです。
まず、krb.conf と krb.realmsを編集してKerberosの 管理領域 (realm) を定義してください。 ここでは管理領域が EXAMPLE.COM で、サーバ名が grunt.example.com であるとします。 krb.conf というファイルを次のように編集してください。
# cat krb.conf EXAMPLE.COM EXAMPLE.COM grunt.example.com admin server CS.BERKELEY.EDU okeeffe.berkeley.edu ATHENA.MIT.EDU kerberos.mit.edu ATHENA.MIT.EDU kerberos-1.mit.edu ATHENA.MIT.EDU kerberos-2.mit.edu ATHENA.MIT.EDU kerberos-3.mit.edu LCS.MIT.EDU kerberos.lcs.mit.edu TELECOM.MIT.EDU bitsy.mit.edu ARC.NASA.GOV trident.arc.nasa.gov
この例にあるような他の管理領域は、実際には必要ありません。 この例は複数の管理領域を認識する方法を示したものですので、 これらの行は含めなくても結構です。
1行目はこのシステムが動いている管理領域の名前です。 他の行は管理領域とホスト名のエントリです。 行の1つめの単語が管理領域で、2つめがその管理領域の中で “鍵配布センター”(Key Distribution Center) として働くホスト名です。ホスト名の次に admin server と書いてある場合には、そのホストが 管理データベースサーバ (Administrative Database Server) も提供することを意味します。 これらの単語について詳しく知りたい場合には Kerberos のマニュアルページをご覧ください。
ここで、EXAMPLE.COM という管理領域に grunt.example.com およびその他の .example.com ドメインのすべてのホストを追加しなければなりません。 krb.realms は次のようになります。
# cat krb.realms grunt.example.com EXAMPLE.COM .example.com EXAMPLE.COM .berkeley.edu CS.BERKELEY.EDU .MIT.EDU ATHENA.MIT.EDU .mit.edu ATHENA.MIT.EDU
もう一度注意しますが、他の管理領域を書く必要はありません。 これらは複数の管理領域を認識できるようにマシンを設定する方法を 示した例ですので、これらの行は消して構いません。
1行目は名前をつけた管理領域に 特定の システムを含めるための ものです。 残りの行は名前をつけた管理領域にサブドメインのデフォルトの システムを含めるためのものです。
これでデータベースを作成する準備ができました。 この操作はKerberos サーバ (鍵配布センター) を起動するだけです。 kdb_initコ マンドを次のように実行してください。
# kdb_init Realm name [default ATHENA.MIT.EDU ]: EXAMPLE.COM You will be prompted for the database Master Password. It is important that you NOT FORGET this password. Enter Kerberos master key:
ここで鍵を保存して、 ローカルのマシンにあるサーバが取り出せるように します。 それにはkstashコマンドを使用します。
# kstash Enter Kerberos master key: Current Kerberos master key version is 1. Master key entered. BEWARE!
これで暗号化されたマスタパスワードが /etc/kerberosIV/master_key に保存されました。
Kerberosを導入する それぞれの システムのデータベースに、2つ のprincipal (主体名) を追加する必要があります。その名前は kpasswdとrcmdです。 これら2つのprincipalは、個々 のシステムにおいて、 システム名と同じ名前のインスタンスと組にして作成 されます。
これらの kpasswd と rcmd というデーモンによって、他の システムからKerberosのパスワードを変更したり、 rcpや rlogin, rshといったコマンドを実行したりできるよ うになります。
それでは実際にこれらのエントリを追加しましょう。
# kdb_edit Opening database... Enter Kerberos master key: Current Kerberos master key version is 1. Master key entered. BEWARE! Previous or default values are in [brackets] , enter return to leave the same, or new value. Principal name: passwd Instance: grunt <Not found>, Create [y] ? y Principal: passwd, Instance: grunt, kdc_key_ver: 1 New Password: <---- ここは「RANDOM」と入力してください Verifying password New Password: <---- ここは「RANDOM」と入力してください Random password [y] ? y Principal's new key version = 1 Expiration date (enter yyyy-mm-dd) [ 2000-01-01 ] ? Max ticket lifetime (*5 minutes) [ 255 ] ? Attributes [ 0 ] ? Edit O.K. Principal name: rcmd Instance: grunt <Not found>, Create [y] ? Principal: rcmd, Instance: grunt, kdc_key_ver: 1 New Password: <---- ここは「RANDOM」と入力してください Verifying password New Password: <---- ここは「RANDOM」と入力してください Random password [y] ? Principal's new key version = 1 Expiration date (enter yyyy-mm-dd) [ 2000-01-01 ] ? Max ticket lifetime (*5 minutes) [ 255 ] ? Attributes [ 0 ] ? Edit O.K. Principal name: <---- 何も入力しないと終了します
次に、各マシンにおけるサービスを定義している、 すべてのインスタンスを展開します。 これには ext_srvtab というコマンドを使用します。 このコマンドで作成されるファイルは、Kerberos の各クライアントの /etc/kerberosIV ディレクトリに安全な方法で コピーまたは移動する必要があります。 このファイルはそれぞれのサーバとクライアントに存在しなければならず、 また Kerberos の運用において重要なものです。
# ext_srvtab grunt Enter Kerberos master key: Current Kerberos master key version is 1. Master key entered. BEWARE! Generating 'grunt-new-srvtab'....
このコマンドは一時的なファイルを作成するだけです。 ファイル名をすべ てのサーバが読めるような srvtab という名前に変更しな ければなりません。 mvコマンドを用いてシステムの場所に移動 してください。
# mv grunt-new-srvtab srvtab
そのファイルがクライアントに配るためのもので、 ネットワークが安全で はないと思われる場合には、 client-new-srvtab を移動 可能なメディアにコピーして物理的に安全な方法で運んでください。 クラ イアントの/etc/kerberosIVディレクトリで、 名前を srvtabに変更し、 modeを600にするのを忘れないでください。
# mv grumble-new-srvtab srvtab # chmod 600 srvtab
ここで、 ユーザのエントリをデータベースに追加する必要があります。 始めに、 ユーザjaneのエントリを作成してみましょう。 kdb_edit を用いて次のように作成してください。
# kdb_edit Opening database... Enter Kerberos master key: Current Kerberos master key version is 1. Master key entered. BEWARE! Previous or default values are in [brackets] , enter return to leave the same, or new value. Principal name: jane Instance: <Not found>, Create [y] ? y Principal: jane, Instance: , kdc_key_ver: 1 New Password: <---- 安全なパスワードを入れてください Verifying password New Password: <---- もう一度パスワードを入れてください Principal's new key version = 1 Expiration date (enter yyyy-mm-dd) [ 2000-01-01 ] ? Max ticket lifetime (*5 minutes) [ 255 ] ? Attributes [ 0 ] ? Edit O.K. Principal name: <---- 何も入力しないと終了します
まず始めにKerberosデーモンを起動する必要があります。 /etc/rc.conf ファイルを正しく編集してあれば、マシンを再 起動することでに自動的にデーモンが起動します。 これはKerberosサー バでのみ必要です。 Kerberosクライアントは/etc/kerberosIVか ら必要なものを自動的に入手します。
# kerberos & Kerberos server starting Sleep forever on error Log file is /var/log/kerberos.log Current Kerberos master key version is 1. Master key entered. BEWARE! Current Kerberos master key version is 1 Local realm: EXAMPLE.COM # kadmind -n & KADM Server KADM0.0A initializing Please do not use 'kill -9' to kill this job, use a regular kill instead Current Kerberos master key version is 1. Master key entered. BEWARE!
さあ、これで上で作成した jane というIDのチケットを kinitコマンドで得ることができます。
% kinit jane MIT Project Athena (grunt.example.com) Kerberos Initialization for "jane" Password:
klist コマンドを用いてトークンを見て、 きちんとチケットを持って いるかどうか確認してください。
% klist Ticket file: /tmp/tkt245 Principal: jane@EXAMPLE.COM Issued Expires Principal Apr 30 11:23:22 Apr 30 19:23:22 krbtgt.EXAMPLE.COM@EXAMPLE.COM
passwd コマンドを用いてパスワードを変更して、 kpasswd デーモンが Kerberos データベースに対して認証されるかどうかチェックして ください。
% passwd realm EXAMPLE.COM Old password for jane: New Password for jane: Verifying password New Password for jane: Password changed.
Kerberos は root 権限が必要な 各 ユーザに対し、 su コマンドのパスワードをユーザ毎に 別のもの として持つことを可能にします。 root に su できる権利を与えられた id を追加します。これは、 principal に付いている root というインスタンスに よって制御されています。 kdb_editを用いて jane.rootというエントリを Kerberosデータベースに作成します。
# kdb_edit Opening database... Enter Kerberos master key: Current Kerberos master key version is 1. Master key entered. BEWARE! Previous or default values are in [brackets] , enter return to leave the same, or new value. Principal name: jane Instance: root <Not found>, Create [y] ? y Principal: jane, Instance: root, kdc_key_ver: 1 New Password: <---- 安全なパスワードを入れます Verifying password New Password: <---- もう一回パスワードを入れます Principal's new key version = 1 Expiration date (enter yyyy-mm-dd) [ 2000-01-01 ] ? Max ticket lifetime (*5 minutes) [ 255 ] ? 12 <--- ここは短くしてください Attributes [ 0 ] ? Edit O.K. Principal name: <---- 何も入力しないと終了します
実際にトークンをもらって、 ちゃんと働いているかどうか確認しましょう。
# kinit jane.root MIT Project Athena (grunt.example.com) Kerberos Initialization for "jane.root" Password:
ここで root ユーザの .klogin ファイルにユーザを追加する必要があります。
# cat /root/.klogin jane.root@EXAMPLE.COM
su してみましょう。
% su Password:
どのトークンを持っているか見てみましょう。
# klist Ticket file: /tmp/tkt_root_245 Principal: jane.root@EXAMPLE.COM Issued Expires Principal May 2 20:43:12 May 3 04:43:12 krbtgt.EXAMPLE.COM@EXAMPLE.COM
ここまでの例では、jane という principal を root とい うインスタンス付きで作成しました。 これはユーザと同じ名前をprincipalと しており、 Kerberosのデフォルトの値です; <username>.root という形式の <principal>.<instance>で、 必要なエントリが root のホームディレクトリの .klogin ファイルにあれば、 <username> が root に su できます。
# cat /root/.klogin jane.root@EXAMPLE.COM
同様に、ユーザのホームディレクトリの .kloginファイルに次の ような行がある場合には
% cat ~/.klogin jane@EXAMPLE.COM jack@EXAMPLE.COM
jane または jack という名前で (前述のkinit によって) 認証されている EXAMPLE.COM という管理領域のユーザ なら誰でもrlogin や rsh, rcp等によってこ のシステム (grunt) のjaneのアカウントまたはファ イルにアクセスできます。
たとえば、jane が他のシステムに Kerberos を用いて login します。
% kinit MIT Project Athena (grunt.example.com) Password: % rlogin grunt Last login: Mon May 1 21:14:47 from grumble Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994 The Regents of the University of California. All rights reserved. FreeBSD BUILT-19950429 (GR386) #0: Sat Apr 29 17:50:09 SAT 1995
次の例では、Jack が同じマシンの Jane のアカウントに login します。jane は .klogin ファイルを前述のように設定しており、 Kerberos では jack という principal をインスタンスなしで設定してあります。
% kinit % rlogin grunt -l jane MIT Project Athena (grunt.example.com) Password: Last login: Mon May 1 21:16:55 from grumble Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994 The Regents of the University of California. All rights reserved. FreeBSD BUILT-19950429 (GR386) #0: Sat Apr 29 17:50:09 SAT 1995
訳: 佐伯 隆司 <saeki@jp.FreeBSD.org>. 11 November
1996.
ファイアウォールは、 インターネットに参加している人はもちろんのこと、 プライベートネットワークのセキュリティ向上のための アプリケーションを 探している人にとっても、 ますます興味深くなりつつある分野です。 このセクションではファイアウォールとは何か、 ファイアウォールの使用法、 そしてファイアウォールを構築するために FreeBSD のカーネルで 提供されているファシリティ (機能) の使用法について説明したいと思います。
Note: 社内のネットワークと “巨大かつ信頼のおけない インターネット”との間にファイアウォールを構築することで セキュリティ上のすべての問題が解決できると考える人がいます。 ファイアウォールはセキュリティ上の問題を 解決する助けになる場合もありますが、 充分な設定がなされていないファイアウォールは、 まったくファイアウォールを 持たない場合よりもセキュリティ上の危険を増大させてしまいます。 ファイアウォールにできることは、 あなたのシステムにもう一つのセキュリティ層を 追加することだけで、 本気でアタックをしかけてくるクラッカーが内部ネットワークに 侵入するのを妨げることはできません。 ファイアウォールを侵入不可能と過信して 内部のセキュリティをおろそかにすることは、 単にクラッカーの仕事を少し簡単にするだけでしか ありません。
現在インターネットで普通に使用されている ファイアウォールには 二つの異なるタイプがあります。一つは、 厳密には パケットフィルタリングルータ と 呼ばれるタイプのものです。これはマルチホームのホストマシン (複数の ネットワークに接続されているマシン) のカーネルが、 ある規則にしたがって パケットを転送したりブロックしたりするものです。もう一つは、 proxy (代理) サーバ として知られているタイプのものです。これは、 おそらくはマルチホームのホストマシン上で、 カーネルによるパケット転送を 禁止して、 デーモンにより認証の提供とパケットの転送とを おこなうものです。
二つのタイプのファイアウォールを組み合わせて使用して、 特定のマシン (要塞ホスト と呼ばれる) だけが パケットフィルタリングルータを通して内部ネットワークへ パケットを送ることができるよう設定している サイトがしばしば存在します。proxy (代理) サービスは通常の認証機構よりもセキュリティを 強化してある 要塞ホストで動作させます。
FreeBSD は (IPFW として知られる) カーネルパケットフィルタ込みで提供されています。 この節の残りでは、このフィルタについて集中して説明します。 サードパーティから提供されるソフトウェアを使用することにより、 Proxy サーバを FreeBSD 上に構築することができます。 しかし、現在入手可能な proxy サーバはたいへんバラエティに富んでいるので、 この節でそれらすべてをカバーすることはできません。
ルータとは、二つまたはそれ以上のネットワークの間で パケットの転送をおこなう マシンのことです。 パケットフィルタリングルータは、そのカーネルの内部に、 一つ一つのパケットをルールリストと比較して 転送するかしないかを決める 特別なコードを持っています。 最近の IP ルーティングソフトウェアのほとんどは、内部に パケットのフィルタリングをおこなうためのコードを持っていて、 デフォルトでは すべてのパケットを転送するようになっています。 このフィルタを有効にするためには、 パケットの通過を許すべきかどうかを決める ルールを自分で定義する必要があります。
パケットを通すべきか通すべきでないかを決めるために、 パケットヘッダの内容にマッチするものが ルールリストから探されます。マッチするルールが見つかると、 ルールアクションが実行されます。ルールアクションには、 パケットを捨てる、パケットを転送する、 またはパケットの発信元に ICMP メッセージを送り返すというものがあります。 ルールの検索は先頭から順番におこなわれ、 通常は最初にマッチしたものだけが 適用されます。そのため、 このルールリストは“ルールチェーン” と呼ばれることもあります。
パケットマッチングの基準は使用するソフトウェアに よって異なりますが、通常はパケットの発信元 IP アドレス、 宛先 IP アドレス、発信元ポート番号、宛先ポート番号 (ポート番号はポートをサポートするプロトコルの場合のみ)、 パケットタイプ (UDP, TCP, ICMP など) に基づくルールを指定することができます。
Proxy サーバとは通常のシステムデーモン (telnetd, ftpd など) を 特別なサーバで置き換えたマシンのことです。 これらのサーバは、 通常は中継をおこなって特定方向への接続だけを許すため、 proxy サーバ と呼ばれます。(たとえば) proxy telnet サーバをファイアウォールホストで走らせておきます。 外部からユーザがファイアウォールに対して telnet を実行すると、proxy telnet サーバが応答して、 何らかの認証機構を実行します。これを通過した後で、 内部ネットワークへのアクセスがおこなえるように なるのです。 (内部ネットワークからの信号は proxy サーバがかわりに受け取り、外へ向けて送り出します)。
Proxy サーバは通常、 普通のサーバより堅固に構築されていて、しばしば “使い捨て”パスワードシステムなどを含む、 多様な認証機構を持っています。 “使い捨て”パスワードシステムとは、 どういうものなのでしょうか。仮に誰かが何らかの方法で、 あなたが使用したパスワードを手に入れたとします。しかし、 一度使用したことで、 そのパスワードは既に無効になっているのです。ですから、 そのパスワードをもう一度使用したとしても、あなたのシステムへ アクセスすることはできないというわけです。 これらのサーバは中継をおこなうだけで、 実際のところサーバホスト自身への アクセスをユーザに許してはいません。そのため、 何者かがセキュリティシステムに 侵入用の裏口を取り付けることは、 より困難になっています。
proxy サーバはアクセス制限の方法をいくつも持っていて、 特定のホスト だけがサーバへのアクセス権を得ることができるように なっていることがあります。 そして目的のマシンと通信できるユーザを制限するように 設定することもできます。もう一度言いますが、 どんなファシリティ (機能) が使えるかは、どんな proxy サービスをおこなうソフトウェアを選ぶかに大きく 依存します。
FreeBSD とともに配布されている IPFW は、 カーネル内部にあってパケットのフィルタリングとアカウンティングをおこなうシステムであり、 ユーザ側のコントロールユーティリティである ipfw(8) を含んでいます。 ルーティングの決定をおこなう際に、これらは互いに協力して、 カーネルで使用されるルールを定義したり、 現在使用されているルールを問い合わせたりすることができます。
IPFW は互いに関連する二つの部分からなっています。 ファイアウォールセクションは パケットフィルタリングをおこないます。また、IP アカウンティングセクションはファイアウォールセクションのものと 似たルールに基づいてルータの使用を追跡します。これにより、 (たとえば) 特定のマシンからルータへのトラフィックがどのくらい 発生しているか調べたり、どれだけの WWW (World Wide Web) トラフィックが フォワードされているかを知ることができます。
IPFW は、 ルータではないマシンにおいても入出力コネクションの パケットフィルタリングのために使用することができるように設計されています。 これは一般的な IPFW の使用法とは異なる特別な使い方ですが、 こういった状況でも同じコマンドとテクニックが使用されます。
IPFW システムの中心となる部分はカーネル内部にあります。 そのため、どのファシリティ (機能) を必要とするかによって、 1 つまたは複数のオプションをカーネルコンフィグレーションファイルに追加し、 カーネルを再コンパイルする必要があるでしょう。 カーネルの再コンパイル方法の詳細については、 「カーネルのコンフィグレーション」(Chapter 9) をご覧ください。
現在、IPFW に関係するカーネルコンフィグレーションオプションは 三つあります。
パケットフィルタリングのためのコードを カーネルに組み込みます。
syslogd(8) を通じて パケットのログを取るためのコードを有効にします。 フィルタルールでパケットのログを取るように指定しても、 このオプションが指定されていなければ、 ログを取ることはできません。
syslogd(8) を通じて ログを取るパケットの数をエントリ毎に制限します。 敵対的な環境においてファイアウォールの 動作のログを取りたいけれど、 syslog の洪水によるサービス拒絶攻撃に対し 無防備でありたくないという場合に、 このオプションを使用したいと思うことが あるかもしれません。
チェーンエントリのログが指定された制限数に達すると、 そのエントリに関するログ取りは停止されます。 ログ取りを再開するには、ipfw(8) ユーティリティを使用して 関連するカウンタをリセットする必要があります。
# ipfw zero 4500
4500 とは、 ログ取りを続行したいチェーンエントリの番号です。
Note: 以前のバージョンの FreeBSD は IPFIREWALL_ACCT というオプションを 持っていました。しかし、 ファイアウォールコードがアカウンティングファシリティ (機能) を 自動的に含むようになったため、 現在では使用されることはなくなっています。
IPFW ソフトウェアの設定は ipfw(8) ユーティリティを通じておこないます。 このコマンドの構文は非常に複雑に見えますが、 一旦その構造を理解すれば比較的単純です。
このユーティリティでは今のところ四つの異なる コマンドカテゴリが 使用されています: それは追加 / 削除、表示、 フラッシュ、およびクリアです。追加 / 削除はパケットの受け入れ、拒絶、ログ取りをどのようにおこなうか というルールを構築するのに使用します。表示はルールリスト (またはチェーン) と (アカウンティング用) パケットカウンタの 内容を調べるのに使用します。 フラッシュはチェーンからすべてのエントリを 取り除くのに使用します。 クリアは一つまたはそれ以上のアカウンティングエントリを ゼロにするのに 使用します。
この形式での使用法は:
ipfw [-N] コマンド [index] アクション [log] プロトコル アドレス [オプション]
この形式で使用する際に有効なフラグは一つだけです。
アドレスやサービス名を 文字列に変換して表示します。
コマンド は一意である限り短縮可能です。有効な コマンド は
ファイアウォール / アカウンティングルールリストに エントリを追加します。
ファイアウォール / アカウンティングルールリストから エントリを削除します。
以前のバージョンの IPFW では、 ファイアウォールエントリと パケットアカウンティングエントリが別々に利用されていました。 現在のバージョンでは、それぞれのファイアウォールエントリ毎に パケットアカウンティングエントリが備えられています。
index 値が指定されていると、 エントリはチェーン中の指示された位置に置かれます。 index 値が指定されて いなければ、 エントリは (65535 番のデフォルトルールである パケット拒絶を別にして) 最後のチェーンエントリの index に 100 を足した 位置 (チェーンの最後) に置かれます。
カーネルが IPFIREWALL_VERBOSE つきでコンパイルされている場合、log オプションはマッチしたルールを システムコンソールに出力させます。
有効な アクション は:
パケットを捨てます。ICMP ホスト / ポート到達不能パケットを (適切な方を) 発信元へ送ります。
通常通りパケットを通過させます。(別名: pass および accept)
パケットを捨てます。発信元は ICMP メッセージによる 通知を受けません (そのためパケットが 宛先に到達しなかったように見えます)。
このルールはパケットカウンタを更新するだけで、 パケットを 通過させたり拒絶したりしません。 検索は次のチェーンエントリから続けられます。
それぞれの アクション は一意な先頭部分だけでも認識されます。
指定可能な プロトコル は以下の通りです。
任意の IP パケットにマッチします。
ICMP パケットにマッチします。
TCP パケットにマッチします。
UDP パケットにマッチします。
アドレス の指定は:
from address/mask [port] to address/mask [port] [via interface]
port はポートをサポートする プロトコル (UDP と TCP) の 場合にだけ指定可能です。
via は必須ではなく、
特定のインタフェースを通ってきたパケット だけにマッチするように、IP
アドレスまたはローカル IP インタフェースの ドメイン名、またはインタフェース名
(たとえば ed0) を 指定することができます。
インタフェースユニット番号はオプションで、 ワイルドカードで指定することが
できます。たとえば、 ppp* はすべてのカーネル PPP
インタフェースに マッチします。
address/mask の指定は:
addressまたは
address/mask-bitsまたは
address:mask-pattern
IP アドレスのかわりに有効なホスト名を指定することも可能です。 mask-bits
はアドレスマスクで上位何ビットを1にするべきかを
示す十進数値です。たとえば次の指定、 192.216.222.1/24
はクラス C のサブネット (この場合 192.216.222)
の任意のアドレスにマッチするマスクを作成します。 mask-pattern は与えられたアドレスと 論理 AND
される IP アドレスです。 キーワード any は“任意の IP
アドレス”を指定するために 使用することができます。
ブロックするポート番号は以下のように指定します:
port [, port [, port [... ]]]
のように単独のポートまたはポートのリストを指定します。 またはport- port
のようにポートの範囲を指定します。 単独のポートとポートのリストを 組み合わせて指定することも可能ですが、 その場合は常に範囲の方を 最初に指定しなければなりません。使用可能な オプション は:
データグラムの最初の フラグメントでなければマッチします。
入力途中のパケットであればマッチします。
出力途中のパケットであればマッチします。
IP ヘッダが spec に指定された カンマで区切られた オプションのリストを含んでいればマッチします。 サポートされている IP オプションのリストは: ssrr (ストリクトソースルート)、 lsrr (ルーズソースルート)、 rr (レコードパケットルート)、 そして ts (タイムスタンプ) です。 特定のオプションを含まないことを指定するには ! を先頭につけます。
パケットが既に確立されている TCP コネクションの一部であれば (つまり RST または ACK ビットがセットされていれば) マッチします。 established ルールをチェーンの最初の方に置くことで、 ファイアウォールのパフォーマンスを向上させることが できます。
パケットが TCP コネクションを確立しようとするものであれば (SYN ビットがセットされ ACK ビットはセットされていなければ) マッチします。
TCP ヘッダが flags に指定された カンマで区切られたフラグの リストを含んでいればマッチします。 サポートされているフラグは、fin, syn, rst, psh, ack と urg です。 特定のフラグを含まないことを指定するには ! を先頭につけます。
ICMP タイプが types リストに 存在していればマッチします。 リストはタイプの範囲または個々のタイプを カンマで区切った任意の組合せで指定できます。 一般的に使用されている ICMP タイプは: 0 エコーリプライ (ping リプライ)、 3 相手先到達不可能、 5 リダイレクト、 8 エコーリクエスト (ping リクエスト)、そして 11 時間超過 (traceroute(8) で使用されているように、TTL 満了を示すのに使用されます) です。
この形式での使用法は:
ipfw [-a] [-t] [-N] l
この形式で使用する際に有効なフラグは三つあります。
リスト表示の際にカウンタの値も表示します。 このオプションは アカウンティングカウンタの 内容を見る唯一の手段です。
各チェーンエントリが最後に マッチした時刻を表示します。この時刻表示は ipfw(8) ユーティリティで使用される入力形式と 互換性がありません。
(可能であれば) アドレスやサービス名を文字列に変換して表示します。
チェーンをフラッシュするには:
ipfw flush
カーネルに固定されているデフォルトルール (インデックス 65535 番) 以外の、 ファイアウォールチェーンの中のすべてのエントリを削除します。 デフォルトではすべてのパケットが拒絶されるので、 一旦これを実行すると、 パケットを許可するエントリがチェーンに追加されるまで、 あなたのシステムがネットワークから切り放されてしまいます。 そのため、 ルールのフラッシュをおこなうときは注意が必要です。
一つまたはそれ以上のパケットカウンタをクリアするためには:
ipfw zero [index]
index が指定されていなければ、 すべてのパケットカウンタが クリアされます。 index が指定されていれば、 特定のチェーンエントリだけが クリアされます。
このコマンドは、ホスト evil.crackers.org から ホスト nice.people.org の telnet ポートへの すべてのパケットを拒絶します。
# ipfw add deny tcp from evil.crackers.org to nice.people.org 23
次の例は、ネットワーク crackers.org (クラス C) 全体から マシン nice.people.org (の任意のポート) への 任意の TCP トラフィックを拒絶し、 ログを取ります。
# ipfw add deny log tcp from evil.crackers.org/24 to nice.people.org
あなたの内部ネットワーク (クラス C のサブネット) に対する X セッションを 張れないようにする場合、 以下のコマンドで必要なフィルタリングがおこなえます。
# ipfw add deny tcp from any to my.org/28 6000 setup
アカウンティングレコードを見るには:
# ipfw -a listまたは短縮形式で
# ipfw -a l
最後にチェーンエントリがマッチした 時刻を見ることもできます。
# ipfw -at l
Note: 以下の提案は、ただの提案にすぎません: 必要な処理はそれぞれのファイアウォールで異なるため、 あなた独自の要求にあったファイアウォールを構築する方法を ここで述べることはできないのです。
最初にファイアウォールをセットアップするとき、 コントロールされた環境でファイアウォールホストの 設定がおこなえるような テストベンチセットアップが用意できない場合には、 カーネルのログ取りを 有効にしてログ取り版のコマンドを使用することを 強くおすすめします。そうすることで、 大した混乱や中断なしに問題となる範囲の特定と処置を 素早くおこなうことができます。 初期セットアップフェーズが完了してからであっても、 アタックの可能性のあるアクセスをトレースしたり、 要求の変化に応じてファイアウォールルールを 変更したりできるので、`deny' に対するログ取りをおこなうことをおすすめします。
Note: accept コマンドでログを取っていると、 ファイアウォールをパケットが一つ通過する毎に 1 行のログが生成されるため 大量の ログデータが発生します。そのため、大規模な FTP/HTTP 転送などをおこなうと、システムが非常に 遅くなってしまいます。 また、パケットが通過するまでにカーネルにより 多くの仕事を要求するため、パケットのレイテンシ (latency) を増加させてしまいます。syslogd もログをディスクに記録するなど、より多くの CPU タイムを 使用し始め、実に容易に /var/log が置かれているパーティションを溢れさせてしまう可能性があります。
ファイアウォールは、 /etc/rc.conf.local か、もしくは /etc/rc.conf によって有効化されるべきです。 関連マニュアルページには、どのドアノブ (訳注: ポートや IP アドレスなど、 ネットワークからの入口を示すもののこと) に手をつければ良いのかに ついての説明と、ファイアウォール設定の既定値のリストがあります。 もし、設定の既定値を使わない場合には、 ipfw list とすることで、 現在のルールセットを rc.conf から読み込める形で ファイルに出力できます。 また、/etc/rc.conf.local や /etc/rc.conf によってファイアウォールを有効化しない場合には、 すべての IP インタフェースが設定されるよりも前に、 確実にファイアウォールの有効化が行なわれるようにすることが重要です。
次の問題は、ファイアウォールが実際には何を する べきかです ! これは外部からそのネットワークへのどんなアクセスを許したいか、 また内部から外界へのアクセスを どのくらい許したいかに大きく依存します。 いくつか一般的なルールを挙げると:
1024 番以下のポートへのすべての TCP 入力アクセスをブロックします。ここは finger, SMTP (mail) そして telnet など、最もセキュリティに敏感な サービスが存在する場所だからです。
すべての 入力 UDP トラフィックをブロックします。これは UDP を使用しているサービスで有用なものは極めて少ないうえ、 (Sun の RPC と NFS プロトコルのように) 有用なトラフィックであったとしても、 通常セキュリティに対する脅威となるためです。UDP はコネクションレスプロトコルであるため、入力 UDP トラフィックを拒絶することは すなわち出力 UDP トラフィックに対する返答をも ブロックすることになるので、 このことはそれなりの不利益をもたらします。たとえば外部の archie (prospero) サーバを使用している (内部の) ユーザに とって問題となる可能性があります。もし archie へのアクセスを許したければ、191 番と 1525 番のポートから 任意の UDP ポートへ来るパケットがファイアウォールを通過することを 許可しなければなりません。123 番のポートから来るパケットは ntp パケットで、 これも通過の許可を考慮する必要がある もう一つのサービスです。
外部から 6000 番のポートへのトラフィックをブロックします。6000 番のポートは X11 サーバへのアクセスに使用されるポートで、 セキュリティに対する脅威となりえます。 (特に自分のワークステーションで xhost + をおこなう癖を持っている人がいればなおさらです)。X11 は実際に 6000 番以降のポートを使用する可能性があるため、 通過許可に 上限を定めると、 そのマシンで走らせることのできる X ディスプレイの 個数が制限されます。RFC 1700 (Assigned Numbers) で定義されているように、上限は 6063 です。
内部のサーバ (たとえば SQL サーバなど) がどのポートを使用するかを チェックします。 それらのポートは通常、上で指定した 1-1024 番の範囲から外れていますので、 これらも同様にブロックしておくことは おそらく良い考えです。
これとは別のファイアウォール設定に 関するチェックリストが CERT から 入手可能です。http://www.cert.org/tech_tips/packet_filtering.html
前にも述べたように、これはただの ガイドライン にすぎません。 ファイアウォールでどのようなフィルタルールを使用するかは、 あなた自身が 決めなければなりません。 これまでのアドバイスに従ったにも関わらず、 誰かがあなたのネットワークに 侵入してきたとしても、 わたしたちは「いかなる」責任もとることはできません。
多くの人が IPFW がどのくらいのオーバヘッドをシステムに加えるかを知りたがっています。 この答えは、使っているルールセットとプロセッサのスピードによってほぼ決まります。 イーサネットを使っていてルールセットが少ないアプリケーションにとって答えは、 “その影響は無視できる程度” です。 実際の測定値を見ないと満足できない方は、引き続きお読みください。
次の測定は 486-66 (訳注: Intel 社製 CPU i486, 66MHz のこと) 上で 2.2.5-STABLE を使用して行なわれました (IPFW はその後の FreeBSD のリリースで多少変更されていますが、 現在も同程度の速度で動きます)。IPFW には、 ip_fw_chk ルーチン内でかかる時間を測定して、 1000 パケット毎に結果をコンソールに表示する変更が加えられています。
それぞれ 1000 ずつのルールからなる 2 つのルールセットでテストが行なわれました。 1 つ目のルールセットは最悪のケースを見るために、 次のルールを繰り返しています。
# ipfw add deny tcp from any to any 55555
これは、最終的にパケットが (ポート番号から) ルールにマッチしないことがわかるまでに IPFW のほとんどのパケットチェックルーチンが実行されるような、 最悪の場合を示します。このルールを 999 個繰り返し並べた後に allow ip from any to any がきます。
2 つ目のルールセットは、 なるべく早く確認が終了するように書かれたものです。
# ipfw add deny ip from 1.2.3.4 to 1.2.3.4
このルールでは、発信元の IP アドレスが一致しないので、 すぐに確認が終わります。前とおなじように、1000 個目のルールは allow ip from any to any です。
前者のパケットあたりのオーバヘッドはおよそ 2.703 ms/packet または 1 つのルールにつき 2.7 マイクロ秒です。したがって、 このルールにおけるパケット処理時間の理論的な限界は、 毎秒約 370 パケットです。10 Mbps の Ethernet で 1500 バイト程度のパケットサイズを仮定すると、 バンド幅の利用効率は 55.5% が限界です。
後者では、それぞれのパケットがおよそ 1.172 ms または、1 つのルールにつき 1.2 マイクロ秒で処理されていました。 パケット処理時間の理論的な限界は、 毎秒約 853 パケットとなりますので、10 Mbps Ethernet のバンド幅を使い切ることができます。
このテストに使われたルールの数が多過ぎることと、 その性質から、これは実際の状況を反映したものではありません。 これらは上に示したタイミング情報を出すためだけに用いられたものです。 効率の良いルールセットを作るためには、 次のような事を考えればよいでしょう。
established ルールは TCP トラフィックの大半を処理するため、 先頭の方に持ってきてください。このルールの前には allow tcp という記述を置かないでください。
良く使われるルールを、 あまり良く使われないルールよりも前の方に (もちろんファイアウォールの許可設定を変えない範囲で) 持ってきてください。ipfw -a l でパケット数の統計を取ることで、 どのルールが最もよく使われているかを調べられます。
FreeBSD 4.0 では、OpenSSL ツールキットが基本構成の一部に 含まれています。OpenSSL は、 Secure Sockets Layer v2/v3 (SSLv2/SSLv3) や Transport Layer Security v1 (TLSv1) ネットワークセキュリティプロトコルと同様の 多目的な暗号化ライブラリを提供します。
しかしながら、OpenSSL に含まれるアルゴリズムのひとつ (特に IDEA) は、合衆国内、その他の地域において、 特許により保護されています。そのため、 無制約な利用は許されません。IDEA は FreeBSD の OpenSSL 配布に含まれていますが、デフォルトではコンパ イルされません。もし IDEA を使いたいなら、そしてあなたがそのライ センス条項に合致するなら、/etc/make.conf の中の MAKE_IDEA スイッチを有効にして、 make world でソースをリビルドしてください。
現在は RSA アルゴリズムはアメリカとその他の国で自由に利用で きます。以前は特許により保護されていました。
OpenSSL は src-crypto と src-secure cvsup コレクションの一部です。 FreeBSD のソースコードの取得と更新の詳細は、 FreeBSD の入手の項を参照して下さい。
訳: 日野 浩志 <hino@ccm.cl.nec.co.jp>, 14 March
2001.
終端文字: この節の、また他の節を通して、末尾に “^D” が置かれている例があることに気づかれるでしょう。 これは、Control キーを押しながら D キーを押すことを意味しています。 ほかによく使われる文字は “^C” で、Control キーを押しながら C を押すことを意味しています。
Tip: FreeBSD の IPsec 実装について説明した HOWTO は、他に http://www.daemonnews.org/200101/ipsec-howto.html と http://www.freebsddiary.org/ipsec.php があります。
IPsec 機構は、IP 層とソケット層に対して安全な通信を提供します。 この節ではその使い方を説明します。実装の詳細に関しては The Developers' Handbook を参照してください。
現在の IPsec の実装は、 トランスポートモードとトンネルモードの両方に対応しています。 しかし、トンネルモードにはいくつかの制限事項があります。http://www.kame.net/newsletter/ にはより総合的な例が載っています。
ここで述べる機能を利用するには、以下のオプションをカーネルコ ンパイル時に指定する必要があることにご注意ください。
options IPSEC #IP security options IPSEC_ESP #IP security (crypto; define w/IPSEC)
ホスト A (10.2.3.4) とホスト B (10.6.7.8) との間に安全なチャネルを配置するために、 セキュリティアソシエーションを設定しましょう。 ここでは、少し込み入った例を示します。ホスト A からホストB へは old AH のみを使います。ホスト B からホスト A へは new AH と new ESP を組み合わせます。
ここで “AH”/“new AH”/“ESP”/“new ESP” に対応するアルゴリズムを決めないといけません。 アルゴリズムの名前を知るには、 setkey(8) マニュアルページをご覧ください。ここでは、AH に MD5 を、new AH には new-HMAC-SHA1 を、new ESP には 8 バイト IV の new-DES-expIV を選びました。
鍵長はそれぞれのアルゴリズムに大きく依存します。たとえば、 MD5 では鍵長は 16 バイトでなければなりませんし、new-HMAC-SHA1 では 20 バイトでなければなりませんし、new-DES-expIV では 8 バイトでなければなりません。ここではそれぞれ “MYSECRETMYSECRET”, “KAMEKAMEKAMEKAMEKAME”, “PASSWORD” とします。
次に、それぞれのプロトコルに対して SPI (セキュリティパラメータインデックス: Security Parameter Index) を割り当てます。3 種類のセキュリティヘッダ (ホスト A からホスト B に 1 つ、ホスト B から ホスト A に 2 つ) を生成するので、この安全なチャネルには 3 つの SPI が必要になることに注意してください。さらに、SPI は 256 以上でなければならないことにも注意してください。 ここではそれぞれ 1000, 2000, 3000 を割り当てます。
(1) ホスト A ------> ホスト B (1)PROTO=AH ALG=MD5(RFC1826) KEY=MYSECRETMYSECRET SPI=1000 (2.1) ホスト A <------ ホスト B <------ (2.2) (2.1) PROTO=AH ALG=new-HMAC-SHA1(new AH) KEY=KAMEKAMEKAMEKAMEKAME SPI=2000 (2.2) PROTO=ESP ALG=new-DES-expIV(new ESP) IV length = 8 KEY=PASSWORD SPI=3000
次に、セキュリティアソシエーションを設定しましょう。ホスト A とホスト B の両方で、setkey(8) を実行します。
# setkey -c
add 10.2.3.4 10.6.7.8 ah-old 1000 -m transport -A keyed-md5 "MYSECRETMYSECRET" ;
add 10.6.7.8 10.2.3.4 ah 2000 -m transport -A hmac-sha1 "KAMEKAMEKAMEKAMEKAME" ;
add 10.6.7.8 10.2.3.4 esp 3000 -m transport -E des-cbc "PASSWORD" ;
^D
実際には、セキュリティポリシのエントリが定義されるまでは IPsec による通信は行われません。 この例の場合、両方のホストを設定する必要があります。
A で:
# setkey -c
spdadd 10.2.3.4 10.6.7.8 any -P out ipsec
ah/transport/10.2.3.4-10.6.7.8/require ;
^D
B で:
# setkey -c
spdadd 10.6.7.8 10.2.3.4 any -P out ipsec
esp/transport/10.6.7.8-10.2.3.4/require ;
spdadd 10.6.7.8 10.2.3.4 any -P out ipsec
ah/transport/10.6.7.8-10.2.3.4/require ;
^D
ホスト A -------------------------------------> ホスト B
10.2.3.4 10.6.7.8
| |
========== old AH keyed-md5 ==========>
<========= new AH hmac-sha1 ===========
<========= new ESP des-cbc ============
IPv6 を使ったもう一つの例。
ホスト-A とホスト-B 間の TCP ポート番号 110 番の通信には、 ESP トランスポートモードが推奨されます。
============ ESP ============
| |
ホスト-A ホスト-B
fec0::10 -------------------- fec0::11
暗号化アルゴリズムは blowfish-cbc で、その鍵は “kamekame”、 認証アルゴリズムは hmac-sha1 で、その鍵は “this is the test key” とします。ホスト-A の設定は次のようになります。
# setkey -c <<EOF
spdadd fec0::10[any] fec0::11[110] tcp -P out ipsec
esp/transport/fec0::10-fec0::11/use ;
spdadd fec0::11[110] fec0::10[any] tcp -P in ipsec
esp/transport/fec0::11-fec0::10/use ;
add fec0::10 fec0::11 esp 0x10001
-m transport
-E blowfish-cbc "kamekame"
-A hmac-sha1 "this is the test key" ;
add fec0::11 fec0::10 esp 0x10002
-m transport
-E blowfish-cbc "kamekame"
-A hmac-sha1 "this is the test key" ;
EOF
そしてホスト-B の設定は次のようになります。
# setkey -c <<EOF
spdadd fec0::11[110] fec0::10[any] tcp -P out ipsec
esp/transport/fec0::11-fec0::10/use ;
spdadd fec0::10[any] fec0::11[110] tcp -P in ipsec
esp/transport/fec0::10-fec0::11/use ;
add fec0::10 fec0::11 esp 0x10001 -m transport
-E blowfish-cbc "kamekame"
-A hmac-sha1 "this is the test key" ;
add fec0::11 fec0::10 esp 0x10002 -m transport
-E blowfish-cbc "kamekame"
-A hmac-sha1 "this is the test key" ;
EOF
SP の方向に注意してください。
2 台のセキュリティゲートウェイ間のトンネルモード
セキュリティプロトコルは old AH トンネルモード、すなわち RFC1826 で指定されるものです。認証アルゴリズムは “this is the test” を鍵とする keyed-md5 です。
======= AH =======
| |
ネットワーク-A ゲートウェイ-A ゲートウェイ-B ネットワーク-B
10.0.1.0/24 ---- 172.16.0.1 ----- 172.16.0.2 ---- 10.0.2.0/24
ゲートウェイ-A における設定は次のようになります。
# setkey -c <<EOF
spdadd 10.0.1.0/24 10.0.2.0/24 any -P out ipsec
ah/tunnel/172.16.0.1-172.16.0.2/require ;
spdadd 10.0.2.0/24 10.0.1.0/24 any -P in ipsec
ah/tunnel/172.16.0.2-172.16.0.1/require ;
add 172.16.0.1 172.16.0.2 ah-old 0x10003 -m any
-A keyed-md5 "this is the test" ;
add 172.16.0.2 172.16.0.1 ah-old 0x10004 -m any
-A keyed-md5 "this is the test" ;
EOF
上記の例のように、もしポート番号フィールドを書かないと、 [any] と同じ意味になります。-m は使用される SA のモードを指定します。-m any はセキュリティプロトコルのモードのワイルドカードを意味します。 この SA をトンネルモードとトランスポートモードの両方で使用できます。
そしてゲートウェイ-B では次のようになります。
# setkey -c <<EOF
spdadd 10.0.2.0/24 10.0.1.0/24 any -P out ipsec
ah/tunnel/172.16.0.2-172.16.0.1/require ;
spdadd 10.0.1.0/24 10.0.2.0/24 any -P in ipsec
ah/tunnel/172.16.0.1-172.16.0.2/require ;
add 172.16.0.1 172.16.0.2 ah-old 0x10003 -m any
-A keyed-md5 "this is the test" ;
add 172.16.0.2 172.16.0.1 ah-old 0x10004 -m any
-A keyed-md5 "this is the test" ;
EOF
二台のセキュリティゲートウェイ間の SA の束の作成
ゲートウェイ-A とゲートウェイ-B の間では、 AH トランスポートモードと ESP トンネルモードが要求されます。 この例では、まず ESP トンネルモードが適用され、次に AH トランスポートモードが適用されます。
========== AH =========
| ======= ESP ===== |
| | | |
ネットワーク-A ゲートウェイ-A ゲートウェイ-B ネットワーク-B
fec0:0:0:1::/64 --- fec0:0:0:1::1 ---- fec0:0:0:2::1 --- fec0:0:0:2::/64
暗号化アルゴリズムは 3des-cbc, ESP の認証アルゴリズムは hmac-sha1 とします。AH の認証アルゴリズムは hmac-md5 とします。 ゲートウェイ-A での設定は次のようになります。
# setkey -c <<EOF
spdadd fec0:0:0:1::/64 fec0:0:0:2::/64 any -P out ipsec
esp/tunnel/fec0:0:0:1::1-fec0:0:0:2::1/require
ah/transport/fec0:0:0:1::1-fec0:0:0:2::1/require ;
spdadd fec0:0:0:2::/64 fec0:0:0:1::/64 any -P in ipsec
esp/tunnel/fec0:0:0:2::1-fec0:0:0:1::1/require
ah/transport/fec0:0:0:2::1-fec0:0:0:1::1/require ;
add fec0:0:0:1::1 fec0:0:0:2::1 esp 0x10001 -m tunnel
-E 3des-cbc "kamekame12341234kame1234"
-A hmac-sha1 "this is the test key" ;
add fec0:0:0:1::1 fec0:0:0:2::1 ah 0x10001 -m transport
-A hmac-md5 "this is the test" ;
add fec0:0:0:2::1 fec0:0:0:1::1 esp 0x10001 -m tunnel
-E 3des-cbc "kamekame12341234kame1234"
-A hmac-sha1 "this is the test key" ;
add fec0:0:0:2::1 fec0:0:0:1::1 ah 0x10001 -m transport
-A hmac-md5 "this is the test" ;
EOF
異なる通信端での SA の作成
ホスト-A とゲートウェイ-A の間では ESP トンネルモードが要求されています。暗号化アルゴリズムは cast128-cbc で、ESP の認証アルゴリズムは hmac-sha1 です。ホスト-A とホスト-B との間では ESP トランスポートモードが推奨されています。 暗号化アルゴリズムは rc5-cbc で、ESP の認証アルゴリズムは hmac-md5 です。
================== ESP =================
| ======= ESP ======= |
| | | |
ホスト-A ゲートウェイ-A ホスト-B
fec0:0:0:1::1 ---- fec0:0:0:2::1 ---- fec0:0:0:2::2
ホスト-A での設定は次のようになります。
# setkey -c <<EOF
spdadd fec0:0:0:1::1[any] fec0:0:0:2::2[80] tcp -P out ipsec
esp/transport/fec0:0:0:1::1-fec0:0:0:2::2/use
esp/tunnel/fec0:0:0:1::1-fec0:0:0:2::1/require ;
spdadd fec0:0:0:2::1[80] fec0:0:0:1::1[any] tcp -P in ipsec
esp/transport/fec0:0:0:2::2-fec0:0:0:l::1/use
esp/tunnel/fec0:0:0:2::1-fec0:0:0:1::1/require ;
add fec0:0:0:1::1 fec0:0:0:2::2 esp 0x10001
-m transport
-E cast128-cbc "12341234"
-A hmac-sha1 "this is the test key" ;
add fec0:0:0:1::1 fec0:0:0:2::1 esp 0x10002
-E rc5-cbc "kamekame"
-A hmac-md5 "this is the test" ;
add fec0:0:0:2::2 fec0:0:0:1::1 esp 0x10003
-m transport
-E cast128-cbc "12341234"
-A hmac-sha1 "this is the test key" ;
add fec0:0:0:2::1 fec0:0:0:1::1 esp 0x10004
-E rc5-cbc "kamekame"
-A hmac-md5 "this is the test" ;
EOF
セキュアシェル (secure shell) はリモートマシンへのセキュアなアクセスに使われるネットワーク接続ツールの集合です。 これは rlogin, rsh, rcp, telnet をそのまま置き換えて使えます。 また、他のあらゆる TCP/IP 接続を ssh 経由でセキュアにトンネル/フォワードすることもできます。 ssh はすべてのトラフィックを暗号化し、 盗聴や接続の乗っ取り等のネットワークレベルの攻撃を事実上無効化します。
OpenSSH は OpenBSD プロジェクトによって維持管理されており、SSH v1.2.12 に最新のすべてのバグ修正と更新を適用したものをベースにしています。 OpenSSH クライアントは SSH プロトコル 1 と 2 の両方に互換性があります。 OpenSSH は FreeBSD 4.0 以降ベースシステムに取り込まれています。
telnet(1) や rlogin(1) を使う場合、一般にデータはネットワークを平文で流れます。 ネットワークをクライアントとサーバの間のどこかで盗聴することで あなたのユーザ/パスワード情報やセション中を流れるデータを盗むことが可能です。 OpenSSH はこれらを予防する為にさまざまな認証と暗号化の方法を提供します。
rc.conf ファイルに 以下の行を追加してください。
sshd_enable="YES"
次に起動したときから ssh デーモンが起動します。 もしくは単に sshd デーモンを実行しても構いません。
ssh(1) ユーティリティは rlogin(1) と同様に働きます。
# ssh user@example.com Host key not found from the list of known hosts. Are you sure you want to continue connecting (yes/no)? yes Host 'example.com' added to the list of known hosts. user@example.com's password: *******
ログインは rlogin や telnet でセッションを張った時と同様に続きます。 SSH はクライアントが接続した時、 サーバの信頼性の検証のために鍵指紋システム (key fingerprint system) を利用します。 初めての接続の際にのみ、ユーザは yes と入力することを要求されます。 これ以降の login では保存されていた鍵指紋を照合することで検証されます。 SSH クライアントは保存されていた鍵指紋が login しようとした際に送られてきたものと異なっていた場合には警告を表示します。 指紋は ~/.ssh/known_hosts に、また SSH v2 指紋の場合は ~/.ssh/known_hosts2 に保存されます。
デフォルトでは、OpenSSH サーバは SSH v1 と SSH v2 両方の接続を受け付けるように設定されています。 クライアントはそのどちらかを選択できます。 バージョン 2 は、旧バージョンよりも堅固で安全です。
ssh に、プロトコル v1 と v2 についてそれぞれ、引数 -1 または -2
を渡すことで、利用するプロトコルを強制できます。
scp コマンドは rcp と同様に働きます。 安全な方法で行っているほかは、ローカルのファイルをリモートマシンへ、 あるいはリモートマシンのファイルをローカルにコピーするのは同じです。
# scp user@example.com:/COPYRIGHT COPYRIGHT user@example.com's password: ******* COPYRIGHT 100% |*****************************| 4735 00:00 #
前回の例でこのホストの指紋がすでに保存されていれば この scp を使う時に検証が行なわれます。
scp に渡される引数は、cp
のものと似ており、ファイル (1 つまたは複数) が 1 つめの引数になり、コピー先が 2
つめの引数になります。 ファイルはネットワーク越しに SSH を通して送られるので、
引数に指定するファイルには user@host:<path_to_remote_file>
という形式をとるものがあります。
システム全体の設定ファイルは、OpenSSH デーモン、 クライアントの両方とも /etc/ssh ディレクトリにあります。
ssh_config はクライアントの動作設定、 sshd_config はデーモンの動作設定を行ないます。
さらに、rc.conf オプションの sshd_program (デフォルトは /usr/sbin/sshd) と sshd_flags
により、詳細な設定が行えます。
パスワードの代わりに ssh-keygen(1) を使ってユーザの認証用の RSA 暗号鍵を作ることができます。
% ssh-keygen Initializing random number generator... Generating p: .++ (distance 66) Generating q: ..............................++ (distance 498) Computing the keys... Key generation complete. Enter file in which to save the key (/home/user/.ssh/identity): Enter passphrase: Enter the same passphrase again: Your identification has been saved in /home/user/.ssh/identity. ...
ssh-keygen(1) は認証に使う為の公開鍵と秘密鍵のペアを作ります。 秘密鍵は ~/.ssh/identity に保存され、 公開鍵は ~/.ssh/identity.pub に保存されます。 公開鍵はリモートマシンの ~/.ssh/authorized_keys にも置かなければなりません。
これでパスワードの代わり RSA 認証を使ってリモートマシンに接続できるようになったはずです。
ssh-keygen(1) でパスフレーズを使っている場合は、 ユーザは秘密鍵を使うために毎回パスフレーズの入力を行なう必要があります。
同じ目的で、ssh-keygen -d (FreeBSD FreeBSD-CURRENT では ssh-keygen -t dsa) コマンドを使って SSH v2 DSA 鍵を生成することもできます。 これは、SSH v2 セッション専用の DSA 公開/秘密鍵を生成します。 公開鍵は ~/.ssh/id_dsa.pub に保存され、秘密鍵は ~/.ssh/id_dsa に置かれます。
DSA 公開鍵はリモートマシンの ~/.ssh/authorized_keys2 内におきます。
ssh-agent(1) と ssh-add(1) は 複数のパスワード化された秘密鍵の管理に使われます。
OpenSSH は暗号化されたセッションの中に他のプロトコルを カプセル化するトンネルを作ることができます。
以下のコマンドは ssh(1) で telnet 用のトンネルを作成します。
% ssh -2 -N -f -L 5023:localhost:23 user@foo.example.com %
ssh コマンドは、 次のオプションとともに利用します。
-2ssh にプロトコルバージョン 2 を使うことを指示します。(古い ssh サーバを使っているときには指定しないでください)
-Nはトンネルだけでコマンドはないことを示します。 省略されると ssh(1) は通常のセッションを開始します。
-fssh にバックグラウンド実行を強制します。
-Lローカルトンネルを localport:remotehost:remoteport という形式で指定します。
user@foo.example.comリモートの SSH サーバです。
SSH のトンネルは localhost の指定されたポートに listen するソケットを作ることで実現されています。 SSH はローカルのホスト/ポートで受けた接続すべてを SSH 接続経由で指定されたリモートホストのポートへ転送します。
この例では、localhost のポート 5023 がリモートマシンの localhost のポート 23 に転送されるようになっています。 23 は telnet なのでこれは SSH トンネルを通るセキュアな telnet セッションを作ります。
このようにして SMTP や POP3, FTP 等のセキュアではない TCP プロトコルをカプセル化することができます。
Example 15-1. SSH を用いた SMTP 用の安全なトンネルの作成
% ssh -2 -N -f -L 5025:localhost:25 user@mailserver.example.com user@mailserver.example.com's password: ***** % telnet localhost 5025 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 mailserver.example.com ESMTP
ssh-keygen(1) と別のユーザアカウントを組み合わせて使うことでより透過的で悩まずに済むような SSH のトンネル環境を作ることができます。 パスワードを入力するところで暗号鍵を使い、 トンネルは別のユーザ権限で実行することが可能です。
仕事で、外部からの接続を受ける SSH サーバがあるとします。 同じオフィスのネットワークには、POP3 サーバが動いているメールサーバがあるとします。 ネットワークもしくはあなたの家とオフィスの間のネットワーク経路は、 完全に信頼できるものかもしれませんし、そうではないかもしれません。 そのため、電子メールは安全なやり方で見るようにしなければなりません。 解決策は、オフィスの SSH サーバへの SSH 接続を行い、 メールサーバへのトンネルを作成することです。
% ssh -2 -N -f -L 2110:mail.example.com:110 user@ssh-server.example.com user@ssh-server.example.com's password: ******
トンネルが作成されて動作したら、 メールクライアントに対し localhost のポート 2110 に POP3 リクエストを送るように指示できます。 そこへの接続は、トンネルを経由して安全に mail.example.com に転送されます。
内向けの接続をフィルタするだけでなく、 外向けの接続もフィルタして、 極端に厳しいファイアウォールルールを課すネットワーク管理者もいます。 リモートのマシンには、SSH 接続と web サーフィンのための 22 番および 80 番ポートにしか接続させてもらえないかもしれません。
あなたは、それ以外の (もしかすると仕事に関係ない) サービスにアクセスしたくなるかもしれません。 例えば、音楽ストリーミングを行う Ogg Vorbis サーバといったものです。 この Ogg Vorbis サーバが 22 番または 80 番ポート以外でストリーミングを行っていたら、 あなたはそのサーバに接続できないでしょう。
それに対する解決策は、 あなたが接続しているネットワークのファイアウォールの外部にあるマシンに対して SSH 接続を行い、Ogg Vorbis サーバへのトンネルに利用することです。
% ssh -2 -N -f -L 8888:music.example.com:8000 user@unfirewalled.myserver.com user@unfirewalled.myserver.com's password: *******
ストリーミングクライアントを localhost の 8888 番ポートに向けると、music.example.com の 8000 番ポートに転送され、 ファイアウォールをすり抜けられます。
この章では、FreeBSD におけるディスクの使用方法を説明します。 これにはメモリディスク、ネットワークに接続されたディスク、 および標準的な SCSI/IDE 記憶デバイスが含まれます。
この章では、以下の分野について説明します。
物理ディスク上のデータ構成 について記述するために FreeBSD が使用する用語 (パーティションおよびスライス)
システムにハードディスクを追加する方法
メモリディスクのような仮想ファイルシステムを設定する方法
使用できるディスク容量を制限するためにクォータを設定する方法
攻撃者から保護するためにディスクを暗号化する方法
FreeBSD で CD や DVD を作成する方法
バックアップのためのさまざまな記憶メディアオプション
FreeBSD で利用できるバックアッププログラムの使用方法
フロッピーディスクにバックアップする方法
スナップショットとは何か、そしてそれを効果的に使用する方法
以下は、FreeBSD で対応している物理記憶デバイスとそれに対応するデバイス名のリストです。
Table 16-1. 物理ディスクへの名前付け
| ドライブの種類 | ドライブのデバイス名 |
|---|---|
| IDE ハードドライブ | ad |
| IDE CD-ROM ドライブ | acd |
| SCSI ハードドライブおよび USB 大容量記憶デバイス | da |
| SCSI CD-ROM ドライブ | cd |
| その他の非標準的 CD-ROM ドライブ | ミツミ CD-ROM は mcd, Sony CD-ROM は scd, 松下/パナソニック CD-ROM は matcd [a] |
| フロッピードライブ | fd |
| SCSI テープドライブ | sa |
| IDE テープドライブ | ast |
| フラッシュドライブ | DiskOnChip® フラッシュデバイスは fla |
| RAID ドライブ | Adaptec® AdvancedRAID は aacd, Mylex® は mlxd および mlyd, AMI MegaRAID® は amrd, Compaq Smart RAID は idad, 3ware® RAID はtwed |
| Notes: a. matcd(4) ドライバは 2002 年 10 月 5 日に FreeBSD 4.X ブランチから削除されました。 また、FreeBSD 5.0 および 5.1 リリースには存在しませんが、 2003 年 6 月 16 日に FreeBSD 5.X ブランチに復帰しました。 |
|
現在一つしかドライブがない計算機に新しく SCSI ディスクを追加したいとしましょう。まずコンピュータの電源を切り、 コンピュータやコントローラ、 ドライブの製造元の説明書に従ってドライブを取り付けます。 このあたりの手順は非常に多岐にわたるため、 詳細はこの文書の範囲外です。
root ユーザでログインします。 ドライブの取り付け後は /var/run/dmesg.boot を調べて新しいディスクが見つかっていることを確認しておきます。 この例では、新しく付けたドライブは da1 で、 我々はそれを /1 にマウントしたいとしましょう (もし IDE ドライブを付けようとしているのなら、デバイス名は 4.0 以前のシステムでは wd1, ほとんどの 4.x システムでは ad1 になるでしょう)。
FreeBSD は IBM-PC 互換のコンピュータで動くため、 PC BIOS のパーティションを考慮に入れる必要があります。 これは従来の BSD パーティションとは異なります。PC ディスクは 4 つまでの BIOS パーティションエントリを持つことができます。 もしそのディスクを本当に FreeBSD 専用にしたい場合には 専用 モードで用いることもできます。 そうでない場合には、FreeBSD は PC BIOS パーティションのどれか一つの中に入れることになります。 FreeBSD では、従来の BSD パーティションと混乱しないように PC BIOS パーティションのことをスライスと呼びます。 また、別の OS がインストールされていたコンピュータで使われていたが FreeBSD 専用にするディスク上でもスライスを用いることができます。 これは、他の OS の fdisk ユーティリティを混乱させないためです。
スライスの場合、ドライブは /dev/da1s1e として加えられるでしょう。これは、SCSI ディスクでユニット番号は 1 (二つめの SCSI ディスク), スライスは 1 (PC BIOS のパーティションが 1) で BSD パーティション e, と読みます。 専用ディスクの場合だと単純に /dev/da1e として加えられるでしょう。
sysinstall の操作
sysinstall の使い易いメニューを利用して、 新しいディスクのパーティション分けやラベル付けを行なうことができます。 root ユーザでログインするか su コマンドを用いるかして root 権限を取得します。 /stand/sysinstall を実行して Configure メニューに入ります。FreeBSD Configuration Menu の中でスクロールダウンして Fdisk の項目を選びます。
fdisk パーティションエディタ
fdisk では、ディスク全体を FreeBSD で使うために A を入力します。 “remain cooperative with any future possible operating systems” と聞かれたら YES と答えます。 W で変更をディスクに書き込みます。ここで q と入力して FDISK エディタを抜けます。 次にマスタブートレコードについて聞かれます。 ここでは既に動いているシステムにディスクを追加しようとしているので None を選びます。
ディスクラベルエディタ
次に sysinstall を終了し、 もう一度起動する必要があります。同じ手順を踏んで今度は Label オプションを選択し、 Disk Label Editor に入ります。 ここでは従来の BSD パーティションを作成します。 一つのディスクは a から h までのラベルがついた最大 8 つのパーティションを持つことができます。 いくつかのパーティションラベルは特別な用途に用いられます。 a パーティションはルートパーティション (/) です。したがって、システムディスク (つまり起動ディスク) のみに a パーティションがあるべきです。b パーティションはスワップパーティションに用いられ、 複数のディスクにスワップパーティションを作ることができます。 c は専用モードにおけるディスク全体、 もしくはスライスモードにおけるスライス全体を指します。 他のパーティションは汎用的に用いられます。
sysinstall のラベルエディタ は、ルートパーティションでもスワップパーティションでもないパーティションには、e パーティションを採用しようとします。ラベルエディタでファイルシステムを作成するには C を入力してください。 FS (ファイルシステム) かスワップかを聞かれたら FS を選びマウントポイント (たとえば /mnt) を入力します。 インストール後のモードでディスクを追加する場合、 sysinstall は /etc/fstab にエントリを追加しないため、 ここで指定するマウントポイントはそれほど重要ではありません。
さて、ディスクに新しいラベルを書き込み、 そこにファイルシステムを作る準備が整いました。早速 W を叩いて実行しましょう。 sysinstall からの、 新しいパーティションをマウントできない、 というエラーは無視してください。Label Editor から抜け、 sysinstall を終了します。
終了
最後に /etc/fstab を編集し、 新しいディスクのエントリを追加します。
このセットアップ方法では、 すでにコンピュータに他のオペレーティングシステムがインストールされていても 正しく協調動作することが可能で、他のオペレーティングシステムの fdisk ユーティリティを混乱させることもありません。 新しいディスクにインストールする場合は、 この方法を用いることが推奨されています。 後述する 専用モード は、 そうしなければならない理由がある時にのみ、 利用するようにしてください。
# dd if=/dev/zero of=/dev/da1 bs=1k count=1 # fdisk -BI da1 # 新しいディスクの初期化 # disklabel -B -w -r da1s1 auto # ディスクにラベルを付ける # disklabel -e da1s1 # 作成したディスクラベルを編集し、パーティションを追加する # mkdir -p /1 # newfs /dev/da1s1e # 作成したすべてのパーティションに対してこれを繰り返す # mount /dev/da1s1e /1 # パーティションをマウントする # vi /etc/fstab # /etc/fstab に適切なエントリを追加する
IDE ディスクを使う場合は da の部分を ad とします。4.X より前のシステムでは、 (訳注: ad ではなく) wd としてください。
新しいドライブを他の OS と共有しない場合には 専用 モードを用いることもできます。 このモードはマイクロソフトの OS を混乱させることを憶えておいてください (しかし、それらによって壊されることはありません)。 一方、IBM の OS/2 はどんなパーティションでも見つけたら理解できなくても “専有” します。
# dd if=/dev/zero of=/dev/da1 bs=1k count=1 # disklabel -Brw da1 auto # disklabel -e da1 # `e' パーティションの作成 # newfs -d0 /dev/da1e # mkdir -p /1 # vi /etc/fstab # /dev/da1e エントリの追加 # mount /1
もう一つの方法は次の通り。
# dd if=/dev/zero of=/dev/da1 count=2 # disklabel /dev/da1 | disklabel -BrR da1 /dev/stdin # newfs /dev/da1e # mkdir -p /1 # vi /etc/fstab # /dev/da1e エントリの追加 # mount /1
Note: FreeBSD 5.1-RELEASE から、従来の disklabel(8) プログラムは bsdlabel(8) ユーティリティに置き換えられました。bsdlabel(8) では、 使用されていない数多くのオプションやパラメタが削除されました。 たとえば
-rオプションは bsdlabel(8) では取り除かれました。詳細については bsdlabel(8) のマニュアルページを参照してください。
大容量記録に関する解決法を選択する際にもっとも重視すべき要素は、 速度、信頼性、そして費用です。 三つを同時にバランスよく実現することは稀です。 通常、速くて信頼性のある大容量記録装置は高価であり、 費用を抑えようとすると速度または信頼性のどちらかが犠牲になります。
ここで例にあげるシステムの設計においては、 費用が最も重要な要素として、次に速度、最後に信頼性が選択されています。 このシステムでのデータ転送速度は結局のところネットワークによって制限されます。 信頼性は大変重要です。ただし、以下で説明する CCD ドライブは、 データ自体はすでに CD-R に完全にバックアップしてあるもの (したがって交換は簡単にできます) の、オンラインデータの役割をさせています。
あなた自身の要求事項を決定することは、 大容量記録に関する解決法を選択することの最初の段階です。 もしあなたの要求事項が費用より速度または信頼性を優先するなら、 解決法はこのシステムとは違うものになるでしょう。
IDE システムディスクに加えて、Western Digital 製の 30GB, 5400RPM の IDE ディスク三台を使って、 以下に説明されているような約 90GB のオンラインストレージとなる CCD ディスクを作成しました。各 IDE ディスクがそれぞれの IDE コントローラとケーブルをもっていることが理想的ですが、 費用を最低限にするために、 IDE コントローラを追加していません。その代わり、それぞれの IDE コントローラがマスタデバイスを一つ、 スレーブデバイスを一つ持つように、 ディスクはジャンパを使って設定されています。
再起動の際に、システム BIOS が接続されたディスクを自動的に検出するように設定されました。 より重要なことは、FreeBSD が再起動の際にそれらを検出することです。
ad0: 19574MB <WDC WD205BA> [39770/16/63] at ata0-master UDMA33 ad1: 29333MB <WDC WD307AA> [59598/16/63] at ata0-slave UDMA33 ad2: 29333MB <WDC WD307AA> [59598/16/63] at ata1-master UDMA33 ad3: 29333MB <WDC WD307AA> [59598/16/63] at ata1-slave UDMA33
Note: FreeBSD がディスクをすべて検出しないときは、 ジャンパを正しく設定してあるか確認してください。多くの IDE ドライブは “ケーブルセレクト” ジャンパを持っています。 これはマスタ/スレーブの関係を設定するジャンパでは ありません。ドライブの文書を参照して、 正しいジャンパ設定を見つけてください。
次に、ファイルシステムの一部分として、 それらをどのように接続するのかを考慮します。vinum(8) および ccd(4) の両方を検討すべきでしょう。この設定では、ccd(4) を選択しました。
ccd(4) ドライバは、いくつかの同じディスクを使って、 一つの論理的ファイルシステムに連結することができます。 ccd(4) を使用するためには、カーネルが ccd(4) に対応している必要があります。 次の行をカーネルコンフィギュレーションファイルに追加して、 カーネルを再構築し、再インストールしてください。
pseudo-device ccd 4
5.X システムでは、 上記の代わりに次の行を追加しなければなりません。
device ccd
Note: FreeBSD 5.X では ccd(4) デバイスの数を指定する必要はありません。ccd(4) デバイスドライバは自己複製するようになりました -- 新しいデバイスインスタンスは、 必要に応じてその都度自動的に作成されます。
FreeBSD 3.0 以降では、 カーネルモジュールを読み込んで ccd(4) に対応することもできます。
ccd(4) を設定するために、まず disklabel(8) を使用してディスクにラベルを書き込まなくてはなりません。
disklabel -r -w ad1 auto disklabel -r -w ad2 auto disklabel -r -w ad3 auto
このコマンドはディスク全体を示す ad1c, ad2c および ad3c に対するディスクラベルを作成します。
Note: FreeBSD 5.1-RELEASE から、従来の disklabel(8) プログラムは bsdlabel(8) ユーティリティに置き換えられました。bsdlabel(8) では、 使用されていない数多くのオプションやパラメタが削除されました。 たとえば
-rオプションは bsdlabel(8) では取り除かれました。詳細については bsdlabel(8) のマニュアルページを参照してください。
次に、ディスクラベルのタイプを変更します。 disklabel(8) を使用してディスクラベルを編集してください。
disklabel -e ad1 disklabel -e ad2 disklabel -e ad3
このコマンドは EDITOR 環境変数に設定されているエディタ (一般的には vi(1)) でそれぞれのディスクの現在のディスクラベルを開きます。
変更されていないディスクラベルは以下のようになります。
8 partitions: # size offset fstype [fsize bsize bps/cpg] c: 60074784 0 unused 0 0 0 # (Cyl. 0 - 59597)
ccd(4) で使用する e パーティションを作成します。通常では c パーティションの行をコピーすれば良いでしょう。しかし、
fstype は 4.2BSD
でなければ なりません。
ディスクラベルは以下のようになるでしょう。
8 partitions: # size offset fstype [fsize bsize bps/cpg] c: 60074784 0 unused 0 0 0 # (Cyl. 0 - 59597) e: 60074784 0 4.2BSD 0 0 0 # (Cyl. 0 - 59597)
ccd0c デバイスノードはまだ存在していないかも知れません。 そのときは、次のコマンドを実行して作成してください。
cd /dev sh MAKEDEV ccd0
Note: FreeBSD 5.0 では devfs(5) が /dev 以下のデバイスノードを自動的に管理するので、 MAKEDEVを使用する必要はありません。
すべてのディスクにラベルを書き込んだので、 ccd(4) を構築してください。 これを行うためには、以下のようなオプションで ccdconfig(8) を使います。
ccdconfig ccd032
0
/dev/ad1e
/dev/ad2e /dev/ad3e
各オプションの使用法と意味は以下の通りです。




ccdconfig(8) を実行すると ccd(4) が設定されます。 これでファイルシステムをインストールすることが可能です。 オプションについて newfs(8) を参照するか、 次のように実行してください。
newfs /dev/ccd0c
一般的に、再起動するたびに ccd(4) をマウントしたいと思うでしょう。これを行うために、 まず設定をしなければなりません。次のコマンドを用いて、 現在の設定を /etc/ccd.conf に書き出します。
ccdconfig -g > /etc/ccd.conf
/etc/ccd.conf が存在すると、 再起動の際に /etc/rc スクリプトが ccdconfig -C を実行します。これにより、 ccd(4) は自動的に設定された後、マウントされます。
自動的に ccd(4) をマウントするには、 /etc/fstab に ccd(4) のエントリ追加します。このように設定すると起動時にマウントされます。
/dev/ccd0c /media ufs rw 2 2
Vinum ボリュームマネージャは、 仮想ディスクドライブを実装したブロックデバイスドライバです。 Vinum は、ディスクハードウェアをブロックデバイスインタフェースから 分離し、データを配置します。 その結果、ディスク記憶装置を従来のスライスで扱うのと比較して、 柔軟性、性能および信頼性が向上しています。 vinum(8) は RAID-0, RAID-1 および RAID-5 モデル、 そしてそれぞれの組合せを実装しています。
vinum(8) の詳細については Vinum ボリュームマネジャ を参照してください。
FreeBSD は、さまざまなハードウェア RAID コントローラにも対応しています。これらのデバイスはアレイを制御するための 特別なソフトウェアを FreeBSD で必要することなく、 RAID サブシステムを制御します。
カード上の BIOS を使用して、 カードはそれ自身でディスク操作のほとんどを制御します。以下は Promise IDE RAID コントローラを使用した設定の簡単な説明です。 このカードがインストールされ、システムが起動したときには、 情報の入力を促すプロンプトを表示します。 指示にしたがってカードの設定画面に進んでください。 接続されたドライブを組み合わせるように設定することができます。 設定後、ディスクは FreeBSD に対して単一のドライブのように見えます。 他の RAID レベルは適宜設定できます。
FreeBSD はアレイ内の障害ディスクを動作中に交換できます。 ただし、再起動前にそれを検知していることが必要です。
/var/log/messages または dmesg(8) の出力に次のような行があるでしょう。
ad6 on monster1 suffered a hard error. ad6: READ command timeout tag=0 serv=0 - resetting ad6: trying fallback to PIO mode ata3: resetting devices .. done ad6: hard error reading fsbn 1116119 of 0-7 (ad6 bn 1116119; cn 1107 tn 4 sn 11) status=59 error=40 ar0: WARNING - mirror lost
atacontrol(8) を使用して詳細を調べてください。
# atacontrol list ATA channel 0: Master: no device present Slave: acd0 <HL-DT-ST CD-ROM GCR-8520B/1.00> ATA/ATAPI rev 0 ATA channel 1: Master: no device present Slave: no device present ATA channel 2: Master: ad4 <MAXTOR 6L080J4/A93.0500> ATA/ATAPI rev 5 Slave: no device present ATA channel 3: Master: ad6 <MAXTOR 6L080J4/A93.0500> ATA/ATAPI rev 5 Slave: no device present # atacontrol status ar0 ar0: ATA RAID1 subdisks: ad4 ad6 status: DEGRADED
ディスクを安全に取り外すために、 まずアレイから切り離します。
# atacontrol detach 3
ディスクを取り外します。
スペアのディスクを取り付けます。
# atacontrol attach 3 Master: ad6 <MAXTOR 6L080J4/A93.0500> ATA/ATAPI rev 5 Slave: no device present
アレイを再構築します。
# atacontrol rebuild ar0
再構築コマンドは完了するまで他の操作を受け付けません。しかし、 もう一つ別のターミナルを (Alt+Fn を押して) 開き、 次のコマンドを実行すると進行状態を確認することができます。
# dmesg | tail -10 [output removed] ad6: removed from configuration ad6: deleted from ar0 disk1 ad6: inserted into ar0 disk1 as spare # atacontrol status ar0 ar0: ATA RAID1 subdisks: ad4 ad6 status: REBUILDING 0% completed
操作が完了するまでお待ちください。
CD は他の一般的なディスクと異なる様々な特徴を持っています。 そもそもユーザが書き込むことができません。 また遅延なしで連続的に読み出せるように、 トラック間をヘッドが移動しないですむようにデザインされています。 さらにこのサイズのメディアの中ではシステムをまたぐデータの 移動が比較的簡単でもあります。
CD はトラックの概念を持っていますが、 これはデータを連続的に読み出すためのものであってディスクの物理特性ではありません。 FreeBSD で CD を作成するには、まず CD のトラックとなるデータファイルを用意し、 そのトラックを CD に書き込みます。
ISO 9660 ファイルシステムはこの様な差異を扱うべく設計されました。 その結果、ファイルシステムは一般的に使用するのに差しつかえない程度に 制限されて標準化されています。幸いなことに、ISO 9660 ファイルシステムには拡張機構が提供されています。適切に書かれた CD は、 拡張機構に対応したシステムでは拡張を利用して、そうでないシステムでは 拡張機構を使用しない範囲で動作するようになっています。
sysutils/mkisofs プログラムは ISO 9660 ファイルシステムを含むデータファイルを作成するのに使われます。 これには様々な拡張をサポートするオプションがあり、 以下で説明します。 このソフトウェアは、ports の sysutils/mkisofs からインストールすることができます。
CD に書き込むためのツールは、お使いの CD ライタが ATAPI 接続か否かにも依存します。ATAPI CD ライタなら、ベースシステムの一部である burncd プログラムを使います。SCSI や USB の CD ライタなら、ports の sysutils/cdrecord をインストールして cdrecord プログラムを使うべきでしょう。
burncd が対応しているドライブは限定されています。 ドライブが対応されているかどうかを確認するには、 CD-R/RW supported drives にある一覧を見てください。
Note: FreeBSD 5.X または FreeBSD 4.8-RELEASE 以降のバージョンを使用している場合、 ATAPI/CAM モジュール を使用すると ATAPI ハードウェア上で SCSI ドライブ用の cdrecord および他のツールを使用できるようになります。
sysutils/mkisofs は UNIX ファイルシステムの名前空間におけるディレクトリツリーのイメージとして ISO 9660 ファイルシステムを作成します。 最も簡単な使い方は以下の通りです。
# mkisofs -o imagefile.iso /path/to/tree
このコマンドは /path/to/tree 以下のディレクトリツリーのコピーである ISO 9660 ファイルシステムを含んだ imagefile.iso ファイルを作成します。この過程において、ファイル名は標準的な ISO 9660 ファイルシステムの制限に適合するようなファイル名に対応づけられ、 ISO ファイルシステムでファイル名を文字化できないファイルは除外されます。
この制限を回避するために利用できるオプションはいくつもあります。 特に -R オプションは UNIX
システムで標準的な Rock Ridge 拡張を有効にします。-J
オプションは Microsoft のシステムで標準的な Joliet 拡張を有効にし、 -hfs オプションは Mac OS
で使用されている HFS ファイルシステムを作成するために使われます。
FreeBSD でしか使わないのであれば、-U
オプションを使用するとあらゆるファイル名制限を無効にできます。 さらに -R オプションとともに使うことで FreeBSD
と同一のファイルシステムイメージを作成できますが、 これは ISO 9660
標準の多くを無視しています。
一般的に使われる最後のオプションは -b オプションです。
これは “El Torito” ブータブル CD
を作成するのに使う起動イメージのありかを指定します。
このオプションは引数として起動イメージへのパスを、 CD
に書き込まれるディレクトリツリーの頂点からの相対位置で取ります。 したがって /tmp/myboot がブート可能な FreeBSD システムで /tmp/myboot/boot/cdboot
にブートイメージがあるならば、以下のようにすることで ISO 9660
ファイルシステムのイメージを /tmp/bootable.iso
に作成することができます。
# mkisofs -U -R -b boot/cdboot -o /tmp/bootable.iso /tmp/myboot
この後、カーネルで vn (FreeBSD 4.X) または md (FreeBSD 5.X) が設定されていれば、 ファイルシステムを以下のようにしてマウントすることができます。
# vnconfig -e vn0c /tmp/bootable.iso # mount -t cd9660 /dev/vn0c /mnt
FreeBSD 4.X および FreeBSD 5.X に対しては以下の通りです。
# mdconfig -a -t vnode -f /tmp/bootable.iso -u 0 # mount -t cd9660 /dev/md0 /mnt
/mnt と /tmp/myboot が同一かどうか確認してください。
sysutils/mkisofs には挙動を細かく制御するために他にもたくさんのオプションがあります。 特に、ISO 9660 レイアウトの変更や Joliet および HFS ディスク作成などの 詳細は mkisofs(8) のマニュアルページをご覧ください。
あなたが持っているのが ATAPI CD ライタなら、CD に ISO イメージを書き込むために burncd コマンドが使えます。 burncd はベースシステムの一部で /usr/sbin/burncd としてインストールされています。 使い方はとても単純でオプションも少ししかありません。
# burncd -f cddevice data imagefile.iso fixate
以上のコマンドは imagefile.iso のコピーを cddevice に書き込みます。 デフォルトのデバイスは /dev/acd0c です。 書き込み速度や操作完了後に CD を自動的に取り出す方法、 オーディオデータの書き込みなどのオプションについては burncd(8) を見てください。
あなたが持っている CD ライタが ATAPI ではなければ、 CD を書き込むのに cdrecord を使う必要があります。 cdrecord はベースシステムの一部ではなく、 sysutils/cdrtools の port または 適切な package を利用してインストールしなければなりません。 なお、ベースシステムを変更するとバイナリに矛盾が発生し、 “コースター” を作ってしまうおそれがあります。 したがって、システムをアップグレードする度にこの port も作り直すか、 あるいはFreeBSD の安定版を追いかけているのならば、 新しいバージョンが利用できるようになった時に ports をアップグレードする必要があります。
cdrecord にはたくさんのオプションがありますが、 基本的な使い方は burncd よりもさらに簡単です。 ISO 9660 イメージを書き込むには以下のようにします。
# cdrecord dev=device imagefile.iso
cdrecord のトリッキーな部分は、使用する dev を見つけるところにあります。 適切な設定を見つけるためには
cdrecord の -scanbus
フラグを使います。 たとえば、以下のような結果が出力されるでしょう。
# cdrecord -scanbus
Cdrecord 1.9 (i386-unknown-freebsd4.2) Copyright (C) 1995-2000 Jörg Schilling
Using libscg version 'schily-0.1'
scsibus0:
0,0,0 0) 'SEAGATE ' 'ST39236LW ' '0004' Disk
0,1,0 1) 'SEAGATE ' 'ST39173W ' '5958' Disk
0,2,0 2) *
0,3,0 3) 'iomega ' 'jaz 1GB ' 'J.86' Removable Disk
0,4,0 4) 'NEC ' 'CD-ROM DRIVE:466' '1.26' Removable CD-ROM
0,5,0 5) *
0,6,0 6) *
0,7,0 7) *
scsibus1:
1,0,0 100) *
1,1,0 101) *
1,2,0 102) *
1,3,0 103) *
1,4,0 104) *
1,5,0 105) 'YAMAHA ' 'CRW4260 ' '1.0q' Removable CD-ROM
1,6,0 106) 'ARTEC ' 'AM12S ' '1.06' Scanner
1,7,0 107) *
リストにあるデバイスに対する適切な dev
の値がここに示されています。あなたの CD ライタをこのリストから見つけ、
カンマで区切られた 3 つの数値を dev
の値として使ってください。この例では CRW デバイスは 1,5,0 なので、適切な入力は
dev=1,5,0 となります。
値を明示するもっと簡単な方法もあります。詳細は
cdrecord(1)
を見てください。そこにはオーディオトラックを書き込む方法や、
書き込み速度その他を操作する方法も書かれています。
CD からオーディオデータを連続したファイルに展開し、ブランク CD にこれらのファイルを書き込むことで、オーディオ CD を複製することができます。 この手順は ATAPI および SCSI ドライブの間で少し異なります。
SCSI ドライブ
cdda2wav を使用してオーディオを展開します。
% cdda2wav -v255 -D2,0 -B -Owav
cdrecord を使用して .wav ファイルに書き出します。
% cdrecord -v dev=2,0 -dao -useinfo *.wav
Section 16.5.4 に説明されているように 2.0 が適切に指定されていることを確かめてください。
ATAPI ドライブ
ATAPI CD ドライバでは、それぞれのトラックを /dev/acddtnn のように利用できます。 ここで d はドライブ番号であり、 nn は二桁十進のトラック番号です。 一桁の場合 0 を前に付加する必要があります。 したがって、一番目のディスクの一番目のトラックは /dev/acd0t01、二番目のトラックは /dev/acd0t02、三番目のトラックは /dev/acd0t03 などとなります。
適切なデバイスファイルが /dev に存在することを確かめてください。 存在しなければ、たとえば次のようにして作成します。
# cd /dev # sh MAKEDEV acd0t99
Note: FreeBSD 5.0 では devfs(5) が /dev にエントリを自動的に作成、 管理するので、MAKEDEV を使用する必要はありません。
dd(1) を使用して各トラックを展開します。 ファイルを展開する際、ブロックサイズを指定しなければなりません。
# dd if=/dev/acd0t01 of=track1.cdr bs=2352 # dd if=/dev/acd0t02 of=track2.cdr bs=2352 ...
burncd を使用して、 展開したファイルをディスクに書き込みます。 これらがオーディオファイルであること、 そして書き込みが終了したときに burncd がディスクを固定 (fixate) することを明示しなければなりません。
# burncd -f /dev/acd0c audio track1.cdr track2.cdr ... fixate
データ CD を、sysutils/mkisofs を用いて作成されたイメージファイルと機能的に等価なイメージファイルにコピーできます。 これを使用して、すべてのデータ CD を複製することができます。 ここでの例は CDROM デバイスが acd0 であるとしています。あなたの CDROM デバイスに読み替えてください。 CDROM の場合には、パーティション全体またはディスク全体 を指定するために c をデバイス名の後に追加しなければなりません。
# dd if=/dev/acd0c of=file.iso bs=2048
これでディスクイメージを取り出すことができました。 すでに説明した方法を用いて CD に書き込むことができます。
さて、標準的なデータ CDROM を作成したので、 おそらく次はそれをマウントしてデータを読み出したいと思うでしょう。 デフォルトでは mount(8) は、ファイルシステムタイプを ufs としています。 次のように実行しようとすると、
# mount /dev/cd0c /mnt
“Incorrect super block”
というエラーが返されてマウントできないでしょう。 CDROM は UFS ファイルシステムではないために、
このような手順でマウントしようすると失敗します。 ファイルシステムのタイプが ISO9660 であると mount(8)
に教えさえすれば、すべてはうまく動作します。 mount(8) に -t cd9660 オプションを指定することでこれを行います。
たとえば /dev/cd0c の CDROM デバイスを /mnt にマウントしたい場合は、 以下のように実行します。
# mount -t cd9660 /dev/cd0c /mnt
使用している CDROM インタフェースによっては、 デバイス名 (この例では /dev/cd0c) が異なるかもしれないことに注意してください。
また、-t cd9660 オプションは、単に mount_cd9660(8)
を実行します。 この例を以下のように短縮することもできます。
# mount_cd9660 /dev/cd0c /mnt
一般的にこの方法では、すべてのメーカの データ CDROM を使用することができます。しかしながら、特定の ISO 9660 拡張が施されたディスクでは奇妙な動作をするかもしれません。 たとえば Joliet ディスクは、 すべてのファイル名を 2 バイトの Unicode 文字で格納します。 FreeBSD カーネルは (まだ) Unicode を理解できないので、 非英語文字はクエスチョンマークで表示されます (FreeBSD 4.3 以降を使用している場合、CD9660 ドライバには適切な Unicode 変換表を読み込むための急ごしらえのフックが含まれています。 いくつかの共通のエンコードに対するモジュールは sysutils/cd9660_unicode port から利用可能です)。
CDROM をマウントしようとする時に、 “Device not configured” と表示されるかもしれません。これは、ディスクがトレーにないと CDROM ドライブが判断しているか、 ドライブがバス上に認識できないことを通常意味します。 ディスクが挿入されたことを CDROM ドライブが認識するには数秒かかりますので、 辛抱強く待ってください。
バスのリセットに返答するためのタイムアウトが短いために、時々 SCSI CDROM は認識に失敗するかもしれません。SCSI CDROM を持っている場合は、 次のオプションをカーネルコンフィギュレーションファイルに追加して、 カーネルを再構築してください。
options SCSI_DELAY=15000
これより、SCSI バスを起動時に 15 秒間停止させて、 CDROM ドライブがバスリセットに応答する機会を与えます。
ISO 9660 ファイルシステムを作成すること無く、 ファイルを直接 CD に書き込むこともできます。 この方法をバックアップ目的に使用している人もいます。 これは、標準 CD を書き込むよりもさらに速く実行することができます。
# burncd -f /dev/acd1c -s 12 data archive.tar.gz fixate
このように CD に書き込まれたデータを取得するには、 raw デバイスノードからデータを読み込まなくてはなりません。
# tar xzvf /dev/acd1c
このディスクを通常の CDROM としてマウントすることはできません。 このような CDROM は FreeBSD を除いて、 他のすべてのオペレーティングシステムでは読み込むことはできません。 CD をマウントしたいか、 その他のオペレーティングシステムとデータを共有したい場合は、 上記に説明したように sysutils/mkisofs を使用しなくてはなりません。
このドライバは、ATAPI デバイス (CD-ROM, CD-RW, DVD ドライブなど) へ SCSI サブシステムを通じてアクセスすることを可能にします。 これにより、sysutils/cdrdao または cdrecord(1) のようなアプリケーションが使用できるようになります。
このドライバを使用するためには、 カーネルコンフィギュレーションファイルに次の行を追加する必要があります。
device atapicam device scbus device cd device pass
次の行もカーネルコンフィギュレーションファイルに必要です。
device ata device atapicd
両方がすでに存在しなければなりません。
それから再構築し、新しいカーネルをインストールし、 コンピュータを再起動します。 起動プロセス中にディスクライタは以下のように表示されるでしょう。
acd0: CD-RW <MATSHITA CD-RW/DVD-ROM UJDA740> at ata1-master PIO4 cd0 at ata1 bus 0 target 0 lun 0 cd0: <MATSHITA CDRW/DVD UJDA740 1.00> Removable CD-ROM SCSI-0 device cd0: 16.000MB/s transfers cd0: Attempt to query device size failed: NOT READY, Medium not present - tray closed
ドライブは /dev/cd0 デバイスを通じてアクセスすることが可能となります。 たとえば、次のようにして CD-ROM を /mnt にマウントします。
# mount -t cd9660 /dev/cd0c /mnt
root 権限で次のコマンドを実行して、 ライタの SCSI アドレスを得ることができます。
# camcontrol devlist <MATSHITA CDRW/DVD UJDA740 1.00> at scbus1 target 0 lun 0 (pass0,cd0)
したがって、1,0,0 が cdrecord(1) およびその他の SCSI アプリケーションで使用する SCSI アドレスです。
ATAPI/CAM および SCSI システムの詳細は atapicam(4) および cam(4) マニュアルページを参照してください。
フロッピーディスクにデータを格納することはしばしば役にたちます。 たとえば、ある人が他のリムーバブル記録メディアを何も持っていないときや、 小さなデータを他のコンピュータに移動させる必要があるときです。
この節では、FreeBSD におけるフロッピーディスクの使用方法を説明します。 主に 3.5 インチの DOS フロッピーのフォーマットと操作方法を扱いますが、 他のフロッピーディスクの形式についても概念は似ています。
他のデバイスと同様に、フロッピーディスクは /dev にあるエントリを通じてアクセスされます。4.X およびそれ以前のリリースにおいて raw フロッピーディスクにアクセスするには /dev/fdN または /dev/fdNX を使用します。N はドライブ番号を表し、 大抵は 0 です。X は文字を表します。
5.0 およびそれ以降のリリースでは、単に /dev/fdN を使用します。
/dev/fdN.size というデバイスもあります。 size はフロッピーディスクのサイズをキロバイトで示したものです。 これらのエントリは低レベルフォーマットの際に、 ディスクサイズを決定するのに使用されます。 1440kB は以下の例で使用されるサイズです。
時々 /dev 下のエントリは (再) 作成されなければなりません。次のコマンドでこれを行います。
# cd /dev && ./MAKEDEV "fd*"
FreeBSD 5.0 では devfs(5) が /dev 内のエントリを自動的に管理するので、 MAKEDEVを使用する必要はありません。
所望のディスクサイズは fdformat(1) に -f フラグを通して渡されます。対応しているサイズは fdcontrol(8)
のマニュアルページに掲載されていますが、最良に動作するのは 1440kB
だと助言しておきます。
フロッピーディスクは、 使用前に低レベルフォーマットをする必要があります。 通常、ベンダは低レベルフォーマット済みのディスクを出荷していますが、 フォーマットはメディアの品質を確認するよい方法です。 より大きな (または小さな) ディスクサイズにすることも可能ですが、 ほとんどのフロッピーディスクのサイズは 1440kB で動作するように設計されています。
フロッピーディスクを低レベルフォーマットするには fdformat(1) を使用する必要があります。 このユーティリティは引数としてデバイス名を指定します。
ディスクが良好かあるいは不良であるかを決定するのに役立つので、 エラーメッセージをすべてメモに取っておいてください。
/dev/fdN.size デバイスを使ってフロッピーをフォーマットします。 新しい 3.5 インチフロッピーディスクをドライブに挿入し、 以下のコマンドを実行してください。
# /usr/sbin/fdformat /dev/fd0.1440
/dev/fdN デバイスを使用してフロッピーをフォーマットします。 新しい 3.5 インチフロッピーディスクをドライブに挿入し、 以下のコマンドを実行してください。
# /usr/sbin/fdformat -f 1440 /dev/fd0
ディスクを低レベルフォーマットしたら、 次にディスクラベルを作成する必要があります。 ディスクラベルは後で破棄されますが、 システムがディスクのサイズとジオメトリを決定するのに必要になります。
新しいディスクラベルはディスク全体を引き継ぎ、 フロッピーのジオメトリに関する適切な情報のすべてが含まれます。 ディスクラベルに対するジオメトリの値は /etc/disktab に掲載されています。
次のように disklabel(8) を実行できます。
# /sbin/disklabel -B -r -w /dev/fd0 fd1440
Note: FreeBSD 5.1-RELEASE から、従来の disklabel(8) プログラムは bsdlabel(8) ユーティリティに置き換えられました。bsdlabel(8) では、 使用されていないオプションおよびパラメタの数多くが削除されました。 たとえば
-rオプションは bsdlabel(8) では取り除かれました。詳細については bsdlabel(8) マニュアルページを参照してください。
これでフロッピーを高レベルフォーマットする準備ができました。これは FreeBSD がディスクを読み書きする新しいファイルシステムを作成します。 新しいファイルシステムを作成するとディスクラベルは破棄されます。 したがって、ディスクを再フォーマットするときには、 ディスクラベルを再作成しなくてはなりません。
フロッピーのファイルシステムには UFS または FAT を使用できます。 フロッピーに対しては FAT が一般的によりよい選択です。
フロッピー上に新しいファイルシステムを作成するには次のようにします。
# /sbin/newfs_msdos /dev/fd0
これでディスクが使用できるようになりました。
フロッピーを使用するために、mount_msdos(8) (4.X 以前のリリース) または mount_msdosfs(8) (5.0 以後のリリース) を用いてマウントします。 Ports Collection から emulators/mtools を使用することもできます。
一般的なテープメディアには 4mm, 8mm, QIC, ミニカートリッジ、 DLT があります。
4mm テープはワークステーションのバックアップメディアとして QIC に取って代わりつつあります。この傾向は QIC ドライブの主要なメーカであった Archive を Conner が買収し QIC ドライブの製造を中止したことで加速しました。 4mm ドライブは小型で静かですが 8mm ドライブが持っている信頼性ほど、その評判は良くありません。 また、4mm カートリッジは 8mm カートリッジよりも安価で小型 (3 x 2 x 0.5 インチ、76 x 51 x 12 mm) になっています。 ただし、8mm と同様に、4mm のヘッドはヘリカルスキャン方式 (訳注: VTR と同様の回転ヘッドを使う方式) を採用しているため、比較的寿命が短いです。
ドライブのデータスループットは、150 kB/s から 最大で 500 kB/s 程度です。 データ容量は 1.3 GB から 2.0 GB です。 ドライブのほとんどで利用可能なハードウェア圧縮を使用すると、 容量が約 2 倍になります。 マルチドライブテープライブラリユニットは 1 つの筐体に 6 つのドライブを収容可能で、自動的にテープの交換ができます。 ライブラリの容量は 240 GB に達します。
現在の DDS-3 標準は 12 GB (圧縮時 24 GB) までのテープ容量に対応しています。
8mm ドライブと同様に 4mm ドライブはヘリカルスキャンを使用します。 ヘリカルスキャン方式の利点および欠点はすべて 4mm および 8mm ドライブの両方に当てはまります。
テープは 2,000 回のパスあるいは 100 回フルバックアップした後には交換するべきです。
8mm テープは SCSI テープドライブとして最もよく使われているもので、 データ交換用として最良の選択です。ほとんどのサイトには Exabyte 2 GB 8mm テープドライブがあるでしょう。8mm ドライブは信頼性が高く、使いやすく、静かです。 カートリッジは安価で小型です (4.8 x 3.3 x 0.6 インチ、122 x 84 x 15 mm)。8mm テープの欠点は、テープとヘッドの相対的な速度が高速なために、 比較的ヘッドとテープの寿命が短いことです。
データスループットは 250 kB/s から 500 kB/s 程度です。データ容量は 300 MB から 7 GB です。 ほとんどのドライブで利用可能なハードウェア圧縮を利用すると、 容量が約 2 倍になります。 これらのドライブは、単一のユニットから 6 つのドライブと 120 本のテープを一つの筐体に収容したマルチドライブテープライブラリまで利用可能です。 テープはユニットによって自動的に取り換えられます。 ライブラリの容量は 840 GB 以上に達します。
Exabyte の “Mammoth” モデルはテープ 1 本あたり 12 GB (圧縮時 24 GB) に対応し、 従来のテープドライブと比べ費用は約 2 倍になります。
データはヘリカルスキャンを用いてテープに記録されます。 ヘッダはメディアに対してある傾き (約 6 度) に配置されます。 テープはヘッドのある円筒の周の 270 度にわたって接触します。 テープが円筒面を走行する間、円筒は回転しています。 この結果、高密度のデータのつまったトラックは、 狭い間隔でテープの上端と下端の間を斜めに横切ります。
QIC-150 テープとドライブは、 おそらく最も一般的に使われているドライブとメディアでしょう。 QIC テープドライブは “現実的な” バックアップドライブとしては最も高価でないものです。 欠点はメディアのコストです。QIC テープは 8mm や 4mm テープと比較して GB あたりのデータの保存で 5 倍ほど高価です。 しかし、あなたの必要とする量が半ダース程のテープで十分であれば、 QIC は正しい選択かもしれません。QIC は 最も一般的なテープドライブです。 すべてのサイトに QIC ドライブのどれかの容量のものがあります。問題は、 QIC は同じようなテープ (まったく同じ場合もある) に多様な記録密度があることです。QIC ドライブは静かではありません。 これらのドライブはデータ記録を開始する前に音をたててシークしますし、 リード、ライト、シークの時にはっきりと聞こえる音を出します。 QIC テープの大きさは (6 x 4 x 0.7 インチ、152 x 102 x 17 mm) です。 1/4 インチ幅のテープも使用している ミニカートリッジ は別に議論します。テープライブラリやチェンジャはありません。
データスループットは ~1500 kB/s から ~5000 kB/s 程度です。データ容量は 400 MB から 150 GB です。 ハードウェア圧縮が最近のドライブの多くで利用できます。 QIC ドライブは DAT ドライブに置き換えられつつあり、 あまり頻繁には使用されなくなっています。
データは複数のトラックに分かれてテープに記録されます。 トラックはテープメディアの長さ方向の一端からもう一方の端までです (訳注: 1 トラックの read/write が終わるとテープの走行方向を反転させ 次のトラックの read/write を行います)。トラックの数と、 それに対応するトラックの幅はテープの容量によって変わります。 すべてではありませんが、 最近のドライブはほとんど、少なくとも読み出しについては (場合によっては書き込みも) 下位互換性があります。 QIC はデータの安全性についてはよいといわれています (ヘリカルスキャンドライブに比べて機構は単純でより丈夫です)。
テープは 5000 回のバックアップで寿命となるでしょう。
DLT はここに示したドライブのタイプの中で最高速のデータ転送レートを発揮します。 1/2 インチ (12.5mm) テープが単リールのカートリッジ (4 x 4 x 1 インチ、100 x 100 x 25 mm) に入っています。 カートリッジのひとつの側面全体がスイングゲートになっています。 ドライブの機構がこのゲートを開け、テープリーダを引き出します。 テープリーダには楕円形の穴があり、 ドライブがテープを “引っ掛ける” のに使います。 巻き取りのためのリールはドライブの中にあります。 ここに挙げた他のカートリッジはすべて (9 トラックテープは唯一の例外です) 送り出しリールと巻き取りリールの両方がカートリッジの中にあります。
データスループットは約 1.5 MB/s で、4mm, 8mm, QIC テープドライブの 3 倍です。データ容量は単一のドライブで 10 GB から 20 GB の範囲です。マルチテープチェンジャ、 マルチテープドライブ、5 から 900 巻のテープを 1 から 20 ドライブで扱うマルチドライブテープライブラリがあり、 50 GB から 9 TB の容量が得られます。
圧縮によって、DLT Type IV フォーマットは 70 GB までの容量に対応しています。
データは (QICテープのように) テープの走行方向と平行に複数あるトラックへ記録されます。 2 つのトラックに同時書き込みを行います。 read/write ヘッドの寿命は比較的長いと言えます。 テープの走行が止まればヘッドとテープの間の相対運動は無いからです。
AIT は、Sony が発表した新しいフォーマットで、 テープ 1 本あたり 50 GB (圧縮時) まで格納できます。 テープにはメモリチップが搭載されており、 テープの内容の索引情報を保持しています。 他のテープではテープ上のファイルの位置を把握するのに数分必要とするのですが、 このテープドライブでは索引情報を読んで直ちに決定することができます。 SAMS:Alexandria のようなソフトウェアは、40 を超える ATI テープライブラリを操作できるのはもちろんのこと、 テープのメモリチップと直接通信して、スクリーンに内容を表示し、 どのファイルがどのテープにバックアップされたかを調べて、 正しいテープを見つけ、読み込み、 テープからデータを復元することができます。
このようなライブラリは大体 $20,000 くらいするので、 愛好家が購入できる価格帯からは外れてしまいます。
全く新品の空テープを読もうとしたり書き込もうとすると、 処理は失敗するでしょう。 次のようなメッセージがコンソールに出力されるでしょう。
sa0(ncr1:4:0): NOT READY asc:4,1 sa0(ncr1:4:0): Logical unit is in process of becoming ready
テープに識別ブロック (Identifier Block:block number 0) がありません。QIC-525 標準を採用したすべての QIC テープドライブは識別ブロックをテープに書き込みます。 2 つの解決方法があります。
mt fsf 1 によりテープドライブはテープに識別ブロックを書き込みます。
フロントパネルのボタンを押してテープを取り出します。
再びテープを挿入し、データをテープに dump します。
dump は “DUMP: End of tape detected” と報告し、 コンソールには “HARDWARE FAILURE info:280 asc:80,96” と表示されるでしょう。
mt rewind を使ってテープを巻戻します。
次からはテープの操作はうまくいくでしょう。
フロッピーディスクは以下の理由によって、 実際にバックアップをつくるための適切なメディアではありません。
メディアの信頼性が (特に長期間の場合) 低い。
バックアップとリストアがとても遅い。
容量が非常に小さい (1 ダースかそこらのフロッピーディスクに ハードディスク全体をバックアップしていた時代は、 はるか遠くに過ぎ去りました)。
しかしながら、データをバックアップする他の手段がないのなら、 バックアップを取らないよりもフロッピーディスクを使う方がましでしょう。
フロッピーディスクを使用せざるを得ないときは、 品質のよいディスクを使用してください。 事務所のその辺に数年転がっていたフロッピーは使わない方が良いでしょう。 評判のよいメーカの新しいディスクを使用することが理想です。
フロッピーにバックアップする最もよい方法は、 -M
(マルチボリューム) オプション付きで tar(1)
コマンドを使用することです。これで、
複数のフロッピーにわたってバックアップすることが可能になります。
カレントディレクトリとサブディレクトリ内のすべてのファイルをバックアップするには、 以下のコマンドを (root 権限で) 使用します。
# tar Mcvf /dev/fd0 *
1 枚目のフロッピーが一杯になると、 tar(1) は次のボリュームを挿入するように要求します (tar(1) はさまざまなメディアを扱えるので、 ボリュームと表示します。この文脈ではフロッピーディスクのことです)。
Prepare volume #2 for /dev/fd0 and hit return:
指定したファイルがすべて保存されるまで (ボリューム番号を増やしながら) これが繰り返されます。
残念なことに tar(1)
はマルチボリュームアーカイブに対して、 -z
オプションを使うことができません。 もちろん、すべてのファイルを gzip(1) で圧縮し、
それらを tar(1)
を用いてフロッピーに保存して、 それから再び gunzip(1)
することはできます。
すべてのアーカイブをリストアするには以下のようにします。
# tar Mxvf /dev/fd0
特定のファイルだけをリストアするには 2 つの方法があります。 1 つ目は、1 枚目のフロッピーを用いて以下のようにするものです。
# tar Mxvf /dev/fd0 filename
tar(1) ユーティリティは、 必要なファイルを見つけるまで次のディスクを挿入するように要求します。
もう 1 つは、 必要なファイルがどのフロッピーに保存されているか分かっている場合、 そのフロッピーを挿入して上記と同じコマンドを使用するだけでもよいです。 あるフロッピー上にある 1 番目のファイルが、 その前のフロッピーから続いている場合は、 そのファイルのリストアを要求していなくても tar(1) はそれをリストアできないと警告することに注意してください!
主なバックアッププログラムは dump(8), tar(1), cpio(1) の三つです。
伝統的な UNIX のバックアッププログラムは dump と restore です。 これらはファイルシステムによって作成されるファイル、リンク、 ディレクトリといった抽象の下位にある、 ディスクブロックの集合としてドライブを操作します。 dump はデバイス上のファイルシステム全体をバックアップします。 ファイルシステムの一部分だけ、 または二つ以上のファイルシステムにわたるディレクトリツリーをバックアップすることはできません。 dump はファイルおよびディレクトリをテープに書き込まずに、 ファイルおよびディレクトリを含んだ raw データブロックを書き込みます。
Note: ルートディレクトリで dump を使った場合、 /home, /usr など、他の多くのディレクトリはバックアップされません。 これらのディレクトリは通常、 他のファイルシステムへのマウントポイントであったり、 シンボリックリンクとなっているためです。
dump には AT&T UNIX のバージョン 6 (およそ 1975 年) の初期から残っている癖があります。 デフォルトのパラメタは、現在利用可能な高密度メディア (最大 62,182 ftpi) ではなく、9 トラックテープ (6250 bpi) に最適な値となっています。 現在のテープドライブの容量を利用するために、 これらのデフォルト値をコマンドラインで上書きしなければなりません。
rdump と rrestore を用いて他のコンピュータに接続されているテープドライブにネットワーク経由でデータをバックアップすることも可能です。 どちらのプログラムもリモートのテープドライブにアクセスするために rcmd および ruserok に依存しています。 したがって、バックアップを実行するユーザがリモートコンピュータの .rhosts ファイルに書かれていなければなりません。 rdump および rrestore の引数はリモートコンピュータに適切なものを用いなければなりません。 FreeBSD コンピュータから komodo と呼ばれる Sun に接続されている Exabyte テープへ rdump するには以下のようにします。
# /sbin/rdump 0dsbfu 54000 13000 126 komodo:/dev/nsa8 /dev/da0a 2>&1
注意: .rhosts 認証を許可することには、セキュリティに関する暗黙の仮定があります。 あなたの置かれている状況を注意深く調べてください。
ssh 越しに dump と restore をより安全な形で使うこともできます。
Example 16-1. ssh 越しの dump の利用
# /sbin/dump -0uan -f - /usr | gzip -2 | ssh1 -c blowfish \
targetuser@targetmachine.example.com dd of=/mybigfiles/dump-usr-l0.gz
または、環境変数 RSH を設定して、 dump の組み込み機能を利用する。
tar(1) は AT&T UNIX の バージョン 6 (1975 年ごろ) にまで遡ることができます。tar はファイルシステムと協調して動作し、 ファイルとディレクトリをテープに書き込みます。tar は cpio(1) で使用可能なフルレンジのオプションには対応していませんが、 tar には cpio が使用するような奇妙なコマンドパイプラインは必要ありません。
tar の多くの版はネットワーク経由のバックアップには対応していません。 FreeBSD が使用している GNU 版の tar は、 rdump と同じ構文でリモートデバイスに対応しています。 komodo と呼ばれる Sun に接続された Exabyte テープドライブに対して tar を実行するには以下のようにします。
# /usr/bin/tar cf komodo:/dev/nsa8 . 2>&1
リモートデバイスに対応していない版に対しては、パイプラインと rsh を使用してリモートテープドライブにデータを送ることができます。
# tar cf - . | rsh hostname dd of=tape-device obs=20b
ネットワークを越えたバックアップのセキュリティを懸念しているなら、 rsh の代わりに ssh を使うべきです。
cpio(1) は本来 UNIX ファイルを磁気メディアで交換するためのプログラムです。 cpio はバイトスワッピング、 多くの異なるアーカイブフォーマットの書き込みオプションがあり (それ以外にも多数のオプションがあります)、 パイプで他のプログラムにデータを渡すこともできます。 この最後にあげた特徴が、cpio をインストールメディアとしては優れた選択肢にしています。 cpio はディレクトリツリーの探索の機能はなく、ファイルリストは stdin からの入力でなくてはなりません。
cpio はネットワーク経由のバックアップには対応していません。 以下のようにパイプラインと rsh を用いてリモートテープドライブにデータを送ることができます。
# for f in directory_list; do find $f >> backup.list done # cpio -v -o --format=newc < backup.list | ssh user@host "cat > backup_device"
directory_list はバックアップしたいディレクトリのリストで、 user@host はバックアップを実行したいユーザとホスト名の組であり、 backup_device はバックアップを書き込みたいデバイスです (たとえば /dev/nsa0)。
pax(1) は tar と cpio に対する IEEE/POSIX の回答です。長年の間、さまざまな版の tar と cpio は互いにわずかに非互換になってきていました。 それらをしらみ潰しに標準化する代わりに、POSIX は新しいアーカイブユーティリティを作りました。 pax は、いくつもの cpio や tar のフォーマットの読み書きに対応しようと試みているほか、 専用に新しいフォーマットを開発しました。 コマンド群は tar よりも cpio の方にいくぶん似ています。
Amanda (Advanced Maryland Network Disk Archiver) は単一のプログラムではなく、 クライアント/サーバ型のバックアップシステムです。 Amanda サーバは、 Amanda クライアントを有する ネットワークに接続されたコンピュータからデータを受け取り、 備え付けられたテープドライブにバックアップします。 いくつもの大容量ディスクを備えたサイトでの共通の問題は、 データディレクトリをテープにバックアップするのに時間がかかりすぎることです。 Amanda はこの問題を解決します。 Amanda は “ホールディングディスク” を使用して、 同時に複数のファイルシステムのバックアップを行うことができます。 Amanda の設定ファイルにかかれたすべてのファイルシステムのフルバックアップを特定の間隔でとるために “アーカイブセット” と呼ばれるテープグループを作成します。 “アーカイブセット” には 夜間に作成されるすべてのファイルシステムの増分 (または差分) のバックアップも含まれます。 障害が起きたファイルシステムのリストアには、 最も新しいフルバックアップと増分のバックアップが必要です。
設定ファイルでは、バックアップの制御と Amanda によるネットワークトラフィック量を設定します。 Amanda は上記のバックアッププログラムのいずれかを使ってデータをテープに書き込みます。 Amanda は port または package として利用可能です。デフォルトではインストールされていません。
“何もしない” というのはコンピュータのプログラムではありませんが、 バックアップの戦略として最も広く採用されています。 これには初期投資が必要ありません。 従わなければならないバックアップスケジュールもありません。 ただ何もしないだけです。データに何か起きたら苦笑いして耐えてください!
あなたにとって時間やデータの価値が少ないか、 あるいはまったくないのであれば “何もしない” のはあなたのコンピュータに最も適したバックアッププログラムでしょう。 しかし注意してください。UNIX は便利なツールです。 6 ヶ月も使用していれば、 あなたにとって価値のあるファイルの山が出来上がっているでしょう。
“何もしない” ことはコンピュータが同じものをもう一度作り直すことのできる /usr/obj やその他のディレクトリツリーについては適切なバックアップ方法です。 一例として、このハンドブックの HTML 版 または PostScript 版を構成するファイルがあります。 これらの文書形式は SGML ファイルから作成されたものです。 HTML または PostScript ファイルのバックアップは必要ありません。 SGML ファイルは定期的にバックアップされています。
dump(8) です。以上。 Elizabeth D. Zwicky はここで検討したプログラムすべてについて拷問的なテストを行いました。 すべてのデータと UNIX ファイルシステムの状態すべてを保存するのに最適なのは、明らかに dump です。 Elizabeth は多種多様の特異な状態 (いくつかはあまり珍しくないものもあります) を含むファイルシステムを作成し、 それらのファイルシステムのバックアップとリストアを行って、 それぞれのプログラムのテストを行いました。特異な状態とは、 ホールがあるファイル、ホールとヌルブロックがあるファイル、 奇妙な文字をファイル名に持つファイル、読み取り不可、 書き込み不可のファイル、デバイスファイル、 バックアップ中のファイルのサイズ変更、 バックアップ中のファイルの作成および削除、などです。 彼女は 1991 年 10 月の LISA V で結果を発表しています。 torture-testing Backup and Archive Programs を参照してください。
発生する可能性があるどのような惨事に対しても、 備えるのに必要な手順は以下の 4 ステップだけです。
最初に、 各ディスクのディスクラベルとファイルシステムテーブル (/etc/fstab)、 ブートメッセージ全体をそれぞれ 2 枚ずつ印刷します (たとえば disklabel da0 | lpr)。
2 番目に、ブートフロッピーと fix-it フロッピー (boot.flp および fixit.flp) にそのシステムのデバイスがすべて含まれているか確認します。 最も簡単に確認する方法は、フロッピーをドライブに入れてマシンをリブートしてブートメッセージを確認することです。 あなたのシステムのデバイスのすべてが含まれ、 機能していれば 3 番目の手順に進んでください。
さもなければ、 そのシステムのすべてのディスクをマウントでき、 テープドライブにもアクセスできるカーネルを備えた カスタムブートフロッピーを 2 枚作成する必要があります。 これらのフロッピーディスクには fdisk, disklabel, newfs, mount と、利用するバックアッププログラムが入っていなければなりません。 これらのプログラムはスタティックリンクされていなければなりません。 dump を使用するのなら、このフロッピーには restore も含まれていなければなりません。
3 番目に、定期的にバックアップテープを作成します。 最後のバックアップの後で行われた変更は、回復できずに失われます。 バックアップテープにライトプロテクトを施してください。
4 番目に、フロッピーディスク (boot.flp と fixit.flp、 か、第 2 段階で作成した 2 枚のカスタムブートフロッピーディスクのどちらか) およびバックアップテープのテストをします。 手順のメモを作りましょう。 このメモはブートフロッピー、印刷した紙、 バックアップテープと一緒に保存しておきます。 リストアを行うときには、 このメモがバックアップテープを壊すのを防ぐくらい取り乱しているかもしれません (どのように? tar xvf /dev/sa0 の代わりに、うっかり tar cvf /dev/sa0 と入力してバックアップテープを上書きしてしまうかもしれません)。
訳注: 上書きはライトプロテクトをしておけば防げますが、 何らかの原因でプロテクトがはずれているかもしれません。 ちなみに訳者の経験から言えば、 上のようなミスタイプは結構起きます。
安全性を増すために、毎回、 ブートフロッピーを作成し、 2 巻のバックアップテープを取ります。 一方を離れた場所に保管します。 離れた場所は同じ事務所の建物の地下室ではいけません。 世界貿易センタービルにあった数多くの会社は、 苦い経験によりこの教訓を得ました。離れた場所とは、 コンピュータやディスクドライブから十分な距離を取って 物理的に分離されていなければなりません。
Example 16-3. ブートフロッピーを作成するスクリプト
#!/bin/sh
#
# create a restore floppy
#
# format the floppy
#
PATH=/bin:/sbin:/usr/sbin:/usr/bin
fdformat -q fd0
if [ $? -ne 0 ]
then
echo "Bad floppy, please use a new one"
exit 1
fi
# place boot blocks on the floppy
#
disklabel -w -B /dev/fd0c fd1440
#
# newfs the one and only partition
#
newfs -t 2 -u 18 -l 1 -c 40 -i 5120 -m 5 -o space /dev/fd0a
#
# mount the new floppy
#
mount /dev/fd0a /mnt
#
# create required directories
#
mkdir /mnt/dev
mkdir /mnt/bin
mkdir /mnt/sbin
mkdir /mnt/etc
mkdir /mnt/root
mkdir /mnt/mnt # for the root partition
mkdir /mnt/tmp
mkdir /mnt/var
#
# populate the directories
#
if [ ! -x /sys/compile/MINI/kernel ]
then
cat << EOM
The MINI kernel does not exist, please create one.
Here is an example config file:
#
# MINI -- A kernel to get FreeBSD onto a disk.
#
machine "i386"
cpu "I486_CPU"
ident MINI
maxusers 5
options INET # needed for _tcp _icmpstat _ipstat
# _udpstat _tcpstat _udb
options FFS #Berkeley Fast File System
options FAT_CURSOR #block cursor in syscons or pccons
options SCSI_DELAY=15 #Be pessimistic about Joe SCSI device
options NCONS=2 #1 virtual consoles
options USERCONFIG #Allow user configuration with -c XXX
config kernel root on da0 swap on da0 and da1 dumps on da0
device isa0
device pci0
device fdc0 at isa? port "IO_FD1" bio irq 6 drq 2 vector fdintr
device fd0 at fdc0 drive 0
device ncr0
device scbus0
device sc0 at isa? port "IO_KBD" tty irq 1 vector scintr
device npx0 at isa? port "IO_NPX" irq 13 vector npxintr
device da0
device da1
device da2
device sa0
pseudo-device loop # required by INET
pseudo-device gzip # Exec gzipped a.out's
EOM
exit 1
fi
cp -f /sys/compile/MINI/kernel /mnt
gzip -c -best /sbin/init > /mnt/sbin/init
gzip -c -best /sbin/fsck > /mnt/sbin/fsck
gzip -c -best /sbin/mount > /mnt/sbin/mount
gzip -c -best /sbin/halt > /mnt/sbin/halt
gzip -c -best /sbin/restore > /mnt/sbin/restore
gzip -c -best /bin/sh > /mnt/bin/sh
gzip -c -best /bin/sync > /mnt/bin/sync
cp /root/.profile /mnt/root
cp -f /dev/MAKEDEV /mnt/dev
chmod 755 /mnt/dev/MAKEDEV
chmod 500 /mnt/sbin/init
chmod 555 /mnt/sbin/fsck /mnt/sbin/mount /mnt/sbin/halt
chmod 555 /mnt/bin/sh /mnt/bin/sync
chmod 6555 /mnt/sbin/restore
#
# create the devices nodes
#
cd /mnt/dev
./MAKEDEV std
./MAKEDEV da0
./MAKEDEV da1
./MAKEDEV da2
./MAKEDEV sa0
./MAKEDEV pty0
cd /
#
# create minimum file system table
#
cat > /mnt/etc/fstab <<EOM
/dev/fd0a / ufs rw 1 1
EOM
#
# create minimum passwd file
#
cat > /mnt/etc/passwd <<EOM
root:*:0:0:Charlie &:/root:/bin/sh
EOM
cat > /mnt/etc/master.passwd <<EOM
root::0:0::0:0:Charlie &:/root:/bin/sh
EOM
chmod 600 /mnt/etc/master.passwd
chmod 644 /mnt/etc/passwd
/usr/sbin/pwd_mkdb -d/mnt/etc /mnt/etc/master.passwd
#
# umount the floppy and inform the user
#
/sbin/umount /mnt
echo "The floppy has been unmounted and is now ready."
重要な問題は、ハードウェアが生き残ったかどうかです。 定期的にバックアップを取っていれば、 ソフトウェアについて心配する必要はありません。
ハードウェアに障害があれば、 コンピュータを使用する前にその部品を交換してください。
ハードウェアに問題が無ければ、フロッピーを確認してください。 カスタムブートフロッピーディスクを使用しているのであれば、 シングルユーザモードでブートして (boot: プロンプトで -s を入力します)、 次の段落は飛ばしてください。
boot.flp と fixit.flp を使用しているのであればこのまま読み進めてください。 boot.flp フロッピーをフロッピードライブに入れて、 コンピュータを起動してください。 本来のインストールメニューが画面に表示されます。 Fixit--Repair mode with CDROM or floppy. オプションを選択します。指示された通り fixit.flp をいれてください。 restore とその他必要となるプログラムは /mnt2/stand にあります。
そして、ファイルシステムを一つずつ回復します。
最初のディスクのルートパーティションを mount してみてください (たとえば mount /dev/da0a /mnt)。 ディスクラベルが破壊されている場合は、disklabel を用いてあらかじめ印刷して保存しておいた通りにパーティションを作り直し、ディスクラベルを作成してください。 newfs を使用してファイルシステムを作り直します。 ルートパーティションを読み書き可能にマウントし直します (mount -u -o rw /mnt)。 バックアッププログラムとバックアップテープを使用して、 このファイルシステムのデータを回復します (たとえば restore vrf /dev/sa0)。 ファイルシステムをアンマウントします (たとえば umount /mnt)。 障害を受けたファイルシステムそれぞれについて繰り返してください。
システムが動き出したら、 新しいテープにデータをバックアップしてください。 どのような理由で再び事故が起きたり、データが失われるかわかりません。 これに数時間を費すことで、後々の災難から救われます。
FreeBSD にはフロッピーや CD, ハードディスクなどの手元の計算機に取り付けたディスクの他に、 別の形態のディスク、仮想ディスク、もあります。
これには、Network File System のようなネットワークファイルシステムや Coda, メモリベースのファイルシステムおよびファイルベースのファイルシステムがあります。
稼働させている FreeBSD のバージョンによって、 ファイルベースおよびメモリベースのファイルシステムを作成したり操作するために、異なるツールを使用しなければならないでしょう。
Note: FreeBSD 4.X の使用者は必要なデバイスを作成するために MAKEDEV(8) を使用しなければならないでしょう。FreeBSD 5.0 以降では、 devfs(5) がデバイスノードを自動的に割り当ててくれるので、 使用者が意識する必要はありません。
vnconfig(8) ユーティリティを使えば擬似ディスクデバイスを設定し、 有効にすることができます。 vnode とはファイルの内部的な表現方法であり、 ファイルに関する操作の中心となるものです。つまり、vnconfig(8) はファイルシステムを生成したり操作したりするためにファイルを用いるのです。 一つ例を挙げると、 ファイルに収められたフロッピーや CD-ROM のイメージをマウントするために用いることができます。
vnconfig(8) を使用するためには、 カーネルが vn(4) デバイスに対応している必要があります。 そうでなければ、カーネルコンフィギュレーションファイルに 次の行を追加してカーネルを再構築し、システムを再起動してください。
pseudo-device vn
既にあるファイルシステムイメージのマウント
Example 16-4. FreeBSD 4.X での vnconfig を用いた既存のファイルシステムイメージのマウント
# vnconfig vn0 diskimage # mount /dev/vn0c /mnt
vnconfig(8) を用いたファイルシステムイメージの新規作成
Example 16-5. vnconfig を用いたファイルベースディスクの新規作成
# dd if=/dev/zero of=newimage bs=1k count=5k
5120+0 records in
5120+0 records out
# vnconfig -s labels -c vn0 newimage
# disklabel -r -w vn0 auto
# newfs vn0c
Warning: 2048 sector(s) in last cylinder unallocated
/dev/vn0c: 10240 sectors in 3 cylinders of 1 tracks, 4096 sectors
5.0MB in 1 cyl groups (16 c/g, 32.00MB/g, 1280 i/g)
super-block backups (for fsck -b #) at:
32
# mount /dev/vn0c /mnt
# df /mnt
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/vn0c 4927 1 4532 0% /mnt
mdconfig(8) ユーティリティは FreeBSD 5.X において メモリディスク (md(4)) を設定し、有効にするために使用されます。 mdconfig(8) を使用するためには md(4) モジュールを読み込むか、 カーネルコンフィギュレーションファイルに md(4) デバイスを追加してカーネルを再構築し、システムを再起動してください。
device md
mdconfig(8) コマンドは、 三つのタイプのメモリベース仮想ディスクに対応しています。 malloc(9) を用いて割り当てられたメモリディスク、 ファイルをベースにしたメモリディスク、 およびスワップ領域をベースにしたメモリディスクです。 想定される使用法は、ファイル内に保持されたフロッピーイメージまたは CD イメージをマウントすることです。
既にあるファイルシステムイメージのマウント
Example 16-6. FreeBSD 5.X での mdconfig を用いた既存のファイルシステムイメージのマウント
# mdconfig -a -t vnode -f diskimage -u 0 # mount /dev/md0c /mnt
mdconfig(8) を用いたファイルシステムイメージの新規作成
Example 16-7. mdconfig を用いたファイルシステムイメージの新規作成
# dd if=/dev/zero of=newimage bs=1k count=5k 5120+0 records in 5120+0 records out # mdconfig -a -t vnode -f newimage -u 0 # disklabel -r -w md0 auto # newfs md0c /dev/md0c: 5.0MB (10240 sectors) block size 16384, fragment size 2048 using 4 cylinder groups of 1.27MB, 81 blks, 256 inodes. super-block backups (for fsck -b #) at: 32, 2624, 5216, 7808 # mount /dev/md0c /mnt # df /mnt Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/md0c 4846 2 4458 0% /mnt
-u オプションを用いて
ユニット番号を指定しない場合、mdconfig(8)
は未使用のデバイスを自動的に選択するために md(4) デバイスの
auto-unit 機能を使用します。 割り当てられたユニットの名前は md4 のように標準出力に出力されます。mdconfig(8)
の詳細についてはマニュアルページを参照してください。
Note: FreeBSD 5.1-RELEASE から、従来の disklabel(8) プログラムは bsdlabel(8) ユーティリティに置き換えられました。bsdlabel(8) では、 使用されていないオプションおよびパラメタの数多くが削除されました。 たとえば
-rオプションは bsdlabel(8) では取り除かれました。詳細については bsdlabel(8) マニュアルページを参照してください。
mdconfig(8) ユーティリティは大変役に立ちますが、 ファイルベースのファイルシステムを作成するために、 多くのコマンドの入力が必要となります。FreeBSD 5.0 では mdmfs(8) と呼ばれるツールも用意されています。このプログラムは mdconfig(8) を用いて md(4) ディスクを設定し、newfs(8) を用いて UFS ファイルシステムを作成し、mount(8) を用いてマウントします。たとえば、上記と同じファイルシステムを作成し、 マウントしたい場合は、下記のように入力するだけです。
Example 16-8. mdmfs を用いたファイルベースディスクの設定とマウント
# dd if=/dev/zero of=newimage bs=1k count=5k 5120+0 records in 5120+0 records out # mdmfs -F newimage -s 5m md0 /mnt # df /mnt Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/md0 4846 2 4458 0% /mnt
ユニット番号を指定せずに md
オプションを使用した場合、mdmfs(8)
は未使用のデバイスを自動的に選択するために md(4) デバイスの
auto-unit 機能を使用します。mdmfs(8)
についての詳細はマニュアルページを参照してください。
md(4) ドライバは FreeBSD 4.X においてメモリファイルシステムを作成するために単純で効果的な手段です。 メモリを割り当てるために malloc(9) 関数が使用されます。
vnconfig(8) を用いて作成したファイルシステムを例に取ると、 以下のようにします。
Example 16-9. FreeBSD 4.X での md メモリディスク
# dd if=newimage of=/dev/md0 5120+0 records in 5120+0 records out # mount /dev/md0c /mnt # df /mnt Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/md0c 4927 1 4532 0% /mnt
詳細については md(4) マニュアルページを参照してください。
メモリベースおよびファイルベースのファイルシステムに対しても 同じツール (mdconfig(8) または mdmfs(8)) を使用できます。 メモリベースのファイルシステムに対する記憶領域は malloc(9) 関数を用いて割り当てられます。
Example 16-10. mdconfig を用いたメモリベースディスクの新規作成
# mdconfig -a -t malloc -s 5m -u 1 # newfs -U md1 /dev/md1: 5.0MB (10240 sectors) block size 16384, fragment size 2048 using 4 cylinder groups of 1.27MB, 81 blks, 256 inodes. with soft updates super-block backups (for fsck -b #) at: 32, 2624, 5216, 7808 # mount /dev/md1 /mnt # df /mnt Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/md1 4846 2 4458 0% /mnt
Example 16-11. mdmfs を用いたメモリベースディスクの新規作成
# mdmfs -M -s 5m md2 /mnt # df /mnt Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/md2 4846 2 4458 0% /mnt
mdconfig(8)
のコマンドラインの malloc を swap に置き換えることで、malloc(9)
関数によるファイルシステムを使用する代わりに
スワップ領域を使用することが可能です。デフォルトでは mdmfs(8)
ユーティリティはスワップベースのディスクを作成します (-M なし)。詳細は mdconfig(8) および
mdmfs(8)
マニュアルページを参照してください。
メモリベースまたはファイルベースのファイルシステムが使用されていない場合、 すべてのリソースをシステムに開放するべきです。 はじめにファイルシステムをアンマウントします。 次にシステムからディスクを切り離し、リソースを開放するために mdconfig(8) を使用します。
たとえば /dev/md4 によって使用されたすべてのリソースを切り離し、開放するには以下のようにします。
# mdconfig -d -u 4
mdconfig -l コマンドを使用することによって、 設定された md(4) デバイスについての情報を表示することが可能です。
FreeBSD 4.X では vnconfig(8) はデバイスを切り離すのに使用されます。たとえば /dev/vn4 によって使用されたすべてのリソースを切り離し、開放するには以下のようにします。
# vnconfig -u vn4
FreeBSD 5.0 は Soft Updates と協調するファイルシステムスナップショットという新しい機能を提供します。
スナップショットは指定したファイルシステムのイメージを作成し、 また、ファイルとして扱うことができるようになります。 スナップショットファイルはアクションが実行されるファイルシステム内で作成されなければなりません。 また、ユーザは一つのファイルシステムあたり 20 までスナップショットを作成することができます。 有効なスナップショットはスーパーブロック内に記録されるので、 リブートしてから永続的にアンマウントおよびリマウントを記録します。 スナップショットが必要無くなったときは、 標準の rm(1) コマンドを用いて削除することができます。 スナップショットはどんな順番で削除してもよいのですが、 その他のスナップショットが開放されたブロックのうちいくらかをおそらく必要とするので、 使用されていたすべてのスペースを得られるとは限りません。
初めてスナップショットを作成すると、root
でさえも書き込めないように schg フラグ (chflags(1)
のマニュアルページを参照) が設定されます。 unlink(1)
コマンドは、スナップショットに schg
フラグが設定されていてもそれらを削除することのできる例外です。
したがって、スナップショットファイルを削除する前に、 schg
フラグをクリアする必要はありません。
スナップショットは mount(8) コマンドを用いて作成されます。 /var のスナップショットを /var/snapshot/snap に作成したいときは、 以下のコマンドを使用します。
# mount -u -o snapshot /var/snapshot/snap /var
また、スナップショットを作成するのに mksnap_ffs(8) も使えます。
# mksnap_ffs /var /var/snapshot/snap
スナップショットにはいくつかの利用法があります。
スナップショットをバックアップ目的に使用する管理者もいます。 なぜならスナップショットは CD やテープに転送できるからです。
ファイルの完全性を検証するために、 fsck(8) をスナップショットに実行してもよいでしょう。 スナップショットをマウントしたときにそのファイルシステムがクリーンであったとすると、 そのスナップショットをマウントするときはいつでもクリーンな (そして変更のない) 結果を得るでしょう。 これは本質的には バックグラウンド fsck(8) が行うことです。
スナップショット上で dump(8)
ユーティリティを実行すると、
スナップショットのファイルシステムとタイムスタンプが一致するダンプが返されるでしょう。
dump(8) は -L オプションを使用することで、
一つのコマンドでスナップショットをとり、ダンプイメージを作成して、スナップショットを削除することが可能です。
ファイルシステムの “凍結された” イメージとしてスナップショットを mount(8) します。 /var/snapshot/snap のスナップショットを mount(8) するには以下のようにします。
# mdconfig -a -t vnode -f /var/snapshot/snap -u 4 # mount -r /dev/md4 /mnt
これで /mnt にマウントした 凍結状態の /var ファイルシステム構造を探索できます。 すべてがスナップショットが作成された時と同じ状態になるはずです。ただし、 以前に作成されたスナップショットがサイズ 0 のファイルとして現れることが唯一の例外です。 スナップショットの使用を終えた場合、以下のようにアンマウントできます。
# umount /mnt # mdconfig -d -u 4
softupdates
およびファイルシステムスナップショットに関する詳細については、 http://www.mckusick.com/ にある
Marshall Kirk McKusick のウェブサイトを参照してください。
ここには技術的な論文もあります。
クォータは OS の持っているオプショナルな機能であり、 ファイルシステム毎にユーザやグループのメンバが使用するディスク容量やファイルの数を制限することができます。 この機能は、あるユーザやグループに割り当てられるリソースの量を制限することが望ましいようなタイムシェアリングシステムにおいてよく用いられます。 この機能を用いることによって使用可能なディスク容量の全てを一人のユーザやユーザのグループが使ってしまうことを防ぐことができます。
ディスククォータの設定を始める前に、 まずはカーネルにクォータが組み込まれていることを確認しましょう。 カーネルのコンフィグレーションファイルに次の行を入れます。
options QUOTA
標準の GENERIC カーネルでは、 この機能は有効になっていませんので、 ディスククォータを利用するためには上記を設定後カーネルを構築しなおし、 作成されたカスタムカーネルをインストールしなければいけません。 カーネルのコンフィグレーションに関しては Chapter 9 をご覧ください。
次に /etc/rc.conf でディスククォータを有効にする必要があります。 次の行を加えましょう。
enable_quotas="YES"
起動時の動作をさらに細かくコントロールするためにもう一つ設定用の変数があります。 通常、起動時には quotacheck(8) によりそれぞれのファイルシステムのクォータの整合性がチェックされます。 quotacheck(8) の役割は、 クォータデータベースのデータが正しくファイルシステム上のデータを反映しているか確認することです。 これはかなり時間を食う処理であり、 起動にかかる時間に大きな影響を及ぼします。 このステップをとばしたい人のために /etc/rc.conf に次の変数が用意されています。
check_quotas="NO"
もし 3.2-RELEASE よりも前の FreeBSD を使っているならば設定はもっと単純で、一つの変数のみです。 次の行を /etc/rc.conf で設定してください。
check_quotas="YES"
最後に、ファイルシステム毎にディスククォータを有効にするために /etc/fstab を編集する必要があります。 ここでユーザもしくはグループ、 あるいはその両方にクォータを設定することができるのです。
あるファイルシステム上にユーザ毎のクォータを有効にする場合には、 /etc/fstab
中でクォータを有効にしたいファイルシステムエントリのオプション部に userquota を加えます。 例えば次のようになります。
/dev/da1s2g /home ufs rw,userquota 1 2
同様に、グループクォータを有効にするには userquota
キーワードの代わりに groupquota を用います。
ユーザとグループの両方のクォータを有効にするには次のようにします。
/dev/da1s2g /home ufs rw,userquota,groupquota 1 2
デフォルトでは、 クォータファイルはそのファイルシステムのルートディレクトリに ユーザ用、グループ用それぞれ quota.user, quota.group という名前で置かれます。さらに詳しい情報は fstab(5) をご覧ください。fstab(5) マニュアルには別の場所を指定することができると書いてはありますが、 あまり勧められません。なぜなら、 様々なクォータ関係のユーティリティがそれにうまく対処できるようにないためです。
この時点で、 一度システムを再起動して新しいカーネルで立ち上げましょう。 /etc/rc が自動的に適当なコマンドを実行し、 /etc/fstab で有効にした全てのクォータ用に初期ファイルを作ってくれます。 従って、空のクォータファイルを手で作る必要は一切ありません。
通常の運用では quotacheck(8) や quotaon(8), quotaoff(8) といったコマンドを手で動かす必要はないのですが、 慣れるためにもこれらのマニュアルは読んでおきましょう。
一旦クォータを有効にしたら本当に有効になっているのか確認しておきましょう。簡単な方法は次のコマンドを実行することです。
# quota -v
ディスクの使用状況と、クォータが有効になっているファイルシステムのクォータリミットが一行にまとめて出力されるでしょう。
さあ、edquota(8) でクォータリミットを設定する準備ができました。
ユーザやグループが使用できるディスク容量や作成できるファイルの数に制限をかけるにはいくつかのオプションがあります。割り当てディスク容量を制限 (ブロッククォータ) することもファイル数を制限 (inode クォータ) することも、両者を組み合わせることもできるのです。 これらの制限はそれぞれさらに二つのカテゴリ、 ハードリミットとソフトリミット、に分けることができます。
ハードリミットを越えることはできません。 あるユーザが一旦ハードリミットにたっした場合、 そのファイルシステムではそれ以上の割り当ては望めません。 例えばあるファイルシステム上に 500 ブロックのハードリミットが設定されており現在 490 ブロックを使用している場合、さらに 10 ブロックしか使えないのです。 11 ブロックを使おうとすると失敗します。
一方、 ソフトリミットはある限られた時間内であれば越えることができます。 この時間は猶予期間として知られており、デフォルトでは 1 週間です。 あるユーザが自分のソフトリミットを猶予期間よりも長い間越えているとソフトリミットはハードリミットに変わり、それ以上使用することはできなくなります。 ユーザがソフトリミットよりも減らせば猶予期間はリセットされます。
以下は edquota(8) コマンドを実行した時に見ることになるであろう例です。 edquota(8) コマンドが起動されると環境変数 EDITOR で指定されるエディタに入ります。 EDITOR が設定されていない場合には vi が起動されます。 ここでクォータリミットを編集します。
# edquota -u test
Quotas for user test:
/usr: blocks in use: 65, limits (soft = 50, hard = 75)
inodes in use: 7, limits (soft = 50, hard = 60)
/usr/var: blocks in use: 0, limits (soft = 50, hard = 75)
inodes in use: 0, limits (soft = 50, hard = 60)
通常、クォータが有効になっているファイルシステム毎に 2 行あります。 一つはブロックリミット用でもう一つは inode リミット用です。 クォータリミットを変更したいところを書き変えるだけでかまいません。 たとえばこのユーザのブロックリミットを、ソフトリミットは 50 から 500 へ、ハードリミットは 75 から 600 に変更する場合、
/usr: blocks in use: 65, limits (soft = 50, hard = 75)
から
/usr: blocks in use: 65, limits (soft = 500, hard = 600)
へ書き換えます。新しいクォータリミットはエディタを終了すれば設定されます。
ある範囲の UID
に対してクォータリミットを設定したい場合がありますが、このような時には edquota(8) コマンドの
-p オプションを使うといいでしょう。まず、
あるユーザに割り当てたいクォータリミットを設定し、次に edquota -p protouser startuid-enduid
を実行するのです。例えばユーザ test
にお望みのクォータリミットが付いているとしましょう。 次のコマンドにより 10,000
から 19,999 の間の UID に対して同じクォータリミットを付けることができるのです。
# edquota -p test 10000-19999
さらに詳しいことは edquota(8) のマニュアルページをご覧ください。
quota(1) または repquota(8) といったコマンドを使ってクォータリミットやディスクの利用状況を確認することができます。 quota(1) コマンドは個々のユーザやグループのクォータやディスク利用状況を確認するのに使えます。 ユーザは自身のクォータ、そして所属するグループのグループのみ確認することができます。 スーパーユーザのみが他のユーザや所属していないグループのクォータと利用状況を見ることができます。 repquota(8) コマンドを使うと、クォータが有効になっているファイルシステム用の全てのクォータやディスク容量のサマリを得ることができます。
以下は二つのファイルシステムにクォータ制限がかけられているユーザに対するquota -v コマンドの出力例です。
Disk quotas for user test (uid 1002):
Filesystem blocks quota limit grace files quota limit grace
/usr 65* 50 75 5days 7 50 60
/usr/var 0 50 75 0 50 60
上の例で、/usr ファイルシステム上ではこのユーザは現在 50 ブロックというソフトリミットを 15 ブロックオーバーし 5 日間の猶予期間が残っています。アスタリスク * はクォータリミットを越えているユーザを示していることに注意してください。
通常、そのユーザが全く使っていないファイルシステムは、
クォータリミットが付けられているとしても quota(1)
コマンドの出力には現われません。 -v
オプションを用いればそのようなファイルシステム、 上の例では /usr/var、 を表示することができます。
クォータは NFS サーバ上のクォータサブシステムにより実行されます。 rpc.rquotad(8) デーモンにより、NFS クライアント上の quota(1) コマンドは情報を得ることができ、クライアントマシン上のユーザが自分のクォータの統計を見ることができます。
/etc/inetd.conf において以下のように rpc.rquotad を有効にしましょう。
rquotad/1 dgram rpc/udp wait root /usr/libexec/rpc.rquotad rpc.rquotad
そして以下のように inetd を再起動します。
# kill -HUP `cat /var/run/inetd.pid`
FreeBSD は無許可のデータアクセスに対する優れたオンライン保護機能を提供します。 ファイルのパーミッションおよび強制的アクセスコントロール (MAC: Mandatory Access Control) (Mandatory Access Control (MAC) を参照) は、コンピュータが動作中で、OS が実行中であるときに、 無許可の第三者がデータにアクセスするのを防ぐことに役立ちます。 しかしながら、攻撃者がコンピュータに物理的にアクセスし、 機密データをコピーし分析するためにコンピュータのハードドライブを別のシステムに移動させることができれば、 OS によって強化された許可属性は意味をなさなくなります。
攻撃者が電源の落ちたコンピュータや ハードドライブを手にいれる手段にかかわらず、 GEOM ベースのディスク暗号化 (gbde: GEOM Based Disk Encryption) は、著しい資源を持ち本気で攻撃を仕掛けるつもりでやってきた攻撃者からさえもコンピュータのファイルシステム上にあるデータを保護することができます。 個々のファイルだけを暗号化する煩わしい方法と異なり、 gbde は全ファイルシステムを透過的に暗号化します。 平文テキストは決してハードドライブのプラッタに関係しません。
root になる
gbde の設定をするにはスーパユーザの権限が必要になります。 以下のコマンドを実行して、 root になってください。
% su - Password:
オペレーティングシステムのバージョンを確かめる
gbde(4) が動作するには FreeBSD 5.0 以降が必要です。 以下のコマンドを実行して、 オペレーティングシステムのバージョンを確認してください。
# uname -r 5.0-RELEASE
カーネルコンフィギュレーションファイルに gbde(4) 対応を追加する
お好みのテキストエディタを使用して、 以下の行をカーネルコンフィギュレーションファイルに加えます。
options GEOM_BDE
FreeBSD カーネルを設定、再コンパイル、インストールします。 この手順は Chapter 9 で説明されています。
新しいカーネルで再起動します。
以下の例では、システムに新しいハードディスクを追加しようとしています。このシステムは単一の暗号化されたパーティションを保持することになります。 このパーティションは /private としてマウントされます。gbde は /home および /var/mail を暗号化するのにも使用できますが、 より複雑な指示を必要となるのでこの解説の範疇を越えています。
新しいハードドライブを追加する
Section 16.3 で説明されている通りに新しいドライブをシステムに設置します。 この例では、新しいハードドライブは /dev/ad4s1c パーティションに 加えられたものとします。 /dev/ad0s1* デバイスは、この例のシステム上に存在する標準的な FreeBSD パーティションを表します。
# ls /dev/ad* /dev/ad0 /dev/ad0s1b /dev/ad0s1e /dev/ad4s1 /dev/ad0s1 /dev/ad0s1c /dev/ad0s1f /dev/ad4s1c /dev/ad0s1a /dev/ad0s1d /dev/ad4
gbde ロックファイルを保持するディレクトリを作成する
# mkdir /etc/gbde
gbde ロックファイルには、 暗号化されたパーティションにアクセスするのに必要となる情報が格納されています。 ロックファイルにアクセスしない場合、 gbde は 膨大な手動による介在なしには (ソフトウェアは対応していません)、暗号化されたパーティションに含まれるデータを解読することはできないでしょう。 それぞれの暗号化されたパーティションは別々のロックファイルを使用します。
gbde パーティションを初期化する
gbde パーティションは使用する前に初期化されなければなりません。 この初期化は一度だけ実行される必要があります。
# gbde init /dev/ad4s1c -i -L /etc/gbde/ad4s1c
エディタが開くので、 テンプレートをもとにさまざまなオプションを設定してください。 UFS1 または UFS2 で使用するには、sector_size を 2048 に設定してください。
$FreeBSD: src/sbin/gbde/template.txt,v 1.1 2002/10/20 11:16:13 phk Exp $ # # Sector size is the smallest unit of data which can be read or written. # Making it too small decreases performance and decreases available space. # Making it too large may prevent filesystems from working. 512 is the # minimum and always safe. For UFS, use the fragment size # sector_size = 2048 [...]
gbde(8) はデータを保護するのに使用するパスフレーズを二度尋ます。 パスフレーズはそれぞれ同じでなければなりません。 データを保護する gbde の能力は、 あなたが選択したパスフレーズの品質に完全に依存します。 [6]
gbde init コマンドは gbde パーティションに対するロックファイルを作成します。この例では /etc/gbde/ad4s1c に格納されます。
Caution: gbde ロックファイルは、 すべての暗号化されたパーティションの内容とともにバックアップされなければ なりません。 ロックファイルだけを削除している間、 ロックファイルなしでは信念の固い攻撃者が gbde パーティションを解読することを防ぐことができない一方で、 正当な所有者は、gbde(8) およびこの設計者にまったく支持されない膨大な量の作業なしには、 暗号化されたパーティション上のデータにアクセスすることができないでしょう。
カーネルに暗号化されたパーティションを接続する
# gbde attach /dev/ad4s1c -l /etc/gbde/ad4s1c
暗号化されたパーティションを初期化する際に選択したパスフレーズを入力するように求められます。 新しい暗号化デバイスは /dev に /dev/device_name.bde として現れます。
# ls /dev/ad* /dev/ad0 /dev/ad0s1b /dev/ad0s1e /dev/ad4s1 /dev/ad0s1 /dev/ad0s1c /dev/ad0s1f /dev/ad4s1c /dev/ad0s1a /dev/ad0s1d /dev/ad4 /dev/ad4s1c.bde
暗号化デバイス上にファイルシステムを作成する
カーネルに暗号化デバイスが接続されると、
デバイス上にファイルシステムを作成できます。
暗号化デバイス上にファイルシステムを作成するには newfs(8)
を使用します。従来の UFS1 ファイルシステムで初期化するより、 新しい UFS2
ファイルシステムで初期化した方が高速なので、 -O2
オプションとともに newfs(8)
を使用することが推奨されています。
Note: FreeBSD 5.1-RELEASE 以降では、
-O2オプションはデフォルトです。
# newfs -U -O2 /dev/ad4s1c.bde
Note: newfs(8) は、デバイス名に *.bde 拡張子によって認識される、 接続された gbde パーティションに対して実行されなければなりません。
暗号化パーティションをマウントする
暗号化ファイルシステムに対するマウントポイントを作成します。
# mkdir /private
暗号化ファイルシステムをマウントします。
# mount /dev/ad4s1c.bde /private
暗号化ファイルシステムが利用可能か確かめる
これで暗号化ファイルシステムは df(1) で見ることができ、 利用する準備ができました。
% df -H Filesystem Size Used Avail Capacity Mounted on /dev/ad0s1a 1037M 72M 883M 8% / /devfs 1.0K 1.0K 0B 100% /dev /dev/ad0s1f 8.1G 55K 7.5G 0% /home /dev/ad0s1e 1037M 1.1M 953M 0% /tmp /dev/ad0s1d 6.1G 1.9G 3.7G 35% /usr /dev/ad4s1c.bde 150G 4.1K 138G 0% /private
システムを起動する度に、すべての暗号化ファイルシステムは 使用前にカーネルに接続し、 エラーの有無をチェックし、マウントする必要があります。 必要なコマンドは root ユーザとして実行されなければなりません。
カーネルに gbde パーティションを接続する
# gbde attach /dev/ad4s1c -l /etc/gbde/ad4s1c
パーティションの暗号化を初期化する際に選択したパスフレーズを入力するように求められるでしょう。
ファイルシステムのエラーをチェックする
暗号化ファイルシステムを自動的にマウントするために /etc/fstab に設定を掲載することはまだできないため、 マウントする前に fsck(8) を実行して、 ファイルシステムのエラーをチェックしなければなりません。
# fsck -p -t ffs /dev/ad4s1c.bde
暗号化ファイルをマウントする
# mount /dev/ad4s1c.bde /private
これで暗号化ファイルシステムが利用できるようになりました。
スクリプトを作成して、暗号化パーティションを自動的に接続、 チェック、マウントすることは可能です。しかしながら、 安全上の理由によりスクリプトに gbde(8) パスワードを含めるべきではありません。その代わりに、コンソールまたは ssh(1) による接続からパスワードを入力するようなスクリプトが手動で実行されることが推奨されます。
gbde(8) は 128bit AES の CBC モードを使用してセクタペイロードを暗号化します。 ディスク上のそれぞれのセクタは異なる AES 鍵で暗号化されます。 セクタ鍵がユーザが入力したパスフレーズからどのように導き出されるかを含め、 gbde の暗号手法の設計についての詳細は、 gbde(4) を参照してください。
sysinstall(8) は gbde 暗号化デバイスと互換性がありません。 sysinstall(8) を実行する前に *.bde デバイスはすべてカーネルから切断されなければなりません。 そうしないと、sysinstall(8) が初めにデバイスを走査する際にクラッシュしてしまうでしょう。 暗号化デバイスを切断するには、以下のコマンドを使用します。
# gbde detach /dev/ad4s1c
vinum(4) は geom(4) サブシステムを使用しないので、 vinum ボリュームと gbde を併用できないことにも注意してください。
FreeBSD は、ユーザーおよび貢献者が世界中にいる、非常に分散した プロジェクトです。この章では、英語以外の言語を使うユーザーの実用に 耐えられるようにする FreeBSD の国際化 (internationalization) と 地域化 (localization) 機能について解説します。 システムレベルでもアプリケーションレベルでも、国際化の実装には 様々な側面があるので、必要に応じて読者に対してより専門的な文書情報を 示すことにします。
この章では、以下の分野について説明します。
近代的なオペレーティングシステムで、異なる言語および ロケールがどのように符号化されているか。
ログインシェルでロケールを設定するには どうするか。
コンソールを英語以外の言語用に設定するには どうするか。
様々な言語で効率的に X Window System を使うには どうすればよいか。
国際化されたアプリケーションを書くための 情報はどこにあるか。
この章を読む前に、以下のことを理解しておく必要があります。
サードパーティ製アプリケーションのインストール方法 (Chapter 5)。
開発者たちはしばしば、internationalization を縮めて I18N と表記します。18 は internationalization の最初と最後の間の 文字数です。L10N も同じ命名法を用いて “localization” を縮めたものです。 これらを合わせて、I18N/L10N された (すなわち国際化/地域化された) 手法、プロトコル、アプリケーションは、自分達の好みの言語を 使うことを可能にしてくれます。
国際化されたアプリケーションはライブラリとして国際化キット を用いてプログラミングされています。 これは開発者が単純なファイルを書いて、 表示されるメニューやテキストを各国語に翻訳できるようにしてくれます。 プログラマのみなさんには、 これらの方法を利用することを強く推奨します。
I18N や L10N は FreeBSD に限った話題ではありません。 現在では、世界中の主要な言語のほとんどから選ぶことができます。 たとえば中国語、ドイツ語、日本語、韓国語、フランス語、ロシア語、 ベトナム語などがありますが、これらに限定されるわけではありません。
I18N は FreeBSD に特有のものではなく、一つの考え方です。 以下の慣習にしたがって FreeBSD を利用するようにしてください。
地域化の設定は言語コード、 国コード、エンコーディングという三つの用語を基本とします。 ロケール名はこれらから以下のように構成されます。
言語コード_国コード.エンコーディング
FreeBSD (やその他の国際化をサポートした UNIX-like なシステム) を特定の言語に地域化するには、 国と言語を特定するためのコードを知る必要があります (国コードはアプリケーションに指定された言語のどの変種 (variation) を用いれば良いかを教えてくれます)。 加えて、ウェブブラウザ、SMTP/POP サーバ、 ウェブサーバなどもこれらを元に様々な選択を行います。 以下は言語/国コードの例です。
いくつかの言語では、8-bit やワイド文字、 多バイト文字など ASCII とは異なったエンコード法を用います (multibyte(3) 参照)。 古いアプリケーションはこれらを認識せず、 誤ってコントロール文字として認識してしまいます。 最近のアプリケーションは、大抵 8-bit 文字を認識します。 実装方法にも依りますが、アプリケーションのコンパイル時もしくは configure 時に、ワイド/多バイト文字のサポートを指定する必要があるかも知れません。 ワイド/多バイト文字を入力したり処理したりすることを可能にするために、 FreeBSD Ports Collection では各言語向けに異なったプログラムを提供しています。 各 FreeBSD Port の国際化文書を参照してください。
特に、正しく configure したり、configure/Makefile/ コンパイラに適切な値を渡すために、アプリケーションの 文書を良く読む必要があります。
次のことを心に留めておいてください。
言語固有の、C 言語の char で表現できる シングルバイトの文字セット (multibyte(3) を参照)、たとえば ISO8859-1, ISO8859-15, KOI8-R, CP437。
ワイド、多バイトのエンコーディング、たとえば EUC, Big5。
現在有効な文字セットのリストに関しては IANA Registry をチェックしてください。
Note: FreeBSD では、X11 互換のロケール符号を用いています。
FreeBSD の ports/packages システムでは、 それとひと目でわかるように国際化アプリケーションには名前に I18N という文字が含まれています。 ただし、それらのアプリケーションが常にあなたの望む言語を サポートしているとは限りません。
通常は、ログインシェルで環境変数 LANG に ロケール名を設定し export すれば十分です。これは、ユーザーの ~/.login_conf ファイル、またはユーザーの シェルの初期設定ファイル (~/.profile, ~/.bashrc, ~/.cshrc) でできます。 LC_CTYPE や LC_CTIME のような ロケールのサブセットを設定する必要はありません。 詳細に関しては、各言語向けの FreeBSD 文書を参照してください。
以下の二つの環境変数を設定ファイルで指定する必要があります。
POSIX setlocale(3) 関連の関数のための LANG
アプリケーション用の MIME 文字セットのための MM_CHARSET
これにはユーザのシェルの設定、アプリケーション固有の設定、 X11 の設定などが含まれます。
ロケールを設定するには以下で説明するように、二つの方法があります。 一つは推奨される方法で、ログインクラス (login class) において環境変数に割り当てる方法。 もう一つはシステムのシェル 初期化ファイル において環境変数の指定を追加する方法です。
この方法では、 各シェルの初期化ファイルに特定のシェル設定を追加する代わりに、 すべてのシェルにおいて一度に必要なロケール名と MIME 文字セットを環境変数に割り当てることができます。 ユーザの設定はユーザ自身で行なえますが、 管理者の設定にはスーパユーザの権限が必要となります。
ユーザのホームディレクトリの .login_conf ファイルを用いて、 両方の変数に Latin-1 エンコーディングを設定する 簡単な例は次の通りです。
me:\ :charset=ISO-8859-1:\ :lang=de_DE.ISO8859-1:
これは、BIG-5 エンコーディングされた繁体字中国語用の環境変数を設定する .login_conf の一例です。 中国語、日本語、韓国語用のロケール変数を 正しく認識しないソフトウェアに対処するため、 よりたくさんの変数を設定していることに注目してください。
#Users who do not wish to use monetary units or time formats #of Taiwan can manually change each variable me:\ :lang=zh_TW.Big5:\ :lc_all=zh_TW.Big:\ :lc_collate=zh_TW.Big5:\ :lc_ctype=zh_TW.Big5:\ :lc_messages=zh_TW.Big5:\ :lc_monetary=zh_TW.Big5:\ :lc_numeric=zh_TW.Big5:\ :lc_time=zh_TW.Big5:\ :charset=big5:\ :xmodifiers="@im=xcin": #Setting the XIM Input Server
詳細に関しては 管理者の設定 と login.conf(5) を参照してください。
/etc/login.conf において、 正しい言語がユーザのクラスに指定されていることを確認してください。 /etc/login.conf は、このようになります。
language_name:accounts_title:\ :charset=MIME_charset:\ :lang=locale_name:\ :tc=default:
先ほどの例のように Latin-1 での設定はこのようになります。
german:German Users Accounts:\ :charset=ISO-8859-1:\ :lang=de_DE.ISO8859-1:\ :tc=default:
ユーザのログインクラスを変更する前に次のコマンドを実行して、 /etc/login.conf の新たな設定がシステムに見えるようにしてください。
# cap_mkdb /etc/login.conf
新しいユーザを追加するために vipw を用います。そして以下のようなエントリを作成します。
user:password:1111:11:language:0:0:User Name:/home/user:/bin/sh
新しいユーザを追加するために adduser を用います。そして以下の手順を踏みます。
/etc/adduser.conf で defaultclass = language と設定します。 この場合、他の言語のユーザには default クラスを指定することを 忘れないでください。
もうひとつの方法は、adduser(8) が
Enter login class: default []:と聞いてきたときに、毎回言語を指定するやり方です。
さらに別の方法は、異なる言語を利用するユーザを 追加する際に、以下のようにするやり方です。
# adduser -class language
新しいユーザを追加するために pw(8) を 用いる場合、以下の形式で実行します。
# pw useradd user_name -L language
Note: シェルごとに異なった設定が必要なため、 この方法は推奨されません。 代わりに ログインクラスを用いる方法を使ってください。
ロケール名と MIME 文字コードを追加するには、 /etc/profile や /etc/csh.login などのシェル初期化ファイル に以下の二つの環境変数を設定します。 以下に示す例は、ドイツ語の設定です。
/etc/profile では 次のように設定します。
LANG=de_DE.ISO8859-1; export LANG MM_CHARSET=ISO-8859-1; export MM_CHARSET
また /etc/csh.login では 次のように設定します。
setenv LANG de_DE.ISO8859-1 setenv MM_CHARSET ISO-8859-1
もしくは、上記のやり方を /usr/share/skel/dot.profile (/etc/profile と同形式) や /usr/share/skel/dot.login (/etc/csh.login と同形式) に追加することもできます。
X11 では、 $HOME/.xinitrc に 使用しているシェルに合った形式で
LANG=de_DE.ISO8859-1; export LANG
もしくは、
setenv LANG de_DE.ISO8859-1
と指定します。
C 言語の char で表現できるシングルバイトの文字セット用に、 /etc/rc.conf でその言語に対応した適切なコンソールフォントを指定してください。
font8x16=フォント名 font8x14=フォント名 font8x8=フォント名
ここで フォント名 は /usr/share/syscons/fonts ディレクトリ にあるフォントファイルから .fnt という拡張子を除いたものです。
また、sysinstall (FreeBSD バージョンが 5.2 よりも古い場合は /stand/sysinstall) を使って、C 言語の char で表現できるシングルバイトの文字セット用の正しい キーマップとスクリーンマップを指定するようにしてください。 sysinstall では、Configure を選択し、Console を選択します。 もしくは、/etc/rc.conf に以下の行を加えてください。
scrnmap=スクリーンマップ名 keymap=キーマップ名 keychange="ファンクションキー番号の並び"
ここで スクリーンマップ名 は /usr/share/syscons/scrnmaps ディレクトリ にあるマップファイルから .scm という拡張子を除いたものです。 VGA アダプタが疑似グラフィクス領域のフォント文字マトリクスで bit 8 を bit 9 に拡張することに対処するために (例えばスクリーンフォントが bit 8 列を使っている時に文字をその領域から外に移動する場合)、 フォントに適切にマップされたスクリーンマップが必要となります。
もし、/etc/rc.conf を以下のように設定して、 moused デーモンを有効化している場合は、 次の段落に書かれているマウスカーソルに関する情報を確認してください。
moused_enable="YES"
設定省略時には、syscons(4) ドライバのマウスカーソルは キャラクタセット中の 0xd0-0xd3 の範囲を占めています。そのため、 利用している言語がこの範囲のキャラクタセットを使っている場合、 カーソルの占める範囲を重ならないように移動させなければなりません。 FreeBSD でこれを回避するには、次の行を /etc/rc.conf に追加してください。
mousechar_start=3
キーマップ名 は /usr/share/syscons/keymaps ディレクトリにあるキーマップファイルから .kbd という拡張子を除いたものです。 どのキーマップを使うかよくわからないなら、kbdmap(1) で再起動せずにキーマップを試すことができます。
ファンクションキーの並びはキーマップにより定義されてはいないため、 端末タイプに合わせたファンクションキーを設定するために keychange が必要となります。
また、/etc/ttys の中のすべての ttyv* において、 正しいコンソール端末タイプを設定するようにしてください。 現在の定義済の値は以下の通りです。
| 文字セット | 端末タイプ |
|---|---|
| ISO8859-1 もしくは ISO8859-15 | cons25l1 |
| ISO8859-2 | cons25l2 |
| ISO8859-7 | cons25l7 |
| KOI8-R | cons25r |
| KOI8-U | cons25u |
| CP437 (VGA のデフォルト) | cons25 |
| US-ASCII | cons25w |
ワイド/多バイト文字の言語については、 /usr/ports/language 内の適切な FreeBSD port を利用してください。 いくつかの ports はシステムからシリアルの vtty のように見えるようにコンソールとして振る舞います。 したがって、X11 と疑似シリアルコンソール用に充分な vtty を確保しておかなければなりません。 コンソールで他の言語を使うためのアプリケーションのリストの 一部です。
| 言語 | ports の位置 |
|---|---|
| 繁体字中国語 (BIG-5) | chinese/big5con |
| 日本語 | japanese/kon2-16dot または japanese/mule-freewnn |
| 韓国語 | korean/han |
X11 は FreeBSD プロジェクトの一部ではありませんが、 FreeBSD ユーザのための情報を記しておきます。 詳細に関しては、Xorg ウェブサイトや、あなたの使っている X11 サーバのサイトを参照してください。
~/.Xresources を使うことで、 アプリケーション固有の国際化の設定 (フォント、メニューなど) を追加することができます。
Xorg サーバ (x11-servers/xorg-server) か XFree86 サーバ (x11-servers/XFree86-4-Server) をインストールし、言語の TrueType フォントをインストールします。 ロケールを正しく設定すれば、 選んだ言語がメニューなどに表示されるはずです。
X11 Input Method (XIM) プロトコルはすべての X11 クライアント用の新たな標準規格です。 すべての X11 アプリケーションは XIM 入力サーバからの入力を受け取る XIM クライアントとして書かれるべきです。 様々な言語用の XIM サーバが存在します。
プリンタにはいくつかの C 言語の char で表現できる シングルバイトの文字セットがハードウェアに組み込まれています。 ワイド/多バイトの文字セットでは特殊な設定が必要であり、 apsfilter を使うことをお勧めします。 言語固有のコンバータを用いて、PostScript か PDF フォーマット に文書をコンバートする場合もあるでしょう。
FreeBSD の高速ファイルシステム (FFS) は 8-bit 透過であり、 C 言語の char で表現できるいかなる文字セットも使うことが できます (multibyte(3) を参照)。 しかし、ファイルシステム中には文字セットの名前は記録されていません。 したがって、これは単なる 8-bit であり、 エンコーディングに関しては何の情報もないのです。 公式には、FFS はまだいかなるワイド/マルチバイトの文字セットもサポートしていません。 しかし FFS でそのようなサポートを行うためのパッチが、 多くのワイド/マルチバイトの文字セットに存在します。 それらは単に一時的で汎用性のない解決策であり、 わたしたちはそれらをソースツリーに含めないことを決めています。 これらのパッチに関しては、各言語のウェブサイトを参照してください。
FreeBSD の MS-DOS ファイルシステムでは、 MS-DOS, Unicode 文字セット、FreeBSD ファイルシステムの 文字セットの間で変換を行うことが可能です。 詳細は mount_msdos(8) を参照してください。
FreeBSD ports の多くはすでに国際化されています。 いくつかには port の名前に -I18N と付いています。 これらはもちろんのこと、他のプログラムも国際化への対応を組み込んだものがあり、 コンパイルに際して特別な注意を払う必要はありません。
しかし、MySQL のようなアプリケーションでは、 特定の文字セットを使うように Makefile を設定する必要があります。 これは大抵 Makefile の中で 対処されているか、ソース中の configure に値を渡すことで対応しています。
KOI8-R エンコーディングの詳細については、 KOI8-R References (Russian Net Character Set) を参照してください。
以下の行を ~/.login_conf に追加してください。
me:My Account:\ :charset=KOI8-R:\ :lang=ru_RU.KOI8-R:
ロケール を 設定する際の例については、この章の前の方を参照してください。
/etc/rc.conf ファイルに次の行を追加してください。
mousechar_start=3
また、/etc/rc.conf で以下の設定を使ってください。
keymap="ru.koi8-r" scrnmap="koi8-r2cp866" font8x16="cp866b-8x16" font8x14="cp866-8x14" font8x8="cp866-8x8"
/etc/ttys の各 ttyv* エントリにおいて、 端末タイプとして cons25r を指定してください。
コンソールを設定する際の例については、この章の前の方を参照してください。
ロシア語用の文字を搭載したプリンタはほとんど ハードウェアコードページ CP866 を使っているため、 KOI8-R を CP866 に変換する専用の出力フィルタが必要となります。 このフィルタはデフォルトで /usr/libexec/lpr/ru/koi2alt に インストールされています。 ロシア語用のプリンタの /etc/printcap エントリは以下のようになります。
lp|Russian local line printer:\ :sh:of=/usr/libexec/lpr/ru/koi2alt:\ :lp=/dev/lpt0:sd=/var/spool/output/lpd:lf=/var/log/lpd-errs:
記述の詳細については printcap(5) を参照してください。
以下の fstab(5) エントリの例は、マウントされた MS-DOS ファイルシステムにおいてロシア語ファイル名を 使えるようにします。
/dev/ad0s2 /dos/c msdos rw,-Wkoi2dos,-Lru_RU.KOI8-R 0 0
-L オプションは利用するロケール名を選択し、 -W オプションは文字変換表を設定します。 -W オプションを使う時は、変換表が /usr/libdata/msdosfs にあるので、 /usr を MS-DOS
パーティションより前に マウントするようにしてください。詳しくは、 mount_msdos(8)
のマニュアルを参照してください。
まず X 以外のロケールの設定を行ってください。
Xorg を使っているなら、 x11-fonts/xorg-fonts-cyrillic パッケージをインストールしてください。
/etc/X11/xorg.conf ファイルの "Files" セクションをチェックしてください。 既存の FontPath エントリの前に以下の行を追加しなければなりません。
FontPath "/usr/X11R6/lib/X11/fonts/cyrillic/misc" FontPath "/usr/X11R6/lib/X11/fonts/cyrillic/75dpi" FontPath "/usr/X11R6/lib/X11/fonts/cyrillic/100dpi"
もし高解像度のビデオモードを使っている場合には、 75 dpi と 100 dpi の行を入れ替えてください。
ロシア語のキーボードを使えるようにするには、 以下の行を xorg.conf ファイルの "Keyboard" セクションに追加します。
Option "XkbLayout" "us,ru" Option "XkbOptions" "grp:toggle"
また、XkbDisable が無効 (コメントアウト) になっていることを確認してください。
grp:caps_toggle については、ロシア語/ラテン文字の切り替えは CapsLock で行います。 従来の CapsLock の機能は Shift+CapsLock で使うことができます (ラテン文字モードの時のみ)。 grp:toggle については、ロシア語/ラテン文字の切り替えは Right Alt で行います。 Xorg では、理由は不明ですが grp:caps_toggle は動作しません。
キーボードに “Windows” キーがあり、 ロシア語モードでそのキーにいくつかの非英字キーが 割り当てられているようなら、xorg.conf ファイルに以下の行を追加してください。
Option "XkbVariant" ",winkeys"
Note: ロシア語の XKB キーボードは、 地域化されていないアプリケーションではうまく動かないかも知れません。
Note: 地域化がされたアプリケーションは少なくともプログラムの最初の方で
XtSetLanguageProc (NULL, NULL, NULL);を呼び出すべきです。 X11 アプリケーションを地域化する方法については、 KOI8-R for X Window を参照してください。
FreeBSD-Taiwan プロジェクトは、多くの 中国語 ports を利用した、 FreeBSD
を中国語化するための手引き http://netlab.cse.yzu.edu.tw/~statue/freebsd/zh-tut/
を提供しています。 FreeBSD Chinese HOWTO
の現在の編集者は Shen Chuan-Hsing <statue@freebsd.sinica.edu.tw>
です。
Chuan-Hsing Shen <statue@freebsd.sinica.edu.tw>
は FreeBSD-Taiwan の zh-L10N-tut を使って Chinese FreeBSD
Collection (CFC) を作成しました。 パッケージとスクリプトは ftp://freebsd.csie.nctu.edu.tw/pub/taiwan/CFC/
から入手できます。
Slaven Rezic <eserte@cs.tu-berlin.de> は
FreeBSD マシン上でウムラウトを使うためのチュートリアルを書きました。
チュートリアルはドイツ語で書かれており、 http://www.de.FreeBSD.org/de/umlaute/ から入手できます。
日本語に関しては http://www.jp.FreeBSD.org/ を、韓国語に関しては http://www.kr.FreeBSD.org/ を参照してください。
FreeBSD の一部を他の言語に翻訳してくれている人たちがいます。 これらは メインサイトのリンクを辿るか /usr/share/doc から入手できます。
あるリリースから次のリリースまでの期間にも、 FreeBSD の開発は休みなく続けられています。 最新の開発ツリーと同期することを好む人もいますし、 公式のリリース版を好んで使う方もいます。 しかしながら、公式のリリースといえども、 セキュリティや他の重要な修正のため、時にはアップデートを行う必要があります。 使用しているバージョンに関わらず、FreeBSD は、 手元のシステムを最新の開発ツリーと同期するために必要なツールをすべて用意しています。 そして、これらのツールは、FreeBSD のバージョンをアップグレードするためにも使えます。 もしもあなたが、開発途中のシステムを追いかけようか、 それともリリースバージョンのどれかを使い続けようかと迷っているのなら、 きっとこの章が参考になるでしょう。 手元のシステムをアップデートする基本的なツールについても解説しています。
この章を読んで分かるのは:
システムと Ports Collection のアップデートに用いるユーティリティについて
freebsd-update, CVSup, CVS もしくは CTM を使ったシステム更新方法
インストールされているシステムと、変更が行われていない状態との比較方法。
CVSup を使って、 ドキュメンテーションを最新のものにアップデートする方法。
2 つの開発ブランチ、FreeBSD-STABLE と FreeBSD-CURRENT の違い
make buildworld (等) を使ってベースシステム全体を再構築しインストールする方法
この章を読む前に、以下の準備をしましょう。
ネットワーク接続の適切な設定 (Chapter 22)
サードパーティ製のソフトウェアのインストール方法の習得 (Chapter 5)
Note: この章を通じて、 FreeBSD のソースコードをダウンロードしたりアップデートするのに cvsup コマンドが用いられます。 このコマンドを使うには、 net/cvsup-without-gui のような port、または package をインストールしておく必要があります。 FreeBSD 6.2-RELEASE 以降を使っているのであれば、 代わりに csup(1) を使うと良いでしょう。 このコマンドはベースシステムの中に組み込まれています。
セキュリティパッチを適用することは、コンピュータソフトウェア、 特にオペレーティングシステムを管理する上で重要な役割を果たします。 しかしながら、FreeBSD においては、 このプロセスは簡単なものではありませんでした。 ソースコードにパッチを当て、コードからバイナリを再構築し、 バイナリを再びインストールする必要がありました。
現在では FreeBSD に freebsd-update と呼ばれるユーティリティが追加され、状況は変わりました。 このユーティリティは 2 つの機能を持っています。 第一に、FreeBSD ベースシステムのビルドやインストールを行うことなく、 バイナリによってセキュリティおよび eratta アップデートできます。 第二に、このユーティリティはマイナーおよびメジャーリリースのアップグレードに対応しています。
Note: バイナリアップデートは、 セキュリティチームがサポートしているすべてのアーキテクチャとリリースで利用できます。 しかしながら、FreeBSD オペレーティングシステムのアップグレードなどいくつかの機能については、 最新の freebsd-update(8) と FreeBSD 6.3 以降を必要とします。 新しいリリースにアップデートする前に、現在のリリースのアナウンスに目を通し、 アップデートしようとしているリリースに対して重要な情報がないかどうかを確認してください。 これらのアナウンスは http://www.FreeBSD.org/ja/releases/ で確認できます。
もし crontab の中に freebsd-update の機能が含まれていたら、 以下の作業を行うまでは無効にしておいてください。
設定ファイル /etc/freebsd-update.conf をきめ細かく調整して、アップデートプロセスを制御するユーザもいます。 この作業は良く文書化されていますが、 以下のいくつかの項目については説明が必要でしょう。
# Components of the base system which should be kept updated. Components src world kernel
このパラメータは、FreeBSD のどの部分を最新に維持するかを設定します。 デフォルトではソースコード、ベースシステム全体、そしてカーネルをアップデートします。 Components に設定できる項目は、インストール時に選択できるものと同じです。 たとえば、ここで "world/games" を追加すると、 game にパッチが当たるようになります。 "src/bin" を追加すると、src/bin ソースコードのアップデートを許可します。
この部分についてはデフォルトのままにしておき、 アップデートしたい項目をユーザがリストに加える形にするのがベストでしょう。 ソースコードとバイナリが同期していないと、 悲惨な結果をもたらす可能性があります。
# Paths which start with anything matching an entry in an IgnorePaths # statement will be ignored. IgnorePaths
アップデートで変更されてはいけない特定のディレクトリ、 /bin や /sbin 等のパスを追加してください。 このオプションは、ローカルの変更点を freebsd-update が上書きすることを防ぐ目的にも利用できます。
# Paths which start with anything matching an entry in an UpdateIfUnmodified # statement will only be updated if the contents of the file have not been # modified by the user (unless changes are merged; see below). UpdateIfUnmodified /etc/ /var/ /root/ /.cshrc /.profile
指定したディレクトリにある設定ファイルを、 ローカルで変更されていない場合のみアップデートします。 ユーザがこれらのファイルを変更していると、 これらのファイルの自動アップデートは無効になります。 他に、KeepModifiedMetadata という別のオプションが存在します。 このオプションは、freebsd-update がマージ中に変更点を保存するようにします。
# When upgrading to a new FreeBSD release, files which match MergeChanges # will have any local changes merged into the version from the new release. MergeChanges /etc/ /var/named/etc/
freebsd-update がマージすべきファイルが存在するディレクトリの一覧です。 ファイルのマージのプロセスは、 mergemaster(8) と同様 diff(1) パッチの連続です。 マージを承認するか、エディタを起動するか、 freebsd-update を中断するかどうかを選んでください。 もし、心配な点があれば、 /etc をバックアップしてからマージを承認してください。 mergemaster コマンドの詳細な情報については、 Section 18.7.11.1 で確認してください。
# Directory in which to store downloaded updates and temporary # files used by FreeBSD Update. # WorkDir /var/db/freebsd-update
ここではすべてのパッチや一次ファイルを置くディレクトリを指定しています。 バージョンをアップグレードするのであれば、 この場所には少なくともギガバイトの空き容量が必要です。
# When upgrading between releases, should the list of Components be # read strictly (StrictComponents yes) or merely as a list of components # which *might* be installed of which FreeBSD Update should figure out # which actually are installed and upgrade those (StrictComponents no)? # StrictComponents no
yes に設定すると、 freebsd-update は Components のリストが完全に正しいと判断し、 このリスト以外の変更点については取り扱いません。 freebsd-update は、効率的に Components リストに属するファイルをアップデートします。
セキュリティパッチはリモートマシンに保存されており、 以下のコマンドを実行すると、ダウンロードしてインストールします。
# freebsd-update fetch # freebsd-update install
カーネルにパッチが当たった場合には、システムを再起動する必要があります。 すべてがうまく実行でき、システムにパッチが当たるようであれば、 毎晩の cron(8) ジョブとして freebsd-update を実行してもよいでしょう。 このタスクを実行できるようにするには、 以下のエントリを /etc/crobntab に追加してください。
@daily root freebsd-update cron
このエントリは、毎日一度 freebsd-update
を実行することを意味します。 このように cron
に記述すると、 freebsd-update
はアップデートが存在するときだけ確認します。 パッチが存在すると、
自動的にローカルディスクにダウンロードされますが、適用はされません。
ダウンロードされたパッチを手動でインストールすることが必要で、このことは root 宛てにメールで通知されます。
うまく行かなかった場合には、freebsd-update を以下のように実行すると、最後の変更までロールバックできます。
# freebsd-update rollback
カーネルまたはカーネルモジュールがアップデートされた場合には、 完了後にシステムを再起動してください。 この作業によって、FreeBSD がバイナリをメモリに読み込みます。
freebsd-update ユーティリティが自動的にアップデートするカーネルは GENERIC のみです。 カスタムカーネルを使っている場合には、freebsd-update が他の部分をアップデートした後、 カーネルを再構築し、もう一度インストールする必要があります。 GENERIC カーネルが /boot/GENERIC に存在する場合には、 freebsd-update により (現在のシステムで実行されているカーネルでなくとも) アップデートされます。
Note: GENERIC カーネルを、常に /boot/GENERIC に置いておくことは良い考えです。 さまざまな問題を解決する際や、 Section 18.2.3 に説明されているように、 freebsd-update を用いてバージョンをアップグレードする際に助けとなります。
/etc/freebsd-update.conf のデフォルトの設定を変更しない限り、 freebsd-update は、 他の更新と共にカーネルソースをアップデートします。 新しいカスタムカーネルの再構築と再インストールは、 通常通り行うことができます。
Note: freebsd-update は、 常にカーネルをアップデートするとは限りません。 freebsd-update install によってカーネルソースが変更されなかった場合には、 カスタムカーネルを再構築する必要はありません。 しかしながら freebsd-update は、 /usr/src/sys/conf/newvers.sh ファイルを常にアップデートします。 これは、現在のシステムのパッチレベル (uname -r が -p で表示する番号) を示す際に参照されるファイルです。 そのため、何も変更されていない場合でも、カスタムカーネルを再構築することにより、 uname(1) がシステムの正確なパッチレベルを報告するようになります。 各システムにインストールされているアップデートをすばやく把握できるようになるので、 特に複数のシステムを管理するときに助けとなります。
このプロセスでは、古いオブジェクトファイルやライブラリが削除され、 これらに依存する多くのサードパーティ製アプリケーションに影響を与える可能性があります。 インストールされているすべての ports を削除して再インストールするか、 後で、ports-mgmt/portupgrade ユーティリティを使ってアップグレードすることが推奨されています。 試験的にビルドを行いたいと思っているユーザは、 以下のコマンドを実行してください。
# portupgrade -af
このコマンドは、すべての ports を適切に再インストールしようとします。 BATCH 環境変数を yes に設定しておくと、 アップデートプロセスの途中の質問に対し yes と答えるようになるので、 ビルドプロセスでの手動操作を省略できます。
カスタムカーネルを使用している場合には、 アップグレードのプロセスは幾分複雑となります。 GENERIC カーネルが /boot/GENERIC に置かれている必要があります。 もし GENERIC カーネルがシステムに存在しない場合には、 以下のどれかの方法で用意してください。
ただ一度だけカスタムカーネルを構築したのであれば、 /boot/kernel.old カーネルは GENERIC そのものです。 ただ単にこのディレクトリの名前を /boot/GENERIC へと変更してください。
コンピュータへの物理的なアクセスが可能であれば、 CD-ROM から GENERIC カーネルをインストールできます。 インストールディスクを挿入して、以下のコマンドを実行してください。
# mount /cdrom # cd /cdrom/X.Y-RELEASE/kernels # ./install.sh GENERIC
ここで X.Y-RELEASE を実際のリリース番号に置き換えてください。 GENERIC は、デフォルトで /boot/GENERIC にインストールされます。
上記の方法が失敗するのであれば、 GENERIC カーネルをソースから再構築して、 インストールしてください。
# cd /usr/src # env DESTDIR=/boot/GENERIC make kernel # mv /boot/GENERIC/boot/kernel/* /boot/GENERIC # rm -rf /boot/GENERIC/boot
freebsd-update は、このカーネルを GENERIC として扱います。 GENERIC コンフィグレーションファイルは、 とにかく変更してはいけません。 また、特別なオプションを指定しない (/etc/make.conf が空であることが望ましい) で構築してください。
この時点で GENERIC カーネルで再起動する必要はありません。
freebsd-update によるメジャー、またはマイナーバージョンのアップデートでは、 リリースバージョンをターゲットにして実行します。 たとえば、FreeBSD 6.4 にアップデートするには以下のコマンドを実行してください。
# freebsd-update -r 6.4-RELEASE upgrade
コマンドを実行すると、freebsd-update は設定ファイルと現在のシステムを評価し、 システムをアップデートするために必要な情報を収集します。 画面には、どのコンポーネントが認識され、 どのコンポーネントが認識されていないかといったリストが表示されます。 たとえば以下のように表示されます。
Looking up update.FreeBSD.org mirrors... 1 mirrors found. Fetching metadata signature for 6.3-RELEASE from update1.FreeBSD.org... done. Fetching metadata index... done. Inspecting system... done. The following components of FreeBSD seem to be installed: kernel/smp src/base src/bin src/contrib src/crypto src/etc src/games src/gnu src/include src/krb5 src/lib src/libexec src/release src/rescue src/sbin src/secure src/share src/sys src/tools src/ubin src/usbin world/base world/info world/lib32 world/manpages The following components of FreeBSD do not seem to be installed: kernel/generic world/catpages world/dict world/doc world/games world/proflibs Does this look reasonable (y/n)? y
ここで、freebsd-update はアップグレードに必要なすべてのファイルをダウンロードします。 何をインストールし、どのように進むかといった質問をされることもあります。
カスタムカーネルを使っていると、 上記のステップで以下のような警告が表示されます。
WARNING: This system is running a "MYKERNEL" kernel, which is not a kernel configuration distributed as part of FreeBSD 6.3-RELEASE. This kernel will not be updated: you MUST update the kernel manually before running "/usr/sbin/freebsd-update install"
この時点ではこの警告を無視してもかまいません。 アップデートされた GENERIC カーネルは、 アップグレードプロセスの途中で利用されます。
すべてのパッチがローカルシステムへダウンロードされたら、 次にパッチが適用されます。 このプロセスにかかる時間はコンピュータの性能とワークロードに依存します。 その後、設定ファイルがマージされます。 このプロセスでは、ファイルをマージするか、 画面上にエディタを立ち上げて手動でマージするかを尋ねられます。 プロセスごとに、マージに成功した情報がユーザに示されます。 マージに失敗したり、無視した場合には、プロセスが中断します。 /etc のバックアップを取り、 master.passwd や group のような重要なファイルを後で手動でマージするユーザもいるでしょう。
Note: すべてのパッチは別のディレクトリでマージされており、 まだ、システムには反映されていません。 ユーザによる変更点のコミットは必要ありません。
このプロセスが終わったら、 以下のコマンドを用いて、アップグレードをディスクに反映してください。
# freebsd-update install
パッチは最初にカーネルとカーネルモジュールに対して当てられます。 ここでコンピュータを再起動する必要があります。 システムがカスタムカーネルを実行していた場合には、 nextboot(8) コマンドを使って次回の再起動時のカーネルを (アップデートされた) /boot/GENERIC に変更してください。
# nextboot -k GENERIC
Warning: GENERIC カーネルで再起動する前に、 システムが適切に起動するために必要な (もしコンピュータにリモートでアクセスしてアップデートしていたのであれば、 ネットワーク接続に必要な) すべてのドライバが含まれていることを確認してください。 特に、これまでに実行していたカスタムカーネルが (通常はカーネルモジュールとして提供されている) ビルド済みの機能を含んでいるのであれば、 これらのモジュールを一時的に /boot/loader.conf の機能を用いて、 GENERIC へと読み込んでください。 アップグレードプロセスが終わるまでは、 重要ではないサービスを無効にし、 ディスクやネットワークのマウントなどは避けてください。
アップデートされたカーネルでコンピュータを再起動してください。
# shutdown -r now
システムがオンラインに戻ったら、 freebsd-update を再び実行する必要があります。 アップデートプロセスの状態は保存されているので、 freebsd-update を実行すると、最初からではなく、 古い共有ライブラリとオブジェクトファイルを削除するプロセスから始まります。 このステージを続行するには、以下のコマンドを実行してください。
# freebsd-update install
Note: 使用しているライブラリのバージョン番号の付けられ方によって、 3 つのインストールフェーズが 2 つになる場合もあります。
すべてのサードパーティ製のソフトウェアを再構築し、 再インストールする必要があります。 この作業が必要なのは、インストールされているソフトウェアが、 アップグレードの際に削除されたライブラリに依存している可能性があるためです。 ports-mgmt/portupgrade コマンドは、このプロセスを自動化します。 以下のコマンドで、このプロセスを開始します。
# portupgrade -f ruby # rm /var/db/pkg/pkgdb.db # portupgrade -f ruby18-bdb # rm /var/db/pkg/pkgdb.db /usr/ports/INDEX-*.db # portupgrade -af
この作業の終了後、最後にもう一度 freebsd-update を実行すると、アップグレードのプロセスが完了します。 以下のコマンドですべてのアップグレードプロセスのやり残し作業が行われます。
# freebsd-update install
GENERIC カーネルを一時的に読み込んでいたのであれば、 ここで、通常の方法を用いて新しいカスタムを構築し、インストールしてください。
コンピュータを再起動し、新しい FreeBSD を立ち上げてください。 これでアップグレードのプロセスは完了です。
freebsd-update ユーティリティを用いて、 インストールされている FreeBSD の状態と、 正しく動作することが分かっている状態とを比較できます。 このオプションは、システムのユーティリティ、ライブラリ、 設定ファイルを評価します。 比較を行うには、以下のコマンドを実行してください。
# freebsd-update IDS >> outfile.ids
Warning: コマンドライン名は IDS ですが、 security/snort のような侵入検知システムの置き換えになるものではありません。 freebsd-update はデータをディスクに保存するので、 明らかに不正な変更が行われる可能性があります。 この不正な変更の可能性は、
kern.securelevelの設定と、 freebsd-update のデータを使用しないときに、 読み取りのみの許可属性に設定されているファイルシステムに置くことで低くすることができますが、 よりよい解決方法は、 DVD または安全に保存されている外部 USB ディスクのような安全なディスクとシステムを比較することです。
これで、システムは検査されます。そして、 リリースファイルの sha256(1) ハッシュ値と現在インストールされているファイルの値がファイルの一覧と共に表示されます。 これが outfile.ids ファイルに出力する理由です。 目で比較するにはとても早くスクロールし、 コンソールバッファをいっぱいに満たしてしまいます。
これらの行は極めて長いのですが、出力形式は簡単にすぐに解析できます。 たとえば、これらのリリースで異なっているすべてのファイルを知りたいのであれば、 以下のコマンドを実行してください。
# cat outfile.ids | awk '{ print $1 }' | more
/etc/master.passwd
/etc/motd
/etc/passwd
/etc/pf.conf
上の表示例では出力は切り捨てられており、 実際にはもっと多くのファイルが存在します。 これらのファイルには、運用中に変更されるファイルがあります。 たとえば、/etc/passwd はユーザがシステムに追加されると変更されます。 また、カーネルモジュールのようなファイルがあります。 これらは freebsd-update によりアップデートされます。 このような特別なファイルやディレクトリを除外するには、 それらを /etc/freebsd-update.conf の IDSIgnorePaths オプションに追加してください。
以前に議論した方法とは別に、 このシステムを入念なアップグレード方法の一部として用いることができます。
FreeBSD のベースシステムには、portsnap(8) と呼ばれる Ports Collection のアップデートユーティリティがあります。 実行すると、リモートサイトに接続し、セキュリティキーを検証し、 Ports Collection をダウンロードします。 セキュリティキーは、 ダウンロードしたすべてのファイルがダウンロード中に変更されていないことの検証に用いられます。 最新の Ports Collection ファイルをダウンロードするには、 以下のコマンドを実行してください。
# portsnap fetch Looking up portsnap.FreeBSD.org mirrors... 3 mirrors found. Fetching snapshot tag from portsnap1.FreeBSD.org... done. Fetching snapshot metadata... done. Updating from Wed Aug 6 18:00:22 EDT 2008 to Sat Aug 30 20:24:11 EDT 2008. Fetching 3 metadata patches.. done. Applying metadata patches... done. Fetching 3 metadata files... done. Fetching 90 patches.....10....20....30....40....50....60....70....80....90. done. Applying patches... done. Fetching 133 new ports or files... done.
この例では、portsnap(8) が現在の ports に対するパッチを見つけ、検証したことを示しています。 また、ユーティリティは以前に実行していることも示しています。 もし初めて実行したのであれば、Ports Collection のダウンロードのみが行われます。
portsnap(8) が fetch に成功すると、 検証を通った Ports Collection と、 それに続くパッチがローカルシステムに存在します。 このアップデートファイルをインストールするには以下のように入力してください。
# portsnap extract /usr/ports/.cvsignore /usr/ports/CHANGES /usr/ports/COPYRIGHT /usr/ports/GIDs /usr/ports/KNOBS /usr/ports/LEGAL /usr/ports/MOVED /usr/ports/Makefile /usr/ports/Mk/bsd.apache.mk /usr/ports/Mk/bsd.autotools.mk /usr/ports/Mk/bsd.cmake.mk ...
これでアップデートプロセスは完了しました。 更新された Ports Collection を使って、 アプリケーションをインストールしたり、 アップグレードできます。
このプロセスを連続して行うには、以下のコマンドを実行してください。
# portsnap fetch update
ベースシステム、Ports Collection に加え、 ドキュメントも FreeBSD オペレーティングシステムの構成要素です。 FreeBSD ドキュメントセットの最新バージョンは、FreeBSD ウェブサイト から入手できますが、 ネットワーク接続が遅い、もしくはまったく接続できないユーザもいます。 幸運にも、各リリースで提供されるドキュメントをアップデートして、 最新の FreeBSD ドキュメントセットをローカルで維持する方法が用意されています。
FreeBSD のドキュメントのソースやインストールされたドキュメントは、 ベースシステムのソースのアップデート (Section 18.7 を参照) と同様、 CVSup を用いてアップデートできます。 この節では以下について説明します。
ドキュメントツールチェインのインストール方法。 このツールは、FreeBSD のドキュメントをソースから再構築するのに必要です。
CVSup を用いて /usr/doc にドキュメントのソースをダウンロードする方法。
FreeBSD ドキュメントをソースから再構築し、 /usr/share/doc 以下にインストールする方法。
ドキュメントのビルドシステムにおいてサポートされているビルドオプションの説明。 たとえば、翻訳されたドキュメンテーションのみを構築するオプションや、 ある特定の出力フォーマットを指定するようなオプションについて説明します。
FreeBSD のドキュメントをソースから再構築するには、 かなり大きなツールのコレクションが必要です。 これらのツールは多くのディスク容量を必要とし、また、 すべての FreeBSD ユーザにとって有用というわけではないため、 FreeBSD ベースシステムの一部ではありません。 これらのツールは、FreeBSD のために新しいドキュメントを活発に執筆している方や、 頻繁にドキュメントをソースからアップデートする方に向けたものです。
必要なツールは、すべて Ports Collection で入手できます。textproc/docproj は、 FreeBSD ドキュメンテーションプロジェクトにより開発されているマスター port で、 これらのツールのインストールやアップデートを容易にします。
Note: ドキュメントの PostScript や PDF 版が必要なければ、かわりに textproc/docproj-nojadetex をインストールすることも考えてよいでしょう。 このドキュメンテーションのツールチェインは、 teTeX と呼ばれる組版エンジンを除いたすべてをインストールします。 teTeX は大きなツールのコレクションです。 そのため、もし PDF 出力を本当に必要としなければ、 このツールをインストールしないことはとても賢明です。
CVSup のインストールおよび利用に関するさらなる情報は、CVSup を使う の章をご覧ください。
CVSup ユーティリティを使って、 ドキュメントのソースをダウンロードできます。 ここで /usr/share/examples/cvsup/doc-supfile ファイルが設定のテンプレートです。 デフォルトのアップデートホストは doc-supfile のプレースホルダの値で設定されていますが、 cvsup(1) にコマンドラインでホスト名を指定することもできます。 CVSup サーバの 1 つからドキュメントのソースをダウンロードするには以下のように入力してください。
# cvsup -h cvsup.FreeBSD.org -g -L 2 /usr/share/examples/cvsup/doc-supfile
ここで cvsup.FreeBSD.org を最も近くの CVSup サーバに置き換えてください。 ミラーサイトの完全な一覧については、Section A.6.7 をご覧ください。
最初にドキュメントのソースをダウンロードするには少し時間がかかります。 ダウンロードが終わるまでお待ちください。
将来ドキュメントのソースをアップデートするには、 同じコマンドを実行してください。CVSup ユーティリティは最後に実行した時からのアップデートのみをダウンロードするので、 最初に CVSup を実行した後では、 コマンドの実行時間はかなり短くなります
ソースを入手したら、ドキュメントのアップデートに、/usr/doc ディレクトリの Makefile を使うこともできます。 /etc/make.conf ファイルの SUP_UPDATE, SUPHOST および DOCSUPFILE を設定すると、 以下を実行できるようになります。
# cd /usr/doc # make update
以下は、/etc/make.conf の make(1) オプションの典型的な例です。
SUP_UPDATE= yes SUPHOST?= cvsup.freebsd.org DOCSUPFILE?= /usr/share/examples/cvsup/doc-supfile
Note: SUPHOST および DOCSUPFILE の値を ?= にすると、 make のコマンドラインからの上書きを許可します。 これは、さまざまなオプションの値をテストする場合に、 値ごとにファイルを編集することを避けられるため、 make.conf にオプションを追加する方法として推奨されています。
FreeBSD のドキュメントのアップデートとビルドシステムは、 ドキュメンテーションの一部のアップデートを簡単にするオプションや、 特定の翻訳のビルドに対応しています。 これらのオプションは、システム全般のオプションである /etc/make.conf ファイルや、make(1) ユーティリティに与えるコマンドラインオプションで設定できます。
以下がこれらのオプションの一部です。
ビルドおよびインストールの言語およびエンコーディングの一覧。 たとえば、英語のドキュメントのみを指定するには en_US.ISO8859-1 を設定します。
ビルドを行うフォーマット、または出力フォーマットの一覧。 現在は html, html-split, txt, ps, pdf, そして rtf に対応しています。
アップデート時に使う CVSup サーバのホストネーム。
ドキュメントをインストールする場所。デフォルトは /usr/share/doc です。
FreeBSD のシステム全般のオプションに関連するもっと多くの make 変数については、 make.conf(5) をご覧ください。
FreeBSD ドキュメントのビルドシステムで対応しているさらなる make の変数に関しては、 新しい貢献者のための FreeBSD ドキュメンテーションプロジェクト入門 を参照してください。
ドキュメントのソースの最新スナップショットを /usr/doc にダウンロードし終わったら、 インストールされているドキュメントをアップデートする準備がすべて整いました。
makefile の DOC_LANG オプションで定義されているすべての言語を完全にアップデートするには、 以下のように入力してください。
# cd /usr/doc # make install clean
もし、make.conf で DOCSUPFILE, SUPHOST および SUP_UPDATE オプションを適切に設定しているのであれば、 インストールのステップは、 以下のようにドキュメントのアップデート作業と統合できます。
# cd /usr/doc # make update install clean
もし、ある特定の言語のみをアップデートしたいのであれば、 /usr/doc サブディレクトリで以下のように make(1) を実行してください。
# cd /usr/doc/en_US.ISO8859-1 # make update install clean
make の FORMATS 変数を設定して、 以下のようにインストールする出力形式を指定できます。
# cd /usr/doc # make FORMATS='html html-split' install clean
FreeBSD には二つの開発ブランチがあります。 それは FreeBSD-CURRENT と FreeBSD-STABLE です。 この章ではそれぞれについて簡単に説明し、 どのようにしてあなたのシステムを対応するツリーに対して、 どうやって常に最新の状態に保つかについて扱います。 まずは FreeBSD-CURRENT、次に FreeBSD-STABLE について説明します。
訳: 花井 浩之 <hanai@FreeBSD.org>、1996 年 11 月 6
日
これを読む前に、 心にとめておいて欲しいことがあります。 FreeBSD-CURRENT とは FreeBSD の開発の “最前線” だということです。 FreeBSD-CURRENT のユーザは高い技術力を持つことが要求され、 自分のシステムが抱える困難な問題を自力で解決できなければなりません。 もし FreeBSD を使い始めたばかりなら、 これを運用することについて十分検討を重ねた方が良いでしょう。
FreeBSD-CURRENT は FreeBSD の最新の、そして作業進行中のソースです。 中には現在開発途上のソフトウェア、 実験的な変更、あるいは過渡的な機能などが含まれています。 また、この中に入っている機能がすべて、 次の公式リリースに入るとは限りません。 FreeBSD-CURRENT をソースからほぼ毎日コンパイルしている人は たくさんいますが、 時期によってはコンパイルさえできない状態になっていることもあります。 これらの問題は可能な限り迅速に解決されますが、 FreeBSD-CURRENT が不幸をもたらすか、 それとも非常に素晴らしい機能をもたらすかは、 まさにソースコードを手に入れた瞬間によるのです!
FreeBSD-CURRENT は、 次の三つの重要なグループを対象としています。
ソースツリーのある部分に関して活発に作業している FreeBSD コミュニティのメンバ。 彼らにとっては “最新のもの” にしておくのが 絶対に必要なことなのです。
活発にテストしている FreeBSD コミュニティのメンバ。 彼らは、FreeBSD-CURRENT が “健全である” ことを可能な限り保証するために、 種々の問題を解決するのに時間を惜しまない人々です。 彼らはまた、様々な変更に関する提案や FreeBSD の大まかな方向付けを行ないたいと思っている 人々でもあり、それを実装するためのパッチを提示します。
単に、様々な事に目を向け、参考のために (たとえば動かすためではなく読むために) 最新のソースを使いたいと思っている人々。 これらの人々はまた、 時々コメントやコードを寄稿してくれます。
なにか新しくカッコイイモノがあると聞き、 自分の周囲では一番にそれを持ちたいがために、 リリース前のコードの断片を追いかけること。 新しい機能を得るために一番乗りになるということは、 新しいバグに最初にぶち当たるということです。
バグを修正するための素早い方法。 いかなるバージョンの FreeBSD-CURRENT であれ、 元からあるバグを修正するのと同じく、 新しいバグを生み出すおそれがあります。
“公式にサポートする” こと。 わたしたちは 3 つの “公式な” FreeBSD-CURRENT のグループの一つに、 実際に属する人々を助けるのにベストを尽くしますが、 技術的なサポートを行なうには、単に「時間が足りない」のです。 これはわたしたちが外の人を助けるの好まない、 ケチで意地悪い人間だということではありません (もしそうなら FreeBSD なんてやっていません)。 わたしたちは一日に何百通ものメッセージに答え、 かつ FreeBSD の作業をすることなど出来ない! というだけのことなのです。 もし、FreeBSD の改良作業を続けるか、 それとも実験的なコードに関するたくさんの質問に答えるか、 という二つの選択を迫られたら、開発者は前者を選ぶでしょう。
freebsd-current と svn-src-head メーリングリスト に加わってください。 これは単に良い考えであるというだけでなく、 必須のことなのです。 もし freebsd-current メーリングリストに入っていなければ、 さまざまな人がシステムの現在の状態について 述べているコメントを見ることは決してありませんし、 従って他の人が既に見つけて解決している 多くの問題に戸惑ってあきらめてしまうでしょう。 さらに言うと、システムを正常に保つための 重要な情報を見逃してしまう可能性もあります。
svn-src-head メーリングリストでは、 それぞれの変更についての commit ログを見ることができます。 また、それに関して起こり得る副作用の情報を得ることができますので、 参加する価値のあるメーリングリストです。
これらの、もしくは他のメーリングリストに入るには、 http://lists.FreeBSD.org/mailman/listinfo をたどって参加したいメーリングリ ストをクリックしてください。残りの手順の説明はそこにあります。 もし、ソースツリー全体の変更点を追いかけることに興味があれば、 svn-src-all メーリングリストを購読してください。
FreeBSD ミラーサイト か らのソースの入手。以下の 2 つの方法のいずれかでできます。
cvsup を /usr/share/examples/cvsup にある standard-supfile という名称の supfile と合わせて使ってください。 これがもっとも推奨される方法です。 なぜなら、cvsup によって一度全体を入手し、 後は変更されたところだけを入手することができるからです。 多くの人が cvsup を cron から起動して、自動的にソースコー ドを最新のものに保っています。 上に挙げた見本の supfile をカス タマイズするとともに、あなたの環境に合わせて cvsup を設定する必要があります。
Note: サンプルファイルの standard-supfile は、FreeBSD の特定のセキュリティブランチを追いかけるためのものであり、 FreeBSD-CURRENT 用ではありません。 このファイルの中にある次の行を
*default release=cvs tag=RELENG_X_Y以下に置き換えてください。
*default release=cvs tag=.使用可能なタグに関する詳細な説明は、 ハンドブックの CVS タグ の章にあります。
CTMを用いる。 (接続料が高額だったり、email でのアクセスしかできないような) あまり良質でない TCP/IP 接続の場合には、CTM を利用すると良いでしょう。ただし、 これには多くの手間がかかりますし、 壊れたファイルを受けとってしまう可能性もあります。 そのため、最近ではあまり使われなくなっており、 長い間使用できなくなってしまう事態が発生する可能性があります (訳注: 保守する人が少ないためです)。 9600 bps 以上の速度で接続しているなら、 CVSup を利用されることを推奨します。
もし、ソースを眺めるだけでなく、 走らせるために入手しているのであれば、 一部だけ選ぶのではなく、FreeBSD-CURRENT の全体を手に入れてください。 なぜなら、ソースのさまざまな部分が他の部分の更新に依存しており、 一部のみをコンパイルしようとすると、 ほぼ間違いなくトラブルを起こすからです。
FreeBSD-CURRENT をコンパイルする前に /usr/src にある Makefile を良く読んでください。 アップグレードの処理の一部として、 少なくとも一回は最初に 新しいカーネルをインストールし て、world を再構築 すべきでしょう。FreeBSD-CURRENT メーリングリスト と /usr/src/UPDATING を読めば、次のリ リースへ向けて移ってゆくに当たって時々必要となる既存シス テムからの新システムの構築手順についての最新情報が得られ るでしょう。
アクティブになってください! もし FreeBSD-CURRENT を走らせているなら、わたしたちはそれに関するコメント、 特に拡張やバグ潰しに関する提案を欲しています。 コードを伴う提案はもっとも歓迎されるものです!
訳: 岩崎 満 <iwasaki@jp.FreeBSD.org>
FreeBSD-STABLE とは定期的に公開されるリリースを作成するための開発ブランチです。 このブランチに加えられる変更は原則として、 事前に FreeBSD-CURRENT で試験ずみであるという特徴があります。 ただそうであっても、 これは開発用ブランチの一つであるということに注意してください。 つまり、ある時点における FreeBSD-STABLE のソースが どんな場合にも使えるものであるとは限らないということです。 このブランチはもう一つの開発の流れというだけであって、 エンドユーザ向けのものではありません。
もしあなたが FreeBSD の開発過程に興味があるとか、 それに対する貢献を考えていて、特にそれが 次回の “ポイント” リリースに関係するもの であるなら FreeBSD-STABLE を追うことを考えると良いでしょう。
セキュリティ上の修正は FreeBSD-STABLE ブランチに対して行なわれますが、 そのために FreeBSD-STABLE を追う必要はありません。 すべての FreeBSD セキュリティ勧告には 影響のあるリリースで問題点を修正する方法が説明されており [7] 、 セキュリティ上の理由のみから開発用ブランチ全体を追いかけることは、 同時に望ましくない変更点まで取り込んでしまう可能性があるからです。
わたしたちは FreeBSD-STABLE ブランチがいつも安定に動作するように 努めていますが、それが保証されているというわけではありません。 また、コードは FreeBSD-STABLE に加えられる前に FreeBSD-CURRENT で開発されるのですが、FreeBSD-STABLE のユーザは FreeBSD-CURRENT よりも多いため、FreeBSD-CURRENT で発見されなかった バグが FreeBSD-STABLE で発見され、時々それが問題となることがあるのは 避けることができません。
このような理由から、わたしたちは盲目的に FreeBSD-STABLE を追いかけることを推奨しません。 特に、最初に開発環境でコードを十分に試験せずに プロダクション品質が要求されるサーバを FreeBSD-STABLE にアップグレードしてはいけません。
もしそうするための資源的な余裕がない場合は、 リリース間のバイナリアップデート機能を利用して、 最新の FreeBSD リリースを使うことを推奨します。
freebsd-stable メーリングリストに加わってください。 このメーリングリストでは、 FreeBSD-STABLE の構築に関連する事柄や、 その他の注意すべき点 に関する情報が流れています。 また開発者は議論の余地がある修正や変更を考えている場合に、 このメーリングリストで公表し、 提案された変更に関して問題が生じるかどうかを返答する機会をユーザに与えます。
追いかけているブランチに関連する SVN メーリングリストに参加してください。 たとえば、7-STABLE ブランチを追いかけているのであれば、 svn-src-stable-7 メーリングリストに参加してください。 変更がなされるごとに作成される commit log やそれに伴う 起こりうる副作用についての情報を読むことができます。
これらの、もしくは他のメーリングリストに入るには、 http://lists.FreeBSD.org/mailman/listinfo をたどって参加したいメーリングリ ストをクリックしてください。残りの手順の説明はそこにあります。 もし、ソースツリー全体の変更点を追いかけることに興味があれば、 svn-src-all メーリングリストを購読してください。
もし、あなたが新しいシステムをインストールしようとしていて、 毎月公開されている FreeBSD-STABLE からビルドされたスナップショットをインストールしたいなら、 スナップショット web ページをご覧ください。 もしくは、ミラーサイトから最近の FreeBSD-STABLE リリースをインストールし、下記の説明に従って最新の FreeBSD-STABLE のソースコードに更新することもできます。
もし、既に FreeBSD の以前のリリースが動いている場合で、 これをソースからアップグレードしようとするならば、 FreeBSD ミラーサイト から簡 単に行えます。これには次の 2 つの方法があります。
cvsup を /usr/share/examples/cvsup にある stable-supfile という名称の supfile と合わせて使ってください。 これがもっとも推奨される方法です。 なぜなら、cvsup によって一度全体を入手し、 後は変更されたところだけを入手することができるからです。 多くの人が cvsup を cron から起動して、自動的にソースコー ドを最新のものに保っています。 上に挙げた見本の supfile をカス タマイズするとともに、あなたの環境に合わせて cvsup を設定する必要がありま す。
CTM 機能を使います。 インターネットへの接続に高速で安価な回線を利用できないのであれば、 この方法を検討してみましょう。
基本的には、 ソースに迅速でオンデマンドなアクセスが必要で、 接続のバンド幅が問題でなければ、cvsup か ftp を使いましょう。そうで ない場合は CTM を使いましょう。
FreeBSD-STABLE をコンパイルする前に、 /usr/src にある Makefile をよ く読んでください。 少なくとも一回はアップグレードの処理の一部として最初に 新しいカーネルをインストールし て、world を再構築 すべきでしょう。FreeBSD-STABLE メーリングリスト と /usr/src/UPDATING を読めば、次のリ リースへ向けて移ってゆくに当たって時々必要となる既存シス テムからの新システムの構築手順についての最新情報が得られ るでしょう。
訳: 岩崎 満 <iwasaki@jp.FreeBSD.org>、1997 年 9 月
13 日
インターネット接続 (または電子メール) を使用して、 あなたの興味の対象によって FreeBSD プロジェクトのソースのある一部分または全体の最新を 追いかける方法は色々あります。 私たちが提供している基本的なサービスは Anonymous CVS、CVSup と CTM です:
Warning: ソースツリーの一部を最新のものに更新することは可能です。 ただし、サポートされているアップデート手順は、 ソースツリー全体を最新のものに更新して、 ユーザランド (/bin や /sbin にあるような、ユーザが実行するプログラム全体のこと) およびカーネルのソースから再構築することのみであることに注意してください。 カーネルだけ、あるいはユーザランドだけというように、 ソースツリーの一部を更新した場合は、問題が生じることがよくあります。 この時に発生する問題はコンパイル時のエラーからカーネルパニック、 データの破壊とさまざまです。
Anonymous CVS と CVSup は pull 同期モデルを採用しています。 CVSup の場合、ユーザ (または cron スクリプト) が cvsup を起動し、どこかにある cvsupd サーバとやりとりしてファイルを 最新状態にします。 届けられる更新情報はその時点の最新のものであり、 また必要な時にだけ取り寄せられます。 興味のある特定のファイルやディレクトリに 限定して更新することも簡単にできます。 クライアント側のソースツリーの状態・ 設定ファイルの指定に従い、サーバによって更新情報が 素早く生成されます。 Anonymous CVS は、 このプログラムがリモートの CVS リポジトリから直接変更点を pull できるようにした cvs(1) への拡張であるという点で、 CVSup よりもずっと単純です。 CVSup は効率の点ではるかにまさっていますが、 Anonymous CVS の方が簡単に利用できます。
一方、CTM はあなたが持っているソースとマスタアーカイブ上に あるそれとの対話的な比較をおこないませんし、 あるいは向こう側から変更点を pull したりもしません。 そのかわりに、前回の実行時からの変更を認識するスクリプトが マスタ CTM マシン上で一日に数回実行され、 すべての変更を compress して通し番号を振り、 さらに電子メールで転送できるようにエンコードします (印字可能な ASCII キャラクタのみです)。受信した後は、 これらの “CTM のデルタ” は自動 的にデコード、検査してユーザのソースのコピーに変更を適用する ctm_rmail(1) によって処理可能となります。 この処理は CVSup や Anonymous CVS よりずっと効率 的であり、pull モデルというよりむしろ push モデルで あるため、私たちのサーバ資源の負荷は軽くなります。
もちろん他のトレードオフもあります。うっかりアーカイブ の一部を消してしまっても、CVSup は壊れた部分を検出して再構築してくれます。 CTM はこれをやってくれませんし、 Anonymous CVS はおそらく他の何よりも深く混乱してしまうことが多いでしょう。 もしソースツリーの一部を消してしまったら、(最新の CVS “ベースデルタ” から) 一からやり直し、 CTM か Anonymous CVS を使って悪い部分を消去し、再同期させることによって すべてを再構築しなければなりません。
FreeBSD のどれか特定のバージョン (FreeBSD-STABLE、FreeBSD-CURRENT など) について、ローカルのソースツリーを同期させたら、 そのソースツリーを使ってシステムを再構築できます。
バックアップの作成: システムを再構築する前にバックアップを 作成することの重要性は、いくら強調してもし過ぎると言うことはありません。 システム全体の再構築とは (以降に書かれた手順に従っている限り) 難しい作業ではありませんが、 どんなに注意していたとしても、 あなた自身、あるいはソースツリーで作業している他の人達に手違いがあった時には、 システムが起動しなくなってしまう状態になることがあるのです。
まず、バックアップがきちんと作成されていることを確認して、 fixit フロッピーか起動可能な CD を用意してください。 多分、それを使うことはないと思いますが、 あとで後悔することのないよう、念のため用意しておきましょう。
メーリングリストに参加する: もともと、FreeBSD-STABLE と FreeBSD-CURRENT のコードブランチは、 開発中のものです。 FreeBSD の作業に貢献してくださっている人達も人間ですから、 時にはミスをすることだってあるでしょう。
そのような間違いは、単に警告を示す見慣れない 診断メッセージをシステムが、表示するような、 全く害のないものであることもあれば、システムを起動できなくしたり、 ファイルシステムを破壊してしまうような、 恐ろしい結果を招くものかも知れません。
万が一、このような問題が生じた場合、 問題の詳細と、どのようなシステムが影響を受けるかについて書かれた “注意 (heads up)” の記事が 適切なメーリングリストに投稿され、そして、その問題が解決されると、 “問題解決 (all clear)” のアナウンス記事が同様に 投稿されます。
FreeBSD-STABLE や FreeBSD-CURRENT ブランチに追随するために試そうとするのに、 FreeBSD-STABLE メーリングリスト や FreeBSD-CURRENT メーリングリスト を過去にさかのぼって読まないというのは、 自ら災難を招くことになるでしょう。
訳注: これらのメーリングリストは英語でやりとりされているため、 日本語での投稿は歓迎されません。英語でのやりとりができない人は、 FreeBSD 友の会 の運営しているメーリングリストをあたってみるのがいいでしょう。
make world は使わないこと: 古いドキュメントの多くが、この目的に make world を使うことを薦めています。 これは、重要な手順をいくつか抜かしてしまうので、 何をしているかよく分かっていなければ使うべきではありません。 ほぼあらゆる場合において、make world を実行するのは間違っており、 ここで説明されている手順を用いるべきです。
システムを更新する前に、 /usr/src/UPDATING を読んでください。 このファイルには、用意したソースコードで buildworld を行う前に必要な手順が書かれています。 その後、以下の手順を踏んでください。
この節で説明するアップデートのプロセスは、古いコンパイラ、 古いカーネル、古い world、そして古いコンフィグレーションファイルからなる、 古いバージョンの FreeBSD をアップデートすることを想定しています。 ここで “world” は、コアシステムのバイナリ、ライブラリ、 プログラミングファイルを意味します。 コンパイラは “world” の一部ですが、 いくつか特別に気をつけなければならないことがあります。
また、新しいシステムのソースをすでに入手していることも仮定しています。 もしシステムのソースコードが古いようでしたら、 Section 18.6 を読んで、 ソースコードを新しいバージョンへ同期する方法の詳細を理解してください。
ソースからのシステムのアップデートは、 当初予想していたものよりとらえがたいものです。 長い年月において避けられない依存問題が判明したため、 FreeBSD の開発者達は、推奨されるアプローチを大きく変更しました。 この節では、現在推奨されているアップグレードの手順の背後にある、 理論的根拠について説明します。
連続したアップデートの手順は、以下の問題に対応している必要があります。
古いコンパイラは、 新しいカーネルをコンパイルできない可能性があります (古いコンパイラはときどきバグを含んでいます)。 そのため、新しいカーネルの構築には、 新しいコンパイラを使う必要があります。 特に、新しいカーネルを構築する前に、 新しいコンパイラが構築されていなければなりません。 必ずしも、新しいカーネルを構築する前に、新しいコンパイラが インストールされている 必要があることを意味しているわけではありません。
新しい world は、 新しいカーネルの機能に依存している可能性があるため、 新しい world をインストールする前に、 新しいカーネルがインストールされていなければなりません。
これら 2 つの重要事項は、 以下の説明で中心となる buildworld, buildkernel, installkernel, installworld の基本です。 現在推奨されているアップグレードプロセスを採用したほうが良いという理由をすべて含んでいるわけではありません。 以下では、もう少し明確ではない点についてリストアップします。
古い world は、新しいカーネルでは正しく動かないかも知れません。 そのため、新しいカーネルをインストールしたら、 直ちに新しい world をインストールしてください。
設定の中には、新しい world をインストールする前に変更すべきものがありますが、 古い world を壊す可能性があります。 そのため、一般的に設定のアップデートは、 2 つの手順が必要です。
多くの場合、アップデートのプロセスは、ファイルを置き換えたり、 追加のみを行い、古いファイルを削除しません。 このことが問題を引き起こす可能性があります。 そのため、アップデートにおいては、 手動で削除すべきファイルがあることを、 特定のステップで指定することもあります。 これは将来自動化されるかもしれないし、されないかもしれません。
これらを配慮し、以下の推奨手順が作られました。 アップデートの細かい手順においては、追加の手順が必要になるかもしれませんが、 この中心となるプロセスは、しばらくの間変わっていません。
make buildworld
新しいコンパイラと関連ツールを最初にコンパイルし、 その後、新しいコンパイラで、 新しい world の残りの部分をコンパイルします。 コンパイルされたものは、 /usr/obj に格納されます。
make buildkernel
config(8) と make(1) を用いた古い方法とは異なり、 /usr/obj にある 新しい コンパイラが用いられます。 これにより、コンパイラとカーネルのミスマッチを防ぐことができます。
make installkernel
新しくアップデートされたカーネルで起動できるように、 新しいカーネルとカーネルモジュールをディスク上に配置します。
シングルユーザモードで再起動
シングルユーザモードは、 すでに実行されているソフトウェアをアップデートする際の問題を最小限にします。 また、新しいカーネル上で古い world が実行される際の問題も最小限にします。
mergemaster -p
新しい world における最初の設定ファイルのアップデートを行います。 たとえば、新しいユーザグループをシステムに追加したり、 パスワードデータベースに対し、新しいユーザ名を追加するかもしれません。 前回のアップデート後に、 新しいグループや特別のシステムのユーザアカウントが追加された場合に、 installworld のステップで、 新しくインストールされたシステムのユーザまたはシステムのグループ名を問題なく使うことができるように、 この作業がときどき必要となります。
make installworld
world を /usr/obj からコピーします。 これで、ディスクには新しいカーネルと world が置かれたことになります。
mergemaster
ディスクに新しい world が置かれたので、 残りの設定ファイルをアップデートします。
再起動
新しいカーネル、world そして設定ファイルがロードされたので、 再起動が必要です。
もし、FreeBSD のあるブランチのあるリリースから、 同じブランチの最新リリースにアップデートするのであれば (たとえば 7.0 から 7.1)、 この手順にしたがわなくても良いでしょう。 なぜならば、コンパイラ、カーネル、ユーザランド、そして設定ファイルの間で、 重度のミスマッチが起きることはあまり考えられないためです。 マイナーなアップデートでは、新しいカーネルの構築とインストール後に、 古いアプローチである make world を用いてもうまくいくでしょう。
しかしながら、メジャーリリースをまたいだアップデートでは、 この方法を用いないと、何らかの問題にぶつかるでしょう。
大きなアップグレード (たとえば 4.X から 5.0 へのアップデート) においては、(たとえば installworld の前に特定のファイルの名前の変更や削除などの) 特別な追加のステップも必要となるでしょう。 /usr/src/UPDATING ファイルを注意深く読んでください。 特にファイルの最後には、 現在推奨されているアップグレードの手順が詳しく正確に説明されています。
この手続きは、 開発者たちがある種のミスマッチを完全に避けるために、長い年月をかけて進化してきました。 願わくば、この現在の手順が長い間安定してほしいものです。
Note: FreeBSD 3.X やそれ以前のリリースからのアップグレードは、 さらにもう少しトリッキーです。 このようなアップグレードを行う必要がある場合には、 UPDATING を注意深く読んでください。
まとめると、現在、ソースからの FreeBSD のアップグレードにおいて推奨されている方法は以下となります。
# cd /usr/src # make buildworld # make buildkernel # make installkernel # shutdown -r now
Note: まれに buildworld の前に mergemaster -p を余分に実行することが必要な場合があります。その場合は UPDATING にそう書かれています。 FreeBSD のメジャーバージョンをまたいで更新するのでなければ、 通常はこの手順を省略してもなんら問題ないでしょう。
installkernel が無事に終了したら、(たとえば、ローダのプロンプトから boot -s を使って) シングルユーザモードで立ち上げましょう。 それから、以下を実行してください。
# adjkerntz -i # mount -a -t ufs # mergemaster -p # cd /usr/src # make installworld # mergemaster # reboot
この後の説明を読んでください: 上述の手順は、 とりあえず着手するための簡単なまとめにすぎません。 それぞれの手順をきちんと理解するために、 この後の節を読んでください。 カスタムカーネルを利用したいと考えているならなおさらです。
何を始めるにしろ、まず最初に /usr/src/UPDATING (もしくはあなたがソースコードを どこにコピーしたにせよそれに相当するファイル) を読みましょう。 このファイルにはあなたが遭遇するかも知れない問題に対する重要な情報を 含んでいたり、あなたが特定のコマンドを実行しなければならなくなった時 その順序を指示したりするはずです。 UPDATING があなたが読んだ事柄と矛盾している時は UPDATING が優先します。
Important: UPDATING を読むということは、前述の 適切なメーリングリストを購読する代わりにはなりません。 二つの要求は相補的なもので排他的なものではないのです。
まず、/usr/share/examples/etc/make.conf と /etc/make.conf を調べてください。そこには 最初から標準的なものが (多くのものはコメントアウトされていますが) 含まれています。ソースからシステムを再構築するときに make が /etc/make.conf に付け加えられた設定を使用します。 /etc/make.conf に追加された設定は make を実行したときに常に使われることを覚えておいてください。 そのため、システムに必要な設定を書いておくと良いでしょう。
標準的なユーザならおそらく、 /usr/share/examples/etc/make.conf の CFLAGS と NO_PROFILE のコメントをはずしたくなるでしょう。
他の定義 (COPTFLAGS、 NOPORTDOCS など) の定義行についても、 コメントを外す必要があるかどうか調べておきましょう。
/etc ディレクトリには、 システム起動時に実行されるスクリプトだけでなく、 あなたのシステムの設定に関連する情報の大部分が 含まれています。そのディレクトリに含まれる スクリプトは、FreeBSD のバージョンによって多少異なります。
また、設定ファイルのなかには、稼働中のシステムが日々利用している ものもあります。実際には、/etc/group などがそれに該当します。
make installworld によるインストールの段階では、 特定のユーザ名、あるいはグループが存在していることを 要求する場面があります。システムのアップグレードを行なう際には、 それらのユーザ名やグループが削除、あるいは変更されて存在していない可能性が 考えられますが、そういった場合、システムのアップグレードを 行なっている間に、問題が発生する原因になります。 make buildworld において、 それらのユーザ名やグループが存在するか確認が行われる場合もあります。
この例の一つは、 smmsp ユーザが追加された時です。 mtree(8) が /var/spool/clientmqueue を作成しようとする時、 そのユーザ名 (およびグループ) が存在しないためにインストールに失敗してしまったのです。
解決方法は、buildworld の前に -p オプションをつけて
mergemaster(8)
を実行することです。 これを実行すると、buildworld や
installworld
が成功するために必要なファイルだけを比較します。 古いバージョンの mergemaster を使っていて、-p
がサポートされていない場合、
最初に実行するときソースツリーにある新しいバージョンのものを使ってください。
# cd /usr/src/usr.sbin/mergemaster # ./mergemaster.sh -p
Tip: もし、あなたがもっと神経質な人なら、あなたが名前を変更したり、 削除してしまったグループが所有しているファイルを、 次のようにして調べることもできます。
# find / -group GID -printこれは GID (グループ名もしくは数字で示されたグループ ID) で 指定されたグループが所有するすべてのファイルを表示します。
コンパイルは、シングルユーザモードで行なった方が良いでしょう。 そうすることで多少速度が向上する、というちょっとした利点が あるだけでなく、システムの再インストールは重要なシステムファイル、 標準コマンド、ライブラリ、インクルードファイルなどを操作します。 稼働中のシステムに (特に他のユーザがそのシステムにログインしている時に) そのような変更を加えることは、トラブルを引き起こす原因となります。
もう一つの方法として、マルチユーザモードでシステムを再構築して、 シングルユーザモードに移行してからそれをインストールする、 というのがあります。もしこのような方法で行ないたい場合は、 以下の手順を構築が完了するところまで飛ばしてください。 シングルユーザモードに移行するのを、 installkernel もしくは installworld しなければならなくなるま で後回しにできます。
稼働中のシステムでシングルユーザモードに移行するには、 スーパユーザ (root) 権限で次のコマンドを実行します。
# shutdown now
あるいはシステムを再起動し、ブートプロンプトから “single user” を選択すると、 シングルユーザモードでシステムを起動できます。 起動後、シェルプロンプトから次のように実行してください。
# fsck -p # mount -u / # mount -a -t ufs # swapon -a
これはファイルシステムをチェックした後、 / を読み書き可能にして再マウント、 /etc/fstab に指定されている、 それ以外の UFS ファイルシステムをすべてマウントしてから スワップを有効にします。
Note: CMOS クロックが地域時間に設定されていて GMT ではない場合 (date(1) コマンドが正しい時間と地域 を表示しないなら当てはまります)、 次のコマンドを実行する必要があるかもしれません。
# adjkerntz -iこうすれば、 確実に地域時刻が正しく設定されます -- これを怠ると、 あとあと問題になるかもしれません。
システムが再構築される時、構築されたものは (デフォルトで) /usr/obj 以下のディレクトリに格納され、 そのディレクトリの下は /usr/src と同じ構造となります。
このディレクトリをあらかじめ削除しておくことにより、 make buildworld の行程にかかる時間を短縮させ、 依存問題に悩まされるようなトラブルを回避することができます。
/usr/obj 以下のファイルには、 変更不可 (immutable) フラグ (詳細は chflags(1) 参照) がセットされているものがある可能性があります。 そのため、まず最初にそのフラグを変更しなければなりません。
# cd /usr/obj # chflags -R noschg * # rm -rf *
実行される make(1) からの出力は、ファイルに保存すると良いでしょう。 もし、何か障害が発生した場合、エラーメッセージのコピーを手元に残すことができます。 何が悪かったのか、あなた自身がそれから理解することはできないかも 知れませんが、FreeBSD メーリングリストに投稿して、 誰か他の人からの助言を得るために利用することができます。
ファイルに保存する最も簡単な方法は、script(1) コマンドを 使い、引数に出力を保存したいファイル名を指定することです。 これを make world の直前に行ない、再構築が終了してから exit と入力すると、出力を保存することができます。
# script /var/tmp/mw.out
Script started, output file is /var/tmp/mw.out
# make TARGET
... compile, compile, compile ...
# exit
Script done, ...
出力を保存する場合、/tmp ディレクトリの中に 保存してはいけません。 このディレクトリは、次の再起動で削除されてしまう可能性があります。 出力の保存には、(上の例のように) /var/tmpや root のホームディレクトリが適しています。
まず、カレントディレクトリを /usr/src に 変更しなければなりません。次のように実行してください。
# cd /usr/src
(もちろん、ソースコードが他のディレクトリにある場合には、 /usr/src ではなく、 ソースコードのあるディレクトリに移動してください)。
make world を行なうには、make(1) コマンドを使用します。 このコマンドは、Makefile というファイルから、 FreeBSD を構成するプログラムの再構築方法や、 どういう順番でそれらを構築すべきかといったような 指示を読み込みます。
コマンドラインの一般的な書式は、次のとおりです。
# make -x -DVARIABLE target
この例では、-x が make(1)
に渡されるオプションになります。
どのようなオプションが利用できるかについては、マニュアルページを 参照してください。
-DVARIABLE は、 Makefile に渡される変数であり、 この変数は Makefile の動作をコントロールします。 また、/etc/make.conf で設定される変数も
同様です。これは変数を設定するもう一つの方法として用意されています。
# make -DNO_PROFILE target
は、プロファイル版のライブラリを構築しないことを指定する もう一つの記法で、/etc/make.conf 中の
NO_PROFILE= true # Avoid compiling profiled libraries
の行に対応します。
target は、make(1) に どのように動作するのかを指示するためのものです。 各々の Makefile には、数多くの異なる “ターゲット (target)” が定義されていて、 指定されたターゲットによって動作が決まります。
Makefile に書かれているターゲットには、 あなたが指定しても意味を持たないものも含まれます。 これらは、システムの再構築に必要な段階を、多くの さらに細かい段階に分割するため、構築の過程で利用されるものです。
大抵の場合、make(1) にパラメータを指定する必要はないでしょうから、 コマンドラインは次のようなものになるでしょう。
# make target
ここで、target は、多くのビルドオプションのどれかになります。 最初のターゲットはいつも buildworld になるでしょう。
その名前が示すように、buildworld は /usr/obj 以下に新しい完全な ディレクトリツリーを構築し、もう一つのターゲット installworld は、そのツリーを 現在のマシンにインストールします。
選択肢が分けられていることは、二つの理由から非常に有用です。 まず第一に、稼働中のシステムに全く影響を与えることなく、 安全にシステムの構築作業を行えることです。 構築作業は “何にも依存せず独立して行なわれる” ため、 マルチユーザモードで稼働中のシステムでも、何一つ 悪影響を与えずに buildworld を 実行することができます。 ただし、installworld は シングルユーザモードで行なうことをおすすめします。
第二に、NFS マウントを利用することで、 ネットワーク上の複数のマシンをアップグレードすることが 可能な点があげられます。たとえば三台のマシン、 A, B, C をアップグレードしたい場合には、まずマシン A で make buildworld と make installworld を実行します。 それから、マシン B とマシン C でマシン A の /usr/src と /usr/obj を NFS マウントし、make installworld とすることで 構築済みのシステムを各マシンにインストールすることができるのです。
world ターゲットも利用可能ですが、 このターゲットの利用は推奨されていません。
次のコマンド
# make buildworld
を実行してください。ここで make に -j オプションをつけると、
同時にいくつかのプロセスを生成させることができます。 この機能はマルチ CPU
マシンで特に効果を発揮します。 構築過程の大部分では CPU 性能の限界より I/O
性能の限界の方が問題となるため、シングル CPU マシンにも効果があります。
普通のシングル CPU マシンで以下のコマンド
# make -j4 buildworld
を実行すると、make(1) は最大 4 個までのプロセスを同時に実行します。 メーリングリストに投稿された経験的な報告によると、 4 個という指定が最も良いパフォーマンスを示すようです。
もし、複数の CPU を備えたマシンで SMP 設定が行なわれたカーネルを 利用しているなら、6 から 10 の間の値を設定し、速度がどれくらい 向上するか確認してみてください。
構築時間を決める要素はさまざまありますが、 十分新しいマシンであれば、 トリックや近道を使わずに普通に構築した場合、FreeBSD-STABLE の構築には 1, 2 時間しかかからないでしょう。 FreeBSD-CURRENT の構築は、もう少し時間がかかります。
新しいシステムの全機能を完全に利用できるようにするには、 カーネルの再構築をする必要があります。 再構築は、ある種のメモリ構造体が変更された時には特に必須であり、 ps(1) や top(1) のようなプログラムは、 カーネルとソースコードのバージョンが一致しないと正常に動作しないでしょう。
最も簡単で安全にカーネルの再構築を行なう方法は、 GENERIC を使ったカーネルを構築・インストールすることです。 GENERIC にはあなたが必要とするデバイスがすべて含まれていない かも知れませんが、あなたのシステムをシングルユーザモードで 起動させるのに必要なものはすべて入っています。 これは新しいバージョンのシステムがきちんと動作するかどうか 調べる良い方法の一つです。 GENERIC で起動してから、 あなたがいつも使っているカーネルコンフィグレーションファイルを 使って新しいカーネルを構築することで、 システムが正常に動作しているかどうか確かめることができます。
FreeBSD では、新しいカーネルを構築する前に build world を行うことが重要です。
Note: カスタムカーネルを構築したい場合、既にコンフィグレー ションファイルがあるならば、単に KERNCONF=MYKERNEL を使ってください。
# cd /usr/src # make buildkernel KERNCONF=MYKERNEL # make installkernel KERNCONF=MYKERNEL
なお、kern.securelevel を 1 より大きく していて、かつカーネルのバイナリファイル に noschg のようなフラグを設定している場合 は、installkernel を行うのにシングル ユーザモードに移行しなければなりません。それ以外の場合は、マル チユーザモードでこれらのコマンドを問題なく動かせるはずです。 kern.securelevel について詳しくは init(8) を、ファイルの様々なフラグについて詳しくは chflags(1) をご覧ください。
新しいカーネルが動作するかどうかテストするために、 シングルユーザモードで再起動するべきです。 シングルユーザモードでの起動は、 Section 18.7.5 に書かれている手順に従ってください。
十分最近のバージョンの FreeBSD を make buildworld で構築しているなら、 次にここで installworld を 使うことで新しいシステムバイナリのインストールを行ないます。
それには、以下のコマンドを実行してください。
# cd /usr/src # make installworld
Note: make buildworld でコマンドラインから 変数を指定した場合は、同じ指定を make installworld のコマンドラインにも 指定しなければなりません。 ただし、オプションについてはその限りではありません。 たとえば
-jは installworld で絶対に使ってはいけません。たとえば以下のように実行したなら、
# make -DNO_PROFILE buildworld以下のようにしてインストールしなければなりません。
# make -DNO_PROFILE installworldもしそうしなかった場合、 make buildworld の段階で構築されていない プロファイル版ライブラリをインストールしようとしてしまうでしょう。
システムの再構築は、いくつかのディレクトリ ( 特に、/etc や /var や /usr) において、 新規に導入されたり、変更された設定ファイルによる ファイルの更新は行なわれません。
これらのファイルを更新するもっとも簡単な方法は、mergemaster(8) を使うことです。これは自分でやることも可能なので、そうしても かまいません。 いずれの方法に従うにせよ、 必ず /etc のバックアップを取って不測の事態に備えてください。
mergemaster(8) ユーティリティは Bourne シェルスクリプトで、 /etc にある設定ファイルとソースツリーの /usr/src/etc にある設定ファイルの違いを確認するのを手伝ってくれます。 これを使うのが、ソースツリーにある設定ファイルにシステムの設定ファイルを 更新するために推奨される方法です。
始めるには、プロンプトから単に mergemaster と入力して、
ファイルの比較を開始するのを見てください。 mergemaster
は / を起点とした一時的なルート環境を構築し、
さまざまなシステム設定ファイルを (訳注: デフォルトでは /var/tmp/temproot に) 置いていきます。
次にこれらのファイルは現在システムにインストールされているファイルと比較されます。
この時点で、異なるファイルは diff(1) 形式で示され、
+ の記号は追加または変更された行を表し、 - は完全に削除されたか新しく置き換えられた行を表します。 diff(1)
の書式とファイルの違いの表示方法についてのより詳しい情報は、 diff(1)
を参照してください。
mergemaster(8) は食い違いが起きているファイルをそれぞれ示します。 ここでは新しいファイル (一時ファイルとして参照されています) を削除するか、 一時ファイルをそのままインストールするか、 一時ファイルと現在インストールされているファイルを統合するか、 もしくは diff(1) の結果をもう一度見るか選択できます。
一時ファイルの削除を選ぶと、mergemaster(8) に現在のファイルを変更しないで新しいバージョンを削除せよと伝えます。 この選択は、現在のファイルを変更する理由が分からないのであれば、 お勧めできません。 mergemaster(8) のプロンプトで ? とタイプすれば、 いつでもヘルプが見られます。 ファイルのスキップを選ぶと、他のすべてのファイルを終えたあと、 もう一度そのファイルが提示されます。
一時ファイルをそのままインストールすることを選ぶと、 現在のファイルを新しいファイルで置き換えます。 ほとんどの手を加えていないファイルは、 これが一番よい選択です。
ファイルの統合を選んだ場合、 テキストエディタが起動され、両方のファイルの中身が提示されます。 画面上に並ぶ両方のファイルを見て新しいファイルを作成するために両方から必要な部分を選択し、 2 つのファイルを統合することができます。 並んでいるファイルを比較するとき、 l キーで左側の中身を選択し、 r キーで右側の中身を選択します。 最終出力は左右両方の部分でできたファイルになるでしょう。 このファイルをインストールすることができます。 たいてい、このオプシュンはユーザが設定を変更したファイルに使われます。
diff(1) の結果をもう一度見る、を選択すると、 ちょうど先ほど mergemaster(8) が選択肢を表示する前と同じように、 ファイルの相異点を見ることができます。
mergemaster(8) がシステムファイルの比較を終えたあと、 他のオプションについてもプロンプトが表示されます。 mergemaster(8) が、パスワードファイルを再構築したいかどうか尋ねることがあります。 最後に残った一時ファイルを削除するかどうかを尋ねて終了します。
手動で更新することを選んだ場合、 単にファイルを /usr/src/etc から /etc に コピーしただけでは正常に動作させることはできません。 これらのファイルには、“インストールという 手順を踏まなければならないもの” が含まれています。 /usr/src/etc ディレクトリは /etc ディレクトリにそのまま置き換えられるような コピーではないからです。 また、/etc にあるべきファイルのうちで /usr/src/etc にないものもあります。
mergemaster(8) を (勧められた通り) 使っているのであれば、次の節 まで飛ばしてもかまいません。
手動で行う際の 一番簡単な方法は、ファイルを新しいディレクトリにインストールしてから、 以前のものと異なっている部分を調べて更新作業を行なうことです。
既存の /etc をバックアップする: 理論的に考えて、このディレクトリが自動的に 処理されることはありませんが、念には念を入れておいて 損はありません。たとえば以下のようにして、 既存の /etc ディレクトリを どこか安全な場所にコピーしておきましょう。
# cp -Rp /etc /etc.old
-Rは再帰的なコピーを行ない、-pはファイルの更新時間や所有者などを保存します。
また、新しい /etc やその他のファイルを インストールするための、仮のディレクトリを作っておく必要があります。 仮ディレクトリは /var/tmp/root に置くのが良いでしょう。 同様に、必要なサブディレクトリもこの下に置きます。
# mkdir /var/tmp/root # cd /usr/src/etc # make DESTDIR=/var/tmp/root distrib-dirs distribution
上の例は、必要なディレクトリ構造をつくり、ファイルをインストールします。 /var/tmp/root 以下に作られる、 たくさんの空のディレクトリは削除する必要があります。 一番簡単なやり方は、次のとおりです。
# cd /var/tmp/root # find -d . -type d | xargs rmdir 2>/dev/null
これは空ディレクトリをすべて削除します。 (空でないディレクトリに関する警告を避けるために、 標準エラー出力は /dev/null に リダイレクトされます)
この段階の /var/tmp/root には、 本来 / 以下にあるべきファイルが すべて含まれています。 各ファイルを順に見て、既存のファイルと異なる部分を 調べてください。
/var/tmp/root 以下に インストールされているファイルの中には、 “.” から始まっているものがあります。 これを書いている時点で、それに該当するファイルは /var/tmp/root/ と /var/tmp/root/root/ の中にある シェルスタートアップファイルだけですが、 他にもあるかも知れません (これは、あなたがこれをどの時点で読んでいるかに依存します)。 ls -a を使って確かめてください。
もっとも簡単な方法は、二つのファイルを比較するコマンド diff(1) を使うことです。
# diff /etc/shells /var/tmp/root/etc/shells
これは、あなたの /etc/shells ファイルと 新しい /var/tmp/root/etc/shells ファイルの 異なる部分を表示します。 これらを、あなたが書き換えたものに変更点をマージするか、 それとも既存のファイルを新しいもので上書きするかを 判断する材料にしてください。
新しい root ディレクトリ (/var/tmp/root) の名前に タイムスタンプを付けておくと、 異なるバージョン間の比較を楽に行なうことができます。: 頻繁にシステムの再構築を行なうということは、 /etc の更新もまた、頻繁に行う必要がある ということです。これはちょっと手間のかかる作業です。
この作業は、あなたが /etc にマージした、 新しく変更されたファイルの最新のセットのコピーを保存しておくことで 素早く行なうことができます。 下の手順は、それを実現するための一つの方法です。
普通に make world します。/etc や 他のディレクトリを更新したくなったときは、ターゲット ディレクトリに、そのときの日付に基づく名前をつけてください。 たとえば 1998 年 2 月 14 日 だとすれば、以下のようにします。
# mkdir /var/tmp/root-19980214 # cd /usr/src/etc # make DESTDIR=/var/tmp/root-19980214 \ distrib-dirs distribution上に説明されているように、 このディレクトリから変更点をマージします。
その作業が終了しても、 /var/tmp/root-19980214 を 削除してはいけません。
最新版のソースをダウンロードして再構築したら、 ステップ 1 にしたがってください。今度は、 /var/tmp/root-19980221 (更新作業が一週間おきだった場合) のような名前の、新しいディレクトリをつくることになるでしょう。
この段階で diff(1) を使用し、 二つのディレクトリを比較する再帰的 diff を作成することで、 一週間の間に行なわれたソースへの変更による相違点を調べます。
# cd /var/tmp # diff -r root-19980214 root-19980221これによって報告される相違点は、大抵の場合、 /var/tmp/root-19980221/etc と /etc との場合に比べて 非常に少ないものになります。 相違点が少ないため、変更点を既存の /etc ディレクトリにマージすることは、比較的容易になります。
ここまで終了したら、/var/tmp/root-* の 二つのうち、古い方のディレクトリは削除して構いません。
# rm -rf /var/tmp/root-19980214この工程を、/etc へ変更点をマージする 必要があるたび、毎回繰り返します。
ディレクトリ名の生成を自動化するには、date(1) を利用することができます。
# mkdir /var/tmp/root-`date "+%Y%m%d"`
これで、作業はおしまいです。 すべてがあるべき正しい場所に存在することをチェックしたら、 システムを再起動します。これは、単に shutdown(8) を実行するだけです。
# shutdown -r now
ここまで来れば、FreeBSD システムのアップグレードは成功です。 おめでとうございます。
もしちょっとした問題があった場合でも、 システムの一部を再構築するのは簡単です。 たとえば、アップグレードの途中で誤って /etc/magic を削除して /etc にマージしてしまい、 その結果 file コマンドが動作しなくなってしまったような場合を考えてみてください。 これを修復するには、次のコマンドを実行すれば修復することができます。
# cd /usr/src/usr.bin/file # make all install
それは変更の性質によるので、なんとも言えません。 たとえば、CVSup を実行したとき、最後に実行したときから比べて 次にあげるようなファイルが更新されていたとします。
src/games/cribbage/instr.c src/games/sail/pl_main.c src/release/sysinstall/config.c src/release/sysinstall/media.c src/share/mk/bsd.port.mk
このときには、改めてシステム全体を再構築する必要はないでしょう。 適切なサブディレクトリに移って make all install を行うだけで更新することができます。 しかし、もし何らかの大きな変更が行なわれているとき、たとえば src/lib/libc/stdlib が変更されている場合には、 システム全体を再構築するか、もしくはそのうち、 少なくとも静的にリンクされているもの (と、あなたが追加した 静的にリンクされたプログラム) を作り直す必要があります。
結局のところ、どの時点で現在のシステムをアップグレードするかは あなたが決めることです。 2 週間ごとにシステムを再構築し、その 2 週間の変更を取り込めば 幸せかもしれませんし、 変更のあった部分だけ再構築し、依存関係を確かめたいと考えるかも知れません。
もちろん、それらはどのくらいの頻度でアップグレードしたいか、 そして FreeBSD-STABLE か FreeBSD-CURRENT のどちらを追いかけているのかによります。
これは通常、ハードウェアに問題があることを示しています。 システムの再構築は、ハードウェアに対する負荷耐久試験を行なうための 有効な手段の一つで、メモリに関係する問題がよく報告されます。 その大部分は、コンパイラが奇妙なシグナルを受け取り、 不可解な異常終了となることで発見されます。
本当にこの問題によるものかどうかは、再構築をもう一度実行し、 異なる段階で異常終了が発生するか、ということから確認できます。
この場合には、マシンの部品を交換して、どの部分が悪いのかを 調べてみることくらいしかできることはありません。
一言で答えるなら「削除しても構わない」です。
/usr/obj には、 コンパイルの段階で生成された すべてのオブジェクトファイルが含まれています。 通常 make buildworld の最初の段階では、 このディレクトリを削除して新しくつくり直すようになっています。 その場合には、構築終了後の /usr/obj を保存しておいても、あまり意味はありません。 削除すれば、大きなディスクスペースを (現在はだいたい 340 MB あります) 解放することができます。
しかし、もしあなたが何を行なおうとしているのか理解しているなら、 この段階を省略して make buildworld を行なうことができます。 こうすると、ほとんどのソースは再コンパイルされないため、 構築はかなり高速化されます。 これは裏をかえせば、デリケートな依存関係の問題によって、 システムの構築が奇妙な失敗に終わる可能性があるということです。 FreeBSD メーリングリストではしばしば、構築の失敗が、 この段階の省略によるものだということを理解せずに 不満の声をあげる人がいます。
それは、あなたが問題に気付く前に、 どれだけの作業を終えているかによって変わります。
一般的に (そしてこれは確実でしっかりした 規則ではありませんが)、 make buildworld の過程では、 基本的なツール ( gcc(1) や make(1) のようなもの) や、システムライブラリの新しいコピーが作成されます。 その後まず、これらのツールやライブラリはインストールされてから 自分自身の再構築に使われ、もう一度、インストールされます。 全体のシステム (ここでは ls(1) や grep(1) といった 標準的なユーザプログラムを含みます) は、 その新しいシステムファイルを用いて作り直されることになります。
もし、再構築が最終段階に入っていること が (記録しておいた出力を見たりすることで) わかっていたら、 (全く悪影響を与えることなく) 次のようにすることができます。
... fix the problem ...
# cd /usr/src
# make -DNO_CLEAN all
これは、前回の make buildworld の作業をやり直しません。
次のメッセージ
-------------------------------------------------------------- Building everything.. --------------------------------------------------------------
が make buildworld の出力にある場合には、 上のようにしてもほとんど悪影響が現れることはありません。
もしこのメッセージがないとか、よく分からないという場合には、 安全を確保し、後悔するようなことがないよう、 システムの再構築を最初からやり直しましょう。
シングルユーザモードで動かしてください。
/usr/src と /usr/obj ディレクトリを、 異なるディスク上の別のファイルシステムに置いてください。 また可能ならば、異なるディスクコントローラに接続された ディスクを使ってください。
さらに高速化するには、これらのファイルシステムを ccd(4) (連結ディスクドライバ) デバイスを 使って、複数のディスク上に置いてください。
プロファイル版の作成を無効化してください。 (/etc/make.conf で “NO_PROFILE=true” をセットします) 普通、それが必要になることはありません。
また、/etc/make.conf の中の CFLAGS を、 -O -pipe
のように指定しましょう。 -O2
の最適化はさらに多くの時間を必要とし、 しかも -O
と -O2 の 最適化には、ほとんど差はありません。
-pipe を指定することで、
コンパイラはテンポラリファイルの代わりにパイプを利用します。
その結果、(メモリの利用は増えますが) ディスクアクセスが減ります。
make(1) に
-jn オプ
ションを指定して、複数のプロセスを並列に実行させてく ださい。
これはプロセッサが単一か複数かによらず、 どちらも同様に恩恵を得ることができます。
/usr/src のある ファイルシステムを、noatime オプションを付けてマウント (もしくは再マウント)
してください。 これは、そのファイルシステムにおいて、
最後にアクセスされた時刻の書き込みを抑制します。
おそらく、この情報が必要になることはないでしょう。
# mount -u -o noatime /usr/src
Warning: 上の例は、 /usr/src 自身が独立したファイルシステムで あることを想定しています。 もしそうでないときには (たとえば /usr の 一部である場合には)、 /usr/src ではなく 適切なマウントポイントを指定する必要があります。
/usr/obj のあるファイルシステムを、 async オプションをつけてマウント (もしくは 再マウント)
してください。これによって、 ディスクへの書き込みが非同期になります。
つまり、書き込み命令はすぐに完了するのに対し、
実際にデータがディスクに書き込まれるのは、その数秒後になります。
これによって、書き込み処理の一括化が可能になるため、
劇的なパフォーマンスの向上が期待できます。
Warning: このオプションを指定すると、ファイルシステムは 壊れやすくなってしまうことに注意してください。 このオプションを付けていて、突然電源が落ちた場合には、 再起動後にファイルシステムが復旧不能になる可能性が 非常に高くなります。
もし、/usr/obj 自身が独立した ファイルシステムであるならば、これは問題になりません。 しかし、同じファイルシステムに、他の貴重なデータを置いているときには、 このオプションを有効にする前に、 バックアップをきちんと取っておきましょう。
# mount -u -o async /usr/obj
Warning: もし /usr/obj 自身が ファイルシステムでない場合には、適切なマウントポイントを指すように、 上の例の名前を置き換えてください。
自分の環境に前のビルドの余計なゴミが残っていないことをはっきりと確認してください。 とても簡単です。
# chflags -R noschg /usr/obj/usr # rm -rf /usr/obj/usr # cd /usr/src # make cleandir # make cleandir
ええ、make cleandir は本当に 2 回実行するのです。
そして、make buildworld を行い、 全プロセスを最初からやり直してください。
まだ問題があれば、エラーと uname -a の出力を FreeBSD general questions メーリングリスト に送ってください。 自分の設定についてさらに質問されても答えられるよう用意してください!
同じソースツリーを追いかけたいマシンを複数持っているなら、 全部のマシンにソースをダウンロードして全部再構築するのは資源、 つまりディスクスペース、ネットワーク帯域、そして CPU サイクルの無駄使いに思えます。 実際これは無駄で、解決策は 1 つのマシンに仕事のほとんどをさせ、 残りのマシンは NFS 経由でそれをマウントする、というものです。 このセクションではそのやり方を概観します。
まず初めに、同じバイナリで動かそうとするマシンたちを決めます。 このマシンたちのことをビルドセットと呼びましょう。 それぞれのマシンはカスタムカーネルを持っているかもしれませんが、 同じユーザランドバイナリを動かそうというのです。 このビルドセットから、 ビルドマシンとなるマシンを 1 台選びます。 ベースシステムとカーネルを構築するのはこのマシンになります。 理想的には、このマシンは make buildworld と make buildkernel を実行するのに十分な CPU を持った速いマシンであるべきです。 テストマシンとなるべきマシンも選びたいでしょう。 更新されたソフトウェアを使う前にそのマシンでテストするのです。 テストマシンはかなり長い時間落ちていても だいじょうぶなマシンであったほうがいいでしょう。 ビルドマシンでもかまいませんが、ビルドマシンである必要はありません。
このビルドセットのマシンはすべて /usr/obj と /usr/src を同じマシンの同じ場所からマウントする必要があります。 理想的にはビルドマシンの 2 つの違うドライブ上にあるとよいのですが、 ビルドマシンに NFS マウントされていてもかまいません。 ビルドセット自体が複数ある場合は、 /usr/src はひとつのビルドマシン上にあるべきです。 他のマシンからはそれを NFS マウントするようにしましょう。
最後にビルドセットの全てのマシン上の /etc/make.conf と /etc/src.conf がビルドマシンと一致していることを確認してください。 つまり、ビルドマシンはビルドセットのどのマシンもインストールしようとしている ベースシステムを全部ビルドしなければならないということです。 また、各ビルドマシンは /etc/make.conf にそれぞれのビルドマシンのカーネル名を KERNCONF で指定し、 ビルドマシンは自分自身のカーネルから順に全部のカーネル名を KERNCONF にリストアップしてください。 各マシンのカーネルもビルドするのであれば、 ビルドマシンは各マシンのカーネル設定ファイルを /usr/src/sys/arch/conf に持っていなければなりません。
さて、準備は整ったので、ビルドしましょう。 Section 18.7.7.2 に書いてあるようにカーネルとベースシステムを構築してください。 でも、まだインストールしないでください。 ビルドが終わったら、テストマシンに移り、 ビルドしたばかりのカーネルをインストールしてください。 テストマシンが NFS 経由で /usr/src と /usr/obj をマウントしているなら、 シングルユーザで再起動したときネットワークを使えるようにしてマウントする必要があります。 もっとも簡単な方法は、 マルチユーザモードで起動して、shutdown now を実行してシングルユーザモードに移行することです。 そうしたら、カーネルとベースシステムをインストールし、 いつもするように mergemaster を実行できます。 終わったら、 テストマシンを再起動して通常のマルチユーザ動作に戻します。
テストマシンにあるものすべてがちゃんと動いている確信が得られたら、 同じ手順でビルドセットの他のマシンにも新しいソフトウェアをインストールします。
ports ツリーにも同じアイデアが使えます。 最初に重要な点は、 ビルドセットのすべてのマシンに同じマシンの /usr/ports をマウントすることです。 そして、distfiles を共有するために、 /etc/make.conf を適切に設定します。 NFS マウントによってマップされる root ユーザが何であれ、DISTDIR はそのユーザが書き込める共通の共有ディレクトリに設定する必要があります。 各マシンは WRKDIRPREFIX を自分のマシンのビルドディレクトリに設定しなければなりません。 最後に、パッケージをビルドして配布しようとしているなら、 DISTDIR と同じように PACKAGES ディレクトリも設定してください。
FreeBSD は、高性能なネットワークサーバとして最も広く使用されているオペレーティングシステムの 1 つです。 各章の内容は以下の通りです。
シリアル通信
PPP と PPP オーバイーサネット (PPPoE)
電子メール
ネットワークサーバの運用
ファイアウォール
その他の高度なネットワークに関する話題
各章は、必要になった時に個別に参照できるように構成されています。 どの順番で読んでも構いませんし、ネットワーク環境で FreeBSD を使うのに、 すべてを読み通す必要がある、というわけでもありません。
Unix は現在に至るまで、常にシリアル通信機能をサポートしていました。 実際、本当に初期の Unix マシンは、ユーザとの入出力にシリアル通信を使っていました。 10 文字毎秒のシリアルプリンタ、 キーボードから構成された “端末(terminal)” が広く使われていた当時とは、 何もかもがすっかり変わっています。この章では、FreeBSD でシリアル通信を行なういくつかの方法について説明しています。
Assembled from FAQ.
このセクションには、 シリアルポートについての一般的な情報が書かれていま す。 あなたが求めている情報が、もしここで見つからなかった場合には、 ハン ドブックの端末とダイアルアップのセクションを見てください。
ttydX (または cuaaX) デバイスは、アプリケーション上 でシリアルポートをオープンする時に使用する、 標準的なデバイスです。プロセスがデバイスをオープンする際、端末 I/O 設定の デフォルトセットが使用されます。これらの設定内容は、 次のコマンドで確認することができます。
# stty -a -f /dev/ttyd1
このデバイスの設定を変更した場合、その設定はデバイスが クローズされるまで有効です。デバイスが再びオープンされる時、 デフォルトの設定値に戻ります。 デフォルトの設定を変更するためには、 “初期状態” を設定した いデバイスをオープンして調節することができます。例えば、ttyd5 というデバイスに対して、デフォルトで CLOCAL モードを ON にして、8 bits の設定をおこない、 XON/XOFF フロー制御を行うように設定したい場合は、次のようにします。
# stty -f /dev/ttyid5 clocal cs8 ixon ixoff
このコマンドを記述するのに適しているファイルは、 /etc/rc.serial です。 アプリケーションがttyd5 をオープンするときに、 デフォルトでこの設定をおこなうようになります。これらの設定は、 好きなように変更することができます。
また、“固定状態” のデバイスに調節を行うことで、 ある一定の設定が アプリケーションに変更されることを防ぐこともできます。例えば、 ttyd5 のスピードを 57600 bps に固定したい場合には、次のようにします。
# stty -f /dev/ttyld5 57600
これで、ttyd5 をオープンして、 シリアルポートの転送スピードを 変更しようとするアプリケーションは 57600 bps に固定されるでしょう。
本来、デバイスの初期状態を変更したり設定を固定するのは、 root だけが行うべきです。 MAKEDEV スクリプトがデバイスエントリを作成する時は、 これをおこないません。
原作: Sean Kelly <kelly@ad1440.net>
28 July 1996
訳: 中根 雅文 <max@FreeBSD.org>
シリアル端末を利用することで、 コンピュータのコンソールのそばにいないと きや、 手近にネットワーク接続されているコンピュータがないときでも、 FreeBSD の機能を便利に、かつ安価に利用することができます。 ここでは、FreeBSD にシリアル端末を接続する方法を解説します。
もともと Unix システムにはコンソールがありませんでした。 ユー ザはコンピュータのシリアル ポートに接続された端末からログインして プログラムを利用していました。 ちょうどモデムと通信ソフトを使ってリモート のコンピュータにログインし、テキスト ベースのプログラムを利用するのと よく似ています。
最近の PC は、 高品質の画像を表示できるコンソールを搭載していま すが、 ほとんどすべての Unix 系 OS には未だにシリアル ポートを使ってログ インするための機能があり、FreeBSD でもこの機能がサポートされています。 現在使用されていないシリアル ポートに端末を接続することでシステムに ログインし、 通常はコンソールや Xウィンドウ システムの xterm のウィ ンドウ上で起動しているテキスト ベースのプログラムであれば何 でも利用することができます。
職場での利用ということで考えるならば、FreeBSD が動作しているコンピュー タに接続された何台ものシリアル端末を 各社員の机に配置するというようなこ とが可能です。また、 家庭での利用方法としては、余っている古い IBM PC や Macintosh を FreeBSD が動いているパワフルなコンピュータの端末として利 用することができます。普通ならシングルユーザのコンピュータを、 パワフ ルなマルチユーザのシステムに変えることができるのです。
FreeBSD では、以下に挙げる3種類の端末が利用できます。
以下は、それぞれについての解説です。
ダム端末は、シリアルライン経由でのコンピュータとの接続専 用のハードウェアです。ダム端末は、 テキストの送受信および表示ができる 程度の計算能力しかもっていないので、“dumb” (間抜け) というように呼ば れています。 この端末上でプログラムを実行することはできません。テキスト エディタ、コンパイラ、E-mail、 ゲームなどなどのプログラムを実行するのは、 ダム端末を接続しているコンピュータの方です。
Digital Equipment社の VT-100 や、Wyse社の WY-75 を初めとして、多くのメーカが何百種類もの ダム端末を作っています。ほとんどどんな種 類のダム端末でも FreeBSD に接続して使用できます。さらに、高性能の端 末の中には画像を取り扱えるものもありますが、 限られた数のソフトウェア パッケージしかこういった機能には対応していません。
ダム端末は、X ウィンドウ システムで提供されるようなグラ フィックアプリケーションを必要としない 職場で広く用いられています。
ダム端末 がテキストの表示およ び送受信の機能をそなえただけのものならば、言うまでもなく、 どんなPC もダム端末になり得ます。 必要なものは適切なケーブルと、そのPCの上 で動作する端末エミュレーション を行うソフトウェアのみです。
このような環境は、家庭においてよく利用されます。 たとえば、あなたの同居 人が FreeBSD のコンソールを専有している時などに、あまりパワーのないコ ンピュータを FreeBSD システムにシリアル端末として接続し、 その端末上で テキストだけを用いる作業をおこなうことができます。
X 端末は、既存のものの中で最も洗練された種類の端末といえ ます。X 端末は、たいていの場合シリアル ポートではなく、 イーサネッ トのようなネットワークを利用した接続をおこないます。また、 アプリケーション の利用においても、 テキストベースのものだけでなく、X アプリケーション の利用が可能です。
ここでは、参考までに 端末について紹介しただけで、X 端 末の設定や利用についての解説は おこないません。
シリアル端末を FreeBSD システムに接続するためには、 適切なケー ブルと、 端末を接続するためのシリアルポートが必要です。ここでは、これ らについて説明します。もし既にあなたの利用したい端末と、 その端末 を接続するためのケーブルについてよく理解していれば、 設定 の章まで読み飛ばしてください。
端末の接続は、シリアルポートを利用します。そこで、端末を FreeBSD システムに接続するためには、シリアルケーブル (RS-232C ケーブ ルとも呼ばれています) が必要となります。
シリアルケーブルには2種類のケーブルがあります。 どちらの種類の ケーブルを使わなければいけないかは、 どんな端末を接続したいかによります。
もし、PC を端末として利用したい場合は、ヌルモデム ケーブル (リバースケーブルもしくは クロスケーブルと呼ばれることもしばしばあります) を使用してください。ヌルモデムケーブルは、 コンピュータ同士や端末同士を接続するために用い られるケーブルです。
もし、本物の端末を接続するのであれば、その端末につい てきたドキュメントからどのようなケーブルを 使うべきか調べてください。も しドキュメントがない場合は、 まず ヌルモデム ケーブルを試してみて、うまくいかない場合は スタンダード ケーブル (しばしばストレートケーブルと呼 ばれます) を試してみてください。
また、端末側と FreeBSD 側の 両方の シリアルポート の形状が、 あなたが使用しようとしているケーブルについているコネクタの形 状と一致していなければなりません。
ヌルモデムケーブル (またはリバースケーブルあるいはクロ スケーブル) は、たとえば “signal ground” 信号のように、いくつかの信 号はそのまま通しますが、 他の信号は途中で入れ替えて通します。たとえば、“send data” 信号のピンは、反対側のコネクタの “receive data” 信号の ピンと繋がっています。
自分で使うケーブルは自分で作りたいということであれば、 以下にター ミナルを接続する際に推奨される ヌルモデムケーブルの結線を示しておきま す。この表では、 RS-232C の信号線の名前と、DB-25 コネクタ上のピンの番 号を示しています。
| Signal | Pin # | Pin # | Signal | |
|---|---|---|---|---|
| TxD | 2 | connects to | 3 | RxD |
| RxD | 3 | connects to | 2 | TxD |
| DTR | 20 | connects to | 6 | DSR |
| DSR | 6 | connects to | 20 | DTR |
| SG | 7 | connects to | 7 | SG |
| DCD | 8 | connects to | 4 | RTS |
| RTS | 4 | 5 | CTS | |
| CTS | 5 | connects to | 8 | DCD |
Note: DCD と RST では、コネクタ内部でピン4を5に接続し、 そして逆側のコネクタのピン8と接続します。
スタンダードシリアルケーブル (またはストレートケーブル) の場合は、すべての RS-232C 信号をそのまま通します。つまり、片方の “send data” 信号のピンは、逆側の “send data” 信号のピンと繋がっています。モデムを FreeBSD に接続するときや、一部の端末を接続するときにこのタイプの ケーブルを使用します。
シリアルポートは、FreeBSDが動作しているホスト コンピュータと端 末の間でデータのやりとりを行うために用いるデバイスです。 ここでは、現在存在するポートの種類と FreeBSD でのポートのアクセス方法について解 説します。
シリアルポートには何種類かのものがあります。 ケーブルを購 入したり自作したりする前に、 そのケーブルのコネクタの形状が端末および FreeBSD システムのポートの形状と一致していることを 確認してください。
ほとんどの端末は DB25 ポートを搭載しています。 FreeBSDが動作しているも のを含めて、PCは DB25 または DB9 ポートを搭載しています。マルチポート のシリアルカードの場合は、RJ-12 や RJ-45 のポートを搭載しているかもし れません。
利用されているポートの種類に関しては、 ハードウェアについてきたドキュメ ントを参照してください。 また、多くの場合、ポートの形状から判断すること もできるでしょう。
FreeBSDでは、/dev ディレクトリ内のエントリを介 してシリアルポートへのアクセスがおこなわれます。 2種類の異なったエン トリがあります。
着信用のポートの名前は、 /dev/ttydx ( x は 0から始まるポート番号) となっています。一般に端末の接続には 着信用ポートを用います。着信用のポートでは、 シリアルラインのデータ キャリア検出 (DCD) 信号がオンになっている必要があります。
発信用のポートの名前は、 /dev/cuaax となっています。 発信用のポートは普通モデムの接続に用い、端末の接続には 利用しません。ただ、 ケーブルまたは端末がキャリア検出信号を使えない タイプのものの場合は、 発信用のポートを使うとよいでしょう。
詳しくは、sio(4) のマニュアルをご覧ください。
たとえば、端末を一つ目のシリアルポート (DOS でいうところの COM1) に接 続したとすると、/dev/ttyd0 がこの端末を指すことになります。また、 二つ目のシリアルポート (COM2) ならば /dev/ttyd1 となり、 以下この形式のデバイスエントリを使います。
各シリアルポート、 特にマルチポートのシリアルカードを利用する ために、kernel の設定をおこなう必要がある場合がありますので、注意してくだ さい。詳しくは、FreeBSD カーネルのコンフィグレーション をご覧ください。
ここでは、端末からのログインを可能にするために必要な FreeBSD 側の設定について解説します。 既に端末を接続するポートが利用できるように kernel の設定をおこない、端末が接続されているものと考えて、解説を進め ます。
簡単に言えば、プロセス管理や初期化をおこなっている init プロセス に対して、 ログイン名を読み込み login プログラムを起動している getty を実行するように指示します。
これをおこなうには、/etc/ttys の内容を編集する必要があります。まず、su コマンドで root になって、/etc/ttys に以下の 変更を加えてください。
端末を接続するポートの /dev のエントリが含ま れている行がまだ存在しなければ、これを /etc/ttys に追加してく ださい。
/usr/libexec/getty が対象となるポートに対して 実行されるように指定してください。また、 /etc/gettytab ファイ ル内の適切な getty タイプのエントリを指定してください。
デフォルトのターミナルタイプを指定してください。
対象となるポートを “on” に設定してください。
そのポートが “secure” であるかどうかを指定してください。
init に /etc/ttys を読み込みなおさせてく ださい。
また、必要に応じて /etc/gettytab を変更し、上の 2で使用する getty のエントリを追加してください。 このドキュメントではこの方 法については特に解説しませんので、gettytab(5) および getty(8) のマニュアルをご覧ください。
以下では、上のステップについて詳しく解説します。 実例を用いて、何をす べきかを解説していきます。Wyse-50 と、 古い IBM の 286 マシン上で通信 ソフト Procomm を使って VT-100 エミュレーションをおこなっているものを端 末の例として紹介します。また、Wyse は 2番目のポートに、 286マシンは 6 番目のポート (マルチポートのシリアルカード上のポート) に接続します。
/etc/ttys について、 より詳しくは、ttys(5) のマニュアルをご覧 ください。
既にエントリがある場合を除いて、まず初めに /etc/ttys にエントリを追加しなければいけません。
/etc/ttys には、 FreeBSDシステム上のログインを許可するすべての ポートを記述します。たとえば、一つ目の仮想コンソール ttyv0 のエン トリもこのファイルにあります。このエントリのおかげで、 コンソールからの ログインが可能になっています。 このファイルには、他の仮想コンソール、シ リアルポートおよび仮想端末のエントリも含まれています。 端末を接続する 場合は、そのポートの /dev のエントリを、 /dev の部分 を省略して記述します。
FreeBSD のインストール当初の状態では、 ttyd0 から ttyd3 までの、初めの四つのシリアルポートのエントリが /etc/ttys に記述され ています。 これらのポートのいずれかに端末を接続する場合は、新たなエント リを追加する必要はありません。
ここで紹介している例では、 既にファイルにエントリが存在する 2番目のシリ アルポート、 ttyd1 に Wyse-50 を接続しています。 一方、6番目のシ リアルポートに接続する 286マシン用のエントリは、新たに追加してやらな ければなりません。以下に、エントリを追加した後の /etc/ttys か ら抜粋して示します。
ttyd1 "/usr/libexec/getty std.9600" unknown off secure ttyd5
次に、 端末からのログインを処理するプログラムの指定をおこな います。 FreeBSDでは、標準的には /usr/libexec/getty をこの目的 で利用しています。login: プロンプトを送り出しているのは、このプロ グラムです。
getty プログラムは、 コマンドラインパラメータとして、 getty タイプをとります。ただし、 このパラメータは必須ではあ りません。 getty タイプは、 ボーレートやパリティといった、接続され た端末の特徴を表すものです。getty プログラムは、与えられた getty タイプに対応したこれらの特徴を /etc/gettytab から 読み込みます。
ファイル /etc/gettytab には、 新旧の端末に関する多数のエントリ が記述されています。 ほとんどの場合、std という文字列で始まる名前 のエントリを使えば、 接続された端末に対してログインセッションを提供す ることができます。これらのエントリを利用した場合、 パリティは無視されま す。110 bps から 115200 bps までのボーレートに対応した std のエン トリがあります。当然、 新たなエントリを追加することも可能です。 gettytab(5) のマニュアルに、 さらに詳しく解説されています。
/etc/ttys の getty タイプの設定をする際は、 端末側の通信 パラメータの設定が、getty タイプのものと一致していることを確認し てください。
紹介している実例では、Wyse50 はパリティなし 38400 bps で接続していま す。また、286 マシンの方は、パリティなし 19200 bps の接続です。以下は、 この段階でのこの二つの端末に関する /etc/ttys の設定です。
ttyd1 "/usr/libexec/getty std.38400" unknown off secure ttyd5 "/usr/libexec/getty std.19200"
ここで、実行するプログラムを指定している 2番目のフィールドが、ダブルクォー テーションに囲まれていることに注意してください。 こうしないと、getty のタイプの指定が、 つぎのフィールドとして判断されてしまう可 能性があるので、 十分注意することが必要です。
/etc/ttys の 3番目のフィールドには、 そのポートのター ミナルタイプのデフォルトを指定します。 ダイアルアップ用のポートの場合 は、 ユーザがどのタイプの端末あるいは 通信ソフトを利用してダイアルアップ してくるかは分からないので、unknown や dialup を記述するの が一般的です。一方、 直結された端末の場合、ターミナルタイプが変わるこ とはありませんから、 このフィールドには実際のターミナルタイプを記述し ます。
一般に、ユーザは .login や .profile などのファイル内で tset コマンドを使って、 ターミナルタイプをチェックし、必要ならば ターミナルタイプの入力を求めるプロンプトを 表示するようにします。この とき、 /etc/ttys の中でターミナルタイプが指定されていれば、 このプロンプトを表示せずに先に進むことが可能です。
FreeBSD 上で、どのターミナルタイプを利用できるかは、 /usr/share/misc/termcap をご覧ください。 このファイルには、お よそ 600 のターミナルタイプが定義されています。 必要ならば、新たなエン トリを追加することも可能です。詳しくは termcap(5) のマニュアルをご覧ください。
紹介している例では、Wyse-50 のターミナルタイプは Wyse-50 です (もっ とも他のタイプをエミュレートすることも可能ですが、ここでは Wyse-50 モー ドで使用します)。また、286マシン上では Procomm が VT-100 エミュレー ションをおこなうように設定されています。以下が、まだ未完成の /etc/ttys の関連部分です。
ttyd1 "/usr/libexec/getty std.38400" wy50 off secure ttyd5 "/usr/libexec/getty std.19200" vt100
/etc/ttys のつぎのフィールド、 つまり 4番目のフィー ルドは、 そのポートをアクティブにするかどうかの設定です。 このフィールド に on を指定すると、 init プロセスが2番目のフィールドに書かれ たプログラム、getty を実行し、 ログインのためのプロンプトを送り出 すようになります。 このフィールドに off を記述すると、 getty は起動されず、 よってこのポートからのログインもできなくなります。
ということで、当然このフィールドには on を指定します。以下が /etc/ttys です。それぞれのポートを on にしました。
ttyd1 "/usr/libexec/getty std.38400" wy50 on secure ttyd5 "/usr/libexec/getty std.19200" vt100 on
とうとう最後のフィールドの設定です。 (実際にはここでは触れ ませんが、 オプショナルなwindow の設定のフィールドも存在するので、 ほぼ最後のフィールドといった方が正確かもしれません) 最後のフィールド では、 そのポートが安全かどうかを指定します。
ここで、“安全” なポートとはどういうポートのことでしょう?
これは、root のアカウント (または、ユーザ ID が 0 のアカウント) がロ グインしてもよいポートということです。 安全でないポートでは、root のロ グインは許可されません。
では、どのように安全なポートとそうでない ポートを使えばよいでしょう?
ポートを安全ではないとすることで、 そのポートに接続された端末からは、root のログインを禁止することができます。FreeBSDシステムの root のパス ワードを知っている人は、 まず一般ユーザとしてログインしなければなりませ ん。 スーパユーザの特権を得るためには、そのうえで su コマンドを 利用しなければいけません。
これによって、root アカウントが不正に利用された場合に、 その経過を調査 する上で二つの記録を利用できるようになります。 login と su コマンドは、共にシステムのログに記録を残します (また、 ログイン は wtmp にも記録を残します。 )。
ポートを安全なものとして指定すると、その端末からの root のログインが可 能になります。root のパスワードを知っている人は、単に root としてログ インできます。この場合は、当然ログインの記録や su コマンドのログ は残りません。
では、どちらを使うべきでしょうか?
単純に “insecure” を使うのがよいでしょう。 公共の場所にある訳ではな い端末や、 鍵のかかったドアの内側にある端末にも “insecure” を指 定する方がよいでしょう。 スーパユーザの特権が必要な場合でも、ログイ ンして su を実行するのは、 ごく簡単なことなんですから。
以下に、ようやく完成した /etc/ttys のエントリに端末の場所を表 すコメントを追加したものを示します。
ttyd1 "/usr/libexec/getty std.38400" wy50 on insecure # Kitchen ttyd5 "/usr/libexec/getty std.19200" vt100 on insecure # Guest bathroom
FreeBSD をブートすると、最初に起動されるプロセス、 initが /etc/ttys を読み込んで、記述されているプログラムを利用可能な ポートに対して実行し、 ログインプロンプトを送り出させます。
/etc/ttys の編集が終わった後、 init に変更を認識させるた めに、わざわざ FreeBSD をブートしなおしたくはないでしょう。このような 場合のために、init は、 SIGHUP (hangup) シグナルを受信すると、 /etc/ttys を読み込みなおすようになっています。
/etc/ttys の変更を保存したら、 以下のようなコマンドを実行して、init に対して SIGHUP を送信します。
# kill -HUP 1
(init プロセスのプロセス ID は 常に 1です)
すべての設定が正しくおこなわれ、 すべてのケーブルがただしく接続されてい て、 かつ端末の電源が入っていれば、 端末にはログインプロンプトが表示され ているはずです。これで、 これらの端末からの最初のログインの準備が完了で す!
細心の注意を払って設定をおこなっても、 ときには端末の接続がう まくいかない場合があるでしょう。以下に、 よく見られる問題とその解決方法 を示します。
端末の電源が接続され、 スイッチが入っていることを確認してください。もし、PC を端末として利用している場合は、 通信ソフトが適切なシリアルポー トを利用する設定になっているかどうか確かめてください。
ケーブルがしっかりと端末と FreeBSDが動作しているコンピュータの両方に接続され ていることを確認してください。また、 正しい種類のケーブルを利用している か確かめてください。
端末と FreeBSD の間の通信速度とパリティの設定が一致していることを確認 してください。 出力をモニタに表示するタイプの端末の場合は、モニタ のコントラストと明るさの設定を確認してください。また、 出力が印刷 されるタイプの端末の場合は、 紙とインクが十分にあるかどうかを確かめてく ださい。
getty が動いていて、 端末を認識していることを確認してください。以 下のコマンドで動作中の getty プロセスのリストを得ることができます。
# ps -axww|grep getty
その端末に対する getty の情報が表示されるはずです。たとえば、以下 の表示例は、getty は 2番目のシリアルポート (ttyd1) に対し て /etc/gettytab 中の std.38400 のエントリを使って動作し ているということを示しています。
22189 d1 Is+ 0:00.03 /usr/libexec/getty std.38400 ttyd1
もし、getty プロセスが一つも動いていないようであれば、 /etc/ttys の中で、 そのポートを利用可能にする設定をしたかどう か確かめてください。また、kill -HUP 1 を確実に実行してください。
端末と FreeBSD の間の通信速度およびパリティの設定が一致していることを確 かめてください。また、getty プロセスの情報を調べて、適切な getty のタイプが使用されていることを確認してください。間違った getty タイプが使用されている場合は、 /etc/ttys を修正し てから、 kill -HUP 1 を実行してください。
端末または通信ソフトの設定で、“半二重 (half duplex)” あるいは “ローカ ルエコー” となっているところを、“全二重 (full duplex)” に変更してください。
原作: Guy Helmer <ghelmer@FreeBSD.org>.
訳: 中根 雅文 <max@FreeBSD.org>. 6 September
1996.
このドキュメントでは、FreeBSD で外部からのモデムによるアクセスを受け付 けるための設定に関してまとめてあります。このドキュメントは筆者が FreeBSD 1.0、1.1 および 1.1.5.1 での経験と、他の Unix 系 OS での経験を 基に書いたものですが、 必ずしも十分な内容でないかもしれませんし、掲載し た実例もあなたが今お使いの環境とは一致しないかもしれません。 また、筆者 はこのドキュメントに従って行われた作業で データが失われたりシステムが破 壊されるようなことがあっても、 一切責任をとれません。
筆者は、読者が FreeBSD に関する基本的な知識をもっていることを仮定して このドキュメントをまとめました。まず、FreeBSD が既にインストールされ ていて、Unix 系環境においてファイルの編集の方法やシステムに付属のマニュ アルを参照する方法を知っている必要があります。また、 以下に示すように、FreeBSD の特定のバージョンが必要となりますし、いくつかの用語に関する 知識、 そしてモデムや多少の配線に関する知識も必要となります。
まず、FreeBSD のバージョンは 1.1 以上を使用してください (バージョン 2.X でもかまいません)。FreeBSD 1.0 には、 2種類のシリアル ドライバ が含まれているので、 混乱の元となり得ます。また、FreeBSD のシリアル ディバイス ドライバ (sio) は、 バージョンを追う毎に改善されてき ていますので、 より新しいバージョンの FreeBSD を使用することで、よりよ い、 より効率の高いドライバを利用することができるはずです。
以下、簡単にいくつかの用語について解説しておきます。
Bits per Second の略で、 データの転送速度を表す単位。
Data Terminal Equipment の略。 たとえばコンピュータ本体のこと。
Data Communications Equipment の略で、 具体的にはモデムのこと。
EIA (米電気産業協会) のハードウェア間シリアル通信の標準規 格。
これらの用語やデータ通信一般に関して、 より詳しい情報が必要な場合は、The RS-232 Bible という本 (誰か ISBN 分かる方いませんか?) が参考 になると思います。
通信においてのデータ転送速度に関して、 このドキュメントでは “ボーレー ト” (baud rate) ではなく、“bps” (bits per second) をその単位として 使うことにします。これは、 ボーというのは一定時間に生じる電気的状態の変 化の数を表す単位にすぎず、“bps” という単位の方が実体に即しているか らです (少なくとも、 こういう表現をしておけば、意地の悪い人に怒られる こともないのではないかと思います)。
ダイアルアップのサービスに関していえば、 外づけのモデムの方が適している ようです。これは、 多くの外づけのモデムは設定を不揮発ラムに書き込んで半 永久的に保存することができますし、また RS-232 に関する重要な情報を知る ための点滅するライトによるインディケータが 搭載されているからです。点滅 するライトは、 システムを見に来た訪問者に強い印象を与えるという効果だけ でなく、モデムが適切に動作しているかどうかを知るためにも 有効です。
一方、たいていの内蔵型のモデムには 不揮発性ラムが搭載されていないため、ディップ スイッチの変更以外に設定を保存する方法がありません。また、も しインディケータがついていても、おそらくコンピュータのケース カバーが 外されていなければその状態を確認するのは 難しいでしょう。
以下のことに関して、予め知っておく必要があります。
コンピュータとモデムの間での通信が 行えるようにするための接続方 法。 (内蔵型の場合は接続の必要はありません)
お使いのモデムのコマンドについての知識、 あるいはコマンドの解説 の在処
(通信ソフトを使っての) モデムの不揮発ラムに保存可能な設定の変更 方法
1番目のモデムの接続はたいてい簡単に行えるはずです。 ほとんどのストレー ト シリアル ケーブルが使えるでしょう。 使用すべきケーブルは、両端に適 切なコネクタ (DB-25 または DB-9 の雄または雌) のついた、DCE-DTE 間接 続用のもので、 以下の信号線が接続されていなければなりません。
Transmitted Data (SD)
Received Data (RD)
Request to Send (RTS)
Clear to Send (CTS)
Data Set Ready (DSR)
Data Terminal Ready (DTR)
Carrier Detect (CD)
Signal Ground (SG)
FreeBSD で 2400bps 以上の転送速度を利用する場合には、 フロー制御のため に RTS 信号と CTS 信号が必要です。また、 接続の確立と回線の切 断を検出するために CD 信号を利用します。さらに、 DTR 信号を使っ て回線切断後のモデムのリセットを行います。ケーブルの中には、 総ての必要 な信号線が接続されていないものもありますので、 たとえば、回線切断後でも ログイン セッションが残ってしまうといった問題が発生した場合などには、 ケーブルに問題がある可能性もあります。
次に、お使いのモデムにもよりますが、 もしモデムのコマンドをよく覚えてい ない場合は、 モデムのマニュアルをすぐに参照できるようにしておいてくださ い。このドキュメントでは例として USR Sportstar の 14,400 bps の外づけ型 モデムのコマンドを示しておきます。 他の種類のモデムをお使いの場合も、参 考になるかもしれません。
最後に、FreeBSDで快適にモデムを使うためにも、 モデムの設定方法を知って おく必要があります。FreeBSD も他の Unix 系 OS と同様、回線の接続およ び切断の検出や回線の切断および回線切断後の モデムの初期化にハードウェア シグナルを利用します。FreeBSD は、モデムに対するコマンドの送信やモデ ムの状態の監視を行いません。パソコンで運用されている BBS への接続に慣 れている方にとっては、 ちょっとめんどうかもしれませんね。
FreeBSD では、NS8250-、NS16450-、NS16550- および NS16550A- に基づ いた EIA RS-232C (CCITT V.24) 規格のシリアル インタフェースをサポート しています。8250 および 16450 ベースのディバイスには1文字のキャラクタ バッファが搭載されています。また、16550 系のディバイスには、 16文字分 のバッファが搭載されていて、 はるかによいパフォーマンスを得られます (ただし、無印の 16550 では、バグがあって 16 文字バッファが利用できませ んので、可能であれば 16550A 系のディバイスを利用してください)。1文字 のバッファの物は、 16550 系のものと比べて OS にかける負荷が大きいので、16550A 系ディバイスの利用を強く推奨します。多数のシリアル ポートを利 用する場合や、負荷の高いシステムにおいては、 16550A 系ディバイスを使う ことで、 エラー発生率を低く押さえることができます。
FreeBSD は以下の手順でモデムからのログインを受付ます。 init から起 動された getty のプロセスが、割り当てられたシリアル ポート (この 例では /dev/ttyd0) がオープンされるのを辛抱強く待ちます。ps ax コマンドを実行すると、 以下のような出力が得られるはずです。
4850 ?? I 0:00.09 /usr/libexec/getty V19200 ttyd0
ユーザがモデムに電話をかけ、モデム同士が接続されると、 モデムの CD が検出されます。その結果、 kernel がキャリア信号を検出して、getty によるポートのオープンの処理が終了します。 getty は、login: プロンプトを指定されている初期回線速度で送信します。 getty は、 正常に文字列を受信できるかどうか監視し、通常の設定では、 もし異常な文字列を検出した場合 (理由としては、 getty の速度とモデ ムの接続速度が異なっているような場合が考えられます)、 正常に文字列が 受信できるまで、getty は速度を変え続けます。
getty が正しい速度を検出すれば、 ユーザに対して login: プロン プトが表示されるはずです。ユーザがログイン名を入力すると、 getty は /usr/bin/login を起動して、 パスワードの入力を要求し、その 後ユーザのシェルを起動します。
それでは、続いて設定についての解説です。
通常、FreeBSD の kernel は、MS-DOS の世界で COM1:、COM2: 、COM3: および COM4: と呼ばれる四つのシリアル ポートを 探す ように設定されています。また、FreeBSD では、現在のところ Boca の 1008 や 2016 のような、“単純な”マルチポートのシリアル インタフェースもサポー トしています (マルチポートのシリアル ボードに関しての kernel の設定 については、sio(4) のマニュアルを参照してください)。 デフォルト の kernel は、COM ポートだけを探します。
搭載されているシリアル ポートのいずれかを、kernel が認識しているかどう か確認したい場合は、kernel 起動時のメッセージを注意深く見ているか、あ るいは /sbin/dmesg コマンドを使って、 ブート時の出力メッセージ を確認してください。特に、 sio で始まるメッセージをよく見てくださ い。 参考までに、以下のコマンドで sio という文字列を含むメッセージ だけを表示することができます。
# /sbin/dmesg | grep 'sio'
たとえば、シリアル ポートを四つ持つシステムの場合は、 以下のようなシリ アル ポートに関するメッセージが kernel によって表示されます。
sio0 at 0x3f8-0x3ff irq 4 on isa sio0: type 16550A sio1 at 0x2f8-0x2ff irq 3 on isa sio1: type 16550A sio2 at 0x3e8-0x3ef irq 5 on isa sio2: type 16550A sio3 at 0x2e8-0x2ef irq 9 on isa sio3: type 16550A
もし、kernel に正常に認識されないポートがある場合は、 おそらくカスタマ イズした kernel を構築する必要があるでしょう。
kernel 構築と構築のための設定に関しては、BSD System Manager's Manual の “Building Berkeley Kernels with Config (config コマンドによる BSD kernel の構築) ” [ソース ファイルは /usr/src/share/doc/smm にあります]と “FreeBSD Configuration Options” [ /sys/conf/options および /sys/arch/conf/options.arch の arch の部分をたとえば i386 としたファイル ] を参照 してください。
kernel の設定と構築をするためには、kernel のソース (FreeBSD 1.1 では srcdist/srcsys.??、 FreeBSD 1.1.5.1 では srcdist/sys.??、 またFreeBSD 2.0 では総てのソース)を展開 する必要があります。
まだ自分のシステムの kernel 用のコンフィギュレーション ファイルを作っ ていない場合は、 /sys/i386/conf に cd して作成してくださ い。初めてコンフィギュレーション ファイルを作る場合は、まず GENERICAH (FreeBSD 1.x で BusTek の SCSI コントローラを使っている場合は GENERICBT) というファイルを、 YOURSYS にコピーしてください。ここ で、 YOURSYS はあなたのシステム名で、 大文字である必要があります。このファイルを編集して、 ディバイスに関する記述を変更します。
device sio0 at isa? port "IO_COM1" tty irq 4 vector siointr device sio1 at isa? port "IO_COM2" tty irq 3 vector siointr device sio2 at isa? port "IO_COM3" tty irq 5 vector siointr device sio3 at isa? port "IO_COM4" tty irq 9 vector siointr
システムに搭載されていないディバイスに関する記述は、 コメントアウトまた は削除してしまってかまいません。 Boca の BB2016 のようなマルチポートの シリアル ボードをお持ちの場合は、sio(4) のマニュアルを見て、マ ルチポートのボードのためのコンフィギュレーション ファイルの記述のし方 に関して確認してください。ディバイスのフラグの 指定方法がバージョンによっ て異なりますので、別のバージョンの FreeBSD で利用していたコンフィギュ レーション ファイルを流用する場合には 十分注意してください。
Note: なお、port "IO_COM1"、 IO_COM2、IO_COM3 および IO_COM4 は、 それぞれのポートの一般的なアドレスである 0x3f8、0x2f8、 0x3e8 および 0x2e8 を表します。また、割り込 み番号 4、3、5 と 9 は、それぞれ COM1: から COM4: のポー トで一般的に使用される IRQ です。また、ISA バスのコンピュータの場合、 一般的なシリアルポートは複数のポートで一つの IRQ を共有することが できませんので注意が必要です (マルチポートのシリアル ボードの 場合は、複数の 16550A ベースのポートで一つまたは二つの IRQ を共有する ための機構を備えています)。
コンフィギュレーション ファイルの編集が終わったら、 “Building Berkeley Kernels with Config (config コマンドによる BSD kernel の構築)” および config(8) のマニュアルにしたがって、 config コマンド を使って kernel 構築のためのディレクトリを作成した後、kernel の構築、 インストールおよびテストを行ってください。
kernel に組み込まれているほとんどのディバイスは、 /dev ディレ クトリにある、 “ディバイス スペシャル ファイル” を介してアクセスされ ます。 sio ディバイスの場合は、着信用の /dev/ttyd? およ び、発信用の /dev/cuaa? が利用されます。さらに、FreeBSD の 1.1.5 以降では、 初期化ディバイス (/dev/ttyi? と /dev/cuai0?) およびロッキング ディバイス (/dev/ttyld? と /dev/cual0?) も合わせて利用されます。初期化ディバイスは、通信 ポートがオープンされる度に、 そのポートの初期設定を行うために使われます。たとえば、 CTS/RTS によるフロー制御を行うモデムが接続されてい る場合の crtscts などのパラメータの初期化が行われます。ロッキング ディバイスは、ポートの設定をロックし、 他のユーザやプログラムにこれらを 変更されることのないようにするために利用されます。 通信ポートの設定、初 期化とロックおよび設定の変更に関しては、 それぞれ termios(4)、sio(4) と stty(1) のマニュアルをご覧ください。
ディバイス スペシャル ファイルの管理は、ディレクトリ /dev にあるシェル スクリプト MAKEDEV によって行います (FreeBSD 1.1.5 の MAKEDEV(8) のマニュアルの COM ポートに関する記述は、 かなりいい加減なので無視してください)。 MAKEDEV を使って、 COM1: (ポート 0) をダイアルアップのポートとして利用するためのディ バイス スペシャル ファイルを作るには、 /dev に cd して から、MAKEDEV ttyd0 と実行してください。 同様に、MAKEDEV ttyd1 とすることで、COM2: (ポート 1) 用のディバイス スペシャル ファイル を作成することができます。
MAKEDEV は、 /dev/ttyd? のディバイス ファイルだけでなく、 /dev/cuaa? (および FreeBSD 1.1.5 以降では総ての初期化ディバイ スとロッキング ディバイスのスペシャル ファイル) も作成します。さらに、もしシリアル端末用のスペシャル ファイル /dev/tty0? が存在すれ ば、それらの削除も行います。
ディバイス スペシャル ファイルの作成後、 これらのファイルのパーミション が適切に設定されていて、 これらのディバイスを利用してもよいユーザのみが 読み書きできるようになっていることを確認してください (特に /dev/cua* のパーミションには注意を払ってください)。この確認 を怠ると、 一般のユーザがあなたのモデムを使うことができるようなことにな りかねません。デフォルトの /dev/cua* のパーミションは、以下の ようになっていて、 たいていの場合適切なものだと思います。
crw-rw---- 1 uucp dialer 28, 129 Feb 15 14:38 /dev/cuaa1 crw-rw---- 1 uucp dialer 28, 161 Feb 15 14:38 /dev/cuaia1 crw-rw---- 1 uucp dialer 28, 193 Feb 15 14:38 /dev/cuala1
上の設定では、ユーザ uucp と、 グループ dialer に属するユーザ が発信用のディバイスを利用できます。
FreeBSD のシステムへのダイアル アップによるアクセスを実現するために編 集が必要と思われる設定ファイルが、/etc ディレクトリに三つあ ります。まず、 /etc/gettytab には、 /usr/libexec/getty デーモンの設定を記述します。つぎに、 /etc/ttys に保存されている情報から、 /sbin/init はど の tty ディバイスに対して getty のプロセスを実行するべきか判 断します。最後に、お使いの FreeBSD が 1.1.5.1 以降のものならば /etc/rc.serial スクリプトに、 それ以前のものならば /etc/rc.local スクリプトにシリアル ポートの初期化のためのコマ ンドを記述することができます。
Unix にダイアル アップ モデムを接続する方法には、 二つの考え方がありま す。一つの方法は、ダイアル インしてくるユーザの接続速度に関係なく、常 にモデムとローカルのコンピュータの RS-232 インタフェースの接続速度を一 定に保つように設定する方法です。 この設定の長所は、ユーザがダイアル イ ンして接続されると、 即座にシステムからのログイン プロンプトが送信され るということです。短所は、 システムが実際のモデム間の速度を知ることがで きないために、 Emacs のようなフル スクリーンのプログラムが、端末との接 続速度が遅い場合でも、 そのような場合に効果的な方法で画面出力を行わない 点です。
もう一つは、モデムの RS-232 インタフェースとコンピュータの接続速度を、 モデム間の接続速度に応じて変化させるような設定です。たとえば、 モデム間 の接続が V.32bis (14.4 Kbps) ならば、 モデムとコンピュータの間の接続を 19.2 Kbps とし、 モデム間の接続が 2400 bps の時には、モデムとコンピュー タ間も 2400 bps で接続するような設定をします。この場合、 getty は、モデムが返すリザルト コードからモデムとコンピュータの接続速度を認識す ることができませんので、getty は、 まず初期速度で login: とい う文字列を送信して、それに対する応答の文字列を監視します。 ここで、ユー ザ側の端末に無意味な文字列が表示された場合、 ユーザは意味のある文字列を 受信するまで <Enter> キーを繰り返し押さなければならない ということを知っていると仮定しています。 もし接続速度が間違っている場合、getty は、 ユーザから送られた文字を無意味な文字列として扱い、次の 速度を試します。そして、ここで再度 login: プロンプトを送信します。 この一連の動作が異常な回数繰り返されることも考えられますが、 普通は1度 か2度のキー入力があれば、 ユーザはまともなプロンプトを受信できます。こ のログインの動作が前者の固定速度による方法に 比べて美しくないのは明らか ですが、この方法では、 低速度で接続しているユーザに対するフル スクリー ンのプログラムからのレスポンスが改善されます。
このドキュメントでは、両方の設定方法について解説しますが、 どちらかとい うとモデム間の速度に応じて RS-232 インタフェースの速度が変化するような 設定の方に偏った説明になってしまうと思います。
/etc/gettytab は、getty(8) の設定ファイルで、termcap(5) と同様の形式で記述されます。ファイルのフォーマットや定 義できる機能についての詳細については、gettytab(5) のマニュアルを ご覧ください。
getty が利用するモデムとコンピュータの接続速度に関する情報を /etc/gettytab に記述する必要があります。もし、2400 bps のモ デムをお使いになるのであれば、既存の D2400 のエントリがそのまま利 用できるでしょう。このエントリは FreeBSD の 1.1.5.1 の gettytab には既に含まれていますので、 あなたの FreeBSD のバージョンでこのエント リが存在しているのであれば、 新たに追加する必要はありません。
#
# Fast dialup terminals, 2400/1200/300 rotary (can start either way)
#
D2400|d2400|Fast-Dial-2400:\
:nx=D1200:tc=2400-baud:
3|D1200|Fast-Dial-1200:\
:nx=D300:tc=1200-baud:
5|D300|Fast-Dial-300:\
:nx=D2400:tc=300-baud:
高速モデムをお使いの場合は、おそらく /etc/gettytab に新たなエ ントリを追加する必要があります。以下の例は、14.4 Kbps のモデムを、最 大インタフェース速度を 19.2 Kbps として利用するためのエントリです。
#
# Additions for a V.32bis Modem
#
um|V300|High Speed Modem at 300,8-bit:\
:nx=V19200:tc=std.300:
un|V1200|High Speed Modem at 1200,8-bit:\
:nx=V300:tc=std.1200:
uo|V2400|High Speed Modem at 2400,8-bit:\
:nx=V1200:tc=std.2400:
up|V9600|High Speed Modem at 9600,8-bit:\
:nx=V2400:tc=std.9600:
uq|V19200|High Speed Modem at 19200,8-bit:\
:nx=V9600:tc=std.19200:
上記の例を利用した場合、FreeBSD 1.1.5 以降ではパリティなし、8ビットの 接続が行われます。FreeBSD 1.1 では、:np: パラメータをファイルの 先頭の std.xxx のエントリに追加することで、パリティなし、 8ビットの接続が行われますが、 このパラメータを追加しなければ接続は偶数 パリティ、 7ビットになります。
上記の例では、まず 19.2 Kbps (V.32bis) によるモデムとコンピュータ間の 接続を試み、続いて 9600 bps (V.32)、2400 bps、1200 bps、300 bpsと順に 試み、再び 19.2 Kbps による接続を試みるという循環に入ります。この接続 速度の循環は、nx=(“next table”) の機能で実現されています。ま た、 各行はそれぞれ tc=(“table continuation”) の機能を使って、 その他の接続速度に依存した “標準的な” 設定を取り込んでいます。
もし、お使いのモデムが 28.8 Kbps であったり、14.4 Kbps の圧縮転送の機 能を有効に利用したい場合は、19.2 Kbps よりも速い速度を利用するように 設定する必要があります。 以下に 57.6 Kbps から接続を試みる gettytab の設定例を示しておきます。
#
# Additions for a V.32bis or V.34 Modem
# Starting at 57.6 Kbps
#
vm|VH300|Very High Speed Modem at 300,8-bit:\
:nx=VH57600:tc=std.300:
vn|VH1200|Very High Speed Modem at 1200,8-bit:\
:nx=VH300:tc=std.1200:
vo|VH2400|Very High Speed Modem at 2400,8-bit:\
:nx=VH1200:tc=std.2400:
vp|VH9600|Very High Speed Modem at 9600,8-bit:\
:nx=VH2400:tc=std.9600:
vq|VH57600|Very High Speed Modem at 57600,8-bit:\
:nx=VH9600:tc=std.57600:
もし、お使いの CPU が低速のものであったり、CPU に対する負荷が高い場合 で、16550A 系のシリアル ポートをお使いでない場合、57.6 Kbps の接続に おいて、sio の “silo” エラーが発生するかもしれません。
/etc/ttys には、 init が監視すべき tty のリストを記 述します。さらに、/etc/ttys は、 login に対してセキュリ ティに関する情報を提供します。(ユーザ root は、secure とマー クされている tty のみからログインできます)。詳しくは ttys(5) のマニュアルをご覧ください。
/etc/ttys の既存の行を変更するか、 あるいは新しい行を追加して、init が自動的に新しいダイアル アップ サービス用のポートに対して getty プロセスを起動するようにしてください。書式は、固定速度の設 定か可変速度の設定かに関わらず、以下のとおりです。
ttyd0 "/usr/libexec/getty xxx" dialup on
1番目の項目は、このエントリで対象とするディバイス スペシャル ファイル です。上の例では ttyd0 として、 /dev/ttyd0 を getty に監視させることを表しています。2番目の項目 "/usr/libexec/getty xxx" (xxx は初期段階で使われる gettytab のエントリ に置き換えてください) が、init がこのディバイスに対して起動する プロセスです。3番目の dialup は、デフォルトのターミナル タイプで す。4番目の on は、 この行が有効であることを init に対して示 しています。5番目の項目に secure を指定することもできますが、これ は、 たとえばシステムのコンソールのように、 物理的に安全な端末に対しての み指定するようにしてください。
デフォルトのターミナル タイプ (上記の例では dialup) は、ローカル のユーザの好みによって異なってきます。ユーザがログイン スクリプトをカ スタマイズして、ターミナル タイプが dialup の時には自動的に他のター ミナル タイプを設定できるように、ダイアル アップのポートのデフォルトの ターミナル タイプには dialup が伝統的に用いられています。 しかし、筆者のサイトでは、ほとんどのユーザが VT102 エミュレイションを使ってい るので、ダイアル アップのポートのデフォルト ターミナル タイプとして vt102 を指定しています。
/etc/ttys の修正がすんだら、 以下のようなコマンドを使って init プロセスに HUP シグナルを送り、/etc/ttys を 読み込み直させてください。
# kill -HUP 1ただ、もし初めてシステムを設定しているのであれば、 モデムが適切に設定さ れて接続されるまでは、init に対してシグナルを送らない方がいいか もしれません。
速度を固定する設定では、/etc/ttys の中で、getty に対し て固定速度のエントリを指定する必要があります。たとえば、 以下の例はポー トのスピードが 19.2 Kbps に固定されたモデムのための ttys のエント リです。
ttyd0 "/usr/libexec/getty std.19200" dialup on
別の速度でモデムのポートのスピードを固定したい場合は、 /etc/gettytab から適切なエントリを選んで、上の例の std.19200 の部分を std.speed として、適切な速度のも のに置き換えてください。
可変速度の設定では、ttys のエントリが、/etc/gettytab の中の適切な “自動速度調整” の初期設定のエントリを参照していなければな りません。 たとえば、もし前述の 19.2 Kbps から接続を試みる可変速度の設 定例 (V19200 の gettytab エントリ)をそのまま ttys に追 加したのであれば、 ttys エントリは以下のようになります。
ttyd0 "/usr/libexec/getty V19200" dialup on
V.32、V.32bis または V.34 モデムのような高速モデムを利用する場合、ハー ドウェア (RTS/CTS) フロー制御を行う必要があります。FreeBSD kernel のモデム ポートにハードウェア フロー制御のフラグを設定するため の stty コマンドを、FreeBSD 1.1.5.1 以降では /etc/rc.serial に、FreeBSD 1.1 では /etc/rc.local に 記述できます。
たとえば、FreeBSD 1.1.5.1 の /etc/rc.serial のサンプルは以下 のとおりです。
#!/bin/sh # # Serial port initial configuration stty -f /dev/ttyid1 crtscts stty -f /dev/cuai01 crtscts
この例では、termio のフラグ crtscts をシリアル ポート #1 (COM2:) のダイアル インおよびダイアル アウトの初期化ディバイスに 設定しています。
古い FreeBSD 1.1 では、以下のエントリが crtscts フラグを設定する ために /etc/rc.local に追加されていました。
# Set serial ports to use RTS/CTS flow control stty -f /dev/ttyd0 crtscts stty -f /dev/ttyd1 crtscts stty -f /dev/ttyd2 crtscts stty -f /dev/ttyd3 crtscts
FreeBSD 1.1 には初期化のためのディバイス スペシャル ファイルがないので、ディバイス ファイルそのものにフラグを設定して、その後はフラグをクリア してしまうような極悪人が現れないことを願うしかありません。
もし、あなたのモデムがパラメータを不揮発ラムに 保存できるタイプならば、MS-DOS 上の Telix や FreeBSD 上の tip などのような通信プログラム を使って、 パラメータを設定してください。getty が利用する初期速度でモデムに接続して、以下の条件を満たすよ うに不揮発ラムの設定を変更してください。
接続時に CD 信号がオンになる
接続時に DTR がオンになり、 DTR オフで回線を切断しモ デムをリセットする。
送信時フロー制御には CTS を利用。
XON/XOFF によるフロー制御を行わない。
受信時のフロー制御は RTS を使用。
Quiet mode (リザルト コードを返さない)
コマンド エコーを返さない。
これらを実現するためのコマンドやディップ スイッチの設定に関しては、モ デムのマニュアルを参照してください。
以下に、USRobotics Sportster の 14,400 bps の外づけモデムの設定例を示 しておきます。
ATZ AT&C1&D2&H1&I0&R2&W
ことのついでに、たとえば、V42.bis や MNP5 のデータ圧縮を使用するかど うかなどのモデムの他の設定について確認、 調整しておくのもよいかもしれま せん。
さらに、USRobotics Sportster の 14,400 bps の外づけモデムでは、以下の ようなディップ スイッチの設定も必要です。他のモデムをお使いの方も、以 下の例を設定の参考にしてください。
スイッチ1: UP -- DTR 標準
スイッチ2: 無視 (リザルト コードを単語形式にするか数値形式にす るか)
スイッチ3: UP -- リザルト コードを返さない
スイッチ4: DOWN -- コマンド エコーを返さない
スイッチ5: UP -- 自動着信
スイッチ6: UP -- CD 標準
スイッチ7: UP -- 不揮発ラムからデフォルト値をロードする
スイッチ8: 無視 (Smart Mode/Dumb Mode)
リザルト コードを返さないように設定しておかないと、 getty が誤っ て login: プロンプトをコマンド モードのモデムに送信してしまった場 合に、 モデムがこの入力をエコーしたり、この入力に対するリザルト コード を返してしまったりすることになります。この結果として、 モデムと getty の間で延々と無意味なやりとりが続いたというケースを聞いたこ とがあります。
固定速度の設定では、 モデムとコンピュータ間の通信速度をモデムとモデム間 の接続速度に関係なく、常に一定に保つように、 モデムを設定する必要があり ます。USRobotics Sportster の 14,400 bps 外づけモデムの場合、以下のコ マンドで、 モデムとコンピュータ間の速度が、コマンド送信時の速度に固定さ れます。
ATZ AT&B1&W
可変速度の設定では、シリアル ポートの速度が、 着信速度に応じて変化する ように設定しなければいけません。 USRobotics Sporster の 14,400 bps 外 づけモデムの場合、 以下のコマンドで、エラー訂正機能を利用した通信の場合 は、 コマンドを送信した時の通信速度にシリアル ポートの速度を固定し、エ ラー訂正機能を利用しない接続では、 シリアル ポートの速度が変化するよう に設定されます。
ATZ AT&B2&W
ほとんどの高速モデムには、 現在の設定をある程度人間にも理解できる形式に して表示させるコマンドがあります。USRobotics Sporster の 14,400 bps 外づけモデムの場合は、ATI5 コマンドで、現在の不揮発ラムの設定を 表示することができます。 さらに、ディップ スイッチの設定も含めた現在の 設定を確認するためには、ATZ コマンドを送信してから、ATI4 コマンドを送信してください。
他のメーカーのモデムをお使いの場合は、 モデムのマニュアルで設定値の確認 方法を確認してください。
以下の手順でダイアル アップ モデムの動作を確認することができます。
モデムを FreeBSD システムに接続し、 システムをブートします。あなたのモ デムにモデムの状態を確認するためのインジケータがあれば、 DTR のイ ンジケータの状態に注目してください。もし、 システムのコンソールに login: プロンプトが表示された時に、DTR のインジケータが点灯 すれば、FreeBSD が適切なポートに対して getty を起動し、モデムへ の着信を待っている状態であることを意味しています。
もし DTR のインジケータが点灯しない場合は、システムのコンソールか ら FreeBSD にログインして、ps ax を実行し、 FreeBSD が 適切なポー トに対してgetty プロセスを起動しようとしているのかどうか確認して ください。 プロセスに関する情報の中に、以下のような行が表示されるはずで す。
114 ?? I 0:00.10 /usr/libexec/getty V19200 ttyd0 115 ?? I 0:00.10 /usr/libexec/getty V19200 ttyd1
モデムにまだ着信がない状態の時に、 以下のように上とは異なる出力があった 場合、getty は既にモデム ポートのオープンを終了したということに なります。
114 d0 I 0:00.10 /usr/libexec/getty V19200 ttyd0getty は、CD (carrier detect) 信号がオンの状態になるまで、 ポートのオープンを完了することはできませんので、 この場合は接続に問題が あるか、あるいはモデムの設定に問題があることが考えられます。
もし、適切なポートをオープンしようとしている getty が見あたらない 場合は、再度 /etc/ttys の内容を確認し、 書式などに誤りがないか 調べてみてください。また、ログ ファイル /var/log/messages に init および getty から何か出力がないかどうかも確認してみてく ださい。 もし何かメッセージが記録されていたら、再度 /etc/ttys、 /etc/gettytab の二つの設定ファイルと、 ディバイス スペシャル ファイル /dev/ttyd? を確認し、 記述に誤りがないか、足りないエ ントリがないか、 足りないディバイス スペシャルファイルがないかといった 点について調べてみてください。
実際にモデムを使って別のコンピュータから 接続してみてください。この時、8ビット、パリティなし、 1ストップ ビットで接続するようにしてください。 接続後すぐにプロンプトが返ってこない場合や、 無意味な文字列が表示される 場合は、1秒に1回くらいの割合で <Enter> キーを押してみて ください。 しばらくたって、なおも login: プロンプトが現れない場合 は、BREAK 信号を送信してみてください。この時、端末側で使って いるモデムが高速モデムならば、 このモデムのインタフェースの接続速度を固 定してから、 再度ダイアル インしてみてください。(たとえば、USRobotics Sportster の場合は、AT&B1)
それでもまだ login: プロンプトが表示されない場合は、 /etc/gettytab の以下の点について再度確認してみてください。
/etc/ttys の対応する行の 2番目の項目で、/etc/gettytab の中で定義されているエントリが指定されているか
各 nx= で /etc/gettytab の中で定義されているもの が指定されているか
各 tc= で /etc/gettytab の中で定義されているもの が指定されているか
もしダイアル インしても、FreeBSD システム側のモデムが応答しない場合は、FreeBSD 側のモデムが DTR がオンになった時に電話にでるように設定さ れているかを確認してください。 もしモデムの設定に問題がなさそうならば、 モデムのインジケータ (がもしあれば) で、 DTR がオンになっているか を確認してください。
この確認のステップを数回繰り返しても うまくいかない場合は、一度休憩して、 しばらくたってから挑戦してみましょう。それでもだめなら、 おそらく FreeBSD general questions メーリングリスト にあなたのモデムについての情報と問題を書いたメールを送れ ば、 メーリング リストのメンバーが問題の解決を助けるべく努力してくれる でしょう。
以下の方々から、 多くのコメントやアドバイスをいただきました。ここに謝意 を表します。
<kelly@fsl.noaa.gov> 多くのすばらしい助言をいた だきました
原作: FAQ からの情報
訳: 丸山 剛司 <tmaruya@nnc.or.jp>. 31 December
1996.
以下はモデムを利用して他のコンピュータと 接続する方法を説明しています。 これはリモートホストとターミナル接続を確立するための 適切な方法です。
これは BBS に接続するときによく使います。
この種の接続は PPP 接続に問題がある場合、Internet 上にあるファイルを 転送するのに非常に役に立ちます。FTP で何らかのファイルを転送したいのに PPP 接続を確立できない場合は、ファイルを FTP 転送するためにターミナルセッション を利用します。そして ZMODEM を利用してファイルを転送します。
あなたのシステムで tip や cu というプログラムは uucp や dialer というグループに所属しているユーザのみが 実行できるようになっているのでしょう。リモートホストやモデムを 利用できる dialer のグループにあなたのアカウントを 加えましょう。
もしくは下記のコマンドを使うことによって、そのシステムで tip や cu を誰でも使えるようになります:
# chmod 4511 /usr/bin/tip
このコマンドは cu に対しておこなう必要はありません、それは cu は tip に対するハードリンクだからです。
実際、tip の マニュアルページは古くなっています。既に Hayes ダイアラが組み込まれています。/etc/remote ファイル中で at=hayes を使ってください。
Hayes ドライバは、最近のモデムの新しい機能である BUSY、NO DIALTONE、 CONNECT 115200などのメッセージを 認識できるほど賢くはなく、単に混乱を起こすだけです。 tipを使う場合には、 (ATX0&W とするなどして) これらの メッセージを表示させないようにしなくてはいけません。
また、tip のダイアルのタイムアウトは 60秒です。モデムの タイムアウト設定はそれより短くすべきであり、 そうしないと tip は通信に問題があると判断するでしょう。 ATS7=45&W を実行してください。
実際、デフォルトの tip は Hayes の完全なサポートを しているわけではありません。解決方法は /usr/src/usr.bin/tip/tip の下の tipconf.h を変更することです。 もちろんこれにはソース配布ファイルが必要です。
#define HAYES 0 と記述されている行を #define HAYES 1 と変更し、そして make、make install を実行します。これでうまく動作するでしょう。
/etc/remote ファイルの中で “direct” エントリを作ります。たとえばモデムが 1番目のシリアルポートである /dev/cuaa0 に接続されている場合、次のようにします:
cuaa0:dv=/dev/cuaa0:br#19200:pa=none
モデムがサポートする最大の bps レートを br フィールドに使います。そして tip cuaa0 を実行すると、モデムが利用できるようになります。
/dev/cuaa0 がシステムに存在しない場合は、次のようにします:
# cd /dev # ./MAKEDEV cuaa0
または root になって以下のように cu コマンドを実行します:
# cu -lline -sspeed
line にはシリアルポートを指定します (例えば /dev/cuaa0)。そして speed には接続する速度を指定します (例えば 57600)。その後 AT コマンドを実行したら、~. と入力すれば終了します。
電話番号 (pn) 機能の中での @ 記号は、 tip に /etc/phone にある電話番号を参照するように伝えます。しかし @ の文字は /etc/remote のような 設定ファイルの中では特殊文字となります。 バックスラッシュを使ってエスケープをおこないます:
pn=\@
“generic” エントリと呼ばれるものを /etc/remote に追加します。 例えば次のようにします:
tip115200|Dial any phone number at 115200 bps:\ :dv=/dev/cuaa0:br#115200:at=hayes:pa=none:du: tip57600|Dial any phone number at 57600bps:\ :dv=/dev/cuaa0:br#57600:at=hayes:pa=none:du:
そして
# tip -115200 5551234
のように利用できます。 tip より cu を使いたい場合、 cu の generic エントリを使います:
cu115200|Use cu to dial any number at 115200bps:\ :dv=/dev/cuaa1:br#57600:at=hayes:pa=none:du:そして
# cu 5551234 -s 115200
と実行します。
tip1200 や cu1200 用のエントリを記述し、適切な通信速度を br フィールドに設定します。tip は 1200 bps が正しいデフォルト値であるとみなすので、 tip1200 エントリを参照します。もちろん 1200 bps を使わなければならないわけではありません。
毎回接続されるのを待って CONNECT <host> と入力する かわりに、tip の cm 機能を使います。 例えば、/etc/remote に次のようなエントリを追加します:
pain|pain.deep13.com|Forrester's machine:\ :cm=CONNECT pain\n:tc=deep13: muffin|muffin.deep13.com|Frank's machine:\ :cm=CONNECT muffin\n:tc=deep13: deep13:Gizmonics Institute terminal server:\ :dv=/dev/cuaa2:br#38400:at=hayes:du:pa=none:pn=5551234:これで、tip pain や tip muffin と実行すると pain や muffin のホストに接続することができ、 tip deep13 を実行するとターミナルサーバに接続します。
これは大学に電話回線がいくつかあって 数千人の学生が接続しようとする 場合によくある問題です。
あなたの大学のエントリを /etc/remote ファイルに作成して、pn のフィールドには @ を使います:
big-university:\ :pn=\@:tc=dialout dialout:\ :dv=/dev/cuaa3:br#9600:at=courier:du:pa=none:
そして /etc/phone ファイルに大学の電話番号の一覧を書きます:
big-university 5551111 big-university 5551112 big-university 5551113 big-university 5551114
tip は一連の電話番号を試みて、 最終的に接続できなければあきらめます。 リトライを続けさせたい場合は、tip を while ループに入れて 実行します。
CTRL+P は通常 “force (強制)” 文字であり、 tip に次の文字が リテラルデータであることを伝えます。force 文字は “変数の設定” を意味する ~s エスケープによって他の文字にすることができます。
~sforce=single-char と入力して改行します。single-char は、任意の 1バイト文字です。 single-char を省略すると NUL 文字になり、これは CTRL+2 や CTRL+SPACE を押しても入力できます。また、 single-char に SHIFT+CTRL+6 を割り当てる方法を使っているターミナルサーバもあります。
$HOME/.tiprc に次のように定義することで、任意の文字を force 文字として利用できます:
force=<single-char>
CTRL+A を押してしまい、caps-lock キーが壊れている場合のために設計された tip の “raise character” モードに入ったのでしょう。 既に述べたように ~s を使って、 raisechar をより適切な値に 変更してください。もしこれら両方の機能を使用しないのであれば、 force 文字と同じ設定にすることもできます。
以下は CTRL+2 や CTRL+A などを頻繁に使う必要のある Emacs ユーザにうってつけの .tiprc ファイルのサンプルです:
force=^^ raisechar=^^
^^ は SHIFT+CTRL+6 です。
もし他の Unix のシステムと接続しているなら、 ~p(put) や ~t(take) でファイルの送受信ができます。これらのコマンドは 相手のシステムの上で cat や echo を実行することで 送受信をします。 書式は以下のようになります:
~p ローカルのファイル名 [リモートのファイル名]
~t リモートのファイル名 [ローカルのファイル名]
この方法ではエラーチェックをおこないませんので、zmodem などの他のプロトコルを使った方がよいでしょう。
ファイルを受信するには、 リモート側で送信プログラムを起動します。そして ~C rz と入力すると、ローカル側へのファイルの受信が 始まります。
ファイルを送信するには、 リモート側で受信プログラムを起動します。そして ~C sz files と入力すると、 リモート側への ファイルの送信が始まります。
原作: 横田 和隆 <yokota@FreeBSD.org>、Bill Paul <wpaul@FreeBSD.org>
この文書はほとんどが Bill Paul <wpaul@FreeBSD.org>
氏の /sys/i386/boot/biosboot/README.serial
に基づいています。
FreeBSD/i386 オペレーティングシステムは、コンソールとして シリアルポート上のダム端末しか持たないシステムでも起動できます。 この様な構成はきっと次のような二種類の人達に便利でしょう。それは、 キーボードやモニタのないマシンに FreeBSD をインストールしたいシステム管理者と、 カーネルやデバイスドライバをデバッグしたい開発者です。
バージョン 3.1 から、FreeBSD/i386 は 3 ステージ構成のブートストラップ を用いるようになりました。最初の 2 つのステージは、 ブートディスクにある FreeBSD スライスの最初に格納されている、 ブートブロックのコードが行います。 それからブートブロックは、第 3 ステージのコードとしてブートローダ (/boot/loader) を読み込み、実行します。 (ブートプロセスの詳細については boot(8) と loader(8) をご覧下さい。)
シリアルコンソールを設定するためには、ブートブロックコード、 ブートローダコード、カーネルを設定する必要があります。
FreeBSD バージョン 3.0 では、ブートローダはないので ブートストラップは 2 ステージです。つまり、ブートブロックが直接 カーネルをメモリに読み込みます。もしあなたが FreeBSD 3.0 を使って いるなら、このセクションでブートローダについて述べている部分は無視してください。 それでもシリアルポートをコンソールとして使うのに支障はありません。
FreeBSD バージョン 2.X と 3.X のシリアルポートドライバ sio(4) は全く違いますので、設定も異なった方法で行う必要があります。 この章ではバージョン 2.X システム用の設定については扱っていません。 もしあなたが古いバージョンの FreeBSD を使っているなら、かわりに /sys/i386/boot/biosboot/README.serial を調べてみてください。
シリアルケーブルを用意してください。
ヌルモデムケーブル、 もしくは標準シリアルケーブルとヌルモデムアダプタが必要となります。 シリアルケーブルについては Section 19.3 をご覧下さい。
キーボードをはずして下さい。
たいていの PC システムは Power-On Self-Test (POST) の間にキーボードを検出し、もし見つからなければエラーと なります。また、キーボードがないことを大きな音で知らせ、 キーボードが接続されるまでは起動を中断するようなマシンもあります。
コンピュータがエラーを表示していても、 とにかく起動するなら特別な対応は必要ありません (Phoenix BIOS を搭載しているマシンには、 “Keyboard failed” と表示されても、正常に起動するものがあります)。
あなたのコンピュータがキーボードを接続していない状態で 起動しないようなら、(もし可能ならば) エラーを無視するように BIOS を設定する必要があります。設定方法の詳細については、 マザーボードのマニュアルを調べてください。
Tip: BIOS の設定でキーボードを “Not installed” にするということは、キーボードを使えないということを 意味しているわけではありません。これは、BIOS がキーボードがなくても文句を言わないように、電源投入時には キーボードを探すな、と指示するだけです。このフラグを “Not installed” にしていてもキーボードを 接続したままにできますし、ちゃんと動作します。
Note: あなたのシステムが PS/2 マウスを使っているなら、 おそらくマウスもキーボード同様にはずす必要があるでしょう。 というのは、PS/2 マウスは部分的にキーボードとハードウェアを 共有しており、マウスを接続したままにしていると、 キーボードも存在する、と誤って検出してしまう可能性があるからです。 AMI BIOS を持つ Gateway 2000 Pentium 90MHz システム はこれに該当すると言われています。 一般的にこれは問題ではありません。なぜなら、どっちにしても マウスはキーボードなしではたいして役に立たないからです。
COM1: (sio0) にダム端末を接続してください。
ダム端末がなければ、かわりに古い PC/XT でモデム プログラムを走らせて使ったり、シリアルポートに他の Unix マシンを繋いだりできます。もしも COM1: (sio0) がなければ、作成してください。 今のところ、COM1: 以外のポートを 選択するためにはブートブロックの再コンパイルが必要です。 すでに COM1: を他の装置に 使っていた場合は、一時的にその装置をはずして いったん FreeBSD がうまく動作してから、 新しいブートブロックとカーネルをインストールしてください。 (上記はとにかくファイル/演算/端末サーバの COM1: が利用可能であると仮定して います。あなたが本当に何かのために COM1: が必要 (で、なおかつその何かを COM2: (sio1) に付け替えることができない) ならば、多分、そもそも 悩んでる場合ではありません。)
カーネルコンフィグファイルの COM1: (sio0) に適切なフラグを 設定していることを確認してください。
関連するフラグ:
このポートのコンソールサポートを有効にします。
このフラグが設定されない場合、他のフラグは無視されます。
現在のところ、一つのポートしかコンソールサポートを有効に できません。(config
ファイルに書かれた順番で) 最初にこのフラグを 指定されたポートが選択されます。
なお、このオプションを指定するだけでシリアルポートが
コンソールとして使えるわけではありません。
このフラグと一緒に、以下のフラグも指定するかもしくは -h オプションも使ってください。
後述される -h オプション
を無視して、(他に優先度の高いコンソールがない限り)
このポートをコンソールとして指定します。 このフラグは FreeBSD バージョン 2.X
の COMCONSOLE オプションに対応するものです。
フラグ 0x20 は必ず フラグ 0x10 と一緒に指定されなければなりません。
(0x10 と組み合わせることで) このポートを予約し、通常のアクセスができない ようにします。 このフラグは、シリアルコンソールとして使いたいポートに 指定すべきではありません。 唯一の使い道は、ユニットがカーネルのリモートデバッグ用 であることを指定することです。 リモートデバッグの詳細については The Developer's Handbook を参照してください。
Note: FreeBSD 4.0-CURRENT 以降では、 フラグ 0x40 の意味が若干異なり、 シリアルポートにリモートデバッグを指定するためには、 別のフラグを使います。
例:
device sio0 at isa? port "IO_COM1" tty flags 0x10 irq 4
詳細については sio(4) を参照して下さい。
もしこれらのフラグがセットされていなければ、(別のコンソールで) UserConfig を実行するか、 カーネルを再コンパイルする必要があります。
ブートドライブの a パーティションの ルートディレクトリに boot.config を作成してください。
このファイルは、ブートブロックコードに対してどのように システムを起動したいかを教えます。 シリアルコンソールを活かすためには、以下のオプションを幾つか -- 複数の場合も一行で、設定する必要があります:
-h内蔵コンソールとシリアルコンソールの切替えを行います。
これを使用してコンソールデバイスを変更できます。 例えば、内蔵 (ビデオ)
コンソールからブートした場合、
カーネルとブートローダがコンソールデバイスとして
シリアルポートを使用するようにするため、 -h
を使って指示できます。 反対に、シリアルポートからブートした場合、
ブートローダとカーネルがコンソールとして代わりに
ビデオディスプレイを使用するようにするため、 -h
を使用できます。
-Dシングルとデュアルのコンソール設定を切り替えます。 シングル設定では、上記の
-h
オプションの状態によって、コンソールは内蔵コンソール
(ビデオディスプレイ)かシリアルポートのいずれかになります。
デュアルコンソール設定では、ビデオディスプレイと シリアルポートの両方が、-h
オプションの状態によらず、同時にコンソールになります。
しかし、デュアルコンソール設定は、ブートブロックが
実行されている間でしか効果を持ちません。 一旦ブートローダに制御が移ると、-h オプションによって指定されたコンソールが
唯一のコンソールになります。
-Pブートブロックがキーボードを検出するようにします。
キーボードが発見できなかった場合には、 -D と -h オプションが自動的にセットされます。
Note: 現バージョンのブートブロックでは容量の制限により、
-Pオプションは拡張キーボードしか 検出できません。キーが 101 個より少ない (そして F11 と F12 がない) キーボードは検出されない可能性があります。 この制限から、いくつかのラップトップコンピュータの キーボードは正しく検出されないでしょう。 残念ながら、この問題の回避策はありません。
-P オプションを使ってコンソールを
自動的に選ぶか、-h オプションを使って
シリアルコンソールを有効にしてください。
さらに boot(8) で説明されている他のオプションも使う ことができます。
-P 以外のオプションはブートローダ (/boot/loader) に渡されます。 ブートローダは、-h オプションだけの状態を
調べることで内蔵ビデオとシリアルポートのどちらがコンソールに なるのか決めます。
つまり、/boot.config の中で -D オプションを指定して -h
オプションを指定しなかった場合、
ブートブロック実行中でのみシリアルポートをコンソールとして
使うことができます。ブートローダは内蔵ビデオディスプレイを
コンソールとして使います。
マシンを起動する。
FreeBSD を起動したとき、ブートブロックは /boot.config の内容をコンソールに表示 します。例えば、
/boot.config: -P Keyboard: no
行の二番目は、 /boot.config にオプション -P が指定してあるときだけ表示され、
キーボードが存在するかどうかを表します。 これらのメッセージは、シリアルか内蔵のいずれか、
あるいはその両方のコンソールに表示されます。 どちらに表示されるかは、 /boot.config の設定によって変わります。
| オプション指定 | メッセージの表示される場所 |
|---|---|
| なし | 内蔵 |
-h |
シリアル |
-D |
シリアルと内蔵の両方 |
-Dh |
シリアルと内蔵の両方 |
-P、キーボードが存在する場合 |
内蔵 |
-P、キーボードが存在しない場合 |
シリアル |
このメッセージが表示された後、 ブートブロックがブートローダのロードを再開し、 他の全てのメッセージがコンソールに表示されるまで、 若干時間がかかります。通常の環境では、ブートブロックに 割り込みをかける必要はありませんが、 ちゃんとセットアップされているかどうか確かめるために、 割り込みをかけることができるようになっています。
ブートプロセスに割り込みをかけるには、 コンソールの(Enter/Return キー以外の)キーをたたいて下さい。 ブートブロックはその時、操作を指定するためのプロンプトを表示します。 こんな風に表示されるでしょう。
>> FreeBSD/i386 BOOT Default: 0:wd(0,a)/boot/loader boot:
上に示したメッセージが、シリアルか内蔵、 あるいはその両方といった、/boot.config で指定したとおりのコンソールに表示されることを確認して下さい。 メッセージが正しいコンソールに表示されたら、Enter/Return キーを押してブートプロセスを継続してください。
もし、シリアルコンソールを利用するように設定しているのに
シリアル端末にプロンプトが出てこない場合は、 設定のどこかに間違いがあります。
ブートブロック(とブートローダ、カーネル)に対して
シリアルポートをコンソールに使うことを伝えるため、 割り込みをかけた時に -h を入力し、 (可能ならば) Enter/Return
キーを押して下さい。そして、
一度システムを起動させてから、どこが悪いのかをチェックして下さい。
ブートローダがロードされ、ブートプロセスの第三ステージに いる時には、まだ内蔵コンソールとシリアルコンソールを切り替えることができます。 それにはブートローダの環境変数を適切に設定すれは良いのですが、 詳細については Section 19.6.5 を参照してください。
このセクションで扱ったさまざまな設定と、 最終的に選択されるコンソールに関するまとめです。
device sio0 at isa? port "IO_COM1" tty flags 0x10 irq 4
device sio0 at isa? port "IO_COM1" tty flags 0x30 irq 4
デフォルトのシリアルポート通信速度は、9600 ボー、 8 ビット、パリティなし、ストップビット 1 です。 通信速度を変更したい場合には、少なくとも ブートブロックの再コンパイルが必要になります。 /etc/make.conf に次のような行を追加して、 新しくブートブロックをコンパイルして下さい。
BOOT_COMCONSOLE_SPEED=19200
もし、シリアルコンソールがブート時の -h
オプション以外の方法で設定されていたり、 カーネルが利用するシリアルコンソールが
ブートブロック実行中のものと異なる場合には、
カーネルコンフィグレーションファイルに次のオプションを追加して、
新しくカーネルをコンパイルしなければなりません。
options CONSPEED=19200
sio0 以外のポートをコンソールとして使うには、再コンパイルが必要です。 それがどんな理由であれ、他のポートを使用する場合には ブートブロック、ブートローダ、カーネルを 次のようにして再コンパイルして下さい。
カーネルソースを取得する。
/etc/make.conf を編集し、 BOOT_COMCONSOLE_PORT に 使用したいポートのアドレス(0x3F8、0x2F8、0x3E8 or 0x2E8)を 設定してください。使用可能なのは sio0 から sio3 (COM1: から COM4:) までで、 マルチポートシリアルカードは使えません。 また、ここで割り込みの設定をする必要はありません。
設定を変更するために新たなカーネルコンフィグレーションファイルを作成し、 使いたいシリアルポートのフラグを適切に設定します。 例えば、sio1 (COM2:) をコンソールにしたければ、
device sio1 at isa? port "IO_COM2" tty flags 0x10 irq 3
または、
device sio1 at isa? port "IO_COM2" tty flags 0x30 irq 3
とします。その際、 他のシリアルポートにコンソールフラグをつけてはいけません。
ブートブロックを再コンパイルし、インストールする。
# cd /sys/boot/i386/boot2 # make # make install
ブートローダを再コンパイルし、インストールする。
# cd /sys/boot/i386/loader # make # make install
カーネルを再構築し、インストールする。
disklabel(8) を使ってブートブロックをブートディスクに書き込み、 新しいカーネルから起動する。
シリアルコンソールからカーネルデバッガを起動したい(これは リモートで診断する際に便利ですが、もしおかしな BREAK 信号がシリアルポートに送られるような場合には危険です!) 場合には、次のオプションを使ってカーネルをコンパイルして下さい。
options BREAK_TO_DEBUGGER options DDB
シリアルコンソールからブートメッセージを確認したり、 シリアルコンソールを経由してカーネルデバッグセッションに入ることが できるので、これは必要がないかもしれませんが、 login プロンプトをシリアルポートに 出力するように設定することもできます。 これには、次のようにします。
エディタで /etc/ttys というファイルを開き、 次に示す行に移動して下さい。
ttyd0 "/usr/libexec/getty std.9600" unknown off secure ttyd1 "/usr/libexec/getty std.9600" unknown off secure ttyd2 "/usr/libexec/getty std.9600" unknown off secure ttyd3 "/usr/libexec/getty std.9600" unknown off secure
ttyd0 から ttyd3 は、 COM1 から COM4 に対応しています。 設定したいポートの off を on に変更して下さい。 また、もしシリアルポートの通信速度を変更しているなら、 std.9600 が実際の通信速度になるように、 例えば std.19200 のように変更して下さい。
さらに、実際のシリアル端末に合わせて、 端末タイプを unknown から変更することも可能です。
ファイルの編集が終了したら、 変更を有効化するために kill -HUP 1 を実行しなければなりません。
前セクションは、ブートブロックの設定を変更することでシリアルコンソールを セットアップする方法について解説していました。 このセクションでは、ブートローダへのコマンド入力と環境変数設定で コンソールの指定を行なう方法を紹介します。 ブートローダがブートブロックの後、 ブートプロセスの第三ステージとして呼び出されたとき、 ブートローダの設定には、ブートブロックの設定がそのまま使われます。
ブートローダとカーネルに対して シリアルコンソールを使用するように設定するには、 単に /boot/loader.rc のファイルに、次のような一行を書くだけで実現できます。
set console=comconsole
これは、前セクションで扱ったブートブロックの設定に 全く関係なく機能します。
上に示した行は、 /boot/loader.rc の最初の行に書き込まなくてはいけません。 これはできるだけ早く、ブートメッセージをシリアルコンソールに 出力させるために必要なことです。
同様にして、次のように内蔵コンソールを指定することもできます。
set console=vidconsole
もし、ブートローダの環境変数 console
が設定されていない場合、 ブートローダ、そしてその次に起動するカーネルは
ブートブロックで指定された -h オプションに
示されたコンソールを使用します。
3.2 以降のバージョンにおいては /boot/loader.rc ではなく、 /boot/loader.conf.local や /boot/loader.conf にコンソール指定を書き込みます。 その場合、 /boot/loader.rc は次のようになっていなければなりません。
include /boot/loader.4th start
それから、/boot/loader.conf.local を作成して、次の行をそこに追加して下さい。
console=comconsole
か、もしくは
console=vidconsole
です。詳細については、loader.conf(5) を参照して下さい。
Note: その際、ブートローダはオプション指定なし (ブートブロックに
-Pオプションが指定されたのと等価)になり、 キーボードの存在を調べて 内蔵コンソールとシリアルコンソールを自動的に選択する機能は働きません。
sio0 以外のシリアルポートを コンソールとして使うには、ブートローダを再コンパイルする必要があります。 それには、 Section 19.6.4.2 に書かれている説明にしたがって下さい。
シリアルコンソールというアイデアは、 グラフィック出力用のハードウェアやキーボードが接続されていない 専用サーバのセットアップを可能にするためのものです。 (ほとんど?)全てのシステムはキーボードなしで起動できますが、 不幸にも、グラフィックアダプタなしでは起動できないシステムはたくさんあります。 AMI BIOS を採用しているマシンでは、CMOS 設定の `graphics adapter' を `Not Installed' にするだけで、 グラフィックアダプタがなくとも起動できるように設定することができます。
しかしながら、多くのマシンはこのようなオプションを持っていませんし、 ディスプレイハードウェアがシステムに存在しないと起動しないように なっています。そのようなマシンでは、 モニタを接続する必要がなかったとしても、 適当なグラフィックカード(モノクロのジャンク品でも構いません)を 挿入したままにしておく必要があるでしょう。 また、AMI BIOS をインストールする、という手もあります。
改訂: Jim Mock <jim@FreeBSD.org>, 2000 年 3 月 1
日.
もしあなたがモデムを使ってインターネットに接続したり, 他の人々に FreeBSD によるインターネットへのダイヤルアップ接続を 提供しようとしているのでしたら, PPP または SLIP 接続を選択することができます.
この節では 3 種類の PPP について説明しています. それは ユーザ, カーネル, そして PPPoE (PPP オーバイーサネット) です. また SLIP のクライアントとサーバの設定についても記述しています.
最初に説明するのは, ユーザ PPP です. ユーザ PPP は FreeBSD に 2.0.5-RELEASE の時に, 既に存在していたカーネル実装の PPP に加えて導入されました.
ユーザ PPP とカーネル PPP の主な違いは何かと疑問に思われるかも 知れませんが, その答えは簡単です. ユーザ PPP はデーモンとしては実行されず 必要に応じて実行されるのです. PPP インタフェイスを組み込んだカーネルは 必要ではなく, ユーザプロセスとして実行されカーネルとのデータの やり取りにはトンネルデバイスドライバ (tun) を 使用します.
この節ではこれ以降ユーザ PPP のことは, pppd のような他の PPP ソフトウエアと特に区別する必要がある場合を除いて, 単に ppp と記述します. またこの節に記述されているコマンドは すべて root で実行されなければなりません.
原作: Brian Somers <brian@FreeBSD.org>,
協力: Nik Clayton <nik@FreeBSD.org>, Dirk-Willem van Gulik
<Dirk.vanGulik@jrc.it>, Peter Childs
<pjchilds@imforei.apana.org.au>.
以下の情報を手に入れておく必要があるでしょう:
PPP で接続するインターネットサービスプロバイダ (ISP) のアカウント. さらに, 接続済みのモデム (またはその他のデバイス) があり, プロバイダとの接続が可能なように正しく設定されている.
プロバイダの電話番号.
ログイン名とパスワード. これは通常の unix 形式のログイン名と パスワードの組という場合もありますし, PPP PAP または CHAP の ログイン名とパスワードの組という場合もあります.
一つ以上のネームサーバの IP アドレス. 通常, プロバイダから IP アドレスを二つ指示されている はずです. 一つすら提供されていないならば, ppp.conf ファイル中で enable dns コマンドを使って ppp にネームサーバを設定するよう 指示できます.
プロバイダからは以下の情報が提供されているはずですが, どうしても必要というわけではありません:
プロバイダのゲートウェイの IP アドレス. ゲートウェイとは, あなたがそこに接続をおこなって, デフォルトルート として設定することになるマシンです. プロバイダがこのアドレスを明示していなくても, 最初は 適当に設定しておいて, 接続時にプロバイダの PPP サーバから 正しいアドレスを教えてもらうことができます.
このアドレスは, ppp から HISADDRとして参照されます.
プロバイダのネットマスク設定. プロバイダが明示していないとしても, ネットマスクとして 255.255.255.0 を使用しておけば問題ありません.
もしプロバイダから固定の IP アドレスとホスト名の割り当てを 受けていれば, その情報を指定しておくこともできます. 割り当てを受けていなければ, 接続先から適切な IP アドレスを指定してもらいます.
もし, 必要な情報が不足していれば, プロバイダに連絡を取って 確認しておいてください.
説明でも述べているように, ppp はカーネルの tun デバイスを使います. 使っているカーネルがどれであっても, tun デバイスを設定しなければなりません. FreeBSDに付属しているデフォルトの GENERIC カーネルに合うように tun デバイスは前もって設定されています. しかしながら, 自分で修正したカーネルをインストールするのであれば, pppが正しく動くよう, カーネルが設定されているか確認しなくてはいけません.
これを確認するには, カーネルコンパイルディレクトリ (/sys/i386/conf または /sys/pc98/conf) に移動して, カーネルコンフィグレーションファイルを調べます. 以下の行がどこかに含まれている必要があります.
pseudo-device tun 1
この行がカーネルコンフィグレーションファイルに 含まれていない場合, この行を追加して カーネルの再コンパイルとインストールをおこなう必要があります. 元々の GENERIC カーネルは 標準でこれを含んでいますので, カスタムカーネルをインストールしているのではなかったり, /sys ディレクトリが存在しないのであれば, 何も変更する必要はありません. カーネルコンフィグレーションの詳細については, FreeBSD カーネルのコンフィグレーション を参照してください.
以下のコマンドを実行することで, 現在のカーネルにトンネルデバイスが いくつ組み込まれているかを調べることができます:
# ifconfig -a tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500 inet 200.10.100.1 --> 203.10.100.24 netmask 0xffffffff tun1: flags=8050<POINTOPOINT,RUNNING,MULTICAST> mtu 576 tun2: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500 inet 203.10.100.1 --> 203.10.100.20 netmask 0xffffffff tun3: flags=8010<POINTOPOINT,MULTICAST> mtu 1500
Note: FreeBSD 4.0やより最近のリリースでは, すでに使われている tun デバイスしか見つけることが できないでしょう. これは, 全く tun デバイスを見つけることが できないかもしれないということです. しかし, もしこうなって しまっても, 心配することはありません. そのデバイスは ppp が使おうとする時に動的に作られるはず だからです.
この例ではトンネルデバイスが四つ存在し, そのうち二つに 設定がおこなわれ, 使用中であることがわかります. 上の例で RUNNING フラグがオンになっている ものがありますが, これは そのインタフェースが何かに使用されていることを示している だけであるということに注意してください. つまり, RUNNING になっていない インタフェースがあったとしても, それはエラーではありません.
トンネルデバイスがカーネルに組み込まれておらず, 何らかの理由で カーネルの再構築ができない場合でも, 方法がないわけではありません. 動的にデバイスをロードすることができるはずです. 詳細については modload(8) や lkm(4) など, 適切なマニュアルを参照してください.
ほとんどのユーザは tun デバイス (/dev/tun0) が一つあれば充分でしょう. より多くのデバイスを使う場合 (すなわち, カーネルコンフィグレーション ファイルで pseudo-device tun の行に 1 以外の数値を指定している場合), 以下で tun0 と書かれている部分をすべて, あなたが使うデバイスの番号に あわせて読みかえてください.
tun0 デバイスが正しく作成されていることを確認する最も簡単な方法は, それを作り直すことです. そのためには, 以下のコマンドを実行します:
# cd /dev # ./MAKEDEV tun0
カーネルに 16 個のトンネルデバイスを組み込んだのであれば, tun0 だけでなく他の tun デバイスも作成しておく必要があるでしょう:
# cd /dev # ./MAKEDEV tun15
また, カーネルが正しく設定されているかどうかを調べるために 以下のコマンドを実行して, このような出力が得られることを確認します:
# ifconfig tun0 tun0: flags=8050<POINTOPOINT,RUNNING,MULTICAST> mtu 1500
まだ RUNNING フラグがセットされていない場合もあります. その時は以下のような出力が得られるでしょう:
# ifconfig tun0 tun0: flags=8010<POINTOPOINT,MULTICAST> mtu 1500
前述したように, FreeBSD 4.0 以降のリリースでは tun デバイスは要求に応じて 作られるので, もしそのデバイスがまだ使われていなければ, 見つけられないかもしれないということを思い出してください.
リゾルバ (resolver) はシステムの一部分で, IP アドレスとホスト名との 変換をおこないます. IP アドレスとホスト名を対応させるためのマップを, 二つの場所のうちの一つから探すように設定できます. 一つめは /etc/hosts (man 5 hosts) と呼ばれるファイルです. 二つめはインターネット ドメインネームサービス (DNS) と呼ばれる 分散データベースですが, これに関する議論は このドキュメントで扱う範囲を 越えていますので, これについての説明はおこないません.
リゾルバは名前のマッピングを おこなうシステムコールの集合体です. ただし どこからマッピング情報を見つけるのかは, 最初に指示しておく必要があります. これは まず /etc/host.conf ファイルを編集することでおこないます. 混乱の元になりますので, このファイルを /etc/hosts.conf と 呼んだりしてはいけません (余分な s がついていますね).
このファイルには 以下の 2 行が (この順番で) 書かれているはずです:
hosts bind
これは, 最初に /etc/hosts ファイルを調べ, そこで目的の名前が 見つけられなかった場合に DNS を引きにいくようリゾルバに指示します.
このファイルはローカルネットワーク上に存在するマシンの IP アドレスと ホスト名を含んでいるはずです. 最低でも ppp を動作させるマシンのエントリが 含まれている必要があります. そのマシンのホスト名が foo.bar.com で, IP アドレスが 10.0.0.1 であると仮定すると, /etc/hosts は 以下の行を含んでいなければいけません:
127.0.0.1 localhost.bar.com localhost 127.0.0.1 localhost.bar.com. 10.0.0.1 foo.bar.com foo 10.0.0.1 foo.bar.com.
一つめの行は localhost を現在のマシンの別名として定義しています. マシン固有の IP アドレスが何であっても, この行の IP アドレスは 常に 127.0.0.1 でなければいけません. 二つめの行はホスト名 foo.bar.com (と, その省略形 foo) を IP アドレス 10.0.0.1 にマップします.
もしプロバイダから固定の IP アドレスとホスト名を割り当てられて いるのであれば, それを 10.0.0.1 エントリのかわりに使ってください.
/etc/resolv.conf はリゾルバの振舞いを指定します. もし自前の DNS サーバを走らせているのなら, このファイルは空のままに しておくこともできます. 通常は, 以下のように書いておく必要があるでしょう:
domain bar.com nameserver x.x.x.x nameserver y.y.y.y
x.x.x.x と y.y.y.y はプロバイダから指示されたアドレスで, 接続するプロバイダが提供しているネームサーバを すべて書いてください. domain に指定するのは このマシンのデフォルトのドメイン名で, おそらく 書かなくても問題は無いでしょう. このファイルの各エントリの詳細については, resolv.conf のマニュアルページを参照してください.
バージョン 2 以降の ppp を使用している場合には, enable dns コマンドを使用してネームサーバのアドレスを プロバイダに問い合わせるように指示することができます. 上の指定とは異なるアドレスをプロバイダが指定してきた場合 (または /etc/resolv.conf でネームサーバが指定されていない場合), ppp はプロバイダが指定したアドレスで resolv.conf を書きかえます.
ユーザ ppp と pppd (カーネルレベルの PPP 実装) は どちらも /usr/share/examples/ppp ディレクトリに置かれた設定ファイルを使います. ここには設定ファイルのサンプルが用意されていて, ユーザ ppp の設定を おこなう際に大変参考になりますので, 削除したりしないでください.
ppp の設定をするためには, 必要に応じていくつかのファイルを編集する必要が あります. 書き込む内容は, プロバイダが静的に IP アドレスを割り当てる (つまり, 固定の IP アドレスを一つ与えられて, 常にそれを使う) か, または動的に IP アドレスを割り当てる (つまり, PPP セッションごとに IP アドレスが変化する可能性がある) かということに ある程度依存します.
まず /etc/ppp/ppp.conf という設定ファイルを作成する必要があります. これは以下の例とほとんど同じようなものになるでしょう.
Note: : で終る行は 1 カラム目から始め, その他の行はスペースまたはタブで以下の例のように 段をつける (インデントする) 必要があります.
1 default: 2 set device /dev/cuaa0 3 set speed 115200 4 set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \"\" ATE1Q0 OK-AT-OK \\dATDT\\TTIMEOUT 40 CONNECT" 5 provider: 6 set phone "(123) 456 7890" 7 set login "TIMEOUT 10 \"\" \"\" gin:--gin: foo word: bar col: ppp" 8 set timeout 300 9 set ifaddr x.x.x.x y.y.y.y 255.255.255.0 0.0.0.0 10 add default HISADDR 11 enable dns
ファイルでは行番号を取り除いておいてください. これは解説の際に参照する行を示すためにつけたものです.
デフォルトエントリを指定します. このエントリ中のコマンドは ppp が起動された際に自動的に実行されます.
モデムが接続されているデバイスを指定します. COM1: は /dev/cuaa0 に, COM2: は /dev/cuaa1 になります.
通信速度 (DTE 速度) を指定します. もし 115200 が使えない (最近のモデムなら大抵使えるはずですが) 場合には, かわりに 38400 を指定してみてください.
ダイアルスクリプトを指定します. ユーザ PPP は chat(8) 言語に似た, 受信待ち文字列と 送信文字列の対からなるスクリプトを使用します. この言語の機能に関しては, マニュアルページを参照してください.
接続するプロバイダの名前 “provider” を エントリ名として指定します.
このプロバイダの電話番号を指定します. 複数の電話番号を : や | で区切って指定することができます. これら区切り文字の違いについては, ppp(8) に 詳しく書かれています. 要約すると, 毎回違う番号に かけたいのであれば : を使います. 常に まず先頭の番号にかけてみて, つながらない時にだけ 2 番目以降の番号に かけたいのであれば | を使います. 例に示されているように, 常に電話番号全体を引用符で くくって (クォートして) おきます.
ダイアルスクリプトと同様に, ログインスクリプトも chat 言語風の記述をおこないます. この例は, 以下のようなログインセッションを使用する プロバイダのためのものです:
J. Random Provider login: foo password: bar protocol: ppp
このスクリプトは必要に応じて 書きかえなければならないでしょう. 初めてスクリプトを書く時には, 予想した通りに 処理が進んだかどうかを確認するため, “chat” ログを とるようにしておいた方が良いでしょう.
PAP や CHAP を使用する場合には, ここでログインすることは ありませんから, ログイン文字列は空白のままにしておくべきです. 詳細については PAP および CHAP による認証を参照してください.
デフォルトの接続タイムアウト時間を (秒数で) 指定します. この例では, 300 秒間 通信がおこなわれなければ 自動的に接続を切るように指定しています. タイムアウトさせたくない場合には, この値を 0 に設定します.
インタフェースのアドレスを指定します. 文字列 x.x.x.x は プロバイダに割り当てられた IP
アドレスで置きかえてください. 文字列 y.y.y.y
はプロバイダから指示されたゲートウェイ (接続先となるマシン) の IP
アドレスで置きかえてください. プロバイダがゲートウェイのアドレスを 指示していない場合は,
10.0.0.2/0 を使用しておいてください. もし “仮の”
アドレスを使用する必要がある場合には, 動的 IP アドレスによる
PPP 接続に関する指示に従って, /etc/ppp/ppp.linkup
にエントリを作成していることを 確認してください. この行が省略されている場合, ppp を -auto モードで動作させることはできません.
プロバイダのゲートウェイへの経路を デフォルトルートとして 追加します. 特殊文字列 HISADDR は, 9 行目で指定された ゲートウェイのアドレスで置きかえられます. HISADDR は 9 行目までは初期化されていませんので, その行よりも後でしか使えないことに 注意してください.
ネームサーバのアドレスが正しいか どうかを確認するため, プロバイダに問い合わせをおこなうよう ppp に指示します. プロバイダがこの機能をサポートしていれば, ppp は /etc/resolv.conf のネームサーバエントリを 正しいアドレスに更新することができます.
静的な IP アドレスを持っていて, 接続が完了する前にルーティングテーブルの エントリが正しく設定されているのであれば, ppp.linkup に エントリを追加する必要はありません. しかし, この場合でもエントリを追加して, 接続が完了した時点で プログラムを呼び出したいことがあるかもしれません. これについては後ほど sendmail を例として説明します.
これらの設定ファイルのサンプルが /usr/share/examples/ppp ディレクトリに 置かれています.
プロバイダが静的な IP アドレスの割り当てをおこなっていない場合, ppp が相手側のホスト (ゲートウェイ) と交渉して, こちら側と相手側のアドレスを 決めるように設定することができます. これは, 起動時には“仮の”アドレスを使っておいて, 接続後に IP コンフィグレーション プロトコル (IPCP) を使用して ppp が IP アドレスを正しく設定できるようにすることで実現されます. 静的 IP アドレスによる PPP 接続に 以下の変更を加える以外は, ppp.conf の設定は同じです:
9 set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.0
繰り返しますが, 行番号は取り除いておいてください. これは解説の際に参照する行を示すためにつけたものです. なお, 少なくともスペース 1 個分の段づけ (インデント) が必要です.
/ 文字の後ろの数字は, アドレス交渉の際に固定しておきたい ビットの数です. 場合によっては, もっと適切な IP アドレスを 指定しておきたいこともあるかもしれませんが, ほとんどの場合には 上の例の通りで問題ありません.
最後の引数 (0.0.0.0) は, アドレスの交渉の際に 10.0.0.1 ではなく 0.0.0.0 を使用するよう ppp
に指示するためのものです. set ifaddr コマンドの最初の引数として
0.0.0.0 を指定してはいけません. さもないと, -auto モードで動作させる際に
初期経路を設定することができなくなります.
バージョン 1.X の ppp を使用する場合, /etc/ppp/ppp.linkup にもエントリを作成しておく必要があります. ppp.linkup は接続が確立された後に使用されます. この時点では, ppp は実際にどの IP アドレスを使うべきなのか わかっているはずです. 以下のエントリは存在する仮の経路を削除し, 正しい経路を作成します:
1 provider: 2 delete ALL 3 add default HISADDR
接続を確立する際に, ppp は以下のルールに従って ppp.linkup のエントリを検索します: まず ppp.conf で使用されたのと同じラベルを探します. もし見つからなければ, ゲートウェイの IP アドレスのエントリを 探します. このエントリは 4 オクテットの IP アドレス形式の ラベルです. それでも まだエントリが見つからなければ, MYADDR エントリを探します.
この行は, 使用する tun インタフェースに関する既存の経路を (ダイレクトルートのエントリを除き) すべて削除するよう ppp に指示します.
この行は HISADDR への経路をデフォルトルートとして 追加するように ppp に指示します. HISADDR は IPCP で 決定されたゲートウェイの IP アドレスで置きかえられます.
詳細なサンプルについては, /usr/share/examples/ppp/ppp.conf.sample ファイル中のpmdemand エントリと /usr/share/examples/ppp/ppp.linkup.sample を参照してください.
バージョン 2 の ppp から “sticky routes” が導入されました. MYADDR や HISADDR を含む add コマンドと delete コマンドを記憶して, MYADDR や HISADDR の アドレスが変化した際には経路の再設定をおこないます. したがって, これらのコマンドを ppp.linkup に 繰り返し記述する必要は無くなりました.
かかってきた電話を ppp が受けるように設定する際に, そのマシンが LAN に接続されているのであれば, パケットを LAN に転送するかどうかを決定する必要があります. 転送をおこなう場合には, その LAN のサブネットから IP アドレスを ppp クライアントに割り当て, 以下のコマンドを指定するのが良いでしょう.
gateway_enable=YES
getty でダイアルアップサービスをおこなう場合の優れた解説が FreeBSD でダイアルアップサービスをおこなうための設定 にあります.
getty に代わるものとしては, mgetty があります. これは getty をより柔軟にしたもので, ダイアルアップ回線での使用を意図して 設計されています.
mgetty を使う場合の利点は, mgetty が積極的にモデムと通信する ということです. つまり, もし /etc/ttys でポートを閉じている場合, モデムは電話をとらなくなります.
最近のバージョンの mgetty (0.99beta 以降) では, PPP ストリームの 自動検出もサポートされています. これにより, クライアント側で スクリプトを準備しなくてもサーバに アクセスすることができます.
mgetty に関する, より詳細な情報については Mgetty と AutoPPP を参照してください.
ppp は通常, ID 0 のユーザ (root) として動作しなければいけませんが, 以下で説明するように, ppp を通常のユーザとしてサーバモードで実行させたい 場合には, そのユーザを /etc/group の network グループに 追加して, ppp を実行する許可を与えておかなければいけません.
また, そのユーザが設定ファイル内の目的のエントリに アクセスできるように, 以下のように allow コマンドで許可を与えておく必要があります:
allow users fred mary
このコマンドがデフォルトエントリに 書かれている場合には, 指定されたユーザは すべてのエントリをアクセスできるようになります.
/etc/ppp/ppp-shell という名前で, 以下のような内容のファイルを 作成します:
#!/bin/sh IDENT=`echo $0 | sed -e 's/^.*-\(.*\)$/\1/'` CALLEDAS="$IDENT" TTY=`tty` if [ x$IDENT = xdialup ]; then IDENT=`basename $TTY` fi echo "PPP for $CALLEDAS on $TTY" echo "Starting PPP for $IDENT" exec /usr/sbin/ppp -direct $IDENT
このスクリプトには実行可能属性をつけておきます. 次に, 以下のコマンドを実行し, ppp-dialup という名前で このスクリプトへのリンクを作成します:
# ln -s ppp-shell /etc/ppp/ppp-dialup
すべてのダイアルアップ ppp ユーザのログインシェルとして このスクリプトを使用します. 以下は pchilds というユーザ名の ダイアルアップユーザを /etc/password へ登録した場合の例です. (パスワードファイルを直接エディタで編集したりせず, vipw を使ってください)
pchilds:*:1011:300:Peter Childs PPP:/home/ppp:/etc/ppp/ppp-dialup
任意のユーザが読むことのできる, /home/ppp ディレクトリを 作成します. /etc/motd が表示されないようにするため, このディレクトリには以下のように大きさが 0 バイトのファイルを 作成しておきます.
-r--r--r-- 1 root wheel 0 May 27 02:23 .hushlogin -r--r--r-- 1 root wheel 0 May 27 02:22 .rhosts
上記と同じように ppp-shell ファイルを作成し, 静的な IP アドレスを割り当てるアカウントそれぞれについて ppp-shell へのシンボリックリンクを作成します.
例えば, クラス C ネットワークの経路制御を必要とする, 三人のダイアルアップユーザ fred, sam, mary がいるとすると, 以下のコマンドを実行することになります:
# ln -s /etc/ppp/ppp-shell /etc/ppp/ppp-fred # ln -s /etc/ppp/ppp-shell /etc/ppp/ppp-sam # ln -s /etc/ppp/ppp-shell /etc/ppp/ppp-mary
これらのユーザのダイアルアップアカウントでは, 上で作成した それぞれのシンボリックリンクを ログインシェルとして設定しておきます. (つまり, ユーザ mary のログインシェルは /etc/ppp/ppp-mary に なります).
/etc/ppp/ppp.conf ファイルは, 大体以下のような内容になるでしょう:
default: set debug phase lcp chat set timeout 0 ttyd0: set ifaddr 203.14.100.1 203.14.100.20 255.255.255.255 enable proxy ttyd1: set ifaddr 203.14.100.1 203.14.100.21 255.255.255.255 enable proxy
Note: 上の例のように段をつける (インデントする) 必要があることに注意してください.
default: エントリはセッションごとにロードされます. /etc/ttys で有効にしてある各ダイアルアップ回線ごとに一つ, 上記の ttyd0: のようなエントリを作成します. 各行の相手側アドレスとして, それぞれ別の IP アドレスを 動的 IP ユーザのための IP アドレスのプールから割り当てておく必要があります.
上のサンプルの /usr/share/examples/ppp/ppp.conf の内容に加えて, 静的に IP を割り当てられたダイアルアップユーザ それぞれのためのエントリを追加する必要があります. ここでも fred, sam, mary の例を使うことにしましょう.
fred: set ifaddr 203.14.100.1 203.14.101.1 255.255.255.255 sam: set ifaddr 203.14.100.1 203.14.102.1 255.255.255.255 mary: set ifaddr 203.14.100.1 203.14.103.1 255.255.255.255
必要であれば, それぞれの静的 IP ユーザに対する経路制御情報も /etc/ppp/ppp.linkup ファイルに書いておくべきでしょう. 以下の例ではクライアントの PPP リンクを経由する, クラス C の 203.14.101.0 ネットワークへの経路を追加しています.
fred: add 203.14.101.0 netmask 255.255.255.0 HISADDR sam: add 203.14.102.0 netmask 255.255.255.0 HISADDR mary: add 203.14.103.0 netmask 255.255.255.0 HISADDR
AUTO_PPP オプションつきでコンパイルした mgetty を使えば, mgetty が PPP 接続の LCP フェーズを検出して, 自動的に PPP シェルを起動するように 設定することができます. しかし この場合, デフォルトの login/password シーケンスは発生しないので, ユーザの認証は PAP または CHAP を使っておこなう必要があります.
このセクションでは, ユーザ (あなた) が問題なく AUTO_PPP オプションつきの mgetty (v0.99beta またはそれ以降) の設定, コンパイル, インストールができているものと仮定しています.
/usr/local/etc/mgetty+sendfax/login.config ファイルが 以下の行を含んでいることを確認してください:
/AutoPPP/ - - /etc/ppp/ppp-pap-dialup
これにより, PPP 接続を検出したら mgetty が ppp-pap-dialup スクリプトを実行するようになります.
/etc/ppp/ppp-pap-dialup という名前で, 以下のような内容のファイルを 作成します (このファイルには実行可能属性を つけておく必要があります):
#!/bin/sh exec /usr/sbin/ppp -direct pap
さらに, かかってきた電話すべてを自分で扱うエントリを /etc/ppp/ppp.conf に作成します.
pap: enable pap set ifaddr 203.14.100.1 203.14.100.20-203.14.100.40 enable proxy
この方法でログインする それぞれのユーザは, PAP によるユーザ認証を おこなうために /etc/ppp/ppp.secret ファイルにユーザ名とパスワードを 書いておくか, または /etc/password ファイルを使うように,
enable passwdauth
ユーザに静的な IP アドレスを割り当てる場合には, そのアドレスを /etc/ppp/ppp.secret の第三引数として指定することができます. サンプルについては, /usr/share/examples/ppp/ppp.secret.sample を参照してください.
クライアントからの要求に応じて, ppp が DNS や NetBIOS ネームサーバの アドレスを通知するように 設定をおこなうこともできます.
バージョン 1.X の ppp で これらの拡張機能を有効にするには, 以下の行を /etc/ppp/ppp.conf の適切なセクションに追加する必要があるでしょう.
enable msext set ns 203.14.100.1 203.14.100.2 set nbns 203.14.100.5
バージョン 2 以降の ppp では, 以下のようになります:
accept dns set dns 203.14.100.1 203.14.100.2 set nbns 203.14.100.5
これにより, クライアントはプライマリと セカンダリのネームサーバアドレス および NetBIOS ネームサーバホストを知ることができます.
バージョン 2 以降の ppp では, set dns の行を省略した場合には /etc/resolv.conf に書かれているネームサーバのアドレスを使用します.
いくつかのプロバイダでは, PAP または CHAP のいずれかの認証メカニズムを 使用して接続時の認証をおこなうように システムを設定しています. この場合, プロバイダは接続の際に login: プロンプトを送信せず, 最初から PPP で通信を始めようとするでしょう.
PAP ではパスワードがそのまま送られてしまうため, CHAP に比べると安全性が 低くなりますが, このパスワードはシリアル回線のみを通して送られます. そのため, クラッカーが “盗み聞き” する余地は多くないので, 通常ここの セキュリティは問題にはなりません.
静的 IP アドレスによる PPP 接続または 動的 IP アドレスによる PPP 接続の セクションに戻って, 以下の変更をおこないます:
7 set login ... 12 set authname MyUserName 13 set authkey MyPassword
これまでと同様に, 行番号は取り除いておいてください. これは解説の際に参照する行を示すためにつけたものです. なお, 少なくともスペース 1 個分の段づけ (インデント) が必要です.
PAP または CHAP を使用する場合, 通常 プロバイダはサーバへの ログインを必要としません. そのため, “set login” 文字列を 無効にしておかなければいけません.
この行は PAP/CHAP ユーザ名を指定します. MyUserName に 正しい値を入れておく必要があります.
この行は PAP/CHAP パスワードを指定します. MyPassword に 正しい値を入れておく必要があります. PAP と CHAP はデフォルトで両方とも 受け付けられるようになって いますが, PAP や CHAP を使用するという 意思を明示するために,
15 accept PAPまたは
15 accept CHAPという行を追加しておくのも良いでしょう.
適切な診断ポートが設定されている場合には, バックグラウンドで動作中の ppp プログラムと通信することができます. この設定をおこなうためには, 以下の行を設定ファイルに追加しておきます:
set server /var/run/ppp-tun%d DiagnosticPassword 0177
これにより, ppp は指定された unix ドメインの ソケットをモニタして, クライアントから正しいパスワードを受け取った後に アクセスを許可します. このソケット名に含まれる %d は, この ppp が使用している tun デバイスの デバイス番号で置きかえられます.
一旦ソケットの設定が終了したら, スクリプト中で pppctl(8) を 使用して, 動作中の ppp を操作することができるでしょう.
これで ppp の設定は終りました. しかし ppp を動かす前に, まだ少し必要なことがあります. それらの設定は, すべて /etc/rc.conf ファイルを 編集することでおこないます. (このファイルは以前には /etc/sysconfig と呼ばれていました)
このファイルを上から順に設定していきます. まずは hostname= の行が設定されていることを確認します. 例えば以下のように:
hostname="foo.bar.com"
もしプロバイダが静的な IP アドレスとホスト名を割り当てているのなら, ホスト名としてそれを使うのが おそらくベストでしょう.
次に network_interfaces 変数を調べます. 必要に応じて (on demand) プロバイダにダイアルするようにシステムを設定したい場合には, tun0 デバイスがこのリストに追加されていることを確認しておきます. それ以外の場合には, tun0 デバイスをリストから削除しておきます.
network_interfaces="lo0 tun0" ifconfig_tun0=
Note: ifconfig_tun0 変数が空で, /etc/start_if.tun0 という名前の ファイルが作成されていなければなりません. このファイルの内容は以下のようになります.
ppp -auto mysystemこのスクリプトはネットワークの設定時に実行され, ppp デーモンを自動モードで立ち上げます. このマシンがもし LAN のゲートウェイであれば,
-aliasスイッチも使用したいと思うかもしれません. 詳細に関しては, マニュアルページを参照してください.
以下のようにルータプログラムを NO に設定します.
router_enable="NO"
routed は, ppp が作成したデフォルトのルーティングテーブル エントリを削除してしまう場合がありますので, (初期設定では起動されるようになっている) routed デーモンが 起動されないようにしておくことが重要です.
sendmail_flags 行が -q
オプションを含まないように 設定しておいた方がよいでしょう. さもないと, sendmail が
アドレスを調べようとして発信をおこなってしまう場合があります.
以下のような設定で良いでしょう:
sendmail_flags="-bd"
この結果, PPP リンクを立ち上げた時には いつでも以下のコマンドを実行して, キューにたまっているメールを sendmail に送信させる作業が必要になるでしょう.
# /usr/sbin/sendmail -q
ppp.linkup 中で !bg コマンドを使用することで, これを自動的に おこなうこともできます:
1 provider: 2 delete ALL 3 add 0 0 HISADDR 4 !bg sendmail -bd -q30m
こうするのが嫌であれば, SMTP トラフィックをブロックするように “dfilter” を設定しておくこともできます. 詳細についてはサンプルファイルを参照してください.
後はマシンをリブートするだけです.
リブートが終ったら,
# ppp
コマンドを実行し, 続いて PPP セッションを開始させるために dial provider と入力することもできますし, (start_if.tun0 スクリプトを作成していない場合に), 外部へのトラフィックが発生した時に, ppp が自動的に セッションを確立してくれるようにしたいのであれば, 以下のコマンドを実行することもできます.
# ppp -auto provider
要約すると, 初めて ppp を設定する際には, 以下のステップが不可欠です:
クライアント側:
カーネルに tun デバイスが組み込まれていることを確認.
/dev ディレクトリに tunX デバイスファイルが 存在することを確認.
/etc/ppp/ppp.conf にエントリを作成. ほとんどのプロバイダでは, pmdemand の例で充分でしょう.
動的 IP アドレスを使用するなら, /etc/ppp/ppp.linkup に エントリを作成.
/etc/rc.conf (または sysconfig) ファイルを更新.
必要に応じてダイヤル (demand dialing) したいのであれば, start_if.tun0 スクリプトを作成.
サーバ側:
カーネルに tun デバイスが組み込まれていることを確認.
/dev ディレクトリに tunX デバイスファイルが 存在することを確認.
(vipw(8) コマンドを使って) /etc/passwd にエントリを作成.
このユーザのホームディレクトリに ppp -direct direct-server か何かを実行するプロファイルを作成.
/etc/ppp/ppp.conf にエントリを作成. direct-server の例で充分でしょう.
/etc/ppp/ppp.linkup にエントリを作成.
/etc/rc.confファイルを更新.
原作: Gennady B. Sorokopud <gena@NetVision.net.il>, Robert Huff
<rhuff@cybercom.net>.
訳: 石墨 紀孝 <graphite@jp.FreeBSD.org>. 1996
年 9 月 6 日.
PPP の設定を始める前に, pppd が /usr/sbin にあり, また /etc/ppp という ディレクトリが存在することを確認してください.
pppd はふたつのモードで動作します.
“クライアント” モード. シリアル接続やモデムを利用して, そのマシンを 外部のネットワークに PPP 接続したい場合に用います.
“サーバ” モード. そのマシンがネットワーク上にあるときに, PPP を使って ほかのコンピュータを接続する際に用います.
どちらの場合でも, オプションファイルを設定する必要があります (/etc/ppp/options または, そのマシン上で PPP を使用する人が 複数いる場合には ~/.ppprc).
また, ダイヤルとリモートホストへの接続をおこなうために, シリアル接続やモデムを 操作する, なんらかのソフトウェアが必要です (kermit が適しているでしょう).
わたしは, CISCO ターミナルサーバの PPP 回線に接続するために, 下記のような /etc/ppp/options を使用しています.
crtscts # enable hardware flow control
modem # modem control line
noipdefault # remote PPP server must supply your IP address.
# if the remote host doesn't send your IP during IPCP
# negotiation , remove this option
passive # wait for LCP packets
domain ppp.foo.com # put your domain name here
:<remote_ip> # put the IP of remote PPP host here
# it will be used to route packets via PPP link
# if you didn't specified the noipdefault option
# change this line to <local_ip>:<remote_ip>
defaultroute # put this if you want that PPP server will be your
# default router
接続方法:
kermit (またはその他のモデム操作プログラム) を使ってリモートホストに ダイヤルし, 接続してください. そして, あなたのユーザ名とパスワード (必要 であれば, その他にもリモートホストで PPP を有効にするための操作) を入力 します.
kermit を抜けてください. (回線を切断せずに)
下記のように入力します:
# /usr/src/usr.sbin/pppd.new/pppd /dev/tty01 19200
(通信速度とデバイス名には, あなたの環境に適したものを入れてください)
これでこのコンピュータは PPP で接続されました. もし, なんらかの理由で
接続に失敗したならば, /etc/ppp/options ファイルに
debug オプションを追加して,
問題点を突き止めるために, コンソールに表示される
メッセージを調べてください.
下記の /etc/ppp/pppup スクリプトは, 上記の作業を すべて自動的におこないます:
#!/bin/sh
ps ax |grep pppd |grep -v grep
pid=`ps ax |grep pppd |grep -v grep|awk '{print $1;}'`
if [ "X${pid}" != "X" ] ; then
echo 'killing pppd, PID=' ${pid}
kill ${pid}
fi
ps ax |grep kermit |grep -v grep
pid=`ps ax |grep kermit |grep -v grep|awk '{print $1;}'`
if [ "X${pid}" != "X" ] ; then
echo 'killing kermit, PID=' ${pid}
kill -9 ${pid}
fi
ifconfig ppp0 down
ifconfig ppp0 delete
kermit -y /etc/ppp/kermit.dial
pppd /dev/tty01 19200
/etc/ppp/kermit.dial は kermit 用のスクリプトで, ダイヤルして, リモートホストでの認証に必要なすべての処理をおこないます. (そのようなスクリプトの例は この文書の終わりに添付してあります)
PPP 接続を切断するには, 下記のような /etc/ppp/pppdown スクリプトを 使用します:
#!/bin/sh
pid=`ps ax |grep pppd |grep -v grep|awk '{print $1;}'`
if [ X${pid} != "X" ] ; then
echo 'killing pppd, PID=' ${pid}
kill -TERM ${pid}
fi
ps ax |grep kermit |grep -v grep
pid=`ps ax |grep kermit |grep -v grep|awk '{print $1;}'`
if [ "X${pid}" != "X" ] ; then
echo 'killing kermit, PID=' ${pid}
kill -9 ${pid}
fi
/sbin/ifconfig ppp0 down
/sbin/ifconfig ppp0 delete
kermit -y /etc/ppp/kermit.hup
/etc/ppp/ppptest
PPP が動作中かどうかを調べます (/usr/etc/ppp/ppptest):
#!/bin/sh
pid=`ps ax| grep pppd |grep -v grep|awk '{print $1;}'`
if [ X${pid} != "X" ] ; then
echo 'pppd running: PID=' ${pid-NONE}
else
echo 'No pppd running.'
fi
set -x
netstat -n -I ppp0
ifconfig ppp0
モデム回線を切断します (/etc/ppp/kermit.hup):
set line /dev/tty01 ; put your modem device here set speed 19200 set file type binary set file names literal set win 8 set rec pack 1024 set send pack 1024 set block 3 set term bytesize 8 set command bytesize 8 set flow none pau 1 out +++ inp 5 OK out ATH0\13 echo \13 exit
次は kermit の代わりに chat を使う方法です.
原作: Robert Huff <rhuff@cybercom.net>.
pppd 接続を確立するためには, 次の二つのファイルの設定だけで十分です.
/etc/ppp/options:
/dev/cuaa1 115200
crtscts # enable hardware flow control
modem # modem control line
connect "/usr/bin/chat -f /etc/ppp/login.chat.script"
noipdefault # remote PPP serve must supply your IP address.
# if the remote host doesn't send your IP during
# IPCP negotiation, remove this option
passive # wait for LCP packets
domain <your.domain> # put your domain name here
: # put the IP of remote PPP host here
# it will be used to route packets via PPP link
# if you didn't specified the noipdefault option
# change this line to <local_ip>:<remote_ip>
defaultroute # put this if you want that PPP server will be
# your default router
/etc/ppp/login.chat.script:
Note: (実際には一行になります.)
ABORT BUSY ABORT 'NO CARRIER' "" AT OK ATDT<phone.number> CONNECT "" TIMEOUT 10 ogin:-\\r-ogin: <login-id> TIMEOUT 5 sword: <password>
正しくインストールし編集した後は, 必要な事はこれだけです
# pppd
このサンプルは主に Trev Roydhouse <Trev.Roydhouse@f401.n711.z3.fidonet.org> から寄せられた情報に基づいており, 承諾を得て使用しています.
/etc/ppp/options:
crtscts # Hardware flow control
netmask 255.255.255.0 # netmask ( not required )
192.114.208.20:192.114.208.165 # ip's of local and remote hosts
# local ip must be different from one
# you assigned to the ethernet ( or other )
# interface on your machine.
# remote IP is ip address that will be
# assigned to the remote machine
domain ppp.foo.com # your domain
passive # wait for LCP
modem # modem line
下記のような /etc/ppp/pppserv スクリプトで, そのマシンを PPP サーバにすることができます.
#!/bin/sh
ps ax |grep pppd |grep -v grep
pid=`ps ax |grep pppd |grep -v grep|awk '{print $1;}'`
if [ "X${pid}" != "X" ] ; then
echo 'killing pppd, PID=' ${pid}
kill ${pid}
fi
ps ax |grep kermit |grep -v grep
pid=`ps ax |grep kermit |grep -v grep|awk '{print $1;}'`
if [ "X${pid}" != "X" ] ; then
echo 'killing kermit, PID=' ${pid}
kill -9 ${pid}
fi
# reset ppp interface
ifconfig ppp0 down
ifconfig ppp0 delete
# enable autoanswer mode
kermit -y /etc/ppp/kermit.ans
# run ppp
pppd /dev/tty01 19200
PPP サーバを終了するには, この /etc/ppp/pppservdown スクリプト を使用します:
#!/bin/sh
ps ax |grep pppd |grep -v grep
pid=`ps ax |grep pppd |grep -v grep|awk '{print $1;}'`
if [ "X${pid}" != "X" ] ; then
echo 'killing pppd, PID=' ${pid}
kill ${pid}
fi
ps ax |grep kermit |grep -v grep
pid=`ps ax |grep kermit |grep -v grep|awk '{print $1;}'`
if [ "X${pid}" != "X" ] ; then
echo 'killing kermit, PID=' ${pid}
kill -9 ${pid}
fi
ifconfig ppp0 down
ifconfig ppp0 delete
kermit -y /etc/ppp/kermit.noans
下記の kermit スクリプトは, モデムの自動応答機能を有効, または無効にします (/etc/ppp/kermit.ans):
set line /dev/tty01
set speed 19200
set file type binary
set file names literal
set win 8
set rec pack 1024
set send pack 1024
set block 3
set term bytesize 8
set command bytesize 8
set flow none
pau 1
out +++
inp 5 OK
out ATH0\13
inp 5 OK
echo \13
out ATS0=1\13 ; change this to out ATS0=0\13 if you want to disable
; autoanswer mod
inp 5 OK
echo \13
exit
この /etc/ppp/kermit.dial スクリプトは, リモートホストに ダイヤルし, 認証手続きをするのに使用します. あなたは必要に応じて, これを 変更しないといけないでしょう. あなたのユーザ名とパスワードをこの スクリプトに書かなければいけませんし, モデムやリモートホストからの 応答によっては, 入力待ちの文を変更する必要もあります.
;
; put the com line attached to the modem here:
;
set line /dev/tty01
;
; put the modem speed here:
;
set speed 19200
set file type binary ; full 8 bit file xfer
set file names literal
set win 8
set rec pack 1024
set send pack 1024
set block 3
set term bytesize 8
set command bytesize 8
set flow none
set modem hayes
set dial hangup off
set carrier auto ; Then SET CARRIER if necessary,
set dial display on ; Then SET DIAL if necessary,
set input echo on
set input timeout proceed
set input case ignore
def \%x 0 ; login prompt counter
goto slhup
:slcmd ; put the modem in command mode
echo Put the modem in command mode.
clear ; Clear unread characters from input buffer
pause 1
output +++ ; hayes escape sequence
input 1 OK\13\10 ; wait for OK
if success goto slhup
output \13
pause 1
output at\13
input 1 OK\13\10
if fail goto slcmd ; if modem doesn't answer OK, try again
:slhup ; hang up the phone
clear ; Clear unread characters from input buffer
pause 1
echo Hanging up the phone.
output ath0\13 ; hayes command for on hook
input 2 OK\13\10
if fail goto slcmd ; if no OK answer, put modem in command mode
:sldial ; dial the number
pause 1
echo Dialing.
output atdt9,550311\13\10 ; put phone number here
assign \%x 0 ; zero the time counter
:look
clear ; Clear unread characters from input buffer
increment \%x ; Count the seconds
input 1 {CONNECT }
if success goto sllogin
reinput 1 {NO CARRIER\13\10}
if success goto sldial
reinput 1 {NO DIALTONE\13\10}
if success goto slnodial
reinput 1 {\255}
if success goto slhup
reinput 1 {\127}
if success goto slhup
if < \%x 60 goto look
else goto slhup
:sllogin ; login
assign \%x 0 ; zero the time counter
pause 1
echo Looking for login prompt.
:slloop
increment \%x ; Count the seconds
clear ; Clear unread characters from input buffer
output \13
;
; put your expected login prompt here:
;
input 1 {Username: }
if success goto sluid
reinput 1 {\255}
if success goto slhup
reinput 1 {\127}
if success goto slhup
if < \%x 10 goto slloop ; try 10 times to get a login prompt
else goto slhup ; hang up and start again if 10 failures
:sluid
;
; put your userid here:
;
output ppp-login\13
input 1 {Password: }
;
; put your password here:
;
output ppp-password\13
input 1 {Entering SLIP mode.}
echo
quit
:slnodial
echo \7No dialtone. Check the telephone line!\7
exit 1
; local variables:
; mode: csh
; comment-start: "; "
; comment-start-skip: "; "
; end:
原作: Jim Mock <jim@FreeBSD.org> ( node.to
より) 10 Jan 2000.
以下の解説は, PPPoE として知られる, PPP オーバイーサネットの設定法です.
あなたのシステムで PPPoE を適切に機能させるためには, 以下のものが必要です.
FreeBSD 3.4やそれより新しいバージョンのカーネルソース
FreeBSD 3.4やそれより新しいバージョンのppp
以下に示すオプションをカーネルコンフィギュレーションファイルに 追加して, その後 新しいカーネルを コンパイルする必要があります.
options NETGRAPH
以下は任意
options NETGRAPH_PPPOE
options NETGRAPH_SOCKET
この機能は実行時には有効ではありませんが, 要求に応じて ppp は関係のあるモジュールを 読み込みます.
これは動作している ppp.conf の 例です:
default: # or name_of_service_provider set device PPPoE:xl1 # replace xl1 with your ethernet device set mru 1492 set mtu 1492 set authname YOURLOGINNAME set authkey YOURPASSWORD set log Phase tun command # you can add more detailed logging if you wish set dial set login set ifaddr 10.0.0.1/0 10.0.0.2/0 add default HISADDR nat enable yes # if you want to enable nat for your local net papchap: set authname YOURLOGINNAME set authkey YOURPASSWORD
-natオプションを付けてPPPoE
を起動する際には注意するべきです.
/etc/rc.conf ファイルに以下の行を追加 してください:
ppp_enable="YES" ppp_mode="ddial" ppp_nat="YES" ppp_profile="default" # or your provider
原作: 浅見 賢 <asami@FreeBSD.org>,Guy Helmer <ghelmer@FreeBSD.org>, 協力: Wilko Bulte
<wilko@FreeBSD.org>, Piero Serini <piero@FreeBSD.org>.
訳: 花井 浩之 <hanai@FreeBSD.org> 1996 年 8 月 8
日.
ここには FreeBSD マシンを静的アドレスのネットワークにつなげる場合の SLIPのセットアップの一つの方法を書いてあります. ホスト名を動的に割り当てる(つまり, ダイヤルアップするたびにアドレスが かわる)ためには, おそらくもっと凝ったことが必要です.
まず, モデムがどのシリアルポートにつながっているか決めましょう. 私は /dev/cuaa1 から /dev/modemへというシンボリックリンクを張り, コンフィグレーションではその名前だけを使っています. /etc や.kermrc など, システム全体に散らばっているファイルを修正する 必要がでるとまったく煩わしいのです!
Note: ここで, /dev/cuaa0は COM1であり, cuaa1はCOM2です.
カーネルのコンフィグレーションファイルに
pseudo-device sl 1という記述があるのを確認してください. これは GENERIC カーネルに含まれている ので削除していない限り大丈夫でしょう.
/etc/hosts ファイルにあなたのマシンのゲートウェイとネームサーバ を加えてください. 私のは以下のようになっています.
127.0.0.1 localhost loghost 136.152.64.181 silvia.HIP.Berkeley.EDU silvia.HIP silvia 136.152.64.1 inr-3.Berkeley.EDU inr-3 slip-gateway 128.32.136.9 ns1.Berkeley.edu ns1 128.32.136.12 ns2.Berkeley.edu ns2
/etc/host.conf ファイル中で hostsがbind よりも前にあること
を確認してください. さもないとヘンなことが起こるかもしれません.
/etc/rc.conf ファイルを編集してください. なお, お使いの FreeBSD が 2.2.2 よりも前のバージョンのものの場合は, /etc/sysconfig を編集してください.
行
“hostname=myname.my.domain”
を編集してホスト名をセットしてください. 完全なInternetホスト名を与えるべきです.
行
“network_interfaces="lo0"”
を
“network_interfaces="lo0 sl0"”
へ変更することにより ネットワークインタフェースのリストに sl0 を加えてください.
行
ifconfig_sl0="inet ${hostname} slip-gateway netmask 0xffffff00 up"
を加えて sl0 のスタートアップフラグをセットしてください.
行
“defaultrouter=NO”
を
“defaultrouter=slip-gateway”
へ変更してデフォルトのルータを 指定してください.
次の
domain HIP.Berkeley.EDU nameserver 128.32.136.9 nameserver 128.32.136.12
という内容を含むファイル /etc/resolv.conf を作ってください. 見ればわかるように, これらはネームサーバホストを設定しています. もちろん, 実際のドメイン名やアドレスは あなたの環境に依存します.
root と toor (及びパスワードを持っていない他のアカウントすべて) のパスワード を設定してください. passwdコマンドを使いましょう. /etc/passwd や /etc/master.passwd といったファイルを編集してはいけません!
マシンを再起動して正しいホスト名で 立ち上がることを確認してください.
モデムを起動, つながったらプロンプトで slipとタイプし, マシン名と パスワードを入力してください. 入力する必要があるものは環境に よって異なります. 私は次のようなスクリプトでkermitを使っています.
# kermit setup set modem hayes set line /dev/modem set speed 115200 set parity none set flow rts/cts set terminal bytesize 8 set file type binary # The next macro will dial up and login define slip dial 643-9600, input 10 =>, if failure stop, - output slip\x0d, input 10 Username:, if failure stop, - output silvia\x0d, input 10 Password:, if failure stop, - output ***\x0d, echo \x0aCONNECTED\x0a
(もちろん, ホスト名とパスワードは変える必要があります). 接続するためには kermit のプロンプトで slipとタイプするだけです.
Note: ファイルシステムのどんなところにもプレインテキスト にパスワードを書いておくのは一般的にはよくありません. 覚悟の上で やってください. 私は単に不精なだけです.
ここでkermitから抜け出し (zでkermitをサスペンドできます), root で
# slattach -h -c -s 115200 /dev/modem
と入力しましょう. もしルータの向う側のホストへ ping
できるなら接続成功です! もしうまく いかなければslattachへの引数として -c の代わりに-aとやってみてください.
slattachを殺すためにrootで
# kill -INT `cat /var/run/slattach.modem.pid`とタイプしてください. そして kermit に戻り (もしkermitをサスペンドしていたなら fg), kermitから抜けてください (q).
slattachのマニュアルページにはインタフェースを落すために ifconfig sl0 downをしなければいけないと書いていますが, 私には差がないように見えます. (ifconfig sl0とやっても同じ結果が得られる.)
時にはモデムがキャリアを落すのを 拒絶するかもしれません(私のは よくそうなります). その時は単にkermitをスタートしてまた終了 してください. 普通は2回目で落ちます.
もし動かなければ自由に私に質問してください. 今までいろんな人がつまずいた のは次のようなことです.
slattach で -c や -a
を使わなかった(私はなぜこれが致命的になり得るのか わかりませんが,
このフラグを付けることで少なくとも一人の 問題は解決しました.)
sl0 の代わりに s10
を使った(いくつかのフォントでは見分けるのは難しい かもしれません).
インタフェースの状態を見るために ifconfig sl0 をやってみてください. 私は,
# ifconfig sl0
sl0: flags=10<POINTOPOINT>
inet 136.152.64.181 --> 136.152.64.1 netmask ffffff00
となります.
また, pingが “no route to host” というメッセージを返す時には netstat -rでルーティングテーブルを確認しましょう. 私のは,
# netstat -r Routing tables Destination Gateway Flags Refs Use IfaceMTU Rtt Netmasks: (root node) (root node) Route Tree for Protocol Family inet: (root node) => default inr-3.Berkeley.EDU UG 8 224515 sl0 - - localhost.Berkel localhost.Berkeley UH 5 42127 lo0 - 0.438 inr-3.Berkeley.E silvia.HIP.Berkele UH 1 0 sl0 - - silvia.HIP.Berke localhost.Berkeley UGH 34 47641234 lo0 - 0.438 (root node)
となります. (これはたくさんのファイルを転送した後でのもので, あなたの見る数字はもっと小さいかも しれません).
訳: 冨田 重成 <ts@icu.ac.jp>. 1996 年 9 月 6
日.
この文書の目的は, SLIPサーバ機能を FreeBSDシステムのもとで設定するため の助言を提供することです. SLIPサーバ機能を設定するということは, リモー トの SLIPクライアントがログインできるようにするために, 自動的に接続処 理をおこなうようにすることです. この文書は著者の経験に基づいておりますが, 実際のシステム構成や要望は異なりますから, すべての疑問にこの文書が答え ることはできません. なお, ここでの助言を試みた結果, あなたのシステムへ の悪影響やデータの損失が生じたとしても, 著者が責任を持つことはできませ んのでご了解をお願いします.
この文書の内容はテクニカルなものなので, 前提知識が必要です. すなわち, TCP/IPネットワークプロトコルについての知識, 特に, ネットワークとノード のアドレス指定をはじめ, ネットワークアドレスマスク, サブネット化, ルー ティング, および RIPなどのルーティングプロトコルなどに関する知識を前提 としています. ダイヤルアップサーバで SLIP機能を設定するためには, これ らの概念についての知識が必要ですから, もし不案内であると思われる方は, O'Reilly & Associates, Inc.から出版されている Craig Hunt氏の TCP/IP Network Administration (ISBN 0-937175-82-X)か, または Douglas Comer氏の TCP/IPプロトコルに関する一連の書籍をお読みください.
前提知識に加え, さらに, モデムの設定が完了しており, そのモデムを経由し てログインできるように, システムファイル群が適切に記述できているものと 仮定しています. もしモデムの準備ができていないときには, あらかじめダイヤ ルアップ機能の設定についてのチュートリアルをお読みください. Webブラ ウザが使えるのであれば http://www.FreeBSD.org/ におけるチュー トリアルの一覧を調べてください. あるいは, この文書を見つけた場所を調べ て, dialup.txt やそれに類似した名前の文書をお読みください. 関連す るマニュアルページとしては, シリアルポート向けデバイスドライバについて の sio(4) をはじめ, モデムからのログインを 受理できるようにシステ ムを設定するための ttys(5), gettytab(5), getty(8), init(8) など, さらには, シリアルポート関連パラメータ ( たと えば直接接続シリアルインタフェースの clocal ) についての stty(1) なども助けになるかもしれません.
一般的な設定内容で FreeBSDを SLIPサーバとして利用すると, その動作は次 のようになります. まず, SLIPユーザが FreeBSD による SLIPサーバへ電話し て, SLIP専用IDでログインします. なお, このIDを持ったユーザはシェルとし て /usr/sbin/sliplogin を使います. この sliplogin は, ファイル /etc/sliphome/slip.hosts の中から, ログインIDと一致する 記述行を探します. もし一致する行があれば, ログインしたシリアル回線を, 利用可能な SLIPインタフェースへ接続し, その後にシェルスクリプト /etc/sliphome/slip.login で SLIPインタフェースを設定します.
仮に SLIPユーザIDが Shelmerg とします. すると, /etc/master.passwd における Shelmerg のエントリは次のよ うなものになります (実際には一つの行に続いている) .
Shelmerg:password:1964:89::0:0:Guy Helmer - SLIP:/usr/users/Shelmerg:/usr/sbin/sliplogin
Shelmerg がログインすると, sliplogin は, ファイル /etc/sliphome/slip.hosts からユーザIDと一致する行を探しま す. いま仮に, /etc/sliphome/slip.hosts に次のような記述がなされていたとします.
Shelmerg dc-slip sl-helmer 0xfffffc00 autocomp
sliplogin が上記のエントリを見つけると, Shelmerg が使用して いるシリアル回線を, 利用可能な SLIPインタフェースのなかの最初のものへ 接続し, 次の内容の /etc/sliphome/slip.login を実行します.
/etc/sliphome/slip.login 0 19200 Shelmerg dc-slip sl-helmer 0xfffffc00 autocomp
もし上記の手順が正常に処理されると, /etc/sliphome/slip.login は, sliplogin が割り当てた SLIPインタフェース (この例では slip.login で与えられたパラメータのうちで最初の値である SLIP インタフェース0である) に対して ifconfig を実行し, ローカル IPアドレス (dc-slip)をはじめ, リモート IPアドレス (sl-helmer), SLIPインタフェースへのネットワークマスク (0xfffffc00), およびその他のフラグ (autocomp)を設定 します. 逆に, さきほどの手順が正常に終了しなかった場合, 通常は sliplogin は十分な情報を syslog の daemon 機能経由で /var/log/messages へ記録します ( syslogd(8) や syslog.conf(5) のマニュアルページを参照のうえ, さらに /etc/syslog.conf を調べて syslogd がどのファイルへ記 録するかを確認のこと) .
例はこのくらいにして, さっそくシステムのセットアップを始めてみましょう.
FreeBSD のデフォルトのカーネルには, 通常, 二つの SLIPインタフェースが 準備されています (sl0 と sl1) . これらのインタフェー スが使用中のカーネルに準備されているかどうかを調べるには, netstat -i を実行してください.
netstat -i の出力例
Name Mtu Network Address Ipkts Ierrs Opkts Oerrs Coll ed0 1500 <Link>0.0.c0.2c.5f.4a 291311 0 174209 0 133 ed0 1500 138.247.224 ivory 291311 0 174209 0 133 lo0 65535 <Link> 79 0 79 0 0 lo0 65535 loop localhost 79 0 79 0 0 sl0* 296 <Link> 0 0 0 0 0 sl1* 296 <Link> 0 0 0 0 0
netstat -i の出力に sl0 と sl1 のインタフェー スが含まれているということから, カーネルには二つの SLIPインタフェー スが組み込まれているということを示しています. (sl0 と sl1 に付いたアスタリスクは, netstat -i の実行時点で はインタフェースが “ダウン” していることを表しています. )
なお, パケットのフォワード機能は FreeBSD のデフォルトのカーネルでは設定 されていません
(すなわちルータとしては動作しない) . もしインターネット 接続ホストについての RFC要件 (
RFC 1009 [Requirements for Internet Gateways] と 1122 [Requirements for Internet Hosts --
Communication Layers], おそらく 1127 [A Perspective on the Host Requirements RFCs] も )
に準拠して, FreeBSDによる SLIPサー バをルータとして動作させたいときには, /etc/rc.conf (バージョ ン 2.2.2 より前の FreeBSD では /etc/sysconfig) ファイル の gateway_enable
変数を YES としてください. もし古いシステ ムで /etc/sysconfig ファイルすらないときには, 次のコマン ドを /etc/rc.local へ追加してください.
sysctl -w net.inet.ip.forwarding = 1
この新しい設定を有効とするには, リブートする必要があります.
デフォルトのカーネルコンフィグレーションファイル (/sys/i386/conf/GENERIC) の最後の部分に, 次のような行がありま す.
pseudo-device sl 2
この行によって, 使用可能な SLIPデバイスの総数が決まります. すなわち, 行 末の数値が, 同時に動作可能な SLIP接続の最大数となります.
カーネルの再構築については, FreeBSDカー ネルのコンフィグレーション を参照ください.
すでにご説明したように, /usr/sbin/sliplogin のコンフィグレー ションのために, 3種類のファイルが/etc/sliphome ディレクトリに あります (sliplogin についての実際のマニュアルページとしては sliplogin(8) を参照のこと) . ファイル slip.hosts は SLIPユーザおよびその IPアドレスを決めます. 通常, ファイル slip.login は, SLIPインタフェースを設定することだけに使 用します. slip.logout はオプションのファイルで, slip.login で設定した内容を, シリアル接続が終了した時点で解除 するときに使用します.
/etc/sliphome/slip.hosts には, 少なくとも 4 つの項目をホワイ トスペース (スペースやタブ) で区切って指定します.
SLIPユーザのログインID
SLIPリンクのローカル (SLIPサーバ側) アドレス
SLIPリンクのリモートアドレス
ネットワークマスク
ホスト名をローカルおよびリモートのアドレスとして 記述できます (IPアドレ スの決定は, /etc/host.conf の指定内容に応じて, /etc/hosts か DNSのいずれかによって決定される) . また, ネット ワークマスクも /etc/networks ファイルに記述された名前を参照す ることで, 指定することもできると思います. これまでの例としてあげたシス テムでの /etc/sliphome/slip.hosts は次のようになります.
# # login local-addr remote-addr mask opt1 opt2 # (normal,compress,noicmp) # Shelmerg dc-slip sl-helmerg 0xfffffc00 autocomp
それぞれの行の最後には, 次に示すオプションを一つ以上指定できます.
normal -- ヘッダを圧縮しない
compress -- ヘッダを圧縮する
autocomp -- リモートの設定に応じて, ヘッダを圧縮する
noicmp -- ICMPパケットを禁止する ( “ping”
パケットは送出されず, バンド幅を占有しない)
なお, FreeBSDバージョン2の初期リリースの sliplogin は, 旧
FreeBSD 1.xでは有効であった上記のオプションを無視していましたので, normal, compress, autocomp, そして noicmp
などのオプションは FreeBSD 2.2でサポートされるまでは効果がありませんでした (た
だしこれらのフラグを使うためには slip.login
スクリプトへ記述する 必要がある) .
SLIPリンクでのローカルとリモート向けのアドレスの 選び方は, TCP/IPサブネッ トを専用に割り当てるか, または “プロキシ ARP” を SLIPサーバへ用いるかによって違います ( “プロキシ ARP” という用語のここでの使い方は本来のものではないが, 説明のためにこの用語を使う) . もし, どちらの方式を選ぶべきか判らなかったり, IPアドレスの割り当て方が不明のときには, 上述の 前提 の節で紹介した TCP/IP関連書籍を参考になさるか, またはあなたの IPネットワークを管理している方に相談なさると よいでしょう.
独立したサブネットを SLIPクライアントへ適用するときには, すでに割り当てられている IPネットワーク番号の範囲からサブネット番号を割り当て, 同 時にそのサブネットの範囲内で有効な IPアドレスを SLIPクライアントの IP 番号として割り当てる必要があります. さらに, この SLIPサブネットから SLIPサーバを経由して最も近い IPルータへの経路を静的に設定するか, または gated を FreeBSDによる SLIPサーバへインストールして, 適当 なルーティングプロトコルを使って, SLIPサーバ経由のサブネットへの経路情 報をルータ群へ通知できるように設定するか, のいずれかをおこなう必要があります.
“プロキシ ARP” 方式を採用するときには, SLIPクライアント向けの IPアドレス として, SLIPサーバのサブネットの範囲から 選んで割り当てるとともに, arp(8) コマンドを使うために /etc/sliphome/slip.login と/etc/sliphome/slip.logout のスクリプトを修正して, SLIPサー バにおける ARPテーブル内のプロキシ ARPエントリへ 反映させる必要がありま す.
ファイル /etc/sliphome/slip.login の一般的な内容は次にようになります.
#!/bin/sh - # # @(#)slip.login 5.1 (Berkeley) 7/1/90 # # generic login file for a slip line. sliplogin invokes this with # the parameters: # 1 2 3 4 5 6 7-n # slipunit ttyspeed loginname local-addr remote-addr mask opt-args # /sbin/ifconfig sl$1 inet $4 $5 netmask $6
この slip.login ファイルの役目は単に, SLIPインタフェースにつ いてのローカルとリモートのアドレス, およびそのネットワークマスクを ifconfig コマンドで設定することです.
もし “プロキシ ARP” 方式を採用する (SLIPクライアントへ独立したサブネットを使わない) ときには, ファイル /etc/sliphome/slip.login は次のような内容になります.
#!/bin/sh - # # @(#)slip.login 5.1 (Berkeley) 7/1/90 # # generic login file for a slip line. sliplogin invokes this with # the parameters: # 1 2 3 4 5 6 7-n # slipunit ttyspeed loginname local-addr remote-addr mask opt-args # /sbin/ifconfig sl$1 inet $4 $5 netmask $6 # Answer ARP requests for the SLIP client with our Ethernet addr /usr/sbin/arp -s $5 00:11:22:33:44:55 pub
この slip.login で追加された行 arp -s $5 00:11:22:33:44:55 pub は, SLIPサーバにおける ARPテーブルへ新たなエントリを作ります. SLIPサーバ は, この ARPエントリが作られると, SLIPクライアントの IPアドレスと話し たい他の IPノードが要求してきたときにはいつも, SLIPサーバ の Ethernet MACアドレスを返すようになります.
上記の例を実際に流用なさるときには, 例にある Ethernet MACアドレス (00:11:22:33:44:55) を, あなたのシステムの実際のEthernetカー ドの MACアドレスと置き換えなければ “プロキシ ARP” はうまく動作しません! SLIPサーバの Ethernet MACアドレスを調べるには netstat -i コマ ンドを利用してください. 実行結果の第2行は次のようなものになるはずです.
ed0 1500 <Link>0.2.c1.28.5f.4a 191923 0 129457 0 116
この例での Ethernet MACアドレスは 00:02:c1:28:5f:4a であると 読みます. なお arp(8) における MAC アドレスの指定に際しては, コマンド netstat -i が付けた Ethernet MACアドレスのピリオド記 号をコロン記号と置き換え, かつ単一桁の 16 進数にはゼロを先頭に加える必 要があります. この指定についての正確な情報は arp(8) を参照く ださい.
Note: /etc/sliphome/slip.login と /etc/sliphome/slip.logout を作成したならば, ファイル属性の “実行” ビット (すなわち chmod 755 /etc/sliphome/slip.login /etc/sliphome/slip.logout) を 設定しなければなりません. さもなければ sliplogin が うまく実行されません.
ファイル /etc/sliphome/slip.logout は必ずしも必要なものではあ りません (ただし “プロキシ ARP” を利用する場合を除く) . もしこのファイルを 作成するときには, 次に示す標準的な slip.logout スクリプト例を 参考にしてください.
#!/bin/sh - # # slip.logout # # logout file for a slip line. sliplogin invokes this with # the parameters: # 1 2 3 4 5 6 7-n # slipunit ttyspeed loginname local-addr remote-addr mask opt-args # /sbin/ifconfig sl$1 down
“プロキシ ARP” を利用する場合, この /etc/sliphome/slip.logout を 使って, 特定の SLIPクライアント向けの ARPエントリを削除したくなるようなときがあります.
#!/bin/sh - # # @(#)slip.logout # # logout file for a slip line. sliplogin invokes this with # the parameters: # 1 2 3 4 5 6 7-n # slipunit ttyspeed loginname local-addr remote-addr mask opt-args # /sbin/ifconfig sl$1 down # Quit answering ARP requests for the SLIP client /usr/sbin/arp -d $5
コマンド arp -d $5 は, SLIPクライアントがログインした 際に, “プロキシ ARP” を使った slip.login によって追加され た ARPエントリを削除します.
これによって, 繰り返して利用することができるわけです. 必ず, /etc/sliphome/slip.logout を作成した後に, 実行ビットを設定し てください ( chmod 755 /etc/sliphome/slip.logout ) .
“プロキシ ARP” 方式を利用せずに SLIPクライアントとその他のネットワーク (Internetも含む) の構成要素との間でパケットをルーティングするときには, SLIPサーバ経由で SLIPクライアントが属するサブネットまでの経路を, 最も 近いデフォルトのルータ群へ静的な経路情報として 追加しなければならないか, または gated を FreeBSDによる SLIPサーバへインストールして, SLIP サブネットについての経路情報を, 適当なルーティングプロトコルでルー タ群へ通知できるように設定するか, のどちらかをおこなわなければなりません.
静的な経路を最も近いデフォルトの ルータ群へ追加することが困難なことがあ ります (経路情報を追加できる権限がなければそもそも不可能となる). もし あなたの組織に複数のルータで構成された ネットワークがあるならば, ある種 のルータ (たとえば Ciscoや Proteonなど) は, 静的な経路を SLIPサブネッ トへ使うようにルータを設定しなければならないだけでなく, その静的経路を 他のどのルータへ知らせるのかもあらかじめ 指定しておく必要がありますから, 静的経路に基づくルーティングを軌道に乗せるには それなりの専門的技術やト ラブルシューティングやコツが必要だと思います.
静的経路についての頭痛への代替手段は, gated を FreeBSDによる SLIPサー バへインストールして, 適切なルーティングプロトコル (RIP/OSPF/BGP/EGP) を使って SLIPサブネットについての経路情報を他のルータへ知らせるように 設定することです. ports コレクションから gated を用いることもできますし, GateD 匿名 FTP サイト から探して自分自身で構築することもで きます. この文章を執筆時点の最新バージョンは gated-R3_5Alpha_8.tar.Z であり, このファイル “だけで” FreeBSDで 動作させることができます. gated についてのすべての情報と文書 は Merit GateD コンソーシアム からはじまる Web 上で入手でき ます. gated のコンパイルとインストールを行ったならば, 独自の 設定のために /etc/gated.conf ファイルを記述してください. 次の 例は, 筆者が FreeBSDによる SLIP サーバで使っている内容と類似のものです.
#
# gated configuration file for dc.dsu.edu; for gated version 3.5alpha5
# Only broadcast RIP information for xxx.xxx.yy out the ed Ethernet interface
#
#
# tracing options
#
traceoptions "/var/tmp/gated.output" replace size 100k files 2 general ;
rip yes {
interface sl noripout noripin ;
interface ed ripin ripout version 1 ;
traceoptions route ;
} ;
#
# Turn on a bunch of tracing info for the interface to the kernel:
kernel {
traceoptions remnants request routes info interface ;
} ;
#
# Propagate the route to xxx.xxx.yy out the Ethernet interface via RIP
#
export proto rip interface ed {
proto direct {
xxx.xxx.yy mask 255.255.252.0 metric 1; # SLIP connections
} ;
} ;
#
# Accept routes from RIP via ed Ethernet interfaces
import proto rip interface ed {
all ;
} ;
この gated.conf ファイルの例では, SLIPのサブネット xxx.xxx.yy についての経路情報を RIPを使って Ethernetへブロー ドキャストしています. もし ed ドライバ以外の Ethernetドライバを使うのであれば, ed インタフェースの記述を適切なものに置き換えてくだ さい. またこの例では, gatedの動作をデバッグするために, /var/tmp/gated.output へトレース情報を出力するように指示して います. gated が希望通りに動作したならば, このトレースオプショ ンを止めることができます. なお, 例における xxx.xxx.yy を, あ なた自身の SLIPサブネットのネットワークアドレスに換えてください (また proto direct 部分のネットワークマスクも換えることを忘れないこ と) .
gated のコンパイルとインストールが終了し, コンフィグレーショ ンファイルの作成も完了したら, FreeBSDシステムではデフォルトの routedに代わって gated を起動してください. そのため には, /etc/netstart の routed/gated 起動パラメータを 適切な値に設定してください. gated のコマンドラインパラメータにつ いての情報は, gated のマニュアルページを参照してください.
訳: 田中 美穂子 <Mihoko_Tanaka@yokogawa.co.jp>.
14 January 1997.
“電子メール”、email としてのほうが知られているでしょう、 は現代で最も広く利用されているコミュニケーション手段の一つです。 この章では FreeBSD 上でメールサーバを実行するための基本的な導入を説明します。 しかし、この文書は完璧な参考文献ではなく、 実際のところ考慮すべき重要な点の多くが省略されています。 この件について、より網羅したものについては Appendix B に掲載されている多くの優れた書籍を参照してください。
この章では、以下の分野について説明します。
電子メールの送受信に関係しているソフトウェアの構成要素
FreeBSD における sendmail の基本的な設定ファイルのある場所
スパマーがあなたのメールサーバを踏台として不正に使用することを防ぐ方法
あなたのシステムに sendmail の置き換えとなる代替の MTA をインストールして設定する方法
メールサーバにまつわる共通の問題の解決法
UUCP とともに SMTP を使う方法
ダイアルアップ接続でメールを使う方法
セキュリティを向上するために SMTP 認証を設定する方法
この章を読む前に、以下のことを理解しておく必要があります。
ネットワーク接続の適切な設定方法 (Chapter 22)
あなたのメールホストに対する DNS 情報の適切な設定方法 (Chapter 22)
サードパーティ製ソフトウェアのインストール方法 (Chapter 5)
email の交換には 5 つの主要な部分があります。 それらは ユーザープログラム 、 サーバーデーモン、 DNS、 POP もしくは IMAP のデーモン、 そしてもちろん メールホストです。
いくつか名前を挙げれば、 mutt, pine, elm そして mail といったコマンドラインプログラムや balsa, xfmail のような GUI プログラム、WWW ブラウザーのようにさらに “洗練された” ものまであります。 これらのプログラムは、email の処理を server daemons を呼び出したり TCP 経由で渡したり、といった手段でローカルの “メールホスト” に任せるだけです。
通常、これは sendmail (FreeBSD のデフォルト) や qmail, postfix もしくは exim といった他のメールサーバーデーモンの一つです。 他にもあるのですが、以上のものが広く使われています。
サーバーデーモンは通常 2 つの機能 -- やってくるメールを受け取るのと出ていくメールを配送する、 を持っています。メールを読むために POP や IMAP で接続する、 ということはできません。 そのためにはもう一つデーモンが必要なのです。
いくつかの古いバージョンの sendmail には深刻なセキュリティ問題がありますが、 現在のバージョンを使っていれば特に問題ないことに注意してください。 例のごとく、 どんなソフトウェアを利用する時にも最新の状態にしておくのが大事なのです。
Domain Name System (DNS) とそのデーモンである named は email の配送において大変重要な役割を担ってます。 あなたのサイトからもう一つのサイトへメールを配送するためには、 サーバーデーモンは DNS からそのサイトを探し、 メールの受け取り先のホストを決定します。
メールがあなたに送られた場合にも同じような仕組みになっています。 DNS にはホスト名と IP アドレス、ホスト名とメールホストをマッピングするデータベースがあります。 IP アドレスは A レコードで指定されます。 MX (Mail eXchanger) レコードはあなた宛のメールを受け取るホストを指定します。 あなたのホスト名に対する MX レコードがない場合には、 メールは直接あなたのホストに配送されます。
メールはメールホストが受け取ります。 このホストは送られてきたメールを集め、 (ユーザーが) 読んだりピックアップしたりするために保存します。 保存されているメールをピックアップするにはメールホストに接続する必要があります。 これは POP や IMAP を用いて行なわれます。 メールホスト上で直接メールを読みたい時は POP や IMAP のサーバーは必要ありません。
POP や IMAP のサーバーを走らせるためには 2 つのことをやらなければいけません。
POP や IMAP のデーモンを ports コレクション からインストールします。
/etc/inetd.conf を修正して POP や IMAP のサーバーが起動されるように設定します。
sendmail(8) は FreeBSD のデフォルトの メールトランスファエージェント (MTA) です。 sendmail の仕事はメールユーザエージェント (MUA) からのメールを受け取り、 それを設定ファイルで定義された適当なメーラに届けることです。 sendmail はネットワーク接続を受け入れて、 ローカルのメールボックスにメールを届けたり 別のプログラムにメールを渡したりもできます。
sendmail は次の設定ファイルを使用します。
| ファイル名 | 機能 |
|---|---|
| /etc/mail/access | sendmail アクセスデータベースファイル |
| /etc/mail/aliases | メールボックスエイリアス |
| /etc/mail/local-host-names | sendmail が受け付ける配送先ホストのリスト |
| /etc/mail/mailer.conf | メーラプログラムの設定 |
| /etc/mail/mailertable | メーラ配送表 |
| /etc/mail/sendmail.cf | sendmail の主設定ファイル |
| /etc/mail/virtusertable | 仮想ユーザおよび仮想ドメイン表 |
アクセスデータベースは、 どのホストまたは IP
アドレスがローカルメールサーバに接続できるか、
そして接続の種類は何か、ということを定義します。 ホストは OK, REJECT, RELAY として指定できます。
または、メーラエラーを指定することで、 単に sendmail
の エラー処理ルーチンに渡されます。 OK
として指定されたホスト (これはデフォルトです) は、
メールの最終宛先がローカルマシンである限り、
このホストへメールを送ることを認められます。 REJECT
として指定されたホストは、 すべてのメール接続を拒絶されます。 ホスト名に対して
RELAY オプションを指定されたホストは、
このメールサーバを通過して任意の宛先へメールを送ることを認められます。
Example 21-1. sendmail アクセスデータベースの設定
cyberspammer.com 550 We don't accept mail from spammers FREE.STEALTH.MAILER@ 550 We don't accept mail from spammers another.source.of.spam REJECT okay.cyberspammer.com OK 128.32 RELAY
この例では五つのエントリがあります。 表の左側に当てはまるメール送信者は、表の右側の動作に支配されます。 はじめの二つの例は、エラーコードを sendmail のエラー処理ルーチンに渡します。 メールが表の左側に当てはまると、リモートホストにそのメッセージが表示されます。 次のエントリは another.source.of.spam というインターネット上の特定のホストからのメールを拒絶します。 次のエントリは okay.cyberspammer.com からのメール接続を受け入れます。 このエントリは上にある cyberspammer.com という行よりもさらに厳密です (厳密に一致すればするほど、そうでないものより優先されます)。 最後のエントリは 128.32 から始まる IP アドレスのホストからの電子メールのリレーを認めます。 これらのホストは他のメールサーバに到達できるこのメールサーバを使ってメールを送ることができるでしょう。
このファイルを変更したら、 データベースを更新するために /etc/mail/ ディレクトリで make コマンドを実行する必要があります。
エイリアスデータベースには、 他のユーザ、ファイル、プログラムまたは他のエイリアスに展開される 仮想的なメールボックスの一覧が記載されています。 /etc/mail/aliases において使用できる例をいくつかあげます。
Example 21-2. メールエイリアス
root: localuser ftp-bugs: joe,eric,paul bit.bucket: /dev/null procmail: "|/usr/local/bin/procmail"
ファイル形式はシンプルです。 コロンの左側にあるメールボックス名は、右側のターゲットに展開されます。 はじめの例は単純に root のメールボックスを localuser のメールボックスに展開し、 それからエイリアスデータベースをもう一度調べます。 一致するエントリがなければメッセージはローカルユーザである localuser に配送されます。 次の例はメールリストです。 ftp-bugs のメールボックスへのメールは joe, eric および paul の三つのローカルメールボックスに展開されます。 リモートメールボックスは user@example.com のように指定できることに注意してください。 次の例はメールをファイル、この場合 /dev/null に書き込みます。 最後の例はメールをプログラムに送ります。 この場合メールのメッセージは UNIX パイプを通じて /usr/local/bin/procmail の標準入力に書き込まれます。
このファイルを変更したら、 データベースを更新するために/etc/mail/ ディレクトリで make コマンドを実行する必要があります。
これは sendmail(8) がローカルホスト名として認めるホスト名のリストです。 sendmail がメールを受け取るすべてのドメインやホストにこのファイルを置いてください。 たとえば、このメールサーバは example.com というドメインおよび mail.example.com というホストへのメールを受け取るとすると、 local-host-names ファイルの内容は次のようになるでしょう。
example.com mail.example.com
このファイルを更新したら、変更を読み込むために sendmail(8) を再起動する必要があります。
sendmail の主設定ファイルである sendmail.cf は、電子メールアドレスの書き換えから、 リモートメールサーバへ拒絶メッセージを送ることまで sendmail の全般的な動作をすべて制御します。 当然、そのようなさまざまな役割によりこの設定ファイルは大変複雑で、 その詳細についてはこの節の少し範囲外です。好運なことに、 標準的な構成のメールサーバではこのファイルをめったに変更する必要はありません。
sendmail の主設定ファイルは sendmail の機能と動作を決定する m4(1) マクロから構築できます。 詳細については /usr/src/contrib/sendmail/cf/README を参照してください。
このファイルを更新したら、その変更を反映するために sendmail を再起動する必要があります。
virtusertable は仮想ドメインおよび仮想メールボックスに対するアドレスを実際のメールボックスと対応づけます。 これらのメールボックスにはローカル、リモート、 /etc/mail/aliases に定義されたエイリアス、 またはファイルを使用できます。
Example 21-3. 仮想ドメインメール対応表の例
root@example.com root postmaster@example.com postmaster@noc.example.net @example.com joe
上の例では example.com ドメインへの対応づけをしています。 このファイルはファイルの下までファーストマッチ (訳注: 一致するルールが複数ある場合、 一番最初に一致したルールが適用されること) で処理されます。 はじめの行では root@example.com を ローカルの root メールボックスに対応づけています。 次のエントリでは postmaster@example.com を noc.example.net ホスト上の postmaster メールボックスに対応づけています。 最後に、今までのところでは example.com に関して何も一致しない場合、最後のエントリと一致するでしょう。 これは example.com の誰かに送ったすべてのメールが一致します。これは joe のローカルメールボックスに対応づけられています。
すでに述べたように、FreeBSD には MTA (Mail Transfer Agent) として、 sendmail がすでにインストールされています。 したがって、デフォルトではこれがメールの送受信を担当しています。
しかしながら、さまざまな理由によって、 システムの MTA を変更しようと考えるシステム管理者もいるかもしれません。 その理由は、単に他の MTA を試してみたいというものから 他のメーラに依存する特定の機能やパッケージが必要だといったものまで、 多岐にわたることでしょう。 幸い、理由がどんなものであれ、FreeBSD では簡単に変更できます。
さまざまな MTA が利用できます。 FreeBSD Ports Collection から探しはじめるのがよいでしょう。 もちろん、どんな場所からでも、あなたが利用したい MTA が FreeBSD で動作する限りすべて自由に使えます。
新しい MTA をインストールすることからはじめましょう。 新しい MTA をインストールすると、 あなたの要求が実際に実現したかどうか決める機会が与えられます。さらに、 サービスを sendmail から引き継ぐ前に 新しいソフトウェアを設定する機会が与えられます。これを行う場合、 新しいソフトウェアが /usr/bin/sendmail のようなシステムバイナリを上書きしようとしないことを確認してください。 そうしないとあなたが設定する前に新しいメールソフトウェアが本格的に動作しはじめてしまいます。
あなたが選択したソフトウェアを設定する方法についての情報は、 その MTA の文書を参照してください。
sendmail を起動するために使用されていた手続きは、 4.5-RELEASE と 4.6-RELEASE の間で著しく変更されました。 したがって、それを無効にするための手続きは微妙に違います。
/etc/rc.conf に次の行を加えてください。
sendmail_enable="NO"
これは sendmail のメール受信機能を無効にします。 しかし /etc/mail/mailer.conf (下記参照) が変更されていなければ、sendmail はメールの送信にまだ使われるでしょう。
sendmail を完全に無効にするためには /etc/rc.conf に次の行を加えなくてはいけません。
sendmail_enable="NONE"
Warning: もしこの方法で sendmail のメール送信機能を無効にしたのなら、 完全に動作する代替メール配送システムと置き換えることが重要です。 さもなければ、periodic(8) などのシステム機能は、 それらの結果を通常想定しているようにメールで配送することができなくなるでしょう。 システムの多くの部分が sendmail 互換のシステムがあることを想定しているかもしれません。 もしそれらを無効にした後に、 アプリケーションがメールを送ろうとするために sendmail のバイナリを使用し続ければ、 メールは使われていない sendmail のキューに入り、そして決して配送されないでしょう。
もし sendmail のメール受信機能だけを無効にしたいのなら /etc/rc.conf に以下の行を追加してください。
sendmail_enable="NO"
sendmailの起動オプションに関する詳細は rc.sendmail(8) マニュアルをご覧ください。
起動時に新しい MTA を起動するには二つの選択肢があります。 ここでも、あなたが稼働させている FreeBSD のバージョンに依存します
/usr/local/etc/rc.d/ ディレクトリに、 ファイル名が .sh でおわり、 root によって実行可能なスクリプトを追加します。 このスクリプトは start および stop パラメータを引数として受け付けるようにします。 起動時にシステムスクリプトは次のコマンドを実行するでしょう。
/usr/local/etc/rc.d/supermailer.sh start
これは手動でサーバを起動するためにも使用できます。 システム終了時にはシステムスクリプトは stop オプションを使用して、次のコマンドを実行するでしょう。
/usr/local/etc/rc.d/supermailer.sh stop
これはシステムが稼働している間に手動でサーバを停止するためにも使えます。
より新しいバージョンの FreeBSD では、 上記の方法または次の行を /etc/rc.conf に設定できます。
mta_start_script="filename"
filename は、あなたが MTA を立ち上げるために起動時に実行するスクリプト名です。
sendmail プログラムは UNIX システム上の標準ソフトウェアとして本当にどこでも利用できるので、 これがすでにインストールおよび設定されているとみなしている ソフトウェアもあるかもしれません。 この理由により、代替となる MTA の多くは sendmail コマンドラインインタフェースと 互換性のある実装を提供しています。 これを “差し込む” ことによって、 sendmail の置き換えとして代替 MTA を使用することが容易になります。
したがって、あなたが互換メーラを使用しているときには、 /usr/bin/sendmail のような標準 sendmail バイナリを実行しようとするソフトウェアが、 実際にはその代わりにあなたの選択したメーラを実行しているということを 確かめる必要があるでしょう。 好運なことに、FreeBSD はこの仕事をする mailwrapper(8) と呼ばれるシステムを提供しています。
インストールされたまま sendmail が稼働しているときには /etc/mail/mailer.conf には以下のような記述があるでしょう。
sendmail /usr/libexec/sendmail/sendmail send-mail /usr/libexec/sendmail/sendmail mailq /usr/libexec/sendmail/sendmail newaliases /usr/libexec/sendmail/sendmail hoststat /usr/libexec/sendmail/sendmail purgestat /usr/libexec/sendmail/sendmail
このことは、これらのうちどの共通コマンド (sendmail 自身のような) が実行されても、 システムは mailer.conf を確認して、 代わりに /usr/libexec/sendmail/sendmail を実行する sendmail という名前の mailwapper のコピーを呼び出すことを意味します。 このようなシステムでは、デフォルトの sendmail が呼び出されたときに、 どのバイナリが実際に実行されるかを変更するのが簡単になります。
したがって、sendmail の代わりに /usr/local/supermailer/bin/sendmail-compat を実行させたいのなら、次のように /etc/mail/mailer.conf を変更してください。
sendmail /usr/local/supermailer/bin/sendmail-compat send-mail /usr/local/supermailer/bin/sendmail-compat mailq /usr/local/supermailer/bin/mailq-compat newaliases /usr/local/supermailer/bin/newaliases-compat hoststat /usr/local/supermailer/bin/hoststat-compat purgestat /usr/local/supermailer/bin/purgestat-compat
あなたのやりたいようにすべてを設定しおえたら、 もはや必要のない sendmail のプロセスを終了して新しいソフトウェアに関するプロセスを起動するか、 単に再起動してください。 再起動することによって、新しい MTA が起動時に正しく立ち上がるように システムが設定されているかどうか確認することもできるでしょう。
恐らく、そのホストは実際には別のドメインにあるのでしょう。 例えば foo.bar.edu ドメインにいて、 bar.edu というドメイン内の mumble というホストにアクセスしたいとします。 この時は単に mumble ではなく mumble.bar.edu と FQDN で参照しなければなりません。
そもそも、BSD BIND のリゾルバー (resolver) ではこのようなことが可能でしたが、 FreeBSD に入っている最新版の BIND では自分のドメイン以外に対する FQDN でない省略形は許されません。 従ってホストを mumble と曖昧に指定した場合は mumble.foo.bar.edu という名前があればそれになり、 そうでなければ root ドメインから検索されます。
これは、 mumble.bar.edu と mumble.edu ということなったドメイン名に対してホスト名のサーチがおこなわれていた以前の振る舞いとは異なったものです。 このような事が悪い例もしくはセキュリティホールとみなされる理由については RFC 1535 を見てください。
/etc/resolv.conf で
domain foo.bar.eduと書いてある行を
search foo.bar.edu bar.eduと書き換えることで上のようなことができます。 しかし、RFC 1535 にあるように検索順序が “内部 (local) と外部 (public) の管理の境界” をまたがないようにしてください。
sendmail FAQ に次のように書いてあります。
“Local configuration error” というメッセージが出ます。例えば、 553 relay.domain.net config error: mail loops back to myself 554 <user@domain.net>... Local configuration error のような感じですが、どうしたら解決できますか? これは、例えば domain.net のようなドメイン宛てのメールを MX レコードで特定のホスト(ここでは relay.domain.net) に送ろうとしたのに、 そのホストでは domain.net 宛てのメールを受け取れるような設定になっていない場合です。 設定の際に FEATURE(use_cw_file) を指定してある場合には /etc/mail/local-host-names の中に domain.net を追加してください。 もしくは、/etc/mail/sendmail.cf の中に “Cw domain.net” を追加してください。
sendmail FAQ は http://www.sendmail.org/faq にありますので、 メールの設定に “おかしなこと” があれば常に読んでください。
LAN 上にある FreeBSD マシンを、 インターネットに接続したいとします。FreeBSD マシンは、その LAN でのメールゲートウェイになります。FreeBSD マシンは専用線接続ではありません (訳注: ダイアルアップ接続など)。
これには、少なくとも二つの方法があります。 一つは UUCP を使うことです。
もう一つの方法は、あなたのドメインに対するセカンダリ MX サービスを提供する常時稼働のインターネットサーバを用意することです。 たとえば、あなたの会社のドメインが example.com で、 ISP があなたのドメインに セカンダリ MX サービスを提供するために example.net ドメインを 用意するとしたら次のようにします。
example.com. MX 10 example.com. MX 20 example.net.
最終的なメール受信先としては、 一つのホストだけが定義されるべきです (example.com 上の /etc/mail/sendmail.cf ファイルに、 Cw example.com を追加します)。
送信側の sendmail が、 メールを配送しようとしている時、モデムの接続を介してあなたのところ (example.com) に接続しようとします。大抵の場合、 あなたのマシンがオンラインでないために、 接続はタイムアウトしてしまうでしょう。 sendmail プログラムは自動的に、 たとえばあなたのインターネットプロバイダなどのセカンダリの MX サイト (example.net) にメールを配送するでしょう。 セカンダリ MX サイトは定期的にあなたのホストに接続し、 プライマリ MX ホスト (example.com) にメールを配送しようとするでしょう。
ログインスクリプトとして、 このようなものを使うとよいでしょう。
#!/bin/sh # Put me in /usr/local/bin/pppmyisp ( sleep 60 ; /usr/sbin/sendmail -q ) & /usr/sbin/ppp -direct pppmyisp
ユーザごとにログインスクリプトを作りたい場合には、 上記のスクリプトの代わりに、 sendmail -qRexample.com を使用することもできます。 このようにすると、 キューの中の example.com に対するすべてのメールは、すぐに強制的に処理されます。
さらに、次のような改良もできます。
以下は、FreeBSD Internet service provider's メーリングリスト から抜粋してきたメッセージです。
> 私たちはお客様に対して、セカンダリ MX を提供しています。 > お客様は一日に何回か私たちのサービスに接続し、メールを彼らのプライマリ MX > に受け取ります (彼らのドメインに対するメールが到着した時には、 > 私たちは彼らのサイトを呼び出しません)。 > 私たちの sendmail は、30 分ごとにメールキューに溜っているメールを配送します。 > ちょうどその時に、すべてのメールがプライマリ MX に送られたかどうかを確かめるためには、 > 彼らは 30 分は オンラインでいなければなりません。 > > すべてのメールを今すぐ送るために sendmail を初期化するコマンドはあるでしょうか? > もちろん私たちのマシン上には、ユーザはルート (root) 権限を持っていません。 sendmail.cf の “privacy flags” セクションに、 Opgoaway,restrictqrun の定義があります。 root 以外のユーザがキューを処理できるようにするには、 restrictqrun を削除してください。また、MX の再調整が必要かもしれません。 あなたがたは、顧客のサイトに対する一番優先度の高い MX なので、 次のように定義します。 # If we are the best MX for a host, try directly instead of generating # local config error. OwTrue このようにすると、リモートサイトからのメールが、 顧客のマシンと接続しようとせず、直接あなたがたのホストマシンに配送されるようになります。 ホストマシンに配送されたメールは、続いて顧客のマシンに送られます。 これはホスト名にのみ有効なので、顧客のメールマシンに、 “host.customer.com” とは別に、“customer.com” も定義する必要があります。 DNS 上で、“customer.com” に対する A レコードを定義してください。
FreeBSD がインストールされたデフォルトの状態では、 sendmail は動作しているホストからのメールだけを送るように設定されています。 たとえば POP3 サーバがインストールされているとすると、 ユーザは学校や職場など他のリモートの場所からメールを確認することが できます。しかし、彼らは外部からそのホスト以外へのメールを 送ることはやはりできません。 通常、メールを送ろうとしてから少しすると、 “5.7 Relaying Denied” というエラーメッセージの書かれたメールが MAILER-DAEMON から送られてくるでしょう。
これを解決する方法はいくつかあります。 一番の正攻法は /etc/mail/relay-domains リレードメインファイルにあなたの ISP のアドレスを書くことです。 これをするのに簡単な方法は次のとおりです。
# echo "your.isp.example.com" > /etc/mail/relay-domains
このファイルを作成または編集したら、 sendmail を再起動してください。 もしあなたがサーバ管理者でメールをローカルに送りたくないか、 ポイントを使用して他のマシン (や、さらに他の ISP) の クライアントまたはシステムへ送りたい時は、とても効果があります。 さらに、あなたが一つあるいは二つだけのメールアカウントを 設定している場合でもこれは非常に有用です。 追加すべきアドレスがたくさんある場合には、 単にこのファイルをあなたの好きなテキストエディタで開いて、 そして一行に一つずつドメインを追加してください。
your.isp.example.com other.isp.example.net users-isp.example.org www.example.org
これで、リストに掲載されているすべてのホスト (ユーザがあなたのシステムにアカウントを持っていると規定する) からあなたのシステムを通るすべてのメールは送信に成功するでしょう。 これはあなたのシステムから SPAM を送ることを認めることなく、 リモートであなたのシステムからメールを送ることをユーザに 認めるためのとてもよい方法です。
これからのセクションでは、 メールの設定やドメイン全体のためのメールの設定といったさらに突込んだ話題について触れます。
あなたのマシンに FreeBSD を普通にインストールして、 /etc/resolv.conf ファイルを設定するか、 またはネームサーバを走らせれば、 他のホストへ電子メールを送ることができるようになります。 あなたのホスト宛のメールをあなた自身の FreeBSD ホスト上の MTA (たとえば sendmail) に配送するようにしたい場合には、次の二つの方法があります。
自身でネームサーバーを実行し、 自分のドメインを持つ。例えば FreeBSD.org。
あなたのホストへ直接メールが配送されるようにする。 これはメールがあなたのマシンの現在の DNS 名に直接配送されるようにすることにより実現できます。 たとえば example.FreeBSD.org。
上のどちらを選ぶ場合でも、自分のホストに直接メールが配送されるようにするには恒久的で 静的 な IP アドレス (ほとんどの PPP ダイアルアップ設定で用いられる動的なアドレスではなく) を持っていなければなりません。 もしファイアウォールの中にいるならば、 SMTP トラフィックが通過してくれないといけません。 もし自分のホストでメールを直接受け取りたいならば、 次の二つのうちのどちらかができていることを確認してください。
自分のドメインでの (一番値の小さい) MX レコードが自分のホストの IP アドレスを差していることを確認する。
自分のドメインの中に自分のホスト用の MX エントリがないことを確認する。
上のどちらかが設定されていれば、 自分のホストでメールを受け取ることができるでしょう。
次のコマンドを実行してみてください。
# hostname example.FreeBSD.org # host example.FreeBSD.org example.FreeBSD.org has address 204.216.27.XX
もしあなたのマシンが上記のメッセージだけを出力したならば、 <yourlogin@example.FreeBSD.org>
へのメールは問題なく配送されるでしょう (sendmail が
example.FreeBSD.org
上で正しく動作していると仮定します)。
上記のメッセージの代わりに、
# host example.FreeBSD.org example.FreeBSD.org has address 204.216.27.XX example.FreeBSD.org mail is handled (pri=10) by hub.FreeBSD.org
というメッセージが出力された場合は、 あなたのホスト (example.FreeBSD.org) に宛てたメールは全て直接配送されずに hub 上の同じユーザー名に配送されます。
上の情報は DNS サーバーが扱います。 メールルーティング情報をもつ DNS レコードは、 Mail eXchange エントリーです。 MX エントリが存在しない場合には、IP アドレスにしたがって、 直接宛先ホストに配送されます。
freefall.FreeBSD.org の現時点での MX エントリは、次のようになっています。
freefall MX 30 mail.crl.net freefall MX 40 agora.rdrop.com freefall MX 10 freefall.FreeBSD.org freefall MX 20 who.cdrom.com
freefall は多くの MX エントリを持っています。 一番 MX の値の小さいホストが利用可能な場合は直接メールを受け取ります。 もしなにかの理由でアクセスができない時には、 他のホスト (ときどき “バックアップ MX” と呼ばれます) が一時的にメールを受け取ります。そして、 より値の小さいホストが利用可能になったときにメールを渡し、 最終的に一番値の小さいホストに渡ります。
使い勝手をよくするためには、代替の MX サイトは、それぞれ 別の経路でインターネットへ接続しているとよいでしょう。 インターネットプロバイダまたは他の関連サイトが、このサービスを 提供することができます。
“メールホスト” (メールサーバーとしても知られています) をセットアップするためには、 いろいろなワークステーションに宛てた全てのメールを受ける必要があります。 基本的には、あなたのドメイン内 (この場合だと *.FreeBSD.org) のすべてのホスト名宛てのすべてのメールを “受け取って”、 そのメールをあなたのメールサーバーに配送し、 ユーザーがマスタメールサーバ上でメールをチェックできるようにします。
話を簡単にするために、あるユーザーのアカウントはどのマシンでも同じユーザー名にすべきです。 そのためには adduser(8) を使ってください。
使用する予定のメールホストは、 各ワークステーションごとにメール交換が できるように設定されていなければなりません。 これは DNS の設定で次のように行なうことができます。
example.FreeBSD.org A 204.216.27.XX ; ワークステーション MX 10 hub.FreeBSD.org ; メールホスト
これは、ワークステーションの A レコードがどこを指していようとも そのワークステーション宛てのメールをメールホストに転送する、というものです。
自前で DNS サーバを運用しているのでなければ、 この作業は自分では行えません。自分で DNS サーバを運用しないとかできないという場合は、 あなたの DNS を提供しているインターネットプロバイダなどに依頼して 作業を行ってもらってください。
もしバーチャル電子メールホストを運用するなら次の情報が役に立つでしょう。 例として、あなたには自分のドメイン、ここでは customer1.org、 を持っている顧客がいるとしましょう。 あなたは customer1.org 宛ての全てのメールを mail.myhost.com というメールホストに集めたいとします。 DNS エントリーは次のようになるでしょう。
customer1.org MX 10 mail.myhost.com
customer1.org に対して電子メールを送りたいだけなら、 A レコードは必要ありません。
Note: customer1.org に対して ping を実行しても、 A レコードが存在しない限りうまくいかないことに留意しておいてください。
やらなければいけない最後のことは、 メールホスト上の sendmail に対してどんなドメインやホスト宛のメールを受け取るのか、 を教えることです。いくつかの方法がありますが次のどちらかでいいでしょう。
FEATURE(use_cw_file) を使っているなら、 /etc/mail/local-host-names ファイルにホストを加えます。 もし sendmail のバージョンが 8.10 より前であれば該当ファイルは /etc/sendmail.cw です。
/etc/sendmail.cf もしくは sendmail 8.10 以降なら /etc/mail/sendmail.cf といったファイルに Cwyour.host.com という行を加えます。
FreeBSD とともに出荷されている sendmail の設定は、 サイトがインターネットに直接接続しているものとして設計されています。 UUCP 経由でメールを交換したいサイトは、他にも 設定ファイルをインストールしなければいけません。
/etc/mail/sendmail.cf を手動で調整することは先進的なトピックです。 sendmail のバージョン 8 は設定ファイルを m4(1) プリプロセッサから生成します。 これにより、高度に抽象化された設定を行うことができます。 m4(1) による設定ファイルは /usr/src/usr.sbin/sendmail/cf 以下にあります。
もしシステムをすべてのソースとともにインストールしていなければ、 sendmail の設定材料は分割された個別のソース tarball を取得してください。 FreeBSD のソースコードが入った CDROM をマウントしているのなら、
# cd /cdrom/src # cat scontrib.?? | tar xzf - -C /usr/src/contrib/sendmail
と展開してください (展開してもたった数百 KB 程度です)。 cf ディレクトリの README ファイルは m4 による設定の基本的な手引として役に立つでしょう。
UUCP 配送に対応するための一番よい方法は mailertable 機能を使用することです。 これは経路を決定するために sendmail が使用できるデータベースを作成します。
まずはじめに .mc ファイルを作成しなければいけません。 /usr/src/usr.sbin/sendmail/cf/cf にいくつか例があります。foo.mc という名前のファイルをあなたが作成したとすると、 有効な sendmail.cf ファイルへ変換するには次のようにするだけです。
# cd /usr/src/usr.sbin/sendmail/cf/cf # make foo.cf # cp foo.cf /etc/mail/sendmail.cf
典型的な .mc ファイルは次のようになるでしょう。
VERSIONID(`Your version number') OSTYPE(bsd4.4) FEATURE(accept_unresolvable_domains) FEATURE(nocanonify) FEATURE(mailertable, `hash -o /etc/mail/mailertable') define(`UUCP_RELAY', your.uucp.relay) define(`UUCP_MAX_SIZE', 200000) define(`confDONT_PROBE_INTERFACES') MAILER(local) MAILER(smtp) MAILER(uucp) Cw your.alias.host.name Cw youruucpnodename.UUCP
accept_unresolvable_domains, nocanonify および confDONT_PROBE_INTERFACES 機能を含んでいる行は、 メール配送時にまったく DNS を使用しません。 UUCP_RELAY の記述は UUCP 配送に対応するのに必要です。 そこにインターネットホスト名を単に書くだけで .UUCP pseudo ドメインアドレスを扱うことができるようになります。 大抵の場合、あなたの ISP のメールリレーをそこに入力するでしょう。
次に、 /etc/mail/mailertable が必要になります。 メールを配送するリンクが外界との間に一つだけの場合は、 次のようにファイルを記述するだけで十分でしょう。
# # makemap hash /etc/mail/mailertable.db < /etc/mail/mailertable . uucp-dom:your.uucp.relay
次はさらに複雑な例です。
# # makemap hash /etc/mail/mailertable.db < /etc/mail/mailertable # horus.interface-business.de uucp-dom:horus .interface-business.de uucp-dom:if-bus interface-business.de uucp-dom:if-bus .heep.sax.de smtp8:%1 horus.UUCP uucp-dom:horus if-bus.UUCP uucp-dom:if-bus . uucp-dom:
はじめの三行はドメインで宛先を指定されたメールが、 配送路を “近道” するために、 デフォルトルートではなく代わりにいくつかの UUCP 隣接ホストへ送られる特別な場合を扱います。 次の行はメールを SMTP で配送可能なローカルイーサネットドメインへ送ります。 最後に uucp-neighbor !recipient がデフォルトルートを上書きすることを許可するための UUCP 隣接ホストは .UUCP 仮想ドメイン記法で言及されます。 最後の行は常に他のすべてが当てはまるシングルドットです。 これは UUCP 隣接ホストへの UUCP 配送をすることで、 世界に向けたあなたの普遍的メールゲートウェイとして役に立ちます。 uucp-dom: キーワードの後ろにあるノード名はすべて、 uuname コマンドを使用することで確かめられる正しい UUCP 隣接ホストである必要があります。
このファイルは、実際に使用する前に DBM データベース形式に変換する必要があることに注意してください。 これを実行するコマンドラインは mailertable ファイルの先頭にコメントとして書かれています。 mailertable を変更するたびにいつもこのコマンドを実行する必要があります。
最後のアドバイス: もし、
いくつかのメールルーティングがうまく動いているかどうか分からないときは sendmail に -bt
オプションをつけることを覚えておいてください。 これは sendmail
を アドレステストモード
で起動します。 あなたがテストしたいメールルーティングのアドレスを後につけて、 単純に 3,0 と入力してください。
最後の行は、内部で使われたメールエージェント、
このエージェントが呼び出された目的地ホスト、および (もしかしたら変換された)
アドレスを表示します。 このモードを終了するには Ctrl+D を入力します。
% sendmail -bt ADDRESS TEST MODE (ruleset 3 NOT automatically invoked) Enter <ruleset> <address> > 3,0 foo@example.com canonify input: foo @ example . com ... parse returns: $# uucp-dom $@ your.uucp.relay $: foo < @ example . com . > > ^D
あなたが固定 IP アドレスを持っているのなら、 デフォルトから何も変更する必要はありません。 割りあてられたインターネット名をホスト名に設定すれば、 sendmail が残りをやってくれます。
あなたが動的に割り当てられた IP アドレスを持っていて、 インターネットに接続するのにダイアルアップ PPP を使用しているのなら、 おそらく ISP のメールサーバにメールボックスがあるでしょう。 ここでは、あなたの ISP のドメインが example.net, あなたのユーザ名が user, あなたのマシンは bsd.home と呼ばれているものとします。 また、ISP から、メールリレーとして relay.example.net を使用してよいと通知されているとします。
(訳注: ISP 上の) メールボックスからメールを取得するためには、 取得アプリケーションをインストールしないといけません。 fetchmail ユーティリティは、 さまざまなプロトコルの多くに対応しているのでよい選択肢です。 通常、あなたの ISP は POP3 を提供しています。 あなたが user-PPP を使用しているなら、次のエントリを /etc/ppp/ppp.linkup に追加することで、 インターネット接続が確立したときに自動的にメールを取得することができます。
MYADDR: !bg su user -c fetchmail
あなたがローカルではないアカウントへのメールを配送するために (下記のような) sendmail を使用しているなら、 インターネット接続が確立するとすぐに、 sendmail があなたのメールキューを処理して欲しいとおそらく考えるでしょう。 これを行うには、/etc/ppp/ppp.linkup ファイルの fetchmail コマンドの後に次のコマンドを追加してください。
!bg su user -c "sendmail -q"
bsd.home 上に user というアカウントを所有しているとします。 bsd.home 上の user のホームディレクトリに .fetchmailrc ファイルを作成します。
poll example.net protocol pop3 fetchall pass MySecret
このファイルはパスワード MySecret を含んでいるので、user を除く他の誰にも読めるようになっていてはいけません。
正しい from: ヘッダでメールを送るためには、 sendmail が user@bsd.home ではなく user@example.net を使用するようにしなくてはいけません。 また、素早くメール送信をするために sendmail にすべてのメールを relay.example.net 経由で送るようにもしたいかもしれません。
次の .mc ファイルで十分でしょう。
VERSIONID(`bsd.home.mc version 1.0') OSTYPE(bsd4.4)dnl FEATURE(nouucp)dnl MAILER(local)dnl MAILER(smtp)dnl Cwlocalhost Cwbsd.home MASQUERADE_AS(`example.net')dnl FEATURE(allmasquerade)dnl FEATURE(masquerade_envelope)dnl FEATURE(nocanonify)dnl FEATURE(nodns)dnl define(`SMART_HOST', `relay.example.net') Dmbsd.home define(`confDOMAIN_NAME',`bsd.home')dnl define(`confDELIVERY_MODE',`deferred')dnl
.mc ファイルを sendmail.cf ファイルに変換する方法の詳細については前の節を参照してください。 また、sendmail.cf ファイルを変更した後は、 sendmail を再起動し忘れないでください。
メールサーバ上で SMTP 認証を行うと、 多くの利益があります。 SMTP 認証は sendmail にもう一つのセキュリティ層を追加することができます。 さらに、ホストを切りかえるモバイルユーザにとっては、 その都度メールクライアントの設定を変更せずとも 同じメールサーバを利用できるようになります。
ports から security/cyrus-sasl をインストールします。 この
port は security/cyrus-sasl にあります。 security/cyrus-sasl
にはここで使用する方法に対する多くのコンパイルオプションがあり、 確実に pwcheck オプションを選択してください。
security/cyrus-sasl をインストールした後に /usr/local/lib/sasl/Sendmail.conf を編集して (もし無ければ作成して) 次の行を追加してください。
pwcheck_method: passwd
この方法は sendmail があなたの FreeBSD の passwd データベースに対して認証することを可能にします。 この方法は SMTP 認証に必要となる、 それぞれのユーザに対する一組の新しいユーザ名とパスワードを 作成する際のトラブルを減らし、 ログインパスワードとメールパスワードを同じままにします。
ここで /etc/make.conf 編集し、 次の行を加えます。
SENDMAIL_CFLAGS=-I/usr/local/include/sasl1 -DSASL SENDMAIL_LDFLAGS=-L/usr/local/lib SENDMAIL_LDADD=-lsasl
これらの行は sendmail に対して、 コンパイルするときに cyrus-sasl とリンクするための適切な設定オプションを与えるものです。 sendmail を再コンパイルする前に cyrus-sasl がインストールされていることを確かめてください。
次のコマンドを入力して sendmail を再コンパイルしてください。
# cd /usr/src/usr.sbin/sendmail # make cleandir # make obj # make # make install
sendmail のコンパイルは /usr/src が大幅に変更されていなくて、 必要な共有ライブラリが利用可能であれば何の問題も起こらないでしょう。
sendmail をコンパイルして再インストールした後は、 /etc/mail/freebsd.mc ファイル (またはあなたが .mc ファイルとして使用しているファイル。 多くの管理者は唯一の名前を用いるために hostname(1) の出力を .mc として使用することを選んでいます) を編集してください。 次の行を加えてください。
dnl set SASL options TRUST_AUTH_MECH(`GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN')dnl define(`confAUTH_MECHANISMS', `GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN')dnl define(`confDEF_AUTH_INFO', `/etc/mail/auth-info')dnl
これらのオプションは、ユーザを認証するために sendmail が利用可能な異なる方法を設定します。 もし pwcheck 以外の方法を使用したいのならドキュメントを参照してください。
最後に /etc/mail で make(1) を実行してください。 これにより、新しい .mc ファイルから freebsd.cf という名前 (またはあなたの .mc に使用している名前) の .cf ファイルが作成されます。 それから make install restart コマンドを実行してください。 新しい .cf ファイルが sendmail.cf にコピーされ、 sendmail が適切に再起動されるでしょう。 この手続きについての詳細は /etc/mail/Makefileを参照してください。
すべてがうまくいけば、ログイン情報をメールクライアントに入力し、
テストメッセージを送ることができるでしょう。 より詳細に調べるには sendmail の LogLevel を 13 に設定し、
すべてのエラーについて /var/log/maillog を見てください。
このサービスがシステムを起動した後にいつでも利用可能となるように、 /etc/rc.conf に次の行を追加しておくとよいでしょう。
sasl_pwcheck_enable="YES" sasl_pwcheck_program="/usr/local/sbin/pwcheck"
これにより、システムの起動時に SMTP_AUTH が確実に初期化されるでしょう。
詳細については SMTP 認証 に関する sendmail の文書を参照してください。
以下の章では、 UNIX システム上で良く利用されるネットワークサービスについて書かれています。 これはもちろん、 あなたの FreeBSD システムでの、 そのようなサービスの設定に関する内容です。
原作: Coranth Gryphon <gryphon@FreeBSD.org>. 1995 年 10 月
6 日.
訳: 前田 幸範 <yuki@jp.FreeBSD.org>. 1996 年 9 月 6
日.
あるマシンが他のマシンをみつけることができるようにするには、 あるマシンから他のマシンへ、 どのようにたどり着くかを適切に記述するための仕組みが必要です。 この仕組みをルーティングと呼びます。 “ルート(経路)”は “destination (目的地)” と “gateway (ゲートウェイ)” の 2 つのアドレスの組で定義します。 あなたが destination へアクセスしようとした場合、 gateway を通って送られることをこのペアは示しています。 destination には個々のホスト、 サブネット、 “デフォルト” の 3つの タイプがあります。 “デフォルトルート” は他への経路が適用できない 場合に使われます。 のちほどデフォルトルートについて少し述べることに するとして、 ここでは、 個々のホスト、 インタフェース (“リンク” とも呼ばれます)、 イーサネットハードウェアアドレスという 3つのタイ プのゲートウェイについて説明します。
以下に示す netstat -r の出力の例を使って、 ルーティン グがいろいろと異なっている様子を説明することにします。
Destination Gateway Flags Refs Use Netif Expire default outside-gw UGSc 37 418 ppp0 localhost localhost UH 0 181 lo0 test0 0:e0:b5:36:cf:4f UHLW 5 63288 ed0 77 10.20.30.255 link#1 UHLW 1 2421 foobar.com link#1 UC 0 0 host1 0:e0:a8:37:8:1e UHLW 3 4601 lo0 host2 0:e0:a8:37:8:1e UHLW 0 5 lo0 => host2.foobar.com link#1 UC 0 0 224 link#1 UC 0 0
最初の2行はデフォルトルート(次の節で詳しく説明します)と、 localhostへの経路を示しています。
localhostのためのインタフェース (Netifの欄) はlo0で、 これはループバックデバイスとして知られています。 結局のところ戻るだけなので、 この destinationへのすべてのトラフィックが 内部的に処理されるのであって、 LAN を経由して送られるのではありません。
次の行では 0:e0:... というアドレスに注目しましょう。 これはイーサネットハードウェアアドレスです。 FreeBSDは自動的に ローカルなイーサネット上の任意のホスト (この例ではtest0) を見つけ、 イーサネットインタフェース ed0 の所にそのホストへの経路を直接つけ加えます。 タイムアウト時間 (Expireの 欄) も経路のタイプと結びついており、 指定された時間が経過しても応 答がないときに使用します。 この場合、 経路情報は自動的に削除されま す。 これらのホストは、 RIP(Routing Information Protocol) という、 最短パスの判定に基づいてローカルホストへの経路を 決定する仕組みを利用することで認識されます。
更に、 FreeBSDではローカルサブネット (10.20.30.255 は 10.20.30 というサブネットに対するブロードキャストアドレスで、 foobar.com はこのサブネットに結びつけられているドメイン名) への経路情報も加えることができます。 link#1というのは、 このマシンの最初のイーサネットカードのことをさします。 これら については、 何も追加インタフェースが指定されていないことに気づく でしょう。
これらの2つのグループ(ローカルネットワークホストと ローカルサブネット) の両方とも、 routed と呼ばれるデーモンによって自動的に経路が設定されます。 routed を動かさなければ、 静的に定義した (つまり具体的に設定した) 経路のみ存在することになります。
host1 の行は私たちのホストのことで、 イーサネットアドレスで示されています。 送信側のホストの場合、 FreeBSDはイーサネットインタフェースへ送るのではなく、 ループバックインタフェース (lo0)を使います。
2つあるhost2の行は、 ifconfigのエイリアス (このようなことをする理由については ethernetの章を参照してください) を使ったとき にどのようになるかを示す例です。 lo0の後にある=> は、 インタフェースが (このアドレスがローカルなホストを参照しているので) ループバックを使っているというだけでなく、 エイリアスになっていることも示しています。 このような経路はエイリアスをサポートしている ホストにのみ現れます。 ローカルネットワーク上の他のすべてのホストでは 単にlink#1となります。
最後の行 (destinationが224のサブネット) はマルチキャストで扱うものですが、 これは他の章で説明します。
他の欄については Flags について説明する必要があります。 それぞれの経路は欄に示されているように違った属性を もっています。 以下にいくつかのフラグとこれらが何を意味しているかを示します。
| U | Up: この経路はアクティブです。 |
| H | Host: 経路の destinationが単一のホストです。 |
| G | Gateway: この destinationへ送られると、 どこへ送れ ばよいかを明らかにして、 そのリモートシステムへ送られます。 |
| S | Static: この経路はシステムによって自動的に生成 されたのではなく、 手動で作成されました。 |
| C | Clone: マシンに接続したときにこの経路に基づく 新しい経路が作られます。 このタイプの経路は通常は ローカルネットワークで使われます。 |
| W | WasCloned: ローカルエリアネットワーク(Clone) の経路に基づいて 自動的に生成された経路であることを示します。 |
| L | Link: イーサネットハードウェアへの参照を含む 経路です。 |
ローカルシステムからリモートホストにコネクションを張る 必要がある場合、 既知のパスが存在するかどうかを確認するためにル ーティングテーブルをチェックします。 到達するためのパスを知っているサブネットの内部に リモートホストがある場合 (Cloned routes)、 システムはインタフェース から接続できるかどうかをチェックします。
知っているパスがすべて駄目だった場合でも、 システムには 最後の切り札の “デフォルト” ルートがあります。 このルートは ゲートウェイルート (普通はシステムに 1つしかありません) の特別なものです。 そして、 フラグフィールドは必ず c がマークされています。 このゲートウェイは、 LAN 内のホストにとっ て、 外部 (PPPのリンクを経由する場合や、 データラインに接続するハードウェアデバイスなど) へ直接接続するマシンすべてのためのものです。
外部に対するゲートウェイとして機能するマシンで デフォルトルートを設定する場合、 デフォルトルートはインターネットサービスプロバイダ (ISP) のサイトのゲートウェイマシンになるでしょう。
それではデフォルトルートの一例を見てみましょう。 一般的な構成を示します。
[Local2] <--ether--> [Local1] <--PPP--> [ISP-Serv] <--ether--> [T1-GW]
ホスト Local1 とホスト Local2 を PPP で ISP のターミナルサーバと接続されているあなたの サイトだとします。 ISP はサイト内にロー カルなネットワークを持っていて、 そこにはさまざまなものがあり、 あなたの接続するサーバや ISP のインターネットへの 接続点であるハードウェアデバイス (T1-GW) などがあります。
あなたのマシンのデフォルトルートは それぞれ次のようになります。
“なぜ (あるいは、 どうやって) Local1 の デフォルトゲートウェイをISPのサーバでなく T1-GWにセットするのか” という質問がよくあります。
コネクションのローカルの側については、 PPPのインタフェースは ISPのローカルネットワーク上のアドレスを用いているため、 ISPのローカルネットワーク上のすべてのマシンへの経路は 自動的に生成されています。 つまり、 あなたのマシンは、 どのようにT1-GW まで届くかという経路を既に知っていることになりますから、 ISPサーバに媒介的なトラフィックをかける必要はありません。
最後になりましたが、 一般的にローカルネットワークでは ...1 というアドレスをゲートウェイアドレスとして使います。 ですから (同じ例を用います)、 あなたのclass-Cのアドレス空間が 10.20.30で ISPが 10.9.9を用いている場合、 デフォルトルートは次のようになります。
Local2 (10.20.30.2) --> Local1 (10.20.30.1)
Local1 (10.20.30.1, 10.9.9.30) --> T1-GW (10.9.9.1)
ここで扱うべき他のタイプの設定があります。 それは2つの異なるネットワークにまたがるホストです。 技術的にはゲートウェイとして機能するマシン (上 の例では PPPコネクションを用いています) はマルチホームホストで す。 しかし実際にはこの言葉は、 2つのローカルエリアネットワーク上のサ イトであるマシンを指す言葉としてのみ使われます。
2枚のイーサネットカードを持つマシンが、 別のサブネット 上にそれぞれアドレスを持っている場合があります。 あるいは、 イーサネットカードを1枚持っているマシンで、 ifconfigのエイリアスを使っているかもしれません。 物理的に分かれている2つのイーサネットのネットワークが使われて いるならば前者が用いられます。 後者は、 物理的には1つのネットワ ークセグメントで、 論理的には分かれている 2つのサブネットとする 場合に用いられます。
どちらにしても、 このマシンがお互いのサブネットへのゲートウェイ (inbound route) として定義されていることが分かるように、 おのお ののサブネットでルーティングテーブルを設定します。 このマシンが 2 つのサブネットの間のブリッジとして動作するという構成は、 パケ ットのフィルタリングを実装する必要がある場合や、 一方向または双 方向のファイアウォールを利用したセキュリティを構築する場合によ く用いられます。
すでに外部との経路をどのように定義したらよいかは 説明しました。 しかし外部から私たちのマシンをどのようにして 見つけるのかについては説明していません。
ある特定のアドレス空間 (この例では class-C のサブネット) におけるすべてのトラフィックが、 到着したパケットを内部で転送するネ ットワーク上の特定のホストに送られるようにルーティングテーブル を設定することができるのは分かっています。
あなたのサイトにアドレス空間を割り当てる場合、 あなたのサブネットへのすべてのトラフィックがすべて PPPリンクを通じてサイトに送 ってくるようにサービスプロバイダはルーティングテーブルを設定し ます。 しかし、 国境の向こう側のサイトはどのようにしてあなたの ISPへ送ることを知るのでしょうか?
割り当てられているすべてのアドレス空間の経路を維持する (分散している DNS 情報とよく似た) システムがあり、 そのインターネット バックボーンへの接続点を定義しています。 “バックボーン” とは国を越え、 世界中のインターネットのトラフィックを運ぶ主要 な信用できる幹線のことです。 どのバックボーンマシンも、 あるネットワークから特定のバックボーンのマシンへ 向かうトラフィックと、 そのバックボーンのマシンからあなたのネットワークに届くサービス プロバイダまでのチェーンのマスタテーブルのコピーを持っていま す。
あなたのサイトが接続(プロバイダからみて内側にある ことになります) したということを、 プロバイダからバックボー ンサイトへ通知することはプロバイダの仕事です。 これが経 路の伝搬です。
ルーティングの伝搬に問題が生じて、 いくつかのサイトが 接続をおこなうことができなくなることがあります。 ルーティングがどこでおかしくなっているかを明らかにするのに 最も有効なコマンドはおそらく traceroute(8) コマンドでしょ う。 このコマンドは、 あなたがリモートマシンに対して接続をおこなう ことができない(例えば ping(8) に失敗するような場合) 場合も、 同じように有効です。
traceroute(8) コマンドは、 接続を試みているリモートホストを引数にして実行します。 試みているパスの経由するゲートウェイホストを表示し、 最終的には目的のホストにたどり着くか、 コネクションの欠如によって終ってしまうかのどちら かになります。
より詳しい情報は、 traceroute(8) のマニュアルページをみてください。
Written by Steve Peterson <steve@zpfe.com>.
IP サブネットを作成し、 それらのセグメントをルータを 使って接続したりせずに、 (Ethernet セグメントのような) 物理ネットワークを二つのネットワークセグメントに分割することは とても有効な場合があります。 このような二つのネットワークを繋ぐデバイスはブリッジと呼ばれます。 そして、 二つのネットワークインタフェイスカードを持つ FreeBSD システムは、 ブリッジとして動作することができます。
ブリッジは、 各ネットワークインタフェイスに繋がる デバイスの MAC 層のアドレス (例えば Ethernet アドレス) を記憶します。 ブリッジはトラフィックの送信元と受信先が異なったネットワーク上に ある場合にのみ、 トラフィックを転送します。
すなわち、 ブリッジはポート数の少ない Ethernet スイッチ だ、 ということができます。
今日ブリッジが活躍する場面は大きく分けて二つあります。
ひとつは、 物理ネットワークセグメントがトラフィック 過剰になっているが、 なんらかの理由によりネットワークを サブネットに分け、 ルータで接続することができない場合です。
編集部門と製作部門がおなじサブネットに同居している 新聞社を例に考えてみましょう。 編集部門のユーザはファイルサーバとして全員サーバ A を利用し、 製作部門のユーザはサーバ B を利用します。 すべてのユーザを接続するのには Ethernet が使われており、 高負荷となったネットワークは遅くなってしまいます。
もし編集部門のユーザを一つのネットワークセグメントに 分離することができ、 製作部門もユーザも同様にできるのなら、 二つのネットワークセグメントをブリッジで繋ぐことができます。 ブリッジの "反対" 側へ向かうネットワークトラフィックだけが 転送され、 各ネットワークセグメントの混雑は緩和されます。
もうひとつは、 IP Masquerading (NAT) を使わずに ファイアウォール機能を利用したい場合です。
ここでは DSL もしくは ISDN で ISP に接続している 小さな会社を例にとってみましょう。 この会社は ISP から 13 個のグローバル IP アドレスの割り当て を受けており、 ネットワーク内には 10 台の PC が存在します。 このような状況では、 サブネット化にまつわる問題から ルータを用いたファイアウォールを利用することは困難です。
ブリッジを用いたファイアウォールなら、 IP アドレスの問題を気にすること無く、 DSL/ISDN ルータの 下流側に置くように設定できます。
ブリッジを利用するには少なくとも二つのネットワークカードが 必要です。 残念なことに、 FreeBSD 4.0 ではすべてのネットワークインタフェイス カードがブリッジ機能をサポートしているわけではありません。 カードがサポートされているかどうかについては bridge(4) を参照してください。
以下に進む前に、 二つのネットワークカードをインストールして テストしてください。
カーネルでブリッジ機能を有効にするには
options BRIDGE
という行をカーネルコンフィグレーションファイルに追加して カーネルを再構築してください。
ブリッジと同時にファイアウォール機能も利用しようとしている 場合には、 IPFIREWALL オプションも指定する必要があります。 ブリッジをファイアウォールとして設定する際の一般的な 情報に関しては、 Section 15.7 を参照してください。
IP 以外のパケット (ARP など) がブリッジを通過するように するためには、 ドキュメント化されていないファイアウォール用 オプションを設定する必要があります。 このオプションは IPFIREWALL_DEFAULT_TO_ACCEPT です。 この変更により、 デフォルトではファイアウォールがすべての パケットを accept するようになることに注意してください。 この設定を行う前に、 この変更が自分のルールセットにどのような 影響をおよぼすかを把握しておかなければなりません。
ブリッジで帯域制御機能を利用したい場合、 カーネルコンフィグレーションで DUMMYNET オプションを加える必要があります。 詳しい情報に関しては dummynet(4) を参照 してください。
ブリッジを有効にするには、 /etc/sysctl.conf に以下の行を加えてください:
net.link.ether.bridge=1
ブリッジを経由したパケットを ipfw でフィルタしたい場合には、
net.link.ether.bridge_ipfw=1
という行も付け加える必要があります。
私のブリッジ/ファイアウォールは Pentium 90 で、 3Com 3C900B と 3c905B を使っています。 防護される側のネットワークは 10Mbps の half duplex で、 ブリッジとルータ (Cisco 675) の間は 100Mbps full duplex で 動作しています。 パケットフィルタを利用しない場合、 防護されている 10Mbps ネットワークから Cisco 675 への ping では、 ブリッジにより 0.4 ミリ秒の遅延が発生しています。
ネットワークからブリッジに telnet したい場合、 ネットワークカードの一つに IP アドレスを割り当てれば OK です。 一般的に、 両方のカードに IP アドレスを割り当てるのは よいアイデアではないとされています。
ネットワーク内に複数のブリッジを設置する場合、 任意のワークステーション間で一つ以上の経路を持つことは できません。 技術的には、 これは spanning tree link management はサポートされていない、 ということを意味します。
Written by Bill Swingle <unfurl@FreeBSD.org>, 4 March
2000.
FreeBSD がサポートしている多くのファイルシステムの中でも、 NFS、 すなわち Network File System は極めてユニークな存在です。 NFS はあるマシンから他のマシンへと、 ネットワークを通じて ディレクトリとファイルを共有することを可能にします。 NFS を使うことで、 ユーザやプログラムはリモートシステムのファイルを、 それがローカルファイルであるかのようにアクセスすることができます。
NFS には以下の利点があります:
一般的に使われるデータを単一のマシンに納める ことができ、 ネットワーク上のユーザはデータにアクセスできる ため、 ローカルワークステーションは多くのディクスを 必要としません。
ネットワーク上のすべてのマシンに、 ユーザが独自のホームディレクトリを持つ必要がありません。 一旦 NFS 経由でアクセスできるディレクトリができれば、 どこからでもアクセス可能です。
フロッピーや CD-ROM ドライブなどのストレージデバイスを、 追加のハードウェアなしにネットワーク上の他のマシンに 使ってもらうことができます。
NFS はクライアント、 サーバの二つの部分から 構成されます。 これは 需要(want)/供給(have) の関係として考えることができます。 クライアントはサーバが 供給 している データに対する 需要 があります。 サーバはそのデータをクライアントと共有します。 このシステムが適切に機能するために、 いくつかのプロセスが 設定され正しく動作していなければなりません。
サーバは以下のデーモンを動作させなければなりません:
nfsd - NFS クライアントからの リクエストを処理する NFS デーモン。
mountd - nfsd から渡された リクエストを実際に実行する NFS マウントデーモン。
portmap - NFS サーバの利用しているポートを NFS クライアントから取得できるようにするためのポートマッパデーモン。
クライアント側ではデーモンを一つ実行する必要があります:
nfsiod - NFS サーバからのリクエストを 処理する NFS 非同期 I/O デーモン。
幸運なことに、 FreeBSD システムで設定を行うのは簡単です。 実行させなければならないプロセスは、 /etc/rc.conf ファイルをちょっと編集することでブート時から実行させる ことができます。
NFS サーバでは、 以下の設定が必要です:
portmap_enable="YES" nfs_server_enable="YES" nfs_server_flags="-u -t -n 4" mountd_flags="-r"
mountd は NFS サーバが有効になっている 場合、
自動的に実行されます。 nfsd への -u、 -t フラグは クライアントに
UDP と TCP のサービスを提供することを指示します。 -n 4
フラグは nfsd が 4
つのコピーを立ち上げることを指示します。
クライアント側では、 以下のようにします:
nfs_client_enable="YES" nfs_client_flags="-n 4"
nfsd と同様に、 -n 4 は nfsiod が 4 つのコピーを立ち上げることを指示します。
最後に /etc/exports という 設定ファイルを作成します。 exports ファイルはサーバのどのファイルシステムが 共有されるのか (“exported” といいます)、 またどのクライアントが共有できるのかを指定します。 ファイル中の各行は、 共有されるファイルシステムを 指定します。 ファイル中で指定できるオプションはたくさんありますが、 そのうちの少ししか使うことはないでしょう。 より細かいことに関しては exports(5) マニュアルページをお読み下さい。
いくつか /etc/exports の設定例 を示します:
以下の設定は、 サーバと同じドメイン名(ドメイン名が無いので)か、 /etc/hosts に記述のある三つのマシン に対して、 /cdrom を export します。 -ro
オプションは共有されるファイルシステムを 読み込み専用にします。
このフラグにより、 リモートシステムは共有されたファイルシステム
にたいして何の変更も行えなくなります。
/cdrom -ro moe larry curly
以下の設定は、 IP アドレスによる三つのホストに対して /home を export します。 この設定はプライベートネットワークで
DNS が走っていない 場合に便利な設定でしょう。 -alldirs フラグは指定されたファイルシステム
以下のディレクトリに対しても同様に export します。
/home -alldirs 10.0.0.2 10.0.0.3 10.0.0.4
以下の設定は、 サーバとは異なるドメイン名の二つの マシンに対して /a を export します。 -maproot=0
フラグは、 リモートマシンの root ユーザが共有されたファイルシステムに root
として書き込むことを 許可します。 -maproot=0 フラグが無ければ、
リモートマシンの root 権限を
持っていても共有されたファイルシステム上のファイルを変更する ことはできません。
/a -maproot=0 host.domain.com box.example.com
クライアントが export されたファイルシステムを共有 する際には、 そのような権限が与えられていなければなりません。 /etc/exports ファイルに クライアントが含まれているかどうか確認してください。
必要な変更はすべて行ったので、 FreeBSD を再起動してブート時からすべてが起動するようにするか、 root で以下のコマンドを実行します:
NFS サーバでは:
# portmap # nfsd -u -t -n 4 # mountd -r
NFS クライアントでは:
# nfsiod -n 4
これでリモートのファイルシステムを実際にマウントする 準備ができました。 やり方は二通りあります。 この例では、 サーバの名前は server で、 クライアントの名前は client とします。 リモートファイルシステムを一時的にマウントするだけ、 もしくは設定をテストするだけなら、 クライアント上で root として以下のコマンドを実行してください:
# mount server:/home /mnt
これにより、 クライアントの /mnt ディレクトリにサーバの /home が マウントされます。 もしすべてが正しく設定されていれば、 クライアントの /mnt に、 サーバにあるファイルすべてが見えるようになっているはずです。
リモートファイルシステムを今後も (リブートする度に) マウントしたいなら、 /etc/fstab ファイルに設定を追加する必要があります。 例としてはこのようになります:
server:/home /mnt nfs rw 0 0
ほかのオプションに関しては fstab(5) マニュアル ページをお読み下さい。
NFS にはいくつかすてきな使い方があります。 私は自分が管理している LAN でそれらを利用しています。 そのうちにいくつかをここで紹介しましょう。
ネットワークには幾つかのマシンがありますが、 CD-ROM ドライブを持っているのは一台だけです。 なぜかって? それは一台の CD-ROM ドライブをほかのマシンと NFS 経由で共有しているからです。 フロッピードライブについても同じことがいえます。
ネットワーク内に多くのマシンがあると、 様々な場所に ちらばる個人的なファイルは日に日に古くなってしまいます。 私はすべてのユーザのホームディレクトリを格納する、 中心となる NFS サーバを用意し、 LAN 上の残りのマシンと 共有しています。 そうすることで、 どこにログインしても、 同じホームディレクトリを使うことができるのです。
マシンのひとつに FreeBSD を再インストールするなら、 NFS こそその方法です。 ディストリビューション CD をファイル サーバに入れ、 再インストールを実行するだけです。
共用の /usr/ports/distfiles ディレクトリを用意して、 すべてのマシンで共有しています。 この方法だと、 別のマシンで既にインストールしたことのある port をインストールする場合、 再びすべてのソースをダウンロードする 必要がなくなります。
原作: John Lind <john@starfire.MN.ORG>.
訳: 渡辺 智雄 <tomo@jp.FreeBSD.org>. 6 September
1996.
ISA用のイーサネットアダプタの中には性能が悪いため、 ネットワーク、 特に NFS で深刻な問題がおきるものがあります。 これは FreeBSD に限ったことではありませんが、 FreeBSD でも起こり得ます。
この問題は、 (FreeBSDを使用した) PC がシリコン・グラフィックス社や サン・マイクロシステムズ社などの高性能な WS にネットワーク接続されている場合に頻繁に起こります。 NFS マウントはうまく行きます。 また、 いくつかの操作もうまく働きますが、 他のシステム (WS) に対する要求や応答は続いていても、 突然サーバが クライアントの要求に対して反応しなくなります。 これは、 クライアントが FreeBSD か上記の WS であるとき、 にクライアント側に起きる現象です。 多くのシステムでは、 いったんこの問題が現われると、 行儀良くクライアントを終了する手段はありません。 NFS がこの状態に陥ってしまうと、 正常に戻すことはできないため、 多くの場合、 クライアントを強制終了し、 再び実行することが唯一の解決法となります。
“正しい”解決法は、 より高性能のイーサネットアダプタをFreeBSDシステムに
インストールすることですが、 満足な操作ができるような簡単な方法があります。 もし、
FreeBSDシステムがサーバになるのなら、 クライアントからのマウント時に -w=1024オプションをつけて下さい。 もしFreeBSDシステムがクライアントになる のなら、
NFSファイルシステムを -r=1024
オプションつきでマウントして下さい。
これらのオプションは自動的にマウントをおこなう場合には クライアントの fstab エントリの4番目のフィールドに指定してもよいですし、
手動マウントの場合は mount コマンドの -o
パラメータで指定してもよいでしょう。
NFSサーバとクライアントが別々のネットワーク上にあるような 場合、 これと間違えやすい他の問題が起きることに注意して下さい。 そのような場合は、 ルータが必要な UDP 情報をきちんと ルーティングしているかを確かめて下さい。 そうでなければ、 たとえあなたが何をしようと解決できないでしょう。
次の例では、 fastwsは高性能のWSのホスト (インタフェース)名で、 freeboxは低性能のイーサネットアダプタを備えた FreeBSDシステムのホスト(インタフェース)名です。
また、 /sharedfs はエクスポートされる NFS
ファイルシステムであり (man exports を見て下さい)、 /project はエクスポートされたファイルシステムの
クライアント上のマウントポイントとなります。 全ての場合において、 hard や soft、 bg といった追加オプションが
アプリケーションにより要求されるかもしれないことに 注意して下さい。
クライアント側 FreeBSD システム (freebox) の例は: freebox の /etc/fstab に次のように書いて下さい:
fastws:/sharedfs /project nfs rw,-r=1024 0 0
freebox 上で手動で mount コマンドを実行する場合は次のようにして下さい:
# mount -t nfs -o -r=1024 fastws:/sharedfs /project
サーバ側FreeBSDシステムの例は: fastws の /etc/fstab に次のように書いて下さい:
freebox:/sharedfs /project nfs rw,-w=1024 0 0
fastws 上で手動で mount コマンドで実行する場合は次のようにして下さい:
# mount -t nfs -o -w=1024 freebox:/sharedfs /project
近いうちにどのような 16 ビットのイーサネットアダプタでも 上記の読み出し、 書き込みサイズの制限なしの操作ができるようになるでしょう。
失敗が発生したとき何が起きているか関心のある人に、 なぜ回復不可能なのかも含めて説明します。 NFSは通常 (より小さいサイズへ分割されるかもしれませんが) 8Kの“ブロック” サイズで働きます。 イーサネットのパケットサイズは最大1500バイト程度なので、 上位階層のコードにとっては1つのユニットのままなのですが、 NFS “ブロック”は 複数のイーサネットパケットに分割されます。 そして受信され、 組み立て直されてから肯定応答 されなければなりません。 高性能のWSは次々に NFSユニットを構成するパケットを、 基準の範囲内で間隔を詰めて次々に送り出すことができます。 小さく、 容量の低いカードでは、 同じユニットの 前のパケットがホストに転送される前に、 後のパケットがそれを 踏みつぶしてしまいます。 このため全体としてのユニットは再構成もされないし、 肯定応答もされません。 その結果、 WSはタイムアウトして再送を試みますが、 8Kのユニット全体を再送しようとするので、 このプロセスは 際限無く繰り返されてしまいます。
ユニットサイズをイーサネットのパケットサイズの 制限以下に抑えることにより、 受信された完全な イーサネットパケットは個々に肯定応答を受けられることが 保証されるので、 デッドロック状態を避けることができるようになります。
高性能のカードを使っている場合でも、 高性能な WS が力任せに次々と PC システムにデータを送ったときには 踏みつぶし が起きるかもしれません。 そのような踏みつぶし は NFS “ユニット” では保証されていません。 踏みつぶしが起こったとき、 影響を受けたユニットは再送されます。 そして受信され、 組み立てられ、 肯定応答される公平な機会が与えられるでしょう。
原作: Martin Renters <martin@FreeBSD.org>
訳: 鈴木 康修 <yasu@hike.te.chiba-u.ac.jp>
netboot.com/netboot.rom によって、 ディスクのないクライアントでネットワーク経由で FreeBSD マシンのブートを行い FreeBSD を走らせることができます。 2.0 ではローカルなスワップを持つことができます。 NFS 経由のスワッピングもサポートされています。
サポートされているイーサネットカード: Western Digital/SMC 8003, 8013, 8216 とその互換ボード, NE1000/NE2000 とその互換カード (再コンパイルが必要)
サーバにするマシンを見つけます。 このマシンには、 FreeBSD 2.0のバイナリとbootpを 記憶するだけの十分なディスクスペースが必要です。 tftp と NFS も使えます。 テストしたマシン:
HP9000/8xx / HP-UX 9.04以降 (9.04以前では動きません)
Sun/Solaris 2.3. (bootpが必要)
クライアントにIP、gateway、netmaskを提供する bootpサーバをセットアップします。
diskless:\
:ht=ether:\
:ha=0000c01f848a:\
:sm=255.255.255.0:\
:hn:\
:ds=192.1.2.3:\
:ip=192.1.2.4:\
:gw=192.1.2.5:\
:vm=rfc1048:
クライアントにブート情報を提供する TFTP サーバを (bootp サーバと同じマシンに) セットアップします。 このファイルの名前は、 cfg.X.X.X.X (もしくは /tftpboot/cfg.X.X.X.X )で、 ここで X.X.X.X はクライアントの IP アドレスです。 このファイルの内容は netboot コマンドで有効です。 2.0では、 netboot は以下のようなコマンドを持ちます:
| help | helpリストの表示 |
ip X.X.X.X |
クライアントのIPアドレスの表示/セット |
server X.X.X.X |
bootp/tftp サーバのアドレスの表示/セット |
netmask X.X.X.X |
netmaskの表示/セット |
| hostname name | hostnameの表示/セット |
kernel name |
カーネル名の表示/セット |
rootfs ip:/fs |
root ファイルシステムの表示/セット |
swapfs ip:/fs |
swap ファイルシステムの表示/セット |
swapsize size |
diskless swapsize を KBytes単位でセット |
| diskboot | ディスクからのブート |
| autoboot | ブートプロセスの続行 |
trans on|off |
トランシーバのオン|オフ |
flags bc
dh sv |
ブートフラグの設定 |
完全にディスクレスな場合の一般的な cfg ファイルは以下のようになります:
rootfs 192.1.2.3:/rootfs/myclient swapfs 192.1.2.3:/swapfs swapsize 20000 hostname myclient.mydomain
ローカルに swap を持つマシンについては以下のようになります:
rootfs 192.1.2.3:/rootfs/myclient hostname myclient.mydomain
NFS サーバがクライアントにroot(必要ならswapも) ファイルシステムをexportしているか、 また、 クライアントがこれらのファイルシステムに ルートアクセスできるか確認します。 FreeBSDにおける一般的な /etc/exports ファイルは 以下のようになります:
/rootfs/myclient -maproot=0:0 myclient.mydomain /swapfs -maproot=0:0 myclient.mydomain
そして、 HP-UX側では以下のようになります:
/rootfs/myclient -root=myclient.mydomain /swapfs -root=myclient.mydomain
NFS経由でスワッピングを行う場合 (完全にディスクレスな場合の設定)、 クライアントが使用する swap ファイルを dd で作成します。 もし、 swapfs コマンドが上記の例のように 引数 /swapfsを持ちそのサイズが 20000 である場合、 myclientに対するスワップファイルは /swapfs/swap.X.X.X.X で呼び出されます。 ここで X.X.X.X はクライアントの IP アドレスです。 例:
# dd if=/dev/zero of=/swapfs/swap.192.1.2.4 bs=1k count=20000
また、 スワッピングが開始されるとクライアントの スワップスペースはセンシティブな情報を含むようになるので、 不正なアクセスを防止するため、 このファイルへの 読み書きのアクセス制限がなされていることを確認して下さい:
# chmod 0600 /swapfs/swap.192.1.2.4
クライアントがそれぞれのrootファイルシステムとして使う ディレクトリにrootファイルシステムを展開します (上記の例では/rootfs/myclient)。
HP-UX システム: サーバはHP9000/800 シリーズのマシンで、 HP-UX 9.04 以降が必要です。 これ以前のバージョンでは NFS を経由するデバイスファイルが作成ができません。
/rootfs/myclient に /dev を 展開する際に、 いくつかのシステム (HPUX) では FreeBSD に合った デバイスファイルが作成されないので 注意してください。 その際には最初の起動時にシングルユーザモードに 移行して (ブートの段階でCtrl-Cを押す)、 /dev に移って sh ./MAKEDEV all として、 クライアントからこれを 修正してください。
クライアントで netboot.com を実行するか、 netboot.rom ファイルから EPROMを作成します。
今のところ、 これを行う公式に認められた方法はありませんが、 私はそれぞれのクライアントで /usr ファイルシステムと個々の / ファイルシステムを共有して使っています。 どなたかこれをきちんと行うやり方の提案がありましたら、 私に、 もしくは FreeBSD core team グループに知らせてください。
/sys/i386/boot/netboot/Makefile の中の設定を変更して コンパイルすることで、 netbootでNE1000/2000 カードをサポートします。 このファイルの先頭にあるコメントを見てください。
最終更新: Bill Lloyd <wlloyd@mpd.ca>.
訳: はらだ きろう <kiroh@jp.FreeBSD.org>. 11 December
1996.
ISDN 技術とハードウェアに関しては、 Dan Kegel's ISDN Page がよい参考になるでしょう。
ISDN の導入手順は、 簡単にいって以下のようになります。
ヨーロッパ在住の方は、 ISDN カードの節に進んでください。
ISDN を使って、 インターネットプロバイダに(専用線は使用せず)、 ダ イアルアップ接続しようとしている場合は、 ターミナルアダプタの使用を考えてみてください。 この方法はもっとも柔軟性があり、 プロバイダを変更した場 合の問題も少ないでしょう。
2つの LAN の間を接続しようする場合や、 ISDN 専用線を使用する場合 には、 スタンドアローンルータ/ブリッジの使用を勧めます。
どの方法を用いるかを決定するには、 費用が重要な要素になってきます。 以下に、 最も安価な方法から、 高価な方法まで順に説明していきます。
著者:Hellmuth Michaelis <hm@FreeBSD.org>.
このセクションの記述は、 DSS1/Q.931 ISDN 標準がサポートされている国のユーザにのみ有効です。
最近増えてきている PC ISDN カードのうちいくつかは、 FreeBSD 2.2.x 以降で isdn4bsd ドライバパッケージによりサポートされています。 依然として開発中ではありますが、 ヨーロッパ中でうまく動作しているという報告があります。
最新の isdn4bsd は、 ftp://isdn4bsd@ftp.consol.de/pub/ から入手できます。 この ftp サイトでは、 ユーザ名として isdn4bsd を使い、 パスワードにメールアドレスを使ってログインする 必要があります。 ログインできたら pub ディレクトリに移動してください。 ユーザー名 ftp や anonymous によるログインでは、 必要なファイルにたどりつけません。
isdn4bsd は、 IP over raw HDLC もしくは同期 PPP を利用して他の ISDN ルータと接続できます。 留守番電話アプリケーションも使えます。
Siemens ISDN チップセット (ISAC/HSCX) を使用したものを主に多くのカードがサポートされています。 他のチップセット (Motorola、 Cologn ChipDesigns) のサポートは現在開発中です。 サポートされるカードの最新のリストは、 README を参照してください。
他の ISDN プロトコルを追加したい場合や、 サポートされていない ISDN PC カード
サポートしたい場合など isdn4bsd を拡張したい場合は、 <hm@kts.org> までご連絡ください。
majordomoによるメーリングリストが利用できます。 参加するには、 本文に
subscribe freebsd-isdn
と記入したメールを <majordomo@FreeBSD.org>
宛てに送ってください。
ターミナルアダプタ (TA) はISDN に対して、 通常の電話線に対するモデムに相当するものです。
ほとんどの TA は、 標準のヘイズ AT コマンドセットを使用しているので、 単にモデムと置き換えて使うことができます。
TA は、 基本的にはモデムと同じように動作しますが、 接続方法は異なり、 通信速度も古いモデムよりはるかに速くなります。 PPP の設定を、 モデムの場合と同じように行ってください。 とくにシリアル速度を 使用できる最高速度に設定するのを忘れないでください。
プロバイダへの接続に TA を使用する最大のメリットは、 動的 PPP を行えることです。 最近 IP アドレスが不足してきているため、 ほとんどのプロバイダは、 専用の IP アドレスを割り当てないようになっています。 ほとんどのスタンドアローンルータは、 動的 IP アドレスに対応していません。
訳注: 最近の ISDN ルータでは、 IP アドレスの動的割り当てに対応しているものも多いようです。 ただし制限がある場合もありますので、 詳しくはメーカ に問い合わせてください。
TA を使用した場合の機能や接続の安定性は、 使用している PPP デーモンに完全に依存します。 そのため、 FreeBSD で PPP の設定が完了していれば、 使用している既存のモデムを ISDN の TA に簡単にアップグレードすることができます。 ただし、 それまでの PPP のプログラムに問題があった場合、 その問題は TA に置き換えてもそのまま残ります。
最高の安定性を求めるのであれば、 ユーザープロセス iijPPP ではなく、 カーネル PPPを使用してください。
以下の TA は、 FreeBSD で動作確認ずみです。
Motorola BitSurfer および Bitsurfer Pro
Adtran
他の TA もほとんどの場合うまく動作するでしょう。 TA のメーカーでは、 TA がほとんどの標準モデム AT コマンドセットを受け付けるようにするよう、 努力しているようです。
外部 TA を使う際の最大の問題点は、 モデムの場合と同じく良いシリアルカー ドが必要であるということです。
シリアルデバイスの詳細、 そして非同期シリアルポートと同期シリアルポートの差については、 同期・非同期の違いやシリアルデバイスについて説明したチュートリアル FreeBSD Serial Hardware を参照してください。
標準の PC シリアルポート(非同期)に接続された TA は、 128Kbs の接続を行っていても、 最大通信速度が 115.2Kbs に制限されてしまいます。 128Kbs の ISDN の性能を最大限に生かすためには、 TA を同期シリアルカードに接続しなければなりません。
内蔵 TA を購入して、 同期/非同期問題を片付けてしまおうとは思わないでく ださい。 内蔵 TA には、 単に標準 PC シリアルポートのチップが内蔵されてい るだけです。 内蔵 TA の利点といえば、 シリアルケーブルを買わなくていいと いうことと、 電源コンセントが一つ少なくて済むということくらいでしょう。
同期カードと TA の組合せは 386 の FreeBSD マシンの場合でも、 スタンドア ローンのルータと同程度の速度は確保できます。 またこの組合せでは、 ルータより柔軟な設定が可能です。
同期カード/TA を選ぶか、 スタンドアローンルータを選ぶかは、 多分に宗教的な問題です。 メーリングリストでもいくつか議論がありました。 議論の内容に ついては、 archives を参照してください。
ISDN ブリッジやルータは、 OS 特有のものではありません。 もちろん FreeBSD 特有のものでもありません。 ルーティングやブリッジング技術に関する詳細は、 ネットワークの参考書をご覧ください。
このページでは、 ルータとブリッジにどちらでもあてはまるように記述します。
ISDN ルータ/ブリッジは、 ローエンドの製品のコストが下がってきていることもあり、 より一般的に使用されるようになるでしょう。 ISDN ルータは、 外見は小さな箱で、 ローカルのイーサネットネットワーク(もしくはカード)と直接、 接続します。 また、 自身で他のブリッジ/ルータとの接続を制御します。 PPP や他のプロトコルを使用するためのソフトウェアは、 すべて組み込まれています。
ルータは、 完全な同期 ISDN 接続を使用するため、 通常の TA と比較してスループットが大幅に向上します。
ISDN ルータ/ブリッジを使用する場合の最大の問題点は、 各メーカーの製品間に相性の問題がまだ存在することです。 インターネットプロバイダとの接続を考えている場合には、 プロバイダと相談することをお勧めします。
事務所の LAN と家庭の LAN の間など、 二つの LAN セグメントの間を接続しようとしている場合は、 ブリッジ/ルータの使用がもっともメンテナンスが 簡単で、 努力が少なくてすむ方法です。 両側の機材を購入するのであれば、 メーカー間の接続性の問題もないでしょう。
たとえば家庭の LAN や出張所の LAN を本社のネットワークに接続するためには、 以下のような設定が使用できます。
Example 22-1. 出張所 LAN または 家庭 LAN
ネットワークは、 10 Base T イーサネットです。 ルータとネットワークの間は、 必要に応じて AUI/10BT トランシーバを使って接続します。
---Sun ワークステーション | ---FreeBSD マシン | ---Windows 95 (別に勧めているわけじゃありません) | スタンドアローンルータ | ISDN BRI ライン
家庭/出張所 LAN で、 一台しかコンピュータを接続しないのであれば、 クロス のツイストペアケーブルを使用して、 スタンドアローンルータと直結も可能です。
Example 22-2. 本社 LAN や他の LAN
ネットワークは、 ツイストペアイーサネットです。
-------Novell サーバ
| |
|ハ ---Sun
| |
| ---FreeBSD
| |
|ブ ---Windows 95
| |
|___---スタンドアローンルータ
|
ISDN BRI ライン
ほとんどのルータ/ブリッジでは、 別々の二つのサイトに対して、 同時にそれ ぞれ独立した二つの PPP 接続が可能です。 これは、 通常の TA ではサポートされない機能で、 ルータ/ブリッジ接続の大きな利点です (シリアルポートを 二つもつ特殊(そして高価な) TA では可能です)。 チャンネル割り当てや MPP などと混同しないでください。
これは、 大変便利な機能です。 たとえば事務所で専用線 ISDN 接続を使用していて、 別の ISDN ラインを購入したくないとします。 この場合、 事務所のルータは、 一つの専用線 B チャンネル接続(64Kbs)を維持しつつ、 別 の B チャンネルを他の用途に使用することができます。 たとえば、 他の場所 とのダイアルイン、 ダイアルアウトに使用したり、 バンド幅を増やすために、 インターネットとの接続への動的な割り当て(MPP など)に使用したりすることが可能です。
またイーサネットブリッジは、 IP パケットだけでなく IPX/SPX などすべての プロトコルのパケットを中継することが可能です。
原作: Bill Swingle <unfurl@FreeBSD.org>, 2000 年 1 月 21 日,
監修: Eric Ogren <eogren@earthlink.net>, Udo Erdelhoff
<ue@nathan.ruhr.de>, 2000 年 6
月.
NIS とは Network Information Services の略で Sun Microsystems によって Unix の (もともとは SunOS の) 集中管理のために開発されました。 現在では事実上の業界標準になっており、 主要な Unix は (Solaris、 HP-UX、 AIX、 Linux、 NetBSD、 OpenBSD、 FreeBSD、 等々) すべてこれをサポートしています。
NIS は元々、 イエローページ (または yp) として知られていましたが、 著作権を侵害しているとして Sun はその名を変えさせられました。
NIS は RPC を使ったクライアント/サーバシステムです。 これを使うと NISドメイン内のマシン間で、 共通の設定ファイルを共有することができます。 また、 NIS を使うことでシステム管理者は最小限の設定データで NIS クライアントを立ち上げることができ、 1 ヶ所から設定データの追加、 削除、 変更が可能です。
NIS は Windows NT のドメインシステムに似ています。 内部の実装は似ても似つかないものですが、 基本的な機能を 対比することはできます。
NIS サーバの立ち上げや NIS クライアントの設定など、 NIS を FreeBSD に導入するにあたって、 目にするであろう用語や重要なユーザプロセスがいくつかあります。
NIS ドメイン名. NIS マスターサーバ一つと そのクライアント (スレーブサーバを含む) は一つの NIS ドメイン名を 持ちます。 NT のドメイン名同様、 NIS ドメイン名は DNS とは何の関係もありません。
portmap. portmap は RPC (Remote Procedure Call、 NIS で使われるネットワークプロトコル) を利用するために実行しておかなければなりません。 portmap が動いていなければ、 NIS サーバの起動もクライアントとしての機能も得られません。
ypbind. ypbind は NIS クライアントを NIS サーバに“結び付け”ます。 これは NIS ドメイン名をシステムから受け、 RPC を用いてサーバに接続します。 ypbind はクライアントとサーバのコミュニケーションの中枢であり、 もしクライアントマシンの ypbind が機能を停止した場合は NIS サーバへアクセスできなくなります。
ypserv. ypserv は NIS サーバでのみ実行されるもので、 NIS のサーバプロセスそのものです。 ypserv が機能を停止したときは、 サーバは NIS リクエストに答えられなくなります (運が良ければ、 スレーブサーバがいて代わりを努めるでしょう)。
Note: 今まで使っていたサーバが機能を停止したとき、 別のサーバに再接続しに行かない NIS の実装もいくつかあります (FreeBSD のものは違います)。 そのような場合に復帰するための唯一の方法は、 サーバプロセス (あるいはサーバ全体)、 もしくはクライアントの ypbind プロセスを再スタートすることです。
rpc.yppasswdd. rpc.yppasswdd は NIS マスターサーバで動かされるべきもう一つのプロセスで、 NIS クライアントから NIS パスワードを変更させるデーモンです。 このデーモンが動いていないときは、 ユーザは NIS マスターサーバに login し、 そこでパスワードを変更することになります。
NIS 環境にあるホストは、 次の 3 種類に分類されます。 それは、 マスターサーバ、 スレーブサーバ、 クライアントです。 サーバは、 ホストの設定情報の中心的な情報格納庫の役割をします。 マスターサーバは元となる信頼できる情報を保持し、 スレーブサーバは、 冗長性を確保するため、 この情報をミラーします。 そしてクライアントは、 サーバから情報の提供を受けて動作します。
この方法を用いることで、 数多くのファイルにある情報が共有できます。 よく NIS で共有されるのは、 master.passwd や group、 hosts といったファイルです。 クライアント上のプロセスで、 通常ローカルのファイルにある情報が必要 となったとき、 クライアントは接続しているサーバに問い合わせを行い、 その情報を得ます。
NIS マスターサーバ. このサーバは Windows NT で言うところのプライマリ ドメインコントローラにあたります。 すべての NIS クライアントで利用されるファイルを保守し、 passwd や group、 その他 NIS クライアントが参照するファイルは、 マスターサーバにあります。
Note: 一つのマシンが一つ以上の NIS ドメインのマスターサーバになることは可能です。 しかし、 ここでは比較的小規模の NIS 環境を対象としているため、 そのような場合については扱いません。
NIS スレーブサーバ。 NT で言うところのバックアップドメインコントローラに似たもので、 NIS スレーブサーバは NIS マスターサーバのデータファイルのコピーを保持します。 NIS スレーブサーバは重要な環境で必要とされる冗長性を提供し、 マスターサーバの負荷のバランスをとります。 NIS クライアントは常に最初にレスポンスを返したサーバを NIS サーバとして接続しますが、 これにはスレーブサーバも含まれます。
NIS クライアント。 NIS クライアントは大部分の NT ワークステーションのように、 logon に際して NIS サーバに対して (NT ワークステーションの場合では NT ドメインコントローラに) 認証します。
この節では NIS 環境の立ち上げ例を取り上げます。
Note: この節ではあなたが FreeBSD 3.3 以降を使っているものとします。 ここで与えられる指示はおそらく FreeBSD の 3.0 以降の、 どのバージョンでも機能するでしょうが、 それを保証するものではありません。
あなたが大学の小さな研究室の管理人であるとしましょう。 この研究室は 15 台の FreeBSD マシンからなっていて、 現在はまだ集中管理されていません。 すなわち、 各マシンは /etc/passwd と /etc/master.passwd を各々が持っています。 これらのファイルは手動でお互いに同期させています。 つまり現時点では、 新しいユーザをあなたが追加するとき、 adduser を 15 ヶ所すべてで実行しなければなりません。 これは明らかに変える必要があるため、 あなたはこのうち 2 台をサーバにして NIS を導入することを決めました。
その結果、 研究室の設定はこのようなものになります:
| マシンの名前 | IP address | 役割 |
|---|---|---|
| ellington | 10.0.0.2 | NIS マスタ |
| coltrane | 10.0.0.3 | NIS スレーブ |
| basie | 10.0.0.4 | 教員用のワークステーション |
| bird | 10.0.0.5 | クライアントマシン |
| cli[1-11] | 10.0.0.[6-17] | その他のクライアントマシン |
もし NIS によるシステム管理の設定を行なうのが初めてなら、 どのようにしたいのか、 ひととおり最後まで考えてみることをお勧めします。 ネットワークの規模によらず、 いくつか決めるべきことがあるからです。
ここでいうドメイン名は、 今まであなたが使っていた、 いわゆる “ドメイン名” と呼んでいたものとは違います。 正確には “NIS ドメイン名” と呼ばれます。 クライアントがサーバに情報を要求するとき、 その要求には自分が属する NIS ドメインの名前が含まれています。 これは、 1 つのネットワークに複数のサーバがある場合に、 どのサーバが要求を処理すれば良いかを決めるために使われます。 NIS ドメイン名とは、 関連のあるホストをグループ化するための名前である、 と考えると良いでしょう。
組織によってはインターネットのドメイン名を NIS ドメイン名に使っているところがありますが、 これはネットワークのトラブルをデバッグするときに混乱の原因となるため、 お勧めできません。 NIS ドメイン名はネットワーク内で一意でなければならないので、 ドメイン名がドメインに含まれるマシンを表すようなものであれば、 分かりやすくなります。 たとえば Acme 社のアート(Art)部門であれば、 NIS ドメイン名を"acme-art"とすれば良いでしょう。
しかしながら、 オペレーティングシステムによっては、 そのネットワークドメイン名を NIS のドメイン名として使うものもあります (特に SunOS)。 あなたのネットワークにそのような制限のあるマシンが 1 台でもあるときは、 NIS のドメイン名としてインターネットのネットワークドメイン名を使わなければいけません。
NIS サーバとして使うマシンを選ぶ際には、 いくつかの注意点があります。 NIS における困ったことの一つに、 クライアントのサーバへの依存度があります。 クライアントが自分の NIS ドメインのサーバに接続できない場合、 マシンが使用不能になることがよくあります。 もし、 ユーザやグループに関する情報が得られなければ、 ほとんどのシステムは一時的にですが停止してしまいます。 こういったことを念頭に置いて、 しょっちゅうリブートされるマシンや、 開発に使われそうなマシンを選ばないようにしなければなりません。 理想的には、 NIS サーバはスタンドアロンで NIS サーバ専用となるマシンにするべきです。 ネットワークの負荷が重くなければ、 他のサービスを走らせているマシンを NIS サーバにしてもかまいません。 ただし NIS サーバが使えなくなると、 すべてのクライアントに影響をおよぼす、 という点には注意しなければなりません。
元となるすべての NIS 情報は、 NIS マスターサーバと呼ばれる 1 台のマシンに置かれます。 この情報が格納されるデータベースを NIS マップと呼びます。 FreeBSDでは、 このマップは /var/yp/[domainname] に置かれます。 [domainname] は、 サーバがサービスする NIS ドメインです。 1 台の NIS サーバが複数のドメインをサポートすることも可能です。 つまり、 このディレクトリを各々のドメインごとに作ることができ、 各ドメインごと、 独立したマップの集合を持つことになります。
NIS のマスターサーバとスレーブサーバ上では、 ypserv デーモンがすべての NIS 要求を処理します。 ypserv は NIS クライアントからの要求を受け付け、 ドメイン名とマップ名を対応するデータベースファイルへのパスに変換し、 データをクライアントに返送します。
やりたいことにもよりますが、 NIS マスターサーバの設定は比較的単純です。 FreeBSD は初期状態で NIS に対応しています。 必要なことは以下の行を /etc/rc.conf に追加し、 FreeBSD をリスタートすることだけです。
nisdomainname="test-domain"この行はネットワークのセットアップ時に (すなわち再起動したときに) NIS のドメイン名を test-domain にセットします。
nis_server_enable="YES"これは FreeBSD に、 次にネットワークが立ち上がったとき NIS のサーバプロセスを起動させます。
nis_yppasswdd_enable="YES"これは rpc.yppasswdd デーモンを有効にします。 上述したようにこれはユーザが NIS のパスワードをクライアントのマシンから変更することを可能にします。
あと、 あなたがしなければいけないことはスーパユーザ権限でコマンド /etc/netstart を実行することです。 これにより /etc/rc.conf で定義された値を使ってすべての設定が行なわれます。
NIS マップ とは /var/yp ディレクトリにあるデータベースファイルです。 これらは NIS マスタの /etc ディレクトリの設定ファイルから作られます。 唯一の例外は /etc/master.passwd ファイルです。 これは、 root や他の管理用アカウントのパスワードまでその NIS ドメインのすべてのサーバに伝えたくないという、 もっともな理由によるものです。 このため NIS マップの初期化の前に以下を行う必要があります。
# cp /etc/master.passwd /var/yp/master.passwd # cd /var/yp # vi master.passwd
あなたはシステムに関するアカウント (bin、 tty、 kmem、 games、 etc) をすべて削除しなければなりません。 またあなたが NIS クライアントに伝えたくないと思うアカウント (たとえば root や他の UID が 0 (スーパユーザ) のアカウント) についても削除する必要があります。
Note: /var/yp/master.passwd が グループや全世界から読めるようになっていないようにしてください (モード 600)! 必要なら chmod コマンドを 使ってください。
すべてが終わったらマップを初期化します! FreeBSD には、 これを行うために ypinit という名のスクリプトが含まれています
(詳細はそのマニュアルページをご覧ください)。 このスクリプトはほとんどの UNIX OS
で存在しますが、 すべてとは限らないことを覚えておいてください。 Digital Unix/Compaq
Tru64 Unix では ypsetup と呼ばれています。 NIS
マスタのためのマップを作るためには -m オプションを ypinit に与えます。 上述のステップを完了しているなら、
以下を実行して NIS マップを生成します。
ellington# ypinit -m test-domain Server Type: MASTER Domain: test-domain Creating an YP server will require that you answer a few questions. Questions will all be asked at the beginning of the procedure. Do you want this procedure to quit on non-fatal errors? [y/n: n] n Ok, please remember to go back and redo manually whatever fails. If you don't, something might not work. At this point, we have to construct a list of this domains YP servers. rod.darktech.org is already known as master server. Please continue to add any slave servers, one per line. When you are done with the list, type a <control D>. master server : ellington next host to add: coltrane next host to add: ^D The current list of NIS servers looks like this: ellington coltrane Is this correct? [y/n: y] y [..output from map generation..] NIS Map update completed. ellington has been setup as an YP master server without any errors.
ypinit は /var/yp/Makefile を /var/yp/Makefile.dist から作成します。 作成されていれば、 そのファイルはあなたが扱っているのが FreeBSD のみからなる、 サーバが一つだけの NIS 環境であるという前提に立っています。 test-domain はスレーブサーバを一つ持っていますので、 /var/yp/Makefile を編集する必要があります。
ellington# vi /var/yp/Makefile
`NOPUSH = "True"' としている行を (もし既にコメントアウトされていないならば) コメントアウトしなければなりません。
NIS スレーブサーバの設定はマスターサーバの設定以上に簡単です。
スレーブサーバにログオンし /etc/rc.conf
ファイルを前回と同様に編集します。 唯一の違うところは ypinit の実行に -s
オプションを使わなければいけないことです。 -s オプションは
NIS マスターサーバの名前を要求し、 コマンドラインは以下のようになります。
coltrane# ypinit -s ellington test-domain Server Type: SLAVE Domain: test-domain Master: ellington Creating an YP server will require that you answer a few questions. Questions will all be asked at the beginning of the procedure. Do you want this procedure to quit on non-fatal errors? [y/n: n] n Ok, please remember to go back and redo manually whatever fails. If you don't, something might not work. There will be no further questions. The remainder of the procedure should take a few minutes, to copy the databases from ellington. Transferring netgroup... ypxfr: Exiting: Map successfully transferred Transferring netgroup.byuser... ypxfr: Exiting: Map successfully transferred Transferring netgroup.byhost... ypxfr: Exiting: Map successfully transferred Transferring master.passwd.byuid... ypxfr: Exiting: Map successfully transferred Transferring passwd.byuid... ypxfr: Exiting: Map successfully transferred Transferring passwd.byname... ypxfr: Exiting: Map successfully transferred Transferring group.bygid... ypxfr: Exiting: Map successfully transferred Transferring group.byname... ypxfr: Exiting: Map successfully transferred Transferring services.byname... ypxfr: Exiting: Map successfully transferred Transferring rpc.bynumber... ypxfr: Exiting: Map successfully transferred Transferring rpc.byname... ypxfr: Exiting: Map successfully transferred Transferring protocols.byname... ypxfr: Exiting: Map successfully transferred Transferring master.passwd.byname... ypxfr: Exiting: Map successfully transferred Transferring networks.byname... ypxfr: Exiting: Map successfully transferred Transferring networks.byaddr... ypxfr: Exiting: Map successfully transferred Transferring netid.byname... ypxfr: Exiting: Map successfully transferred Transferring hos