Gentoo Linux AMD64 ハンドブック
目次:
-
Gentooをインストールする
ここではGentooをシステムにインストールする方法を説明します。
-
Gentoo Linuxのインストールについて
ここではGentooをシステムにインストールする方法を説明します。
-
適切なインストールメディアの選択
いろいろな方法でGentooをインストールできます。Universal インストールCDは同様にインストールに使用できますが、この章ではminimal インストールCDを使ってGentooをインストールする方法を説明します。
-
ネットワーク設定
最新のソースコードをダウンロードするために、
ネットワークの設定をする必要があります。
-
ディスクの準備
Gentooをインストールするには、そのために必要なパーティションを作成する必要があります。
この章では、後で必要となるパーティションを作成する方法を説明します。
-
Gentooインストールファイルをインストールする
Gentooのインストールは、stage3アーカイブファイルを使って行います。
この章では、stage3ファイルの解凍方法とPortageの設定を説明します。
-
Gentooベースシステムのインストール
stage3のインストールと設定の後、最後には望みどおりのGentooベースシステムが手に入ります。
この章では、Gentooベースシステムを手に入れるまでの方法を説明します。
-
カーネル設定
全ディストリビューションの構成の核をなすのは、Linuxカーネルです。
この章では、カーネルの設定方法について説明します。
-
システム設定
いくつかの重要な設定ファイルを編集しなければなりません。
この章では、これらの重要なファイルの概要や、どのように設定を進めていくかがわかります。
-
必要なシステムツールをインストールする
以前に説明したとおり、選択できることこそがGentooです。
この章では、いくつかの重要なツールをどのように選択し、インストールするかを説明します。
-
ブートローダを設定する
この章では、GRUBブートローダの説明とあなたの要求に合わせたGRUBブートローダ設定
方法を順を追って説明します。
-
Gentooインストールの締めくくり
これでほぼ完了です。一つ(または複数)のユーザを作成しましょう。
-
これからどうすればいいの?
Gentooシステムは完成しましたが、次は何をすればいいのでしょう?
-
Gentooを使いこなす
Gentooの使いこなし方を説明します。主にソフトウェアのインストール、変数の変更、
Portageの動作に関する変更などです。
-
Portageについて
この章では、システム上のソフトウェアを整備するために絶対に知っておかなければならないことを、"簡単な"手順で説明します。
-
USEフラグ
USEフラグは、Gentooにおいて大変重要な概念です。この章ではUSEフラグをどのように使うか、
USEフラグがシステムにどういう影響を及ぼすかについて説明します。
-
Portageの機能
分散コンパイルやccacheを使用したコンパイルのサポートなど、Portageが備える隠れた機能を発見するでしょう。
-
initスクリプト
Gentooは特有のinitスクリプトを採用しています。それは、数ある機能の中でも特に、
依存関係による判定や仮想initスクリプトを可能にします。この章では、これら全ての特徴や、
スクリプトの扱い方について説明します。
-
環境変数
Gentooでは、システムの環境変数を簡単に管理することができます。
この章では、環境変数の管理の仕方や、よく使われる環境変数について説明します。
-
Portageを使いこなす
"Portageを使いこなす"では、Gentooのソフトウェア管理ツールとしてのPortageに徹底的に踏み込んだ内容を扱います。
-
ファイルとディレクトリ
Portageを詳細に知りたいならば、そのファイルとデータがどこに保存されているか知らなければなりません。
-
変数による設定
Portageは、設定ファイルや環境変数で設定したさまざまな変数を通して完全に調整可能です。
-
ソフトウェアのブランチを併用する
Gentooは、安定性や、アーキテクチャごとのサポート状況といった情報を元に、
ソフトウェアを複数のブランチに分けて提供しています。
"ソフトウェアのブランチを併用する"では、このブランチはどう設定できるのか、
また個々の設定をどうやってユーザーが上書きするかについて説明します。
-
追加のPortageツール
Portageには、Gentoo環境をより良くする拡張ツールがいくつか付属しています。
dispatch-confやその他のツールを使う方法を理解するために読んでください。
-
オフィシャルツリーの活用
"オフィシャルツリーの活用"では、Portageツリーの使い方におけるいくつかの便利な小技や、必要なカテゴリだけをシンクロさせる方法、パッケージを挿入する方法など、を伝授します。
-
ebuildアプリケーション
"ebuildアプリケーション"では、Portageがソフトウェアをインストールする行程を説明し、
あなた自身でebuildアプリケーションを使用して同じことをする方法を説明します。
-
Gentooネットワーク設定
Gentooにおけるネットワークの総合手引き書です。
-
はじめに
最も一般的な環境でネットワークに素早く接続し、稼働させるためのガイドです。
-
高度な設定
ここではどのように設定するかを学びます。個別のネットワークより先に学ぶ必要があります。
-
個別ネットワーク
Gentooは柔軟なネットワーク構成を提供しています。ここでは異なるDHCPクライアントの選び方や関連づけ、ブリッジ、VLANなどのセットアップについてお話しします。
-
無線ネットワーク
無線設定は簡単ではありません。この説明で無事に動きますように。
-
機能の追加
冒険してみたいなら、ネットワークに機能追加することで味わえます。
-
ネットワーク管理
ノートPCユーザや異なるネットワークにコンピュータを接続する人向けのお話です。
A. Gentooをインストールする
1. Gentoo Linuxのインストールについて
1.a. はじめに
ようこそ!
Gentooへようこそ。あなたは選択の自由とパフォーマンスの追求を
許された世界に足を踏み入れようとしています。Gentooとは選択です。
Gentooをインストールするとき、あなたはこの事実に何度か向き合うことになります。
どのくらい自分でコンパイルするのか、どのようにGentooをインストールするのか、
どのシステムロガーを使うのか、といったことをあなたが自分で決めるのです。
Gentooはシンプル、かつフレキシブルにデザインされた、
速くて先進的なメタディストリビューションです。
Gentooはディストリビューションとしてフリーソフトウェア
(訳註: フリーではないものもあります)の上に覆い被さっていますが、
それをユーザーから覆い隠すようなことはしません。
Portage、これはGentooの使うパッケージ管理システムですが、
誰もが簡単にソースコードを見たり変更したりできるように、
Pythonで書かれています。
Gentooのパッケージングシステムはソースコードを使いますし
(とはいえ、コンパイル済みパッケージのサポートもあります)、
Gentooの設定も通常のテキストファイルを通して行なわれます。
一言でいえば「Openness Everywhere」です。
選択がGentooを動かすのであって、Gentooが選択させるのではない、
ということを理解する事はとても重要です。
私たちは、あなたにあなたの望まないことを強いることのないよう、
十分気を付けています。もし、私たちがそうしていると感じたら、それをバグ報告してください。
インストールの流れはどんな感じ?
Gentooのインストールは、2章から11章に対応した、
10段階の手順に分けることができます。
それぞれの段階を終えたときの状態は、以下の通りです。
-
1段階終了、Gentooをインストールするための作業環境の構築が完了
-
2段階終了、Gentooをインストールするためのインターネット接続の準備が完了
-
3段階終了、ハードディスクにGentooをインストールする準備が完了
-
4段階終了、インストール環境の準備が完了、インストールする環境にchroot
-
5段階終了、コアパッケージ(全てのGentooインストールで共通)のインストールが完了
-
6段階終了、Linuxカーネルのコンパイルが完了
-
7段階終了、Gentooシステムの主要な設定ファイルの編集が完了
-
8段階終了、必要なシステムツール(推奨リストから選択可)のインストールが完了
-
9段階終了、選択したブートローダーのインストールと設定が完了、
新しいGentooシステムにログイン
-
10段階終了、Gentoo Linux環境を探検する準備が完了
選択肢を提示するときには、
それぞれの良い点と悪い点について説明するようにしています。
そのあとで、タイトルに"一般的な選択:"と明記された、
一般的な選択肢を提示します。
その他の選択肢には"もう一つの選択:"と記されています。
一般的な選択を私たちが推奨しているとは考えないでください。
それは私たちが、大多数のユーザーが選択すると考えている選択肢です。
ある場面では任意的な段階を挟むこともできます。
そのような段階には"自由選択:"と記されています。
任意選択ですのでGentooのインストールに絶対必要なものではありません。
その中には事前の決定の影響を受けるものもあります。
そのようなときは、その決定時とその段階の説明直前の双方で、
そのことについての説明があります。
どんなことを選べるの?
Gentooは様々な方法でインストールできます。私たちのインストールCDや、
インストール済みのデストリビューション、起動可能なCD(Knoppixなど)、
ネットワークブート環境、緊急用フロッピー、
といったものの中から適当なものを適宜ダウンロードして、
そこからインストールすることができます。
この文書ではGentooインストールCDを使ったインストールと、一部、
ネットワークブートを扱います。ここでは個々のパッケージについて、
最新バージョンをインストールするものとして話が進められています。
ネットワークレス・インストールを行ないたい場合は、
ネットワークレス環境でのインストール方法が載っているGentoo 2008.0 ハンドブック(英語)をご覧ください。
また、GRP (Gentoo Reference Platform、コンパイル済みパッケージのコレクション。
Gentooインストールの終了と同時にシステムを使えるようにするためのもの)
を利用しようと考えている場合は必ず、Gentoo 2008.0 ハンドブック
の指示に従うようにしてください。
その他のインストール手段については、
Alternative Installation Guide
(日本語訳)をご覧ください。
Gentoo Installation Tips &
Tricks(日本語訳)という文書も参考になるでしょう。
そのインストールの説明が細か過ぎると感じたときは、
Documentation Resources(日本語訳)にある
Quick Installation Guideを試してみてください
(あなたのアーキテクチャにそのような文書があれば)。
選べることはまだあります。
システム全体をスクラッチからコンパイルすることもできますし、
コンパイル済み環境を利用して、Gentoo環境をすぐに立ち上げることもできます。
もちろんその中間の方法として、全てをコンパイルするのではなく、
半分出来上がった状態のシステムからコンパイルを始めることもできます。
トラブル?
インストール中に(またはインストール文書に)何か問題を見つけたら、
バグ・トラッキング・システム(訳注:日本ユーザ会bugzilla)で
既知のバグとして報告されていないかどうか、確認してみてください。
もし無いようであれば、私たちが対応できるように、その問題をバグ報告してください。
その(あなたが報告した)バグを担当する開発者たちを恐れないでください。
取って喰われるようなことは滅多にありませんから。
あなたが今読んでいる文書は、特定のアーキテクチャ向けということになっていますが、
他のアーキテクチャの情報も、その中に紛れ込んでしまっているかもしれない、
ということを一応、先に言っておきます。これはGentooハンドブックの多くの部分が、
全てのアーキテクチャに共通のソースコードを使用していることに因ります
(重複作業を減らして開発リソースを節約するため)。
混乱しないように、このような部分は最小限に抑えていきたいと思っています。
その問題が、ユーザーの問題(文書をよく読んだにもかかわらず起きたあなたのミス)なのか、
ソフトウェアの問題(インストール/文書をよくテストしたにもかかわらず起きた私たちのミス)なのか、
はっきりしないときには、irc.freenode.netの#gentooに気軽に参加してみてください。
もちろん、そんなときじゃなくても全然かまいません :)
Gentooについて何か分からないことがあったら、
Gentoo Documentation
(日本語訳)の
Frequently Asked Questions
(日本語訳)や、
フォーラムの
FAQsを見てください。
そこで解決できないときは、irc.freenode.netにある私たちのIRCチャンネル、
#gentoo(訳注:GentooJPのチャネル #gentoo-jaもあります)で質問してください。誰もいなかったら?
ご安心ください、私たちのうちの何人かはIRC常駐フリークです :-)
2. 適切なインストールメディアの選択
2.a. ハードウェア要件
はじめに
始める前に、まず最初にGentooをうまくインストールするために必要なハードウェア要件は、何であるかを示します。
ハードウェア要件
| CPU |
AMD64 CPU* |
| メモリ |
64 MB |
| ディスク容量 |
1.5 GB (スワップ領域を除く) |
| スワップ領域 |
最低 256 MB |
Gentoo AMD64 Project Pageも、始める前に参照してください。
2.b. GentooインストールCD
はじめに
GentooのインストールCDは、それだけで自立したGentoo環境を含むブート可能CDです。
そのCDからLinuxを起動できます。ブート中にあなたのハードウェアが検知され、適切なドライバがロードされます。
これらのインストールCDは、Gentoo開発者によってメンテナンスされています。
すべてのインストールCDはブートし、ネットワークをセットアップし、パーティションを初期化し、そして、インターネットからGentooインストールを開始することができます。
現在のところ二つのインストールCDを提供しています。
利用できるパッケージの最新バージョンを使用してインターネット経由でGentooをインストールすることを考えているならば、この二つのインストールCDは同様に適しています。
有効なインターネット接続なしでGentooをインストールしたいなら、Gentoo 2006.0 Handbooks(英語)で記述されているインストール手順を使用してください。
現在のところ、以下の二つのインストールCDを提供しています。
-
Gentoo MinimalインストールCD。システムをブートしネットワーク接続を準備し、Gentooのインストールを続行することを唯一の目的とする、小さく実用的なブート可能CDです。
-
Gentoo UniversalインストールCD。MinimalインストールCDと同様の機能をもつブート可能CDです。加えて、(個々のサブアーキテクチャに最適化された)いくつかのstage3圧縮アーカイブファイルが含まれています。
どちらのインストールCDが必要であるかを判断しやすくするために、それぞれのインストールCDの主要な長所と短所を記載しました。
GentooのMinimalインストールCD
MinimalインストールCDは、install-amd64-minimal-2006.0.isoというファイル名で、ディスク容量は45MBだけしか占有しません。Gentooをインストールするために、このインストールCDを使用できますが、常時接続のインターネット環境がある場合だけです。
| MinimalインストールCD |
長所と短所 |
| + |
最小なのでダウンロードに時間がかかりません |
| - |
stage3 tarballファイル、Portageスナップショット、構築済みパッケージを一つも含まないので、ネットワークなしでインストールするには適していません
|
GentooのUniversalインストールCD
UniversalインストールCDは、install-amd64-universal-2006.0.isoというファイル名で、401MBのCD領域を使います。
Gentooをインストールするために、このインストールCDを使用できます。インターネット接続なしでGentooをインストールするのにも使用できます。
他のPCにインストールしたくなったときにも使えますよ。:-)
| UniversalインストールCD |
長所と短所 |
| + |
インストールに必要となる全てが含まれています。ネットワーク接続なしでもインストールできます。
|
| - |
非常に大きいのでダウンロードに時間がかかります |
その他のCD
ミラーサイトのうちの一つで、パッケージCDを見つけるかもしれません。
このCDは、インストールCDではありませんが、ネットワークなしでインストールしている時に利用できる追加のリソースです。
ネットワークなしでGentooをインストールした後すぐに、追加のアプリケーション(OpenOffice.org、KDE、GNOME、など)を簡単に手早くインストールできる構築済みパッケージ(いわゆるGRPのセット)が含まれています。
もし、パッケージCDを用いて追加のソフトウェアを、手早くインストールつもりであれば、ご使用になるstage3 tarballと同じサブアーキテクチャを同じものを使ってください。
The Stage3 Tarball
Stage3 tarballとは、このマニュアルに記載されている指示にしたがってGentooをインストールのに
適した最小のGentoo環境を含むアーカイブです。
これまで、Gentoo Handbookは、3つのstage tarballのうちの一つを選択するように説明していました。
Gentooは、まだstage1とstage2 tarballを提供してはいますが、公式なインストール方法はstage3 tarballを用いたものになります。
もし、あなたがstage1もしくはstage2 tarballを使用してGentooをインストール方法に興味があるならば、Gentoo FAQのHow do I Install Gentoo
Using a Stage1 or Stage2 Tarball?を呼んでください。
2.c. GentooインストールCDをダウンロードして、CDに焼いて、ブートします
インストールCDをダウンロードしてCDに焼く
使用するGentooインストールCDを選択します。まず選んだインストールCDをダウンロードしてCDに焼くことから開始します。
何種類かのインストールCDについて既にお話しましたが、それらはどこにあるのでしょうか?。
ミラーサイトの中の一つから好きなインストールCD(と、望むなら同様にパッケージCD)をダウンロードできます。
(訳注: 日本で利用できるミラーサイトを以下に抜粋します。)
mirror.gentoo.gr.jp (Japan)
gg3.net (Japan)
gg3.net (Japan/ftp)
University of Tokyo (Japan/ftp)
インストールCDはreleases/amd64/2006.0/installcdディレクトリにあります。
そのディレクトリ内には、ISOファイルがあります。CD-Rに焼くことができる完全なCDイメージです。
ダウンロードしたファイルが壊れているかも?と心配な場合は、ダウンロードしたファイルのMD5チェックサムをチェックし、私たちが提供するもの(install-amd64-minimal-2006.0.iso.md5のようなファイル)と比較します。Linux/Unixのmd5sumツールか、Windows用のmd5sumでMD5チェックサムをチェックできます。
ダウンロードしたファイルの正当性をチェックする別の方法は、私たちが提供する暗号化シグネチャ(.ascで終わるファイル)を確認するためにGnuPGを使用することです。以下のようにしてシグネチャファイルをダウンロードして、公開キーを取得してください。
コード表示 3.1: 公開キーの取得 |
$ gpg --keyserver subkeys.pgp.net --recv-keys 17072058
|
では、以下のようにしてシグネチャを確認してください。
コード表示 3.2: 暗号化シグネチャの確認 |
$ gpg --verify <signature file> <downloaded iso>
|
ダウンロードしたISOファイルをCDに焼くために、ロー(raw)モードを選んでください。
その方法は、使用するライタプログラム毎にまったく異なります。
ここではcdrecordとK3Bについてお話します。より詳細な情報は、Gentoo FAQ(日本語訳)で見つかります。
-
cdrecordを用いる場合、単にcdrecord dev=/dev/hdc <ダウンロードしたISOファイル>を入力します。
(/dev/hdcをあなたのCD-RWドライブのデバイスパスで置き換えてください)
-
K3Bを用いる場合、メニューのTools > CD > Burn Imageを選択してください。
次に'Image to Burn'エリアにISOファイルを選びます。最後にStartボタンを押します。
(訳注: 日本語化されたK3Bの場合、メニューのツール > CD > CDイメージを書き込むを選択してください。
次に'書き込むイメージ'エリアにISOファイルを選びます。最後に開始ボタンを押します。)
インストールCDからのブート
インストールCDが焼きあがってしまったら、さぁそれをブートしましょう。
CDドライブから全てのCDを取り出し、システムをリブートしてBIOSに入ります。
入る方法は、BIOSの種類毎に異なり、通常はDELかF1かESCキーを押します。
ハードディスクより前にCD-ROMからブートが試行されるように、BIOSでブート順を変更してください。
この設定は、だいたい"CMOS Setup"で見つかります。
こうしないと、CD-ROMは無視されてハードディスクからリブートされてしまうでしょう。
では、CD-ROMドライブにインストールCDを入れて(そんなの当たり前だけど)、リブートしてください。
ブートプロンプトが現れるはずです。
このスクリーンでは、デフォルトのブートオプションでブートプロセスを開始するためにEnterキーを押すか、ブートオプションを続けてカーネルを指定することによって、カスタムブートオプションでインストールCDをブートします。
カーネルを指定するって?はい、そうです。私たちは何種類かのカーネルをインストールCDに収めています。
デフォルトはgentooです。
他には、特定のハードウェア向けのものや、フレームバッファを無効にした-nofb版があります。
利用可能なカーネルの概要を以下に示します。
| カーネル |
説明 |
| gentoo |
デフォルトのK8 CPUとNUMAサポートありのカーネル |
カーネルオプションも指定できます。それらは、好きなように有効(無効)にできるオプション設定です。
以下のリストはブートスクリーンでF2キーを押したときに表示されるものと同じものです。
(訳注: ブートスクリーンでF2キーを押すと、英語で表示されますが、ここでは、日本語訳を示してあります。)
コード表示 3.3: カーネルに渡すことができるオプション |
- agpgart agpgartモジュールをロードします(グラフィックの問題、ロックアップなどがあるなら使用してください)
- acpi=on ACPIファームウェアサポートをロードします
- ide=nodma うまく作動しないIDEデバイスのためにDMAを強制的に無効にします
- doscsi SCSIデバイスをスキャンします(動かなくなるイーサネットカードもあります)
- dopcmcia PCMCIA接続のCD-ROMドライブ用にpcmciaサービスを開始します
- nofirewire initrdでfirewireモジュールを無効にします(firewire(IEEE1394)接続のCD-ROMドライブなどを使用する場合向け)
- nokeymap 非USキーボード配列のキーマップ選択を無効にします
- docache 実行時に必要なCDの一部をメモリ上に全てキャッシュし、umount /mnt/cdromをして、別のCD-ROMをマウントできるようにします
- nodetect hwsetup/kudzuとhotplugを実行しないようになります
- nousb initrdでのusbモジュールのロードとhotplugを無効にします
- nodhcp ネットワークカードが検出されてもDHCPを自動起動しません
- nohotplug hotplugサービスをロードしません
- noapic APICを無効にします(ネットワークカード、SCSIカードのようなハードウェアの問題があるなら、試してください)
- noevms EVMS2モジュールのロードをしません
- nolvm2 LVM2モジュールのロードをしません
- hdx=stroke (smp/smp-nofbカーネルのみに有効)BIOSが大きなハードディスクを扱えなくてもハードディスク全部をパーティションで区切ることができます
- noload=module1,[module2,[...]]
特定のカーネルモジュールのロードをしないようにします
|
では、CDをブートしましょう。(デフォルトのgentooカーネルでは嬉しくないなら)カーネルとブートオプションを選択してください。
例として、カーネルパラメータにdopcmciaを指定してgentooカーネルをブートする方法を示します。
コード表示 3.4: インストールCDのブート |
boot: gentoo dopcmcia
|
その後、別のブートスクリーンやプログレスバーに出迎えられます。
非USキーボードが接続されているシステムにGentooをインストールしているなら、詳細モードに切り替えるために、すぐにAlt-F1キーを押して、プロンプト上の指示に従ってください。10秒以内に何も選択しなければ、デフォルト(USキーボード)が選択されたこととされ、ブートプロセスが続行します。ブートプロセスが完了すると、スーパーユーザの"root"ユーザとして"Live" Gentoo Linuxに自動的にログインされます。コンソール上にrootユーザのプロンプト("#")が表示されるはずです。そしてAlt-F2やAlt-F3やAlt-F4を押すことによって別のコンソールに切り替えることもできます。Alt-F1で最初のコンソールに戻ります。
では、追加のハードウェア設定に進んでください。
追加のハードウェア設定
インストールCDがブートするときに、全てのハードウェアデバイスを検出し、そのハードウェアをサポートする適切なカーネルモジュールをロードしようとします。
それは、大抵の場合、とてもうまく機能します。しかし、ときには必要とするカーネルモジュールを自動でロードしないかもしれません。
PCI自動検出機能がシステムのハードウェアの一部を見逃してしまったら、手動で適切なカーネルモジュールをロードしなければなりません。
次の例では(ネットワークインターフェースのある種類をサポートする)8139tooモジュールをロードしてみています。
コード表示 3.5: カーネルモジュールのロード |
# modprobe 8139too
|
PCMCIAをサポートする必要があるなら、以下のようにpcmcia initスクリプトを起動してください。
コード表示 3.6: PCMCIA initスクリプトの起動 |
# /etc/init.d/pcmcia start
|
自由選択: ハードディスク性能の調整
あなたが上級者なら、IDEハードディスクの性能をhdparmコマンドを使用して調整したいかもしれません。
以下のように-tTオプションを付けてディスクの性能をテストできます。(より正確な結果を得るためにそれを数回実行します)
コード表示 3.7: ディスク性能のテスト |
# hdparm -tT /dev/hda
|
調整するには、ディスクに/dev/hda(あなたのディスクで置き換えてください)を使用した以下の例(もしくは、あなた自身の経験)を使用します。
コード表示 3.8: ハードディスク性能の調整 |
# hdparm -d 1 /dev/hda
# hdparm -d 1 -A 1 -m 16 -u 1 -a 64 /dev/hda
|
自由選択: ユーザアカウント
インストール用の環境にあなた以外の人にアクセス権を与える予定があるか、(セキュリティ上の理由により)root権限なしでirssiIRCクライアントを使ってチャットしたいなら、必要なユーザアカウントを作成し、rootパスワードを変更する必要があります。
rootパスワードを変更するには、以下のようにpasswdユーティリティを使用してください。
コード表示 3.9: rootパスワードの変更 |
# passwd
New password:
Re-enter password:
|
ユーザアカウントを作成するには、最初にユーザを作成して、次にパスワードを設定します。
この作業にはuseraddコマンドとpasswdコマンドを使用します。
次の例では、"john"というユーザを作成します。
コード表示 3.10: ユーザアカウントの作成 |
# useradd -m -G users john
# passwd john
New password:
Re-enter password:
|
以下のようにして、suコマンドを使用してrootユーザから新しく作成したユーザにユーザIDを変更できます。
コード表示 3.11: ユーザIDを変更 |
# su - john
|
自由選択: インストール中にドキュメントを表示する
インストールしている間にGentooハンドブック(CDからかオンラインからかのどちらか)を表示したい場合、ユーザアカウントを作成してあるかを確認してください。
(自由選択: ユーザアカウントを参照)その後、新しい端末に移るためにAlt-F2を押して、そこでログインしてください。
CDにある文書を表示したいなら、以下のようにlinksコマンドをすぐに実行できます。
コード表示 3.12: CD上のドキュメントの表示 |
# links /mnt/cdrom/docs/handbook/html/index.html
|
しかし、オンラインのGentooハンドブックは、CDで提供されるものよりも新しいので、そちらを使用する方が好まれます。
ネットワーク設定の章を完全に終了した後なら(そうしないと、文書を表示するためにインターネットに接続できないでしょう)、以下のように同様にlinksを使用して表示できます。
コード表示 3.13: オンラインドキュメントの表示 |
# links http://www.gentoo.org/doc/en/handbook/handbook-amd64.xml
|
Alt-F1を押すことで、もとの端末に戻ることができます。
自由選択: SSHデーモンの起動
Gentooをインストールしている間に、他のユーザに(おそらくそのユーザは、Gentooをインストールする手伝いをするか、あなたのためにそれと同様のことをするという理由で)コンピュータへアクセスすることを許可したいなら、ユーザアカウントを作成し、(そのユーザを完全に信用できる場合だけ)おそらくrootパスワードを与える必要もあります。
SSHデーモンを起動するには、以下のコマンドを実行してください。
コード表示 3.14: SSHデーモンの起動 |
# /etc/init.d/sshd start
|
sshdを使用できるようにするためには、まずネットワークをセットアップする必要があります。
ネットワーク設定の章に進んでください。
3. ネットワーク設定
3.a. 自動的なネットワークの検知
動いているかも?
もしあなたのシステムがDHCPサーバを備えたEthernetネットワークに接続されているなら、おそらく、既にネットワーク設定は自動的に完了しているでしょう。
その場合には、LiveCD内のネットーワークが必要な各種コマンド(
ssh、scp、 ping、 irssi、 wget、links
など)を使うことができるでしょう。
また、ネットワークが設定されている場合には、/sbin/ifconfigコマンドで、
loインターフェースと並んで、たとえばeth0のようにリストされるはずです。
コード表示 1.1: 動作中のネットワークのための/sbin/ifconfigコマンド |
# /sbin/ifconfig
eth0 Link encap:Ethernet HWaddr 00:50:BA:8F:61:7A
inet addr:192.168.0.2 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::50:ba8f:617a/10 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1498792 errors:0 dropped:0 overruns:0 frame:0
TX packets:1284980 errors:0 dropped:0 overruns:0 carrier:0
collisions:1984 txqueuelen:100
RX bytes:485691215 (463.1 Mb) TX bytes:123951388 (118.2 Mb)
Interrupt:11 Base address:0xe800
|
自由選択: proxyの設定
インターネット接続にproxyを使用している場合には、
インストール中にproxy情報について設定する必要があるかもしれません。
proxyの設定はとても簡単です。
proxyサーバーの情報を含むように値を設定するだけです。
多くの場合、proxyサーバーのホスト名を変数として定義するだけです。
例として、proxy.gentoo.orgというサーバーにport 8080で接続するとしましょう。
コード表示 1.2: proxyサーバーの定義 |
# export http_proxy="http://proxy.gentoo.org:8080"
# export ftp_proxy="ftp://proxy.gentoo.org:8080"
# export RSYNC_PROXY="proxy.gentoo.org:8080"
|
proxyがユーザ名やパスワードを必要とするなら、次の文法で値を定義する必要があります。
コード表示 1.3: proxy変数にユーザ名/パスワードを追加 |
http://username:password@proxy.gentoo.org:8080
|
ネットワークのテスト
パケットがインターネットに届いているか、
DNSで名前が正しく解決できるか、といったことを確認するために、
プロバイダのDNSサーバー(/etc/resolv.confに書かれている)
やWebサイトにpingをしましょう。
コード表示 1.4: さらにネットワークのテスト |
# ping -c 3 www.gentoo.org
|
この時点でネットワークを使えているならば、残りのセクションを飛ばしてディスクの準備から続けることができます。
もし使えていないなら、この次へ進んでください。
3.b. 自動でのネットワーク設定
ネットワークが動いていない場合には、
いくつかのインストールメディアではnet-setup(通常のネットワーク用)や、
pppoe-setup(ADSLユーザー用)、pptp (PPTPユーザー用-x86、amd64、
alpha、ppc、そしてppc64で利用可能)が使用できます。
もしインストールメディアにそのツールが含まれていなかったり、
ネットワークがそれでも動かなかったら、
手動でのネットワークの設定
から続けてください。
一般的な選択: net-setupの使用
もし自動でネットワークが設定されなかった場合に、
一番単純に設定を行なう方法はnet-setupスクリプトを実行することです。
コード表示 2.1: net-setupスクリプトの起動 |
# net-setup eth0
|
net-setupはネットワーク環境に対するいくつかの質問をします。
すべての質問が終わったときに、ネットワーク接続ができているはずです。
確認のために上に書いたネットワークのテストを行なってください。
もしそのテストがいい結果なら、おめでとう!
Gentooをインストールする準備ができました。
残りのセクションを飛ばして
ディスクの準備
へ行ってください。
まだネットワークが接続されていないのなら、手動でのネットワークの設定から続けてください。
もう一つの選択: PPPの使用
インターネットに接続するためにPPPoEが必要な環境のために、
インストールCD(どのバージョンでも)には、その接続を簡単にするためのppp
が含まれています。
それに付属しているpppoe-setupスクリプトを接続を設定するために使用してください。
そして、
ADSLモデムに接続されたEthernetデバイス用に、ユーザ名、パスワード、
DNSサーバーのIPアドレス、基本的なファイアウォールが必要か否かを入力します。
コード表示 2.2: pppを使用する |
# pppoe-setup
# pppoe-start
|
もし何かがうまくいかなかったら、
ユーザ名とパスワードを正しく入力したかどうかを、
/etc/ppp/pap-secretsまたは
/etc/ppp/chap-secretsを見て再確認してください。
また、正しいEthernetデバイスを使用していることも確認しください。
もし、Ethernetデバイスが存在しない場合には、
適切なネットワークモジュールを読み込む必要があります。
この場合には、適切なモジュールを読み込む方法を説明している
手動でのネットワークの設定
から続けてください。
ネットワークが動いたら、ディスクの準備へ行ってください。
もう一つの選択: PPTPの使用
PPTPサポートが必要なら、pptpclientというインストールCDに入っているツールを使用することができます。
しかし、その前に設定が正しいか確認する必要があります。
/etc/ppp/pap-secretsまたは/etc/ppp/chap-secretsを正しいusername/passwordになるように記述します。
コード表示 2.3: /etc/ppp/chap-secretsの編集 |
# nano -w /etc/ppp/chap-secrets
|
それから/etc/ppp/options.pptpを必要なら編集します。
コード表示 2.4: /etc/ppp/options.pptpの編集 |
# nano -w /etc/ppp/options.pptp
|
これらが全部済んだら、ただpptpを実行し(コマンドラインオプションとoptions.pptpの両方は設定できません)サーバーへ接続します。
コード表示 2.5: dial-inサーバーへ接続 |
# pptp <server ip>
|
次は、ディスクの準備へ行ってください。
3.c. 手動でのネットワークの設定
適切なネットワークモジュールを読み込む
インストールCDは、ブートするときにすべてのハードウェアデバイスを検出、
ハードウェアをサポートするための適切なカーネルモジュール(ドライバー)を読み込もうとします。
大部分のケースでは、これはとても良く機能します。
ただ、いくつかのケースでは、必要なカーネルモジュールが自動的に読み込まれません。
net-setupやpppoe-setupが失敗するというのは、
ネットワークカードが見つからなかった可能性があります。
この場合には、手動で適切なカーネルモジュールを読み込まないといけません。
ネットワーク用に提供しているカーネルモジュールを見るにはls
を使用します。
コード表示 3.1: 提供されているモジュールの検索 |
# ls /lib/modules/`uname -r`/kernel/drivers/net
|
使用しているネットワークカードが見つかったら、
modprobeを使ってそのカーネルモジュールを読み込みます。
コード表示 3.2: modprobeを使用してカーネルモジュールを読み込む |
# modprobe pcnet32
|
今ネットワークカードが検出されたかどうかチェックするために、
ifconfigを使用してください。
検出されたネットワークカードは次のように表示されるでしょう。
コード表示 3.3: ネットワークが機能しているかテスト 成功した場合 |
# ifconfig eth0
eth0 Link encap:Ethernet HWaddr FE:FD:00:00:00:00
BROADCAST NOARP MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
|
しかし、次のようなエラーメッセージが出たなら、
そのネットワークカードは検出されていません。
コード表示 3.4: ネットワークが機能しているかテスト 失敗した場合 |
# ifconfig eth0
eth0: error fetching interface information: Device not found
|
もし、あなたのシステムに複数のネットワークカードが存在する場合には、
その名前はeth0、eth1など、となります。
動かしたいネットワークカードを確認してください。
そして、このドキュメントを通してその名前を使用してください。
このドキュメントでは、ネットワークカードはeth0を想定しています。
ネットワークが検出された場合には、
net-setupまたはpppoe-setupをやり直してください(今は動くはずです)。
また、パワーユーザーの方々のために、
マニュアルでのネットワークの設定の方法を説明します。
ネットワークセットアップのベースになる次のセクションを一つ選択してください。
DHCPを使用する
DHCP (Dynamic Host Configuration Protocol)を使用すると、
自動的にネットワーク情報
(IPアドレス、ネットマスク、ブロードキャストアドレス、ゲートウェイ、
ネームサーバーなど)を受けとることが可能になります。
これはDHCPサーバーがネットワーク内に存在する場合にのみ動きます
(または、プロバイダがDHCPサービスを提供している場合)。
自動的にこのネットワークインタフェース情報を受け取るためには、
dhcpcdを使用します。
コード表示 3.5: dhcpcdを使用する |
# dhcpcd eth0
# dhcpcd -HD eth0
|
もしこれが動いたら(Googleのように、
いくつかのインターネットサーバーにpingしてみてくてください)、
先に進む用意ができたことになります。
残りのセクションを飛ばして、ディスクの準備から続けてください。
無線LANアクセスの準備
注意:
iwconfigコマンドが入っているはx86、AMD64、PPC用のインストールCDだけです。
それ以外の場合にも、linux-wlan-ng
projectの指示に従うことで動かすことができるでしょう。
|
もし無線LAN(802.11)用のカードを使用しているのなら、
他のことをする前に、まず無線LANの設定をする必要があります。
現在の無線LANの設定を見るために、iwconfigを使います。
iwconfigを実行すると、次のような表示されるかもしれません。
コード表示 3.6: 現在の無線LAN設定の表示 |
# iwconfig eth0
eth0 IEEE 802.11-DS ESSID:"GentooNode"
Mode:Managed Frequency:2.442GHz Access Point: 00:09:5B:11:CC:F2
Bit Rate:11Mb/s Tx-Power=20 dBm Sensitivity=0/65535
Retry limit:16 RTS thr:off Fragment thr:off
Power Management:off
Link Quality:25/10 Signal level:-51 dBm Noise level:-102 dBm
Rx invalid nwid:5901 Rx invalid crypt:0 Rx invalid frag:0 Tx
excessive retries:237 Invalid misc:350282 Missed beacon:84
|
注意:
デバイス名がeth0の代わりにwlan0やra0となるワイヤレスのカードがあります。
iwconfigコマンドをコマンドラインパラメターなしで実行し、
正しいデバイス名を取得してください。
|
大部分のユーザーにとって、重要な設定の変更はESSID(無線LANネットワーク名と呼ばれている)またはWEPキーの2つだけです。
上記リストに載っているESSIDとアクセスポイントアドレスがあなたのアクセスポイントになっていて、WEPを使っていない場合には、すでに無線LANは動いています。
もし、ESSIDを変更したい場合や、WEPキーを加えたい場合には、次のコマンドを実行します。
注意:
無線LANネットワークにWPAまたはWPA2が設定されている場合は、wpa_supplicantを使う必要があるでしょう。
GentooLinuxでの無線LANの構成に関するより詳しい情報は、
Gentooハンドブックのワイヤレスネットワーク の章をみてください。
|
コード表示 3.7: ESSID/WEPキーの変更 |
# iwconfig eth0 essid GentooNode
# iwconfig eth0 key 1234123412341234abcd
# iwconfig eth0 key s:some-password
|
iwconfigを使用して、再度ネットワークの設定を確認します。
一度無線LANが動いてしまえば、次章(ネットワーク用語を理解する)
で記述されているIPレベルのネットワーク設定をすることができます。
また、前述したnet-setupを使用することもできます。
ネットワーク用語を理解する
注意:
もし、IPアドレス、ブロードキャストアドレス、ネットマスク、
ネームサーバーといったものを知っているのならば、
このサブセクションを飛ばし、ifconfigとrouteの設定
から続けてください。
|
上記のすべての方法が失敗する場合には、ネットワークを手動で設定する必要があります。
これは全然難しくありません。
しかし、あなたが満足のいくネットワーク設定ができるために、ある程度のネットワークの知識が必要です。
これを読み終わった後には、ゲートウェイとは何か、
ネットマスクは何のためにあるのか、
ブロードキャストアドレスはどうやって作るのか、
なぜネームサーバーが必要なのかがわかります。
ネットワークの中では、各ホストはIPアドレス(Internet
Protocolアドレス)で識別されます。
アドレスは0から255までの4つの数字の組合せです。
これはわかりやすくするためで、
実際には、IPアドレスは32ビット(0と1の列)です。
この例を見てください。
コード表示 3.8: IPアドレスの例 |
IP Address (numbers): 192.168.0.2
IP Address (bits): 11000000 10101000 00000000 00000010
-------- -------- -------- --------
192 168 0 2
|
IPアドレスはアクセス可能なネットワークすべての中でユニークです(つまり、接続可能なすべてのホストは異なるIPアドレスを持っているはずです)。
内部のホストと外部のホストを区別するために、IPアドレスは2つの部分、
ネットワーク部と、ホスト部に分割されています。
その分割は、先頭が1の連続で、それに続いて0の連続になる値を持つnetmaskによって行なわれます。
IPアドレスの1の部分をネットワーク部、0の部分をホスト部とします。
通常に、ネットマスクはIPアドレスと同じように記述されます。
コード表示 3.9: ネットワーク部/ホスト部の分割例 |
IP-address: 192 168 0 2
11000000 10101000 00000000 00000010
Netmask: 11111111 11111111 11111111 00000000
255 255 255 0
+--------------------------+--------+
Network Host
|
言い換えると、192.168.0.14はこのサンプルネットワーク内に存在するホストですが、192.168.1.2は違います。
ブロードキャストアドレスはネットワーク部は同じネットワークアドレスを使用し、
ホスト部はすべて1のIPアドレスです。
ネットワーク上のすべてのホストがこのIPアドレスに反応します。
これはブロードキャストパケットのためのものです。
コード表示 3.10: ブロードキャストアドレス |
IP-address: 192 168 0 2
11000000 10101000 00000000 00000010
Broadcast: 11000000 10101000 00000000 11111111
192 168 0 255
+--------------------------+--------+
Network Host
|
インターネットに接続するためには、
どのホストでインターネット接続を行なうのか知っている必要があります。
このホストはゲートウェイと呼ばれています。
このホストは普通のホストなので、普通のIPアドレスを持っています。
(例えば192.168.0.1)
すべてのホストがそのホスト自身のIPアドレスを持っていると前述しました。
各ホストに名前で(IPアドレスの代わりに)アクセスすることができるように、
名前(たとえばdev.gentoo.gr.jp)からIPアドレス(たとえば
64.5.62.82)に変換するサービスが必要です。
そういったサービスをネームサーバーと呼んでいます。そのようなサービスを使用するためには、ネームサーバーを/etc/resolv.conf、定義する必要があります。
場合によっては、ゲートウェイがネームサーバーを兼ねていることがあります。
そうでなければ、プロバイダから提供されているネームサーバーを入力する必要があります。
まとめると、この先を続ける前に次の情報が必要となるでしょう。
| ネットワークアイテム |
例 |
| IPアドレス |
192.168.0.2 |
| ネットマスク |
255.255.255.0 |
| ブロードキャスト |
192.168.0.255 |
| ゲートウェイ |
192.168.0.1 |
| ネームサーバー |
195.130.130.5, 195.130.130.133 |
ifconfigとrouteの設定
ネットワークの設定は3段階から成ります。
最初に、ifconfigを使用して自分自身のIPアドレスを割当てます。
次に、routeを使用しゲートウェイへのルーティングを設定します。
そして最後に、/etc/resolv.confにネームサーバーのIPアドレスを記述します。
IPアドレスを設定するために、IPアドレス、ブロードキャストアドレス、
ネットマスクが必要です。
そして、${IP_ADDR}をIPアドレスに、
${BROADCAST}をブロードキャストアドレスに、
${NETMASK}をネットマスクに置換して、次のコマンドを実行します。
コード表示 3.11: ifconfigの使用 |
# ifconfig eth0 ${IP_ADDR} broadcast ${BROADCAST} netmask ${NETMASK} up
|
さて、routeを使用してルーティングの設定です。
${GATEWAY}をゲートウェイアドレスに置換します。
コード表示 3.12: routeの使用 |
# route add default gw ${GATEWAY}
|
そして、好きなエディタで(この例ではnanoを使います)
/etc/resolv.confを開きます。
コード表示 3.13: /etc/resolv.confの作成 |
# nano -w /etc/resolv.conf
|
次のテンプレートを使ってネームサーバーを記述します。
${NAMESERVER1}と${NAMESERVER2}を適切なネームサーバーアドレスに置換するのを忘れないでください。
コード表示 3.14: /etc/resolv.confテンプレート |
nameserver ${NAMESERVER1}
nameserver ${NAMESERVER2}
|
これですべてです。
インターネットサーバーのホスト(例えばGoogle)へpingをして、ネットワークのテストをしてください。
もしそれがうまくいったら、おめでとう。
Gentooをインストールする準備ができました。
ディスクの準備へ進んでください。
4. ディスクの準備
4.a. ブロックデバイス入門
ブロックデバイス
Linuxファイルシステム、パーティション、ブロックデバイスを含めて、Gentoo LinuxとLinux全般でのディスクに適している側面を詳しく見て行きましょう。
そして、ディスクとパーティションの一部始終を理解してもらった上で、Gentoo Linuxのインストールの為にパーティションとファイルシステムのセットアップの手順を案内します。
初めに、ブロックデバイスを紹介します。おそらく最も有名なブロックデバイスはLinux上では1番目のIDEドライブ、すなわち/dev/hdaを指しているものでしょう。もし、あなたのシステムがSCSIドライブを使っているなら, 1番目のハードディスクは/dev/sdaになるでしょう。
上記のブロックデバイスはディスクへの抽象的インターフェイスを表しています。
ユーザープログラムはドライブがIDEやSCSIもしくは他のどんなものかどうかを気にすること無くディスクにアクセスできます。
プログラムは簡単にディスク上の記憶領域をランダムアクセス可能な512バイト毎の連続した束としてアドレッシングできます。
パーティションとスライス
Linuxシステムを格納するのにディスクの全体を使用することは理論上可能ですが、実際にはほとんどそうはされません。
代わりにディスク全体のブロックデバイスはもっと扱いやすいブロックデバイスにより小さく分割されます。
amd64システムではこれら分割されたものをパーティションと呼びます。
パーティション
パーティションは以下の3つのタイプに分けられます。
基本、 拡張そして論理です。
基本パーティションはMBR(マスターブートレコード)にその情報が格納されているパーティションです。
MBRはとても小さい(512バイト)ので、4つの基本パーティションだけが定義できます。
(例えば、/dev/hda1から/dev/hda4)です。
拡張パーティションはより多くのパーティションが含まれた特殊な基本パーティションです。
(これは拡張パーティションは4つの基本パーティションの1つで無ければならないということです)。
こういったパーティションは元々あった訳ではありません。
しかし4つのパーティションでは少なすぎるので、下位互換性を損なうこと無く構成仕様を拡張する為に生まれたものです。
論理パーティションは拡張パーティション内のパーティションです。
これらの定義はMBRの中ではなく、拡張パーティション内で宣言されています。
4.b. パーティション構成を計画する
通常のパーティション構成
もしシステムのパーティション構成を編集するのに興味が無ければ、このハンドブックを通して使っているパーティション構成を使用できます。
| パーティション |
ファイルシステム |
サイズ |
種別 |
| /dev/hda1 |
ext2 |
32M |
ブートパーティション |
| /dev/hda2 |
(swap) |
512M |
スワップパーティション |
| /dev/hda3 |
ext3 |
残りのディスク領域 |
ルートパーティション |
もしパーティション(もしくは論理ボリューム)がどれぐらいのサイズにすればいいのか、どれだけの数のパーティション(もしくはボリューム)かにすべきかを知りたいのならば読み進んでください。そうでなければ、今からパーティション作成にfdiskを使うを読みながら、ディスクのパーティション作成作業を進めてください。
パーティション数とその大きさ
パーティションの数は環境に大きく依存します。
例えば、多数のユーザーがいるのならセキュリテイを強めバックアップを容易にする為に多分/homeを別にしたいでしょう。
もしメールサーバーとして稼働させる為にGentooをインストールしようとしているのなら、全てのメールは /var内に保存されるので/varは別にすべきでしょう。
ファイルシステムの良い選択はパフォーマンスを最大限にするでしょう。ゲームサーバーではほとんどのゲームサーバーパッケージが/optにインストールされるので、そこは別にされます。
理由は/homeをセキュリティとバックアップの為に別にするのと同じようなものです。
/usrは、確実に大きくしたいはずです。
主なアプリケーションを有しているだけでなく、保存される多数のソースを除いたPortageツリー、一つだけでも500Mbyteほどあるからです。
こういったように、どういうシステムにしたいのかにかなり依存します。
分割されたパーティションまたはボリュームには以下の利点があります。
-
それぞれのパーティションまたはボリュームに最適なパフォーマンスを上げるファイルシステムを選択できます。
-
パーティションを分けておくと、あるゾンビプロセスがパーティションまたはボリュームにデータを書き込み続けてシステム全体の空き容量を使い果たすのを防ぐことができます。
-
必要ならば、並行した複数のチェックを行えるのでファイルシステムのチェック時間を減らせます。
(この利点は複数のパーティションでよりも複数のディスクでより有効ですが)。
-
セキュリティは読込専用、nosuid(setuidビットは無視されます)、noexec(実行ビットは無視されます)等でいくつかのパーティションをマウントすることで増大します。
しかし、複数のパーティションには一つ大きな欠点があります。
正しく設定しないと、空き容量がかなりあるパーティションと空き容量の無いパーティションのあるシステムになってしまうでしょう。
また、SCSIとSATAでは15個迄というパーティション数の制限があります。
パーティション設定例として、ラップトップのデモ機(ウェブサーバー、メールサーバー、gnome等を含む)として使われている20GBのディスクを見ていただききましょう。
コード表示 2.1: ファイルシステム使用例 |
$ df -h
Filesystem Type Size Used Avail Use% Mounted on
/dev/hda5 ext3 509M 132M 351M 28% /
/dev/hda2 ext3 5.0G 3.0G 1.8G 63% /home
/dev/hda7 ext3 7.9G 6.2G 1.3G 83% /usr
/dev/hda8 ext3 1011M 483M 477M 51% /opt
/dev/hda9 ext3 2.0G 607M 1.3G 32% /var
/dev/hda1 ext2 51M 17M 31M 36% /boot
/dev/hda6 swap 516M 12M 504M 2% <not mounted>
|
/usrはここでかなりの量(83%使用)を占めていますが、一旦全てのソフトがインストールされると /usrはそんなに増えて行きません。
しかしながら、/varに2-3GBものディスク容量を割り当てるのは多すぎると思うかもしれません、ただPortageはデフォルトでは、このパーティションを使用してパッケージのコンパイルを行うことを覚えておいてください。
もし、あなたが/varを1GB程度の適度なサイズに抑えておきたい場合、あなたはOpenOfficeのような大きなパッケージをコンパイルするために必要な十分に大きなパーティションを差し示すように、あなたの/etc/make.conf内の、PORTAGE_TMPDIR変数を変更する必要があります。
4.c. パーティション作成にfdiskを使う
以下の部分では先に紹介した例のパーティション設定の作成方法を説明します。
| パーティション |
種別 |
| /dev/hda1 |
ブートパーティション |
| /dev/hda2 |
スワップパーティション |
| /dev/hda3 |
ルートパーティション |
パーティションの割当てを自分の望むように変更してください。
現在のパーティションの割当てを見る
fdiskはディスクをパーティションに分割するのに高機能かつ普及しているツールです。
さあfdiskを実行しましょう(例では/dev/hdaを使っています)。
コード表示 3.1: fdiskを起動する |
# fdisk /dev/hda
|
fdiskを起動すると、下記の様なプロンプトが出ます。
コード表示 3.2: fdiskプロンプト |
Command (m for help):
|
現在のディスクのパーティション情報を表示するにはpを入力します。
コード表示 3.3: パーティション情報例 |
Command (m for help): p
Disk /dev/hda: 240 heads, 63 sectors, 2184 cylinders
Units = cylinders of 15120 * 512 bytes
Device Boot Start End Blocks Id System
/dev/hda1 1 14 105808+ 83 Linux
/dev/hda2 15 49 264600 82 Linux swap
/dev/hda3 50 70 158760 83 Linux
/dev/hda4 71 2184 15981840 5 Extended
/dev/hda5 71 209 1050808+ 83 Linux
/dev/hda6 210 348 1050808+ 83 Linux
/dev/hda7 349 626 2101648+ 83 Linux
/dev/hda8 627 904 2101648+ 83 Linux
/dev/hda9 905 2184 9676768+ 83 Linux
Command (m for help):
|
このディスクの例では7つのLinuxファイルシステム("Linux"と表示されている)とスワップパーティション("Linux swap"と表示)で構成するように設定されています。
全てのパーティションを削除する
最初に現在の全てのパーティションをディスクから削除します。dを入力するとパーティションを削除します。
例えば、現在の/dev/hda1を削除するには、以下のようにします。
コード表示 3.4: パーティションを削除する |
Command (m for help): d
Partition number (1-4): 1
|
パーティションの削除準備ができました。これでpと入力してもパーティションは表示されませんが、変更が保存されるまで実際には削除されません。
もし間違えてしまって変更を保存せずに取消たいときはすぐにqと入力し、エンターキーを押してください。これでパーティションは削除されません。
さあ、これでシステム上の全パーティションを削除したい!と思っているでしょう?
パーティションを表示するのにpを、 削除するのにdとパーティション番号を繰り返し入力してください。
最後にパーティションテーブルに何も無くなれば終了です。
コード表示 3.5: 空のパーティションテーブル |
Disk /dev/hda: 30.0 GB, 30005821440 bytes
240 heads, 63 sectors/track, 3876 cylinders
Units = cylinders of 15120 * 512 = 7741440 bytes
Device Boot Start End Blocks Id System
Command (m for help):
|
さて今はメモリー上のパーティション構成は空になりました。パーティションを作成する準備が整いました。
先程検討したように、通常のパーティション構成を使うことにしましょう。
もちろん同じパーティション構成にしたくなければ、厳密に案内にならわないでください。
ブートパーティションを作成する
最初に小さなブートパーティションを作成します。新しいパーティションを作成するにはnと入力します。
そして基本パーティションを選択するのにpと入力するのに続き、1番目の基本パーティションを選択するのに1と入力します。
最初のシリンダーが表示されたら、そのままエンターキーを押してください。
最後のシリンダーが表示されたら、32Mバイトサイズののパーティションを作成するのに+32Mと入力してください。
コード表示 3.6: ブートパーティションを作成する |
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-3876, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-3876, default 3876): +32M
|
さて、pと入力すれば以下のパーティションテーブル表示が見られるはずです。
コード表示 3.7: 作成されたブートパーティション |
Command (m for help): p
Disk /dev/hda: 30.0 GB, 30005821440 bytes
240 heads, 63 sectors/track, 3876 cylinders
Units = cylinders of 15120 * 512 = 7741440 bytes
Device Boot Start End Blocks Id System
/dev/hda1 1 14 105808+ 83 Linux
|
このパーティションをブート可能にする必要があります。このパーティションにブート可能フラグを付加するにはaと入力します。
もう一度pを入力すると、"Boot"欄に*が付いているのがわかるでしょう。
スワップパーティションを作成する
さあスワップパーティションを作成しましょう。
この作業のためには、新規パーティションを作成するのにn、基本パーティションを選択するのにpを入力します.
そして2番目の基本パーティション、この例では/dev/hda2を作成するのに2と入力します。
最初のシリンダーが表示されたら、そのままエンターキーを押してください。
最後のシリンダーが表示されたら、512Mバイトサイズののパーティションを作成するのに+512Mと入力してください。
この作業の後、パーティションタイプを設定するのにtと入力します。
先程作成したパーティションを選択するのに2と入力して、このパーティションタイプを"Linux Swap"にする為に82と入力します。
これらの手順が完了後、pを入力すれば下記のようなパーティションテーブルが表示されるはずです。
コード表示 3.8: スワップパーティション作成後のパーティションテーブル |
Command (m for help): p
Disk /dev/hda: 30.0 GB, 30005821440 bytes
240 heads, 63 sectors/track, 3876 cylinders
Units = cylinders of 15120 * 512 = 7741440 bytes
Device Boot Start End Blocks Id System
/dev/hda1 * 1 14 105808+ 83 Linux
/dev/hda2 15 81 506520 82 Linux swap
|
ルートパーティションを作成する
最後にルートパーティションを作成しましょう。
この作業のためには、新規パーティションを作成するのにn、基本パーティションを選択するのにpを入力します.
そして3番目の基本パーティション、この例では/dev/hda3を作成するのに3と入力します。
最初のシリンダーが表示されたら、そのままエンターキーを押してください。
最後のシリンダーが表示されたら、ディスクの残りの空き容量を確保する為にエンターキーを押します。
これらの手順が完了後、pを入力すれば下記のようなパーティションテーブルが表示されるはずです。
コード表示 3.9: ルートパーティション作成後のパーティションテーブル |
Command (m for help): p
Disk /dev/hda: 30.0 GB, 30005821440 bytes
240 heads, 63 sectors/track, 3876 cylinders
Units = cylinders of 15120 * 512 = 7741440 bytes
Device Boot Start End Blocks Id System
/dev/hda1 * 1 14 105808+ 83 Linux
/dev/hda2 15 81 506520 82 Linux swap
/dev/hda3 82 3876 28690200 83 Linux
|
パーティションの割当てを保存する
パーティションの割当てを保存して、fdiskを終了するにはwを入力します。
コード表示 3.10: 保存してfdiskを終了する |
Command (m for help): w
|
これでパーティションが作成されましたので、ファイルシステムの作成に進むことができます。
4.d. ファイルシステムを作成する
はじめに
さてパーティションが作成されましたので、それぞれにファイルシステムを作成するときが来ました。
もしファイルシステムを選ぶことに興味がなくて、このハンドブックのデフォルトのものを使うことで満足ならば、パーティションにファイルシステムを適用するに進んでください。
そうでなければ利用可能なファイルシステムに関して知るために読み進めてください...。
ファイルシステムとは
Linuxカーネルでは様々なファイルシステムをサポートしています。
いくつかのファイルシステムはamd64アーキテクチャで安定していますが、不安定なファイルシステムもあります。
ext2、ext3は安定しています。
jfsとreiserfsは動作するものの、さらに評価が必要です。
もし人柱希望であれば、サポートされていないファイルシステムに挑戦してみるのも良いかも知れません。
ext2は実証済みで真のLinuxファイルシステムですがメタデータジャーナリングを持ちません。
これは起動時の定期のext2ファイルシステムのチェックにかなりの時間が掛かることもあるということです。
現在、整合性のチェックをとても早く終わらせることのできる次世代のジャーナリングファイルシステムの選択肢があります。
そのために一般的には非ジャーナリングファイルシステムより好まれています。
ジャーナリングファイルシステムはファイルシステムの不整合状態の発生やシステム起動時の大幅な遅延を防ぎます。
ext3はfull data及びordered dataジャーナリングの様に他の優れたジャーナリングモードに加えて素早い回復のためのメタデータジャーナルを提供するext2ファイルシステムのジャーナル化バージョンです。ext3はとても信頼できる良いファイルシステムです。
ほとんど全ての状況下で高いパフォーマンスを上げることができるハッシュ化されたb-treeインデックスの追加オプションがあります。
Indexingを有効化するには、mke2fsコマンドに、-O dir_indexを追加してください。
要するにext3は素晴らしいファイルシステムということです。
ReiserFSは全般的にとても良い性能であり、小さいファイル(4k以下のファイル)を扱うときはext2やext3よりもとてもときには10-15倍の高い性能を発揮するB*-ツリーベースのファイルシステムです。
またReiserFSはとても良くできていて、メタデータジャーナリングを持ちます。
カーネル2.4.18以降では、 ReiserFSは一般的な目的と大規模ファイルシステムの作成、たくさんの小さいファイルの利用、とても大きいファイルや大多数のファイルが含まれるディレクトリなどを扱う極端なケースにも堅実で使用に適しています。
XFSは強健な特徴を持ち、拡張性に最適化されたメタデータジャーナリングを持つファイルシステムです。
Linuxでのこのファイルシステムの使用はSCSI/ファイバーチャンネル記憶装置と無停電電源供給をもつ高機能なシステム以外はお勧めしません。
XFSは積極的にRAM上に処理中のデータをキャッシュするので、 不適切な設計のプログラム(ディスクにファイルを書き込むときに適切な注意を取らないもの。
そういったものは非常に少ないですが)では、不意にシステムがダウンしたとき、かなりのデータを失う可能性があります。
JFSはIBMの高性能なジャーナリングファイルシステムです。
最近あともう少しで製品という所まで来てますが現時点では一般的な安定性において肯定的か否定的かを述べるのに十分な実績がありません。
パーティションにファイルシステムを適用する
パーティションやボリュームにファイルシステムを作成するには、それぞれのファイルシステムに合った利用可能なツールがあります。
| ファイルシステム |
作成コマンド |
| ext2 |
mke2fs |
| ext3 |
mke2fs -j |
| reiserfs |
mkreiserfs |
| xfs |
mkfs.xfs |
| jfs |
mkfs.jfs |
例えば、 ブートパーティション(この例では/dev/hda1)をext2に、ルートパーティション(この例では/dev/hda3)をext3(今回の例として)にするには、以下の様にします。
コード表示 4.1: パーティションにファイルシステムを適用する |
# mke2fs /dev/hda1
# mke2fs -j /dev/hda3
|
さあ新しく作成されたパーティションにファイルシステムを作成しましょう。
スワップパーティションを有効にする
mkswapはスワップパーティションを初期化するのに使うコマンドです。
コード表示 4.2: スワップパーティションを初期化する |
# mkswap /dev/hda2
|
スワップパーティションを有効にするにはswaponを使用します。
コード表示 4.3: スワップパーティションを有効にする |
# swapon /dev/hda2
|
上記のコマンドでスワップを作成して有効にしましょう。
4.e. マウント
さてパーティションが初期化されてファイルシステムが収まったので、それらのパーティションをマウントするときが来ました。
mountというコマンドを使います。
作成したそれぞれのパーティション用にマウントに必要なディレクトリを作成するのを忘れないでください。
例ではルートとブートパーティションをマウントします。
コード表示 5.1: パーティションをマウントする |
# mount /dev/hda3 /mnt/gentoo
# mkdir /mnt/gentoo/boot
# mount /dev/hda1 /mnt/gentoo/boot
|
注意:
もし/tmpを別のパーティションとして置きたいのであれば、マウント後にパーミッションを変更するのを忘れないでください。: chmod 1777 /mnt/gentoo/tmp。これは/var/tmpも同様です。
|
procファイルシステム(カーネルとの仮想インターフェイス)も/procにマウントする必要があります。
しかし、最初にパーティション上に色々なファイルを置く必要があります。
Gentooインストールファイルをインストールするに進みましょう。
5. Gentooインストールファイルをインストールする
5.a. stage tarballのインストール
日時を正確に設定する
先に進める前に、日時をチェックして、更新しておく必要があります。
狂った時計は後でおかしな結果が起きる元になります。
現在の日時を確認するには、dateを実行してください。
コード表示 1.1: 日時を確認する |
# date
Fri Mar 29 16:21:18 UTC 2005
|
もし表示された日時が間違っていたら、date MMDDhhmmYYYYを使って更新してください。
構文としては、(Month(月)、Day(日)、hour(時)、minute(分)、Year(年)を表しています)。現在のところ、UTC時間を使用すべきです。自分のタイムゾーンに、後で設定することができます。例えば、2005年3月29日 16:21を設定したい場合には以下のように実行します。
コード表示 1.2: UTC日時の設定 |
# date 032916212005
|
stageの選択
次のステップとして、stage3tarballをシステムにインストールする必要があります。
必要なtarballをインターネットからダウンロードするか、一般的なGentoo UniversalCDやLiveDVDから起動しているなら、ディスクからコピーすることができます。もしUniversal CDやLiveDVDを持っていて使用したいstageがディスクにあるのなら、インターネットからダウンロースするのは全くネットワーク帯域の浪費でしかありません。それらのstageは全く同一なのですから。
多くの場合、どのstageファイルをダウンロードすればいいのかを判断するのには、uname -mコマンドの結果が役に立つでしょう。
Minimal CDや LiveCDs はstage3アーカイブを含みませんが、LiveDVDは含みます。
5.b. 一般的な選択: インターネットからダウンロードしたstageを使う
stagetarballのダウンロード
Gentooをインストールしようとしているファイルシステムのマウントポイントに移動してください。
(大概は、次の場所です。/mnt/gentoo)
コード表示 2.1: インストール先のマウントポイントに移動 |
# cd /mnt/gentoo
|
インストールに使用している媒体によりますが、stageをダウンロードするツールが2、3用意されています。
もしlinksが使用可能なら、すぐにでもthe Gentoo mirrorlistにアクセスして、最寄のミラーを選択することができます。
もしlinksが使えない場合には、lynxを一時的に使用できるでしょう。
proxyを使う必要がある場合には、http_proxyとftp_proxyを設定してください。
コード表示 2.2: lynxでのproxy情報の設定 |
# export http_proxy="http://proxy.server.com:port"
# export ftp_proxy="http://proxy.server.com:port"
|
ここから先はlinksが使用できると仮定して説明してきます。
${release-dir}stages/ディレクトリにアクセスしてください。あなたのアーキテクチャ(もしかしたら、それらは個別のサブアーキテクチャ名のディレクトリ配下に置かれているかもしれません)
ひとつを選んで、Dをおしてダウンロードしましょう。ダウンロードが完了したら、Qを押してブラウザを終了させます。
コード表示 2.3: linksでミラーリストを見る |
# links http://www.gentoo.org/main/en/mirrors.xml
# links -http-proxy proxy.server.com:8080 http://www.gentoo.org/main/en/mirrors.xml
|
stage3のtarballをダウンロードするようにして下さい。今後stage1またはstage2を用いたインストールはサポートされません。
ダウンロードしたstage tarballの正当性を評価したいなら、
md5sumを使って、その出力とミラーで配布されているMD5チェックサムを比較してください。
コード表示 2.4: stage tarballの正当性のチェック |
# md5sum -c ${stage3}.DIGESTS
${stage3}: OK
|
stage tarballの展開
さぁ、それではダウンロードしたstageをシステムに展開しましょう。
もっとも簡単な方法として、tarを使います。
コード表示 2.5: stageの展開 |
# tar xvjpf stage3-*.tar.bz2
|
上記と同様のオプション(xvjpf)を必ず使うようにしてください。xはアーカイブの展開、
vは展開中に何が起こっているのかを表示(これは、任意です)、jはbzip2の解凍、
pはパーミッションの保存、そしてfは、標準入力からではなく、ファイルから展開することを表しています。
これでstageはインストールされました。Portageのインストールへ進みましょう。
5.c. Portageのインストール
Portageスナップショットの展開
ここでPortageスナップショット(これは、どのようなソフトウェアをインストールできるか、またどのようなprofileがあるのか、と言った情報が入った複数のファイルのことです)をインストールする必要があります。
Portageスナップショットをダウンロードし、インストール
あなたのファイルシステムにマウントした場所へ行ってください(多くの場合/mnt/gentoo)。
コード表示 3.1: マウントポイントへ移動 |
# cd /mnt/gentoo
|
links(またはlynx)を起動し、
Gentoo mirror listへ行ってください。
そしてあなたのいる場所に近いミラーを選択してから、snapshots/ディレクトリを開いてください。
そこで、最新のPortageスナップショット(portage-latest.tar.bz2)を選択して、Dキーを押してダウンロードしてください。
コード表示 3.2: Gentooミラーリストの参照 |
# links http://www.gentoo.org/main/en/mirrors.xml
|
次に、Qキーを押してブラウザを終了させます。
これで、Portageスナップショットが/mnt/gentooに保存されているでしょう。
ダウンロードしたスナップショットの完全性を確認したい時は、md5sumを使用し、
その出力と、ミラーから提供されているMD5チェックサムとを比較します。
コード表示 3.3: Portageスナップショットの完全性の確認 |
# md5sum -c portage-latest.tar.bz2.md5sum
portage-latest.tar.bz2: OK
|
次にこのPortageスナップショットをあなたのファイルシステム上で展開します。
次のコマンドを実行する際には、最後のオプションが小文字のcではなくて、
大文字のCであることに注意してください。
コード表示 3.4: Portageスナップショットの展開 |
# tar xvjf /mnt/gentoo/portage-latest.tar.bz2 -C /mnt/gentoo/usr
|
5.d. コンパイルオプションの設定
はじめに
Gentooを最適化するために、Portageの振る舞いに影響を与えるいくつかの変数を設定することができます。
これらの変数は、すべて(exportを使用して)環境変数として設定することも可能ですが、
環境変数は永続的なものではありません。設定を保存しておくために、Portageの設定ファイル/etc/make.confがあります。
これが今から編集するファイルです。
注意:
設定可能なすべての変数は、/mnt/gentoo/etc/make.conf.exampleにコメント付きで列挙されています。
Gentooのインストールを成功させるには、次に挙げられている変数を設定するだけでよいです。
|
あとで話題にする最適化のための変数を編集するために、
好みのエディタを立ち上げてください(このガイドではnanoを使います)。
コード表示 4.1: /etc/make.confを開く |
# nano -w /mnt/gentoo/etc/make.conf
|
おそらく気づいていると思いますが、make.conf.exampleファイルは、
他の設定ファイル同様の構造をしています(訳注:bashスクリプトと同じ作法です)。
"#"で始まる行はコメントで、その他の行には、VARIABLE="content"という構文で変数を定義します。
いくつかの変数については、次の節で話題にします。
CHOST
CHOSTの値は、あなたのシステムがどのビルド対象かを表します。
この値は既に正しい値が設定されています。あなたのシステムを壊すかもしれないので、
編集しないで下さい。
もしCHOSTの値が正しくないようだったら、間違ったstage3 tarballを使用しているかもしれません。
CFLAGSとCXXFLAGS
CFLAGSとCXXFLAGS変数には、それぞれ、CおよびC++コンパイラであるgccに対する最適化のためのフラグを定義します。
ここでは、一般的なものを定義しますが、それぞれのプログラムごとに最適なフラグを使うことで、
最高のパフォーマンスを出すことが可能となります。
これは、それぞれのプログラムが異なっていることによります(訳注:プログラムごと、
アーキテクチャごとにパフォーマンスへの考慮や設計が異なり、フラグによってどれだけ最適化されるかということは、プログラムによって異なると言うこと。)
make.confには、一般的にはシステム全体の動作を損なわない範囲で最善の最適化フラグを定義すべきです。
この変数に、実験的な設定をしないでください。
過剰な最適化はプログラムの動作をおかしくします(クラッシュや誤動作の元です)。
すべての最適化オプションを説明はしません。
そのすべてを知りたいなら、GNU
Online Manual(s)やgccのinfo(info gcc -- このコマンドは既に稼動しているLinuxシステムでのみ動作します)を読んでください。
make.conf.exampleファイルにもたくさんの例や情報が含まれています。
こちらも忘れずに読んでください。
始めに-march=か-mtune=フラグを設定してください。
これには、ターゲットとするアーキテクチャの名前を指定します。
どんなオプションを設定できるかは、make.conf.exampleファイルに(コメントとして)書かれています。
次に、-Oフラグ(これは、大文字のOで、ゼロではありません)を設定します。
これは、gccの最適化クラスのフラグです。
s(サイズの最適化)、0(最適化なし)、そして、スピードの最適化フラグ1、2、さらに3までが指定できます(各クラスは、この順番により強い最適化を行います。より強い最適化をするクラスは、弱い最適化クラスと同様の効果を持ちつつ、追加の最適化を行います)。
-O2 が推奨されたデフォルト指定です。-O3をシステム全体で使用した場合には、問題が発生することが分かっていますので、-O2にとどめておくことをお勧めします。
他の人気がある最適化フラグとして-pipe(コンパイル時の様々な段階間の情報のやり取りに、テンポラリファイルではなくパイプを使うようにします)があります。これは生成されるコードには影響しません。
-fomit-frame-pointer(必要ない関数に対するレジスタ内のフレームポインタを保持しません)を使うと、
アプリケーションのデバッグが非常に困難になります。
CFLAGSとCXXFLAGSを定義するとき、
それぞれの最適化オプションは同じものを使うべきです。
展開したstage3アーカイブに含まれるデフォルトの設定は十分に最適化されています。
下記の例は、あくまで例です。
コード表示 4.2: CFLAGS変数とCXXFLAGS変数の設定 |
CFLAGS="${CFLAGS}"
CXXFLAGS="${CFLAGS}"
|
MAKEOPTS
MAKEOPTSには、パッケージをインストールするときに、
いくつ平行してコンパイルを走らせるかを定義します。
あなたのシステムのCPU数に1を加えた数を指定するのが賢明ですが、これは目安であり常にそれが最善であるというわけではありません。
コード表示 4.3: 一般的な、CPUが1個のシステムに対するMAKEOPTSの設定 |
MAKEOPTS="-j2"
|
さぁ準備ができました。次へ進みましょう!
/mnt/gentoo/etc/make.confをあなたの好みに応じて編集し、保存してください。
(nanoユーザは、Ctrl-Xを押します)
それでは、Gentooベースシステムのインストールへ進んでください。
6. Gentooベースシステムのインストール
6.a. chrootする
自由選択: ミラーサイトの選択
すばやくソースコードをダウンロードするために、一番回線速度が速いミラーサイトを選択することをお勧めします。
Portageは、GENTOO_MIRRORS変数をmake.confファイルから参照し、その変数に羅列されいているミラーサイトを使用します。
Gentooサイトのmirror list
(日本語訳)を参照し、(高確率で一番速いサイトとしての)一番近い一つのミラーサイト(もしくは複数のミラーサイト)を探すことができます。
しかし、お望みのミラーサイトを選択するのに使いやすいインターフェースを備えるmirrorselectというすばらしいツールを提供しています。
コード表示 1.1: GENTOO_MIRRORS変数用にmirrorselectを使用する |
# mirrorselect -i -o >> /mnt/gentoo/etc/make.conf
|
警告:
どのIPv6ミラーサイトも選択してはいけません。現在stageファイルは、IPv6をサポートしていません。
|
make.confでの2番目に重要な設定は、SYNC変数の設定です。
この変数には、Portageツリーを更新するときに使用したいrsyncサーバを設定します。
(Portageツリーとは、Portageがソフトウェアをダウンロードしてインストールのに必要な情報の全てが書かれているebuildや、スクリプトの集まりです。)
自分でSYNCサーバを手作業で指定できますが、mirrorselectはその作業を以下のように簡単にします。
コード表示 1.2: mirrorselectを使ってrsyncミラーを選択する |
# mirrorselect -i -r -o >> /mnt/gentoo/etc/make.conf
|
mirrorselectを実行した後、/mnt/gentoo/etc/make.conf内の設定が重複していないかを確認したほうがよいでしょう。
DNS情報をコピーする
新しい環境に入る前にしなければならないことが、まだ一つ残っています。
それは、新しい環境でもネットワーク環境が確実に動くようにするために、
/etc/resolv.confにあるDNS情報を、新しい環境にコピーすることです。
/etc/resolv.confにはあなたのネットワーク環境における
ネームサーバーの情報が含まれています。
コード表示 1.3: DNS情報をコピーする |
# cp -L /etc/resolv.conf /mnt/gentoo/etc/
|
/procと/devファイルシステムのマウント
chroot後の環境でもカーネルが提供する情報を参照できるようにするために、
/mnt/gentoo/procに/procファイルシステムをマウントしてください。
それから、/devファイルシステムをbindマウントします。
コード表示 1.4: /procと/devのマウント |
# mount -t proc none /mnt/gentoo/proc
# mount -o bind /dev /mnt/gentoo/dev
|
新しい環境に入る
さて、全てのパーティションは初期化され、ベース環境はインストールされました。
ついに、あなたはchrootにより新たにインストールされた環境に入ります。
これは、現在のインストーラの環境(インストールCDやその他のインストールメディア)から、
あなたのインストールした環境(すなわち初期化されたパーティション)に移行することを意味します。
このchrootの過程は3段階のステップからなります。
まず最初に、chrootによって、ルートディレクトリを(インストールメディア上の)/ から、(あなたのパーティション上にある)/mnt/gentooに変更します。次に、システムファイルの環境変数を更新するコマンドenv-updateを使って、新しい環境をつくります。最後に、sourceコマンドでこれらの変数をメモリ上に読み込みます。
コード表示 1.5: 新しい環境にchrootする |
# chroot /mnt/gentoo /bin/bash
# env-update
>> Regenerating /etc/ld.so.cache...
# source /etc/profile
# export PS1="(chroot) $PS1"
|
おめでとうございます!あなたは自分のGentoo Linux環境に入ることができました。
もちろん、まだいくつかのセクションが残っており、完了までは程遠いのですが:-)
6.b. Portageシステムの設定
Portageツリーの更新
ここで、Portageツリーを最新状態に更新すべきです。
emerge --syncが、これを行います。
コード表示 2.1: Portageツリーの更新 |
# emerge --sync
# emerge --sync --quiet
|
rsync通信を遮断してしまうファイアウォールの環境内にいる場合は、代わりにemerge-webrsyncを使用します。それは、portageのスナップショットをダウンロードしてインストールします。
Portageの新しいバージョンが利用可能で、新しいものに更新すべきであることを警告されたら、emerge --oneshot portageを使用してすぐに更新すべきです。
適切なprofileの選択
まず、所定の位置にあるちょっとした定義について説明します。
profileは、すべてのGentooシステムにとって根幹を成すものです。
CHOST、CFLAGSやその他の重要な変数の初期設定値を指定しているだけでなく、
システムの状態を特定範囲内のパッケージバージョンに留めておく役目もあります。
これは、Gentoo開発者によってすべて整備されています。
以前は、ユーザがそういったprofileを触ることはありませんでした。
しかし、場合によってはprofileの変更が必要と判断される事もあるかもしれません。
以下のコマンドで、現在使用中のprofileが何であるかを確認することができます。
コード表示 2.2: システムprofileの確認 |
# ls -FGg /etc/make.profile
lrwxrwxrwx 1 48 Apr 8 18:51 /etc/make.profile -> ../usr/portage/profiles/${profile}
|
デフォルトのprofileでは、Linux 2.6系システムのものが提供されています。
これは推奨の設定ですが、別のprofileを使うという選択肢もあります。
アーキテクチャによっては、desktopとserver subprofileを利用できる場合があります。
2008.0/profile以下を調べて、使用予定のアーキテクチャで利用可能なものがないかを確認してみて下さい。
自身の要件に合うかを決めるのに、desktop profileのmake.defaultsを確認したいと思うかもしれません。
使用予定のアーキテクチャで利用可能なprofileを、/usr/portage/profiles/で確認したら、
お好みで別のprofileを使用することもできます。
コード表示 2.3: profileの変更 |
# ln -snf /usr/portage/profiles/<profile name> /etc/make.profile
|
注意:
developer subprofileは特にGentoo Linuxの開発作業のためにものです。
一般的な開発環境の設定を助けるものではありません。
|
USE変数の設定
USEはGentooがユーザに提供する最もパワフルな変数の一つです。
プログラムの中には、特定のフラグを設定することによって、副次的なサポートを有効にしたり無効にしたりできるものがあります。
たとえばGTKサポートもしくはQtサポートを有効にしてコンパイルすることができるプログラムがあります。他には、SSLサポートを有効にするか無効にするか、
X11サポート(X-server)の替わりにフレームバッファサポート(svgalib)
を有効にするか、などがあります。
多くのディストリビューションは、パッケージをありったけのサポートを有効にしてコンパイルしているため、依存関係が膨大になってしまっていることは言うまでもなく、
プログラムのサイズや起動時間までも増大させてしまっています。
Gentooならば、パッケージをコンパイルするときにつけるべきオプションを
自分で定義することができます。これにはUSEフラグが一役買っています。
USE変数には、コンパイルオプションに対応するキーワードを定義します。
たとえば、sslはプログラムに備わるSSLサポートをコンパイルします。
-XはXサーバのサポートを削除します。(キーワードの前にマイナス記号をつけます。)gnome gtk -kde -qt3 -qt4は、
GNOME(とGTK)サポートを有効にし、KDE(とQt)サポートを無効にしてプログラムをコンパイルします。システムを完全にGNOME向けに調整します。
初期のUSE設定は、使用しているprofileのmake.defaultsファイルにあります。
make.defaultsは、/etc/make.profileシンボリックリンクが指すディレクトリと、同じくすべてのその親ディレクトリで見つかります。
初期のUSE設定は、それらmake.defaultsファイルのすべてのUSE設定を組み合わせたものになります。
/etc/make.confに記述した内容は、これらの初期設定に反映されます。
もしUSE設定に何かを追加した場合、それは初期設定リストに追加されます。
もし何かを(マイナス記号を頭につけることで)USE設定から取り除いた場合、
それは(リストにあれば)初期設定リストから取り除かれます。
決して、/etc/make.profileディレクトリ以下の内容を変更しないでください。Portageをアップデートするときに、上書きされてしまいます!
Gentooハンドブックの第二部にあるUSEフラグに、USEについての詳細な解説があります。また、システムにある/usr/portage/profiles/use.descに、使用可能なUSEフラグについての詳細な解説があります。
コード表示 2.4: 使用可能なUSEフラグの参照 |
# less /usr/portage/profiles/use.desc
|
DVD、ALSA、CD-Rサポートを含むKDEベースのシステムのためのUSEフラグの例を以下に示します。
コード表示 2.5: /etc/make.confを開く |
# nano -w /etc/make.conf
|
コード表示 2.6: USEフラグの設定 |
USE="-gtk -gnome qt3 qt4 kde dvd alsa cdr"
|
自由選択: glibcのロケール
あなたは、おそらくシステムで一つないし二つのロケールだけしか使用しないでしょう。
/etc/locale.genで必要なロケールを指定できます。
コード表示 2.7: /etc/locale.genを開く |
# nano -w /etc/locale.gen
|
以下のロケール指定は、関連する文字符号(UTF-8のような)を含む、英語(アメリカ)とドイツ語(ドイツ)ロケールを生成する例です(訳注: 日本語訳には日本語に関するロケールも追加しています)。
コード表示 2.8: ロケールの指定 |
en_US ISO-8859-1
en_US.UTF-8 UTF-8
de_DE ISO-8859-1
de_DE@euro ISO-8859-15
ja_JP.EUC-JP/EUC-JP
ja_JP.UTF-8/UTF-8
ja_JP/EUC-JP
|
次のステップでは、locale-genを実行します。これにより、
/etc/locale.genファイルで指定した全てのロケールが生成されます。
では、カーネル設定へ進んでください。
7. カーネル設定
7.a. タイムゾーン
最初にタイムゾーンを選択する必要があります。そうするとシステムがどの地域に置かれているかがわかります。
自分のタイムゾーンを/usr/share/zoneinfoから探して、/etc/localtimeにコピーしてください。
/usr/share/zoneinfo/Etc/GMT*タイムゾーンは、名前から予測されるゾーンを指し示してはいません。
GMT-8は、事実GMT+8です。
コード表示 1.1: タイムゾーン情報を設定する |
# ls /usr/share/zoneinfo
# cp /usr/share/zoneinfo/GMT /etc/localtime
# cp /usr/share/zoneinfo/Japan /etc/localtime
|
7.b. ソースをインストールする
カーネルを選択する
全ディストリビューションの構成の核をなすのは、Linuxカーネルです。
カーネルはユーザープログラムとシステムハードウェアの間の階層です。
Gentooではユーザーに選択できる色々なカーネルソースを提供しています。
説明付の全リストはGentoo Kernel Guide(日本語訳)で見られます。
AMD64ベースのシステムでは、gentoo-sources(amd64特有の安定化、パフォーマンス、ハードウェアサポートパッチがあるカーネル 2.6ソース)があります。
カーネルソースを選んで、emergeを使ってインストールしてください。
この時点での、x11-orgや他の依存パッケージのインストールをさけるため、USE="-doc"は必要です。
USE="symlink"は、新規のインストールには必要ありません。
しかし、/usr/src/linuxのきちんとした生成を確実にします。
コード表示 2.1: カーネルソースをインストールする |
# USE="-doc symlink" emerge gentoo-sources
|
/usr/srcの中を見ると、選択したカーネルソースを指すlinuxと呼ばれるシンボリックリンクが見られるでしょう。
この場合は、カーネルソースはgentoo-sources-2.6.12-r10を指し示しています。
あなたのバージョンは異なることを覚えておいてください。
コード表示 2.2: カーネルソースへのシンボリックリンクを見る |
# ls -l /usr/src/linux
lrwxrwxrwx 1 root root 12 Oct 13 11:04 /usr/src/linux -> linux-2.6.12-gentoo-r10
|
さあカーネルソースを設定して、コンパイルするときが来ました。この作業にはgenkernelが使えます。
このツールはインストールCDで使われている一般的なカーネルを構築します。最初に"手動設定"を説明します。
これがあなたの環境を最適化する一番良い方法ですから。
もし自分のカーネルを手動で設定したいなら、すぐに一般的な選択: 手動設定へ進んでください。
もしgenkernelを使いたいなら、代わりにもう一つの選択: genkernelを使うを読んでください。
7.c. 一般的な選択: 手動設定
はじめに
カーネルの手動設定はLinuxユーザがこれまでに実行しなければならない手続きの中で最も難しい手続きとしばしば見なされています。
何もそれほど真実ではありません。2、3のカーネル設定の後では、難しかったことすら思い出せないでしょう。;)
しかし、一つだけは本当です。手動でカーネルの設定を始めるときに自分のシステムを判ってなければなりません。
ほとんどの情報はlspciを含むpciutilsをemergeすること(emerge pciutils)によって集めることが出来ます。
これでchrootされた環境で、lspciを使用することが出来ます。
lspciがはき出すpcilibの警告(たとえば pcilib: cannot open /sys/bus/pci/devices)は、安全に無視することが出来ます。
別にnon-chrootedでlspciを走らせることもできます。 結果は同じです。
インストールCDではどんなカーネルモジュールを使っているかを見るためにlsmodを実行することもできます(これはどんな機能が利用可能かの良いヒントを与えてくれるかも知れません)。
それではカーネルソースのディレクトリに行って、make menuconfigを実行しましょう。これでncursesベースの設定メニューが立ち上がります。
コード表示 3.1: menuconfigを実行する |
# cd /usr/src/linux
# make menuconfig
|
いくつかの設定項目が出てきます。
最初に有効にしなければならないいくつかのオプションをリストアップしましょう
(そうしなければGentooは機能しないか、特別な調整無しではうまく機能しないでしょう)。
必要なオプションを有効にする
まず最初に開発中や試験的なコード/ドライバーの使用を有効にします。必ず有効にしてください。
そうしないといくつかのとても重要なコード/ドライバーが表示されません。
コード表示 3.2: 試験的なコード/ドライバを選択する |
Code maturity level options --->
[*] Prompt for development and/or incomplete code/drivers
|
さて、General Setupを選択し、udev使用のためのホットプラグ可能デバイスのサポートを有効にします。
これはAMD64はカーネル2.6のみがサポートしているからです。
コード表示 3.3: 一般的なサポート |
General setup --->
[*] Support for hot-pluggable devices
|
次に正確なプロセッサの種類を選択しましょう。
コード表示 3.4: プロセッサの種類と機能の選択 |
Processor type and features --->
Processor family (AMD-Opteron/Athlon64) --->
( ) AMD-Opteron/Athlon64
( ) Intel EM64T
( ) Generic-x86-64"
|
次にFile Systemsに行き、使用するファイルシステムの項目を選択してください。
それらをモジュールとしてコンパイルしないでください。
さもないとGentooシステムはパーティションをマウントすることができないでしょう。
Virtual memory、 /proc file systemも選択してください。
コード表示 3.5: 必要なファイルシステムを選択する |
File systems --->
Pseudo Filesystems --->
[*] /proc file system support
[*] Virtual memory file system support (former shm fs)
<*> Reiserfs support
<*> Ext3 journalling file system support
<*> JFS filesystem support
<*> Second extended fs support
<*> XFS filesystem support
|
もしインターネット接続にPPPoEを使っていたり、モデムでダイアルアップしているなら、カーネル内の以下のオプションが必要になります。
コード表示 3.6: PPPoEに必要なドライバーを選択する |
Device Drivers --->
Networking Support --->
<*> PPP (point-to-point protocol) support
<*> PPP support for async serial ports
<*> PPP support for sync tty ports
|
2つの圧縮オプションは差し支えは無いけれども、絶対に必要でもありません。
PPP over Ethernetオプションもそうです。
これはカーネルモードのPPPoEをするために設定されたときだけにrp-pppoeに使用されるものです。
もしPPPoEを使用する必要があるなら、カーネルにイーサネットカード用のサポートを含めることを忘れないでください。
もしマルチCPUのOpteronやマルチコア(たとえばAMD64 X2)システムがあるなら、"Symmetric multi-processing support"を有効にしなければなりません。
コード表示 3.7: SMPサポートを有効にする |
Processor type and features --->
[*] Symmetric multi-processing support
|
もしUSBの入力デバイス(キーボードやマウスなど)を使用するなら、以下も有効にするのを忘れないでください。
コード表示 3.8: 入力デバイスのUSB Supportを有効にする |
Device Drivers --->
USB Support --->
<*> USB Human Interface Device (full HID) support
[*] HID input layer support
|
カーネルの設定が終れば、コンパイルとインストールに進んでください。
コンパイルとインストール
これでカーネルの設定がされたので、コンパイルとインストールするときが来ました。
設定を終了して、コンパイルの過程を始めてください。
コード表示 3.9: カーネルをコンパイルする |
# make && make modules_install
|
カーネルのコンパイルが終れば、カーネルイメージを/bootにコピーしてください。
あなたが適切だと思うお好みの名前を、あなたのカーネルに使用してください。
そして、ブートローダを設定するときに、その名前が後で必要になりますから覚えておいてください。
<kernel-version>を、あなたのカーネルの名前とバージョンに置き換えるの覚えておいてください。
コード表示 3.10: カーネルをインストールする |
# cp arch/x86_64/boot/bzImage /boot/kernel-2.6.12-gentoo-r10
|
それではカーネルモジュールの設定に進みましょう。
7.d. もう一つの選択: genkernelを使う
もしこのセクションを読んでいるなら、自分のカーネル設定にgenkernelスクリプトを使うのを選んだということです。
さてカーネルのソースツリーはインストールされました。
自動的にカーネルを構築するのにgenkernelスクリプトを使ってカーネルをコンパイルするときがやって来ました。
genkernelはインストールCDのカーネルが設定されるのとほとんど同じ方法でカーネル設定するように動作します。
カーネルを構築するのにgenkernelを使うときは、通常はシステムはインストールCDがするように起動時にすべてのハードウェアを検出します。
genkernelではどんな手動のカーネル設定も要求されないので、カーネルをコンパイルするのが苦手だなあという人には理想的な解決策です。
それではgenkernelの使い方を見てみましょう。始めにgenkernelのebuildをemergeします。
コード表示 4.1: genkernelをemergeする |
# emerge genkernel
|
さあgenkernel allを実行して、カーネルソースをコンパイルしましょう。
しかしgenkernelはほとんどすべてのハードウェアサポートを含むカーネルをコンパイルするので、コンパイルが終了するまでにはかなりの時間を要することを覚えておいてください。
もし、ブートパーティションのファイルシステムにext2かext3以外(訳注:ReiserFS、JFS、XFSなど)を使用する場合は、genkernel --menuconfig allを使って手動でカーネルを設定し、カーネルの中にそのファイルシステムを組み込む必要があることに気を付けてください(つまり、モジュールとしてでは無く)。
コード表示 4.2: genkernelを実行する |
# genkernel all
|
一旦genkernelが完了すると、カーネル、すべてのモジュールそしてイニシャルルートディスク(initrd)が作成されます。
このハンドブックで後程ブートローダを設定するときにカーネルとinitrdを使います。
ブートローダの設定ファイルを書くときに必要になるので、カーネルとinitrdの名前を書き留めておきましょう。
"実際"のシステムが稼働し始める前に、(インストールCDでのように)initrdは起動後すぐにハードウェアの自動検出を始めます。
コード表示 4.3: 作成されたカーネルイメージとinitrdの名前を確認する |
# ls /boot/kernel* /boot/initramfs*
|
さあ、システムがよりインストールCDのようにするために、もう1つのステップを実行しましょう。
coldplugをemergeしましょう。initrdはシステムを起動するのに必要なハードウェアを検出しますが、coldplugは他のすべてのハードウェアを検出します。
coldplugをemergeして有効にするには、以下のように入力してください。
コード表示 4.4: coldplugをemergeして有効にする |
# emerge coldplug
# rc-update add coldplug boot
|
7.e. カーネルモジュールの設定
モジュールの設定
自動的にロードさせたいモジュールを/etc/modules.autoload.d/kernel-2.6に記入してください。
もし望むなら、モジュールに追加オプションを加えることもできます。
すべての利用可能なモジュールを見るには、次のfindコマンドを実行してください。
"<kernel version>"に今コンパイルしたカーネルのバージョンを入れてください。
コード表示 5.1: すべての利用可能なモジュールを見る |
# find /lib/modules/<kernel version>/ -type f -iname '*.o' -or -iname '*.ko'
|
例えば、3c59x.oモジュールを自動でロードするなら、kernel-2.6ファイルを開いて、モジュール名をそこに記入してください。
コード表示 5.2: /etc/modules.autoload.d/kernel-2.6を編集する |
# nano -w /etc/modules.autoload.d/kernel-2.6
|
コード表示 5.3: /etc/modules.autoload.d/kernel-2.6 |
3c59x
|
システムの設定に進んで、インストールを続けてください。
8. システム設定
8.a. ファイルシステム情報
fstabって何
Linuxにおいて、システムに使用されている全パーティションは/etc/fstabに記述されていなければなりません。このファイルにはそれぞれのパーティションのマウントポイント(ファイルシステムの構築のときに出てきた)、どのように、どんな特別なオプションでマウントされるか(自動的にマウントするか否か、ユーザーがマウントできるかどうか等)の情報が含まれます。
/etc/fstabの作成
/etc/fstabは特別な構文を使います。各々のラインは6つのフィールドから成り、空白(スペース、タブもしくはその両方)で分けられています。各々のフィールドにはそれぞれの意味があります。
-
1番目のフィールドにはパーティションが記述されています。(デバイスファイルのパス)
-
2番目のフィールドにはパーティションがマウントされるべきマウントポイントが記述されています。
-
3番目のフィールドにはパーティションに使用されているファイルシステムが記述されています。
-
4番目のフィールドにはパーティションをマウントするときに適用したいマウントオプションが記述されています。各々のファイルシステムにはそれぞれ独自のマウントオプションがあるので、全てのオプションを見るには頑張ってマウントのマニュアルを読んでください。(man mount)。複数のマウントオプションはコンマで分けられます。
-
5番目のフィールドはdumpに使用され、そのパーティションがdumpされる必要があるかどうかを記述します。通常ここは0(ゼロ)のままで良いです。
-
6番目のフィールドはfsckに使用され、システムが正常にシャットダウンしなかったときにどの順序でファイルシステムがチェックされるべきかを記述します。ルートパーティションは1に残りのパーティションは2にすべきでしょう。(もしくはもしファイルシステムのチェックが必要の無い場合は0にしてください)。
重要:
Gentooが提供している元々の/etc/fstab有効なfstabではありません。
自分のシステムの/etc/fstabを作成しなければなりません。
|
コード表示 1.1: /etc/fstabを開く |
# nano -w /etc/fstab
|
パーティション分割の構成に合ったルールを追加し、CD-ROMドライブのためのルールを付け加えてください。
そして、その他のパーティションやドライブがあれば、当然それらも忘れないでください。
ここで/etc/fstabを作るために、以下の例を使います。
autoはmountにファイルシステムを推測させ(多数のファイルシステムの内の1つで作成され得るリムーバルメディアに推奨されます)、userは非rootユーザーがCDをマウントできるようにします。
パフォーマンスを改善するのに多くのユーザーはマウントオプションとして
noatimeオプションを付け加えたいと考えることがあります。
アクセス時間が記録されないので、その結果はより高速なシステムになります(一般的にその記録はほとんど必要ありません)。
/etc/fstabを再チェックして、保存・終了して次に進んでください。
8.b. ネットワーク情報
ホスト名、ドメイン名等
ユーザーが決めなければならない選択の一つは自分のPCの名前です。至極簡単に思えますが多くのユーザーは自分のLinux-pcに適当な名前を見付けるのに苦労してます。事を早く進めるために、選んだ名前は後で変更できることを知っておいてください。判りやすいように、ここでは単にマシンをtux、ドメイン名をhomenetworkと呼ぶことにします。
コード表示 2.1: ホスト名を設定 |
# nano -w /etc/conf.d/hostname
HOSTNAME="tux"
|
次に、もしドメイン名が必要なら、/etc/conf.d/netに設定します。
ISPやネットワーク管理者からそう言われているか、DHCPサーバは持っておらずDNSサーバを持っているときのみドメインが必要になります。
もしネットワークにつなげるときDHCPの設定を行っていれば、DNSやドメイン名に悩む必要はありません。
コード表示 2.2: domain名を設定 |
# nano -w /etc/conf.d/net
dns_domain_lo="homenetwork"
|
注意:
ドメイン名を設定しないことを選択した場合、/etc/issueを編集することで、ログイン画面の"This is hostname.(none)"というメッセージを取り除くことができます。
そのファイルから文字列.\Oを削除するだけです。
|
もしNISドメインがあれば(これについてわからなければ、それが無いということです)、それも定義しなければなりません。
コード表示 2.3: NISドメイン名を設定 |
# nano -w /etc/conf.d/net
nis_domain_lo="my-nisdomain"
|
注意:
DNSとNISの設定に関する情報がもっと欲しい場合は、/etc/conf.d/net.exampleに示されている例を読んでください。
DNS/NISの設定管理を楽にするため、openresolvをemergeしてもよいでしょう。
|
ネットワークを設定する
「ねえ、もうそれは済んでるんだけど」って気持ちになる前に、Gentooのインストールの初めに設定したネットワークは単にインストール用のものだったことを思い出してください。今ここで自分のGentooシステムに永続的なネットワーク設定をしていきましょう。
注意:
bonding、ブリッジ、802.1Q VLANや無線ネットワークなどの高度な話題を含むもっと詳しい情報はGentooネットワーク設定セクションで扱っています。
|
全てのネットワーク情報は/etc/conf.d/netに集められます。このファイルでは単純な構文が使われているのですが、もしネットワークを手動で設定する方法を知らなれば一見しただけではわからないでしょう。でも恐がらなくてもいいですよ。全て説明しますから。様々な設定を扱った十分にコメントされた例がある/etc/conf.d/net.exampleを利用できます。
DHCPは標準で使用されています。
DHCPを動作させるためには、DHCPクライアントをインストールする必要があります。
これについては必要なシステムツールをインストールするに記述されています。
忘れずにDHCPクライアントのインストールしてください。
もし特定のDHCPのオプションが必要だったり、絶対にDHCPを使いたくなかったりして自分のネットワーク接続の設定が必要ならば、好みのエディターで/etc/conf.d/netを開いてください(この例ではnanoが使われています)。
コード表示 2.4: 編集のために/etc/conf.d/netを開く |
# nano -w /etc/conf.d/net
|
下記のファイルを見て下さい。
コード表示 2.5: Default /etc/conf.d/net |
# This blank configuration will automatically use DHCP for any net.*
# scripts in /etc/init.d. To create a more complete configuration,
# please review /etc/conf.d/net.example and save your configuration
# in /etc/conf.d/net (this file :]!).
|
自身のIPアドレス、ネットマスク、ゲートウェイを入れるには、config_eth0とroutes_eth0の両方を設定する必要があります。
コード表示 2.6: eth0のIP情報を手動で設定する |
config_eth0=( "192.168.0.2 netmask 255.255.255.0 brd 192.168.0.255")
routes_eth0=( "default via 192.168.0.1" )
|
DHCPを使用するなら、config_eth0を設定してください。
コード表示 2.7: eth0のIPを自動で取得する |
config_eth0=( "dhcp" )
|
全ての有効なオプション項目は/etc/conf.d/net.exampleを読んでください。
あなたの DHCP クライアントのmanページも読み、特別なDHCPオプションが必要かどうか確認してください。
もしいくつかのネットワークインターフェイスがあるなら、config_eth1、config_eth2のように上記ステップを繰り返してください。
さあ設定を保存・終了して次に進みましょう。
ブート時に自動でネットワークを始動させる
ブート時にネットワークインターフェースを有効にさせるには、それぞれのスクリプトをdefaultのランレベルに追加する必要があります。
コード表示 2.8: defaultのランレベルにnet.eth0を追加 |
# rc-update add net.eth0 default
|
もしいくつかのネットワークインターフェイスがあるなら、適当なnet.eth1、net.eth2等の為に起動スクリプトを作成する必要があります。これにはlnが使えます。
コード表示 2.9: 別の起動スクリプトを作成 |
# cd /etc/init.d
# ln -s net.lo net.eth1
# rc-update add net.eth1 default
|
ネットワーク情報を書き留める
さてネットワークの情報に関してLinuxシステムに知らせる必要があります。これは/etc/hostsに定義され、自分のネームサーバーでは解決されないホストの為のホスト名とIPアドレスの解決に役立ちます。
これを自分のシステムに定義する必要があります。
自分自身で内部ネットワーク向けのDNSを設定したくない場合は、
ネットワークに存在する、他のシステムも定義してもよいでしょう。
コード表示 2.10: /etc/hostsを開く |
# nano -w /etc/hosts
|
コード表示 2.11: ネットワーク情報を書き込む |
127.0.0.1 tux.homenetwork tux localhost
192.168.0.5 jenny.homenetwork jenny
192.168.0.6 benny.homenetwork benny
|
保存・終了して次へ進みましょう。
8.c. システム情報
rootのパスワード
最初にrootのパスワードを入力して設定します。
コード表示 3.1: rootのパスワードを設定 |
# passwd
|
システム情報
Gentooでは/etc/rc.confを一般的なシステム全般の設定として使用します。/etc/rc.confを開いて、その中のコメントを読んで楽しんでください。:)
コード表示 3.2: /etc/rc.confを開く |
# nano -w /etc/rc.conf
|
/etc/rc.confの設定が終われば、保存・終了してください。
見て判るように、このファイルには必要な設定の値を決めるのに役立つ良いコメントがされてます。
ユニコードを使って自分のシステムを設定し、標準のエディターとディスプレイマネージャー(gdmやkdmのような)を決める事ができます。
Gentooではキーボード設定を扱うのには/etc/conf.d/keymapsを使います。自分のキーボードを設定するにはこのファイルを編集してください。
コード表示 3.3: /etc/conf.d/keymapsを開く |
# nano -w /etc/conf.d/keymaps
|
KEYMAPの設定には特に注意してください。もし間違ったKEYMAPを選ぶとキーボードをタイプするときにとんでもなく変な結果になるでしょう。
/etc/conf.d/keymapsの設定が終われば、保存・終了してください。
Gentooではクロックオプションの設定には/etc/conf.d/clockを使います。必要に応じてこのファイルを編集してください。
コード表示 3.4: /etc/conf.d/clockを開く |
# nano -w /etc/conf.d/clock
|
ハードウェアクロックにUTCを使っていないのなら、CLOCK="local"をこのファイルに追加する必要があります。
さもなければ、いくらか時間がずれてしまうでしょう。
さらにsys-libs/timezone-dataパッケージを更新すると、自動的に/etc/localtimeがアップデートされるよう、先に/etc/localtimeへコピーしたタイムゾーンを定義すべきです。
例えば、もしタイムゾーンにGMTを使用しているとするなら、TIMEZONE="GMT"を追加します。
/etc/conf.d/clockの設定が終われば、保存・終了してください。
IBM PPC64のシステム上にGentooをインストールしていなければ 、必要なシステムツールをインストールするに進んでください。
9. 必要なシステムツールをインストールする
9.a. システムログツール
いくつかのパッケージは同じ機能を提供してるので、いくつかのツールはstage3アーカイブから無くなっています。今はどれをインストールしたいかを選ぶのは自分次第です。
最初に決める必要のあるツールは、システムにロギング機能を提供するものです。UnixとLinuxにはログ性能の素晴らしい歴史があります。-- もし望むならログファイルにシステムで起こった全てを記録できます。これはシステムログツールを通して行われます。
Gentooでは選択可能ないくつかのシステムログツールを提供しています。伝統的なシステムロギングデーモンのsysklogdがあります。syslog-ngは高機能なシステムログツールです。そしてmetalogは詳細な設定ができるシステムログツールです。他の選択もPortageを通じて可能でしょう。有効パッケージの数は日毎に増えていますから。
もしsysklogdかsyslog-ngを使おうと思っているなら、これらのシステムログツールにはログファイルをローテーションする機構が無いので、後でlogrotateをインストールしましょう。
選択したシステムログツールをインストールするには、それをemergeして、rc-updateを使って通常にランレベルにスクリプトを追加してください。次の例ではsyslog-ngをインストールします。もちろん自分で選択したシステムログツールに置き換えても構いません。
コード表示 1.1: システムログツールをインストールする |
# emerge syslog-ng
# rc-update add syslog-ng default
|
9.b. 自由選択:Cronデーモン
次はcronデーモンです。これは任意で、システムに必須ではありませんが、インストールするのは賢明なことです。しかしcronデーモンとは何でしょうか。cronデーモンは予定されたコマンドを実行します。定期的にあるコマンドを実行する必要があるならとても重宝します。(例えば日毎、週毎、月毎)。
Gentooでは3つのcronデーモンを提供しています。: dcron、fcronそしてvixie-cronです。その内の1つをインストールするのはシステムログツールをインストールするのに似ています。しかし、dcronとfcronでは特別な設定コマンドが必要とされます。すなわちcrontab /etc/crontabです。もし何を選んだら良いかわからなかったら、vixie-cronを使ってください。
ネットワーク無しのインストールではvixie-cronしか選択できません。もし他のcronデーモンが良ければ、後でインストールできるのでお待ちください。
コード表示 2.1: cronデーモンをインストールする |
# emerge vixie-cron
# rc-update add vixie-cron default
# crontab /etc/crontab
|
9.c. 自由選択: ファイルのインデックス
locateを使用して素早くファイルの検索をするために、システム中のファイルのインデックスを作成する場合には、sys-apps/slocateをインストールする必要があります。
コード表示 3.1: slocateをインストールする |
# emerge slocate
|
9.d. ファイルシステムツール
使っているファイルシステムが何かに依りますが、必須のファイルシステムツールをインストールする必要があります。(ファイルシステムの整合性をチェックしたり、追加のファイルシステムを作成する等のために)。
ext2/ext3ファイルシステムを管理するためのツール(e2fsprogs)はシステムの一部としてインストール済みであることに注意してください。
次の表はどのファイルシステムを使っているかでどのツールをインストールする必要があるかを表しています。
| ファイルシステム |
ツール |
インストールコマンド |
| XFS |
xfsprogs |
emerge xfsprogs |
| ReiserFS |
reiserfsprogs |
emerge reiserfsprogs |
| JFS |
jfsutils |
emerge jfsutils |
もしEVMSユーザーなら、evmsもインストールする必要があります。
コード表示 4.1: EVMSユーティリティーをインストールする |
# USE="-gtk" emerge evms
|
USE="-gtk"で依存関係のインストールを避ける事ができます。もしevmsのグラフィカルツールを有効にしたいなら、後でevmsを再コンパイルできます。
自由選択: IBM ハードウェア用 RAID ユーティリティ
もしPOWER5ベースのシステム上でSCSI RAIDを使っているなら、RAIDディスクアレイを扱えて、アレイ上の状況を取得したり、色々な機能の中のマイクロコードを更新できるiprutilsのインストールを考慮すべきです。
コード表示 4.2: iprutils のインストール |
# emerge iprutils
|
9.e. ネットワークツール
もし他の追加のネットワーク関連ツール(pppやdhcpクライアント等)を必要としなければ、ブートローダを設定するに進んでください。
自由選択:DHCPクライアントをインストールする
もしGentooが自動的にネットワークインターフェイスにIPアドレスを取得するようにしたいのなら、dhcpcd(もしくは他のDHCPクライアント -- 使用可能なDHCPクライアントのリストはネットワークモジュールを言らください)をシステムにインストールする必要があります。 今しなければ、インストール後にインターネットに接続できないでしょう。
コード表示 5.1: dhcpcdをインストールする |
# emerge dhcpcd
|
自由選択:PPPoEクライアントをインストールする
もしインターネットに接続するのにpppが必要なら、インストールしなければなりません。
コード表示 5.2: pppをインストールする |
# emerge ppp
|
さあブートローダを設定するに進みましょう。
10. ブートローダを設定する
10.a. ブートローダの選択
はじめに
さて、カーネルを設定し、コンパイルし、そして必要なシステムの設定ファイルも適切に編集したので、
システムを起動するときに、カーネルを立ち上げるプログラムをインストールするときが来ました。
そのようなプログラムは、ブートローダと呼ばれています。
自由選択: フレームバッファ
もし、カーネルの設定でフレームバッファサポートを有効にしている場合(あるいは、genkernelのデフォルトのカーネル設定を使用している場合)、フレームバッファを必要とするなら、vgaもしくはvideo文をブートローダの設定ファイルに追加しなければなりません。
64-bitシステムは、vesafbドライバを使わなければならないため、vga文を設定する必要があります。
vgaパラメータはvesafbのフレームバッファ画面の解像度と色深度を設定します。
/usr/src/linux/Documentation/fb/vesafb.txtにあるとおり(カーネルソースパッケージとともにインストールされますが)設定したい解像度と色深度に対応したVESA番号を使用します。
次の表は、vgaに設定する必要がある使用可能な解像度と色深度に対応した値です。
|
640x480 |
800x600 |
1024x768 |
1280x1024 |
| 256 |
0x301 |
0x303 |
0x305 |
0x307 |
| 32k |
0x310 |
0x313 |
0x316 |
0x319 |
| 64k |
0x311 |
0x314 |
0x317 |
0x31A |
| 16M |
0x312 |
0x315 |
0x318 |
0x31B |
video文はフレームバッファディスプレイオプションを設定します。
あなたが有効にしたい設定文の後に、追加します(2.6カーネルにはvesafb、2.4カーネルにはvesaになります)。
全ての変数は、/usr/src/linux/Documentation/fb/vesafb.txtに一覧として載っていますが、もっとも使われる3つのオプションに関して説明します。
| コントロール |
説明 |
| ywrap |
グラフィックカードがメモリを折り返して使用すると仮定します(例: メモリの最後まで来たら、次は先頭から始めます)。
|
| mtrr:n |
MTRRレジスタを設定します。nには、
0 - disabled
1 - uncachable
2 - write-back
3 - write-combining
4 - write-through
が設定できます。
|
これら2つの文はvga=0x318 video=vesafb:mtrr:3,ywrapかvideo=vesafb:mtrr:3,ywrap,1024x768-32@85のようになります。
必要なときすぐに使えるように、値を記憶して(あるいはメモして)おいてください。
AMD64では、LILOは動作しないため、GentooではGRUBの使用のみをサポートします。
では、インストールを続けましょう。
10.b. GRUBを使用する
GRUB特有の言葉を理解する
GRUBを理解する上で最も重要なことは、GRUBがハードディスクやパーティションの参照の仕方に慣れることです。
あなたのLinuxパーティションが/dev/hda1であったとすると、GRUBでは、(hd0,0)となります。
hd0,0に付いている括弧を忘れないように。これは付ける必要があります。
ハードディスクドライブは、"a"ではなく0から、パーティションは1ではなく0からカウントされます。
ハードディスクだけではなく、CD-ROMやCD-R/RW等のatapi-ideデバイスもhdデバイスになることにも注意してください。
また、SCSIドライブに対しても同様の数え方をします。
(BIOSで、SCSIデバイスから起動する設定になっている場合を除いて、
通常、SCSIに対してはIDEドライブより大きな数字が割り当てられます。)
BIOSの設定にて、違うハードディスクから立ち上げるとき(primary slaveとしましょう)、そのハードディスクはhd0になります。
ハードディスクが/dev/hda、CD-ROMが/dev/hdb、
CD-R/RWが/dev/hdc、2台目のハードディスクが/dev/hddにあり、
SCSIハードディスクは無いものとします。
/dev/hdd7は、GRUBでは(hd1,6)になります。
これはなんだかトリッキーな感じがしますし、実際、トリッキーなのですが、わたしたちが試したところそのようになりました。
GRUBには、タブ補完機能が備わっていて、このようにハードディスクやパーティションがたくさんある場合や、GRUBのナンバリング方法をちょっと忘れたときに便利です。
GRUBの雰囲気がつかめたところで、GRUBをインストールしましょう。
GRUBのインストール
GRUBをインストールするには、まずemergeしましょう。
コード表示 2.1: GRUBのインストール |
# emerge grub
|
これでGRUBはインストールされましたが、あなたが新たに作成したカーネルをGRUBが自動的に起動するためには、
設定ファイルを書き、GRUBをMBRに書き込む必要があります。
nano(あるいは、他のエディタでも可能ですが)で/boot/grub/grub.confを作成してください。
コード表示 2.2: /boot/grub/grub.confの作成 |
# nano -w /boot/grub/grub.conf
|
それではgrub.confファイルを仕上げてしまいましょう。
後述のように、kernel-2.6.12-gentoo-r10のカーネルイメージで、このガイドで使用しているパーティションの場合のgrub.confの例を2つ示します。
最初のgrub.confに対してのみたくさんコメントを付けています。
-
最初のgrub.confは、カーネル構築にgenkernelを使用していないユーザ向けの例です。
-
2番目のgrub.confは、カーネル構築にgenkernelを使用したユーザ向けの例です。
注意:
もしルートのファイルシステムがJFSなら、kernelラインに"ro"を絶対につける必要があります。
これはJFSが読み書き可でマウントする前に、ログを再読込する必要があるからです。
|
コード表示 2.3: genkernelを使わないユーザ用grub.conf |
default 0
timeout 30
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
title=Gentoo Linux 2.6.12
root (hd0,0)
kernel /boot/kernel-2.6.12-gentoo-r10 root=/dev/hda3
title=Windows XP
rootnoverify (hd0,5)
makeactive
chainloader +1
|
コード表示 2.4: genkernelユーザ用grub.conf |
default 0
timeout 30
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
title=Gentoo Linux 2.6.12
root (hd0,0)
kernel /boot/kernel-2.6.12-gentoo-r10 root=/dev/ram0 init=/linuxrc ramdisk=8192 real_root=/dev/hda3 udev
initrd /boot/initramfs-genkernel-amd64-2.6.12-gentoo-r10
title=Windows XP
rootnoverify (hd0,5)
makeactive
chainloader +1
|
注意:
ここで記載されている、kernelラインの最後にあるudevは、もし最初にあなたがudevを使用した場合(default設定ではそうです)、いくつかのバージョンのgenkernelで発生するバグを回避するためです。
|
もし、違うパーティション構成や、違うカーネルイメージ名を使用しているなら、適宜それにあわせてください。
(hd0,0)のようなGRUBに指定するデバイスは、ルートではなく、マウントポイントに関係します。
言い換えると、(hd0,0)/grub/splash.xpm.gzは、実際には、/boot/grub/splash.xpm.gzとなります。
これは、(hd0,0)が/bootであることによります。
加えて、もし違うパーティションスキームを選択した/bootを別のパーティションに置かなかった場合、上記サンプルコード内での/boot prefixの使用は必須です。
もし、われわれのパーティションスキームプランを選択した場合、boot symlinkが有効であるため、/boot prefixは必要とされません。
簡潔に、上のサンプルでは/bootパーティションを定義するしないにかかわらず動作するはずです。
注意:
訳注:後の方で説明がありますが、カーネルを構築後make installでカーネルをインストールする場合には、上記例でのkernel /kernel-2.6.12-gentoo-r10の部分をkernel /vmlinuzと記述してください。
|
もし、他にカーネルに渡したいオプションがあるなら、
単純にそれをkernelコマンドの最後に追加してください。
既に、root=/dev/hda3やreal_root=/dev/hda3といったオプションを渡していますが、
他のオプションも同様にカーネルに渡すことができます。
例えば、以前話題に出したフレームバッファ用のvideoオプションを渡すことができます。
genkernelを使用している場合、その起動オプションはインストールCDで使われているものと同じになります。
例えば、SCSIデバイスを持っている場合、カーネルオプションとしてdoscsiを追加します。
それでは、grub.confファイルを保存してエディタを終了してください。
システム起動時にGRUBが自動的に実行されるようにするためには、MBR (Master Boot Record、マスターブートレコード)にGRUBをインストールする必要があります。
GRUBの開発者はgrub-installを使用することを奨めています。
しかし、なんらかの理由でgrub-installが正常動作しない場合、
GRUBを手動でインストールする方法もあります。
一般的な選択: grub-installを使用してGRUBをインストールするまたは、もう一つの選択: GRUBを手動でインストールするへ進みしょう。
一般的な選択: grub-installを使用してGRUBをインストールする
GRUBをインストールするためには、grub-installコマンドを実行する必要があります。
しかし、chroot環境にいるためgrub-installは簡単には使えません。
はじめに、すべてのマウント済みファイルシステムの一覧である/etc/mtabを作成する必要があります。
幸運なことにこれを簡単にやる方法があります。
単に、/proc/mountsを/etc/mtabへ次のように上書きコピーします。
ただし、別のパティションを作成していない場合は、rootfsラインを除きます。
次のコマンドは両方の場合に有効です。
コード表示 2.5: /etc/mtabを作成する |
# grep -v rootfs /proc/mounts > /etc/mtab
|
これでgrub-installを使用してGRUBをインストールすることができます。
コード表示 2.6: grub-installを起動する |
# grub-install /dev/hda
|
もしGRUBに関してさらに疑問があるなら、GRUB FAQあるいはGRUB Manualを参照してください。
それでは、システムの再起動へ進みましょう。
もうひとつの選択肢: GRUBを手動でインストールする
GRUBの設定を始めるために、grubと打ち込んでください。
grub>というGRUBコマンドラインプロンプトが現れたでしょう。
ここで、ハードディスクのブートレコードにGRUBをインストールするためには、正しいコマンドを打ち込む必要があります。
コード表示 2.7: GRUBシェルの開始 |
# grub
|
注意:
もしあなたのシステムにフロッピードライブがないなら、
GRUBが存在しないフロッピードライブを捜査しないように、
--no-floppyオプションを上記コマンドに追加してください。
|
次の例では、GRUBが/bootパーティションの/dev/hda1から情報を読むように、
そして、コンピュータの電源を入れた後、最初にGRUBプロンプトが出現するように、
ハードディスクのMBR(master boot record、マスターブートレコード)にGRUBをインストールしています。
もちろん、例に従って設定する必要はなく、必要に応じて変更してください。
GRUBのタブ補完機能は、GRUBシェルの中で使用できます。
例えば、"root ("と打ち込んで、続いてTABキーを押した場合、
hd0のようなデバイスの一覧を見ることができるでしょう。
"root (hd0,"に続いてTABキーを押した場合は、hd0,0のような撰択可能なパーティションの一覧を取得できます。
TAB補完を使うことによって、GRUBの設定はそれほど大変ではなくなるでしょう。
それでは、GRUBの設定をしましょう。
コード表示 2.8: GRUBをMBRにインストールする |
grub> root (hd0,0)
grub> setup (hd0)
grub> quit
|
注意:
GRUBをMBRではなく、特定のパーティションにインストールしたいなら、
setupコマンドの部分を編集して、それが正しいパーティションを指すようにします。
例えば、GRUBを/dev/hda3にインストールしたい場合、setup (hd0,2)というコマンドになります。
しかしながら、こういうことをしたいユーザはあまりいません。
|
もしGRUBに関してさらに疑問があるなら、GRUB FAQあるいはGRUB Manualを参照してください。
それでは、システムの再起動へ進みましょう。
10.c. システムの再起動
chroot環境を抜けて、マウントしたすべてのパーティションをアンマウントしてください。
そして、待ちに待った次のコマンドを入力しましょう: reboot
コード表示 3.1: すべてのパーティションをアンマウントし再起動する |
# exit
# cd
# umount /mnt/gentoo/boot /mnt/gentoo/dev /mnt/gentoo/proc /mnt/gentoo
# reboot
|
もちろん、起動CDを抜くことを忘れずに。さもなければ、新しいGentooシステムではなく、CDからまた起動してしまいます。
再起動したら、Gentooインストールの終わりへ進んでインストールを完了させましょう。
11. Gentooインストールの締めくくり
11.a. ユーザ管理
日常作業で使用するためのユーザを追加
Unix/Linux システム上で、rootユーザで作業するのは危険であり、できるだけ避けるべきです。
したがって、日常作業で使用するためのユーザを追加することが強く推奨されます。
グループはユーザがどのような行動を取ることができるかを定義したメンバーのことです。
以下の表に、利用すると考えられるいくつかの重要なグループを示します。
| グループ |
詳細 |
| audio |
オーディオデバイスへのアクセスが可能 |
| cdrom |
光学デバイスへの直接アクセスが可能 |
| floppy |
フロッピーデバイスへの直接アクセスが可能 |
| games |
ゲームで遊ぶことが可能 |
| portage |
一般ユーザでemerge --pretendを使用可能 |
| usb |
USBデバイスへのアクセスが可能 |
| plugdev |
カメラやUSBメモリスティックといった接続デバイスをマウント可能
|
| video |
ビデオキャプチャーデバイスへのアクセスとハードウェアアクセラレーションが可能
|
| wheel |
suの使用が可能 |
例えば、wheel、usersそしてaudioグループに所属するjohnというユーザを作るときには、まずrootでログインして(rootだけがユーザを作ることができます)useraddを実行します。
コード表示 1.1: 日常作業で使用するためのユーザを作成 |
Login: root
Password:
# useradd -m -G users,wheel,audio -s /bin/bash john
# passwd john
Password:
Re-enter password:
|
もしこのユーザがrootとして作業する必要があれば、一時的にroot権限を持つためにsu -を使うことができます。
また、sudoパッケージを使うこともできます。これは正しく設定されていればとても安全な方法です。
11.b. ディスクの片付け
tarball の削除
Gentooのインストールは終了し、再起動も行いました。
何も問題がなければダウンロードしたステージ3 tarballと Portage スナップショットをハードディスクから削除してかまいません。/ にダウンロードしたことを思い出してください。
コード表示 2.1: ステージ3 tarball の削除 |
# rm /stage3-*.tar.bz2*
|
コード表示 2.2: Portage スナップショットの削除 |
# rm /portage-latest.tar.bz2*
|
12. これからどうすればいいの?
12.a. ドキュメント
おめでとうございます!これであなたのGentooシステムは動くようになりました。
でも、次は何をすればいいのでしょう?何を選べばいいのでしょう?
まず何を探ればいいのでしょう?
Gentooにはたくさんの可能性と、たくさんの文書化された(そしてあまり文書化されていない)特徴があります。
Gentooハンドブックの次の部「Gentooを使いこなす」はぜひとも読んでください。
ソフトウェアを最新の状態に保つ方法、さらに多くのソフトウェアをインストールする方法、USEフラグとは何か、Gentooのinitシステムの動作について、などが書かれています。
もしあなたのシステムをデスクトップ用途に最適化したいか、完全にデスクトップシステムとして動作するように設定する方法が知りたいなら、広範囲にわたるデスクトップ構築ガイド(日本語訳)を読んでください。それに加えて、自分のシステムを使いやすくするために、 Gentoo Linuxローカライズガイド(日本語訳)を使いたいかもしれません。
Gentoo Security Handbook(訳注:古いドキュメントがGentoo Linux セキュリティ・ガイドにあります)には、読んでおく価値のある膨大なドキュメントがあります。
すべての参照可能なドキュメントの一覧は、Gentooドキュメント(日本語訳)のページを見てください。
12.b. ネット上のGentoo
当然のことながら、Gentoo Forums (訳注: ほとんどが英語です)やたくさんあるGentoo IRCのチャネルはいつでも大歓迎です。
さらに、Gentooにはユーザ向けに公開されたメーリングリスト (訳注: 英語メーリングリストの情報です)がいくつかあります。
加入方法については、メーリングリストのページを見てください。
この辺りで終わりにしておきます。続きのインストールを楽しんでください :)
B. Gentooを使いこなす
1. Portageについて
1.a. Portageへようこそ
PortageはもしかするとGentooのソフトウェア管理における最も革新的な注目すべきものかもしれません。
その高い柔軟性と膨大な量の機能で、たびたびLinuxで利用できる最高のソフトウェア管理ツールと見られています。
Portageは全てPythonとBashによって書かれており、
両方ともスクリプト言語であるため、ユーザーにとって全体的に見通しのよいものになっています。
ほとんどのユーザーがemergeツールを通してPortageを利用しています。
この章はemergeのmanページから利用可能な情報の複製を作るつもりはありません。
emergeのオプションについての完全な概要を得るために、manページを調べてください。
コード表示 1.1: emergeのmanページを読む |
$ man emerge
|
1.b. Portageツリー
ebuild
パッケージについて話すとき、私たちはたびたびGentooユーザーがPortageツリーを通して利用可能なソフトウェアのタイトルを意味しています。
Portageツリーはebuildという、Portageがソフトウェアを維持する(インストール、検索など)ために必要な全ての情報を含んだファイルのコレクションです。
これらebuildはデフォルトでは/usr/portageに存在します。
Porgageにソフトウェアタイトルに関する行動を行うよう指示するときはいつでも、システムにあるebuildがベースに使われます。
故にPortageが新しいソフトウェアやセキュリティアップデートなどを知るために、定期的にebuildを更新することが重要です。
Portageツリーの更新
Portageツリーは一般にrsyncという高速ファイル転送ユーティリティで更新されます。
更新はrsyncのフロントエンドを提供するemergeコマンドを使うというとても簡単なものです。
コード表示 2.1: Portageツリーの更新 |
# emerge --sync
|
もしファイヤーウォールの制限などによりrsyncが実行できないときには、毎日作成されるPortageツリーのスナップショットを利用することによってPortageを更新することができます。
emerge-webrsyncツールは自動的に最新のスナップショットを取得し、システムにインストールしてくれます。
コード表示 2.2: emerge-webrsyncを実行 |
# emerge-webrsync
|
1.c. ソフトウェアのメンテナンス
ソフトウェアの検索
Portageツリーからソフトウェアタイトルを検索するには、emergeに内蔵された検索能力を利用することができます。
デフォルトでは、emerge --searchは検索用語に(完全もしくは部分)一致したパッケージ名を返します。
例えば、"pdf"を名前に持つパッケージを検索するにはこうします。
コード表示 3.1: pdfと名付けられたパッケージを検索 |
$ emerge --search pdf
|
もし詳細を検索したいのなら--searchdesc(もしくは -S)スイッチを使うことができます。
コード表示 3.2: pdfに関連したパッケージを検索 |
$ emerge --searchdesc pdf
|
出力を見ると、それがたくさんの情報を与えてくれることに気付くでしょう。
それらが意味するものと違うように取られないために、各フィールドにははっきりとラベル付けがされています。
コード表示 3.3: 'emerge --search'の結果の例 |
* net-print/cups-pdf
Latest version available: 1.5.2
Latest version installed: [ Not Installed ]
Size of downloaded files: 15 kB
Homepage: http://cip.physik.uni-wuerzburg.de/~vrbehr/cups-pdf/
Description: Provides a virtual printer for CUPS to produce PDF files.
License: GPL-2
|
ソフトウェアのインストール
一度好みのソフトウェアを見つけたら、emergeで簡単にインストールすることができます。ただパッケージの名前を追加するだけです。
例えば、gnumericをインストールするにはこうします。
コード表示 3.4: gnumericのインストール |
# emerge gnumeric
|
たくさんのアプリケーションがお互いに依存し合っているため、あるソフトウェアを確実にインストールしようとすると、
結果的にいくつかの依存関係もインストールすることになるでしょう。
ご心配なく、Portageは依存関係をうまく扱ってくれます。
もしパッケージをインストールしたいときにPortageが何をインストールしようとしているか確かめたいときには、
--pretendスイッチを追加します。例えばこのようにします。
コード表示 3.5: gnumericをインストールするふりをする |
# emerge --pretend gnumeric
|
Portageにパッケージをインストールするよう要求したときは、必要なソースコードをインターネットからダウンロードし、
デフォルトでは/usr/portage/distfilesに保持します。
この後、解凍し、パッケージをコンパイルしてインストールします。
Portageにソースをダウンロードするだけでインストールは行って欲しくないときには、emergeコマンドに--fetchonlyコマンドを追加します。
コード表示 3.6: gnumericのソースコードをダウンロード |
# emerge --fetchonly gnumeric
|
インストール済みパッケージのドキュメントを検索
多くのパッケージはドキュメントと共にインストールされます。
時々、docUSEフラグはパッケージのドキュメントをインストールするかしないかを定義します。
現在のdocUSEフラグを確認するにはemerge -vp <package name>コマンドを使用します。
コード表示 3.7: 現在のdoc USEフラグを確認 |
# emerge -vp alsa-lib
[ebuild N ] media-libs/alsa-lib-1.0.14_rc1 -debug +doc 698 kB
|
docUSEフラグを有効にするのに一番良い方法は、/etc/portage/package.useによってパッケージごとに行うやり方です。
そのため、興味のあるパッケージの分だけドキュメントを取得できるようになります。
このフラグを全体に有効にしてしまうと、循環依存の問題を起こす原因となることが知られています。
詳しくは、USEフラグの章を読んでください。
パッケージがインストールされると、ドキュメントは一般的には/usr/share/docディレクトリの下のパッケージ名のディレクトリの中にあります。
app-portage/gentoolkitパッケージ(日本語訳)の一部であるequeryツールを利用すると、全てのインストールされたファイルの一覧を表示できます。
コード表示 3.8: パッケージドキュメントの位置 |
# ls -l /usr/share/doc/alsa-lib-1.0.14_rc1
total 28
-rw-r--r-- 1 root root 669 May 17 21:54 ChangeLog.gz
-rw-r--r-- 1 root root 9373 May 17 21:54 COPYING.gz
drwxr-xr-x 2 root root 8560 May 17 21:54 html
-rw-r--r-- 1 root root 196 May 17 21:54 TODO.gz
# equery files alsa-lib | less
media-libs/alsa-lib-1.0.14_rc1
* Contents of media-libs/alsa-lib-1.0.14_rc1:
/usr
/usr/bin
/usr/bin/alsalisp
|
ソフトウェアの削除
システムからパッケージを削除したいときは、emerge --unmergeを利用します。
これはPortageにパッケージによってインストールされた設定ファイルをのぞく全てのファイルを削除するよう命令します。
設定ファイルを残しておくと、もう一度インストールしようと決めたときに作業を続けることが可能です。
しかし、大きな警告があります:Portageは削除したいパッケージが他から必要とされているかを確認しません。
とにかく、unmergeするとシステムを破壊する様な重要なパッケージを削除するときには気をつけろと言うことです。
コード表示 3.9: gnumericをシステムから削除 |
# emerge --unmerge gnumeric
|
システムからパッケージを削除するときには、インストール時に依存関係により自動的にインストールされたソフトウェアは残されます。
Portageにある削除可能な依存関係を削除するには、emergeの--depclean機能を利用します。
これについては後で話します。
システムの更新
システムを完全な形に保つ(もちろん最新のセキュリティアップデートをインストールすることも)には、システムを定期的に更新する必要があります。
Portageはツリーの中のebuildsのみ確認するので、最初にPortageツリーを更新しなければなりません。
Portageツリーが更新されたら、emerge --update worldでシステムを更新できます。
次の例では--askスイッチを使用しています。
これは、更新するパッケージの一覧をPortageに表示させ、続行するかを尋ねます。
コード表示 3.10: システムを更新する |
# emerge --update --ask world
|
Portageはインストールされているアプリケーションの新しいバージョンを検索します。
しかし、これは明示的にインストールされたものしか確かめません(そうしたアプリケーションは/var/lib/portage/worldにリストされています)。
つまり、それらの依存関係は確認しないということです。
システムの個々のパッケージすべてを更新したいときには--deep引数を与えてやります。
コード表示 3.11: システムの全てを更新する |
# emerge --update --deep world
|
明示的にインストールしていない(だが他のプログラムの依存によりインストールされた)パッケージのセキュリティアップデートがあるかもしれないので、このコマンドを時々実行することが推奨されています。
もし最近USEフラグを変更したのなら、--newuseを追加したくなるでしょう。
そうするとPortageは新しいパッケージのインストールか既にあるものの再コンパイルが必要かを確認します。
コード表示 3.12: 完全な更新の実行 |
# emerge --update --deep --newuse world
|
メタパッケージ
Portageツリーのいくらかのパッケージは実際には何も含まれていませんが、パッケージのコレクションのインストールに利用されるものがあります。
例えば、kdeパッケージは様々なKDE関連のパッケージを依存関係に引き連れて、完全なKDE環境をシステムにインストールします。
このようなパッケージをシステムから削除したいときには、emerge --unmergeをパッケージに対して実行しても依存関係が残ってしまうのでたいした効果は得られないでしょう。
Portageは残された依存関係を削除する機能性を持っていますが、動的に依存関係を変更するソフトウェアが存在するので、
USEフラグに変更を加えたときも含めてまずシステムを完全に更新する必要があります。
その後残された依存関係を削除するためにemerge --depcleanを実行してください。
これが完了したら、今削除されたソフトウェアを動的にリンクしているが、もはやそれを必要としないアプリケーションを再ビルドします。
これら全ては以下の3つのコマンドで処理できます。
コード表示 3.13: 残された依存関係を削除する |
# emerge --update --deep --newuse world
# emerge --depclean
# revdep-rebuild
|
revdep-rebuildはgentoolkitによって提供されます;まず最初にemergeすることを忘れないでください。
コード表示 3.14: gentoolkitパッケージのインストール |
# emerge gentoolkit
|
1.d. Portageが不満を言ったら
SLOT、Virtual、ブランチ、アーキテクチャ、そしてProfilesについて
既に述べたように、Portageはとても強力で他のソフトウェア管理ツールに無い多くの機能をサポートしています。
このことを理解するために、あまり細かくなり過ぎるのを避けて、もう少しPortageの特徴について説明します。
Portageでは、一つのパッケージで複数のバージョンをシステム上に共存させることができます。
他のディストリビューションがそれらの名前にバージョンを付けている(freetypeとfreetype2の様に)のに対し、
PortageはSLOTと呼ばれる技術を使っています。
ebuildはそのバージョンの確かなSLOTを宣言します。異なったSLOTのebuildはシステムに共存できます。
例えば、freetypeパッケージはSLOT="1"とSLOT="2"のebuildを持っています。
同じ機能を提供しますが異なった実装のパッケージもまた存在します。
例えば、metalogd、sysklogd、syslog-ngは全てシステムロガーです。
「システムロガー」の機能を必要とするアプリケーションは、例えばmetalogdに依存することはできません。他のシステムロガーも同様に問題のない選択だからです。
Portageはvirtualsを考慮に入れます:他のアプリケーションがvirtual/syslogに依存できるように、それぞれのシステムロガーはvirtual/syslogを規定します。
Portageツリーのソフトウェアは異なったブランチに所属することができます。
デフォルトではシステムはGentooがstableだと思うもののみ受け付けます。
ほとんどのコミットされた新しいソフトウェアのタイトルは、stableにされる前にもっとテストが必要だという意味のテストブランチに追加されます。
これらのソフトウェアのebuildをPortageツリーで見かけても、Portageはstableブランチに置かれるまでは更新しようとしないでしょう。
いくらかのソフトウェアは少しのアーキテクチャのみで利用可能です。
すなわちそのソフトウェアは他のアーキテクチャでは動作しないか、もっとテストが必要か、
Portageツリーにソフトウェアをコミットした開発者が異なったアーキテクチャで動作するかどうか確認できないかです。
各々のGentooのインストールはあるプロファイルと一緒になっています。
それには、他の情報と一緒に、システムが正常に動作するために必要なパッケージのリストが含まれています。
ブロックされたパッケージ
コード表示 4.1: ブロックされたパッケージに対するPortageの警告(--pretendを利用) |
[blocks B ] mail-mta/ssmtp (is blocking mail-mta/postfix-2.2.2-r1)
|
コード表示 4.2: ブロックされたパッケージに対するPortageの警告(--pretendを利用しない) |
!!! Error: the mail-mta/postfix package conflicts with another package.
!!! both can't be installed on the same system together.
!!! Please use 'emerge --pretend' to determine blockers.
|
ebuildはPortageの依存関係に関する特別なフィールドを含んでいます。
依存関係には2つの種類があります: DEPENDによって宣言されたビルド依存と、RDEPENDよって宣言された実行時依存です。
これらの依存関係が明確に互換性のないパッケージまたはvirtualを指している場合、ブロックを引き起します。
ブロックを解決するには、パッケージのインストールを行わないか、衝突しているパッケージを先にunmergeするかのどちらかを選べます。
上記の例では、postfixのインストールを諦めるか、先にssmtpを削除するかのどちらかです。
<media-video/mplayer-bin-1.0_rc1-r2のように特定のパッケージ識別子(atom)を伴いブロックしていることがあるかもしれません。
この場合、ブロックしているパッケージをより新しいバージョンに更新すれば、ブロックを取り除くことができかもしれません。
既にインストールされた2つのパッケージがお互いをブロックし合っていることもあります。
このまれな場合は、何故それらをインストールする必要があるのかを知るべきです。
ほとんどの場合、1つのパッケージのみで事足ります。
そうでなければ、Gentooのバグトラックシステムにバグを報告してください。
マスクされたパッケージ
コード表示 4.3: マスクされたパッケージに対するPortageの警告 |
!!! all ebuilds that could satisfy "bootsplash" have been masked.
|
コード表示 4.4: マスクされたパッケージに対するPortageの警告に関する理由 |
!!! possible candidates are:
- gnome-base/gnome-2.8.0_pre1 (masked by: ~x86 keyword)
- lm-sensors/lm-sensors-2.8.7 (masked by: -sparc keyword)
- sys-libs/glibc-2.3.4.20040808 (masked by: -* keyword)
- dev-util/cvsd-1.0.2 (masked by: missing keyword)
- games-fps/unreal-tournament-451 (masked by: package.mask)
- sys-libs/glibc-2.3.2-r11 (masked by: profile)
|
システムで利用できないパッケージをインストールしようとしたときに、このマスクエラーを受け取るでしょう。
あなたはシステムで利用できる他のアプリケーションのインストールを試みるか、パッケージが利用可能になるまで待つかをするべきです。
パッケージがマスクされているのにはいつも理由があります。
-
~arch keyword はstableブランチに置くには十分なテストが行われていないことを意味します。
何日か何週間か待ってもう一度試してみてください。
-
-arch keywordか-* keywordはあなたのアーキテクチャでは動作しないことを意味します。
もしパッケージが動作すると信じているならbugzillaにバグを提出してください。
-
missing keywordはあなたのアーキテクチャでは未だテストされていないことを意味します。
アーキテクチャのポーティングチームにテストするよう頼むか、彼らのために自分でテストして気付いたことをbugzillaまで報告してください。
-
package.maskはパッケージが壊れている、unstableもしくは非推奨であるということが判明していて、故意に利用禁止とマークされていることを意味します。
-
profileはあなたのプロファイルには適当ではないことを意味します。
インストールするとシステムを破壊するおそれがあるか、もしくは単にあなたのprogileと互換性がないかのどちらかです。
依存関係の喪失
コード表示 4.5: 依存関係の喪失に対するPortageの警告 |
emerge: there are no ebuilds to satisfy ">=sys-devel/gcc-3.4.2-r4".
!!! Problem with ebuild sys-devel/gcc-3.4.2-r2
!!! Possibly a DEPEND/*DEPEND problem.
|
インストールしようとしているアプリケーションはシステムで利用できない他のパッケージに依存しています。
bugzillaに既に報告されているか確認して、まだであれば報告してください。
ブランチを混ぜていない限りこれが起こることはありませんので、それはバグであると言えます。
曖昧なebuild名
コード表示 4.6: 曖昧なebuild名に対するPortageの警告 |
!!! The short ebuild name "aterm" is ambiguous. Please specify
!!! one of the following fully-qualified ebuild names instead:
dev-libs/aterm
x11-terms/aterm
|
インストールしようとしているアプリケーション名が2つ以上と一致しています。
正しいカテゴリー名を追加する必要があります。
Portageは可能性のある一致した選択肢を知らせるでしょう。
循環依存
コード表示 4.7: 循環依存に対するPortageの警告 |
!!! Error: circular dependencies:
ebuild / net-print/cups-1.1.15-r2 depends on ebuild / app-text/ghostscript-7.05.3-r1
ebuild / app-text/ghostscript-7.05.3-r1 depends on ebuild / net-print/cups-1.1.15-r2
|
2つ(もしくはそれ以上)のインストールしたいパッケージがお互いに依存し合っているためにインストールすることができません。
これはほとんどはPortageツリーのバグです。
bugzillaに既に報告されているか確認して、まだであれば報告してください。
取得失敗
コード表示 4.8: 取得失敗に対するPortageのエラー |
!!! Fetch failed for sys-libs/ncurses-5.4-r5, continuing...
!!! Some fetch errors were encountered. Please see above for details.
|
Portageがアプリケーションのソースのダウンロードに失敗し、他のアプリケーションのインストールを続けようとしています。
この失敗はミラーが正しく同期されていないか、ebuildが正しくない場所を示しているからかもしれません。
ソースを置いているサーバーが何らかの理由でダウンしているのかもしれません。
この問題がいつまでも続くようであれば1時間後にもう一度試してください。
システムプロファイルの保護
コード表示 4.9: プロファイルによって保護されたパッケージに対するPortageの警告 |
!!! Trying to unmerge package(s) in system profile. 'sys-apps/portage'
!!! This could be damaging to your system.
|
あなたはシステムのコアの一部であるパッケージを削除しようとしました。
それはプロファイルに必要であると載っているのでシステムから削除できません。
ダイジェスト検証の失敗
ときどき、あるパッケージをemergeしようとして、次のようなメッセージと共に失敗することがあるかもしれません。
コード表示 4.10: ダイジェスト検証の失敗 |
>>> checking ebuild checksums
!!! Digest verification failed:
|
これはPortageツリーにどこかおかしい所がある兆候です。
よく、開発者がパッケージをツリーにコミットするとき失敗したことが原因で起こります。
Digestの検証に失敗するとき、そのパッケージをあなた自身で再度ダイジェスト作成しようとしてはいけません。
この問題はebuild foo manifestでは修正されない上に、ほぼ間違いなく悪化します。
かわりに、1時間か2時間ツリーが安定するのを待っていてください。
おそらくエラーはすぐに検知されると思いますが、修正がPortageツリーに流れるのに少し時間がかかります。
待っている間、Bugzillaをチェックし、誰かがこの問題をすでに報告しているか調べてください。
もし報告している人がいなければ、すぐ壊れているパッケージのバグ報告をしてください。
いったんバグが修正されたことを確認したら、再び同期し修正されたダイジェストを取得する必要があるでしょう。
重要:
これは何度もツリーの同期をしてもよいという意味ではありません!
rsycnポリシーの中で述べられているように(emerge --syncを走らせたとき)、
あまり頻繁に同期するユーザは接続を禁止されることになります!
実際には次の定期的な同期まで待ち、そしてrsyncサーバに負荷をかけないようにしてください。
|
2. USEフラグ
2.a. USEフラグとは
USEフラグの背景
Gentooをインストールするとき(または他のディストリビューション、
OSをインストールする場合も含めて)利用する環境により異なる選択をすることなります。
サーバー向けのセットアップはワークステーションのそれとはちがいます。
ゲーム用マシンと3Dレンダリングワークステーションも違いがあります。
このことは、インストールするパッケージの選択だけでなく、
パッケージがサポートする機能にも当てはまります。
もし、OpenGLが必要ないのであれば、面倒な思いをしながらOpenGLをインストールしたり、
他のほとんどのパッケージでOpenGLサポートをつけてビルドする必要はないのです。
もしKDEを使いたくない場合、KDEサポートがなくてもちゃんと動くパッケージ
にわざわざKDEサポートつけてパッケージをコンパイル必要はありますか?
ユーザーが何をインストール/有効にして、何をそうしないのか決めやすいよう
簡単にユーザーの環境を指定する方法が必要となりました。
この方法によりユーザーは本当に必要なものを決めることになり、
またパッケージ管理システムであるPortageの判定処理が軽減されるのです。
USEフラグの定義
USEフラグについて話をはじめましょう。
フラグはあるコンセプトのサポートと依存関係をあらわしたものです。
もしあるUSEフラグを定義すると、Portageに選んだキーワードに対応するよう伝えられます。
もちろん、これによりパッケージに対する依存情報も変更されます。
一つkdeというキーワードの例を挙げてみましょう。
USE変数のなかにこのキーワードが設定されていなければ、
オプションでKDEサポートをもつパッケージはKDEサポートなしでコンパイルされます。
オプションでKDEへの依存関係があるパッケージの場合、
(依存関係のため)KDEライブラリーなしでインストールされます。
もし、kdeキーワードを指定している場合、
こうしたパッケージはKDEサポート付でインストールされ、
依存関係に従ってKDEライブラリーもインストールされます。
正しくキーワードを設定することで、必要に応じたシステムが得られるのです。
どんなUSEフラグがあるのか
USEフラグには二つのタイプがあります。グローバルとローカルUSEフラグです。
-
グローバルUSEフラグはいくつかのパッケージで使われ、
システム全体に影響するものです。これが普通USEフラグと呼ばれるものです。
-
ローカルUSEフラグは単独パッケージが対象で、そのパッケージ特有の判断に使います。
使用可能なグローバルUSEフラグのリストは
オンライン
か
/usr/poratge/profiles/use.desc
にあります。
使用可能なローカルUSEフラグは
/usr/portage/profiles/use.local.desc
にあります。
2.b. USEフラグを使いこなす
永続的なUSEフラグ宣言
USEフラグの重要性を認識してもらった、というところで、
USEフラグを宣言する方法についてお伝えしましょう。
すでに触れたように、すべてのUSEフラグはUSE変数のなかで宣言されています。
ユーザーがUSEフラグを調べたり、選んだりしやすいよう、
デフォルトのUSEセッティングが提供されています。
このセッティングはGentooユーザーが一般的に使用すると考えられるUSEフラグを集めたものです。
このデフォルトのセッティングはプロファイルの一部make.defaultsのファイルで宣言されています。
システムが参照しているプロファイルは/etc/make.profileのシンボリックリンクで指し示されます。
それぞれのプロファイルは別のより大きなプロファイルのもとに機能し、
結果としてすべてのプロファイルが足しあわされたものになります。
トッププロファイルはbaseプロファイル(/usr/portage/profiles/base)になります。
2004.3プロファイルのデフォルトのセッティングを見てみましょう。
コード表示 2.1: 2004.3プロファイルにたいして足し合わされたmake.defaults USE変数 |
USE="x86 oss apm arts avi berkdb bitmap-fonts crypt cups encode fortran f77
foomaticdb gdbm gif gpm gtk imlib jpeg kde gnome libg++ libwww mad
mikmod motif mpeg ncurses nls oggvorbis opengl pam pdflib png python qt
quicktime readline sdl spell ssl svga tcpd truetype X xml2 xmms xv zlib"
|
今見たように、この変数はすでにかなり多くのキーワードが含まれています。
しかし、あなたが必要とするUSE変数にあわせるため
make.defaults
にあるどのファイルも変更していはいけません。
このファイルの変更はPoratgeアップデートの際に元に戻ってしまいます!
このデフォルトセッティングを変えるためには、
USE変数にキーワードを追加か削除をしなくてはなりません。
これはUSE変数を/etc/make.confに設定することでシステム全体に行われます。
この変数に必要な追加USEフラグを加えるか、必要のないUSEフラグを外せばよいだけです。
USEフラグを外すためにはキーワードの前に"-"(マイナス記号)をつけてください。
たとえば、KDEとQTサポートを外してLDAPサポートをつけるには、
次のようにUSEをetc/make.confに宣言します。
コード表示 2.2: /etc/make.conf でのUSE設定例 |
USE="-kde -qt3 -qt4 ldap"
|
個々のパッケージに対するUSEフラグ宣言
一つか二つほどのアプリケーションに対しあるUSEフラグを宣言したいが
システム全体には適用したくない、という場合です。
これには(存在しなければ)
/etc/portage
ディレクトリを作成します。そして
/etc/portage/package.use
を編集します。
これは普通一つのファイルですが、ディレクトリにすることもできます。
さらなる情報はman portageを見てください。
以下の例ではpackage.useが一つのファイルだと仮定しています。
たとえばberkdbはパッケージ全体的に適用したくないが、
mysqlだけには適用したい場合、次のように書き加えます。
コード表示 2.3: /etc/portage/package.use 例 |
dev-db/mysql berkdb
|
明示的にUSEフラグを無効にすることもできます。
たとえばPHPに対してjavaを無効にしたい場合です。
コード表示 2.4: /etc/portage/package.use 2番目の例 |
dev-php/php -java
|
一時的なUSEフラグ宣言
あるUSEの設定を一回だけ使いたいといったことが時にはあります。
/etc/make.confを二度(変更して元に戻す)編集する代わりに、
USE変数を環境変数として宣言することもできます。
ただし、再emergeしたりアップデートする場合(明示的に行うときとシステムアップデート両方の場合)、
は変更は破棄されてしまうのでご注意ください。
seamonkeyをインストールする際にUSEの設定から一時的にjavaを除く例です。
コード表示 2.5: 環境変数としてUSEを使う |
# USE="-java" emerge seamonkey
|
優先順位
当然のことながら、USEの設定では
どの設定が優先するのかという順位付けがあります。
また、javaが優先順位の関係で有効になってしまっているのを
確かめるためだけにUSE="-java"の設定もしたくないでしょう。
USE設定の優先順位は、下のような順番になっています
(最初のものが低い優先度です)。
-
プロファイルの中のmake.defaultsで宣言されているデフォルUSE設定
-
/etc/make.conf でのユーザー設定
-
/etc/portage/package.use でのユーザー設定
-
ユーザーによる環境変数としてのUSE設定
最終的なPortageのUSE設定を確認するためにはemerge infoを実行してください。
これにより(USE設定を含んだ)Portageに関連するすべての変数のリストが表示されます。
コード表示 2.6: emerge --info の実行 |
# emerge info
|
システム全体を新しいUSEフラグに対応させるには
もしUSEフラグを新しくしシステム全体を新しいフラグに対応させたい場合、
emergeの--newuseオプションを使用してください。
コード表示 2.7: システム全体を再構築する |
# emerge --update --deep --newuse world
|
次に新しいUSEフラグにより不要になった、「古い」条件付き依存関係をPortageのdepclean
により削除してください。
警告:
emerge --depcleanは危険な動作をします。注意深く行わなければいけません。
「不要」なパッケージのリストは二重にチェックし予期しないパッケージ削除がないようにしてください。
次の例では削除を避けリストだけ表示されるよう-pスイッチを追加しています。
|
コード表示 2.8: 不要パッケージの削除 |
# emerge -p --depclean
|
depcleanが終了したならば、削除された可能性のあるパッケージから提供されている
シェアードオブジェクトとの動的リンク再構築するためにrevdep-rebuildを実行してください。
revdep-rebuildはgentoolkitパッケージの一部として提供されています。
まず、このパッケージをemergeすることを忘れないでください。
コード表示 2.9: revdep-rebuildの実行 |
# revdep-rebuild
|
すべておわると、システムは新しいUSEフラグの設定になっています。
2.c. パッケージ固有のUSEフラグ
使用可能なUSEフラグの表示
seamonkeyを例にとってみましょう。 どんなUSEフラグが利用できるのか、
調べるためにはemergeに--pretendと--verboseオプションをつけてください。
コード表示 3.1: USEフラグの表示 |
# emerge --pretend --verbose seamonkey
These are the packages that I would merge, in order:
Calculating dependencies ...done!
[ebuild R ] www-client/seamonkey-1.0.7 USE="crypt gnome java
-debug -ipv6 -ldap -mozcalendar -mozdevelop -moznocompose -moznoirc
-moznomail -moznopango -moznoroaming -postgres -xinerama -xprint" 0 kB
|
こうしたことができるのはemregeだけではありません。
equeryと呼ばれる専用のツールがあります。
これはgentoolkitパッケージの一部です。
まずはgentoolkitをインストールしてください。
コード表示 3.2: gentoolkitのインストール |
# emerge gentoolkit
|
USEフラグをみるためにequeryをuses付で実行します。
gunumericの例です。
コード表示 3.3: equeryで使用されているUSEフラグを見る方法 |
# equery --nocolor uses =gnumeric-1.6.3 -a
[ Searching for packages matching =gnumeric-1.6.3... ]
[ Colour Code : set unset ]
[ Legend : Left column (U) - USE flags from make.conf ]
[ : Right column (I) - USE flags packages was installed with ]
[ Found these USE variables for app-office/gnumeric-1.6.3 ]
U I
- - debug : Enable extra debug codepaths, like asserts and extra output.
If you want to get meaningful backtraces see
http://www.gentoo.org/proj/en/qa/backtraces.xml .
+ + gnome : Adds GNOME support
+ + python : Adds support/bindings for the Python language
- - static : !!do not set this during bootstrap!! Causes binaries to be
statically linked instead of dynamically
|
3. Portageの機能
3.a. Portageの機能
PortageはあなたのGentoo環境をより良くしてくれるいくつかの追加の機能があります。
これらの機能の多くはパフォーマンス、信頼性、セキュリティなどを改良してくれるソフトウェアツールに頼っています。
Portageの機能を有効にしたり無効にするには、スペースで区切られた様々な機能のキーワードを含む/etc/make.confのFEATURES変数を編集する必要があります。
いくつかのケースでは機能が依存している追加のツールをインストールする必要があります。
Portageがサポートしている機能が全てここで紹介されているわけではありません。
全てを知るには、make.confのmanページを調べてください。
コード表示 1.1: make.confのmanページを調べる |
$ man make.conf
|
デフォルトでFEATURESに何が設定されているかを知るには、emerge --infoを実行してFEATURES変数を検索するかgrepを利用します。
コード表示 1.2: 既に設定されているFEATURESを知る |
$ emerge --info | grep FEATURES
|
3.b. 分散コンパイル
distccを使う
distccはネットワーク上のそれぞれのマシン(同一である必要はない)にコンパイル作業を分散させるプログラムです。
distccクライアントは利用可能な(distccdが実行されている)distccサーバに必要な情報の全てを送信するので、
それらサーバはクライアントのためにソースコードの断片をコンパイルすることができます。
この結果、コンパイルの時間が高速化されます。
distccに関するより多くの情報(そしてどのようにしてGentooで動作するのか)についてはGentoo Distcc Documentation(日本語訳)を見てください。
distccのインストール
distccはコンピュータが送信したコンパイルタスクを監視するグラフィカルモニターを提供します。
もしGnomeを使っているのならUSEフラグに'gnome'を追加してください。
しかし、Gnomeを使っていないがモニターを利用したいときはUSEフラグに'gtk'を追加してください。
コード表示 2.1: distccのインストール |
# emerge distcc
|
Portageのサポートを有効化する
/etc/make.conf内のFEATURES変数にdistccを追加してください。
次に、MAKEOPTS変数をあなたの好みに編集してください。
よく知られたガイドラインには"-jX"と埋めうるように指示されています。
Xはdistccdを実行している(現在のホストも含める)CPUの数+1ですが、他の数字の方が良い結果が得られるかもしれません。
ではdistcc-configを実行して利用可能なdistccサーバのリストを入力しましょう。
簡単な例ではdistccサーバが192.168.1.102(現在のホスト)、192.168.1.103、192.168.1.104(2つのリモートホスト)で利用可能であると仮定します。
コード表示 2.2: distccが3つのサーバを使うように設定 |
# distcc-config --set-hosts "192.168.1.102 192.168.1.103 192.168.1.104"
|
忘れずにdistccdデーモンを実行してください。
コード表示 2.3: distccdデーモンを起動 |
# rc-update add distccd default
# /etc/init.d/distccd start
|
3.c. キャッシングコンパイル
ccacheについて
ccacheは高速なコンパイラーキャッシュです。
プログラムをコンパイルすると、中間結果をキャッシュするので、同じプログラムを再コンパイルしたときはいつでも、コンパイル時間は大いに減少します。
この結果、普通のコンパイルでは5~10倍のコンパイル時間の高速化となります。
ccacheに関する特徴に興味があるなら、ccacheのホームページを訪れてください。
ccacheのインストール
ccacheをインストールするには、emerge ccacheを実行してください。
コード表示 3.1: ccacheのインストール |
# emerge ccache
|
Portageのサポートを有効化する
/etc/make.confを開いてFEATURES変数にccacheを追加します。
次にCCACHE_SIZEという変数を追加して"2G"と設定します。
コード表示 3.2: /etc/make.confのCCACHE_SIZEを編集 |
CCACHE_SIZE="2G"
|
ccacheが動作しているかを確認するには、ccacheに統計を提供するよう問い合わせてください。
Portageは異なったccacheホームディレクトリを使用しているので、CCACHE_DIRも設定する必要があります。
コード表示 3.3: ccacheの統計を見る |
# CCACHE_DIR="/var/tmp/ccache" ccache -s
|
/var/tmp/ccacheはPortageのデフォルトのccacheホームディレクトリです。
設定を変更したいのなら、/etc/make.confでCCACHE_DIR変数を設定することができます。
ですが、ccacheを実行すれば、それはデフォルトの位置である${HOME}/.ccacheを使用するでしょう。
そのため、Portageのccache統計を見るときにはCCACHE_DIR変数を設定する必要があったのです。
ccacheをPortageのCのコンパイル以外に使用する
もしPortageでないコンパイルにccacheを使いたいのなら、PATH変数の最初(/usr/binより前)に/usr/lib/ccache/binを追加してください。
これは、ユーザのホームディレクトリの.bash_profileを編集することで完了します。
.bash_profileはPATH変数を定義する方法のひとつです。
コード表示 3.4: .bash_profileを編集 |
PATH="/usr/lib/ccache/bin:/opt/bin:${PATH}"
|
3.d. バイナリパッケージのサポート
予めビルドされたパッケージを作成する
Portageは予めビルドされたパッケージのインストールをサポートしています。
Gentoo自体は(GRPスナップショットを除いて)ビルドされたパッケージを提供しませんが、Portageはビルドされたパッケージを完全に認識することができます。
パッケージが既にインストールされているならquickpkgを使うことができますし、そうでなければemergeに--buildpkgもしくは--buildpkgonlyオプションを付けることでビルドされたパッケージを作成することができます。
Portageにインストールするパッケージごとにビルドされたパッケージを作成して欲しいのなら、FEATURES変数にbuildpkgを追加します。
ビルド済みのパッケージ集を作成するためのより拡張されたサポートが、catalystによって取得できます。
catalystについての詳しい説明はCatalyst Frequently Asked Questionsを見てください。
予めビルドされたパッケージのインストール
Gentooは提供してくれませんが、ビルドされたパッケージを置いておく中央レポジトリを作ることができます。
このレポジトリを使いたいのなら、Portageが認識できるようPORTAGE_BINHOST変数にその場所を指定しなければなりません。
例えば、ビルドされたパッケージがftp://buildhost/gentooにあるならこうします。
コード表示 4.1: /etc/make.confにPORTAGE_BINHOSTを設定 |
PORTAGE_BINHOST="ftp://buildhost/gentoo"
|
ビルドされたパッケージをインストールしたいときには、emergeコマンドに--getbinpkgオプションを--usepkgと並べて記述します。
前者が前もって定義したサーバからビルドされたパッケージをダウンロードするようにemergeに伝えているのに対し、
後者はソースをダウンロードしてコンパイルする前にビルドされたパッケージのインストールを試すように言っています。
例えば、gnumericをビルドされたパッケージからインストールするにはこうします。
コード表示 4.2: ビルドされたgnumericパッケージをインストール |
# emerge --usepkg --getbinpkg gnumeric
|
emergeの予めビルドされたパッケージに関するより多くの情報はemergeのmanページにあります。
コード表示 4.3: emergeのmanページを読む |
$ man emerge
|
3.e. ファイルの取得
並行取得
複数のパッケージを連続してemergeするとき、Portageは、あるパッケージをコンパイルしている間に次のパッケージのソースファイルを取得してくることで、コンパイル時間を短縮することができます。
この機能を使うためには、FEATURESに"parallel-fetch"を追加してください。
Userfetch
Portageをrootで走らせるとき、FEATURES="userfetch"としておくと、パッケージのソースを取得しにいっている間、rootの権限を下げることができます。
これは小さなセキュリティの改善です。
4. initスクリプト
4.a. ランレベル
システムの起動
システムを起動したとき、多くのテキストが画面上を流れることに気がつくでしょう。
よく注意して見ると、このテキストは、システムをリブートするたびに、常に同じであることがわかるでしょう。これらすべてのアクションの進行は、ブートシーケンスと呼ばれ、(ほぼ)静的に定義されます。
最初に、ブートローダが、ブートローダの設定で指定されたカーネルイメージをメモリにロードし、その後、カーネルを実行するようにCPUに命じます。カーネルがロードされ、実行されるときに、カーネルは、カーネル固有の構造とタスク全てを初期化し、initプロセスを起動します。
その後、initプロセスは、(/etc/fstabで指定された)すべてのファイルシステムがマウントされて使用できる準備が整うことを確認します。
次に、/etc/init.dディレクトリにあるいくつかのスクリプトを実行します。それらのスクリプトは、うまくシステムが起動されるように必要なサービスを開始します。
最後に、すべてのスクリプトが実行されたら、initプロセスは、agettyという特別なプロセスを端末(ターミナル)にくっつけて、端末(ほとんどが、Alt-F1、Alt-F2などの下に隠される仮想コンソール)を有効にします。
次に、agettyプロセスは、loginプロセスを実行することで、これらの端末を通してユーザがログインできるようにします。
initスクリプト
ここで、initプロセスは、/etc/init.dディレクトリにあるスクリプトをでたらめに実行するわけではありません。ましてや、/etc/init.dディレクトリにあるスクリプト全てを実行するわけでもありません。
/etc/runlevelsディレクトリを調べて、どのスクリプトを実行するべきかを決めます。
最初に、initプロセスは、/etc/runlevels/bootディレクトリにシンボリックリンクがある/etc/init.dの全てのスクリプトを実行します。通常は、アルファベット順にスクリプトを開始しますが、いくつかのスクリプトは、起動される前に別のスクリプトが実行されなければならないことをシステムに伝える依存情報を持っています。
/etc/runlevels/bootから参照されるすべてのスクリプトが実行されたら、initプロセスは、/etc/runlevels/defaultにシンボリックリンクがあるスクリプトの実行を続けます。
やはり、スクリプトが依存情報を持たない場合は、どのスクリプトを最初に実行するべきかを決めるためにアルファベット順を使用しますが、うまく動作するスタートアップシーケンスを提供するために順番が変更される場合があります。
initプロセスはどのように動作するか
もちろん、initプロセス自身が勝手に全てを決定するわけではありません。
どんなアクションを取ることが必要かを指定する設定ファイルが必要です。
この設定ファイルは、/etc/inittabです。
最初に説明したブートシーケンスを覚えているなら、initプロセスの最初のアクションは、すべてのファイルシステムをマウントすることであることを覚えているでしょう。これは、/etc/inittabに以下のような行で指定されています。
コード表示 1.1: /etc/inittabのシステム初期化を指示する行 |
si::sysinit:/sbin/rc sysinit
|
この行は、initプロセスに、システムを初期化するために/sbin/rc sysinitを実行しなければならないことを伝えています。/sbin/rcスクリプトが初期化を担当するので、initはあまり何もしないじゃないかと思うかもしれません。そうです、別のプロセスにシステムの初期化処理を委譲しています。
次に、initプロセスは、/etc/runlevels/bootにシンボリックリンクがあるスクリプトすべてを実行します。これは、以下の行で指定されます。
コード表示 1.2: システム初期化の続き |
rc::bootwait:/sbin/rc boot
|
ここでもrcスクリプトが必要な処理を実行します。rcに与えられているオプション(boot)は、/etc/runlevelsのサブディレクトリと同じものが使用されていることを覚えておいてください。
ここで、initプロセスは、どのランレベルで実行されるべきかを知るために設定ファイルを調べます。これを決めるために、/etc/inittabの以下の行を読みます。
コード表示 1.3: initdefault行 |
id:3:initdefault:
|
この場合(Gentooユーザの大多数が使用する)、ランレベルidは3です。
この情報を使って、initはランレベル3を開始するために、何を実行しなければならないかを調べます。
コード表示 1.4: ランレベルの定義 |
l0:0:wait:/sbin/rc shutdown
l1:S1:wait:/sbin/rc single
l2:2:wait:/sbin/rc nonetwork
l3:3:wait:/sbin/rc default
l4:4:wait:/sbin/rc default
l5:5:wait:/sbin/rc default
l6:6:wait:/sbin/rc reboot
|
レベル3を指定する行は、やはり、サービスを起動するためにrcスクリプトを使用します(ここでは、defaultの引数を渡す)。
ここでも、rcの引数が、/etc/runlevelsのサブディレクトリと同じであることを覚えておいてください。
rcが完了したら、initプロセスは、以下のように、どの仮想コンソールを有効にすべきで、何のコマンドがそれぞれのコンソールで実行されなければならないかを決定します。
コード表示 1.5: 仮想コンソールの定義 |
c1:12345:respawn:/sbin/agetty 38400 tty1 linux
c2:12345:respawn:/sbin/agetty 38400 tty2 linux
c3:12345:respawn:/sbin/agetty 38400 tty3 linux
c4:12345:respawn:/sbin/agetty 38400 tty4 linux
c5:12345:respawn:/sbin/agetty 38400 tty5 linux
c6:12345:respawn:/sbin/agetty 38400 tty6 linux
|
ランレベルって何?
あなたは、initプロセスがどのランレベルを有効にすべきかを決めるために、番号付け体系を使用することを見ました。ランレベルは、システムの実行状態であり、ランレベルに入ったりランレベルから抜けたりするときに実行されるべきスクリプト(runlevel scriptsもしくは、initscripts)のコレクションを意味します。
Gentooでは、7つのランレベルが定義されています。そのうちの3つは、システム内部で使用されるランレベルで、あとの4つは、ユーザ定義のランレベルです。内部で使用されるランレベルは、sysinitとshutdownとrebootで、その名が示すとおりのことを適切に行います。sysinitは、システムを初期化し、shutdownは、システムを停止し、rebootは、システムのリブートを行います。
ユーザ定義のランレベルは、/etc/runlevelsに属するサブディレクトリを指します。そのサブディレクトリには、bootとdefaultとnonetworkとsingleがあります。bootランレベルは、他のすべてのランレベルが使用する、システムに必要なすべてのサービスを開始します。残りの3つのランレベルには、何のサービスを開始するかの違いがあります。
defaultは、日常の業務のために使用されます。nonetworkはネットワーク接続が必要でない場合に使用されます。singleは、システムを修復しなければならない場合に使用されます。
Initスクリプトを使いこなす
rcプロセスが起動するスクリプトは、initスクリプトと呼ばれます。
/etc/init.dディレクトリにある各スクリプトは、次の引数を伴って実行することができます。start、stop、restart、pause、zap、status、ineed、iuse、needsme、usesme、broken。
サービス(とそれに依存するすべてのサービス)を開始、停止、再スタートするために、それぞれstart、stop、restart引数が次のように使用されるでしょう。
コード表示 1.6: postfixの起動 |
# /etc/init.d/postfix start
|
注意:
指定されたサービスをneed(必要)するサービスだけが、停止されるか再スタートされます。別の依存(use(使用)であるが、need(必要)ではない)サービスは、何もされないままです。
|
サービスを停止したいが、それに依存するサービスは停止したくない場合、以下のようにpause引数を使用します。
コード表示 1.7: postfixを停止するが、依存するサービスは実行したままにする |
# /etc/init.d/postfix pause
|
サービスの状態(started、stopped、paused、...)を見たいなら、以下のようにstatus引数を使用します。
コード表示 1.8: postfixの状態を見る |
# /etc/init.d/postfix status
|
実際にはサービスが停止しているのが分かっているのに、起動中と表示される場合、以下のようにzap引数で"停止"状態に修正します。
コード表示 1.9: postfixの状態の修正 |
# /etc/init.d/postfix zap
|
サービスが持つ依存には何があるかを問い合わせるには、iuseかineedを使用します。ineedでは、対象のサービスが正しく機能するために実際に必要なサービスを見ることができます。一方、iuseは、サービスが正しく機能するために必須ではないが、サービスによって使用される可能性のあるサービスを表示します。
コード表示 1.10: postfixが依存する必要なサービスのすべてを表示する要求 |
# /etc/init.d/postfix ineed
|
同様に、どのサービスが対象のサービスを要求するか(needsme)、もしくは、使用するか(usesme)を問い合わせることができます。
コード表示 1.11: postfixを必要とするすべてのサービスを表示する要求 |
# /etc/init.d/postfix needsme
|
最後に、サービスが必要としていても存在しないものを、以下のように問い合わせることができます。
コード表示 1.12: postfixの依存しているものの中で、存在しないものを表示する要求 |
# /etc/init.d/postfix broken
|
4.b. rc-updateを使いこなす
rc-updateって何?
Gentooのinitシステムは、最初に起動される必要があるサービスが何であるかを決定するために、依存性ツリーを使用します。依存性ツリーの管理作業は、ユーザに手動でさせたいとは思わない退屈なものなので、ランレベルとinitスクリプトの管理を簡単にするツールを作成しました。
rc-updateを使用して、ランレベルにinitスクリプトを追加したり、削除したりできます。rc-updateツールは、その後、依存性ツリーを再構築するためにdepscan.shスクリプトを自動で呼び出します。
サービスの追加と削除
Gentooをインストールする間に、既に"default"ランレベルにinitスクリプトを追加しています。そのときには"default"が何のためにあるかということを知らなかったかもしれませんが、今は知っておくべきです。rc-updateスクリプトは、何を実行するかを指定する別の引数を必要とします。それは、addかdelかshowです。
initスクリプトを追加または、削除するには、rc-updateにaddまたは、del引数を渡し、initスクリプトとランレベルが後ろに続きます。例えば、以下のようにします。
コード表示 2.1: defaultランレベルからpostfixを削除する |
# rc-update del postfix default
|
rc-update -v showコマンドは、すべての利用可能なinitスクリプトとそれがどのランレベルで実行されるかを表示します。
コード表示 2.2: initスクリプトの情報を参照する |
# rc-update -v show
|
(-vなしで)rc-update showを実行し、有効なinitスクリプトとそれらのランレベルをみることができます。
4.c. サービスの設定
なぜ追加の設定が必要ですか?
initスクリプトは、極めて複雑になる可能性があります。そのため、initスクリプトをユーザーが直接編集することは、間違い起こしやすいので良くありません。しかし、そのようなサービスを設定できることは重要です。例えば、サービスに追加のオプションを足したいと思うかもしれません。
設定をinitスクリプトの外側に設ける別の理由として、変更した設定が無効になってしまうという心配をせずにinitスクリプトの上書きができるということがあります。
/etc/conf.dディレクトリ
Gentooはそのようなサービスを設定する簡単な方法を提供します。設定可能なinitスクリプトのすべてが、/etc/conf.dディレクトリにファイルを設けています。例えば、apache2のinitスクリプト(/etc/init.d/apache2)には、/etc/conf.d/apache2という設定ファイルがあります。設定ファイルには、起動されるときにApache 2サーバに与えたいオプションを含めることができます。
コード表示 3.1: /etc/conf.d/apache2に定義される変数 |
APACHE2_OPTS="-D PHP5"
|
このような設定ファイルには、サービスを非常に簡単に設定し易くする変数や変数単体(/etc/make.confのような)が記述されています。変数に関するより詳しい情報も(コメントとして)提供されます。
4.d. initスクリプトの記述
記述しなければならないですか?
いいえ。Gentooは、提供されるサービスすべてに対して、すぐに使用できるinitスクリプトを提供するので、通常は、initスクリプトを記述する必要はありません。しかし、あなたは、Portageを使用しないで、サービスをインストールしているかもしれません。その場合、おそらくinitスクリプトを作成しなければならないでしょう。
サービスによって提供されるinitスクリプトは、Gentoo用に適切に書かれていないなら、使用してはいけません。Gentooのinitスクリプトは、他のディストリビューションによって使用されるinitスクリプトとは、互換性がありません。
レイアウト
initスクリプトの基本レイアウトを、以下に示します。
コード表示 4.1: initスクリプトの基本レイアウト |
#!/sbin/runscript
depend() {
}
start() {
}
stop() {
}
restart() {
}
|
initスクリプトではstart()関数が定義されていることが必須です。他のすべてのセクションは、定義してもしなくてもよいです。
依存関係
二つの依存関係が指定可能です。それは、useと、needです。
前に述べたように、need依存は、use依存より制約が強いです。
依存タイプ(needかuse)の後に、依存するサービスか、virtual依存を記述します。
virtual依存とは、あるサービスが提供する依存関係ですが、そのサービスだけが提供するものではありません。たとえば、あるinitスクリプトがシステムロガーに依存するとします。しかし、たくさんのシステムロガー(metalogd、syslog-ng、sysklogd等々)が存在しているので、その中の一つのシステムロガーだけにneed依存することはできません(また、すべてのシステムロガーをインストールして、実行することのもナンセンスです)。このような場合、すべてのシステムロガーがvirutal依存関係をprovide(提供)するようにします。
postfixサービスの依存情報を見てみましょう。
コード表示 4.2: postfixの依存情報 |
depend() {
need net
use logger dns
provide mta
}
|
見たとおり、postfixサービスには以下のような依存情報があります。
-
(virtual)依存のnet(例えば、/etc/init.d/net.eth0によってprovide(提供)されます)を要求します
-
(virtual)依存のlogger(例えば、/etc/init.d/syslog-ngによってprovide(提供)されます)を使用します
-
(virtual)依存のdns(例えば、/etc/init.d/namedによってprovide(提供)されます)を使用します
-
(virtual)依存のmta(すべてのメールサービスに共通です)をprovide(提供)します
順番の制御
場合によっては、別のサービスを要求はしないが、もしシステムに存在し(注意: この条件は依存ではありません)、かつ、同一ランレベルで実行する(注意:この条件は同一ランレベルのサービスだけが対象です)別のサービスのbefore(前に)(もしくは、after(後に))開始したいサービスがあるでしょう。
例として、portmapサービスの設定を見てみましょう。
コード表示 4.3: portmapサービスのdepend()関数 |
depend() {
need net
before inetd
before xinetd
}
|
お勧めはしませんが、同一ランレベルのすべてのサービスにあてはまる"*"を使用することもできます。
コード表示 4.4: ランレベル内の最初のスクリプトとしてこのinitスクリプトを実行する |
depend() {
before *
}
|
もし、サービスがローカルディスクに書き込みをしなければならないものであれば、
localmountが必要となります。
もし、/var/run にpidファイルのように何か書き込むのであれば、
bootmiscのあとに開始されなければいけません。
コード表示 4.5: Example depend() function |
depend() {
need localmount
after bootmisc
}
|
標準関数
depend()関数の次に、さらにstart()関数を定義する必要があります。
この関数には、あなたのサービスを初期化するために必要なすべてのコマンドを入れます。何がなされているかをユーザに知らせるために、以下のようにebeginとeend関数を使用することが望ましいです。
コード表示 4.6: start()関数の例 |
start() {
ebegin "Starting my_service"
start-stop-daemon --start --exec /path/to/my_service \
--pidfile /path/to/my_pidfile
eend $?
}
|
--exec と --pidfile の両方がstart, stop関数のなかで必要です。
もしサービスがpidファイルを作らないならば、
できる限り--make-pidfileを使ってください。
ただし、テストをして確認してください。
そうでなければ、pidファイルを使用しないでください。
--quietをstart-stop-daemonオプションに加えることもできますが、
これは、サービスがかなり冗長なメッセージを出さない限りおすすめできません。
--quietを使うことで、サービス開始に失敗した際のデバッグが困難になるかもしれません。
注意:
--exec が、サービスを呼び出したり停止するシェルスクリプトではなく(これはinitスクリプトがサポートする事柄です)、実際にサービスを呼び出すようにしてください。
|
start()関数のより多くの例が必要なら、/etc/init.dディレクトリにある利用可能なinitスクリプトのソースコードを見てください。
定義可能な他の関数には、stop()とrestart()があります。
これらの関数を定義することは強制されません! Gentooのinitシステムは、start-stop-daemonを使用する場合には、自動的にinitシステム自身がこれらの関数を適切に処理します。
とはいうものの、stop()関数を作らなくてよい程度のものなので、
ここで、例を挙げます
コード表示 4.7: stop()関数の例 |
stop() {
ebegin "Stopping my_service"
start-stop-daemon --stop --exec /path/to/my_service \
--pidfile /path/to/my_pidfile
eend $?
}
|
もし、あなたのサービスが他のスクリプト(たとえば、bash, python または perl)を起動し、このスクリプトがその後名前が変わる(たとえばfoo.pyがfooに)ならば、--nameをstart-stop-daemonに追加する必要があるでしょう。スクリプトの名前がどう変わるのか指定する必要があります。
この例では、サービスがfoo.pyを起動し、そしてこの名前がfooに変わります。
コード表示 4.8: fooスクリプトを起動するサービス |
start() {
ebegin "Starting my_script"
start-stop-daemon --start --exec /path/to/my_script \
--pidfile /path/to/my_pidfile --name foo
eend $?
}
|
start-stop-daemonコマンドに関してより詳しい情報が必要なら、素晴らしいmanページが以下のようにして利用可能です。
コード表示 4.9: start-stop-daemonコマンドのmanページを参照する |
$ man start-stop-daemon
|
Gentooのinitスクリプトの構文は、Bourne Again シェル(bash)準拠です。よって、initスクリプトでは、bash構文のスクリプトを自由に使用することができます。
特別なオプションの追加
initスクリプトに、既に説明したもの以外に追加のオプションをサポートさせたいなら、opts変数にオプションを追加して、オプションと同じ名前を持つ関数を作成しなければなりません。例えば、restartdelayというオプションをサポートするには、以下のようにします。
コード表示 4.10: restartdelayオプションのサポート |
opts="${opts} restartdelay"
restartdelay() {
stop
sleep 3
start
}
|
サービス設定変数
/etc/conf.dの設定ファイルをサポートするのに必要なことは、何もありません。あなたのinitスクリプトが実行される場合、自動的に以下のファイルは読み込まれます。(すなわち、変数が利用可能です)
- /etc/conf.d/<あなたのinitスクリプト>
- /etc/conf.d/basic
- /etc/rc.conf
さらに、あなたのinitスクリプトが(netのような)virtual依存を提供するなら、その依存に関連するファイル(/etc/conf.d/netのような)もsourceされるでしょう。
4.e. ランレベルの動作を変更する
これをすることでどんな人が恩恵を受けますか?
多くのラップトップユーザは、"家ではnet.eth0を開始する必要があるが、外出先(ネットワークが利用可能な場所ではないので)ではnet.eth0を開始したくない。"という状況を理解できるでしょう。
Gentooではあなたのしたいようにランレベルの動作を変更できます。
例えば、別のinitスクリプトが割り当てられてブートする、2つ目の"default"ランレベルを作成できます。その後、使用したいdefaultランレベルがどれかをブート時に選択できます。
softlevelの使用
何はさておき、別の"default"ランレベルのためのランレベルディレクトリを作成してください。例として、offlineランレベルを以下のように作成します。
コード表示 5.1: ランレベルディレクトリの作成 |
# mkdir /etc/runlevels/offline
|
新しく作成したランレベルに必要なinitスクリプトを追加してください。例えば、net.eth0を除いた現在のdefaultランレベルの完全なコピーをしたいなら、以下のようにしてください。
コード表示 5.2: 必要なinitスクリプトの追加 |
# cd /etc/runlevels/default
# for service in *; do rc-update add $service offline; done
# rc-update del net.eth0 offline
# rc-update show offline
acpid | offline
domainname | offline
local | offline
net.eth0 |
|
たとえばnet.eth0をofflineランレベルから削除した場合でも、
udevは適当なサービスを検知、開始しするすべてのデバイスを起動しようとします。
そのため、開始する必要のないネットワークサービスを(udevによって開始される他デバイスに対するサービスも同様に)/etc/conf.dに付け加える必要があります。
コード表示 5.3: /etc/conf.d/rc内でサービスを開始するデバイスを無効にする |
RC_COLDPLUG="yes"
RC_PLUG_SERVICES="!net.eth0"
|
注意:
For more information on device initiated services, please see the comments
inside /etc/conf.d/rc.
|
ここで、ブートローダの設定を編集して、offlineランレベルのための新しいエントリを追加してください。例えば、/boot/grub/grub.confでは、以下のようになります。
コード表示 5.4: offlineランレベルのためのエントリ追加 |
title Gentoo Linux Offline Usage
root (hd0,0)
kernel (hd0,0)/kernel-2.4.25 root=/dev/hda3 softlevel=offline
|
ほら、もう全てが設定されました。システムをブートしてブート時に新しく追加されたエントリを選択すれば、offlineランレベルは、defaultランレベルの代わりに使用されます。
bootlevelの使用
bootlevelの使用は、まったくもってsoftlevelに類似しています。ここでのただ一つの違いは、別の"default"ランレベルを定義する代わりに、別の"boot"ランレベルを定義するということです。
5. 環境変数
5.a. 環境変数とは
環境変数とは何か
環境変数とは、さまざまなアプリケーションから使用される情報を保持した名前付きオブジェクトです。
という説明をされても、多くのユーザー(特にあまりLinuxに慣れていない人)にとっては、
意味不明だったり、使いどころがないように思われるかもしれません。でも、それは違います。
環境変数を使うことで、さまざまなアプリケーションの設定を簡単に変更することができるのです。
例(重要)
以下の表は、Linuxシステムで使用されるいろいろな環境変数とその説明です。
具体的な環境変数の値については表の後でお見せします。
| 変数名 |
説明 |
| PATH |
この変数には、システムが実行ファイルを検索する際に用いられるディレクトリがコロン区切りで格納されています。
入力した実行ファイル名(たとえばls、rc-update、emergeなど)がこの変数で設定された場所に見つからない場合、
そのファイルを実行することはできません(ただし、
たとえば/bin/lsのようにコマンドをフルパスで入力した場合はその限りではありません)。
|
| ROOTPATH |
機能としてはPATHとほぼ同じですが、この変数の場合、
rootユーザーがコマンドを入力するときのみ調べる必要があるディレクトリだけがリストされています。
|
| LDPATH |
この変数には、ダイナミックリンカがライブラリを検索する際に使用するディレクトリが、
コロン区切りで格納されています。
|
| MANPATH |
この変数には、manコマンドがマニュアルページを検索する際に使用するディレクトリが、
コロン区切りで格納されています。
|
| INFODIR |
この変数には、infoコマンドがinfoページを検索する際に使用するディレクトリが、
コロン区切りで格納されています。
|
| PAGER |
この変数には、ファイルの内容を表示するときに使うプログラム(たとえばlessやmore)のパスが格納されています。
|
| EDITOR |
この変数には、ファイルの内容を編集する際に使われるプログラム(たとえばnanoやvi)のパスが格納されています。
|
| KDEDIRS |
この変数には、KDEに特化したファイルを収めたディレクトリが、
コロン区切りで格納されています。
|
| CONFIG_PROTECT |
この変数には、Portageがパッケージのアップデートを行う際に保護する必要のあるディレクトリが、
スペース区切りで格納されています。
|
| CONFIG_PROTECT_MASK |
この変数には、Portageがパッケージのアップデートを行う際に保護してはいけないディレクトリが、
スペース区切りで格納されています。
|
以下、これまでに説明したすべての変数の定義例を示します。
コード表示 1.1: 定義例 |
PATH="/bin:/usr/bin:/usr/local/bin:/opt/bin:/usr/games/bin"
ROOTPATH="/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin"
LDPATH="/lib:/usr/lib:/usr/local/lib:/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2.3"
MANPATH="/usr/share/man:/usr/local/share/man"
INFODIR="/usr/share/info:/usr/local/share/info"
PAGER="/usr/bin/less"
EDITOR="/usr/bin/vim"
KDEDIRS="/usr"
CONFIG_PROTECT="/usr/X11R6/lib/X11/xkb /opt/tomcat/conf \
/usr/kde/3.1/share/config /usr/share/texmf/tex/generic/config/ \
/usr/share/texmf/tex/platex/config/ /usr/share/config"
CONFIG_PROTECT_MASK="/etc/gconf"
|
5.b. グローバルな環境変数を設定する
/etc/env.dディレクトリ
各環境変数を一ヶ所で定義できるようにするため、Gentooは/etc/env.dディレクトリを導入しました。
このディレクトリの中には、たとえば00basicや05gccなど、
いろいろなファイルが入っていると思います。それぞれのファイルには、
そのファイル名が表すアプリケーションに必要な環境変数が格納されています。
たとえばgccをインストールすると、
05gccという以下のような変数を定義したファイルが、
ebuildにより生成されます。
コード表示 2.1: /etc/env.d/05gcc |
PATH="/usr/i686-pc-linux-gnu/gcc-bin/3.2"
ROOTPATH="/usr/i686-pc-linux-gnu/gcc-bin/3.2"
MANPATH="/usr/share/gcc-data/i686-pc-linux-gnu/3.2/man"
INFOPATH="/usr/share/gcc-data/i686-pc-linux-gnu/3.2/info"
CC="gcc"
CXX="g++"
LDPATH="/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2.3"
|
他のディストリビューションの場合は、/etc/profileなどのファイルに書かれた環境変数を変更したり新たに環境変数を定義したり、といったことを求められます。
Gentooの場合、環境変数の維持や管理がユーザーにとって(そしてPortageにとっても)簡単に行えるようになっており、
環境変数が格納される可能性のあるいくつものファイルそれぞれに、
注意を払う必要がありません。
たとえばgccが更新された場合は、
ユーザーが指一本動かすことなく、/etc/env.d/05gccも同時に更新されます。
これはPortageにとって便利であるばかりでなく、ユーザーであるあなたにとっても便利です。
場合によっては、システム全体に特定の環境変数を設定する必要に迫られることがあるでしょう。
たとえばhttp_proxyを例に取りましょうか。
/etc/profileをぐちゃぐちゃにしてしまう代わりに、
以下のように独自の定義を用意したファイル(/etc/env.d/99local)を作成すれば良いだけなのです。
コード表示 2.2: /etc/env.d/99local |
http_proxy="proxy.server.com:8080"
|
このファイルを使って自分用の環境変数を設定するようにしておけば、
独自に設定した環境変数も一目瞭然です。
env-updateスクリプト
/etc/env.dには、PATH変数を定義した複数のファイルが存在します。
これは間違いではありません。env-updateを実行すると環境変数が更新される前にそれぞれの定義が順番に追加されます。
このためパッケージは(そしてユーザーも)既存の変数に影響を与えることなく、
自分自身の環境変数を簡単に追加できるのです。
env-updateスクリプトは/etc/env.d以下のファイルをアルファベット順に並べ、
その中で定義された変数をつなげていきます。ファイル名は、2つの数字で始まる必要があります。
コード表示 2.3: env-updateが変数を並べる順番 |
00basic 99kde-env 99local
+-------------+----------------+-------------+
PATH="/bin:/usr/bin:/usr/kde/3.2/bin:/usr/local/bin"
|
環境変数の連結はいつも起こるわけではなく、以下の環境変数のみで発生します。
KDEDIRS、PATH、LDPATH、
MANPATH、INFODIR、INFOPATH、ROOTPATH、
CONFIG_PROTECT、CONFIG_PROTECT_MASK、PRELINK_PATHそして
PRELINK_PATH_MASK
他の全ての環境変数は、最後に指定された値が(/etc/env.d内のファイルのアルファベット順で)
使用されます。
env-updateを実行すると、
このスクリプトは全環境変数を生成し/etc/profile.envに記録します(このファイルは/etc/profileから利用されます)。
また同時にLDPATHから情報を抽出し、その情報を用いて/etc/ld.so.confを生成します。
それからldconfigを呼び出し、
ダイナミックリンカが使用する/etc/ld.so.cacheを再生成します。
env-update実行後すぐにその効果を確認したい場合は、
以下のコマンドで環境を更新します。
自分でGentooをインストールした方は、
インストールガイドでも以下のコマンドが紹介されていたことを覚えているかもしれません。
コード表示 2.4: 環境を更新 |
# env-update && source /etc/profile
|
注意:
上記のコマンドは現在使用中のターミナル、新しい コンソールやそれらから起動されたプロセス上の環境変数のみを更新します。
ですので、もしX11上で作業する場合は、全ての新しく開くターミナル上で source /etc/profile を実行する必要があります。
もしくは X を再起動し、全ての新しいターミナルが新たな環境変数に基づくようにします。
もし、ログインマネージャーを使用している場合は、root になり、/etc/init.d/xdm restart を実行します。
ログインマネージャを使用していない場合は、、ログアウトし、X が新しい環境変数でプロセスを起動できるように、ログインし直す必要があります。
|
重要:
他の変数を定義しているときにシェル変数は使うことができません。
つまり、FOO="$BAR" (ここで $BAR は他の変数)というようにはできないということです。
|
5.c. ローカルな環境変数を設定する
ユーザー限定の設定
グローバルな形で環境変数を設定したくない場合もあります。
たとえば、/home/my_user/binと、
現在の作業ディレクトリ(現在あなたがいるディレクトリ)をPATH変数に設定したいけれども、
同じシステムにいる他のユーザーのPATHには追加させたくない、
という場合です。
このように環境変数をローカルに定義したい場合は、
~/.bashrcや~/.bash_profileを編集してください。
コード表示 3.1: ローカルな利用のために~/.bashrcのPATHを拡張 |
PATH="${PATH}:/home/my_user/bin:"
|
ログインするとPATHが更新されているはずです。
セッション限定の設定
時には、もっと限定された形で環境変数を使いたい場合もあります。
たとえばテンポラリディレクトリにバイナリを作成したのだけど、
フルパスを入力するのも面倒だし、
ちょっとの間そのバイナリを使うためだけのために~/.bashrcを編集したりしたくない、
というような場合です。
このような場合は、exportコマンドを使って現在のセッションのみ有効なPATH変数を設定することができます。
ログアウトしない限りPATH変数に設定した仮の定義が有効になります。
コード表示 3.2: セッション限定の環境変数を設定 |
# export PATH="${PATH}:/home/my_user/tmp/usr/bin"
|
C. Portageを使いこなす
1. ファイルとディレクトリ
1.a. Portageファイル
設定指示子
Portageの初期設定は/etc/make.globalsにあります。
その初期設定を見ると、Portageの全ての設定が変数を通して制御されることがわかるでしょう。
Portageがどのような変数を受け付け、それらが何を意味するのかは後述します。
多くの設定指示子がアーキテクチャ間で異なるため、Portageにはプロファイルの一部としての初期設定ファイルもあります。
プロファイルの位置は、/etc/make.profileシンボリックリンクのリンク先です。
Portageの設定は、プロファイルとその親ディレクトリにあるすべてのプロファイルにあるmake.defaultsファイルで設定されます。
プロファイルや/etc/make.profileディレクトリについては後でより詳しく説明します。
もし設定変数を変更しようとしているのなら、/etc/make.globalsやmake.defaultsを改変してはいけません。
代わりに、これらのファイルより優先される/etc/make.confを使用してください
また、/usr/share/portage/config/make.conf.exampleというファイルも見つけるでしょう。
その名前が示すように、これは単なるサンプルファイルで、Portageはこのファイルを読み込みません。
Portage設定変数を環境変数で定義することもできますが、私たちはお勧めしません。
プロファイルの詳細な情報
/etc/make.profileディレクトリについては既に触れています。
そうです。正確にはディレクトリではなく、プロファイルへのシンボリックリンクで、初期設定とは別の場所に独自のプロファイルを作成して、そこをリンクが指すようにすることもできますが、初期設定では、/usr/portage/profilesの下のプロファイルを指しています。
このシンボリックリンクが指すプロファイルは、システムに適したプロファイルです。
プロファイルには、Portage用のアーキテクチャ固有の情報が含まれています。
例えば、プロファイルに一致するシステムに含まれるパッケージのリストや、動作しない(もしくはマスクされた)パッケージのリストなどといったものです。
ユーザ指定の設定
ソフトウェアのインストールに関するPortageの振舞いを変更したいときには、/etc/portageにあるファイルを編集することになります。
/etc/portage内のファイルを利用することが強く推奨されており、環境変数によって上書きすることは全く推奨されていません。
/etc/portageディレクトリ内には以下のファイルを作成することができます。
-
package.mask はPortageに決してインストールして欲しくないパッケージのリストです。
-
package.unmask はGentoo開発者達が全く推奨していなくてもインストールをできるようにするパッケージのリストです。
-
package.keywords はシステムやアーキテクチャに(未だ)対応していなくてもインストールできるようにするパッケージのリストです。
-
package.use は、システム全体で使用しているUSEフラグではなく、特定のパッケージに対して使用するUSEフラグのリストです。
これらはファイルである必要はありません。
パッケージごとにひとつのファイルを持つディレクトリであっても大丈夫です。
/etc/portageディレクトリに関するより多くの情報と作成できるファイルの完全なリストはPortageのmanページで見つけることができます。
コード表示 1.1: Portageのmanページを読む |
$ man portage
|
Portageファイルとディレクトリの場所を変更する
前に説明したように設定ファイルはどこにでも置けるわけではありません。
Portageはいつも決まった位置から設定ファイルを探すからです。
しかし、Portageには、その他多くの様々な用途向けに決まった位置があります。
ビルド用ディレクトリ、ソースコードの保管場所、Portageツリーの位置などです。
これら全ての用途向けに、よく知られた初期設定の位置がありますが、/etc/make.confを通して、好みに合わせて変更することができます。
この章の残りで、Portageが使用する特定用途の位置は何があるかと、ファイルシステム上でのその位置の変更方法を説明します。
ですが、リファレンスとして使用されるようには意図されていません。
もし100%網羅した文書が必要なら、Portageとmake.confのmanページを調べてください。
コード表示 1.2: Portageとmake.confのmanページを読む |
$ man portage
$ man make.conf
|
1.b. ファイルを保管する
Portageツリー
Portageツリーの初期設定位置は、/usr/portageです。
これはPORTDIR変数で定義されています。
もしPortageツリーを(この変数を変更することで)どこか別の位置に保管するときは、それに応じて、/etc/make.profileのシンボリックリンクを変更することを忘れないでください。
もしPORTDIR変数を変更したなら、PORTDIRの変更に関する影響を気にしなくてもいいように、以下の変数も同様に変更した方がいいでしょう。
このPORTDIRの変更によって、PortageのPKGDIR、DISTDIR、RPMDIR変数の扱い方に影響を与えます。
ビルド済みのバイナリ
Portageは初期設定ではビルド済みバイナリを利用しないにもかかわらず、ビルド済みバイナリ用の広範なサポート機能を持っています。
Portageにビルド済みパッケージで作業するよう指示したときは、/usr/portage/packagesから探そうとします。
この位置はPKGDIR変数で定義されます。
ソースコード
アプリケーションのソースコードは初期設定では/usr/portage/distfilesに保持されます。
この位置はDISTDIR変数で定義されます。
Portageデータベース
Portageはシステムの状態(どんなパッケージがインストールされているか、どのパッケージに何のファイルが含まれているか、など)を/var/db/pkgに保存します。
これらのファイルを手動で変更してはいけません。
Portageのシステムに関する情報を破壊することになるでしょう。
Portageキャッシュ
Portageキャッシュ(修正を加えた時間、仮想、依存ツリー情報の修正)は/var/cache/edbに保存されます。
この位置は本当にキャッシュであり、Portage関連のアプリケーションを実行していないのなら削除することが出来ます。
1.c. ソフトウェアのビルド
一時的なPortageファイル
Portageの一時ファイルは初期設定では/var/tmpに保持されます。
これはPORTAGE_TMPDIR変数で定義されます。
PORTAGE_TMPDIR変数を変更するなら、PORTAGE_TMPDIRの変更に関する影響を気にしなくてもいいように、次の変数も変更した方がいいでしょう。
これは、PortageのBUILD_PREFIX変数の扱い方に影響を及ぼします。
ビルドに使用するディレクトリ
Portageは、各々のパッケージがemergeされるごとに専用のビルドディレクトリを/var/tmp/portage内に作ります。
この位置はBUILD_PREFIX変数で定義されます。
有効なファイルシステム名前空間
初期設定ではPortageは、すべてのファイルをルート(/)を基点するファイルシステム名前空間にインストールしますが、ROOT環境変数を設定することで変更することができます。
これは、新規のビルドイメージを作成するときに役に立ちます。(訳注: ROOT環境変数を変更して、仮の名前空間にインストールして確認してみる場合など)
1.d. ロギング機能
ebuildロギング
Portageはebuildごとのログファイルを作成することができます。
しかし、この機能は、PORT_LOGDIR変数にPortage(portageユーザ)が書き込み可能な位置を設定しているときだけ有効になります。
初期設定ではこの変数は設定されていません。
もしPORT_LOGDIRが設定されていないならば、現在のロギングシステムではまったくビルドログを受け取れないでしょう。
ですが、新しいelogから何らかのログを受け取っているかもしれません。
PORT_LOGDIRをきちんと定義しelogを使用する場合、以下で説明されるように、ビルドログやelogによって保存されるログを取得することができます。
Portageはelogの利用による、きめ細かなロギングの管理方法を提供します。
-
PORTAGE_ELOG_CLASSES: これはどんな種類のメッセージが記録されるか設定するものです。
info、warn、 error、log、qaを、スペースで区切ってどんな組み合せでも利用できます。
-
info: ebulidによって出力される"einfo"メッセージを記録する
-
warn: ebulidによって出力される"ewarn"メッセージを記録する
-
error: ebulidによって出力される"eerror"メッセージを記録する
-
log: いくつかのebulidの中で見受けられる"elog"メッセージを記録する
-
qa: ebulidによって出力される"QA Notice"メッセージを記録する
-
PORTAGE_ELOG_SYSTEM: ここではログを処理するためのモジュールを選択します。
左側を空欄にすると、ロギングは行われません。
save、custom、syslog、mail、save_summary、mail_summaryを、スペースで区切ってでどんな組合せでも利用できます。
elogを使用するためには、少なくともひとつのモジュールを選ばなくてはなりません。
-
save: これは$PORT_LOGDIRが定義されていないとき、$PORT_LOGDIR/elog、もしくは /var/log/portage/elogにパッケージごとひとつのログを保存します。
-
custom: $PORTAGE_ELOG_COMMANDでユーザが定義したコマンドにすべてのメッセージを渡します。これについては後述します。
-
syslog: インストールされているシステムロガーにメッセージを送ります。
-
mail: $PORTAGE_ELOG_MAILURI(これについては後述します)でユーザが定義したメールサーバにすべてのメッセージを渡します。
elogのメール機能は>=portage-2.1.1が必要です。
-
save_summary: saveと似ていますが、$PORT_LOGDIRが定義されていないとき、すべてのメッセージを$PORT_LOGDIR/elog/summary.logか/var/log/portage/elog/summary.logに追記します。
-
mail_summary: mailと似ていますが、emergeが終了すると、すべてのメッセージを1通のメールにして送信します。
-
PORTAGE_ELOG_COMMAND: これはcustomが有効のときにのみ使用されます。
ここにはログメッセージを処理するためのコマンドを記述します。
次の2つの変数が使用できることに注意してください。
${PACKAGE}はパッケージの名前とバージョンです。一方、${LOGFILE}はログファイルの絶対パスです。
ここでは使用方法の一例を示します。
-
PORTAGE_ELOG_COMMAND="/path/to/logger -p '\${PACKAGE}' -f '\${LOGFILE}'"
-
PORTAGE_ELOG_MAILURI: これは、アドレス、ユーザ、パスワード、メールサーバ、ポート番号といった、mailモジュールの設定を含みます。
デフォルトの設定は"root@localhost localhost"です。
-
これは特定のポート(デフォルトはポート25です)に対してユーザ名とパスワード認証を必要とするSMTPサーバの例です。
-
PORTAGE_ELOG_MAILURI="user@some.domain
username:password@smtp.some.domain:995"
-
PORTAGE_ELOG_MAILFROM: ログメールの"from"アドレスを設定できます。
設定していな場合のデフォルトは"portage"です。
-
PORTAGE_ELOG_MAILSUBJECTでログメールの件名を設定できます。
次の2つの変数を使用できることに注目してください。
${PACKAGE}は、パッケージの名前とバージョンを表示します。
一方、${HOST}は、Portageが動作しているホストの完全修飾ドメイン名になります。
-
次は使用方法の一例です。
-
PORTAGE_ELOG_MAILSUBJECT="package \${PACKAGE} was merged on \${HOST}
with some messages"
重要:
Portage-2.0.*でenoticeを使用している場合、elogとは互換性がないため、完全にenoticeを削除しなければなりません。
|
2. 変数による設定
2.a. Portage設定
前述したとおり、Portageは、/etc/make.confで定義すべき多くの変数を通して調整可能です。より詳細で完全な情報は、以下のようにしてmake.confのmanページを参照してください。
コード表示 1.1: make.confのmanページを読む |
$ man make.conf
|
2.b. ビルドに関するオプション
configureスクリプトとコンパイラのオプション
Portageはアプリケーションをビルドする際に、コンパイラとconfigureスクリプトに以下の変数の内容を渡します。
-
CFLAGS & CXXFLAGS変数は、CおよびC++ソースのコンパイルのために希望するコンパイラフラグを定義します。
-
CHOST変数は、アプリケーションのconfigureスクリプトのためのビルドホスト情報を定義します。
-
MAKEOPTS変数は、makeコマンドに渡され、通常、コンパイル時の並列数を定義するために設定されます。makeオプションに関するより詳細な情報は、makeのmanページにあります。
USE変数は、configureやコンパイルの実行中にも使用されますが、前の章で懇切丁寧に説明されているので、ここでは説明しません。
マージオプション
Portageは、特定のソフトウェアタイトルの新しいバージョンのマージが完了したとき、もう使用されない古いバージョンをシステムから削除します。Portageは、古いバージョンをアンマージする前に、5秒間だけユーザのアクションを待ちます。この5秒は、CLEAN_DELAY変数によって定義されます。
EMERGE_DEFAULT_OPTSを設定することで、emergeが実行されるとき、常に特定のオプションを使用するようにできます。
いくつかの有用なオプションとしては、--ask、--verbose、--treeなどでしょう。
2.c. ファイルの保護設定
Portageの保護対象ディレクトリ
Portageは、ファイルが保護対象ディレクトリにない場合、ソフトウェアタイトルの新しいバージョンによって提供されるファイルで上書きします。これらの保護対象ディレクトリは、CONFIG_PROTECT変数によって定義され、通常は設定ファイルがあるディレクトリです。複数のディレクトリが、スペースで区切られて指定されます。
保護対象ディレクトリに書き込まれるファイルは、名前が変更され、ユーザには(推定可能な)設定ファイルの新しいバージョンがあることが警告されます。
以下のようにして、emerge --infoの出力結果から、現在のCONFIG_PROTECT設定を見つけることができます。
コード表示 3.1: CONFIG_PROTECT設定の確認 |
$ emerge --info | grep 'CONFIG_PROTECT='
|
Portageの設定ファイル保護機能に関するより詳細な情報は、emergeのmanpageのCONFIGURATION FILESの章で見ることができます。
コード表示 3.2: 設定ファイル保護機能に関するより詳細な情報の参照 |
$ man emerge
|
排他ディレクトリ
保護対象ディレクトリのサブディレクトリの一部を'保護対象から除外'するには、CONFIG_PROTECT_MASK変数を使用します。
2.d. ダウンロードオプション
サーバの位置情報
必要な情報またはデータが、システムで利用できない場合、Portageは、インターネットから取得しようとします。各種情報およびデータ取得元のサーバ位置情報は、以下の変数によって定義されます。
-
GENTOO_MIRRORS変数は、ソースコードがあるサーバのリストを定義します。(distfiles)
-
PORTAGE_BINHOST変数は、システムの構築済みパッケージがある専用サーバの位置情報を定義します。
三つ目の変数は、Portageツリーを更新するときに使用するrsyncサーバの位置情報に関係します。
-
SYNC変数は、PortageがPortageツリーを取得するために使用する専用サーバを定義します。
GENTOO_MIRRORS変数とSYNC変数は、mirrorselectアプリケーションを通して自動的に設定される可能性があります。mirrorselectを使用する前に、始めにemerge mirrorselectをする必要があります。より詳細な情報は、mirrorselectのオンラインヘルプを以下のようにして参照してください。
コード表示 4.1: mirrorselectに関する詳細な情報の参照 |
# mirrorselect --help
|
あなたの環境が、proxyサーバを使用する必要があるなら、プロキシサーバを定義するために、http_proxy変数とftp_proxy変数とRSYNC_PROXY変数を使用できます。
ソースコード取得用コマンド
Portageはソースコードを取得する必要がある場合、デフォルトでwgetコマンドを使用します。FETCHCOMMAND変数によって、このコマンドを変更することができます。
Portageは、既に一部分がダウンロード済みのソースコードを、中断したところから再開することができます。その用途のためのコマンドは、デフォルトでは、wgetコマンドを使用しますが、RESUMECOMMAND変数によって変更することができます。
FETCHCOMMAND変数やRESUMECOMMAND変数に設定したコマンドが、適切な位置にソースコードを保存していることを確認してください。変数内には、ソースコードの位置とdistfilesの位置をそれぞれ正確に示すために、\${URI}と\${DISTDIR}を使用すべきです。
プロトコル別のハンドラもFETCHCOMMAND_HTTP変数、FETCHCOMMAND_FTP変数、RESUMECOMMAND_HTTP変数、RESUMECOMMAND_FTP変数などで定義できます。
rsync設定
Portageツリーを更新する目的で、Portageによって使用されるrsyncコマンドを変更することはできませんが、rsyncコマンドに関連するいくつかの変数を設定することはできます。
-
PORTAGE_RSYNC_OPTSは、それぞれスペース区切りで、同期する時に使われるデフォルトの変数を設定します。
これらは、正確に何をしようとしているのかわからない限り、変更すべきではありません。
特定の必須オプションはPORTAGE_RSYNC_OPTSが空でも使用されることに注意してください。
-
PORTAGE_RSYNC_EXTRA_OPTSは同期する時の追加オプションを設定するために使用されます。
各オプションはスペース区切りです。
-
--timeout=<number>: これは、rsyncが通信がタイムアウトしたと見なすまでに、何秒間接続を待機させておくことができるかを定義します。
この変数のデフォルトは180ですが、ダイヤルアップユーザや低速なコンピュータを使用している人は300以上に設定したほうがよいかもしれません。
-
--exclude-from=/etc/portage/rsync_excludes: これは、rsyncがアップデート処理を行う間、無視すべきパッケージまたはカテゴリを記入したファイルを指しています。
この場合は /etc/portage/rsync_excludesを指しています。
このファイルの構文を知りたい場合はPortageツリーの一部を使うを読んでください。
-
--quiet: スクリーンへの出力を減らします。
-
--verbose: 完全なファイルリストを表示します。
-
--progress: 各ファイルに対して進行度合いを表示します。
-
PORTAGE_RSYNC_RETRIESは、rsyncがSYNC変数で指定されたミラーへの接続試行をやめるまでに、何回接続を試みるか定義します。
この変数のデフォルトは3です。
これらのオプションのさらに詳細な情報や他のオプションについては、man rysncを読んでください。
2.e. Gentoo設定
ブランチの選択
ACCEPT_KEYWORDS変数によってデフォルトブランチを変更できます。デフォルトは、あなたのアーキテクチャの安定版ブランチです。Gentooのブランチのより詳細な情報は、次の章にあります。
Portageの機能
FEATURES変数を通してPortageの特定の機能を有効にできます。Portageの機能は、前の章(Portageの機能)で説明されています。
2.f. Portageの振舞い
リソースの管理
PORTAGE_NICENESS変数によって、Portageが実行される優先順位(nice値)を増減できます。PORTAGE_NICENESS変数の値は、デフォルトのnice値に追加されます。
nice値に関するより詳細な情報は、以下のようにして、niceコマンドのmanページを参照してください。
コード表示 6.1: nice値に関するより詳細な情報の参照 |
$ man nice
|
出力形式
デフォルトが"false"であるNOCOLOR変数は、カラー出力を止めるべきかどうかを定義します。
3. ソフトウェアのブランチを併用する
3.a. 1つのブランチを利用する
Stableブランチ
ACCEPT_KEYWORDS変数はシステムが利用するソフトウェアブランチを定義します。
デフォルトではあなたのアーキテクチャ、例えばx86のstableソフトウェアブランチとなっています。
stableブランチのみ利用することを推奨しています。
しかし、安定性にそれほどこだわらず、http://bugs.gentoo.orgへバグレポートをすることによってGentooに手を貸したいのなら、読み続けてください。
Testingブランチ
より新しいソフトウェアを利用したいなら、testingブランチを代わりに利用することを考えてください。
Portageにtestingブランチを利用させるには、アーキテクチャの前に~を追加してください。
testingブランチは、その名が示すとおりテスト中です。
もしパッケージがテスト中なら、開発者は機能はするがテストが完全でないと思っていることを意味します。
バグをいち早く発見し、開発者が知ることが出来るようにバグレポートを提出することが望ましいです。
不完全なパッケージを扱ったり(例えば依存関係の間違いや消失など)、過度の更新(多くのビルドを行うことになる)や壊れたパッケージは安定性の問題があると言うことに注意してください。
Gentooの動作や問題の解決方法を知らないのなら、安定でテスト済みのブランチを使用することが推奨されています。
例えば、x86アーキテクチャのtestingブランチを選択するには、/etc/make.confを編集してこのように設定します。
コード表示 1.1: ACCEPT_KEYWORDS変数の設定 |
ACCEPT_KEYWORDS="~x86"
|
今システムを更新すれば、たくさんのパッケージが更新されることを知るでしょう。
注意してください: testingブランチを利用してシステムを更新したら、オフィシャルブランチであるstableに戻すのはたいてい優しい方法はありません(もちろんバックアップを取っている場合は除きます)。
3.b. StableとTestingの混在
package.keywords
特定のパッケージに対してtestingブランチの利用を許可するがシステムにはstableブランチを利用するようにPortageに指示することができます。
これを有効にするには、/etc/portage/package.keywordsにtestingブランチを利用したいパッケージのカテゴリと名前と記述します。
同名のディレクトリを作成し、ディレクトリ下のファイルにパッケージを記述することも出来ます。
例えば、gnumericでtestingブランチを利用するにはこうします。
コード表示 2.1: gnumericの /etc/portage/package.keywords 設定(完全な行) |
app-office/gnumeric ~x86
|
特定のバージョンをテスト
特定のバージョンをtestingブランチから利用したいがその後はPortageに利用して欲しくないときには、package.keywordsにバージョンを追加することができます。
このときには = 演算子を利用しなければなりません。
この他にも <=、<、>そして>= 演算子を利用してバージョンの範囲を入力することができます。
どの場合でも、バージョン情報を追加するなら、演算子を使わなければなりません。
バージョン情報を入力しないのなら、演算子は利用できません。
以下の例ではgnumeric-1.2.13を受け入れるようPortageに指示しています。
コード表示 2.2: 特定のテストバージョンのgnumericを有効にする |
=app-office/gnumeric-1.2.13 ~x86
|
3.c. マスクされたパッケージを利用する
package.unmask
Gentoo開発者達はこれらの位置の使用をサポートしていません。
これを行うときには注意してください。
package.unmaskやpackage.maskに関するサポート要求には応えられません。
警告済みという前提で話を進めます。
パッケージがGentoo開発者によってマスクされているが、それでもpackage.maskファイル(デフォルトでは/usr/portage/profilesにあります)に書かれている理由にかかわらず利用したいときには、/etc/portage/package.unmask(もしくは、ディレクトリであればその中のファイル)に正確な同じ行を追加します。
例えば、=net-mail/hotwayd-0.8がマスクされているなら、同じ行をpackage.unmaskに追加することによってマスクを解除できます。
コード表示 3.1: /etc/portage/package.unmask |
=net-mail/hotwayd-0.8
|
package.mask
Portageにあるパッケージや特定のバージョンのパッケージを利用して欲しくないときには、/etc/portage/package.mask(ファイルもしくはディレクトリ内のファイルかのどちらか)に適当な行を追加してやることによってあなた自身でマスクすることができます。
例えば、gentoo-sources-2.6.8.1より新しいカーネルソースをインストールして欲しくないときには、以下の行をpackage.maskに追加します。
コード表示 3.2: /etc/portage/package.mask 記入例 |
>sys-kernel/gentoo-sources-2.6.8.1
|
4. 追加のPortageツール
4.a. dispatch-conf
dispatch-confは._cfg0000_<name>ファイルをマージするための補助ツールです。
._cfg0000_<name>ファイルは、PortageがCONFIG_PROTECT変数によって保護されているディレクトリ内のファイルを上書きしたいとき、Portageによって生成されます。
dispatch-confを使うと、変更履歴をすべて残しながら、設定ファイルに対する更新をマージすることができます。
dispatch-confはその設定ファイルの間の差分を、パッチとして、あるいはRCSリビジョンを使うことで、保存します。
これは、もし設定ファイルの更新で失敗したら、いつでも前のバージョンの設定ファイルを復元できることを意味します。
dispatch-confを使用する際、設定ファイルをそのまま保持するか、新しい設定ファイルを使うか、既存のものを編集するか、もしくは変更を対話的にマージするかを指示できます。
またdispatch-confはいくつかの役立つ追加機能を持っています。
-
コメントへの更新のみの場合、設定ファイルへの自動的なマージ
-
余白の量が異なる場合、設定ファイルへの自動的なマージ
必ず/etc/dispatch-conf.confを最初に編集し、archive-dir変数によって参照されるディレクトリを作成してください。
コード表示 1.1: dispatch-conf を実行する |
# dispatch-conf
|
dispatch-confを走らせると、変更された各設定ファイルが一つずつ提示されます。
既存の設定ファイルを新しいもので更新して(置き換えて)次のファイルへ進むときは、uを押してください。
新しい設定ファイルを消去(削除)して次のファイルへ進むときは、zを押してください。
すべての設定ファイルが処理されたら、dispatch-confは終了します。
またqを押せば、いつでも終了することができます。
さらに詳細な情報はdispatch-confのmanを確認してください。
そこには、既存の設定ファイルと新しい設定ファイルの対話的なマージや、新しい設定ファイルの編集方法や、ファイル間の差異を調べる方法などが書かれています。
コード表示 1.2: dispatch-conf man ページを読む |
$ man dispatch-conf
|
4.b. etc-update
設定ファイルのマージを行うために、etc-updateを使うこともできます。
etc-updateはdispatch-confのように簡単ではありませんし、先進的でもありません。
しかし、対話的なマージ機能一揃いを提供し、些細な変更を自動でマージすることができます。
しかしながら、dispatch-confとは違い、etc-updateは旧バージョンの設定ファイルを保存しません。
一度設定ファイルを更新したら、旧バージョンの設定ファイルは永遠に失われてしまいます!
etc-updateの使用は、dispatch-confの使用と比べて著しく安全性が低いので、十分に注意してください。
コード表示 2.1: etc-updateを実行 |
# etc-update
|
分かり易い変更点をマージした後、更新を待っている保護されたファイルのリストが表示されるでしょう。
その下には利用可能なオプションが表示されています。
コード表示 2.2: etc-updateオプション |
Please select a file to edit by entering the corresponding number.
(-1 to exit) (-3 to auto merge all remaining files)
(-5 to auto-merge AND not use 'mv -i'):
|
-1を入力すると、etc-updateは終了し、以降の全ての変更を中止します。
-3か-5を入力すると、表示された全ての設定ファイルが新しいものに置き換えられます。
ゆえに、まず自動的に更新されるべきでない設定ファイルを選択することがとても重要です。
これは設定ファイルの左に常時されている数字を入力することによって簡単に行えます。
例えば、/etc/pear.confという設定ファイルを選択します。
コード表示 2.3: 特定の設定ファイルを更新 |
Beginning of differences between /etc/pear.conf and /etc/._cfg0000_pear.conf
End of differences between /etc/pear.conf and /etc/._cfg0000_pear.conf
1) Replace original with update
2) Delete update, keeping original as is
3) Interactively merge original with update
4) Show differences again
|
今あなたは2つのファイルの違いを見ています。
もし設定ファイルの更新が問題なく行えると信じるならば、1を入力します。
更新された設定ファイルが必要でない、もしくは新しい有用なものを何も提供してくれないと思うなら、2を入力します。
現在の設定ファイルを相互的に更新したいのなら、3を入力します。
相互マージについてのより詳しい情報をここで記述することには意味がありません。
完全にするためには、2つのファイルを相互マージしているときに利用できるコマンドのリストを提示します。
2行(オリジナルと、推奨される新しいもの)と以下のコマンドのうち1つを入力することができるプロンプトが表示されています。
コード表示 2.4: 相互マージで利用可能なコマンド |
ed: 両方のバージョンをヘッダーで装飾して利用して編集
eb: 両方のバージョンを利用して編集
el: 左のバーションを利用して編集
er: 右のバーションを利用して編集
e: 新しいバージョンを編集
l: 左のバージョンを利用
r: 右のバージョンを利用
s: 結果を表示せず共通の行を含む
v: 結果を表示して共通の行を含む
q: 終了
|
重量な設定ファイルの更新が終了したら、その他の設定ファイルを自動更新します。
更新できる設定ファイルが見つからないときにはetc-updateは終了します。
4.c. quickpkg
quickpkgを使えばシステムに既にマージされたパッケージのアーカイブを作成することができます。
これらのアーカイブは既にビルドされたパッケージとして利用できます。
quickpkgの実行は簡単です: アーカイブにしたいパッケージ名を追加するだけです。
例えば、curl、artsそしてprocpsをアーカイブするならこうします。
コード表示 3.1: quickpkg利用例 |
# quickpkg curl arts procps
|
ビルドされたパッケージは$PKGDIR/All(デフォルトでは/usr/portage/packages/All )に保管されます。
これらパッケージへのシンボリックリンクは$PKGDIR/<category>にあります。
5. オフィシャルツリーの活用
5.a. Portageツリーの一部を使う
パッケージ/カテゴリーを除外する
あるカテゴリー/パッケージのみを選択的にアップデートし、その他のものを除外することができます。
これはrsyncがemerge --syncを行っているときにカテゴリー/パッケージを除外することによって行うことができます
除外パターンを含むファイル名を/etc/make.confの--exclude-from変数で定義する必要があります。
コード表示 1.1: /etc/make.confで除外ファイルを定義 |
PORTAGE_RSYNC_EXTRA_OPTS="--exclude-from=/etc/portage/rsync_excludes"
|
コード表示 1.2: /etc/portage/rsync_excludesでgameのすべてを除外 |
games-*/*
|
注意して欲しいのはこれにより依存関係の問題を引き起こすかもしれないと言うことです。
許可されたパッケージが除外されたものに依存しているかもしれないからです。
5.b. 非公式のebuildを追加する
Portageオーバーレイディレクトリを定義する
Portageツリーを通して公式に利用できないebuildを利用するようにPortageに命令することができます。
サードパーティのebuildを保存しておく新しいディレクトリ(例えば/usr/local/portage)を作成します。
公式のPortageツリーと同じディレクトリ構造を使うようにしてください。
そして/etc/make.confのPORTDIR_OVERLAYが先ほど作成したディレクトリを示すように定義します。
これでPortageを使うときには、これらのebuildが次回emerge --syncを実行したときに削除/上書きされることなく利用できるようになります。
いくつかのOverlayで作業する
いくつかのoverlayで開発を行ったり、Portageツリーを破壊する前にパッケージをテストしたり、または単に様々なソースのunofficialなebuildを使用したりしたいパワーユーザ向けに、app-portage/gentoolkit-devはgensyncを提供します。これは、overlayリポジトリを最新状態に保つ手助けをしてくれるツールです。
gensyncを使えば、全てのリポジトリを一度に更新することができ、またそれらのうちのいくつかだけを選択することもできます。
それぞれのリポジトリは/etc/gensync/の設定ディレクトリに.syncsourceファイルがある必要があり、そこにはリポジトリの位置や名前、IDなどを記載します。
java(開発中のjava ebuild用)とentapps(あなたの会社のために社内開発されたアプリケーション用)という2つの追加リポジトリを所有していると仮定します。
この場合には、以下のコマンドを利用してこれらのリポジトリを更新することができます。
コード表示 2.1: リポジトリの更新にgensyncを使用する |
# gensync java entapps
|
5.c. Portageによって保守されていないソフトウェア
自分で保守されたソフトウェアをPortageで使う
場合によっては、Portageが自動処理を提供しているにもかかわらず、あなた自身でソフトウェアを設定、インストール、そして保守を行いたいことがあるでしょう。
有名なものにはカーネルソールやnvidiaドライバがあります。
あるパッケージがシステムに手動インストールされたことをPortageが知るように設定することができます。
この仕組みはinjectingと呼ばれ、/etc/portage/profile/package.providedファイルを通してPortageにサポートされています。
例えば、gentoo-sources-2.6.11.6が手動でインストールされたと言うことをPortageに知らせたいときには、以下の行を/etc/portage/profile/package.providedに追加します。
コード表示 3.1: package.provided の例 |
sys-kernel/gentoo-sources-2.6.11.6
|
6. ebuildアプリケーション
6.a. EmergeとEbuild
ebuildアプリケーションはPortageシステムの下層レベルインターフェースです。
このアプリケーションを使うと、与えられたebuildに反して特定の行動を実行することができます。
例えば、あなた自身によって個々のマージステップを実行することができます。
ebuildの利用はより開発目的です。
その為ebuildに関するより多くの情報はDevelopers Handbookにあります。
しかし、ここでは、あるソフトウェアをマージしているときにどんなebuildインスタンスがPortageによって呼び出されているのか、
そして実行を許可したいくつかのebuildを設定後の過程でどのようにして呼びだすのかについて説明します。
6.b. ソフトウェアの手動インストール
ソースの取得とチェックサム
与えられたebuildファイルと共にebuildが呼び出されたときはいつでも、全てのファイルのチェックサムが付属するManifestかfiles/digest-<name>-<version>から提供される値と一致しているか確認します。
これはソースが取得された後も行われます。
ebuildを使ってソースを取得するには、次のように実行します。
コード表示 2.1: ソースの取得 |
# ebuild path/to/ebuild fetch
|
ebuildのmd5sumがManifestファイルのものと一致しなかったり、ダウンロードされたソースがfiles/digest-<package>ファイルのものと一致しないときには、このようなエラーが表示されます。
コード表示 2.2: ebuildのチェックサム失敗 |
!!! File is corrupt or incomplete. (Digests do not match)
>>> our recorded digest: db20421ce35e8e54346e3ef19e60e4ee
>>> your file's digest: f10392b7c0b2bbc463ad09642606a7d6
|
この後にエラーが起きたファイルが表示されます。
もし取得したソースとebuild自身が正しいことが確実ならば、ebuildのダイジェスト機能を使ってManifestとdigest-<package>を再生成することができます。
コード表示 2.3: Manifestとdigestの再生成 |
# ebuild path/to/ebuild digest
|
ソースの解凍
ソースを/var/tmp/portage (もしくは/etc/make.confで定義したその他のディレクトリ)に解凍するには、ebuildの解凍機能を実行します。
コード表示 2.4: ソースの解凍 |
# ebuild path/to/ebuild unpack
|
これはebuildのsrc_unpack()機能(src_unpack()機能が何も定義されていないときには単に抽出するだけ)によって実行されます。
このステップでは必要なパッチも適用されます。
ソースのコンパイル
マージ行程の次のステップはソースのコンパイルです。
ebuildのコンパイル機能はebuildのsrc_compile()機能を実行することによってこのステップを引き受けます。
これは適当であれば設定ステップも含みます。
コード表示 2.5: ソースのコンパイル |
# ebuild path/to/ebuild compile
|
コンパイルの命令を変更したいのならebuildのsrc_compile()機能を編集すると良いでしょう。
しかし、ebuildアプリケーションがコンパイルステップを完了したとPortageをだまして信じ込ませることもできます。
全ての必要なコマンドを実行して作業ディレクトリに.compiledという空のファイルを作成します。
コード表示 2.6: コンパイルジョブが完了したとPortageに通達する |
# touch .compiled
|
ファイルを一時的な場所にインストール
次のステップでは、Portageは全ての必要なファイルを一時的な場所にインストールします。
このディレクトリは現在のファイルシステムにマージするべき全てのファイルを含みます。
src_install()機能を実行するebuildのインストール機能を実行することでこれを行うことができます。
コード表示 2.7: ファイルのインストール |
# ebuild path/to/ebuild install
|
現在のファイルシステムにファイルをマージ
最終ステップでは全てのファイルを現在のファイルシステムにマージし、Portageに登録します。
ebuildはこのステップを"qmerge"と呼び、以下のステップによって呼び出されます。
- 指定されているならpkg_preinst()機能を実行
- 全てのファイルを現在のファイルシステムに上書き
- Portageにファイルを登録
- 指定されているならpkg_postinst()機能を実行
ebuildのqmergeを実行してこれらのステップを実行します。
コード表示 2.8: 現在のファイルシステムにファイルをマージ |
# ebuild path/to/ebuild qmerge
|
一時的なディレクトリの削除
最後にebuildのclean機能を使って一時ディレクトリを掃除します。
コード表示 2.9: 一時的なディレクトリの削除 |
# ebuild path/to/ebuild clean
|
6.c. 追加のEbuild機能
全てのマージ関連のコマンドを実行する
ebuildのmerge機能を使うと取得、解凍、コンパイル、インストール、そしてqmergeコマンドを一度に実行できます。
コード表示 3.1: ソフトウェアのインストール |
# ebuild path/to/ebuild merge
|
設定動作を実行
いくらかのパッケージにはシステムにより適合させるためにパッケージを設定する指示が含まれています。
これらの指示は対話方式なので自動的には実行されません。
ebuildのconfig()機能を利用して設定ステップを実行するには、ebuildの設定機能を使います。
コード表示 3.2: パッケージの設定 |
# ebuild path/to/ebuild config
|
(RPM)パッケージのビルド
ebuildのバイナリパッケージや、RPMファイルでさえもPortageに作成するよう指示することができます。
ebuildのpackageかrpm機能を使ってこれらアーカイブを作成します。
これら2つの機能の間には少し違いがあります。
-
package機能は、パッケージを作成する前に全ての必要なステップ(取得、解凍、コンパイル、インストール)を実行するというmerge機能にとても良く似たものです
-
rpm機能はebuildのインストール機能を実行し、ファイルが作成された後にPRMパッケージがビルドされます
コード表示 3.3: パッケージの作成 |
# ebuild path/to/ebuild package
# ebuild path/to/ebuild rpm
|
作成されたRPMファイルにはebuildの依存関係情報は含まれていません。
6.d. より詳しい情報
Portageやebuildアプリケーション、そしてebuildファイルについてのより詳しい情報については以下のmanページを調べてください。
コード表示 4.1: manページ |
$ man portage
$ man emerge
$ man ebuild
$ man 5 ebuild
|
開発者関連の情報がDevelopers Handbookで取得できます。
D. Gentooネットワーク設定
1. はじめに
1.a. はじめに
注意:
この文書は、読者がカーネルと使用しているハードウェアに対するモジュールを正確に設定してあることと、ハードウェアのインターフェース名を把握していることを想定しています。
さらに、eth0、またはeth1やwlan0やその他を設定している最中であることも想定しています。
|
注意:
この文書は、baselayout-1.11.11以降を使用していることを前提としています。
|
ネットワークカードの設定を始めるために、GentooのRCシステムにその旨を示す必要があります。
これは、/etc/init.dの下にnet.loからnet.eth0へのシンボリックリンクを作成することで行います。
コード表示 1.1: net.loからnet.eth0にシンボリックリンクする |
# cd /etc/init.d
# ln -s net.lo net.eth0
|
こうすることでGentooのRCシステムは、そのインターフェースについて情報を得ることができます。
さらに新しいインターフェースの設定方法もわからなければなりません。
すべてのネットワークインターフェースが、/etc/conf.d/netで設定されます。
以下はDHCPの場合と固定アドレスの場合の例です。
コード表示 1.2: /etc/conf.d/netの例 |
config_eth0=( "dhcp" )
config_eth0=( "192.168.0.7/24" )
routes_eth0=( "default via 192.168.0.1" )
config_eth0=( "192.168.0.7 netmask 255.255.255.0" )
routes_eth0=( "default via 192.168.0.1" )
|
注意:
インターフェースの設定を指定しない場合、DHCPであると想定されます。
|
注意:
CIDRは、Classless InterDomain Routingの略です。
もともと、IPv4アドレスはA、B、Cにクラス分けされていました。
初期のクラス分けの仕組みには、インターネットの今のような大規模な大衆化が想定されておらず、新規のユニークアドレスを使い果たす恐れがあります。
CIDRは、一つのアドレスが複数のIPアドレスを指すことが可能なアドレス割当て体系です。
CIDRのIPアドレスは、例えば、192.168.0.0/16のように、スラッシュの後に続く数字があることを除いて普通のIPアドレスのように見えます。
CIDRは、RFC 1519に記述されています。
|
インターフェースを設定したら、次のコマンドを使用して開始および停止することができます。
コード表示 1.3: ネットワークスクリプトの開始と停止 |
# /etc/init.d/net.eth0 start
# /etc/init.d/net.eth0 stop
|
重要:
ネットワーク接続に関する問題を解決するときは、何が起こっているかについてより多くの情報を得るために、/etc/conf.d/rcでRC_VERBOSE="yes"を設定することをお薦めします。
|
ネットワークインターフェースの開始と停止に成功したら、Gentooの起動時に開始したいと思うでしょう。
ここにそれをする方法があります。
最後の行の"rc"コマンドは、現在のrunlevelでまだ開始されていないスクリプトを開始するためにGentooに指示します。
コード表示 1.4: 起動時にネットワークインターフェースを設定する |
# rc-update add net.eth0 default
# rc
|
2. 高度な設定
2.a. 高度な設定
config_eth0変数が、インターフェースの設定の要です。
config_eth0は、インターフェース(この場合はeth0)設定用の高度な設定値のリストです。
設定値のリストに含まれる各コマンドは、順に実行されます。
一つでもコマンドが動作すれば、そのインターフェースは正常であると判断されます。
以下は、あらかじめ備わっている設定値のリストです。
| コマンド |
説明 |
| null |
何もしません |
| noop |
インターフェースが有効になっていてアドレスが割り当てられていたならば、
その時はこの設定を無視します
|
| IPv4かIPv6のアドレス |
インターフェースに指定されたアドレスを追加します |
|
dhcp、adsl、apipa(もしくはサードパーティのモジュールが要求するカスタムコマンド)
|
コマンドを供給するモジュールを実行します。例えばdhcpは、dhcpcd、dhclient、pumpのうちのどれか一つである、DHCP機能を提供するモジュールを実行します。
|
一つのコマンドが失敗した場合に備えて、一つの予備のコマンドを指定することができます。
予備のコマンド(fallback)も、これらの設定の形式に正確に適合している必要があります。
これらのコマンドを繋げて同時に指定できます。実際に使用されるいくつかの例を示します。
コード表示 1.1: 設定例 |
config_eth0=(
"192.168.0.2/24"
"192.168.0.3/24"
"192.168.0.4/24"
)
config_eth0=(
"192.168.0.2/24"
"4321:0:1:2:3:4:567:89ab"
"4321:0:1:2:3:4:567:89ac"
)
config_eth0=(
"noop"
"dhcp"
)
fallback_eth0=(
"null"
"apipa"
)
|
注意:
ifconfigモジュールを使用して一つ以上のアドレスを追加する場合、二つ目以降のアドレスの各々に対しインターフェースの別名が生成されます。
よって上二つの例では、インターフェースeth0、eth0:1、eth0:2が得られます。
カーネルとその他プログラムがeth0としてeht0:1とeth0:2を扱う場合、これらのインターフェースでは何も特別なことはできません。
|
重要:
fallback順は重要です! nullオプションを指定していないと、apipaコマンドは、noopコマンドが失敗したときだけ実行されます。
|
注意:
APIPAとDHCPについては後で記述します。
|
2.b. ネットワーク依存設定
/etc/init.dにあるinitスクリプトは、特定のネットワークインターフェース、もしくはただ単にnetに依存することがあります。
netサービスの意味を、RC_NET_STRICT_CHECKING変数を使用して異なる状況を示すように/etc/conf.d/rcで定義することができます。
| 値 |
説明 |
| none |
netサービスは常に起動されていると見なされます |
| no |
net.loに加えて少なくとも一つのnet.*サービスが起動していなければなりません。
WIFIと有線NICを持っていて、netサービスが起動しているように状況に応じて一つだけを起動させたいと思うノートブックのユーザによって利用されるでしょう。
|
| lo |
noオプションと同じですが、net.loも数に含まれます。
起動時にどのインターフェースが起動するか気にしないユーザに便利です。
|
| yes |
netサービスが起動していると見なされるためには、すべてのネットワークインターフェースが起動していなければならない場合です。
|
ですが、net.eth0とnet.eth1に依存しているnet.br0の場合はどうでしょうか。
net.eth1は、ブリッジに追加する前に設定される必要がある無線もしくはPPPデバイスかもしれません。
その場合、net.loへのシンボリックリンクとしての/etc/init.d/net.br0では実現できません。
この状況への答えは、/etc/conf.d/netにdepend()関数を書くことです。
コード表示 2.1: /etc/conf.d/netでのnet.br0の依存設定 |
depend_br0() {
need net.eth0 net.eth1
}
|
依存関係についての詳しい解説は、GentooハンドブックのWriting Init Scriptsを参照してください。
2.c. 変数名と値
変数名は可変です。
通常はvariable_${interface|mac|essid|apmac}の形式に従っています。
例えば、変数dhcpcd_eth0は、eth0のdhcpcdオプションの値を保持しますし、dhcpcd_essidは、どれかのインターフェースがESSIDアクセスポイント"essid"に接続したときのdhcpcdオプションの値を保持します。
しかし、インターフェースの名前が必ずethxでなければならないといっているわけではありません。
実際、多くの無線インターフェースは、ethxと同じようにwlanx、raxのような名前です。
さらに、ブリッジのようなユーザ定義のインターフェースは、fooなどのように任意の名前を付けることもできます。
よりわかりやすいように、無線アクセスポイントは、アルファベットや数字以外の文字を使った名前にできます。このことはESSID毎にネットワークパラメータの設定を可能にするために、とても重要です。
このことに関して何より弱点なのは、Gentooはネットワーク接続に関してbash変数を使うことです。
そしてbashは英字のアルファベットと数字以外は使用できません。
この制限を回避するために、英字のアルファベットと数字ではない全ての文字を_(アンダースコア)に変換します。
もう一つのbashの弱点は、変数の内容に関してです。
一部の文字はエスケープされてしまいます。
これは、エスケープされる必要がある文字の前に\(バックスラッシュまたは円記号)を置くことで回避できます。次の文字は、この方法でエスケープする必要があります。"と'と\。
この例では、特殊な文字を使用する無線ESSIDを使用しています。
この場合、以下のようにESSID My "\ NETを使用することになります。
コード表示 3.1: 変数名の例 |
dns_domain_My____NET="My "\\ NET"
|
3. 個別ネットワーク
3.a. ネットワークモジュール
現在、モジュール構造のネットワーク接続スクリプトをサポートしています。
これにより、既存のものと互換性を保ちながら、新しいインタフェースの種類や設定モジュールのサポートを簡単に追加できます。
モジュールが必要とするパッケージがインストールされていれば、モジュールはデフォルトでロードされます。
ここでまだインストールされていないパッケージのモジュールを指定すると、インストールする必要があるパッケージがあることを示すエラーとなります。
理想は、同一サービスを提供する二つ以上のパッケージをインストール済みで、その中の一つを選ぶ必要があるときにだけモジュール設定を使用することです。
注意:
ここで紹介したすべての設定は、他に規定がなければ、/etc/conf.d/netに書かれています。
|
コード表示 1.1: モジュール選択 |
modules=( "iproute2" )
modules_eth0=( "pump" )
modules=( "!iwconfig" )
|
3.b. インタフェースハンドラ
現在、ifconfigとiproute2の二つのインタフェースハンドラを提供しています。
ネットワークの設定のどんなことをするのにも、これらのうちの一つが必要です。
ifconfigは、今のGentooのデフォルトであり、システムプロファイルに含まれています。iproute2は、より強力で柔軟なパッケージですが、デフォルトでは含まれていません。
コード表示 2.1: iproute2をインストールする |
# emerge sys-apps/iproute2
modules=( "iproute2" )
|
ifconfigもiproute2もどちらもよく似たことをするので、基本設定を相互に動作するようにできます。
例えば、以下の抜粋コードのどちらも、どちらを使用しているかに関係なく動作します。
コード表示 2.2: ifconfigとiproute2の例 |
config_eth0=( "192.168.0.2/24" )
config_eth0=( "192.168.0.2 netmask 255.255.255.0" )
config_eth0=( "192.168.0.2/24 brd 192.168.0.255" )
config_eth0=( "192.168.0.2 netmask 255.255.255.0 broadcast 192.168.0.255" )
|
3.c. DHCP
DHCPは、DHCPサーバからネットワーク情報(IPアドレス、DNSサーバ、ゲートウェイ、その他)を取得する手段です。
これは、ネットワーク上で稼動中のDHCPサーバが存在する場合、DHCPを使うことを各クライアントに指示する必要があり、それが自動的にネットワークを設定するということを意味します。
もちろん、DHCPを使えるようになる前に、必要なら無線やPPPなど、他の設定をする必要はあります。
DHCPの機能は、dhclient、dhcpcd または pumpによって提供されます。
各DHCPモジュールには、長所と短所があります。以下にざっと紹介します。
| DHCPモジュール |
パッケージ |
長所 |
短所 |
| dhclient |
net-misc/dhcp |
BIND DNSソフトウェアを作成しているISCによって作成されています。
設定項目が豊富
|
設定が極めて複雑で、ソフトウェアは非常に大きくなり過ぎており、DHCPからNTPサーバの情報を得ることはできず、デフォルト設定ではホスト名を送信しません
|
| dhcpcd |
net-misc/dhcpcd |
長い間Gentooではデフォルトであり、外部のツールに依存せず、Gentooで積極的に開発されています
|
たまに遅くなることがあり、与えられたIPアドレスなどの貸与期間に制限がない場合は、今のところデーモン化されません
|
| pump |
net-misc/pump |
軽量、外部ツールへの依存なし
|
性能向上のためには維持されておらず、信頼性が低く、特にモデム経由の場合に信頼性が低く、DHCPからNISサーバの情報を取得できません
|
二つ以上のDHCPクライアントがインストールされている場合、どれを使用するかを指定する必要があります - そうしないと可能ならdhcpcdをデフォルトにします。
DHCPモジュールに特定のオプションを与えるために、module_eth0="..."を使用してください。
(使用中のDHCPモジュールにmoduleを付け替えてください - たとえばdhcpcd_eth0)
DHCPの相互運用性の向上に勤めています - その一環としてdhcp_eth0変数を使用して以下のコマンドをサポートします。デフォルト設定ではこれらのどれも設定されていません。
-
release - 再利用できるようにIPアドレスを解放します
-
nodns - /etc/resolv.confを書き換えません
-
nontp - /etc/ntp.confを書き換えません
-
nonis - /etc/yp.confを書き換えません
コード表示 3.1: /etc/conf.d/netでのDHCP設定の例 |
modules=( "dhcpcd" )
config_eth0=( "dhcp" )
dhcpcd_eth0="-t 10"
dhcp_eth0="release nodns nontp nonis"
|
注意:
dhcpcdとpumpは、デフォルトで現在のホスト名をDHCPサーバに送信します。
よって、これに関して何も指定する必要はありません。
|
3.d. PPPoE/PPPoAによるADSL
最初に、ADSLソフトウェアをインストールする必要があります。
コード表示 4.1: pppパッケージのインストール |
# emerge net-dialup/ppp
|
注意:
もしPPPoAが必要なら、必ず>=baselayout-1.12.xを使用してください。
|
次に、PPPで使われるPPPネットスクリプトとイーサネットインタフェースのためのネットスクリプトを生成します。
コード表示 4.2: PPPとイーサネットのスクリプトの生成 |
# ln -s /etc/init.d/net.lo /etc/init.d/net.ppp0
# ln -s /etc/init.d/net.lo /etc/init.d/net.eth0
|
必ず/etc/conf.d/rcでRC_NET_STRICT_CHECKING="yes"を設定してください。
ここで、/etc/conf.d/netの設定をする必要があります。
コード表示 4.3: 基本的なPPPoEの設定 |
config_eth0=( null )
config_ppp0=( "ppp" )
link_ppp0="eth0"
plugins_ppp0=( "pppoe" )
username_ppp0='user'
password_ppp0='password'
pppd_ppp0=(
"noauth"
"defaultroute"
"usepeerdns"
"holdoff 3"
"child-timeout 60"
"lcp-echo-interval 15"
"lcp-echo-failure 3"
noaccomp noccp nobsdcomp nodeflate nopcomp novj novjccomp
)
depend_ppp0() {
need net.eth0
}
|
コード表示 4.4: /etc/ppp/pap-secretsの例 |
"username" * "password"
|
もしUSBモデムによるPPPoEを使用しているなら、br2684ctlをemergeする必要があるでしょう。
これについての適切な設定方法は、/usr/portage/net-dialup/speedtouch-usb/files/READMEを読んでください。
重要:
/etc/conf.d/net.exampleのADSLとPPPの章を注意深く読んでください。
個々のPPPの設定で必要になりそうなすべての設定方法について、より詳細な説明が多く含まれています。
|
3.e. APIPA (Automatic Private IP Addressing)~自動プライベートIPアドレス割当て機能
APIPAは、インタフェースに169.254.0.0-169.254.255.255の範囲のアドレスに無作為にARPメッセージを送信することによって、空きアドレスを探します。
応答のないものがあった場合、そのアドレスをインタフェースに割り当てます。
DHCPサーバが存在せず、かつ直接インターネットに接続せず、かつ他の全てのコンピュータがAPIPAを使用しているプライベートネットワークにだけ役に立ちます。
APIPAをサポートするために、emerge net-misc/iputilsまたは、net-analyzer/arpingをしてください。
コード表示 5.1: /etc/conf.d/netでのAPIPA設定 |
config_eth0=( "dhcp" )
fallback_eth0=( "apipa" )
config_eth0=( "apipa" )
|
3.f. Bonding(インタフェースを束ねる)
bonding/trunkingをする(インタフェースを束ねる)には、emerge net-misc/ifenslaveをします。
bondingは、ネットワーク帯域を増やすために使われます。
もし一つのネットワークにしたい二つのネットワークカードがあるなら、それらを束ねることができます。
そうすると、アプリケーションには一つのインタフェースとして見えますが、実際は両方のネットワークカードが使用されます。
コード表示 6.1: /etc/conf.d/netでのbonding設定 |
slaves_bond0="eth0 eth1 eth2"
config_bond0=( "null" )
depend_bond0() {
need net.eth0 net.eth1 net.eth2
}
|
3.g. ブリッジ (802.1dのサポート)
ブリッジをサポートするには、emerge net-misc/bridge-utilsをします。
ブリッジは、異なるネットワーク同士を繋げるために使用されます。
例えば、ADSLモデム経由でインターネットに接続していて、他のコンピュータをADSLモデム経由でインターネットに接続できるようにするための無線接続カードを持っているサーバがあるとします。
この場合、二つのインタフェースを相互に繋げるために、ブリッジを作成できます。
コード表示 7.1: /etc/conf.d/netでのブリッジ設定 |
brctl_br0=( "setfd 0" "sethello 0" "stp off" )
bridge_br0="eth0 eth1"
config_eth0=( "null" )
config_eth1=( "null" )
config_br0=( "192.168.0.1/24" )
depend_br0() {
need net.eth0 net.eth1
}
|
重要:
複数のブリッジ設定を行う場合、変数名を参照してください。
|
3.h. MACアドレス
sys-apps/baselayout-1.11.14かそれ以上を使用していて、特定のアドレスに変更したいなら、インタフェースのMACアドレスを変更するために何もemergeする必要はありません。
しかし、ランダムなMACアドレスに変更する必要があるか、上記のバージョンよりも古いbaselayoutを使用しているなら、この機能が有効になるにはemerge net-analyzer/macchangerをする必要があります。
コード表示 8.1: MACアドレスを変更する例 |
mac_eth0="00:11:22:33:44:55"
mac_eth0="random-ending"
mac_eth0="random-samekind"
mac_eth0="random-anykind"
mac_eth0="random-full"
|
3.i. トンネリング
トンネリングをするには、インタフェースハンドラで実現できるので、何もemergeする必要はありません。
コード表示 9.1: /etc/conf.d/netでのトンネリング設定 |
iptunnel_vpn0="mode gre remote 207.170.82.1 key 0xffffffff ttl 255"
iptunnel_vpn0="mode ipip remote 207.170.82.2 ttl 255"
config_vpn0=( "192.168.0.2 peer 192.168.1.1" )
|
3.j. VLAN (802.1qのサポート)
VLANをサポートするには、emerge net-misc/vconfigをします。
仮想LANは、たとえ別のセグメントであっても、あたかも単一のネットワークセグメントに接続されているように振舞うネットワークデバイスの集合です。
VLANに接続している機器には、たとえ物理的に同じネットワークを共有していても、同一のVLAN上の機器しか見えません。
コード表示 10.1: /etc/conf.d/netでのVLAN設定 |
vlans_eth0="1 2"
vconfig_eth0=( "set_name_type VLAN_PLUS_VID_NO_PAD" )
vconfig_vlan1=( "set_flag 1" "set_egress_map 2 6" )
config_vlan1=( "172.16.3.1 netmask 255.255.254.0" )
config_vlan2=( "172.16.2.1 netmask 255.255.254.0" )
|
重要:
複数のVLAN設定を行う場合、変数名を参照してください。
|
4. 無線ネットワーク
4.a. はじめに
現在、wireless-toolsやwpa_supplicantによって無線のセットアップがサポートされています。
覚えておくべき重要なことは、無線ネットワークの設定をインターフェース毎ではなく、全体的に行うと言うことです。
wpa_suppliantは最良の選択ですが、全てのドライバをサポートしている訳ではありません。
サポート済みのドライバリストはread the wpa_supplicant siteで確認することが出来ます。
また、現在wpa_supplicantは設定されたSSIDにのみ接続することが出来ます。
wireless-toolsはほぼ全てのカードとドライバをサポートしていますが、WPAのみのアクセスポイントには接続することは出来ません。
警告:
現時点ではlinux-wlan-ngはbaselayoutではサポートされていません。
これは、linux-wlan-ngは人それぞれによって全く異なる独自のセットアップと設定を行うからです。
linux-wlan-ng開発者達はセットアップをwireless-toolsへと変更するのではと噂されています。
これが実現した場合、baselayoutでlinux-wlan-ngが使えるかもしれません。
|
4.b. WPA Supplicant
WPA Supplicantとは、
WPAが有効なアクセスポイントへの接続を可能にするパッケージです。
これはまだベータ版なのでセットアップはかなり変わりやすいですが、ほとんどの部分でうまく動作します。
コード表示 2.1: wpa_supplicantのインストール |
# emerge net-wireless/wpa_supplicant
|
重要:
wpa_supplicantを動作させるにはカーネルでCONFIG_PACKETを有効にしなければなりません。
|
では、wpa_supplicantをwireless-toolsより優先させるために/etc/conf.d/netを設定しましょう。(両方がインストールされているのなら、wireless-toolsがデフォルトとなります)
コード表示 2.2: wpa_supplicant向けに/etc/conf.d/netを設定 |
modules=( "wpa_supplicant" )
wpa_supplicant_eth0="-Dmadwifi"
|
注意:
host-apドライバを使用しているのなら、wpa_suppliacnatで正しく使用するために、
カードをManagedモードにする必要があります。
/etc/conf.d/netにiwconfig_eth0="mode managed"
を記述することによりこれを行うことが出来ます。
|
簡単でしょう?
ですが、まだwpa_supplicant自身の設定をしなければいけません。
これは、接続しようとするアクセスポイントがどれくらいセキュアかによって、
設定の複雑さも変わってきます。
以下はwpa_supplicantと共にインストールされる
/usr/share/doc/wpa_supplicant-<version>/wpa_supplicant.conf.gz
からの抜粋です。
コード表示 2.3: /etc/wpa_supplicant/wpa_supplicant.confの例 |
ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
ap_scan=1
network={
ssid="simple"
psk="very secret passphrase"
priority=5
}
network={
ssid="second ssid"
scan_ssid=1
psk="very secret passphrase"
priority=2
}
network={
ssid="example"
proto=WPA
key_mgmt=WPA-PSK
pairwise=CCMP TKIP
group=CCMP TKIP WEP104 WEP40
psk=06b4be19da289f475aa46a33cb793029d4ab3db7a23ee92382eb0106c72ac7bb
priority=2
}
network={
ssid="plaintext-test"
key_mgmt=NONE
}
network={
ssid="static-wep-test"
key_mgmt=NONE
wep_key0="abcde"
wep_key1=0102030405
wep_key2="1234567890123"
wep_tx_keyidx=0
priority=5
}
network={
ssid="static-wep-test2"
key_mgmt=NONE
wep_key0="abcde"
wep_key1=0102030405
wep_key2="1234567890123"
wep_tx_keyidx=0
priority=5
auth_alg=SHARED
}
network={
ssid="test adhoc"
mode=1
proto=WPA
key_mgmt=WPA-NONE
pairwise=NONE
group=TKIP
psk="secret passphrase"
}
|
4.c. Wireless Tools
最初の設定とmanagedモード
Wireless Toolsは、
基本的な無線インターフェースを起動することからWEPセキュリティレベルまでを設定する一般的な方法です。
WEPはセキュリティの手段としては弱いですが、最も普及しています。
Wireless Toolsの設定は少数の要となる変数によって制御されます。
以下の設定ファイルの例は必要となる全てを記述しています。
何も設定しないと「最も信号が強く暗号化されていないアクセスポイントへ接続する」事になり、
いつも何かに接続しようとしていることを心に留めておいてください。
コード表示 3.1: wireless-toolsのインストール |
# emerge net-wireless/wireless-tools
|
注意:
無線の設定を/etc/conf.d/wirelessに保存することも出来ますが、このガイドでは/etc/conf.d/netに保存することを推奨します。
|
重要:
変数名ドキュメントを参照する必要があるでしょう。
|
コード表示 3.2: /etc/conf.d/netでのiwconfig設定例 |
modules=( "iwconfig" )
key_ESSID1="[1] s:yourkeyhere key [1] enc open"
key_ESSID2="[1] aaaa-bbbb-cccc-dd key [1] enc restricted"
preferred_aps=( "ESSID1" "ESSID2" )
|
アクセスポイントの選択を微調整する
アクセスポイントの選択を微調整するために、いくつかの特別なオプションを追加することが出来ます。
ですが、これらは通常では必要ではありません。
優先されたアクセスポイントのみに接続するかどうかを選択することが出来ます。
デフォルトでは、設定された全てが失敗したのなら、暗号化されていないアクセスポイントへ接続します。
これはassociate_order変数で制御することが出来ます。
以下に値と詳細を示します。
| 値 |
詳細 |
| any |
デフォルトの振る舞い |
| preferredonly |
優先リストにある接続可能なアクセスポイントのみ接続する |
| forcepreferred |
スキャンで見つからなければ優先リストにあるアクセスポイントへ強制接続を試みる
|
| forcepreferredonly |
アクセスポイントのスキャンを行わず、リストにある物に接続を試みる
|
| forceany |
forcepreferredと同じで、それに加えて利用可能なアクセスポイントへ接続する |
最後にblacklist_apsとunique_apの選択を行います。
blacklist_apsはpreferred_apsと同じような動作を行います。
unique_apにはyesかnoが設定され、
2番目の無線インターフェースが1番目と同じアクセスポイントへ接続できるかを決定します。
コード表示 3.3: blacklist_apsとunique_apの例 |
blacklist_aps=( "ESSID3" "ESSID4" )
unique_ap="yes"
|
Ad-HocとMasterモード
managedモードになっているアクセスポイント全てで接続失敗した場合に、
Ad-Hocノードに設定を切り替えたいのなら、
以下のように設定することでこれを行うことが出来ます。
コード表示 3.4: Ad-Hocモードへのフォールバック |
adhoc_essid_eth0="This Adhoc Node"
|
Ad-Hocネットワークへ接続したり、アクセスポイントとなるためにMasterモードで起動してはどうですか?
そのためには以下のように設定します。上で述べたようにしてWEPキーを指定する必要があるかもしれません。
コード表示 3.5: Ad-Hoc/Master設定の例 |
mode_eth0="ad-hoc"
essid_eth0="This Adhoc Node"
channel_eth0="9"
|
重要:
以下はthe NetBSD documentationにあるBSD wavelanドキュメントを丸写ししたものです。
14のチャンネルが利用可能であり、北アメリカではチャンネル1-11が合法で、
ヨーロッパの多くではチャンネル1-13、フランスではチャンネル10-13、そして日本ではチャンネル14のみです。
疑うのであれば、カードやアクセスポイントに付属するドキュメントを参照してください。
選択したチャンネルがアクセスポイントのチャンネル(もしくはAd-Hocネットワークの他のカード)
と一致するようにしてください。
北アメリカやヨーロッパの多くで売られているカードのデフォルトは3で、
フランスで売られているカードのデフォルトは11、そして日本で売られているカードのデフォルトは14です。
|
無線ツールのトラブルシューティング
ドライバや環境の問題で、無線を接続し稼働の手助けになる変数がいくつかあります。
以下に一覧を示します。
| 変数 |
初期値 |
詳細 |
| iwconfig_eth0 |
|
iwconfigに何を送るかについての詳細はiwconfigのマニュアルを参照してください |
| iwpriv_eth0 |
|
iwprivに何を送るかについての詳細はiwprivのマニュアルを参照してください |
| sleep_scan_eth0 |
0 |
スキャンを試みる前にスリープを行う秒数です。ドライバやファームウェアが利用可能になるまでにより長い時間がかかるのであればこれが必要です。
|
| sleep_associate_eth0 |
5 |
接続先のアクセスポイントを次へと変更するためにインターフェースを待機させる秒数です
|
| associate_test_eth0 |
MAC |
いくつかのドライバでは接続の解放やテスト時に無効なMACアドレスをリセットしません。いくらかのドライバでは接続の解放やテスト時に品質レベルをリセットしません。MAC、qualityとallが設定可能です。
|
| scan_mode_eth0 |
|
いくつかのドライバではad-hocモードでスキャンを行うため、スキャンが失敗したらここでad-hocの設定を試みます
|
| iwpriv_scan_pre_eth0 |
|
スキャン前にいくつかのiwprivコマンドをインターフェースへ送信します。詳細はiwprivのマニュアルを参照してください。
|
| iwpriv_scan_post_eth0 |
|
スキャン後にいくつかのiwprivコマンドをインターフェースへ送信します。詳細はiwprivのマニュアルを参照してください。
|
4.d. ESSIDごとにネットワーク設定を定義する
ESSID1に接続するときには固定IPが必要で、ESSID2に接続するときにはDHCPが必要なことがあります。
実際、ほとんどのモジュール変数はESSIDごとに変更可能です。
以下に例を示します。
注意:
WPA Supplicantや無線ツールを使用しているのならこれらは動作します。
|
重要:
変数名ドキュメントを参照する必要があるでしょう。
|
コード表示 4.1: ESSIDごとにネットワーク設定を上書きする |
config_ESSID1=( "192.168.0.3/24 brd 192.168.0.255" )
routes_ESSID1=( "default via 192.168.0.1" )
config_ESSID2=( "dhcp" )
fallback_ESSID2=( "192.168.3.4/24" )
fallback_route_ESSID2=( "default via 192.168.3.1" )
dns_servers_ESSID1=( "192.168.0.1" "192.168.0.2" )
dns_domain_ESSID1="some.domain"
dns_search_domains_ESSID1="search.this.domain search.that.domain"
config_001122334455=( "dhcp" )
dhcpcd_001122334455="-t 10"
dns_servers_001122334455=( "192.168.0.1" "192.168.0.2" )
|
5. 機能の追加
5.a. 標準フック関数
start/stop操作に関連して呼び出される4つの関数が定義できます。
それらの関数は、一つの関数で複数のアダプタを制御できるように、インターフェース名が最初に渡されて呼び出されます。
対象のインターフェースの有効化処理や無効化処理が続行可能であることを示すには、preup()とpredown()関数の戻り値は、0 (成功)でなければなりません。
preup()がゼロ以外の値を返すと、インターフェースの有効化処理は中断されます。
predown()がゼロ以外の値を返すと、インターフェースの無効化処理の続行は認められません。
postup()とpostdown()関数の戻り値は無視されます。失敗を示す場合は何もすることがないからです。
${IFACE}には起動/停止しようとしているインターフェースが設定されます。
${IFVAR}はbashが許容する変数名に変換された${IFACE}です。
コード表示 1.1: pre/post up/down関数の例 |
preup() {
if ethtool ${IFACE} | grep -q 'Link detected: no'; then
ewarn "No link on ${IFACE}, aborting configuration"
return 1
fi
return 0
}
predown() {
if is_net_fs /; then
eerror "root filesystem is network mounted -- can't stop ${IFACE}"
return 1
fi
return 0
}
postup() {
return 0
}
postdown() {
return 0
}
|
5.b. Wireless Toolsのフック関数
注意:
WPA Supplicantとの組み合わせでは動作しません。- ですが${ESSID}と${ESSIDVAR}変数はpostup()関数で利用可能です。
|
associate関数に関連して呼び出される2つの関数が定義できます。
それらの関数は、一つの関数で複数のアダプタを制御できるように、インターフェース名が最初に渡されて呼び出されます。
対象のインターフェースの有効化や無効化処理が続行可能であることを示すには、preassociate()関数の戻り値は、0 (成功)でなければなりません。
preassociate()ゼロ以外の値を返すと、インターフェースの有効化処理は中断されます。
postassociate()関数の戻り値は無視されます。失敗を示す場合は何もすることがないからです。
${ESSID}は接続しようしているAPの正確なESSIDが設定されます。
${ESSIDVAR}はbashが許容する変数名に変換された${ESSID}です。
コード表示 2.1: pre/post associate関数 |
preassociate() {
local user pass
eval user="\$\{leap_user_${ESSIDVAR}\}"
eval pass="\$\{leap_pass_${ESSIDVAR}\}"
if [[ -n ${user} && -n ${pass} ]]; then
if [[ ! -x /opt/cisco/bin/leapscript ]]; then
eend "For LEAP support, please emerge net-misc/cisco-aironet-client-utils"
return 1
fi
einfo "Waiting for LEAP Authentication on "${ESSID//\\\\//}""
if /opt/cisco/bin/leapscript ${user} ${pass} | grep -q 'Login incorrect'; then
ewarn "Login Failed for ${user}"
return 1
fi
fi
return 0
}
postassociate() {
return 0
}
|
注意:
${ESSID}と${ESSIDVAR}はpredown()とpostdown()関数では利用できません。
|
6. ネットワーク管理
6.a. ネットワーク管理
コンピュータを持って常に移動する場合、いつもイーサネットケーブルがあるわけでも、ケーブルが繋がっているわけでも、アクセスポイントが利用可能なわけでもないかもしれません。
さらにイーサネットケーブルが接続されたりアクセスポイントを発見したりしたときに、自動でネットワークが使えるようにしたほうがいいかもしれません。
ここには、このようなネットワーク管理をしやすくするいくつかのツールがあります。
注意:
この文書ではifplugdに関連したことだけ説明しますが、
netplugのような代替もあります。
netplugはifplugdを代替する軽量版で、カーネル上のネットワークドライバが正しく動作することを期待しますが、
多くのドライバは正しく動かないことがあります。
|
6.b. ifplugd
ifplugdはイーサネットケーブルの挿抜時にインターフェースを起動停止するデーモンです。
アクセスポイントとの接続や新しいアクセスポイントの範囲内に入ったことの検知も扱います。
コード表示 2.1: ifplugdのインストール |
# emerge sys-apps/ifplugd
|
ifplugdの設定も難しいことはなにもありません。
設定ファイルは/etc/conf.d/netにあります。
設定可能な変数についてはman ifplugdを実行してください。
コード表示 2.2: ifplug設定例 |
ifplugd_eth0="..."
ifplugd_eth0="--api-mode=wlan"
|
複数のネットワーク接続を管理する場合には、
複数のDNSサーバーとの通信と設定が簡単になるツールを導入した方がいいでしょう。
これは、DHCPからIPアドレスを取得する場合にはとても便利です。
単純にopenresolvをemergeするだけです。
コード表示 2.3: openresolvのインストール |
# emerge openresolv
|
この点について知りたい場合は、man resolvconf を見てください。
このドキュメントの内容は
Creative Commons -
Attribution / Share Alikeライセンスです。
|