diff --git a/documentation/content/ja/books/handbook/basics/_index.adoc b/documentation/content/ja/books/handbook/basics/_index.adoc index 043faad85d..78b837cc17 100644 --- a/documentation/content/ja/books/handbook/basics/_index.adoc +++ b/documentation/content/ja/books/handbook/basics/_index.adoc @@ -1,1907 +1,1906 @@ --- title: 第3章 FreeBSD の基礎知識 part: パートI. 導入 prev: books/handbook/bsdinstall next: books/handbook/ports description: FreeBSD オペレーティングシステムの基本的なコマンドと機能について tags: ["basics", "virtual consoles", "users", "management", "permissions", "directory structure", "disk organization", "mounting", "processes", "daemons", "shell", "editor", "manual pages", "devices"] showBookMenu: true weight: 5 path: "/books/handbook/basics/" -aliases: ["/ja/books/handbook/consoles/","/ja/books/handbook/users-synopsis/","/ja/books/handbook/permissions/","/ja/books/handbook/dirstructure/","/ja/books/handbook/disk-organization/","/ja/books/handbook/mount-unmount/","/ja/books/handbook/basics-processes/","/ja/books/handbook/shells/","/ja/books/handbook/editors/","/ja/books/handbook/basics-devices/","/ja/books/handbook/basics-more-information/"] --- [[basics]] = FreeBSD の基礎知識 :doctype: book :toc: macro :toclevels: 1 :icons: font :sectnums: :sectnumlevels: 6 :sectnumoffset: 3 :partnums: :source-highlighter: rouge :experimental: :images-path: books/handbook/basics/ ifdef::env-beastie[] ifdef::backend-html5[] :imagesdir: ../../../../images/{images-path} endif::[] ifndef::book[] include::shared/authors.adoc[] include::shared/mirrors.adoc[] include::shared/releases.adoc[] include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists.adoc[] include::shared/{{% lang %}}/urls.adoc[] toc::[] endif::[] ifdef::backend-pdf,backend-epub3[] include::../../../../../shared/asciidoctor.adoc[] endif::[] endif::[] ifndef::env-beastie[] toc::[] include::../../../../../shared/asciidoctor.adoc[] endif::[] [[basics-synopsis]] == この章では この章では FreeBSD オペレーティングシステムの基本的なコマンドと機能について記述しています。 ここに書かれてあることのほとんどは、どんな UNIX(R) -like なオペレーティングシステムにもあてはまります。 FreeBSD の初心者であれば、この章を読んでおいた方がきっといいはずです。 この章を読んで分かることは、次のようなことです。 * 仮想コンソールの使い方と設定方法 * FreeBSD システム上でユーザやグループを作成し管理する方法 * UNIX(R) のファイルの許可属性の仕組みと FreeBSD のファイルフラグについて * FreeBSD のファイルシステムの構成 * FreeBSD のディスク構成 * ファイルシステムをマウント、アンマウントする方法 * プロセス、デーモンとシグナルとはなにか * シェルとはなにか。 また、デフォルトのログイン環境を変える方法 * テキストエディタの基本的な使い方 * デバイスおよびデバイスノードとはなにか * さらに詳しい情報を得るためのマニュアルページの読み方 [[consoles]] == 仮想コンソールと端末 起動時に自動的にグラフィカルな環境が起動するように FreeBSD を設定していなければ、システムが起動すると、以下のようなコマンドラインのログインプロンプトが表示されます。 [source,shell] .... FreeBSD/amd64 (pc3.example.org) (ttyv0) login: .... 最初の行はシステムの情報です。 `amd64` は、このシステム上で 64 ビット版の FreeBSD が動作していることを示しています。 ホスト名は `pc3.example.org`、`ttyv0` は "システムコンソール" であることを示しています。 次の行はログインプロンプトです。 FreeBSD はマルチユーザシステムなので、ユーザを区別する何がしかの手段が必要です。 システム上のプログラムを実行できるようになるには、すべてのユーザに対してシステムにログインすることが義務付けられています。 すべてのユーザは、一意な "ユーザ名" と "パスワード" を持っています。 システムコンソールにログインするには、システムのインストール時に crossref:bsdinstall[bsdinstall-addusers,ユーザの追加] で追加したユーザ名を入力して、kbd:[Enter] を押してください。 次にそのユーザのパスワードを入力して、kbd:[Enter] を押してください。 セキュリティの観点から、パスワードは _表示されません_。 パスワードを正確に入力したら、日々のメッセージ (MOTD) が表示され、 コマンドプロンプトが表示されます。 ユーザ作成時に選択したシェルに依存しますが、このプロンプトは `+#+`, `$` または `%` といった記号です。 プロンプトはユーザが FreeBSD のシステムコンソールへログインし、利用可能なコマンドを実行する準備ができていることを示しています。 [[consoles-virtual]] === 仮想コンソール システムコンソールからシステムに対話的にコマンドを実行できますが、FreeBSD システム上でキーボードによりコマンドラインから利用しているユーザは、通常代わりに仮想コンソールにログインします。 デフォルトではシステムからのメッセージはシステムコンソールに出力され、これらのメッセージが、ユーザが作業しているコマンドまたはファイル上に表示されるため、ユーザが現在の作業に集中できなくなるためです。 デフォルトでは FreeBSD は、複数の仮想コンソールを表示してコマンドを入力できるように設定されています。 各仮想コンソールは、個別のログインプロンプトおよびシェルを持っており、簡単に仮想コンソール間の切り替えができます。 これにより、グラフィカルな環境において同時に複数のウィンドウを開いてコマンドラインの環境を提供できます。 FreeBSD では kbd:[Alt+F1] から kbd:[Alt+F8] までのキーの組み合わせが、仮想コンソール間の切り替えに予約されています。 システムコンソール (`ttyv0`) に切り替えるには、kbd:[Alt+F1] を使ってください。 最初の仮想コンソール (`ttyv1`) にアクセスするには kbd:[Alt+F2]、2 番目の仮想コンソール (`ttyv2`) にアクセスするには kbd:[Alt+F3]、といったように使ってください。 Xorg をグラフィカルなコンソールとして使用しているときには、kbd:[Ctrl+Alt+F1] の組み合わせを使用すると、テキストベースの仮想コンソールへ戻ります。 あるコンソールから他に切り替えるのに応じて、FreeBSD は画面への出力を管理します。 結果として、FreeBSD で動かすコマンドを入力するのに使える複数の画面とキーボードを仮想的に実現できるのです。 ある仮想コンソールで実行したプログラムは、ユーザが別の仮想コンソールに切り替えても実行を停止しません。 FreeBSD のコンソールおよびキーボードドライバに関するさらなる技術的な説明については、man:kbdcontrol[1], man:vidcontrol[1], man:atkbd[4], man:syscons[4] および man:vt[4] を参照してください。 FreeBSD では以下の `/etc/ttys` のセクションのように複数の利用可能な仮想コンソールが設定されています。 [.programlisting] .... # name getty type status comments # ttyv0 "/usr/libexec/getty Pc" xterm on secure # Virtual terminals ttyv1 "/usr/libexec/getty Pc" xterm on secure ttyv2 "/usr/libexec/getty Pc" xterm on secure ttyv3 "/usr/libexec/getty Pc" xterm on secure ttyv4 "/usr/libexec/getty Pc" xterm on secure ttyv5 "/usr/libexec/getty Pc" xterm on secure ttyv6 "/usr/libexec/getty Pc" xterm on secure ttyv7 "/usr/libexec/getty Pc" xterm on secure ttyv8 "/usr/X11R6/bin/xdm -nodaemon" xterm off secure .... 仮想コンソールを無効にするには、無効にしたい仮想コンソールの行をコメント記号 (`+#+`) から始まるように設定してください。 たとえば、利用可能な仮想コンソールを 8 つから 4 つに減らす場合には、`ttyv5` から `ttyv8` までの仮想コンソールを表す最後の 4 行の先頭に `+#+` を挿入してください。 システムコンソールを表す `ttyv0` から始まる行はコメントアウト _しないでください。_ 最後の仮想コンソール (`ttyv8`) は、 crossref:x11[x11,X Window System] で説明されているように Xrog がインストールされて設定されている場合に、グラフィカル環境にアクセスするために使用されます。 このファイルのそれぞれのカラムと仮想コンソールに設定可能なオプションの詳しい説明は、man:ttys[5] のマニュアルを参照してください。 [[consoles-singleuser]] === シングルユーザモード FreeBSD のブートメニューでは、"シングルユーザモード" と表示されているオプションが提供されています。 このオプションを選択すると、システムは "シングルユーザモード" と呼ばれる特別なモードで起動します。 このモードは、システムが起動しない場合に修正のため、または `root` のパスワードが分からなくなってしまいリセットするときなど、特別な状況で利用されます。 シングルユーザモードで動かしている場合は、ネットワークや他の仮想コンソールは利用できません。 しかし、システムへの完全な `root` 権限を利用でき、デフォルトの設定では `root` のパスワードは必要ありません。 このような理由のため、このモードで起動する場合には物理的なキーボードへのアクセスが必要であり、FreeBSD システムの安全性の観点からキーボードに物理的にアクセスできる人を決めておく事が必要です。 シングルユーザモードを管理する設定は、`/etc/ttys` ファイルの以下のセクションにあります。 [.programlisting] .... # 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 .... デフォルトでは、status は `secure` に設定されています。 これは、キーボードへアクセスできるかユーザが誰であるかが重要ではない、もしくはアクセスできるユーザについては物理的なセキュリティポリシーでコントロールされていることが前提となっています。 この設定を `insecure` に変更するケースとしては、システムは安全ではなく、誰でもキーボードにアクセスできる環境が想定されます。 この行を `insecure` に変更すると、FreeBSD がシングルユーザモードで起動した場合に `root` のパスワードが要求されます。 [NOTE] ==== __ `insecure` に変更する場合は十分注意してください! __ `root` のパスワードを忘れてしまうと、シングルユーザモードで起動することはできますが、FreeBSD の起動のプロセスに詳しくない人が起動できるようにするのは難しいかも知れません。 ==== [[consoles-vidcontrol]] === コンソールのビデオモードの変更 FreeBSD のデフォルトのビデオモードは 1024x768 や 1280x1024 など、グラフィックチップおよびディスプレイが対応しているサイズに調整されます。 別のビデオモードを使うには、`VESA` モジュールをロードしてください。 [source,shell] .... # kldload vesa .... その後、ハードウェアが対応しているビデオモードを man:vidcontrol[1] を使って確認してください。 以下を実行すると、対応しているビデオモードを調べることができます。 [source,shell] .... # vidcontrol -i mode .... このコマンドは、使用しているハードウェアが対応しているビデオモードの一覧を表示します。 その後、man:vidcontrol[1] を `root` ユーザで実行して、新しく使用するビデオモードを選択してください。 [source,shell] .... # vidcontrol MODE_279 .... このビデオモードで良ければ、起動時に自動的に設定されるように `/etc/rc.conf` に以下のように追加してください。 [.programlisting] .... allscreens_flags="MODE_279" .... [[users-synopsis]] == ユーザと基本的なアカウント管理 FreeBSD は、複数のユーザが同時にコンピュータを使えるようにします。 スクリーンとキーボードの前に一度に座れるのはその中の一人だけですが ユーザは何人でもネットワークを通してログインできます。 システムを使うためには、 どのユーザもアカウントがなければなりません。 この章では、以下のことを説明します。 * FreeBSD システムにおけるさまざまな種類のユーザアカウントについて * ユーザアカウントを追加、削除および変更する方法 * ユーザやグループが利用できるリソースの上限を制御する方法 * グループの作成、 およびグループにユーザをメンバとして追加する方法 [[users-introduction]] === アカウントの種類 FreeBSD システムへアクセスするには、 かならずアカウントが使われ、 また、プロセスもすべてユーザによって実行されるので、 ユーザとアカウントの管理は、重要なものです。 アカウントには大きく分けて三種類あります。 システムアカウント (system accounts)、ユーザアカウント (user accounts)、 そしてスーパーユーザ (superuser) です。 [[users-system]] ==== システムアカウント システムアカウントは、DNS、メール、 ウェブサーバといった各種サービスを運用するために使われます。 この目的は、セキュリティを確保するためです。 もしすべてのサービスがスーパーユーザで実行されていると、 それらのサービスはどんな動作でも可能となり、 適切な制限を適用することができません。 システムアカウントの具体例は、 `daemon`, `operator`, `bind`, `news` および `www` といったものです。 `nobody` は通常の特権を持たないシステムアカウントです。 しかし、`nobody` を利用するサービスが増えれば増えるほど、 それに所属するファイルやプロセスも増え、 その特権も大きくなるということを忘れないようにしてください。 [[users-user]] ==== ユーザアカウント ユーザアカウントは、 主に現実のユーザがシステムにアクセスする手段として用いられるものです。 システムにアクセスするすべてのユーザは、 それぞれ唯一のユーザアカウントを持つべきです。 こうすることで管理者は誰が何を行なっているかがわかりますし、 他の人の設定を壊してしまうようなことを避けることができます。 それぞれのユーザは快適にシステムを利用するため、 シェル、エディタ、キー設定、言語など、 各自の環境をセットアップすることができます。 FreeBSD システム上のどのアカウントにも、 以下のような情報がなにかしら結び付けられています。 ユーザ名:: `login:` プロンプトに対して入力するユーザの名前です。 各ユーザは一意なユーザ名を持つ必要があります。 有効なユーザ名を作成するには man:passwd[5] に記載されているいくつもの規則があります。 アプリケーションの上位互換性を保つために、8 文字以下の小文字からなるユーザ名を使うことが推奨されています。 パスワード:: 各アカウントにはパスワードがあります。 ユーザ ID (UID):: ユーザ ID (UID) は、 FreeBSD システムがユーザを一意に識別するための数値です。 ユーザ名を指定できるコマンドは、 ユーザ名を UID に変換してから扱っています。 65535 より大きな UID は、ソフトウェアによっては互換性の問題を引き起こす可能性があるので、65535 以下の UID を使用することが推奨されています。 グループ ID (GID):: グループ ID (GID) は、 ユーザが属する第一グループを一意に識別するための数値です。 グループは、UID ではなく、 ユーザの GID に基づいて資源へのアクセスを制御する仕組みです。 これは、ある種の設定ファイルのサイズを大幅に小さくします。 ユーザは、複数のグループに所属できます。 65535 より大きな GID は、ソフトウェアに問題を引き起こす可能性があるので、 65535 以下の GID を使うことを推奨します。 ログインクラス:: ログインクラスはグループの仕組みを拡張したもので、 別々のユーザに対してシステムを調整する時に、 さらなる柔軟性を提供します。ログインクラスの詳細については、 <> で説明します。 パスワードの有効期限:: デフォルトでは、パスワードに有効期限は設定されていません。 しかしながら、パスワードの有効期限をユーザごとに設定し、一部またはすべてのユーザに、一定の時間がたったらパスワードを強制的に変更させることができます。 アカウント失効時間:: デフォルトでは、FreeBSD はアカウントを失効させません。 たとえば学校で生徒のアカウントがある場合など、 限られた期間だけのアカウントを作成するなら、 そのアカウントがいつ失効するか man:pw[8] を使って指定できます。 有効期間が経過したら、 そのアカウントのディレクトリやファイルは残っていますが、 システムへのログインはできなくなります。 ユーザの氏名:: FreeBSD ではユーザ名でアカウントを一意に識別しますが、 必ずしもユーザの本名を反映したものではありません。 この情報をアカウントに関連付けることもできます。 この情報は、コメントのように、空白、大文字、および 8 字以上で記載できます。 ホームディレクトリ:: ホームディレクトリは、システム中のディレクトリへのフルパスです。 これはユーザがログインした時に作業を開始するディレクトリです。 一般的な慣習は、すべてのユーザのホームディレクトリを `/home/username` か `/usr/home/username` の下に置くことです。 各ユーザは、個人のファイルやサブディレクトリを、ユーザのホームディレクトリに保存します。 ユーザシェル:: シェルは、 ユーザがシステムと対話するデフォルトの環境を提供します。 いろいろな種類のシェルがあり、 経験を積んだユーザはそれぞれ好みがあり、 それをアカウントの設定に反映できます。 [[users-superuser]] ==== スーパーユーザアカウント スーパーユーザアカウントは通常 `root` と呼ばれ、 システム管理を行なうために使われ、権限に制限がありません。 そのため、このアカウントはメールのやりとり、システムの調査、 プログラミングといった日常的な作業を行なうために使われるべきものではありません。 その理由は、スーパーユーザが通常のユーザアカウントと異なり、 操作にまったく制限を受けないことによります。 そのためスーパーユーザアカウントで操作を間違えると、 システムに重大な影響を与えてしまう恐れがあるのです。 ユーザアカウントでは、 仮に操作を間違えてもシステムを壊してしまうようなことはできないようになっています。 そのため、ユーザアカウントでログインし、 高い権限が必要なコマンドを実行するときだけスーパーユーザになることが推奨されています。 スーパーユーザで実行するコマンドはいつでも、 二回、三回と確認してください。 なぜならスペースが多かったり、文字が欠けていたりするだけで、 取り返しのつかないデータの破壊につながる可能性があるからです。 スーパーユーザの権限を得るには、さまざまな方法があります。 `root` ユーザとしてログインする方法もありますが、 これはまったくお勧めできません。 スーパーユーザの権限を手に入れるには、かわりに man:su[1] を使って下さい。 `-` オプションをつけて実行すると、 実行したユーザに root ユーザの環境が設定されます。 このコマンドは `wheel` グループに入ってるユーザのみが実行でき、他のユーザは実行出来ません。 また、実行時には `root` ユーザのパスワードを必要とします。 以下の例では、`make install` を行うときにスーパーユーザの権限が必要なので、 このコマンドを実行する時だけユーザはスーパーユーザになります。 コマンドを実行したら、ユーザは `exit` を実行してスーパーユーザからログアウトし、 通常のユーザアカウントの権限に戻ります。 .スーパーユーザ権限でプログラムをインストールする [example] ==== [source,shell] .... % configure % make % su - Password: # make install # exit % .... ==== 1 人の管理者が一台のマシン、 もしくは小規模なネットワークを管理する場合には、 man:su[1] のフレームワークはうまく機能するでしょう。 この代わりとなるのは、 package:security/sudo[] package または port です。これはログ機能や、 スーパーユーザの権限で実行できるユーザやコマンドを設定できます。 [[users-modifying]] === アカウント情報の管理 FreeBSD は、ユーザアカウントを操作するためにさまざまなコマンドを用意しています。 もっとも一般的なコマンドが <> にまとめられています。 その後で、各コマンドについて詳しい使用例を示します。 各ユーティリティの詳細や使用例についてはマニュアルページを参照してください。 [[users-modifying-utilities]] .ユーザアカウントを管理するためのユーティティ [cols="25h,~"] |=== | コマンド | 要約 |man:adduser[8] |コマンドラインからユーザを追加するための推奨アプリケーション |man:rmuser[8] |コマンドラインからユーザを削除するための推奨アプリケーション |man:chpass[1] |ユーザデータベースの情報を変更するための柔軟なツール |man:passwd[1] |ユーザのパスワードを変更するコマンドラインツール |man:pw[8] |ユーザアカウントのあらゆる箇所を変更する強力で柔軟なツール |man:bsdconfig[8] |システムの設定のためのユーティリティ。アカウント管理に対応しています。 |=== [[users-adduser]] ==== ユーザの追加 新しいユーザの登録に推奨されるプログラムは man:adduser[8] です。 ユーザを追加すると、このプログラムは、`/etc/passwd` と `/etc/group` を自動的に更新します。 また、新規ユーザのホームディレクトリを作成し、`/usr/share/skel` から、デフォルトで使用される設定ファイルをコピーします。 また、新しく作成されたユーザに対して、ウェルカムメッセージをメールで送信することも可能です。 このユーティリティは、スーパーユーザ権限で実行する必要があります。 man:adduser[8] は、新しいユーザアカウントを対話的に段階的に作成するユーティリティです。 <> で示されているように、必要な情報を入力するか、括弧内に示されているデフォルトの値を kbd:[Return] を押して承認してください。 この例では、ユーザは man:su[1] によってスーパユーザ権限を取得することが可能となる `wheel` グループに所属します。 操作が終了すると、ユーティリティは別のユーザを追加するか、終了するかを尋ねてきます。 [[users-modifying-adduser]] .FreeBSD におけるユーザの追加 [example] ==== [source,shell] .... # adduser Username: jru Full name: J. Random User Uid (Leave empty for default): Login group [jru]: Login group is jru. Invite jru into other groups? []: wheel Login class [default]: Shell (sh csh tcsh zsh nologin) [sh]: zsh Home directory [/home/jru]: Home directory permissions (Leave empty for default): Use password-based authentication? [yes]: Use an empty password? (yes/no) [no]: Use a random password? (yes/no) [no]: Enter password: Enter password again: Lock out the account after creation? [no]: Username : jru Password : **** Full Name : J. Random User Uid : 1001 Class : Groups : jru wheel Home : /home/jru Shell : /usr/local/bin/zsh Locked : no OK? (yes/no): yes adduser: INFO: Successfully added (jru) to the user database. Add another user? (yes/no): no Goodbye! .... ==== [NOTE] ==== 入力したパスワードは画面に表示されませんので、 ユーザアカウントを作成する際には、 パスワードを間違えて入力してしまわないように注意してください。 ==== [[users-rmuser]] ==== ユーザの削除 システムから完全にユーザを削除するには、スーパーユーザ権限で man:rmuser[8] を実行してください。 このコマンドは、次の手順を実行します。 [.procedure] ==== . 指定されたユーザの man:crontab[1] エントリが存在する場合には削除。 . 指定されたユーザの man:at[1] ジョブをすべて削除。 . 指定されたユーザが所有するすべてのプロセスに対して SIGKILL シグナルを送信。 . ローカルパスワードファイルから、 指定されたユーザのエントリを削除。 . 指定されたユーザのホームディレクトリを削除 (ディレクトリの所有者が指定されたユーザのものだった場合)。実際のホームディレクトリへのシンボリックリンクの削除も含まれます。 . `/var/mail` から、指定されたユーザの到着メールファイルを削除。 . `/tmp`, `/var/tmp`, および `/var/tmp/vi.recover` から、指定されたユーザの所有するファイルを削除。 . `/etc/group` にある すべてのグループから、指定されたユーザを削除します (指定されたユーザと同じ名前のグループで、そのユーザが削除されると空のグループとなる場合は、そのグループ自体が削除されます。 これは man:adduser[8] によってユーザごとに作成される、ユニークなグループに対応するものです)。 . 指定されたユーザが所有するすべてのメッセージキュー、共通メモリセグメントおよびセマフォを削除 ==== スーパユーザアカウントの削除に man:rmuser[8] を利用することはできません。 スーパユーザアカウントの削除はほとんどすべての場合、 大規模なシステムの破壊を意味するからです。 デフォルトでは、以下の例のような対話モードが使われます。 .`rmuser` による対話的なアカウントの削除 [example] ==== [source,shell] .... # rmuser jru Matching password entry: jru:*:1001:1001::0:0:J. Random User:/home/jru:/usr/local/bin/zsh Is this the entry you wish to remove? y Remove user's home directory (/home/jru)? y Removing user (jru): mailspool home passwd. .... ==== [[users-chpass]] ==== ユーザ情報の変更 すべてのユーザは、man:chpass[1] を用いてデフォルトシェルやユーザアカウントに関連した個人情報を変更できます。 スーパユーザ権限に限り、このユーティリティを用いて他のユーザのアカウント情報も変更できます。 ユーザ名の他にオプションを指定しないと、 man:chpass[1] はユーザ情報を編集するエディタを表示します。 ユーザがエディタを終了すると、 ユーザデータベースが新しい情報に更新されます。 [NOTE] ==== スーパユーザ権限以外でこのユーティリティを実行した場合は、 エディタを抜けた後にユーザのパスワードを聞かれます。 ==== <> では、スーパーユーザは `chpass jru` と入力し、このユーザに対して変更可能なフィールドが表示されています。 `jru` がこのコマンドを実行すると、最後の 6 フィールドのみが表示され編集が可能です。 この場合については、<> で示されています。 [[users-modifying-chpass-su]] .スーパユーザによる `chpass` の使用 [example] ==== [source,shell] .... #Changing user database information for jru. Login: jru Password: * Uid [#]: 1001 Gid [# or name]: 1001 Change [month day year]: Expire [month day year]: Class: Home directory: /home/jru Shell: /usr/local/bin/zsh Full Name: J. Random User Office Location: Office Phone: Home Phone: Other information: .... ==== [[users-modifying-chpass-ru]] .通常のユーザによる `chpass` の使用 [example] ==== [source,shell] .... #Changing user database information for jru. Shell: /usr/local/bin/zsh Full Name: J. Random User Office Location: Office Phone: Home Phone: Other information: .... ==== [NOTE] ==== man:chfn[1] および man:chsh[1] コマンドはいずれも、man:chpass[1] へのリンクです。 また、man:ypchpass[1], man:ypchfn[1] および man:ypchsh[1] も同様です。 NIS のサポートは自動的に行なわれますの、 コマンドの先頭に `yp` をつける必要はありません。 NIS の設定については、ネットワークサーバの章で説明されています。 ==== [[users-passwd]] ==== ユーザのパスワードの変更 いかなるユーザも man:passwd[1] を使って簡単に自身のパスワードを変更できます。 誤って、または不正なパスワードの変更を避けるため、新しいパスワードを設定する前に、もとのパスワードの入力が求められます。 .自分のパスワードの変更 [example] ==== [source,shell] .... % passwd Changing local password for jru. Old password: New password: Retype new password: passwd: updating the database... passwd: done .... ==== スーパーユーザは、man:passwd[1] をユーザ名を指定して実行することにより、いかなるユーザのパスワードを変更できます。 スーパーユーザの権限でこのユーティリティを実行する際には、もとのパスワードを入力する必要はありません。 そのため、ユーザが元のパスワードを忘れてしまっても、パスワードを変更できます。 .スーパーユーザ権限での他のユーザのパスワード変更 [example] ==== [source,shell] .... # passwd jru Changing local password for jru. New password: Retype new password: passwd: updating the database... passwd: done .... ==== [NOTE] ==== man:chpass[1] 同様、man:yppasswd[1] は、 man:passwd[1] へのリンクになっていますので、 NIS はどちらのコマンドでも動作します。 ==== [[users-pw]] ==== システムユーザおよびグループの作成、削除、変更および表示 man:pw[8] は、ユーザやグループの作成、削除、変更および表示を行なうコマンドラインのユーティリティです。 これは、システムユーザファイルやシステムグループファイルのフロントエンドとして働きます。 man:pw[8] はとても強力な一連のコマンドラインオプションを有しており、シェルスクリプトで使うのに向いていますが、新しいユーザは、この章で紹介されている他のコマンドに比べて難しいと感じるかもしれません。 [[users-groups]] === グループの管理 グループとは、ユーザを羅列したものです。 グループは、グループ名と GID で識別されます。 FreeBSD では、 あるプロセスが何かするのを許可するかどうかをカーネルが判断する際に、 プロセスの UID とそのユーザが所属するグループの一覧を利用します。 ほとんどの場合、ユーザもしくはプロセスの GID は一覧の最初のグループを指しています。 グループ名から GID への写像は `/etc/group` にあります。 これは、コロンで区切られた 4 項目からなるテキストファイルです。 1 番目の項目はグループ名、2 番目は暗号化されたパスワード、3 番目が GID、4 番目がカンマで区切られたメンバの一覧です。 文法についての完全な説明は、man:group[5] をご覧ください。 スーパーユーザは、`/etc/group` をテキストエディタで編集できます。 ただし、よくある間違いを見つけてくれる man:vigr[8] を用いてグループファイルを編集することが好ましいです。 もしくは、man:pw[8] を使ってグループの追加や編集をできます。 たとえば、`teamtwo` というグループを追加して、その存在を確認するには、次のように使います。 [WARNING] ==== operator グループを使う時には、意図しないスーパーユーザへのアクセス権を与える可能性があるため注意が必要です。 シャットダウン、リブートおよびこのグループが所有する `/dev` のすべてにアクセスできるといったことが可能になってしまいます。 ==== .man:pw[8] によるグループの追加 [example] ==== [source,shell] .... # pw groupadd teamtwo # pw groupshow teamtwo teamtwo:*:1100: .... ==== この例では、`1100` という番号は、 `teamtwo` の GID です。 この時点では、`teamtwo` にメンバはいません。 以下のコマンドは、 `jru` を `teamtwo` のメンバに追加します。 .man:pw[8] により新しいグループにメンバを追加する [example] ==== [source,shell] .... # pw groupmod teamtwo -M jru # pw groupshow teamtwo teamtwo:*:1100:jru .... ==== `-M` の引数は、カンマで区切られた新しい (空の) グループに追加するもしくは存在するグループのメンバを置き換えるユーザの一覧です。 ユーザにとっては、このグループのメンバーシップはパスワードファイルに記載されているプライマリのグループとは異なります。 man:pw[8] の `groupshow` コマンドを使った時は、そのユーザはグループの一員として表示されませんが、man:id[1] などのツールを使って情報を問い合わせれば、その情報を引き出せます。 ユーザをグループに追加をする際に、man:pw[8] は `/etc/group` しか扱わず、 `/etc/passwd` から追加のデータを読んだりはしません。 .man:pw[8] によるグループへのユーザ追加 [example] ==== [source,shell] .... # pw groupmod teamtwo -m db # pw groupshow teamtwo teamtwo:*:1100:jru,db .... ==== この例では、`-m` の引数は、 カンマで区切られたグループに追加するユーザの一覧です。 前の例と異なり、これらのユーザはグループに追加され、既存のグループのユーザを置き換えることはありません。 .グループに所属しているユーザを調べるための man:id[1] の使い方 [example] ==== [source,shell] .... % id jru uid=1001(jru) gid=1001(jru) groups=1001(jru), 1100(teamtwo) .... ==== この例では、`jru` は `jru` グループと `teamtwo` グループのメンバです。 このコマンドや `/etc/group` のフォーマットの詳細については、 man:pw[8] および man:group[5] をご覧ください。 [[permissions]] == 許可属性 FreeBSD では、すべてのファイルおよびディレクトリは一組の許可属性を持っています。 これらの許可属性は、ユーティリティを使って確認したり変更できます。 許可属性がどのように機能するかを知ることで、ユーザが必要とするファイルにアクセスできるかどうか、オペレーティングシステムが使用しているファイルや他のユーザが所有するファイルにアクセスできないことを理解できるようになります。 この節では、FreeBSD で使用される伝統的な UNIX(R) の許可属性について説明します。 より細かいファイルシステムのアクセス制御に関しては、crossref:security[fs-acl,アクセス制御リスト] をご覧ください。 UNIX(R) では、基本の許可属性は 3 つのアクセスタイプ (読み・書き・実行) を使って割り当てられます。 これらのアクセスタイプを使って、ファイルの所有者 (owner)、グループ (group) その他 (others) に対するファイルアクセスを設定します。 読み、書き、実行に関する許可属性は、それぞれ `r`, `w`, および `x` 文字で表されます。 これらの許可属性を表す際に、オンかオフ (`0`) による 2 進数表記も使われます。 数字で表現する場合には、 `r` は `4`、`w` は `2` そして `x` は `1` の値を持つよう、`rwx` の順番で表されます。 以下は、許可属性を表す際に用いられる数字およびアルファベットをまとめた表です。 "ディレクトリの表示" カラムでは、`-` は許可属性がオフに設定されていることを表します。 .UNIX(R) 許可属性 [cols="1,1,1", frame="none", options="header"] |=== | 値 | 許可属性 | ディレクトリの表示 |0 |読み込み不可、書き込み不可、実行不可 |`---` |1 |読み込み不可、書き込み不可、実行可能 |`--x` |2 |読み込み不可、書き込み可能、実行不可 |`-w-` |3 |読み込み不可、書き込み可能、実行可能 |`-wx` |4 |読み込み可能、書き込み不可、実行不可 |`r--` |5 |読み込み可能、書き込み不可、実行可能 |`r-x` |6 |読み込み可能、書き込み可能、実行不可 |`rw-` |7 |読み込み可能、書き込み可能、実行可能 |`rwx` |=== コマンドライン引数 `-l` とともに man:ls[1] を使うと、詳細なディレクトリリストを見ることができ、ファイルの所有者、グループ、その他への許可属性を示す欄があるのがわかります。 例えば、`ls -l` を実行して、 適当なディレクトリを表示させると以下のようになります。 [source,shell] .... % ls -l total 530 -rw-r--r-- 1 root wheel 512 Sep 5 12:31 myfile -rw-r--r-- 1 root wheel 512 Sep 5 12:31 otherfile -rw-r--r-- 1 root wheel 7680 Sep 5 12:31 email.txt .... `myfile` が含まれている行の一番目の列の最初の `(一番左の)` 文字は、そのファイルが普通のファイルなのか、ディレクトリなのか、キャラクタ型のデバイス特殊ファイルなのか、ソケットなのか、その他の特殊な疑似ファイルデバイスなのかといった種類を示す特別な文字です。 この例において、`-` という文字は、普通のファイルであることを示します。 その次に来る `rw-` と書かれた 3 文字は、そのファイルの所有者に許可を与えるものです。 その次の `r--` の 3 文字は、そのファイルが所属しているグループに許可を与えます。 最後の `r--` の 3 文字は、 システムに存在するその他のユーザに許可を与えます。 "-" は許可が与えられていないことを示します。 この例では、ファイルの所有者はこのファイルを読み書きでき、ファイルの所属しているグループに属するユーザはファイルを読むことだけでき、そのどちらでもないユーザは、 このファイルを読むだけできるように許可属性が与えられています。 上の表によれば、このファイルに与えられた許可属性は `644` となります。 ここで各数字は、このファイルの許可属性の 3 つの部分を表しています。 デバイスの場合の許可属性はどのようにコントロールされているのでしょうか? FreeBSD は、大部分のハードウェアをファイルとして取り扱います。 そのため、プログラムからは普通のファイルとまったく同じようにオープンし、 データの読み書きができるようになっています。 これらのデバイス特殊ファイルは `/dev/` に収められています。 ディレクトリもまた、ファイルと同様に扱われます。 それは読み込み/書き込み/実行の許可属性を持ちます。 ディレクトリの実行ビットはファイルのそれとは少し違った意味を持ちます。 ディレクトリが実行可能になっているとき、man:cd[1] を使ってそのディレクトリに移動することができます。 これは、そのディレクトリにあるファイルにアクセスできることを意味しています (ファイル自体の許可属性によります)。 ディレクトリの中の一覧を表示するには、そのディレクトリに読み込み属性が設定されていなければなりません。 名前が分かっているファイルを削除するには、そのファイルが含まれているディレクトリに 書き込み属性 _と_ 実行属性 の両方が必要です。 この他にも許可属性ビットはありますが、いずれも setuid バイナリや sticky ディレクトリなどといった特殊な状況で使われます。 ファイルの許可属性そのものについて、また、それらの設定方法に関する詳しい情報は、 man:chmod[1] マニュアルページを参照してください。 === シンボリック表記 シンボリック表記と呼ばれる許可属性を表す方法では、ファイルやディレクトリの許可属性を、8 進数ではなく記号を用いて設定します。 シンボリック表記による許可属性を表す方法では、(who), (action), (permissions) という書式が用いられます。 利用できる値は以下の通りです。 [.informaltable] [cols="1,1,1", frame="none", options="header"] |=== | オプション | 文字 | 意味 |(who) |u |ユーザ |(who) |g |ファイルを所持しているグループ |(who) |o |その他 |(who) |a |すべて ("world") |(action) |+ |許可属性を与える |(action) |- |許可属性を取り除く |(action) |= |許可属性を指定したものにする |(permissions) |r |読み込み |(permissions) |w |書き込み |(permissions) |x |実行 |(permissions) |t |Sticky ビット |(permissions) |s |UID または GID を設定する |=== これらの値は、これまでと同様に man:chmod[1] で用いますが、数字ではなく文字で指定します。 たとえば、_FILE_ に対して _FILE_ のグループメンバーおよび自分以外のすべてのユーザからアクセスを一切受け付けたくない、というときには以下のコマンドを実行してください。 [source,shell] .... % chmod go= FILE .... カンマ区切りで設定することで、ファイルの属性を一度に 2 つ以上変更できます。 以下の例では、_FILE_ に対して自分以外のユーザから書き込みの権限を取り上げ、かわりにすべてのユーザが _FILE_ を実行できるようにします。 [source,shell] .... % chmod go-w,a+x FILE .... === FreeBSD のファイルフラグ ファイルの許可属性に加え、FreeBSD では "ファイルフラグ" を使えます。 これはファイルにセキュリティや管理上の属性を追加するものですが、ディレクトリには追加しません。 ファイルフラグにより、`root` ユーザでさえ誤ってファイルを消去、変更してしまうことを防ぐことができます。 ファイルフラグは、man:chflags[1] を使って、簡単なインタフェースで設定できます。 例えば、`file1` というファイルにシステムレベルで消去不可のフラグを設定するには、以下のコマンドを実行してください。 [source,shell] .... # chflags sunlink file1 .... 消去不可のフラグを削除するには、以下のように `sunlink` の前に "no" をつけて実行してください。 [source,shell] .... # chflags nosunlink file1 .... ファイルに設定されているフラグを確認するには、`-lo` と一緒に man:ls[1] を実行してください。 [source,shell] .... # ls -lo file1 .... [.programlisting] .... -rw-r--r-- 1 trhodes trhodes sunlnk 0 Mar 1 05:54 file1 .... いくつかのファイルフラグの追加、削除は `root` ユーザしかできません。 他のフラグは、ファイルの所有者が変更できます。 man:chflags[1] と man:chflags[2] から、より詳細な情報を得ることをおすすめします。 === setuid, setgid および sticky 許可属性 これまでに説明した許可属性のほかに、 すべての管理者が知っておくべき特別な設定が 3 つあります。 それは `setuid`, `setgid` および `sticky` 許可属性です。 これらの設定は、通常のユーザには許可されていない機能を提供するので、UNIX(R) の操作において重要となることがあります。 これらの許可属性を理解するためには、実ユーザ ID と実効ユーザ ID の違いに注意してください。 実ユーザ ID は、所有したりプロセスを開始する UID です。 実効 UID は、プロセスを実行するユーザ ID です。 たとえば、ユーザがパスワードを変更するときに利用する man:passwd[1] は、実ユーザ ID で起動します。 しかしながら、パスワードデータベースのアップデートの際は、実効 ID の `root` ユーザの権限で実行されます。 この仕組みにより、`Permission Denied` エラーが表示されることなく、ユーザはパスワードを変更できます。 setuid 許可属性は、以下の例で示されているように、ユーザに対して `s` の許可属性をつけることで設定できます。 [source,shell] .... # chmod u+s suidexample.sh .... setuid 許可属性は、以下の例で示されているように、指定する許可属性に数字の 4 をつけることでも設定できます。 [source,shell] .... # chmod 4755 suidexample.sh .... これで `suidexample.sh` の許可属性は以下のように設定されます。 [.programlisting] .... -rwsr-xr-x 1 trhodes trhodes 63 Aug 29 06:36 suidexample.sh .... `s` は、許可属性のファイル所有者の実行可能ビットに置き換わって反映されます。 この設定により、man:passwd[1] といったユーティリティが権限を昇格することができます。 [NOTE] ==== `nosuid` man:mount[8] オプションを使うと、このようなバイナリがユーザへの警告なしに権限を昇格できないように設定できます。 ただし `nosuid` ラッパにより回避できるため、このオプションを完全には信頼できません。 ==== リアルタイムに確認するために、2 つのターミナルを開いてください。 1 つのターミナル上で、通常のユーザ権限で `passwd` と入力してください。 パスワードの入力を待つ間に、もう一つのターミナル上で、プロセステーブルおよび man:passwd[1] のユーザ情報を確認してください。 ターミナル A: [source,shell] .... Changing local password for trhodes Old Password: .... ターミナル B: [source,shell] .... # ps aux | grep passwd .... [source,shell] .... trhodes 5232 0.0 0.2 3420 1608 0 R+ 2:10AM 0:00.00 grep passwd root 5211 0.0 0.2 3620 1724 2 I+ 2:09AM 0:00.01 passwd .... 通常のユーザ権限で man:passwd[1] を実行したにもかかわらず、実効 UID の `root` が使われています。 `setgid` 許可属性は `setuid` 許可属性と同様の機能を提供しますが、この許可属性はグループの設定を変更します。 この設定を行った上でアプリケーションまたはユーティリティを実行すると、プロセスを開始するユーザではなく、ファイルを所有するグループに対してこの許可属性を与えます。 記号を用いてファイルに `setgid` 許可属性を設定するには、man:chmod[1] で設定するグループに `s` の許可属性をつけて実行してください。 [source,shell] .... # chmod g+s sgidexample.sh .... または、man:chmod[1] で設定する許可属性の先頭に 2 をつけて実行してください。 [source,shell] .... # chmod 2755 sgidexample.sh .... 以下に示されるように、`s` がグループの許可属性に指定されています。 [source,shell] .... -rwxr-sr-x 1 trhodes trhodes 44 Aug 31 01:49 sgidexample.sh .... [NOTE] ==== 上記の例において、対象としているシェルスクリプトが実行可能なファイルであっても、シェルスクリプトは man:setuid[2] システムコールにアクセスできないため、実効ユーザ ID では実行されません。 ==== `setuid` および `setgid` 許可属性ビットは、権限の昇格を許可するので、システムのセキュリティレベルを下げます。 一方 3 番目の特殊な許可属性 `sticky bit` は、システムのセキュリティを強化します。 ディレクトリに `sticky bit` を設定すると、ファイルの所有者のみがファイルを削除できるようになります。 `/tmp` といった共有のディレクトリにおいて、ファイルの所有者以外のユーザがファイルを削除できなくなるので有用です。 この許可属性を有効にするには、ファイルに対して `t` モードを追加してください。 [source,shell] .... # chmod +t /tmp .... または、許可属性に 1 をつけて設定してください。 [source,shell] .... # chmod 1777 /tmp .... `sticky bit` が設定されていると、許可属性の最後に `t` が表示されます。 [source,shell] .... # ls -al / | grep tmp .... [source,shell] .... drwxrwxrwt 10 root wheel 512 Aug 31 01:49 tmp .... [[dirstructure]] == ディレクトリ構造 FreeBSD のディレクトリ構造は、システム全体を理解するに当たって重要です。 最も重要なディレクトリは、ルートまたは "/" です。 このディレクトリは起動時に一番最初にマウントされ、オペレーティングシステムをマルチユーザで動作させるために必要なベースシステムが含まれています。 また、ルートディレクトリには、マルチユーザへの移行中に他のファイルシステムをマウントするためのマウントポイントも含まれます。 マウントポイントとは、追加するファイルシステムを接続する先の親のファイルシステム (普通はルートファイルシステム) のディレクトリのことです。 より詳細な説明は <> の節にあります。 標準的なマウントポイントには `/usr/`, `/var/`, `/tmp/`, `/mnt/` および `/cdrom/` があります。 通常これらのディレクトリについては、`/etc/fstab` というファイル中のエントリが参照されます。 このファイルは、さまざまなファイルシステムとマウントポイントの表であり、システムが参照します。 `/etc/fstab` に書かれたファイルシステムは `noauto` オプションが指定されていなければ、起動時に man:rc[8] スクリプトによって自動的にマウントされます。 詳細は <> の節をご覧ください。 ファイルシステム構造を網羅した説明は man:hier[7] に書かれています。 以下の表は、もっともよく使われるディレクトリの簡単な概要です。 [cols="25h,~"] |=== | ディレクトリ | 説明 |`/` |ファイルシステムのルートディレクトリ |`/bin/` |シングルユーザ環境とマルチユーザ環境の両方で重要な ユーザユーティリティ |`/boot/` |オペレーティングシステムの起動時に使われるプログラムと設定ファイル |`/boot/defaults/` |デフォルトの起動設定ファイル; man:loader.conf[5] 参照 |`/dev/` |man:devfs[4] により管理されるデバイスファイル |`/etc/` |システム設定ファイルとスクリプト |`/etc/defaults/` |デフォルトのシステム設定ファイル; 詳細については man:rc[8] 参照 |`/etc/periodic/` |man:cron[8] 経由で毎日・毎週・毎月実行されるスクリプト; 詳細については man:periodic[8] 参照 |`/lib/` |`/bin` および `/sbin` にあるバイナリで必要とされる重要なシステムライブラリ |`/libexec/` |重要なシステムファイル |`/media/` |CD, USB ドライブおよびフロッピーディスクなどのリムーバブルメディアのマウントポイントとして使用されるサブディレクトリを含むディレクトリ |`/mnt/` |システム管理者が一時的なマウントポイントとしてよく使う空のディレクトリ |`/net/` |自動マウント NFS 共有。man:auto_master[5] を参照 |`/proc/` |プロセスファイルシステム; 詳細については man:procfs[5] と man:mount_procfs[8] 参照 |`/rescue/` |man:rescue[8] で説明されている緊急時のために静的にリンクされているプログラム |`/root/` |`root` アカウントのホームディレクトリ |`/sbin/` |シングルユーザ環境とマルチユーザ環境の両方で重要なシステムプログラムと管理ユーティリティ |`/tmp/` |システムの再起動では通常保存 _されない_ 一時的なファイル。 メモリファイルシステムはよく `/tmp` にマウントされます。 これは man:rc.conf[5] の tmpmfs 関係の変数を使うか、`/etc/fstab` に設定項目を記入することで自動化できます。 詳しくは man:mdmfs[8] を参照して下さい。 |`/usr/` |大部分のユーザユーティリティとアプリケーション |`/usr/bin/` |よく使うユーティリティとプログラミングツールとアプリケーション |`/usr/include/` |C の標準ヘッダファイル |`/usr/lib/` |ライブラリ |`/usr/libdata/` |いろいろなユーティリティのデータファイル |`/usr/libexec/` |他のプログラムから実行されるシステムデーモンとシステムユーティリティ |`/usr/local/` |ローカルのプログラムやライブラリなど。 FreeBSD ports フレームワークのデフォルトインストール先としても使われます。 `/usr/local` 内では、 man:hier[7] に書かれている `/usr` のための一般構造が使われます。 例外は man ディレクトリで、`/usr/local/share` の下ではなく `/usr/local` の下に直接置かれ、ports 関係文書は `share/doc/port` に置かれます。 |`/usr/ports/` |FreeBSD Ports Collection (オプション)。 |`/usr/sbin/` |ユーザにより実行されるシステムデーモンおよびシステムユーティリティ |`/usr/share/` |アーキテクチャに依存しないファイル |`/usr/src/` |BSD のソースファイルまたはローカルのソースファイル、あるいは両方 |`/var/` |さまざまな用途のログ・一時的なファイル・スプールファイル。 |`/var/log/` |いろいろなシステムログファイル |`/var/tmp/` |一時的なファイル。通常の設定では、ここにあるファイルはシステムが再起動しても失われません。 |=== [[disk-organization]] == ディスク構成 ファイルを見つけるために FreeBSD が使用する構成の一番小さな単位はファイル名です。 ファイル名は、大文字と小文字を区別します。 このことは `readme.txt` および `README.TXT` が異なる二つのファイルであることを意味します。 FreeBSD はそのファイルがプログラム、または文書、あるいはその他の形式かどうかを決定するために拡張子を使用しません。 ファイルはディレクトリ内に格納されます。 ディレクトリはファイルを一つも含んでいないかもしれせんし、または数百のファイルを含んでいるかもしれません。 ディレクトリはまた別のディレクトリを含むことができるので、 データを体系づけるディレクトリの階層構造を構築できます。 ファイルおよびディレクトリは、必要な他のディレクトリ名とスラッシュ (`/`) を後に続けてファイル名またはディレクトリ名を与えることによって参照されます。 たとえば、`foo` ディレクトリがあって、その中に `bar` ディレクトリがあるとします。 そして、その中に `readme.txt` があるとすると、ファイルへのフルネーム、または _パス_ は `foo/bar/readme.txt` となります。 ファイルとディレクトリ名を分けるために `\` を使う Windows(R) とは違うことに注意してください。 FreeBSD は、パスの中にドライブレターまたは他のドライブ名を使いません。 たとえば、FreeBSD では `c:\foo\bar\readme.txt` とは書きません。 [[disks-file-systems]] === ファイルシステム ディレクトリおよびファイルはファイルシステム内に格納されます。 どのファイルシステムも、そのファイルシステムのための _ルートディレクトリ_ とよばれる、まさに頂点の位置にちょうど一つのディレクトリを含んでいます。 このルートディレクトリは他のディレクトリを含むことができます。 一つのファイルシステムは _ルートファイルシステム_ または `/` として設計されています。 すべてのファイルシステムは、ルートファイルシステム以下に _マウント_ されます。 FreeBSD システムでどんなに多くのディスクを使用しても、すべてのディレクトリは、同じディスクの一部であるように見えるので問題ありません。 `A`, `B` および `C` と呼ばれる三つのファイルシステムがあるケースを考えます。 それぞれのファイルファイルシステムには一つのルートディレクトリがあり、`A1`, `A2` と呼ばれている二つの他のディレクトリを含んでいます (同様に `B1`, `B2` および `C1`, `C2` があります)。 `A` をルートファイルシステムとします。 このディレクトリになにが含まれているか見るために man:ls[1] コマンドを使うと、`A1` および `A2` の二つのサブディレクトリが表示されるでしょう。 ディレクトリツリーは以下のようになります。 image::example-dir1.png[ルートディレクトリおよび 2 つのサブツリーを持つディレクトリツリー] ファイルシステムはマウント先のファイルシステム内のディレクトリにマウントしなければいけません。 それでは、`A1` ディレクトリに `B` ファイルシステムをマウントすると仮定します。 `B` のルートディレクトリは `A1` に置き換えられ、そして `B` 内のディレクトリがそれに応じて現れます。 image::example-dir2.png[ルートディレクトリおよび 2 つのサブツリーを持つディレクトリツリー。さらに B1 および B2 サブディレクトリが A1 にぶら下がっています] `B1` または `B2` 内にあるどんなファイルも、必要なときに `/A1/B1` または `/A1/B2` で到達できます。 `/A1` にあったすべてのファイルは一時的に隠されました。 それらは `B` が `A` から _アンマウント_ されたら再び現れるでしょう。 もし `B` が `A2` にマウントされていたら、この図のようになります。 image::example-dir3.png[ルートディレクトリおよび 2 つのサブツリーを持つディレクトリツリー。さらに B1 および B2 サブディレクトリが A2 にぶら下がっています] そして、パスはそれぞれ `/A2/B1` および `/A2/B2` となるでしょう。 ファイルシステムは互いのファイルシステム上にもマウントできます。 上記の最後の例に続けて、`C` ファイルシステム は `B` ファイルシステム内の `B1` ディレクトリ上にマウントできます。 次の図のようになります。 image::example-dir4.png[複雑なディレクトリツリー。さまざまなサブディレクトリがルート以下にぶら下がっています。] または `C` を `A` ファイルシステムの `A1` ディレクトリの下に直接マウントできます。 image::example-dir5.png[複雑なディレクトリツリー。さまざまなサブディレクトリがルート以下にぶら下がっています。] 一つの大きなルートファイルシステムを用意し、他のファイルシステムを作成する必要としないことはまったくもって可能です。 この方法にはいくつかの短所と一つの利点があります。 .マルチファイルシステムの利点 * 異なったファイルシステムは異なった _マウントオプション_ を使用できます。 たとえば、ルートファイルシステムを読みだし専用でマウントして、不注意によってユーザが重大なファイルを削除、または編集できないようにすることができます。 また、`/home` のようなユーザが書き込み可能なファイルシステムを他のファイルシステムと分けることによって、 _nosuid_ でマウントすることが可能になります。 このオプションは、ファイルシステムに記録されている _suid_/_guid_ の実行可能ビットを有効にしないので、安全性を高めることができるでしょう。 * FreeBSD はファイルシステムがどのように使われているかによって、自動的にファイルシステム上のファイルの配置を最適化します。 したがって、連続的に書き込まれた多くの小さなファイルが含まれているファイルシステムは、より大きく少ないファイルが含まれているファイルシステムと異なる最適化をするでしょう。 一つの大きなファイルシステムを作成すると、この最適化は成り立たなくなります。 * FreeBSD のファイルシステムはトラブルが起きても強固です。 しかしながら臨界点でのトラブルは、ファイルシステムの構造にまだ損害を与えるかもしれません。 マルチファイルシステムへデータを分割しておくことで、 必要なときにバックアップからレストアすることをより容易にして、まだシステムが回復するかもしれません。 .シングルファイルシステムの利点 * ファイルシステムは固定サイズです。 FreeBSD をインストールするときにファイルシステムを作成して、 固定サイズを割りあてたなら、 後になってそのパーティションをより大きくする必要があると気づくかもしれません。 パーティションのサイズを変更するには、 バックアップ、新しいサイズを指定したファイルシステムの再作成、 バックアップしたデータをリストアする作業が必要となるでしょう。 + [IMPORTANT] ==== FreeBSD には、 man:growfs[8] コマンドがあります。 このコマンドは、この制限を取り除いて、ファイルシステムのファイルを直ちに増加させることを可能にします。 ファイルシステムは、そのファイルシステムのあるパーティションの空いている領域に対してのみ拡張できます。 パーティションを分割した後、空いている領域があれば、man:gpart[8] を用いてパーティションを拡張できます。 仮想ディスクの最後のパーティションであれば、ディスクを大きくすると、パーティションを拡張できます。 ==== [[disks-partitions]] === ディスクパーティション ファイルシステムは _パーティション_ 内に含まれています。 ディスクは 1 つのパーティションスキーム (<>) を用いてパーティションに分割されます。 新しいスキームは GPT で、古い BIOS-ベースのコンピュータは MBR を使用します。 GPT は、サイズ、オフセットおよびタイプによるディスクのパーティション分割に対応しています。 多くのパーティションおよびパーティションタイプに対応しているため、GPT が利用できる場合はこのパーティションスキームを使用することが推奨されます。 GPT パーティションは、接尾語 `p1` が最初のパーティション、接尾語 `p2` が 2 番目のパーティションといったような接尾語を使います。 一方 MBR パーティションは少ない数のパーティションにのみ対応しています。 MBR パーティションは、FreeBSD では `スライス` として知られています。 スライスは他のオペレーティングシステムでも使うことができます。 FreeBSD のスライスはさらに、BSD ラベル (man:bsdlabel[8] 参照) を用いてパーディションに分割できます。 スライス番号は 1 から始まり `s` を前につけられて、デバイス名の後に続きます。 したがって、"da0__s1__" は一番目の SCSI ドライブ上の一番目のスライスです。 ディスク上に存在できる物理スライスは、4 つまでですが、適切な種類の物理スライス内に論理スライスを作成できます。 これらの拡張されたスライス番号は 5 から始まります。 したがって、 "ada0__s5__" は、一番目の SATA ディスク上の一番目の拡張スライスです。 これらのデバイスは、スライスを占有することを予期するファイルシステムによって使用されます。 GPT または BSD の各パーティションは、一つのファイルシステムだけを含むことができます。 このことは、ファイルシステムがファイルシステムの階層上の典型的なマウントポイント、または含まれているパーティション名によって記述されることを意味します。 FreeBSD は _スワップ領域_ にもまたディスク領域を使用します。 スワップ領域は FreeBSD に _仮想メモリ_ を提供します。 これはあなたのコンピュータが、 実際に搭載している以上のメモリがあるかのように振舞います。 FreeBSD がメモリを使い果たしたときに、現在使用されていないデータのいくつかをスワップ領域に移動し、そのデータが必要となったときに (その他のデータをスワップ領域に移動させてから) メモリ内に移動しなおします。 これは _ページング_ と呼ばれます。 いくつかの BSD パーティションはある慣習と関係づけられています。 [cols="25h,~"] |=== | パーティション | 慣習 |`a` |通常、ルートパーティションを含みます。 |`b` |通常、スワップ領域を含みます。 |`c` |通常、スライス全体と同じサイズです。 これは、スライス全体にアクセス必要のあるユーティリティ (たとえば、ひどいブロックスキャナ) が、 `c` パーティションにアクセスすることを可能にします。 通常、このパーティション内にファイルシステムは作成されません。 |`d` |`d` パーティションは、 それに関連づけられた特別な意味を持っていましたが、 今は無いので、普通のパーティションとして動作するでしょう。 |=== スライスおよび "危険な専用" の物理ドライブ、 そして他のドライブは `a` から `h` までの文字として表される BSD パーティションを含んでいます。 この文字はデバイス名に追加されます。 したがって、 "da0__a__" は一番目の "危険な専用" `da` ドライブ上の `a` パーティションです。 "ada1s3__e__" は、 二番目の SATA ディスク上の 三番目のスライス内にある五番目のパーティションです。 最後に、システム上のそれぞれのディスクは識別されます。 ディスク名はどの種類のディスクであるかを示す記号ではじまり、どのディスクかを示す数字が続きます。 パーティションやスライスとは異なり、ディスクの番号づけは 0 から始まります。 共通の記号は <> に示されます。 スライスにあるパーティションを参照するときには、ディスク名、`s`、スライス番号、そしてパーティション文字を含めてください。 <> に例があります。 GPT パーディションはディスク名、`p` そしてパーティション番号が含まれます。 <> は、MBR スライスを用いたディスク構成の概念のモデルを示します。 FreeBSD をインストールする際には、MBR を使用する場合にはディスクスライスを設定し、次に FreeBSD に用いるスライス内のパーティションを作成します。 GPT を使用する場合には、各ファイルシステムにパーティションを設定します。 どちらのケースでも、それぞれのパーティション内にファイルシステムまたはスワップ領域を作成し、ファイルシステムがどこにマウントされるか決定してください。 パーティションの操作についての詳細は man:gpart[8] をご覧ください。 [[disks-naming]] .ディスクデバイス名 [cols="1,1", frame="none", options="header"] |=== | ドライブタイプ | ドライブデバイス名 |SATA および IDE ハードドライブ |`ada` |SCSI ハードドライブおよび USB ストレージデバイス |`da` |NVMe ストレージ |`nvd` または `nda` |SATA および IDE CD-ROM ドライブ |`cd` |SCSI CD-ROM ドライブ |`cd` |フロッピードライブ |`fd` |SCSI テープドライブ |`sa` |RAID ドライバ |`aacd` (Adaptec(R) AdvancedRAID), `mlxd` および `mlyd` (Mylex(R)), `amrd` (AMI MegaRAID(R)), `idad` (Compaq Smart RAID), `twed` (3ware(R) RAID) など |=== [example] ==== [[basics-disk-slice-part]] .ディスク名、スライス名、パーティション名のサンプル [.informaltable] [cols="1,1", frame="none", options="header"] |=== | 名前 | 意味 |`ada0s1a` |一番目の SATA ディスク (`ada0`) 上の一番目のスライス (`s1`) 内の一番目のパーティション (`a`)。 |`da1s2e` |二番目の SCSI ディスク (`da1`) 上の二番目のスライス (`s2`) 内の五番目のパーティション (`e`)。 |=== ==== [[basics-concept-disk-model]] .ディスクの概念的構成 [example] ==== これはシステムに接続された一番目の SATA ディスクの FreeBSD から見た図を示します。 ディスクサイズは 250 GB と仮定し、80 GB のスライス (MS-DOS(R) でいうパーティション) および 170 GB のスライスがあるとします。 一番目のスライスは Windows(R) NTFS ファイルシステム `C:` を含んでいます。 そして、二番目のスライスは FreeBSD のディスクを含んでいます。 これは FreeBSD インストーラが四つのデータパーティションと一つのスワップパーティションを作成した例です。 四つのパーティションはそれぞれファイルシステムを含んでいます。 パティション `a` はルートファイルシステム、`d` は `/var`, `e` は `/usr`、そして `f` は `/usr` に使用されています。 パーティション `c` はスライス全体を示しており、通常のパーティションとは異なる使われ方をします。 image::disk-layout.png[Windows と FreeBSD を 1 つのドライブに共存させたレイアウト] ==== [[mount-unmount]] == ファイルシステムのマウントとアンマウント ファイルシステムは `/` をルート (根) とする木構造として考えると視覚的に理解しやすいでしょう。 ルートディレクトリにある `/dev` や `/usr`、その他のディレクトリは枝に相当し、それらには、`/usr/local` などのように、さらに枝分かれすることができます。 さまざまな理由がありますが、 ディレクトリをいくつかの異なるファイルシステム上に構築するのが良いでしょう。 たとえば `/var` には、 `log/` や `spool/` など、さまざまな種類の一時ファイルを置くディレクトリがあるため、あふれてしまう可能性があります。 ルートファイルシステムをあふれさせるのは得策ではありませんので、普通は `/var` を `/` から分離します。 また、次のような場合も、ディレクトリツリーを別のファイルシステムに置く理由として良くあげられます。 それは、たとえば物理的に別のディスクにディレクトリツリーを置く場合、 crossref:advanced-networking[network-nfs, 「ネットワークファイルシステム (NFS)」] で説明されているようにネットワークファイルシステムをマウントしたり、CDROM ドライブのような別の仮想ディスクに置くという場合です。 [[disks-fstab]] === fstab ファイル `/etc/fstab` に書かれているファイルシステムは、`noauto` オプション指定されているエントリを除いて crossref:boot[boot,起動プロセス] の途中で自動的にマウントされます。 このファイルは、 次のような書式で書かれたエントリを含んでいます。 [.programlisting] .... device /mount-point fstype options dumpfreq passno .... `device`:: デバイス名。crossref:disks[disks-naming,「デバイス名」] に説明があります。 `mount-point`:: ファイルシステムがマウントするディレクトリ。 `fstype`:: man:mount[8] に渡されるファイルシステムタイプ。 FreeBSD ファイルシステムのデフォルトは `ufs` です。 `options`:: 読み書きするファイルシステムには `rw`、読み込み専用のファイルシステムには `ro` を、必要な他のオプションの前に指定します。 よく使われるオプションは `noauto` で、 起動時にはマウントされないファイルシステムに使います。 その他のオプションは man:mount[8] マニュアルページに載っています。 `dumpfreq`:: これは man:dump[8] が使うもので、 どのファイルシステムにダンプが必要なのかを決めます。 この項目がなければ、0 であるものとみなされます。 `passno`:: これは再起動後に man:fsck[8] がチェックする UFS ファイルシステムの順番を決めます。 ファイルシステムチェックを飛ばしたいファイルシステムには、`passno` を 0 に設定してください。 ルートファイルシステムはどれよりも先にチェックする必要があり、`passno` は 1 に設定してください。 他のファイルシステムの `passno` は 1 以上に設定してください。 同じ `passno` のファイルシステムがあった場合、 man:fsck[8] は可能であれば並行してファイルシステムのチェック を行なおうとします。 `/etc/fstab` の書式やオプションに関しての詳細は、 man:fstab[5] をご覧ください。 [[disks-mount]] === man:mount[8] の使い方 ファイルシステムは man:mount[8] を用いてマウントされます。 基本な構文は以下のようになります。 [example] ==== [source,shell] .... # mount device mountpoint .... ==== `/etc/fstab` に記載されているファイルシステムについても、マウントポイントを指定することでマウントできます。 man:mount[8] で説明されているように、このコマンドはたくさんのオプションを提供します。 最もよく使われるのは次のものです。 .マウントオプション `-a`:: `/etc/fstab` にある全てのファイルシステムをマウントします。 例外は "noauto" の印がついているものと、 `-t` フラグで除外されたものと、 すでにマウントされているファイルシステムです。 `-d`:: 実際にマウントシステムコールする以外のすべてのことをします。 このオプションは `-v` フラグと組み合わせて使い、 man:mount[8] が実際なにをしようとしているのか調べるのに便利です。 `-f`:: クリーンでないファイルシステムを強制的にマウントします (危険です)。もしくは、ファイルシステムのマウント状態を 読み書き可能から読み込みのみに変更するとき、 書き込みアクセスを強制的に取り消します。 `-r`:: ファイルシステムを読み込み専用でマウントします。 `-o ro` を使うのと同じです。 ``-t _fstype_``:: 指定のファイルシステムタイプでマウントします。 または、`-a` を使った場合、 指定したタイプのファイルシステムのみマウントします。 デフォルトのファイルシステムタイプは "ufs" です。 `-u`:: ファイルシステムのマウントオプションを更新します。 `-v`:: 詳細な出力にします。 `-w`:: ファイルシステムを読み書き可能にマウントします。 `-o` には、 次のようなオプションを複数カンマで区切って指定できます。 nosuid:: そのファイルシステム上の setuid や setgid フラグを解釈しません。 これもセキュリティのために有用なオプションです。 [[disks-umount]] === man:umount[8] の使い方 ファイルシステムをアンマウントするには、man:umount[8] を使ってください。 このコマンドは、パラメータとしてマウントポイントの一つ、 デバイス名、もしくは `-a` や `-A` といったオプションを取ります。 いずれの形式でも `-f` で強制的なアンマウントを行ない、 `-v` で詳細な出力を出します。 ただしほとんどの場合、`-f` は使わないほうがよいでしょう。 計算機がクラッシュしたりファイルシステム上部のデータが破壊されたりする恐れがあります。 マウントされているファイルシステムすべてをアンマウントするには、`-a` と `-A` を使ってください。 `-t` にファイルシステムタイプを指定すると、指定されたものだけがアンマウントされます。 `-A` を使うとルートファイルシステムはアンマウントしません。 [[basics-processes]] == プロセスおよびデーモン FreeBSD はマルチタスクのオペレーティングシステムです。 動作中のプログラムはそれぞれ _プロセス_ と呼ばれます。 すべてのコマンドは実行すると、最低でも 1 つの新しいプロセスを開始します。 FreeBSD により実行されているシステムプロセスもたくさんあります。 各プロセスは _プロセス ID_ (PID) と呼ばれる数字でただ一つに識別されます。 ファイルのように各プロセスには所有者とグループがあり、 所有者とグループの許可属性は、そのプロセスが開けるファイルやデバイスを決定するために使われます。 多くのプロセスには親プロセスもあります。 親プロセスとは、そのプロセスをスタートさせたプロセスのことです。 例えば、シェルがプロセスで、シェルから起動されるコマンドは、シェルを親プロセスとするプロセスとなります。 例外は man:init[8] という特別なプロセスです。 `init` は FreeBSD がスタートするときに起動される最初のプロセスで、PID は常に `1` です。 ユーザから始終入力があるように設計されていないプログラムがあり、そういったプログラムは最初から端末と切り離されています。 例えば、ウェブサーバはユーザからの入力ではなくウェブのリクエストを処理します。 メールサーバも、 こういった種類のアプリケーションの一例です。 このような種類のプログラムは、 _デーモン_ と呼ばれます。 デーモンはギリシャ神話から来ており、目に見えないように役立つことをしてくれる善でも悪でもない実体を表します。 このため、BSD のマスコットはスニーカーをはいてフォークを携えたかわいらしい姿のデーモンなのです。 通常デーモンとして動作するプログラムには末尾に "d" を持った名前をつける慣習があります。 例えば、BIND は Berkeley Internet Name Domain ですが、 実際実行されるプログラムは `named` です。 また、Apache ウェブサーバのプログラムは `httpd`、ラインプリンタスプーリングデーモンは `lpd` です。 これは単なる命名に関する慣習です。 例えば、Sendmail アプリケーションの主なメールデーモンは `sendmail` で、`maild` ではありません。 === プロセスを確認する システム上で実行中のプロセスを確認するには、man:ps[1] または man:top[1] を使ってください。 現在動作中のプロセスのリスト、プロセスの PID やプロセスが使っているメモリの量、どういうコマンドラインで起動されたのかなどを表示させるには、man:ps[1] を使ってください。 man:top[1] を使用すると、動作中の全てのプロセスを表示できます。 数秒ごとに表示を更新するので、計算機が何をしているのかインタラクティブに知ることができます。 デフォルトでは、man:ps[1] はユーザにより動作中かつ所有のコマンドのみを表示します。 例えば: [source,shell] .... % ps PID TT STAT TIME COMMAND 8203 0 Ss 0:00.59 /bin/csh 8895 0 R+ 0:00.00 ps .... man:ps[1] の出力はいくつかの列に整形されています。 `PID` の列はプロセス ID を表示します。 PID は 1 から順に 99999 まで割り当てられ、その後足りなくなると最初に戻って使い回されます。ただし、使用中の PID には割り当てられません。 `TT` の列はプログラムが動いている tty を示し、`STAT` はプログラムの状態を示します。 `TIME` はプログラムがその CPU 上で動いている時間の長さです。 通常はプログラムをスタートさせたときからの経過時間ではありません。 多くのプログラムは、CPU 上で時間を使う必要があるまでかなりの時間を費すためです。 最後に、`COMMAND` はそのプログラムを起動するのに使われたコマンドとなります。 表示する情報を変更するオプションが用意されています。 いちばん便利なのは `auxww` でしょう。 `a` はすべてのユーザの動作中のプロセス全部についての情報を表示します。 `u` はプロセスの所有者のユーザ名とメモリ使用量を表示します。 `x` はデーモンプロセスについての情報を表示し、`ww` で、スクリーンに入りきらないほど長くなったコマンドラインでも省略せず、man:ps[1] に各プロセスの全コマンドラインを表示させます。 man:top[1] の出力も同様です。 [source,shell] .... % top last pid: 9609; load averages: 0.56, 0.45, 0.36 up 0+00:20:03 10:21:46 107 processes: 2 running, 104 sleeping, 1 zombie CPU: 6.2% user, 0.1% nice, 8.2% system, 0.4% interrupt, 85.1% idle Mem: 541M Active, 450M Inact, 1333M Wired, 4064K Cache, 1498M Free ARC: 992M Total, 377M MFU, 589M MRU, 250K Anon, 5280K Header, 21M Other Swap: 2048M Total, 2048M Free PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU COMMAND 557 root 1 -21 r31 136M 42296K select 0 2:20 9.96% Xorg 8198 dru 2 52 0 449M 82736K select 3 0:08 5.96% kdeinit4 8311 dru 27 30 0 1150M 187M uwait 1 1:37 0.98% firefox 431 root 1 20 0 14268K 1728K select 0 0:06 0.98% moused 9551 dru 1 21 0 16600K 2660K CPU3 3 0:01 0.98% top 2357 dru 4 37 0 718M 141M select 0 0:21 0.00% kdeinit4 8705 dru 4 35 0 480M 98M select 2 0:20 0.00% kdeinit4 8076 dru 6 20 0 552M 113M uwait 0 0:12 0.00% soffice.bin 2623 root 1 30 10 12088K 1636K select 3 0:09 0.00% powerd 2338 dru 1 20 0 440M 84532K select 1 0:06 0.00% kwin 1427 dru 5 22 0 605M 86412K select 1 0:05 0.00% kdeinit4 .... 出力は2つのセクションに分かれています。 ヘッダ (最初の 5 または 6 行) は動作している最新のプロセスの PID、システムの平均負荷 (システムがどれくらい忙しいかの指標)、システムの稼働時間 (最後の再起動からの時間) と現在の時刻を示します。 ヘッダの中の他の数字は動作中のプロセスの数、使われているメモリとスワップ領域の量、そしてシステムが異なる CPU 状態に消費した時間と関係します。 ZFS ファイルシステムのモジュールをロードしている場合には、`ARC` 行にはディスクではなくメモリキャッシュから読み込んだデータ量が表示されます。 ヘッダの下には、PID、ユーザ名、消費 CPU 時間とプロセスを起動したコマンドといった man:ps[1] の出力と同じような情報を持った行が続きます。 man:top[1] を使うとデフォルトでプロセスが使っているメモリ容量を表示します。 メモリ使用量の欄は 2 項目に分かれており、 一方は合計使用量、 そしてもう一方は実使用量です。 合計使用量はアプリケーションが必要としているメモリ量で、実使用量はその時点で実際に使われているメモリ量です。 man:top[1] は自動的に 2 秒ごとに画面を更新します。 `-s` 使うと更新間隔を変更することができます。 [[basics-daemons]] === プロセスの終了 動作中のプロセスもしくはデーモンと通信する一つの方法は、man:kill[1] を用いて _シグナル_ を送信する方法です。 送信可能なシグナルはたくさんあります。 特別な意味があるものもあれば、アプリケーションの文章に説明されているものもあります。 ユーザは自分が所有者となっているプロセスにのみシグナルを送ることができます。 他人のプロセスにシグナルを送ると、permission denied というエラーになるでしょう。 この例外は `root` ユーザで、 ルートユーザは誰のプロセスに対してもシグナルを送ることができます。 オペレーティングシステムもプロセスにシグナルを送ることができます。 アプリケーションを下手に書いてしまい、予想外のメモリにアクセスしようとすると、FreeBSD はプロセスに "セグメンテーション違反" シグナル (`SIGSEGV`) を送ります。 ある程度の時間が経ったら man:alarm[3] システムコールを使って警告してもらうように書かれているアプリケーションには、"警告" シグナル (`SIGALRM`) が送信されます。 プロセスを止めるためには2つのシグナル、`SIGTERM` か `SIGKILL` を使います。 `SIGTERM` は穏かにプロセスを終了させる方法です。 プロセスはシグナルを受け取ることができ、開いているすべてのログファイルを閉じ、終了前にしていたことを終えるように試みることができます。 中断できない処理の途中だと、`SIGTERM` をプロセスが無視することもあるかもしれません。 プロセスは `SIGKILL` を無視することができません。 プロセスに `SIGKILL` を送ると、プロセスは通常その時点で止まります。 他に良く使われるシグナルには、`SIGHUP`、`SIGUSR1` と `SIGUSR2` があります。 これらは一般的な用途のシグナルなので、このシグナルが送信されたときの応答は、アプリケーション毎に異なります。 例として、ウェブサーバの設定ファイルを変更後、ウェブサーバに設定を再読み込みさせる必要があります。 `httpd` を再起動するとウェブサーバは一瞬ながら停止してしまいます。 その代わりに `SIGHUP` シグナルを送りましょう。 デーモンごとに行動が違うので、`SIGHUP` が期待する結果となるように、そのデーモンの文書を読んで確認してください。 [IMPORTANT] ==== システム上のランダムプロセスを終了させるのはよくありません。 特に、PID が 1 の man:init[8] は特別です。 `/bin/kill -s KILL 1` は推奨されていませんが、実行するといとも簡単にシステムをシャットダウンさせることができます。 kbd:[Return] を押す _前_ に man:kill[1] を実行する引数を二重にチェックする _癖_ をつけてください。 ==== [[shells]] == シェル _シェル_ は、オペレーティングシステムを利用するためのコマンドラインインタフェースを提供します。 シェルは入力チャンネルからコマンドを受け取り、それらを実行します。 大部分のシェルは、日々の作業、ファイル管理やファイル名の展開、コマンドライン編集、コマンドマクロ、環境変数といった組み込みの機能を持ってます。 FreeBSD には Bourne Shell (man:sh[1]) や 高機能 C-shell (man:tcsh[1]) が含まれています。 また、これ以外にも `zsh` や `bash` などのシェルが FreeBSD Ports Collection から利用可能です。 どのシェルを使うかは、まったく趣味の問題です。 あなたが C のプログラマだったとすれば、man:tcsh[1] のような C 風のシェルの方が落ち着くかもしれません。 Linux(R) ユーザであれば、`bash` を好まれるでしょう。 それぞれのシェルは、 ユーザの好みの作業環境で利用できる (もしくはできない) 独自の機能を持っているということ、そして、どのシェルを使うことにするかを決めるのはユーザ自身ということです。 シェルの一般的な機能の一つに、ファイル名の補完があります。 コマンドやファイル名の最初の数文字を入力して kbd:[Tab] を押すと、シェルにコマンドやファイル名の残りの部分を補完させることができます。 例として、`foobar` および `footbar` という二つのファイルがあるとします。 `foobar` を削除するために `rm foo` と入力し、kbd:[Tab] を押してファイル名を補完しようとします。 しかしシェルは `rm foo` とだけ出力します。 `foobar` および `football` のファイル名は、両方とも `foo` から始まるため、ファイル名の補完を完全には行なえませんでした。 一つ以上のファイル名にマッチした場合、ビープ音をらすシェルもあれば、選択できるすべてのファイル名を表示するシェルもあります。 この場合、希望するファイル名を同定するために、ユーザはさらに文字を入力する必要があります。 `t` を入力してもう一度 kbd:[Tab] を押すと、シェルはファイル名を確定でき、ファイル名の残りの部分が補完されます。 もう一つあげられるシェルの特徴として、環境変数があります。 環境変数とは、シェルの環境変数におけるキーと値とのペアです。 この環境変数は、そのシェルから起動されたプログラムから参照でき、それを利用してプログラムの設定を保存するのに利用されます。 <> は、一般的な環境変数とその意味の一覧です。 環境変数の名前は常に大文字です。 [[shell-env-vars]] .一般的な環境変数 [cols="25h,~"] |=== | 変数名 | 意味 |`USER` |現在のログインユーザのユーザ名。 |`PATH` |コロンで区切られた実行ファイル探索のための ディレクトリのリスト。 |`DISPLAY` |接続する Xorg ディスプレイのネットワーク名 (存在する場合のみ)。 |`SHELL` |現在のシェル。 |`TERM` |ユーザの端末種名。 端末のケーパビリティを決定するのに使われる。 |`TERMCAP` |種々の端末の機能を実現する端末のエスケープコードの データベースのエントリ。 |`OSTYPE` |オペレーティングシステムの種別。 |`MACHTYPE` |システムの CPU アーキテクチャ。 |`EDITOR` |ユーザの選んだテキストエディタ。 |`PAGER` |ユーザの選んだ画面上でテキストを見るためのユーティリティ。 |`MANPATH` |コロンで区切られたマニュアルページ探索のための ディレクトリのリスト。 |=== 環境変数を設定する方法は、シェルごとに多少異なります。 man:tcsh[1] や man:csh[1] では `setenv` を使います。 man:sh[1] や `bash` 等の Bourne シェルでは、`export` を使って現在の環境変数を設定します。 以下の例では、`tcsh` シェルでデフォルトの `EDITOR` を `/usr/local/bin/emacs` に設定します。 [source,shell] .... % setenv EDITOR /usr/local/bin/emacs .... `bash` では次のようになります。 [source,shell] .... % export EDITOR="/usr/local/bin/emacs" .... 現在の設定を確認するために、コマンドライン中の変数名の前に `$` 文字を置くことで、環境変数を展開させることができます。 たとえば、`echo $TERM` は `$TERM` が セットされている内容を表示します。 シェルは特殊文字を、特別なデータを表すものとして扱います。 その特殊文字はメタキャラクタと呼ばれます。 もっとも一般的なメタキャラクタは `\*` で、これはファイル名に含まれる、あらゆる文字を表します。 メタキャラクタはファイル名の展開に使われます。 たとえば、`echo *` と入力すると `ls` と入力したのとほとんど同じ結果を得られます。 これはシェルが `*` とマッチするすべてのファイルを受け取って `echo` はコマンドラインでそれらを表示するからです。 特殊文字をシェルに解釈させないようにするため、特殊文字の前にバックスラッシュ文字 (`\`) を置いてエスケープしてください。 例えば `echo $TERM` は端末の設定を表示し、`echo \$TERM` は `$TERM` とそのまま表示します。 [[changing-shells]] === シェルの変更 デフォルトのシェルを変更する一番簡単な方法は `chsh` を使うことです。 このコマンドを実行すると、環境変数 `EDITOR` で示されたエディタ (デフォルトでは man:vi[1] が設定されている) が立ち上がります。 `Shell:` の行を変更するシェルの絶対パスに変更してください。 代わりに `chsh -s` を使うと、エディタを起動せずにシェルを変更できます。 たとえば、シェルを `bash` に変えたいなら、次のようにしてください。 [source,shell] .... % chsh -s /usr/local/bin/bash .... プロンプトに対してパスワードを入力し、kbd:[Return] を押すと、シェルが変更されます。 新しいシェルを使うには、一度ログオフしてから再ログインしてください。 [NOTE] ==== 使おうと思っているシェルは__必ず__ `/etc/shells` 中に書かれていなければなりません。 シェルを crossref:ports[ports,アプリケーションのインストール - packages と ports] で説明されている FreeBSD の Ports Collection からインストールしたのであれば、自動的にこのファイルに追加されています。 もし書かれていなければ、以下のコマンドで、パスをシェルのパスに置き換えて使って追加してください。 [source,shell] .... # echo /usr/local/bin/bash >> /etc/shells .... その後 man:chsh[1] を実行してください。 ==== === 高度なシェルの機能 UNIX(R) のシェルは単なるコマンドインタプリタではなく、ユーザが実行したコマンドの出力をリダイレクトしたり、入力をリダイレクトすることによりコマンドをお互いに繋げることで、最終的なコマンドの出力結果を改良できます。 この機能をビルトインコマンドとともに用いることで、ユーザは最大化された効率の環境を入手できます。 シェルのリダイレクト機能を使うことで、コマンドの出力や入力を別のコマンドに送ったり、ファイルに送ることができます。 たとえば、 man:ls[1] コマンドの出力をキャプチャするには、 出力をファイルにリダイレクトしてください。 以下はその例です。 [source,shell] .... % ls > directory_listing.txt .... 実行すると、現在の作業ディレクトリにあるファイルの一覧が `directory_listing.txt` に出力されます。 man:sort[1] のようなコマンドは、入力を読み込むことができます。 先ほど得たファイルの一覧をソートするには、入力元をファイルにリダイレクトしてください。 [source,shell] .... % sort < directory_listing.txt .... 入力された内容はソートされ画面に出力されます。 この出力を他のファイルにリダイレクトするには、リダイレクトの向きを混ぜるように man:sort[1] の出力をリダイレクトしてください。 [source,shell] .... % sort < directory_listing.txt > sorted.txt .... これまでの例では、ファイルディスクリプタを用いてコマンドに対しリダイレクトを行っています。 すべての UNIX(R) システムは標準入力 (stdin)、標準出力 (stdout) および標準エラー (stderr) といったファイルディスクリプタを持っています。 それぞれに対象があり、 入力はキーボードまたはマウスなどの入力を提供するものが対象、出力はスクリーンであったりプリンタ用紙が対象です。 また、エラーは診断やエラーメッセージに用いられるものが対象です。 これらは、I/O ベースのファイルディスクリプタ、時にはストリームと考えられます。 これらのディスクリプタを使用することで、シェルは出力と入力についてさまざまなコマンドを経由させ、また、ファイルに対して出力し、もしくはファイルから読み込むようにリダイレクトできます。 リダイレクトの他の方法は、パイプの機能です。 UNIX(R) のパイプ記号 "|" は、コマンドの出力を他のプログラムに直接渡します。 基本的には、パイプはコマンドの標準出力を他のコマンドの標準出力に渡します。 以下はその例です。 [source,shell] .... % cat directory_listing.txt | sort | less .... この例では、`directory_listing.txt` の内容がソートされ、その結果が man:less[1] に渡されます。 このコマンドを実行すると、出力がスクロールして画面から見えなくなることをさけることができて、ユーザは出力を自分のペースでスクロールできます。 [[editors]] == テキストエディタ FreeBSD の設定の多くは、テキストファイルの編集で行われます。 そのため、テキストエディタの扱いに慣れると良いでしょう。 FreeBSD には、基本システムの一部として二、三提供されるものと、Ports Collection から利用できる、たくさんのテキストエディタが用意されています。 学習が簡単なエディタは、 easy editor の略で man:ee[1] と呼ばれるものです。 このエディタを立ち上げるには、`ee _filename_` と入力してください。 ここで _filename_ は、 編集しようとしているファイルの名前です。 一旦このコマンドの中に入れば、 エディタの機能を操作するコマンドはすべてディスプレイの上部に表示されています。 キャレット (`^`) は kbd:[Ctrl] を意味するので、`^e` は kbd:[Ctrl+e] を押すという意味になります。 man:ee[1] を終了するには kbd:[Esc] を押し、そしてメインメニューから "leave editor" オプションを選択してください。 ファイルが更新されていたときは、エディタは変更をセーブするかどうかプロンプトを出します。 FreeBSD には、ベースシステムの一部として man:vi[1] といったより強力なテキストエディタが用意されています。 package:editors/emacs[] および package:editors/vim[] といった他のエディタは Ports Collection の一部として用意されています。 これらのエディタはやや学習が複雑ですが、より高い機能性を提供します。 しかし、あなたが多量のテキストを編集することを考えているなら、 vim や Emacs といった強力なエディタを習得することは、 より多くの時間を節約することでしょう。 ファイルを編集したり、文字入力を必要とするようなアプリケーションの多くは、自動的にテキストエディタを起動します。 <> の節で説明したように、デフォルトのエディタを変更するには `EDITOR` 環境変数に希望するエディタを設定してください。 [[basics-devices]] == デバイスとデバイスノード デバイスとはシステム上のハードウェアに関するものに対してよく使われる用語で、ディスクやプリンタ、グラフィックカードやキーボードが含まれます。 FreeBSD が起動するとき、ブートメッセージの大部分は検出されたデバイスについてのものです。 ブートメッセージは `/var/run/dmesg.boot` に保存されています。 各デバイスはデバイス名と番号を持ちます。 例えば、`ada0` は最初の SATA CD-ROM ドライブで、`kbd0` はキーボードを表します。 FreeBSD におけるほとんどのデバイス、デバイスノードと呼ばれる `/dev` にあるスペシャルファイルを通してアクセスしなければなりません。 [[basics-more-information]] == マニュアルページ FreeBSD についてのもっとも包括的な文書は、 マニュアルページの形式になっているものです。 FreeBSD システム上のほとんどすべてのプログラムには、基本的な操作方法と利用可能な引数を説明しているリファレンスマニュアルが添付されています。 これらのマニュアルは `man` を使って見ることができます。 [source,shell] .... % man コマンド名 .... ここで `コマンド名` のところには、知りたいコマンドの名前を入れます。 たとえば man:ls[1] について知りたい場合には、次のように入力します。 [source,shell] .... % man ls .... マニュアルは、トピックごとにセクション番号で分類されています。 FreeBSD では、以下のセクションがあります。 . ユーザコマンド . システムコールとエラー番号 . C のライブラリ関数 . デバイスドライバ . ファイル形式 . ゲームや娯楽 . さまざまな情報 . システムの管理と操作のためのコマンド . システムカーネルインタフェース 時折、 同じトピックがオンラインマニュアルの複数のセクションに記載されている場合があります。 たとえば、`chmod` ユーザコマンドと `chmod()` システムコールの場合がそれに該当します。 man:man[1] にセクション番号を与えることで、 表示したいセクションを指定できます。 [source,shell] .... % man 1 chmod .... 上のようにすれば、ユーザコマンド man:chmod[1] のマニュアルページが表示されます。 オンラインマニュアルの特定セクションへの参照は、慣習的に書かれている文書で括弧の中に示されます。 すなわち、man:chmod[1] はユーザコマンドを、man:chmod[2] はシステムコールの方を示しています。 マニュアルページの名前を知らない場合には、`man -k` を使ってマニュアルページの解説 (description) からキーワードを検索してください。 [source,shell] .... % man -k mail .... このコマンドは、"mail" というキーワードをコマンド解説に含むコマンドの一覧を表示します。 これは man:apropos[1] と同等の機能です。 `/usr/sbin` にあるすべてのコマンドの説明を読むには、以下のように実行してください。 [source,shell] .... % cd /usr/sbin % man -f * | more .... または、以下を実行してください。 [source,shell] .... % cd /usr/sbin % whatis * |more .... [[basics-info]] === GNU の Info ファイル FreeBSD には Free Software Foundation (FSF) によるアプリケーションやユーティリティが含まれています。 これらのプログラムには、マニュアルページに加えて `info` ファイルと呼ばれるハイパーテキスト形式の文書が付属しています。 この文書は man:info[1]、あるいは package:editors/emacs[] をインストールしているなら emacs の info モードで読むことができます。 man:info[1] を使うには、次のように入力してください。 [source,shell] .... % info .... `h` と入力すると、 簡単な手引きを読むことができます。 クイックコマンドリファレンスは `?` を入力してください。 diff --git a/documentation/content/ja/books/handbook/boot/_index.adoc b/documentation/content/ja/books/handbook/boot/_index.adoc index 7280292cb9..b7d78ea511 100644 --- a/documentation/content/ja/books/handbook/boot/_index.adoc +++ b/documentation/content/ja/books/handbook/boot/_index.adoc @@ -1,388 +1,387 @@ --- title: 第12章 FreeBSD の起動のプロセス part: パートIII. システム管理 prev: books/handbook/config next: books/handbook/security description: FreeBSD のブートプロセスおよび FreeBSD カーネルがスタートし、デバイスを検出し、init を起動するまでに起きることすべてを含む FreeBSD の起動プロセスのカスタマイズ方法について説明します。 tags: ["boot", "boot process", "device hints", "x86", "amd64", "MBR", "GPT", "UEFI", "bsdlabel", "boot0", "Single-User Mode", "Multi-User Mode"] showBookMenu: true weight: 16 path: "/books/handbook/boot/" -aliases: ["/ja/books/handbook/boot-introduction/","/ja/books/handbook/boot-splash/","/ja/books/handbook/device-hints/","/ja/books/handbook/boot-shutdown/"] --- [[boot]] = FreeBSD の起動のプロセス :doctype: book :toc: macro :toclevels: 1 :icons: font :sectnums: :sectnumlevels: 6 :sectnumoffset: 12 :partnums: :source-highlighter: rouge :experimental: :images-path: books/handbook/boot/ ifdef::env-beastie[] ifdef::backend-html5[] :imagesdir: ../../../../images/{images-path} endif::[] ifndef::book[] include::shared/authors.adoc[] include::shared/mirrors.adoc[] include::shared/releases.adoc[] include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists.adoc[] include::shared/{{% lang %}}/urls.adoc[] toc::[] endif::[] ifdef::backend-pdf,backend-epub3[] include::../../../../../shared/asciidoctor.adoc[] endif::[] endif::[] ifndef::env-beastie[] toc::[] include::../../../../../shared/asciidoctor.adoc[] endif::[] [[boot-synopsis]] == この章では 計算機を起動しオペレーティングシステムをロードするプロセスは、 "ブートストラッププロセス" もしくは "ブート" と呼ばれます。 FreeBSD の起動プロセスを使えば、 システムをスタートするときに起きることをかなり柔軟にカスタマイズできます。 同じ計算機にインストールされた別のオペレーティングシステムを選択することもできますし、 同じオペレーティングシステムの異なるバージョンを選択することも、 インストールされた別のカーネルを選択することさえできます。 この章では、指定できる設定オプションついて詳しく説明します。 FreeBSD カーネルがスタートし、デバイスを検出し、 man:init[8] を起動するまでに起きることすべてを含む FreeBSD の起動プロセスのカスタマイズ方法について説明します。 これは、起動メッセージのテキストの色が、 明るい白から灰色に変わるまでに起きています。 この章を読むと、以下のことが分かります。 * FreeBSD のブートストラップシステムの構成およびそれらが互いにどう関係しているのか * 起動プロセスを制御するために FreeBSD のブートストラップの各要素に付加できるオプション * device hints の基本的な記述方法 * シングルユーザもしくはマルチユーザモードでの起動方法、 および FreeBSD システムのシャットダウンの方法 [NOTE] ==== この章では Intel x86 および amd64 システム上で動作する FreeBSD の起動プロセスだけを扱います。 ==== [[boot-introduction]] == FreeBSD の起動プロセス 計算機の電源を入れ、オペレーティングシステムをスタートさせるのには、 おもしろいジレンマがあります。定義により、 計算機は、オペレーティングシステムが起動するまでは、 ディスクからプログラムを動かすことも含めて、 何をどうすればよいかまったく知りません。 計算機はオペレーティングシステムなしにディスクからプログラムを実行することができず、 オペレーティングシステムのプログラムがディスク上にあるのなら、 どうやってオペレーティングシステムを起動するのでしょうか? この問題はほらふき男爵の冒険 という本の中に書かれている問題ととてもよく似ています。 登場人物がマンホールの下に半分落っこちて、 靴紐 (ブートストラップ) をつかんで自分を引っぱり、持ち上げるのです。 計算機の黎明期には、_ブートストラップ_ という用語でオペレーティングシステムをロードする機構のことを指していました。 いまはこれを縮めて "ブート (起動)" と言います。 x86 ハードウェアでは、基本入出力システム (Basic Input/Output System: BIOS) にオペレーティングシステムをロードする責任があります。 BIOS はハードディスク上のマスターブートレコード (Master Boot Record: MBR) を探します。 MBR はハードディスク上の特定の場所になければなりません。 BIOS には MBR をロードし起動するのに十分な知識があり、 オペレーティングシステムをロードするために必要な作業の残りは、 場合によっては BIOS の助けを得た上で MBR が実行できることを仮定しています。 [NOTE] ==== FreeBSD は古い標準の MBR、 または新しい GUID Partition Table (GPT) から起動できます。 GPT パーティションは、Unified Extensible Firmware Interface (UEFI) に対応したコンピュータで良く用いられます。 しかしながら、FreeBSD はレガシーな BIOS にのみに対応したコンピュータからも、man:gptboot[8] により、 GPT パーティションから起動できます。 UEFI からの直接の起動への対応は進行中です。 ==== MBR 内部のコードは、 一般的に _ブートマネージャ_ と呼ばれます。 とりわけユーザとの対話がある場合にそう呼ばれます。 通常ブートマネージャのもっと多くのコードが、ディスクの最初のトラック、またはファイルシステム上におかれます。 ブートマネージャの例としては、Boot Easy とも呼ばれる FreeBSD 標準のブートマネージャの boot0、多くの Linux(R) ディストリビューションが採用している GNU Grub 等があります。 [NOTE] ==== // There is extref:{faq}[a frequently asked question] about GRUB. Beyond the answer there, // GRUB のユーザは https://www.gnu.org/software/grub/grub-documentation.html[GNU-provided documentation] を参照してください。 ==== ディスク上にインストールされているオペレーティングシステムが 1 つの時は、MBR はディスク上の最初の起動可能な (アクティブな) スライスを探し、 そのスライスにあるコードを起動してオペレーティングシステムの残りをロードします。 ディスク上に複数のオペレーティングシステムが存在しているのなら、 複数のオペレーティングシステムの一覧を表示できて、 起動するオペレーティングシステムを選択できるような、 別のブートマネージャをインストールすることもできます。 FreeBSD のブートストラップシステムの残りは 3 段階に分かれます。 第 1 ステージは、 計算機を特定の状態にするために必要なことだけを知っていて、 第 2 ステージを起動します。 第 2 ステージでは、第 3 ステージを起動する前に、 もう少しできることがあります。 第 3 ステージでオペレーティングシステムのロード作業を完了します。 起動作業が 3 段階に分かれているのは、 MBR がステージ 1 とステージ 2 で実行できるプログラムのサイズに制限を課しているからです。 これらの作業をつなぎ合わせることによって、 FreeBSD はより柔軟なローダ (loader) を提供しているのです。 その後カーネルが起動し、デバイスの検出と初期化を開始します。 そしてカーネルの起動が終わると、制御はユーザープロセスの man:init[8] へ移されます。man:init[8] はディスクが利用可能であることを確認し、 ファイルシステムのマウント、 ネットワークで利用するネットワークカードのセットアップ、 そしてブート時に起動されるように設定されたプロセスの起動、 といったユーザーレベルでのリソース (資源) 設定を行ないます。 この章では、これらのステージについてより詳細に、また、FreeBSD ブートプロセスにおける対話的な設定方法について説明します。 [[boot-boot0]] === ブートマネージャ MBR のブートマネージャのコードは起動プロセスの_第 0 ステージ_と呼ばれることがあります。 デフォルトでは、FreeBSD は boot0 を使います。 FreeBSD のインストーラがインストールする MBR は、 [.filename]#/boot/boot0# を基にしています。 boot0 のサイズと機能は、 スライステーブルおよび MBR 末尾の識別子 `0x55AA` のため、 446 バイトの大きさに制限されます。 もし、boot0 と複数のオペレーティングシステムをインストールした場合、 起動時に以下のようなメッセージが表示されます。 [[boot-boot0-example]] .[.filename]#boot0# のスクリーンショット [example] ==== [source,shell] .... F1 Win F2 FreeBSD Default: F2 .... ==== 他のオペレーティングシステムは、 FreeBSD の後にインストールを行うと、既存の MBR を上書きしてしまいます。 もしそうなってしまったら、 もしくは既存の MBR を FreeBSD の MBR で置き換えるには、 次のコマンドを使ってください。 [source,shell] .... # fdisk -B -b /boot/boot0 device .... _device_ は起動するデバイス名で、 たとえば 1 番目の IDE ディスクは [.filename]#ad0#、2 番目の IDE コントローラに接続されている 1 番目の IDE ディスクは [.filename]#ad2#、 1 番目の SCSI ディスクは [.filename]#da0# などとなります。 MBR の設定をカスタマイズしたい場合は、 man:boot0cfg[8] を参照してください。 [[boot-boot1]] === 起動ステージ 1 と起動ステージ 2 概念上、第 1 ステージと第 2 ステージはハードディスクの同じ領域上の同一のプログラムの部分部分です。 スペースの制約のため 2 つに分割されていますが、 いつも一緒にインストールされます。 FreeBSD のインストーラまたは `bsdlabel` は、 両者を 1 つにまとめた [.filename]#/boot/boot# をコピーします。 これらの 2 つのステージは、ファイルシステムの外部、 起動スライスの最初のトラックに置かれ、 先頭が最初のセクタにきます。 boot0 またはその他のブートマネージャは、 起動プロセスを続けるために必要なプログラムがそこにあると想定しています。 最初のステージの [.filename]#boot1# は、 512 バイトの大きさでなければならないという制限があるので、 非常に単純なプログラムです。 このプログラムは [.filename]#boot2# を検索して実行するため、そのスライスの情報を保持する FreeBSD の _BSD ラベル_ に関する最低限の情報だけを持っています。 次のステージの [.filename]#boot2# はもう少し高機能です。 これは FreeBSD のファイルシステム上でファイルを見つける機能を持ちます。 実行するカーネルやローダを指定するための簡単なインタフェースを提供します。 [.filename]#boot2# により起動される loader はさらに高機能で、 起動設定が行なえる手段を提供します。 ステージ 2 で起動プロセス中断した時には、 次のようながインタラクティブなが画面が表示されます。 [[boot-boot2-example]] .[.filename]#boot2# のスクリーンショット [example] ==== [source,shell] .... >> FreeBSD/i386 BOOT Default: 0:ad(0,a)/boot/loader boot: .... ==== インストールされた [.filename]#boot1# と [.filename]#boot2# を変更するには、 `bsdlabel` を使ってください。 以下の例では、_diskslice_ は起動するディスクとスライスで、たとえば最初の IDE ディスクの 1 番目のスライスは [.filename]#ad0s1# となります。 [source,shell] .... # bsdlabel -B diskslice .... [WARNING] ==== [.filename]#ad0# のようにディスク名だけを指定すると、 `bsdlabel` は、スライスを持たない "危険な専用モード"を作成してしまいます。 これはおそらく、あなたが望んでいることではないでしょうから、 kbd:[Return] キーを押す前に、 _diskslice_ の部分を二重にチェックしてください。 ==== [[boot-loader]] === 起動ステージ 3 loader は三段階の起動プロセスの最終段階です。 これは通常、ファイルシステム上の [.filename]#/boot/loader# として存在しています。 loader は、 よりさまざまなコマンド群をサポートした強力なインタプリタによって提供される組み込みコマンド群を利用することで、 インタラクティブな設定手段となるように設計されています。 loader は初期化の際にコンソールとディスクの検出を行ない、 どのディスクから起動しているかを調べます。 そして必要な変数を設定してからインタプリタを起動し、 スクリプトからコマンドを送ったり手でコマンドを入力したりできます。 loader は次に [.filename]#/boot/loader.rc# を読み込み、通常、変数の標準値を定義した [.filename]#/boot/defaults/loader.conf# と、そのコンピュータにローカルに変数を定義した [.filename]#/boot/loader.conf# を読み込みます。 [.filename]#loader.rc# はそれらの変数にもとづき、 選択されたモジュールとカーネルをロードします。 loader は最後に、 標準設定で 10 秒のキー入力待ち時間を用意し、 入力がなければカーネルを起動します。 入力があった場合、コマンド群が使えるプロンプトが表示され、 ユーザは変数を調整したり、すべてのモジュールをアンロードしたり、 モジュールをロードしたりすることができます。 その後、最終的な起動や再起動へ移行します。 <>では、 もっともよく使われる loader のコマンドをまとめています。 利用可能なコマンドをすべて知りたい場合には、 man:loader[8] を参照してください。 [[boot-loader-commands]] .ローダの組み込みコマンド [cols="1,1", frame="none", options="header"] |=== | 変数 | 説明 |autoboot _seconds_ |_seconds_ で与えられた時間内に入力がなければ、 カーネルの起動へと進みます。 カウントダウンを表示します。標準設定では 10 秒間です。 |boot `[__-options__] [__kernelname]__` |すぐにカーネルの起動へ進みます。 オプション、カーネル名が指定されている場合は、 それらが使われます。 _unload_ を実行後、 カーネル名をコマンドラインから指定することができます。 _unload_ を実行しないと、 一度読み込まれたカーネルが使われます。 _kernelname_ でパスが指定されていない時には、 _/boot/kernel_ および _/boot/modules_ から調べられます。 |boot-conf |すべてのモジュールの設定を、 起動時と同じように指定された変数 (最も多いのは `kernel`) にもとづいて自動的に行ないます。 このコマンドは、変数を変更する前に、 最初に `unload` を行なった場合にのみ有効に働きます。 |help `[__topic__]` |[.filename]#/boot/loader.help# を読み込み、ヘルプメッセージを表示します。 topic に `index` が指定された場合、 利用可能な topic の一覧を表示します。 |include _filename_ ... |指定されたファイルを読み込み、行単位で解釈します。 エラーが発生した場合、 `include` の実行は直ちに停止します。 |load `[-t __type__]` _filename_ |指定されたファイル名のカーネル、 カーネルモジュール、あるいは type に指定された種類のファイルをロードします。 _filename_ 以降に指定された引数はファイルへと渡されます。 _filename_ でパスが指定されていない時には、 _/boot/kernel_ および _/boot/modules_ から調べられます。 |ls [-l] `[__path__]` |指定された _path_ にあるファイルを表示します。 _path_ が指定されていなければ、ルートディレクトリを表示します。 `-l` が指定されていればファイルサイズも表示されます。 |lsdev [-v] |モジュールがロード可能なすべてのデバイスを表示します。 もし `-v` が指定されていれば、 より詳細な出力がされます。 |lsmod [-v] |ロード済みのモジュールを表示します。 `-v` が指定されていれば、 より詳細な内容が出力されます。 |more _filename_ |`LINES` 行を表示するごとに停止しながら指定されたファイルを表示します。 |reboot |すぐにシステムを再起動します。 |set _variable_, set _variable_=_value_ |ローダの環境変数を設定します。 |unload |すべてのロード済みモジュールを削除します。 |=== 次にあげるのは、ローダの実践的な使用例です。 普段使っているカーネルをシングルユーザモードで起動します。 [source,shell] .... boot -s .... 普段使っているカーネルとモジュールをアンロードし、 古いもしくは別のカーネルをロードするには、 以下のように実行してください。 [source,shell] .... unload load /path/to/kernelfile .... インストール時のデフォルトカーネルを指定するには、完全修飾の [.filename]#/boot/GENERIC/kernel# を使ってください。 また、システムをアップグレードしたり、 もしくはカスタムカーネルを設定した場合に、 直前にインストールされていたカーネルは、 [.filename]#/boot/kernel.old/kernel# で指定できます。 普段のカーネルで使っているモジュールを指定したカーネルでロードする場合は、 次のようにします。 この場合は、完全修飾名を使う必要はありません。 [source,shell] .... unload set kernel="mykernel" boot-conf .... カーネルの自動設定スクリプトをロードします。 [source,shell] .... load -t userconfig_script /boot/kernel.conf .... [[boot-init]] === 最終ステージ カーネルがデフォルトの loader もしくは loader を迂回して boot2 によって読み込まれると、 起動フラグが調べられ、それに応じて動作が調整されます。<> には、 良く使われる起動フラグがまとめられています。 他の起動フラグの詳細については、 man:boot[8] を参照してください。 [[boot-kernel]] .起動時のカーネルオプション [cols="1,1", frame="none", options="header"] |=== | オプション | 説明 |`-a` |カーネル初期化中に、 ルートファイルシステムとしてマウントするデバイスを尋ねます。 |`-C` |CDROM からルートファイルシステムを起動します。 |`-s` |シングルユーザモードで起動します。 |`-v` |カーネル起動時に、より詳細な情報を表示します。 |=== カーネルの起動が完了すると、man:init[8] というユーザプロセスに制御が移されます。 これは [.filename]#/sbin/init#、 もしくは `loader` の `init_path` 変数で指定される場所にあります。 これは起動プロセスの最終ステージです。 起動シーケンスでは、 システム上で利用できるファイルシステムの一慣性を確認します。 もし UFS ファイルシステムにに問題があって `fsck` が不一致を修復できなければ、 管理者が問題を直接解決できるように、init はシステムをシングルユーザモードへと移行させます。 問題がなければ、システムはマルチユーザモードに移行します。 [[boot-singleuser]] ==== シングルユーザモード このモードには、ユーザが起動時に `-s` を指定した場合、あるいは loader で `boot_single` 変数を設定することによって移行します。 マルチユーザモードから `shutdown now` を呼び出すことでもこのモードに移行できます。 シングルユーザモードは、以下のメッセージで開始します。 [.programlisting] .... Enter full pathname of shell or RETURN for /bin/sh: .... ユーザが kbd:[Enter] を入力すると、 システムは Bourne シェルを起動します。 別のシェルを使うには、シェルのフルパスを入力してください。 シングルユーザモードは、 通常ファイルシステムの一貫性に問題があって起動できないシステムを修復したり、 起動設定ファイルの間違いを修正するために使われます。 また、`root` パスワードがわからなくなった場合に、 リセットするために使うことも出来ます。 シングルユーザモードのプロンプトは、 ローカルファイルシステムおよび設定ファイルへのアクセスを与えてくれますが、 ネットワーク接続は出来ません。 シングルユーザモードは、システムの修復には有用ですが、 システムが物理的に安全な場所になければ、 セキュリティのリスクがもたらされます。 デフォルトでは、システムに物理的にアクセス可能なユーザは、 シングルユーザモードで起動後はシステムをすべてコントロールできます。 [.filename]#/etc/ttys# でシステムの `console` が `insecure` に設定されている場合、 システムはシングルユーザモードに移行する前に `root` のパスワードを入力するように求めます。 `root` パスワードがわからなくなった場合のリセット機能が無効になっている間は、 セキュリティ対策が必要となります。 [[boot-insecure-console]] .[.filename]#/etc/ttys# の insecure コンソール [example] ==== [.programlisting] .... # 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 insecure .... ==== `insecure` コンソールとは、 コンソールが物理的に安全でない (insecure) と考えられるため、 `root` のパスワードを知る人だけがシングルユーザモードを使えるという意味です。 [[boot-multiuser]] ==== マルチユーザモード init がファイルシステムが正常であると判断するか、 ユーザがシングルユーザモードでのコマンドを終了し、 `exit` を入力してシングルユーザモードを終了すると、 システムはマルチユーザモードへ移行し、 システムのリソースの設定を開始します。 リソース設定システムはデフォルト設定を [.filename]#/etc/defaults/rc.conf# から、 また、システム独自の細かな設定を [.filename]#/etc/rc.conf# から読み込みます。 そして [.filename]#/etc/fstab# に記述されるシステムファイルシステムをマウントします。 その後、ネットワークサービス、さまざまなシステムデーモン、 そして最後に、ローカルにインストールされた package の起動スクリプトを実行します。 リソース設定システムについてもっと知りたい場合には、 man:rc[8] を参照してください。また、[.filename]#/etc/rc.d# にあるスクリプトを実行してみてください。 [[device-hints]] == Device Hints システムの最初のスタートアップ時に、man:loader[8] は man:device.hints[5] を読み込みます。 このファイルにはカーネル起動の環境変数が格納されており、 これらの環境変数は "device hints" と呼ばれることがあります。デバイスドライバは、 デバイスを設定するために "device hints" を使用します。 <> で説明されているように device hints はステージ 3 ブートローダプロンプトでも設定できます。 変数は `set` を用いて追加したり、 `unset` を用いて削除できます。 `show` を用いて一覧を見ることもできます。 [.filename]#/boot/device.hints# に設定されている変数は、 上書きすることもできます。 ブートローダで設定した device hints の効果は一時的なものなので、 次回起動するときには無効になります。 システムが起動すると、man:kenv[1] コマンドですべてのカーネル環境変数をダンプすることができます。 [.filename]#/boot/device.hints# は 1 行につき一つの変数を設定でき、行頭の "#" はその行がコメントであることを示しています。 書式は次の通りです。 [source,shell] .... hint.driver.unit.keyword="value" .... ステージ 3 ブートローダ で設定するときの書式は次の通りです。 [source,shell] .... set hint.driver.unit.keyword=value .... ここで、`driver` はデバイスドライバの名前、 `unit` はデバイスドライバのユニット番号、 `keyword` はヒントキーワードです。 キーワードは以下のようなオプションです。 * `at`: デバイスがどのバスに接続されているか指定します。 * `port`: 使用する I/O ポートの開始アドレスを指定します。 * `irq`: 使用する IRQ を指定します。 * `drq`: 使用する DMA チャネルを指定します。 * `maddr`: 使用する物理メモリアドレスを指定します。 * `flags`: デバイスに対してさまざまなフラグを設定します。 * `disabled`: `1` が設定されていると、そのデバイスは無効になります。 デバイスドライバはこのリスト以外の変数を設定できるかもしれませんし、 このリスト以外の変数を必要とするかもしれないので、 ドライバのマニュアルを読むことをおすすめします。 より多くの情報を知りたければ、man:device.hints[5], man:kenv[1], man:loader.conf[5] および man:loader[8] を参照してください。 [[boot-shutdown]] == シャットダウン動作 man:shutdown[8] を用いてシステムを意図的にシャットダウンした場合、 man:init[8] は [.filename]#/etc/rc.shutdown# というスクリプトの実行を試みます。 そして、すべてのプロセスへ `TERM` シグナルを送り、続いてうまく終了できなかったプロセスへ `KILL` シグナルを送ります。 電源管理機能を持ったシステムで稼働している FreeBSD では `shutdown -p now` によって、 直ちに電源を落とすことができます。FreeBSD システムを再起動するには、 `shutdown -r now` を実行してください。 man:shutdown[8] を実行するには、 `root` か、`operator` のメンバでなければなりません。man:halt[8] や man:reboot[8] を利用することもできます。 より多くの情報を得るために、それらのマニュアルページや man:shutdown[8] を参照してください。 グループのメンバを変更するには、 crossref:users[users-synopsis,「この章では」] を参照してください。 [NOTE] ==== 電源管理機能には man:acpi[4] がモジュールとして読み込まれるか、 カスタムカーネルにコンパイルされて静的に組み込まれている必要があります。 ==== diff --git a/documentation/content/ja/books/handbook/bsdinstall/_index.adoc b/documentation/content/ja/books/handbook/bsdinstall/_index.adoc index 32cbe769fa..04dcf93b11 100644 --- a/documentation/content/ja/books/handbook/bsdinstall/_index.adoc +++ b/documentation/content/ja/books/handbook/bsdinstall/_index.adoc @@ -1,1208 +1,1207 @@ --- title: 第2章 FreeBSD のインストール part: パートI. 導入 prev: books/handbook/introduction next: books/handbook/basics description: FreeBSD のインストール方法、最小ハードウェア要件および対応しているアーキテクチャについて、インストールメディアの作成方法等についてのガイド tags: ["bsdinstall", "FreeBSD のインストール", "必要要件", "チュートリアル", "gガイド"] showBookMenu: true weight: 4 path: "/books/handbook/bsdinstall/" -aliases: ["/ja/books/handbook/bsdinstall-hardware/","/ja/books/handbook/bsdinstall-pre/","/ja/books/handbook/bsdinstall-start/","/ja/books/handbook/using-bsdinstall/","/ja/books/handbook/bsdinstall-partitioning/","/ja/books/handbook/bsdinstall-fetching-distribution/","/ja/books/handbook/bsdinstall-post/","/ja/books/handbook/bsdinstall-network/","/ja/books/handbook/bsdinstall-install-trouble/","/ja/books/handbook/using-live-cd/"] --- [[bsdinstall]] = FreeBSD のインストール :doctype: book :toc: macro :toclevels: 1 :icons: font :sectnums: :sectnumlevels: 6 :sectnumoffset: 2 :partnums: :source-highlighter: rouge :experimental: :images-path: books/handbook/bsdinstall/ ifdef::env-beastie[] ifdef::backend-html5[] :imagesdir: ../../../../images/{images-path} endif::[] ifndef::book[] include::shared/authors.adoc[] include::shared/mirrors.adoc[] include::shared/releases.adoc[] include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists.adoc[] include::shared/{{% lang %}}/urls.adoc[] toc::[] endif::[] ifdef::backend-pdf,backend-epub3[] include::../../../../../shared/asciidoctor.adoc[] endif::[] endif::[] ifndef::env-beastie[] toc::[] include::../../../../../shared/asciidoctor.adoc[] endif::[] [[bsdinstall-synopsis]] == この章では FreeBSD は、amd64, ARM(R), RISC-V(R), および PowerPC(R) 等のさまざまなアーキテクチャに対応しています。 インストールまたは直接 FreeBSD を実行するためのイメージは、アーキテクチャおよびプラットフォームごとに link:https://www.freebsd.org/ja/where/[ダウンロード] できます。 利用できるイメージのタイプは以下の通りです。 * `qcow2`, `vmdk`, `vhd` および raw デバイスイメージといった仮想マシンのディスクイメージ。これらはインストール用のイメージではなく、FreeBSD がすでにインストールされたインスタンスで、すぐに起動して、インストール後の作業を行うことができます。仮想マシンのイメージは、クラウド環境でも使われます。 * Raspberry Pi のような組み込みシステム用の SD カードイメージ。これらのファイルをダウンロードしたら、展開し、ボードが起動するように raw イメージとして SD カードに書き込んでください。 * ISO または USB デバイスから起動して、FreeBSD を通常のデスクトップ、ラップトップ、サーバシステムのドライブ上にインストールするためのインストールイメージ。 この章では、3 番目のケースについて、bsdinstall と呼ばれるテキストベースのインストールプログラムを用いた FreeBSD のインストール方法について説明します。 この章では、以下について説明します。 * FreeBSD イメージの入手方法および FreeBSD インストールメディアの作り方。 * bsdinstall の起動方法。 * bsdinstall が聞いてくる質問がどのような意味であり、 またどのように答えれば良いか。 * インストールに失敗した時の問題の解決方法。 * インストールを確定する前に、 FreeBSD の live 版へアクセスする方法。 [[bsdinstall-hardware]] == 最小ハードウェア要件 FreeBSD をインストールするために必要なハードウェア要件は、アーキテクチャおよびバージョンごとに異なります。 FreeBSD の各リリースが対応しているハードウェアアーキテクチャおよびデバイスの一覧は、 link:https://www.FreeBSD.org/ja/releases/[FreeBSD リリース情報] のページにまとめられています。 アーキテクチャごとに推奨される適切なイメージの選択に関しては、 link:https://www.FreeBSD.org/ja/where/[FreeBSD ダウンロードページ] でも説明されています。 [[bsdinstall-pre]] == インストール前に行う作業 システムが FreeBSD のインストールのための最小ハードウェア要件を満たしていることを確認したら、インストールファイルをダウンロードして、インストール用のメディアを用意してください。 その前に、以下のチェックリストを確認して、システムをインストールする準備ができていることを確認してください。 [.procedure] ==== . 重要なデータのバックアップ + オペレーティングシステムをインストールする前に、 *常に* 価値のあるすべてのデータを最初にバックアップしてください。 インストールしようとしているシステムにはバックアップを保存しないでください。 そのかわり、USB ドライブ、ネットワーク上の他のシステム、もしくはオンラインのバックアップサービスといったリムーバルディスクにデータを保存してください。 インストールを始める前に、バックアップを調べて、必要なすべてのファイルがバックアップに含まれていることを確認してください。 インストーラがシステムのディスクをフォーマットしてしまうと、ディスクに保存されていたすべてのデータは失われます。 . FreeBSD をインストールする場所の決定 + インストールするオペレーティングシステムが FreeBSD のみであれば、 このステップは飛ばすことができます。 しかし、ディスクに FreeBSD と 他のオペレーティングシステムを共存させる必要がある場合には、FreeBSD が利用するディスクおよびパーティションを決める必要があります。 + i386 および amd64 アーキテクチャでは、 二つのパーティションスキームのどちらかを使って、 ハードディスクを複数の塊に分割することができます。 伝統的な _Master Boot Record_ (MBR) では、ディスク 1 台あたり最大 4 つの _プライマリパーティション_ をパーティションテーブルに持つことができます。 歴史的な理由により、FreeBSD では、これらのパーティションのことを _スライス_ と呼びます。 プライマリパーティションの 1 つに、複数の _論理パーティション_ を含む _拡張パーティション_ を作成できます。 _GUID Partition Table_ (GPT) は、ディスクをパーティションに分ける簡単で新しい方法です。 一般的な GPT の実装では、1 つのディスクに 128 個までのパーティションの作成が可能であり、論理パーティションは必要ありません。 + FreeBSD のブートローダは、プライマリまたは GPT パーティションのどちらかを必要とします。 ディスク上のプライマリ、もしくは GPT パーティションがすべて使われているのであれば、 そのひとつを FreeBSD のために開放してください。 ディスクにあるデータを消去せずにパーティションを作成するには、 パーティションサイズを変更するツールを使って今あるパーティションのサイズを小さくし、 空いたスペースに新しいパーティションを作成してください。 + パーティションサイズを変更するためのフリーまたは商用のツールは、 link:https://en.wikipedia.org/wiki/List_of_disk_partitioning_software[List of disk partitioning software wikipedia entry] にまとめられています。 link:https://gparted.org/livecd.php[GParted Live] は、GParted パーティションエディタを含むフリーのライブ CD です。 + [WARNING] ====== ディスクパーティションを縮小するユーティリティは、 適切に用いるとパーティション用の空き容量を新しく安全に作成できます。 すでにあるパーティションを間違って選択してしまう可能性があるので、 ディスクのパーティションを変更する前に、 必ず重要なデータのバックアップをとり、 バックアップが正しくとれていることを検証してください。 ====== + ディスクパーティションごとに異なるオペレーティングシステムをインストールすることで、 一つのコンピュータに複数のオペレーティングシステムをインストールできます。link:https://docs.freebsd.org/en/books/handbook/virtualization/#virtualization[仮想化技術] を用いると、ディスクパーティションを変更することなく、複数のオペレーティングシステムを同時に起動できます。 . ネットワーク情報の収集 + FreeBSD のインストール方法によっては、ネットワークに接続し、 インストールファイルをダウンロードする必要があります。 インストールする方法に関わらず、インストール後に、 インストーラはシステムのネットワークインタフェースの設定をする機会を提供します。 + ネットワークに DHCP サーバがあると、 自動的にネットワークの設定情報を取得できます。 DHCP を利用できない環境では、 システムの以下のネットワーク情報について、 システム管理者かプロバイダにネットワーク情報を問い合わせる必要があります。 .. IP アドレス .. サブネットマスク .. デフォルトゲートウェイの IP アドレス .. ネットワークのドメイン名 .. ネットワークの DNS サーバの IP アドレス . FreeBSD Errata の確認 + FreeBSD プロジェクトでは FreeBSD の各リリースができる限り安定するよう努力していますが、 時々バグが発生してしまうことがあります。 極まれに、発生したバグがインストールプロセスに影響を与えることがあります。 これらの問題は発見され解決されると、FreeBSD の各バージョンごとに Errata ページに記載されます。 インストールに影響するような既知の問題が無いことを、インストールする前に Errata で確認してください。 + すべてのリリースに関する情報や Errata は、 link:https://www.FreeBSD.org/ja/releases/[リリース情報] のページで確認できます。 ==== [[bsdinstall-installation-media]] === インストールメディアの準備 FreeBSD のインストーラは、 他のオペレーティングシステムで実行できるようなプログラムではありません。 そのかわり、FreeBSD インストールファイルをダウンロードしたら、 ファイルタイプやサイズに合わせてメディア (CD, DVD または USB) に焼いてください。そして、挿入したメディアからインストールするように、 システムを起動してください。 FreeBSD のインストールファイルは link:https://www.FreeBSD.org/ja/where/#download[FreeBSD ダウンロードページ] から入手できます。 各インストールファイルの名前は、FreeBSD のリリースバージョンおよびアーキテクチャ、ファイルタイプから構成されます。 インストールファイルは、さまざまな形式で、man:xz[1] により圧縮されたファイルまたは圧縮されていないファイルが用意されています。 用意されているフォーマットは、 コンピュータのアーキテクチャやメディアのタイプによって異なります。 インストールファイルの形式 * `*-bootonly.iso*`: インストーラのみを含む最小のインストールファイルです。 インストールを行う間、インストーラは FreeBSD をインストールするために必要なファイルをダウンロードするため、ネットワーク接続が必要です。 このファイルは、光学メディアに書き込む必要があります。 * `*-disc1.iso*`: FreeBSD のインストールに必要となる、ソースおよび Ports Collection といったすべてのファイルが含まれています。 このファイルは、光学メディアに書き込む必要があります。 * `*-dvd1.iso*`: FreeBSD のインストールに必要となる、ソースおよび Ports Collection といったすべてのファイルが含まれています。 インターネットに接続することなく、メディアのみでシステムのインストールを完了できるように、良く使われるウィンドウマネージャおよびアプリケーションをインストールするためのバイナリ package も含まれています。 このファイルは、光学メディアに書き込む必要があります。 * `*-memstick.img*`: FreeBSD のインストールに必要となる、ソースおよび Ports Collection といったすべてのファイルが含まれています。 <> で説明されている手順に従って、このファイルを USB スティックに書き込んでください。 * `*-mini-memstick.img*`: `*-bootonly.iso*` と同じく、インストールファイルは含まれていないため、必要に応じてダウンロードする必要があります。 インストールを行う間、ネットワーク接続が必要です。 <> の説明に従って、USB スティックに書き込んでください。 イメージファイルをダウンロードしたら、同じディレクトリから少なくとも一つの _チェックサム_ ファイルをダウンロードしてください。 2 つの _チェックサム_ ファイルが利用可能です。 これのファイル名にはリリース番号とアーキテクチャ名がついています。 たとえば `CHECKSUM.SHA256-FreeBSD-13.1-RELEASE-amd64` および `CHECKSUM.SHA512-FreeBSD-13.1-RELEASE-amd64` という名前がつけられます。 どちらかの (もしくは両方の) ファイルをダウンロードしたら、イメージファイルの _チェックサム_ を計算し、 _チェックサム_ ファイルに示されている値と比較してください。 計算した _チェックサム_ は、2 つの異なるアルゴリズム (SHA256 および SHA512) に対応する適切なファイルと比較してください。 FreeBSD では、_チェックサム_ のために man:sha256[1] および man:sha512[1] を提供しています。 他のオペレーティングシステムでも同じようなプログラムを利用できます。 FreeBSD での _チェックサム_ の検証は、以下のように man:sha256sum[1] (または man:sha512sum[1]) を使用して自動的に行うことができます。 [source,shell] .... % sha256sum -c CHECKSUM.SHA256-FreeBSD-13.1-RELEASE-amd64 FreeBSD-13.1-RELEASE-amd64-dvd1.iso FreeBSD-13.1-RELEASE-amd64-dvd1.iso: OK .... チェックサムは完全に一致している必要があります。 もしチェックサムが一致しなければ、 イメージファイルが壊れている可能性があるので、もう一度ダウンロードしてください。 [[bsdinstall-usb]] ==== イメージファイルを USB に書き込む `\*memstick.img` ファイルは、完全なメモリスティックの内容の _イメージ_ です。 これは、通常のファイルのように対象のデバイスにコピーすることは _できません_。 USB スティックへ `*.img` を書き込むためのアプリケーションは複数あります。 この節ではこのうちの二つのユーティリティについて説明します。 [IMPORTANT] ==== 先に進む前に、USB スティックに存在する重要なデータをバックアップしてください。 以下の手順を実行すると、 スティックに存在するデータは削除されます。 ==== [[bsdinstall-usb-dd]] [.procedure] ==== *Procedure. `dd` を使ってイメージを書き込む* + [WARNING] ====== この例では、イメージの書き込み先のターゲットデバイスとして、`/dev/da0` が使われています。 ここで使われるコマンドは、 指定したターゲットデバイスに存在しているデータを破壊してしまうので、 正しいデバイスが指定されていることに *細心の注意を払ってください*。 ====== . man:dd[1] コマンドユーティリティは、 BSD, Linux(R), および Mac OS(R) システムで利用できます。 `dd` を使ってイメージを焼くには、 USB スティックを挿入して、 デバイス名を確定してください。 その後、ダウンロードしたインストールファイルおよび、 USB スティックのデバイス名を指定してください。 この例では、amd64 インストールイメージを FreeBSD システムの最初の USB デバイスに書き込みます。 + [source,shell] .... # dd if=FreeBSD-13.0-RELEASE-amd64-memstick.img of=/dev/da0 bs=1M conv=sync .... + もし上記のコマンドに失敗するようでしたら、USB スティックがマウントされているかどうか、デバイス名が (パーティションではなく) ディスクに対して指定されていることを確認してください。 + オペレーティングシステムによっては、このコマンドを man:sudo[8] で実行することが求められる場合があります。 man:dd[1] の書式は、プラットフォームによって少し変わります。 たとえば Mac OS(R) では、小文字の `bs=1m` を使う必要があります。 Linux(R) のようなシステムでは、書き込みをバッファします。 すべての書き込みを完了させるには、man:sync[8] を使用してください。 ==== [.procedure] ==== *Procedure. Windows(R) を使ってイメージを書き込む* + [WARNING] ====== 適切なドライブレターを出力先に設定していることを十分に確認してください。 さもなければ、現在あるデータは上書きされ、 破壊されてしまうでしょう。 ====== . *Image Writer for Windows(R) を入手する* + Image Writer for Windows(R) は、 イメージファイルをメモリスティックに正しく書き込むことのできるフリーのアプリケーションです。 link:https://sourceforge.net/projects/win32diskimager/[win32diskimager ホームページ] からダウンロードして、フォルダに展開してください。 . イメージライタを使ってイメージを書き込む + Win32DiskImager アイコンをダブルクリックして、プログラムを起動してください。 `Device` の下に表示されるデバイスレターが、 メモリスティックのドライブであることを確認してください。 フォルダのアイコンをクリックして、 メモリスティックに書き込むイメージファイルを選択します。 btn:[Save] をクリックして、 イメージファイルの名前を確定してください。 すべてが正しく行われたかどうか、また、 他のウィンドウでメモリスティックのフォルダが開かれていないことを確認してください。 準備ができたら、btn:[Write] をクリックして、 メモリスティックにイメージファイルを書き込んでください。 ==== [[bsdinstall-start]] == インストールの開始 [IMPORTANT] ==== デフォルトでは、次のメッセージが表示されるまで インストーラはディスクに何の変更も加えません。 [.programlisting] .... Your changes will now be written to disk. If you have chosen to overwrite existing data, it will be PERMANENTLY ERASED. Are you sure you want to commit your changes? .... この警告の前であれば、いつでもインストールを中断できます。 もし、何かを間違って設定してしまったことが心配ならば、 最後の警告の前に単にコンピュータをオフにしてください。 システムのハードディスクを変更せずに済みます。 ==== この章では、<> で説明されている手順によって準備されたインストールメディアから、システムを起動する方法について説明します。 起動可能な USB スティックを使用する場合には、コンピュータを立ち上げる前に、USB スティックを挿入してください。 CD もしくは DVD から起動する場合には、コンピュータを立ち上げ、すぐにメディアを挿入してください。 挿入したメディアからシステムを起動するように設定する方法は、アーキテクチャ毎に異なります。 [[bsdinstall-view-probe]] === FreeBSD ブートメニュー インストールメディアからシステムが起動すると、 以下のようなメニューが表示されます。 [[bsdinstall-newboot-loader-menu]] .FreeBSD ブートローダメニュー image::bsdinstall-newboot-loader-menu.png[FreeBSD ブートローダメニュー] デフォルトでは、メニューは、FreeBSD インストーラが起動するまで (FreeBSD がインストールされているシステムでは、FreeBSD が起動するまで)、 ユーザからの入力を 10 秒間受け付けます。 タイマーを停止してオプションを確認には、 kbd:[Space] を押してください。オプションを選択するには、 ハイライトされている番号、文字、もしくはキーを押してください。 以下のオプションが利用可能です。 * `Boot Multi User`: FreeBSD の起動プロセスを続けます。 ブートタイマが停止しているのであれば kbd:[1]、 大文字もしくは小文字の kbd:[B] または、 kbd:[Enter] を押してください。 * `Boot Single User`: このモードは、すでにインストールされている FreeBSD を修復するために利用できます。 シングルユーザモードについては、 crossref:boot[boot-singleuser,「シングルユーザモード」] で説明されています。 kbd:[2] もしくは、小文字もしくは、大文字の kbd:[S] を押すとこのモードに入ることができます。 * `Escape to loader prompt`: 制限された低レベルのコマンドのみが利用可能な修復用プロンプトでシステムを起動します。 このプロンプトについては、 crossref:boot[boot-loader,「起動ステージ 3」] で説明されています。 kbd:[3] または kbd:[Esc] を押すとこのプロンプトで起動します。 * `Reboot`: システムを再起動します。 * `Cons`: `video`, `serial`, `Dual (serial primary)` または `Dual (Video primary)` でインストールを続けます。 * `Kernel`: 別のカーネルを読み込みます。 * `Boot Options`: <> で示されるメニューを開きます。 [[bsdinstall-boot-options-menu]] .FreeBSD ブートオプションメニュー image::bsdinstall-boot-options-menu.png[サポートされているブートオプションのメニュー] この起動オプションメニューは、 2 つのセクションから構成されています。 最初のセクションは、メインのブートメニューに戻ったり、 オプションをデフォルト値に戻すために利用できます。 次のセクションでは、変更可能なオプションついて、 選択されている番号や文字を、`On` や `Off` に変更できます。 システムは、これらのオプションが変更されない限り、 常に変更されたオプションで起動します。 このメニューで変更可能なオプションは以下の通りです。 * `ACPI Support`: 起動中にシステムが固まるようでしたら、このオプションを `Off` にしてください。 * `Safe Mode`: 上記のオプションの対応を行ってもシステムが起動時に固まるようでしたら、 `ACPI Support` を `Off` にし、このオプションを `On` に設定してください。 * `Single User`: シングルユーザモードでインストールされている FreeBSD を修復には、 `On` にしてください。 シングルユーザモードについては、 crossref:boot[boot-singleuser,「シングルユーザモード」] で説明されています。 問題が修正された後は、`Off` に戻してください。 * `Verbose`: 起動プロセスの表示をより詳細に表示したい場合には、 このオプションを `On` にしてください。 ハードウェアの問題を解決する際には有効です。 設定が終わったら、 kbd:[1] または kbd:[Backspace] を押してメインブートメニューに戻り、 kbd:[Enter] を押して FreeBSD の起動を続けてください。 FreeBSD がハードウェアの検出を行い、 インストールプログラムをロードしている間、 ブートメッセージが表示されます。 起動後、<> が表示されます。 [[bsdinstall-choose-mode]] .ウェルカムメニュー image::bsdinstall-choose-mode.png[FreeBSD インストーラのウェルカムメニュー] kbd:[Enter] を押して、デフォルトの btn:[Install] を選択すると、インストール作業が始まります。 この章の残りの部分では、このインストーラの使い方について説明します。 メニュー項目を選択するには、左右の矢印キーを使ったり、色付けされた文字を使ってください。 btn:[Shell] を選択すると、インストールの前に、FreeBSD シェルからコマンドラインユーティリティでディスクを準備できます。 btn:[Live CD] オプションを選択すると、 インストール前に FreeBSD を試すことができます。 live 版については、<> で説明されています。 [TIP] ==== ハードウェアの検出などのブートメッセージを見るには 大文字または小文字の kbd:[S] を押してください。 その後、kbd:[Enter] を押して、 シェルにアクセスしてください。 シェルプロンプトから、`more /var/run/dmesg.boot` を入力してください。 メッセージのスクロールには、スペースバーを使ってってください。 終わったら、`exit` を押して、 ウェルカムメニューに戻ってください。 ==== [[using-bsdinstall]] == bsdinstall の使用 この章では、 bsdinstall メニューの順番と、 システムがインストールされる前に、 尋ねられる情報の形式について紹介します。 メニューオプションの選択には、矢印キーを使い、 メニューの項目の選択や解除する場合には、kbd:[Space] キーを使ってください。 設定が終わったら、kbd:[Enter] を押して設定を保存し、次の画面へ移動してください。 [[bsdinstall-keymap]] === キー配列メニューの選択 このプロセスが始まると、 bsdinstall は <> のようにキーマップファイルを読み込みます。 [[bsdinstall-keymap-loading]] .キーマップの読み込み image::bsdinstall-keymap-loading.png[キーマップの読み込み] キーマップが読み込まれると、bsdinstall は <> を表示します。 上下の矢印キーを使って、システムのキーボードに最も近いキーマップを選択してください。 選択を保存するには、kbd:[Enter] キーを押してください。 [[bsdinstall-keymap-10]] .キーマップ選択メニュー image::bsdinstall-keymap-10.png[キーマップ選択メニュー。対応しているすべてのキーボードが表示されます。] [NOTE] ==== kbd:[Esc] を押すと、メニューは終了し、 デフォルトのキーボードマップを使うようになります。 どのキーボードマップを選べばよいかわからない場合は、 [.guimenuitem]#United States of America ISO-8859-1# を選ぶとよいでしょう。 ==== デフォルトとは異なるキーマップを選択した場合には、 <> でキーマップのテストを行い、 インストールを先に進む前に正しく動くかどうかを確認できます。 [[bsdinstall-keymap-testing]] .キーマップテストメニュー image::bsdinstall-keymap-testing.png[キーマップテストメニュー] [[bsdinstall-hostname]] === ホスト名の設定 次の bsdinstall のメニューでは、 新しくインストールするシステムに与えるホスト名を設定します。 [[bsdinstall-config-hostname]] .ホスト名の設定 image::bsdinstall-config-hostname.png[ホスト名の設定] ネットワーク上でユニークなホスト名を入力してください。 入力するホスト名は、`machine3.example.com` のように完全修飾のホスト名で入力してください。 [[bsdinstall-components]] === インストールするコンポーネントの設定 次に、 bsdinstall は、インストールするオプションのコンポーネントの選択に移ります。 [[bsdinstall-config-components]] .インストールするコンポーネントの設定 image::bsdinstall-config-components.png[base-dbg, lib32, ports などのインストールするコンポーネントの設定] どのコンポーネントをインストールするかは、 システムの用途と用意されているディスク容量に依存します。 _base system_ として知られている FreeBSD カーネルとユーザランドは、 常にインストールされます。 アーキテクチャによっては、表示されないコンポーネントもあります。 * `base-dbg` - デバッグシンボルを有効にしたベースツール (cat, ls や他の多くのツール)。 * `kernel-dbg` - デバッグシンボルを有効にしたカーネルおよびモジュール。 * `lib32-dbg` - 32-bit のアプリケーションを 64-bit 版の FreeBSD で実行する際に必要となる互換ライブラリ (デバッグシンボルは有効)。 * `lib32` - 32-bit のアプリケーションを 64-bit 版の FreeBSD で実行する際に必要となる互換ライブラリ。 * `ports` - FreeBSD Ports Collection は、 サードパーティ製ソフトウェアパッケージのダウンロード、 コンパイル、 インストールを自動化するように設計されたファイルの集まりです。 Ports Collection の使い方については、 crossref:ports[ports,アプリケーションのインストール - packages と ports] で説明します。 + [WARNING] ==== インストールプログラムは、システムのディスクに十分な空き容量があるかどうかを確認しないので、ハードディスクに十分な容量があるときだけ、このオプションを選択するしてください。 FreeBSD Ports Collection が必要とする容量は、約 {ports-size} です。 ==== * `src` - FreeBSD のカーネルおよびユーザランド両方の完全なソースコードです。 ほとんどのアプリケーションは必要としませんが、 デバイスドライバやカーネルモジュール、 Ports Collection のアプリケーションによってはコンパイル時に必要となります。 このソースは、FreeBSD そのものの開発に使うこともできます。 すべてのソースツリーをインストールするには 1 GB のディスク容量を必要とします。 また、FreeBSD システム全体のコンパイルには、 さらに 5 GB の容量が必要です。 * `tests` - FreeBSD テストスイート。 [[bsdinstall-netinstall]] === ネットワークからのインストール <> で示されているメニューは、`-bootonly.iso` または `-mini-memstick.img` からインストールする時のみ表示されます。 これらのインストールメディアはインストールファイルを含んでいません。 このメニューは、 ネットワーク経由でインストールファイルをダウンロードする必要があるため、ネットワークインタフェースを最初に設定する必要があることを示しています。 このメニューがインストールのプロセスで表示された場合には、 <> に書かれている手順に従ってください。 [[bsdinstall-netinstall-notify]] .ネットワークからのインストール image::bsdinstall-netinstall-files.png[インストールするコンポーネントが見つからないため、ネットワークからダウンロードを試みることを示しています。] [[bsdinstall-partitioning]] == ディスク領域の割り当て 次のメニューでは、ディスク領域を割り当てる方法を選択します。 [[bsdinstall-zfs-partmenu]] .パーティション分割の選択 image::bsdinstall-zfs-partmenu.png[パーティションのオプションを示しています。例: マニュアル、シェルなど] bsdinstall では、ディスク領域の割り当てのために 4 つの方法が用意されています。 * `Auto (ZFS)` によるパーティションの分割では、root-on-ZFS システムを構築します。GELI 暗号に対応した _ブート環境_ を構築することもできます。 * `Auto (UFS)` によるパーティションの分割では、 `UFS` ファイルシステムを使ってディスクパーティションを自動的に分割します。 * `Manual` によるパーティションの分割は、 高度な知識を持つユーザ向けで、 メニューオプションからカスタマイズしたパーティションを作成できます。 * `Shell` では、シェルプロンプトを起動し、 高度な知識を持つユーザが、 man:gpart[8], man:fdisk[8], man:bsdlabel[8] のようなコマンドラインのプログラムを実行して、 カスタマイズしたパーティションを作成できます。 この章では、 ディスクパーティションをレイアウトする際の検討事項を説明します。 その後、各パーティションの作成方法について説明します。 [[configtuning-initial]] === パーティションレイアウトのデザイン デフォルトのファイルシステムのパーティションレイアウトは、システム全体をひとつのファイルシステムで構成します。 十分なディスク容量または複数のディスクを用いる環境において `UFS` を用いる場合は、複数のファイルシステムを検討する価値があります。 ファイルシステムのレイアウトを行う際には、 ハードディスクの外周部は内周部よりもデータ転送が速いということを思い出してください。 これに従えば、 小さくて激しくアクセスされるファイルシステムを外周付近に、`/usr` のようなより大きなパーティションはディスクの内側に配置すべきでしょう。 そのため、パーティションを作成する際には、`/`、 スワップ、`/var`, `/usr` のような順で作ってゆくのがよいでしょう。 `/var` パーティションのサイズは、あなたが計算機をどのように使おうとしているかを反映します。 このパーティションには主としてメールボックスやログファイル、 プリンタスプールが置かれます。 メールボックスとログファイルは、 システムのユーザ数やログの保持期間に依存して予期し得ぬサイズにまで成長する可能性があります。 概して、ほとんどのユーザは、`/var` にギガバイト以上の空き容量を必要とはしないでしょう。 [NOTE] ==== 時には、たくさんのディスク容量が `/var/tmp` に必要になるときがあります。 新しいソフトウェアをインストールする際、package のツールは、package の一時的なコピーを `/var/tmp` 以下に展開します。 `/var/tmp` 以下に十分なディスク容量が用意されていないと、Firefox や LibreOffice のような、大きなソフトウェア package のインストールが、困難になることがあります。 ==== `/usr` パーティションには、FreeBSD Ports Collection およびシステムのソースコードを含む、システムをサポートするのに必要な多くのファイル群が置かれます。 このパーティションには、少なくとも 2 ギガバイトの容量を用意することをおすすめします。 また、デフォルトではユーザのホームディレクトリは `/usr/home` に置かれますが、他のパーティションに置くこともできます。 デフォルトでは、`/home` は `/usr/home` へのシンボリックリンクです。 パーティションのサイズを考える時、 必要量を念頭に置いてください。 別のパーティションには潤沢にスペースが余っているのに、 あるパーティションでスペースが足らないままというのは、 フラストレーションがたまるものです。 経験からスワップパーティションのサイズは物理メモリ (RAM) の 2 倍というのが一般的です。 RAM の少ないシステムでは、もっとスワップを増した方が性能がよくなります (大きなメモリの設定では少なくて済みます)。 スワップが少なすぎる設定は、あなたが後にメモリを増設したときに問題を起すばかりではなく、VM ページスキャニングコードの能率を落します。 複数の SCSI ディスクや異なるコントローラで操作される複数の IDE ディスクを持つ大規模なシステムでは、それぞれのドライブ (4 台まで) にスワップを設定することを推奨します。 各ドライブのスワップパーティションはほぼ同一サイズであるべきです。 カーネルは任意のサイズを扱うことができますが、内部のデータ構造は最大のスワップパーティションの 4 倍に調節されます。 スワップパーティションをほぼ同一のサイズにしておくことで、カーネルはスワップスペースを最適なかたちでディスクをまたいでストライプさせることができます。 多くのスワップサイズを用意すると、全体のスワップに関するカーネルの警告メッセージがが表示されることがあります。 警告メッセージに示される手順に従って、スワップの割り当てのために許容されるメモリ量を増やすことで、この制限容量を増やすことができます。 あなたが通常スワップをたくさん使わないとしても、 プログラムが暴走しても再起動させられる前に回復することが容易になります。 システムを適切にパーティション化することで、小さいが書き込みの激しいパーティションによって引き起こされるフラグメント化を、読み出し専門のパーティションにまで波及させずにすみます。 また、書き込みの激しいパーティションをディスクの周辺部に配置することで、I/O パフォーマンスを増大させることができます。 大きなパーティション内の I/O パフォーマンスもまた必要とされているでしょうが、ディスク周辺部へ移動させたとしても、`/var` を周辺部に移動させることによって大きな効果が得られたのとは対照的に、意味のあるパフォーマンスの増加は見込めないでしょう。 [[bsdinstall-part-guided]] === UFS を用いた Guided によるパーティションの分割 この方法を選択すると、 メニューには利用可能なディスクが表示されます。 複数のディスクが接続されている場合には、 FreeBSD をインストールするディスクを選択してください。 [[bsdinstall-part-guided-disk]] .複数のディスクから選択する image::bsdinstall-part-guided-disk.png[FreeBSD をインストールすることのできるディスクの一覧が表示されます] ディスクを選択したら、次のメニューでは、 ディスクのすべてにインストールを行うか、 または空き容量にパーティションを作成してインストールを行うかを設定します。 btn:[Entire Disk] を選択すると、 一般的なパーティションレイアウトが自動的に作成されます。 btn:[Partition] を選択すると、 ディスクの使用していない領域にパーティションレイアウトを作成します。 [[bsdinstall-part-entire-part]] .Entire Disk または Partition の選択 image::bsdinstall-part-entire-part.png[使用するディスク上で利用可能な領域をすべて使うか、もしくはパーティションを作成するかを選択するメニュー] btn:[Entire Disk] オプションを選択すると、bsdinstall はディスクの内容が消去されることを確認するダイアログを表示します。 [[bsdinstall-ufs-warning]] .確認 image::bsdinstall-ufs-warning.png[ユーザに対しディスク上のすべてのデータが消去されることの確認メニュー] 次のメニューでは、 利用可能なパーティションスキームタイプの一覧が表示されます。 amd64 コンピュータでは、通常 GPT が最も適切な選択となります。 GPT に対応していないような古いコンピュータでは、MBR を使う必要があります。 他のパーティションスキームは、使うことがまれであったり、古いコンピュータで用いられるものです。 <> に詳細があります。 [[bsdinstall-ufs-scheme]] .パーティションスキームの選択 image::bsdinstall-part-manual-partscheme.png[ユーザに対して選択可能なさまざまなパーティションタイプを示し、そのうちのどれかを選択するためのメニュー] パーティションのレイアウトを作成したら、インストールの条件を満たしているかどうかを深く確認してください。 btn:[Revert] を選択すると、パーティションをオリジナルの値にリセットします。 また、btn:[Auto] を選択すると、FreeBSD パーティションを自動的に作成します。 パーティションを手動で作成、変更、削除することもできます。 正しくパーティションを作成出来たら、 btn:[Finish] を選択し、インストールを進めてください。 [[bsdinstall-part-review]] .作成されたパーティションの確認 image::bsdinstall-part-review.png[作成されたパーティションを表示するメニュー] ディスクを一度設定すると、次のメニューは、選択したハードドライブをフォーマットする前に、設定を変更できる最後のチャンスです。 もし変更が必要であれば、 btn:[Back] を選択してメインのパーティションエディタまで戻ってください。 btn:[Revert & Exit] を選択すると、ハードドライブへの変更なしにインストールを終了します。 インストールプロセスを開始するには、 btn:[Commit] を選択してしてください。 [[bsdinstall-ufs-final-confirmation]] .最後の確認 image::bsdinstall-final-confirmation.png[ユーザに対してインストールを開始すると、すべての変更がディスクに書き込まれ、ディスクに存在するデータは完全に削除されることを確認するメニュー] <> に進んで、インストールプロセスを続けてください。 [[bsdinstall-part-manual]] === Manual によるパーティションの分割 この方法を選択すると、 パーティションエディタが起動します。 [[bsdinstall-part-manual-create]] .Manual によるパーティションの分割 image::bsdinstall-part-manual-create.png[パーティションエディタを表示しているメニュー] インストール先のドライブ (この例では `ada0`) を選び、 btn:[Create] を選択すると、 利用可能なパーティションスキームの一覧が表示されます。 [[bsdinstall-part-manual-partscheme]] .手動でパーティションを作成する image::bsdinstall-part-manual-partscheme.png[選択可能なパーティションスキームを表示しているメニュー] amd64 コンピュータでは、通常 GPT が最も適切な選択となります。 GPT に対応していないような古いコンピュータでは、 MBR を使う必要があります。 他のパーティションスキームは、使うことがまれであったり、 古いコンピュータで用いられるものです。 [[partition-schemes]] .パーティションスキーム [cols="25h,~", frame="none", options="header"] |=== <| 省略形 <| 説明 |APM |PowerPC(R) で使われている Apple Partition Map |BSD |MBR を用いない BSD ラベル。 BSD 以外のディスクユーティリティは認識しないため、しばしば _dangerously dedicated mode_ と呼ばれます。 |GPT |link:https://en.wikipedia.org/wiki/GUID_Partition_Table[GUID Partition Table] |MBR |link:https://en.wikipedia.org/wiki/Master_boot_record[Master Boot Record] |=== パーティションスキームを選択して作成した後で、 もう一度 btn:[Create] を選択すると、 パーティションが作成されます。kbd:[Tab] キーを使ってカーソルをフィールド間で移動できます。 [[bsdinstall-part-manual-addpart]] .手動でパーティションを作成する image::bsdinstall-part-manual-addpart.png[追加するパーティションのタイプ、サイズ、マウントポイントおよびラベル情報を入力するためのメニュー] 標準の FreeBSD GPT のインストールでは、UFS または ZFS を含む少なくとも 3 つのパーティションが使われます。 * `freebsd-boot` または `efi` - FreeBSD ブートコードを含んでいます。 * `freebsd-ufs` - FreeBSD UFS ファイルシステム。 * `freebsd-zfs` - FreeBSD ZFS ファイルシステム。 詳細については、 link:https://docs.freebsd.org/en/books/handbook/zfs/#zfs[The Z File System (ZFS)] をご覧ください。 * `freebsd-swap` - FreeBSD スワップ空間。 利用可能な GPT パーティションタイプについては、man:gpart[8] をご覧ください。 複数のファイルシステムのパーティションを作成できます。 人によっては `/`, `/var`, `/tmp` および `/usr` にパーティションを分割する伝統的なレイアウトが好まれます。 [TIP] ==== 十分なメモリを搭載したシステムでは、メモリベースのファイルシステム (man:tmpfs[5]) を `/tmp` として後で追加できます。 ==== レイアウトの例が <> にあります。 `Size` には、 _K_ (キロバイト)、 _M_ (メガバイト)、 _G_ (ギガバイト) といった通常の省略形を使用出来ます。 [TIP] ==== セクタを適切に配置することで、 最良のパフォーマンスを得ることができます。 また、パーティションサイズを 4K バイトの偶数倍にすると、 512 バイトまたは 4K バイトのセクタでドライブが配置しやすくなります。 一般的に、 4K の偶数倍の場所からパーティションが開始するように設定する簡単な方法は、 1M または 1G の偶数倍のパーティションサイズを用いることです。 ただし、例外があります。 _freebsd-boot_ パーティションは、 ブートコードの制限により 512K 以下である必要があります。 ==== ファイルシステムを持つパーティションでは、`マウントポイント` が必要となります。 1 つの UFS パーティションだけを作成したのであれば、マウントポイントは `/` となります。 `Label` は作成したパーティションを認識するための名前です。 ドライブ名や番号は、ドライブが別のコントローラやポートに接続されると変わることがありますが、パーティションラベルは変わりません。 `/etc/fstab` のようなファイルの中で、ドライブ名やパーティション番号ではなく、ラベルを参照することにより、システムがハードウェアの変更に対して、より寛容になります。 GPT ラベルは、ディスクが接続されると `/dev/gpt/` に現れます。 他のパーティションスキームでは別のラベルとなり、`/dev/` 以下の異なるディレクトリにラベルが現れます。 [TIP] ==== 名前の衝突を避けるため、 各パーティションには、一意的な名前使ってください。 コンピュータ名、使用、位置情報を表す単語をラベルに追加できます。 たとえば、`lab` という名前のコンピュータの UFS の root パーティションには、 `labroot` または `rootfs-lab` といった名前を使ってください。 ==== [[bsdinstall-part-manual-splitfs]] .伝統的なファイルシステムのパーティションの作成 [example] ==== 伝統的なパーティションレイアウト (`/`, `/var`, `/tmp` および `/usr` ディレクトリが各パーティションの別のファイルシステム) を作成するには、GPT パーティションスキームを作成し、その後、示されているようにパーティションを作成してください。 示されているパーティションサイズは 20G のディスク用です。 ディスクにより多くの容量があれば、swap または `/var` パーティションを大きく取ると良いでしょう。 ここで示されているラベルには、`example` を意味する `ex` が付けられていますが、実際には上で説明したように、これとは別のユニークなラベルをつけてください。 FreeBSD の `gptboot` は、 デフォルトでは最初に見つかった UFS パーティションが、 `/` パーティションであることを前提としています。 [.informaltable] [cols="1,1,1,1", frame="none", options="header"] |===== | パーティションタイプ | サイズ | マウントポイント | ラベル |`freebsd-boot` |`512K` | | |`freebsd-ufs` |`2G` |`/` |`exrootfs` |`freebsd-swap` |`4G` | |`exswap` |`freebsd-ufs` |`2G` |`/var` |`exvarfs` |`freebsd-ufs` |`1G` |`/tmp` |`extmpfs` |`freebsd-ufs` |デフォルト (ディスクの残りのすべての容量) |`/usr` |`exusrfs` |===== ==== カスタムパーティションを作成したら、 btn:[Finish] を選択して <> に進み、インストールを先に進めてください。 [[bsdinstall-part-zfs]] === Root-on-ZFS を用いた Guided によるパーティションの作成 このパーティションの分割モードは、 ディスクのすべての領域に対して機能するので、 ディスク上にあるすべての内容が消去されます。 メインの ZFS 設定メニューには、 プールの作成をコントロールする数多くのオプションが用意されています。 [[bsdinstall-zfs-menu]] .ZFS パーティションメニュー image::bsdinstall-zfs-menu.png[ZFS プールを設定するためのオプションを表示しているメニュー] このメニューのオプションは以下の通りです。 * `Install` - 選択したオプションでインストールを進めます。 * `Pool Type/Disks` - プールを構成する `Pool Type` およびディスクについて設定します。 現時点で ZFS の自動インストーラは、ストライプモードを除き、単一のトップレベルの仮想デバイスの作成のみに対応しています。 より複雑なプールを作成するには、 <> で説明されている方法で作成してください。 * `Rescan Devices` - 利用可能なディスクの一覧を再表示します。 * `Disk Info` - このメニューを使って各ディスクを調べることができます。 パーティションテーブルやそれ以外のデバイスモデルナンバーおよびシリアルナンバーといった情報も、可能であれば調べることができます。 * `Pool Name` - pool の名前を設定します。 デフォルトの名前は _zroot_ です。 * `Force 4K Sectors?` - 4K セクタを使用するようにします。 インストーラは、デフォルトで 4K の境界に整列するようにパーティションを自動的に作成し、 ZFS が 4K セクタを使用するようにします。 これは 512 バイトセクタのディスクでも安全で、 512 バイトのディスク上に作成されたプールが将来的に 4K セクタのディスクを追加できるようにしておくことには、 ストレージ容量の追加や壊れたディスクの交換時に恩恵があります。 有効にするか無効にするかを選択して kbd:[Enter] キーを押してください。 * `Encrypt Disks?` - GELI を使ってディスクを暗号化できます。ディスクの暗号化の詳細については、 link:https://docs.freebsd.org/en/books/handbook/disks/#disks-encrypting-geli[geli によるディスクの暗号化] をご覧ください。 kbd:[Enter] キーを押して、暗号化を有効にするか無効にするかを選択してください。 * `Partition Scheme` - パーティションスキームを選択します。 ほとんどの場合において、GPT が推奨されます。 別のスキームを選択する場合には、 kbd:[Enter] キーを押してください。 * `Swap Size` - スワップ容量を設定します。 * `Mirror Swap?` - スワップ領域をディスク間でミラー化するかどうかを設定します。 スワップ領域をミラー化すると、クラッシュダンプを取得できないので注意してください。 kbd:[Enter] キーを押して有効/無効を設定してください。 * `Encrypt Swap?` - スワップ領域の暗号化について設定します。 これはシステムの起動時に一時キーとともにスワップ領域を暗号化し、再起動時にキーは破棄されます。 kbd:[Enter] キーを押して有効/無効を設定してください。 詳細については、 link:https://docs.freebsd.org/en/books/handbook/disks/#swap-encrypting[swap 領域の暗号化] を参照してください。 kbd:[T] を選択して、`Pool Type` およびプールに対応するディスクを選択してください。 [[bsdinstall-zfs-vdev_type]] .ZFS プールタイプ image::bsdinstall-zfs-vdev_type.png[stripe, mirror, raidz1 などの仮想デバイスタイプを選択するメニュー] このメニューで選択可能な `Pool Type` は以下の通りです。 * `stripe` - ストライピングでは、 接続されているすべてのデバイスの最大容量を使用できます。 ただし、冗長性はありません。 一つのディスクが壊れるだけでプールにあるデータは失われてしまい、 取り返しがつきません。 * `mirror` - ミラーリングは各ディスク上にあるすべてのデータの完全なコピーを保存します。 ミラーリングでは、並列にすべてのディスクからデータを読むため、 読み込みのパフォーマンスが向上します。 書き込みのパフォーマンスは、 データが並列にすべてのディスクに書き込まれるため、遅くなります。 1 つを除くすべてのディスクが壊れることを許容します。 このオプションを選択するには、 少なくとも 2 つのディスクを必要とします。 * `raid10` - ストライピングミラー。 最も効率は良いですが、ストレージ容量は少なくなります。 偶数のディスクが必要で、 少なくとも 4 つのディスクが必要です。 * `raidz1` - シングルパリティの RAID。 1 台のディスクの故障に耐えられます。 少なくとも 3 つのディスクが必要です。 * `raidz2` - ダブルパリティの RAID。 同時に 2 台のディスクの故障に耐えられます。 少なくとも 4 つのディスクが必要です。 * `raidz3` - トリプルパリティの RAID。 同時に 3 台のディスクの故障に耐えられます。 少なくとも 5 つのディスクが必要です。 `Pool Type` を選択したら、 利用可能なディスクの一覧が表示されます。 その後、プールを構成するディスクを、1 つまたは複数選択してください。 十分なディスクが選択されているかどうかについて検証が行われます。 検証に失敗するようであれば、btn:[] を選択して、ディスクの一覧に戻ってください。 もしくは、 btn:[] を選択して `Pool Type` に戻ってください。 [[bsdinstall-zfs-disk_select]] .ディスクの選択 image::bsdinstall-zfs-disk_select.png[プールに追加するディスクを選択するメニュー] [[bsdinstall-zfs-vdev_invalid]] .無効な選択 image::bsdinstall-zfs-vdev_invalid.png[十分なディスクが選択されていないことを示しているメニュー] この一覧の中に抜けているディスクがある時や、 インストーラが立ち上がった後にディスクを接続した場合に、 最新の利用可能なディスクの一覧を見るには、 btn:[- Rescan Devices] を選択してください。 [[bsdinstall-zfs-rescan-devices]] .デバイスのリスキャン image::bsdinstall-zfs-rescan-devices.png[デバイスのリスキャン] アクシデントで間違ったディスクを削除してしまわないように、 btn:[- Disk Info] メニュー選択して、 各ディスクのパーティションテーブル、および、 デバイスモデル番号およびシリアル番号などのさまざまな情報を確認してください。 [[bsdinstall-zfs-disk_info]] .ディスクの解析 image::bsdinstall-zfs-disk_info.png[パーティションの情報を表示しているメニュー] kbd:[N] を選択して、 `Pool Name` を設定してください。 希望する名前を入力後、 btn:[] を選択して確定するか、 btn:[] を押して、 デフォルト名のままでメインメニューに戻ってください。 [[bsdinstall-zfs-pool-name]] .Pool Name image::bsdinstall-zfs-pool-name.png[プールの名前を入力するメニュー] kbd:[S] を選択してスワップの容量を設定してください。 必要なスワップ容量を入力し、 btn:[] を押して確定するか、 もしくは btn:[] を押して、 デフォルトの容量のまま、メインメニューに戻ってください。 [[bsdinstall-zfs-swap-amount]] .Swap 容量 image::bsdinstall-zfs-swap-amount.png[スワップメモリの容量を入力するメニュー] すべてのオプションに希望する値を設定したら、メニューの上部にある btn:[>>> Install] オプションを選択してください。 インストーラは、最終確認として ZFS プールを作成するために選択したドライブの内容が削除されることをキャンセルできる最後の機会を提供してくれます。 [[bsdinstall-zfs-warning]] .最終確認 image::bsdinstall-zfs-warning.png[データが削除されることをユーザに確認するメニュー] GELI ディスク暗号化を有効にしていたら、ディスクを暗号化するために用いるパスフレーズを 2 度求められます。 その後、暗号の初期化が開始します。 [[bsdinstall-zfs-geli_password]] .ディスク暗号化パスワード image::bsdinstall-zfs-geli_password.png[デバイスを暗号化するためのパスワードを入力するメニュー] [[bsdinstall-zfs-init-encription]] .暗号の初期化 image::bsdinstall-zfs-init-encription.png[暗号の初期化が行われていることを示すメニュー] その後のインストールの過程は、通常通りに進みます。 インストールを進めるには、 <> に進んでください。 [[bsdinstall-part-shell]] === シェルモードによるパーティションの作成 高度なインストールを行う上で、bsdinstall が提供するパーティション分割のメニューは柔軟性にかけることがあります。 手動でドライブの分割、ファイルシステムの作成、`/tmp/bsdinstall_etc/fstab` の作成、そして `/mnt` 以下へのファイルシステムのマウントを行うには、パーティションメニューで btn:[Shell] オプションを選択してください。 このオプションは高度な技術を持つユーザ向けです。 以上を実行したら、`exit` を実行して bsdinstall に戻り、インストールを続けてください。 [[bsdinstall-fetching-distribution]] == 配布ファイルのダウンロード インストールにかかる時間は、どのディストリビューションを選んだか、 どのインストールメディアを使ったか、 そしてコンピュータの速度にも依存します。 進行状況を表すメッセージが逐次表示されます。 まず最初に、インストーラは選択されているディスクをフォーマットし、 パーティションを初期化します。 `bootonly media` または `mini memstick` メディアを用いたインストールでは、 選択されたコンポーネントがダウンロードされます。 [[bsdinstall-distfile-fetching]] .配布ファイルのダウンロード image::bsdinstall-distfile-fetching.png[各コンポ―テントのダウンロード状況を表示しているメニュー] 次に、ダウンロードの際にエラーが含まれなかったか、 インストールメディアからの読み取り中に読み間違いが起きなかったかどうか等、 配布ファイルの完全性の検証が行われます。 [[bsdinstall-distfile-verify]] .配布ファイルの検証 image::bsdinstall-distfile-verifying.png[各コンポーネントの検証状況を表示しているメニュー] 最後に、検証された配布ファイルがディスクへ展開されます。 [[bsdinstall-distfile-extract]] .配布ファイルの展開 image::bsdinstall-distfile-extracting.png[配布ファイルの展開状況を表示しているメニュー] 必要な配布ファイルがすべて展開されると、 bsdinstall は、 インストール後の設定画面を表示します。 利用可能なインストール後のオプションについては次の章で説明します。 [[bsdinstall-post]] == ネットワークインターフェース、アカウント、タイムゾーン、 サービスおよびセキュリティオプションの設定 [[bsdinstall-post-root]] === `root` パスワードの設定 最初に `root` のパスワードを設定する必要があります。 パスワードを入力している際には、入力している文字は画面に表示されません。 入力ミスを防ぐため、パスワードは 2 回入力する必要があります。 [[bsdinstall-post-set-root-passwd]] .`root` パスワードの設定 image::bsdinstall-post-root-passwd.png[root ユーザのパスワードを入力するメニュー] [[bsdinstall-config-network-dev]] === ネットワークインタフェースの設定 次に、コンピュータが認識したすべてのネットワークインタフェースが表示されます。 設定するネットワークインタフェースを選んでください。 [[bsdinstall-configure-net-interface]] .イーサネットインタフェースの選択 image::bsdinstall-configure-network-interface.png[設定を行うネットワークインタフェースを選択するメニュー] イーサネットインタフェースを選択すると、<> で表示されるメニューが表示されます。 ワイヤレスネットワークを選択すると、システムはワイヤレスアクセスポイントをスキャンします。 [[bsdinstall-wireless-scan]] .ワイヤレスアクセスポイントのスキャン image::bsdinstall-configure-wireless-scan.png[ワイヤレスネットワークのスキャンの進捗を表示しているメニュー] ワイヤレスネットワークは Service Set Identifier (SSID) によって識別されます。 SSID は、それぞれのネットワークに与えられる、短く、一意的な名前です。 スキャンで見つかった SSID は、そのネットワークで利用できる暗号化のタイプの説明とともに一覧で表示されます。 もし、期待した SSID が一覧に表示されていなければ、btn:[Rescan] を選択してもう一度スキャンしてください。 それでもなお期待したネットワークが表示されなければ、接続のためのアンテナに問題がないかを確認したり、コンピュータをアクセスポイントの近くに移動してみてください。 その後もう一度スキャンしてください。 [[bsdinstall-wireless-accesspoints]] .ワイヤレスネットワークの選択 image::bsdinstall-configure-wireless-accesspoints.png[接続できるワイヤレスネットワークが表示されているメニュー] 次に、ワイヤレスネットワークに接続するための暗号情報を入力してください。 WEP のような古い暗号の安全性は低いので、WPA2 暗号が強く推奨されます。 WPA2 を使用してるネットワークでは、Pre-Shared Key (PSK) と呼ばれるパスワードを入力してください。 セキュリティ上の観点から、入力ボックスに入力した文字はアスタリスクで表示されます。 [[bsdinstall-wireless-wpa2]] .WPA2 のセットアップ image::bsdinstall-configure-wireless-wpa2setup.png[ワイヤレスネットワークのパスワードを入力するメニュー] 次に、イーサネットもしくはワイヤレスインタフェースに対して、IPv4 を設定するかどうかを選択します。 [[bsdinstall-configure-net-ipv4]] .IPv4 ネットワークの選択 image::bsdinstall-configure-network-interface-ipv4.png[選択したネットワークインターフェースに対して IPv4 の設定を行うかどうかを確認するメニュー] IPv4 の設定方法は 2 通りあります。 _DHCP_ はネットワークインタフェースを自動的に適切に設定する方法で、DHCP サーバのあるネットワークでは使用すべきです。 DHCP を利用できない環境では、静的な設定として、ネットワークのアドレス情報を手動で入力する必要があります。 [NOTE] ==== 適当なネットワーク情報を入力しても動かないので、DHCP サーバが利用できなのであれば、ネットワーク管理者またはサービスプロバイダから <> に示されている情報を入手してください。 ==== DHCP サーバを利用できるのであれば、次のメニューで btn:[Yes] を選択して、ネットワークインタフェースの設定を自動的に行ってください。 DHCP サーバを検索し、システムに対するアドレス情報を入手する間、インストーラは少しの間停止しているように表示されます。 [[bsdinstall-net-ipv4-dhcp]] .IPv4 DHCP 設定の選択 image::bsdinstall-configure-network-interface-ipv4-dhcp.png[選択したインターフェースに対して DHCP で設定を行うかを選択するメニュー] DHCP サーバを利用できない環境では、btn:[No] を選択し、新しく表示されるメニューにおいて以下のようなアドレス情報を入力してください。 [[bsdinstall-net-ipv4-static]] .静的な IPv4 の設定 image::bsdinstall-configure-network-interface-ipv4-static.png[IPv4 ネットワークを設定するメニュー] [[bsdinstall-collect-network-information]] * `IP Address` - コンピュータに与える IPv4 アドレスです。 このアドレスは一意的である必要があるため、ローカルネットワーク上の他のデバイスですでに使われているアドレスは使えません。 * `Subnet Mask` - ネットワークのサブネットマスクです。 * `Default Router` - このネットワークのデフォルトゲートウェイの IP アドレスです。 次の画面では、インタフェースを IPv6 で設定すべきかを選択します。 IPv6 が利用でき、希望するのであれば、 btn:[Yes] を選択してください。 [[bsdinstall-net-ipv6]] .IPv6 ネットワークの選択 image::bsdinstall-configure-network-interface-ipv6.png[選択したネットワークインターフェースに対して IPv6 の設定を行うかどうかを確認するメニュー] IPv6 の設定に関しても 2 つの方法があります。 StateLess Address AutoConfiguration (SLAAC) は、ローカルルータから適切なネットワーク設定情報を入手するように、自動的にリクエストします。 詳細については http://tools.ietf.org/html/rfc4862[rfc4862] を参照してください。 静的な設定では、ネットワーク情報を手動で入力する必要があります。 IPv6 ルータを利用できるのであれば、次のメニューで btn:[Yes] を選択し、ネットワークインタフェースの設定を自動的に行ってください。 インストーラはルータを見つけ出し、システムに対するアドレス情報を入手するため、 少しの間停止しているように表示されます。 [[bsdinstall-net-ipv6-slaac]] .IPv6 SLAAC 設定の選択 image::bsdinstall-configure-network-interface-slaac.png[選択したネットワークインターフェースに対して SLAAC の設定を行うかどうかを確認するメニュー]] IPv6 ルータが利用できない環境では、btn:[No] を選択して、表示されるメニューで以下のアドレス情報を入力する必要があります。 [[bsdinstall-net-ipv6-static]] .IPv6 の静的な設定 image::bsdinstall-configure-network-interface-ipv6-static.png[IPv6 ネットワークを設定するメニュー] * `IPv6 Address` - このコンピュータに割り当てられた IPv6 アドレスです。このアドレスは一意的である必要があるため、ローカルネットワーク上の他のデバイスですでに使われているアドレスは使えません。 * `Default Router` - このネットワークのデフォルトゲートウェイの IPv6 アドレスです。 最後のネットワークメニューでは、ホスト名とネットワークアドレスを変換する Domain Name System (DNS) リゾルバを設定します。 すでに DHCP または SLAAC を使って自動的にネットワークインタフェースを設定したのであれば、`Resolver Configuration` には値がすでに入っているでしょう。 そうでなければ、`Search` フィールドにローカルネットワークのドメイン名を入力してください。 `DNS` #1 および `DNS` #2 は、ローカル DNS サーバの IPv4 または IPv6 アドレスです。 少なくとも、1 つの DNS サーバは必要です。 [[bsdinstall-net-dns-config]] .DNS の設定 image::bsdinstall-configure-network-ipv4-dns.png[ネットワークの DNS を設定するメニュー] ネットワーク接続の設定が終わったら、FreeBSD をインストールするコンピュータと同じ地域のミラーサイトを選んでください。 ターゲットコンピュータの近くのミラーサイトを選択できれば、ファイルのダウンロードは早く終わるので、インストールの時間は短くなります。 [TIP] ==== ftp://ftp.freebsd.org (Main Site)` を選択すると、最も近いミラーに自動的にルーティングします。 ==== [[bsdinstall-netinstall-mirror]] .ミラーサイトの選択 image::bsdinstall-netinstall-mirrorselect.png[ミラーサイトを選択するメニュー] [[bsdinstall-timezone]] === タイムゾーンの設定 次のメニューでは、地域、国、タイムゾーンを指定します。 使用しているシステムのタイムゾーンを設定することで、 夏時間などの地域による時刻の違いが自動的に調整され、 タイムゾーンに関連した機能が適切に取り扱われます。 ここでの例は、 欧州スペインのメインランドタイムゾーンにあるコンピュータに対するものです。 実際の地理的位置に対応するタイムゾーンを設定してください。 [[bsdinstall-timezone-region]] .地域の選択 image::bsdinstall-timezone-region.png[地域を選択するメニュー] 矢印キーを使って、適切な地域を選択し、 kbd:[Enter] を押してください。 [[bsdinstall-timezone-country]] .国名の選択 image::bsdinstall-timezone-country.png[国名を選択するメニュー] 矢印キーを使って、適切に国名を選び、 kbd:[Enter] を押してください。 [[bsdinstall-timezone-zone]] .タイムゾーンの選択 image::bsdinstall-timezone-zone.png[タイムゾーンを選択するメニュー] 矢印キーを使って適切なタイムゾーンを選択し、 kbd:[Enter] を押してください。 [[bsdinstall-timezone-confirmation]] .タイムゾーンの確定 image::bsdinstall-timezone-confirm.png[タイムゾーンを確定するメニュー] タイムゾーンの省略形が正しいかどうかを確認してください。 [[bsdinstall-timezone-date]] .日付の設定 image::bsdinstall-timezone-date.png[システムの日付を設定するメニュー] 矢印キーを使って適切な日付を選択したら、 btn:[Set Date] を押してください。 btn:[Skip] を押すと日付の設定をスキップできます。 [[bsdinstall-timezone-time]] .時刻の設定 image::bsdinstall-timezone-time.png[システムの時刻を設定するメニュー] 矢印キーを使って適切な時刻に設定したら、 btn:[Set Time] を押してください。 btn:[Skip] を押すと時刻の設定をスキップできます。 [[bsdinstall-sysconf]] === サービスを有効にする 次のメニューでは、システムが起動した時に、 起動するシステムサービスを設定します。 これらのサービスはすべてオプションです。 システムの機能として必要なサービスだけを起動するようにしてください。 [[bsdinstall-config-serv]] .追加で有効にするサービスの選択 image::bsdinstall-config-services.png[利用可能なサービスを表示しているメニュー] このメニューで有効にできるサービスは以下の通りです。 * `local_unbound` - DNS のローカル unbound を有効にします。この設定は、ローカルキャッシュフォワードリゾルバとしての利用のみを想定しています。ネットワーク全体のリゾルバを設定したいのであれば、 package:dns/unbound[] をインストールしてください。 * `sshd` - セキュアシェル (SSH) デーモンは、 暗号化された接続上でリモートアクセスするために使われます。 システムがリモートログインを必要とする場合のみ、 このサービスを有効にしてください。 * `moused` - システムのコンソールで、 マウスを利用する時に、このサービスを有効にしてください。 * `ntpdate` - 起動時の自動時刻同期を有効にします。 この機能は、現在 man:ntpd[8] デーモンでも利用できます。 man:ntpdate[8] ユーティリティは近々その役目を終える予定です。 * `ntpd` - 自動時刻同期のための The Network Time Protocol (NTP) デーモンを有効にします。リモートタイムサーバまたはプールとシステムの時刻を同期する場合は、このサービスを有効にしてください。 * `powerd` - 電源の管理およびエネルギーを節約するための電源コントロールユーティリティ * `dumpdev` - システムのデバッグを行う上で、クラッシュダンプは有用なので、可能であれば有効にすると良いでしょう。 [[bsdinstall-hardening]] === セキュリティを強化するオプションを有効にする 次のメニューでは、 有効にするセキュリティオプションを設定します。 すべてはオプションですが、有効にすることが推奨されます。 [[bsdinstall-hardening-options]] .セキュリティを強化するオプションの設定 image::bsdinstall-hardening.png[セキュリティを強化するオプションを表示しているメニュー] このメニューで有効にできるのは、以下のオプションです。 * `hide_uids` - 他のユーザが実行しているプロセス (UID) を隠します。 特権のないユーザが、他のユーザにより実行されているプロセスを見れないようにします。 * `hide_gids` - 他のグループが実行しているプロセスを隠します。 特権のないユーザが、他のグループ (GID) により実行されているプロセスを見れないようにします。 * `hide_jail` - jail で実行中のプロセスを隠します。 特権のないユーザが、jail の中で実行されているプロセスを見れないようにします。 * `read_msgbuf` - 権限のないユーザが、カーネルメッセージバッファを読めなくします。 権限のないユーザが、man:dmesg[8] を使ってカーネルログバッファのメッセージを見れないようにします。 * `proc_debug` - 権限のないユーザ対するプロセスデバッキング機能を無効にします。 `ptrace()` および `ktrace()` といった procfs 機能を含む、権限のないプロセス間のデバッキングサービスを無効にします。 このオプションによって、PHP などのスクリプト言語に対する組み込みのデバッキング機能と同様に、man:lldb[1], man:truss[1] および man:procstat[1] などの権限のないユーザによるデバッキングツールも無効になります。 * `random_pid` - プロセスの PID をランダム化します。 * `clear_tmp` - システムの起動時に `/tmp` を空にします。 * `disable_syslogd` - syslogd ネットワークソケットを閉じます。 デフォルトでは、FreeBSD は syslogd を `-s` を使った安全な方法で実行します。 これは、外からのポート 514 に対する UDP リクエストを待機しません。 このオプションを有効にすると、syslogd を `-ss` 付きで実行します。 これにより、syslogd は空いているどのポートからも受け付けません。 詳細は、man:syslogd[8] をご覧ください。 * `disable_sendmail` - sendmail MTA を無効にします。 * `secure_console` - シングルユーザモードに入る際に、コマンドプロンプトに対して `root` パスワードが必要となります。 * `disable_ddtrace` - DTrace は、 実行中のカーネルに影響を及ぼすモードで実行できます。 破壊的なアクションは、明示的に有効にしない限りは利用できません。 このオプションを有効にするには、DTrace を実行する際に `-w` を使ってください。 詳細については man:dtrace[1] をご覧ください。 * `enable_aslr` - アドレス空間配置のランダム化を有効にします。アドレス空間配置のランダム化の詳細については link:https://en.wikipedia.org/wiki/Address_space_layout_randomization[Wikipedia article] をご覧ください。 [[bsdinstall-addusers]] === ユーザの追加 次のメニューでは、少なくとも一人のユーザを追加してください。 システムには `root` ではなく、ユーザアカウントでログインすることが推奨されています。 `root` 権限でログインすると、実行に対して制限がなく、また、保護されません。 通常のユーザでログインすることにより、 安全でセキュリティ的に危険が少なくなります。 btn:[Yes] を選択し、 新しいユーザを追加してください。 [[bsdinstall-add-user1]] .新しいユーザのアカウントの作成 image::bsdinstall-adduser1.png[システムにユーザを作成するか選択するメニュー] プロンプトに従い、 ユーザアカウントの作成で必要となる情報を入力してください。 <> で示されている例では、`asample` ユーザアカウントを作成します。 [[bsdinstall-add-user2]] .ユーザ情報の入力 image::bsdinstall-adduser2.png[追加するユーザの情報を入力しているメニュー] 以下は、入力情報のまとめです。 * `Username` - ログイン時のユーザ名を入力します。一般的な慣習では、 ファーストネームの最初の文字とラストネームを、 ユーザ名がシステムで一意的になる長さで組み合わせます。 ユーザ名は、大文字と小文字を区別し、 空白を含んではいけません。 * `Full name` - ユーザのフルネーム。 空白を含むことは可能です。 また、この情報はユーザアカウントの説明の記述に使われます。 * `Uid` - ユーザ ID 番号。 通常は、システムが自動的に割り当てるように、 空欄のままにします。 * `Login group` - 新しいユーザのログイングループ。 空欄のままにすると、デフォルトに割り当てられます * `Invite _user_ into other groups?` - ユーザを別のグループのメンバーとして追加するかどうか。 ユーザが管理者としてのアクセス必要であれば、 ここで `wheel` を入力してください。 * `Login class` - 空欄にするとデフォルトの設定になります。 * `Shell` - 一覧の中から、ユーザのシェルを入力してください。 シェルに関する詳細については crossref:basics[shells, シェル] をご覧ください。 * `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` を入力して新しいユーザを作成してください。 [[bsdinstall-add-user3]] .ユーザおよびグループの管理を終了する image::bsdinstall-adduser3.png[追加するユーザの情報が正しかを確認しているメニュー] さらにユーザを追加するのであれば、 `Add another user?` の質問に対し、 `yes` を入力してください。 `no` を入力すると、ユーザの追加が終わり、次に進みます。 ユーザの追加や、ユーザ管理の詳細については、 crossref:basics[users-synopsis, ユーザと基本的なアカウント管理] を参照してください。 [[bsdinstall-final-conf]] === 最後の設定 すべてをインストールし、設定が終わった後に、 最後に設定を修正する機会が与えられます。 [[bsdinstall-final-config]] image::bsdinstall-finalconfiguration.png[インストールを終わる前に、ユーザを追加したり、タイムゾーンなどを設定するためのメニュー] インストールを完了する前に、このメニューを使って変更、または、追加の設定を行なってください。 .最終の設定オプション * `Add User` - <> で説明しています。 * `Root Password` - <> で説明しています。 * `Hostname` - <> で説明しています。 * `Network` - <> で説明しています。 * `Services` - <> で説明しています。 * `System Hardening` - <> で説明しています。 * `Time Zone` - <> で説明しています。 * `Handbook` - FreeBSD ハンドブックのダウンロードとインストール。 設定が完了したら、btn:[Exit] を選んでください。 [[bsdinstall-final-modification-shell]] .Manual Configuration image::bsdinstall-final-modification-shell.png[インストールが終わり、追加でシェルを開いて手動で変更を行うかどうかを確認しているメニュー] 新しいシステムを再起動する前に、 bsdinstall は追加の設定が必要かどうかを尋ねてきます。 btn:[Yes] を選択して新しいシステムのシェルに入るか、または btn:[No] を選択して、インストールの最後のステップに進んでください。 [[bsdinstall-final-main]] .インストールの終了 image::bsdinstall-mainexit.png[インストールが終了し、システムを再起動するか、Live CD にアクセスするかを選択するメニュー] 追加の設定や、特別なセットアップが必要であれば、 btn:[Live CD] を選んでインストールメディアを Live CD で起動してください。 インストールが終わったら、 btn:[Reboot] を選んで、 コンピュータを再起動し、新しい FreeBSD システムで起動してください。 再起動する前には、忘れずに FreeBSD インストールメディアを外してください。 さもないと、もう一度インストールメディアから起動してしまいます。 FreeBSD の起動時には、多くのメッセージが画面に表示されます。 システムの起動後には、ログインプロンプトが表示されます。 `login:` プロンプトで、インストール時に追加したユーザ名を入力してください。 `root` でのログインは避けてください。 管理者の権限が必要となった時に、スーパユーザになる方法については、crossref:basics[users-superuser, スーパーユーザアカウント] を参照してください。 起動時に表示されていたメッセージは、 kbd:[Scroll-Lock] を押し、scroll-back buffer で見ることができます。 kbd:[PgUp], kbd:[PgDn] そして矢印キーでメッセージをスクロールバックできます。 メッセージの確認が終わったら、kbd:[Scroll-Lock] をもう一度押すと、ディスプレイのロックを外し、 コンソールに戻ることができます。 何度かシステムを起動した後で、これらのメッセージを見るには、コマンドプロンプトから `less /var/run/dmesg.boot` と入力してください。 確認後に kbd:[q] を押すと、 コマンドラインに戻ります。 <> で sshd を有効に設定した場合には、最初の起動時にシステムが SSH ホストキーを生成するため、少々時間がかかるかもしれません。 その後の起動はより速くなるでしょう。 鍵のフィンガープリントは、以下の例のように表示されます。 [source,shell] .... Generating public/private rsa1 key pair. Your identification has been saved in /etc/ssh/ssh_host_key. Your public key has been saved in /etc/ssh/ssh_host_key.pub. The key fingerprint is: 10:a0:f5:af:93:ae:a3:1a:b2:bb:3c:35:d9:5a:b3:f3 root@machine3.example.com The key's randomart image is: +--[RSA1 1024]----+ | o.. | | o . . | | . o | | o | | o S | | + + o | |o . + * | |o+ ..+ . | |==o..o+E | +-----------------+ Generating public/private dsa key pair. Your identification has been saved in /etc/ssh/ssh_host_dsa_key. Your public key has been saved in /etc/ssh/ssh_host_dsa_key.pub. The key fingerprint is: 7e:1c:ce:dc:8a:3a:18:13:5b:34:b5:cf:d9:d1:47:b2 root@machine3.example.com The key's randomart image is: +--[ DSA 1024]----+ | .. . .| | o . . + | | . .. . E .| | . . o o . . | | + S = . | | + . = o | | + . * . | | . . o . | | .o. . | +-----------------+ Starting sshd. .... フィンガープリントおよび SSH についての詳細については、crossref:security[openssh,OpenSSH] をご覧ください。 FreeBSD はデフォルトでは、グラフィカルな環境をインストールしません。 グラフィカルなウィンドウマネージャのインストール、 および設定に関するより多くの情報については、 crossref:x11[x11,X Window System] をご覧ください。 適切に FreeBSD をシャットダウンすることは、 ハードウェアをダメージから守ったり、データの保護につながります。 __システムを適切にシャットダウンする前に、 電源を落すということはしないでください!__``wheel`` グループのメンバとなっているユーザは、 コマンドラインから `su` と入力し、 `root` のパスワードを入力してスーパユーザとなってください。 その後、`shutdown -p now` と入力すると、システムは正しくシャットダウンし、 ハードウェアが対応していれば、電源が落ちます。 [[bsdinstall-install-trouble]] == トラブルシューティング この章では、インストールの際の、 これまで報告された共通の問題に対する解決のための情報が書いてあります。 link:https://www.FreeBSD.org/ja/releases/[FreeBSD リリース情報] ページにあるインストールする FreeBSD のバージョンのハードウェアノートを調べて、 使用しているハードウェアに対応しているかどうかを確認してください。 [NOTE] ==== いくつかのインストール上の問題は、さまざまなハードウェア装置、 特にマザーボードのファームウェアのアップデートで回避または緩和することができます。 マザーボードのファームウェアは、通常 BIOS と呼ばれます。 多くのマザーボードまたはコンピュータ製造メーカーは、 アップデートやアップグレード情報を載せているウェブサイトを用意しています。 通常、製造メーカーは、 重要な更新のようなそれなりの理由がない限り、マザーボードの BIOS のアップグレードは行わないよう推奨しています。 アップデートの過程で失敗する__可能性があり__、 その場合 BIOS が不完全な状態になり、 コンピュータが動作しない原因となり得るからです。 ==== システムの起動時に、ハードウェアの検出中にシステムが固まったり、インストールプロセスでおかしな振る舞いをする場合には、ACPI が原因の可能性があります。 i386 および amd64 プラットフォームにおいて、 FreeBSD はシステムの設定を手助けするシステム ACPI サービスを、 起動時に検出された場合に広く使います。 残念ながら、まだいくつかの不具合が、 ACPI ドライバとシステムのマザーボードおよび BIOS ファームウェア両方に存在しています。 起動ステージ 3 において、ヒント情報 `hint.acpi.0.disabled` を以下のように設定すると ACPI を無効にできます。 [source,shell] .... set hint.acpi.0.disabled="1" .... この設定はシステムが起動するたびにリセットされるので、`/boot/loader.conf` ファイルに `hint.acpi.0.disabled="1"` を追加する必要があります。 ブートローダのより詳しい情報については crossref:boot[boot-synopsis,FreeBSD の起動のプロセス] で説明します。 [[using-live-cd]] == Live CD を使う <> で示されている bsdinstall のウェルカムメニューは、 btn:[Live CD] オプションを提供します。 これは、 オペレーティングシステムに FreeBSD を使うべきかどうか迷っていて、 インストール前に機能を試して見たいと思っている方に有用です。 btn:[Live CD] を使う際は、以下のことに気をつけてください。 * システムにアクセスする際には、認証を求められます。 ユーザ名は `root`、 パスワードは空欄としてください。 * システムはインストールメディアから直接起動するので、 ハードディスクにインストールされたシステムに比べ、 パフォーマンスはかなり遅い可能性があります。 * このオプションのユーザインタフェースは、 コマンドプロンプトのみです。 グラフィカルなユーザインタフェースではありません。 diff --git a/documentation/content/ja/books/handbook/cutting-edge/_index.adoc b/documentation/content/ja/books/handbook/cutting-edge/_index.adoc index d08dc665b2..a91393c687 100644 --- a/documentation/content/ja/books/handbook/cutting-edge/_index.adoc +++ b/documentation/content/ja/books/handbook/cutting-edge/_index.adoc @@ -1,1116 +1,1115 @@ --- title: 第16章 FreeBSD のアップデートとアップグレード part: パートIII. システム管理 prev: books/handbook/l10n next: books/handbook/partiv description: freebsd-update もしくは Git を使った FreeBSD システムを最新の状態に更新する方法、ベースシステム全体を再構築しインストールする方法などの説明 tags: ["updating", "upgrading", "documentation", "FreeBSD-STABLE", "FreeBSD-CURRENT", "Security Patches"] showBookMenu: true weight: 20 path: "/books/handbook/cutting-edge/" -aliases: ["/ja/books/handbook/updating-upgrading-freebsdupdate/","/ja/books/handbook/updating-upgrading-documentation/","/ja/books/handbook/current-stable/","/ja/books/handbook/makeworld/","/ja/books/handbook/small-lan/"] --- [[updating-upgrading]] = FreeBSD のアップデートとアップグレード :doctype: book :toc: macro :toclevels: 1 :icons: font :sectnums: :sectnumlevels: 6 :sectnumoffset: 16 :partnums: :source-highlighter: rouge :experimental: :images-path: books/handbook/cutting-edge/ ifdef::env-beastie[] ifdef::backend-html5[] :imagesdir: ../../../../images/{images-path} endif::[] ifndef::book[] include::shared/authors.adoc[] include::shared/mirrors.adoc[] include::shared/releases.adoc[] include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists.adoc[] include::shared/{{% lang %}}/urls.adoc[] toc::[] endif::[] ifdef::backend-pdf,backend-epub3[] include::../../../../../shared/asciidoctor.adoc[] endif::[] endif::[] ifndef::env-beastie[] toc::[] include::../../../../../shared/asciidoctor.adoc[] endif::[] [[updating-upgrading-synopsis]] == この章では あるリリースから次のリリースまでの期間にも、 FreeBSD の開発は休みなく続けられています。 最新の開発ツリーと同期することを好む人がいる一方で、公式のリリース版を好んで使う方もいます。 しかしながら、公式のリリースといえども、 セキュリティや他の重要な修正のため、時にはアップデートが必要となります。 FreeBSD は手元のシステムを最新の開発ツリーと同期するために必要なツールをすべて用意しているので、使用しているバージョンに関わらず、これらのツールを使って簡単にシステムのバージョンをアップグレードできます。 この章では、開発ブランチを追いかける方法、および、FreeBSD システムをアップデートする基本的なツールについて解説します。 この章では以下について説明します。 * freebsd-update もしくは Git を使った FreeBSD システムの更新方法 * インストールされているシステムと、変更が行われていない状態との比較方法 * Git またはドキュメント用の ports を使って、 インストールされているドキュメントを最新版にアップデートする方法 * 2 つの開発ブランチ、FreeBSD-STABLE と FreeBSD-CURRENT の違いについて * ベースシステム全体を再構築しインストールする方法 この章を読む前に、以下の準備をしましょう。 * ネットワーク接続の適切な設定 (crossref:advanced-networking[advanced-networking,高度なネットワーク]) * サードパーティ製のソフトウェアのインストール方法の習得 (crossref:ports[ports,アプリケーションのインストール - packages と ports]) [NOTE] ==== この章を通じて、FreeBSD のソースコードのダウンロードやアップデートに `git` が使われています。 必要に応じて package:devel/git[] port または package が使われることもあります。 ==== [[updating-upgrading-freebsdupdate]] == FreeBSD Update すみやかにセキュリティパッチを適用し、 オペレーティングシステムをアップグレードして、 最新のリリースに保つことは、システム管理における重要な側面です。 これらの処理を行うために FreeBSD には `freebsd-update` と呼ばれるユーティリティが用意されています。 このユーティリティを用いると、FreeBSD のセキュリティおよび eratta アップデートをバイナリによって行うことができます。 手動でパッチもしくは新しいカーネルをコンパイルし、インストールする必要はありません。 バイナリアップデートは、セキュリティチームがサポートしているすべてのアーキテクチャとリリースで利用できます。 https://www.FreeBSD.org/ja/security/[https://www.FreeBSD.org/ja/security/] には、サポートが行われているリリースや保守終了予定日の一覧があります。 このユーティリティは、マイナーリリースであったり、他のリリースブランチへのアップグレードにも対応しています。 新しいリリースにアップデートする前に、アップデートしようとしているリリースのアナウンスに目を通し、重要な情報がないかどうかを確認してください。 リリースのアナウンスは https://www.FreeBSD.org/ja/releases/[https://www.FreeBSD.org/ja/releases/] で確認できます。 [NOTE] ==== もし man:crontab[5] の中に man:freebsd-update[8] の機能が含まれていたら、 オペレーティングシステムのアップグレード作業を終えるまでは無効にしてください。 ==== この節では、`freebsd-update` で使われる設定ファイルの説明、 セキュリティパッチの適応方法のデモンストレーション、 オペレーティングシステムをアップグレードする際に考慮すべき点について説明します。 [[freebsdupdate-config-file]] === 設定ファイル `freebsd-update` のデフォルトの設定ファイルは、そのままでも用いることができます。 [.filename]#/etc/freebsd-update.conf# の設定をデフォルトからきめ細かく調整して、 アップデートプロセスを制御するユーザもいます。 利用可能なオプションについてはこのファイルのコメントで説明されていますが、以下の項目については補足が必要でしょう。 [.programlisting] .... # Components of the base system which should be kept updated. Components world kernel .... このパラメータは、FreeBSD のどの部分を最新に維持するかを設定します。 デフォルトでは、ベースシステム全体、そしてカーネルをアップデートします。 `src/base` や `src/sys` のように、個々の項目を指定することもできます。 この部分についてはデフォルトのままにしておき、アップデートする項目をユーザがリストに加える形にするのがベストでしょう。 ソースコードとバイナリが同期していないと、長い年月の間に悲惨な結果がもたらされる可能性があります。 [.programlisting] .... # Paths which start with anything matching an entry in an IgnorePaths # statement will be ignored. IgnorePaths /boot/kernel/linker.hints .... [.filename]#/bin# や [.filename]#/sbin# 等の特定のディレクトリをアップデートで変更しないように、これらのパスを追加してください。 このオプションは、ローカルの変更点を `freebsd-update` が上書きすることを防ぐ目的にも利用できます。 [.programlisting] .... # 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` がマージ中に変更点を保存するようにします。 [.programlisting] .... # 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/ /boot/device.hints .... `freebsd-update` がマージすべきファイルが存在するディレクトリの一覧です。 ファイルのマージのプロセスは、man:mergemaster[8] と同様 man:diff[1] パッチの連続ですが、選択肢は少なく、マージを承認するか、エディタを起動するか、`freebsd-update` を中断するかどうかを選んでください。 もし、心配な点があれば、[.filename]#/etc# をバックアップしてからマージを承認してください。 `mergemaster` の詳細な情報については、man:mergemaster[8] で確認してください。 [.programlisting] .... # Directory in which to store downloaded updates and temporary # files used by FreeBSD Update. # WorkDir /var/db/freebsd-update .... ここではすべてのパッチや一次ファイルを置くディレクトリを指定しています。 バージョンをアップグレードするのであれば、この場所には少なくともギガバイトの空き容量が必要です。 [.programlisting] .... # 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` リストに属するファイルをアップデートします。 詳細については、man:freebsd-update.conf[5] を参照してください。 [[freebsdupdate-security-patches]] === セキュリティパッチの適用 FreeBSD のセキュリティパッチを適用する過程は簡単になりました。 管理者は `freebsd-update` を使うことで、 システムを完全にパッチがあたった状態に保つ事ができます。 FreeBSD セキュリティ勧告の詳細については、crossref:security[security-advisories,FreeBSD セキュリティ勧告] の節で説明されています。 以下のコマンドを実行すると、FreeBSD のセキュリティパッチがダウンロードされ、インストールされます。 最初のコマンドは、未対応のパッチがあるかどうかを調べます。 もし未対応のパッチがある場合には、パッチが当てられた際に変更されるファイルのリストが作成されます。 2 番目のコマンドはパッチを適用します。 [source,shell] .... # freebsd-update fetch # freebsd-update install .... アップデートによってカーネルにパッチが適用された場合には、システムを再起動して新しいカーネルで起動する必要があります。 もし、実行中のバイナリにパッチが適用された場合には、パッチが当てられたバイナリが使われるように、影響するアプリケーションを再起動する必要があります。 [NOTE] ==== 通常、ユーザはシステムを再起動する必要があります。 カーネルアップデートによりシステムの再起動が必要かどうかを調べるには、`freebsd-version -k` と `uname -r` を実行してください。 これら 2 つのコマンドの結果が異なる場合には、システムを再起動してください。 ==== 毎日一度アップデートがないかどうかを自動的に確認するように設定するには、 以下のエントリを [.filename]#/etc/crontab# に追加してください。 [.programlisting] .... @daily root freebsd-update cron .... パッチが存在すると、自動的にダウンロードされますが、適用はされません。 ``root``宛てにメールで、ダウンロードされたパッチを確認し、`freebsd-update install` とともに手動でインストールする必要のあることが通知されます。 うまく行かなかった場合には、`freebsd-update` を以下のように実行すると、最後の変更までロールバックできます。 [source,shell] .... # freebsd-update rollback Uninstalling updates... done. .... カーネルまたはカーネルモジュールがアップデートされた場合には、 完了後にもう一度システムを再起動して、 影響のあったバイナリを再起動してください。 `freebsd-update` ユーティリティが自動的にアップデートするカーネルは [.filename]#GENERIC# のみです。 カスタムカーネルをインストールしている場合には、`freebsd-update` によりインストールした後、カーネルを再構築し、もう一度インストールする必要があります。 デフォルトのカーネルの名前は _GENERIC_ です。 man:uname[1] コマンドを使ってインストールされているかどうかを確認できます。 [NOTE] ==== [.filename]#GENERIC# カーネルを、常に [.filename]#/boot/GENERIC# に置いておいてください。 さまざまな問題を解決する際や、バージョンをアップグレードする際に助けとなります。 [.filename]#GENERIC# カーネルを用意する方法については、<> を参照してください。 ==== [.filename]#/etc/freebsd-update.conf# のデフォルトの設定を変更しない限り、`freebsd-update` は、他の更新と共にカーネルソースをアップデートします。 新しいカスタムカーネルの再構築と再インストールは、通常通り行うことができます。 `freebsd-update` は、常にカーネルをアップデートするとは限りません。 `freebsd-update install` によってカーネルソースが変更されなかった場合には、カスタムカーネルを再構築する必要はありません。 しかしながら `freebsd-update` は、[.filename]#/usr/src/sys/conf/newvers.sh# を常にアップデートします。 これは、現在のシステムのパッチレベルを `uname -r` が `-p` で表示する時にこのファイルが参照されます。 そのため、何も変更されていない場合でも、カスタムカーネルを再構築することにより、`uname` がシステムの正確なパッチレベルを報告するようになります。 各システムにインストールされているアップデートをすばやく把握できるようになるので、特に複数のシステムを管理するときに助けとなります。 [[freebsdupdate-upgrade]] === メジャーおよびマイナーバージョンのアップグレード FreeBSD のマイナーバージョン間のアップグレード、たとえば、FreeBSD 9.0 から FreeBSD 9.1 へのアップグレードは、_マイナーバージョン_ アップグレードと呼ばれます。 _メジャーバージョン_ アップグレードは、FreeBSD 9.X から FreeBSD 10.X へのアップグレードといった、FreeBSD のメジャーバージョンが変わるようなアップグレードのことです。 どちらのアップグレードも、`freebsd-update` のターゲットにリリース番号を指定する事で実行できます。 [NOTE] ==== カスタムカーネルを使っているシステムでは、アップグレードを行う前に [.filename]#GENERIC# カーネルが、[.filename]#/boot/GENERIC# に置かれている事を確認してください。 [.filename]#GENERIC# カーネルを用意する方法については、<> を参照してください。 ==== 以下のコマンドを実行すると、FreeBSD 9.0 のシステムを FreeBSD 9.1 にアップグレードします。 [source,shell] .... # freebsd-update -r 9.1-RELEASE upgrade .... コマンドを実行すると、`freebsd-update` は設定ファイルと現在のシステムを評価し、 アップデートするために必要な情報を収集します。 画面には、どのコンポーネントが認識され、どのコンポーネントが認識されていないといったリストが表示されます。 たとえば以下のように表示されます。 [source,shell] .... Looking up update.FreeBSD.org mirrors... 1 mirrors found. Fetching metadata signature for 9.0-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` はアップグレードに必要なすべてのファイルをダウンロードします。 何をインストールし、どのように進むかといった質問をされることもあります。 カスタムカーネルを使っていると、上記のステップ中に以下のような警告が表示されます。 [source,shell] .... WARNING: This system is running a "MYKERNEL" kernel, which is not a kernel configuration distributed as part of FreeBSD 9.0-RELEASE. This kernel will not be updated: you MUST update the kernel manually before running "/usr/sbin/freebsd-update install" .... この時点ではこの警告を無視してもかまいません。 アップデートされた [.filename]#GENERIC# カーネルは、アップグレードプロセスの途中で利用されます。 すべてのパッチがローカルシステムへダウンロードされたら、次にパッチが適用されます。 このプロセスには時間がかかります。 この時間はコンピュータの性能およびワークロードに依存します。 その後、設定ファイルがマージされます。 このプロセスでは、ユーザはファイルをマージするか、画面上にエディタを立ち上げて手動でマージするかを尋ねられます。 プロセスが進むごとに、成功したマージのすべての結果の情報がユーザに示されます。 マージに失敗したり、無視した場合には、プロセスが中断します。 ユーザによっては [.filename]#/etc# のバックアップを取り、[.filename]#master.passwd# や [.filename]#group# のような重要なファイルを後で手動でマージする方もいます。 [NOTE] ==== すべてのパッチは別のディレクトリでマージされており、まだ、システムには反映されていません。 すべてのパッチが正しく適用され、すべての設定ファイルがマージされてプロセスがスムーズに進んだら、ユーザは以下のコマンドを用いて、変更点をディスクに反映してください。 [source,shell] .... # freebsd-update install .... ==== パッチは最初にカーネルとカーネルモジュールに対して当てられます。 システムがカスタムカーネルを実行している場合には、man:nextboot[8] を使って次回の再起動時のカーネルを、アップデートされた [.filename]#/boot/GENERIC# に設定してください。 [source,shell] .... # nextboot -k GENERIC .... [WARNING] ==== [.filename]#GENERIC# カーネルで再起動する前に、カーネルにシステムが適切に起動するために必要なすべてのドライバが含まれていること、もしアップデートしているコンピュータがリモートでアクセスしているのであれば、ネットワーク接続に必要なすべてのドライバも含まれていることを確認してください。 特に、これまで実行しているカスタムカーネルが、カーネルモジュールとして提供されているビルドインの機能を含んでいるのであれば、これらのモジュールを一時的に [.filename]#/boot/loader.conf# の機能を用いて、[.filename]#GENERIC# に読み込んでください。 アップグレードプロセスが終わるまでは、重要ではないサービスを無効にするとともに、必要のないディスクやネットワークのマウントなども避けることが推奨されています。 ==== アップデートされたカーネルでコンピュータを再起動してください。 [source,shell] .... # shutdown -r now .... システムがオンラインに戻ったら、以下のコマンドを使って `freebsd-update` を再び実行してください。 アップデートプロセスの状態は保存されているので、`freebsd-update` を実行すると、古い共有ライブラリおよびオブジェクトファイルを削除するステップに進みます。 [source,shell] .... # freebsd-update install .... [NOTE] ==== 使用しているライブラリのバージョン番号の付けられ方によって、 3 つのインストールフェーズが 2 つになる場合もあります。 ==== アップグレードはこれで終了です。 もしメジャーアップグレードを行った場合には、<> で説明されているようにすべての ports および package を再構築してください。 [[freebsd-update-custom-kernel-9x]] ==== FreeBSD 9.X 以降のシステムにおけるカスタムカーネル `freebsd-update` を使う前に、[.filename]#GENERIC# カーネルが [.filename]#/boot/GENERIC# に置かれていることを確認してください。 ただ一度だけカスタムカーネルを構築したのであれば、[.filename]#/boot/kernel.old# は [.filename]#GENERIC# カーネルそのものです。 このディレクトリの名前を [.filename]#/boot/GENERIC# へと変更してください。 もし、2 回以上カスタムカーネルを構築した後であったり、カスタムカーネルを構築した回数がわからなければ、現在のオペレーティングシステムのバージョンの [.filename]#GENERIC# カーネルを入手してください。 コンピュータへの物理的なアクセスが可能であれば、インストールメディアから [.filename]#GENERIC# カーネルをインストールできます。 [source,shell] .... # mount /cdrom # cd /cdrom/usr/freebsd-dist # tar -C/ -xvf kernel.txz boot/kernel/kernel .... 別な方法としては、 [.filename]#GENERIC# カーネルをソースから再構築して、 インストールしてください。 [source,shell] .... # cd /usr/src # make kernel __MAKE_CONF=/dev/null SRCCONF=/dev/null .... `freebsd-update` がこのカーネルを [.filename]#GENERIC# カーネルとして認識するために、[.filename]#GENERIC# コンフィグレーションファイルは、とにかく変更してはいけません。 また、特別なオプションを指定しないで構築してください。 `freebsd-update` は、[.filename]#/boot/GENERIC# が存在する事だけを必要とするので、[.filename]#GENERIC# カーネルで再起動する必要はありません。 [[freebsdupdate-portsrebuild]] ==== メジャーバージョンアップグレード後の package のアップグレード 一般的に、マイナーバージョンアップグレードの後では、インストールされているアプリケーションは、問題なく動作するでしょう。 メジャーバージョンが異なるとアプリケーションバイナリーインタフェース (ABI) が異なるため、サードパーティ製のアプリケーションの多くは動作しなくなるでしょう。 メジャーバージョンアップグレード後には、インストールされているすべての packages, ports をアップグレードする必要があります。 package は、`pkg upgrade` を使ってアップグレードできます。 インストールされている ports をアップグレードする場合には、package:ports-mgmt/portmaster[] といったユーティリティを使ってください。 すべての package の強制的なアップグレードでは、バージョン番号が上がらない package に対しても、リポジトリから最新のバージョンで、インストールされている package を置き換えます。 FreeBSD のメージャーバージョンが変わるようなアップグレードでは、ABI のバージョンも変わるため、このようなアップグレードが必要になります。 強制的なアップグレードを行うには、以下のように実行してください。 [source,shell] .... # pkg-static upgrade -f .... インストールされているすべてのアプリケーションを再構築するには、以下のコマンドを実行してください。 [source,shell] .... # portmaster -af .... このコマンドを実行すると、設定を変更するオプションを持つアプリケーションは、設定変更のスクリーンを表示し、ユーザからの指示待ちの状態で停止します。 この振る舞いをやめ、デフォルトのオプションを使用するには、上記のコマンドに `-G` を含めてください。 ソフトウェアのアップグレードが終わったら、最後にもう一度 `freebsd-update` を実行して、すべてのアップグレードプロセスのやり残し作業を行い、アップグレードのプロセスを完了してください。 [source,shell] .... # freebsd-update install .... [.filename]#GENERIC# カーネルを一時的に読み込んでいたのであれば、crossref:kernelconfig[kernelconfig,FreeBSD カーネルのコンフィグレーション] に書かれている手順に従って、新しいカスタムを構築し、インストールしてください。 コンピュータを再起動し、新しい FreeBSD を立ち上げてください。 これでアップグレードのプロセスは完了です。 [[freebsdupdate-system-comparison]] === システムの状態の比較 `freebsd-update` を用いて、インストールされている FreeBSD の状態と、正しく動作することが分かっている状態とを比較できます。 このコマンドは、現在のシステムのユーティリティ、ライブラリ、設定ファイルを評価するので、組み込みの侵入検知システム (IDS) として使うことができます。 [WARNING] ==== このコマンドは、package:security/snort[] のような本当の IDS の置き換えになるものではありません。 `freebsd-update` はデータをディスクに保存するので、不正な変更が行われる可能性があります。 `kern.securelevel` と、`freebsd-update` のデータを使用しないときに、読み取りのみの許可属性に設定されているファイルシステムに置くことで、不正な変更の可能性を低くできますが、よりよい解決方法は、DVD または安全に保存されている外部 USB ディスクのような安全なディスクとシステムを比較することです。 組み込まれているユーティリティを用いた、別の方法による IDS 機能については、crossref:security[security-ids,FreeBSD バイナリによる検出] の節をご覧ください。 ==== 比較を行うには、 結果の出力先のファイル名を指定してください。 [source,shell] .... # freebsd-update IDS >> outfile.ids .... システムは検査され、リリースファイルの SHA256 ハッシュ値と現在インストールされているファイルのハッシュ値がファイルの一覧と共に、指定した出力先のファイルに送られます。 これらの行は極めて長いのですが、出力形式は簡単にすぐに解析できます。 たとえば、これらのリリースで異なっているすべてのファイルを知りたいのであれば、以下のコマンドを実行してください。 [source,shell] .... # cat outfile.ids | awk '{ print $1 }' | more /etc/master.passwd /etc/motd /etc/passwd /etc/pf.conf .... 上の表示例では出力は切り捨てられており、実際にはもっと多くのファイルが存在します。 これらのファイルには、運用中に変更されるファイルがあります。 たとえば、[.filename]#/etc/passwd# はユーザがシステムに追加されると変更されます。 また、カーネルモジュールは、`freebsd-update` によりアップデートされるため、変更されます。 このような特別なファイルやディレクトリを除外するには、それらを [.filename]#/etc/freebsd-update.conf# の `IDSIgnorePaths` オプションに追加してください。 [[updating-bootcode]] == ブートコードのアップデート ブートコードおよびブートローダのアップデートプロセスについては、 man:gpart[8], man:gptboot[8], man:gptzfsboot[8] および man:loader.efi[8] のマニュアルを参照してください。 [[updating-upgrading-documentation]] == ドキュメントのアップデート ドキュメントは、FreeBSD オペレーティングシステムの必須要素です。 FreeBSD ドキュメントの最新バージョンは、FreeBSD ウェブサイト (link:https://docs.FreeBSD.org/[Documentation Portal]) から入手できますが、 FreeBSD ウェブサイト、ハンドブック、FAQ および文書の最新版をローカルに用意しておくと便利です。 この章では、ソースまたは Ports Collection を使って、ローカルの FreeBSD ドキュメントを最新に保つ方法を説明します。 ドキュメントを編集したり、ドキュメントの誤りを報告する方法については、新しい貢献者のための FreeBSD ドキュメンテーションプロジェクト入門 (extref:{fdp-primer}[FreeBSD Documentation Project Primer]) をご覧ください。 [[updating-installed-documentation]] === ソースから FreeBSD ドキュメントをインストールする ソースから FreeBSD ドキュメントを構築するのに必要なツールは、FreeBSD のベースシステムには含まれていません。 必要なツールは、新しい貢献者のための FreeBSD ドキュメンテーションプロジェクト入門で extref:{fdp-primer}[説明されているステップ, overview-quick-start] に従ってインストールしてください。 インストールしたら、git を使って、ドキュメントのソースをダウンロードしてください。 [source,shell] .... # git clone https://git.FreeBSD.org/doc.git /usr/doc .... 最初にドキュメントのソースをダウンロードするには少し時間がかかります。 ダウンロードが終わるまでお待ちください。 ダウンロードしたドキュメントのソースをアップデートするには、 以下のコマンドを実行してください。 [source,shell] .... # git pull .... 最新のドキュメントのソースのスナップショットを [.filename]#/usr/doc# に用意できたら、インストールされているドキュメントをアップデートする準備はすべて整いました。 ドキュメントをアップデートするには、以下のように入力してください。 [source,shell] .... # cd /usr/doc # make .... [[current-stable]] == 開発ブランチを追いかける FreeBSD には二つの開発ブランチがあります。 それは FreeBSD-CURRENT と FreeBSD-STABLE です。 この節ではそれぞれのブランチと対象としている読者についての説明と、 どのようにしてシステムの対応するブランチを最新の状態に保つかについて説明します。 [[current]] === FreeBSD-CURRENT を使う FreeBSD-CURRENT とは FreeBSD の開発の "最前線" なので、FreeBSD-CURRENT のユーザは高い技術力を持つことが要求されます。 そこまでの技術力を持っていないが、開発ブランチを追いかけたいと考えているユーザは、かわりに FreeBSD-STABLE を追いかけると良いでしょう。 FreeBSD-CURRENT は FreeBSD の最新のソースコードであり、中には現在開発途上のソフトウェア、実験的な変更、あるいは過渡的な機能などが含まれています。 また、この中に入っている機能がすべて、次の公式リリースに入るとは限りません。 FreeBSD-CURRENT をソースからほぼ毎日コンパイルしている人はたくさんいますが、短い期間ではコンパイルさえできない状態になっている時期もあります。 これらの問題は可能な限り迅速に解決されますが、FreeBSD-CURRENT が不幸をもたらすか、それとも新しい機能をもたらすかは、まさにソースコードを同期した瞬間によるのです! FreeBSD-CURRENT は、次の 3 つの重要なグループを対象としています。 . ソースツリーのある部分に関して活発に作業している FreeBSD コミュニティのメンバ。 . 活発にテストしている FreeBSD コミュニティのメンバ。 彼らは、種々の問題を解決するのに時間を惜しまない人々であり、 さまざまな変更に関する提案や FreeBSD の大まかな方向付けを行ないたいと思っている人々でもあり、 パッチも提出します。 . さまざまな事に目を向け、 参考のために最新のソースを使いたいと思っていたり、 時々コメントやコードを寄稿したいと考えているユーザ。 FreeBSD-CURRENT は、次のリリースの前に、最も早く新しい機能を入手する手段として、期待しては__いけません__。 リリース前の機能は十分にテストされていないため、バグを含んでいる可能性が大いにあるためです。 また、バグを修正するための素早い方法でもありません。 いかなるコミットは、元からあるバグを修正するのと同じく、新しいバグを生み出すおそれがあります。 FreeBSD-CURRENT には "公式のサポート" はありません。 FreeBSD-CURRENT を追いかけるには . {freebsd-current} と {dev-commits-src-main} メーリングリストに加わってください。 さまざまな人がシステムの現在の状態について述べているコメントを見たり、FreeBSD-CURRENT の現在の状態に関する重要な情報を見逃さないために、 _必須の_ ことです。 + {dev-commits-src-main} メーリングリストでは、それぞれの変更についての commit ログが記録されています。 また、それに関して起こり得る副作用の情報を得ることができますので、参加する価値のあるメーリングリストです。 + これらのメーリングリストに入るには、 {mailing-lists} をたどって参加したいメーリングリストをクリックし、手順の説明にしたがってください。 FreeBSD-CURRENT だけでなく、ソースツリー全体の変更点を追いかけるのであれば、 {dev-commits-src-all} メーリングリストを購読してください。 . FreeBSD-CURRENT のソースを同期してください。 通常は `git` を使って FreeBSD Git リポジトリの `main` ブランチから -CURRENT コードをチェックアウトしてください (crossref:mirrors[git,「Git を使う」] を参照してください)。 . リポジトリのサイズが大きいため、興味のある部分や、パッチを当てる部分のソースのみを同期するユーザもいます。 しかしながら、ソースからオペレーティングシステムをコンパイルしようと思っているユーザは、一部分だけではなく、FreeBSD-CURRENT の _すべて_ をダウンロードする必要があります。 + FreeBSD-CURRENT をコンパイルする前に [.filename]#/usr/src/Makefile# を注意深く読み、<> に書かれている手順に従ってください。 {freebsd-current} と [.filename]#/usr/src/UPDATING# を読めば、次のリリースへ向けて移ってゆくに当たって、ときどき必要となる既存システムからの新システムの構築手順についての最新情報が得られるでしょう。 . アクティブになってください! FreeBSD-CURRENT のユーザには、 拡張やバグ潰しに関して提案することが勧められています。 コードを伴う提案はいつでも歓迎されます! [[stable]] === FreeBSD-STABLE を使う FreeBSD-STABLE とは定期的に公開されるリリースを作成するための開発ブランチです。 このブランチに加えられる変更は FreeBSD-CURRENT よりゆっくりで、原則として、事前に FreeBSD-CURRENT で試験ずみであるという特徴があります。 ただ__そうであっても__、これは開発用ブランチの一つであり、ある時点における FreeBSD-STABLE のソースがどんな場合にも使えるものであるとは限りません。 このブランチはもう一つの開発の流れというだけであって、エンドユーザ向けのものではありません。 もし試験をする資源的な余裕がない場合は、代わりに最新の FreeBSD リリースを使ってください。 FreeBSD の開発プロセスに興味があったり、それに対する貢献を考えていて、特にそれが次回の FreeBSD のリリースに関係するものであるなら FreeBSD-STABLE を追うことを考えると良いでしょう。 FreeBSD-STABLE ブランチはいつもコンパイルができ、安定に動作すべきですが、それが保証されているというわけではありません。 FreeBSD-STABLE のユーザは FreeBSD-CURRENT よりも多いため、FreeBSD-CURRENT で発見されなかったバグが FreeBSD-STABLE で発見され、ときどきそれが問題となることがあるのは避けることができません。 このような理由から、盲目的に FreeBSD-STABLE を追いかけるべきではありません。 特に、開発環境もしくはテスト環境でコードを十分に試験せずに、プロダクション品質が要求されるサーバを FreeBSD-STABLE にアップグレードしては__いけません__。 FreeBSD-STABLE を追いかけるには . FreeBSD-STABLE の構築に関連する事柄や、その他の注意すべき点 に関する情報を得るために、 {freebsd-stable} メーリングリストに加わってください。 また開発者は議論の余地がある修正や変更を考えている場合に、このメーリングリストで公表し、提案された変更に関して問題が生じるかどうかを返答する機会をユーザに与えます。 + 追いかけているブランチに関連する git メーリングリストに参加してください。 たとえば、{betarel-current-major}-STABLE ブランチを追いかけているユーザは {dev-commits-src-branches} メーリングリストに参加してください。 このリストでは、変更がなされるごとに作成される commit log やそれに伴う起こりうる副作用についての情報が記録されています。 + これらのメーリングリストに入るには、 {mailing-lists} をたどって参加したいメーリングリストをクリックし、手順の説明にしたがってください。 ソースツリー全体の変更点を追いかけるには、 {dev-commits-src-all} メーリングリストを購読してください。 . 新しい FreeBSD-STABLE システムをインストールするには、 crossref:mirrors[mirrors,ミラーサイト] から最近の FreeBSD-STABLE リリースをインストールするか、毎月公開されている FreeBSD-STABLE からビルドされたスナップショットを使ってください。 スナップショットの詳細については、link:https://www.FreeBSD.org/ja/snapshots/[www.freebsd.org/ja/snapshots] をご覧ください。 + 既に FreeBSD が動いているシステムを FreeBSD-STABLE にアップグレードするには、`git` を使って、希望する開発ブランチのソースをチェックアウしてください。 `stable/9` といったブランチ名は、link:https://www.FreeBSD.org/releng/[www.freebsd.org/releng] で説明されています。 . FreeBSD-STABLE をコンパイルしたり FreeBSD-STABLE へとアップグレードする前に、 [.filename]#/usr/src/Makefile# を注意深く読み、 <> に書かれている手順に従ってください。 {freebsd-stable} と [.filename]#/usr/src/UPDATING# を読んで、次のリリースへ向けて移ってゆくに当たって、ときどき必要となる既存システムからの新システムの構築手順についての最新情報を得てください。 [[translate-n-number]] === n-番号 バグを追跡する際は、問題が発生したシステムの構築に用いられたソースコードのバージョンを把握することが重要となります。 FreeBSD は、バージョン情報をカーネルのコンパイル時に埋め込みます。 man:uname[1] を使ってこの情報を調べることができます。以下はその例です。 [source,shell] .... % uname -v FreeBSD 14.0-CURRENT #112 main-n247514-031260d64c18: Tue Jun 22 20:43:19 MDT 2021 fred@machine:/usr/home/fred/obj/usr/home/fred/git/head/amd64.amd64/sys/FRED .... 最後のフィールドから、カーネル名、ビルドを行ったユーザ、およびコンパイルを行った場所がわかります。 また、4 番目のフィールドは、いくつかの要素から構成されていることがわかります。 [source,shell] .... main-n247514-031260d64c18 main <.> n247514 <.> 031260d64c18 <.> <.> .... <.> Git ブランチ名。 注意: n-番号の比較は、FreeBSD プロジェクトで作成されたブランチ (`main`, `stable/XX` および `releng/XX`) でのみ有効です。 ローカルブランチでは、親ブランチのコミットと n-番号が重複してしまいます。 <.> n-番号は、ハッシュ値が含まれるようになった git リポジトリの使用開始からのコミットを数えたものです。 <.> チェックアウトしたツリーのハッシュ値。 <.> `-dirty` が表示されることがあります。 変更点がコミットされていないツリーでカーネルが構築された場合に表示されます。 この例では、チェックアウトから変更なく FRED カーネルが構築されたため、出力されていません。 `git rev-list` コマンドを使って、ハッシュ値に対応する n-番号を調べることができます。 以下はその例です。 [source,shell] .... % git rev-list --first-parent --count 031260d64c18 <.> 247514 <.> .... <.> 変換する git ハッシュ値 (ここでは先の例のハッシュ値を使用しています) <.> n-番号 この数字は通常それほど重要ではありません。 しかしながら、バグの修正がコミットされた時には、この数字を使うことで、使用しているシステムでバグが修正されているかどうかを簡単に調べることができます。 ハッシュ値は簡単に目にする識別子である一方で n-番号はそうではありません。 そのため、開発者は通常 n-番号ではなくコミットのハッシュ値 (または、ハッシュ値を含む URL) を参照します。 セキュリティ勧告および errata 情報では n-番号が示されており、使用しているシステムの番号と直接比較できます。 `git rev-list` コマンドは、レポジトリのリビジョンをすべてカウントしますが、git の shallow clone はその情報を取得しないため、shallow clone を使用しなければならない場合には、n-番号は信頼できません。 [[makeworld]] == ソースを用いた FreeBSD のアップデート ソースをコンパイルしてFreeBSD をアップデートする方法は、 バイナリを用いたアップデートに比べ、いくつもの利点があります。 特定のハードウェアをうまく利用するためのオプションを設定してコードを構築できます。 ベースシステムの特定の箇所の設定をデフォルトの設定から変更したり、必要がない部分を完全に削除して構築することもできます。 システムを構築することによるアップデートは、バイナリアップデートをインストールするだけのアップデートに比べ時間がかかりますが、利用環境に合わせた FreeBSD を作成するような完全なカスタマイズが可能です。 [[updating-src-quick-start]] === クィックスタート 以下は FreeBSD をソースから構築してアップデートする典型的な方法についてのクイックリファレンスです。 その後の節では、各プロセスをより詳細に説明します。 [WARNING] ==== man:mergemaster[8] から man:etcupdate[8] に移行する際に、初めて man:etcupdate[8] を実行すると、変更点が不適切にマージされ、衝突が起きてしまうことがあります。 これを避けるには、ソースを更新して新しく buildworld を行う *前に* 以下のステップを行ってください。 [source,shell] .... # etcupdate extract <.> # etcupdate diff <.> .... <.> [.filename]#/etc# ファイルを保存するデータベースをブートストラップしてください。 詳細については、 man:etcupdate[8] を参照してください。 <.> ブートストラップ後、差分を確認してください。 不必要なローカルでの変更点をなくし、将来的なアップデートにおいて、衝突が起きる可能性が低くなるようにしてください。 ==== [.procedure] ==== * アップデートおよびビルド + [source,shell] .... # git pull /usr/src <.> /usr/src/UPDATING の確認 <.> # cd /usr/src <.> # make -j4 buildworld <.> # make -j4 kernel <.> # shutdown -r now <.> # etcupdate -p <.> # cd /usr/src <.> # make installworld <.> # etcupdate -B <.> # shutdown -r now <.> .... <.> 最新版のソースを入手してください。 ソースの入手およびアップデートに関する情報については <> をご覧ください。 <.> ソースの構築の前後で必要となる手動の作業について、 [.filename]#/usr/src/UPDATING# を確認してください。 <.> ソースが置かれているディレクトリに移動してください。 <.> world (カーネルを除くすべて) をコンパイルしてください。 <.> カーネルをコンパイルしてインストールしてください。 ここに書かれているコマンドは、`make buildkernel installkernel` と同じです。 <.> 新しいカーネルを使うため、 システムを再起動してください。 <.> installworld を行う前に、[.filename]#/etc/# に置かれている設定ファイルのアップデートとマージを行ってください。 <.> ソースが置かれているディレクトリに移動してください。 <.> world をインストールしてください。 <.> [.filename]#/etc/# に置かれている設定ファイルのアップデートとマージを行ってください。 <.> 新しく構築された world およびカーネルを利用するため、 システムを再起動してください。 ==== [[updating-src-preparing]] === ソースを用いたアップデートのための準備 [.filename]#/usr/src/UPDATING# を読んでください。 このファイルには、 アップデートの前後で必要となる手動の作業について書かれています。 [[updating-src-obtaining-src]] === ソースコードのアップデート FreeBSD のソースコードは [.filename]#/usr/src/# に置かれています。 このソースコードのアップデートには、Git バージョン管理システムを利用する方法が推奨されています。 まず、ソースコードがバージョン管理下にあることを確認してください。 [source,shell] .... # cd /usr/src # git remote --v origin https://git.freebsd.org/src.git (fetch) origin https://git.freebsd.org/src.git (push) .... この結果は、[.filename]#/usr/src/# がバージョン管理下にあり、man:git[1] を使ってアップデートできることを示しています。 [source,shell] .... # git pull /usr/src .... このディレクトリをアップデートしていない期間が長いと、アップデートのプロセスには時間がかかります。 このプロセスが終わると、ソースコードは最新となり、次節以降で説明する構築のプロセスを実行できます。 .ソースコードの入手 [NOTE] ==== `fatal: not a git repository` と出力された場合には、ファイルがなかったり、別な方法によりインストールされているので、新しくソースコードをチェックアウトする必要があります。 [[updating-src-obtaining-src-repopath]] .FreeBSD のバージョンおよびリポジトリブランチ [cols="1,1,1", options="header"] |=== | uname -r の出力 | リポジトリパス | 説明 |`_X.Y_-RELEASE` |`releng/_X.Y_` |このリリースバージョンに対する重大なセキュルティへの対応およびバグの修正パッチのみが適用されています。 このブランチは、ほとんどのユーザに推奨されます。 |`_X.Y_-STABLE` |`stable/_X_` | リリースバージョンに対し、そのブランチにおけるすべての開発の成果が反映されたものです。 _STABLE_ では、Applications Binary Interface (ABI) は変更されないため、このブランチのシステムであれば、以前のバージョンでコンパイルされたソフトウェアを実行できます。 たとえば、FreeBSD 10.1 で実行するようにコンパイルされたソフトウェアは、その後構築された FreeBSD 10-STABLE 上でも実行できます。 STABLE ブランチは、 時期によってはユーザに影響するようなバグや非互換性を持つことがあります。 これらは通常すぐに修正されます。 |`_X_-CURRENT` |`main` |リリースが行われていない最新の FreeBSD の開発バージョンです。 CURRENT ブランチは大きなバグや非互換があることもあるので、 高度な知識を持ったユーザのみ使用が推奨されます。 |=== man:uname[1] を使って FreeBSD のバージョンを確認してください。 [source,shell] .... # uname -r 10.3-RELEASE .... <> から分かるように、`10.3-RELEASE` のアップデートのためのソースコードのパスは、`releng/10.3` です。 このパスは、ソースコードをチェックアウトする時に使います。 [source,shell] .... # mv /usr/src /usr/src.bak <.> # git clone --branch releng/10.3 https://git.FreeBSD.org/src.git /usr/src <.> .... <.> この古いディレクトリを、 邪魔にならないように移動してください。 このディレクトリ以下に対して変更を行ってなければ、 削除しても構わないでしょう。 <.> リポジトリの URL に <> に記載されているパスを追加します。 3 番目のパラメータには、 ローカルシステム上でソースコードが置かれるディレクトリを指定します。 ==== [[updating-src-building]] === ソースからの構築 まず最初に _world_ (カーネルを除くオペレーティングシステムのすべて) をコンパイルします。 このステップを最初に実行するのは、カーネルの構築を最新のツールを使って行うようにするためです。 このステップが終わったら、カーネルそのものを構築します。 [source,shell] .... # cd /usr/src # make buildworld # make buildkernel .... コンパイルされたコードは [.filename]#/usr/obj# に書き出されます。 これは基本のステップです。 構築をコントロールする追加のオプションについては、 以下で説明します。 [[updating-src-building-clean-build]] ==== クリーンビルドの実行 FreeBSD ビルドシステムのいくつかのバージョンは、オブジェクトが一時的に置かれるディレクトリ [.filename]#/usr/obj# に前回のコンパイルされたコードを残します。 これにより、変更されていないコードを再コンパイルせずにすむので、その後の構築時間を短縮できます。 すべてを再構築するには、構築を開始する前に、`cleanworld` を実行してください。 [source,shell] .... # make cleanworld .... [[updating-src-building-jobs]] ==== ジョブの数の設定 マルチコアプロセッサを搭載するシステムでは、構築のためのジョブの数を増やすことで、構築にかかる時間を短縮できます。 `sysctl hw.ncpu` を使って、コアの数を確認してください。 ジョブの数がどのように構築の速さに影響するかを確実に知るには、プロセッサにより異なりますし、FreeBSD のバージョンにより使用されるビルドシステムも変わるため、実際に試してみるしか方法はありません。 試してみる最初のジョブの数の候補としては、コアの数の半分から倍の数の間で検討してみてください。 ジョブの数は、`-j` を使って指定します。 [[updating-src-building-jobs-example]] .構築のジョブの数を増やす [example] ==== 以下は 4 つのジョブで world とカーネルを構築する例です。 [source,shell] .... # make -j4 buildworld buildkernel .... ==== [[updating-src-building-only-kernel]] ==== カーネルのみを構築する ソースコードが変更された場合には、`buildworld` を完了しなければいけません。 その後、いつでも `buildkernel` でカーネルを構築できます。 カーネルだけを構築するには、以下のように実行してください。 [source,shell] .... # cd /usr/src # make buildkernel .... [[updating-src-building-custom-kernel]] ==== カスタムカーネルの構築 FreeBSD 標準のカーネルは、[.filename]#GENERIC# と呼ばれる _カーネルコンフィグレーションファイル_ に基づいています。 [.filename]#GENERIC# カーネルには、最も良く使われるデバイスドライバやオプションが含まれています。 しかしながら、特定の目的に合わせてデバイスドライバやオプションを削除したり追加するためには、カスタムカーネルを構築することが有用であったり、必要となることがあります。 たとえば、極端に RAM が制限されているような小さな組み込みのコンピュータを開発しているユーザであれば、 必要のないデバイスドライバやオプションを削除することで、 カーネルを少しでも小さくできるでしょう。 カーネルのコンフィグレーションファイルは、 [.filename]#/usr/src/sys/arch/conf/# に置かれています。ここで、 _arch_ は `uname -m` の出力です。 ほとんどのコンピュータは `amd64` であり、 コンフィグレーションファイルが置かれているディレクトリは [.filename]#/usr/src/sys/amd64/conf/# です。 [TIP] ==== [.filename]#/usr/src# は、削除されたり作り直されたりする可能性があるため、カスタムカーネルのコンフィグレーションファイルは、[.filename]#/root# のような別のディレクトリで管理することが好ましいです。 カーネルコンフィグレーションファイルは、[.filename]#conf# ディレクトリにリンクします。 このディレクトリが削除されたり、上書きされた場合には、カーネルコンフィグレーションファイルを新しいディレクトリにもう一度リンクしてください。 ==== カスタムコンフィグレーションファイルは、[.filename]#GENERIC# コンフィグレーションファイルをコピーして作成できます。 たとえば、ストレージサーバ用の [.filename]#STORAGESERVER# という名前の新しいカスタムカーネルは、以下のようにして作成できます。 [source,shell] .... # cp /usr/src/sys/amd64/conf/GENERIC /root/STORAGESERVER # cd /usr/src/sys/amd64/conf # ln -s /root/STORAGESERVER . .... その後 [.filename]#/root/STORAGESERVER# を編集し、 man:config[5] で示されるデバイスやオプションを追加したり削除してください。 コマンドラインからカーネルコンフィグレーションファイルを `KERNCONF` に指定することで、 カスタムカーネルを構築できます。 [source,shell] .... # make buildkernel KERNCONF=STORAGESERVER .... [[updating-src-installing]] === コンパイルされたコードのインストール `buildworld` および `buildkernel` が完了したら、 新しいカーネルと world をインストールしてください。 [source,shell] .... # cd /usr/src # make installkernel # shutdown -r now # cd /usr/src # make installworld # shutdown -r now .... カスタムカーネルを構築した場合は、 新しいカスタムカーネルを `KERNCONF` に設定して実行してください。 [source,shell] .... # cd /usr/src # make installkernel KERNCONF=STORAGESERVER # shutdown -r now # cd /usr/src # make installworld # shutdown -r now .... [[updating-src-completing]] === アップデートの完了 アップデートの完了までに、いくつかの最終作業が残されています。 デフォルトから変更した設定ファイルを新しいバージョンのファイルにマージし、古くなったライブラリを見つけて削除した後に、システムを再起動します。 [[updating-src-completing-merge-etcupdate]] ==== man:etcupdate[8] を用いた設定ファイルのマージ man:etcupdate[8] は、[.filename]#/etc/# 以下のファイルのように installworld のプロセスで更新されないファイルをアップデートするツールです。 このツールは、ローカルにあるファイルに対する変更点を 3-way マージでアップデートします。 man:mergemaster[8] の対話的なプロンプトと対照的に、このツールはユーザによる操作を最小限になるように設計されています。 [NOTE] ==== 一般的に、man:etcupdate[8] は、実行する際に特定の引数を必要としません。 しかしながら、man:etcupdate[8] を最初に使用した際に、どのようなアップデートが行われたかの健全性をチェックする便利なコマンドがあります。 [source,shell] .... # etcupdate diff .... このコマンドにより、ユーザは設定の変更を検証できます。 ==== man:etcupdate[8] が自動的にファイルをマージできない場合には、 以下を実行することで、手動の操作により衝突を解決できます。 [source,shell] .... # etcupdate resolve .... [WARNING] ==== man:mergemaster[8] から man:etcupdate[8] に移行する際に、 最初に man:etcupdate[8] を実行すると、不適切に変更点がマージされ、誤った衝突が起こる可能性があります。 これを避けるには、ソースを更新して新しく buildworld を行う *前に* 以下のステップを行ってください。 [source,shell] .... # etcupdate extract <.> # etcupdate diff <.> .... <.> [.filename]#/etc# ファイルを保存するデータベースをブートストラップしてください。 詳細については、 man:etcupdate[8] を参照してください。 <.> ブートストラップ後、差分を確認してください。 不必要なローカルでの変更点をなくし、将来的なアップデートにおいて、衝突が起きる可能性が低くなるようにしてください。 ==== [[updating-src-completing-merge-mergemaster]] ==== man:mergemaster[8] を用いた設定ファイルのマージ man:mergemaster[8] を用いることで、システムの設定ファイルに行われている変更を、これらのファイルの新しいバージョンにマージできます。 man:mergemaster[8] は、設定ファイルのアップデートで推奨されている man:etcupdate[8] の代価のツールです。 `-Ui` オプションを使って man:mergemaster[8] を実行すると、 ユーザが手を加えていないファイルのアップデートおよび新しく追加されたファイルのインストールを自動的に行います。 [source,shell] .... # mergemaster -Ui .... ファイルのマージを手動で行う必要がある時は、ファイルの中で残す箇所の選択を対話的におこなうようなインタフェースが表示さます。 詳細については、man:mergemaster[8] をご覧ください。 [[updating-src-completing-check-old]] ==== 使われなくなったファイルやライブラリの確認 アップデート後に、使われなくなったファイルやディレクトリが残ることがあります。 これらのファイルは、 [source,shell] .... # make check-old .... で確認でき、以下のようにして削除できます。 [source,shell] .... # make delete-old .... 同様に使われなくなったライブラリが残ることもあります。 これらのライブラリは、 [source,shell] .... # make check-old-libs .... で確認でき、以下のようにして削除できます。 [source,shell] .... # make delete-old-libs .... これらの古いライブラリを利用しているプログラムは、ライブラリが削除されると動かなくなります。 これらのプログラムは、古いライブラリを削除した後に、再構築もしくは置き換える必要があります。 [TIP] ==== 古いファイルとディレクトリのすべてを削除しても問題ないことを確認したら、コマンドに `BATCH_DELETE_OLD_FILES` を設定することで、各ファイルを削除する際に kbd:[y] および kbd:[Enter] を押さなくても済むようにできます。 以下はその例です。 [source,shell] .... # make BATCH_DELETE_OLD_FILES=yes delete-old-libs .... ==== [[updating-src-completing-restart]] ==== アップデート後の再起動 コンピュータを再起動して、すべての変更を反映させることが、 アップデートの最後におこなう作業です。 [source,shell] .... # shutdown -r now .... [[small-lan]] == 複数のマシンで追いかける 複数のコンピュータで同じソースツリーを追いかけていて、全部のマシンにソースをダウンロードして全部を再構築するのは、ディスクスペース、ネットワーク帯域、そして CPU サイクルの無駄使いです。 解決策は 1 つのマシンに仕事のほとんどをさせ、残りのマシンは NFS 経由でそれをマウントする、というものです。 このセクションではそのやり方を概観します。NFS の使い方の詳細については、crossref:advanced-networking[network-nfs,「NFS」] をご覧下さい。 まず初めに、同じバイナリで動かそうとするマシンたちを決めます。 このマシンたちのことを__ビルドセット__と呼びます。 それぞれのマシンはカスタムカーネルを持っているかもしれませんが、同じユーザランドバイナリを動かそうというのです。 このビルドセットから、 __ビルドマシン__となるマシンを 1 台選びます。 ベースシステムとカーネルを構築するのはこのマシンになります。 理想的には、このマシンは `make buildworld` と `make buildkernel` を実行するのに十分な CPU を持った速いマシンであるべきです。 _テストマシン_ となるべきマシンも選んでください。 更新されたソフトウェアを使う前にそのマシンでテストするのです。 テストマシンはかなり長い時間落ちていても だいじょうぶなマシン__であったほうがいいでしょう__。 ビルドマシンでもかまいませんが、ビルドマシンである必要はありません。 このビルドセットのマシンはすべて [.filename]#/usr/obj# と [.filename]#/usr/src# をビルドマシンから FTP 経由でマウントする必要があります。 ビルドセット自体が複数ある場合は、[.filename]#/usr/src# はひとつのビルドマシン上にあるべきです。 他のマシンからはそれを NFS マウントするようにしましょう。 ビルドセットのすべてのマシン上の [.filename]#/etc/make.conf# と [.filename]#/etc/src.conf# がビルドマシンと一致していることを確認してください。 つまり、ビルドマシンはビルドセットのどのマシンもインストールしようとしているベースシステムを全部ビルドしなければならないということです。 また、各ビルドマシンは [.filename]#/etc/make.conf# にそれぞれのビルドマシンのカーネル名を `KERNCONF` で指定し、ビルドマシンは自分自身のカーネルから順に全部のカーネル名を `KERNCONF` にリストアップしてください。 ビルドマシンは各マシンのカーネル設定ファイルを [.filename]#/usr/src/sys/arch/conf# に持っていなければなりません。 ビルドマシンにて、<> に書いてあるようにカーネルとベースシステムを構築してください。 でも、まだビルドマシンにはインストールしないでください。 そのかわり、ビルドしたカーネルをテストマシンにインストールしてください。 FTP 経由で [.filename]#/usr/src# および [.filename]#/usr/obj# をテストマシンにマウントしてください。 その後、`shutdown now` を実行してシングルユーザモードに移行し、新しいカーネルとベースシステムをインストールし、いつもするように `mergemaster` を実行してください。 終わったら、再起動して通常のマルチユーザ動作に戻します。 テストマシンにあるものすべてがちゃんと動いている確信が得られたら、同じ手順でビルドセットの他のマシンにも新しいソフトウェアをインストールします。 ports ツリーにも同じ方法が使えます。 最初のステップは、ビルドセットのすべてのマシンが NFS 経由で [.filename]#/usr/ports# をマウントすることです。 そして、distfiles を共有するように [.filename]#/etc/make.conf# を設定します。 NFS マウントによってマップされる `root` ユーザが何であれ、`DISTDIR` はそのユーザが書き込める共通の共有ディレクトリに設定する必要があります。 ports をローカルでビルドする場合には、各マシンは `WRKDIRPREFIX` を自分のマシンのビルドディレクトリに設定しなければなりません。 また、ビルドシステムが packages をビルドしてビルドセットのコンピュータに配布するのであれば、`DISTDIR` と同じようにビルドシステム上の `PACKAGES` ディレクトリも設定してください。 diff --git a/documentation/content/ja/books/handbook/introduction/_index.adoc b/documentation/content/ja/books/handbook/introduction/_index.adoc index f7ed678b3e..c86ddfccc7 100644 --- a/documentation/content/ja/books/handbook/introduction/_index.adoc +++ b/documentation/content/ja/books/handbook/introduction/_index.adoc @@ -1,284 +1,283 @@ --- title: 第1章 はじめに part: パートI. 導入 prev: books/handbook/parti next: books/handbook/bsdinstall description: この章では FreeBSD の歴史、目標、開発モデルなど、 FreeBSD プロジェクトに関するさまざまな事柄を扱います。 tags: ["introduction", "synopsis", "about", "Who Uses FreeBSD", "goals", "history"] showBookMenu: true weight: 3 path: "/books/handbook/introduction/" -aliases: ["/ja/books/handbook/nutshell/","/ja/books/handbook/history/"] --- [[introduction]] = はじめに :doctype: book :toc: macro :toclevels: 1 :icons: font :sectnums: :sectnumlevels: 6 :sectnumoffset: 1 :partnums: :source-highlighter: rouge :experimental: :images-path: books/handbook/introduction/ ifdef::env-beastie[] ifdef::backend-html5[] :imagesdir: ../../../../images/{images-path} endif::[] ifndef::book[] include::shared/authors.adoc[] include::shared/mirrors.adoc[] include::shared/releases.adoc[] include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists.adoc[] include::shared/{{% lang %}}/urls.adoc[] toc::[] endif::[] ifdef::backend-pdf,backend-epub3[] include::../../../../../shared/asciidoctor.adoc[] endif::[] endif::[] ifndef::env-beastie[] toc::[] include::../../../../../shared/asciidoctor.adoc[] endif::[] [[introduction-synopsis]] == この章では FreeBSD に興味を持っていただきありがとうございます! この章では FreeBSD の歴史、目標、開発モデルなど、 FreeBSD プロジェクトに関するさまざまな事柄を扱います。 この章に書かれている話題は、次のようなものです。 * FreeBSD とその他のオペレーティングシステムとの違い * FreeBSD プロジェクトの歴史 * FreeBSD プロジェクトの目標 * FreeBSD オープンソース開発モデルの基本的な考え方 * そして、"FreeBSD" という名前の由来について [[nutshell]] == FreeBSD へようこそ! FreeBSD は、標準に準拠した Unix-like なオープンソースのオペレーティングシステムで、 x86 (32 および 64 ビットの両方), ARM(R), AArch64, RISC-V(R), MIPS(R), POWER(R), PowerPC(R) および Sun UltraSPARC(R) コンピュータに対応しています。 FreeBSD は、プリエンプティブなマルチタスク、 メモリ保護、仮想メモリ、マルチユーザシステム、SMP 対応、 さまざまな言語やフレームワーク用のすべてのオープンソースの開発ツール、 X ウィンドウシステム、KDE や GNOME を中心としたデスクトップ機能といった、 今日では標準となっている機能をすべて提供しています。 注目すべき機能は以下の通りです。 * _自由なオープンソースライセンス_。 ソースコードを自由に変更し、配布することができます。 潜在的なライセンスの互換性の問題を避け、 コピーレフトライセンスに典型的な制限を課すことなく、 オープンソースプロジェクトおよびクローズな製品の両方に組み込むことが可能です。 * _堅固な TCP/IP ネットワーク_ - FreeBSD は、 かってないほどの性能とスケーラビリティを兼ね備えた業界標準プロトコルを実装しています。 サーバおよびルータ/ファイアウォールルールの両方と相性が良く、 実際に多くの会社やベンダがまさにこの目的で採用しています。 * _完全に統合された OpenZFS への対応_。 これには root-on-ZFS, ZFS ブート環境、障害管理、 委任管理、jails への対応、FreeBSD 固有の文書、 そしてシステムのインストーラによる対応が含まれます。 * Capsicum ケーパビリティおよびサンドボックスメカニズムに対する強制アクセスコントロールフレームワークによる _拡張されたセキュリティ機能_。 * 対応しているすべてのアーキテクチャで利用可能な _3 万を超えるコンパイル済みの packages_。 そして、あなた自身のカスタマイズされたソフトウェアの構築を容易にする Ports Collection。 * _ドキュメント_ - システム管理からカーネル内部にまで渡る内容に関する、 さまざまな著者によるハンドブックやブックに加え、 man:man[1] ページが用意されています。 ユーザ空間のデーモン、 ユーティリティおよびコンフィグレーションファイルだけではなく、 カーネルドライバの API (セクション 9) および個々のドライバ (セクション 4) も用意されています。 * _分かりやすく首尾一貫したリポジトリ構造とビルドシステム_ - FreeBSD は、カーネルおよびユーザ空間の両方について、 すべての構成要素をひとつのリポジトリで管理しています。 統一されカスタマイズが容易なビルドシステムおよび綿密に考えられた開発プロセスが、 あなた自身の製品のビルドインフラストラクチャに FreeBSD を統合することを容易にします。 * _Unix の哲学に忠実であり続けます_。 ハードコードされたモノリシックな "オールインワン" デーモンより、 要素から構成することを好みます。 * Linux との _バイナリ互換_。 仮想化の必要なしに多くの Linux バイナリを実行できます。 FreeBSD はカリフォルニア大学バークレイ校の Computer Systems Research Group (CSRG) による 4.4BSD-Lite リリースを基にしており、 BSD システムの開発の優れた伝統を守り続けています。 CSRG による素晴らしい活動に加えて、 FreeBSD プロジェクトは何千時間もの時間を注ぎ込んで、 実際の使用の場において最大の性能と信頼性を発揮するためにシステムのチューニングをおこなっています。 FreeBSD は、商用のオペレーティングシステムと同等の性能、信頼性を、 他では実現されていない数多くの最新の機能と共に提供しています。 [[os-overview]] === FreeBSD で何ができるの? あなたの思いつく限りのアプリケーションは、何でも FreeBSD で実行できます。ソフトウェア開発からファクトリオートメーション、 在庫制御から遠く離れた人工衛星のアンテナの方向調整まで; 商用 UNIX(R) 製品でできることは、FreeBSD でも十分にできるのです! また、FreeBSD は世界中の研究センターや大学によって開発される文字通り何千もの高品質で、 たいていはほとんど無料で利用できるアプリケーションによる恩恵を得ることができます。 FreeBSD のソースコードは自由に提供されているので、 システムも特別なアプリケーションやプロジェクトに合わせて、 いくらでもカスタマイズすることができます。 これは有名な商業ベンダから出ているほとんどのオペレーティング システムでは不可能なことです。以下に現在 FreeBSD を 使っている人々のアプリケーションの例をいくつか上げます: * _インターネットサービス:_ FreeBSD に組み込まれている 頑強な TCP/IP ネットワーキング機能は次のようなさまざまな インターネットサービスの理想的なプラットフォームになります: ** ウェブサーバ ** IPv4 および IPv6 ルーティング ** ファイアウォールと NAT ("IP マスカレード") ゲートウェイ ** FTP サーバ ** メールサーバ ** さらにいろいろ... * _教育:_ あなたは、計算機科学または関連分野の工学を専攻する学生さんですか? オペレーティングシステムやコンピュータアーキテクチャ、 ネットワークについて学習するなら、 実際に FreeBSD のソースコードを読んで、 それがどのように動作するのかを学ぶのが一番よい方法です。 また、無料で利用できる CAD や数学、 グラフィックデザインのパッケージがいくつもあるので、 コンピュータに関わる主要な目的が、 _他_ のことをすることにある方にも、 大いに役立ちます。 * _研究:_ システム全体のソースコードが利用できるため、 FreeBSD はオペレーティングシステムの研究だけでなく、 計算機科学の他の部門においても優れたプラットフォームです。 自由に利用できる FreeBSD の特長は、オープンフォーラムで 議論される特別なライセンスの同意や制限について心配することなく、 離れたグループでもアイディアや開発の共有による共同研究を可能にします。 * _ネットワーキング:_ 新しいルータが必要? ネームサーバ (DNS) は? 内部のネットワークを人々から守るファイアウォールは? FreeBSD はすみに眠っている使われていない PC を簡単に 洗練されたパケットフィルタリング機能を持つ高級なルータに 変えることができます。 * _組み込み:_ FreeBSD は、 組み込みシステムを構築する優れたプラットフォームとなります。 ARM(R), MIPS(R) および PowerPC(R) プラットフォームへのサポートとともに、強固なネットワークスタック、最新の機能および 寛容なextref:{faq}[BSD ライセンス, bsd-license-restrictions] により、FreeBSD は、組み込みルータ、ファイアウォールおよび他のデバイスを構築する優れた基盤となります。 * _デスクトップ:_ FreeBSD は、自由に利用できる X11 サーバを使うことによって、 安価なデスクトップとなります。 FreeBSD では、標準的な GNOME および KDE グラフィカルユーザインタフェースを含む、 数多くのオープンソースのデスクトップ環境を選択できます。 FreeBSD は、 中央のサーバから"ディスクレス"でもブート可能であり、 個々のワークステーションを安価で、 容易に管理することさえ可能にします。 * _ソフトウェア開発:_ 基本的な FreeBSD システムには、完全な C/C++ コンパイラやデバッガスイートを含む完全な開発ツールがついてきます。 他の多くの言語へのサポートも ports および package コレクションから利用できます。 FreeBSD は、無料でダウンロードできます。 また、CD-ROM または DVD でも入手可能です。 詳しくは crossref:mirrors[mirrors,FreeBSD の入手方法] をご覧ください。 [[introduction-nutshell-users]] === FreeBSD はどこに使われていますか? FreeBSD は、ウェブサービスの能力で知られています。 FreeBSD が利用されている代表的なサイトには link:https://news.ycombinator.com/[Hacker News], link:http://www.netcraft.com/[Netcraft], link:http://www.163.com/[NetEase], link:https://signup.netflix.com/openconnect[Netflix], link:http://www.sina.com/[Sina], link:http://www.sony.co.jp/[Sony Japan], link:http://www.rambler.ru/[Rambler], link:http://www.yahoo.com/[Yahoo!] および link:http://www.yandex.ru/[Yandex] があります。 FreeBSD は、 先進的な機能、高いセキュリティ、および定期的なリリースサイクル、 そして寛容なライセンスにより、 多くの商用およびオープンソースのアプライアンス、 デバイスおよび製品を構築するプラットフォームとして利用されています。 世界最大規模の多くの IT 会社が FreeBSD を使っています。 * link:http://www.apache.org/[Apache] - Apache ソフトウェア財団は、 1.4 百万回を超えるコミットというおそらく世界で最も大規模な SVN リポジトリを含む、数多くの公式のインフラストラクチャで FreeBSD を使っています。 * link:http://www.apple.com/[Apple] - Apple により提供されている最近のオペレーションシステムは、FreeBSD からプロセスモデル、ネットワークスタック、仮想ファイルシステム、ライブラリ、マニュアルページ、そしてコマンドラインユーティリティについてのコードを取り入れています。 * link:http://www.cisco.com/[Cisco] - IronPort ネットワークセキュリティおよびアンチスパムアプライアンスは、 改造された FreeBSD カーネルで動いています。 * link:http://www.citrix.com/[Citrix] - NetScaler の一連のセキュリティアプライアンスは、 FreeBSD シェルとともに 4-7 レイヤのロードバランス、 コンテントキャシュ、アプリケーションファイアウォール、 セキュリティ VPN およびモバイルクライド・ネットワークアクセスを提供します。 * link:https://www.emc.com/isilon[Dell EMC Isilon] - Isilon 社のエンタープライズストレージアプライアンスは、FreeBSD ベースです。 寛大な FreeBSD ライセンスのおかげで、Isilon は、 彼らの知的財産物をカーネルに統合することができるため、 オペレーティングシステムではなく、 製品そのものに焦点を当てた開発が可能となっています。 * link:http://www.quest.com/KACE[Quest KACE] - KACE システム管理アプライアンスでは、 FreeBSD が用いられています。信頼性、 スケーラビリティおよび継続的な開発をサポートしているコミュニティが評価され採用されています。 * link:http://www.ixsystems.com/[iXsystems] - 統合ストレージアプライアンスの TrueNAS シリーズは FreeBSD ベースです。 * link:http://www.juniper.net/[Juniper] - Juniper のすべてのネットワークギア (ルータ、スイッチ、セキュリティおよびネットワークアプライアンス) を動かしている JunOS オペレーティングシステムは、 FreeBSD ベースです。 Juniper は、FreeBSD プロジェクトと商用製品を提供しているベンダとの間で協力関係が成功している数多くのベンダのひとつです。 将来 FreeBSD の新しい機能を JunOS へと統合する際の複雑さを減らすため、 Juniper で作成された改良点は、FreeBSD に取り込まれています。 * link:http://www.mcafee.com/[McAfee] - Sidewinder などの McAfee エンタープライズファイアウォール製品のベースである SecurOS は FreeBSD ベースです。 * link:http://www.netapp.com/[NetApp] - ストレージアプライアンスの Data ONTAP GX シリーズは、FreeBSD ベースです。 NetApp は、新しい BSD ライセンスのハイパーバイザである bhyve などの数多くの機能を FreeBSD プロジェクトに還元しています。 * link:http://www.netflix.com/[Netflix] - Netflix が顧客へのストリームムービーに使用している OpenConnect アプライアンスは、FreeBSD ベースです。 Netflix は、コードベースに対し多大な貢献を行っており、 FreeBSD のメインラインからの差分がゼロになるように作業を行っています。 Netflix OpenConnect アプライアンスは、 北米の全インターネットトラフィックの 32% の配送を受け持っています。 * link:http://www.sandvine.com/[Sandvine] - Sandvine は、 ハイパフォーマンスでリアルタイムのネットワークプロセッシングプラットフォームのベースに FreeBSD を使用しています。このプラットフォームは、 彼らのインテリジェントネットワークポリシーコントロール製品を構成しています。 * link:http://www.sony.com/[Sony] - PlayStation Vita, PlayStation 4 および PlayStation 5 のゲームコンソールは、 FreeBSD の改良版が動いています。 * link:http://www.sophos.com/[Sophos] - Sophos Email アプライアンス製品は、強化された FreeBSD がベースです。 インバウンドメールに対してスパムやウィルススキャンを行う一方で、 アウトバウンドメールがマルウェアではないか、また、 機密情報がアクシデントで漏洩してしまわないようにモニタします。 * link:http://www.spectralogic.com/[Spectra Logic] - アーカイブグレードストレージアプライアンスの nTier シリーズは、FreeBSD および OpenZFS が動いています。 * link:https://www.stormshield.com[Stormshield] - Stormshield ネットワークセキュリティアプライアンスは、 強化された FreeBSD がベースです。 BSD ライセンスが、彼らの知的財産のシステムへの統合を可能にする一方で、 コミュニティに非常に多くの興味深い開発結果をもたらしてくれます。 * link:http://www.weather.com/[The Weather Channel] - 各ローカルケーブルプロバイダのヘッドエンドにインストールされていて、 ローカルの天気予報をケーブル TV ネットワークプログラムに送る IntelliStar アプライアンスでは FreeBSD が動いています。 * link:http://www.verisign.com/[Verisign] - Verisign は .com および .net ルートドメインレジストリおよび関連する DNS インフラストラクチャの運用に責任を持っています。 彼らのインフラストラクチャに一般的な障害点がないように、FreeBSD を含むさまざまなネットワークオペレーティングシステムに信頼を寄せています。 * link:http://www.voxer.com/[Voxer] - Voxer のモバイルボイスメッセージのプラットフォームでは、 ZFS が FreeBSD 上で動いています。 Voxer は、Solaris から派生したオペレーティングシステムから、 FreeBSD へと移行しました。優れた文書、 幅広く活動的なコミュニティ、 そして開発者にとって好意的な環境がその理由です。 ZFS および DTrace といった決定的な機能に加え、 FreeBSD では、 ZFS が TRIM に対応しています。 * link:https://fudosecurity.com/en/[Fudo セキュリティ] - FUDO セキュリティアプライアンスは、 エンタープライズおよびシステムの管理者に対し、 モニタ、コントロール、レコードおよび audit コントラクタを提供します。 ZFS, GELI, Capsicum, HAST および auditdistd といった FreeBSD の最良なセキュリティ機能がベースとなっています。 また、FreeBSD は関連したオープンソースプロジェクトを数多く生み出しています。 * link:http://bsdrp.net/[BSD Router] - 広く使われているエンタープライズルータの置き換えとなるような FreeBSD ベースのルータで、標準的な PC ハードウェアで動作するように設計されています。 * link:https://www.truenas.com/[TrueNAS] は、ネットワークアタッチトストレージ (NAS) ソフトウェアです。 データの共有およびランサムウェアやマルウェアといった現代の脅威からデータを保護します。 TrueNAS を使うことで、ユーザおよびクライアントデバイスは、仮想化および共有プロトコルを通して共有データに容易にアクセスできます。 * link:https://ghostbsd.org/[GhostBSD] は、FreeBSD から派生しており、GTK 環境を使用して美しい見た目や使い勝手の良さを現代の BSD プラットフォームに実現し、自然でネイティブな UNIX(R) 環境を提供します。 * link:http://mfsbsd.vx.sk/[mfsBSD] - メモリから完全に実行可能な FreeBSD システムのイメージを構築するためのツールキットです。 * link:https://xigmanas.com/[XigmaNAS] - PHP によるウェブインタフェースを搭載した FreeBSD ベースのファイルサーバのディストリビューションです。 * link:http://www.opnsense.org/[OPNSense] は、オープンソースの使いやすく構築が簡単な FreeBSD ベースのファイアウォールおよびルータのプラットフォームです。 OPNsense は、 高価な商用のファイアウォールや標準で利用可能なほとんどの機能を持っています。 オープンで検証可能なソースと共に、 商品が提供している豊富な機能のセットを提供します。 * link:https://www.midnightbsd.org[MidnightBSD] は、BSD から派生したオペレーティングシステムで、デスクトップユーザを念頭において開発されています。 このオペレーティングシステムには、メール、ウェブブラウザ、ワードプロセッサ、ゲームといった、日々の生活で必要と思われるすべてのソフトウェアが含まれています。 * link:https://nomadbsd.org[NomadBSD] は、FreeBSD ベースの USB フラッシュドライブのための永続的な live システムです。 ハードウェアを自動的に認識してセットアップを行い、すぐにデスクトップシステムとして使えるように設定します。 データリカバリ、教育および FreeBSD のハードウェア互換性の試験にも使用できます。 * link:http://www.pfsense.org/[pfSense] - 数多くの機能および拡張 IPv6 サポートを持つ FreeBSD ベースのファイアウォールディストリビューションです。 * link:http://zrouter.org/[ZRouter] - FreeBSD ベースの組み込みデバイス用のオープンソースのファームウェアです。 いつでも購入できるようなルータ上のプロプリエタリのファームウェアの置き換えとなるように設計されています。 FreeBSD Foundation のウェブサイトでは、link:https://www.freebsdfoundation.org/about/testimonials/[FreeBSD を製品やサービスのベースに利用している会社の声] が紹介されています。 Wikipedia にも link:http://en.wikipedia.org/wiki/List_of_products_based_on_FreeBSD[FreeBSD ベースの製品のリスト] がまとめられています。 [[history]] == FreeBSD プロジェクトについて 以下の節では簡単な歴史やプロジェクトの目標、 開発モデルなど、普段は表にでない話題を提供しています。 [[intro-history]] === FreeBSD 小史 FreeBSD プロジェクトは 1993 年の始めに Unofficial 386BSD Patchkit の最後の 3 人のまとめ役によって、部分的に patchkit から派生する形で開始されました。ここでの 3 人のまとめ役というのは、Nate Williams, Rod Grimes と、 Jordan Hubbard です。 このプロジェクトのもともとの目標は、patchkit という仕組みではもう十分に解決できなくなってしまった 386BSD の数多くの問題を修正するための、386BSD の暫定的なスナップショットを作成することでした。 こういった経緯を経ているので、 このプロジェクトの初期の頃の名前は 386BSD 0.5 や 386BSD 暫定版 (Interim) でした。 386BSD は、Bill Jolitz が (訳注: バークレイ Net/2 テープを基に) 作成したオペレーティングシステムです。当時の 386BSD は、ほぼ一年にわたって放っておかれていた (訳注: 作者がバグの報告を受けても何もしなかった) というひどい状況に苦しんでいました。 作者の代わりに問題を修正し続けていた patchkit は日を追うごとに不快なまでに膨張してしまっていました。 このような状況に対して、彼らは暫定的な "クリーンアップ" スナップショットを作成することで Bill を手助けしようと決めました。しかし、 この計画は唐突に終了してしまいました。Bill Jolitz が、 このプロジェクトに対する受け入れ支持を取り下げることを突然決意し、 なおかつこのプロジェクトの代わりに何をするのかを一切言明しなかったのです。 たとえ Bill が支持してくれないとしても、 彼ら 3 人の目標には依然としてやる価値があると考えていたため、 David Greenman が考案した名称 "FreeBSD" をプロジェクトの名前に採用し、新たなスタートを切りました。 この時点でのプロジェクトの初期目標は、すでにこのシステム (訳注: 386BSD + Patchkit) を使っていた利用者たちと相談して決められました。 プロジェクトが実現に向けて軌道に乗ってきたことが明確になった時点で、 Jordan は Walnut Creek CDROM 社に連絡してみました。CD-ROM を使って FreeBSD を配布することによって、 インターネットに容易に接続できない多くの人々が FreeBSD を簡単に入手できるようになると考えたからです。Walnut Creek CDROM 社は FreeBSD を CD で配布するというアイデアを採用してくれたばかりか、 作業するためのマシンと高速なインターネット回線をプロジェクトに提供してくれました。 当時は海のものとも山のものともわからなかったこのプロジェクトに対して、Walnut Creek CDROM 社が信じられないほどの信頼を寄せてくれたおかげで、 FreeBSD は短期間のうちにここまで大きく成長したのです。 CD-ROM による最初の配布 (そしてネットでの、 ベータ版ではない最初の一般向け配布) は FreeBSD 1.0 で、1993 年 12 月に公開されました。これはカリフォルニア大学バークレイ校の 4.3BSD-Lite ("Net/2") を基とし、386BSD や Free Software Foundation からも多くの部分を取り入れたものです。 これは初めて公開したものとしては十分に成功しました。続けて 1994 年 5 月に FreeBSD 1.1 を公開し、 非常に大きな成功を収めました。 この時期、 あまり予想していなかった嵐が遠くから接近してきていました。 バークレイ Net/2 テープの法的な位置づけについて、Novell 社とカリフォルニア大学バークレイ校との間の長期にわたる 法廷論争において和解が成立したのです。和解の内容は、Net/2 のかなりの部分が "権利つき (encumbered)" コードであり、それは Novell 社の所有物である、 というバークレイ校側が譲歩したものでした。なお、Novell 社はこれらの権利を裁判が始まる少し前に AT&T 社から買収していました。 和解における譲歩の見返りにバークレイ校が得たのは、 4.4BSD-Lite が最終的に発表された時点で、 4.4BSD-Lite は権利つきではないと公式に宣言されること、 そしてすべての既存の Net/2 の利用者が 4.4BSD-Lite の利用へと移行することが強く奨励されること、という Novell 社からの "ありがたき天からの恵み" でした (訳注: 4.4BSD-Lite はその後 Novell 社のチェックを受けてから公開された)。FreeBSD も Net/2 を利用していましたから、1994 年の 7 月の終わりまでに Net/2 ベースの FreeBSD の出荷を停止するように言われました。ただし、 このときの合意によって、 私たちは締め切りまでに一回だけ最後の公開をすることを許されました。 そしてそれは FreeBSD 1.1.5.1 となりました。 それから FreeBSD プロジェクトは、まっさらでかなり不完全な 4.4BSD-Lite を基に、文字どおり一から再度作り直すという、 難しくて大変な作業の準備を始めました。"Lite" バージョンは、部分的には本当に軽くて、中身がなかったのです。 起動し、 動作できるシステムを実際に作り上げるために必要となるプログラムコードのかなりの部分がバークレイ校の CSRG (訳注: BSDを作っているグループ) によって (いろいろな法的要求のせいで) 削除されてしまっていたということと、4.4BSD の Intel アーキテクチャ対応が元々かなり不完全であったということがその理由です。 この移行作業は結局 1994 年の 11 月までかかりました。 そして 12 月に FreeBSD 2.0 として公開されました。これは、 かなり粗削りなところが残っていたにもかかわらず、 かなりの成功を収めました。そしてその後に、より信頼性が高く、 そしてインストールが簡単になった FreeBSD 2.0.5 が 1995 年の 6 月に公開されました。 これ以降、FreeBSD の安定性、速さや機能は改善され、 リリースが行われてきました。 長期的な開発プロジェクトは {rel-head}-CURRENT 開発ブランチ (main) で続けられ、 {rel-head} のスナップショットリリースは、開発の進行状況に応じて link:https://download.freebsd.org/snapshots/[スナップショットサーバ] より継続して入手できます。 [[goals]] === FreeBSD プロジェクトの目標 FreeBSD プロジェクトの目的は、いかなる用途にも使用でき、 何ら制限のないソフトウェアを供給することです。 私たちの多くは、 コード (そしてプロジェクト) に対してかなりの投資をしてきており、 これからも多少の無駄はあっても投資を続けて行くつもりです。ただ、 他の人達にも同じような負担をするように主張しているわけではありません。 FreeBSD に興味を持っている一人の残らず全ての人々に、 目的を限定しないでコードを提供すること。これが、 私たちの最初のそして最大の "任務" であると信じています。そうすれば、コードは可能な限り広く使われ、 最大の恩恵をもたらすことができるでしょう。これが、 私たちが熱烈に支持しているフリーソフトウェアの最も基本的な目的であると、 私は信じています。 私たちのソースツリーに含まれるソースのうち、 GNU 一般公有使用許諾 (GPL) または GNU ライブラリ一般公有使用許諾 (LGPL) に従っているものについては、多少制限が課せられています。ただし、 ソースコードへのアクセスの保証という、 一般の制限とはいわば逆の制限 (訳注1) です。 GPL ソフトウェアの商利用には、そのライセンスにある 複雑な側面が影響してくることがあります。 ですから私たちは、そうすることが合理的であると判断されたときには、 より制限の少ない、BSD ライセンスを採用しているソフトウェアを選択するようにしています。 (訳注1) GPL では、「ソースコードを実際に受け取るか、 あるいは、希望しさえすればそれを入手することが可能であること」 を求めています。 [[development]] === FreeBSD の開発モデル FreeBSD は extref:{dev-model}[非常に開かれた、柔軟性のあるプロセス] により開発されています。 extref:{contributors}[貢献者リスト] を見ていただければわかるとおり、FreeBSD は文字通り世界中の何千という人々の努力によって開発されています。 FreeBSD の開発環境は、この何千という開発者がインターネット経由で共同作業できるようになっているのです。 新しいボランティアはいつでも大歓迎です。 また、より密接に関わりたいと考える方は extref:{contributing}[FreeBSD への貢献] という文書をご覧ください。 あと、FreeBSD プロジェクトとその開発プロセスについて、 どなたにも知っていていただきたいのは以下のようなことです。 Git リポジトリ[[development-cvs-repository]]:: 長年にわたり FreeBSD のソースツリーは、 ソースコード管理用のフリーソフトウェアである link:http://www.nongnu.org/cvs/[CVS] (Concurrent Versions System) によってメンテナンスされてきました。 2008 年 6 月、プロジェクトはソースコード管理のシステムを link:https://subversion.apache.org[SVN] (Subversion) に移行しました。 ソースツリーの急速な増加や、これまでに蓄積された膨大な量の履歴によって、CVS の持つ技術的な限界が明かになってきたためです。 ドキュメンテーションプロジェクトと Ports Collection リポジトリも、それぞれ 2012 年 5 月と 7 月に CVS から SVN へと移行しました。 そして 2020年 12 月、プロジェクトは link:https://www.freebsd.org/status/report-2020-10-2020-12.html#Git-Migration-Working-Group[ソースおよびドキュメンテーションのリポジトリ] を link:https://git-scm.com/[Git] へ移行し、2021 年 4 月に link:https://www.freebsd.org/status/report-2021-04-2021-06/#_git_migration_working_group[Ports] を移行しました。 FreeBSD `src/` リポジトリを取得するための情報は crossref:cutting-edge[synching,ソースコードの入手] の章を、 FreeBSD Ports Collection を取得するための詳細については crossref:ports[ports-using,Ports Collection の利用] の章をご覧ください。 ソースツリー管理者[[development-committers]]:: _コミッター (committers)_ は Git リポジトリへの _push 権限_ を持っている人、FreeBSD のソースに変更を加えることができる人です (リポジトリに変更を加えるには、ソースをコントロールする `commit` というコマンドを使うので、これらの人々は英語では "committers" と呼ばれます)。 もしバグを見つけたのであれば、link:https://bugs.FreeBSD.org/submit/[障害報告データベース] に提出してください。 FreeBSD メーリングリスト、IRC チャネルまたはフォーラムは、その問題がバグかどうかを確認する助けとなりますので、障害報告を提出する前に、これらを使って確認してください。 FreeBSD コアチーム[[development-core]]:: _FreeBSD コアチーム_ は FreeBSD プロジェクトが会社だとすると取締役会にあたるものです。 コアチームとして一番重要な役割は FreeBSD プロジェクトが全体としてよい方向に向かっていることを確認することです。 責任感あふれる開発者を上記のソースツリー管理者として招くこと、 また仕事上の都合などでコアチームをやめた人たちの後任を見つけることもコアチームの役割です。 現在のコアチームは FreeBSD 開発者 (committer) の中から 2022 年 5 月に選挙によって選出されました。 コアチームを選出するための選挙は、2 年ごとに行なわれています。 + [NOTE] ==== 忘れてほしくないのは、多くの開発者同様に、 コアチームのほとんどは FreeBSD に対してボランティアの立場であり、 FreeBSD プロジェクトからは何ら金銭的な支援を受けていない、 ということです。ですから、 ここでの"責任"は "保証されたサポート"ではありません。 そういう意味で、上記の"取締役会" という例えはあまりよくないかもしれません。むしろ、FreeBSD のために人生を棒に振ってしまった人の集まりといった方が正しいかも...。 ==== The FreeBSD Foundation[[development-foundation]]:: The link:https://freebsdfoundation.org[FreeBSD Foundation] は、FreeBSD プロジェクトおよびコミュニティを全世界的にサポートしたり促進することを目的としたアメリカ合衆国における 501(c)(3) に認定された非営利団体です。 この Foundation は、ソフトウェア開発に対するプロジェクトの助成を通じて資金を提供したり、緊急の事態に対する迅速な対応や新しい特徴や機能の実装に対して、スタッフを提供します。 FreeBSD のインフラストラクチャの改善および維持する目的でハードウェアを購入したり、テストカバレッジ、継続的インテグレーションおよび自動化の改善のためにスタッフを雇用しています。 世界中で開催されている技術的な会議やイベントにおいて、FreeBSD をプロモーションすることで FreeBSD を宣伝しています。 また、ワークショップ、教育的な教材やプレゼンテーションを提供して、より多くのユーザや FreeBSD の貢献者をリクルートしています。 さらに、契約の締結、ライセンス契約、およびその他の法的主体必要となる協定において FreeBSD プロジェクトを代表しています。 その他のコントリビュータ:: 最後になりますが、 もっとも重要で多数をしめる開発者はフィードバックやバグフィクスをどんどん送ってくれるユーザ自身です。 FreeBSD のベースシステムの開発に関わっていきたいという人は、 議論の場である {freebsd-hackers} に参加するとよいでしょう。 サードパーティ製のアプリケーションの移植に関わる議論は、 {freebsd-ports} で行われています。 FreeBSD のメーリングリストに関する詳細は、 crossref:eresources[eresources,インターネット上のリソース] をご覧ください。 + extref:{contributors}[FreeBSD への貢献者リスト] は日に日に長くなっています。 あなたも今日、extref:{contributing}[FreeBSD へ何か送ることからはじめてみませんか]? もちろん、コードを書くほかにもいろいろな方法があります! ひとことで言うと、FreeBSD の開発組織はゆるやかな同心円状になっています。 ともすると中央集権的に見えがちなこの組織は、 FreeBSD の _ユーザ_ がきちんと管理されたコードベースを 容易に追いかけられるようにデザインされているもので、 貢献したいという人を締め出す意図は全くありません! 私たちの目標は安定したオペレーティングシステムと 簡単にインストールして使うことのできる crossref:ports[ports,アプリケーション]を提供することです。 この方法は、それを達成するために非常にうまくはたらきます。 これから FreeBSD の開発にたずさわろうという人に、 私たちが望むことはただ一つです。 FreeBSD の成功を継続的なものにするために、 現在の開発者と同じような情熱を持って接してください! [[third-party-programs]] === サードパーティ製プログラム FreeBSD では基本配布セットに加え、 移植されたソフトウェア集として数千の人気の高いプログラムを提供しています。 ports には HTTP サーバから、ゲーム、言語、 エディタまでありとあらゆるものが含まれています。 {numports} 以上の ports (移植ソフトウェア) が存在します。 Ports Collection 全体でも {ports-size} 程度にしかなりません。 ports をコンパイルするには、 インストールしたいと思っているプログラムのディレクトリに移動し、 `make install` とすると、 あとはすべてシステムがやってくれます。 どの ports もオリジナルの配布セットを動的に取ってくるので、 ディスクは構築したいと思っている ports の分だけを準備しておけば十分です。 ほとんどの ports は、すでにコンパイルされた状態で "package" として提供されており、ソースコードからコンパイルしたくない場合、これを使うと (`pkg install` というコマンドで) 簡単にインストールできます。 package と ports に関する詳細は、 crossref:ports[ports,アプリケーションのインストール - packages と ports] をご覧ください。 === ドキュメント サポートが行われているすべての FreeBSD では、システムのセットアップ時にインストーラを使って、ドキュメントを [.filename]#/usr/local/share/doc/freebsd# 以下にインストールできます。 システムをインストールした後は、package を使ってドキュメントをインストールできます。 [source,shell] .... # pkg install en-freebsd-doc .... 各言語に翻訳されたドキュメントをインストールするには、"en" の部分を使用する言語のコードに置き換えてください。 翻訳されたドキュメントの中には、古い情報のままの文書があり、現在では正確でなかったり関係ない内容が含まれている可能性があることに注意してください。 ローカルにインストールされたドキュメントは、HTML ブラウザを使って以下の URL から参照できます。 FreeBSD ハンドブック (英文オリジナル):: [.filename]#link:file:///usr/local/share/doc/freebsd/en/books/handbook/book.html[/usr/local/share/doc/freebsd/en/books/handbook/book.html]# FreeBSD に関する FAQ (英文オリジナル):: [.filename]#link:file://localhost/usr/local/share/doc/freebsd/en/books/faq/book.html[/usr/local/share/doc/freebsd/en/books/faq/book.html]# 最新版の文書は常に link:https://docs.FreeBSD.org/[https://docs.FreeBSD.org/] にありますので、こちらも参照してください。 diff --git a/documentation/content/ja/books/handbook/kernelconfig/_index.adoc b/documentation/content/ja/books/handbook/kernelconfig/_index.adoc index 8e9ec6545d..ae8fe7c281 100644 --- a/documentation/content/ja/books/handbook/kernelconfig/_index.adoc +++ b/documentation/content/ja/books/handbook/kernelconfig/_index.adoc @@ -1,315 +1,314 @@ --- title: 第8章 FreeBSD カーネルのコンフィグレーション part: パートII. 日々の生活 prev: books/handbook/multimedia next: books/handbook/printing description: この章では、FreeBSD カーネルの設定方法、いつカスタムカーネルの構築が必要になるか、ハードウェア一覧の作成方法、カーネルコンフィグレーションファイルのカスタマイズの方法などを扱っています。 tags: ["configuring", "kernel", "custom kernel", "hardware requirements", "pciconf"] showBookMenu: true weight: 11 path: "/books/handbook/kernelconfig/" -aliases: ["/ja/books/handbook/kernelconfig-custom-kernel/","/ja/books/handbook/kernelconfig-devices/","/ja/books/handbook/kernelconfig-config/","/ja/books/handbook/kernelconfig-building/","/ja/books/handbook/kernelconfig-trouble/"] --- [[kernelconfig]] = FreeBSD カーネルのコンフィグレーション :doctype: book :toc: macro :toclevels: 1 :icons: font :sectnums: :sectnumlevels: 6 :sectnumoffset: 8 :partnums: :source-highlighter: rouge :experimental: :images-path: books/handbook/kernelconfig/ ifdef::env-beastie[] ifdef::backend-html5[] :imagesdir: ../../../../images/{images-path} endif::[] ifndef::book[] include::shared/authors.adoc[] include::shared/mirrors.adoc[] include::shared/releases.adoc[] include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists.adoc[] include::shared/{{% lang %}}/urls.adoc[] toc::[] endif::[] ifdef::backend-pdf,backend-epub3[] include::../../../../../shared/asciidoctor.adoc[] endif::[] endif::[] ifndef::env-beastie[] toc::[] include::../../../../../shared/asciidoctor.adoc[] endif::[] [[kernelconfig-synopsis]] == この章では カーネルは FreeBSD オペレーティングシステムの中核をなすものです。 カーネルは、メモリ管理、セキュリティ制御の強制、ネットワーク、 ディスクアクセスなどを担っています。 FreeBSD の大部分は動的に構成することができるようになっていますが、 まだ、時にはカスタムカーネルを設定してコンパイルする必要があります。 この章では、以下のことを扱っています。 * いつカスタムカーネルの構築が必要になるか。 * ハードウェア一覧の作成方法。 * カーネルコンフィグレーションファイルのカスタマイズの方法。 * カーネルコンフィグレーションファイルから新しいカーネルを構築する方法。 * 新しいカーネルのインストール方法。 * うまく行かないときの問題解決法。 この章で表示されているすべてのコマンドは、`root` 権限で実行する必要があります。 [[kernelconfig-custom-kernel]] == なぜカスタムカーネルを作るか? 伝統的に、FreeBSD はモノリシック (monolithic) カーネルを使っていました。 このカーネルは、単一の巨大なプログラムで、 扱えるデバイスは固定されていて、 カーネルの振る舞いを変えたければ構築してコンピュータを再起動し、 新しいカーネルを動かさなれければなりませんでした。 今日では、FreeBSD カーネルのかなりの機能はモジュールに含まれるようになり、 必要に応じて動的にカーネルに組み込んだり外したりできるようになりました。 この移行により、 動作しているカーネルが新しいハードウェアに迅速に対応したり、 カーネルに新たな機能を取り入れられるようになります。 このようなカーネルは、モジュラ (modular) カーネルと呼ばれます。 しかしながら、 いまだにいくらかは静的にカーネルを構成する必要があります。 機能がカーネルとあまりに密接に結びついているため、 動的に組み込むことができない場合があるためです。 環境によっては、セキュリティの観点から、 カーネルモジュールを読み込んだり外すことができず、 必要となる機能を静的にカーネルにコンパイルしなければならない場合もあります。 システムに合わせたカーネルを構築することは、多くの場合、 高度な知識を持つ BSD ユーザが避けて通ることのできない通過儀礼です。 この作業は多くの時間を必要としますが、FreeBSD システムに利益をもたらします。 広範囲のハードウェアをサポートしなければならない [.filename]#GENERIC# カーネルとは異なり、カスタムカーネルは、 使用しているコンピュータのハードウェアのみをサポートするように、 必要のない機能を省くことができます。これは、 次にあげるような利益をもたらします。 * 素早く起動します。 カーネルはシステム上にあるハードウェアしか検出しないので、 システムの起動にかかる時間を短くできます。 * メモリの消費量を減らすことができます。 システムに合わせたカーネルは、 使用しない機能やデバイスドライバを含まないので、 大抵 [.filename]#GENERIC# カーネルより少ないメモリしか消費しません。 カーネルコードは常に物理メモリ上に存在し、 アプリケーションはその容量分のメモリを使用できないので、 これは重要なことです。 したがって、メモリが少ないシステムでは、 カーネルの再構築は重要です。 * 追加のハードウェアをサポートします。 カスタムカーネルは、[.filename]#GENERIC# カーネルに存在しないデバイスのサポートを追加することができます。 カスタムカーネルを構築する前に、再構築する理由を考えてください。 ある特定のハードウェアに対応する必要がある場合に、 そのハードウェアに対応するためのモジュールがすでに用意されていることがあります。 カーネルモジュールは [.filename]#/boot/kernel# にあります。 モジュールによっては man:kldload[8] により、すでに実行中のカーネルに動的に読み込まれています。 ほとんどのカーネルドライバには、読み込み可能なモジュールやマニュアルページが用意されています。 たとえば、man:ath[4] ワイヤレスネットワークドライバのマニュアルページには以下のような記述があります。 [source,shell] .... Alternatively, to load the driver as a module at boot time, place the following line in loader.conf(5): if_ath_load="YES" .... [.filename]#/boot/loader.conf# に `if_ath_load="YES"` を追加すると、 起動時にモジュールが読み込まれるようになります。 対応するモジュールが [.filename]#/boot/kernel# に存在しないこともあります。 特定のサブシステムでは、ほとんど多くの場合存在しません。 [[kernelconfig-devices]] == システムのハードウェアについて知る カーネルコンフィグレーションファイルの編集を始める前に、 コンピュータのハードウェア一覧を作成すると良いでしょう。 デュアルブートシステムでは、 現在インストールされている別のオペレーティングシステムの設定を調べることで、 一覧を作成できます。 たとえば、Microsoft(R) の デバイスマネージャ は、インストールされているデバイスに関する情報を持っています。 [NOTE] ==== Microsoft(R) Windows(R) のバージョンによっては、 システム アイコンを使って、 デバイスマネージャ にアクセスできます。 ==== インストールされているオペレーティングシステムが FreeBSD だけであれば、man:dmesg[8] を使い、 起動時に検出されたハードウェアの一覧を調べてください。 FreeBSD のほとんどのデバイスドライバにはマニュアルページが用意され、 対応しているハードウェアの一覧を提供しています。 たとえば、以下の行は、man:psm[4] ドライバがマウスを検出したことを示しています。 [source,shell] .... psm0: irq 12 on atkbdc0 psm0: [GIANT-LOCKED] psm0: [ITHREAD] psm0: model Generic PS/2 mouse, device ID 0 .... このハードウェアはシステムに存在するので、 カスタムカーネルコンフィグレーションファイルからこのドライバを外さないでください。 `dmesg` が起動時の検出結果を表示しない場合には、 かわりに [.filename]#/var/run/dmesg.boot# で出力を確認してください。 ハードウェアを見つけるためのもうひとつのツールは、 より冗長な出力を行う man:pciconf[8] です。 たとえば、以下のようになります。 [source,shell] .... % pciconf -lv ath0@pci0:3:0:0: class=0x020000 card=0x058a1014 chip=0x1014168c rev=0x01 hdr=0x00 vendor = 'Atheros Communications Inc.' device = 'AR5212 Atheros AR5212 802.11abg wireless' class = network subclass = ethernet .... この出力は、[.filename]#ath# ドライバがワイヤレスイーサネットデバイスにあることを示しています。 man:man[1] を `-k` フラグで実行すると、 有用な情報を得ることができます。たとえば、 ある特定のデバイスブランドや名前を含むマニュアルページの一覧を表示するには、 以下のように実行してください。 [source,shell] .... # man -k Atheros ath(4) - Atheros IEEE 802.11 wireless network driver ath_hal(4) - Atheros Hardware Access Layer (HAL) .... ハードウェアの一覧を作成したら、 この一覧を利用して、 カスタムカーネルのコンフィグレーションファイルを編集している時に、 インストールされているハードウェアのドライバが削除されていないことを確認してください。 [[kernelconfig-config]] == コンフィグレーションファイル カスタムカーネルのコンフィグレーションファイルを作成し、 カスタムカーネルを構築するには、 FreeBSD の全ソースツリーがまずインストールされている必要があります。 もし [.filename]#/usr/src/# が存在していなかったり、空であれば、 カーネルのソースはインストールされていません。 crossref:mirrors[git,「Git の利用」] で説明した Git を使ってソースをインストールしてください。 ソースをインストールしたら、 [.filename]#/usr/src/sys# を確認して下さい。 このディレクトリには、いくつものサブディレクトリがあります。 その中には、サポートされている各アーキテクチャ [.filename]#amd64#, [.filename]#i386#, [.filename]#powerpc# および [.filename]#sparc64# のサブディレクトリがあります。 各アーキテクチャのディレクトリ内部にあるファイルはすべてそのアーキテクチャでのみ使用されます。 残りのコードは、アーキテクチャに依存しない、 すべてのプラットフォームで共有されるコードです。 サポートされている各アーキテクチャには、 [.filename]#conf# サブディレクトリがあり、 そのアーキテクチャ用の [.filename]#GENERIC# カーネルコンフィグレーションファイルが用意されています。 この [.filename]#GENERIC# は編集しないでください。 かわりに、このファイルを別名でコピーし、コピーを編集してください。 慣習として、この名前はすべて大文字でつづられます。もし、 いくつかの異なるハードウェアの FreeBSD マシンを扱うなら、 この名前にホスト名を含めるとよいでしょう。ここでは、例として [.filename]#MYKERNEL# という名前の `amd64` アーキテクチャ用の [.filename]#GENERIC# コンフィグレーションファイルのコピーを作成します。 [source,shell] .... # cd /usr/src/sys/amd64/conf # cp GENERIC MYKERNEL .... これで、[.filename]#MYKERNEL# を ASCII テキストエディタで編集できます。 初心者に対してより簡単なエディタである ee も FreeBSD とともにインストールされていますが、 デフォルトのエディタは vi です。 コンフィグレーションファイルのフォーマットはシンプルです。 各行はデバイスやサブシステム、引数、または簡単な説明を含んでいます。 `+#+` に続くテキストはすべてコメントとして扱われ、無視されます。 カーネルからデバイスもしくはサブシステムのサポートを外すには、対応する行の最初に `+#+` を入れてください。 理解していない行に対しては、`+#+` を追加したり削除しないでください。 [WARNING] ==== デバイスやオプションのサポートを外すことは簡単で、 その結果、カーネルを壊すことがあります。 たとえば man:ata[4] ドライバをカーネルコンフィグレーションファイルから除くと、 ATA ディスクドライバを用いているシステムは起動しません。 確信が持てないものについては、 カーネルにサポートを残したままにしてください。 ==== このファイルで与えられる説明の他に、 そのアーキテクチャの [.filename]#GENERIC# と同じディレクトリにある [.filename]#NOTES# にも説明があります。 アーキテクチャに依存しないオプションについては、 [.filename]#/usr/src/sys/conf/NOTES# をご覧ください。 [TIP] ==== カーネルコンフィグレーションファイルの編集を終えたら、 ファイルのバックアップを [.filename]#/usr/src# 以外の場所に保存してください。 または、カーネルコンフィグレーションファイルは他の場所において、 シンボリックリンクを張る方法もあります。 [source,shell] .... # cd /usr/src/sys/amd64/conf # mkdir /root/kernels # cp GENERIC /root/kernels/MYKERNEL # ln -s /root/kernels/MYKERNEL .... ==== コンフィグレーションファイルでは `include` ディレクティブを利用できます。 コンフィグレーションファイルに他のファイルを取り込むことができるので、 すでに存在するファイルに対する小さな変更の管理が簡単にできます。 オプションやドライバの追加が少しだけの場合には、 以下の例のように [.filename]#GENERIC# からの差分による管理が可能になります。 [.programlisting] .... include GENERIC ident MYKERNEL options IPFIREWALL options DUMMYNET options IPFIREWALL_DEFAULT_TO_ACCEPT options IPDIVERT .... この方法では、ローカルのコンフィグレーションファイルには、 ローカルにある [.filename]#GENERIC# カーネルとの差分が記述されています。 アップグレードが行われると、 [.filename]#GENERIC# に追加された新しい機能は、 (`nooptions` や `nodevice` によって外されない限り) ローカルのカーネルにも反映されます。 コンフィグレーションの構成要素に関する包括的な一覧と説明は man:config[5] にあります。 [NOTE] ==== 利用可能なすべてのオプションを含むファイルを構築するには、 以下のコマンドを `root` 権限で実行してください。 [source,shell] .... # cd /usr/src/sys/arch/conf && make LINT .... ==== [[kernelconfig-building]] == カスタムカーネルの構築とインストール カスタムコンフィグレーションファイルを編集して保存したら、 カーネルのソースコードを以下の手順でコンパイルしてください。 [.procedure] ==== *Procedure: カーネルの構築* + . 以下のディレクトリに移動してください。 + [source,shell] .... # cd /usr/src .... + . カスタムコンフィグレーションファイルの名前を指定して新しいカーネルをコンパイルします。 + [source,shell] .... # make buildkernel KERNCONF=MYKERNEL .... + . 指定したカーネルコンフィグレーションファイルでコンパイルされた新しいカーネルをインストールします。 以下のコマンドは、新しいカーネルを [.filename]#/boot/kernel/kernel# に、 今までのカーネルを [.filename]#/boot/kernel.old/kernel# という名前で保存します。 + [source,shell] .... # make installkernel KERNCONF=MYKERNEL .... + . 新しいカーネルを使うために、 システムをシャットダウンして再起動してください。 うまく行かない場合は、<> を参照してください。 ==== デフォルトでは、カスタムカーネルを構築すると、 すべてのカーネルモジュールが再構築されます。 カーネルのアップデートをより早く行いたい、または、 カスタムモジュールのみを構築したいといった場合は、 カーネルの構築を開始する前に、以下のように [.filename]#/etc/make.conf# を編集してください。 例として、以下の変数は、 デフォルトのすべてのモジュールを構築する設定を変更し、 構築するモジュール一覧を指定します。 [.programlisting] .... MODULES_OVERRIDE = linux acpi .... また、以下の変数は、構築を行わないモジュールを指定します。 [.programlisting] .... WITHOUT_MODULES = linux acpi sound .... 他の変数については、man:make.conf[5] を参照してください。 [[kernelconfig-trouble]] == 問題が起きた場合には カスタムカーネルを作る際に起こりうるトラブルは、 次の 4 種類に分けられます。 `config` コマンドの失敗:: `config` で失敗した時には、 トラブルの起きた行番号が出力されます。 たとえば、次のように出力された場合には、 17 行目が正しく入力されているかどうか、 [.filename]#GENERIC# や [.filename]#NOTES# と比較して修正してください。 + [source,shell] .... config: line 17: syntax error .... `make` コマンドの失敗:: `make` が失敗した場合には、 通常、カーネルコンフィグレーションファイルにおいて、 `config` がとらえられなかったような間違いをしています。 コンフィグレーションファイルを見直してください。 それでも問題を解決することができなければ、 {freebsd-questions} へカーネルコンフィグレーションファイルを添付して送ってください。 [[kernelconfig-noboot]] カーネルが起動しない:: 新しいカーネルが起動しなかったり、 デバイスの認識をしない場合でもあわてないでください! さいわい、FreeBSD には利用できないカーネルから復帰する洗練されたメカニズムがあります。 FreeBSD のブートローダで起動したいカーネルを選択してください。 システムの起動メニューが表示されている時に、 "Escape to a loader prompt" オプションを選択するとアクセスできます。 プロンプトで `boot _kernel.old_` か他の正常に起動するカーネルを入力してください。 + 問題のないカーネルで起動した後、 コンフィグレー ションファイルを調べ、 再び構築を試みてください。 [.filename]#/var/log/messages# にはすべての成功した起動時のカーネルメッセージの記録があり、 これは問題を解決するための助けになる情報の一つでしょう。また、 man:dmesg[8] は現在の起動時のカーネルメッセージを出力します。 + [NOTE] ==== カーネルのトラブルシューティングを行う時には、 [.filename]#GENERIC# といった正常に起動するカーネルのコピーを保存するようにしてください。 _kernel.old_ は新しいカーネルをインストールする時に、その一つ前にインストールした、うまく動かないかもしれないカーネルで上書きされてしまうため、起動するカーネルを保存しておくことは重要です。 できる限り早く以下のようにして、正しく起動するカーネルを含むディレクトリ名に変更してください。 [source,shell] .... # mv /boot/kernel /boot/kernel.bad # mv /boot/kernel.good /boot/kernel .... ==== カーネルは動きますが man:ps[1] は動きません!:: システムユーティリティの構築されたバージョンと異るバージョンのカーネルをインストールした場合、 たとえば -CURRENT のソースから構築したカーネルを -RELEASE システム上にインストールするような場合には、 man:ps[1] や man:vmstat[8] のような多くのシステムステータスコマンドは動かなくなります。 修正するには、カーネルと同じバージョンのソースツリーで crossref:cutting-edge[makeworld,world を再構築し、インストール] してください。 カーネルとそれ以外で異なるバージョンを組み合わせてオペレーティングシステムを使用することは推奨されていません。 diff --git a/documentation/content/ja/books/handbook/mirrors/_index.adoc b/documentation/content/ja/books/handbook/mirrors/_index.adoc index 50f6876d18..f2d56bfe20 100644 --- a/documentation/content/ja/books/handbook/mirrors/_index.adoc +++ b/documentation/content/ja/books/handbook/mirrors/_index.adoc @@ -1,588 +1,587 @@ --- title: 付録A FreeBSD の入手方法 part: パートV. 付録 prev: books/handbook/partv next: books/handbook/bibliography description: "FreeBSD の入手方法: CD および DVD セット, FTP サイト, Git のインストールおよび利用方法" tags: ["入手方法", "CD", "DVD", "FTP", "Git"] showBookMenu: true weight: 27 path: "/books/handbook/mirrors/" -aliases: ["/en/books/handbook/mirrors-ftp/","/en/books/handbook/svn/","/en/books/handbook/mirrors-rsync/"] --- [appendix] = FreeBSD の入手方法 :doctype: book :toc: macro :toclevels: 1 :icons: font :sectnums: :sectnumlevels: 6 :sectnumoffset: A :partnums: :source-highlighter: rouge :experimental: :images-path: books/handbook/mirrors/ ifdef::env-beastie[] ifdef::backend-html5[] :imagesdir: ../../../../images/{images-path} endif::[] ifndef::book[] include::shared/authors.adoc[] include::shared/mirrors.adoc[] include::shared/releases.adoc[] include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists.adoc[] include::shared/{{% lang %}}/urls.adoc[] toc::[] endif::[] ifdef::backend-pdf,backend-epub3[] include::../../../../../shared/asciidoctor.adoc[] endif::[] endif::[] ifndef::env-beastie[] toc::[] include::../../../../../shared/asciidoctor.adoc[] endif::[] [[mirrors]] == Mirrors FreeBSD の公式のミラーサイトは、プロジェクトクラスタの管理者により運用されている数多くのコンピュータから構成されています。 GeoDNS により、ユーザには近くの利用可能なミラーが提供されます。 現在ミラーサイトが置かれている地域は、オーストラリア、ブラジル、ドイツ、日本 (2 つのサイト)、マレーシア、オランダ、南アフリカ、台湾、英国、アメリカ合衆国 (カリフォルニア、ニュージャージーおよびワシントン) です。 公式のミラーサービス: [cols="1,1,3"] |=== | サービス名 | プロトコル | 備考 | **download.FreeBSD.org** | link:https://download.FreeBSD.org/[https] link:ftp://download.FreeBSD.org/pub/FreeBSD/[ftp] | `ftp.FreeBSD.org` と同じ内容です。`ftp` は古い名前なので、`download.FreeBSD.org` が推奨されます。 | **git.FreeBSD.org** | `https` および `ssh` 経由の git | 詳細については、link:https://docs.freebsd.org/ja/books/handbook/mirrors/#git[git の利用] の節を参照してください。 | **pkg.FreeBSD.org** | `http` および `https` 経由の man:pkg[8] | man:pkg[8] プログラムにより利用される公式の FreeBSD package リポジトリ | **vuxml.FreeBSD.org** / **www.VuXML.org** | link:https://www.vuxml.org/[https] | FreeBSD プロジェクトの VuXML ウェブページ。`pkg audit` はこのサービスから脆弱性に関する一覧をダウンロードします。 |=== すべての公式のミラーは、IPv4 および IPv6 に対応しています。 FreeBSD のウェブサイト (https://www.FreeBSD.org および https://docs.FreeBSD.org) は、GeoDNS インフラストラクチャでは運用されていません。 この実装は、進行中の課題です。 http://ftp-archive.FreeBSD.org は GeoDNS インフラストラクチャではなく、一つ地域 (US) でのみ運用されています。 プロジェクトでは、新しい地域やスポンサーを募集しています。 クラスター管理チームまで連絡してください。 コミュニティおよび他の会社により管理されているミラーの一覧: [cols="1,1,3"] |=== | 国 | ホスト名 | プロトコル | オーストラリア icon:envelope[link=mailto:{mirrors-australia-email}, title="mirror contact"] | ftp.au.FreeBSD.org | link:http://ftp.au.FreeBSD.org/pub/FreeBSD[http] link:http://ftp.au.FreeBSD.org/pub/FreeBSD[http_v6] link:rsync://ftp.au.FreeBSD.org[rsync] link:rsync://ftp.au.FreeBSD.org[rsync_v6] | | ftp3.au.FreeBSD.org | link:http://ftp3.au.FreeBSD.org/pub/FreeBSD[http] link:ftp://ftp3.au.FreeBSD.org/pub/FreeBSD[ftp] link:rsync://ftp3.au.FreeBSD.org[rsync] | オーストリア icon:envelope[link=mailto:{mirrors-austria-email}, title="mirror contact"] | ftp.at.FreeBSD.org | link:http://ftp.at.FreeBSD.org/pub/FreeBSD/[http] link:http://ftp.at.FreeBSD.org/pub/FreeBSD/[http_v6] link:ftp://ftp.at.FreeBSD.org/pub/FreeBSD/[ftp] link:ftp://ftp.at.FreeBSD.org/pub/FreeBSD/[ftp_v6] link:rsync://ftp.at.FreeBSD.org/pub/FreeBSD/[rsync] link:rsync://ftp.at.FreeBSD.org/pub/FreeBSD/[rsync_v6] | ブラジル icon:envelope[link=mailto:{mirrors-brazil-email}, title="mirror contact"] | ftp2.br.FreeBSD.org | link:http://ftp2.br.FreeBSD.org/FreeBSD[http] link:rsync://ftp2.br.FreeBSD.org[rsync] link:rsync://ftp2.br.FreeBSD.org[rsync_v6] | | ftp3.br.FreeBSD.org | link:http://ftp3.br.FreeBSD.org/pub/FreeBSD[http] link:ftp://ftp3.br.FreeBSD.org/pub/FreeBSD[ftp] link:rsync://ftp3.br.FreeBSD.org[rsync] | ブルガリア icon:envelope[link=mailto:{mirrors-bulgaria-email}, title="mirror contact"] | ftp.bg.FreeBSD.org | link:ftp://ftp.bg.FreeBSD.org/pub/FreeBSD[ftp] link:ftp://ftp.bg.FreeBSD.org/pub/FreeBSD[ftp_v6] link:rsync://ftp.bg.FreeBSD.org[rsync] link:rsync://ftp.bg.FreeBSD.org[rsync_v6] | チェコ共和国 icon:envelope[link=mailto:{mirrors-czech-email}, title="mirror contact"] | ftp.cz.FreeBSD.org | link:http://ftp.cz.FreeBSD.org/pub/FreeBSD[http] link:http://ftp.cz.FreeBSD.org/pub/FreeBSD[http_v6] link:rsync://ftp.cz.FreeBSD.org[rsync] link:rsync://ftp.cz.FreeBSD.org[rsync_v6] | デンマーク icon:envelope[link=mailto:{mirrors-denmark-email}, title="mirror contact"] | ftp.dk.FreeBSD.org | link:http://ftp.dk.FreeBSD.org/FreeBSD/[http] link:http://ftp.dk.FreeBSD.org/FreeBSD/[http_v6] link:ftp://ftp.dk.FreeBSD.org/FreeBSD/[ftp] link:ftp://ftp.dk.FreeBSD.org/FreeBSD/[ftp_v6] link:rsync://ftp.dk.FreeBSD.org/FreeBSD/[rsync] link:rsync://ftp.dk.FreeBSD.org/FreeBSD/[rsync_v6] | フィンランド icon:envelope[link=mailto:{mirrors-finland-email}, title="mirror contact"] | ftp.fi.FreeBSD.org | link:ftp://ftp.fi.FreeBSD.org/pub/FreeBSD[ftp] | フランス icon:envelope[link=mailto:{mirrors-france-email}, title="mirror contact"] | ftp.fr.FreeBSD.org | link:http://ftp.fr.FreeBSD.org/pub/FreeBSD[http] link:http://ftp.fr.FreeBSD.org/pub/FreeBSD[http_v6] link:ftp://ftp.fr.FreeBSD.org/pub/FreeBSD[ftp] link:ftp://ftp.fr.FreeBSD.org/pub/FreeBSD[ftp_v6] link:rsync://ftp.fr.FreeBSD.org[rsync] link:rsync://ftp.fr.FreeBSD.org[rsync_v6] | | ftp3.fr.FreeBSD.org | link:ftp://ftp3.fr.FreeBSD.org/pub/FreeBSD[ftp] | | ftp6.fr.FreeBSD.org | link:http://ftp6.fr.FreeBSD.org/pub/FreeBSD[http] link:ftp://ftp6.fr.FreeBSD.org/pub/FreeBSD[ftp] link:rsync://ftp6.fr.FreeBSD.org[rsync] | ドイツ icon:envelope[link=mailto:{mirrors-germany-email}, title="mirror contact"] | ftp.de.FreeBSD.org | link:ftp://ftp.de.FreeBSD.org/pub/FreeBSD[ftp] link:ftp://ftp.de.FreeBSD.org/pub/FreeBSD[ftp_v6] link:rsync://ftp.de.FreeBSD.org[rsync] link:rsync://ftp.de.FreeBSD.org[rsync_v6] | | ftp1.de.FreeBSD.org | link:http://ftp1.de.FreeBSD.org/pub/FreeBSD[http] link:http://ftp1.de.FreeBSD.org/pub/FreeBSD[http_v6] link:ftp://ftp1.de.FreeBSD.org/pub/FreeBSD[ftp] link:ftp://ftp1.de.FreeBSD.org/pub/FreeBSD[ftp_v6] link:rsync://ftp1.de.FreeBSD.org[rsync] link:rsync://ftp1.de.FreeBSD.org[rsync_v6] | | ftp2.de.FreeBSD.org | link:http://ftp2.de.FreeBSD.org/pub/FreeBSD[http] link:http://ftp2.de.FreeBSD.org/pub/FreeBSD[http_v6] link:ftp://ftp2.de.FreeBSD.org/pub/FreeBSD[ftp] link:ftp://ftp2.de.FreeBSD.org/pub/FreeBSD[ftp_v6] link:rsync://ftp2.de.FreeBSD.org[rsync] link:rsync://ftp2.de.FreeBSD.org[rsync_v6] | | ftp5.de.FreeBSD.org | link:ftp://ftp5.de.FreeBSD.org/pub/FreeBSD[ftp] link:ftp://ftp5.de.FreeBSD.org/pub/FreeBSD[ftp_v6] | | ftp7.de.FreeBSD.org | link:http://ftp7.de.FreeBSD.org/pub/FreeBSD[http] link:http://ftp7.de.FreeBSD.org/pub/FreeBSD[http_v6] link:ftp://ftp7.de.FreeBSD.org/pub/FreeBSD[ftp] link:ftp://ftp7.de.FreeBSD.org/pub/FreeBSD[ftp_v6] | ギリシャ icon:envelope[link=mailto:{mirrors-greece-email}, title="mirror contact"] | ftp.gr.FreeBSD.org | link:http://ftp.gr.FreeBSD.org/pub/FreeBSD[http] link:http://ftp.gr.FreeBSD.org/pub/FreeBSD[http_v6] link:ftp://ftp.gr.FreeBSD.org/pub/FreeBSD[ftp] link:ftp://ftp.gr.FreeBSD.org/pub/FreeBSD[ftp_v6] | | ftp2.gr.FreeBSD.org | link:http://ftp2.gr.FreeBSD.org/pub/FreeBSD[http] link:http://ftp2.gr.FreeBSD.org/pub/FreeBSD[http_v6] link:ftp://ftp2.gr.FreeBSD.org/pub/FreeBSD[ftp] link:ftp://ftp2.gr.FreeBSD.org/pub/FreeBSD[ftp_v6] link:rsync://ftp2.gr.FreeBSD.org[rsync] | 日本 icon:envelope[link=mailto:{mirrors-japan-email}, title="mirror contact"] | ftp.jp.FreeBSD.org | link:http://ftp.jp.FreeBSD.org/pub/FreeBSD[http] link:http://ftp.jp.FreeBSD.org/pub/FreeBSD[http_v6] link:ftp://ftp.jp.FreeBSD.org/pub/FreeBSD[ftp] link:ftp://ftp.jp.FreeBSD.org/pub/FreeBSD[ftp_v6] link:rsync://ftp.jp.FreeBSD.org[rsync] link:rsync://ftp.jp.FreeBSD.org[rsync_v6] | | ftp2.jp.FreeBSD.org | link:ftp://ftp2.jp.FreeBSD.org/pub/FreeBSD[ftp] link:rsync://ftp2.jp.FreeBSD.org[rsync] link:rsync://ftp2.jp.FreeBSD.org[rsync_v6] | | ftp3.jp.FreeBSD.org | link:http://ftp3.jp.FreeBSD.org/pub/FreeBSD[http] link:rsync://ftp3.jp.FreeBSD.org[rsync] | | ftp4.jp.FreeBSD.org | link:ftp://ftp4.jp.FreeBSD.org/pub/FreeBSD[ftp] | | ftp6.jp.FreeBSD.org | link:http://ftp6.jp.FreeBSD.org/pub/FreeBSD[http] link:http://ftp6.jp.FreeBSD.org/pub/FreeBSD[http_v6] link:ftp://ftp6.jp.FreeBSD.org/pub/FreeBSD[ftp] link:ftp://ftp6.jp.FreeBSD.org/pub/FreeBSD[ftp_v6] link:rsync://ftp6.jp.FreeBSD.org[rsync] link:rsync://ftp6.jp.FreeBSD.org[rsync_v6] | 韓国 icon:envelope[link=mailto:{mirrors-korea-email}, title="mirror contact"] | ftp.kr.FreeBSD.org | link:http://ftp.kr.FreeBSD.org/pub/FreeBSD[http] link:https://ftp.kr.FreeBSD.org/pub/FreeBSD[https] link:ftp://ftp.kr.FreeBSD.org/pub/FreeBSD[ftp] link:rsync://ftp.kr.FreeBSD.org[rsync] | | ftp2.kr.FreeBSD.org | link:rsync://ftp2.kr.FreeBSD.org[rsync] | ラトビア icon:envelope[link=mailto:{mirrors-latvia-email}, title="mirror contact"] | ftp.lv.FreeBSD.org | link:http://ftp.lv.FreeBSD.org/freebsd[http] link:ftp://ftp.lv.FreeBSD.org/freebsd[ftp] | オランダ icon:envelope[link=mailto:{mirrors-netherlands-email}, title="mirror contact"] | ftp.nl.FreeBSD.org | link:http://ftp.nl.FreeBSD.org/pub/FreeBSD[http] link:http://ftp.nl.FreeBSD.org/pub/FreeBSD[http_v6] link:ftp://ftp.nl.FreeBSD.org/pub/FreeBSD[ftp] link:ftp://ftp.nl.FreeBSD.org/pub/FreeBSD[ftp_v6] link:rsync://ftp.nl.FreeBSD.org[rsync] link:rsync://ftp.nl.FreeBSD.org[rsync_v6] | | ftp2.nl.FreeBSD.org | link:http://ftp2.nl.FreeBSD.org/pub/FreeBSD[http] link:ftp://ftp2.nl.FreeBSD.org/pub/FreeBSD[ftp] link:rsync://ftp2.nl.FreeBSD.org[rsync] | ニュージーランド icon:envelope[link=mailto:{mirrors-new-zealand-email}, title="mirror contact"] | ftp.nz.FreeBSD.org | link:http://ftp.nz.FreeBSD.org/pub/FreeBSD[http] link:ftp://ftp.nz.FreeBSD.org/pub/FreeBSD[ftp] | ノルウェー icon:envelope[link=mailto:{mirrors-norway-email}, title="mirror contact"] | ftp.no.FreeBSD.org | link:ftp://ftp.no.FreeBSD.org/pub/FreeBSD[ftp] link:ftp://ftp.no.FreeBSD.org/pub/FreeBSD[ftp_v6] link:rsync://ftp.no.FreeBSD.org[rsync] link:rsync://ftp.no.FreeBSD.org[rsync_v6] | ポーランド icon:envelope[link=mailto:{mirrors-poland-email}, title="mirror contact"] | ftp.pl.FreeBSD.org | link:http://ftp.pl.FreeBSD.org/pub/FreeBSD[http] link:http://ftp.pl.FreeBSD.org/pub/FreeBSD[http_v6] link:ftp://ftp.pl.FreeBSD.org/pub/FreeBSD[ftp] link:rsync://ftp.pl.FreeBSD.org[rsync] link:rsync://ftp.pl.FreeBSD.org[rsync_v6] | ロシア icon:envelope[link=mailto:{mirrors-russia-email}, title="mirror contact"] | ftp.ru.FreeBSD.org | link:http://ftp.ru.FreeBSD.org/pub/FreeBSD[http] link:http://ftp.ru.FreeBSD.org/pub/FreeBSD[http_v6] link:ftp://ftp.ru.FreeBSD.org/pub/FreeBSD[ftp] link:ftp://ftp.ru.FreeBSD.org/pub/FreeBSD[ftp_v6] link:rsync://ftp.ru.FreeBSD.org[rsync] link:rsync://ftp.ru.FreeBSD.org[rsync_v6] | | ftp2.ru.FreeBSD.org | link:https://ftp2.ru.FreeBSD.org/pub/FreeBSD[https] link:ftp://ftp2.ru.FreeBSD.org/pub/FreeBSD[ftp] link:rsync://ftp2.ru.FreeBSD.org[rsync] | スロベニア icon:envelope[link=mailto:{mirrors-slovenia-email}, title="mirror contact"] | ftp.si.FreeBSD.org | link:http://ftp.si.FreeBSD.org/pub/FreeBSD[http] link:http://ftp.si.FreeBSD.org/pub/FreeBSD[http_v6] link:ftp://ftp.si.FreeBSD.org/pub/FreeBSD[ftp] link:ftp://ftp.si.FreeBSD.org/pub/FreeBSD[ftp_v6] | 南アフリカ icon:envelope[link=mailto:{mirrors-south-africa-email}, title="mirror contact"] | ftp.za.FreeBSD.org | link:https://ftp.za.FreeBSD.org/pub/FreeBSD[https] link:https://ftp.za.FreeBSD.org/pub/FreeBSD[https_v6] link:rsync://ftp.za.FreeBSD.org[rsync] link:rsync://ftp.za.FreeBSD.org[rsync_v6] | | ftp2.za.FreeBSD.org | link:http://ftp2.za.FreeBSD.org/pub/FreeBSD[http] link:http://ftp2.za.FreeBSD.org/pub/FreeBSD[http_v6] link:ftp://ftp2.za.FreeBSD.org/pub/FreeBSD[ftp_v6] | | ftp4.za.FreeBSD.org | link:http://ftp4.za.FreeBSD.org/pub/FreeBSD[http] link:ftp://ftp4.za.FreeBSD.org/pub/FreeBSD[ftp] link:rsync://ftp4.za.FreeBSD.org[rsync] | スウェーデン icon:envelope[link=mailto:{mirrors-sweden-email}, title="mirror contact"] | ftp.se.FreeBSD.org | link:http://ftp.se.FreeBSD.org/pub/FreeBSD[http] link:http://ftp.se.FreeBSD.org/pub/FreeBSD[http_v6] link:ftp://ftp.se.FreeBSD.org/pub/FreeBSD[ftp] link:ftp://ftp.se.FreeBSD.org/pub/FreeBSD[ftp_v6] link:rsync://ftp.se.FreeBSD.org[rsync] link:rsync://ftp.se.FreeBSD.org[rsync_v6] | 台湾 icon:envelope[link=mailto:{mirrors-taiwan-email}, title="mirror contact"] | ftp4.tw.FreeBSD.org | link:https://ftp4.tw.FreeBSD.org/pub/FreeBSD[https] link:ftp://ftp4.tw.FreeBSD.org/pub/FreeBSD[ftp] link:rsync://ftp4.tw.FreeBSD.org[rsync] | | ftp5.tw.FreeBSD.org | link:http://ftp5.tw.FreeBSD.org/pub/FreeBSD[http] link:ftp://ftp5.tw.FreeBSD.org/pub/FreeBSD[ftp] | ウクライナ icon:envelope[link=mailto:{mirrors-ukraine-email}, title="mirror contact"] | ftp.ua.FreeBSD.org | link:http://ftp.ua.FreeBSD.org/pub/FreeBSD[http] link:ftp://ftp.ua.FreeBSD.org/pub/FreeBSD[ftp] link:ftp://ftp.ua.FreeBSD.org/pub/FreeBSD[ftp_v6] link:rsync://ftp.ua.FreeBSD.org[rsync] link:rsync://ftp.ua.FreeBSD.org[rsync_v6] | 英国 icon:envelope[link=mailto:{mirrors-uk-email}, title="mirror contact"] | ftp.uk.FreeBSD.org | link:http://ftp.uk.FreeBSD.org/pub/FreeBSD[http] link:http://ftp.uk.FreeBSD.org/pub/FreeBSD[http_v6] link:ftp://ftp.uk.FreeBSD.org/pub/FreeBSD[ftp] link:ftp://ftp.uk.FreeBSD.org/pub/FreeBSD[ftp_v6] link:rsync://ftp.uk.FreeBSD.org[rsync] link:rsync://ftp.uk.FreeBSD.org[rsync_v6] | | ftp2.uk.FreeBSD.org | link:http://ftp2.uk.FreeBSD.org/pub/FreeBSD[http] link:http://ftp2.uk.FreeBSD.org/pub/FreeBSD[http_v6] link:https://ftp2.uk.FreeBSD.org/pub/FreeBSD[https] link:https://ftp2.uk.FreeBSD.org/pub/FreeBSD[https_v6] link:ftp://ftp2.uk.FreeBSD.org/pub/FreeBSD[ftp] link:ftp://ftp2.uk.FreeBSD.org/pub/FreeBSD[ftp_v6] | アメリカ合衆国 icon:envelope[link=mailto:{mirrors-us-email}, title="mirror contact"] | ftp11.FreeBSD.org | link:http://ftp11.FreeBSD.org/pub/FreeBSD[http] link:http://ftp11.FreeBSD.org/pub/FreeBSD[http_v6] link:ftp://ftp11.FreeBSD.org/pub/FreeBSD[ftp] link:ftp://ftp11.FreeBSD.org/pub/FreeBSD[ftp_v6] link:rsync://ftp11.FreeBSD.org[rsync] link:rsync://ftp11.FreeBSD.org[rsync_v6] | | ftp14.FreeBSD.org | link:ftp://ftp14.FreeBSD.org/pub/FreeBSD[ftp] link:rsync://ftp14.FreeBSD.org[rsync] (Former official tier 1) | | ftp5.FreeBSD.org | link:http://ftp5.FreeBSD.org/pub/FreeBSD[http] link:http://ftp5.FreeBSD.org/pub/FreeBSD[http_v6] link:ftp://ftp5.FreeBSD.org/pub/FreeBSD[ftp] link:ftp://ftp5.FreeBSD.org/pub/FreeBSD[ftp_v6] |=== コミュニティのミラーによりサポートされているプロトコル一覧は、2022-01-31 に更新されました。 この一覧は保証されているわけではありません。 [[git]] == Git の利用 [[git-intro]] === はじめに 2020 年 12 月、FreeBSD はソースコード、ドキュメントのすべてを管理するメインのバージョン管理システムを git に移行しました。 2021 年 4 月、FreeBSD は Ports Collection のすべてを管理するバージョン管理システムを git に移行しました。 [NOTE] ==== 一般的には Git は開発用ツールです。 ユーザは好みに合わせて、FreeBSD ベースシステムのアップデートに `freebsd-update` (crossref:cutting-edge[updating-upgrading-freebsdupdate,“FreeBSD Update”])、 FreeBSD Ports Collection のアップデートに `git` (crossref:ports[ports-using,“Ports Collection の利用”]を使用できます。 ==== この章では、FreeBSD への Git のインストール方法および FreeBSD ソースコードリポジトリのローカルコピーの作成方法について説明します。 [[git-install]] === インストール Ports Collection または package を使って Git をインストールできます。 [source,shell] .... # pkg install git .... [[git-usage]] === Git の実行 ソースコードをローカルディレクトリに新しくコピーするには、`git clone` を使ってください。 このファイルのあるディレクトリのことを _ワークツリー_ と呼びます。 Git は、リポジトリの指定に URL を用います。 リポジトリには `base`, `doc` および `ports` の 3 種類あります。 `base` は FreeBSD ベースシステムのソースコード、`doc` はドキュメント、そして `ports` は FreeBSD Ports Collection のリポジトリです。 これら 3 つのリポジトリはすべて HTTPS および SSH という 2 つの異なるプロトコル経由でアクセスできます。 たとえば、`https://git.FreeBSD.org/src.git` という URL は、`https` プロトコルによる `src` リポジトリの main ブランチを示します。 [[git-url-table]] .FreeBSD Git リポジトリの URL テーブル [options="header,footer"] |======================================================= |項目 | Git URL | HTTPS 経由の読み取り専用 src リポジトリ | `https://git.FreeBSD.org/src.git` | Anonymous ssh による読み取り専用 src リポジトリ | `ssh://anongit@git.FreeBSD.org/src.git` | HTTPS 経由の読み取り専用 doc リポジトリ | `https://git.FreeBSD.org/doc.git` | Anonymous ssh による読み取り専用 doc リポジトリ | `ssh://anongit@git.FreeBSD.org/doc.git` | HTTPS 経由の読み取り専用 ports リポジトリ| `https://git.FreeBSD.org/ports.git` | Anonymous ssh による読み取り専用 ports リポジトリ | `ssh://anongit@git.FreeBSD.org/ports.git` |======================================================= プロジェクトのメンバーが管理する外部のミラーも存在します。 <> の節を参照してください。 FreeBSD システムのソースコードリポジトリを clone するには、以下のコマンドを実行してください。 [source,shell] .... # git clone -o freebsd https://git.FreeBSD.org/src.git /usr/src .... ここで `-o freebsd` オプションは origin を指定します。 FreeBSD のドキュメントの慣例で、origin は `freebsd` とします。 初めてチェックアウトする際には、リモートリポジトリのすべてのブランチをダウンロードするので時間がかかります。 ワーキングツリーには最初、CURRENT に対応する `main` ブランチのソースコードがダウンロードされます。 13-STABLE に変更するには以下のように実行してください。 [source,shell] .... # cd /usr/src # git checkout stable/13 .... ワーキングツリーは、`git pull` によりアップデートできます。 上記の例で作成された [.filename]#/usr/src# をアップデートするには、以下のようになります。 [source,shell] .... # cd /usr/src # git pull --rebase .... チェックアウトと比較すると、このアップデートでは変更点のあるファイルのみが転送されるので高速です。 === ウェブベースのリポジトリブラウザ FreeBSD プロジェクトは、現在 cgit をウェブベースのリポジトリブラウザ (link:https://cgit.FreeBSD.org/[https://cgit.FreeBSD.org/]) として使用しています。 === 開発者向けの説明 リポジトリへの書き込みアクセスについてはの詳細は、extref:{committers-guide}[Committer's Guide, git-mini-primer] をご覧ください。 [[external-mirrors]] === 外部ミラー FreeBSD.org は以下のミラーを管理していませんが、プロジェクトのメンバーが現在も維持しています。 ユーザおよび開発者は自由にこれらのミラーのリポジトリを pull したりブラウザで見ることができます。 `doc` GitHub リポジトリへの pull request は accept されますが、 それ以外について、これらのミラーとのプロジェクトワークフローは議論中です。 Codeberg:: - doc: https://codeberg.org/FreeBSD/freebsd-doc - ports: https://codeberg.org/FreeBSD/freebsd-ports - src: https://codeberg.org/FreeBSD/freebsd-src GitHub:: - doc: https://github.com/freebsd/freebsd-doc - ports: https://github.com/freebsd/freebsd-ports - src: https://github.com/freebsd/freebsd-src GitLab:: - doc: https://gitlab.com/FreeBSD/freebsd-doc - ports: https://gitlab.com/FreeBSD/freebsd-ports - src: https://gitlab.com/FreeBSD/freebsd-src === メーリングリスト FreeBSD プロジェクトにおける git の一般的な使用方法や質問についてのメインのメーリングリストは https://lists.freebsd.org/subscription/freebsd-git[freebsd-git] です。 コミットメッセージの一覧などの詳細については、crossref:handbook/eresources[eresources-mail, メーリングリスト] の章をご覧ください。 === SSH ホスト鍵 * gitrepo.FreeBSD.org ホスト鍵のフィンガープリント: ** ECDSA 鍵のフィンガープリントは `SHA256:seWO5D27ySURcx4bknTNKlC1mgai0whP443PAKEvvZA` です。 ** ED25519 鍵のフィンガープリントは `SHA256:lNR6i4BEOaaUhmDHBA1WJsO7H3KtvjE2r5q4sOxtIWo` です。 ** RSA 鍵のフィンガープリントは `SHA256:f453CUEFXEJAXlKeEHV+ajJfeEfx9MdKQUD7lIscnQI` です。 * git.FreeBSD.org ホスト鍵のフィンガープリント: ** ECDSA 鍵のフィンガープリントは `SHA256:/UlirUAsGiitupxmtsn7f9b7zCWd0vCs4Yo/tpVWP9w` です。 ** ED25519 鍵のフィンガープリントは `SHA256:y1ljKrKMD3lDObRUG3xJ9gXwEIuqnh306tSyFd1tuZE` です。 ** RSA 鍵のフィンガープリントは `SHA256:jBe6FQGoH4HjvrIVM23dcnLZk9kmpdezR/CvQzm7rJM` です。 これらは DNS の SSHFP レコードとしても公開されています。 [[svn]] == Subversion の利用 [[svn-intro]] === はじめに 2020 年 12 月より、FreeBSD のソースコード、ドキュメントのすべてを管理するメインのバージョン管理システムは git に移行しました。 git リポジトリの `stable/11`, `stable/12` および関連するリリースのブランチは、subversion リポジトリにエクスポートされます。 このエクスポートは、各ブランチの保守終了予定日まで行われる予定です。 2012 年 7 月から 2021 年 3 月までの間 FreeBSD は、FreeBSD Ports Collection のすべてを管理するバージョン管理システムに Subversion を使用していました。 2021 年 4 月より、FreeBSD の Ports Collection のすべてを管理するメインのバージョン管理システムは git に移行しました。 [NOTE] ==== -一般的には Subversion は開発者向けのツールです。 ユーザは好みに応じて、FreeBSD のベースシステムのアップデートに `freebsd-update` (crossref:cutting-edge[updating-upgrading-freebsdupdate,「FreeBSD Update」])、Ports Collection のアップデートには `git` (crossref:ports[ports-using,「Ports Collection の利用」]) を使用できます。 2021 年 3 月以降、subversion はレガシーブランチ (`stable/11` および `stable/12`) でのみ使用されます。 ==== この節では、FreeBSD システムへの Subversion のインストール方法、および FreeBSD リポジトリをローカルに作成する方法について説明します。 さらに Subversion を利用するための情報についても紹介します。 [[svn-svnlite]] === Svnlite FreeBSD には、Subversion より軽い `svnlite` がインストールされています。 Subversion の port または package は、Python もしくは Perl API が必要な時や、最新の Subversion を使用したい時のみ必要となります。 通常の Subversion と、 `svnlite` との違いは、 使用する時のコマンド名が異なるだけです。 [[svn-install]] === インストール `svnlite` を利用できない場合や、 フルバージョンの Subversion を使いたいのであれば、 事前に Subversion をインストールしておく必要があります。 Subversion は Ports Collection からインストールできます。 [source,shell] .... # cd /usr/ports/devel/subversion # make install clean .... package を使って Subversion をインストールすることもできます。 [source,shell] .... # pkg install subversion .... [[svn-usage]] === Subversion の実行 ローカルディレクトリにソースコードをダウンロードするには、 `svn` コマンドを使ってください。 このディレクトリにあるファイルを、 _ローカル作業コピー_ と呼びます。 [WARNING] ==== `checkout` をはじめて使う前に、 ローカルディレクトリを移動するか削除してください。 `svn` 以外の方法で用意されたディレクトリでチェックアウトすると、 すでに存在するファイルと、 リポジトリから持ってきたファイルとの間で衝突が起きてしまいます。 ==== Subversion では、リポジトリの指定に _protocol://hostname/path_ 形式の URL を用います。 以下に記載されているように、 アクセスする FreeBSD リポジトリは、パス (path) の最初で指定します。 リポジトリは 3 つあります。 `base` は FreeBSD ベースシステムのソースコード、`ports` は Ports Collection、 そして `doc` はドキュメントのリポジトリです。 たとえば、`https://svn.FreeBSD.org/base/head/` という URL は、`https` プロトコルによる src リポジトリのメインブランチを示しています。 以下のように入力して、リポジトリからチェックアウトしてください。 [source,shell] .... # svn checkout https://svn.FreeBSD.org/repository/branch lwcdir .... ここで、_repository_, _branch_ および _root_ は以下のとおりです。 * _repository_ には、 プロジェクトリポジトリの `base`, `ports` または `doc` のどれかひとつを指定します。 * _branch_ は、使うリポジトリによります。 `ports` および `doc` では、ほとんどの変更が `head` ブランチで行われます。 `base` リポジトリでは、`head` ブランチで -CURRENT の最新バージョンを管理しています。 -STABLE ブランチの最新バージョンは、 11._x_ は `stable/11`, そして 12._x_ は `stable/12` で管理しています。 * _lwcdir_ は、 指定したブランチの中身が置かれるターゲットのディレクトリです。 通常 `ports` は [.filename]#/usr/ports#、 `base` は [.filename]#/usr/src#、 そして `doc` では [.filename]#/usr/doc# と指定します。 以下の例では、ソースツリーを FreeBSD リポジトリから HTTPS プロトコルを使ってチェックアウトします。 それらは、[.filename]#/usr/src# のローカル作業コピーに置かれます。 もし [.filename]#/usr/src# がすでに存在していて、それが `svn` によって生成されたものでなければ、チェックアウトする前に、名前を変更するか削除してください。 [source,shell] .... # svn checkout https://svn.FreeBSD.org/base/head /usr/src .... 初めてチェックアウトする際には、 リモートリポジトリのすべてのブランチをダウンロードする必要があるので、時間がかかります。 我慢してください。 初めてのチェックアウト後は、 以下を実行することでローカル作業コピーをアップデートできます。 [source,shell] .... # svn update lwcdir .... この例で作成された [.filename]#/usr/src# をアップデートするには、 以下のようにしてください。 [source,shell] .... # svn update /usr/src .... アップデートはチェックアウトにくらべ、 変更点のあるファイルのみが転送されるので高速です。 チェックアウト後、ローカル作業コピーをアップデートするもうひとつの方法は、 [.filename]#/usr/ports#, [.filename]#/usr/src# または [.filename]#/usr/doc# ディレクトリの [.filename]#Makefile# で提供されています。 `SVN_UPDATE` を設定して `update` ターゲットを使ってください。 たとえば、[.filename]#/usr/src# をアップデートするには、以下のようにしてください。 [source,shell] .... # cd /usr/src # make update SVN_UPDATE=yes .... [[svn-mirrors]] === Subversion ミラーサイト FreeBSD Subversion リポジトリは、 [.programlisting] .... svn.FreeBSD.org .... です。これは、公にアクセス可能なミラーネットワークで、 GeoDNS を用いて適切なバックエンドサーバを選択しています。 ブラウザを用いて FreeBSD の Subversion リポジトリを参照するには、link:https://svnweb.FreeBSD.org/[https://svnweb.FreeBSD.org/] を利用してください。 HTTPS は推奨されているプロトコルです。 自動的に証明書を検証するために、package:security/ca_root_nss[] port をインストールする必要があります。 === より詳しい情報 Subversion の利用に関する他の情報は、 http://svnbook.red-bean.com/[Version Control with Subversion] や http://subversion.apache.org/docs/[Subversion Documentation] といった "Subversion Book" をご覧ください。 [[mirrors-cdrom]] == CD および DVD セット FreeBSD の CD および DVD のセットは以下のオンライン業者から入手できます。 * FreeBSD Mall, Inc. + 1164 Claremont Dr + Brentwood, CA + 94513 + USA + Phone: +1 925 240-6652 + Fax: +1 925 674-0821 + Email: info@freebsdmall.com + WWW: https://www.freebsdmall.com * Getlinux + WWW: https://www.getlinux.fr/ * Dr. Hinner EDV + Schäftlarnstr. 10 // 4. Stock + D-81371 München + Germany + Phone: +49 171 417 544 6 + Email: infow@hinner.de + WWW: http://www.hinner.de/linux/freebsd.html diff --git a/documentation/content/ja/books/handbook/ports/_index.adoc b/documentation/content/ja/books/handbook/ports/_index.adoc index f2d72e2271..a8f590ef79 100644 --- a/documentation/content/ja/books/handbook/ports/_index.adoc +++ b/documentation/content/ja/books/handbook/ports/_index.adoc @@ -1,1163 +1,1162 @@ --- title: 第4章 アプリケーションのインストール - packages と ports part: パートI. 導入 prev: books/handbook/basics next: books/handbook/x11 description: "FreeBSD は、サードパーティ製のソフトウェアの導入を支援するために、ソースコードをコンパイルしてインストールする Ports Collection と、コンパイル済みのバイナリをインストールする packages という相補的な 2 つの技術を提供しています。" tags: ["ports", "collection", "pkg", "poudriere", "管理"] showBookMenu: true weight: 6 path: "/books/handbook/ports/" -aliases: ["/ja/books/handbook/ports-overview/","/ja/books/handbook/ports-finding-applications/","/ja/books/handbook/pkgng-intro/","/ja/books/handbook/ports-using/","/ja/books/handbook/ports-poudriere/","/ja/books/handbook/ports-nextsteps/","/ja/books/handbook/ports-broken/"] --- [[ports]] = アプリケーションのインストール - packages と ports :doctype: book :toc: macro :toclevels: 1 :icons: font :sectnums: :sectnumlevels: 6 :sectnumoffset: 4 :partnums: :source-highlighter: rouge :experimental: :images-path: books/handbook/ports/ ifdef::env-beastie[] ifdef::backend-html5[] :imagesdir: ../../../../images/{images-path} endif::[] ifndef::book[] include::shared/authors.adoc[] include::shared/mirrors.adoc[] include::shared/releases.adoc[] include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists.adoc[] include::shared/{{% lang %}}/urls.adoc[] toc::[] endif::[] ifdef::backend-pdf,backend-epub3[] include::../../../../../shared/asciidoctor.adoc[] endif::[] endif::[] ifndef::env-beastie[] toc::[] include::../../../../../shared/asciidoctor.adoc[] endif::[] [[ports-synopsis]] == この章では FreeBSD の基本システムには数多くのシステムツールが含まれています。 FreeBSD は、サードパーティ製のソフトウェアの導入を支援するために、 ソースコードをコンパイルしてインストールする Ports Collection と、 コンパイル済みのバイナリをインストールする packages という相補的な 2 つの技術を提供しています。 どちらのシステムを用いても、 ローカルメディアやネットワーク上からソフトウェアをインストールできます。 この章を読むと、以下のことがわかります。 * packages と ports の違い * FreeBSD に移植されたサードパーティ製のソフトウェアの探し方 * pkg を用いてバイナリ package を管理する方法 * Ports Collection を用いてサードパーティ製のソフトウェアをソースコードから構築する方法 * インストール後の設定のために、 アプリケーションとともにインストールされたファイルを探す方法 * ソフトウェアのインストールに失敗した場合に、どうしたらよいか [[ports-overview]] == ソフトウェアのインストール UNIX(R) システムでは、 サードパーティ製ソフトウェアの典型的なインストール手順は以下のようになります。 [.procedure] ==== . ソースコード、 またはバイナリ形式で配布されているソフトウェアを探し出し、 ダウンロードする。 . 配布時のフォーマットからソフトウェアを取り出す。 一般的には man:compress[1], man:gzip[1], man:bzip2[1] または、man:xz[1] といったプログラムで圧縮された tarball です。 . [.filename]#INSTALL# または [.filename]#README# ファイル、あるいは [.filename]#doc/# サブディレクトのファイルからドキュメントを探しだし、 ソフトウェアのインストール方法を調べる。 . ソース形式でソフトウェアが配布されている場合はコンパイルを行う。 ここでは、[.filename]#Makefile# の編集、 または、`configure` スクリプトの実行を伴うことがあります。 . ソフトウェアの動作を確認し、インストールする。 ==== FreeBSD _port_ は、 アプリケーションをソースコードからコンパイルする際の処理を自動化するように設計されたファイルの集まりです。 port を構成するファイルは、 自動的にアプリケーションをダウンロードし、展開、パッチ作業、 コンパイル、そしてインストールを行うために必要な情報を含んでいます。 ソフトウェアが、すでに FreeBSD に移植され、 FreeBSD 上で試験されていなければ、 適切にインストールが行われ、動作するように、 編集する必要があるかもしれません。 しかしながら、link:https://www.FreeBSD.org/ja/ports/[{numports}] を越えるサードパーティ製アプリケーションが FreeBSD に移植されています。 可能な場合は、これらのアプリケーションをコンパイル済みの _packages_ としてダウンロードできます。 package は、package 管理コマンドで扱うことができます。 packages と ports は依存関係を理解します。 package または port を用いてアプリケーションをインストールすると、 依存するライブラリがまだインストールされていない場合には、 最初にライブラリが自動的にインストールされます。 FreeBSD の package は、コンパイル済みのアプリケーションの全コマンド、 各種設定ファイルやドキュメントを含んでいます。 pkg コマンドでは、`pkg install` といったコマンドで、 package を扱うことができます。 2 つの技術は類似していますが、 packages と ports にはそれぞれ独自の特徴があります。 それぞれのアプリケーションのインストールに対する必要要件に応じてどちらかを選択してください。 .package の利点 * 一般的に、あるアプリケーションの package の tarball は、 ソースコードを含む tarball より小さなサイズとなります。 * packages はコンパイルの時間を必要としません。 このことは、遅いシステム上で Mozilla, KDE, または GNOME といった大きなアプリケーションを扱う場合に重要となります。 * packages を用いれば、 ソフトウェアのコンパイルに関する知識は必要ありません。 .port の利点 * packages は、通常最も多くのシステムで実行できるように、 非常に保守的な設定で構築されています。 port からコンパイルすることで、 コンパイルオプションを指定できます。 * アプリケーションのなかには、 どの機能をインストールするかをコンパイル時に設定するものがあります。 たとえば、Apache は多種多様な ビルトインオプションを設定できます。 + 設定を区別するために、同じアプリケーションに対して 複数の packages が存在することがあります。 たとえば、Ghostscript は Xorg がインストールされているかどうかにより、 [.filename]#ghostscript# package と [.filename]#ghostscript-nox11# package が選択可能となっています。 アプリケーションのコンパイルオプションが 1 つもしくは 2 つ以上になると、 複数の packages を用意することは困難になります。 * ライセンス条項で、 バイナリでの配布を禁止しているソフトウェアがあります。 このようなソフトウェアはソースコードで配布される必要があり、 エンドユーザがコンパイルしなくてはなりません。 * バイナリ配布を信用していない人や、 潜在的な問題点を見つけ出すためにソースコードを読むことを好む人がいます。 * カスタマイズしたパッチを適用するためには、 ソースコードが必要になります。 ports の更新状況を把握するために、 {freebsd-ports} や {freebsd-ports-bugs} を購読するとよいでしょう。 [WARNING] ==== アプリケーションをインストールする前に、 そのアプリケーションに関連したセキュリティ上の問題がないことを https://vuxml.freebsd.org/[] で確認するか、`pkg audit -F` と入力して、 インストールされているアプリケーションに既知の脆弱性がないことを確認してください。 ==== この章では、packages と ports を用いた FreeBSD 上での サードパーティ製ソフトウェアのインストール方法や管理方法について説明します。 [[ports-finding-applications]] == ソフトウェアの探し方 FreeBSD 上で利用可能なアプリケーションのリストは常に増えています。 インストールするソフトウェアを探す方法はたくさん用意されています。 * FreeBSD ウェブサイトは、 利用可能なすべてのアプリケーションの最新の一覧を、検索できる形で link:https://www.FreeBSD.org/ja/ports/[https://www.FreeBSD.org/ja/ports/] において公開しています。 ports はアプリケーションの名前や、ソフトウェアのカテゴリで検索出来ます。 * Dan Langille は、包括的な検索ユーティリティや Ports Collection にあるアプリケーションの変更点を追跡する http://www.FreshPorts.org/[FreshPorts.org] を公開しています。 登録したユーザは、監視している ports がアップデートされた時に、 そのことを自動的にメールで知らせてくれるような、 カスタマイズ可能な監視リストを使うことができます。 * アプリケーションを見つけることが難しい場合には、link:http://www.sourceforge.net/[SourceForge.net] または http://www.github.com/[GitHub.com] のようなサイトで探してみてください。 その後、そのアプリケーションが ports で利用可能かどうかを link:https://www.FreeBSD.org/ja/ports/[FreeBSD サイト] で調べて下さい。 * バイナリ package リポジトリでアプリケーションを探すには、 以下のように実行してください。 + [source,shell] .... # pkg search subversion git-subversion-1.9.2 java-subversion-1.8.8_2 p5-subversion-1.8.8_2 py27-hgsubversion-1.6 py27-subversion-1.8.8_2 ruby-subversion-1.8.8_2 subversion-1.8.8_2 subversion-book-4515 subversion-static-1.8.8_2 subversion16-1.6.23_4 subversion17-1.7.16_2 .... + package 名にはバージョン番号が含まれます。 また、python ベースの ports では、 共に構築された python のバージョン番号も含まれます。 ports によっては、複数のバージョンを利用できるものがあります。 subversion では、 複数のバージョンを利用できますが、 異なるコンパイルオプションで構築されたものも利用できます。 インストールする package を指定する際には、 アプリケーションに、port ツリーのパスである、 port のオリジンを指定すると良いでしょう。 `pkg search` に `-o` オプションを付けて、実行してください。 各 package のオリジンの一覧が表示されます。 + [source,shell] .... # pkg search -o subversion devel/git-subversion java/java-subversion devel/p5-subversion devel/py-hgsubversion devel/py-subversion devel/ruby-subversion devel/subversion16 devel/subversion17 devel/subversion devel/subversion-book devel/subversion-static .... + `pkg search` は、 リポジトリデータベースの説明やその他のフィールドにおいて、 シェルグロブ、正規表現、完全一致にも対応しています。 詳細については、package:ports-mgmt/pkg[] または package:ports-mgmt/pkg-devel[] のインストール後、 man:pkg-search[8] をご覧ください。 * Ports Collection がすでにインストールされていれば、 ports ツリーのローカルバージョンを調べることができます。 port がどのカテゴリに分類されているのかを知りたければ、 man:whereis[1] コマンドで調べることができます。 `whereis _ファイル_` と入力してください。_ファイル_ の部分にはインストールを考えているプログラム名を入れます。 + [source,shell] .... # whereis lsof lsof: /usr/ports/sysutils/lsof .... + さらに、以下の例のように man:echo[1] を使って調べることもできます。 + [source,shell] .... # echo /usr/ports/*/*lsof* /usr/ports/sysutils/lsof .... + この方法では [.filename]#/usr/ports/distfiles# 以下にダウンロードされたファイル名にもマッチします。 * また、Ports Collection に備わっている検索機能を利用して port を検索する方法もあります。 この検索機能を利用するには、 cd コマンドを用いて [.filename]#/usr/ports# ディレクトリに移動し、`make search name=プログラム名` と入力してください。 _プログラム名_ の部分には検索したいソフトウェアの名前を入れてください。 たとえば、`lsof` を探すには次のようにします。 + [source,shell] .... # cd /usr/ports # make search name=lsof Port: lsof-4.88.d,8 Path: /usr/ports/sysutils/lsof Info: Lists information about open files (similar to fstat(1)) Maint: ler@lerctr.org Index: sysutils B-deps: R-deps: .... + [TIP] ==== Ports Collection に用意されている検索のメカニズムでは、 インデックスファイルを利用して検索を行います。 もし [.filename]#INDEX# が必要であるというメッセージが表示されたら、 `make fetchindex` を実行して、 最新のインデックスファイルをダウンロードしてください。 [.filename]#INDEX# が用意されれば、 `make search` で検索を実行できるでしょう。 ==== + "Path:" という行は、 port がどこにあるかを示しています。 + より絞られた情報を得るには、 `quicksearch` と呼ばれる機能を使ってください。 + [source,shell] .... # cd /usr/ports # make quicksearch name=lsof Port: lsof-4.88.d,8 Path: /usr/ports/sysutils/lsof Info: Lists information about open files (similar to fstat(1)) .... + もっと詳しく検索するには、 `make search key=_string_` または `make quicksearch key=_string_` と入力してください。 _string_ の部分には検索したいテキストを入れます。 プログラムの名前がわからない場合でも、 ある目的に関連した ports の検索に利用できるよう、 テキストの部分には、コメント、 説明文および依存情報を入れることができます。 + `search` および `quicksearch` を使う場合には、 検索文字列中の大文字と小文字を区別せずに検索が行われるので、 "LSOF" を検索した結果は、 "lsof" と同じ検索結果になります。 [[pkgng-intro]] == pkg によるバイナリ package の管理 pkg は、FreeBSD における伝統的な package 管理ツールの置き換えとなる次世代の管理ツールで、 バイナリ packages をより早く、 より簡単に管理できるようにする数多くの機能を提供します。 FreeBSD のミラーサイトが提供する事前に構築されたバイナリ package のみを使いたいと考えているサイトでは、 pkg を使って package を管理するとよいでしょう。 しかしながら、 ソースまたは自分自身で用意したリポジトリから構築したサイトでは、<> が別に必要となります。 pkg はバイナリ package のみを扱うので、 そのような管理ツールの置き換えとはなりません。 これらのツールは、ソフトウェアをバイナリ packages と Ports Collection の両形式からインストールできますが、 pkg はバイナリ packages のみをインストールします。 [[pkgng-initial-setup]] === pkg 入門 FreeBSD には、 pkg およびマニュアルページをインストールするブートストラップユーティリティが用意されています。 このユーティリティは、FreeBSD 10._X_ 以降で動作するように設計されています。 [NOTE] ==== このブートストラッププロセスは、すべての FreeBSD バージョンおよびアーキテクチャに対応しているわけではありません。 現在対応している一覧は、 https://pkg.freebsd.org/[] で確認することができます。 対応していない場合には、 Ports Collection またはバイナリ package から pkg をインストールする必要があります。 ==== システムをブートストラップするには、 以下を実行してください。 [source,shell] .... # /usr/sbin/pkg .... ブートストラッププロセスに成功するには、 インターネットへの接続が必要です。 port をインストールするには以下を実行してください。 [source,shell] .... # cd /usr/ports/ports-mgmt/pkg # make # make install clean .... 古い pkg_* ツールを用いたシステムをアップグレードする際には、 新しいツールがすでにインストールされている package を認識するよう、 データベースを新しいフォーマットへと変換する必要があります。 pkg をインストールしたら、 以下のコマンドを実行して、package データベースをこれまでの伝統的なフォーマットから新しいフォーマットへと変換してください。 [source,shell] .... # pkg2ng .... [NOTE] ==== このステップは、 サードパーティ製ソフトウェアがまだインストールされていないような、 新しくインストールされた直後のシステムでは必要ありません。 ==== [IMPORTANT] ==== このステップは非可逆です。 一度 package データベースを pkg フォーマットへと変換したら、伝統的な pkg_* ツールを使うべきではありません。 ==== [NOTE] ==== package データベースを変換する際には、 新しいバージョンへのデータ変換に伴ったエラーが出力されることがあります。 通常、これらのエラーは無視して構いませんが、 `pkg2ng` 終了後、 変換に失敗したソフトウェアの一覧が表示されます。 これらのソフトウェアを手動で再インストールする必要があります。 ==== FreeBSD のバージョンが 10._X_ より前であれば、 以下の行を [.filename]#/etc/make.conf# に追加して、 Ports Collection がソフトウェアの登録に、伝統的な package のデータベースではなく、pkg を用いるように設定してください。 [.programlisting] .... WITH_PKGNG= yes .... デフォルトでは、pkg は FreeBSD の package ミラー (_リポジトリ_) のバイナリ package を用います。 カスタム package リポジトリの構築については、 <> をご覧ください。 その他の pkg の設定オプションは、man:pkg.conf[5] に記述されています。 pkg の利用情報は、 man:pkg[8] マニュアルページや、 `pkg` を引数なしに実行すると表示されます。 各 pkg コマンドの引数は、 コマンドに固有なマニュアルページに記述されています。 たとえば、`pkg install` のマニュアルページを読むには、 以下のコマンドのどちらかを実行してください。 [source,shell] .... # pkg help install .... [source,shell] .... # man pkg-install .... 以下の節では、pkg を用いた通常のバイナリ package の管理について説明します。 各コマンドでは、カスタマイズのために、 多くのオプションが使われています。 詳細や、他の例については、 コマンドのヘルプやマニュアルページを参照してください。 [[quarterly-latest-branch]] === Quarterly および Latest Ports ブランチ `Quarterly` ブランチを使うと、 ユーザは、port および package のインストールおよびアップグレードを、 より予測可能で安定して行うことができます。 基本的には、このブランチでは機能のアップデートは行われません。 Quarterly ブランチの目的は、セキュリティに関連する修正 (バージョンアップデートやコミットのバックポートなど)、 バグの修正および ports のコンプライアンスおよびフレームワークの変更の入手です。 Quarterly ブランチは、毎年の毎四半期 (1 月、4 月、7 月および 10 月) のはじめに HEAD から作成されます。 ブランチには、作成された年 (YYYY) をよび四半期 (Q1-4) により名前がつけられます。 たとえば、2016 年 1 月に作成された quarterly ブランチの名前は 2016Q1 となります。 `Latest` ブランチは、 最新バージョンの package をユーザに提供します。 quarterly から latest ブランチに移行するには、 以下のコマンドを実行してください。 [source,shell] .... # cp /etc/pkg/FreeBSD.conf /usr/local/etc/pkg/repos/FreeBSD.conf .... [.filename]#/usr/local/etc/pkg/repos/FreeBSD.conf# ファイルを編集して、`url:` 行の _quarterly_ 文字列を _latest_ に変更してください。 編集後は、以下のようになります。 [.programlisting] .... FreeBSD: { url: "pkg+http://pkg.FreeBSD.org/${ABI}/latest", mirror_type: "srv", signature_type: "fingerprints", fingerprints: "/usr/shared/keys/pkg", enabled: yes } .... 最後に、以下のコマンドを実行して (latest) リポジトリのメタデータからアップデートしてください。 [source,shell] .... # pkg update -f .... [[pkgng-pkg-info]] === インストールされている package の情報を入手する オプションを使用しないで `pkg info` を実行すると、 システムにインストールされているすべての package もしくは、 ある特定の package の情報が得られます。 たとえば、インストールされている pkg の情報を調べるには、 以下のように実行してください。 [source,shell] .... # pkg info pkg pkg-1.1.4_1 .... [[pkgng-installing-deinstalling]] === package のインストールと削除 バイナリ package をインストールするには、 以下のコマンドを使ってください。 ここで _packagename_ は、インストールする package の名前です。 [source,shell] .... # pkg install packagename .... このコマンドは、リポジトリデータを使用して、 インストールすべきソフトウェアのバージョン、および、 インストールされていない依存ソフトウェアがあるかどうかを調べます。 たとえば、curl をインストールするには以下を実行してください。 [source,shell] .... # pkg install curl Updating repository catalogue /usr/local/tmp/All/curl-7.31.0_1.txz 100% of 1181 kB 1380 kBps 00m01s /usr/local/tmp/All/ca_root_nss-3.15.1_1.txz 100% of 288 kB 1700 kBps 00m00s Updating repository catalogue The following 2 packages will be installed: Installing ca_root_nss: 3.15.1_1 Installing curl: 7.31.0_1 The installation will require 3 MB more space 0 B to be downloaded Proceed with installing packages [y/N]: y Checking integrity... done [1/2] Installing ca_root_nss-3.15.1_1... done [2/2] Installing curl-7.31.0_1... done Cleaning up cache files...Done .... 新しい package と依存関係から追加された package は、 インストール済み package 一覧に表示されます。 [source,shell] .... # pkg info ca_root_nss-3.15.1_1 The root certificate bundle from the Mozilla Project curl-7.31.0_1 Non-interactive tool to get files from FTP, GOPHER, HTTP(S) servers pkg-1.1.4_6 New generation package manager .... 必要のなくなった packages は、 `pkg delete` を使って削除できます。 たとえば、以下のようにして削除できます。 [source,shell] .... # pkg delete curl The following packages will be deleted: curl-7.31.0_1 The deletion will free 3 MB Proceed with deleting packages [y/N]: y [1/1] Deleting curl-7.31.0_1... done .... [[pkgng-upgrading]] === インストールされている package のアップグレード 以下のコマンドを実行すると、 インストールされている packages が最新のバージョンにアップグレードされます。 [source,shell] .... # pkg upgrade .... このコマンドは、インストールされているソフトウェアのバージョンと、 リポジトリのカタログから利用できるバージョンとを比較し、 リポジトリからアップグレードします。 [[pkgng-auditing]] === インストールされている package の検証 サードウェア製アプリケーションに対する脆弱性は、 定期的に見つかります。脆弱性を調べるために、 pkg は、検証機能を持っています。 システムにインストールされているソフトウェアに既知の脆弱性がないかどうかを調べるには、 以下のように実行してください。 [source,shell] .... # pkg audit -F .... [[pkgng-autoremove]] === 使われていない package の自動削除 package を削除すると、不必要な依存 package が残されることがあります。 依存のためにインストールされたが、 現在は不必要になった package (リーフ package) は、 以下のコマンドで自動的に検出され、削除されます。 [source,shell] .... # pkg autoremove Packages to be autoremoved: ca_root_nss-3.15.1_1 The autoremoval will free 723 kB Proceed with autoremoval of packages [y/N]: y Deinstalling ca_root_nss-3.15.1_1... done .... 依存によりインストールされた packages は、 _automatic_ package と呼ばれます。 非 automatic packages、 すなわち他の package からの依存ではなく、 明示的にインストールした package の一覧は以下のようにして出力できます。 [source,shell] .... # pkg prime-list nginx openvpn sudo .... `pkg prime-list` は、 [.filename]#/usr/local/etc/pkg.conf# で設定されているエイリアスコマンドです。 他にもシステムの package データベースの問い合わせに用いることができる多くのコマンドが用意されています。 たとえば、`pkg prime-origins` コマンドを使うと、 上記で得られた port 一覧のオリジナルの port ディレクトリを知ることができます。 [source,shell] .... # pkg prime-origins www/nginx security/openvpn security/sudo .... この一覧と package:ports-mgmt/poudriere[] または package:ports-mgmt/synth[] といったツールを使うと、 システムにインストールされているすべての package を再構築できます。 インストールされた package に automatic のマーク付けをするには、 以下のように実行してください。 [source,shell] .... # pkg set -A 1 devel/cmake .... リーフ package や automatic としてマークされた package は、 `pkg autoremove` で選択されます。 インストールされた package を _非_ automatic とマークするには、以下のように実行してください。 [source,shell] .... # pkg set -A 0 devel/cmake .... [[pkgng-backup]] === package データベースのリストア 伝統的な package 管理システムとは異なり、 pkg には package データベースをバックアップするメカニズムがあります。 この機能はデフォルトで有効に設定されています。 [TIP] ==== スクリプトによる定期的な package データベースのバックアップを無効にするには、 man:periodic.conf[5] の中で、 `daily_backup_pkgdb_enable="NO"` と設定してください。 ==== 過去にバックアップした package データベースの中身をリストアするには、 以下のコマンドを実行してください。 以下のコマンドの _/path/to/pkg.sql_ については、バックアップのある場所に置き換えて実行してください。 [source,shell] .... # pkg backup -r /path/to/pkg.sql .... [NOTE] ==== システムの定期的なスクリプトによって取得されたバックアップをリストアする場合には、 リストアの前に展開しておく必要があります。 ==== 手動で pkg データベースをバックアップするには、以下のコマンドを実行してください。 以下のコマンドの _/path/to/pkg.sql_ については、適切なファイル名と場所に置き換えて下さい。 [source,shell] .... # pkg backup -d /path/to/pkg.sql .... [[pkgng-clean]] === 古くなった package の削除 デフォルトでは、pkg は、man:pkg.conf[5] の `PKG_CACHEDIR` 変数で定義されるキャッシュディレクトリにバイナリ packages を保存します。 インストールされている package の最新のコピーのみが保存されます。 古いバージョンの pkg では、 過去にインストールされたすべての package が保存されていました。 これらの古くなったバイナリ package を削除するには、 以下を実行してください。 [source,shell] .... # pkg clean .... キャッシュ全体を削除するには以下を実行してください。 [source,shell] .... # pkg clean -a .... [[pkgng-set]] === package メタデータの変更 FreeBSD Ports Collection では、メジャーバージョン番号が変更になることがあります。 これに対応するために、pkg には、 package の情報をアップデートするコマンドが組み込まれています。 たとえば、[.filename]#lang/php5# が、 バージョン `5.4` を表すようになり、 [.filename]#lang/php5# を [.filename]#lang/php53# と名前を変更する必要があるような場合に、有用です。 上記の例の package の情報を変更するには、 以下のように実行してください。 [source,shell] .... # pkg set -o lang/php5:lang/php53 .... 別の例として、package:lang/ruby18[] を package:lang/ruby19[] にアップデートするには、 以下のようにしてください。 [source,shell] .... # pkg set -o lang/ruby18:lang/ruby19 .... 最後の例として、 [.filename]#libglut# 共有ライブラリの情報を package:graphics/libglut[] から package:graphics/freeglut[] へと変更するには、 以下のように実行してください。 [source,shell] .... # pkg set -o graphics/libglut:graphics/freeglut .... [NOTE] ==== package の情報を変更したら、 情報が変更された package に依存している packages を再インストールすることが重要となります。 依存 packages を再インストールするには、 以下のように実行してください。 [source,shell] .... # pkg install -Rf graphics/freeglut .... ==== [[ports-using]] == Ports Collection の利用 Ports Collection は、[.filename]#Makefile#, 修正パッチ、 説明文などの一連のファイルのことです。 これらのファイルの各セットは、 個々のアプリケーションをコンパイルして FreeBSD にインストールするために用いられ、_port_ と呼ばれています。 デフォルトでは、Ports Collection は、[.filename]#/usr/ports# 以下のサブディレクトリに置かれます。 [WARNING] ==== Ports Collection をインストールして使用する前に、一般的には、 ソフトウェアのインストールに、pkg でダウンロードしたバイナリパッケージと Ports Collection を組み合わせて使うことはあまり良いことではないことを知っておいてください。 pkg は、デフォルトでは ports ツリーの (HEAD ではなく) quarterly ブランチリリースを追いかけます。 HEAD の port と対応する quarterly ブランチの port の依存関係は異なる可能性があり、そのため pkg でインストールされた依存関係と Ports Collection の依存関係の間で競合が起きることがあります。 もし、Ports Collection と pkg を組み合わせて使用しなければならないのであれば、Ports Collection と pkg が同じ ports ツリーのブランチを使用していることを必ず確認してください。 ==== Ports Collection は、ソフトウェアのカテゴリを表すディレクトリを持ちます。 各カテゴリには、各アプリケーションのサブディレクトリがあります。 各アプリケーションのサブディレクトリには、プログラムを FreeBSD 上で正しくコンパイルしてインストールする方法を提供する、 _ports スケルトン_ と呼ばれるファイルのセットが含まれています。 それぞれの port スケルトンには、次のファイルおよびディレクトリが含まれています。 * [.filename]#Makefile#: このファイルにはアプリケーションのコンパイル方法やシステムのどこにインストールするかを指定する命令文が含まれています。 * [.filename]#distinfo#: このファイルには、その port を構築するためにダウンロードする必要があるファイルのファイル名と、チェックサム情報が含まれています。 * [.filename]#files#: このディレクトリには FreeBSD 上でプログラムをコンパイルし、インストールするための修正パッチが含まれています。このディレクトリには、その port の構築に必要なその他のファイルが入る場合もあります。 * [.filename]#pkg-descr#: このファイルにはプログラムに関する、より詳しい説明文が含まれます。 * [.filename]#pkg-plist#: これは、その port によってインストールされる全ファイルのリストです。これにはプログラムを削除する際に、どのファイルを削除すれば良いのかを ports システムに伝える役割もあります。 これらの他に [.filename]#pkg-message# や特殊な状況に対応するためのファイルを含む ports もあります。 これらのファイルについての詳細および ports の一般的な説明については、extref:{porters-handbook}[port 作成者のためのハンドブック] をご覧下さい。 port は実際のソースコード ([.filename]#distfile# とも呼ばれます) を含んではいません。 port の構築の展開部で、ダウンロードされたソースは自動的に [.filename]#/usr/ports/distfiles# に保存されます。 [[ports-using-installation-methods]] === Ports Collection のインストール port を用いてアプリケーションをコンパイルできるようにするには、 まず最初に Ports Collection をインストールする必要があります。 FreeBSD のインストール時に Ports Collection をインストールしていない場合には、 以下の方法のどれかを用いてインストールしてください。 [[ports-using-git-method]] [.procedure] ==== *Procedure: Git を用いる方法* ports ツリーの管理が必要な場合や、 ローカルで変更点をメンテナンスする必要がある場合、 および FreeBSD-CURRENT を使用している場合には、 Git を使って Ports Collection を取得する方法があります。 Git のより詳細な説明については、extref:{committers-guide}[Git Primer, git-primer] を参照してください。 . Git を使って ports ツリーをチェックアウトする前に、Git をインストールしておく必要があります。 ports ツリーがすでにインストールされていれば、 以下のようにして Git をインストールできます。 + [source,shell] .... # cd /usr/ports/devel/git # make install clean .... + ports ツリーが利用できない場合や、 package の管理に pkg を使っているのであれば、package から Git をインストールできます。 + [source,shell] .... # pkg install git .... + . HEAD ブランチの ports ツリーをチェックアウトしてください。 + [source,shell] .... # git clone https://git.FreeBSD.org/ports.git /usr/ports .... + . または、quarterly ブランチをチェックアウトしてください。 + [source,shell] .... # git clone https://git.FreeBSD.org/ports.git -b 2020Q3 /usr/ports .... + . Git で最初のチェックアウトをした後は、必要に応じて [.filename]#/usr/ports# をアップデートしてください。 + [source,shell] .... # git -C /usr/ports pull .... + . 必要に応じて [.filename]#/usr/ports# を別の quarterly ブランチにスイッチしてください。 + [source,shell] .... # git -C /usr/ports switch 2020Q4 .... ==== === ports のインストール この節では、Ports Collection を利用してプログラムをインストールしたり、 システムから削除したりする基本的な手順について説明します。 利用可能な `make` のターゲットや環境変数についての詳細は man:ports[7] をご覧ください。 [WARNING] ==== いかなる port でも、構築する前には、 前節に書かれているように、Ports Collection をアップデートしてください。 サードパーティ製のソフトウェアをインストールすると、 セキュリティの脆弱性を引き起こす可能性があります。 その port に関連したセキュリティ上の問題がないことを、まずは https://vuxml.freebsd.org/[] で確認してください。または、 新しい port をインストールする前に、 `pkg audit -F` を実行してください。 毎日のシステムのセキュリティ確認時に、 自動的にセキュリティの検査およびデータベースの更新を行うようにこのコマンドを設定できます。 詳しくは、man:pkg-audit[8] および man:periodic[8] を参照してください。 ==== Ports Collection は、ネットワークに接続できることを想定しています。 また、superuser の権限も必要となります。 port をコンパイルしてインストールするには、 インストールしたい port のディレクトリに移動してください。 その後、プロンプトから `make install` と入力してください。 すると、次のような出力が現われるはずです。 [source,shell] .... # cd /usr/ports/sysutils/lsof # make install >> lsof_4.88D.freebsd.tar.gz doesn't seem to exist in /usr/ports/distfiles/. >> Attempting to fetch from ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/. ===> Extracting for lsof-4.88 ... [extraction output snipped] ... >> Checksum OK for lsof_4.88D.freebsd.tar.gz. ===> Patching for lsof-4.88.d,8 ===> Applying FreeBSD patches for lsof-4.88.d,8 ===> Configuring for lsof-4.88.d,8 ... [configure output snipped] ... ===> Building for lsof-4.88.d,8 ... [compilation output snipped] ... ===> Installing for lsof-4.88.d,8 ===> Installing for lsof-4.88.d,8 ... [installation output snipped] ... ===> Generating temporary packing list ===> Compressing manual pages for lsof-4.88.d,8 ===> Registering installation for lsof-4.88.d,8 ===> SECURITY NOTE: This port has installed the following binaries which execute with increased privileges. /usr/local/sbin/lsof # .... `lsof` は高い権限で動作するプログラムなので、 インストールする時にセキュリティに関する警告が表示されます。 インストールが終わったら、プロンプトが戻ります。 シェルによってはコマンドの実行ファイルを探す時間を短縮するために、 環境変数 `PATH` に登録されている ディレクトリのコマンド一覧をキャッシュするものがあります。 `tcsh` シェルを使っているのであれば、 フルパスを指定することなく新しくインストールしたコマンドを利用できるように、 `rehash` を実行してください。 `sh` シェルを使っているのであれば かわりに `hash -r` を実行してください。 詳細については、 あなたの使っているシェルのドキュメントをご覧ください。 インストールの間に、作業用ディレクトリが作成されます。 このディレクトリにはコンパイル時に使用されるすべての一時ファイルが含まれています。 このディレクトリを削除することで、ディスク容量を節約でき、また port を新しいバージョンへアップデートする際に問題が起こる可能性を小さくします。 [source,shell] .... # make clean ===> Cleaning for lsof-88.d,8 # .... [NOTE] ==== port を構築する際に、 `make install clean` と実行することで、 これらの余分な手順を省くことができます。 ==== ==== ports のインストールのカスタマイズ ports の中にはビルドオプションを指定できるものがあります。 このオプションを指定することで、 アプリケーションの機能の一部を有効もしくは無効にできます。 また、セキュリティオプションを設定したり、 その他のカスタマイズを行うことができます。 このようなアプリケーションには [.filename]#www/firefox#, [.filename]#security/gpgme# や [.filename]#mail/sylpheed-claws# などがあります。 port が他のカスタマイズ可能なオプションを持つ ports に依存する場合には、デフォルトでは、ユーザに port のオプションをメニューから選択させる設定のため、 何度もユーザとの対話が起こり待たされることがあります。 これを避けるには、まず最初に port スケルトンで `make config-recursive` を実行して設定を一括で行い、その後 `make install [clean]` を実行して port を構築してインストールしてください。 [TIP] ==== `config-recursive` を実行する際、 `all-depends-list` を実行すると、設定すべき ports の一覧を得ることができます。 多くの場合は、すべての依存 ports のオプションが定義され、 ports オプションの画面が表示されなくなり、 すべてのオプションが設定されたことを確認できるまで `make config-recursive` を実行すると良いでしょう。 ==== port の構築後、 再びこのメニューを表示させてオプションの追加や削除、 設定の変更を行う方法はたくさんあります。 一つ目は port のディレクトリに `cd` で移動し、 `make config` と入力する方法です。 別の方法は `make showconfig` を使う方法です。 他の方法は `make rmconfig` の実行です。 このコマンドを実行すると選択されているすべてのオプションが削除され、 設定をもう一度やり直すことができます。 これらの方法や他の方法についての詳細は、 man:ports[7] マニュアルで説明されています。 ports は、いくつかの環境変数を参照する man:fetch[1] を用いてソースファイルをダウンロードします。 FreeBSD システムがファイアウォールの内側であったり、 FTP/HTTP プロキシを使う場合には、 `FTP_PASSIVE_MODE`, `FTP_PROXY`, `FTP_PASSWORD` の環境変数を設定することなります。 対応している環境変数の一覧については man:fetch[3] をご覧ください。 インターネットに常時接続できないユーザのために `make fetch` コマンドが用意されています。 このコマンドを [.filename]#/usr/ports# で実行してすべての distfiles をダウンロードするか、 [.filename]#/usr/ports/net# といったカテゴリや、あるスケルトンにおいても実行できます。 ある port がライブラリやその他の ports に依存している場合には、 別のカテゴリの ports の distfiles はダウンロードされ__ない__ことに注意してください。 port が依存しているすべての distfiles をダウンロードしたければ、 `make fetch-recursive` を使ってください。 めったにないことかもしれませんが、 ローカルに distfiles のリポジトリがあるような場合に、 `MASTER_SITES` 変数を変更することで [.filename]#Makefile# で指定されているダウンロードの場所を 変更することができます。 設定する場合には、変更先を以下のようにして指定してください。 [source,shell] .... # cd /usr/ports/directory # make MASTER_SITE_OVERRIDE= \ ftp://ftp.organization.org/pub/FreeBSD/ports/distfiles/ fetch .... `WRKDIRPREFIX` 変数と `PREFIX` 変数を変更することで、 作業ディレクトリやターゲットディレクトリをデフォルトのものから変更できます。 [source,shell] .... # make WRKDIRPREFIX=/usr/home/example/ports install .... とすると、ports は [.filename]#/usr/home/example/ports# でコンパイルされ、すべて [.filename]#/usr/local# 以下にインストールされます。 [source,shell] .... # make PREFIX=/usr/home/example/local install .... この場合、port のコンパイルは [.filename]#/usr/ports# でおこない、[.filename]#/usr/home/example/local# にインストールします。そして [source,shell] .... # make WRKDIRPREFIX=../ports PREFIX=../local install .... とすれば両者を組み合わせることが可能です。 これらを環境変数に設定する方法もあります。 どのように環境変数を設定するかについては、 あなたの使っているシェルのマニュアルページを参照してください。 [[ports-removing]] === インストールした ports の削除 インストールされた ports は、 `pkg delete` コマンドで削除できます。 このコマンドの使用例は、man:pkg-delete[8] マニュアルページにあります。 あるいは、port のディレクトリにて `make deinstall` を実行することでも削除できます。 [source,shell] .... # cd /usr/ports/sysutils/lsof # make deinstall ===> Deinstalling for sysutils/lsof ===> Deinstalling Deinstallation has been requested for the following 1 packages: lsof-4.88.d,8 The deinstallation will free 229 kB [1/1] Deleting lsof-4.88.d,8... done .... port が削除されるときに表示されるメッセージを読むことをお勧めします。 もし削除した port に依存するアプリケーションがあった場合には、 その情報が表示されますが、port の削除は行われます。 そのようなケースでは、依存を直すためにアプリケーションを再インストールするとよいでしょう。 [[ports-upgrading]] === ports のアップグレード ports のインストール後、時間が経過すると、Ports Collection で新しいバージョンのソフトウェアを利用できるようになります。 この章では、 どのようにしてアップグレードする必要のあるソフトウェアを判断するか、 そしてアップグレードの方法について説明します。 インストールされている ports の新しいバージョンを利用できるかどうかを知るには、まず、 最新の ports ツリーがインストールされていることを確認してください。 これには、<> で書かれているアップデートのコマンドを使ってください。 FreeBSD 10 以降のシステム、または、pkg に変換されたシステムでは、 以下のコマンドを実行すると、現在利用可能なバージョンよりも古い ports の一覧が表示されます。 [source,shell] .... # pkg version -l "<" .... FreeBSD 9._X_ より前のシステムでは、 現在利用可能なバージョンよりも古い ports の一覧を表示されるには、以下のコマンドを実行してください。 [source,shell] .... # pkg_version -l "<" .... [IMPORTANT] ==== アップグレードする前に [.filename]#/usr/ports/UPDATING# を、ファイルの頭から、ports を最後にアップデートした日、 もしくはシステムをインストールをした日に最も近い日まで目を通してください このファイルには port をアップグレードする際にユーザが遭遇するであろう問題や、 追加で必要な作業などが記述されています。 例えば、ファイル形式の変更や設定ファイルの場所の変更、 前のバージョンと互換性がなくなったことなどが書かれています。 アップグレードする必要のある ports に関連した手順に注意し、 アップグレードする際にはこれらの手順に従ってください。 ==== [[ports-upgrading-tools]] ==== ports のアップグレードおよび管理ツール Ports Collection には、 実際にアップグレードを行うためのユーティリティがいくつか用意されています。 それぞれのユーティリティは長所と短所を持っています。 歴史的に、最もインストールされ使われているのは、 Portmaster または Portupgrade です。 Synth は新しいユーティリティです。 [NOTE] ==== 特定のシステムにおいて、 どのツールを選択するとベストかについては、 システム管理者によります。 これらのどのツールでも、使う前には、 データのバックアップをとることが推奨されます。 ==== [[portmaster]] ==== portmaster を用いた ports のアップグレード package:ports-mgmt/portmaster[] は、 インストールされている ports のアップグレードをおこなう、 とても小さなユーティリティです。 FreeBSD のベースシステムとしてインストールされているツールだけを使い、 他の ports やデータベースに依存しないように設計されています。 port からこのユーティリティをインストールするには以下のようにしてください。 [source,shell] .... # cd /usr/ports/ports-mgmt/portmaster # make install clean .... Portmaster は、 ports を 4 つのカテゴリに分類します。 * Root ports: 他の port に依存せず、 他の port からも依存されない ports。 * Trunk ports: 他の port には依存しないが、 他の port から依存されている ports。 * Branch ports: 他の port に依存し、 他の port からも依存されている ports。 * Leaf ports: 他の port に依存するが、 他の port からは依存されない ports。 これらのカテゴリの一覧や、アップデート可能な port の一覧を表示するには以下のようにしてください。 [source,shell] .... # portmaster -L ===>>> Root ports (No dependencies, not depended on) ===>>> ispell-3.2.06_18 ===>>> screen-4.0.3 ===>>> New version available: screen-4.0.3_1 ===>>> tcpflow-0.21_1 ===>>> 7 root ports ... ===>>> Branch ports (Have dependencies, are depended on) ===>>> apache22-2.2.3 ===>>> New version available: apache22-2.2.8 ... ===>>> Leaf ports (Have dependencies, not depended on) ===>>> automake-1.9.6_2 ===>>> bash-3.1.17 ===>>> New version available: bash-3.2.33 ... ===>>> 32 leaf ports ===>>> 137 total installed ports ===>>> 83 have new versions available .... 以下のコマンドを使うと、 古くなった ports をすべてアップデートします。 [source,shell] .... # portmaster -a .... [NOTE] ==== Portmaster のデフォルトの設定では、 インストールされている port を削除する前に、 バックアップ用の package が作成されます。 このバックアップは、 新しいバージョンのインストールに成功すると削除されます。 `-b` を使うと、 Portmaster の自動的なバックアップの削除は行いません。 `-i` を追加すると、 Portmaster をインタラクティブモードで使用できます。 このモードでは、各 port をアップグレードするかどうかの選択を対話的に行うことがでます。 多くのオプションが利用可能です。 man:portmaster[8] マニュアルページから、 それらの使用方法に関する詳細な説明を読んでください。 ==== アップグレードの過程でエラーに遭遇した場合には、 `-f` を使ってすべての ports のアップグレードや再構築を行なってください。 [source,shell] .... # portmaster -af .... Portmaster を使ってシステムに新しい ports をインストールしたり、 新しい port のコンパイルやインストール前に依存するすべての port をアップグレードできます。この機能を使う時には、 Ports Collection の場所を指定してください。 [source,shell] .... # portmaster shells/bash .... package:ports-mgmt/portmaster[] に関するより多くの情報は、[.filename]#pkg-descr# にあります。 [[portupgrade]] ==== Portupgrade を用いた ports のアップグレード package:ports-mgmt/portupgrade[] は、 インストールした ports のアップグレードを行なうためのもう一つのユーティリティです。 このユーティリティは ports を管理するために用いられるアプリケーションのセットをインストールします。 Ruby に依存します。 port をインストールするには、以下を実行してください。 [source,shell] .... # cd /usr/ports/ports-mgmt/portupgrade # make install clean .... このユーティリティを使ってアップグレードを行う前に、 `pkgdb -F` を使って、 インストールされている ports の一覧を調べてください。 矛盾が検出された場合には修復してください。 システムにインストールされている port の中で古くなったものをすべてアップデートするには `portupgrade -a` を実行してください。 もし、すべての ports に対して個別にアップグレードするかどうかを確認したいのであれば、 `-i` を追加してください。 [source,shell] .... # portupgrade -ai .... ports で利用可能なすべてのアプリケーションではなく、 ある特定のアプリケーションだけを更新したいのであれば、 `portupgrade _pkgname_` を実行してください。 アップグレードするアプリケーションが依存しているすべての ports をまず先に更新したい場合には、 `-R` を使ってください。 [source,shell] .... # portupgrade -R firefox .... `-P` オプションを使うと、 portupgrade は `PKG_PATH` に登録されているローカルディレクトリから、 利用可能な package を探します。 ローカルに利用可能な packages が見つからなければ、 リモートサイトから package のダウンロードを試みます。 packages をローカルに見つけることができず、 リモートサイトからもダウンロードできない場合には、 portupgrade は ports からインストールを行ないます。 ports を使用したくなければ、`-PP` オプションを指定してください。 この最後のオプションを設定すると、 もし package が利用できなければ Portupgrade は終了します。 [source,shell] .... # portupgrade -PP gnome3 .... また、ビルドやインストールを行なわず、 distfiles または packages だけをダウンロードしたければ、 `-F` オプションを指定してください。 利用可能なすべてのオプションについては、 man:portupgrade[1] のマニュアルを参照してください。 package:ports-mgmt/portupgrade[] に関するより多くの情報は、[.filename]#pkg-descr# にあります。 [[ports-disk-space]] === ports とディスク容量 Ports Collection を使い続けていると、 そのうちディスクを食いつぶしてしまうでしょう。 ports をビルドしてインストールした後、 ports スケルトンで `make clean` を実行すると、作業用の [.filename]#work# ディレクトリを削除します。 Portmaster を使って port をインストールする場合には、`-K` を使わなければこのディレクトリは自動的に削除されます。 Portupgrade がインストールされている場合には、 以下のコマンドはローカルの Ports Collection に見つかったすべての [.filename]#work# ディレクトリを削除します。 [source,shell] .... # portsclean -C .... さらに、時間が経つにつれ [.filename]#/usr/ports/distfiles# には、古くなったソースファイルがたまっていきます。 Portupgrade を使って、どの ports からも使われていないすべての distfiles を削除するには次のように実行してください。 [source,shell] .... # portsclean -D .... Portupgrade を使って、システムにインストールされている port から使われていない distfiles をすべて削除することができます。 [source,shell] .... # portsclean -DD .... もし Portmaster がインストールされているのであれば、以下を実行してください。 [source,shell] .... # portmaster --clean-distfiles .... デフォルトでは、このコマンドはインタラクティブに設定されているため、 ユーザに対して distfile を削除すべきかどうかを確認するプロンプトが表示されます。 これらのコマンドに加え、[.filename]#ports-mgmt/pkg_cutleaves# は、 必要なくなった ports を削除する作業を自動化します。 [[ports-poudriere]] == Poudriere を用いた package の構築 poudriere は、FreeBSD package を作成したり、試験に用いられる BSD ライセンスのユーティリティです。 このユーティリティは、FreeBSD jails を用いて、 独立したコンパイル環境を構築します。 これらの jail を使って、 インストールされている FreeBSD のバージョンとは異なるバージョンの package を作成したり、ホストが amd64 のシステムでは、 i386 用の package を構築することもできます。 構築された package のレイアウトは公式のミラーと同じです。 これらの package は、man:pkg[8] や他の package 管理ツールで利用できます。 package:ports-mgmt/poudriere[] package または port から poudriere をインストールしてください。 アプリケーションをインストールすると、サンプルの設定ファイルである [.filename]#/usr/local/etc/poudriere.conf.sample# もインストールされます。 このファイルを [.filename]#/usr/local/etc/poudriere.conf# にコピーして、 ローカルの環境に合わせて編集してください。 poudriere を実行するシステムで、 必ずしも ZFS を使う必要はありませんが、 有用です。ZFS を使う際には、 [.filename]#/usr/local/etc/poudriere.conf# の中で `ZPOOL` を指定する必要があります。 そして、`FREEBSD_HOST` を最も近いミラーに設定してください。 `CCACHE_DIR` を定義することで、 package:devel/ccache[] を使ったコンパイルのキャッシュが可能となり、 コンパイルで頻繁に使われるコードの構築時間を短縮できます。 poudriere データセットを [.filename]#/poudriere# にマウントされた独立したツリーに置くと良いでしょう。 他の値はデフォルトの値で十分です。 同時に走らせるコンパイル数の定義には、 認識されたコアプロセッサの数が用いられます。 RAM もしくはスワップ空間のどちらかの仮想メモリを十分用意してください。 もし、仮想メモリを使い切ってしまったら、jail の構築は中断し、 異常なメッセージが表示されることでしょう。 [[poudriere-initialization]] === Jails および Port ツリーの初期化 設定が終わったら、poudriere を初期化して、必要とする FreeBSD ツリーおよび jail、 そして ports ツリーをインストールしてください。 jail の名前を `-j`、 FreeBSD のバージョンを `-v` で指定してください。 FreeBSD/amd64 システムでは、 `-a` を使ってアーキテクチャに `i386` または `amd64` を設定できます。 デフォルトでは、`uname` で表示されるアーキテクチャに設定されます。 [source,shell] .... # poudriere jail -c -j 13amd64 -v 13.1-RELEASE [00:00:00] Creating 13amd64 fs at /poudriere/jails/13amd64... done [00:00:00] Using pre-distributed MANIFEST for FreeBSD 13.1-RELEASE amd64 [00:00:00] Fetching base for FreeBSD 13.1-RELEASE amd64 /poudriere/jails/13amd64/fromftp/base.txz 125 MB 4110 kBps 31s [00:00:33] Extracting base... done [00:00:54] Fetching src for FreeBSD 13.1-RELEASE amd64 /poudriere/jails/13amd64/fromftp/src.txz 154 MB 4178 kBps 38s [00:01:33] Extracting src... done [00:02:31] Fetching lib32 for FreeBSD 13.1-RELEASE amd64 /poudriere/jails/13amd64/fromftp/lib32.txz 24 MB 3969 kBps 06s [00:02:38] Extracting lib32... done [00:02:42] Cleaning up... done [00:02:42] Recording filesystem state for clean... done [00:02:42] Upgrading using ftp /etc/resolv.conf -> /poudriere/jails/13amd64/etc/resolv.conf Looking up update.FreeBSD.org mirrors... 3 mirrors found. Fetching public key from update4.freebsd.org... done. Fetching metadata signature for 13.1-RELEASE from update4.freebsd.org... done. Fetching metadata index... done. Fetching 2 metadata files... done. Inspecting system... done. Preparing to download files... done. Fetching 124 patches.....10....20....30....40....50....60....70....80....90....100....110....120.. done. Applying patches... done. Fetching 6 files... done. The following files will be added as part of updating to 13.1-RELEASE-p1: /usr/src/contrib/unbound/.github /usr/src/contrib/unbound/.github/FUNDING.yml /usr/src/contrib/unbound/contrib/drop2rpz /usr/src/contrib/unbound/contrib/unbound_portable.service.in /usr/src/contrib/unbound/services/rpz.c /usr/src/contrib/unbound/services/rpz.h /usr/src/lib/libc/tests/gen/spawnp_enoexec.sh The following files will be updated as part of updating to 13.1-RELEASE-p1: […] Installing updates...Scanning //usr/share/certs/blacklisted for certificates... Scanning //usr/share/certs/trusted for certificates... done. 13.1-RELEASE-p1: [00:04:06] Recording filesystem state for clean... done [00:04:07] Jail 13amd64 13.1-RELEASE-p1 amd64 is ready to be used .... [source,shell] .... # poudriere ports -c -p local -m git+https [00:00:00] Creating local fs at /poudriere/ports/local... done [00:00:00] Checking out the ports tree... done .... 一つのコンピュータ上で、 複数の設定、複数の jails、異なる port ツリーから poudriere は port をビルドできます。 これらのコンビネーションのカスタム設定は _セット_ と呼ばれます。 詳細については、package:ports-mgmt/poudriere[] もしくは package:ports-mgmt/poudriere-devel[] をインストール後、 man:poudriere[8] の CUSTOMIZATION の章をご覧下さい。 ここで示される基本設定では、jail, ports そしてセット固有の [.filename]#make.conf# を [.filename]#/usr/local/etc/poudriere.d# に置いてください。 この例でのファイル名 [.filename]#13amd64-local-workstation-make.conf# は、jail 名、port 名そして、セット名の組み合わせで付けられています。 システムの [.filename]#make.conf# と、この新しいファイルは、ビルド時に結合され、構築した jail で用いられる [.filename]#make.conf# を作成します。 ビルドする package を [.filename]#13amd64-local-workstation-pkglist# に記載してください。 [.programlisting] .... editors/emacs devel/git ports-mgmt/pkg ... .... 特定の ports に対し、 オプションや依存を設定してください。 [source,shell] .... # poudriere options -j 13amd64 -p local -z workstation -f 13amd64-local-workstation-pkglist .... 最後に packages を構築し、 package リポジトリを生成してください。 [source,shell] .... # poudriere bulk -j 13amd64 -p local -z workstation -f 13amd64-local-workstation-pkglist .... このコマンドの実行中に kbd:[Ctrl+t] を押すと、現在のビルド状況が表示されます。 Poudriere は [.filename]#/poudriere/logs/bulk/jailname# にあるファイルも構築します。 このファイルをウェブサーバと共に使うことで、 ビルド情報を表示できます。 これが終わると、poudriere リポジトリを package のインストールに利用できるようになります。 poudriere を利用する上でのより多くの情報については、 man:poudriere[8] およびメインのウェブサイトである https://github.com/freebsd/poudriere/wiki[] を参照してください。 === Poudriere リポジトリを使うための pkg クライアントの設定 カスタムリポジトリと公式のリポジトリの両方を並行して使用することは可能ですが、 公式リポジトリを無効にすると有用な場合があります。 このように設定するには、設定ファイルを作成し、 設定ファイルの中で公式リポジトリを無効にしてください。 [.filename]#/usr/local/etc/pkg/repos/FreeBSD.conf# を作成して、以下を含めてください。 [.programlisting] .... FreeBSD: { enabled: no } .... 通常は、HTTP 経由で poudriere リポジトリをクライアントコンピュータに公開すると簡単です。 package ディレクトリ (たとえば、 [.filename]#/usr/local/poudriere/data/packages/13amd64# ) を公開するようにウェブサーバを設定してください。 この例で [.filename]#13amd64# は構築名です。 もし、package リポジトリの URL が `http://pkg.example.com/13amd64` であれば、 リポジトリの設定ファイルである [.filename]#/usr/local/etc/pkg/repos/custom.conf# は、 以下のようになります。 [.programlisting] .... custom: { url: "http://pkg.example.com/13amd64", enabled: yes, } .... [[ports-nextsteps]] == インストール後の作業 バイナリ package もしくは port のどちらを用いてソフトウェアをインストールするかに関わらず、 サードパーティ製のアプリケーションの多くは、 インストール後にある程度の設定を必要とします。 以下のコマンドや場所の情報は、 アプリケーションとともに何がインストールされたかを知るための助けとなるでしょう。 * 多くのアプリケーションでは、 デフォルトの設定ファイルが、少なくとも一つは [.filename]#/usr/local/etc# にインストールされます。 数多くの設定ファイルを持つようなアプリケーションでは、 それらのファイルを格納するためにサブディレクトリを作成するものもあります。 サンプルの設定ファイルは、しばしば [.filename]#.sample# といった拡張子がついた名前でインストールされます。 設定ファイルを確認し、 必要に応じてシステムの要求に合うように編集してください。 最初にサンプルファイルを [.filename]#.sample# を外した名前のファイルにコピーしてから、編集してください。 * ドキュメントが付属しているアプリケーションは、ドキュメントを [.filename]#/usr/local/share/doc# にインストールします。 また、多くのアプリケーションは、マニュアルページもインストールします。 これらのドキュメントは、アプリケーションを使い続ける前に見ておくべきものです。 * ある種のアプリケーションでは、 サービスを実行するためには、 アプリケーションの起動前に、 [.filename]#/etc/rc.conf# に追加する必要があります。 これらのアプリケーションでは、通常、 スタートアップスクリプトが [.filename]#/usr/local/etc/rc.d# にインストールされます。詳細は、 crossref:config[configtuning-starting-services,サービスの起動] をご覧ください。 + [NOTE] ==== 設計上、インストールの際に、アプリケーションは、 スタートアップスクリプトを実行しませんし、 アンインストールやアップグレードの際には、 停止のためのスクリプトは実行されません。 起動や停止の決定は、各システム管理者に任されています。 ==== * man:csh[1] のユーザは、 `rehash` を実行して、 シェルの `PATH` のバイナリリストを再構築してください。 * `pkg info` を使って、アプリケーションと共にインストールされたファイル、 マニュアルページ、およびバイナリを調べることができます。 [[ports-broken]] == うまく動作しない ports に遭遇した場合には port をうまくコンパイルできなかったりインストールできない場合には、 以下を試してください。 . その port に対する修正案が提出されていないかどうかを link:https://www.FreeBSD.org/ja/support/[障害報告 (Problem Report) データベース] で調べてください。 もし提案されていれば、 その提案されている修正によって問題を解決できるかもしれません。 . port の保守担当者に対応してもらいましょう。 port スケルトンで `make maintainer` と入力するか、port の [.filename]#Makefile# を読み、保守担当者の電子メールアドレスを調べてください。 保守担当者にメールを送る際には、エラーが出力されるまでの出力ログを忘れずに添付してください。 + [NOTE] ==== 特定の保守担当者が存在せず、かわりに extref:{mailing-list-faq}[メーリングリスト ] によるグループの管理者が保守している ports があります。 そのような場合には、メールアドレスは mailto:freebsd-listname@FreeBSD.org[freebsd-listname@FreeBSD.org] のようになります。 メールを送る際には、このことに気をつけてください。 特に mailto:ports@FreeBSD.org[ports@FreeBSD.org] が保守している ports には、保守担当者がいません。 そのかわり、 そのメーリングリストを購読する人々からなるコミュニティが、 修正や対応をおこなっています。 もっとボランティアが必要です! ==== + メールに対して返信がなければ、extref:{problem-reports}[FreeBSD 障害報告の書き方] に書かれている手順にしたがい、 Bugzilla を使ってバグレポートを提出してください。 . 自分で直しましょう! ports システムに関する詳細な情報は extref:{porters-handbook}[port 作成者のためのハンドブック] にあります。 このセクションを読むと、壊れてしまった port を直したり、 自分で作った port を提出したりできるようになります! . <> に書かれている手順にしたがって、 package をインストールしてください。 diff --git a/documentation/content/ja/books/handbook/x11/_index.adoc b/documentation/content/ja/books/handbook/x11/_index.adoc index c36171ddbd..4a569fc19c 100644 --- a/documentation/content/ja/books/handbook/x11/_index.adoc +++ b/documentation/content/ja/books/handbook/x11/_index.adoc @@ -1,1464 +1,1463 @@ --- title: 第5章 X Window System part: パートI. 導入 prev: books/handbook/ports next: books/handbook/partii description: この章では、グラフィカル環境で使われるオープンソースの X Window System を提供する Xorg のインストールおよび設定方法について説明します。 tags: ["X11", "Xorg", "TrueType", "DE", "KDE", "Plasma", "Xfce", "Gnome", "XDM", "SDDM", "GDM", "KMS", "Intel", "AMD", "NVIDIA", "Anti-Aliased"] showBookMenu: true weight: 7 path: "/books/handbook/x11/" -aliases: ["/ja/books/handbook/x-understanding/","/ja/books/handbook/x-install/","/ja/books/handbook/x-config/","/ja/books/handbook/x-fonts/","/ja/books/handbook/x-xdm/","/ja/books/handbook/x11-wm/","/ja/books/handbook/x-compiz-fusion/","/ja/books/handbook/x11-troubleshooting/"] --- [[x11]] = X Window System :doctype: book :toc: macro :toclevels: 1 :icons: font :sectnums: :sectnumlevels: 6 :sectnumoffset: 5 :partnums: :source-highlighter: rouge :experimental: :images-path: books/handbook/x11/ ifdef::env-beastie[] ifdef::backend-html5[] :imagesdir: ../../../../images/{images-path} endif::[] ifndef::book[] include::shared/authors.adoc[] include::shared/mirrors.adoc[] include::shared/releases.adoc[] include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists.adoc[] include::shared/{{% lang %}}/urls.adoc[] toc::[] endif::[] ifdef::backend-pdf,backend-epub3[] include::../../../../../shared/asciidoctor.adoc[] endif::[] endif::[] ifndef::env-beastie[] toc::[] include::../../../../../shared/asciidoctor.adoc[] endif::[] [[x11-synopsis]] == この章では bsdinstall を用いた FreeBSD のインストールでは、 グラフィカルユーザインタフェースは自動的にはインストールされません。 この章では、グラフィカル環境で使われるオープンソースの X Window System を提供する Xorg のインストールおよび設定方法について説明します。 その後、 デスクトップ環境およびウィンドウマネージャの探し方およびインストール方法について説明します。 [NOTE] ==== Xorg を自動的に設定するインストール方法を希望するユーザは、link:https://ghostbsd.org[GhostBSD], link:https://www.midnightbsd.org[MidnightBSD] または link:https://nomadbsd.org/[NomadBSD] を参照してください。 ==== Xorg が対応するビデオハードウェアについてのより多くの情報は、 link:http://www.x.org/[x.org] のウェブサイトをご覧ください。 この章を読めば以下のことがわかります。 * X Window System のさまざまなコンポーネントと、 それらが互いにどのように連携しているか。 * Xorg のインストールおよび設定方法 * さまざまなウィンドウマネージャおよびデスクトップ環境のインストールおよび設定方法 * Xorg での TrueType(R) フォントの使い方 * GUI ログイン (XDM) の設定方法 この章を読み始める前に以下のことを理解しておく必要があります。 * crossref:ports[ports,アプリケーションのインストール - packages と ports] で説明されているサードパーティ製ソフトウェアのインストール方法 [[x-understanding]] == 用語の説明 X Window System のさまざまなコンポーネントについての詳細や、 それらがどのようにやり取りするかについてすべて理解する必要はありませんが、 これらのコンポーネントについて基本的なことを知っていると、 強力な武器になるでしょう。 X サーバ:: X は最初からネットワークを意識してデザインされており、 "クライアント - サーバ" モデルを採用しています。 このモデルでは、"X サーバ" はキーボードやモニタ、 マウスが接続されたコンピュータ上で動きます。 このサーバはディスプレイの表示を管理したり、キーボード、 マウスからの入力を処理したり、 タブレットやビデオプロジェクタ等の他の装置からの入出力を処理します。 これは、ある人々を混乱させることがあります。 X での用語は彼らが想定するものとは正反対だからです。 彼らは "X サーバ" は地下にある大きなパワフルなマシンであり、 "X クライアント" が自分たちのデスク上にあると想像するのです。 X クライアント:: XTerm や Firefox などの各 X アプリケーションは、 "クライアント" になります。 クライアントは "この座標にウィンドウを描いてください" といったメッセージをサーバへ送り、サーバは "ユーザが OK ボタンを押しました" といったメッセージを送り返します。 + 家庭や小さなオフィスのような環境では、X サーバと X クライアントは通常同じコンピュータ上で動いています。 X サーバを非力なコンピュータで動かし、 X アプリケーションをより高性能なマシンで動かすことも可能です。 この場合、 X のクライアントとサーバの通信はネットワーク越しに行なわれます。 ウィンドウマネージャ:: X はスクリーン上でウィンドウがどのように見えるべきか、 マウスでそれらをどうやって動かすか、 ウィンドウ間を移動するのにどういうキーストロークを使うべきか、 各ウィンドウのタイトルバーはどのように見えるべきか、 クローズボタンを持つべきかどうか、 といったことは規定しません。そのかわりに、X ではそういったことを "ウィンドウマネージャ" と呼ばれるアプリケーションに任せます。link:http://www.xwinman.org/[ウィンドウマネージャはたくさん] あります。 これらのウィンドウマネージャの見た目や使い勝手はそれぞれ異なっています。 バーチャルデスクトップをサポートしているものもありますし、 デスクトップを操作するキーストロークをカスタマイズできたり、 "スタート" ボタンやそれに類するものを持っているものもあります。 テーマに対応しており、 デスクトップの見た目や使い勝手を完全に変えられるものもあります。 ウィンドウマネージャは Ports Collection の [.filename]#x11-wm# カテゴリに用意されています。 + それぞれのウィンドウマネージャは異なる設定機構を備えています。 手で設定ファイルを編集しなければならないものや、 設定作業のほとんどを GUI ツールで行うことができるものもあります。 デスクトップ環境:: KDE や GNOME は、デスクトップ環境です。 これらは、共通のデスクトップのタスクを実行するための完全なアプリケーションスイートを含んでいます。 オフィススイート、ウェブブラウザやゲームを含んでいるものもあります。 フォーカスポリシ:: ウィンドウマネージャは、 マウスのフォーカスポリシに責任を持ちます。 このポリシは、どのウィンドウがアクティブにキーストロークを 受け付けるようにするための方法を提供し、 そして、どのウィンドウがアクティブなのかを示します。 + よく知られているフォーカスポリシは "click-to-focus" と呼ばれるものです。 このポリシは、 あるウィンドウ内でマウスをクリックすればそのウィンドウがアクティブになる、 というものです。 "focus-follows-mouse" ポリシでは、 マウスポインタの下にいるウィンドウがフォーカスされるというものです。 フォーカスを変えるには他のウィンドウにマウスポインタを動かすだけです。 マウスがルートウィンドウに移動した時には、 このウィンドウがフォーカスされます。 "sloppy-focus" モデルでは、 マウスがルートウィンドウに移動した時には、 直前に使われていたウィンドウがフォーカスされています。 sloppy-focus では、 ポインタが別のウィンドウに移った時のみフォーカスが変わり、 現在のウィンドウから出ただけでは変わりません。 "click-to-focus" ポリシでは、 マウスクリックによりアクティブなウィンドウが選択されます。 ウィンドウは前面に表示され、他のすべてのウィンドウの前にきます。 ポインタが別のウィンドウ上に移動した時でも、 すべてのキーストロークがこのウィンドウに届きます。 + それぞれのウィンドウマネージャは、 それぞれのフォーカスポリシに対応しています。 すべてのものは click-to-focus をサポートしていますし、 多くのものは他の方法もサポートしています。 どのフォーカスモデルを利用可能かどうかについては、 ウィンドウマネージャのドキュメントをご覧ください。 ウィジェット:: ウィジェットはクリック可能であったり、 他の方法で操作可能なすべてのユーザインタフェース用アイテムを指す用語です。 ボタンやチェックボックス、ラジオボタン、アイコン、リスト、などがそうです。 ウィジェットツールキットはグラフィカルアプリケーションを作成するために使われます。 KDE で使われている Qt や GNOME プロジェクトで使われている GTK+ といった有名なウィジェットセットがあります。 そのため、アプリケーションのルックアンドフィールは、 アプリケーションを作成するのに使われたウィジェットツールキットに依存し、 異なります。 [[x-install]] == Xorg のインストール FreeBSD では、Xorg を package または port からインストールできます。 バイナリ package を使うと早くインストールできますが、 カスタマイズのためのオプションは少なくなります。 [source,shell] .... # pkg install xorg .... Ports Collection からビルドしてインストールするには、 以下のように実行してください。 [source,shell] .... # cd /usr/ports/x11/xorg # make install clean .... どちらの方法でも、完全な Xorg システムがインストールされます。 バイナリ package を用いる方法が、 ほとんどのユーザにとってはベストな選択となります。 経験のあるユーザ向けの最小の X システムは、[.filename]#x11/xorg-minimal# です。 ほとんどのドキュメント、 ライブラリおよびアプリケーションはインストールされません。 アプリケーションによってはこれらの追加の要素が機能する上で必要となります。 [[x-config]] == Xorg の設定 [[x-config-quick-start]] === クィックスタート Xorg は、 標準的なほとんどのビデオカード、 キーボード、ポインティングデバイスに対応しています。 [TIP] ==== ビデオカード、キーボード、入力デバイスは、 自動的に検出されるので、手動の設定は必要ありません。 自動認識に失敗したとき以外は、[.filename]#xorg.conf# を作成したり、`-configure` プロセスの実行は行わないでください。 ==== [.procedure] ==== . もし、使用しているコンピュータですでに Xorg が使われているのであれば、 コンフィグレーションファイルを移動するか、削除してください。 + [source,shell] .... # mv /etc/X11/xorg.conf ~/xorg.conf.etc # mv /usr/local/etc/X11/xorg.conf ~/xorg.conf.localetc .... . 3D アクセラレータを利用できるシステムでは、 Xorg を実行するユーザを `video` または `wheel` グループに追加して、使用できるようにしてください。 ユーザ _jru_ をどちらのグループでも利用できるようにするには以下のように実行してください。 + [source,shell] .... # pw groupmod video -m jru || pw groupmod wheel -m jru .... . デフォルトでは twm ウィンドウマネージャがインストールされています。 Xorg が起動すると、 このウィンドウマネージャが立ち上がります。 + [source,shell] .... % startx .... . 古いバージョンの FreeBSD では、 テキストコンソールに戻れるようにするために、 システムコンソールは man:vt[4] に設定する必要があります。 <> を参照してください。 ==== [[x-config-user-group]] === Accelerated Video のためのユーザグループ ビデオカードの 3D アクセラレータを有効にするには、 [.filename]#/dev/dri# へのアクセスが必要となります。 通常は、X を実行するユーザを `video` または `wheel` グループに追加するするだけです。 ここでは、man:pw[8] を使ってユーザ _slurms_ を `video` グループ、または `video` グループが存在しない時に、 `wheel` グループに追加しています。 [source,shell] .... # pw groupmod video -m slurms || pw groupmod wheel -m slurms .... [[x-config-kms]] === Kernel Mode Setting (KMS) コンピュータが、コンソールの表示から、 X 用の高解像度の表示へと切り替える時には、 ビデオの出力 _mode_ が設定されている必要があります。 最近の Xorg では、 カーネル内部のシステムを使って効率的にこれらのモードの変換をしています。 古いバージョンの FreeBSD では、 KMS システムを用いない man:sc[4] が使用されています。 X を閉じた後、システムコンソールは動作をしていても、 表示に黒になります。 新しい man:vt[4] コンソールではこの問題は起こりません。 以下の行を [.filename]#/boot/loader.conf# に追加して man:vt[4] を有効にしてください。 [.programlisting] .... kern.vty=vt .... [[x-config-files]] === コンフィグレーションファイル 通常、この節で説明する手動の設定は必要ありません。 自動認識に失敗したとき以外は、 手動で設定ファイルを作成しないでください。 [[x-config-files-directory]] ==== ディレクトリ Xorg は、 複数のディレクトリから設定ファイルを探します。 FreeBSD において、設定ファイルのディレクトリは、 [.filename]#/usr/local/etc/X11/# が推奨されます。 このディレクトリを使うことで、 アプリケーションのファイルをオペレーティングシステムとは区別する事になります。 昔のコンフィグレーションファイルの置き場である [.filename]#/etc/X11/# も機能します。 しかしながら、この場所に置くと、アプリケーションファイルと FreeBSD システムのファイルが混ざってしまうため、推奨されません。 [[x-config-files-single-or-multi]] ==== 単一または複数ファイル 複数のファイルを用いて、 各ファイルが特定の部分を設定するようにすると、 古い単一の [.filename]#xorg.conf# を用いるよりも設定が簡単になります。 これらのファイルは、 メインのコンフィグレーションファイルのディレクトリの [.filename]#xorg.conf.d/# サブディレクトリに置かれます。 フルパスは、一般的に [.filename]#/usr/local/etc/X11/xorg.conf.d/# となります。 これらのファイルの例は、この節の後半で説明します。 古い単一の [.filename]#xorg.conf# も機能しますが、 [.filename]#xorg.conf.d/# サブディレクトリに複数のファイルで設定する形式に比べると、 柔軟ではなく、わかりにくいものとなります。 [[x-config-video-cards]] === ビデオカード Ports のフレームワークは、X11 が最近のハードウェア上で動作するために必要となる drm グラフィックドライバを提供します。 そのようなドライバとしては、package:graphics/drm-kmod[] で提供されるドライバがあります。 これらのドライバは、通常プライベートなカーネルのインタフェースを使用するため、`PORTS_MODULES` 変数を利用して ports システムのドライバを構築することが強く推奨されています。 `PORTS_MODULES` に設定されたカーネルモジュールを含む port は、カーネルを構築するたびに、アップデートされたソースに対応するよう再構築されます。 これにより、カーネルモジュールはカーネルと同期することが保証されます。 カーネルと ports ツリーは最大限に互換性を持つように共にアップデートされる必要があります。 [.filename]#/etc/make.conf# ファイルで `PORTS_MODULES` を設定することで、カーネルを構築する際に、設定されたモジュールも再構築されるようになります。 上級のユーザの中には、カーネルコンフィグレーションファイルに `makeoptions` ディレクティブで追加するユーザもいます。 GENERIC を走らせていて、freebsd-update を使用している場合には、`freebsd-update install` 実行後に [.filename]#graphics/drm-kmod# または [.filename]#x11/nvidia-driver# port を構築してください。 [example] ==== [.filename]#/etc/make.conf# [.programlisting] .... SYSDIR=path/to/src/sys PORTS_MODULES=graphics/drm-kmod x11/nvidia-driver .... この設定はすべてを再構築します。 使用している GPU /グラフィックカードに応じて、ひとつだけ選択したり、別のドライバを選択できます。 ==== [[x-config-video-cards-ports]] Intel KMS driver:: Intel(R) が提供しているほとんどの Intel KMS driver グラフィックカードは、2D および 3D アクセラレーションに対応しています。 + ドライバ名: `i915kms` + AMD(R) が提供している古い Radeon KMS driver グラフィックカードのほとんどは、2D および 3D アクセラレーションに対応しています。 + ドライバ名: `radeonkms` + AMD(R) が提供している新しい Radeon KMS driver グラフィックカードのほとんどは、2D および 3D アクセラレーションに対応しています。 + ドライバ名: `amdgpu` + 参考として、対応している GPU 一覧を link:https://en.wikipedia.org/wiki/List_of_Intel_graphics_processing_units[] または link:https://en.wikipedia.org/wiki/List_of_AMD_graphics_processing_units[] でご覧ください。 [[x-config-video-cards-intel]] Intel(R):: Iron Lake (HD Graphics) および Sandy Bridge (HD Graphics 2000) を含む Ivy Bridge (HD Graphics 2500, 4000, および P4000) までのほとんどの Intel(R) グラフィックスは、3D acceleration に対応しています。 + ドライバ名: `intel` + 参考情報については link:https://en.wikipedia.org/wiki/List_of_Intel_graphics_processing_units[] をご覧ください。 [[x-config-video-cards-radeon]] AMD(R) Radeon:: ATI/Radeon: 2D および 3D acceleration は、 HD6000 シリーズまでのほとんどの Radeon カードで対応しています。 + ドライバ名: `radeon` + 参考情報については link:https://en.wikipedia.org/wiki/List_of_AMD_graphics_processing_units[] をご覧ください。 [[x-config-video-cards-nvidia]] NVIDIA:: NVIDIA: いくつかの NVIDIA ドライバが Ports Collection の [.filename]#x11# カテゴリから利用できます。 ビデオカードのモデルに対応するドライバをインストールしてください。 + 参考情報については link:https://en.wikipedia.org/wiki/List_of_Nvidia_graphics_processing_units[] をご覧ください。 + NVIDIA カードに対応しているカーネルは [.filename]#x11/nvidia-driver# port または [.filename]#x11/nvidia-driver-xxx# port にあります。 最新のカードは、前者の port を使います。 古いカードは、-xxx ports を使うことになります。 ここで xxx はドライバのバージョンを表す 304, 340 または 390 のどれかです。 これらのドライバを使うには、 http://download.nvidia.com/XFree86/FreeBSD-x86_64/465.19.01/README/[対応している NVIDIA GPU プロトコル] ページを参照して、`-xxx` の部分を埋めてください。 このページには、ドライバの各バージョンが対応しているデバイスの一覧があります。 昔のドライバは i386 および amd64 で動作します。 現在のドライバは amd64 のみに対応しています。 詳細については、 http://download.nvidia.com/XFree86/FreeBSD-x86_64/465.19.01/README/[NVIDIAドライバのインストールおよび設定] を参照してください。 ドライバが最大限に安全に動作するように、カーネルを再構築すたびにドライバを再構築することが推奨されていますが、このドライバはプライベートのカーネルインタフェースをほとんど使わないため、通常はカーネルがアップデートしても安全に使用できます。 [[x-config-video-cards-hybrid]] ハイブリッドグラフィックス:: ノートブックコンピュータによっては、 チップセットまたはプロセッサに組み込まれているグラフィックプロセッサユニットの他に、 追加でそれらを持つものがあります。 _Optimus_ は、 Intel(R) と NVIDIA ハードウェアを組み合わせています。 _Switchable Graphics_ または、 _Hybrid Graphics_ は、 Intel(R) または AMD(R) プロセッサと AMD(R) Radeon GPU を組み合わせています。 + これらのハイブリッドなグラフィックシステムの実装は、 システムごとに異なるので、 FreeBSD の Xorg は、 これらのすべてのバージョンについて対応しているわけではありません。 + コンピュータによっては、 片方のグラフィックアダプタを無効にしたり、 標準のビデオカードドライバの一つとともに使われる _discrete_ モードを選択できるような BIOS オプションを提供しています。 たとえば、Optimus システムでは、NVIDIA GPU を無効にできるものがあります。 その後、Intel(R) ビデオカードは、 Intel(R) ドライバで利用できます。 + BIOS の設定は、 コンピュータのモデルに依存します。 システムによっては、両方の GPU を有効にできますが、 そのようなシステムの機能を利用するには、 `Device` セッションにおいて、 メインの GPU のみを使用するようなコンフィグレーションファイルを作成ことで十分です。 [[x-config-video-cards-other]] 他のビデオカード:: Ports Collection の [.filename]#x11-drivers# ディレクトリには、 あまり使用されないようなドライバも用意されています。 + 特定のドライバによりサポートされていないようなカードでも、 package:x11-drivers/xf86-video-vesa[] で使用できるかもしれません。 このドライバは、package:x11/xorg[] によりインストールされます。 手動でインストールするには、 package:x11-drivers/xf86-video-vesa[] としてインストールしてください。 ビデオカードに対して、特定のドライバが見つからない場合には、 Xorg はこのドライバを使うことを試みます。 + package:x11-drivers/xf86-video-scfb[] も同様に、多くの UEFI および ARM(R) コンピュータで動くような、 使用するカードを特定していないビデオドライバです。 [[x-config-video-cards-file]] ファイルでビデオドライバを設定する。:: コンフィグレーションファイルにおいて Intel(R) ドライバを設定するには、以下のようにしてください。 + [[x-config-video-cards-file-intel]] .ファイルにおいて Intel(R) ビデオドライバを選択する。 [example] ==== [.filename]#/usr/local/etc/X11/xorg.conf.d/driver-intel.conf# [.programlisting] .... Section "Device" Identifier "Card0" Driver "intel" # BusID "PCI:1:0:0" EndSection .... 1つ以上のビデオカードが存在する場合には、 `BusID` 行のコメントを外し、 希望するカードを選択するように設定できます。 ビデオカードバス ID は、 `pciconf -lv | grep -B3 display` で表示できます。 ==== + コンフィグレーションファイルで、Radeon ドライバを設定するには以下のようにしてください。 + [[x-config-video-cards-file-radeon]] .ファイルにおいて Radeon ビデオドライバを設定する。 [example] ==== [.filename]#/usr/local/etc/X11/xorg.conf.d/driver-radeon.conf# [.programlisting] .... Section "Device" Identifier "Card0" Driver "radeon" EndSection .... ==== + コンフィグレーションファイルで VESA ドライバを設定するには、以下のようにしてください。 + [[x-config-video-cards-file-vesa]] .ファイルで VESA ビデオドライバを設定する。 [example] ==== [.filename]#/usr/local/etc/X11/xorg.conf.d/driver-vesa.conf# [.programlisting] .... Section "Device" Identifier "Card0" Driver "vesa" EndSection .... ==== + UEFI または ARM(R) コンピュータを使うために `scfb` ドライバを設定するには、以下のように設定してください。 + [[x-config-video-cards-file-scfb]] .ファイルの中で `scfb` ビデオドライバを選択する。 [example] ==== [.filename]#/usr/local/etc/X11/xorg.conf.d/driver-scfb.conf# [.programlisting] .... Section "Device" Identifier "Card0" Driver "scfb" EndSection .... ==== [[x-config-monitors]] === モニタ ほとんどすべてのモニタは、Extended Display Identification Data standard (EDID) に対応しています。 Xorg は EDID を使ってモニタと通信し、 対応している解像度とリフレッシュレートを検出します。 そのため、モニタを使用するのに最も適切な設定が選択されます。 モニタにより対応している他の解像度は、 コンフィグレーションファイルに希望する解像度を設定する、 または X サーバを起動後、man:xrandr[1] により選択が可能となります。 [[x-config-monitors-xrandr]] man:xrandr[1] の使用:: パラメータを与えずに man:xrandr[1] を実行すると、 ビデオ出力と検出されているモニタのモードを確認できます。 + [source,shell] .... % xrandr Screen 0: minimum 320 x 200, current 3000 x 1920, maximum 8192 x 8192 DVI-0 connected primary 1920x1200+1080+0 (normal left inverted right x axis y axis) 495mm x 310mm 1920x1200 59.95*+ 1600x1200 60.00 1280x1024 85.02 75.02 60.02 1280x960 60.00 1152x864 75.00 1024x768 85.00 75.08 70.07 60.00 832x624 74.55 800x600 75.00 60.32 640x480 75.00 60.00 720x400 70.08 DisplayPort-0 disconnected (normal left inverted right x axis y axis) HDMI-0 disconnected (normal left inverted right x axis y axis) .... + この出力からは、リフレッシュレート約 60 Hz で、 スクリーン解像度 1920x1200 ピクセルの表示に `DVI-0` 出力が使用されていることが分かります。 また、`DisplayPort-0` および `HDMI-0` インタフェースには、 モニタは接続されていません。 + man:xrandr[1] を使用して、 他のディスプレイモードを選択できます。 たとえば、60 Hz で、1280x1024 の表示に変更するには、 以下のように実行してください。 + [source,shell] .... % xrandr --output DVI-0 --mode 1280x1024 --rate 60 .... + ノートブックコンピュータの外部出力を使用して、 ビデオプロジェクタに接続することがよく行われます。 + 出力端子のタイプおよび番号は、デバイスごとに異なります。 また、各端子の名前もドライバごとに異なります。 あるドライバが `HDMI-1` と呼ぶ出力が、 別のドライバでは `HDMI1` と呼ばれることもあります。 そのため、最初に man:xrandr[1] を実行して、 利用可能な出力のすべての一覧を表示してください。 + [source,shell] .... % xrandr Screen 0: minimum 320 x 200, current 1366 x 768, maximum 8192 x 8192 LVDS1 connected 1366x768+0+0 (normal left inverted right x axis y axis) 344mm x 193mm 1366x768 60.04*+ 1024x768 60.00 800x600 60.32 56.25 640x480 59.94 VGA1 connected (normal left inverted right x axis y axis) 1280x1024 60.02 + 75.02 1280x960 60.00 1152x864 75.00 1024x768 75.08 70.07 60.00 832x624 74.55 800x600 72.19 75.00 60.32 56.25 640x480 75.00 72.81 66.67 60.00 720x400 70.08 HDMI1 disconnected (normal left inverted right x axis y axis) DP1 disconnected (normal left inverted right x axis y axis) .... + この出力からは、組み込みパネルの `LVDS1`, 外部出力の `VGA1`, `HDMI1`, そして `DP1` 端子の 4 つの出力を確認できます。 + プロジェクタは `VGA1` 出力に接続されています。 情報を得られたので、man:xrandr[1] を使ってプロジェクタの標準の解像度に設定し、 デスクトップの右側にスペースを追加できます。 + [source,shell] .... % xrandr --output VGA1 --auto --right-of LVDS1 .... + この設定において、`--auto` は、 EDID により検出された解像度とリフレッシュレートを選択します。 解像度を正しく検出できていない場合には、 `--auto` のかわりに、 `--mode` を使うことで、 解像度を固定値を与えることにより設定できます。 たとえば、ほとんどのプロジェクタでは 1024x768 の解像度で使用できるので、 この場合には、`--mode 1024x768` のように設定できます。 + man:xrandr[1] は、X を起動する際に、 適切なモードを設定するように、しばしば [.filename]#.xinitrc# から実行されます。 [[x-config-monitors-files]] モニタ解像度をファイルで設定する。:: コンフィグレーションファイルでスクリーンの解像度を 1024x768 と設定するには以下のようにしてください。 + .スクリーンの解像度をファイルで設定する。 [example] ==== [.filename]#/usr/local/etc/X11/xorg.conf.d/screen-resolution.conf# [.programlisting] .... Section "Screen" Identifier "Screen0" Device "Card0" SubSection "Display" Modes "1024x768" EndSubSection EndSection .... ==== + EDID を持っていないモニタもあります。その場合には、 モニタが対応している周波数の範囲を、 `HorizSync` および `VertRefresh` で、指定することで設定できます。 + .手動でモニタの周波数を設定する。 [example] ==== [.filename]#/usr/local/etc/X11/xorg.conf.d/monitor0-freq.conf# [.programlisting] .... Section "Monitor" Identifier "Monitor0" HorizSync 30-83 # kHz VertRefresh 50-76 # Hz EndSection .... ==== [[x-config-input]] === 入力デバイス [[x-config-input-keyboard]] ==== キーボード [[x-config-input-keyboard-layout]] キーボードレイアウト:: キーボード上の標準化されたキーの位置を _レイアウト_ と呼びます。 レイアウトと他の調整可能なパラメータについては、 man:xkeyboard-config[7] にまとめられています。 + アメリカ合衆国のレイアウトがデフォルトです。 他のレイアウトを選択するには、 `InputClass` で、 `XkbLayout` および `XkbVariant` オプションを設定してください。 クラスに対応するすべての入力デバイスに適用できます。 + 以下の例では、 フランス語のキーボードレイアウトを選択しています。 + .キーボードレイアウトを選択する。 [example] ==== [.filename]#/usr/local/etc/X11/xorg.conf.d/keyboard-fr.conf# [.programlisting] .... Section "InputClass" Identifier "KeyboardDefaults" MatchIsKeyboard "on" Option "XkbLayout" "fr" EndSection .... ==== + .複数のキーボードレイアウトを選択する。 [example] ==== アメリカ合衆国、スペイン、 ウクライナのキーボードレイアウトを、 kbd:[Alt+Shift] によって切り替えるようにするには以下のように設定します。 レイアウトスイッチングコントロールや現在のレイアウトインディケータを改良するには、 package:x11/xxkb[] または、 package:x11/sbxkb[] を使ってください。 [.filename]#/usr/local/etc/X11/xorg.conf.d/kbd-layout-multi.conf# [.programlisting] .... Section "InputClass" Identifier "All Keyboards" MatchIsKeyboard "yes" Option "XkbLayout" "us, es, ua" EndSection .... ==== [[x-config-input-keyboard-zap]] キーボードから Xorg を終了する。:: X をキーの組み合わせで終了できるように設定できます。 デフォルトでは、幾つかのアプリケーションで、 キーボードコマンドと衝突してしまう可能性があるため、 このキーの組み合わせは設定されていません。 このオプションを有効にするには、 キーボードの `InputDevice` セクションを変更してください。 + .キーボードからの X の終了を有効にする。 [example] ==== [.filename]#/usr/local/etc/X11/xorg.conf.d/keyboard-zap.conf# [.programlisting] .... Section "InputClass" Identifier "KeyboardDefaults" MatchIsKeyboard "on" Option "XkbOptions" "terminate:ctrl_alt_bksp" EndSection .... ==== [[x11-input-mice]] ==== マウスおよびポインティングデバイス [IMPORTANT] ==== もし FreeBSD {rel121-current} において、 man:moused[8] を使わず、 package:xorg-server[] 1.20.8 以降を使用しているのであれば、 [.filename]#/etc/sysctl.conf# に、 `kern.evdev.rcpt_mask=12` を追加してください。 ==== コンフィグレーションオプションにより、 多くのマウスパラメータを調整できます。 すべての一覧については、man:mousedrv[4] をご覧ください。 [[x11-input-mice-buttons]] マウスボタン:: [.filename]#xorg.conf# のマウス `InputDevice` セクションで、 マウスのボタンの数を設定できます。 ボタンの数を 7 に設定するには、 以下のように設定してください。 + .マウスボタンの数を設定する。 [example] ==== [.filename]#/usr/local/etc/X11/xorg.conf.d/mouse0-buttons.conf# [.programlisting] .... Section "InputDevice" Identifier "Mouse0" Option "Buttons" "7" EndSection .... ==== [[x-config-manual-configuration]] === 手動による設定 ハードウェアによっては、Xorg の自動設定で適切な設定が行われなかったり、 自動設定とは別の設定にしたいときがあります。 そのような場合のため、 カスタムコンフィグレーションファイルを作成できます。 [WARNING] ==== 自動認識に失敗したとき以外は、 手動で設定ファイルを作成しないでください。 不必要な手動の設定を行った結果、 適切に動作しなくなるということがあります。 ==== 検出されたハードウェアをベースとした、 Xorg のコンフィグレーションファイルを作成できます。 このファイルは、 カスタムコンフィグレーションファイルの最初の出発点として有用です。 以下のようにすると [.filename]#xorg.conf# が生成されます。 [source,shell] .... # Xorg -configure .... このコンフィグレーションファイルは、 [.filename]#/root/xorg.conf.new# として保存されます。 必要となる変更を行った後、このファイルを (バックグラウンドが表示されるように `-retro` を使って) テストしてください。 [source,shell] .... # Xorg -retro -config /root/xorg.conf.new .... 新しい設定を調整してテストしたら、 ファイルに分割して、標準の場所である、 [.filename]#/usr/local/etc/X11/xorg.conf.d/# に置いてください。 [[x-fonts]] == Xorg でのフォントの使用 [[type1]] === Type1 フォント Xorg に付いてくるデフォルトのフォントは、 通常のデスクトップパブリッシングアプリケーションにとっては理想的とは言えない程度のものです。 文字を大きくするとジャギーになりプロフェッショナルとは言えないようなものになりますし、 小さなフォントは頭が悪そうに見えます。 しかし、世の中には質の高い Type1 (PostScript(R)) フォントがいくつかあり、 Xorg ではそれらを簡単に利用することができます。 例えば、URW フォントコレクション (package:x11-fonts/urwfonts[]) には高品質の Type1 フォント (Times Roman(TM), Helvetica(TM), Palatino(TM) など) が含まれています。freefont コレクション (package:x11-fonts/freefonts[]) にはもっとたくさんのフォントが含まれていますが、 それらは Gimp のようなグラフィックソフトウェアで使用するためのものであり、 スクリーンフォントとしては十分ではありません。 さらに、Xorg は簡単に TrueType(R) フォントを使うように設定することも可能です。 詳しくは、man:X[7] のマニュアルページか <> を参照してください。 上記の Type1 フォントコレクションをバイナリ package からインストールする場合には、次のコマンドを実行してください。 [source,shell] .... # pkg install urwfonts .... あるいは、Ports Collection から構築してインストールするには次のコマンドを実行してください。 [source,shell] .... # cd /usr/ports/x11-fonts/urwfonts # make install clean .... freefont や他のコレクションでも同じようにします。 X サーバがこれらのフォントを検出できるようにするには X サーバ設定ファイル ([.filename]#/etc/X11/xorg.conf#) の適切な場所に次のような行を加えます。 [.programlisting] .... FontPath "/usr/local/share/fonts/urwfonts/" .... 別の方法としては、 X のセッション中に次のようなコマンドラインを実行します。 [source,shell] .... % xset fp+ /usr/local/share/fonts/urwfonts % xset fp rehash .... これは動くのですが、X のセッションが終了すると消えてしまいます。 消えないようにするには X の起動時に読み込まれるファイル (通常の `startx` セッションの場合は [.filename]#~/.xinitrc#, XDM のようなグラフィカルなログインマネージャを通してログインする時は [.filename]#~/.xsession#) に加えておきます。 三番目の方法は新しい [.filename]#/usr/local/etc/fonts/local.conf# ファイルを使うことです。 これに関しては <> をご覧ください。 [[truetype]] === TrueType(R) フォント Xorg には、 TrueType(R) フォントのレンダリング機能が組み込まれています。 この機能を実現するために 2 つの異なるモジュールがあります。 ここでは、freetype の方が他のフォントレンダリングバックエンドと整合性が高いので、 このモジュールを使うことにします。 freetype モジュールを使うためには [.filename]#/etc/X11/xorg.conf# ファイルの `"Module"` セクションに以下の行を追加するだけです。 [.programlisting] .... Load "freetype" .... さて、まずは TrueType(R) フォント用のディレクトリ (例えば [.filename]#/usr/local/share/fonts/TrueType#) を作り、そこに TrueType(R) フォントをすべて放り込みましょう。 Apple(R) Mac(R) の TrueType(R) フォントは、そのままでは使うことができませんので注意してください。 Xorg で使うには UNIX(R)/MS-DOS(R)/Windows(R) 用のフォーマットでなければなりません。 ファイルを置いたら mkfontscale を使って [.filename]#fonts.dir# ファイルを作り、 X のフォントレンダラが新しいファイルがイントールされたことを分かるようにしてください。 `mkfontscale` は package からインストールできます。 [source,shell] .... # pkg install mkfontscale .... その後、ディレクトリに X フォントファイルのインデックスを作成してください。 [source,shell] .... # cd /usr/local/share/fonts/TrueType # mkfontscale .... 次に TrueType(R) フォントのディレクトリをフォントパスに追加します。 <> の場合と同じように、 [source,shell] .... % xset fp+ /usr/local/share/fonts/TrueType % xset fp rehash .... とするか、もしくは [.filename]#xorg.conf# ファイルに `FontPath` 行を追加します。 これで Gimp や LibreOffice といったすべての X アプリケーションから TrueType(R) フォントを使うことができます。 (高解像度なディスプレイで見るウェブページ上のテキストみたいな) とても小さなフォントや (LibreOffice にあるような) 非常に大きなフォントもかなり綺麗に見えるようになることでしょう。 [[antialias]] === フォントのアンチエイリアス [.filename]#/usr/local/share/fonts/# と [.filename]#~/.fonts/# にあるすべての Xorg のフォントが、Xft に対応しているアプリケーションで自動的にアンチエイリアス表示できるようになりました。 KDE, GNOME および Firefox のような最新のアプリケーションは、Xft に対応しています。 どのフォントがアンチエイリアスされるかを制御するため、 もしくはアンチエイリアスの特性を設定するために、 [.filename]#/usr/local/etc/fonts/local.conf# ファイルを作成 (すでに存在しているのなら編集) します。 多くの Xft フォントシステムの高度な機能をこのファイルを使って調整できます。 この節ではいくつか簡単なところだけを紹介します。 詳しくは、man:fonts-conf[5] をご覧ください。 このファイルは XML 形式でなければなりません。 大文字小文字の区別に注意を払い、 すべてのタグが正しく閉じられているか確認してください。 ファイルは一般的な XML ヘッダで始まり、DOCTYPE 定義と `` タグがその後にきます。 [.programlisting] .... .... すでに説明したように、 [.filename]#/usr/local/share/fonts/# と [.filename]#~/.fonts/# にあるすべてのフォントは Xft 対応のアプリケーションで利用できます。 これら 2 つのディレクトリ以外に別のディレクトリを追加したいなら、 [.filename]#/usr/local/etc/fonts/local.conf# に以下のような行を追加してください。 [.programlisting] .... /path/to/my/fonts .... 新しいフォント、 特に新しいフォントディレクトリを追加したら、 フォントキャッシュを再構築してください。 [source,shell] .... # fc-cache -f .... アンチエイリアスをかけることによって境界が少しぼやけ、 そのためにとても小さなテキストはさらに読みやすくなり、 大きなフォントでは "ギザギザ" が消えるのです。 しかし、普通のテキストにかけた場合には目が疲れてしまうこともあります。 14 ポイント以下のサイズのフォントについて、 アンチエイリアスをかけないようにするには次の行を加えます。 [.programlisting] .... 14 false 14 false .... いくつかの等幅フォントは、 アンチエイリアスをかけるとスペーシングがうまくいかなくなる場合があります。 特に KDE でその傾向があるようです。 解決策の一つとして、そういったフォントのスペーシングを 100 に設定する方法があります。 そうするためには次の行を加えてください。 [.programlisting] .... fixed mono console mono .... (これは固定サイズのフォントに `"mono"` という一般的な別名をつけます) そして以下を追加します。 [.programlisting] .... mono 100 .... Helvetica の様なある種のフォントは、 アンチエイリアスすると問題が起こるでしょう。 たいてい、フォントが縦に半分に切られて表示されます。 最悪の場合、アプリケーションがクラッシュします。 これを回避するには、以下を [.filename]#local.conf# に追加します。 [.programlisting] .... Helvetica sans-serif .... [.filename]#local.conf# の編集を終えたら、 ファイルの末尾が `` タグで終わるようにしてください。 これを行わなければ、変更は無視されるでしょう。 ユーザは自分だけの設定を各自の [.filename]#~/.config/fontconfig/fonts.conf# に追加できます。 このファイルもこれまでの説明と同じく XML 形式を使います。 最後に一つ。LCD スクリーンではサブピクセルサンプリングが必要な場合があります。 これは、基本的には (水平方向に分かれている) 赤、緑、 青の各コンポーネントを別々に扱うことによって水平方向の解像度を良くするというもので、 劇的な結果が得られます。 これを有効にするには [.filename]#local.conf# ファイルに次の行を加えます。 [.programlisting] .... unknown rgb .... [NOTE] ==== ディスプレイの種類にもよりますが、 `rgb` ではなく `bgr` や `vrgb`、もしくは `vbgr` の場合もあるので、 試してみて最も良いものを使ってください。 ==== [[x-xdm]] == X ディスプレイマネージャ Xorg は、 ログインセッションの管理に用いることのできる X ディスプレイマネージャ XDM を提供しています。XDM はどのディスプレイサーバに接続するかを選択でき、 ログイン名とパスワードの組み合わせなど認証情報を入力できるグラフィカルなインタフェースを提供しています。 この章では、FreeBSD 上での X ディスプレイマネージャの設定方法について説明します。 デスクトップ環境によっては、 各環境独自のグラフィカルログインマネージャを提供しています。 GNOME ディスプレイマネージャの設定方法については、<> を参照してください。 また、KDE ディスプレイマネージャの設定方法については、<> を参照してください。 === XDM の設定 XDM をインストールするには、 package:x11/xdm[] package または port を使ってください。 インストール後、コンピュータの起動時に、XDM を起動するように設定するには、[.filename]#/etc/rc.conf# に以下の行を追加してください。 [.programlisting] .... xdm_enable="YES" .... デフォルトでは、XDM は 9 番目の仮想端末で起動します。 XDM の設定用ディレクトリは [.filename]#/usr/local/etc/X11/xdm# です。 このディレクトリには XDM の振る舞いや見た目を変更するために用いられるファイルや、XDM の動作中にデスクトップを設定するためのスクリプトやプログラムがあります。 <> には、これらのフィアルの機能についてまとめられています。 これらのファイルの正確な文法や使用方法については、man:xdm[8] に記述されています。 [[xdm-config-files]] .XDM 設定ファイル [cols="1,1", frame="none", options="header"] |=== | ファイル | 説明 |[.filename]#Xaccess# |XDM に接続するためのプロトコルは X Display Manager Connection Protocol (XDMCP) と呼ばれます。 このファイルにはリモートのマシンからの XDMCP 接続をコントロールするためのルールセットが書かれます。 デフォルトでは、どのクライアントからの接続も拒否します。 |[.filename]#Xresources# |このファイルは、XDM ディスプレイの chooser およびログインスクリーンを設定します。 デフォルトの設定は、シンプルな長方形のログインウィンドウで、 コンピュータのホスト名がログインウィンドウの上部に大きなフォントで表示され、 その下に "Login:" および "Password:" のプロンプトが表示されます。 このファイルのフォーマットは Xorg のドキュメントで記述されている app-defaults ファイルのものと同じです。 |[.filename]#Xservers# |これは、chooser がログインの選択肢として提供するローカルおよびリモートのディスプレイの一覧です。 |[.filename]#Xsession# |ユーザのログイン時に XDM により実行されるデフォルトのセッションスクリプトです。 [.filename]#~/.xsession# に置かれているカスタマイズされたセッションスクリプトが優先されます。 |[.filename]#Xsetup_#* |これらは chooser やログインインタフェースが表示される前に自動的に実行されるアプリケーションです。 それぞれのディスプレイに対して、[.filename]#Xsetup_*# (`*` はローカルのディスプレイ番号) という名前のついたスクリプトがあります。 典型的な使い方は `xconsole` のようなバックグラウンドで動かすプログラムを一つか二つ起動することです。 |[.filename]#xdm-config# |このマシンで動いているすべてのディスプレイのグローバルな設定 |[.filename]#xdm-errors# |このファイルにはサーバプログラムからのエラーが書き出されます。 XDM が起動しようとしているディスプレイがなんらかの理由でハングした場合、 このファイルのエラーメッセージを見てください。 これらのメッセージは各ユーザの [.filename]#~/.xsession-errors# ファイルにもセッション毎に書き出されます。 |[.filename]#xdm-pid# |現在動いている XDM のプロセス ID。 |=== === リモートアクセスの設定 デフォルトでは、XDM を使ってログインできるのは、同じシステムのユーザのみです。 あるディスプレイサーバに他のシステムのユーザが接続できるようにするためには、 アクセスコントロールのルールを編集し、 コネクションリスナを有効にする必要があります。 XDM が他のリモートコネクションを待ち受けるようにするためには、 [.filename]#/usr/local/etc/X11/xdm/xdm-config# の `DisplayManager.requestPort` 行を、行頭に `!` を置くことでコメントアウトしてください。 [source,shell] .... ! 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 を再起動してください。 リモートアクセスを制限するには、[.filename]#/usr/local/etc/X11/xdm/Xaccess# にある例を参考にしたり、詳細について man:xdm[8] を参照してください。 [[x11-wm]] == デスクトップ環境 この節では、良く使われている 3 つのデスクトップ環境を FreeBSD 上でにインストールする方法について解説します。 デスクトップ環境とは、 単なるウィンドウマネージャから完全なデスクトップアプリケーションスイートまでカバーします。 Ports Collection の [.filename]#x11-wm# カテゴリには、 100 を超えるデスクトップ環境が用意されています。 [[x11-wm-gnome]] === GNOME GNOME はユーザフレンドリなデスクトップ環境です。 アプリケーションを起動したりステータスを表示するパネル、 デスクトップ、ツールおよびアプリケーション群、 そしてアプリケーションが互いにうまくやり取りできるような仕組みが含まれています。 FreeBSD 上の GNOME に関するもっと詳しい情報は、link:https://www.FreeBSD.org/gnome[https://www.FreeBSD.org/gnome] で見ることができます。 このウェブサイトには、FreeBSD での GNOME のインストール、設定、管理に関する多くの情報があります。 このデスクトップ環境は、package からインストールできます。 [source,shell] .... # pkg install gnome .... ports から GNOME を構築するには、以下のコマンドを実行してください。 GNOME は大きなアプリケーションなので、 コンパイルには高速のコンピュータでも時間がかかります。 [source,shell] .... # cd /usr/ports/x11/gnome # make install clean .... GNOME を使用するには、 [.filename]#/proc# ファイルシステムをマウントする必要があります。 以下を [.filename]#/etc/fstab# に追加して、 システムの起動中にこのファイルシステムをマウントするように設定してください。 [.programlisting] .... proc /proc procfs rw 0 0 .... GNOME は、メッセージバスおよびハードウェアアブストラクションに D-Bus を使います。 これらのアプリケーションは、GNOME の依存として自動的にインストールされます。 [.filename]#/etc/rc.conf# の中で、システムの起動時にスタートするように有効にしてください。 [.programlisting] .... dbus_enable="YES" .... インストール後、 GNOME を起動するように Xorg を設定してください。 最も簡単な方法は、GNOME ディスプレイマネージャ GDM を使うことです。 GDM は、 GNOME package または port の一部としてインストールされます。 有効にするには、以下の行を [.filename]#/etc/rc.conf# に追加してください。 [.programlisting] .... gdm_enable="YES" .... GNOME のすべてのサービスを、 起動するようにしておくと良いでしょう。 このように設定するには、以下の行を [.filename]#/etc/rc.conf# に追加してください。 [.programlisting] .... gnome_enable="YES" .... システムを再起動すると、GDM が自動的に起動します。 GNOME を起動するもう一つの方法は、 [.filename]#.xinitrc# を適切に設定した後で、 コマンドラインから `startx` と入力する方法です。 [.filename]#.xinitrc# が既にある場合には、 ウィンドウマネージャを起動する行を [.filename]#/usr/local/bin/gnome-session# を起動するように変更してください。 このファイルが存在しなければ、 次のコマンドで作成してください。 [source,shell] .... % echo "exec /usr/local/bin/gnome-session" > ~/.xinitrc .... 3 つめの方法は、XDM をディスプレイマネージャとして使う方法です。 この場合は、実行可能な [.filename]#.xsession# というファイルを作成してください。 [source,shell] .... % echo "exec /usr/local/bin/gnome-session" > ~/.xsession .... [[x11-wm-kde]] === KDE KDE はもう一つの使いやすいデスクトップ環境です。 このデスクトップは、統一されたルックアンドフィール、 標準化されたメニューおよびツールバー、 キーバインディング、カラースキーム、国際化、 一元化されたダイアログベースのデスクトップ設定とともに、 アプリケーションのスイートを提供します。 KDE の詳細については link:http://www.kde.org/[http://www.kde.org/] をご覧ください。 KDE に関する FreeBSD 特有の情報については、link:http://freebsd.kde.org/[http://freebsd.kde.org] をご覧ください。 KDE package をインストールするには以下のように実行してください。 [source,shell] .... # pkg install x11/kde5 .... KDE port を構築するには、以下のコマンドを使ってください。 port のインストールでは、 インストールするアプリケーションを選択するためのメニューが表示されます。 KDE は大きなアプリケーションなので、 高速のコンピュータでもコンパイルには時間がかかります。 [source,shell] .... # cd /usr/ports/x11/kde5 # make install clean .... KDE では、 [.filename]#/proc# ファイルシステムをマウントする必要があります。 以下の行を [.filename]#/etc/fstab# に追加して、 システム起動時にこのファイルシステムが自動的にマウントされるように設定してください。 [.programlisting] .... proc /proc procfs rw 0 0 .... KDE は、 メッセージバスおよびハードウェアアブストラクションに D-Bus を使います。 これらのアプリケーションは、KDE の依存として自動的にインストールされます。 [.filename]#/etc/rc.conf# の中で、システムの起動時にスタートするように有効にしてください。 [.programlisting] .... dbus_enable="YES" .... KDE Plasma 5 から KDE のディスプレイマネージャ KDM の開発は終了しました。 かわりに推奨されているのが SDDM です。 インストールするには、以下を実行してください。 [source,shell] .... # pkg install x11/sddm .... その後、以下の行を [.filename]#/etc/rc.conf# に追加してください。 [.programlisting] .... sddm_enable="YES" .... KDE Plasma を起動するもう一つの方法は、 コマンドラインから `startx` を実行する方法です。 このコマンドを実行するには、[.filename]#~/.xinitrc# に以下の行を追加してください。 [.programlisting] .... exec ck-launch-session startplasma-x11 .... KDE Plasma を起動する 3 つめの方法は、 XDM を利用する方法です。 この方法を使うには、以下のようにして実行可能な [.filename]#~/.xsession# を作成してください。 [source,shell] .... % echo "exec ck-launch-session startplasma-x11" > ~/.xsession .... KDE Plasma を起動した後は、 ビルトインヘルプシステムから、 さまざまなメニューおよびアプリケーションの使用方法などのより詳しい情報を参照できます。 [[x11-wm-xfce]] === Xfce Xfce は GNOME で使われている GTK+ ツールキットをベースにしたデスクトップ環境ですが、より軽量、 シンプルでかつ効率的でありながら使いやすいデスクトップ環境です。 すべての設定が可能で、メニュー、 アプレットおよびアプリケーションランチャを含むメインパネル、 ファイルマネージャ、サウンドマネージャを提供し、 テーマに対応しています。 速くて軽く、効率的なため、古いマシンや遅いマシン、 メモリの限られたマシンに向いています。 Xfce に関する詳しい情報は link:http://www.xfce.org/[http://www.xfce.org] で得られます。 Xfce package をインストールするには、次のように実行してください。 [source,shell] .... # pkg install xfce .... また、port を構築するには以下のようにしてください。 [source,shell] .... # cd /usr/ports/x11-wm/xfce4 # make install clean .... Xfce は、 メッセージバスに D-Bus を使います。 これらのアプリケーションは Xfce の依存として自動的にインストールされます。 [.filename]#/etc/rc.conf# において、 システム起動時に起動するように有効にしてください。 [.programlisting] .... dbus_enable="YES" .... GNOME や KDE とは異なり、 Xfce は、 ログインマネージャを提供していません。 コマンドラインから `startx` を実行して Xfce を起動するには、 以下のコマンドを使って、 [.filename]#~/.xinitrc# を作成してください。 [source,shell] .... % echo ". /usr/local/etc/xdg/xfce4/xinitrc" > ~/.xinitrc .... もう一つの方法は XDM を用いる方法です。この方法を使うには、 実行可能な [.filename]#.xsession# を作成してください。 [source,shell] .... % echo ". /usr/local/etc/xdg/xfce4/xinitrc" > ~/.xsession .... [[x-compiz-fusion]] == Compiz Fusion のインストール 魅力的な 3D 効果を使うと、 デスクトップコンピュータを使う楽しさがさらに増えることでしょう。 Compiz Fusion のインストールは簡単ですが、設定の際には、port の文書には記載されていないような作業が必要となることがあります。 [[x-compiz-video-card]] === FreeBSD nVidia ドライバの設定 デスクトップ効果は、 グラフィックカードに極めて高い負荷をかけることがあります。 nVidia ベースのグラフィックカードにおいて、 良いパフォーマンスを出すには、 プロプリエタリなドライバが必要となります。 他のグラフィックカードを使っているユーザは、この節を飛ばし、 [.filename]#xorg.conf# の設定に進んでください。 必要となる nVidia ドライバについては、 extref:{faq}[この問題に関する FAQ, idp59950544] を参照して決めてください。 使用しているカードに対する適切なドライバが決まれば、 インストール作業は他の package をインストールするのと同じように簡単です。 たとえば、 最新のドライバをインストールするには以下のように実行してください。 [source,shell] .... # pkg install x11/nvidia-driver .... このドライバはカーネルモジュールを作成するので、このモジュールをシステムの起動時に読み込むように設定する必要があります。 man:sysrc[8] を使用して起動時にモジュールを読み込むようにしてください。 [source,shell] .... # sysrc kld_list+="nvidia" .... または、以下の行を [.filename]#/boot/loader.conf# に追加してください。 [.programlisting] .... nvidia_load="YES" .... [NOTE] ==== 動作しているカーネルに、 カーネルモジュールを今すぐ読み込ませるには、 `kldload nvidia` のようなコマンドを実行してください。 しかしながら、Xorg のバージョンによっては、 起動時にドライバが読み込まれていないと正しく動かないもありますので、 注意してください。[.filename]#/boot/loader.conf# を編集後は、再起動してください。 [.filename]#/boot/loader.conf# を間違って設定してしまうと、システムは適切に起動しない可能性があります。 ==== 読み込まれたカーネルモジュールを使うには、 通常は、[.filename]#xorg.conf# ファイルの一つの行をプロプリエタリなドライバを使うように変更するだけです。 [.filename]#/etc/X11/xorg.conf# において、 以下の行を探し出してください。 [.programlisting] .... Driver "nv" .... この行を以下のように変更してください。 [.programlisting] .... Driver "nvidia" .... いつものように GUI を起動すると、nVidia のスプラッシュが表示されます。 すべてはこれまで通りに動作するはずです。 [[xorg-configuration]] === デスクトップ効果のための `xorg.conf` の設定 Compiz Fusion を有効にするには [.filename]#/etc/X11/xorg.conf# を変更する必要があります。 コンポジット効果を有効にするには、 以下のセクションを追加してください。 [.programlisting] .... Section "Extensions" Option "Composite" "Enable" EndSection .... 以下のような "Screen" セクションの場所を見つけてください。 [.programlisting] .... Section "Screen" Identifier "Screen0" Device "Card0" Monitor "Monitor0" ... .... ("Monitor" の後に) 次の二つの行を追加してください。 [.programlisting] .... DefaultDepth 24 Option "AddARGBGLXVisuals" "True" .... あなたが使用したいと考えているスクリーン解像度に対応する "Subsection" を探してください。 たとえば、1280x1024 を使用する予定であれば、 次のようなセクションを探してください。 もし希望の解像度の subsection がなければ、 手動でそのエントリを追加してください。 [.programlisting] .... SubSection "Display" Viewport 0 0 Modes "1280x1024" EndSubSection .... デスクトップコンポジットで 24 ビットのカラーが必要であれば、上述の subsection を以下のように変更してください。 [.programlisting] .... SubSection "Display" Viewport 0 0 Depth 24 Modes "1280x1024" EndSubSection .... 最後に、"Module" セクションに "glx" および "extmod" モジュールが読み込まれるように設定されていることを確認してください。 [.programlisting] .... Section "Module" Load "extmod" Load "glx" ... .... 前述の設定は、 package:x11/nvidia-xconfig[] を (`root` 権限で) 実行することで自動的に設定できます。 [source,shell] .... # nvidia-xconfig --add-argb-glx-visuals # nvidia-xconfig --composite # nvidia-xconfig --depth=24 .... [[compiz-fusion]] === Compiz Fusion のインストールおよび設定 Compiz Fusion のインストールは、 他の package と同様に簡単です。 [source,shell] .... # pkg install x11-wm/compiz-fusion .... インストールが終了したら、グラフィックデスクトップを起動して、 端末から以下のコマンドを通常のユーザで実行してください。 [source,shell] .... % compiz --replace --sm-disable --ignore-desktop-hints ccp & % emerald --replace & .... 使っているウィンドウマネージャ (GNOME では、Metacity) が、 Compiz Fusion に置き換えられるため、 画面は数秒間ちらつきます。 Emerald がウィンドウデコレーション (たとえば、閉じる、最小化、最大化ボタンタイトルバーなど) を取り扱います。 このコマンドをスクリプトに変換して、 (たとえば GNOME デスクトップの "Sessions" に追加して) 起動時に自動的に実行されるようにすることもできます。 [.programlisting] .... #! /bin/sh compiz --replace --sm-disable --ignore-desktop-hints ccp & emerald --replace & .... これを、たとえば [.filename]#start-compiz# という名前でホームディレクトリに保存して、 以下のように実行可能にしてください。 [source,shell] .... % chmod +x ~/start-compiz .... GUI を使って、このスクリプトを (GNOME デスクトップの [.guimenuitem]#System#, [.guimenuitem]#Preferences#, [.guimenuitem]#Sessions# にある) [.guimenuitem]#Startup Programs# に追加してください。 すべての希望する効果と設定を選択するには、 (もう一度通常のユーザで) Compiz Config Settings Manager を実行してください。 [source,shell] .... % ccsm .... [NOTE] ==== GNOME では、 [.guimenuitem]#System#, [.guimenuitem]#Preferences# メニューから選択することも出来ます。 ==== ビルドの際に "gconf support" を選択していたのであれば、 `gconf-editor` を使って `apps/compiz` 以下を見ることで、 これらの設定を確認することも出来ます。 [[x11-troubleshooting]] == トラブルシューティング もしマウスが動作しなければ、 先へ進む前にマウスの設定を行う必要があります。 最近の Xorg では、デバイスの自動認識のため、 [.filename]#xorg.conf# の `InputDevice` セクションは無視されます。 古い設定の記述を利用するには、 このファイルの `ServerLayout` もしくは、 `ServerFlags` セクションに以下の行を追加してください。 [.programlisting] .... Option "AutoAddDevices" "false" .... これで、以前のバージョンのように、入力デバイスを (キーボードレイアウトの変更のように) 必要なオプションを用いて設定できるようになります。 [NOTE] ==== [WARNING] ===== この章には部分的に古くなった情報が含まれています。 FreeBSD のデスクトップ設定に HAL デーモン (hald) はもう使われません。 ===== すでに説明したように、デフォルトで hald デーモンがキーボードを自動的に認識します。 キーボードレイアウトやモデルを正しく認識しない場合でも、 GNOME, KDE もしくは Xfce のようなデスクトップ環境が、 キーボードの設定ツールを提供しています。 しかしながら、 man:setxkbmap[1] ユーティリティや hald の設定ルールを利用することで、 キーボードのプロパティを直接設定できます。 たとえば、フランス語のレイアウトの PC 102 キーボードを使いたい場合には、 hald のキーボード設定ファイル [.filename]#x11-input.fdi# を作成し、 [.filename]#/usr/local/etc/hal/fdi/policy# ディレクトリに保存してください。 このファイルは以下を含んでいる必要があります。 [.programlisting] .... pc102 fr .... このファイルがすでに存在する場合には、 キーボードの設定に関する部分をただ単にコピーし、 ファイルに追加してください。 hald がこのファイルを読み込むように、 コンピュータを再起動してください。 X 端末やスクリプトから以下のコマンドラインを実行することでも、 同様に設定できます。 [source,shell] .... % setxkbmap -model pc102 -layout fr .... [.filename]#/usr/local/share/X11/xkb/rules/base.lst# には、利用可能なキーボード、 レイアウトおよびオプションの一覧があります。 ==== [.filename]#xorg.conf.new# 設定ファイルを好みに合うように調整できます。 man:emacs[1] や man:ee[1] のようなテキストエディタでファイルを開いてください。 古いモニタや、通常とは異なるモデルで、 同期周波数の自動認識に対応していない場合には、 以下のような設定を [.filename]#xorg.conf.new# の `"Monitor"` セクションの下に加えてください。 [.programlisting] .... Section "Monitor" Identifier "Monitor0" VendorName "Monitor Vendor" ModelName "Monitor Model" HorizSync 30-107 VertRefresh 48-120 EndSection .... ほとんどのモニタは同期周波数の自動認識に対応しているので、 これらの値を手動で入力する必要はありません。 自動認識に対応していないモニタでは、 ダメージの可能性を避けるため、 メーカーが提供している値のみを入力してください。 X はモニタが対応していれば DPMS (Energy Star) 機能を使うことができます。 man:xset[1] プログラムでタイムアウトをコントロールしたり、 強制的にスタンバイ、サスペンドや電源オフにすることができます。 モニタの DPMS 機能を有効にしたい場合は、 `"Monitor"` セクションに次の行を加えてください。 [.programlisting] .... Option "DPMS" .... [.filename]#xorg.conf.new# 設定ファイルはエディタで開いたままにしておき、 デフォルトの解像度と色数を好みで選んでください。 `"Screen"` セクションで定義されます。 [.programlisting] .... Section "Screen" Identifier "Screen0" Device "Card0" Monitor "Monitor0" DefaultDepth 24 SubSection "Display" Viewport 0 0 Depth 24 Modes "1024x768" EndSubSection EndSection .... `DefaultDepth` というキーワードは 実行時のデフォルトの色数について記述するためのものです。 man:Xorg[1] のコマンドラインスイッチ `-depth` が使用された場合はそちらが優先されます。 `Modes` というキーワードは、 与えられた色数におけるデフォルトの解像度を記述しておくためのものです。 ターゲットのシステムのグラフィックハードウェアによって定義されている、 VESA スタンダードモードのみがサポートされていることに注意してください。 上の例ではデフォルトの色数はピクセルあたり 24 ビットであり、 この色数での解像度は 1024 ピクセル× 768 ピクセルです。 最後に、設定ファイルを保存し、 上の例にあるようにテストしてみてください。 [NOTE] ==== トラブルシューティングの過程で助けとなるツールのひとつに Xorg のログファイルがあります。 これには、Xorg サーバが検知したデバイスそれぞれについての情報があります。 Xorg のログファイル名は [.filename]#/var/log/Xorg.0.log# という形式です。実際のログファイル名は [.filename]#Xorg.0.log# から [.filename]#Xorg.8.log# のように変わります。 ==== すべてうまくいったなら、設定ファイルを man:Xorg[1] が見つけることができる共通の場所に置きます。 これは、通常は [.filename]#/etc/X11/xorg.conf# や [.filename]#/usr/local/etc/X11/xorg.conf# です。 [source,shell] .... # cp xorg.conf.new /etc/X11/xorg.conf .... これで Xorg の設定は完了です。 man:startx[1] ユーティリティで Xorg を起動できます。 man:xdm[8] を使って Xorg サーバを起動することもできます。 === Intel(R) `i810` グラフィックチップセットの設定 Intel(R) i810 統合チップセットを設定するには、 Xorg にカードを制御させるために AGP プログラミングインタフェースである [.filename]#agpgart# が必要になります。 詳しくは、man:agp[4] ドライバのマニュアルページをご覧ください。 このドライバを用いることで、 他のグラフィックボードと同様に設定を行うことができるようになります。 カーネルに man:agp[4] ドライバが組み込まれていないシステムでは、 このモジュールを man:kldload[8] を使って読み込もうとしても動作しないことに注意してください。 このドライバは、 起動時にカーネル内に存在するようにカーネル内部に組み込むか、 [.filename]#/boot/loader.conf# を使わなければなりません。 === ワイドスクリーンフラットパネルの追加 この節では、設定に関する幾分高度な知識を必要とします。 これまでに述べた標準ツールを使って設定に失敗する場合は、 ログファイルを参照してください。 ログファイルには、 設定のために有用な情報が十分含まれています。 テキストエディタを使用する必要があるでしょう。 現在のワイドスクリーン (WSXGA, WSXGA+, WUXGA, WXGA, WXGA+ など) は、 16:10 や 10:9 形式、または (問題を含む可能性のある) 他のアスペクト比に対応しています。 以下は、16:10 アスペクト比のスクリーン解像度の例です。 * 2560x1600 * 1920x1200 * 1680x1050 * 1440x900 * 1280x800 これらの解像度のひとつを以下のように `"Screen" セクション` の 可能な `Mode` に追加してください。 [.programlisting] .... 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` を手動で設定するのに十分な情報を [.filename]#/var/log/Xorg.0.log# から得ることができます。 以下のような情報を探してください。 [.programlisting] .... (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` を作成するには、 正しい順番に数字を入力するだけです。 [.programlisting] .... ModeLine <4 horiz. timings> <4 vert. timings> .... この例では `Monitor セクション` の `ModeLine` は以下のようになります。 [.programlisting] .... Section "Monitor" Identifier "Monitor1" VendorName "Bigname" ModelName "BestModel" ModeLine "1680x1050" 146.2 1680 1784 1960 2240 1050 1053 1059 1089 Option "DPMS" EndSection .... 以上の簡単な編集作業が終わったら、 新しいワイドスクリーンモニタ上で X が動作するでしょう。 [[compiz-troubleshooting]] === Compiz Fusion 使用時のトラブルシューティング ==== Compiz Fusion をインストールし、説明されたようにコマンドを実行すると、 ウィンドウのタイトルバーやボタンが表示されません。 何が問題でしょうか? おそらく [.filename]#/etc/X11/xorg.conf# の設定が行われていていないのでしょう。 このファイルを詳細に確認してください。特に `DefaultDepth` および `AddARGBGLXVisuals` ディレクティブを確認してください。 ==== Compiz Fusion を起動するコマンドを実行すると、X サーバがクラッシュし、 コンソールに戻ります。何が問題でしょうか? [.filename]#/var/log/Xorg.0.log# ファイルを確認すると、 X の起動時のエラーメッセージを探し出すことができます。 多くの場合は、以下のようなものです。 [source,shell] .... (EE) NVIDIA(0): Failed to initialize the GLX module; please check in your X (EE) NVIDIA(0): log file that the GLX module has been loaded in your X (EE) NVIDIA(0): server, and that the module is the NVIDIA GLX module. If (EE) NVIDIA(0): you continue to encounter problems, Please try (EE) NVIDIA(0): reinstalling the NVIDIA driver. .... これは通常 Xorg をアップグレードした時に起きる現象です。 package:x11/nvidia-driver[] package をインストールして glx を再構築してください。 diff --git a/documentation/content/zh-tw/books/handbook/dtrace/_index.adoc b/documentation/content/zh-tw/books/handbook/dtrace/_index.adoc index 2b827a8698..6a00b45dd8 100644 --- a/documentation/content/zh-tw/books/handbook/dtrace/_index.adoc +++ b/documentation/content/zh-tw/books/handbook/dtrace/_index.adoc @@ -1,278 +1,277 @@ --- title: 章 24. DTrace part: 部 III. 系統管理 prev: books/handbook/cutting-edge next: books/handbook/usb-device-mode description: This chapter explains how to use DTrace in FreeBSD tags: ["DTrace", "features", "guide", "tutorial", "kldload"] showBookMenu: true weight: 30 path: "/books/handbook/dtrace/" -aliases: ["/en/books/handbook/dtrace-implementation/","/en/books/handbook/dtrace-enable/","/en/books/handbook/dtrace-using/"] --- [[dtrace]] = DTrace :doctype: book :toc: macro :toclevels: 1 :icons: font :sectnums: :sectnumlevels: 6 :sectnumoffset: 24 :partnums: :source-highlighter: rouge :experimental: :images-path: books/handbook/dtrace/ ifdef::env-beastie[] ifdef::backend-html5[] :imagesdir: ../../../../images/{images-path} endif::[] ifndef::book[] include::shared/authors.adoc[] include::shared/mirrors.adoc[] include::shared/releases.adoc[] include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists.adoc[] include::shared/{{% lang %}}/urls.adoc[] toc::[] endif::[] ifdef::backend-pdf,backend-epub3[] include::../../../../../shared/asciidoctor.adoc[] endif::[] endif::[] ifndef::env-beastie[] toc::[] include::../../../../../shared/asciidoctor.adoc[] endif::[] [[dtrace-synopsis]] == 概述 DTrace,又被稱作 Dynamic Tracing ,由 Sun(TM) 開發,用在生產 (production) 跟預生產 (pre-production) 系統中找出效能瓶頸的工具。 除了診斷性能問題外,DTrace 還可以用於查詢以及除錯 FreeBSD 核心和使用者層級程式的未預期行為。 DTrace 是一個卓越的分析工具,具有一系列令人驚豔、用於診斷系統問題的功能。 它還可以執行預先寫好的腳本,以使用其功能。 使用者可以用 DTrace D 語言編寫自己的工具,從而允許他們根據特定的需求客製化。 FreeBSD 實做提供對核心層級的 DTrace 全面的支援,以及對使用者層級的 DTrace 實驗性的支援。 使用者層級的 DTrace 允許使用者使用 `pid` 執行函式邊界追蹤 (function boundary tracing),並將 static probes 插入到使用者程式以供之後追蹤。 一些 ports,像是 package:databases/postgresql12-server[] 和 package:lang/php74[] 提供 DTrace 選項,以提供 static probes 功能。 DTrace 的官方指南由 Illumos 維護,在 https://illumos.org/books/dtrace/bookinfo.html[DTrace Guide]。 讀完這章,您將了解: * 什麼是 DTrace 以及其提供的功能。 * Solaris(TM) 實做的 DTrace 跟 FreeBSD 提供的 DTrace 之間的不同之處。 * 如何在 FreeBSD 上啟用和使用 DTrace。 在開始閱讀這章之前,您需要: * 了解 UNIX(TM) 及 FreeBSD 基礎 (crossref:basics[basics,FreeBSD 基礎])。 * 了解安全性以及其跟 FreeBSD 的關係 (crossref:security[security,安全性])。 [[dtrace-implementation]] == 實作差異 雖然 FreeBSD 的 DTrace 和 Solaris(TM) 的 DTrace 類似,但是還是有存在差異。 最重要的區別為,在 FreeBSD 中,DTrace 是作為一組核心模組 (kernel modules) 實做的,並且在載入模組之前無法使用。 要載入所有需要的模組: [source,shell] .... # kldload dtraceall .... 從 FreeBSD 10.0-RELEASE 之後,模組會在執行 `dtrace` 時自動載入。 FreeBSD 使用 `DDB_CTF` 核心選項來支援從核心模組和核心本身載入 `CTF` 資料。 `CTF` 是 Solaris(TM) Compact C Type Format,它封裝了一種簡化形式的除錯資訊,類似於 `DWARF` 和 古老的 stabs。 `CTF` 資料通過`ctfconvert` and `ctfmerge` 建構工具,加入到二進制文件中。 `ctfconvert` 工具分析編譯器創建的 `DWARF``ELF` 除錯部份,而 `ctfmerge` 將目標的 `CTF``ELF` 部份合併到執行檔或函式庫中。 與 Solaris(TM) 相比,FreeBSD 存在一些不同的 providers。 最值得注意的是 `dtmalloc` provider 允許在 FreeBSD 核心中按照類型 (type) 追蹤 `malloc()`。 Solaris(TM) 中的一些 providers,例如 `cpc` 和 `mib`,在 FreeBSD 中則不存在。 這些可能會在 FreeBSD 未來的版本中出現。 此外,兩個作業系統中一些可用的 providers 是不相容的,因為他們具有不同的參數類型。 因此,在 Solaris(TM) 上拓寫的 `D` 腳本在未經修改的情況下可能可以或不可以在 FreeBSD 上執行,反之亦然。 因為安全的差異,只有 `root` 可以在 FreeBSD 上使用 DTrace。 Solaris(TM) 擁有一些 FreeBSD 中還不存在的低階 (low level) 安全檢查。 因此 [.filename]#/dev/dtrace/dtrace# 被嚴格限制成 `root`。 DTrace 使用 Common Development and Distribution License (`CDDL`) 授權。 要在 FreeBSD 上查看此授權, 請參閱 [.filename]#/usr/src/cddl/contrib/opensolaris/OPENSOLARIS.LICENSE# 或者在 http://opensource.org/licenses/CDDL-1.0[http://opensource.org/licenses/CDDL-1.0] 線上查看。 雖然具有 DTrace 支援的 FreeBSD 核心使用 `BSD` 授權,但當模組使用二進制形式或者二進制文件發布時,將使用 `CDDL` 授權。 [[dtrace-enable]] == 開啟 DTrace 支援 在 FreeBSD 9.2 和 10.0 中,DTrace 內建於 [.filename]#GENERIC# 核心裡。 FreeBSD 早期版本的使用者或喜歡在 DTrace 支援下靜態編譯的使用者應加入下列幾行到客製化核心配置文件,並根據 crossref:kernelconfig[kernelconfig,Configuring the FreeBSD Kernel] 中的說明重新編譯核心: [.programlisting] .... options KDTRACE_HOOKS options DDB_CTF makeoptions DEBUG=-g makeoptions WITH_CTF=1 .... AMD64 架構的使用者應加入下列幾行: [.programlisting] .... options KDTRACE_FRAME .... 此選項提供對 `FBT` 的支援, 雖然 DTrace 可以在沒有此選項的情況下運作,但對函式邊界追蹤的支援有限。 一旦 FreeBSD 系統使用新的核心重新啟動,或者使用 `kldload dtraceall` 載入 DTrace 核心模組後,系統需要支援 Korn shell,因為 DTrace 工具箱有幾個用 `ksh` 拓寫的工具。 確保已經安裝 package:shells/ksh93[] 套件或者 port, 也可以在 package:shells/pdksh[] 或者 package:shells/mksh[] 下執行這些工具。 最後,安裝目前的 DTrace 工具箱,這是一組用於收集系統資訊的現成腳本, 有一些腳本可以檢查打開的文件、記憶體、`CPU` 使用情況等等。 FreeBSD 10 將其中一些腳本安裝在 [.filename]#/usr/share/dtrace# 中。 在其他 FreeBSD 的版本中,要安裝 DTrace 工具箱,請使用 package:sysutils/dtrace-toolkit[] 套件或者 port。 [NOTE] ==== [.filename]#/usr/share/dtrace# 中的腳本已專門移植到 FreeBSD, 並非所有在 DTrace 工具箱中的所有腳本都能在 FreeBSD 上按照原樣運作,一些腳本可能需要一些修改才能在 FreeBSD 上運作。 ==== DTrace 工具箱包含許多使用 DTrace 特殊語言的腳本, 這種語言被稱為 D 語言,它與 C++ 非常類似, 對於該語言的深度討論超出了此文件的範圍, 他在 http://www.dtrace.org/guide[Illumos Dynamic Tracing Guide] 有廣泛的介紹。 [[dtrace-using]] == 使用 DTrace DTrace 腳本由一個或多個 _probes_ 或檢查點 (instrumentation points) 的列表組成,其中每個 probe 都與一個行為有關, 只要能滿足 probe 的條件,就會執行相關的行為, 舉例來說,打開文件、啟動一個行程或執行一行程式。 該行為可能是紀錄一些資訊,或修改上下文變數 (context variables), 上下文變數的讀寫允許 probes 分享資訊和共同分析不同事件的相關性。 想要查看所有的 probes,系統管理員可以執行以下指令: [source,shell] .... # dtrace -l | more .... 每個 probe 都有一個 `ID`、一個 `PROVIDER` (dtrace 或者 fbt)、一個 `MODULE` 和一個 `FUNCTION NAME`。 有關此指令的更多資訊,請參閱 man:dtrace[1]。 本節中的例子概述如何使用 DTrace 工具箱中完全支援的兩個腳本: [.filename]#hotkernel# 和 [.filename]#procsystime# 腳本。 [.filename]#hotkernel# 腳本設計成觀察哪個函式使用的核心時間最多, 它會產生類似於以下內容的輸出: [source,shell] .... # cd /usr/local/share/dtrace-toolkit # ./hotkernel Sampling... Hit Ctrl-C to end. .... 按照說明,使用 kbd:[Ctrl+C] 組合鍵停止行程, 中止後,腳本將顯示一整列的核心函式和時間資訊,按照時間遞增排序: [source,shell] .... kernel`_thread_lock_flags 2 0.0% 0xc1097063 2 0.0% kernel`sched_userret 2 0.0% kernel`kern_select 2 0.0% kernel`generic_copyin 3 0.0% kernel`_mtx_assert 3 0.0% kernel`vm_fault 3 0.0% kernel`sopoll_generic 3 0.0% kernel`fixup_filename 4 0.0% kernel`_isitmyx 4 0.0% kernel`find_instance 4 0.0% kernel`_mtx_unlock_flags 5 0.0% kernel`syscall 5 0.0% kernel`DELAY 5 0.0% 0xc108a253 6 0.0% kernel`witness_lock 7 0.0% kernel`read_aux_data_no_wait 7 0.0% kernel`Xint0x80_syscall 7 0.0% kernel`witness_checkorder 7 0.0% kernel`sse2_pagezero 8 0.0% kernel`strncmp 9 0.0% kernel`spinlock_exit 10 0.0% kernel`_mtx_lock_flags 11 0.0% kernel`witness_unlock 15 0.0% kernel`sched_idletd 137 0.3% 0xc10981a5 42139 99.3% .... 此腳本也是用於核心模組, 要使用此功能,請使用 `-m` 執行腳本: [source,shell] .... # ./hotkernel -m Sampling... Hit Ctrl-C to end. ^C MODULE COUNT PCNT 0xc107882e 1 0.0% 0xc10e6aa4 1 0.0% 0xc1076983 1 0.0% 0xc109708a 1 0.0% 0xc1075a5d 1 0.0% 0xc1077325 1 0.0% 0xc108a245 1 0.0% 0xc107730d 1 0.0% 0xc1097063 2 0.0% 0xc108a253 73 0.0% kernel 874 0.4% 0xc10981a5 213781 99.6% .... [.filename]#procsystime# 抓取和輸出系統調用時間,給設定行程 ID (PID) 或行程名稱的行程。 在以下的例子中,生成了 [.filename]#/bin/csh# 新物件, 然後,[.filename]#procsystime# 被執行並一直等待,同時在 `csh` 的另一個化身上輸入一些指令, 以下是本次測試的結果: [source,shell] .... # ./procsystime -n csh Tracing... Hit Ctrl-C to end... ^C Elapsed Times for processes csh, SYSCALL TIME (ns) getpid 6131 sigreturn 8121 close 19127 fcntl 19959 dup 26955 setpgid 28070 stat 31899 setitimer 40938 wait4 62717 sigaction 67372 sigprocmask 119091 gettimeofday 183710 write 263242 execve 492547 ioctl 770073 vfork 3258923 sigsuspend 6985124 read 3988049784 .... 如圖所示,`read()` 系統調用使用的時間最多(以奈秒為單位),而 `getpid()` 系統調用使用的時間最少。