[ 前のページ ] [ 目次 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 次のページ ]


Debian Reference


概要

Debian Referenceシステム導入後のユーザーガイドとして、Debian システムの広範な説明を提供します。本書はシェルコマンド例を通してシステム管理の多くの局面をカバーします。Debian システム、システム導入ヒント、Debian パッケージ管理、Debian のもとでの Linux kernel、システムのチューニング、gateway の組み上げ方、テキストエディター、CVS、プログラミングや GnuPG に関して基本的な入門情報やティップ他が、non-developersを対象に提供されています。


著作権表示

Copyright (c) 2001–2008 by Osamu Aoki <osamu#at#debian.org>.
Copyright (Chapter 2) (c) 1996–2001 by Software in the Public Interest.

This document may be used under the terms of the GNU General Public License version 2 or higher.

Permission is granted to make and distribute verbatim copies of this document provided the copyright notice and this permission notice are preserved on all copies.

Permission is granted to copy and distribute modified versions of this document under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.

Permission is granted to copy and distribute translations of this document into another language, under the above conditions for modified versions, except that this permission notice may be included in translations approved by the Free Software Foundation instead of in the original English.


目次


[ 前のページ ] [ 目次 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 次のページ ]


Debian Reference
第 1 章 - 序文


Debian Reference はインストール後のユーザガイドとして Debian システム の広範囲な概観を供給することを意図しています。 対象とする読者はシェルスクリプトを読むのを厭わない人です。読者が本文書を 読む前に Unix ライクなシステムでの基本的なスキルを既に取得していることを 想定しています。

詳細がマニュアルページ, info ページ, HOWTO 文書に見つかる場合は、全てを 詳しく説明しないことにしました。 完全に説明する代わりに、正確なコマンドシーケンスを文書内に入れたり、 参照として http://www.debian.org/doc/manuals/debian-reference/examples/ にサンプルスクリプトを 置いたりすることにより、より直接な実践的情報を与えようと試みています。 コマンドを実行する前にスクリプトの中身を理解する必要があります。 システムによってコマンドシーケンスを少し変える必要があるかもしれません。

本文書に含まれるほとんどの情報は、参考文献, 第 15.1 節 にリスト化 されている権威あるリファレンスへのリマインダやポインタから 構成されています。

本文書は、元々は "quick reference" として作成されましたが、今や大規模な 文書に成長しました。 それにもかかわらず、Keep it short and simple (KISS) がこのガイドの原則です。

緊急のシステム維持の手助けが欲しい場合は、すぐに Debian で生き残るためのコマンド, 第 6.3 節 に進んでください。


1.1 公式文書

Debian の最新版の公式文書は debian-reference-en にパッケージ化されており、http://www.debian.org/doc/manuals/debian-reference/ からも取得可能 です。

最新の開発版は http://qref.sourceforge.net/Debian/ にあります。 本プロジェクトは http://qref.sourceforge.net/Debian/ でホスト されています。本文書はプレインテキスト, HTML, PDF, SGML, そして PostScript フォーマットで取得可能です。


1.2 本文書の慣習

この "Debian Reference" は短い bash シェルコマンドを通じて 情報を供給します。 次に規約を示します。

     # command は root アカウントでのコマンド実行
     $ command はユーザアカウントでのコマンド実行
     を示します。

これらのシェルスクリプトの例では PS2=" " を使っています。 bash に関するより詳しい情報は Bash – GNU 標準の対話シェル, 第 13.2.1 節 を見てください。

次の略語が使用されます。

他の略語は最初に用いられる前にテキスト内で定義されます。

本文書では LDP 文書に対しては URL しか示していませんが、LDP 文書は Debian でパッケージ化されています。インストールすると LDP 文書は file:///usr/share/doc/HOWTO/ にインストールされます。 参考文献, 第 15.1 節 をご覧下さい。


1.3 サンプルスクリプト

debian-reference-en パッケージに収録されている 本文書に付属する Example scriptsfile:///usr/share/doc/debian-reference-common/html/ で得られます。 隠しファイルは、ファイル名の前の "." を "_" に変換してあります。 代替となるサンプルスクリプトがいくつかある場合は、さらに拡張子が 追加してあります。


1.4 基本設定

システムに最小限のパッケージしかインストールしておらず、 本文書を最大限活用したい場合、有用な文書を含む 他のパッケージをインストールするために次のコマンドを 実行することをお薦めします。

     # aptitude install mc less ssh vim kernel-package \
                       manpages-dev doc-debian doc-linux-text \
                       debian-policy developers-reference maint-guide \
                       apt-howto harden-doc debian-reference \
                       libpam-doc glibc-doc samba-doc exim4-doc-html

1.5 Debian ディストリビューションの基礎

Debian は 3 つの異なるディストリビューションを同時に 維持しています。3 つのディストリビューションには、次のような 特徴があります。

unstable にあるパッケージに release-critical (RC) なバグ が無くなってから 1,2 週間経つと、自動的に testing に昇格します。

Debian ディストリビューションは、Debian ディストリビューションのコードネーム, 第 2.1.7 節 に記述されている ようなコードネームも持っています。 Sarge が 2005 年 6 月にリリースされる前は、Debian の 3 つの ディストリビューションはそれぞれ Woody (stable)、Sarge (testing)、 そして Sid (unstable) でした。 Sarge のリリース後は、それぞれ Sarge、Etch、そして Sid になりました。 Etch がリリースされると、stableunstable ディストリビューションはそれぞれ Etch と Sid になり、一方、新しい testing ディストリビューションが (通常 stable の コピーとして) 作成され、新しいコードネームを与えられます。

Debian に関する重要なアナウンスを受けるには、トラフィックが少ない debian-devel-announce@lists.debian.org メーリングリストを購読 してください。

Debian アーカイブ, 第 2.1 節 参照。

現在使用しているディストリビューションがリリースしたバージョンよりも 新しいバージョンのパッケージを利用したい場合、stable, testing, 又は unstable ディストリビューションへのアップグレード, 第 5 章 に 記述しているようにより新しいディストリビューションに更新することも できますし、選択したパッケージのみを更新することもできます。 そのパッケージが簡単にはアップグレードできない場合には、 stable システムへのパッケージ移植, 第 6.4.10 節 に記述しているようにバックポートしたくなるかも しれません。

testing ディストリビューションを追いかけることには、 セキュリティ修正を含むパッケージのインストールが遅くなるという 副作用があります。そのようなパッケージはまず unstable にアップロードされ、それから遅れて testing に移ってきます。

異なる Debian ディストリビューションを混ぜる、すなわち stabletestingunstable の 一部を使った場合、結果として libc6 のような コアパッケージを testingunstable から 引っ張ってくることになり、これらには バグが無いという保証は 全くありません。警告しておきます。

testingunstable ディストリビューションを使用 していると、深刻なバグに遭遇するリスクが高まります。このリスクは Debian のより安定なディストリビューションとのマルチブートを 実施することや、chroot, 第 8.6.35 節 に記述されているように chrootを用いることにより管理できます。 後者の手段は異なった Debian ディストリビューションを 同時に異なった端末で起動できるようになります。

Debian の基礎知識, 第 2 章 において Debian ディストリビューションの いくつかの基礎を説明した後、最新のソフトウェアを用いて楽しく過ごし、 Debian の testingunstable ディストリビューション を利用するのを手助けするいくつかの基本的な情報を提供します。 我慢できない人はすぐに Debian で生き残るためのコマンド, 第 6.3 節 に進んで下さい。 Happy upgrading!


[ 前のページ ] [ 目次 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 次のページ ]


Debian Reference
第 2 章 - Debian の基礎知識


本章は非開発者のために Debian システムの基礎的な情報を供給します。 信頼できる情報が欲しい場合は、次を参照してください。

参考文献, 第 15.1 節 にリストされています。

あまり詳しくない "how-to" 的な説明を探している場合、 Debian パッケージ管理, 第 6 章 や他の該当する章にすぐ飛んでください。

本章は "Debian FAQ" から取られた文書に基づき、通常の Debian システム管理者が始められるように大規模な再構成を行いました。


2.1 Debian アーカイブ


2.1.1 ディレクトリ構造

Debian 用にパッケージングされているソフトウェアは Debian mirror site のそれぞれのいくつかの ディレクトリツリーの一つから FTP 並びに HTTP 経由で取得できます。

次のディレクトリは 各 Debian ミラーサイトの debian ディレクトリの下で見つかります。

dists/:

このディレクトリには "distributions" が含まれており、これは 現在 Debian release および pre-release で得られるパッケージへの 標準的なアクセス手段として使用されます。いくつかの古いパッケージや Contents-*.gz 、そして Packages.gz も まだここにあります。

pool/:

ここは Debian release および pre-release の全パッケージ が物理的に存在する場所です。

tools/:

ブートディスク作成、ハードディスクのパーティショニング、 ファイル圧縮/解凍、そして Linux のブート用の DOS ユーティリティが ここにあります。

doc/:

FAQ, バグ報告システム指示書などの基本的な Debian に関する 文書がここにあります。

indices/:

Maintainers ファイルや override ファイルがここにあります。

project/:

主に開発者のみ必要なものです。例えば、

project/experimental/:

本ディレクトリにはまだ開発中であり、まだ α テスト段階の パッケージやツールが含まれます。ユーザはここにあるパッケージを 使用するべきではありません。なぜなら、最も経験を積んだ人でさえも 危険で害を及ぼす可能性があるからです。

project/orphaned/:

古いメンテナにより「みなしご化」され、ディストリビューションから なくなったパッケージです。


2.1.2 Debian ディストリビューション

通常 dists ディレクトリには 3種類の Debian ディストリビューションが存在します。これらは stable. testing そして unstable と呼ばれます。 時々 frozen も存在します。(現在はfrozentesting の開発ステージのひとつです。)各ディストリビューションは dists ディレクトリにある、コードネームが付いた 実際のディレクトリのシンボリックリンクとして定義されています。


2.1.3 stable ディストリビューション

stable ディストリビューション, Debian Etch (4.0) 用のパッケージ エントリは stable (etch/ への シンボリックリンク) ディレクトリに記録されています。

現在は、上に挙げた場所に加えて、pool ディレクトリに新しい 物理的なパッケージがあります。 (pool ディレクトリ, 第 2.1.10 節 参照)

stable ディストリビューションの最新バグステータスは Stable Problems web ページに 報告されています。


2.1.4 testing ディストリビューション

testing ディストリビューション、Debian Lenny のパッケージ エントリは unstable でしばらくテストを受けた後に testing (lenny/ への シンボリックリンク) ディレクトリに記録されます。 上に挙げた場所に加え、pool ディレクトリに新しい 物理的なパッケージがあります。 (pool ディレクトリ, 第 2.1.10 節 参照) testing/stable/ と同じ機能を提供する maincontrib そして non-free サブディレクトリもあります。

これらのパッケージはビルドされる全てのアーキテクチャで同期を取られ、 インストール可能でなくてはなりません。また、unstable にあるバージョンよりも release-critical bug が少なくてはなりません。 このように、testing は常に release candidate 間近であることを 希望しています。testing のメカニズムの詳細については http://www.debian.org/devel/testing にあります。

testing ディストリビューションの最新バグステータスはこれらのサイト で報告されています。


2.1.5 unstable ディストリビューション

unstable ディストリビューションは、常に "Sid" というコードネームであり、パッケージエントリは Debian archive にアップロードされた後に unstable (sid/ へのシンボリックリンク) ディレクトリに 記録され、testing/ に移動されるまでここにあります。 上に挙げた場所に加え、pool ディレクトリに新しい 物理的なパッケージがあります。 (pool ディレクトリ, 第 2.1.10 節 参照) testing/stable/ と同じ機能を提供する main, contrib, そして non-free サブディレクトリもあります。

unstable ディストリビューションには最新の開発版システムの スナップショットが含まれます。ユーザがパッケージを使ってテストするのは 歓迎されますが、これらのパッケージが準備段階にあることは警告されます。 unstable ディストリビューションを使う利点としては、 常に最新の Debian ソフトウェアプロジェクトを使えます。 — たとえシステムを壊すようなことがあったとしても、 壊れたシステムをそのままキープできます。

unstable ディストリビューションの最新バグステータスは Unstable Problemsweb ページで 報告されています。


2.1.6 frozen ディストリビューション

testing ディストリビューションが充分成熟すると、frozen されます。 そして、新しいコードはもはや受け付けず、必要ならばバグフィックスのみ 受け付けられます。さらに、新しい testing ツリーが dists ディレクトリに作成され、新しいコードネームを割り当てられます。 frozen ディストリビューションは数ヵ月テストされ、"テストサイクル" と呼ばれる deep freeze に入ります。

パッケージのリリースを遅らせたり、リリース全体を止めてしまう frozen ディストリビューションのバグを記録し続けています。 バグ総数が最大許容数を下回ったら、frozen ディストリビューション は stable になり、リリースされます。そして以前の stable ディストリビューションは obsolete になります。(そして archive に移動します)


2.1.7 Debian ディストリビューションのコードネーム

etch/lenny/ などの、dists ディレクトリにある物理的に存在するディレクトリ名は、 単なる "コードネーム" です。Debian ディストリビューションが開発段階に あるとき、バージョン番号を持ちませんが、その代わりコードネームを持ちます。 これらのコードネームの目的は、Debian ディストリビューションのミラーリングを より簡単に行うためです。(もし真のディレクトリ名unstableが 突然stable に変わると、不必要に多くの ダウンロードを再び行わなくてはならなくなります)

現在、stableetch/ の、 testinglenny/ のシンボリック リンクです。これは Etch が現在の stable ディストリビューションであり、Lenny が現在の testing ディストリビューションであることを意味しています。

Sid は常に unstable ディストリビューションですので、unstable/sid/ の永続的なシンボリックリンクです。


2.1.8 過去に使用されたコードネーム

過去に使われたコードネームは次の通りです。 release 1.1 では "Buzz", release 1.2 では "Rex", release 1.3.x では "Bo", release 2.0 では "Hamm", release 2.1 では "Slink", release 2.2 では "Potato", release 3.0 では "Woody", release 3.1 では "Sarge"。


2.1.9 コードネームの由来

いままではコードネームは Pixar 作の映画 トイストーリー の キャラクター名から取られていました。


2.1.10 pool ディレクトリ

歴史的に、パッケージはパッケージを含むディストリビューションに対応した dists サブディレクトリに保持されました。これは大きな変更が 発生した場合、ミラーするのに大きなバンド幅を消費するなどのさまざまな 問題を引き起こしました。

パッケージは現在大きな "pool" に保存され、source パッケージの名前に 従って構造化されます。この "pool" を管理可能にするため、pool は セクション (main, contrib, そして non-free) および source パッケージの先頭の文字により分割されます。これらのディレクトリ には、各アーキテクチャ用のバイナリパッケージ、そして バイナリパッケージの生成元である source パッケージなどが含まれます。

apt-cache showrc mypackagename のようなコマンドを 実行し、"Directory:" 行を見ることにより、パッケージの場所を見つけられます。 例えば、apache パッケージは pool/main/a/apache/ にあります。非常に多くの lib* パッケージが存在するため、これらのパッケージは特別扱いされています。 例えば、libpaper パッケージは pool/main/libp/libpaper/ に保存されています。

dists ディレクトリは依然 apt のような プログラムにより使用される索引ファイルのために使われています。

新しい apt や多分古い dpkg-ftp はシームレスな処理を行うので、通常は これらのことを心配する必要はありません。詳細を知りたい場合は、 RFC: implementation of package pools をご覧ください。


2.1.11 Sid に関するヒストリカルノート

昔 Sid は存在していませんでした。Debian archive サイトは大きな欠陥を 1つ持っていました。アーキテクチャが最新の unstable に作られると、ディストリビューションが新しい stable になった時に それがリリースされるという前提がありました。このケースにあてはまらない 多くのアーキテクチャにとって、リリース時にこれらのディレクトリが移動 しなければならないという結果となりました。この移動が膨大なバンド幅を 消費するため、これは実際的ではありません。

アーカイブ管理者はこの問題に数年間取り掛かり、sid と 呼ばれる特別なディレクトリに未リリースのアーキテクチャのためのバイナリを置く ことにより問題を解決してきました。未リリースのアーキテクチャが最初にリリースされる 場合、最新の stable/ に対し sid/ がリンク されました。アーキテクチャが最初にリリースされると 現在の stable/ から sid/にリンクを作り、それ以降は 通常どおりunstable/のツリーの中につくられていきました。 この配置はユーザーの混乱を招きやすいです。

Woody ディストリビューションの開発中にパッケージプールを (pool ディレクトリ, 第 2.1.10 節 参照) 発明したことにより、バイナリパッケージは ディストリビューションに依らずにプール内の標準的な場所に保存され始めました。 それゆえ、ディストリビューションのリリースを行っても、もはやミラー時に 大きなバンド幅を消費しません。(しかし、開発過程を通し、緩やかなバンド幅 消費が発生します。)


2.1.12 incoming/ にパッケージをアップロードする

パッケージのアップロードはそれらが本当に Debian 開発者からのものかを 検査した後に http://incoming.debian.org/ にまず置かれます。 (そしてそれがノンメンテナアップロード (NMU) の場合は、DELAYED サブディレクトリに置かれます。) 1日に 1度、それらは incoming/ から unstable/ に移されます。

緊急時には、incoming/unstable/ に移る前に パッケージをインストールしたい場合があるかもしれません。


2.1.13 古いパッケージを取得する

最新の Debian ディストリビューションは Debian mirror sitedebian ディレクトリ下に保持されますが、Slink などの古い Debian ディストリビューションのアーカイブは http://archive.debian.org/ や Debian の各ミラーサイトの debian-archive ディレクトリに保存されています。

testingunstable の昔のパッケージは http://snapshot.debian.net/ にあります。


2.1.14 アーキテクチャセクション

主要なディレクトリツリーそれぞれ (dists/stable/main, dists/stable/contrib, dists/stable/non-free, dists/unstable/main など) の中に、バイナリパッケージエントリが パッケージがコンパイルされたアーキテクチャを示す名前を持つサブディレクトリ 内に存在します。

testingunstable 用の実際のバイナリパッケージは もはやこれらのディレクトリに無く、pool ディレクトリに あることに注意してください。しかし、索引ファイル (PackagesPackages.gz) は下位互換性のために保持されています。

実際にサポートされているバイナリパッケージについては、 各ディストリビューションのリリースノートをご覧ください。 これらは stable および testing のためのリリースノート サイトにあります。


2.1.15 ソースコード

ソースコードは Debian システムにおける全てに対して含まれます。さらに、 システムのほとんどのプログラムのライセンス事項は、ソースコードが プログラムと共に配布されるか、プログラムに添付するソースコードを 提供することを 要求します。

通常ソースコードは source ディレクトリで配布され、 アーキテクチャ特有のバイナリディレクトリ全てと並列になっているか、 より最近では pool ディレクトリにあります。 (pool ディレクトリ, 第 2.1.10 節 参照) Debian アーカイブの構造を熟知せずにソースコードを取得するには、 apt-get source mypackagename のようなコマンドを 試してみてください。

いくつかのパッケージ、とりわけ pine は そのライセンスの制限により、ソースパッケージでしか得られません。 (最近、pine-tracker パッケージが Pine のインストールを 容易にするために導入されました。stable システムへのパッケージ移植, 第 6.4.10 節パッケージング, 第 13.10 節 に記述された手順により、パッケージを手動で構築する方法を習得できます。

公式には Debian システムの一部では無い contribnon-free ディレクトリにあるパッケージのソースコードは 入手できるかもしれませんし、できないかもしれません。


2.2 Debian パッケージ管理システム


2.2.1 Debian パッケージの概観

一般にパッケージには関連するコマンドや機能を実装するのに必要な ファイルすべてが含まれています。Debian パッケージには 2つのタイプがあります。

このパッケージシステムでは、ソフトウェアをインストールするとき、 パッケージ保守担当者により宣言された "依存情報" を使います。 この依存情報はそれぞれのパッケージに関連する 制御 (control) ファイルに記載されています。例えば、GNU C コンパイラ (gcc) を含むパッケージは、リンカやアセンブラを含む binutils パッケージに "依存"しています。もしユーザがあらかじめ binutils をインストールしていないのに gcc をインストール>しようとしたなら、Debian のパッケージシステムは binutils も必要であるというエラーメッセージを出力し、 ユーザがまず binutils をインストールするのに同意するまで gcc をインストールしません (とは言うものの、頑固なユーザは この機能を上書きできます。dpkg(8) 参照) さらに詳しい情報は、パッケージの依存性, 第 2.2.8 節 下をご覧ください。

Debian のパッケージングツールは以下の用途に使えます。


2.2.2 Debian パッケージのフォーマット

Debian の "パッケージ" つまり Debian アーカイブファイルには、 実行プログラム一式や関連するプログラムのセットに関係する実行ファイルや、 ライブラリ、ドキュメントが含まれています。通常、Debian アーカイブファイルは ファイル名の最後に .deb が付いています。 [1]

Debian バイナリパッケージフォーマットの内部仕様は deb(5) マニュアルページに解説されています。 このフォーマットは (Debian のメジャーリリースの間で) 変更されることが あるので、.deb ファイルを操作する時は必ず dpkg-deb(1) を使って下さい。

少なくても Sarge ディストリビューションを通じ、全ての Debian アーカイブ ファイルは、dpkg コマンドが使えない場合であっても、 標準的な Unix コマンドである artar により操作できます。


2.2.3 Debian パッケージ名の命名規則

Debian パッケージのファイル名は次のような規則に従います。

     foo_バージョン番号-リビジョン番号__アーキテクチャ.deb

ここで、通常 foo はパッケージ名であり、var は 上流のバージョン番号、rev は Debian でのリビジョン番号、 そして arch はターゲットのアーキテクチャです。 ファイルはもちろん簡単に改名できます。 次のコマンドを実行することにより、filename という名前の ファイルに含まれているパッケージを調べることができます。

     dpkg --info filename

Debian のリビジョン番号は Debian 開発者又はパッケージを構築した人 により指定されます。通常リビジョン番号の変更はパッケージングの観点から 変更が加えられたことを意味しています。


2.2.4 ローカル設定の保存

ローカルの管理者により変更可能とされているファイルは /etc/ に保持されています。 Debian ポリシーはローカルの設定可能なファイルへの全ての変更が パッケージのアップグレードを通じて保持されるべきであることを指示しています。

ローカルの設定可能なファイルの標準のバージョンがパッケージ自身に 含まれている場合、そのファイルは "conffile" としてリストされます。 パッケージは管理者の許可無しで最後にインストールされたので、 パッケージ管理システムは管理者により変更された conffile を更新しません。 一方、conffile が管理者により変更されていないと、パッケージの他のファイル と一緒に conffile もアップグレードされます。 これはほとんど常に好ましく、conffile への変更を最小限にすることは好都合です。

パッケージに所属する conffile をリストするには、次のコマンドを実行します。

     dpkg --status package

このリストの "Conffiles:" 行に conffile が表示されます。

conffile に関するより詳しい情報については、Debian ポリシーマニュアルの "Configuration files" という章を読んでください。(参考文献, 第 15.1 節 参照)


2.2.5 Debian メンテナンススクリプト

Debian メンテナンススクリプトはパッケージがインストールされる前か後で 自動的に実行される実行可能なスクリプトです。これらのファイルは control という名前のファイルと一緒に全て Debian アーカイブファイルの "制御 (control)" セクションの一部となっています。

個々のファイルは以下の通りです。

preinst

このスクリプトは、パッケージが Debian アーカイブ (.deb/) ファイルからアンパックされる前に実行されます。パッケージがインストールか アップグレードし終わる ("postinst" スクリプトが正常に実行された後) まで、多くの"preinst" スクリプトの中で、更新されるパッケージのために サービスが停止されるようになっています。

postinst

このスクリプトの典型的な仕事は、Debian アーカイブファイル (.deb/) からアンパックされたら、それに必要な設定をすべて完了させる ことです。 "postinst" スクリプトのよくある動作として、ユーザに入力を求め、 既定値を受け入れるなら後戻りしてこのパッケージを環境に沿うように 再設定することを忘れないように警告を表示します。 新しいパッケージがインストールされるかアップグレードされると、 多くの "postinst" スクリプトはサービスを開始または再開するのに 必要なコマンドをすべて実行します。

prerm

このスクリプトは、典型的にはパッケージに関連したあらゆる デーモンを停止します。これはパッケージに関連したファイルを 削除する前に実行されます。

postrm

このスクリプトは、典型的にはパッケージに関連したリンクや 他のファイルを修整したりパッケージが作成したファイルを削除したりします。 (仮想パッケージ, 第 2.2.7 節 も参照。)

現在、制御ファイルは全て /var/lib/dpkg/info/ に置かれています。パッケージ foo に関係するファイルは "foo" で始まる 名前を持ち、"preinst" や "postinst" などの適当なファイル拡張子を持ちます。 このディレクトリにある foo.list というファイルは、 パッケージ foo によってインストールされたファイルがすべて リストされています (これらのファイルの存在場所は dpkg が 内部に持っていることに注意して下さい。存在場所を頼りにしないほうが いいでしょう)。


2.2.6 パッケージ優先度

それぞれの Debian パッケージには、パッケージ管理システムの助けとして、 ディストリビューション保守担当者が 優先度 を割りあてています。 優先度には以下のものがあります。

パッケージの説明にある "Priority: required", "Section: base" と "Essential: yes" の違いについて注意してください。"Section: base" は、 新しいシステムでは他の全てをインストールする前に、このパッケージが インストールされることを意味しています。"Section: base" なパッケージの ほとんどは "Priority: required" または、少なくても "Priority: important" であり、それらの多くは "Essential: yes" にタグづけられています。 "Essential: yes" は、このパッケージをシステムから削除するには、 dpkg のようなパッケージ管理システムに特別な強制オプションを 指示する必要があることを意味しています。例えば、 libc6mawkmakedev は "Priority: required" かつ "Section: base" ですが、"Essential: yes" ではありません。


2.2.7 仮想パッケージ

仮想パッケージとは、すべて同じ基本機能を提供するパッケージの集まりの どれか一つに供される一般的な名前のことです。 例えば、tintrn プログラムはどちらも ニュースリーダであり、それゆえ、動作するか利用するためにニュースリーダを 要求するプログラムの依存性を満たします。したがって、両プログラムは news-reader と呼ばれる "仮想パッケージ" を供給します。

同様に、eximexim4sendmailpostfix のような多くのパッケージは メール配送エージェント (mail transport agent) の機能を備えているために 仮想パッケージ mail-transport-agent を 提供すると言われます。これらのうちどれかがインストールされていれば、 mail transport agent がインストールされていることに依存する プログラムはどれでもこの仮想パッケージが存在しているために 条件を満足しています。

Debian はこのようなしくみを提供するので、同じ仮想パッケージを持つ パッケージが 1つ以上システムにインストールされると、システム管理者は 優先パッケージを設定できます。関連するコマンドは update-alternatives で、Alternative コマンド, 第 6.5.3 節 で さらに詳しく述べられています。


2.2.8 パッケージの依存性

Debian パッケージングシステムは、あるパッケージが機能したり、うまく 働くようにインストールされるべき他のパッケージを要求するという事実を 表現するために使われる依存性に関する宣言を操作します。

これらの用語の使用法についてのより詳しい情報は Debian パッケージング マニュアルDebian ポリシーマニュアル にあります。

Depends と指定されたパッケージ全てを単に取得しますが、 RecommendsSuggests と指定された パッケージを全て無視する apt-get に比べ、aptitudedselect は、RecommendsSuggests により指定されるより洗練されたパッケージ制御機能を有します。これらのプログラムは、共に現代的な形で APT をバックエンドとして使用します。


2.2.9 "pre-depends" の意味

dpkg は、常に他のパッケージが依存しているパッケージを 先に設定します。しかしながら、dpkg は通常ファイルを任意の順番で、依存性と関係なく解凍します。 (解凍とは、アーカイブファイルからのファイルの展開とそれらのファイルを 正しい場所に置くことから構成されます。) しかしながら、もしパッケージが他のパッケージに Pre-Depends している場合、Pre-Depends しているパッケージが解凍されていても、 その前に Pre-Depends されているパッケージの解凍と設定が行われます。 [2] この依存性の使用は最小限に保たれています。


2.2.10 パッケージステータス

パッケージステータスには "unknown", "install", "remove", "purge", "hold" があります。 これらの "want" フラグは利用者がそのパッケージをどう扱いたいかを示しています。 利用者は dselect の "Select" セクションでのアクション や dpkg の直接起動によってこれを示すことができます。

それぞれの意味は以下の通りです。


2.2.11 更新からパッケージを hold する

パッケージを hold するには二つの方法があります。dpkg を使う方法と、Woody から始まった APT を使う方法です。

dpkg では、パッケージ選択の一覧を

     dpkg --get-selections \* > selections.txt

で書き出すだけです。それから書き出されたファイル selections.txt を編集して hold したいパッケージの 行を変更します。例えば、

     libc6                       install

     libc6                       hold

にします。ファイルを保存して、

     dpkg --set-selections < selections.txt

でdpkg データベースに再ロードしてください。又、hold したいパッケージ名 を知っている場合は、単に

     echo libc6 hold | dpkg --set-selections

を実行するだけです。この手順は各パッケージファイルのインストール処理で パッケージを hold します。

同様の効果が dselect を通しても得られます。[S]elect 画面に 入って hold したいパッケージの現在の状態を確認し、「=」キー (もしくは「H」キー) を押下するだけです。変更は [S]elect 画面を終了するとすぐに反映します

Woody ディストリビューションにおける APT システムは Pin-Priority を用いてアーカイブ取得処理中にパッケージを hold する新しいもう一つの機構 を持ちます。 http://www.debian.org/doc/manuals/apt-howto/ 又は apt-howto パッケージのに、マニュアルページ apt_preferences(5) をご覧ください。


2.2.12 ソースパッケージ

ソースパッケージは source と呼ばれるディレクトリで 配布されています。手動でダウンロードできますし、

     apt-get source foo

を使ってダウンロードもできます。 (このための APT の設定法については apt-get(8) マニュアルページを 参照してください。) apt-get source foo を使って取得することもできます (このための APT の設定法については apt-get(8) を参照願います。)


2.2.13 ソースパッケージからバイナリパッケージを作る

パッケージ foo をソースからコンパイルするには、 foo_*.dsc, foo_*.tar.gz および foo_*.diff.gz の全てが必要となります (注意:Debian 固有のパッケージに は .diff.gz はありません)。

これらを入手し、pkg-dev パッケージをインストールしている場合、

     $ dpkg-source -x foo_version-revision.dsc

というコマンドを実行すれば foo-version というディレクトリ にパッケージが取り出されます。

バイナリパッケージをコンパイルしたいならば、

     $ cd foo-version
     $ su -c "apt-get update ; apt-get install fakeroot"
     $ dpkg-buildpackage -rfakeroot -us -uc

を実行し、

     # su -c "dpkg -i ../foo_version-revision_arch.deb"

で新たに構築したパッケージをインストールします。 stable システムへのパッケージ移植, 第 6.4.10 節 をご覧ください。


2.2.14 新しい Debian パッケージを作る

新しいパッケージを作ることに関する詳細な情報は、 maint-guide パッケージで得られる Debian メンテナ入門 又は http://www.debian.org/doc/manuals/maint-guide/ をご覧ください。


2.3 Debian システムのアップグレード

Debian の目標の一つは首尾一貫したアップグレード方針と安全な アップグレード手順を提供することです。パッケージングシステムは 管理者に重要な変更について警告し、時々は管理者に決定を促します。 リリースノートも読むべきです。これは全ての Debian CD と一緒に 出荷されており、WWW でも http://www.debian.org/releases/stable/releasenoteshttp://www.debian.org/releases/testing/releasenotes で利用可能です。

アップグレードを行う実際的なガイドは Debian パッケージ管理, 第 6 章 で供給されます。 本章では単に概要を供給します。まずはパッケージングツールから始めます。


2.3.1 dpkg

これはパッケージファイルの操作のための主要なプログラムです。 完全な説明は dpkg(8) を読んでください。

dpkg にはいくつかの原始的な補助プログラムが付随します。

dpkg-ftpdpkg-mountable は APT システムに 取って代わられました。


2.3.2 APT

APT (the Advanced Packaging Tool) は Debian パッケージングシステムの 先進的なインターフェースであり、"apt-" で始まる名前を持ついくつかのプログラム から構成されています。 apt-get, apt-cache, と apt-cdrom はパッケージ操作用のコマンドラインツールです。これらは、 dselectaptitude のような他のツールへのユーザ "バックエンド" としても 働きます。 現在、aptitudeは、システム維持のための推奨ツールです。

より詳しい情報は、apt パッケージと aptitude パッケージをインストールして、 aptitude(8), apt-get(8), apt-cache(8), apt-cdrom(8), apt.conf(5), sources.list(5), apt_preferences(5) を読んでください。

もう一つの情報源としては、 APT HOWTO があります。 file:///usr/share/doc/Debian/apt-howto/apt-howto によりインストールできます。

apt-get upgradeapt-get dist-upgrade は "Depends:" にリストされたパッケージのみを引っ張ってきますが、 "Recommends:" や "Suggests:" にリストされたパッケージは無視します。 これを避けるには、dselect を御使用ください。


2.3.3 dselect

このプログラムは Debian パッケージ管理システムへのメニュドリブンな ユーザインターフェースです。最初のインストール時や大規模なアップグレード時 に特に役立ちます。dselect, 第 6.2.3 節 をご覧ください。

より詳しい情報は、install-doc パッケージをインストールし、 /usr/share/doc/install-doc/dselect-beginner.en.htmldselect Documentation for Beginners を読んでください。


2.3.4 起動中のシステムをアップグレードする

Debian システムにおける kernel (ファイルシステム) はファイルを使用中 でさえも、そのファイルの置き換えをサポートしてます。 現在のランレベルで起動されるようにパッケージが設定されている場合、 パッケージの更新時にパッケージにより供給されるサービスが再起動 されます。 Debian システムは起動中のシステムをアップグレードするのに シングルユーザモードを必要としません。


2.3.5 .deb アーカイブファイルのダウンロードとキャッシュ

手動でパッケージファイルをディスクにダウンロードした場合、 (これは必ずしも必要ではありません。上に記述した dpkg-ftp または APT の説明をご覧ください) パッケージをインストールした後、 システムから .deb ファイルを削除できます。

APT を使っている場合、これらのファイルは /var/cache/apt/archives ディレクトリにキャッシュされます。 これらをインストール後に削除 (apt-get clean) できますし、 その後のインストール中のダウンロード時間を節約するため、 他のマシーンの /var/cache/apt/archives ディレクトリにコピー してもかまいません。


2.3.6 アップグレードの記録を取る

dpkg は展開、設定、削除またはパージされたパッケージの記録を取ります が、 (現在) パッケージにそのような操作が行われている間に起こったターミナル上の コマンドログを取っていません。

コマンドログを取る最もシンプルな方法は、dpkg, dselect, apt-get などのセッションを script(1)プログラム内で起動することです。


2.4 Debian ブートプロセス


2.4.1 init プログラム

他の Unix ライク OS と同様に、Debian は init プログラムを 実行することによりブートを始めます。init 用の設定ファイル (/etc/inittab) は、実行されるべき最初のスクリプトが /etc/init.d/rcS であることを指定しています。

次に起きることは sysv-rc 又は file-rc のどちらかがインストールされているかどうかに依存しています。 次に述べることは sysv-rc がインストールされていることを 仮定しています。(file-rc には固有の /etc/init.d/rcS スクリプトが含まれており、ランレベル毎に 起動されるサービスの種類を制御するために rc ディレクトリにある シンボリックリンクの代わりにこのスクリプトが用いられます。)

sysv-rc パッケージにある /etc/init.d/rcS ファイルはファイルシステムのチェックやマウント、モジュールの読み込み、 ネットワークサービスの開始、時計の設定などの初期化作業を行うために /etc/rcS.d/ にあるスクリプト全てを起動します。 そして、互換性のために、/etc/rc.boot/ 下にあるファイル (ファイル名に `.' が付くファイルを除く) も実行します。 後者のディレクトリ内のスクリプトは、通常システム管理者が使用するために 予約されており、パッケージがこのディレクトリにスクリプトを置くのは 時代遅れです。詳細は Debian ポリシーマニュアルの システムの初期化, 第 9.1 節System run levels and init.d scripts をご覧ください。


2.4.2 ランレベル

ブートプロセス完了後、init は (/etc/inittabid 用のエントリにより与えられる) 標準のランレベルで 起動されるように設定された全てのサービスを起動します。 標準のランレベルは /etc/inittab 中の id エントリ により与えられます。 Debian は id=2 となっています。

Debian は次のランレベルを使用しています。

ランレベル 7, 8, 9 も使用可能ですが、パッケージがインストールされる時に これらの rc ディレクトリにはあまり起動スクリプトがリンクされません。

ランレベルを切替えるには telinit コマンドを用います。

あるランレベルに入ると、/etc/rcrunlevel.d/ にある全てのスクリプトが実行されます。 スクリプトの最初の 1文字はスクリプトの起動方法 を決定します。 K で始まる名前のスクリプトは、引数 stop を取って 起動されます。 S で始まる名前のスクリプトは、引数 start を取って 起動されます。 これらのスクリプトは名前のアルファベット順で起動されます。それゆえ、 "stop" スクリプトは "start" スクリプトより前に起動され、 KS に続く 2桁の数字はスクリプトの起動順序 を決定します。

実は、/etc/rcrunlevel.d/ ディレクトリにある スクリプトは、/etc/init.d/ にあるスクリプトの 単なるシンボリックリンクです。 これらのスクリプトは引数として "restart" や "force-reload" という 引数も受け取ります。システムのブート後にサービスを再起動 するためや、設定ファイルを再読み込みさせるためにこれらの引数を使えます。

例えば、

     # /etc/init.d/exim4 reload

のように使います。


2.4.3 ランレベルのカスタマイズ

ランレベルをカスタマイズするのは一歩進んだシステム管理者の仕事です。 ほとんどのサービスの場合、次に示すアドバイスが適用できます。

ランレベル R でサービス service を有効にするには、 ターゲットを ../init.d/service として シンボリックリンク /etc/rcR.d/Sxyservice を作成します。 シーケンス番号 xy はパッケージがインストールされた時の サービスに割り当てられたシーケンス番号と一致させてください。

サービスを無効にするには、名前が S で始まるのではなく K で始まるようにシンボリックリンクをリネームし、 シーケンス番号を 100-xy にします。

これらの目的には sysv-rc-confksysv のようなランレベルエディタを使うのが便利です。

特定のランレベルディレクトリにあるサービスのシンボリックリンクを リネームするのではなく削除することも可能です。 これはサービスを無効にしますが、sysv-rc の 初期化システムに関する限りに "floating" な状態に保ちます。 ランレベルを変更すると、サービスは起動されませんし、 停止もされませんが、起動しているかそうでないかにかかわらずそのままに 保たれます。 しかしながら、そのような浮いた状態にされたサービスは、 サービスを提供するパッケージがアップグレードされた場合、 アップグレード前に起動されているかにかかわらず起動されてしまうことに 注意してください。 これは現在の Debian システムの欠点として良く知られています。 又、ランレベル 0 と 6 では K で始まるサービスのシンボリックリンク を保持すべきであることに注意してください。 このサービスに対するシンボリックリンクを全て削除してしまうと、 アップグレードの際、出荷時の標準の状態にサービスを提供するパッケージが シンボリックリンクを回復させてしまいます。

/etc/rcS.d/ にあるシンボリックリンクにあらゆる変更を加える ことは推奨できません


2.5 多様性のサポート

Debian はシステムを壊さずにシステム管理者の希望を満たすためのいくつかの手段 を提供します。

/usr/local/ 以下のファイルはシステム管理者のものであり、 Debian は一切触りません。 /etc 以下のほとんどの ファイルは conffiles であり、 Debian はシステム管理者が明示的に要求しない限りアップグレード時に 上書きしません。


2.6 国際化

Debian システムは国際化されており、コンソール上ならびに X 上で 多種の言語の文字を表示し、入力するためのサポートを供給します。 たくさんのドキュメント、マニュアルページ、そしてシステムメッセージが 翻訳されており、翻訳されている言語は増加し続けています。インストール中、 Debian はユーザにインストール言語 (そして時々はローカル言語変数 )の選択を 促します。

あなたが必要な言語の機能全てをインストールしたシステムがサポート していない場合、又はあなたの言語をサポートするために言語の変更や、 異なるキーボードのインストールが必要な場合、ローカライゼーション (l10n), 第 9.7 節 をご覧ください。


2.7 Debian と kernel

Debian での Linux kernel, 第 7 章 をご覧ください。


2.7.1 非 Debian なソースから kernel をコンパイルする

header に関する Debian ポリシーを理解する必要があります。

Debian C ライブラリは kernel header の最新の stable リリースを用いて構築されています。

例えば、Debian-1.2 リリースは version 5.4.13 のヘッダを用いていました。 この慣習は全ての Linux FTP アーカイブサイトにおいて配布される Linux kernel ソースパッケージに対照しており、Linux kernel ソースパッケージはより最新 の header を使ってさえいます。kernel source により配布される kernel header は /usr/include/linux/include/ にあります。

libc6-dev により供給されるものより新しい kernel header を用いてプログラムをコンパイルする必要がある場合には、コンパイル時、コマンド ラインに -I/usr/src/linux/include/ を付け加える必要があります。 これは、例えば automounter daemon (amd) のパッケージング をする場合に使われます。新しい kernel が NFS を扱うための内部処理を変更した 場合、amd はそれを知る必要があるため、最新の kernel header を 含める必要性が発生します。


2.7.2 カスタム kernel 構築ツール

カスタム kernel を構築したい (する必要がある) 人は kernel-package パッケージのダウンロードが推奨されます。本パッケージには kernel パッケージ の構築用スクリプトが含まれ、次のようなコマンドを kernel ソースディレクトリの 最上段で実行するだけで Debian kernel-image パッケージを構築する機能を 供給します。

     # make-kpkg kernel_image

ヘルプは次のコマンドを実行すると得られます。

     # make-kpkg --help

また、マニュアルページ make-kpkg(1) 全体と Debian での Linux kernel, 第 7 章 も参照願います。

kernel-source-version (version は kernel バージョンを 表す) パッケージが得られない場合、好みの Linux アーカイブサイトから最新の kernel (又は選んだ kernel) のソースコードを別途ダウンロードする必要があります。 Debian の initrd ブートスクリプトは initrd と呼ばれる 特別な kernel patch を要求します。http://bugs.debian.org/149236 をご覧ください。

kernel-package パッケージの詳細な使用方法は /usr/share/doc/kernel-package/README.gz にあります。


2.7.3 モジュールを扱うための特別な準備

Debian の modconf パッケージはモジュールの設定を カスタマイズするために使用できるシェルスクリプト (/usr/sbin/modconf) を供給します。このスクリプトはメニュベースの インターフェースを表示し、システムのローダブルデバイスドライバに関する詳細に 対してユーザを促します。 その応答は /etc/modules.conf/etc/modules をカスタマイズするのに使用されます (これらにはブート時にロードされる モジュールがリストされています)。

カスタム kernel の構築をサポートするために得られる (新しい) Configure.help ファイルと同様に、modconf パッケージにはモジュールそれぞれに対して適切な引数についての詳細な情報を 供給する (/usr/share/modconf/ にある) ヘルプファイルが付属します。


2.7.4 古い kernel パッケージを削除する

kernel-image-NNN.prerm スクリプトは現在起動している kernel が削除しようとしている kernel と同じかどうかチェックします。それゆえ、 使わない kernel image パッケージを安全に次のコマンドを用いて削除できます。

     # dpkg --purge --force-remove-essential kernel-image-NNN

(もちろん、NNN を削除したい kernel のバージョンとリビジョンに 置き換えます。)


[ 前のページ ] [ 目次 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 次のページ ]


Debian Reference
第 3 章 - Debian システムインストールのヒント


Debian のインストール用の公式文書は http://www.debian.org/releases/stable/http://www.debian.org/releases/stable/installmanual にあります。

開発版は http://www.debian.org/releases/testing/http://www.debian.org/releases/testing/installmanual にあります。(作業中であり、時々なくなります。)

本章は当初 Potato のインストーラの時代に書かれましたが、内容のほとんどは Woody のインストーラ用に更新されており、さらに 2 つのインストーラの内容は非常に 似通っています。Sarge は完全に新たなインストーラを用いるため、Sarge の インストーラのためには、本文書は基準点として使用してください。 また、いくつかのパッケージは名前と優先度が変更されています。 例えば、Sarge の標準の MTA は exim ではなく exim4 であり、coreutils が 複数のパッケージを置き換えるために導入されています。 行動を調整する必要があるかもしれません。


3.1 一般的な Linux システムのインストールヒント

Debian インストーラのコンパクトな CD イメージを探している場合は http://www.debian.org/CD/netinst/ を忘れずにチェックしてください。

Debian の testing 又は unstable ディストリビューション を使うことは、深刻なバグに直面するリスクを増大させます。このリスクは Debian のより安定なディストリビューションとのマルチブートを行ったり、 chroot, 第 8.6.35 節 に記述されているより安定なディストリビューション内で chroot することにより供給される素晴らしい手段を用いることにより 管理できます。後者の方法は Debian の異なるディストリビューションを複数の 端末で同時に起動することを可能とします。


3.1.1 ハードウェア互換性の基礎

Linux はほとんどの PC ハードウェアとの互換性を有しており、ほとんどのシステム にインストールできます。私にとって Linux のインストールは Windows 95/98/Me をインストールするのと同じ位簡単です。ハードウェア互換性リストは常に 増大し続けているようです。

ラップトップ PC を持っている場合は、 そのブランドとモデル名によるインストールヒントを Linux on Laptops で 調査できます。

デスクトップ PC ハードウェアのお薦めは "とにかく保守的" ということです。

低速なマシンを持っている場合、ハードディスクを取り外して他の高速なマシンに 取り付けてインストールするのは良いアイデアです。


3.1.2 PC のハードウェアとチップセットを決定する

インストール中、PC のハードウェアやチップセットを聞かれることがあります。 時々それらの情報は見付かりづらいかもしれません。次にハードウェアやチップセット の情報を見付ける方法を挙げます。

  • PC のケースを開けて中を見る。

  • ビデオカードやネットワークカードの大きなチップ、 シリアルポートの近くにあるチップ、IDE ポートの近くにあるチップに 付いているプロダクト ID を記録する。

  • PCI 又は ISA カードの後ろにプリントされているカードの名前を記録する。


  • 3.1.3 Debian から PC のハードウェアを決定する

    Linux system 上で次のコマンドを実行すると実際のハードウェアとその設定の ヒントが得られます。

         $ pager /proc/pci
         $ pager /proc/interrupts
         $ pager /proc/ioports
         $ pager /proc/bus/usb/devices
    

    これらのコマンドはインストールの進行中に端末から Alt-F2 を押すことにより 実行可能になります。

    最初のイントール後、pciutils, usbutils, や lshw などの追加パッケージをインストールすると、 より広範囲なシステム情報が得られます。

         $ lspci -v |pager
         $ lsusb -v |pager
         # lshw  |pager
    

    典型的な PC は次のように IRQ を使用します。

    古い非 PnP ISA カードでは、BIOS から非 PnPな IRQ として IRQ5, IRQ10 および IRQ11 を設定したいかもしれません。

    USB デバイスに対しては、デバイスクラスが次のようにリストされます。 /proc/bus/usb/devicesCls=nn として 存在する

    デバイスクラスが 255 ではない場合は、Linux はそのデバイスをサポートしています。


    3.1.4 他の OS から PC のハードウェアを決定する

    ハードウェア情報は他の OS からも取得可能です。

    他の商用 Linux ディストリビューションをインストールしてください。これらの ディストリビューションのハードウェア検知機能は現在の Debian の検知機能に比べ 優れています。(この状況は Sarge に debian-installer が導入 されても変わらないでしょう。)

    Windows をイントールします。ハードウェアの設定は "My Computer" を 右クリックしてデバイスマネージャ/プロパティを開くことにより取得できます。 IRQ、 I/O ポートアドレス、そして DMA のような全てのリソースが 記録されています。ある古い ISA カードは DOS 上で設定する必要があります。


    3.1.5 Lilo の俗説

    "Lilo is limited to 1024 cylinders." は間違っている!

    Debian potato 以降で使用されている lilo は lba32 をサポート しています。マザーボードの BIOS が lba32 をサポートしているくらい新しいなら、 lilo は古い 1024 シリンダの制限を越えてロードできます。

    古い lilo.conf を保持している場合、lilo.conf の 先頭の近くのどこかに "lba32" を読み込む 1 行を確実に追加してください。 file:///usr/share/doc/lilo/Manual.txt.gz を見てください。


    3.1.6 GRUB

    GNU Hard プロジェクト由来の新しいブートローダである grub は Debian の Woody system に次のようにインストールできます。

         # apt-get update
         # apt-get install grub-doc
         # mc file:///usr/share/doc/grub-doc/html/
         ... 内容を読む。
         # apt-get install grub
         # pager file:///usr/share/doc/grub/README.Debian.gz
         ... これを読む。
    

    GRUB メニュを編集するには、/boot/grub/menu.lst を編集してください。 lilo とはブートパラメータの設定方法がかなり違うので、 ブート中にブートパラメータを設定する方法について GRUB ブートパラメータの設定, 第 8.1.6 節 を 見てください。


    3.1.7 ブートフロッピーの選択

    Potato では、通常のデスクトップへのインストールには IDEPCI disk set が いいでしょう。 Woody では、 bf2.4 ブートディスクセットが良いです。これらはブートフロッピーを 作成するため、共に boot-floppies 版を使用しています。

    PCMCIA ネットワークカードを持っている場合、標準のブートディスクセットを使用して (大量のフロッピーを必要としますが全てのドライバモジュールが含まれています) PCMCIA setup で NIC の設定を行う必要があります。標準のネットワークセットアップ ダイアログで NIC カードの設定を行おうとしないでください。

    特殊なシステムでは、カスタムレスキューディスクを作成する必要があります。 これは違うマシンでコンパイルした圧縮カーネルイメージにより Debian レスキューディスク上の "linux" と言う名前のカーネルイメージを上書きして 置き換えることにより行えます。詳細はレスキューディスク内の readme.txt にあります。 レスキューフロッピーは MS-DOS ファイルシステムを使用しているので、 読み込みと編集にあらゆるシステムを使用できます。この特徴により、特別な ネットワークカードなどを使用したい人にとって使い易くなっています。

    Sarge では、ブートフロッピーの作成に debian-installer 又は pgi が使われると期待されています。


    3.1.8 インストール

    http://www.debian.org/releases/stable/installmanual 又は http://www.debian.org/releases/testing/installmanual (作業中で時々なくなります) にある公式な指示に従ってください。

    testing ディストリビューションで boot-floppies を用いた システムをインストールしている場合、APT ソースを調整するためにインストール中に Alt-F2 を押して端末を開き、/etc/apt/sources.list エントリを 編集し、"stable" を "testing" に変更する必要があるかもしれません。

    私は lilo/dev/hda3 のような場所にインストールし、 mbr の場合は /dev/hda にインストールします。 このようにするとブート情報を上書きする危険性を最小限に抑えることができます。

    ここにインストール中私が選ぶ選択肢を挙げます。

    dselect に関するより詳しい情報は、dselect, 第 6.2.3 節 をごらんください。


    3.1.9 LAN を使用するためのホストと IP

    LAN 設定例 (C サブネット: 192.168.1.0/24)

         Internet
            |
            +--- 外部 ISP が POP service を供給 (fetchmail 経由の取得)
            | 
           ISP アクセスポイントが DHCP サービス と SMTP relay サービス を供給
            |                     :
           ケーブルモデム (ダイアルアップ)
            |                     :
         LAN ゲートウェイマシン 外部ポート: eth0 (ISP の DHCP により付与)
          古いノートPCを使用 (IBM Thinkpad, 486 DX2 50MHz, 20MB RAM)
          ext3 ファイルシステムを用いた Linux 2.4 カーネルを使用
          "ipmasq" パッケージを使用 (stronger patch, NAT, さらに firewallを使用)
          "dhcp-client" パッケージを使用し、eth0 に対して設定 (DNS 設定を上書きする)
          "dhcp" パッケージを使用し、eth1 に対して設定
          "exim" を smarthost として使用 (mode 2)
          長時間の間隔で "fetchmail" を使用 (fallback)
          LAN からインターネットへの接続のためのキャッシュサーバおよび LAN から
          LAN ドメインへのアクセスのための信頼できるネームサーバとして
          "bind" を使用。
          port 22 および 8080 にて "ssh" を使用 (どこからでも接続するため)
          (APT からの) Debian archive のため、キャッシュサーバとして "squid" 
          を使用。
          LAN ゲートウェイマシン内部ポート: eth1 (IP = 192.168.1.1 固定)                        |
                  +--- LAN スイッチ (100base T) ---+
                  |                              |
         LAN 上のいくつかの固定IP クライアント LAN 上のいくつかの DHCP クライアント
         (IP = 192.168.1.2-127 固定)    (IP = 192.168.1.128-200 動的取得)
    

    ネットワークの設定の詳細は ネットワークの設定, 第 10 章 をごらんください。 LAN ゲートウェイサーバの詳細な設定については ゲートウェイルータを構築する, 第 10.12 節 を ごらんください。


    3.1.10 ユーザアカウント

    複数のマシンを通じて同じ感覚を保つために、最初のいくつかのアカウントはいつも システムを通じて同一にしています。

    いつも最初のユーザアカウントを "admin" (uid=1000) のような名前で作成 しています。全ての root へのメールをそこに転送します。このアカウントは adm group ("なぜ GNU suwheel グループを サポートしていないのか", 第 9.2.2 節 参照) のメンバに与えられ、 root 権限を PAM を通じた su 又は sudo コマンド を通じて与えることが可能です。詳細は ユーザアカウントを追加, 第 4.1.3 節 をごらんください。


    3.1.11 ファイルシステムを作成


    3.1.11.1 ハードディスクのパーティション

    システムクラッシュの際の被害を最小限に抑えるため、異なったディレクトリツリー に対して異なったパーティションを使用する方が好みです。例えば次のように パーティションを分割します。

         /          == (/ + /boot + /bin + /sbin)
                    == 50MB+
         /tmp       == 100MB+
         /var       == 100MB+
         /home      == 100MB+
         /usr       == 700MB+ with X
         /usr/local == 100MB
    

    /usr/ ディレクトリのサイズは X Window アプリケーションや ドキュメントの量に極めて依存しています。コンソールのみを使用する場合、 /usr/ は 300MB にすることができます。一方、多数の Gnome アプリケーションをインストールした場合、2GB–3GB のサイズを割り当てるのは 異常ではありません。 /usr/ が非常に大きくなってしまった時、/usr/share/ を他のパーティションに移すのは最も効率的な対策です。新しい大規模な パッケージ化された Linux 2.4 カーネルでは、/ は 200MB 以上必要となるかもしれません。

    例えば、私の Internet ゲートウェイサーバの現在の状況は次のようになっています。 (df -hコマンドの出力)

         Filesystem            Size  Used Avail Use% Mounted on
         /dev/hda3             300M  106M  179M  38% /
         /dev/hda7             100M   12M   82M  13% /home
         /dev/hda8             596M   53M  513M  10% /var
         /dev/hda6             100M  834k   94M   1% /var/lib/cvs
         /dev/hda9             596M  222M  343M  40% /usr
         /dev/hda10            596M  130M  436M  23% /var/cache/apt/archives
         /dev/hda11            1.5G  204M  1.2G  14% /var/spool/squid
    

    (/var/spool/squid/ に割り当てられている大容量の領域は パッケージのダウンロードの際の proxy キャッシュのためです。)

    次は パーティション構造の考えを示すための fdisk -l の出力です。

         # fdisk -l /dev/hda # comment
         
         /dev/hda1             1        41    309928+   6  FAT16 # DOS
         /dev/hda2            42        84    325080   83  Linux # (not used)
         /dev/hda3   *        85       126    317520   83  Linux # Main
         /dev/hda4           127       629   3802680    5  Extended
         /dev/hda5           127       143    128488+  82  Linux swap
         /dev/hda6           144       157    105808+  83  Linux
         /dev/hda7           158       171    105808+  83  Linux
         /dev/hda8           172       253    619888+  83  Linux
         /dev/hda9           254       335    619888+  83  Linux
         /dev/hda10          336       417    619888+  83  Linux
         /dev/hda11          418       629   1602688+  83  Linux
    

    いくつかの未使用のパーティションが存在しています。これらは 2 個目の Linux ディストリビューションのインストールや大きくなったディレクトリツリーのための 拡張スペースのためのものです。


    3.1.11.2 ファイルシステムのマウント

    上記のファイルシステムを適切にマウントするために、次に示すように /etc/fstab を設定しています。

         
         # /etc/fstab: static filesystem information.
         #
         # filesystem    mount point     type    options                dump pass
         /dev/hda3       /               ext2    defaults,errors=remount-ro 0 1
         /dev/hda5       none            swap    sw                      0 0
         proc            /proc           proc    defaults                0 0
         /dev/fd0        /floppy         auto    defaults,user,noauto    0 0
         /dev/cdrom      /cdrom          iso9660 defaults,ro,user,noauto 0 0
         #
         # パーティションを分割しつづけます
         /dev/hda7       /home           ext2    defaults                0 2
         /dev/hda8       /var            ext2    defaults                0 2
         /dev/hda6       /var/lib/cvs    ext2    defaults                0 2
         # noatime オプション はファイルの読み込みのアクセスを高速化する
         /dev/hda9       /usr            ext2    defaults,noatime        0 2
         /dev/hda10      /var/cache/apt/archives ext2    defaults        0 2
         
         # proxy キャッシュのための非常に大きなパーティション
         /dev/hda11      /var/spool/squid ext2   rw                      0 2
         
         # ブート可能な DOS のバックアップ
         /dev/hda1       /mnt/dos        vfat    rw,noauto               0 0
         # ブート可能な Linux システムのバックアップ (未実施)
         /dev/hda2       /mnt/linux      ext2    rw,noauto               0 0
         #
         # nfs マウント
         mickey:/        /mnt/mickey     nfs     ro,noauto,intr          0 0
         goofy:/         /mnt/goofy      nfs     ro,noauto,intr          0 0
         # minnie:/ /mnt/minnie smbfs ro,soft,intr,credentials={filename} 0 2
    

    NFS の場合、 noauto,intr オプションをデフォルトのhard オプションと組み合わせて使用します。このようにすると、Ctrl-C を用いた dead-connection によるプロセスのハングから回復することが可能です。

    Samba (smbfs) により接続した Windows マシンに対しては、 rw,auto,soft,intrオプションを使用するのは良い考えです。 Samba の設定, 第 3.5 節 をごらんください。

    フロッピードライブに対しては、noauto,rw,sync,user,exec を 通常のオプションの代わりに用いて unmount する前に誤って ディスクをイジェクト してしまった後のファイル破壊を防ぐことができます。


    3.1.11.3 Autofs マウント

    auto mount する際の注意点は次の通り。


    3.1.11.4 NFS マウント

    ファイアーウォール (ゲートウェイ) の後ろに (まぬけにも) 外部の Linux NFS サーバが存在します。私しかユーザが居ないので、 非常に緩やかなセキュリティポリシーを LAN 内では適用しています。 NFS アクセスを可能とするには、NFS サーバ側で /etc/exports に対して次のように追加する必要があります。

         # /etc/exports: the access control list for filesystems which may be
         #               exported to NFS clients.  See exports(5).
         /       (rw,no_root_squash)
    

    これは NFS サーバパッケージおよびクライアントパッケージをインストールして 有効にすることに加え、 NFS サーバを有効にするためにも必要です。

    単純化のため、通常実験又は 2個目の不精な Linux インストールのための 2GB の 単独のパーティションを作成します。これらのインストールのために swap や /tmp の共有を任意で行います。複数パーティションとすると、 これらの手段が使用できなくなるほど複雑になってしまいます。単独の端末システム のみを必要とする場合、500MB もあれば十分です。


    3.1.12 DRAM メモリ量のガイドライン

    次に DRAM 搭載量の大まかなガイドラインを示します。

           4MB:  Linux kernel が動く最小量
          16MB:  適切なコンソールのみのシステムに最低限必要な量
          32MB:  シンプルな X Window system に最低限必要な量
          64MB:  GNOME/KDE を用いた X Window system を動かすのに最低限必要な量
         128MB:  GNOME/KDE を用いた X Window system が快適な量
         256MB(以上): なぜ買えないの? DRAM は安いよ。
    

    mem=4m ブートオプションを用いる (又は lilo で append="mem=4m" とする) とシステムにメモリが 4MB しか無い場合の振舞がどのようなものかを 示します。BIOSが古く、64MB 以上のメモリを搭載しているシステムには 特別な lilo ブートパラメータが必要です。


    3.1.13 スワップ

    スワップに対しては次のようなガイドラインを使用します。

    スワップを必要としない場合でも、メモリリークを起こすプログラムによりクラッシュ する前にシステムが低速化するので、いくらかのスワップ (128 MB) を用意するのが 望ましいです。


    3.2 Bash 設定

    システム全体に渡って自分の好みに合うようにシェルの起動スクリプトを変更します。

         /etc/bash.bashrc        個人独自のコピーで置き換える
         /etc/profile            distribution のコピーを保つ ( \w -> \W)
         /etc/skel/.bashrc       個人独自のコピーで置き換える
         /etc/skel/.profile      個人独自のコピーで置き換える
         /etc/skel/.bash_profile 個人独自のコピーで置き換える
         ~/.bashrc               全てのアカウントについて個人独自のコピーで置き換える
         ~/.profile              全てのアカウントについて個人独自のコピーで置き換える
         ~/.bash_profile         全てのアカウントについて個人独自のコピーで置き換える
    

    詳細は私のサンプルスクリプトをご覧下さい。 私は透過的なシステムが好きなので、umask を 002 又は 022 にセットします。

    PATH は次に挙げる順で設定ファイルによりセットされます。

         /etc/login.defs  - シェルが PATH をセットする前
         /etc/profile     (may /etc/bash.bashrc を呼んでいるかもしれません)
         ~/.bash_profile  (~/.bashrc を呼んでいるかもしれません)
    

    3.3 マウスの設定


    3.3.1 PS/2 マウス

    ATX マザーボードの PS/2 コネクタにつなげるマウスの場合、信号の流れは 次のようになります。

         mouse -> /dev/psaux -> gpm -> /dev/gpmdata = /dev/mouse -> X
    

    ここで、/dev/psauxというシンボリックリンクが作成され、 /dev/gpmdata を指すことにより、いくつかの設定ユーティリティ がマウスを使い易くし、再設定を容易にすることができます。 (例えば、結局 gpm デーモンを使わないことにした場合、 gpm デーモンを削除した後に /dev/mouse という シンボリックリンクは単に /dev/psaux を指すことになります。)

    この信号の流れにより、再接続時に gpm を再起動することにより キーボードやマウスが外され、再び接続することができるようになります。 X は動いたままです!

    gpm の出力と X への入力の間の信号プロトコルは "ms3" (Microsoft 3ボタンシリアルマウスプロトコル) 又は "raw" (同じプロトコルを接続された マウスとして使用する) のどちらでも実装できます。そしてこのプロトコルの選択 が X の設定で使用されるプロトコルの選択を規定します。

    Logistech 3ボタン (伝統的な Unix スタイルのマウス) PS/2 マウスを 例として使用して次にマウスの設定の例を挙げます。

    新しい X Version 4 でサポートされていないビデオカード (いくつかの ATI 64ビットカード) を使っており、古い X Version 3 を使う必要 があるなら、X Version 3 パッケージをインストールして次に示すように /etc/X11/XF86Config-4 の代わりに /etc/X11/XF86Config を設定してください。


    3.3.1.1 The ms3 プロトコルを用いる方法

         /etc/gpm.conf            | /etc/X11/XF86Config-4
         =========================+======================================
         device=/dev/psaux        | Section "InputDevice"
         responsiveness=          |  Identifier "Configured Mouse"
         repeat_type=ms3          |  Driver     "mouse"
         type=autops2             |  Option     "CorePointer"
         append=""                |  Option     "Device"   "/dev/mouse"
         sample_rate=             |  Option     "Protocol" "IntelliMouse"
                                  | EndSection
    

    この手法を用いると、マウス形式の調整は gpm.confの 編集のみ行えばよく、X の設定はそのままでかまいません。 my example scripts をごらんください。


    3.3.1.2 raw プロトコルを用いる方法

         /etc/gpm.conf            | /etc/X11/XF86Config-4
         =========================+======================================
         device=/dev/psaux        | Section "InputDevice"
         responsiveness=          |  Identifier "Configured Mouse"
         repeat_type=raw          |  Driver     "mouse"
         type=autops2             |  Option     "CorePointer"
         append=""                |  Option     "Device"   "/dev/mouse"
         sample_rate=             |  Option     "Protocol" "MouseManPlusPS/2"
                                  | EndSection
    

    本手法を用いると、マウス形式の調整は gpm.conf を編集する のに加えて、Xの設定も調整する必要があります。


    3.3.1.3 異なるマウスを調整する方法

    gpm における autops2 デバイスタイプは 市場に出回っているほとんどの PS/2 マウスを自動検知するはずです。不幸にも これはいつも動くとは限らず、Woody 以前には使えませんでした。そのような 場合には autops2 の代わりとして /etc/gpm.confps2 又は imps2 を使用してください。 gpm が認識できる特別なタイプのマウスを調べるには、 gpm -t help を実行してください。gpm(8) をごらんください。

    2 ボタン PS/2 マウスを使用している場合、X プロトコルが Emulate3Buttons を有効化するように設定してください。中央のボタンを 1 度押すと 2ボタンマウスと 3 ボタンマウスの間のプロトコルの違いが自動検知され、gpm 用に 自動調整されます。

    X プロトコルで raw プロトコルを用いる方法, 第 3.3.1.2 節 を用いる、又は gpm を 用いない場合、次のマウス形式を使用してください。

    詳細は Mouse Support in XFree86 を ごらんください。

    典型的な Microsoft スクロールマウスの場合、次の設定によりもっとうまく動くと 報告されています。

         /etc/gpm.conf            | /etc/X11/XF86Config-4
         =========================+======================================
         device=/dev/psaux        | Section "InputDevice"
         responsiveness=          |  Identifier "Configured Mouse"
         repeat_type=raw          |  Driver     "mouse"
         type=autops2             |  Option     "CorePointer"
         append=""                |  Option     "Device"   "/dev/mouse"
         sample_rate=             |  Option     "Protocol" "IMPS/2"
                                  |  Option     "Buttons" "5"
                                  |  Option  "ZAxisMapping" "4 5"
                                  | EndSection
    

    最近の薄型の東芝ノートPC では、gpmを PCMCIA よりも先に 起動するとシステムのデッドロックを防ぐことができるようです。不気味ですが 本当です。


    3.3.2 USB マウス

    必要な全ての kernel 機能をカーネルコンパイル時の設定やモジュールを 通して有効にしたかどうかを確認してください。

    ここで、小文字の名前はモジュール名です。

    devfs を使用していない場合、 /dev/input/mice デバイスノードを major デバイス番号 13 、 minor デバイス番号 63 を用いて次のように 作成してください。

         # cd /dev
         # mkdir input
         # mknod input/mice c 13 63
    

    典型的なスクロール USB マウスの場合、 次のような 2 種類の設定を組み合わせる必要があります。

         /etc/gpm.conf            | /etc/X11/XF86Config-4
         =========================+======================================
         device=/dev/input/mice   | Section "InputDevice"
         responsiveness=          |  Identifier "Generic Mouse"
         repeat_type=raw          |  Driver     "mouse"
         type=autops2             |  Option     "SendCoreEvents" "true"
         append=""                |  Option     "Device"   "/dev/input/mice"
         sample_rate=             |  Option     "Protocol" "IMPS/2"
                                  |  Option     "Buttons" "5"
                                  |  Option  "ZAxisMapping" "4 5"
                                  | EndSection
    

    詳細は the Linux USB Project をごらんください。


    3.3.3 タッチパッド

    ノート PC にあるタッチパッドは 2 ボタン PS/2 マウスをデフォルトの動作 としてエミュレートしますが、tpconfig パッケージ によりタッチパッドのフル機能を有効化できます。例えば、 /etc/default/tpconfig にて OPTIONS="--tapmode=0" と設定すると、くどい "click by tap" 機能を無効にできます。 コンソール上でタッチパッドと USB マウスを同時に使用するには /etc/gpm.conf を次のように設定してください。

         device=/dev/psaux
         responsiveness=
         repeat_type=ms3
         type=autops2
         append="-M -m /dev/input/mice -t autops2"
         sample_rate=
    

    3.4 NFS 設定

    /etc/exports を調整することにより NFS の設定を行えます。

         # apt-get install nfs-kernel-server
         # echo "/ *.LAN上のホストノドメイン名(rw,no_root_squash,nohide)" \
                 >> /etc/exports
    

    詳細は私のサンプルスクリプトをごらんください


    3.5 Samba の設定

    リファレンスをいくつか示します。

    WfW-type の共有ドライブを作成するので、 Samba を "share" モードに 設定するのはより容易です。しかし、私は "user" モードで設定する方が好きです。

    Samba は debconf 又は vi を通じて設定可能です。

         # dpkg-reconfigure --priority=low samba # Woody にて
         # vi /etc/samba/smb.conf
    

    詳細は私のサンプルスクリプトをごらんください

    smbpasswd への新規ユーザの追加は、 smbpasswdを 次のように用いることにより可能です。

         $ su -c "smbpasswd -a username"
    

    最適な互換性を保つため、暗号化パスワードを確実に使用してください。

    次に示すシステム等価係数 (大きくなるほど、サーバとしての優先度が高い) に従い、os level を設定してください。

         0:      緩い考えの Samba (マスタブラウザには決してならない)
         1:      WfW 3.1, Win95, Win98, Win/Me?
         16:     Win NT WS 3.51
         17:     Win NT WS 4.0
         32:     Win NT SVR 3.51
         33:     Win NT SVR 4.0
         255:    パワフルな Samba
    

    ユーザは共有アクセスを与えるディレクトリを所有するグループに属しており、 ディレクトリパスにはアクセスするための実行権があることを確認してください。


    3.6 プリンタの設定

    プリンタを設定するための伝統的な方法は lpr 又は lpd です。今は新しい CUPS™ システム (Common UNIX Printing System) が 存在します。PDQ はもう一つのアプローチです。詳細は Linux Printing Howto をごらんください。


    3.6.1 lpr又はlpd

    ポストスクリプトプリンタ又はテキストのみのプリンタを接続しているならば、 lpr 又は lpd タイプのスプールのために /etc/printcap を次のように設定してください。

         lp|alias:\
                 :sd=/var/spool/lpd/lp:\
                 :mx#0:\
                 :sh:\
                 :lp=/dev/lp0:
    

    上記の行はそれぞれ次のような意味があります:

    本設定はポストスクリプトプリンタを接続している場合、良い設定です。又、 Samba を通じて Windows マシンに接続したプリンタから印刷する場合の Windows をサポートした (双方向通信がサポートされない) プリンタ にとっても良い設定です。Windows マシン上で対応するプリンタの設定を選択 する必要があります。

    ポストスクリプトプリンタを所有していない場合、gs により フィルタシステムの設定を行う必要があります。 /etc/printcap の設定のために供給される数多くの自動設定 ツールが存在します。 これらを自由に組み合わせることが可能です。

    printtool のような GUI 設定ツールを起動するために root 権限 を取得するには X で root 権限を取得する, 第 9.4.12 節 を見てください。printtool により作成されたプリンタスプールは gs を使用し、ポストスクリプト プリンタのように振る舞います。それゆえ、これらのプリンタにアクセスした時、 ポストスクリプトプリンタのドライバを使用します。Windows 側では、この プリンタを用いるには "Apple LaserWriter" が標準的なドライバです。


    3.6.2 CUPS™

    The Common UNIX Printing System (又は CUPS™) は aptitude を使い "Tasks" -> "Servers" -> "Print Server" の下の全てのパッケージをインストールすることで導入できます。 (Sarge) 最善の結果のためには aptitude を "F10" -> "Options" -> "Dependency handling" -> "[X] Install Recommended packages automatically". と設定するべきです。

    KDE や Gnome デスクトップ環境では簡単にプリンターの設定ができます。 この他に swat が導入されている場合は web ブラウザを用いてシステムの設定を行えます。

         $ 好みのブラウザコマンド http://localhost:631
    

    例えば、アクセス可能なプリンタのリストにプリンタを追加するには、 次を実行します。

    詳細は http://localhost:631/documentation.html 及び http://www.cups.org/cups-help.html をご覧ください。


    3.7 デスクトップPC用のCRON

    Vixie cron はプログラムのスケジュール実行処理の デフォールトとしてインストールされます。 システムが毎日24時間連続で走っていないとこれは うまく機能しません。デスクトップ用途に用いるPCの場合、この問題に 対処するように cron に加え anacron もインストールする必要があります。 fcron パッケージはこの代用となります。

    CRON ジョブのコンフィギュレーションに関しては タスクのスケジューリング (cronat), 第 8.6.27 節 を参照してください。


    3.8 他のホストへのインストールのヒント


    3.8.1 最初のインストール後にさらにいくつかパッケージを インストールする

    いったんここまで来たら、小さいけれどもちゃんと機能する Debian システムを 持っていることになります。もっと大きいパッケージをインストールしても良い 時間です。

    まずあなたが最初に行っても良いのは、好みのエディタや他のプログラムを aptidude を使って選ぶことです。多数の Emacs の変種をインストールして共存できます。有名なエディタ, 第 11.1 節 をご覧ください。

    次に、完璧にエンドユーザ指向なシステムを得るために、再び aptitude を起動して "タスク" --> "End-user" の順に進めば、(ほとんど) 全てのパッケージを 選択できます。

    より簡単にシャットダウンさせるため、私は通常 /etc/inittab を 次のように編集します。

         ...
         # CTRL-ALT-DEL が押された時に実行
         ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -h now
         ...
    

    3.8.2 モジュール

    デバイスドライバ用のモジュールは最初のインストール中に設定されます。 modconf はメニュ指向なモジュール設定を後に供給します。 このプログラムは最小のインストール中にいくつかのモジュールを除外されたり、 最初のインストール後に新しいカーネルをインストールした場合に非常に有用です。

    全てのプリロードされたモジュール名は /etc/modules にあるリストに追加される必要があります。モジュールの制御を手動で行うために lsmoddepmod も使用します。

    またもしまだの場合には /etc/modulesに数行書き加えて IP masquerading (FTP等)が可能なように設定することを確実にしましょう。


    3.8.3 CD-RW の基本的な設定

    IDE で接続された CD-RW ドライブが 2.4 カーネルとともに使われる場合には、 次に示すファイルを編集してください。

         /etc/lilo.conf  (append="hdc=ide-scsi ignore=hdc" を追加し、 
                          設定を有効にするために lilo を実行する)
         /dev/cdrom      (シンボリックリンク # cd /dev; ln -sf scd0 cdrom)
         /etc/modules    ("ide-scsi" および "sg" を追加する。"sr" が必要なら
                         その後に追加する。)
    

    詳細は CD ライター, 第 9.3 節 をごらんください。


    3.8.4 大容量メモリおよび自動電源 OFF

    大規模メモリ (2.2 kernel 用)と自動電源 OFF (APM 用) のためのブートプロンプト パラメータを設定するため、 /etc/lilo.conf を次のように編集 してください。

         append="mem=128M apm=on apm=power-off noapic"
    

    これらの設定をインストールするには lilo を実行してください。 SMP カーネルには apm=power-off の設定が必要であり、buggy な SMP ハードウェアの問題を回避するには noapic と設定する必要 があります。同じことはブートプロンプトでオプションを入力することによっても 可能です。ブートプロンプトを使った他のブートトリック, 第 8.1.5 節 をごらんください。

    APM がモジュールとしてコンパイルされている場合、Debian のデフォルトの version 2.4 カーネルでは、insmod apm power-off=1 とブート後に 実行するか、/etc/modules に次のように設定してください。

         # echo "apm power_off=1" >>/etc/modules
    

    又は、ACPI のサポートを組み込んでコンパイルすることにより、より新しい kernel を用いて同じ目標を達成出来ますし、より SMP フレンドリーにもなるようです (これには新しいマザーボードが必要です)。 新しいマザーボード上で 2.4 kernel を次の設定で動かすと大容量メモリを正確に認識できます。

         CONFIG_PM=y
         CONFIG_ACPI=y
         ...
         CONFIG_ACPI_BUSMGR=m
         CONFIG_ACPI_SYS=m
    

    そして、次の 2 行をこの順番で /etc/modules に追加してください。

         ospm_busmgr
         ospm_system
    

    又は、上記に示したオプションを "y" にセットして kernel を再構築してください。 どの場合でも、ACPI を用いた場合にはブートプロンプトパラメタは必要ありません。


    3.8.5 いくつかのウェブサイトにアクセスした時の奇妙な挙動

    最近の Linux kernel は通常 ECN を有効化でき、これが腐ったルータ上にある いくつかのウェブサイトにアクセスした際に問題を引き起こします。ECN の 状況を確認するには。次を実行します。

         # cat /proc/sys/net/ipv4/tcp_ecn
          ... 又は
         # sysctl net.ipv4.tcp_ecn
         を実行してください。
    

    ECN を無効化するには、次のコマンドを実行してください。

         # echo "0" > /proc/sys/net/ipv4/tcp_ecn
          ... 又は
         # sysctl -w net.ipv4.tcp_ecn=0
    

    ブート時に TCP ECN を無効化するには、/etc/sysctl.conf を 次のように編集してください。

         net.ipv4.tcp_ecn = 0
    

    3.8.6 ダイアルアップ PPP 接続の設定

    pppconfig パッケージをインストールすることにより ダイアルアップ PPP 接続の設定ができます。

         # apt-get install pppconfig
         # pppconfig
          ... ダイアルアップ PPP のための指示に従う
         # adduser user_name dip
          ... user_name のダイアルアップ PPP へのアクセスを許可
    

    ユーザ (user_name) によりダイアルアップ PPP を次のように 起動できます。

         $ pon ISP_name  # プロバイダへの PPP 接続を開始。
          ... Internet を愉しむ
         $ poff ISP_name # PPP 接続を切断。 ISP_name は任意。
    

    詳細は PPP インターフェイスの設定, 第 10.2.4 節 をごらんください。


    3.8.7 /etc/ 下のファイルを微調整するための他の設定ファイル

    標準的な Debian のインストールでは欠けている /etc/cron.deny ファイルを追加したいかもしれません。(/etc/at.deny をコピー 可能です。)


    [ 前のページ ] [ 目次 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 次のページ ]


    Debian Reference
    第 4 章 - Debian チュートリアル


    本章は 本当の初心者に Debian ワールドへの基本的なオリエンテーションを供給 します。しばらく Unix ライクなシステムを使っていたならば、ここで説明する ことは多分ほとんど知っているでしょう。常識の確認としてこれを使ってください。


    4.1 始め方

    PC に Debian システムをインストールした後、有用ないくつかのことを 学ぶ必要があります。素早い説明をします。


    4.1.1 root としてシェルにログインする

    システムのリブート後、パッケージの最初の選択により、グラフィカルな ログインスクリーン又は文字ベースのログインスクリーンが表れます。 単純化のため、グラフィカルなログインスクリーンが表れた場合、 キャラクタベースのログインスクリーンを表示させるために Ctrl-Alt-F1 を押してください。 [3]

    あなたのホスト名が foo と仮定すると、ログインプロンプトは 次のようになります。

         foo login:
    

    root とタイプし、Enter キーを押してインストール手順の間に 選んだパスワードをタイプしてください。Debian システムでは、 Unix の伝統に従い、パスワードは大文字と小文字が区別されます。 ログインに成功すると、システムは歓迎メッセージを表示し、root コマンド プロンプトを表示してあなたの入力を待ちます。 [4]

         foo login: root
         Password: 
         Last login: Sun Oct 26 19:04:09 2003 on tty3
         Linux foo 2.4.22-1-686 #6 Sat Oct 4 14:09:08 EST 2003 i686 GNU/Linux
         
         Most of the programs included with the Debian GNU/Linux system are
         freely redistributable; the exact distribution terms for each program
         are described in the individual files in /usr/share/doc/*/copyright
         
         Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
         permitted by applicable law.
         
         root@foo:root#
    

    あなたは既にこの root コマンドプロンプトからシステム管理を行う準備が できています。この root アカウントは、スーパーユーザや特権ユーザとも 呼ばれています。このアカウントからは、次のようなことができます。

    パスワードを共有することにより root アカウントへのアクセスを 共有することは非常にまずい考えです。sudo(8) のようなプログラムを使って管理者権限を共有するのが良い考えです。

    管理行動を行おうとする場合でも、まず自分の非特権者アカウントでログイン するのは、良い Unix 的習慣であると考えられていることに注意してください。 必要な際に制限された root 権限を得るために、sudo, super, や su -c コマンドを使いましょう。 sudo を使ってより安全に作業をする, 第 9.2.4 節 をご覧ください。 [5]


    4.1.2 最小限の初心者用環境をセットアップ

    コンピュータシステムを学ぶことは新しい外国語を学ぶことに似ていると 考えます。チュートリアルブックは有用ですが、ヘルパーツールを用いて 実際に学ぶことが必要です。こういう背景から、mc, vim, lynx, doc-linux-text, そして debian-policy のようないくつかの追加パッケージを インストールするのは良い考えです。 [6]

         # apt-get update
          ...
         # apt-get install mc vim lynx doc-linux-text debian-policy 
          ...
    

    これらのパッケージを既にインストールしている場合、何もインストール しなくても良いです。


    4.1.3 ユーザアカウントを追加

    インストール中に、通常 root アカウントへのメールを受け取る非特権ユーザ アカウントを作成します。 [7] この特別なユーザアカウントを以降の訓練用にも使いたくないならば、 他の新ユーザアカウントを作成すべきです。

    新しいユーザ名を penguin とすると、次のように タイプするとアカウントが作成されます。

         root@foo:root# adduser penguin
         ... 質問全てに答える
    

    [8] 先に進む前に、いくつかのことをまず学びましょう。


    4.1.4 仮想コンソールを切替える

    Debian システムには、6 個の独立した仮想端末が使えます。すなわち、 PC の VGA キャラクタコンソールスクリーンを 6 個の切替え可能な VT100 端末として使えるということです。スクリーンの切替えは左側の Alt キー と F1–F6 キーを同時に押すことにより行えます。仮想ターミナル それぞれに独立したアカウントでログインすることができます。 マルチユーザ環境は偉大な Unix の機能であり、非常に中毒性があります。

    X Window System を起動中のシステムにおいて Alt-F7 を間違ってタイプし、 コンソールスクリーンがグラフィカルなスクリーンを表示していた場合、 Ctrl-Alt-F1 を押すことによりキャラクタコンソールへのアクセスを回復します。 この現象に慣れるため、違うコンソールに移動して元に戻ってみてください。


    4.1.5 シャットダウンのやりかた

    ファイル操作がメモリへのキャッシュにかかわる他の現代的な OS と同様に、 Debian システムは電源を OFF にする前にファイルの完全性を維持するため、 適切なシャットダウン手順を取る必要があります。 システムをシャットダウンするためには、 root コマンドプロンプトから 次に示すコマンドを実行してください。

         # shutdown -h now
    

    これは通常のマルチユーザモード用です。シングルユーザモードの場合は、 root コマンドプロンプトから次のコマンドを実行してください。

         # poweroff -i -f
    

    これの代わりに、Ctrl-Alt-Delete を押してシャットダウンできるかもしれません。 [9]

    システムが "System halted" と表示するまで待ち、そして電源を OFF に しましょう。BIOS と Linux により APM 又は ACPI の機能が有効化された場合、 システムは何もせずに電源を OFF にします。詳細は 大容量メモリおよび自動電源 OFF, 第 3.8.4 節 を ご覧ください。


    4.1.6 プレイ時間

    ついに Debian システムを非特権ユーザアカウント penguin を使ってできるだけリスクを負わずに楽しむ準備ができました。 [10]

    penguin にログインしましょう。まだ root シェルプロンプト にいるなら、Ctrl-D をタイプしましょう。 [11] こうして root シェルでの行動を止めるために root コマンドプロンプトから 出て、ログインプロンプトに戻ります。新しく作ったユーザ名 penguin と対応したパスワードを入力しましょう。 [12] するとこのようなコマンドプロンプトが表示されるでしょう。

         penguin@foo:penguin$
    

    ここから、単純化のために、シンプルにしたコマンドプロンプトの例を下に挙げます。

    まず簡単な方法 Midnight Commander (MC), 第 4.2 節 を使って Debian システムを学び、後で 適切な方法 (Unix ライクな作業環境, 第 4.3 節) を用いて学ぶことにします。


    4.2 Midnight Commander (MC)

    Midnight Commander (MC) は Linux コンソールや他の端末環境のための GNU 製 "スイス軍ナイフ" です。初心者にメニュドリブンなコンソール経験を与え、 標準的な Unix コマンドを習うよりもより簡単です。

    Debian システムを探検するためにこのコマンドを使いましょう。これは 学習するための最良の方法です。カーソルキーとエンターキーを使うだけで いくつかの主要な場所を探検してください。


    4.2.1 強化型 MC

    終了時に作業ディレクトリを MC に変更させるためには、~/.bashrc (又は .bashrc から呼ばれる /etc/bash.bashrc) をマニュアルページ mc(1) の中の -P オプションの所に記述されているように修正する必要があります。 [13]


    4.2.2 MC の開始

         $ mc
    

    MC はメニュを通じて、最小限のユーザの苦労しか要求せずに全てのファイル操作を 注意深く行います。ヘルプ表示を出すには、ただ F1 を押すだけす。 カーソルキーとファンクションキーの操作だけで MC を楽しめます。 [14]


    4.2.3 MC でのファイル操作

    MC の標準ではファイルリストを含む 2 つのディレクトリパネルがあります。 他の役立つモードとして、右側のウィンドウにファイルアクセス権情報などを表示する "information" をセットするモードがあります。 次にいくつかの不可欠なキーストロークを示します。gpm デーモン を起動させると、マウスも使えます。(MC でのカットアンドペーストの通常の 挙動を回復するためには、shift キーを押してください。)


    4.2.4 MC のコマンドライントリック


    4.2.5 MC 内のエディタ

    MC の内部エディタは興味深いカットアンドペースト機構を持ちます。 F3 キーを押すと、選択範囲の開始としてマークし、次に F3 を押すと、 選択範囲の終了としてマークし、選択範囲を強調します。そして カーソルを動かすことができます。F6 を押すと、選択範囲はカーソルの位置 に移動します。F5 を押すと、選択範囲はコピーされ、カーソルの位置に 挿入されます。F2 を押すとファイルをセーブします。F10 を押すと選択範囲 はなくなります。ほとんどのカーソルキーは直感的に働きます。

    このエディタはファイル上で直接起動できます。

         $ mc -e filename_to_edit
         $ mcedit filename_to_edit
    

    これはマルチモードエディタではありませんが、同じ効果を発揮させるため、 複数の Linux コンソール上で使用できます。ウィンドウ間のコピーを行うには、 Alt-Fn キーを押して仮想コンソールを切替えて、ファイルの一部を 他のファイルに動かすために "File->Insert file" や "File->Copy to file" を用います。

    この内部エディタは他の外部エディタと置き換えが可能です。

    また、多くのプログラムは使用するエディタを決定するために環境変数 EDITORVISUAL を使用します。 vim が不快な場合、~/.bashrc に 次に示す行を追加してエディタを mcedit にセットします。

         ...
         export EDITOR=mcedit
         export VISUAL=mcedit
         ...
    

    可能ならばこれらを vim にセットすることをお薦めします。 vim コマンドに慣れることは正しいことです。なぜならば、 Vi エディタは常に Linux/Unix 世界に存在するからです。 [15]


    4.2.6 MC 内のビューア

    非常に小さなビューアです。文書内の単語を検索するための素晴らしいツールです。 /usr/share/doc ディレクトリ内のファイルに対していつもこれを 使います。これは 大量の Linux 情報をブラウズするための最速の方法です。 このビューアはこのように直接起動できます。

         $ mc -v filename_to_view
    

    4.2.7 MC の自動起動機能

    ファイルの上で Enter を押すと、適切なプログラムがファイルの内容を操作 します。これは非常に便利な MC の機能です。

         実行ファイル:コマンドを実行
         man, html ファイル:ビューアソフトに内容をパイプする
         tar.gz, deb ファイル:  サブディレクトリであるかのように内容を表示
    

    これらのビューアや仮想ファイルの機能を有効にするため、閲覧可能なファイルには 実行権が設定されていなくてはなりません。chmod コマンドを使うか、 MC のファイルメニュ経由で状態を変更してください。


    4.2.8 MC の FTP 仮想ファイルシステム

    MC は FTP を用いた Internet 越しのファイルアクセスに使えます。 F9 を押してメニュに行き、`p' を押して FTP 仮想ファイルシステムを有効に します。username:passwd@hostname.domainname の形式で URL を 入力すると、それがローカルにあるかのようにリモートディレクトリを取得 します。

    http.us.debian.org/debian を URL として試し、Debian ファイルアーカイブの 閲覧をしてみてください。Debian アーカイブがどのように構成されているか については Debian アーカイブ, 第 2.1 節 をご覧ください。


    4.3 Unix ライクな作業環境

    mc はほとんど全てのことを可能にしますが、シェルプロンプトから 実行されるコマンドラインツールの使用方法について学び、 Unix ライクな作業環境に親しむのは非常に重要なことです。 [16]


    4.3.1 特別なキーストローク

    Unix ライクな環境では、特別な意味を持ついくつかのキーストロークがあります。 [17]

    標準のシェルである bash には対話的な利用を手助けする 履歴編集機能とタブ補完機能があります。

    覚えておく価値のある他の重要なキーストロークを挙げます。

    ここで、Linux キャラクタコンソール上でマウスを使うためには、gpm をデーモンとして起動する必要があります。 [19] マウスの設定, 第 3.3 節 参照。


    4.3.2 基本的な Unix コマンド

    基本的な Unix コマンドを学びましょう。 [20] 非特権ユーザアカウント penguin から次に挙げる コマンドを全て試してみてください。

    訓練として、上記のコマンドを用いてディレクトリを横断し、システムの中を のぞきこんでみてください。コンソールのコマンドに関して質問がある場合は、 必ずマニュアルページを読んでみてください。例えば、これらのコマンドは 良い開始点でしょう。

         $ man man
         $ man bash
         $ man ls
    

    また、vim を始め、F1 キーを押す良い時期でしょう。 少なくとも最初の 35 行を読むべきです。そしてカーソルを |tutor| まで動かし、Ctrl-] を押してオンラインコースを受けましょう。 エディタについてより詳しく学ぶには、エディタ, 第 11 章 をご覧ください。

    GNU や BSD 由来の多くの Unix コマンドは次のような手順 (又は ある場合には引数無し) を行えば主要なヘルプ情報を表示できます。

         $ commandname --help
         $ commandname -h
    

    自習のために、 Debian tips, 第 8 章 も例として試してみてください。


    4.3.3 コマンドの実行

    ついに Debian システムの使用方法を幾らか感じとれました。 Debian システムでのコマンド実行機構について深く見ていきましょう。 [27]


    4.3.4 シンプルなコマンド

    シンプルなコマンドは、次の順序となります。

  • 変数の割り当て (任意)

  • コマンド名

  • 引数 (任意)

  • リダイレクト (任意: >, >>, <, <<, など)

  • 制御演算子 (任意: &&, ||, <newline>, ;, &, (, ))

  • 引用や置換を持つより複雑なコマンドについては、コマンドライン処理, 第 13.2.6 節 参照。


    4.3.5 コマンド実行と環境変数

    典型的なコマンドの実行は次のようなシェル行シーケンスを使用します。 [28]

         $ date
         Sun Oct 26 08:17:20 CET 2003
         $ LC_ALL=fr_FR date
         dim oct 26 08:17:39 CET 2003
    

    ここで、プログラム date はフォアグランドジョブで実行されています。 環境変数 LC_ALL は次のようになっています。

    ほとんどのコマンドの実行は通常前の環境変数の定義を使用しません。 上の例では、次のように実行することもできます。

         $ LC_ALL=fr_FR
         $ date
         dim oct 26 08:17:39 CET 2003
    

    ここで見たように、コマンドの出力は環境変数により影響され、フランス語の 出力が行われました。環境変数をサブプロセスに継承されるようにしたい (すなわち、シェルスクリプトを呼ぶ時) 場合は、代わりに次のように "export" する必要があります。

         $ export LC_ALL
    

    4.3.6 コマンド検索パス

    シェル上でコマンドをタイプした場合、シェルはコマンドを PATH 環境変数内にリストされたディレクトリのリストから検索します。PATH 環境変数の値は、シェルの検索パスとも呼ばれます。

    標準の Debian インストールでは、ユーザアカウントの PATH 環境変数 には /sbin/ が含まれないかもしれません。それゆえ、 /sbin/ にある ifconfig のようなコマンドを 実行したい場合は、PATH 環境変数を、このディレクトリを含むように 変更する必要があります。PATH 環境変数は通常初期化ファイル ~/.bash_profile に含まれます。Bash 設定, 第 3.2 節 を ご覧ください。


    4.3.7 コマンドラインオプション

    いくつかのコマンドは引数を取ります。- 又は -- で始まる 引数はオプションと呼ばれ、コマンドの挙動を制御します。

         $ date
         Mon Oct 27 23:02:09 CET 2003
         $ date -R
         Mon, 27 Oct 2003 23:02:40 +0100
    

    ここでコマンドライン引数 -Rdate コマンドが RFC-2822 互換のデータ文字列を出力するように挙動を変更させます。


    4.3.8 シェルのワイルドカード

    処理したいファイル名を全てタイプせずにファイルをコマンド処理したいことが よくあります。シェルの ワイルドカード を用いた ファイル名のパターン展開はこのニーズを促進します。

    例えば、次の例を試してみて、自分で考えてみましょう。

         $ mkdir junk; cd junk; touch 1.txt 2.txt 3.c 4.h .5.txt
         $ echo *.txt
         1.txt 2.txt
         $ echo *
         1.txt 2.txt 3.c 4.h
         $ echo *.[hc]
         3.c 4.h
         $ echo .*
         . .. .5.txt
         $ echo .[^.]*
         .5.txt
         $ echo [^1-3]*
         4.h
         $ cd ..; rm -rf junk
    

    4.3.9 コマンドの戻り値

    コマンドは戻り値として終了ステータスを返します。

    この戻り値は実行後すぐに $? シェル変数によりアクセス できます。

         $ [ 1 = 1 ] ; echo $?
         0
         $ [ 1 = 2 ] ; echo $?
         1
    

    戻り値はシェルのために論理的な観点で使用される場合、成功 は論理的に として扱われることに注意してください。 これは 正常終了ゼロ の値を持つため、 いくらか非直感的です。

    シェルの条件文, 第 13.2.5 節 をご覧ください。


    4.3.10 典型的なコマンドシーケンス

    次に挙げるシェルコマンドのイディオムを覚えてみましょう。 これらのイディオムを読んだ後に、シェルパラメータ, 第 13.2.3 節, シェルリダイレクト, 第 13.2.4 節, シェルの条件文, 第 13.2.5 節, そして コマンドライン処理, 第 13.2.6 節 をご覧ください。


    4.3.10.1 command &

    commandバックグラウンド で サブシェルにて実行されます。バックグラウンドジョブにより、 複数のプログラムを単独のシェルで実行することが可能となります。

    バックグラウンドプロセスの管理は次に挙げるシェル組込みコマンドに関連します。 jobs, fg, bg, および killbash(1) マニュアルページの "SIGNALS"、 "JOB CONTROLS" および "SHELL BUILTIN COMMANDS" の章を 読んでみてください。 [29]


    4.3.10.2 command1 | command2

    command1 の標準出力は command2 の標準入力 に導かれます。両方のコマンドは 同時に動くかも しれません。これは パイプライン と呼ばれます。


    4.3.10.3 command1 ; command2

    command1command2連続して 実行されます。


    4.3.10.4 command1 && command2

    command1 がまず実行されます。コマンドの実行が 正常終了した場合は、command2連続して 実行されます。command1command2両方 が正常終了した場合に正常終了を返します。


    4.3.10.5 command1 || command2

    command1 がまず実行されます。失敗した場合、 command2連続して 実行されます。 command1 又は command2 のどちらかが正常終了した場合に正常終了を返します。


    4.3.10.6 command > foo

    command の標準出力をファイル foo にリダイレクト (上書き) します。


    4.3.10.7 command >> foo

    command の標準出力をファイル foo にリダイレクト (追記) します。


    4.3.10.8 command > foo 2>&1

    command の標準出力と標準エラー出力の両方をファイル foo にリダイレクトします。


    4.3.10.9 command < foo

    command の標準入力をファイル foo に リダイレクトします。試してみましょう。

         $ </etc/motd pager
          ... (グリーティングメッセージを表示)
         $ pager </etc/motd
          ... (グリーティングメッセージを表示)
         $ pager /etc/motd
          ... (グリーティングメッセージを表示)
         $ cat /etc/motd | pager
          ... (グリーティングメッセージを表示)
    

    この 4 つの構文は同じ出力を表示しますが、最後の例は特別な cat コマンドを起動し、無駄なリソースを消費しています。


    4.3.11 コマンドエイリアス

    良く使うコマンドにエイリアスを設定できます。例えば、

         $ alias la='ls -la'
    

    ここで、la は 1 列形式で全ファイルをリストする ls -la の短縮形として働きます。

    type コマンドを使って、正確なパス又はコマンドの正体を 識別できます。例えば、

         $ type ls
         ls is hashed /bin/ls)
         $ type la
         la is aliased to `ls -la'
         $ type echo
         echo is a shell builtin
         $ type file
         file is /usr/bin/file
    

    ここで ls は最近検索されましたが、file はそうではないので、ls は "ハッシュされた" といいます。 すなわち、シェルは ls コマンドの場所への高速なアクセス のために、内部記録を取っています。


    4.4 Unix ライクなテキスト処理

    頻繁に Unix ライクシステムで使用される標準的なテキスト処理ツールが いくつかあります。

    いくつかのスクリプト例は 正規表現による置換, 第 8.6.13 節, コマンドをパイプするためのわずかなスクリプト, 第 8.6.18 節, そして Perl ショートスクリプトの狂気, 第 8.6.20 節 をご覧ください。


    4.4.1 正規表現

    正規表現は多くのテキスト処理ツールで使われています。シェルのワイルドカード (シェルのワイルドカード, 第 4.3.8 節 参照) に似ていますが、より複雑かつパワフルです。

    正規表現はパターンマッチを記述し、テキスト文字と メタ文字 からなります。メタ文字は単なる特別な意味を持つ文字です。BRE と ERE の 2つの主要な形式がありますが、どちらを使うかは Unix ライクなテキスト処理, 第 4.4 節 に記述されているテキストツールの種類に依ります。

    ERE の場合、メタ文字 には "\ . [ ] ^ $ * + ? ( ) { } |" が含まれます。 正規表現は次の意味を持ちます。

    BRE では、メタ文字 "+ ? ( ) { } |" はその特別な意味を失っています。その代わり、バックスラッシュされた "\+ \? \( \) \{ \} \|" を使います。それゆえ、grouping construct (r1|r2) は BRE では \(r1|r2\) の ように引用符で囲む必要があります。emacs は、基本的に BRE を使いますが、"+ ?" を メタ文字 として 扱います。それゆえ、引用符で囲む必要はありません。grouping construct がどのように使われるかについては 置換表現, 第 4.4.2 節 をご覧ください。

    例えば、grep は正規表現を用いてテキスト検索を行うために使えます。

         $ egrep 'GNU.*LICENSE|Yoyodyne' /usr/share/common-licenses/GPL
                             GNU GENERAL PUBLIC LICENSE
                             GNU GENERAL PUBLIC LICENSE
           Yoyodyne, Inc., hereby disclaims all copyright interest in the program
    

    4.4.2 置換表現

    置換表現の場合、次の文字には特別な意味があります。

    Perl の置換文字列の場合、$n\n の代わりに用いられ、& は 特別な意味を持ちません。

    例を示します。

         $ echo zzz1abc2efg3hij4 | \
           sed -e 's/\(1[a-z]*\)[0-9]*\(.*\)$/=&=/'
         zzz=1abc2efg3hij4=
         $ echo zzz1abc2efg3hij4 | \
           sed -e 's/\(1[a-z]*\)[0-9]*\(.*\)$/\2===\1/'
         zzzefg3hij4===1abc
         $ echo zzz1abc2efg3hij4 | \
           perl -pe 's/(1[a-z]*)[0-9]*(.*)$/$2===$1/'
         zzzefg3hij4===1abc
         $ echo zzz1abc2efg3hij4 | \
           perl -pe 's/(1[a-z]*)[0-9]*(.*)$/=&=/'
         zzz=&=
    

    ここで、括弧で囲まれた 正規表現と、マッチした文字列が 異なったツールでテキスト置換処理にどのように使われるかに特別な注意を 払ってください。

    これらの正規表現はエディタ内でカーソルの動きとテキスト置換アクションの両方 に対して使えます。

    これらのコマンドを習うために、関連するマニュアルページを全て読んでください。


    4.5 Unix ライクなファイルシステム

    GNU/Linux や他の Unix ライク OS システムでは、ファイルディレクトリ に組織化されています。 [30] 全ての ファイルディレクトリ/ を根とする 1 つの大きなツリー、すなわちファイル階層に配置 されています。

    これらのファイルは複数のデバイスに展開することができます。 mount(8) コマンドは あるデバイス上にあるファイルシステムを大きなファイルツリーに所属させます。 逆に、umount(8) コマンドは再び分離させます。


    4.5.1 Unix ファイルの基礎

    次に挙げることは基礎知識です。

    ファイル階層について詳細に学ぶ最も良い方法は、 Filesystem Hierarchy Standard に記述されています。 手始めとして次の事実を覚えるべきです。


    4.5.2 Debian でのファイルシステムの概念

    Unix の伝統に従い、Debian システムはハードディスクや他のストレージデバイス 上の物理データ、そしてコンソールスクリーンなどのハードウェアデバイス とリモートのシリアルコンソールとの相互作用を統一された形式で表される ファイルシステムを供給します。

    Debian での各ファイル、ディレクトリ、名前付きパイプ、そして物理データ はそのデータの所有者 (owner)、データが所属するグループ、最後にアクセスされた 時間などの付随する属性を記述する inode と呼ばれる データ構造を持ちます。 Debian GNU/Linux システムでの inode 構造 の正確な定義を知るには、 /usr/include/linux/fs.h をご覧ください。

    物理エントリの統一された表現は非常にパワフルなので、完全に異なるデバイスに 同種の操作を行うために、同じコマンドを使用することを可能とします。

    すべてのファイルは 1 つのディスク上に置けますし、20 個のディスクに分けることも、 ネットワーク上のどこかにある違うコンピュータにあって接続することもできます。 ファイルの物理的位置がどこであれ、 ディレクトリツリーを見るだけでは見分けがつきませんし、 またほとんど全てのコマンドは同じように動きます。


    4.5.3 ファイルとディレクトリのアクセス権

    ファイルとディレクトリのアクセス権はそれぞれ次に挙げる 3つの 影響されるユーザのカテゴリのために定義されています。

    ファイルでは、それぞれに対応する権限は次のようになります。

    ディレクトリでは、対応する権限はそれぞれ次のようになります。

    ここで、ディレクトリでの 実行 権はディレクトリにあるファイルの 読み込みを許可するだけでなく、サイズや修正時間などの属性を見ることも許可します。

    ファイルやディレクトリのアクセス権情報 (やそれ以上) を表示するには、 ls が使われます。ls(1) をご覧ください。 ls-l オプション付きで実行すると、次の情報が この順序で表示されます。

    ファイルの所有者を変更するには、root アカウントから chown を 使用します。ファイルのグループを変更するには、ファイルの所有者又は root アカウントから chgrp を使用します。ファイルやディレクトリの アクセス権を変更するには、ファイルの所有者又は root アカウントから chmod を使います。foo ファイルの操作を行う 基本的な文法は次の通り。

         # chown newowner foo
         # chgrp newgroup foo 
         # chmod  [ugoa][+-=][rwx][,...] foo
    

    詳細は chown(1), chgrp(1), および chmod(1) をご覧ください。

    例えば、ディレクトリツリーの所有者をユーザ foo に変更し、 グループ bar で共有する場合、root アカウントから次のコマンドを 実行します。

         # cd /some/location/
         # chown -R foo:bar .
         # chmod -R ug+rwX,o=rX .
    

    3つのさらに専門的なアクセス権ビットが存在します。

    ここで ls -l のこれらのビットを表す出力は、これらのビットが出力 されることにより隠される実行ビットがセットされていない場合、大文字になります。

    setuid ビット を実行ファイルにセットすると、ユーザは ファイルの所有者 ID (例えば、root) により実行ファイルを 実行することを許可します。同様に、 setgid ビット を実行ファイルにセットすると、ユーザは ファイルのグループ ID (例えば、root) により実行ファイルを 実行することを許可します。これらの設定はセキュリティを破るリスクを引き起こす ので、これらのビットを有効にするには特別な注意が必要です。

    setgid ビット をディレクトリに対して有効にすると、 ディレクトリに作成した全ファイルがディレクトリの グループ に所属するという BSD ライクなファイル生成手法が有効になります。

    sticky ビット をディレクトリに対して有効にすると、 ディレクトリにあるファイルがファイルの所有者以外から削除されるのを防ぎます。 /tmp やグループの書き込み可能なディレクトリなどの world-writable なディレクトリにあるファイルの内容を安全にするためには、 書き込み 権を無効にするだけでなく、 ディレクトリに sticky ビット もセットする必要があります。 さもなければ、ディレクトリに書き込みできるユーザにより、ファイルが削除され、 同じ名前で新しいファイルが作成されることを許してしまいます。

    次にファイルアクセス権の興味深い例を挙げます。

         $ ls -l /etc/passwd /etc/shadow /dev/ppp /usr/sbin/pppd
         crw-rw----    1 root     dip      108,   0 Jan 18 13:32 /dev/ppp
         -rw-r--r--    1 root     root         1051 Jan 26 08:29 /etc/passwd
         -rw-r-----    1 root     shadow        746 Jan 26 08:29 /etc/shadow
         -rwsr-xr--    1 root     dip        234504 Nov 24 03:58 /usr/sbin/pppd
         $ ls -ld /tmp /var/tmp /usr/local /var/mail /usr/src
         drwxrwxrwt    4 root     root         4096 Feb  9 16:35 /tmp
         drwxrwsr-x   10 root     staff        4096 Jan 18 13:31 /usr/local
         drwxrwsr-x    3 root     src          4096 Jan 19 08:36 /usr/src
         drwxrwsr-x    2 root     mail         4096 Feb  2 22:19 /var/mail
         drwxrwxrwt    3 root     root         4096 Jan 25 02:48 /var/tmp
    

    chmod(1) コマンドを用いて、ファイルアクセス権を 記述するためのもう一つの数字モードが存在します。この数字モードは 8進数 を使った 4桁の数字を用います。各桁は次のように対応します。

    これは複雑に聞こえるかもしれませんが、実際は本当にシンプルです。 ls -l コマンドの出力の最初の数行を見て、それをファイルアクセス権の バイナリ (2進数) 表現 ("-" を "0"、 "rwx" を "1) として読むと、 この数字モードの値はファイルアクセス権の 8 進数表現として意味を持ちます。 [33] 例えば、次を試してみてください。

         $ touch foo bar
         $ chmod u=rw,go=r foo
         $ chmod 644 bar
         $ ls -l foo bar
         -rw-r--r--    1 penguin  penguin  0 Nov  3 23:30  foo
         -rw-r--r--    1 penguin  penguin  0 Nov  3 23:30  bar
    

    標準のファイルアクセス権マスクは umask シェル組込み コマンドを使うことによりセットできます。builtins(7) をご覧ください。


    4.5.4 タイムスタンプ

    GNU/Linux のファイルには、3 種類のタイプスタンプが存在します。

    ctime が作成時刻ではないことに注意してください。

    Debian システム上では、ファイルをただ読み込むだけで通常ファイルの書き込み操作 が発生し、inodeatime 情報が更新される ことに注意してください。ファイルシステムを noatime オプション付きで マウントすると、システムはこの操作を飛ばし、ファイル読み込みアクセスが より高速になります。mount(8) をご覧ください。

    既存のファイルのタイムスタンプを変更するには、touch(1) をご覧ください。


    4.5.5 リンク

    異なるファイル bar とファイル foo を連携させる 2つの方法があります。

    リンク数の変更と rm コマンドの結果の厳密な違いについての次の例 をご覧ください。

         $ echo "Original Content" > foo
         $ ls -l foo
         -rw-r--r--    1 osamu    osamu           4 Feb  9 22:26 foo
         $ ln foo bar     # hard link
         $ ln -s foo baz  # symlink
         $ ls -l foo bar baz
         -rw-r--r--    2 osamu    osamu           4 Feb  9 22:26 bar
         lrwxrwxrwx    1 osamu    osamu           3 Feb  9 22:28 baz -> foo
         -rw-r--r--    2 osamu    osamu           4 Feb  9 22:26 foo
         $ rm foo
         $ echo "New Content" > foo
         $ cat bar
         Original Content
         $ cat baz
         New Content
    

    シンボリックリンクは上の例に示したように、常にファイルアクセス権 "rwxrwxrwx" を持ちますので、シンボリックリンクが指すファイルのアクセス権により指示される ファイルアクセス権が実際の効果を持ちます。

    . ディレクトリは、 それ自身が中にあるディレクトリとリンクしていますので、 新しいディレクトリリンク数は 2 から始まります。.. ディレクトリ は親ディレクトリとリンクしているので、ディレクトリのリンク数は 新しいサブディレクトリの増加に伴い増加します。


    4.5.6 名前付きパイプ (FIFO)

    名前付きパイプは、パイプのように働くファイルです。何かをファイルに 入れ、もう一方から出ます。こうしてこれは FIFO 又は First-In-First-Out と呼ばれます。つまり、最初にパイプに入れるものが最初にもう一方から出てきます。

    名前付きパイプに書き込んだ場合、パイプに書き込んだプロセスは情報が パイプから読み込まれるまで終了しません。名前付きパイプを読み込んだ場合、 読み込んだプロセスは何か読み込むものが存在するまで終了するのを待ちます。 パイプのサイズは常に 0 です。 -- 名前付きパイプはデータを保存せず、 シェルの | のように 2 つのプロセスをリンクするだけです。 しかし、このパイプは名前を持つので、2 つのプロセスは同じコマンドライン にあったり、同じユーザにより実行される必要さえありません。

    次を実行することにより、名前つきパイプを試せます。

         $ cd; mkfifo mypipe
         $ echo "hello" >mypipe & # バックグラウンドに入れる
         [1] 5952
         $ ls -l mypipe
         prw-r--r--    1 penguin penguin  0 2003-11-06 23:18 mypipe
         $ cat mypipe
         hello
         [1]+  Done                    echo hello >mypipe
         $ ls mypipe
         prw-r--r--    1 penguin penguin  0 2003-11-06 23:20 mypipe
         $ rm mypipe
    

    4.5.7 ソケット

    ソケットは名前つきパイプ (FIFO) に似ており、プロセス間の情報交換を 行えます。ソケットにとって、これらのプロセスは同時に実行する必要 はありませんし、同じ祖先プロセスの子供である必要もありません。 これはプロセス間通信の終端点です。情報の交換は異なるホストの間の ネットワーク越しでさえ発生します。


    4.5.8 デバイス名

    デバイスファイルは、システム上のハードディスク、ビデオカード、ディスプレイ、 キーボードなどの物理デバイス又は仮想デバイスに関連します。仮想デバイスの 例として、/dev/console として表されるコンソールがあります。

    デバイスには 2つのタイプがあります。

    デバイスファイルの読み書きが可能ですが、ファイルには、人間にとっては ちんぷんかんぷんで理解できないバイナリデータが多分含まれます。 データを直接デバイスファイルに書き込むことは時々ハードウェアの 接続に関するトラブルシュートに役立ちます。例えば、 プリンタデバイス /dev/lp0 にテキストデータをダンプしたり、 適切なシリアルポート /dev/ttyS0 にモデムコマンドを送る ことができます。しかし、注意深くやらないと、大災害をもたらすことがあります。 ですから気をつけてください。


    4.5.8.1 /dev/null など

    /dev/null は書き込む全てを捨てる特別なデバイスファイルです。 何かをしたくない場合、それを /dev/null に投げ込みます。 これは基本的に底無し穴です。/dev/null を読み込むと、 ファイル終端 (EOF) 文字がすぐさま得られます。

    /dev/zero は同様に、ここから読み込むと、\0 文字 を取得します。(ASCII コードの 0 とは異なる) ダミーファイル, 第 8.6.34 節 を ご覧ください。


    4.5.8.2 デバイスノード数

    デバイスノード数は ls を次のように実行すると表示されます。

         $ ls -l /dev/hda /dev/ttyS0 /dev/zero
         brw-rw----    1 root     disk       3,   0 Mar 14  2002 /dev/hda
         crw-rw----    1 root     dialout    4,  64 Nov 15 09:51 /dev/ttyS0
         crw-rw-rw-    1 root     root       1,   5 Aug 31 03:03 /dev/zero
    

    ここで、

    古いシステムでは、インストール過程で /sbin/MAKEDEV コマンド を使ってデバイスノードを作成します。 MAKEDEV(8) をご覧ください。

    新しいシステムでは、/dev 下のファイルシステムは /proc ファイルシステムと同様のデバイスファイルシステムにより 自動的に生成されます。


    4.5.9 /proc ファイルシステム

    /proc ファイルシステムは仮想ファイルシステムであり、 システムや起動中のプロセスに関する情報を含みます。

    特にあるファイル - /proc/kcore に気づくと、パニックになる人が 良くいます。これは一般に巨大です。これは (おおよそ) コンピュータのメモリ の内容のコピーです。これは kernel をデバッグするのに用いられます。 実際にはどこにも存在しないので、そのサイズに関して心配する必要は 全くありません。

    proc filesystem により Linux kernel をチューニングする, 第 7.2 節proc(5) をご覧ください。


    4.6 X Window System

    X, 第 9.4 節 をご覧ください。


    4.6.1 X Window System を起動する

    X Window System は xdm のようなグラフィカルなログイン デーモンにより自動的に起動できますし、コンソールから次をタイプしても 起動できます。

         $ exec startx
    

    4.6.2 X Window System におけるメニュ

    X 環境は多くのウィンドウマネージャを提供するので、ユーザインターフェース はかなり変化します。root ウィンドウを右クリックするとメニュインターフェース が上がって来ます。これはいつも使えます。

    メニュエントリが見付からない場合、関連するパッケージをインストールしてください。Debian パッケージ管理の基礎, 第 6.2 節 をご覧ください。


    4.6.3 X Window System でのキーボードシーケンス

    X Window System を起動中に覚えておくべき重要なキーストローク を次に挙げます。


    4.7 Further study

    現時点では、The Linux Documentation Project: Guides から引用する主要なガイドブックを読むことをお薦めします。

    さらに学ぶためのリソースは Debian のサポート, 第 15 章 をご覧ください。


    [ 前のページ ] [ 目次 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 次のページ ]


    Debian Reference
    第 5 章 - stable, testing, 又は unstable ディストリビューションへのアップグレード


    アップグレード用の公式リリースノートは http://www.debian.org/releases/stable/releasenotes および http://www.debian.org/releases/testing/releasenotes (作業中) にあります。

    stable, testing, 又は unstable ディストリビューションにシステムをアップグレードするには、 次に示す数段階の手順を踏むことが必要となるかもしれません。

    Debian は中間のリリースを飛ばしたアップグレードをサポートしていません。


    5.1 Potato から Woody へのアップグレード

    この手順は Potato の APT が現在の apt_preferences(5) マニュアルページに記述 されている全ての機能をサポートしていないために分けて記述されています。

    /etc/apt/sources.liststable ソースだけを 含めた後に、次を実行することにより、stable 版に必要な APT と主要パッケージをアップグレードします。

         # apt-get update
         # apt-get install libc6 perl libdb2 debconf
         # apt-get install apt apt-utils dselect dpkg
    

    次にシステムの残りの部分を Woody にアップグレードします。

         # apt-get upgrade
         # apt-get dist-upgrade
    

    5.2 アップグレードの準備

    ネットワーク経由でパッケージを取得することにより、あるディストリビューション から他のディストリビューションにアップグレードすることができます。 アップグレード作業は次のように行います。

    まず stable 用のリポジトリのクリーンなリストを取得します。

         # cd /etc/apt
         # cp -f sources.list sources.list.old
         # :>sources.list 
         # apt-setup noprobe
    

    testing にアップグレードしたい場合、この新しいリストに testing ソースを追加します。 unstable にアップグレードしたい場合には、 unstable ソースも追加します。

         # cd /etc/apt
         # grep -e "^deb " sources.list >srcs
         # :>sources.list  
         # cp -f srcs sources.list
         # sed -e "s/stable/testing/" srcs >>sources.list
         # sed -e "s/stable/unstable/" srcs >>sources.list
         # apt-get update
         # apt-get install apt apt-utils
    

    /etc/apt/sources.list/etc/apt/preferences のチューニング技術については Debian パッケージ管理の基礎, 第 6.2 節 をご覧ください。


    5.3 アップグレード

    上記に示したように /etc/apt/sources.list/etc/apt/preferences を適切に設定した後、システムの アップグレードを開始できます。

    しかしながら、Debian の testing ディストリビューションを 追いかけることには、更新されたパッケージはまず unstable に アップロードされ、後で testing に移って来るために、 セキュリティ修正を含むパッケージのインストールが 遅れるという副作用がありえるということに注意してください。

    基本的なことは Debian パッケージ管理, 第 6 章 をご覧ください。そして、問題に 直面した場合は APT アップグレードのトラブルシュート, 第 6.3.2 節 をご覧ください。


    5.3.1 dselect を使用する

    システムに -dev パッケージなどを含む多くのパッケージが存在する場合、 dselect を使用した次のような手段を用いたきめの細かいパッケージ 制御がお薦めです。

         # dselect update  # アップグレード前には常にこれを実行する
         # dselect select  # 追加パッケージを選択する
    

    dselectを起動した時、現在の全パッケージが選択されています。 Depend, Suggest, そして Recommends に基づく 追加パッケージがある場合、dselect が入力を促すかもしれせん。 パッケージを追加したくない場合は、ただ Q を押せば、 dselect は再び終了します。

         # dselect install
    

    dselect の install 作業中、パッケージの設定に関する質問に いくつか答える必要があるでしょう。ですから、この過程のために時間とノート を用意しておきましょう。dselect, 第 6.2.3 節 をご覧ください。

    dselect を使用してください。 常に動作します :)


    5.3.2 apt-get を使用する

         # apt-get update
         # apt-get -t stable upgrade
         # apt-get -t stable dist-upgrade
         # apt-get -t testing upgrade
         # apt-get -t testing dist-upgrade
         # apt-get -t unstable upgrade
         # apt-get -t unstable dist-upgrade
    

    いったんシステムが Sarge まで到達したら、apt-get の代わりに aptitude を使うことをお薦めします。 (aptitude は 上に示したものを含めた apt-get が受け取るオプションの多くを受け取ります。)

    アップグレードを行い、現在の dselect 設定を保持するには、次を実行します。

         # apt-get dselect-upgrade
    

    パッケージの依存性, 第 2.2.8 節 をご覧下さい。


    [ 前のページ ] [ 目次 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 次のページ ]


    Debian Reference
    第 6 章 - Debian パッケージ管理


    現在 aptitude は APT のコンソール版のフロントエンドと みなされています。過去にインストールしたパッケージと依存性を通じて 引っ張って来たパッケージを故意に記憶しています。 故意にインストールしたパッケージによりもはや必要とされなくなった場合、 後者のタイプのパッケージは aptitude により自動的に 削除されます。先進的なパッケージフィルタ機能を持ちますが、設定するのは 難しいでしょう。

    現在 synaptic は APT の Gtk 版 GUI フロントエンドと みなされています。 aptitude よりも設定しやすいパッケージフィルタ機能を持ちます。 又、Debian Package Tags を実験的にサポート しています。

    Debian のリポジトリへのネットワーク負荷を低減し、ダウンロードを 高速化するためには、パッケージを Debian のミラーサイトから ダウンロードすべきです。

    ローカルネットワーク内の複数のマシンに同じパッケージをインストール する必要がある場合、APT を通じたパッケージのダウンロードのために squid を使ってローカルの HTTP プロキシを立ち上げる ことができます。必要ならば、http_proxy 環境変数を設定 したり、 /etc/apt/apt.confhttp 値を 設定してください。

    apt_preferences(5) に記載された pin 機能は強力ですが、その影響について理解や管理がしずらい場合が あります。これを先進的な機能とみなすべきです。

    chroot, 第 8.6.35 節 に記載された手法を用いることは、 システムの安定性と最新版のソフトウエアへのアクセスの両方を確保できる ために、望ましい手法です。

    本章は Woody 以後のシステムに準拠していますが。 いくつかの機能は Sarge 以後であることを要求するかもしれません。


    6.1 イントロダクション

    もし全てのデベロッパー向けのドキュメンテーションを読むのが辛いなら、本章を まず読み、Debian の testing/unstable によるフルパワーを 楽しみ始めてください :-)


    6.1.1 主要なパッケージ管理ツール

         dpkg      – Debian パッケージファイルインストーラ
         apt-get   – APT のコマンドラインフロントエンド
         aptitude  – APT の先進的なコンソール版コマンドラインフロントエンド
         synaptic  – APT の Gtk GUI フロントエンド
         dselect   – メニュドリブンなパッケージマネージャ
         tasksel   – タスクインストーラ
    

    これらはお互いに置き換わるものではありません。 例えば、dselect は APT も dpkg も使用しています。

    APT は 取得可能なパッケージを追跡するために /var/lib/apt/lists/* を使いますが、 dpkg/var/lib/dpkg/available を使います。 aptitude や他の APT のフロントエンドを使ってパッケージを インストールしてきて、インストールに dselect を使いたい場合、まず 最初にすべきことは dselect のメニュから [U]pdate を選択する (又は "dselect update" を起動する) ことです。

    apt-get は自動的にインストールを要求したパッケージに Depends する パッケージをインストールします。インストールを要求したパッケージに単に Recommends や Suggests するパッケージはインストールしません。

    一方、aptitude はインストールを要求したパッケージに Recommends や Suggests するパッケージをインストールするように設定できます。

    dselect は選択したパッケージが Recommends や Suggests するパッケージ のリストをユーザに提供し、それらを個別にインストールするかどうかを選択できます。 パッケージの依存性, 第 2.2.8 節 参照。


    6.1.2 便利なツール

         dpkg-reconfigure  - 既にインストールしたパッケージを再設定する
                             (debconf を使っている場合)
         dpkg-source       - source パッケージファイルを管理する
         dpkg-buildpackage - パッケージファイルの構築を自動化する
         apt-cache         - ローカルキャッシュにあるパッケージアーカイブをチェックする
    

    6.2 Debian パッケージ管理の基礎

    アップグレードの準備, 第 5.2 節 に記述されているように sources.list を設定しましょう。 [34] Debian システムインストールのヒント, 第 3 章, stable, testing, 又は unstable ディストリビューションへのアップグレード, 第 5 章, や 緊急用エディタ, 第 11.2 節 でも言及しています。


    6.2.1 task のインストール

    特定の使用目的で Debian システムに入れ込むために要求される主要な パッケージ群をインストールできます。 これらのパッケージ群は "task" と呼ばれます。

    最初のインストール時に task をインストールする最も単純な方法は tasksel を使用することです。 使用前に

         dselect update
    

    を起動させる必要がある ことに注意してください。

    aptitude も task をインストールでき、この目的に 用いるために推奨できるツールです。 インストールの手順に進む前に task 内の個別のパッケージを削除 することを可能とします。


    6.2.2 aptitude

    aptitudedselect に似たメニュドリブンな新しい パッケージインストーラですが、APT の上に 1 から構築されています。 apt-get の代わりのコマンドラインコマンドとしても使えます。 aptitude(1)file:///usr/share/doc/aptitude/README をご覧ください。

    いったん aptitude を使いはじめたら、他のパッケージを インストールする手段を用いずに使い続けるのが良いでしょう。 そうでないと意図してインストールしたパッケージを追跡するという aptitude の利点を失ってしまいます。

    aptitude はフルスクリーンモードで通常小文字の 1文字の キーコマンドを受け付けます。言及しておくべきキーストロークをいくつか 示します。

         キーストローク  アクション
         F10             メニュ
         ?               キーストロークヘルプを表示
         u               パッケージアーカイブ情報を更新
         +               パッケージをアップグレードするか新たにインストールするとしてマークする
         -               パッケージを削除するとしてマークする (設定はそのまま)
         _               パッケージを purge するとしてマークする (設定も削除)
         =               パッケージを hold する
         U               全てのアップグレード可能なパッケージをアップグレードするとしてマークする
         g               選択パッケージのダウンロードおよびインストール
         q               現在のスクリーンを終了し、変更点を保存する
         x               現在のスクリーンを終了し、変更点を無視する
         Enter           パッケージの情報を閲覧
         C               パッケージの変更履歴を閲覧
         l               表示されたパッケージの制限を変更
         /               単語検索
         \               最後の検索を繰り返す
    

    apt-get のように、aptitude は選択したパッケージが Depends するパッケージをインストールできます。aptitude も インストールされるパッケージが Recommends したり Suggests する パッケージを引っ張って来るようなオプションを提供します。 メニュで F10 -> Options -> Dependency handling を選択することにより、 標準の挙動を変更できます。

    aptitude の他の利点には次があります。


    6.2.3 dselect

    Potato を含む stable リリースまでは、dselect は主要なパッケージ管理ツールでした。 Sarge では、aptitude を代わりに使うことを考慮すべきです。

    dselect を起動すると、自動的に "Required", "Important", および "Standard" パッケージの全てを選択します。

    dselect はいくらか奇妙なユーザインターフェースを持ちます。 ほとんどの人は慣れますが、4 個のコマンドがあります。 (大文字は大文字で入力 することを示します!)

         キーストローク   アクション
         Q           終了。現在の選択を認め、とにかく終了する。
                     (依存性を上書きする)
         R           戻る! 悪気はありません。
         D           しまった! dselect が考えていることは分かりません。
         U           全てを推奨される状態にセットする。
    

    DQ により、リスクを負って衝突した選択を 選ぶことができます。これらのコマンドを注意深く扱ってください。

    雑音を減らすために、 "expert" オプションを含む行を /etc/dpkg/dselect.cfg に追加してください。

    あなたのマシンでは dselect の動きが遅い場合、 インストールしたいパッケージを決定するために他の (高速な) マシン で dselect を起動して、実際にインストールするためには 低速なマシンで apt-get install を使うことを考えた方が 良いかもしれません。


    6.2.4 APT を用いてディストリビューションを追いかける

    testing ディストリビューションの変更を追いかけることには、 セキュリティ修正を含むパッケージのインストールが遅れるという副作用 がありうることに注意してください。 そのようなパッケージはまず unstable にアップロードされ、 遅れて testing に移動してきます。

    例えば、unstable から選択したパッケージをインストールしながら testing を追いかけることを許可するようなより複雑な例については apt_preferences(5) をご覧ください。

    他のパッケージを追いかけながら特定のバージョンであるパッケージをロックする 例については、examples subdirectorypreferences.testingpreferences.unstable として得られます。

    ディストリビューションを混在させる、すなわち stabletesting を一緒にしたり、 stableunstable を一緒にすると、 結果的には testingunstable から libc6 のような主要なパッケージを 引っ張って来てしまうでしょう。これらにはバグが含まれていないと保証 できません。警告しておきます。

    もう一つの例として、preferences.stable は全てのパッケージの stable へのダウングレードを強制します。

    新しいリリースの package を古いリリースのものに ダウングレードすることは Debian では公式にサポートされていません。 しかしながら、新しいバージョンがうまく動かないので、うまく動くバージョンの パッケージを再インストールする目的で特定のパッケージをダウングレード する必要があることが判明するかもしれません。 これらの以前インストールしていたパッケージファイルはローカルの /var/cache/apt/archives/ 又は リモートでは http://snapshot.debian.net/ に見つかるかもしれません。 dpkg を用いたレスキュー, 第 6.3.3 節 もご覧下さい。

    新しいリリースの ディストリビューション を古いリリースのものに ダウングレードすることも Debian では公式にサポートされていませんし、 問題を引き起こすでしょう。しかしながら、絶望に駆られた場合に 最後の手段として試す価値はあるかもしれません。


    6.2.5 aptitude, apt-getapt-cache コマンド

    上の例に記述されているように、testing を追いかける間、 次のコマンドを用いてシステムを管理できます。

    上の例では、apt-get-u オプションを与えると アップグレードされる全てのパッケージのリストを表示し、次に取る行動を ユーザに促します。 次の例は apt-get が常にこの動作を取るようにします。 aptitude は、この動作をデフォルトで実施します。

         $ cat >> /etc/apt/apt.conf << .
         // Always show packages to be upgraded (-u)
         APT::Get::Show-Upgraded "true";
         .
    

    実際にインストール、削除などをあらゆるパッケージに対して行わずに 同様の行動を取るには、--no-act を使用してください。


    6.3 Debian で生き残るためのコマンド

    本章の知識により、永遠の upgrade 生活をすごせます。 :)


    6.3.1 Debian のバグをチェックし、助けを求める

    特定のパッケージに関する問題に直面している場合、助けを求めたり、 バグレポートを出す前にこれらのサイトをチェックしましょう。 (lynx, links, および w3m は 同じように機能します)。

         $ lynx http://bugs.debian.org/
         $ lynx http://bugs.debian.org/package-name  # パッケージ名を知っている場合
         $ lynx http://bugs.debian.org/bugnumber     # バグ番号を知っている場合
    

    "site:debian.org" を含む検索語により Google (www.google.com) を検索して みてください。

    疑問がある場合は、良質のマニュアルを読んでください。CDPATH を 次のように設定してください。

         export CDPATH=.:/usr/local:/usr/share/doc
    

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

         $ cd packagename
         $ pager README.Debian # 存在する場合
         $ mc
    

    さらなるサポートリソースを Debian のサポート, 第 15 章 に挙げます。


    6.3.2 APT アップグレードのトラブルシュート

    パッケージの依存性問題は アップグレード, 第 5.3 節 に記述したように unstable 又は testing にアップグレードする場合に 発生する可能性があります。 ほとんどの場合、これはそのパッケージがまだ得られないパッケージに Depends しているためです。 これらの問題は次の手順を用いて解決できます。

         # aptitude dist-upgrade
    

    これが動かない場合、問題が解決するまで次のコマンドを繰り返し実行して ください。

         # aptitude -f upgrade          # エラーが起きても upgradeを続ける
         ... 又は
         # aptitude -f dist-upgrade    # エラーが起きても dist-upgrade を続ける
    

    時々本当に壊れたアップグレードスクリプトにより持続的な問題を起こすことがあります。この種の状況を解決するには、/var/lib/dpkg/info/packagename.{post,pre}{inst,rm} スクリプトを調べ、次を実行するのがよいでしょう。

         # dpkg --configure -a    # 部分的にインストールされたパッケージを全て設定
    

    スクリプトに設定ファイルが無いと言っている場合、対応する設定ファイルに対して /etc/ を調べてください。.new (又は同種の) 拡張子 を持つファイルが存在する場合、mv して拡張子を削除してください。

    パッケージの依存性問題は unstable 又は testing に インストールする場合に発生する場合があります。依存性を迂回する手段があります。

         # aptitude -f  install package # 壊れた依存性を上書きする
    

    これらの状況を修正するための代替手段として、equivs パッケージを使えます。 file:///usr/share/doc/equivs/README.Debianequivs パッケージ, 第 6.5.2 節 をご覧ください。


    6.3.3 dpkg を用いたレスキュー

    APT を用いて行き詰まった場合、Debian のミラーからパッケージを ダウンロードし、dpkg を用いてインストールできます。 ネットワークにアクセスできない場合、/var/cache/apt/archives/ にあるパッケージファイルのキャッシュを探せます。

         # dpkg -i fetchmail_6.2.5-4_i386.deb
    

    依存性の衝突によりこのようにパッケージをインストールするのを失敗してしまい、 本当のそのパッケージをインストールする必要がある場合、 dpkg--ignore-depends, --force-depends, や他のオプションを用いて依存性のチェックを上書きすることができます。 詳細は dpkg(8) をご覧下さい。


    6.3.4 パッケージ選択データの回復

    /var/lib/dpkg/status がなんらかの理由で壊れた場合、 Debian システムはパッケージ選択データを失い、ひどく苦しみます。 /var/lib/dpkg/status-old/var/backups/dpkg.status.* にある古い /var/lib/dpkg/status ファイルを探してください。

    このディレクトリが多くの重要なシステムデータを含んでいるので、 別のパーティションに /var/backups/ を保持するのは良い考えです。

    古い /var/lib/dpkg/status ファイルが得られない場合、まだ /usr/share/doc/ にあるディレクトリからの情報で回復できます。

         # ls /usr/share/doc | \
           grep -v [A-Z] | \
           grep -v '^texmf$' | \
           grep -v '^debian$' | \
           awk '{print $1 " install"}' | \
           dpkg --set-selections
         # dselect --expert # システムを再インストールし、必要ない物を除外する
    

    6.3.5 /var のクラッシュ後のシステム回復

    /var ディレクトリはメールなどの定期的に更新されるデータを 含むので、汚染されやすくなっています。このディレクトリを別のパーティションに 分けることにより、リスクを限定できます。故障が発生した場合、 /var ディレクトリを再構築して Debian システムを回復 する必要があるかもしれません。

    最小限 Debian が機能する /var ディレクトリの基幹部分を同一又は古い Debian バージョンから、例えば var.tar.gz などを取得し、壊れたシステムの root ディレクトリに置きます。そして

         # cd /
         # mv var var-old      # 役に立つ内容が残っている場合
         # tar xvzf var.tar.gz # Woody の基幹ファイルを使用
         # aptitude            # 又は dselect
    

    を実行します。これによりシステムが機能するようになるはずです。 パッケージ選択データの回復, 第 6.3.4 節 に記述している技術を用いてパッケージ選択データ の回復をはかどらせることができます。 ([FIXME]: 本手順はさらなる検証が必要。)


    6.3.6 ブート不能なシステムにパッケージをインストール

    Debian レスキューフロッピ/CD 又は マルチブート Linux システム上の別の パーティションを用いて Linux をブートしてください。 システムをブートする, 第 8.1 節 参照。 ブート不可能なシステムを /target にマウントし、dpkg の chroot インストールモードを使用します。

         # dpkg --root /target -i packagefile.deb
    

    そして設定を行い、問題を修正します。

    ところで、lilo が壊れてブート不能になった場合、標準の Debian レスキューディスクを用いてブートできます。 Linux をインストールしてある root パーティションを /dev/hda12 と仮定し、ランレベル 3 で起動したいとすると、lilo のプロンプトで次を 入力してください。

         boot: rescue root=/dev/hda12 3
    

    こうしてフロッピディスク上の kernel を用いてほぼ完全に機能するシステムに ブートできます。(kernel の機能やモジュールがないことによる些細な不都合が 存在するかもしれません。)


    6.3.7 dpkg コマンドが壊れた場合どうするか

    dpkg が壊れると .deb ファイルがインストール不能になります。 次の手順によりこのような状況からの回復の助けになります。(第 1 行の "links" を好みのブラウザコマンドに置き換えてください。)

         $ links http://http.us.debian.org/debian/pool/main/d/dpkg/
           ... 良好な dpkg_version_arch.deb をダウンロード
         $ su
         password: *****
         # ar x dpkg_version_arch.deb
         # mv data.tar.gz /data.tar.gz
         # cd /
         # tar xzfv data.tar.gz
    

    i386 に対しては、http://packages.debian.org/dpkg が URL としても使われます。


    6.4 Debian 涅槃コマンド

    これらのコマンドを 愉しむ と、永遠のアップグレード地獄から救い出し、Debian の 涅槃 に導くことができます。:)


    6.4.1 ファイルに関する情報

    ある特定のファイル名のパターンがどのインストール済みパッケージに 所属するかを見つけるには以下を実行します:

         $ dpkg {-S|--search} pattern
    

    もしくは同様のことを Debian アーカイブ中で見付けるには以下を実行します:

         $ wget http://ftp.us.debian.org/debian/dists/sarge/Contents-i386.gz
         $ zgrep -e pattern Contents-i386.gz
    

    もしくは特別なパッケージコマンドを使います。

         # aptitude install dlocate  
         $ dlocate filename         # dpkg -L と dpkg -S の高速な代替品
         ...
         # aptitude install auto-apt # オンデマンドのパッケージインストールツール
         # auto-apt update          # autp-apt 用の db ファイルを作成
         $ auto-apt search pattern  
         # インストールされているかに係わらず、全パッケージをパターン検索
    

    6.4.2 パッケージ情報

    パッケージアーカイブから情報を検索し、表示します。 /etc/apt/sources.list を編集して APT が適切なアーカイブを 指すようにしてください。 testing 又は unstable にあるパッケージが現在インストール しているパッケージに対してどうなっているかを知るには、 apt-cache policy を使うのが良いでしょう。

         # apt-get   check      # キャッシュを更新し、壊れたパッケージをチェック
         $ apt-cache search  pattern # テキストの説明からパッケージ検索
         $ apt-cache policy  package # パッケージの priority/dist 情報を表示
         $ apt-cache show -a package # 全 dists のパッケージ説明を表示
         $ apt-cache showsrc package # マッチしたソースパッケージの説明を表示
         $ apt-cache showpkg package # パッケージのデバッグ情報を表示
         # dpkg  --audit|-C          # 部分的にインストールされたパッケージを検索
         $ dpkg {-s|--status} package ...  # インストール済みのパッケージの説明を表示
         $ dpkg -l package ...    # インストール済みパッケージのステータスを表示 (1行毎)
         $ dpkg -L package ...    # 指定したパッケージに含まれるファイル名リストを表示
    

    apt-cache showrc は Woody リリースではドキュメント化されていませんが、使えます :)

    また、次に挙げるファイルからもパッケージ情報を検索できます(これらを見るのに mc を使っています)。

         /var/lib/apt/lists/*
         /var/lib/dpkg/available
    

    次のファイルを比較すると、最後のインストールセッションで何が起きたかが 正確に分かります。

         /var/lib/dpkg/status
         /var/backups/dpkg.status*
    

    6.4.3 APT によりキーボードに触らずにインストール

    キーボードに触らずにインストールするには、次の行を /etc/apt/apt.conf に追加してください。

         Dpkg::Options {"--force-confold";}
    

    これは aptitude -y install packagename を起動するのと 同じことです。これは全プロンプトについて自動的に "yes" で答えるので、 問題が発生するかもしれません。ゆえに慎重にこのトリックを使ってください。 apt.conf(5) および dpkg(1) をご覧ください。

    インストール済みパッケージの再設定, 第 6.4.4 節 に従い、特定のパッケージを後で設定することもできます。


    6.4.4 インストール済みパッケージの再設定

    次のコマンドを使ってインストール済みパッケージの再設定を行います。

         # dpkg-reconfigure --priority=medium package [...]
         # dpkg-reconfigure --all   # 全パッケージの再設定
         # dpkg-reconfigure locales # 特別なロケールの生成
         # dpkg-reconfigure --p=low xserver-xfree86 # X サーバの再設定
    

    debconf ダイアログモードが永続的に必要な場合は、 debconf を再設定してください。

    特別な設定スクリプトを持つプログラムがいくつかあります。 [36]

         apt-setup     - /etc/apt/sources.list の生成
         install-mbr   - Master Boot Record manager のインストール
         tzconfig      - ローカル time zoneゾーンの設定
         gpmconfig     - gpm マウスデーモンの設定
         eximconfig    - Exim (MTA) の設定
         texconfig     - teTeX の設定
         apacheconfig  - Apache (httpd) の設定
         cvsconfig     - CVS の設定
         sndconfig     - サウンドシステムの設定
         ...
         update-alternatives - 標準のコマンドの設定、例えば vim を vi に設定
         update-rc.d         - System-V init スクリプトマネージャ
         update-menus        - Debian menu システム
         ...
    

    6.4.5 パッケージの削除及びパージ

    設定ファイルを維持したままパッケージを削除します。

         # aptitude remove package ...
         # dpkg  --remove package ...
    

    設定ファイルを含め、パッケージを削除します。

         # aptitude purge package ...
         # dpkg    --purge        package ...
    

    6.4.6 古いパッケージを hold する

    例えば、libc6libc6-devdselect および aptitude install package に対して hold するには、次を実行します。

         # echo -e "libc6 hold\nlibc6-dev hold" | dpkg --set-selections
    

    aptitude install package はこの "hold" により隠されません。 aptitude upgrade package 又は aptitude dist-upgrade に対する自動ダウングレードの強行から パッケージを hold するには、 /etc/apt/preferences に次の行を追加してください。

         Package: libc6
         Pin: release a=stable
         Pin-Priority: 2000
    

    ここで、 "Package:" エントリは "libc6*" のようなエントリを 使えません。glibc ソースパッケージに同期したバージョンの 全バイナリパッケージを hold する必要がある場合、それらのパッケージを明示的に 挙げる必要があります。

    次のコマンドにより hold されたパッケージのリストを表示できます。

         dpkg --get-selections "*"|grep -e "hold$"
    

    6.4.7 stable/testing/unstable システムの混在

    apt-show-versions により、特定のディストリビューションによる パッケージのバージョンをリストできます。

         $ apt-show-versions | fgrep /testing | wc
         ... testing からのパッケージ数をカウント
         $ apt-show-versions -u
         ... アップグレード可能なパッケージ数
         $ aptitude install `apt-show-versions -u -b | fgrep /unstable`
         ... 全ての unstable パッケージを最新バージョンにアップグレード
    

    6.4.8 キャッシュされたパッケージファイルを取り除く

    APT でパッケージをインストールすると、キャッシュされたパッケージファイルが /var/cache/apt/archives に残されるので、これらを消す必要が あります。

         # apt-get autoclean # 必要ないパッケージファイルのみ削除
         # apt-get clean     # キャッシュされたパッケージファイル全てを削除
    

    6.4.9 システム設定の記録/コピー

    パッケージ選択ステータスのローカルコピーを取るには、次を実行します。

         # debconf-get-selections > debconfsel.txt
         # dpkg --get-selections "*" >myselections   # 又は \* を使用
    

    "*" により、myselections が "purge" 用の パッケージエントリにも含まれるようになります。

    このファイルを他のコンピュータに転送し、これを用いてインストール可能です。

         # dselect update
         # debconf-set-selections < debconfsel.txt
         # dpkg --set-selections <myselections
         # apt-get -u dselect-upgrade    # 又は dselect install
    

    6.4.10 stable システムへのパッケージ移植

    stable システムの部分的なアップグレードのためには、ソースパッケージを 用いて stable 環境でパッケージを再構築するのが望ましいです。 パッケージ再構築により、依存性による強引なパッケージアップグレードを避けることが できます。まず、次のエントリを /etc/apt/sources.list に追加します。

         deb-src http://http.us.debian.org/debian testing \
          main contrib non-free
         deb-src http://http.us.debian.org/debian unstable \
          main contrib non-free
    

    ここで、deb-src に対する各エントリは印刷時の制限のために 2行に分割 されていますが、実際の sources.list は 1行としてください。

    そしてソースを取得し、ローカルパッケージを作成します。

         $ apt-get update  # ソースパッケージの検索リストを更新
         $ apt-get source package
         $ dpkg-source -x package.dsc
         $ cd package-version
           ... 要求されたパッケージを検査 (.dsc ファイル中の Build-depends) し、
               それらもインストールする。"fakeroot" パッケージも必要。
         
         $ dpkg-buildpackage -rfakeroot 
         
           ...又は (サイン無し)
         $ dpkg-buildpackage -rfakeroot -us -uc #必要ならば後で "debsign" を使用
         
           ...そしてインストール
         $ su -c "dpkg -i packagefile.deb"
    

    普通、パッケージの依存性を満たすために "-dev" サフィックスが付く 2, 3個の パッケージをインストールする必要があります。debsigndevscripts パッケージにあります。auto-apt を使うと、依存性を簡単に満足させられるかもしれません。fakeroot を使うと、root アカウントの不必要な使用を避けられます。

    Woody では、依存性の問題は単純にできます。例えば、 ソースのみの pine パッケージをコンパイルするには、

         # apt-get build-dep pine
         # apt-get source -b pine
    

    だけです。


    6.4.11 ローカルパッケージのアーカイブ

    APT と dselect システムとの互換性を持つローカルパッケージの アーカイブを作成するには、Packages を作成し、 特定のディレクトリツリーに置く必要があります。

    公式の Debian アーカイブと同様のローカル deb リポジトリを次のように作成できます。

         # aptitude install dpkg-dev
         # cd /usr/local
         # install -d pool # 真のパッケージはここに置きます
         # install -d dists/unstable/main/binary-i386
         # ls -1 pool | sed 's/_.*$/ priority section/' | uniq > override
         # editor override # prioritysection を調整
         # dpkg-scanpackages pool override /usr/local/ \
            > dists/unstable/main/binary-i386/Packages
         # cat > dists/unstable/main/Release << EOF
         Archive: unstable
         Version: 3.0
         Component: main
         Origin: Local
         Label: Local
         Architecture: i386
         EOF
         # echo "deb file:/usr/local unstable main" \
            >> /etc/apt/sources.list
    

    代わりに、手早いけど汚いローカル deb リポジトリを次のように作れます。

         # aptitude install dpkg-dev
         # mkdir /usr/local/debian
         # mv /some/where/package.deb /usr/local/debian
         # dpkg-scanpackages /usr/local/debian /dev/null | \
           gzip - > /usr/local/debian/Packages.gz
         #  echo "deb file:/usr/local/debian ./" >> /etc/apt/sources.list
    

    HTTP や FTP メソッドによりディレクトリへのアクセス手段を供給し、 /etc/apt/sources.list にエントリを追加することにより、 これらのアーカイブへのリモートからのアクセスを可能にします。


    6.4.12 alien バイナリパッケージへの変換又はインストール

    alien は Red Hat rpm 形式、Stampede slp 形式、Slackware tgz 形式、そして Solaris pkg 形式で供給される バイナリパッケージを Debian deb パッケージ形式に変換することを 可能とします。他の Linux ディストリビューションからのパッケージを システムにインストールしているディストリビューションで使いたい場合、 alien を使って使用中のディストリビューションのパッケージフォーマットに変換し、インストールできます。alien は LSB パッケージもサポートします。


    6.4.13 自動でコマンドをインストールする

    auto-apt はオンデマンドのパッケージインストールツールです。

         $ sudo auto-apt update
          ... データベースを更新
         $ auto-apt -x -y run
         Entering auto-apt mode: /bin/bash
         Exit the command to leave auto-apt mode.
         $ less /usr/share/doc/med-bio/copyright # 存在しないファイルにアクセスする
          ...  このファイルを供給するパッケージをインストールする
          ... 依存するパッケージもインストールする
    

    6.4.14 インストールされたパッケージファイルを検証する

    debsums は MD5 チェックサムを用いてインストールされたパッケージファイルの検証ができます。いくつかのパッケージは MD5 チェックサムを得られません。 システム管理者が可能な一時的な修正はこのようなものです。

         # cat >>/etc/apt/apt.conf.d/90debsums
         DPkg::Post-Install-Pkgs {"xargs /usr/bin/debsums -sg";};
         ^D
    

    Joerg Wendland joergland@debian.org からのメールによる (未検証)。


    6.4.15 最適化された sources.list

    簡単に言うと、最適化された sources.list を作成するための手の込んだ努力は USA に住んでいる私にとってはあまり効果を生みませんでした。 私は apt-setup を使って近くのサイトを手動で選びました。

    apt-spy はレイテンシとバンド幅に基づいて自動で sources.list を作成します。 netselect-apt はより完全な sources.list を作成しますが、最適なミラーサイト を選択する、より優れた方法 (ping 時間の比較) を使用しています。

         # aptitude install apt-spy
         # cd /etc/apt ; mv sources.list sources.list.org
         # apt-spy -d testing -l sources.apt
    

    6.5 他の Debian 独特な点


    6.5.1 dpkg-divert コマンド

    Diversions というファイルにより、dpkg は ファイルをインストールする時に本来意図していた場所ではなく、 退避した 場所にインストールするようになります。 Diversions は Debian パッケージスクリプトで衝突が起こりうる ファイルを移動させるために使うことができます。システム管理者はパッケー ジ の設定ファイルや他のファイルを (conffiles としてマーク されていなければ) dpkg が新しいバージョンのパッケージを インストールする時にそれらのファイルを上書きしてしまわないようにするために diversion を使うことができます。 (ローカル設定の保存, 第 2.2.4 節) 参照.

         # dpkg-divert [--add]  filename # "diversion" を追加
         # dpkg-divert --remove filename # "diversion" を削除
    

    本当に必要でない限り、dpkg-divert を使わない方が 通常は良いでしょう。


    6.5.2 equivs パッケージ

    ソースからプログラムをコンパイルした場合、最も良いのは本当のローカルな debian 化したパッケージ (.deb) にすることです。 equivs を最後の手段として使います。

         Package: equivs
         Priority: extra
         Section: admin
         Description: Debian パッケージの依存関係を偽るためのパッケージ
          これはダミーパッケージで、依存情報だけを含んだ Debian パッケージの
          作成に使用することができます。
    

    6.5.3 Alternative コマンド

    vi コマンドが vim を起動するようにするには、 update-alternatives を使います。

         # update-alternatives --display vi
         ...
         # update-alternatives --config vi
           Selection    Command
         -----------------------------------------------
               1        /usr/bin/elvis-tiny
               2        /usr/bin/vim
         *+    3        /usr/bin/nvi
         
         default[*] を保つために Enter を打つか、selection 番号 2 をタイプしましょう。
    

    Debian alternatives システムのアイテムは /etc/alternatives/ に シンボリックリンクとして保持されています。

    好みの X Window 環境を設定するには、update-alternatives/usr/bin/x-session-manager/usr/bin/x-window-manager に適用します。 詳細は、X セッションのカスタマイズ, 第 9.4.5.1 節 を参照。

    /bin/sh/bin/bash 又は /bin/dash の直接のシンボリックリンクです。 古い Bashism で汚染されたスクリプトとの互換性のため、 /bin/bash を使う方が安全ですが、POSIX 互換性を強制するには、/bin/dash を使うのがより良い訓練となります。 2.4 Linux kernel にアップグレードすると、/bin/sh/bin/dash にセットしがちです。


    6.5.4 ランレベルの使い方

    インストール直後は、ほとんどの Debian パッケージはサービスを ランレベル 2 から 5 まで起動するように設定します。 これゆえに、カスタマイズされていない Debian システムではランレベル 2, 3, 4, と 5 には何の違いがありません。Debian はローカルの管理者に任せています。 ランレベルのカスタマイズ, 第 2.4.3 節 に記述しているようにランレベルをカスタマイズすることを ローカルの管理者に任せています。 これは他の有名な GNU/Linux ディストリビューションにより用いられている ランレベルの方法とは異なります。 ブートシーケンスの終わりで X ディスプレイマネージャが起動されないように ランレベル 2 で xdmgdm を無効にしたい時が 来るかもしれません。 その時はランレベル 3 から起動するように変更できます。 ランレベルについてのより詳しい情報は ランレベル, 第 2.4.2 節 をご覧下さい。


    6.5.5 デーモンサービスを無効にする

    Debian 開発者はシステムのセキュリティを深刻にとらえています。 多くのデーモンサービスは最小のサービスと機能を有効にして インストールされます。

    デーモンサービス (Exim, DHCP など) に疑いを持った場合、 ps aux を起動するか、/etc/init.d/*/etc/inetd.conf の内容を調べましょう。 また、/etc/hosts.deny ( PAM を用いたログイン制限, 第 9.2.1 節 参照 )も調べましょう。 pidof コマンドも役立ちます。 (pidof(8) 参照)

    最近の Debian において、標準では X11 は TCP/IP 経由の遠隔接続を 許可していません。 TCP/IP 越しに X を使う, 第 9.4.6 節 参照 SSH での X フォワードも無効にされています。 リモートの X サーバに接続する – ssh, 第 9.4.8 節 参照


    [ 前のページ ] [ 目次 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 次のページ ]


    Debian Reference
    第 7 章 - Debian での Linux kernel


    Debian には独自の kernel と関連モジュールの再構築方法があります。 Debian と kernel, 第 2.7 節 をご覧ください。


    7.1 Kernel (再)構築

    最新の Linux kernel をコンパイルする場合、Debian unstable から、 gccbinitulsmodule-init-tools をインストールして使用すると役に立つかもしれません。 公式の情報を得るには、file:///usr/share/doc/kernel-package/README.gz、特に最後尾を ご覧ください。

    常に変更が発生しているので、kernel のコンパイルは最も称賛される開発者 でさえも混乱を招きかねない難しい事項です。

    Manoj Srivastava の発言

    --initrd は Debian のみ cramfs パッチを必要とする。

    Herbert Xu の発言

    間違っている。CRAMFS 以外のファイルシステムを使うならば /etc/mkinitrd/mkinitrd.conf に MKIMAGE を必ず設定する必要がある。

    注意して、常に Manoj と Kent による file:///usr/share/doc/kernel-package/README.gzhttp://kernel-handbook.alioth.debian.org/ に頼ってください。 最新版の kernel をコンパイルしようとしている場合、 最新の unstable 版の kernel-package パッケージを 確実にインストールしてください。

    1 台のマシンのためにしか kernel をコンパイルする必要がないなら、 initrd は必要ありません。kernel-image パッケージにより供給される kernel とほとんど同じにしたいため、私は initrd を用います。 もし initrd を使用するなら、initrd(8)mkinitrd.conf(5) をご覧ください。


    7.1.1 古典的な方法

    オリジナルソースを以下から取得してください。

    又は Debian での 同等の kernel source を用いて次の手順を実行してください。

         # cd /usr/src
         # tar xfvz linux-whatever.tar.gz
         # rm -rf linux
         # ln -s linux-whatever linux
         # tar xfvz pcmcia-cs-whatever.tar.gz
         # ln -s pcmcia-cs-whatever pcmcia
         # cd linux
         # make menuconfig
         ... 設定を行う
         # make dep
         # make bzImage
         ... lilo / grub の設定 ...
         ... /usr/src/linux/arch/i386/boot/bzImage を boot に移動...
         ... /sbin/lilo 又は grub のための好みの方法を実行
         # make modules; make modules_install
         # cd ../pcmcia
         # make config
         # make all
         # make install
         ... 必要なモジュール名を /etc/modules に追加
         # shutdown -r now
         ... 新しい kernel を boot
    

    7.1.2 Kernel ヘッダ

    ほとんどの "normal" なプログラムには kernel ヘッダは必要なく、実際直接 使用した場合動かなくなるかもしれません。その代わり、glibc を構築するのに使った ヘッダに対してコンパイルすべきです。それらは Debian システムの /usr/include/linux/usr/include/asm にあるバージョンのものです。

    それゆえ、いくつかの古びたドキュメントが推奨しているように /usr/include/linux および /usr/include/asm から /usr/src/linux にあるディレクトリに symlink を張らないでください。

    カーネル特有のアプリケーションプログラムに特定の kernel ヘッダが 必要 ならば、include path が dir-of-particular-kernel-headers/include/linuxdir-of-particular-kernel-headers/include/asm を 指すように makefile を変更してください。


    7.2 proc filesystem により Linux kernel をチューニングする

    Linux kernel の挙動は、proc ファイルシステムを用いるとオンザフライで変更できます。

    /proc ファイルシステムを通して kernel パラメータを変更すること に関する基本的な情報は Linux source の Documentation/sysctl/* をご覧ください。

    /etc/init.d/networkingいくつかのウェブサイトにアクセスした時の奇妙な挙動, 第 3.8.5 節 には、 kernel パラメータの操作方法の例がいくつかあります。

    通常、/etc/rcS.d/S30procps.sh から起動される /etc/init.d/procps.sh を用いて /proc ファイルシステム経由でブート時に kernel を設定する手順については、 sysctl.conf(5) をご覧ください。


    7.2.1 Too many open files

    Linux kernel が "Too many open files" とエラーを出力することがあります。 これは file-max の標準値が小さい (8096) ためです。 この問題を解決するには、root で次のコマンドを実行してください。

         # echo "65536"  > /proc/sys/fs/file-max  # 2.2 と 2.4 kernel の両方で有効
         # echo "131072" > /proc/sys/fs/inode-max # 2.2 kernel のみ
    

    変更をずっと有効にしたい場合は、/etc/sysctl.conf に次の行を追加してください。

         file-max=65536   # 2.2 と 2.4 kernel の両方で有効
         inode-max=131072 # 2.2 kernel のみ
    

    7.2.2 Disk flush 間隔

    proc ファイルシステムを通じて disk flush 間隔を変更できます。 次のコマンドにより、間隔をデフォルトの 5 秒 から 1 秒 に変更されます。

         # echo "40 0 0 0 100 30000 60 0 0"  > /proc/sys/vm/bdflush
    

    本変更はファイル I/O 性能にほんの少し悪影響を与えるかもしれません。しかし、 本変更により、デフォルトの 5 秒より短い最後の 1 秒の間を除き、ファイル内容を 安全に保たれます。


    7.2.3 鈍くて古い少メモリ容量マシン

    古い少メモリ容量マシンの場合、proc ファイルシステムを通じて メモリの over-commit を有効にするとまだ役に立つかもしれません。

         # echo 1 > /proc/sys/vm/overcommit_memory
    

    7.3 2.6 カーネルと udev

    udev は /dev/ のダイナミックな置き換えです。 デバイス名は非常に短い物にもできます。 2.4 カーネルで使われた devfs は今や過去の物となりました。

    udev パッケージを kernel-image-2.6.NN で提供される新たな Debian 2.6 カーネルとともにインストールすると、 本機能が実現します。


    [ 前のページ ] [ 目次 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 次のページ ]


    Debian Reference
    第 8 章 - Debian tips


    8.1 システムをブートする

    ブートプロンプトの詳細は LDP にある BootPrompt-HOWTO をご覧ください。


    8.1.1 "root パスワードを忘れてしまった!" (その 1)

    コンソールのキーボードにアクセスできる人に限り、root パスワードを 知らずにシステムをブートして root アカウントにログオンできます。 (システムをブートするのを妨げる BIOS や lilo などの ブートローダからパスワードを要求されないことを仮定しています。)

    これは外部の boot disk や BIOS のブート設定の変更を要求しない手順 です。ここで、"Linux" は標準の Debian インストールで Linux kernel をブートするためのラベルです。

    lilo ブートスクリーンでは、boot: が表示されたら すぐに enter を押し、次のように入力します。 (自動ブートを避けるため、この時点で shift キーを押す必要があるシステム があります。また、lilo がフレームバッファを使っている場合、 タイプしたオプションを見るには TAB を押す必要があります。)

         boot: Linux init=/bin/sh
    

    この操作により、システムが kernel をブートし、標準の init の代わりに /bin/sh を起動します。今や root 権限と root シェル を獲得しました。/ は現在読み込みのみでマウントされ、 多くのディスクパーティションはまだマウントされていないので、 十分機能するシステムとするには、次を実行する必要があります。

         init-2.03# mount -n -o remount,rw /
         init-2.03# mount -avt nonfs,noproc,nosmbfs
         init-2.03# cd /etc
         init-2.03# vi passwd
         init-2.03# vi shadow
    

    (/etc/passwd の 2 番目のデータフィールドが全てのユーザ名に対して "x" である場合、そのシステムはシャドウパスワードを使用しているため、 /etc/shadow を編集する必要があります。) root パスワードを無効にするには、パスワードファイルの 2 番目のフィールド が空になるように編集してください。システムをリブートして、パスワード無しで root としてログインできるようになりました。runlevel 1 でブートすると、 (少なくとも Potato 以降の) Debian はパスワードを要求しますが、より古い システムは要求しませんでした。

    /usr/ にアクセスできない場合に備えて /bin/ に最小限のエディタを置いておくのは良い考えです。 (緊急用エディタ, 第 11.2 節 参照)

    また、sash パッケージのインストールも考慮に入れてください。 システムがブート不能に陥った場合、次を実行します。

         boot: Linux init=/bin/sash
    

    sash/bin/sh が使えなくなった場合でも sh 対話的な代替品として働きます。 これはスタティックリンクされており、多くの標準的な機能を組込み機能として 含んでいます。 (リファレンスリストのため、プロンプトで "help" をタイプしてみてください)


    8.1.2 "root パスワードを忘れてしまった!" (その 2)

    rescue disk/root disk セットからブートします。 /dev/hda3 がもともとの root パーティションの場合、 次の手順は、パスワードファイルを前述の手順と同じ程度に簡単に編集できるように します。

         # mkdir fixit
         # mount /dev/hda3 fixit
         # cd fixit/etc
         # vi shadow
         # vi passwd
    

    この手法の前述した手法に対する利点は、lilo パスワードを知る (ある場合) 必要がないことです。しかし、本手法を使うには、 システムがフロッピ又は CD からブートできるように BIOS セットアップに アクセスできる必要があります。


    8.1.3 boot 不能

    インストール中に boot ディスクを作るのをさぼっていたとしても、問題ありません。 lilo が壊れた場合、Debian インストールセットから boot disk を持ってきて、そこからシステムを boot させます。boot プロンプトでは、 root パーティション が /dev/hda12 であり、 ランレベル 3 で起動したいと仮定すると、次のコマンドを入力します。

         boot: rescue root=/dev/hda12 3
    

    そして、フロッピにある kernel を使ってほとんどフル機能のシステムにブート します。(kernel の機能やモジュールの不足によるささいな誤作動はあります。)

    システムが壊れた場合、ブート不能なシステムにパッケージをインストール, 第 6.3.6 節 をご覧ください。

    カスタムブートフロッピが必要な場合、rescue disk の readme.txt に従ってください。


    8.1.4 "boot 時に X を無効にさせてくれ!"

    unstable を追いかけることは楽しいですが、ブート中に起動する バギーな xdmgdmkdm あるいは wdm がひどく噛みつくとも限りません。

    まず boot プロンプトで次を入力して root シェルを獲得します。

         boot: Linux vga=normal s
    

    ここで、Linux はブートしたい kernel のためのラベルです。 "vga=normal" により、lilo が必ず通常の VGA モードで起動します。 そして、"s" (又は "S") は init がシングルユーザモードを呼び出す ために渡されるパラメータです。

    X の起動デーモンを全て無効にするためのいくつかの方法があります。

    ここで、rc2.d の中の数字は /etc/inittab で指定したランレベルと対応させなければなりません。また、 ?dm は全ての xdm, gdm, kdm, wdm を置き換えるために複数回コマンドを 実行する必要があることを意味します。

    このリストの最初だけが Debian での "真実の道" です。最後の方法は 簡単ですが、Debian でしか動かず、dpkg-reconfigure を使用した後は再度ディスプレイマネージャの設定を要求します。 残りは汎用のデーモンの無効化手段です。

    コンソールシェルから startx コマンドを使って X をまだ起動 できます。


    8.1.5 ブートプロンプトを使った他のブートトリック

    lilo のブートプロンプトを使ってシステムを特定のランレベル と設定でブートすることができます。詳細は BootPrompt-HOWTO (LDP) にあります。

    システムをランレベル 4 でブートさせたい場合、lilo の ブートプロンプトで次を入力してください。

         boot: Linux 4
    

    root パスワードを知っている状態でシステムを普通に動くシングルユーザモード で起動したい場合、次の例のうち 1 つを lilo のブートプロンプト で実行してください。

         boot: Linux S
         boot: Linux 1
         boot: Linux -s
    

    システムを実際よりも少ないメモリ容量を用いてブートしたい場合 (例えば 64MB のシステムで 48MB を用いる場合)、lilo ブートプロンプト で次を実行してください。

         boot: Linux mem=48M
    

    実際より多いメモリ容量をここで絶対指定しないでください。さもないと kernel がクラッシュします。64MB より多い、例えば 128MB のメモリを持っている場合、 mem=128M をブートプロンプトで実行するか、同様の行を /etc/lilo.conf に追加しないと、古い kernel や古い BIOS を 持つマザーボードは 64MB 以上のメモリを使用できません。


    8.1.6 GRUB ブートパラメータの設定

    GRUB は GNU Hurd プロジェクト由来の新しいブートマネージャであり、 Lilo より柔軟性がありますが、ブートパラメータの取り扱い方が lilo とはずいぶん異なります。

         grub> find /vmlinuz
         grub> root (hd0,0)
         grub> kernel /vmlinuz root=/dev/hda1
         grub> initrd /initrd
         grub> boot
    

    ここで、Hurd デバイス名に気づく必要があります。

         the Hurd/GRUB       Linux               MS-DOS/Windows
          (fd0)               /dev/fd0            A:
          (hd0,0)             /dev/hda1           C: (通常)
          (hd0,3)             /dev/hda4           F: (通常)
          (hd1,3)             /dev/hdb4           ?
    

    詳細は file:///usr/share/doc/grub/README.Debian.gzfile:///usr/share/doc/grub-doc/html/ をご覧ください。


    8.2 行動を記録する


    8.2.1 シェルでの行動を記録する

    システム管理者は Unix 環境において通常の PC 環境よりもより複雑な仕事 を行います。システムトラブルから回復する必要がある場合に備えて、 設定の最も基本的な意味を確実に知る必要があります。X11 ベースの GUI 設定ツールは見栄えは良く便利ですが、たびたび緊急事態に対応できません。

    このような観点で、シェルでの活動を記録することは、特に root に とっては良い習慣です。

    Emacs では、M-x shell を実行すると、バッファに記録を開始し、 C-x C-w を使うとバッファをファイルに書き出します。

    Shell では、screen を使って端末を切替える, 第 8.6.28 節 に記述されているように、screen コマンドを "^A H" 付きで実行するか、script コマンドを 使ってください。

         $ script
         スクリプトを開始しました、ファイルは typescript です
          ... 何かを行う ...
          Ctrl-D
         $ col -bx <typescript >savefile
         $ vi savefile
    

    次は script の代わりに使えます。

         $ bash -i 2>&1 | tee typescript
    

    8.2.2 X での行動を記録する

    xterm の表示を含む X アプリケーションのグラフィックな画像を記録する 必要がある場合、gimp (GUI) を使いましょう。ウィンドウごとあるいは スクリーン全体をキャプチャーできます。代替品には、xwd (xbase-clients), import (imagemagick), scrot (scrot), があります。


    8.3 サブディレクトリ全体のコピーとアーカイブ

    これらのコピーとアーカイブコマンドはシステムやデーターのバックアップの 基本となります。簡単なバックアップスクリプト例が  スクリプト例に backup として納められています。


    8.3.1 サブディレクトリ全体をコピーする基本的なコマンド

    ファイル構成を再調整する必要がある場合、ファイルのリンクを含む内容を 次のように移動します。

         標準的方法
         # cp -a /source/directory /dest/directory # GNU cp が必要
         # (cd /source/directory && tar cf - . ) | \
                 (cd /dest/directory && tar xvfp - )
         ハードリンクを含む場合、衒学的な方法が必要となります。
         # cd /path/to/old/directory
         # find . -depth -print0 | afio -p -xv -0a /mount/point/of/new/directory
         リモートにコピーする。
         # (cd /source/directory && tar cf - . ) | \
                 ssh user@host.dom (cd /dest/directory && tar xvfp - )
         リンクファイルが無い場合は次を実行する。
         # scp -pr user1@host1.dom:/source/directory \
                   user2@host2.dom:/dest/directory
    

    サブディレクトリ全体のコピーに関する次の比較情報は Manoj Srivastava (srivasta@debian.org) により debian-user@lists.debian.org で掲示されました。


    8.3.2 cp

    伝統的に、cp はシンボリックリンクを参照しませんし、ハードリンク を保つので、本当はこの仕事に向いていません。もう 1 つ考えるべきことは、 まばらなファイル (穴を持つファイル) です。

    GNU cp はこれらの制限を越えています。しかしながら、非 GNU システムでは、cp はまだこの問題を抱えています。また、 cp を用いて、小さく移植性の高いアーカイブを作成できません。

         % cp -a . newdir
    

    8.3.3 tar

    Tar は cp が持つシンボリックリンクの問題のいくつかを 解決していますが、cpio は特別なファイルを扱えるため、 伝統的な tar は使用されていません。

    tar の複数のハードリンクの操作方法は、テープ上に 1つ しかコピーを置かないことですが、コピーの名前はそのファイルを取得する ために使用される 唯一の 名前です。cpio の方法は 全リンクに対して 1つのコピーを置きますが、全リンクの名前を使ってファイル を取得できます。

    tar コマンドは .bz2 ファイルに対するオプションが Potato と Woody の間で変更されました。ですから、短縮形のオプションである -I (Potato) や -j (Woody) の代わりに、スクリプトでは --bzip2 を使ってください。


    8.3.4 pax

    新しい POSIX (IEEE Std 1003.2-1992, pages 380–388 (section 4.48) と pages 936–940 (section E.4.48)) 互換の移植性のあるアーカイブ 交換ユーティリティです。pax はアーカイブファイルの読み書き、 内容のリスト表示が行え、ディレクトリ階層のコピーもできます。pax の操作は特別なファイルフォーマットに依存せず、さまざまなアーカイブフォーマット をサポートしています。

    pax の実装はまだ新しく、未熟です。

         # apt-get install pax
         $ pax -rw -p e . newdir
          又は
         $ find . -depth  | pax -rw -p e  newdir
    

    8.3.5 cpio

    cpiocpio 又は tarアーカイブへの ファイルの操作ができます。アーカイブはディスク上の他のファイルにできますし、 磁気テープやパイプにもできます。

         $ find . -depth -print0 | cpio --null --sparse -pvd new-dir
    

    8.3.6 afio

    afiocpio フォーマットアーカイブの操作を 行うより良い手段です。般に、cpio よりも高速で、データの 変造をいくらか上品な方法で扱います。マルチボリュームなアーカイブを サポートし、さらに対話的な操作もサポートします。 afiotarcpio アーカイブ を圧縮するよりもより安全な圧縮アーカイブを作成できます。afio はバックアップスクリプト内で "アーカイブエンジン" として使うのにベストです。

         $ find . -depth -print0 | afio -px -0a new-dir
    

    私は磁気テープへのバックアップに afio を使っています。


    8.4 差分バックアップとデータ同期

    差分バックアップとデータ同期はいくつかの方法で実装できます。

    サブディレクトリ全体のコピーとアーカイブ, 第 8.3 節 に記述されているアーカイブ手法と タスクのスケジューリング (cronat), 第 8.6.27 節 に記述されている規則的なジョブの自動化を組み合わせると、すばらしい バックアップシステムとなります。

    3つの使いやすいユーティリティについて説明します。


    8.4.1 rdiff を用いた差分バックアップ

    rdiff-backup はあらゆるタイプのファイルに対して 差分バックアップによる素晴らしくシンプルなバックアップを提供します。 ~/ のほとんどを /mnt/backup にバックアップするには、 次を実行します。

         $ rdiff-backup --include ~/tmp/keep --exclude ~/tmp  ~/ /mnt/backup
    

    このアーカイブから 3 日前のデータを ~/old に復旧するには、 次を実行します。

         $ rdiff-backup -r 3D /mnt/backup ~/old
    

    rdiff-backup(1) をご覧ください。


    8.4.2 pdumpfs による日々のバックアップ

    pdumpfs は 毎日のスナップショットを保存する Plan9 の dumpfs と似たシンプルな日々のバックアップシステムです。 ある日のファイルを取得するために、あらゆる過去のスナップショットにアクセス できます。ホームディレクトリを pdumpfscron でバックアップしましょう!

    pdumpfs は送り先ディレクトリに YYYY/MM/DD の形 でスナップショットを構築します。全ソースファイルは pdumpfs が最初に起動された際にスナップショットディレクトリにコピーされます。 次回の起動からは、ディスクスペースの節約のため、pdumpfs は更新されたか、新たに作成されたファイルのみコピーし、未更新ファイルは 前日のスナップショットのファイルにハードリンクされます。

         $ pdumpfs src-dir dest-dir [dest-basename]
    

    pdumpfs(8) をご覧ください。


    8.4.3 RCS による規則的な差分バックアップ

    Changetrack はテキストベースの設定ファイルの変更点を RCS アーカイブに定期的に記録します。 changetrack(1) をご覧ください。

         # apt-get install changetrack
         # vi changetrack.conf
    

    8.5 システムフリーズからの回復


    8.5.1 プロセスを殺す

    top を起動し、どのプロセスの動きがおかしいかを調べます。 CPU 使用量でソートするためには `P' 、メモリ量でソートするには `M'、 プロセスを殺すには `k' を押します。又は、BSD スタイルの ps aux | less や System-V スタイルの ps -efH | less も使えるかもしれません。 System-V スタイルの文法では親 ID (PPID) を表示するので、 ゾンビ (defunct) となった子プロセスを殺すのに使えます。

    プロセス ID によりプロセスを殺す (又はシグナルを送る) には kill を、プロセスのコマンド名により同様のことを行うには killall を使います。良く使われるシグナルは次の通りです。

          1: HUP、デーモンを再起動
         15: TERM、通常の kill
          9: KILL、激しく kill する
    

    8.5.2 Alt-SysRq

    システム故障に対する緊急手段が kernel のコンパイルオプション "Magic SysRq key" により供給されています。i386 で Alt-SysRq を押し、r 0 k e i s u b キーのうち一つを続けて押してください。すると魔法が効果を発揮します。

    Un`r'aw は X のクラッシュの後などにキーボードを回復します。端末の ログレベルを `0' に減らすと、エラーメッセージが減少します。 sa`k' (sytem attention key) は現在の仮想端末上の全プロセスを殺します。 t`e'rminate は現在の端末上の init 以外の全プロセスを殺します。 k`i'll は init 以外の全プロセスを殺します。

    `S'ync、 `u'mount、そして re`b'oot は本当にひどい状況から脱出するための ものです。

    詳しい情報は /usr/share/doc/kernel-doc-version/Documentation/sysrq.txt.gz 又は /usr/src/kernel-version/Documentation/sysrq.txt.gz にあります。


    8.6 覚えるべき小さくて洒落たコマンド


    8.6.1 Pager

    less は標準的なページャ (ファイル内容のブラウザ) です。 ヘルプは `h' を押してください。more よりずっと多くのことが できます。lesseval $(lesspipe)eval $(lessfile) をシェルの起動スクリプトで実行することにより ブーストできます。詳細は file:///usr/share/doc/less/LESSOPEN をご覧ください。 -R オプションにより、文字をそのまま表示し、ANSI の カラーエスケープシーケンスを有効にします。less(1) をご覧ください。

    w3m もいくつかのエンコードシステム (EUC) では役に立つ ページャの代替品かもしれません。


    8.6.2 フリーなメモリ

    freetop はメモリリソースに関する良い情報を 提供します。"Mem:" 行にある "used" のサイズは心配しなくてもよいですが、 その下を読んでください。 (下の例の 38792)

         $ free -k # for 256MB machine
                      total       used       free     shared    buffers cached
         Mem:        257136     230456      26680      45736     116136 75528
         -/+ buffers/cache:      38792     218344
         Swap:       264996          0     264996
    

    物理メモリの正確な量は grep '^Memory' /var/log/dmesg により 確認できます。この場合、 "Memory: 256984k/262144k available (1652k kernel code, 412k reserved, 2944k data, 152k init)" のような出力となります。

         合計         = 262144k = 256M (1k=1024, 1M=1024k)
         dmesg でのフリーなメモリ量 = 256984k = Total - kernel - reserved - data - init
         シェルでのフリーなメモリ量 = 257136k = Total - kernel - reserved - data
    

    約 5MB は kernel が使用するため、システムにより使用不可にされています。


    8.6.3 時刻の設定 (BIOS)

         # date MMDDhhmmCCYY
         # hwclock --utc --systohc
         # hwclock --show
    

    これはシステム時刻とハードウェア時刻を MM/DD hh:mm, CCYY にセットします。 時刻はローカル時間で表示されますが、ハードウェア時間は UTC を用います。

    もしハードウェア (BIOS) 時刻が GMT に設定されている場合は、 /etc/default/rcS 中で UTC=yes と設定を変更します。


    8.6.4 時刻の設定 (NTP)

    Managing Accurate Date and Time HOWTO を参照。


    8.6.4.1 インターネットへの常時接続により時刻を設定する

    リモートのサーバ経由自動的にシステムのクロックを設定して時刻を修正します。

         # ntpdate server
    

    システムがインターネットに常時接続している場合、/etc/cron.daily/ に書いておくのがよいでしょう。


    8.6.4.2 散発的なインターネット接続で時刻を設定する

    chrony パッケージを使用してください。


    8.6.5 スクリーンセーバなどのコンソール機能の制御方法

    スクリーンセーバを無効にするには、次のコマンドを使ってください。

    Linux コンソール上では、次を実行します。

         # setterm -powersave off
    

    kon2 (kanji) コンソールのスクリーンセーバを起動します。

         # kon -SaveTime 0
    

    X 起動中には次を実行します。

         # xset s off
          又は
         # xset -dpms
          又は
         # xscreensaver-command -prefs
    

    他のコンソール機能を制御するには、対応するマニュアルを読んでください。 ターミナルの行設定を変更したり印刷するには、stty(1) も読んでください。


    8.6.6 管理データベースの検索

    Glibc は管理データベースからエントリ、すなわち、パスワード、グループ、 ホスト、サービス、プロトコル、ネットワークなどを検索するために、 getent(1) を提供しています。

         getent database [key ...]
    

    8.6.7 サウンド (ビープ音) を無効にする

    PC スピーカを常に抜いておくこともできます ;-) Bash シェルでは次を実行します。

         echo "set bell-style none">> ~/.inputrc
    

    8.6.8 コンソールのスクリーン上のエラーメッセージ

    スクリーンに出るエラーメッセージを黙らせるには、まず /etc/init.d/klogd をチェックします。このスクリプトに KLOGD="-c 3" をセットし、 /etc/init.d/klogd restart を起動します。 代わりに、dmesg -n3 を起動することもできます。

    エラーレベルの意味を示します。

    特定の使えないエラーメッセージが煩わしい場合、shutup-abit-bp6 のような些細な kernel patch を適用することを考慮に入れましょう。 (examples subdirectory で入手可能)

    他に見るべき箇所は、/etc/syslog.conf です。コンソールデバイス にメッセージが出力されるようになっているかをチェックしましょう。


    8.6.9 正しいタイプに端末を設定する

    Unix ライクシステムでの端末スクリーンは通常 (n)curses ライブラリ ルーチンを使ってアクセスされます。これらのライブラリはユーザに 適度な最適化による端末に依存しない文字端末の更新手段を与えます。 ncurses(3X)terminfo(5) をご覧ください。

    Debian システムでは、前もって定義された多数のエントリがあります。

         $ toe | less                  # 全エントリ
         $ toe /etc/terminfo/ | less   # ユーザが再定義したエントリ
    

    環境変数 TERM として選択したエントリをエクスポートします。

    Debian でないホストから Debian システムにリモートでログインした時に、xterm 用の 端末エントリが Debian でない xterm では動かない場合、 端末のタイプを "xterm" から "xterm-r6" などの機能制限されたものに変更してください。 詳細は file:///usr/share/doc/libncurses5/FAQ をご覧ください。"dumb" は terminfo 用の最小の共通部分 です。


    8.6.10 端末を正常な状態に戻す

    cat some-binary-file を実行してしまって端末が手を付けられなく なってしまった時は、次を実行します。 (タイプしてもコマンドがエコーされて見えないかもしれません)

         $ reset
    

    8.6.11 DOS から Unix スタイルにテキストファイルを変換する

    (EOF = ^M^J である) DOS テキストファイルを (EOF = ^j である) Unix テキストファイルに変換します。

         # apt-get install sysutils
         $ dos2unix dosfile
    

    8.6.12 recode によりテキストファイルを変換する

    次のコマンドにより、テキストファイルの改行コードを DOS, MAC, そして Unix 間 で変換できます。

         $ recode /cl../cr <dos.txt >mac.txt
         $ recode /cr.. <mac.txt >unix.txt
         $ recode ../cl <unix.txt >dos.txt
    

    フリーな recode はファイルの各種文字セットや surface を次のように 変換できます。

         $ recode charset1/surface1..charset2/surface2 \
           <input.txt >output.txt
    

    次に示す文字セットがよく用いられます (ロケール入門, 第 9.7.3 節 も参照)。 [37]

    次に示す surface がよく用いられます。 [38]

    詳細は、info recode にある関連の説明をごらんください。

    より目的に特化した変換ツールもあります。


    8.6.13 正規表現による置換

    FILES ファイルの全てにある FROM_REGEXTO_TEXT に置き換えます。

         $ perl -i -p -e 's/FROM_REGEX/TO_TEXT/g;' FILES ...
    

    -i は "in-place editing"、-p は "implicit loop over FILES ..." のためのオプションです。 置換が複雑な場合、パラメータ i.bak-i の代わりに 使うことで容易にエラーから回復できます。これは元のファイルをそれぞれ .bak をファイルの拡張子として追加して保存しておきます。


    8.6.14 スクリプトを使ってその場でファイルを編集する

    次のスクリプトはその場で 5–10 行と 16–20 行を削除します。

         #!/bin/bash
         ed $1 <<EOF
         16,20d
         5,10d
         w
         q
         EOF
    

    ここで、ed コマンドは vi コマンドモードコマンドと同じです。 スクリプトがファイルの後ろから編集するのを容易にします。


    8.6.15 ソースファイルから差分を取得しマージする

    次に挙げる手順は 2 つのソースファイルの差分を取り、ファイルの場所に応じて 統合された差分ファイルを file.patch0 又は file.patch1 という名前で作成します。

         $ diff -u file.old file.new > file.patch0
         $ diff -u old/file new/file > file.patch1
    

    差分ファイル (パッチファイルとも呼ばれる) はプログラムの更新箇所を送るために 使われます。差分ファイルを受け取ったパーティはこの更新を他の file に次のように適用します。

         $ patch -p0 file < file.patch0
         $ patch -p1 file < file.patch1
    

    3つの異なるバージョンのソースコードを持っている場合は、diff3 を使ってより効率的にこれらをマージできます。

         $ diff3 -m file.mine file.old file.yours > file
    

    8.6.16 大きなファイルを複数の小さなファイルに変換する

         $ split -b 650m file   # ファイルを 650MB 毎に分割
         $ cat x* >largefile    # 一つの大きなファイルにマージ
    

    8.6.17 テキストファイルテーブルからデータを取り出す

    全ての元 Debian リーダの名前と就任日がスペースで分割されたフォーマットで リストされている DPL と呼ばれるファイルを考えてみましょう。

         Ian     Murdock   August  1993
         Bruce   Perens    April   1996
         Ian     Jackson   January 1998
         Wichert Akkerman  January 1999
         Ben     Collins   April   2001
         Bdale   Garbee    April   2002
         Martin  Michlmayr March   2003
    

    これらのタイプのファイルからデータを取り出すには、Awk が良く使われます。

         $ awk '{ print $3 }' <DPL                   # 開始月
         August
         April
         January
         January
         April
         April
         March
         $ awk '($1=="Ian") { print }' <DPL          # Ian と呼ばれる DPL のリスト
         Ian     Murdock   August  1993
         Ian     Jackson   January 1998
         $ awk '($2=="Perens") { print $3,$4 }' <DPL # Perens 就任時
         April 1996
    

    Bash などのシェルもこれらのファイルを解釈するのに使えます。

         $ while read first last month year; do 
             echo $month
           done <DPL
         ... 最初の Awk の例と同じ出力
    

    ここで、read 組込みコマンドは $IFS( 内部フィールドセパレータ) を用いて行を単語単位で分割します。

    IFS を ":" に変更すると、/etc/passwd をシェルでうまくパーズ できます。

         $ oldIFS="$IFS"   # 旧値を保存
         $ IFS=":"
         $ while read user password uid gid rest_of_line; do
             if [ "$user" = "osamu" ]; then 
               echo "$user's ID is $uid"
             fi
           done < /etc/passwd
         osamu's ID is 1001
         $ IFS="$oldIFS"   # 旧値に戻す
    

    (同じことを Awk を使って行うには、FS=":" を用いてフィールド セパレータをセットします。)

    IFS はパラメータ拡張、コマンド置換、算術拡張の結果を分割するためにも シェルにより使われます。これらはダブルクォートやシングルクォートされた 単語内では発生しません。IFS の標準値は <space>, <tab>, と <newline> の組合せです。

    シェルの IFS トリックを注意深く使ってください。 シェルがスクリプトの一部を 入力 として解釈した場合、 奇妙なことが起きるかもしれません。

         $ IFS=":,"                        # ":" と ","  を IFS として使う
         $ echo IFS=$IFS,   IFS="$IFS"     # echo は Bash 組込みコマンド
         IFS=  , IFS=:,
         $ date -R                         # 単なるコマンド出力
         Sat, 23 Aug 2003 08:30:15 +0200
         $ echo $(date -R)                 # サブシェルの出力をメインシェルに入力
         Sat  23 Aug 2003 08 30 36 +0200
         $ unset IFS                       # IFS を標準にリセット
         $ echo $(date -R)
         Sat, 23 Aug 2003 08:30:50 +0200
    

    8.6.18 コマンドをパイプするためのわずかなスクリプト

    次のスクリプトはパイプの一部として素晴らしいことをします。

         find /usr | egrep -v "/usr/var|/usr/tmp|/usr/local"
                              # いくつかのファイルを除き /usr にある全ファイルを見つける
         xargs -n 1 command   # 標準入力からの全てのアイテムに対してコマンドを実行
         xargs -n 1 echo |    # スペース区切りのアイテムを行単位で分割する
         xargs echo      |    # 全ての行を 1 行にマージする
         grep -e pattern|     # patternを含む行を取り出す
         cut -d: -f3 -|
                 # : で区切られた 3 番目のフィールドを取り出す (passwd ファイルなど)
         awk '{ print $3 }' | # スペースで区切られた 3 番目のフィールドを取り出す
         awk -F'\t' '{ print $3 }' |
                 # タブで区切られた 3 番目のフィールドを取り出す
         col -bx |            # バックスペースを削除し、タブをスベースに変換する
         expand -|            # タブをスペースに変換する
         sort -u|             # 入力をソートし重複箇所を削除する
         tr '\n' ' '|         # 複数の行を 1 行に繋げる
         tr '\r' ''|          # キャリッジリターンを削除
         tr 'A-Z' 'a-z'|      # 大文字を小文字に変換する
         sed 's/^/# /'|       # 各行をコメントアウトする
         sed 's/\.ext//g'|    # .ext を削除する
         sed  -n -e 2p|       # 2 番目の行を表示
         head -n 2 -|         # 最初の 2 行を表示
         tail -n 2 -|         # 最後の 2 行を表示
    

    8.6.19 ファイルごとにループするためのわずかなスクリプト

    次の方法は各ファイルについて *.ext とのマッチングを行います。スペースを持つファイル名などを適切に扱うことを保証し、どの方法も同じように処置します。


    8.6.20 Perl ショートスクリプトの狂気

    Awk スクリプトは a2p(1) を用いれば自動的に Perl で書き直せますが、ワンライン Awk スクリプトは手動でワンライン Perl スクリプト に完璧に変換できます。例えば、

         awk '($2=="1957") { print $3 }' |
    

    は次の行のどれとも同じです。

         perl -ne '@f=split; if ($f[1] eq "1957") { print "$f[2]\n"}' |
         perl -ne 'if ((@f=split)[1] eq "1957") { print "$f[2]\n"}' |
         perl -ne '@f=split; print $f[2] if ( $f[1]==1957 )' |
         perl -lane 'print $F[2] if $F[1] eq "1957"' |
    

    上の行の perl への引数の全てのスペースはすべて削除できますし、 Perl における番号と文字列の間の自動変換の利点を利用しています。

         perl -lane 'print$F[2]if$F[1]eq+1957' |
    

    コマンドラインオプションについては perlrun(1) をご覧ください。より狂った Perl スクリプトについては、http://perlgolf.sourceforge.net が興味深いかもしれません。


    8.6.21 web ページからテキストやメーリングリストのアーカイブを取得する

    次のコマンドは web ページを読み込んでテキストファイルに整形します。 Web から設定をコピーするときに非常に役立ちます。

         $ lynx -dump http://www.remote-site.com/help-info.html >textfile
    

    ここで linksw3m も使えますが、描画に少し 違いがあります。

    これがメーリングリストのアーカイブの場合、mime contents からテキストにするには munpack を使います。


    8.6.22 web ページをきれいに印刷する

    次のコマンドは web ページを PostScript ファイルに変換して印刷します。

         $ apt-get install html2ps
         $ html2ps URL | lpr
    

    lpr又はlpd, 第 3.6.1 節 をご覧ください。また、PostScript ファイルを作成するには a2ps および mpage パッケージをチェック してみてください。


    8.6.23 マニュアルページをきれいに印刷する

    次のコマンドはマニュアルページを PostScript に変換して印刷します。

         $ man -Tps some-manpage | lpr
         $ man -Tps some-manpage | mpage -2 | lpr
    

    8.6.24 2つの PostScript や PDF ファイルをマージする

    2つの PostScript や PDF ファイルをマージできます。

         $ gs -q -dNOPAUSE -dBATCH -sDEVICE=pswrite \
           -sOutputFile=bla.ps -f foo1.ps foo2.ps
         $ gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite \
           -sOutputFile=bla.pdf -f foo1.pdf foo2.pdf
    

    8.6.25 コマンドの実行時間を計測する

    プロセスにより使用された時間を表示します。

         # time some-command >/dev/null
         real    0m0.035s       # 壁掛け時計の時間 (真の経過時間)
         user    0m0.000s       # ユーザモードでの時間
         sys     0m0.020s       # kernel モードでの時間
    

    8.6.26 nice コマンド

    起動時にコマンドの nice 値をセットするには、nice (GNU の shellutils パッケージに収録) を使ってください。 renice (bsdutils) や top も プロセスを renice できます。nice 値が 19 の場合はプロセスは最低速度 (最低の優先度) なプロセスです。負の nice 値は "not-nice" であり、 -20 では最速 (最高の優先度) なプロセスです。スーパーユーザだけが 負の nice 値をセットできます。

         # nice  -19 top                                         # 非常に nice
         # nice --20 wodim -v -eject speed=2 dev=0,0 disk.img # 非常に高速
    

    極端な nice 値はシステムに悪影響を及ぼすことが時々あります。注意して このコマンドを使ってください。


    8.6.27 タスクのスケジューリング (cronat)

    Linux で仕事をスケジューリングするには、cronat を使いましょう。at(1)crontab(5)crontab(8) をご覧ください。

    定期的にスケジューリングするイベントを設定するには、crontab -e コマンドを起動して crontab ファイルを作成したり編集します。 crontab ファイルの例:

         # (/etc/passwd の指定に関らず) コマンド実行に /bin/sh を使用する。
         SHELL=/bin/sh
         # (この crontab の所有者に関らず) あらゆる出力を `paul' にメールする。
         MAILTO=paul
         # 分 時 月内日 月 曜日 コマンド (Day... are OR'ed)
         # 毎日、日付変更の 5 分後に実行する
         5 0 * * *       $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
         # 毎月初日の 2:15pm に実行する -- 出力は paul にメールされる
         15 14 1 * *     $HOME/bin/monthly
         # 平日の午後 10 時に実行してジョーを心配させる
         0 22 * * 1-5 mail -s "午後 10時だ" joe%ジョー、%%お前の子どもはどこだい?%
         23 0-23/2 * * * echo "毎日 0, 2, 4..時 23 分に実行する"
         5 4 * * sun     echo "日曜 4時 5分に実行する"
         # 毎月第一日曜日の午前 3時 40分に実行する
         40 3 1-7 * *   [ "$(date +%a)" == "Mon" ] && command -args
    

    一度きりの仕事をスケジューリングするには、at コマンドを起動します。

         $ echo 'command -args'| at 3:40 monday
    

    8.6.28 screen を使って端末を切替える

    screen プログラムにより、単独の実際の端末又は 端末エミュレータウィンドウ上で複数の仮想端末を起動させ、 それぞれの端末で固有のの対話型シェルを持たせることが可能となります。 Linux の仮想端末や複数の xterm ウィンドウを使っている場合でさえも、 次に示す screen の豊富な機能セットを探検する価値はあります。


    8.6.28.1 遠隔アクセスのシナリオ

    リモートターミナルからや VT100 ターミナルプログラムを使って Linux マシンに よくログインする場合、screenを使うと detach (切り離し) 機能により生活がより簡単になります。

  • ダイアルアップ接続経由でログインし、いくつかのウィンドウでエディタや 他のプログラムを開いて複数の screen を起動します。

  • 突然端末を離れることが必要になりましたが、ハングアップすることにより 今までやった仕事を失いたくありません。

  • ^A d をタイプしてセッションを デタッチ してログアウトします (又は、より素早くやるには、^A DD をタイプして screen をデタッチして screen 自身をログアウト します。)

  • 再びログインする時に、screen -r コマンドを入力すると、 screen は魔法のように前に開いていたウィンドウ全てを リアタッチ します。


  • 8.6.28.2 典型的な screen コマンド

    いったん screen を始めると、標準では ^A である コマンドキーストロークを除く全てのキーボード入力が現在のウィンドウに 送られます。全ての screen コマンドは ^A に加えて さらに一つのキー [に加えてパラメータ] をタイプすることにより入力されます。 役立つコマンドを挙げます。

         ^A ?     ヘルプスクリーンを表示 (キーバインドダイアログ)
         ^A c     新規ウィンドウを作成してそこに切替える
         ^A n     次のウィンドウに移動
         ^A p     前のウィンドウに移動
         ^A 0     ウィンドウナンバー 0 に移動
         ^A w     ウィンドウリストを表示
         ^A a     カレントウィンドウにキーボード入力として Ctrl-A を送信
         ^A h     カレントウィンドウのハードコピーをファイルに書き出す
         ^A H     カレントウィンドウのファイルへのログ記録を開始/終了
         ^A ^X    端末をロック (パスワードによる保護)
         ^A d     ターミナルからスクリーンセッションをデタッチする
         ^A DD    スクリーンセッションをデタッチしてログアウトする
    

    これは screen コマンドと機能の小さなサブセットに過ぎません。 screen にやらせたいことが何かあるなら、たぶんできるでしょう。 詳細は screen(1) をご覧ください。


    8.6.28.3 screen セッションでのバックスペースと Ctrl-H

    screen を起動中にバックスペースや Ctrl-H が動かないことに 気づいた場合、 /etc/screenrc を編集し、次の行を見つけたら コメントアウトしてください。(すなわち、この行の先頭に "#" を追加してください)

         bindkey -k kb stuff "\177"
    

    8.6.28.4 X 用の screem と等価なプログラム

    xmove を調べてください。xmove(1) をご覧ください。


    8.6.29 ネットワークテストの基礎

    netkit-ping, traceroute, dnsutils, ipchains (2.2 kernel 用), iptables (2.4 kernel 用), そして net-tools パッケージをインストールして次を実行します。

         $ ping yahoo.com            # インターネット接続をチェック
         $ traceroute yahoo.com      # IP パケットを追跡
         $ ifconfig                  # ホストの設定をチェック
         $ route -n                  # ルーティング設定をチェック
         $ dig [@dns-server.com] host.dom [{mx|any}] |less
               # dns-server.com による {mx|any} レコード
               # に対する host.dom DNS レコードをチェックする
         $ ipchains  -L -n |less     # パケットフィルタをチェック (2.2 kernel 用)
         $ iptables -L -n |less      # パケットフィルタをチェック (2.4 kernel 用)
         $ netstat -a                # 開いているポート全てを見つける
         $ netstat -l --inet         # 接続待ちのポートを見つける
         $ netstat -ln --tcp         # 接続待ちの TCP ポート番号を見つける
    

    8.6.30 ローカルのスプールからメールをフラッシュする

    ローカルスプールからメールをフラッシュするには、次を実行します。

         # exim4 -q    # 送信待ちメールをフラッシュする
         # exim4 -qf   # 全メールをフラッシュする
         # exim4 -qff  # frozen したメールもフラッシュする
    

    -qff オプションを /etc/ppp/ip-up.d/exim スクリプト にオプションとして入れるのが良いかもしれません。 Woody 以前では、exim4exim に置き換えてください。


    8.6.31 frozen したメールをローカルスプールから削除する

    ローカルスプールから frozen したメールを配送エラーメッセージを付けて削除 するには、次を実行します。

         # exim4 -Mg `mailq | grep frozen | awk '{ print $3 }'`
    

    Woody 以前では、exim4exim に置き換えてください。


    8.6.32 mbox の内容を再配送する

    ホームディレクトリが満杯になり、procmail が失敗する場合、 /var/mail/username からホームディレクトリにある ソートされたメールボックスにメールを手動で送信する必要があります。 ホームディレクトリにディスクスペースを確保してから、次を実行します。

         # /etc/init.d/exim4 stop
         # formail -s procmail </var/mail/username
         # /etc/init.d/exim4 start
    

    Woody 以前では、exim4exim に置き換えてください。


    8.6.33 ファイルの内容をクリアする

    ログファイルなどのファイルの内容をクリアにするには、rm を使って ファイルを削除してから新しい空のファイルを作成しないでください。 ファイルは削除して作成する間にまだアクセスされるかもしれないからです。 次の方法はファイルの内容をクリアにします。

         $ :>file-to-be-cleared
    

    8.6.34 ダミーファイル

    次のコマンドはダミー又は空のファイルを作成します。

         $ dd if=/dev/zero    of=filename bs=1k count=5 # 5KB の空の内容
         $ dd if=/dev/urandom of=filename bs=1M count=7 # 7MB のランダムな内容
         $ touch filename # 0B ファイルを作成 (既にある場合、mtime を更新)
    

    例えば、最も実用的な使いかたとして、Debian のブートフロッピから 実行される次のコマンドはハードディスク /dev/hda の内容を 完全に削除します。

         # dd if=/dev/urandom of=/dev/hda ; dd if=/dev/zero of=/dev/hda
    

    8.6.35 chroot

    chroot プログラム (chroot(8)) は リブートせずに単独のシステムで同時に異なる GNU/Linux 環境を起動することを 可能にします。

    また、低速なサテライトマシンを NFS マウントし、そこをより高速なマシンが chroot ポイントとして apt-getdselect のような リソース食いなプログラムを実行することもできます。


    8.6.35.1 chroot を使って異なる Debian ディストリビューションを起動する

    Sarge にある debootstrap コマンドを使うと、chroot した Debian 環境を容易に構築できます。 Sarge 以降のディストリビューションでは、適切なオプションを付ける代わりに cdebootstrap コマンドを使えるかもしれません。 例えば、高速なインターネットアクセス環境を持っており、 /sid-root に Sid の chroot を作成するには、 次を実行します。

         main # cd / ; mkdir /sid-root
         main # debootstrap sid /sid-root http://ftp.debian.org/debian/
         ... システム全体がダウンロードされるのを監視する
         main # echo "proc /sid-root/proc proc none 0 0" >> /etc/fstab
         main # mount proc /sid-root/proc
         main # mount /dev/ /sid-root/dev -o bind
         main # cp /etc/hosts /sid-root/etc/hosts
         main # chroot /sid-root /bin/bash
         chroot # cd /dev; /sbin/MAKEDEV generic ; cd -
         chroot # apt-setup # set-up /etc/apt/sources.list
         chroot # vi /etc/apt/sources.list # source を unstable が指すように編集
         chroot # dselect  # aptitude を使って、mc や vim をインストールしてもよい :)
    

    この時点で完全に機能する Debian システムを持っているはずです。 ここではメインの Debian 環境に影響を与える恐れなく動きまわれます。

    この debootstrap のトリックは Debian ではなく他の GNU/Linux ディストリビューションのインストールディスクを使って Debian をインストール するのにも使えます。


    8.6.35.2 chroot 用のログイン設定

    chroot /sid-root /bin/bash をタイプするのは簡単ですが、 意図せずに環境変数を全て引き継いでしまったりします。chroot に直接ログイン できる別の仮想端末で他のログインプロセスを起動するのがよりよい方法です。

    標準の Debian システムでは、tty1 から tty6 は Linux 端末を起動し、tty7 は X Window を起動します。例えば tty8 を chroot 化された端末に設定しましょう。 chroot を使って異なる Debian ディストリビューションを起動する, 第 8.6.35.1 節 に記述したように chroot システムを作成した後、 メインシステムの root シェルから次をタイプします。

         main # echo "8:23:respawn:/usr/sbin/chroot /sid-root "\
                "/sbin/getty 38400 tty8"  >> /etc/inittab
         main # init q    # init のリロード
    

    8.6.35.3 chroot 用の X 設定

    chroot で最新の X や GNOME を安全に起動したいですか? これは可能です。 次の例は仮想端末 vt9 で GDM を起動させます。

    まず chroot を使って異なる Debian ディストリビューションを起動する, 第 8.6.35.1 節 に記述している方法を用いて chroot システム をインストールします。メインシステムの root から chroot システムに 主要な設定ファイルをコピーします。

         main # cp /etc/X11/XF86Config-4 /sid-root/etc/X11/XF86Config-4
         main # chroot /sid-root # 又は chroot の端末を使う
         chroot # cd /dev; /sbin/MAKEDEV generic ; cd -
         chroot # apt-get install gdm gnome x-window-system
         chroot # vi /etc/gdm/gdm.conf # [servers] セクションの vt7 を vt9 に書き換える
         chroot # /etc/init.d/gdm start
    

    ここで、/etc/gdm/gdm.conf は最初の仮想端末を vt7 から vt9 に変更しました。

    今 chroot での完全な X 環境とメインシステムの間を Linux 仮想端末 を切替えること、例えば Ctrl-Alt-F7 や Ctrl-Alt-F9 を使うことにより 簡単に切替えることができます。お楽しみに!

    [FIXME] Add a comment and link to the init script of the chrooted gdm.


    8.6.35.4 chroot を使って他のディストリビューション を起動する

    他の Linux ディストリビューションのための chroot 環境も簡単に作れます。 他のディストリビューションのインストーラを使って別のパーティションにシステム をインストールします。その root パーティションが /dev/hda9 とすると、次のようになります。

         main # cd / ; mkdir /other-dist
         main # mount -t ext3 /dev/hda9 /other-dist
         main # chroot /other-dist /bin/bash
    

    そして chroot を使って異なる Debian ディストリビューションを起動する, 第 8.6.35.1 節, chroot 用のログイン設定, 第 8.6.35.2 節, や chroot 用の X 設定, 第 8.6.35.3 節 にある手順を進めます。


    8.6.35.5 chroot によりパッケージを作成する

    より特化した chroot パッケージである pbuilder は chroot システムを構築し、chroot 内でパッケージを作成します。 パッケージの build-dependencies が正しいかどうかをチェックしたり、 不必要で間違った構築依存性がパッケージに存在しないかを確認するための 理想的なシステムです。


    8.6.36 ハードリンクのチェック方法

    2つのファイルがハードリンクを使った同じファイルかどうかチェックするには次を 実行します。

          
         $ ls -li file1 file2
    

    8.6.37 ハードディスクイメージファイルを mount する

    file.img がハードディスクの内容のイメージを含んでおり、 オリジナルのハードディスクのディスク設定が xxxx = (bytes/sector) * (sectors/cylinder) であった場合、 次のコマンドはこのイメージを /mnt にマウントします。

         # mount -o loop,offset=xxxx file.img /mnt
    

    ほとんどのハードディスクは一セクタあたり 512 バイトであることに 注意してください。


    8.6.38 Samba

    Windows からファイルを取得する基本的な方法は次の通りです。

         # mount -t smbfs -o username=myname,uid=my_uid,gid=my_gid \
                 //server/share /mnt/smb  # Windows ファイルを Linux にマウント
         # smbmount //server/share /mnt/smb \
                 -o "username=myname,uid=my_uid,gid=my_gid"
         # smbclient -L 192.168.1.2 # コンピュータ上の共有のリスト
    

    Linux から Samba の隣人は次のようにチェックできます。

         # smbclient -N -L ip_address_of_your_PC | less
         # nmblookup -T "*"
    

    8.6.39 他の OS のファイルシステムを扱うためのユーティリティ

    他の OS のファイルシステムの多くを Linux kernel はサポートしており、 単にマウントすることによりファイルシステムを含むデバイスにアクセスできます。 特定のファイルシステムのために、デバイスをマウントせずにファイルシステムに アクセスするための専用のツールが存在します。これは kernel のファイルシステム のサポートを必要としないようにユーザスペースのプログラムとして実装されて います。

    MS-DOS FAT ファイルシステムの作成やチェックを行うには、 dosfstools が役立ちます。


    8.7 注意すべき典型的な間違い

    ここに危険な行動の例をいくつか挙げます。特権アカウント root を使う 場合、副作用はさらに増大します。


    8.7.1 rm -rf .*

    ".*" は "." と ".." を含むように拡張されるので、 ワイルドカードファイル名をコマンド行引数で "rm -rf .*" のように 使うと危険な結果をもたらす危険があります。 幸いにも、 Debian ディストリビューションに含まれている "rm" コマンド の最新版では、引数ファイル名の健全性を検査し、"." と ".." を 削除します。しかし、これはいつも成り立つとは限りません。 ワイルドカードファイル名がどのように機能するかを知るには、次をお試しください。


    8.7.2 rm /etc/passwd

    Debian システムは /etc/passwd のような重要なファイルを 間違いにより失うことに対して丈夫です。Debian システムはこれらを /var/backups/ に定期的にバックアップします。 これらのファイルを回復させたら、適切な権限を手動でセットしましょう。

         # cp /var/backups/passwd /etc/passwd
         # chmod 644 /etc/passwd
    

    パッケージ選択データの回復, 第 6.3.4 節 をご覧ください。


    [ 前のページ ] [ 目次 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 次のページ ]


    Debian Reference
    第 9 章 - Debian システムのチューニング


    本章はシステム設定の基本をコマンドラインインターフェース のみで説明します。本章を読む前に Debian システムインストールのヒント, 第 3 章 を読んで下さい。

    セキュリティに関して関心があるなら、 harden-doc パッケージにある Securing Debian Manual を読んでください。


    9.1 システムの初期化

    Debian は Systen V 形式の init スクリプトシステムを採用しています。 イントロダクションとして init プログラム, 第 2.4.1 節 をご覧ください。


    9.1.1 init スクリプトのカスタマイズ

    init スクリプトの挙動を制御する最も易しい方法は /etc/default/ ディレクトリにある init スクリプトのような名前のファイルにある環境変数の 指定を変更することです。 [39] 例えば、/etc/default/hotplug/etc/init.d/hotplug の挙動を制御するために使えます。 /etc/default/rcS ファイルは motdsulogin などのブート時の標準をカスタマイズするために使えます。

    これらの変数を変更することにより望みの挙動を実現できない場合は、 init スクリプト自身を修正できます。これらは全て設定ファイルです。


    9.1.2 システムのログ記録をカスタマイズする

    システムのログモードは /etc/syslog.conf を使って設定可能です。 システムのログファイルに色づけするためのプログラムについては colorize パッケージをチェックしてください。 又、syslogd(8)syslog.conf(5) もご覧ください。


    9.1.3 ハードウェアの最適化

    Debian でシステム管理者に管理が任されているハードウェアの最適化設定はあまり ありません。

    noatime オプション付でファイルシステムをマウントするのも ファイルへの読み込みアクセスが高速化するには非常に効率的です。 fstab(5)mount(8) をご覧ください。

    proc ファイルシステムを通じて Linux kernel 自身により直接チューンできる ハードウェアもあります。proc filesystem により Linux kernel をチューニングする, 第 7.2 節 をご覧ください。

    Debian には特定のハードウェアに特化した設定ユーティリティが数多く存在します。 これらの多くはノート PC に特定したニーズに対応しています。ここに Debian で 得られるいくつかの興味深いパッケージを挙げます。

    ここで、ACPI は APM より新しい電源管理システムのフレームワークです。

    これらのパッケージのいくつかは特別な kernel モジュールを要求します。 これらは多くの場合、既に最新の kernel ソースに含まれています。 問題が発生した場合、kernel に最新のパッチを適用する必要があるかもしれません。


    9.2 アクセス制限


    9.2.1 PAM を用いたログイン制限

    PAM (Pluggable Authentication Modules) により、ユーザのログイン方法を制御 できます。

         /etc/pam.d/*             # PAM 制御ファイル
         /etc/pam.d/login         # ログイン用の PAM 制御ファイル
         /etc/security/*          # PAM モジュールパラメータ
         /etc/securetty           # 端末による root でのログインを制御
         /etc/login.defs          # ログインの挙動を制御
    

    自分でリスクを負って、安全ではないがパスワード無しで端末にログインしたい 場合は、/etc/pam.d/login の内容を次のように変えてください。

         #auth       required   pam_unix.so nullok
         auth       required   pam_permit.so
    

    パスワード無しで X コンソールにログインするために同様のトリックを xdm, gdm などに適用できます。

    一方、良いパスワードポリシーを実施したい場合には、次のように cracklib2 をインストールして /etc/pam.d/passwd をセットしてください。

         password required       pam_cracklib.so retry=3 minlen=6 difok=3
    

    ワンタイムログインパスワードも役に立つかもしれません。 この目的には、passwd コマンドを -e オプション付で 使ってください。passwd(1) をご覧ください。

    Bash シェルではプロセスの最大数を ulimit -u 1000 としてセット できますし、/etc/security/limits.conf で PAM から設定 することもできます。core のような他のパラメータも 同様に設定できます。PATH の初期値はシェル起動スクリプトの 起動前に /etc/login.defs によりセットできます。

    PAM のドキュメントは libpam-doc パッケージで パッケージングされています。Linux-PAM システム管理者ガイド は PAM の設定、必要なモジュールなどについてカバーしています。この ドキュメントは Linux-PAM アプリケーション開発ガイドLinux-PAM モジュール開発者ガイド も含んでいます。


    9.2.2 "なぜ GNU suwheel グループを サポートしていないのか"

    これは Richard M. Stallman による古い info su ページの末尾にある 有名なフレーズです。心配ありません。Debian にある現在の su は PAM を使っているので、su が使える能力を /etc/pam.d/su にある pam_wheel.so を使って あらゆるグループに対して制限できます。次の設定は Debian システムの adm グループを BSD の wheel グループと同じようにセットし、 このグループに属するメンバーがパスワード無しで su を使用することを許可します。

         # /etc/pam.d/su において反 RMS 設定を行う
         auth       required   pam_wheel.so group=adm
         
         # Wheel メンバーがパスワード無しで suを使えるようにする
         auth       sufficient pam_wheel.so trust group=adm
    

    9.2.3 標準で存在するグループの目的

    興味深いグループがいくつか存在します。

    完全なリストは、Woody では harden-doc パッケージでも見つかる Securing Debian Manual の "FAQ" セクションをご覧ください。 又、新しい base-passwd (3.4.6 以降) にも信頼できる リスト: file:///usr/share/doc/base-passwd/users-and-groups.html が含まれます。


    9.2.4 – sudo を使ってより安全に作業をする

    私の sudo の使いかたはほとんど自分のミスからの防御が目的です。 個人的には、sudo を使うことは、常に root としてシステムを使う ことに対するより良い代替手段と考えます。

    sudo をインストールして /etc/sudoers にあるオプションを 設定して有効にします。また、file:///usr/share/doc/sudo/OPTIONS にある sudo グループ機能を調べます。

    設定サンプルは "staff" グループのメンバが sudo の元で root としてあらゆるコマンドを起動することと "src" メンバが sudo の元で root として選ばれたコマンドを起動することを許可します。

    sudo の利点は、ユーザの普通のログインパスワードしか必要とせず、 その行動がモニタできるということです。これはシステム管理者補にいくらかの 権限を与える良い方法です。例えば、

         $ sudo chown -R myself:mygrp .
    

    もちろん root パスワードを知っている場合、(ほとんどのホームユーザがしているように) ユーザアカウントから root としてコマンドを起動できます。

         $ su -c "shutdown -h now"
         Password:
    

    (管理者アカウントの sudo 権限を強化すべきだと知っていますが、 これは私のホームサーバなので、まだ困っていません。)

    通常のユーザが root 権限でコマンドを実行することを許可するプログラムが 他にあります。super パッケージをご覧ください。


    9.2.5 サービスへのアクセスを制限する

    インターネット スーパーサーバ すなわち inetd は ブート時に /etc/init.d/inetd のシンボリックリンクである /etc/rc2.d/S20inetd (ランレベルが 2 の場合) により起動されます。 基本的に、inetd は 1 つの起動中のデーモンが複数の他のデーモン を起動し、システムの負荷を低減することを許可します。

    サービス要求が届いた時には常に /etc/protocols/etc/services にあるデータベース を検索することによりプロトコル並びにサービスが識別されます。 そして inetd は通常のインターネットサービスを /etc/inetd.conf データベース、 Sun-RPC ベースのサービスを /etc/rpc.conf にあるデータベースから 捜し出します。

    システムのセキュリティのために、/etc/inetd.conf にある 使用しないサービスを必ず無効化してください。 Sun-RPC サービスは NFS や他の RPC ベースのプログラムが必要とします。

    時々、inetd は意図したサーバを直接起動しませんが、 tcpd TCP/IP デーモンラッパプログラムが意図したサーバ名を用いて /etc/inetd.conf にある引数として起動されます。

    この場合、tcpd は要求を記録した後に適切なサーバプログラムを 起動し、/etc/hosts.deny/etc/hosts.allow を使ったいくつかの付随的な検査を行います。

    最近の Debian システムで遠隔アクセスに問題が発生した場合、 /etc/hosts.deny に "ALL: PARANOID" という行が存在する 場合はこれをコメントアウトしてください。

    詳細については inetd(8), inetd.conf(5), protocols(5), services(5), tcpd(8), hosts_access(5), そして hosts_options(5) をご覧ください。

    Sun-RPC についての詳細は、 rpcinfo(8), portmap(8), そして file:///usr/share/doc/portmap/portmapper.txt.gz をご覧ください。


    9.2.6 集権的認証 – LDAP

    Lightweight Directory Access Protocol (LDAP) を使いましょう。 以下を参照してください。


    9.3 CD ライター

    ATAPI/IDE インターフェースを用いた CD ライターは最近非常にポピュラーな 選択肢になっています。640 MB 以下の容量しか必要としないホームユーザ にとってのシステムバックアップとアーカイブのための素晴らしい媒体です。 CD ライターに関する最も信頼できる情報は、LDP CD-Writing-HOWTO をご覧ください。


    9.3.1 導入

    まず、CD ライターに送るデータが中断すると、CD に回復できない被害が発生します。 最近のデバイスは対バッファアンダーラン対策をサポートしており、これは デフォルトで有効にされています。 できるだけ大きなバッファを持つ CD ライターを入手してください。 お金を問わないならば、ATAPI/IDE に拘らず、SCSI を使ってください。 接続する IDE インターフェースを選択する場合、ISA バス上 (SB16 カード など) にあるものよりも PCI バス上 (マザーボードにあるものなど) にあるものを 使ってください。

    CD ライターが IDE に接続されていると、Linux 2.2 kernel と 2.4 kernel では 通常の IDE CD ドライバの代わりに IDE-SCSI ドライバが働きます。 又、IDE-SCCI ドライバを有効にするには SCSI generic ドライバが必要となります。 最新のディストリビューション (2001 年 3 月現在)により配布されている kernel の使用を仮定すると、CD を焼くためには 2つの可能なアプローチが存在します。

    Linux 2.6 カーネルの場合には、通常の IDE ドライバーを使い CD-RW デバイスに /dev/hdx と言ったデバイス名で直接アクセスするべきです。 こうすれば DMA が使えます。


    9.3.2 アプローチ 1: モジュール + lilo

    Debian パッケージの kernel を使っている場合は、/etc/lilo.conf に次の行を追加してください。複数のオプションを使う場合、スペースでそれらを 区切ってください。

         append="hdx=ide-scsi ignore=hdx"
    

    ここで CD ライターの場所は、ide-scsi ドライバを通してアクセスする場合、 hdx として示されます。ここで x は、 次のいずれかを表します。

         hda          プライマリ IDE ポートのマスター
         hdb          プライマリ IDE ポートのスレーブ
         hdc          セカンダリ IDE ポートのマスター
         hdd          セカンダリ IDE ポートのスレーブ
         hde から hdh  外部 IDE ポート又は ATA66/100 IDE ポートに接続されたドライブ
    

    root で次のコマンドをタイプすることにより、全設定が有効になります。

         # lilo
         # shutdown -h now
    

    9.3.3 アプローチ 2: kernel 再構築

    Debian は kernel を作るために make-kpkg を用います。 複数の kernel イメージを構築するため、make-kpkg の 新しい --append_to_version オプションを用います。 Debian での Linux kernel, 第 7 章 をご覧ください。

    make menuconfig を通じて次のセットアップを使用してください。


    9.3.4 設定後のステップ

    次を実行することによりブート中に kernel の CD ライターのサポートを有効に できます。

         # echo ide-scsi >>/etc/modules
         # echo sg       >>/etc/modules
         # cd /dev; ln -sf scd0 cdrom
    

    手動により CD ライターを有効にするには次を実行します。

         # modprobe ide-scsi
         # modprobe sg
    

    リブート後、このように CD ライターのインストールをチェックできます。

         $ dmesg|less
         # apt-get install wodim
         # wodim -scanbus
    

    wodim は、Sarge 以前のディストリビューションに含まれる有名な cdrecord プログラムから分岐したものです。 Sarge 以前のプログラムを使う場合、wodimcdrecord に置き換えてください。

    [Warren Dodge による] CD-ROM と CD-R/RW がシステムに同時に存在する場合、時々 ide-scsiide-cd の間で衝突が発生することがありえます。 /etc/modutils/aliaese に次の行を追加して、 update-modules を起動してからリブートしてみてください。

         pre-install      ide-scsi      modprobe ide-cd
    

    この設定は IDE ドライバを ide-scsi の前にロードさせます。 IDE ドライバ ide-cd は ATAPI CD-ROM を制御します。 — これは ide-scsi が制御するデバイスを無視するだけです。


    9.3.5 CD イメージファイル (ブータブル)

    target-directory/ にあるファイルの CD イメージを cd-image.raw として作成するには、フロッピドライブにブートフロッピを挿入して次を 実行します。 (ブータブルな Joilet TRANS.TBL が有効化されたフォーマット。 ブート不能な場合は、-b-c オプションを取る)

         # dd if=/dev/fd0 target-directory/boot.img 
         # mkisofs -r -V volume_id -b boot.img -c bootcatalog -J -T \
                 -o cd-image.raw target_directory/
    

    ブータブル DOS CD-ROM を作るのは面白いハックです。通常の DOS ブートフロッピ ディスクイメージは boot.img にあり、CD-ROM は DOS フロッピが A ドライブにあるかのようにブートします。これを freeDOS を使って行うとより面白いかもしれません。

    この CD イメージはループバックデバイスによりマウントして検査できます。

         # mount -t iso9660 -o ro,loop cd-image.raw /cdrom
         # cd /cdrom
         # mc
         # umount /cdrom
    

    9.3.6 CD ライター (R,RW) に書き込む

    まず次のようにテストを行います。 (倍速と仮定)

         # nice --10 wodim -dummy speed=2 dev=0,0 disk.img
    

    結果が OK ならば、CD-R に次のように書き込みます。

         # nice --10 wodim -v -eject speed=2 dev=0,0 disk.img
    

    又は CD-RW ディスクに次のように書き込みます。

         # nice --10 wodim -v -eject blank=fast speed=2 dev=0,0 disk.img
    

    次のようにした方が良い CD-RW ドライブもあります。

         # nice --10 wodim -v blank=all speed=2 dev=0,0 disk.img
    

    に続いて

         # nice --10 wodim -v -eject speed=2 dev=0,0 disk.img
    

    を実行します。 この 2 ステップは消去作業中に、書き込み作業を妨害するのを防ぐために 必要となります。nice の引数は幾らか調整が必要となる かもしれません。


    9.3.7 CD イメージファイルの作成

    CD-R や商用 CD には、dd によるコピーができなくなるように、 終端に壊れたセクタを持つものがあります。(Windows 98 CD はこの 1 つです) wodim パッケージには readom コマンドが付随しています。(cdrecordパッケージには、代わりに readcd が含まれます) このコマンドを使うと、CD の内容をコピーしてイメージファイルを作成できます。 データディスクの場合、マウントして df を実行することにより、 実際のサイズがわかります。 そのブロック数を 2 で割ると実際の CD セクター数がわかります。 (1セクタ = 2048 byte) そして、readom を次に示すオプション付きで実行し、 作成されたディスクイメージを使って CD-R/RW に書き込めます。

         # readom dev=target,lun,scsibusno # 機能 11 を選択
    

    ここで、ほとんどの場合は、これら 3 つのパラメータは全て 0 にセットします。 通常 readom により与えられるセクタ数は過大です! 実際にマウントして得られる数を使う方がより良い結果をもたらします。

    dd を CD に対して使うと、いくつか問題が発生することを 警告しれおきます。dd コマンドを最初に実行すると、 エラーが発生し、末尾が失われた短いディスクイメージができるかもしれません。 次に dd コマンドを実行すると、ディスクサイズが指定されていない 場合、後ろにごみデータが付随した大きなディスクイメージができるかもしれない システムがあるかもしれません。引数として正しいディスクサイズを与えて dd コマンドを 2 回実行し、エラーメッセージの後に CD をイジェクトしなければこれらの問題を避けられるようです。 例えば、df により表示されるイメージサイズが 46301184 であった場合、次のコマンドを 2 回実行すると 正しいイメージを得られます。(これは経験的な情報です)

         # dd if=/dev/cdrom of=cd.img bs=2048 count=$((46301184/2))
    

    9.3.8 Debian CD イメージ

    Debian CD の最新情報を得るには、 Debian CD site を訪れてください。

    高速なインターネット接続を持っている場合は、次を用いてネットワーク越しに インストールすることを考えてみてください。

    高速なインターネット接続を持っていない場合は、 CD vendor から CD を購入することを 考慮してください。

    CD イメージのテスタで無い限り、(たとえ新しい jigdo を使ったとしても) 標準の CD イメージをダウンロードしてバンド幅を無駄に消費しないでください。

    言及すべき CD イメージは KNOPPIX - Live Linux Filesystem On CD です。 この CD はハードディスクにインストールせずに機能する Debian システムを ブートします。


    9.3.9 システムを CD-R にバックアップ

    主要な設定ファイルとデータファイルを CD-R にコピーするには、 backup にあるサンプルバックアップ スクリプトを使います。又、サブディレクトリ全体のコピーとアーカイブ, 第 8.3 節差分バックアップとデータ同期, 第 8.4 節 もご覧下さい。


    9.3.10 音楽 CD を CD-R にコピーする

    テストしていません。

         # apt-get install wodim cdparanoia
         # cdparanoia -s -B
         # wodim dev=0,0,0 speed=2 -v -dao -eject defpregap=1 -audio *.wav
    

    又は

         # apt-get install cdrdao #disk at once
         # cdrdao read-cd --device /dev/cdrom --paranoia-mode 3 my_cd # CD を読み込む
         # cdrdao write --device /dev/cdrom --speed 8 my_cd    # 新しい CD を書き込む
    

    cdrdao は (ギャップなどが無い) 真のコピーを作ります。


    9.3.11 DVD-R や DVD-RW や DVD+RW への書き込み

    DVD に書き込む場合, 2 つのアプローチがあります:


    9.4 X

    W Window System は XFree86 により 供給されています。Debian システムでは 2つのメジャーバージョンの X サーバ、 すなわち XFree86 Version 3.3 (XF3) と XFree86 Version 4.x シリーズ (XF4) が得られますが、どちらも X.Org による X11R6 規格に基づいています。

    X の基礎は、X(7)、LDP XWindow-User-HOWTORemote X Apps mini-HOWTO を参照してください。Debian 特有のユーザガイドは、 xfree86-common パッケージにより供給される file:///usr/share/doc/xfree86-common/FAQ.gz をご覧下さい。 これには Branded Robinson による興味深く信頼が置けるキーバインディング 問題の報告が含まれます。

    X サーバ, 第 9.4.3 節

    ユーザのモニタ (CDT,液晶) に X window やデスクトップを 表示し、キーボードやマウスの入力を受け付けるローカルホストでのプログラム。

    X クライアント, 第 9.4.4 節

    X 互換なアプリケーションソフトを起動する (ローカル又はリモートでの) プログラム

    これは他の文脈での通常の "サーバ" と "クライアント" の逆の使いかたです。

    "X クライアント" (アプリケーション側) から "X サーバ" (ディスプレイ側) がリモート接続を得るための複数の方法があります。

    ssh を除いて、全てのリモート接続は X サーバ上で可能な TCP/IP 接続を要求します。TCP/IP 越しに X を使う, 第 9.4.6 節 をご覧下さい。


    9.4.1 X パッケージ

    Woody に X システムをインストールするのを簡単にするためにいくつかの (メタ)パッケージが供給されています。

    x-window-system-core

    このメタパッケージは X Window System を起動するスタンドアロンの ワークステーションに不可欠な構成要素を供給します。X ライブラリ、 X サーバ (xserver-xfree86)、フォント群、そして 基本的な X クライアントおよびユーティリティ群を供給します。

    x-window-system

    このメタパッケージは XFree86 プロジェクトにより開発されている X Window System としての実質上全ての構成要素を供給するだけでなく、 歴史的に有名なアクセサリプログラムのセットを供給します。 (とりわけ、x-window-system-core, twm, そして xdm などに依存します。これをインストールする場合 x-window-system-core をインストールする必要はありません。)

    xserver-common-v3

    XFree86 3.x X サーバ (XF3) に共通のファイルやユーティリティです。

    xserver-*

    何らかの理由で新しい XF4 サーバ (xserver-xfree86) によりサポートされていないハードウェアをサポートするための補助的な XF3 サーバパッケージです。いくつかの古い ATI mach64 カードは XF4 でサポートされていませんし、他のカードも Woody でのバージョンの XF4 ではひどくハングします。(取得可能なパッケージは、 apt-cache search xserver-|less により判明します。 これら XF3 サーバの全ては xserver-common-v3 に 依存します。)

    ほとんどの場合、x-window-system パッケージをインストール すべきです。(コンソールでログインしたい場合は、"boot 時に X を無効にさせてくれ!", 第 8.1.4 節 で言及されているように xdm を無効にすることを忘れないで ください。)


    9.4.2 X 用のハードウェア検出

    X の設定段階でハードウェアの検出を有効にするには、 X システムをインストールする前に次のパッケージをインストールしてください。


    9.4.3 X サーバ

    X サーバに関する情報は XFree86(1x) をご覧下さい。

    ローカルの端末から X サーバを起動するには、次を実行します。

         $ startx -- :<display> vtXX
         例えば、
         $ startx -- :1 vt8 -bpp 16
         ... vt8 で 16bpp モードを用いて X サーバを起動し、localhost:1 に接続
    

    -- の後に与えられた引数は X サーバのためのものです。

    X サーバ起動スクリプトをカスタマイズするために ~/.xserverrc スクリプトを使用している場合、本当の X サーバを必ず exec してください。 こうしないと X サーバの起動が遅くなり、exit することに注意してください。 例えば、

         #!/bin/sh
         exec /usr/bin/X11/X -dpi 100 -nolisten tcp
    

    9.4.3.1 X サーバの設定 (version 4)

    XF4 サーバの(再)設定を行うには、

         # dpkg-reconfigure --priority=low xserver-common
         # dpkg-reconfigure --priority=low xserver-xfree86
    

    を実行して /etc/X11/XF86Config-4 ファイルを生成し、 dexconf スクリプトを用いて X の設定を行います。


    9.4.3.2 X サーバの設定 (version 3)

    XF3 サーバの(再)設定を行うには、例えば、ATI mach64 の場合、

         # dpkg-reconfigure --priority=low xserver-common-v3
         # dpkg-reconfigure --priority=low xserver-mach64
    

    を実行して /etc/X11/XF86Config ファイルを生成し、 xf86config-v3 スクリプトを用いて X の設定を行います。


    9.4.3.3 X サーバを手動で設定する

    Woody の場合、/etc/X11/XF86Config-4 ファイルにユーザの カスタマイズを追加します。 設定ファイル中の次の行を決して編集しないでください。

         ### BEGIN DEBCONF SECTION
         [snip]
         ### END DEBCONF SECTION
    

    その代わり、テキストの前にカスタマイズを追加してください。 例えば、ビデオデバイスをカスタマイズするには、ファイルの 先頭 に次のテキストに似た行を追加してください。

         Section "Device"
           Identifier        "Custom Device"
           Driver            "ati"
           Option            "NoAccel"
         EndSection
         
         Section "Screen"
           Identifier  "Custom Screen"
           Device      "Custom Device"
           Monitor     "Generic Monitor"
           DefaultDepth 24
           Subsection "Display"
             Depth       8
             Modes       "1280x960" "1152x864" "1024x768" "800x600" "640x480"
           EndSubsection
           Subsection "Display"
             Depth       16
             Modes       "1280x960" "1152x864" "1024x768" "800x600" "640x480"
           EndSubsection
           Subsection "Display"
             Depth       24
             Modes       "1280x960" "1152x864" "1024x768" "800x600" "640x480"
           EndSubsection
         EndSection
         
         Section "ServerLayout"
             Identifier        "Custom"
             Screen            "Custom Screen"
             InputDevice       "Generic Keyboard" "CoreKeyboard"
             InputDevice       "Configured Mouse" "CorePointer"
         EndSection
    

    Sarge (この文書の作成時は testing) の場合、 アップグレードを通じてカスタマイズした設定を /etc/X11/XF86Config 保ちたい場合、次のコマンドを root として実行してください。

         # cp /etc/X11/XF86Config-4 /etc/X11/XF86Config-4.custom
         # md5sum /etc/X11/XF86Config-4 > /var/lib/xfree86/XF86Config-4.md5sum
         # dpkg-reconfigure xserver-xfree86
    

    フォントのアンチエイリアス を行うには、 X での TrueType フォント, 第 9.4.13 節 に記述されているように /etc/X11/XF86Config-4 を編集する必要があります。

    X の設定ファイルの他の部分もチェックしてみてください。ひどいモニタ設定 はひどいフォントよりも頭痛をもたらします。ですのでリフレッシュレートが 使っているモニタが発揮できるレートと同じ位高いことを確認してください。 (85 Hz なら素晴らしい、75 Hz なら大丈夫、60Hz だと苦痛です)


    9.4.4 X クライアント

    X クライアントプログラムのほとんどは次のようなコマンドで起動されます。

         client $ xterm -geometry 80x24+30+200 -fn 6x10 -display hostname:0 &
    

    ここで、任意のコマンドライン引数は次を意味します。

    X クライアントプログラム (アプリケーション側) 用の標準の displayname は DISPLAY 環境変数によりセットできます。 例えば、環境変数を設定するために X クライアントプログラムより先に 次のコマンドのうちひとつを実行します。

         $ export DISPLAY=:0 
                 # 標準、ローカルマシンの第一スクリーン
         $ export DISPLAY=hostname.fulldomain.name:0.2
         $ export DISPLAY=localhost:0
    

    この設定は ~/.xinitrc によりカスタマイズできます。例えば、

         xrdb -load $HOME/.Xresources
         xsetroot -solid gray &
         xclock -g 50x50-0+0 -bw 0 &
         xload -g 50x50-50+0 -bw 0 &
         xterm -g 80x24+0+0 &
         xterm -g 80x24+0-0 &
         twm
    

    X セッションのカスタマイズ, 第 9.4.5.1 節 に記述したように、この設定は startx から実行された場合、Xsession の通常の実行結果を全て上書きします。 その代わり、~/.xsession を苦肉の策としてのみ使ってください。 xsetroot(1x)xset(1x)X リソース, 第 9.4.10 節 をご覧下さい。


    9.4.5 X セッション

    X セッション (X サーバ + X クライアント) は次のように起動できます。

    コンソールは "boot 時に X を無効にさせてくれ!", 第 8.1.4 節 に記述されている方法で取得できます。


    9.4.5.1 X セッションのカスタマイズ

    標準の起動スクリプト /etc/X11/Xsession/etc/X11/Xsession.d/50xfree86-common_determine-startup/etc/X11/Xsession.d/99xfree86-common_start が組み合わさったもの です。

    /etc/X11/Xsession の実行は /etc/X11/Xsession.options にいくらか影響を受け、本質的には 次の順序で最初に見付かったプログラムを exec コマンドで 実行することになります。

  • 定義されている場合、 ~/.xsession~/.Xsession

  • 定義されている場合、 /usr/bin/x-session-manager

  • 定義されている場合、/usr/bin/x-window-manager

  • 定義されている場合、/usr/bin/x-terminal-emulator

  • これらのコマンドの正確な意味は Alternative コマンド, 第 6.5.3 節 に記述されている Debian alternative システムにより定義されています。 例えば、

         # update-alternatives --config x-session-manager
         又は
         # update-alternatives --config x-window-manager
    

    GNOME や KDE のセッションマネージャをインストールしたまま他の X ウィンドウマネージャを標準にするには、 /etc/X11/Xsession.d/50xfree86-common_determine-startuphttp://bugs.debian.org/168347 の 2 番目のバグレポートに添付されているもの に置き換え (これがすぐに含まれればいいのですが)、 X セッションマネージャを禁じるために次のように /etc/X11/Xsession.options を編集します。

         # /etc/X11/Xsession.options
         #
         # configuration options for /etc/X11/Xsession
         # See Xsession.options(5) for an explanation of the available options.
         # Default enabled
         allow-failsafe
         allow-user-resources
         allow-user-xsession
         use-ssh-agent
         # Default disabled (enable them by uncommenting)
         do-not-use-x-session-manager
         #do-not-use-x-window-manager
    

    上で述べた修正をシステムに行わないと、gnome-sessionkdebase はこれらの X セッションマネージャを含む パッケージとなります。これらを削除すると X ウィンドウマネージャが標準 になります。(Yack, any better idea?)

    /etc/X11/Xsession.optionsallow-user-xsession という行が有効になっている場合、 ~/.xsession~/.Xsession を定義したユーザは /etc/X11/Xsession のアクションをカスタマイズできます。

    お好みの X ウィンドウ/セッションマネージャを起動するために、 ~/.xsession ファイルの最後のコマンドは exec some-window/session-manager の形にすべきです。

    ~/.xsession スクリプトの良い例は file:///usr/share/doc/xfree86-common/examples/xsession.gz に置いておきます。

    私はこれをウィンドウマネージャ、スクリーンへのアクセス、ユーザアカウント毎の 言語サポートの設定のために使っています。 ユーザ用に X セッションを開始する, 第 9.4.5.2 節, X で root 権限を取得する, 第 9.4.12 節, そして 多言語 X window システムの例, 第 9.7.9 節 をご覧下さい。

    複数の X クライアントプログラムを同時に起動したい場合、 X クライアント, 第 9.4.4 節 の例を見て、それらを ~/.xinitrc ではなく ~/.xsession から起動してください。

    ユーザが指定する追加的な X リソースは ~/.Xresources に 保存できます。X リソース, 第 9.4.10 節 をご覧下さい。

    X においてユーザがカスタマイズしたキーマップとポインタデバイスのマッピングも ユーザの起動スクリプトで指定できます。X における keymap とポインタボタンマッピング, 第 9.4.11 節 をご覧下さい。


    9.4.5.2 ユーザ用に X セッションを開始する

    X セッションのカスタマイズ, 第 9.4.5.1 節 に記述されている原則に従い、ユーザ指定の X セッション/ウィンドウマネージャは、指示されたパッケージをインストールし、 次のように ~/.xsession の最後に設定することにより有効化 できます。 (私はシンプルなスタイルと高速性から blackbox/ fluxbox が好きです。)

    Window Managers for X をご覧下さい。


    9.4.5.3 KDE と GNOME の設定

    KDE 又は GNOME 環境を完全に設定するためには、次のメタパッケージが 役立ちます。

    これらのパッケージを Recommends を操作できる dselectaptitude のようなツールでインストールすると、 ただ apt-get でインストールするよりも適切な ソフトウェアの選択を行えます。

    端末からログインをしたい場合、kdmgdm のような X ディスプレイマネージャを必ず無効に してください。これらは "boot 時に X を無効にさせてくれ!", 第 8.1.4 節 に記述されているように、 メタパッケージといっしょに依存性に従いインストールされるかもしれません。

    KDE ではなく、GNOME をシステムの標準にしたい場合、 Alternative コマンド, 第 6.5.3 節 にあるように x-session-manager の 設定を必ず行ってください。


    9.4.6 TCP/IP 越しに X を使う

    暗号化を行わずにリモートの TCP/IP ソケット接続を行うのは盗聴攻撃を 受けやすいので、最近の Debian における標準の X の設定は TCP/IP ソケットを無効にしています。リモートから X へ接続するには、 ssh の使用を考慮してください。(リモートの X サーバに接続する – ssh, 第 9.4.8 節 参照)

    ここで記述する方法は信頼できるユーザしか存在しない良質のファイアーウォール システムの後ろに隠れた非常に安全な環境にいるので無ければ推奨されません。 現在の TCP/IP ソケットに関する X の設定を検証するために、次のコマンドを 使用してください。

         # find /etc/X11 -type f -print0 | xargs -0 grep nolisten
         /etc/X11/xinit/xserverrc:exec /usr/bin/X11/X -dpi 100 -nolisten tcp
    

    X サーバが TCP/IP を listen されるには、-nolisten を削除してください。


    9.4.7 リモートの X サーバに接続する – xhost

    xhost を使ってホスト名に基づいてリモートホストにアクセスできる ようになります。これは非常に危険です。次の手順によりホストのチェックを 無効にし、TCP/IP ソケット接続が許されている所からならどこからでも 接続を許すようになります。(TCP/IP 越しに X を使う, 第 9.4.6 節 参照)

         $ xhost +
    

    ホストのチェックを次の手順で再び有効にできます

         $ xhost -
    

    xhost はリモートホストの異なるユーザを区別できません。 又、ホスト名 (実際はアドレス) はだまされ得ます。

    この方法は信頼できないネットワーク (例えばインターネットへダイアルアップ PPP 接続している場合など) では、より制限されたホスト基準を用いていたとしても 避けるべきです。xhost(1x) をご覧下さい。


    9.4.8 リモートの X サーバに接続する – ssh

    ssh を使うと、ローカルの X サーバからリモートのアプリケーション サーバに安全な接続を行うことが可能になります。

    この方法はローカルの UNIX ドメインソケットを通してローカルで接続 しているかのようにリモートの X クライアントの出力を表示できます。


    9.4.9 X ターミナルエミュレータ – xterm

    http://dickey.his.com/xterm/xterm.faq.htmlxterm についての全てを学んでください。


    9.4.10 X リソース

    xterm のような多くの古い X プログラムは、見栄えを設定する ために X リソースデータベースを用います。 ユーザのリソース指定を保存するため、~/.Xresources ファイルを 用います。このファイルはログイン時に標準の X リソースと自動的に マージされます。システムの標準となっている X リソースは /etc/X11/Xresources/* に、アプリケーションの標準リソースは /etc/X11/app-defaults/* に保存されます。 これらの設定を開始点として使用します。

    ~/.Xresources ファイルに追加すべき役立つ設定を いくつか示します。

         ! フォントを読みやすい 9x15 にセット
         XTerm*font: 9x15
         
         ! スクロールバーを表示
         XTerm*scrollBar: true
         
         ! バッファサイズを 1000 行にセット
         XTerm*saveLines: 1000
         
         ! 大きな kterm スクリーン
         KTerm*VT100*fontList: -*-fixed-medium-r-normal--24-*,\
          -*-gothic-medium-r-normal--24-*,\
          -*-mincho-medium-r-normal--24-*
    

    これらの設定を直ちに有効にするには、次のコマンドを使ってデータベースに マージします。

         xrdb -merge ~/.Xresources
    

    xrdb(1x) をご覧下さい。


    9.4.11 X における keymap とポインタボタンマッピング

    xmodmap プログラムは X クライアントアプリケーション上で イベントのキーコードをキーシムに変換するために用いるキーボード modifier マップと keymap テーブルを編集したり表示するために用いられます。

         $ xmodmap -pm 
          ... 現在の modifier マップを表示
         $ xmodmap -pk | pager
          ... 現在の keymap テーブルを表示
         $ xmodmap -e "pointer = 3 2 1" # 左利き用マウスに設定
         $ xmodmap ~/.xmodmaprc # キーボードのマッピングを ~/.xmodmaprc で設定
    

    これは通常ユーザのセッション起動スクリプトである ~/.xsession から起動されます。

    keycode を取得するには、X 上で xev を起動し、 keycode を取得したいキーを押します。keysym の意味を知るには、 /usr/include/X11/keysymdef.h ファイルにある MACRO 定義を 調べます。このファイルにある全ての #define 文は XK_ として指定されており、それぞれが keysym 名 と対応しています。

    xmodmap(1x) をご覧下さい。


    9.4.12 X で root 権限を取得する

    GUI プログラムを root 権限で起動する必要がある場合、次の手順に従って プログラムの出力をユーザの X サーバに表示してください。 セキュリティの問題を可能な限り避けるため、 決して X サーバを直接 root から起動しようとしてはいけません

    X サーバを通常のユーザとして起動し、xterm 端末を開きます。 そして次を実行します。

         $ XAUTHORITY=$HOME/.Xauthority
         $ export XAUTHORITY
         $ su root
         Password:*****
         # printtool &
    

    このトリックを su で非 root ユーザに変更するために使う場合、 ~/.Xauthority がその非 root ユーザが属するグループが 読み込み可能であることを確認してください。

    この作業を自動化するには、ユーザアカウントの ~/.xsession に 次の行を追加します。

         # root アカウント に su した時に X が動くようにする。
         if [ -z "$XAUTHORITY" ]; then
                 XAUTHORITY=$HOME/.Xauthority
                 export XAUTHORITY
         fi
         unset XSTARTUP
         # 特定のウィンドウ/セッションが必要な場合、次の行のコメントを外して
         # 必要に応じて編集する。
         #XSTARTUP=/usr/bin/blackbox
         # x-window/session-manager プログラムを起動
         if [ -z "$XSTARTUP" ]; then
           if [ -x /usr/bin/x-session-manager ]; then
             XSTARTUP=x-session-manager
           elif [ -x /usr/bin/x-window-manager ]; then
             XSTARTUP=x-window-manager
           elif [ -x /usr/bin/x-terminal-emulator ]; then
             XSTARTUP=x-terminal-emulator
           fi
         fi
         # X window/session manager を自動実行
         exec $XSTARTUP
    

    そして (su - ではなく) su を ユーザの xterm ウィンドウ上で起動します。するとこの xterm から起動する GUI プログラムは root 権限で動きますが出力をユーザの X window 上に表示できます。 このトリックは標準の /etc/X11/Xsession が実行される限り 動きます。ユーザが ~/.xinitrc~/.xsession をカスタマイズした場合、上で言及した環境変数 XAUTHORITY がこれらのスクリプトと同じように設定される必要があります。

    代わりに、sudo を上記の手順を自動化するために 使用できます。

         $ sudo xterm
         ... 又は
         $ sudo -H -s
    

    ここで、/root/.bashrc に次の行が含まれる必要があります。

         if [ $SUDO_USER ]; then
             sudo -H -u $SUDO_USER xauth extract - $DISPLAY | xauth merge -
         fi
    

    これはユーザのホームディレクトリが NFS マウントされている場合でさえも うまく動きます。それは root が .Xauthority ファイルを読まない ためです。

    この目的のために用いられる専門プログラムとしては、 kdesu, gksu, gksudo, gnome-sudo, そして xsu などが存在します。 同様の結果を得るために、 /root/.Xauthority のシンボリックリンクをユーザのホームディレクトリ に作成することや、スクリプト sux を使う、 root の初期化スクリプトに "xauth merge ~USER_RUNNING_X/.Xauthority" を追加するなどの 他にいくつかの方法が使えます。

    さらに知りたい場合は debian-devel mailing list をご覧下さい。


    9.4.13 X での TrueType フォント

    XFree86-4 での標準的な xfs は TrueType をうまく処理します。 XFree86-3 を使っている場合は、xfs-xtt のような サードパーティのフォントサーバをインストールする必要があります。

    TrueType フォントを使いたいアプリケーションが libXft にリンクされているか、 それとも libfreetype にリンクされているかを確認することだけが必要です。 (前もってコンパイルされた .deb を使っている場合はこれさえも心配する必要は たぶん無いでしょう。)

    まずフォントのサポートインフラを設定します。

    次に、DFSG フォントパッケージをインストールします。

    フリーな フォントは時々制限があるので、Debian ユーザ にとって商用の TrueType フォントをインストール又は共有することは 選択肢のひとつです。 この手順を容易にするためにいくつか便利なパッケージが作成されています。

    フリーな システムを非フリーなフォントで汚染することを 犠牲にするならば、本当に良い TrueType フォントの選択を行ってください。

    Debian におけるこれらのフォントパッケージは努力無しで動き、 通常の "コア" フォントシステムを使用する全ての X プログラムに対して 使用できるようになるべきです。X プログラムには Xterm、Emacs や 他のほとんどの 非 KDE 、非 GNOME アプリケーションが含まれます。

    ついに、xfontsel を起動して fndry メニュで TrueType フォントを選べば、"fmly" メニュにたくさんの黒色の選択可能なエントリ が見付けられるはずです。

    (GTK 1.2 がアンチエイリアスフォントレンダリングを行えるようにハックされた libgdkxft0 を使っている) KDE 2.2 と GNOME 1.4 では、Xft1 を設定する必要が あります。その上、Xft1 はかなり時代遅れになっており、基本的に GNOME 1.4 と KDE 2.2 でしか使われていません。 /etc/X11/XftConfig を編集し、

             dir "/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType"
    

    のような行を他の dir 行の前に追加してください。

    [42]

    GNOME2 と KDE3 (Sarge リリース後) では、フォントを見付けるのに Xft2 を使っている fontconfig を設定する必要があります。 [43] fontconfig に依存するパッケージは既に (間接的に) このパッケージに Depends しているので、設定を行うのに何か特別なパッケージを インストールする必要はありません。

    まず、/etc/fonts/fonts.conf を見ます。下に示すような行 があるはずです。無い場合は、/etc/fonts/local.conf を開き、 下の内容を <fontconfig> の行のすぐ後に追加します。

             <dir>/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType</dir>
    

    fontconfig はこの変更に直ちに対応し、 "fc-list" により新しいフォントが追加されるはずです。 fontconfig の他の巧妙な機能によって、 フォントを ~/.fonts/ に入れるだけで fontconfig を 使用するプログラムは直ちにこれらのフォントを使用可能になります。

    Debian パッケージを使わずに X 上で新しい TrueType フォントセットを 手動でインストールした場合、次を実行します。

         # xset fp rehash
    

    これにより XFree86 がこのディレクトリの内容を再び見て新しいフォントを 取得するようになります。


    9.4.14 X でのウェブブラウザ

    Sarge リリース時点でグラフィカルに表示可能なウェブブラウザパッケージ がいくつか存在します。

    testing 又は unstable では、共有ライブラリのバージョンを 合わせる必要があるため、mozilla 変種のブラウザ間での バージョン不一致問題に直面するかもしれません。

    mozilla のようなブラウザ用のプラグインは、 "*.so" を手動でプラグインディレクトリにインストールし、ブラウザを 再起動することにより有効にできます。

    プラグイン一覧


    9.4.15 X 用メールクライアント (MUA)

    Sarge リリース時点で、グラフィカルなディスプレイ表示が可能なクライアントパッケージが数種類存在します:


    9.5 SSH

    SSH (Secure SHell) はインターネットに接続するための安全な方法です。 OpenSSH と呼ばれるフリー版の SSH は Debian では ssh パッケージとして得られます。


    9.5.1 SSH の基礎

    まず OpenSSH サーバとクライアントをインストールします。

         # apt-get update && apt-get install ssh
    

    OpenSSH サーバを起動したい場合は /etc/ssh/sshd_not_to_be_run が存在する必要があります。

    SSH には二つの認証プロトコルが存在します。

    Woody や他の非 Debian システムに移行しようする場合、これらのプロトコルの違い に注意してください。

    詳細は /usr/share/doc/ssh/README.Debian.gzssh(1), sshd(8), ssh-agent(1), 並びに ssh-keygen(1) をご覧下さい。

    主要な設定ファイルを次に挙げます。

    次のコマンドは ssh 接続をクライアントから開始します。

         $ ssh username@hostname.domain.ext
         $ ssh -1 username@hostname.domain.ext # Force SSH version 1
         $ ssh -1 -o RSAAuthentication=no -l username foo.host
             # SSH1 でパスワードを強制
         $ ssh -o PreferredAuthentications=password -l username foo.host
             # SSH2 でパスワードを強制。
    

    ユーザにとって、ssh は (^] を用いて爆撃しない) 賢くより安全な telnet として働きます。


    9.5.2 SMTP/POP3 トンネル用のポートフォワード

    ssh を通して localhost の port 4025 から remote-server の port 25 並びに localhost の port 4110 から remote-server の port 100 に接続 するパイプを構築するには、ローカルマシンで次を実行します。

         # ssh -q -L 4025:remote-server:25 4110:remote-server:110 \
                    username@remote-server
    

    これはインターネットを通して SMPT/POP3 サーバに接続するための安全な手段です。 リモートホストの /etc/ssh/sshd_configAllowTcpForwarding エントリを yes にセットしてください。


    9.5.3 パスワードの入力が少ない接続 – RSA

    RSAAuthentication (SSH プロトコル) 又は PubkeyAuthentication (SSH2 プロトコル) を用いてリモートシステムごとのパスワードを覚えるのを避けられます。

    リモートホストで、/etc/ssh/sshd_config の各エントリを "RSAAuthentication yes" 又は "PubkeyAuthentication yes" にセットします。

    そしてローカルで認証キーを生成し、リモートシステムに公開鍵をインストールします。

         $ ssh-keygen          # RSAAuthentication: SSH1 用の RSA 鍵
         $ cat .ssh/identity.pub | ssh user1@remote \
                 "cat - >>.ssh/authorized_keys"
         ...
         $ ssh-keygen -t rsa   # PubkeyAuthentication: SSH2 用の RSA 鍵
         $ cat .ssh/id_rsa.pub | ssh user1@remote \
                 "cat - >>.ssh/authorized_keys"
         ...
         $ ssh-keygen -t dsa   # PubkeyAuthentication: SSH2 用の DSA 鍵
         $ cat .ssh/id_dsa.pub | ssh user1@remote \
                 "cat - >>.ssh/authorized_keys"
    

    "ssh-keygen -p" を用いて後にパスフレーズを変更できます。 接続できるかテストして必ず設定を検証してください。 問題がある場合は、"ssh -v" を使ってください。

    ホスト制限や特定のコマンドを起動するために authorized_keys に あるエントリにオプションを追加できます。詳細は sshd(8) をご覧下さい。

    SSH2 には HostbasedAuthentication 機能があることに注意してください。 これを動かすには、サーバマシンの /etc/ssh/sshd_config と クライアントマシンの /etc/ssh/ssh_config 又は $HOME/.ssh/config の両方を yes にセットする 必要があります。


    9.5.4 他の SSH クライアントの扱い

    非 Unix ライクプラットフォームのためのフリーな SSH クライアントは あまり存在しません。

    Windows

    puTTY (GPL)

    Windows (cygwin)

    cygwin (GPL) にある SSH

    Macintosh Classic

    macSSH (GPL) [Mac OS X には OpenSSH が含まれていることに注意してください。Terminal アプリケーション上で ssh を使ってください。]

    SourceForge.net, site documentation の "6. CVS Instructions" もご覧下さい。


    9.5.5 ssh-agent のセットアップ

    パスフレーズで SSH 認証鍵を保護する方がより安全です。パスフレーズが セットされていなかった場合、ssh-keygen -p を使ってセットしてください。

    リモートホストの ~/.ssh/authorized_keys に パスワードを用いてリモートホストに接続して パスワードの入力が少ない接続 – RSA, 第 9.5.3 節 に記述されているように公開鍵 (すなわち、~/.ssh/id_rsa.pub) を置いてください。

         $ ssh-agent bash # 又は代わりに zsh/tcsh/pdksh プログラムを起動する。
         $ ssh-add ~/.ssh/id_rsa
         Enter passphrase for /home/osamu/.ssh/id_rsa:
         Identity added: /home/osamu/.ssh/id_rsa (/home/osamu/.ssh/id_rsa)
         $ scp foo user@remote.host:foo
          ... ここからはパスフレーズが必要 :-)
         $^D
          ... ssh-agent セッションを終了。
    

    X サーバの場合、通常 Debian の起動スクリプトは ssh-agent を親プロセスとして実行します。ですので ssh-add を一度だけしか 実行する必要がありません。

    より詳しくは、ssh-agent(1)ssh-add(1) をご覧下さい。


    9.5.6 SSH のトラブルシュート

    問題が発生した場合、設定ファイルのアクセス権をチェックし、ssh を "-v" オプションつきで実行してください。

    root であってファイアーウォールのトラブルが発生した場合、 "-P" オプションを使ってください。これはサーバのポート 1 から 1023 の使用を 避けます。

    リモートのサイトへの ssh 接続が突然動かなくなった場合、 それはシステム管理者のやっつけ仕事のせいかもしれませんし、最もありえるのは システムメンテナンス中に host_key が変更されたためです。 このような原因で接続が停止し、だれもハックしてリモートホストを偽造しようと していないことを確認してから、host_key エントリを ローカルマシンの $HOME/.ssh/known_hosts から削除して 接続を回復できます。


    9.6 メール

    メールの設定は三つのカテゴリに分割されます。


    9.6.1 Mail transport agents (MTAs)

    フル機能の MTA としては、Woody では eximを、Sarge では exim4 を使っています。 [44] リファレンス:

    セキュリティを心配している場合の唯一の妥当な代替 MTA は 、 postfix です。sendmailqmail も Debian パッケージとして得られますが、 お薦めできません。

    ノート PC などのサテライトシステムであって MTA のリレー機能が必要ない場合、 次に挙げる軽量なパッケージのどれかの使用を考えても良いかもしれません。

    現時点では、私はノート PC をパーソナルワークステーションとして 使う場合でも、exim が最適と考えています。

    これらの衝突するパッケージをインストールする場合、exim を 削除する必要があるかもしれません。

         # dpkg -P --force-depends exim
         # apt-get install nullmailer         # 又は ssmtp
    

    9.6.1.1 Smarthost

    消費者レベルのサービスの接続をしているホスト上で exim4 又は exim を起動している場合、ISP や他の手段で提供されている smarthost を 通じてメールを送るようにしてください。 [45] いくつかの理由があります。

    想像できる唯一の例外としては次があげられます。


    9.6.1.2 Exim の基本的な設定

    exim4 又は exim を MTA として使うには、 次の設定を行います。

         /etc/exim/exim.conf     "eximconfig" を実行し、編集 (exim)
         /etc/exim4/*            "dpkg-reconfigure exim4-config" を実行し、編集 (exim4)
         /etc/inetd.conf         exim をデーモンとして起動するために smtp をコメントアウトする
         /etc/email-addresses    外に出すメールのためのドメインリストを追加
    

    exim4 又は exim-brw, -bf, -bF, など の オプション付きで用いてフィルタをチェックしてください。


    9.6.1.3 Exim の元で存在しないメールアドレスのための物置を設定する

    /etc/exim/exim.conf (Woody 以降) の DIRECTORS パートにおいて、 末尾 (localuser: director の後) にその前の director が解決できない 全てのアドレスにマッチするごみ箱 director を追加してください。 (Miquel van Smoorenburg による)

         catchall:
           driver = smartuser
             new_address = webmaster@mydomain.com
    

    各仮想ドメインなどに対するより詳しいレシピを設定したい場合、 /etc/exim/exim.conf の末尾に次の内容を追加してください。 (あまりテストしていません)

         *@yourdomain.com ${lookup{$1}lsearch*{/etc/email-addresses} \
                 {$value}fail} T
    

    そして、/etc/email-addresses に "*" エントリを追加してください。


    9.6.1.4 Exim の元で送信メールに対してアドレス書き換えを設定する

    適切な "From:" ヘッダを生成するために送信メールのアドレス書き換えを行う には、exim を用いて /etc/exim/exim.conf の末尾 近くに次のような設定を行うことにより行えます。

         *@host1.something.dyndns.org \
           "${if eq {${lookup{$1}lsearch{/etc/passwd}{1}{0}}} {1}  \
            {$0}{$1@something.dyndns.org}}"  frFs
    

    これは *@host1.something.dyndns.org にマッチする全アドレスを 書き換えます。

    1. local part ($1) がローカルユーザかどうかを /etc/password を通じて検索する。

    1. ローカルユーザである場合、アドレスを最初の場所 ($0) にあったものに 書き換えます。

    1. ローカルユーザでない場合は、ドメイン部分を書き換えます。


    9.6.1.5 Exim の元で SMTP 認証を設定する。

    yahoo.com のような SMTP サーバは SMTP 認証を要求します。 /etc/exim/exim.conf を次のように設定します。

         remote_smtp:
           driver = smtp
           authenticate_hosts = smtp.mail.yahoo.com
         ...
         
         smarthost:
           driver = domainlist
           transport = remote_smtp
           route_list = "* smtp.mail.yahoo.com bydns_a"
         ...
         
         plain:
           driver = plaintext
           public_name = PLAIN
           client_send = "^cmatheson3^this_is_my_password"
    

    最後の行をダブルクォートするのを忘れないでください。


    9.6.2 メールを取得する – Fetchmail

    fetchmail はデーモンモードで起動され、メールを ISP の POP3 アカウントから取得し、ローカルのメールシステムに転送します。 設定ファイルは次のとおり。

         /etc/init.d/fetchmail   
         /etc/rc?.d/???fetchmail 標準では優先度 30 で update-rc.d fetchmail を起動する
         /etc/fetchmailrc        設定ファイル (chmod600 のアクセス権限で fetchmail により所有される)
    

    Potato で init.d スクリプトから fetchmail を デーモンモードで起動する方法に関する情報は混乱しています。 (Woody では既に修正されています) example scripts にある /etc/init.d/fetchmail/etc/fetchmailrc のサンプルをご覧下さい。

    メールのヘッダが ISP のメーラのせいで ^M で汚染されている場合、 $HOME/.fetchmailrc に "stripcr" をオプションとして 次のように追加してください。

         options fetchall no keep stripcr
    

    9.6.3 crm114 でのスパム処理

    crm114 パッケージは CRM114 で書かれた /usr/share/crm114/mailfilter.crm スクリプト を提供します。このスクリプトはスパム(不要メール)とハム(有用メール) を流し込むと非常に効率的に訓練できるスパムフィルターを提供します。

    CRM114 はフィルターを書くために設計された小さな言語です。 スーパーパワーを与えた grep のような物と考えて下さい。 crm(1) を参照してください。


    9.6.4 メール処理 – Procmail

    procmail はローカルのメール配信およびフィルタプログラムです。 本プログラムを使う際にはアカウント毎に $HOME/.procmailrc を作成する必要があります。例は _procmailrc にあります。


    9.6.5 メールを読む – Mutt

    mail user agent (MUA) として muttvim と 組み合わせて使ってください。 ~/.muttrc でカスタマイズできます。例えば、

         # use visual mode and "gq" to reformat quotes
         set editor="vim -c 'set tw=72 et ft=mail'"
         #
         # header weeding taken from the manual (Sven's Draconian header weeding)
         #
         ignore *
         unignore from: date subject to cc
         unignore user-agent x-mailer
         hdr_order from subject to cc date user-agent x-mailer
         auto_view application/msword
         ....
    

    HTML メールと MS Word 添付ファイルをインラインで表示するため、次を /etc/mailcap 又は $HOME/.mailcap に追加してください。

         text/html; lynx -force_html %s; needsterminal;
         application/msword; /usr/bin/antiword '%s'; copiousoutput;
         description="Microsoft Word Text"; nametemplate=%s.doc
    

    9.7 ローカライゼーション (l10n)

    Debian は国際化されており、言語や地域差に関するサポートが充実しつつあります。 次のサブセクションは Debian が現在サポートする多様性の形態の一部をリストし、 それに続くサブセクションにおいて地域に従って異なる日付表示、数字や金銭の フォーマットなどの円滑な入出力が可能となるように使用環境を カスタマイズするプロセスである ローカライゼーション について議論します。


    9.7.1 ローカライゼーションの基本

    ローカライゼーションと各国語サポートにはいくつかの観点があります。


    9.7.1.1 キーボードのローカライゼーション

    Debian は24程のキーマップが配布されています。 Woody でのキーボードを再設定するには、次を実行します。


    9.7.1.2 データファイルのローカライゼーション

    膨大な Debian ソフトウェアパッケージの大部分は glibc に存在する ロケール 技術 により提供される LC_CTYPE 環境変数 を通して非 US-ASCII 文字データの操作をサポートしています。


    9.7.1.3 表示のローカライゼーション

    X は UTF-8 を含むあらゆるコーディングを表示できますし、全てのフォントを サポートします。全ての 8 ビットフォントだけでなく、中国語、日本語や韓国語 のような 16 ビットフォントも含まれます。マルチバイト文字の入力メソッドは X での代替入力メソッド, 第 9.7.10 節 メカニズムによりサポートされています。 多言語 X window システムの例, 第 9.7.9 節X 端末エミュレータの UTF-8 サポート, 第 9.7.12 節 をご覧下さい。

    日本語 EUC コードは kon2 パッケージを通して (S)VGA グラフィックコンソールにも表示できます。jfbterm という新しい代わりになる日本語ディスプレイがありますが、これはフレームバッファ 端末も使っています。これらの端末環境では、日本語の入力メソッドが アプリケーションによりサポートされている必要があります。 Emacs で日本語を入力するには、egg パッケージを、 Vim 環境で日本語を入力するには、日本語化された jvim パッケージを使ってください。

    非 Unicode フォントを X にインストールすると、X においてあらゆる エンコーディングのドキュメントを表示するのに役立ちます。ですから、 フォントのエンコーディングについてあまり心配する必要はありません。


    9.7.1.4 メッセージやドキュメンテーションのローカライゼーション

    エラーメッセージ、標準的なプログラムの出力、メニュ、そしてマニュアルページ などの Debian システムで表示されるテキストメッセージやドキュメントの多くは 既に翻訳されています。現在、ドイツ語、スペイン語、フィン語、フランス語、 ハンガリー語、イタリア語、日本語、韓国語、ポーランド語、ポルトガル語、 中国語、そしてロシア語のマニュアルページが manpages-LANG パッケージ (ここで LANG は 2 文字のコンマで分けられた ISO country code のリストです。取得可能な Unix マニュアルページのリストを得る には apt-cache search manpages-|less を使ってください。) を通じて供給されています。

    NLS マニュアルページにアクセスするには、ユーザは環境変数 LC_MESSAGES を 適切な文字列にセットする必要があります。例えば、イタリア語のマニュアルページ の場合は、LC_MESSAGES を it にセットする必要があります。 すると man プログラムは /usr/share/man/it/ の下にある イタリア語のマニュアルページを検索します。


    9.7.2 ロケール

    Debian は ロケール 技術をサポートしています。ロケールは プログラムが文字セット、時刻や時間のフォーマット、通貨文字などのような ローカルのしきたりに従って適切な出力や機能を供給することを可能とするための 機構です。例えば、米国英語とドイツのロケールの両方をシステムにインストール したと仮定すると、多くのプログラムのエラーメッセージは二ヵ国語にできます。

         $ LANG="en_US" cat foo
         cat: foo: No such file or directory
         $ LANG="de_DE" cat foo
         cat: foo: Datei oder Verzeichnis nicht gefunden
    

    Glibc はこの機能のプログラムへのサポートをライブラリとして供給します。 locale(7) をご覧下さい。


    9.7.3 ロケール入門

    完全なロケールの説明は 3つの部分、すなわち xx_YY.ZZZZ から構成されます。

    言語コードと国コードについては、info gettext にある適切な説明 をご覧下さい。

    このコードセット部分はクロスプラットフォーム互換性を達成するために 全ての - を削除し、全ての文字を小文字に変換することにより 内部で正規化されることがあります。典型的なコードセットは次のとおりです。

    基本的なエンコーディングシステムの jargon の意味については次のとおり。

    ISO-8859-?, EUC, ISO-10646-1, UCS-2, UCS-4, そして UTF-8 は ASCII コード を 7 ビット文字のために共有しています。EUC と シフト JIS は 最上位ビットが立った (0x80-0xff) 文字をその部分のエンコードが 16 ビット であることを示すために使います。UTF-8 も最上位ビットが立った文字 (0x80-0xff) をこれが非 7 ビット文字シーケンスバイトであり、これが非 ASCII 文字を操作 するのに最適なエンコーディングシステムであることを示すために使います。

    Unicode の実装でバイトオーダーが異なるものがあることに注意してください。

    各種文字セット間の変換に関しては recode によりテキストファイルを変換する, 第 8.6.12 節 を御覧下さい。 より詳しくは Introduction to i18n をご覧下さい。


    9.7.4 ロケールサポートを有効にする

    Debian は全ての使用可能なロケールを前もってコンパイルして いません。(標準の "C" ロケールを除いて) システムにコンパイルされているロケールの種類を知るには、 /usr/lib/locale をチェックしてください。 必要なロケールがコンパイルされていない場合には、2つのオプションがあります。


    9.7.5 特定のロケールを有効にする

    次に示す環境変数はこの順番で評価され、特定のロケール値をプログラムに提供します。

    1. LANGUAGE: この環境変数はコロンで分割され、優先順位の高い順に並んだ ロケール名のリストです。POSIX ロケールが "C" 以外の値にセットされている場合 のみ使われます。[Woody での説明。Potato では常に POSIX ロケールより高い 優先度を持つ] (GNU 拡張)

    1. LC_ALL: これが null ではない場合、全てのロケールカテゴリに対して 使用されます。(POSIX.1) 通常 "" (null) です。

    1. LC_*: これが null ではない場合、この値は対応するカテゴリに対して 使用されます。(POSIX.1) 通常 "C" です。

      LC_* variables には次の値が存在します。

    1. LANG: これが null でなく、LC_ALL が未定義の場合、この値は 未定義の値の全ての LC_* ロケールカテゴリに対して使われます。(POSIX.1) 通常 "C" です。

    (Netscape4 などの) いくつかのアプリケーションは LC_* の設定を無視する ことに注意してください。

    locale プログラムは有効なロケールの設定と使用可能な ロケールを表示できます。locale(1) をご覧下さい。 (locale -a はシステムが存在を知っている全てのロケールを表示しますが、 これは全てがコンパイル済みであることを意味 しない ことに注意下さい。 ロケールサポートを有効にする, 第 9.7.4 節 をご覧下さい。)


    9.7.6 ISO 8601 日付表示ロケール

    国際的なデータ標準である yyyy-mm-dd 形式 (ISO 8601 データフォーマット) の日付のロケールのサポートは en_DK すなわち "English in Denmark" と呼ばれるロケールによりサポートされています。これはちょっとしたジョークです。 これは端末上で ls のためにしか動かないようです。


    9.7.7 米国 (ISO-8859-1) の例

    次の行を ~/.bash_profile に追加してください。

         LC_CTYPE=en_US.ISO-8859-1
         export LC_CTYPE
    

    9.7.8 ユーロを用いたフランス語の例 (ISO-8859-15)

    次の行を ~/.bash_profile に追加してください。

         LANG=fr_FR@euro
         export LANG
         LC_CTYPE=fr_FR@euro
         export LC_CTYPE
    

    フランスの "AZERTY" キーボードを キーボードのローカライゼーション, 第 9.7.1.1 節 に記述しているように 設定し、manpages-fr をインストールしてフランス語の マニュアルページを追加してください。米国での 右 Alt キーはヨーロッパでは 右 Gr と呼ばれます。これを他のキーと同時に押すと数多くのアクセント付き 文字や特別な文字の入力ができます。例えば、Alt-Gr+E はユーロ記号になります。

    ほとんどの西ヨーロッパ言語は同様に設定可能です。

    新しいユーロ貨幣のサポートを追加するには、 Debian Euro HOWTO を、 フランス語についてより詳しく知るには、 Utiliser et configurer Debian pour le francais をご覧下さい。


    9.7.9 多言語 X window システムの例

    コンソール毎に、日本語と英語とドイツ語とフランス語を、それぞれ EUC と UTF-8 と ISO-8859-1 のエンコーディングで同時にサポートする多言語 X window システム を設定しましょう。

    まず Debian menu システムを用いたカスタマイズをお見せします。 Debian menu システムの詳細は file:///usr/share/doc/menu/html/index.html をご覧下さい。 また、この例では mozilla web ブラウザへのショートカットを 作成します。 [46]

    他の CJK 言語のサポートについては、次の章に続いて SuSE pages for CJK をご覧下さい。


    9.7.10 X での代替入力メソッド

    パッケージとして使用可能な X 入力メソッドがいくつか存在します。

         言語   LC_CTYPE     XIM サーバ  XMODIFIERS              開始キー
         日本語   ja_JP*       kinput2    "@im=kinput2"           Shift-Space
         韓国語     ko_KR*       ami        "@im=Ami"               Shift-Space
         中国語(繁体字) zh_TW.Big5   xcin       "@im=xcin-zh_TW.big5"   Ctrl-Space
         中国語(簡体字) zh_CN.GB2312 xcin       "@im=xcin-zh_CN.GB2312" Ctrl-Space
    

    日本語入力メソッドである kinput2kinput2-canna-wnn, kinput2-canna, kinput2-wnn のようなパッケージにより供給されています。 日本語入力には他に cannafreewnn-jserver のような辞書サーバが実際には 必要になります。


    9.7.11 X ターミナルエミュレータ

    適切なフォントがインストールされた時に 8 ビットエンコーディングを サポートする X 端末は数多く存在します。

    X 端末のマルチバイトエンコーディングのサポートは UTF-8 エンコーディング (X 端末エミュレータの UTF-8 サポート, 第 9.7.12 節)を通じて xterm により供給されています。 他の伝統的なエンコーディングのサポートは (2003 年時点で) 推進中です。 次のパッケージは伝統的なエンコーディングのサポートを提供します。

    kterm では、(多分他の端末でも) Ctrl-中クリックマウス操作をした後にメニュから XIM を有効にしたいかも しれません。


    9.7.12 X 端末エミュレータの UTF-8 サポート

    X ターミナルエミュレータの UTF-8 サポートは、XFree86 4.x 用の xterm パッケージにある uxterm プログラム により供給されています。これは全言語のサポートを可能にします。 これは "UXTerm" X リソースクラスセットを用いた後者のプログラムを起動する xterm(1) プログラムのラッパーです。

    例えば、英語、ロシア語、日本語、中国語、韓国語の文字をきれいに大きく表示 することを可能にするには、関連する全フォントをインストールした後に ~/.Xresources に次を追加してください。

         ! set large font
         UXTerm*font: -misc-fixed-medium-r-normal-*-18-120-100-100-c-90-iso10646-1
         ! Use XIM for Japanese
         *inputMethod: kinput2
    

    そして X リソースを更新するため、 X リソース, 第 9.4.10 節 に記述されているように xrdb -merge ~/.Xresources を起動します。

    vim, muttemacs のような 有名なコンソールプログラムのほとんどは最近 (Woody から Sarge にかけて) UTF-8 と互換性がありますが、mc のようなプログラムは まだ UTF-8 互換ではなく、シンプルな 8 ビット文字を表示できるだけです。 未知あるいは混在したエンコーディングのファイルの中の 7 ビット ASCII の 部分を編集する場合、ロケールを気にしない 8 ビットクリーンなエディタを 使う方が安全です。

    The Unicode HOWTO をご覧下さい。


    9.7.13 フレームバッファコンソールで UTF-8 を使う例

    フレームバッファコンソール上での UTF-8 のサポートは debian-installer 上で使用される bterm により供給されています。


    9.7.14 ロケールを越えて

    まず最初に 母国語環境 の設定を行う際には、 言語環境に対応するタスクを選ぶことにより選び抜かれるパッケージを調べるために taskselaptitude を使うことを考えてください。 このパッケージの選択は多言語環境のセットアップのためでも役に立ちます。 システムを注意深く設定するために、インストール中に依存性の衝突に出くわした 場合、既存のシステムと衝突するソフトウェアのインストールを避けてください。 新たにインストールしたパッケージは既存のパッケージよりも高い優先度を 持っているかもしれないので、いくつかのコマンドでは元の状態に戻す ために update-alternative を使う必要があるかもしれません。

    新しめの主要なプログラムは glibc 2.2 を使っており、ほぼ国際化されています。 それゆえ、Vim に対する jvim のような特別に国際化された バージョンは vim version 6.0 により X 上でほぼ同様の機能が 提供されているために必要では無いかもしれません。 現実には、まだいくらかおおざっぱです。jvim は端末上でも直接 日本語入力メソッド (canna) のサポート付きでコンパイルされており、 さらに多くの他の日本語特有の問題に分別深く対応しているので、まだこれが欲しい かもしれません。 :-)

    快適な作業環境を可能にするには、ロケール 設定を越えた設定が 必要になるかもしれません。language-env パッケージや その set-language-env コマンドはこの設定作業をかなり 軽減してくれます。

    又、国際化に関する文書である Introduction to i18n もご覧下さい。 これは開発者向けですが、システム管理者に対しても有用です。


    9.8 マルチリンガリゼーション (m17n)

    language-env 類似パッケージによって実現される ローカライゼーション (l10n), 第 9.7 節 は単一言語によるローカリゼーションを目指しています。 これらのパッケージはテキストのエンコーディングとして 伝統的エンコーディングを使います。このような環境下では、フランス語と日本語は それぞれ ISO-8859-1 と EUC-JP という相容れないエンコーディングを使うので テキストを混ぜることが出来ません。

    多言語化された UTF-8 デスクトップは、Gnome や KDE のプログラムを、 存在する UTF-8 ロケールのうちのいずれかにロケールを設定した上で 起動することにより得られます。 (Sarge) そのような環境下では、UTF-8 対応のソフトの下で、英語、中国語、 ロシア語、日本語の文字を混ぜて使えます。

    そのような環境では、新しい scim を用いる多言語化された 入力メソッド (IM) が好まれています。 scim により提供される入力メソッドは、 Ctrl と Space を同時に押すことにより on/off できます。 入力変換エンジンは、小さな SCIM パネルをクリックすることにより、 切替え可能です。

    vim は、UTF-8 端末、例えば gnome-terminal などで起動された時に、多言語化された環境を提供し、 UTF-8 および伝統的なエンコードのファイル (EUC-JP、ISO-8859-1 など) の両方を扱うことが可能です。 [Esc] キーを押して、:help mbyte.txt とタイプすれば、 vim のヘルプメッセージを表示できます。


    [ 前のページ ] [ 目次 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 次のページ ]


    Debian Reference
    第 10 章 - ネットワークの設定


    この章では Debian でのネットワーク管理に焦点を当てています。 GNU/Linux のネットワークに関する一般的な紹介は Net-HOWTO をごらんください。

    Debian ホストのインターネットへのアクセスを可能にするには、 ネットワークインターフェイスが適切に設定される必要があります。

    まず最初に必要なことは、ネットワークインターフェイスデバイスのカーネルサポートです。 ネットワークデバイスの例としては、以下が挙げられます: イーサネットカード、無線 LAN カードやモデム。 ネットワークインターフェイスデバイスを kernel がサポートすることです。 これらのサポートを有効にするには、 Debian での Linux kernel, 第 7 章 で記述されているように kernel を再構築してモジュールを追加する必要があるかもしれません。

    ネットワークデバイスの設定は以降で説明します。 本章の情報は Sarge 向けに更新されました。 本章の内容のほとんどは以前のリリースには適用できません。


    10.1 IP ネットワークの基礎

    Debian ホストはそれぞれが異なった Internet Protocol (IP) アドレスを持った 複数のインターフェイスを持つことができます。 インターフェイスは次に挙げるいくつかの異なるタイプかもしれません。

    SLIP, PLIP (srrial line IP と pararell line IP), 特定のデバイスで トラフィックを制御するための "shaper" なデバイス, フレームリレー, Ax.25, X.25, ARCnet そして LocalTalk のような他のさまざまな種類の ネットワークデバイスが使用可能です。

    インターネット (又は IP ベースのネットワーク) に直接接続された全ての ネットワークインターフェイスはユニークな 32 ビットの IP アドレスにより 識別されます。 [51] IP アドレスネットワークを示す部分とホストを示す部分に分割できます。 IP アドレスのネットワークアドレスの部分を 1 に、ホストアドレスの 部分を 0 にすると、ネットワークのいわゆるネットマスクが得られます。

    伝統的に、IP ネットワークはそれぞれ 8 ビット、16 ビット、24 ビットの長さの ワークアドレス部分を持つクラスに分類されています。 これらのシステムは柔軟性に欠けており、多数の IP アドレスを無駄にしていました。 それゆえ、今日では IPv4 ネットワークは可変長のネットワークアドレス部分を持つ ように割り当てられています。

                         IP アドレス               ネットマスク   長さ
         クラス A   1.0.0.0     - 126.255.255.255  255.0.0.0     =  /8
         クラス B   128.0.0.0   - 191.255.255.255  255.255.0.0   = /16
         クラス C   192.0.0.0   - 223.255.255.255  255.255.255.0 = /24
    

    以上の長さを持たない IP アドレスは特別な目的に用いられます。

    各クラスのためにローカルエリアネットワーク (LAN) で使用するために予約された アドレスの範囲が存在します。 これらのアドレスはインターネット上のあらゆるアドレスと衝突しないことが 保証されています。 (同じトークンにより、これらのアドレスの 1つがホストに割り当てられた場合、 そのホストはインターネットに直接アクセスしてはいけませんが、 個別のサービスのためのプロキシとして機能するゲートウェイを通して アクセスするか、ネットワークアドレス変換を通じてアクセスする 必要があります。) これらのアドレスの範囲はそれぞれのクラスにあるアドレスの数に応じて、 次のテーブルに示すように与えられています。

                       ネットワークアドレス      長さ    数
         クラス A   10.x.x.x                     /8      1
         クラス B   172.16.x.x -  172.31.x.x     /16     16
         クラス C   192.168.0.x - 192.168.255.x  /24     256
    

    IP ネットワークの最初のアドレスはネットワーク自身のアドレスです。 最後のアドレスはネットワークのブロードキャストアドレスです。 [52] 他の全てのアドレスはネットワーク上のホストに割り当てられます。 これらのうち、最初又は最後のアドレスは通常ネットワークの インターネットゲートウェイに割り当てられます。

    ルーティングテーブルは kernel の目的地への IP パケットの送信方法 についての情報を含んでいます。 ここに IP アドレス 192.168.50.x/24 を持つローカルエリアネットワーク (LAN) 上の Debian ホストのためのサンプルのルーティングテーブルを示します。 ホスト 192.168.50.x (LAN 上にもある) は企業ネットワーク 172.20.x.x/16 のためのルータであり、192.168.50.254 (LAN 上にもある) はインターネット 用のルータです。

         # route
         Kernel IP routing table
         Destination   Gateway        Genmask       Flags Metric Ref Use Iface
         127.0.0.0     *              255.0.0.0     U     0      0     2 lo
         192.168.50.0  *              255.255.255.0 U     0      0   137 eth0
         172.20.0.0    192.168.50.1   255.255.0.0   UG    1      0     7 eth0
         default       192.168.50.254 0.0.0.0       UG    1      0    36 eth0
    

    テーブル上の IP アドレスは /etc/networks を調べるか C ライブラリのリゾルバを用いて得られる名前としても表せます。

    ルーティングに加え、kernel はネットワークアドレス変換、トラフィック整理 やフィルタリングも行えます。

    より詳しい背景情報については Net-HOWTOother networking HOWTOs をごらんください。


    10.2 低レベルネットワークの設定

    GNU/Linux システム上での伝統的な低レベルネットワーク設定ツールとしては net-tools パッケージに収録されている ifconfigroute プログラムがあります。 これらのツールは公式に iproute パッケージに収録 されている ip により取って代われています。 ip プログラムは Linux 2.2 以上で動き、旧式のツールよりも より機能的です。しかしながら、旧式のツールもまだ動き、多くのユーザにより 親しまれています。


    10.2.1 低レベルネットワーク設定ツール – ifconfigroute

    ここにインターフェイス eth0 の IP アドレスを 192.168.0.3 から 192.168.0.111 に変更し、192.168.0.1 経由で 10.0.0.0 ネットワークに通すように eth0 を設定 する方法を示します。 現在の全てのネットワークインターフェイスとルーティングの状況を表示するため、 まずはインターフェイス引数無しで ifconfigroute を起動することから始めましょう。

         # ifconfig
         eth0 Link encap:Ethernet  HWaddr 08:00:46:7A:02:B0
              inet addr:192.168.0.3  Bcast:192.168.255.255  Mask:255.255.0.0
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:23363 errors:0 dropped:0 overruns:0 frame:0
              TX packets:21798 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:100
              RX bytes:13479541 (12.8 MiB)  TX bytes:20262643 (19.3 MiB)
              Interrupt:9
         
         lo   Link encap:Local Loopback
              inet addr:127.0.0.1  Mask:255.0.0.0
              UP LOOPBACK RUNNING  MTU:16436  Metric:1
              RX packets:230172 errors:0 dropped:0 overruns:0 frame:0
              TX packets:230172 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0
              RX bytes:22685256 (21.6 MiB)  TX bytes:22685256 (21.6 MiB)
         # route
         Kernel IP routing table
         Destination  Gateway      Genmask          Flags Metric Ref Use Iface
         192.168.0.0  *            255.255.0.0      U     0      0     0 eth0
         default      192.168.0.1  255.255.255.255  UG    0      0     0 eth0
    

    まずインターフェイスをダウンさせます。

         # ifconfig eth0 inet down
         # ifconfig
         lo   Link encap:Local Loopback
           ... (eth0 エントリはもはや存在しない)
         # route
           ... (ルーティングテーブルのエントリももはや存在しない)
    

    次に eth0 を新しい IP アドレスと新しいルーティングを用いて立ち上げます。

         # ifconfig eth0 inet up 192.168.0.111 \
                    netmask 255.255.255.0 broadcast 192.168.0.255
         # route add -net 10.0.0.0 netmask 255.0.0.0 gw 192.168.0.1 dev eth0
    

    結果は次のようになります。

         # ifconfig
         eth0 Link encap:Ethernet  HWaddr 08:00:46:7A:02:B0
              inet addr:192.168.0.111  Bcast:192.168.0.255  Mask:255.255.255.0
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              ...
         
         lo   Link encap:Local Loopback
              inet addr:127.0.0.1  Mask:255.0.0.0
              ...
         # route
         Kernel IP routing table
         Destination  Gateway      Genmask      Flags Metric Ref Use Iface
         192.168.0.0  *            255.255.255.0  U     0      0     0 eth0
         10.0.0.0     192.168.0.1  255.0.0.0    UG    0      0     0 eth0
    

    より詳しい情報は、ifconfig(8)route(8) をごらんください。


    10.2.2 低レベルネットワーク設定ツール – ip

    前記の ifconfigroute コマンドと等価な ip コマンドは次のようになります。

    ip プログラムは引数 help 付きで起動するとその コマンド文法を表示します。例えば、ip link help は次を表示します。

         Usage: ip link set DEVICE { up | down | arp { on | off } |
                              dynamic { on | off } |
                              multicast { on | off } | txqueuelen PACKETS |
                              name NEWNAME |
                              address LLADDR | broadcast LLADDR |
                              mtu MTU }
                ip link show [ DEVICE ]
    

    ip(8) をごらんください。


    10.2.3 無線 LAN インターフェイスの設定

    無線 LAN インターフェイスの設定には、wireless-tools パッケージに収録されている iwconfig プログラムが ifconfigip の両方に加えて使われます。

    iwconfig(8) をごらんください。


    10.2.4 PPP インターフェイスの設定

    インターネットにダイアルアップ電話線を接続したモデム経由でアクセス する場合、Point-to-Point Protocol (PPP) を用いて接続をネゴシエイト します。そのような接続はネットワークインターフェイス ppp0, ppp1, などとしてアクセスされます。

    PPP インターフェイスは ppp パッケージに収録されている PPP デーモン pppd により管理されます。 それゆえ、ユーザにとっては、PPP インターフェイスを設定するのは pppd を設定することを意味します。


    10.2.4.1 pppd を手動で設定する

    ネットワークリンクを確立するには、通信ポート (通常シリアルポート) を開き、コマンドを通信デバイス (通常はモデム) に送信し、 電話番号をダイアルし、外部の PPP デーモンへの認証を行い、 PPP インターフェイスがカーネルにより作成され、トラフィックが リンクを通じて送られるようにルーティングテーブルが修正される必要があります。 pppd はこれらの仕事の全てをこなし、その結果として 非常に長い操作オプションのリストを持ちます。 これらのオプションは pppd(8) に記述されています。

    Debian システムでは、汎用のオプションは /etc/ppp/options にセットされています。ユーザが指定するオプションは ~/.ppprc にセットします。使用する通信ポートに依存するオプションは /etc/ppp/options.portname に保存されます。 例えば、二つのモデム — 組込みの /dev/LT-modem を通じてアクセス される Lucent LT モデムと外付けの /dev/ttyS0 を通じてアクセスされる モデムを持っていると仮定します。 次の 2 つのオプションファイルを作成します。

         # cat > /etc/ppp/options.LT-modem <<EOF
         115200
         init "/usr/sbin/chat -f /etc/chatscripts/setup-LT-modem"
         EOF
         # cat > /etc/ppp/options.ttyS0 <<EOF
         115200
         init "/usr/sbin/chat -f /etc/chatscripts/setup-ttyS0"
         EOF
    

    これらは次のチャットスクリプトを参照しています。まず、 /etc/chatscripts/setup-LT-modem です。

         ABORT ERROR
         '' ATZ
         OK 'ATW2X2 S7=70 S11=55'
         OK AT
    

    次に、/etc/chatscripts/setup-ttyS0 です。

         ABORT ERROR
         '' ATZ
         OK 'ATL1M1Q0V1W2X4&C1&D2 S6=4 S7=70 S11=55 S95=63 S109=1 +FCLASS=0'
         OK AT
    

    これらのファイルの内容はもちろんハードウェアに依存している必要があります。

    オプションは pppd に引数としても与えられます。

    Debian では、pppd は普通 pon コマンドを 用いて起動されます。pon が起動されると、その第一引数は pppd によっても読まれる /etc/ppp/peers/ に あるオプションファイルと同じ名前です。 [53] こうして特定の peer—例えば、特定のインターネットサービスプロバイダ (ISP) を指定するオプションを設定できます。

    例えば、アムステルダムとハーグの間を通信したいとします。 それぞれの町には 2つの ISP サービス—Planet と KPN を持っています。 まず各 ISP 用の基本的なオプションファイルを作ります。

         # cat > /etc/ppp/peers/KPN <<EOF
         remotename KPN
         noauth
         user kpn
         noipdefault
         ipparam KPN
         EOF
         # cat > /etc/ppp/peers/Planet <<EOF
         remotename Planet
         auth
         user user3579@planet.nl
         noipdefault 
         mru 1000
         mtu 1000
         ipparam Planet
         EOF
    

    これらのファイルは 2つの ISP 間で異なるオプションを設定します。 両方の ISP に共通のオプションは /etc/ppp/options 又は適切なインターフェイス独自のオプションファイルのどちらかに 置きます。

    次にそれぞれの町のための各 ISP 用のオプションファイルを作成します。 この例では片方の場所の ISP へ接続するのと他の場所の ISP に 接続する時の違いのみを必要なチャットスクリプトにします。 (ローカルのアクセス電話番号が異なるので、チャットスクリプトは異なります。)

         # cat > /etc/ppp/peers/KPN-Amsterdam <<EOF
         connect "/usr/sbin/chat -v -f /etc/chatscripts/KPN-Amsterdam"
         file /etc/ppp/peers/KPN
         EOF
         # cat > /etc/ppp/peers/KPN-DenHaag <<EOF
         connect "/usr/sbin/chat -v -f /etc/chatscripts/KPN-DenHaag"
         file /etc/ppp/peers/KPN
         EOF
         # cat > /etc/ppp/peers/Planet-Amsterdam <<EOF
         connect "/usr/sbin/chat -v -f /etc/chatscripts/Planet-Amsterdam"
         file /etc/ppp/peers/Planet
         EOF
         # cat > /etc/ppp/peers/Planet-DenHaag <<EOF
         connect "/usr/sbin/chat -v -f /etc/chatscripts/Planet-DenHaag"
         file /etc/ppp/peers/Planet
         EOF
    

    それぞれの file 指示は早く示されるオプションファイルの一つ の一つを含みます。 connect 指示は接続を確立するために pppd が使う コマンドを指示します。 通常この目的には chat プログラムを使い、 チャットスクリプトを ISP に適応させます。 アムステルダムは電話番号を除いて同じかもしれませんし、ISP が 他の会社を通じてサービスを提供しているならば、異なるかもしれません。

         # cat > /etc/chatscripts/KPN-DenHaag <<EOF
         ABORT BUSY
         ABORT 'NO CARRIER'
         ABORT VOICE
         ABORT 'NO DIALTONE'
         ABORT 'NO DIAL TONE'
         ABORT 'NO ANSWER'
         ABORT ERROR
         OK-AT-OK ATDT 0676012321
         CONNECT \d\c
         EOF
         # cat > /etc/chatscripts/Planet-DenHaag <<EOF
         ABORT BUSY
         ABORT 'NO CARRIER'
         ABORT VOICE
         ABORT 'NO DIALTONE'
         ABORT 'NO DIAL TONE'
         ABORT 'NO ANSWER'
         ABORT ERROR
         OK-AT-OK ATDT 0676002505
         CONNECT \d\c
         EOF
    

    これらの ISP と接続を確立できるようにするには、pppd が peer に要求に応じて供給するクライアント名とパスワードが必要です。 これらの情報は /etc/ppp/pap-secrets (PAP プロトコル使用時) 又は /etc/ppp/chap-secrets (CHAP プロトコル使用時) に保存されます。 CHAP はより安全ですが、PAP は依然広く使われています。 これらのファイルには秘密が含まれているので、グループと他人が読み書きできない ファイルアクセス権限を設定しなくてはなりません。 これらのファイルのフォーマットは pppd(8) で 説明されています。 "secret" (3 番目のフィールド) はファイル中のクライアント名 (最初のフィールド) および/又は サーバ名 (2 番目のフィールド) を検索することにより調べられます。 ISP に接続している場合、一般にサーバ名は知りませんので、クライアント名を 代わりに供給します。これは上に示した peers/KPNpeers/Planetにある user 行で行われます。

         # client name       server name  secret
         kpn                 *            kpn
         user3579@planet.nl  *            myfavoritepet
    

    詳細は file:///usr/share/doc/ppp/README.Debian.gz をごらんください。


    10.2.4.2 pppconfig を用いて pppd を設定する

    pppd を設定する手軽な方法は同名のパッケージにより 供給される pppconfig を使うことです。 pppconfig はメニュインターフェイスを通じてユーザが質問 に答えた後に上に示したようなファイルを設定します。


    10.2.4.3 wvdial を用いて PPP インターフェイスを設定する

    pppd を用いる異なるアプローチとしては、 wvdial パッケージに収録されている wvdial から pppd を起動することです。 pppd の代わりに、chat を起動してダイアルし、 接続のネゴシエイトを行います。wvdial はダイアルと最初のネゴ シエイトを行い、そして残りの作業を行うために pppdを起動します。 電話番号、ユーザ名、そしてパスワードを与えるだけで wvdial は ほとんどの場合接続を確立できます。


    10.3 コンピュータの名前付け


    10.3.1 ホスト名

    カーネルはシステムの ホスト名を維持します。 initscript /etc/init.d/hostname.sh はシステムのホスト名を ブート時に (hostname を用いて) /etc/hostname に保存されている名前に設定します。 このファイルには完全修飾ドメイン名 (FQDN) ではなく、 システムのホスト名 のみ が含まれていなくてはなりません。

    現在のホスト名を表示するには、引数無しで hostname を起動してください。


    10.3.2 Mailname

    ホストの mailname はホストを識別するためにメール関連の プログラムが使用する名前です。 /etc/mailname ファイルには名前に続いて改行を持つ行が 含まれます。 mailname はホストの IP アドレスの一つを解決する完全修飾ドメイン名です。 mailname(5) をごらんください。

    Debian ホストにより送信されるメールの From: ヘッダにある 受取人が何かは Mail User Agent (MUA) や Mail Transfer Agent (MTA) がどのように設定されているかに依存します。 ローカルユーザ foo がメールを mailname myhost.dom から送ると仮定します。 すると、送信されるメールの From: ヘッダは次のようになります。

    MUA が From: ヘッダをセットしたとしても、MTA が "Sender:foo@herman.dom" ヘッダを 本当の発信源を示すために追加するかもしれません。

    もちろん Exim の元で存在しないメールアドレスのための物置を設定する, 第 9.6.1.3 節Exim の元で送信メールに対してアドレス書き換えを設定する, 第 9.6.1.4 節 で議論 したように、受信者が見るメールアドレスは他のアドレスに変更可能です。


    10.4 ドメインネームサービス (DNS)

    ホストは IP アドレスに加え、ドメイン名によっても参照されます。 DNS はネームリゾルバがドメイン名を IP アドレスや他のホストの属性と 関連付けるためにネームサーバを勤めるクライアントサーバシステムです。 GNU C ライブラリ resolver(3) もファイルにある IP アドレスの検索を行えますし、Network Information Services (NIS) の役目も勤めます。

    ソフトウェアには (例えば GNOME のように) システムのホスト名が標準的な FQDN を持つ IP アドレスに解決可能であることを期待しています。 システムのホスト名どドメイン名はまったく異なるものであるため、これは 本当に不適切です。しかし、これらのソフトを使わざるを得ません。 これらのソフトをサポートするには、システムのホスト名が解決可能 であることを保証する必要があります。 ほとんどの場合、これは /etc/hosts に IP アドレスと システムのホスト名を含む行を追加することにより行なわれます。 システムに継続的な IP アドレスが割り当てられている場合、この手段は 利用できますが、そうでは無い場合、アドレス 127.0.0.1 を使います。

          127.0.0.1 localhost
          127.0.0.1 uranus
    

    システムのホスト名が FQDN を持つ IP アドレスに解決可能であるかを 知るには、hostname --fqdn コマンドを使用ください。


    10.4.1 リゾルバ

    特定のドメイン名に関連づけられた IP アドレスを捜し出す仕事は、リゾルバ の仕事です。最も良く使われているリゾルバは GNU C ライブラリにある リゾルバ (resolver(3)) により実現される 関数群です。他のリゾルバとしては、libfiredns パッケージに収録されている FireDNS リゾルバがあります。 他のパッケージも存在します。

    どのように GNU LIBC リゾルバが名前を解決するかは /etc/nsswitch.conf 設定ファイル中の hosts 行により制御されています。 この行は名前を解決するために使われるサービス、例えば dns, files, nis, nisplus をリストしています。 nsswitch.conf(5) をごらんください。 files サービスが使用されている範囲については、リゾルバの挙動は /etc/hosts 設定ファイルによっても制御されています。 hosts(5) をごらんください。

    上の全てのファイルは静的であり、お好みのエディタで編集できます。

    dns サービスが使用される範囲においては、リゾルバの挙動は /etc/resolv.conf 設定ファイルによっても制御されています。 resolv.conf(5) をごらんください。 resolv.conf の重要な機能のひとつは、名前を解決するために 接続されるネームサーバの IP アドレスをリストすることです。 このリストはたびたびネットワーク環境に依存し、ネットワーク環境はコンピュータ を起動する間時にふれて変化します。 pppddhclient のようなプログラムは resolv.conf 内の行を追加したり削除する操作を行えますが、 これらの機能は常に適切に動くとは限らず、お互いに衝突しかねません。 resolvconf パッケージはこのファイルを更新するための 標準的なフレームワークを供給することにより、よりうまくこの問題を解決します。 ネームサーバ情報の管理 – resolvconf, 第 10.4.2 節 をごらんください。


    10.4.2 ネームサーバ情報の管理 – resolvconf

    resolvconf パッケージは利用可能なネームサーバ に関する情報の動的な管理のためのフレームワークを供給します。 リゾルバや DNS キャッシュが使うためのネームサーバのリストを動的に管理 する方法についての長年の問題を解決します。 resolvconf は自身をネットワークインターフェイスを制御するプログラムと ネームサーバ情報を供給するプログラム、そしてネームサーバ情報を必要とする アプリケーションの間の仲介人として設定します。

    resolvconf は手動の設定を必要とせずに動作するように 設計されています。しかしながら、パッケージはまだ非常に新しく、 適切に動作させるためには、まだ手動の介入をいくらか必要とするかもしれません。 あなたが /etc/resolv.conf を更新するようにパッケージを カスタマイズしたならば、これは確実に当てはまります。ですので、 カスタマイズを無効にする必要があります。 詳細は file:///usr/share/doc/resolvconf/README.gz をごらんください。


    10.4.3 検索した名前をキャッシュする – nscd, dnsmasq, pdnsd, bind9

    もしネームサーバの反応が遅い場合は libc6 リゾルバ を用いて検索される結果を nscd を用いてキャッシュしたくなる でしょう。

    もしあなたのローカルネットの他のホストのために検索結果をキャッシュしようと するなら、dnsmasqpdnsd のような キャッシュフォワーディングネームサーバを使うのがいいでしょう。

    bind9named も キャッシュフォワーディングネームサーバとして使えない事はありません。 ただ重いプログラムなので、その先進的機能を使わないなら、 先程述べた他のプログラムを使う方が賢明です。 resolvconf と連係しうまく動きます。


    10.4.4 ドメインネームサービスを供給する – bind

    あるドメインのための信頼できるネームサービスを供給する必要がある場合、 bind9 パッケージ による named のような完全に一人前のネームサーバが必要です。 新たにインストールする場合、bind9 がお薦めです。

    bind9 をインストールした際には、dnsutils もインストールしましょう。 次に、bind9-host, dns-browse, dnscvsutil, nslint のような ユーティリティパッケージもインストールしたいかもしれません。 さらに、bind9-doc のようなドキュメントパッケージも インストールしたいかもしれません。そして、libbind-devlibnet-dns-perl のような開発用パッケージもインストール したいかもしれません。

    基本的な設定を行うには、bind9 をインストールするか、 dpkg-reconfigure を実行しましょう。設定は named.conf を編集することです。 Debian では、このファイルは /etc/bind/ にあり、 主に基本的な DNS ゾーンの定義のために用いられます。 このファイルには named.conf.local というローカルゾーンを定義する ファイルと、named.conf.options という設定オプションのために 用いられるファイルという二つの別ファイルが 含まれます。 (後者は /var/run/bind/named.options ファイルを生成するために resolvconf によって処理されます。この生成ファイルは forwarders 指定が現在利用できるローカルではないネームサーバの リストであるという点を除いてオリジナルと同じです。 これを利用するには、named.confinclude 行が /var/run/bind/named.options を含むように変更してください。 ネームサーバ情報の管理 – resolvconf, 第 10.4.2 節 をごらんください。)

    完全なパス名無しで named.conf* という名前のデータベースファイル が /var/cache/bind/ に保存されます。 これは named により生成されるファイルを保存する正しい場所です。 例えば、デーモンが働いているセカンダリゾーン用のデータベースファイルです。 /etc/bind/ にある静的なデータベースファイルは、 フルパス名により named.conf にあるものと参照 されなくてはなりません。詳細は file:///usr/share/doc/bind9/README.Debian.gz をごらんください。


    10.5 DHCP を用いてネットワークインターフェイスを設定する

    低レベルのネットワークインターフェイスの設定は Dynamic Host Configuration Protocol (DHCP) を用いて自動化できます。 ファイアーウォールやルータボックス、そしてあなたが使っているブロードバンド ISP は IP アドレスや他のパラメータをこの方法で提供しているかもしれません。

    DHCP を動かすには、次のパッケージのうち一つをインストールする必要があります。

    pump はシンプルで広く使われています。 dhcp3-client は複雑ですがより広範な設定が可能です。 [54]


    10.6 Debian での高レベルなネットワーク設定


    10.6.1 ifupdownを用いた高レベルなネットワーク設定

    ネットワーク設定をより容易にするため、Debian は ifupifdown プログラムと /etc/network/interfaces ファイル から構成される標準の高レベルネットワーク設定ツールを供給します。 [55] ネットワークの設定に ifupdown を使おうとした場合、 通常低レベルのコマンドを同時に使うべき ではありません。 これは、低レベルな設定ツールを呼び出す whereami, divine,intuitively などのような他の 高レベルな設定ツールを使うべきではないということも意味しています。 ifupdown プログラムはこのプログラム単独でネットワーク インターフェイスの設定や設定解除に利用されるという意図を持って書かれました。

    インターフェイスの設定を更新するには、次のようにします。

         # ifdown eth0
         # editor /etc/network/interfaces  # お好きなようにいじる
         # ifup eth0
    

    より詳しい情報は interfaces(5), file:///usr/share/doc/ifupdown/examples/network-interfaces.gz, と ifup(8) をごらんください。


    10.6.1.1 スタティック IP アドレスを用いたインターフェイスの設定

    192.168.0.111 の固定 IP アドレスを持った Ethernet インタフェース の設定を行いたいと仮定します。このアドレスは 192.168.0 から始まるので、LAN 上にある必要があります。さらに、LAN のインターネットへのゲートウェイの アドレスを 192.168.0.1 と仮定します。 次のような行を含むように /etc/network/interfaces を編集しましょう。

         iface eth0 inet static
                address 192.168.0.111
                netmask 255.255.255.0
                 gateway 192.168.0.1
    

    "up" や "down" 行の適切なコマンドを指定することにより、インターフェイスの 他の面についての設定ができますし、インターフェイスを 立ち上げた後又は落とした後に他のアクションを取ることもできます。

         iface eth0 inet static
           	address 192.168.0.111
                 netmask 255.255.255.0
                 gateway 192.168.0.1
                 up route add -net 10.0.0.0 netmask 255.0.0.0 gw 192.168.0.2 dev $IFACE
           	down route del -net 10.0.0.0 netmask 255.0.0.0 gw 192.168.0.2 dev $IFACE 
                 up echo Interface $IFACE going up | /usr/bin/logger -t ifup
                 down echo Interface $IFACE Going down | /usr/bin/logger -t ifdown
    

    その代わりに、/etc/network/if-up.d/etc/network/if-down.d ディレクトリにスクリプトを挿入できます。 そのようなスクリプトは拡張オプションも実装できます。 詳細は interfaces(5) をごらんください。 例えば、resolvconf パッケージには インターフェイスを立ち上げるときに /etc/resolv.conf に含まれるような DNS 情報を指定するオプションを追加できます。

         iface eth0 inet static
                 address 192.168.0.111
                 netmask 255.255.255.0
                 gateway 192.168.0.1
                 dns-search somedomain.org
                 dns-nameservers 195.238.2.21 195.238.2.22
    

    dns-search オプションの somedomain.org 引数は resolv.conf(5) にある search オプションの引数に対応します。 dns-nameservers オプションの 195.238.2.21 および 195.238.2.22 引数は nameserver オプションの引数に 対応します。 他の利用可能なオプションとしては、dns-domaindns-sortlist があります。 ネームサーバ情報の管理 – resolvconf, 第 10.4.2 節 をごらんください。


    10.6.1.2 DHCP を用いてインターフェイスを設定する

    DHCP を用いてインターフェイスを設定するには、 次のような行を含めるように /etc/network/interfaces を編集してください。

         iface eth0 inet dhcp
    

    これを機能させるには、 DHCP を用いてネットワークインターフェイスを設定する, 第 10.5 節 で言及した DHCP クライアント のうちいずれかをインストールする必要があります。


    10.6.1.3 無線 LAN インターフェイスの設定を行う

    wireless-tools パッケージには、インターフェイスを 立ち上げる前に無線 LAN (802.11a/b/g) ハードウェアの設定を可能とする フックスクリプト /etc/network/if-pre-up.d/wireless-tools が含まれます。 設定は iwconfig プログラムを通じて行われます。 iwconfig(8) をごらんください。 iwconfig に与えることが可能なコマンドパラメータそれぞれ に対して、"wireless-" 接頭辞を付けたパラメータのような名前で /etc/network/interfaces 内にオプションとして含めることが できます。 例えば、DHCP を用いて eth0 を立ち上げる前に eth0 の ESSID を myessid に、暗号鍵を 123456789e に設定するには、次のような行を含むように /etc/network/interfaces を編集しましょう。

         iface eth0 inet dhcp
                 wireless-essid myessid
                 wireless-key 123456789e
    

    このインターフェイスに対して waproamd を走らせている場合、 ESSID と暗号鍵を設定するこの方法を用いるべきではありません。 ifup が起動された時、waproamd は既に ESSID と暗号鍵を設定済みです。 ネットワーク設定のトリガを設定する – waproamd, 第 10.8.4 節 をごらんください。


    10.6.1.4 PPP インターフェイスの設定を行う

    ifupifdown プログラムは PPP インターフェイスの追加と削除のために ponpoff を使います。ですから、まずは PPP インターフェイスの設定, 第 10.2.4 節 を読みましょう。

    peer myisp に対して動くように PPP を設定する必要があると仮定します。 次のような行を含むように /etc/network/interfaces を 編集しましょう。

         iface ppp0 inet ppp
                 provider myisp
    

    この一区切りが正しい位置にあれば、ifup ppp0 は次を実行します。

         pon myisp
    

    不運なことに、/etc/network/interfaces にある ppp 節に pppd オプションをさらに供給することはいまのところ できません。 [56]

    現在 PPP インターフェイスの補助的な設定を行うために ifupdown を使うことはできません。ponpppd が接続を 確立する前に存在するため、ifup は インターフェイスの 準備ができる前に up スクリプトを起動します。 このバグ [57] が修正されるまでは、/etc/ppp/ip-up 又は /etc/ppp/ip-up.d/ にある補助的な設定を実行する必要性が 残ります。


    10.6.1.5 PPPoE インターフェイスの設定を行う

    たとえ、カスタマのマシンが Ethernet や ATM ネットワーク経由でつないでいた としても、多くのブロードバンドインターネットサービスプロバイダ (ISP) は PPP を接続のネゴシエイトを行うために使用します。 これは PPP over Ethernet (PPPoE) により実現されます。この技術は PPP ストリームを Ethernet フレーム内にカプセル化する技術です。 ISP が myisp と呼ばれていると仮定します。 まず peer myisp のための PPP と PPPOE を設定します。 最も簡単な方法は pppoeconf パッケージをインストールし、 コンソールから pppoeconf を起動することです。 次に、下に示す行を含むように /etc/network/interfaces を編集します。

         iface eth0 inet ppp
                 provider myisp
    

    時々 PPPoE over DSL を用いた時の Maximum Transmit Unit (MTU) についての問題が発生します。 詳細は DSL-HOWTO をごらんください。

    ブロードバンドモデムがルータ機能を持っている場合、モデム/ルータは それ自身で PPPoE 接続を操作し、LAN 側では単なる インターネットへの Ethernet ゲートウェイにしか見えないことに注意してください。


    10.6.1.6 ゲートウェイ用に複数の Ethernet インターフェイスを設定する

    eth0 が DHCP により設定した IP アドレスを用いてインターネット に接続し、eth1 が固定 IP アドレス 192.168.1.1 を用いて LAN に接続していると仮定します。 次に示すような行を含むように /etc/network/interfaces を編集しましょう。

         iface eth0 inet dhcp
         
         iface eth1 inet static
                 address 192.168.1.1
                 netmask 255.255.255.0
    

    ゲートウェイルータを構築する, 第 10.12 節 に記述しているようにホストの NAT を有効にしている 場合、LAN 上の全てのホストでインターネット接続を共有できます。


    10.6.1.7 仮想インターフェイスを設定する

    仮想インターフェイスを用いると、1つの Ethernet カードを複数の IP サブネットへのインターフェイスとして設定できます。 例えば、ホストが 192.168.0.x/24 の LAN ネットワーク上にあると仮定 します。ホストを既存の Ethernet カードを用いて DHCP を用いて供給される パブリックな IP アドレスを用いてインターネットに接続したい場合、 次に示すような行を含むように /etc/network/interfaces を編集しましょう。

         iface eth0 inet static
                 address 192.168.0.1
                 netmask 255.255.255.0
                 network 192.168.0.0
                 broadcast 192.168.0.255
         
         iface eth0:0 inet dhcp
    

    インターフェイス eth0:0 は仮想インターフェイスです。 これが立ち上がると、親の eth0 も立ち上がります。


    10.6.2 ifupdown論理インターフェイス定義を用いた高レベルなネットワーク設定

    次の章では、読者は 物理インターフェイス論理インターフェイス の違いを理解することが重要に なります。 [58] 物理インターフェイスは私達が 通常"インターフェイス" と呼んでいる物でカーネルによって eth0, ppp1 などと名付けられるものです。 論理インターフェイスは物理インターフェイスの 変数パラメータに割り当てられる値のセットのことです。 この説明が分かりにくいなら、 "論理インターフェイス X として設定する" という表現を "インターフェイスプロファイル X を用いて設定する" に置き換えます。

    /etc/network/interfaces にある iface 定義は 実際は物理インターフェイスの定義ではなく、論理インターフェイスの 定義です。 [59] インターフェイスを絶対再設定したくない場合、物理インターフェイス X は標準では論理インターフェイス X として設定されるので無視できます。

    しかしながら、あなたのコンピュータが仕事場と家の間を持ち運ぶノート PC である と仮定しましょう。コンピュータを職場のネットワークに接続した時と 家庭内 LAN に接続したときでは、接続する場所に従い eth0 を再設定 する必要があります。

    まず (以前行ったように eth0 ではなく) 二つの論理インターフェイス homework を定義し、インターフェイスが家庭内 LAN と職場ネットワークのために設定されるかをそれそれ記述します。

         iface home inet static
                 address 192.168.0.123
                 netmask 255.255.255.0
                 gateway 192.168.0.1
         
         iface work inet static
                 address 81.201.3.123
                 netmask 255.255.0.0
                 gateway 81.201.1.1
    

    そして、物理インターフェイス eth0 をコマンドラインで、次のように 適切な設定ファイルを指定して立ち上げます。

         # ifup eth0=home
    

    職場ネットワークのために eth0 を再設定するには、次のコマンド を実行します。

         # ifdown eth0
         # ifup eth0=work
    

    上記で書かれた interfaces ファイルを用いると、もはや ifup eth0 を用いるだけで eth0 を立ち上げる ことができることに注意してください。 この理由としては、ifup は物理インターフェイスの名前を 標準の論理インターフェイスの名前として使用しており、私達の例では eth0 という論理インターフェイスを定義していないためです。


    10.6.3 ifupdown を用いた魔法のような ネットワーク設定

    インターフェイス名は ifup が起動する時に他の 名前に "マップ" できます。 どのような名前にマップされるかは状況に依存して変更できます。 それゆえ、ifup は前もって定義された候補の中から適切な 論理インターフェイスとして与えられた物理インターフェイスを立ち上げる ように設定できます。

    論理インターフェイスの名前のマッピングは次のように発生します。

    mapping 行の文法は次のとおりです。

         mapping glob-pattern
                  script script-name
                 [map script input]
    

    mapping 行で示されたスクリプトは 物理インターフェイス名を引数にし、 "map" 行の "map" に続く ("map"自身を除く) 全ての内容を標準入力に送り込み 毎回起動されます。 スクリプトは終了前に標準出力にマッピングの結果を表示します。

    例えば、次の mapping 行は eth0home 論理インターフェイスとして ifup を立ち上げさせます。

         mapping eth0
                 script /usr/local/sbin/echo-home
    

    ここで /usr/local/sbin/echo-home の内容は次のようなものです。

         #!/bin/sh
         echo home
    

    マッピングはスクリプトを用いて行われるので、ある種のテストに基づいて 論理インターフェイスを選択することが可能です。 この例は guessnetを使った論理インターフェイス選択, 第 10.6.3.1 節 を参照ください。


    10.6.3.1 guessnetを使った論理インターフェイス選択

    guessnet をインストールして /etc/network/interfaces に次のような行を 追加しましょう。

         mapping eth0
                 script guessnet-ifupdown
                 map home
                 map work
    

    ifup eth0 すると、guessneteth0homework のどちらで立ち上げられたかを チェックします。これには、論理インターフェイスの定義内に保存された情報を 用います。


    10.6.3.2 laptop-netを使った自動ネットワーク設定

    laptop-net パッケージはネットワークの再設定に 異なる手法を取っています。laptop-net は ifupdown の 論理インターフェイスを利用していませんが、その代わり、固有の 設定 "スキーム" とシステム "プロファイル" というシステムを持っています。 しかしながら、物理インターフェイスを設定するために、laptop-net は依然 ifupifdown を使用しています。 詳細な情報は、laptop-net-doc にある良質な情報に 当たってください。


    10.6.4 network-manager を用いた 自動ネットワーク設定

    network-manager プログラムは現在 Fedora 開発者により 開発中であり、Ubuntu 用にパッケージされています。いつか Debian に表れて ifupdown や類似品を時代遅れにするかもしれません。


    10.7 カーネルによる一貫性のないインターフェイスの命名を扱う

    eth0, eth1 などの名前は kernel がインターフェイスを作成する 順番に従い kernel により割り当てられます。 一方、ブート時に検知されるアダプタは通常毎回同じ順番で検知され、それゆえ 毎回同じ名前が割り当てられます。 ホットプラグされたアダプタにはこれは当てはまりません。ホットプラグされた アダプタはあらゆる順序で検知され、異なる状況下では kernel により結局異なる 名前が割り当てられる結果となります。

    現行のudevパッケージではコンフィギュレーション によりこの問題を解決できます。


    10.8 ネットワーク設定のトリガを設定する

    インターフェイスがどのように設定や再設定されるのかを見てきました。 これらは適切な時期に行われる必要があります。

    伝統的にネットワークは /etc/rcS.d/S40networking initscript 経由でブートシーケンスの間に設定され、滅多に再設定されませんでした。 ネットワークに依存するサービスはブートシーケンスで後に起動されました。 シャットダウン又はリブート時に initscript は逆の順番で起動されました。

    しかしながら、現在 GNU と Linux において動的に変化するハードウェアと状況 のサポートがトレンドです。前者のサポートはホットスワップ可能な PCMCIA カードのために追加されました。より最近では、hotplug 機構が 追加され、多くの周辺機器がコンピュータの起動中に抜き差しできるように なりました。 これにはネットワーク関連のハードウェアが含まれます。 ハードウェアに依存するホットスワップされるハードウェアはハードウェアが 挿入された後に起動され、ハードウェアが外された時に停止する必要がある ことに注意してください。 これはこの種のサービスが System V init システムの制御から外され、 その代わりに ifupdown の制御下に置かれる必要がある ことを意味しています。

    例えば、initscript /etc/init.d/foo により制御される サービス foo が動的に再設定されるネットワークインターフェイス eth0 に依存するとします。


    10.8.1 ブート時にネットワーク設定のトリガーを設定する

    ブート時に /etc/rcS.d/S40networking init スクリプトは ifup -a コマンドを起動します。 これは /etc/network/interfacesauto 節にリスト されている全ての物理インターフェイスを立ち上げます。

    最近動的な方法を用いてネットワーク設定を操作する方がより良いことが たびたびあります。 いったん動的に変化するハードウェアのサポートメカニズムが機能すると、 まるで動的であったかのように静的なハードウェアを扱うことがシンプルになります。 ブートはもう 1つの hotplug イベントとして扱えます。 (ネットワーク設定のトリガを設定する – hotplug, 第 10.8.2 節 参照)

    しかしながら、ほとんど全ての場合、少なくともループバックデバイス lo はブート時に立ち上げておきたいでしょう。 それゆえ、/etc/network/interfaces に次の行が含まれている ことを確認してください。

         auto lo
         
         iface lo inet loopback
    

    ブート時に他の物理インターフェイスも立ち上げたい場合、 auto 行にさらに物理インターフェイスを追加できます。 auto 行に 決して PCMCIA インターフェイスを リストしてはなりません。PCMCIA cardmgr はブートシーケンス において /etc/rcS.d/S40networking が起動する時よりも後に 起動されます。


    10.8.2 ネットワーク設定のトリガを設定する – hotplug

    hot-plug のサポートを追加するには、hotplug パッケージ をインストールしてください。

    ネットワークハードウェアはブート時や、カード (例えば PCMCIA カード) を マシンに挿入した時、 discover が起動され、必要なドライバ モジュールをロードした時にもホットプラグできます。

    kernel が新しいハードウェアを検知すると、ハードウェアのドライバを初期化し、 設定を行うために hotplug プログラムを起動します。 その後、ハードウェアが削除されると、kernel は異なる環境変数設定を 用いて hotplug を再び起動します。 Debian では、hotplug が呼ばれると、/etc/hotplug//etc/hotplug.d/ にあるスクリプトを起動します。 詳細は hotplug(8) をごらんください。

    新たに挿入されたネットワークハードウェアはスクリプト /etc/hotplug/net.agent により設定されます。 [61] PCMCIA ネットワークカードが挿入され、eth0 が利用可能になる と仮定します [62] 。

         ifup eth0=hotplug
    

    /etc/network/interfaces に論理インターフェイスの定義を追加するか、 hotplug という名のマッピングをしなければ、このコマンドは 何もしません。 コマンドが eth0 を設定するようにするには、次の行を /etc/network/interfaces に追加しましょう。

         mapping hotplug
                 script echo
    

    ifupdown論理インターフェイス定義を用いた高レベルなネットワーク設定, 第 10.6.2 節 で説明したように、これは次と等価になるように 上に示したコマンドをマップします。

         ifup eth0=eth0
    

    もしインターフェイスをコントロールするために hotplug によってスタートした ifplugdwaproamd のインスタンスを用いている場合、このようなマッピング行を 追加しないでください

    eth0 のみを使いたく、他のインターフェイスをホットプラグ時に 立ち上げたくない場合、次のように echo の代わりに grep を使いましょう。

         mapping hotplug
                 script grep
                 map eth0
    

    さらに小技を学ぶには、ifupdown を用いた魔法のような ネットワーク設定, 第 10.6.3 節file:///usr/share/doc/hotplug/README.Debian をごらんください。


    10.8.3 ネットワーク設定のトリガを設定する – ifplugd

    ifplugd デーモンはハードウェアがネットワークに 接続されているかどうかによりインターフェイスの立ち上げや切断を行います。 このプログラムは Ethernet インターフェイスに接続されている通信中の ケーブルや無線 LAN インターフェイスとつながったアクセスポイントを検知します (無線 LAN インターフェイスの場合は実際には waproamd を使うのでしょうが) 。 ifplugd がリンクの状態の変化を検知すると、標準では インターフェイスに対して ifupifdown を呼び出します。


    10.8.4 ネットワーク設定のトリガを設定する – waproamd

    waproamd デーモンは ifplugd と 無線 LAN カードと一緒に使うように設計されている以外は同じです。 無線 LAN ハードウエアがつながるアクセスポイントをアクティブに スキャンします。つながった場合には、waproamdifup を起動します。

    もし waproamd を使っている場合には、無線 LAN カードは waproamd を通じて設定されます。つまり、 /etc/network/interfaceswireless-* オプションは使いません。


    10.8.5 ネットワーク設定と PCMCIA

    PCMCIA ネットワークインターフェイス (2.4 と 2.6 カーネル) を設定するための可能なアプローチはいくつか存在します。

    16 ビットカードに関する推奨アプローチは Linux 2.4 のホットプラグ サブシステムが PCMCIA もサポートするようになった事を利用しています。 [63] PCMCIA ネットワークカードはホットプラグ可能です。 従って、PCMCIA カードを通じてネットワークを要求するあらゆるサービスは カードの挿入時にサービスを開始し、カードを抜いた時にサービスを停止 するように設定されなければなりません。 これは通常サービスが ifup で起動され、ifdown で停止される ように調整することにより実現されます。 しかしながら、PCMCIA ネットワークカードをコールドプラグするように 設定するのを選択する人も中にはいます。 システムをブートする前にカードを挿入し、ブートシーケンス中で カードを通じたネットワークを要求するサービスを起動するのです。 サービスの開始前にカードが完全に設定されるのを保証するため、 次に示す設定を行う必要があります。

    16 ビットの PCMCIA カードを使っている場合は pcmcia-cs がまだ必要なことに注意して下さい。 このパッケージに含まれる cardmgr デーモンは ソケットの管理やドライバーモジュールの起動に必要です。 ネットワークの設定を /etc/pcmcia/network を通して行いたく無いだけです。

    cardmgrが正常に動作するには、 16 ビット PCMCIA カードにリソースを割り当てるよう、 /etc/pcmcia/config.opts を編集する必要があるかもしれません。 より詳しい情報は Linux PCMCIA HOWTO をごらんください。


    10.9 多段マッピング

    あなたのネットワークカードがホットプラグされ ネットワーク設定のトリガを設定する – hotplug, 第 10.8.2 節 に書かれている 自動設定が有効になっていると仮定しましょう。 さらに論理インターフェイスを、 (カーネルによる一貫性のないインターフェイスの命名を扱う, 第 10.7 節 に書かれたように)アダプタ固有の 物理インターフェイスの特徴に従かうか、 (例えば guessnetを使った論理インターフェイス選択, 第 10.6.3.1 節 に書かれたように) インターフェイスがつながれているネットワークの特徴に従って 「物理」インターフェイスにマップする必要が有ると仮定しましょう。

    第一段階のマッピングは hotplug のグループ名が 与えられると、インターフェイスがホットプラグされると kernel が割り当てたしたインターフェイス名を出力します。 第二段階のマッピングは kernel が割り当てたインターフェイス名が 与えられると、アダプタの名前を出力します。 第三段階のマッピングはアダプタの名前が与えられると、 ネットワーク環境に基づく論理インターフェイス名を出力します。

         # hotplug にインターフェイスを起動させる
         mapping hotplug
                 script echo
         
         # インターフェイスが有線か無線 LAN かを決定
         mapping eth?
                 script /usr/local/sbin/get-mac-address.sh
                 map 02:23:45:3C:45:3C wired
                 map 00:A3:03:63:26:93 wifi
         
         # どの有線ネットワークが使えるかを決める
         mapping wired
                 script guessnet-ifupdown
                 map work-wired
                 map home
         
         # どの無線 LAN ネットワークが使えるかを決める
         mapping wifi
                 script ifscout
                 map starbucks
                 map work-wireless
         
         iface work-wired inet static
                 ...
    

    10.10 ネットワークサービスの設定

    デスクトップやホームサーバ環境における典型的なネットワークサービスの設定には 次が挙げられます。


    10.11 ネットワークのトラブルシュート

    ネットワークに関する問題に直面したら、次の出力を最初の真偽の確認として チェックしてください。

         # ifconfig
         # cat /proc/pci
         # cat /proc/interrupts
         # dmesg | more
    

    又、ネットワークテストの基礎, 第 8.6.29 節 をごらんください。

    特定のウェブサイトを見れない問題に直面した場合は、いくつかのウェブサイトにアクセスした時の奇妙な挙動, 第 3.8.5 節 をごらんください。


    10.12 ゲートウェイルータを構築する

    Debian ホストはネットワークアドレス変換 (NAT、マスカレードとしても知られる) 、メール転送、DHCP、DNS キャッシング、HTTP プロキシキャッシング、CVS サービス、NFS サービス、そして Samba サービスを行う多目的の ゲートウェイマシンにできます。これらの設定の例は LAN を使用するためのホストと IP, 第 3.1.9 節 をごらんください。


    10.12.1 Netfilter 設定

    netfilter/iptables プロジェクトは Linux 2.4 以降のための ファイアーウォールサブシステムです。 Netfilter をごらんください。 この文書では多くのネットワーク設定例が説明されています。


    10.12.1.1 netfilter の基礎

    Netfilter は五つの組込みチェイン、すなわち PREROUTING, INPUT, FORWARD, OUTPUT そして POSTROUTING を使うパケットを処理します。

                         ルーティング
                         方向
         IN ------> PRE ---> ------> FORWARD -----> ----> POST -----> OUT
         interface   ROUTING \       filter       /       ROUTING     interface
                       DNAT        |      tracking     ^       SNAT
                     REDIRECT    |                      |       MASQUERADE
                                       v                     |
                                   INPUT                OUTPUT
                                      | filter                ^ filter,DNAT 
                                      v                       |
                                    \--> ローカルのプロセス --/
                                         ユーザスペースのプログラム
    

    10.12.1.2 Netfilter テーブル

    パケットはそれぞれの組込みチェインにて次のテーブルを用いて処理されます。


    10.12.1.3 Netfilter のターゲット

    ファイアーウォールのルールにはいくつかのターゲットがあります。


    10.12.1.4 Netfilter コマンド

    iptables の基本的なコマンドは次のようになります。

         iptables -N chain                   #chain を作成
         
         iptables -A chain \                 # chain にルールを追加
                  -t table \                 # table を使用 (filter, nat, mangle)
                  -p protocol \              # tcp, udp, icmp, 又はこれら全て
                  -s source-address[/mask] \
                  --sport port[:port] \      # -p が tcp 又は udp の場合は送信元ポート
                  -d destination-address[/mask] \
                  --dport port[:port] \      # -p が tcp 又は udp の場合は送信先ポート
                  -j target \                # マッチした場合の行動
                  -i in-interface-name \     # INPUT,  FORWARD, PREROUTING 用
                  -o out-interface-name      # FORWARD, OUTPUT, POSTROUTING 用
    

    10.12.1.5 ネットワークアドレス変換

    LAN 上のマシンは LAN 上の IP アドレスをインターネット上で使える IP アドレスに変換するゲートウェイを経由してインターネットのリソースに アクセスできます。

         # apt-get install ipmasq
    

    ipmasq の防護を強化するためにサンプルルールを追加してください。

    又、ネットワークに PCMCIA NIC 経由でアクセスしている場合、ipmasq/etc/pcmcia/network.opts (file:///usr/share/doc/ipmasq/ipmasq.txt.gz 参照) 又は /etc/network/interfaces (ネットワーク設定と PCMCIA, 第 10.8.5 節ネットワーク設定のトリガを設定する, 第 10.8 節 参照) から起動される必要があります。


    10.12.1.6 SMTP 接続をリダイレクトする (2.4 用)

    他の LAN 環境で利用するように設定しているノート PC を持っており、 再設定せずにノート PC 上でメーラを使いたいとします。

    ゲートウェイマシンに iptables を通じて次のルールを 追加し、SMTP 接続をゲートウェイマシンにリダイレクトします。

         # iptables -t nat -A PREROUTING -s 192.168.1.0/24 -j REDIRECT \
                    -p tcp --dport smtp --to-port 25 # smtp=25, INPUT is open
    

    より徹底的なリダイレクトルールセットが必要な場合は、 ipmasq パッケージをインストールし、 /etc/ipmasq/rules/ ディレクトリに M30redirect.def を 追加することを考えてください。


    10.12.2 複数のネット接続を管理する

    [FIXME] Policy routing (by Phil Brutsche pbrutsch@tux.creighton.edu): 詳細は iproute manual をごらんください。 トラフィックコントロール (tc) にも興味が湧くかもしれません。

    次のような環境を考えます。

         eth0: 192.168.1.2/24; gateway 192.168.1.1
         eth1: 10.0.0.2/24; gateway 10.0.0.1
         このマシン上でマスカレードは行いません。
    

    特別な魔法を施します。

  • ip rule add from 192.168.1.2 lookup 1

  • ip rule add from 10.0.0.2 lookup 2

  • ip route add to default via 10.0.0.1 metric 0

  • ip route add to default via 192.168.1.1 metric 1

  • ip route add table 1 to 192.168.1.0/24 via eth0

  • ip route add table 1 to 10.0.0.2/24 via eth1

  • ip route add table 1 to default via 192.168.1.1

  • ip route add table 2 to 192.168.1.0/24 via eth0

  • ip route add table 2 to 10.0.0.2/24 via eth1

  • ip route add table 2 to default via 10.0.0.2

  • [FIXME] これを試したことはありません。オートダイアル機能を使わないで 高速な接続のバックアップとしてダイアルアップをどうやって設定しますか? パッチを送ってください。:)


    [ 前のページ ] [ 目次 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 次のページ ]


    Debian Reference
    第 11 章 - エディタ


    11.1 有名なエディタ

    Linux はコンソールテキストエディタの多くの代替品を提供します。それらは:

    デフォルトのエディタを変更するには、update-alternatives --config editorを 使用してください。又、使用するエディタを決定するために環境変数 EDITOR 並びに VISUAL を用いることには多くの問題があります。 MC 内のエディタ, 第 4.2.5 節 をご覧ください。

    また、数種の X ベースのテキストエディタも言及する価値があります:

    これらの xclient コマンドは -fn a24 のような標準的な オプションを引数に取り、私のような古株にも優しく使えます :) X クライアント, 第 9.4.4 節 をご覧ください。


    11.2 緊急用エディタ

    /bin/ にはいくつかのエディタが存在します。/usr/ に アクセスできない場合にファイルの編集を容易にするため、これらのエディタのうち 一つをインストールすべきです。


    11.3 Emacs と Vim


    11.3.1 Vim の使用ヒント

    Vim 起動中に <F1> を押すことにより、 "VIM - main help file" ドキュメント をご覧ください。

         <F1>           ヘルプ
         <esc>          ノーマルモードに戻る
         V              ビジュアルモード
         i              挿入モード
         :              コマンドライン
         :set tw=72     テキスト幅を 72 に設定
         <F11>    挿入(ペースト)モード
         :r! date -R    RFC-822 日付を挿入
         qa             レジスタ a にキーストロークを記録
         q              キーストロークの記録を停止
         @a             レジスタ a からキーストロークを実行
         :edit foo.txt  foo.txt をロードし、ファイルを編集
         :wnext         現在のファイルを保存し次のファイルを編集
    

    q および @ はシンプルなマクロ記録および再生に使用できます。 例えば、カーソル位置の単語に HTML イタリックタグを挿入するマクロを作成するには、 qii<i>^[ea</i>^[q と入力してください。(ここで ^[ は ESC キー入力) そして単語の始まりで @i を入力すると、<i> および </i> タグが挿入されます。

    Vim で GnuPG を使う, 第 14.4.2 節 もご覧ください。


    11.3.2 Emacs の使用ヒント

         <F1>                ヘルプ
         <F10>               メニュ
         C-u M-! date -R     RFC-822 日付を挿入
    

    11.3.3 エディタを起動

         エディタを起動:                   emacs filename  vim filename
         vi 互換モードで起動:                         vim -C
         vi 非互換モードで起動:                     vim -N
         コンパイル時のデフォルトで起動:     emacs -q        vim -N -u NONE
    

    11.3.4 エディタのコマンドのサマリ (Emacs, Vim)

         終了:                           C-x C-c         :qa /:wq /:xa /:q!
         中断/コマンドモード:          C-g             <esc>
         1字戻る(左):                 C-b             h
         1字進む(右):                 C-f             l
         1行進む(下):                     C-n             j
         1行戻る(上):                   C-p             k
         行の先頭に飛ぶ(^):               C-a             0
         行の最後に飛ぶ($):                 C-e             $
         複数回コマンドを実行:              C-u nnn cmd     nnn cmd
         複数のコマンド:              M-digitkey cmd
         ファイルの保存:                      C-x C-s         :w file
         バッファの先頭に飛ぶ:            M-<             1G
         バッファの最後に飛ぶ:                  M->             G
         1スクリーン先にスクロール:        C-v             ^F
         半スクリーン先にスクロール:                      ^D
         1行先にスクロール:                          ^E
         1行後ろにスクロール:       M-v             ^B
         半スクリーン後ろにスクロール:                     ^U
         1スクリーン後ろにスクロール:                         ^Y
         他のウィンドウにスクロール:        M-C-v
         カーソルの下を削除:            C-d             x
         カーソルから行末まで削除:      C-k             D
         順方向インクリメンタル探索:                C-s
         逆方向インクリメンタル探索:                C-r
         順方向一括探索:                 C-s enter       /
         逆方向一括探索:                 C-r enter       ?
         順方向正規表現探索:                 M-C-s
         逆方向正規表現探索:        M-C-r
         順方向正規表現一括探索:                  M-C-s enter     /
         逆方向正規表現一括探索:         M-C-r enter     ?
         ヘルプ:                           C-h C-h         :help
         Apropos:                   C-h a
         キーバインドヘルプ:              C-h b           :help [key]
         Info ヘルプ:                      C-h i
         メジャーモードヘルプ:                C-h m
         ヘルプチュートリアル:                  C-h t           :help howto
         Undo:                           C-_             u
         Redo:                           C-f             ^R
         カーソル位置をマーク:           C-@             m{a-zA-Z}
         マークした位置に移動、再入力で元に戻る:     C-x C-x
         現在のファイルのマークに飛ぶ:                      '{a-z}
         あらゆるファイルにおいてマークに飛ぶ:                          '{A-Z}
         領域コピー:                    M-w             {visual}y
         領域削除:                    C-w             {visual}d
         Yank:           C-y             
         以前削除したバッファを Yank:          M-y             p
         領域をを大文字に変換:        C-x C-u         {visual}U
         領域を小文字に変換:        C-x C-l         {visual}u
         スペシャルキャラクタを挿入:        C-q octalnum/keystroke  
                                                         ^V decimal/keystroke
         置換:                     M-x replace-string      :%s/aaa/bbb/g
         正規表現を用いた置換:            M-x replace-regexp      :%s/aaa/bbb/g
         置換問合せ:              M-%                     :%s/aaa/bbb/gc
         置換問合せ:              M-x query-replace
         正規表現を用いた置換問合せ:           M-x query-replace-regexp
         ファイルを開く:                      C-x C-f         :r file
         ファイルをセーブ:                      C-x C-s         :w
         全バッファのセーブ:               C-x s           :wa
         別ファイルにセーブ:                        C-x C-w file    :w file
         バッファのプロンプト:              C-x b
         バッファ表示:                   C-x C-b         :buffers
         読み込み専用にトグルする:               C-x C-q         :set ro
         プロンプトを出し、バッファを削除する:         C-x k
         縦に 2分割する:                 C-x 2           :split
         横に 2分割する:               C-x 3           :vsplit (ver. 6)
         他のウィンドウに移動する:           C-x o           ^Wp
         現在のウィンドウを削除する:             C-x 0           :q
         他のウィンドウを削除する:         C-x 1           ^Wo
         シェルをバックグラウンド起動する:                M-x compile
         バックグラウンド起動したシェルを殺す:           M-x kill-compilation
         make を起動:                                       :make Makefile
         エラーメッセージを調べる:            C-x`            :echo errmsg
         シェルを起動し、記録する:           M-x shell       :!script -a tmp
         ...clean BS, ...                                :!col -b <tmp >record
         シェルの記録を保存/再呼び出し:    C-x C-w record  :r record
         シェルを起動する:                      M-! sh          :sh
         コマンドを起動する:                    M-! cmd         :!cmd
         コマンドを起動し、挿入する:         C-u M-! cmd     :r!cmd
         フィルタを起動する:                     M-| file        {visual}:w file
         フィルタを起動し、挿入する:          C-u M-| filter  {visual}:!filter
         オプションを表示する                                     :se[t] {option}?
         オプションをデフォルトにリセットする                     :se[t] {option}&
         ブーリアンオプションをリセットする                         :se[t] no{option}
         ブーリアンオプションをトグルする                           :se[t] inv{option}
         72列でテキストをラップする                          :se tw=72
         ラップしない                                     :se tw=0
         自動インデント                                      :se ai
         タブを広げる                                      :se et
         特別なコマンド (mail)                          :se comments=n:>,n:\|
         
         GDB を起動                         M-x gdb                        
         describe GDB mode               C-h m                          
         1行進める                   M-s
         次の行                       M-n
         1命令進める (stepi)    M-i                            
         現在のスタックフレームを終了      C-c C-f                        
         続行する                        M-c                            
         up arg frames                M-u             
         down arg frames                 M-d                            
         copy number from point, insert at the end 
                                         C-x &                          
         ブレークポイントを設定                 C-x SPC
    

    11.3.5 Vim の設定

    Vim の全機能と文法強調を使用するには、~/.vimrc または /etc/vimrc が次の行を含むようにしてください。

         set nocompatible
         set nopaste
         set pastetoggle=<f11>
         syn on
    

    ペーストモードは端末でのカットアンドペースト操作にと自動インデントとの 干渉を避けることができます。これは単なる ":set noai" 以上のことを行います。

    Vim への GnuPG の統合については Vim で GnuPG を使う, 第 14.4.2 節 をご覧ください。


    11.3.6 Ctags

    apt-get install exuberant-ctags を行い、ソースファイルにおいて ctags を起動します。function_name が始まる行に ジャンプするため、Vim 上で:tag function_name と タイプします。Tag は C、C++、Java、Python 並びに他の多くの言語に対して 働きます。

    Emacs でも同様の Ctags を利用できます。


    11.3.7 構文強調されたスクリーンから HTML ソースに変換

    Vim のコマンドモードから so \$VIMRUNTIME/syntax/2html.vim を 実行すると構文強調されたテキストから HTML テキストへの変換が行えます。 :w file.html および :q でセーブします。C コードなどで 役立ちます。


    11.3.8 vim によりスクリーンを分割する

    vim は複数に分割したスクリーン環境において複数のファイルを 編集可能です。詳細は :help usr_08.txt とタイプしてみてください。

    異なったファイルに対してスクリーンを分割するには、vi コマンドプロンプトで 次のようにタイプします。

         :split another-file
         :vsplit another-file
    

    又はシェルプロンプトにおいて

         $ vi -o file1.txt file2.txt   # 水平分割
         $ vi -O file1.txt file2.txt   # 垂直分割
    

    を実行することによりマルチウィンドウの vi を実現できます。

         $ vimdiff file.txt~ file.txt         # file.txt の最近の変更点を調べる
         $ vimdiff file.en.sgml file.fr.sgml  # 翻訳版との相異点を調べる
         $ gvimdiff file.txt~ file.txt        # X における上記コマンド
    

    以上のコマンドによりオリジナルとバックアップファイル間の相異点をうまく表示 できます。SGML ではタグとマッチするので、SGML モードにおいて翻訳を比較すると うまく動きます。

    Ctrl-W コマンドを用いた特別なカーソル操作コマンドは次の通り:

         Ctrl-W +      ウィンドウサイズを広げる
         Ctrl-W -      ウィンドウサイズを狭める
         Ctrl-W h      左のウィンドウに移動
         Ctrl-W j      下のウィンドウに移動
         Ctrl-W k      上のウィンドウに移動
         Ctrl-W l      右のウィンドウに移動
         ...
    

    スクリーンのスクロール制御には次のコマンドを使用してください。

         :set scrollbind
         :set noscrollbind
    


    [ 前のページ ] [ 目次 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 次のページ ]


    Debian Reference
    第 12 章 - バージョン管理システム


    12.1 Concurrent Versions System (CVS)

    詳細な情報は、lynx を使って /usr/share/doc/cvs/html-cvsclient, /usr/share/doc/cvs/html-info, /usr/share/doc/cvsbook を見るか、 info cvsman cvs を実行して 下さい。


    12.1.1 CVS サーバのインストール

    次に示すセットアップにより、"src" グループのメンバのみが CVS リポジトリ にコミットでき、"staff" グループのメンバだけが CVS の管理を行うように 設定できます。これにより自爆する危険を低減できます。

         # cd /var/lib; umask 002; mkdir cvs # [Woody] FSH
         # apt-get install cvs cvs-doc cvsbook
         # export CVSROOT=/var/lib/cvs
         # cd $CVSROOT
         # chown root:src .  # プロジェクトの開始をさらに制限するには "staff" にする
         # chmod 3775 .             # 上記で "staff" を使っている場合は 2775 を使う
         # cvs -d /var/lib/cvs init # ここでは明示的に -d を指定する方が安全
         # cd CVSROOT
         # chown -R root:staff .
         # chmod 2775 .
         # touch val-tags 
         # chmod 664 history val-tags
         # chown root:src history val-tags
    

    12.1.2 CVS セッションの例

    次は CVS リポジトリへのアクセスのためのシェル環境をセットアップします。


    12.1.2.1 Anonymous CVS (ダウンロードのみ)

    読み込みのみのリモートアクセスのためには次を実行します。

         $ export CVSROOT=:pserver:anonymous@cvs.sf.net:/cvsroot/qref
         $ cvs login
         $ cvs -z3 co qref
    

    12.1.2.2 ローカル CVS サーバを使う

    サーバと同じマシン上でシェルからローカルのアクセスを行うには次を実行します。

         $ export CVSROOT=/var/lib/cvs
    

    12.1.2.3 リモート CVS サーバを使う

    SSH を用いずに (cvs の RSH プロトコル機能を利用して) リモートアクセスを行うには次を実行します。

         $ export CVSROOT=:pserver:account@cvs.foobar.com:/var/lib/cvs
         $ cvs login
    

    これは盗聴される危険があります。


    12.1.2.4 ssh を通じてリモート CVS にアクセスする

    SSH を用いてリモートアクセスするには次を実行します。

         $ export CVSROOT=:ext:account@cvs.foobar.com:/var/lib/cvs
    

    又は SourceForge の場合では次を実行します。

         $ export CVSROOT=:ext:account@cvs.sf.net:/cvsroot/qref
    

    パスワードプロンプトを除外する RSA 認証 (パスワードの入力が少ない接続 – RSA, 第 9.5.3 節) も利用できます。


    12.1.2.5 新規 CVS アーカイブの作成

    次に示すプロジェクトのためにアーカイブを作成するとして、

         アイテム             値               意味
         ソースツリー      ~/project-x         全ソースコード
         プロジェクト名     project-x          作成するプロジェクト名
         ベンダータグ       Main-branch         ブランチ全体のタグ
         リリースタグ      Release-initial     指定したリリースのためのタグ
    

    次の手順によりアーカイブを作成できます。

         $ cd ~/project-x                # ソースディレクトリに飛び込む
          ... ソースツリーを作成する ...
         $ cvs import -m "Start project-x" project-x Main-branch Release-initial
         $ cd ..; rm -R ~/project-x
    

    12.1.2.6 CVS を用いた作業

    ローカルの CVS リポジトリを用いて project-x の作業を 行うには、次のようにします。

         $ cd                            # 作業エリアに移動
         $ cvs co project-x              # CVS からソースを取得してローカルにコピー
         $ cd project-x
          ... 内容をいろいろ変更する ...
         $ cvs diff -u                   # diff -u repository/ local/ と同様の出力
         $ cvs up -C modified_file       # ファイルへの変更を undo する
         $ cvs ci -m "Describe change"   # ローカルのソースを CVS に保存
         $ vi newfile_added
         $ cvs add newfile_added
         $ cvs ci -m "Added newfile_added"
         $ cvs up                        # CVS から最新版をマージする
          ... CVS から新規に作成したサブディレクトリを作成するには、
          ... 代わりに "cvs up -d -P" を使います。
          ... "C filename" で始まる行を監視してください。
          ... 未修正のコードは `.#filename.version' に移動します。
          ... filename にある "<<<<<<<" と
          ... ">>>>>>>" を探してください。
         $ cvs tag Release-1             # リリースタグを追加
          ... さらに編集を続ける ...
         $ cvs tag -d Release-1          # リリースタグを削除
         $ cvs ci -m "more comments"
         $ cvs tag Release-1             # リリースタグを再び追加
         $ cd                            # 作業エリアに戻る
         $ cvs co -r Release-initial -d old project-x
          ... オリジナルのバージョンを old ディレクトリに置いておく
         $ cd old
         $ cvs tag -b Release-initial-bugfixes # ブランチ (-b) タグを作成
          ... 旧バージョンで作業できるようになりました (Tag=sticky)
         $ cvs update -d -P              # 空のディレクトリは作成不可
          ... ソースツリーは今 "Release-initial-bugfixes" sticky タグを持つ
          ... このブランチで作業
         $ cvs up -d -P # このブランチの他者により修正されたファイルを同期
         $ cvs ci -m "check into this branch"
         $ cvs update -kk -A -d -P
          ... sticky タグを削除し、内容を忘れる
          ... キーワード拡張無しで main trunk から更新
         $ cvs update -kk -d -P -j Release-initial-bugfixes
          ... Release-initial-bugfixes ブランチから main にマージ
          ... キーワード拡張無しの trunk。エディタで衝突を修正
         $ cvs ci -m "merge Release-initial-bugfixes"
         $ cd
         $ tar -cvzf old-project-x.tar.gz old  # アーカイブを作成。bz2 にするには -z の代わりに -j とする
         $ cvs release -d old            # ローカルのソースを削除 (任意)
    

    覚えておくべき役立つオプションを次に挙げます。(cvs の第一引数と して使います)

         -n      効果を及ぼさずに起動
         -t      cvs の活動の各ステップごとに示されるメッセージを表示
    

    12.1.2.7 CVS からのエクスポート

    CVS から最新版を取得するには、"tomorrow" を使います。

         $ cvs ex -D tomorrow module_name
    

    12.1.2.8 CVS 管理者

    (ローカルサーバの) プロジェクトへのエイリアスを追加します。

         $ su - admin           # staff のメンバ
         $ export CVSROOT=/var/lib/cvs
         $ cvs co CVSROOT/modules
         $ cd CVSROOT
         $ echo "px -a project-x" >>modules
         $ cvs ci -m "Now px is an alias for project-x"
         $ cvs release -d .
         $ exit                 # 又は su から戻るために Ctrl-D を実行
         $ cvs co -d project px 
          ... CVS から project ディレクトリに project-x 
         (エイリアス:px) をチェックアウトする
         $ cd project
          ... 内容を変更する
    

    12.1.3 CVS のトラブルシュート


    12.1.3.1 リポジトリのファイルアクセス権限

    CVS はカレントのリポジトリファイルを上書きしませんが、他のファイルで 置き換えることはあります。それゆえ、リポジトリディレクトリに書き込み 権限を設定する ことは致命的です。全ての新しいリポジトリの作成には、 必要ならばこの条件を保証するために次の手順を行ってください。

         # cd /var/lib/cvs
         # chown -R root:src repository
         # chmod -R ug+rwX   repository
         # chmod    2775     repository  # 必要ならば、これをサブディレクトリに対しても行う
    

    12.1.3.2 実行権ビット

    ファイルの実行権ビットはチェックアウト時にも保持されます。 チェックアウトしたファイルの実行権が設定されているのを見掛けたときはいつでも 次のコマンドで CVS リポジトリにあるファイル権限を変更してください。

         # chmod ugo-x filename
    

    12.1.4 CVS コマンド

    ここに CVS のコマンドとそのショートカットを示します。

         {add|ad|new} [-k kflag] [-m 'message'] files...
         {admin|adm|rcs} [rcs-options] files...
         {annotate|ann} [options] [files...]
         {checkout|co|get} [options] modules...
         {commit|ci|com}   [-lnR]  [-m  'log_message'  |  -f  file] \
                 [-r revision] [files...]
         {diff|di|dif} [-kl] [rcsdiff_options] [[-r rev1 | -D date1] \
                 [-r rev2 |  -D date2]] [files...]
         {export|ex|exp} [-flNn] -r rev|-D date [-d dir] [-k kflag] module...
         {history|hi|his} [-report] [-flags] [-options args] [files...]
         {import|im|imp} [-options] repository vendortag releasetag...
         {login|logon|lgn}
         {log|lo|rlog} [-l] rlog-options [files...]
         {rdiff|patch|pa} [-flags] [-V vn] [-r t|-D d [-r t2|-D d2]] modules...
         {release|re|rel} [-d] directories...
         {remove|rm|delete} [-lR] [files...]
         {rtag|rt|rfreeze} [-falnR]  [-b]  [-d]  [-r  tag  |  -D  date] \
                  symbolic_tag modules...
         {status|st|stat} [-lR] [-v] [files...]
         {tag|ta|freeze} [-lR] [-F] [-b] [-d] [-r tag | -D date]  [-f] \
                  symbolic_tag [files...]
         {update|up|upd} [-AdflPpR] [-d] [-r tag|-D date] files...
    

    12.2 Subversion

    Subversion は CVS の置換を意図した次世代のバージョン管理システムです。 Subversion の開発者は現在 "α版" と考えていますが、ほとんどの人が使うには 十分安定しています。本文書の執筆時では、Subversion は Debian unstable でのみ得られます。


    12.2.1 Subversion サーバのインストール

    subversion メタパッケージは サーバを設定するために必要なパッケージ (libapache2-dav-svnsubversion-tools) に依存します。


    12.2.1.1 リポジトリの設定

    現在、subversion パッケージはリポジトリを設定しませんので、 手動で設定する必要があります。リポジトリの場所としては /var/local/repos が考えられます。

    ディレクトリを作成します。

         # mkdir -p /var/local/repos
    

    リポジトリデータベースを作成します。

         # svnadmin create /var/local/repos
    

    リポジトリに WWW サーバが書き込み可能にします。

         # chown -R www-data:www-data /var/local/repos
    

    12.2.1.2 Apache2 の設定

    ユーザ認証を通じてリポジトリへのアクセスを許可するには、 /etc/apache2/mods-available/dav_svn.conf に次の行を 追加 (又はコメントアウト) しましょう。

         <Location /repos>
           DAV svn
           SVNPath /var/local/repos
           AuthType Basic
           AuthName "Subversion repository"
           AuthUserFile /etc/subversion/passwd
           <LimitExcept GET PROPFIND OPTIONS REPORT>
             Require valid-user
           </LimitExcept>
         </Location>
    

    そして、次のコマンドでユーザ認証ファイルを作成します。

         htpasswd2 -c /etc/subversion/passwd some-username
    

    Apache2 を再起動すると、新しい Subversion リポジトリは URL http://hostname/repos によりアクセス可能になります。


    12.2.2 CVS リポジトリから Subversion への移行


    12.2.3 Subversion の使用例

    次の章は Subversion での異なるコマンドの使いかたについて教えます。


    12.2.3.1 新規 Subversion アーカイブの作成

    新規 Subversion アーカイブを作成するには、次をタイプします。

         $ cd ~/your-project         # ソースディレクトリに移動
         $ svn import http://localhost/repos your-project \
           project-name -m "initial project import"
    

    これはプロジェクトファイルを含む Subversion リポジトリに project-name という名前のディレクトリを作成します。 アーカイブが存在するかどうかを調べるには http://localhost/repos/ を見てください。


    12.2.3.2 Subversion を用いた作業

    Subversion を用いて project-y の作業を行います。

         $ cd                            # 作業エリアに移動
         $ svn co http://localhost/repos/project-y  # ソースをチェックアウト
         $ cd project-y
          ... 作業を行う ...
         $ svn diff                      # diff -u repository/ local/ と同様の出力
         $ svn revert modified_file      # ファイルへの変更を undo する
         $ svn ci -m "Describe changes"  # 変更をリポジトリにチェックインする
         $ vi newfile_added
         $ svn add newfile_added
         $ svn add new_dir               # new_dir に全ファイルを再帰的に追加
         $ svn add -N new_dir2           # 非再帰的にディレクトリを追加
         $ svn ci -m "Added newfile_added, new_dir, new_dir2"
         $ svn up                        # リポジトリから最新版をマージ
         $ svn log                       # コミットした全変更を表示
         $ svn copy http://localhost/repos/project-y \
               http://localhost/repos/project-y-branch \
               -m "creating my branch of project-y"  # project-y ブランチを作成
         $ svn copy http://localhost/repos/project-y \
               http://localhost/repos/proj-y_release1.0 \
               -m "project-y 1.0 release"    # リリースタグを作成
          ... ブランチ作成とタグづけは同じであることに注意。唯一の違いは
          ... ブランチはコミットされるがタグはそうではないことです。
         
          ... ブランチへ変更を施す
         
         # ブランチに分けたコピーをメインのコピーにバックマージする
         $ svn merge http://localhost/repos/project-y \
            http://localhost/repos/project-y-branch
         $ svn co -r 4 http://localhost/repos/project-y # バージョン 4 を取得
    


    [ 前のページ ] [ 目次 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 次のページ ]


    Debian Reference
    第 13 章 - プログラミング


    実行用テストファイルの名前として "test" を使うのは止めましょう。 test というコマンドがシェル組込みコマンドにあります。


    13.1 始め方

    参考文献をいくつか挙げます。

    多量の info 文書が書籍として GNU から得られます。

    次の 4 サブセクションには、newusers プログラムのような バッチプロセッサを用いて /etc/passwd にアカウント情報を 追加するための数種類の言語によるサンプルスクリプトが含まれます。スクリプトは first_name last_name password の形式の数行の入力ファイルを必要と します。(実際ユーザのホームディレクトリはこれらのスクリプトによって 作成されません。)


    13.2 シェル

    Unix ライクなシステムの働きを理解する 最良の方法は、 シェルスクリプトを読むことです。ここで、シェルプログラムに関する いくつかのポイントと注意を与えます。間違いから学ぶには、 Shell Mistakes を読んでください。


    13.2.1 Bash – GNU 標準の対話シェル

    Bash の参考文献をいくつか挙げます。

    次に短いプログラム例を示します。(標準入力から newusers 用の アカウントエントリを作成)

         #!/bin/bash
         # (C) Osamu Aoki Sun Aug 26 16:53:55 UTC 2001 Public Domain
         pid=1000;
         while read n1 n2 n3 ; do
         if [ ${n1:0:1} != "#" ]; then
         let pid=$pid+1
         echo ${n1}_${n2}:password:${pid}:${pid}:,,,/home/${n1}_${n2}:/bin/bash
         fi
         done
    

    13.2.2 POSIX シェル

    Debian では、数種類のパッケージが POSIX シェルを供給します。

    移植性を考慮してシェルスクリプトを作成している場合、POSIX シェルスクリプト としてスクリプトを書くのが最良です。シェルスクリプトの POSIX 互換性を テストするには、ash (又は dash) にリンクされた /bin/sh を使用してください。"bashism" 又は "zshism" を用いた スクリプトを作るのは避けましょう。 例えば、次のような表現は避けましょう。

    本文書におけるシェルの記述方法は POSIX タイプのシェルのみを用いており、 それゆえ、tcsh を含む csh タイプのシェルは 使用していません。


    13.2.3 シェルパラメータ

    いくつかの特別なパラメータを覚える必要があります。

         $0      = シェル又はシェルスクリプトの名前
         $1      = シェルの第 1 引数
          ...
         $9      = シェルの第 9 引数
         $#      = ポジショナルパラメータの数
         "$*"    = "$1 $2 $3 $4 ... $n"
         "$@"    = "$1" "$2" "$3" "$4" ... "$n"
         $?      = 最後のコマンドの 終了ステータス
         $$      = シェルスクリプトの PID 
         $!      = 最後に起動されたバックグラウンドジョブの PID
    

    基本的な パラメータ拡張 を覚える必要があります:

             形式         var がセット      var がセットされていない
         ${var:-string}  $var                string
         ${var:+string}  string              null
         ${var:=string}  $var                string 
                                             (そして var=string を起動)
         ${var:?string}  $var                (echo string して終了する)
    

    ここで、これらの演算子全てにおいて、コロン `:' は実際は無くても構いません。

    覚えておくべき基本的な パラメータ置換 には次があります。

             形式        結果
         ${var%suffix}   最小のsuffix パターンを削除
         ${var%%suffix}  最大の suffix パターンを削除
         ${var#prefix}   最小の prefix パターンを削除
         ${var##prefix}  最大の prefix パターンを削除
    

    13.2.4 シェルリダイレクト

    覚えておくべき基本的な リダイレクト を次に挙げます。 (ここで [n] はファイルディスクリプタを指定するための任意の 番号)

         [n]> file      stdout (又はn) を file にリダイレクト。
         [n]>> file     stdout (又はn) を file に追加
         [n]< file      file から stdin (又はn) にリダイレクト
         [n1]>&n2       stdout (又は n1) を n2 にリダイレクト
         2> file  >&2   stdout と stderr を file にリダイレクト
          > file 2>&1   stdout と stderr を file にリダイレクト
         | command      stdout を command にパイプする
         2>&1 | command stderr と stdout を command にパイプする
    

    ここで、

    です。

    シェルは任意のファイルディスクリプタにより exec 組込み コマンドを用いてファイルを開くことができます。

         $ echo Hello >foo
         $ exec 3<foo 4>bar  # ファイルを開く
         $ cat <&3 >&4       # 標準入力を 3, 標準出力を 4 にリダイレクト
         $ exec 3<&- 4>&-    # ファイルを閉じる
         $ cat bar
         Hello
    

    ここで n<&-n>&- はファイルディスクリプタ n を閉じることを意味します。


    13.2.5 シェルの条件文

    コマンドは条件文の表現に使われる 終了ステータス を返します。

    ここでは 0 の値を "真" の意味で使っていますが、 これは他の計算分野で使われている慣習とは異なることに注意してください。 又、`[' は test コマンドと等価であり、 条件文表現として `]' まで引数を評価します。

    覚えておくべき基本的な 条件イディオム を次に挙げます。

         command && if_success_run_this_command_too || true
         command || if_not_success_run_this_command_instead
         
         if [ conditional_expression ]; then  
          if_success_run_this_command
         else
          if_not_success_run_this_command
         fi
    

    ここで || は、シェルが -e フラグを呼び出した時に このシェルスクリプトが誤ってこの行で終了しないことを保証するために必要でした。

    条件文表現内での ファイル 比較演算を次に挙げます。

         -e file         file が存在する場合に真
         -d file         file というディレクトリが存在する場合に真
         -f file         file という普通のファイルが存在する場合に真
         -w file         file が存在し、書き込み可である場合に真
         -x file         file が存在し実行可能出ある場合に真
         file1 -nt file2 file1file2より (更新時間が)新しい場合に真
         file1 -ot file2 file1file2 よりも (更新時間が) 古い場合に真
         file1 -ef file2 両者が同じデバイスであり、同じ inode 番号を持つ場合に真
    

    条件文表現内での 文字列 比較演算を次に挙げます。

              -z str    str の長さが 0 の場合に真
              -n str    str の長さが 0 ではない場合に真
         str1 == str2   二つの文字列が等しい場合に真
         str1 =  str2   二つの文字列が等しい場合に真
             ("=" は厳密な POSIX 互換なシェルの場合、 "==" の代わりに使用するべき)
         str1 != str2   二つの文字列が等しくない場合に真
         str1 <  str2   str1 が50音順で str2 の前に来る場合に真 (ロケール依存)
         str1 >  str2    str1 が50音順で str2 の後に来る場合に真 (ロケール依存)
    

    条件文表現内での 算術 整数比較演算には、 -eq, -ne, -lt, -le, -gt そして -ge があります。


    13.2.6 コマンドライン処理

    シェルは次のようにスクリプトを処理します。

    "" 内の '' には何も効果はありません。

    シェル内で set -x を実行するか、-x オプション付きで シェルを起動すると、シェルにコマンドの実行結果を全て表示させます。 これはデバッグにはとても便利です。


    13.3 Awk

    Awk の参考文献をいくつか挙げます。

    (newusers のコマンドエントリを作成する) 短いプログラム例 を示します。

         #!/usr/bin/awk -f
         # Script to create a file suitable for use in the 'newusers' command,
         # from a file consisting of user IDs and passwords in the form:
         # first_name last_name password
         # Copyright (c) KMSelf Sat Aug 25 20:47:38 PDT 2001
         # Distributed under GNU GPL v 2, or at your option, any later version.
         # This program is distributed WITHOUT ANY WARRANTY.
         
         BEGIN {
             # Assign starting UID, GID
             if ( ARGC > 2 ) {
                 startuid = ARGV[1]
                 delete ARGV[1]
             }
             else {
                 printf( "Usage:  newusers startUID file\n" \
                   "  where:\n" \ 
                   "    startUID is the starting userid to add, and\n" \
                   "    file is an input file in form:\n" \
                   "      first_name last_name password\n" \
                 )
                 exit
             }
         
             infile = ARGV[1]
             printf( "Starting UID: %s\n\n", startuid )
         }
         
         /^#/ { next }
         
         {
             ++record
             first = $1
             last = $2
             passwd = $3
             user= substr( tolower( first ), 1, 1 ) tolower( last )
             uid = startuid + record - 1
             gid = uid
             printf( "%s:%s:%d:%d:%s %s,,/home/%s:/bin/bash\n",  \
                 user, passwd, uid, gid, first, last, user \
                 )
         }
    

    Debian では、POSIX 互換の awk を供給するパッケージ が二種類あります。


    13.4 Perl

    これは Unix ライクシステムの インタプリタ です。

    Perl の参考文献をいくつか挙げます。

    (newusers のコマンドエントリを作成する) 短いプログラム例 を示します。

         #!/usr/bin/perl
         # (C) Osamu Aoki Sun Aug 26 16:53:55 UTC 2001 Public Domain
         $pid=1000;
         while (<STDIN>) {
                 if (/^#/) { next;}
                 chop;
                 $pid++;
                 ($n1, $n2, $n3) = split / /;
                 print $n1,"_",$n2,":", $n3, ":",$pid,
                           ":",$pid,",,,/home/",$n1,"_",$n2,":/bin/bash\n"
         }
    

    Perl モジュール module_name は次のようにインストールします。

         # perl -MCPAN -e 'install module_name'
    

    13.5 Python

    すばらしいオブジェクト指向なインタプリタです。

    Python の参考文献をいくつか挙げます。

    (newusers のコマンドエントリを作成する) 短いプログラム例 を示します。

         #! /usr/bin/env python
         import sys, string
         
         # (C) Osamu Aoki Sun Aug 26 16:53:55 UTC 2001 Public Domain
         # Ported from awk script by KMSelf Sat Aug 25 20:47:38 PDT 2001
         # This program is distributed WITHOUT ANY WARRANTY.
         
         def usages():
             print \
         "Usage:  ", sys.argv[0], " start_UID [filename]\n" \
         "\tstartUID is the starting userid to add.\n" \
         "\tfilename is input filename. If not specified, standard input.\n\n" \
         "Input file format:\n"\
         "\tfirst_name last_name password\n"
                         return 1
         
         def parsefile(startuid):
             #
             # main filtering
             #
             uid = startuid
             while 1:
                 line = infile.readline()
                 if not line:
                     break
                 if line[0] == '#':
                     continue
                 (first, last, passwd) = string.split(string.lower(line))
                 # above crashes with wrong # of parameters :-)
                 user = first[0] + last
                 gid = uid
                 lineout = "%s:%s:%d:%d:%s %s,,/home/%s:/bin/bash\n" %  \
                     (user, passwd, uid, gid, first, last, user)
                 sys.stdout.write(lineout)
                 +uid
         
         if __name__ == '__main__':
             if len(sys.argv) == 1:
                 usages()
             else:
                 uid = int(sys.argv[1])
                 #print "# UID start from: %d\n" % uid
                 if len(sys.argv) > 1:
                     infilename   = string.join(sys.argv[2:])
                     infile = open(infilename, 'r')
                     #print "# Read file from: %s\n\n" % infilename
                 else:
                     infile = sys.stdin
                 parsefile(uid)
    

    13.6 Make

    Make の参考文献をいくつか挙げます。

    シンプルな自動変数。

    ルールシンタックスを示します。

         target: [ prerequisites ... ]
          [TAB]  command1
          [TAB]  -command2 # エラーを無視
          [TAB]  @command3 # suppress echoing
    

    ここで [TAB] はタブの文字コードです。 各行は make 変数置換を行った後にシェルにより解釈されます。 2行以上にわたってスクリプトを続けるには、行の末尾に \ を 書いてください。シェルスクリプトでの環境変数のため $ を入力 するには、$$ を使用してください。

    ターゲット前提 のための 暗黙のルール は、例えば次のように書けます。

         %: %.c header.h
    

    又は

         %.o: %.c header.h
    

    ここで、ターゲット には % (正確のはこれらのうちの一つ) が含まれます。% は実際のターゲットのファイル名にある 空でないあらゆる文字列にマッチします。前提 は 同様に実際のターゲット名に関連する名前がどのようなものかを示すために % を使います。

    サフィックスルールmake のために厳密なルール を定義するためには 時代遅れ です。互換性のために、 GNU make ではまだサポートされていますが、可能な限り 次のような等価なパターンルールを使用しましょう。

         古いサフィックスルール   --> 新しいパターンルール
         .c:             --> %  : %.c
         .c.o:           --> %.o: %.c
    

    ルールのための自動変数。

         foo.o: new1.c new2.c old1.c new3.c
         $@ == foo.o                         (ターゲット)
         $< == new1.c                        (最初の依存関係)
         $? == new1.c new2.c new3.c          (新しい依存関係)
         $^ == new1.c new2.c old1.c new3.c   (全ての依存関係)
         $* == `%' はターゲットパターンにマッチした語幹です。
    

    変数のリファレンス。

         foo1 := bar    # 一回だけの展開
         foo2  = bar    # 再帰展開
         foo3 += bar    # 追加
         SRCS := $(wildcard *.c)
         OBJS := $(foo:c=o)
         OBJS := $(foo:%.c=%.o) 
         OBJS := $(patsubst %.c,%.o,$(foo)) 
         DIRS  = $(dir directory/filename.ext) # "directory" を展開
          $(notdir NAMES...), $(basename NAMES...), $(suffix NAMES...) ...
    

    自動の内部ルールを見るには、make -p -f/dev/null を 起動してください。


    13.7 C

    次をインストールして C を使う準備をしましょう。

         # apt-get install glibc-doc manpages-dev libc6-dev gcc
    

    C の参考文献をいくつか挙げます。


    13.7.1 シンプルな C プログラム (gcc)

    example.clibm ライブラリを用いて コンパイルして run_example 実行ファイルを作成するための シンプルな例です。

         $ cat > example.c << EOF
         #include <stdio.h>
         #include <math.h>
         #include <string.h>
         
         int main(int argc, char **argv, char **envp){
                 double x;
                 char y[11];
                 x=sqrt(argc+7.5);
                 strncpy(y, argv[0], 10); /* prevent buffer overflow */
                 y[10] = '\0'; /* fill to make sure string ends with '\0' */
                 printf("%5i, %5.3f, %10s, %10s\n", argc, x, y, argv[1]);
                 return 0;
         }
         EOF
         $ gcc -Wall -g -o run_example example.c -lm
         $ ./run_example
                 1, 2.915, ./run_exam,     (null)
         $ ./run_example 1234567890qwerty
                 2, 3.082, ./run_exam, 1234567890qwerty
    

    ここで、sqrt() を使うためにライブラリ libm をリンクするには -lm が必要です。実際のライブラリは /lib/libm.so.6 という名前で存在し、 これは libm-2.1.3.so のシンボリックリンクです。

    出力テキストの最後のパラメータを見てください。%10s が指定されているにも係わらず10以上の文字があります。

    境界チェックを行わずに sprintfstrcpy のような ポインタを用いるメモリ操作関数を使うのは上記のオーバーラン効果を利用する バッファオーバーフロー攻撃を防ぐために時代遅れになっています。 その代わりに、snprintfstrncpy をご利用下さい。


    13.7.2 デバッグ


    13.7.2.1 gdb を用いたデバッグ

    準備

         # apt-get install gdb
    

    gdb の参考文献をいくつか挙げます。

    -g オプション付きでコンパイルされたプログラムをデバッグするには gdb を使用します。多くのコマンドには省略形が存在します。 タブ拡張もシェルと同様に扱えます。

         $ gdb program
         (gdb) b 1                # ブレークポイントを一行目に設定
         (gdb) run arg1 arg2 arg3 # プログラムを起動
         (gdb) next               # 次の行
         ...
         (gdb) step               # 前に進む
         ...
         (gdb) p parm             # parm の内容を表示
         ...
         (gdb) p parm=12          # 値を 12 に設定
    

    Emacs からデバッグするには、エディタのコマンドのサマリ (Emacs, Vim), 第 11.3.4 節 をごらんください。

    インストールされる全てのバイナリは Debian システムでは標準で stripped される べきですので、ほとんどのデバッグシンボルは削除されています。Debian パッケージのデバッグに役立つように gdb を利用するには、 次の方法で該当するパッケージを再構築する必要があります。

    詳細は Policy 10.1 をごらんください。


    13.7.2.2 ライブラリの依存性をチェック

    プログラムがどのライブラリに依存しているかを調べるには、 ldd を使用します。

         $ ldd /bin/ls
                 librt.so.1 => /lib/librt.so.1 (0x4001e000)
                 libc.so.6 => /lib/libc.so.6 (0x40030000)
                 libpthread.so.0 => /lib/libpthread.so.0 (0x40153000)
                 /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
    

    lschroot された環境で動かすには、 上記に示したライブラリを chroot された環境に置く 必要があります。

    次に挙げるコマンドも役立ちます。


    13.7.2.3 メモリリーク検知ツールを用いたデバッグ

    数種類のメモリリーク検知ツールを Debian で使用できます。

    Debugging Tools for Dynamic Storage Allocation and Memory Management. も調べてみてください。


    13.7.3 Flex – Lex の改良版

    flex は高速な字句解析器生成器です。

    flex の参考文献をいくつか挙げます。

    ライブラリ無しでコンパイルできるように、次のように見える main()yywrap() 又は program.l を供給する必要が あります。(yywrap はマクロです。 %option main は暗黙に %option noyywrap になります)

         %option main
         %%
         .|\n    ECHO ;
         %%
    

    その代わりに、cc コマンドラインの最後に (AT&T-Lex の -ll のように) -lfl リンカオプション を付けてコンパイルできます。この場合、 %option は必要ありません。


    13.7.4 Bison – Yacc の改良版

    Debian では Yacc 互換な LALR パーサジェネレータパッケージが いくつか供給されています。

    bison の参考文献をいくつか挙げます。

    main()yyerror() を供給する必要があります。 main()yyparse() を呼び出し、これは yyparse() を呼び出します。さらにこれは 通常 FleX により生成される yylex() を呼び出します。

         %%
         
         %%
    

    13.7.5 Autoconf

    autoconf は GNU ビルドシステム全体を使用する 多種の UNIX ライクなシステムに適合するようにソフトウェアのソースコード パッケージを自動で設定するシェルスクリプトを生成するための ツールです。

    autoconfconfigure と呼ばれる 設定スクリプトを生成します。configureMakefile.in テンプレートを用いて自動的に カスタマイズされた Makefile を生成します。


    13.7.5.1 プログラムのコンパイルとインストール

    Debian は/usr/local/ 以下にあるファイルに触りません。 (多様性のサポート, 第 2.5 節 参照) ですから、ソースからプログラムをコンパイルして /usr/local/ 下に置いても Debian とは干渉しません。

         $ cd src
         $ ./configure --prefix=/usr/local
         $ make
         $ make install # システム上にファイルをインストールする
    

    13.7.5.2 プログラムのアンインストール

    プログラムを削除したいが、ソースをまだ持っており、autoconfautomake を使っていてコンパイル時の設定を覚えていたならば、 次の手順でアンインストールができます。

         $ ./configure all-of-the-options-you-gave-it
         # make uninstall
    

    代わりに、インストール手順で /usr/local/ の下にしか ファイルを置いておらず、重要なものは何もないことを絶対確信している なら、全ての内容を次のように削除できます。

         # find /usr/local -type f -print0 | xargs -0 rm -f
    

    どこにファイルをインストールしか確信できない場合、アンインストールのための クリーンな道筋を供給してくれる checkinstall の使用を 考えるべきです。


    13.8 Web

    基本的なインタラクティブで動的な web ページは 以下の手順で作られます。

    安全上、勝手に作ったいい加減なプログラムで CGI パラメータを読むのは 賢明でないとされています。Perl (Perl, 第 13.4 節 参照) や Python (Python, 第 13.5 節 参照) の確立したモジュールが有ります。 PHP は このような機能を自身で持っています。 クライアントサイドでデータ保持が必要な場合はクッキーが用いられます。 クライアントサイドでデータ処理が必要な場合は javascript がよく用いられます。

    詳細はThe Common Gateway InterfaceThe Apache Software FoundationJavaScript を参照下さい。

    Google で "CGI tutorial" を探すのに http://www.google.com/search?hl=en&ie=UTF-8&q=CGI+tutorial というエンコードされた URL を直接ブラウザのアドレスに打ち込むことは、 CGI スクリプトの Google サーバ上での動きを知るための良い方法です。


    13.9 ドキュメントの準備


    13.9.1 roff 植字

    伝統的に、roff は主要な Unix テキスト処理システムです。

    roff(7), groff(7), groff(1), grotty(1), troff(1), groff_mdoc(7), groff_man(7), groff_ms(7), groff_me(7), groff_mm(7) そして info groff をご覧下さい。

    -me マクロに良質のチュートリアルが存在します。 groff (1.18以後) をインストールしている場合、 file:///usr/share/doc/groff/meintro.me.gz を見付けて次を実行してください。

         $ zcat file:///usr/share/doc/groff/meintro.me.gz | \
              groff -Tascii -me - | less -R
    

    次の手順は完全なプレインテキストファイルを作成します。

         $ zcat file:///usr/share/doc/groff/meintro.me.gz | \
             GROFF_NO_SGR=1 groff -Tascii -me - | col -b -x > meintro.txt
    

    印刷するには、PostScript 出力を使いましょう。

         $ groff -Tps meintro.txt | lpr
         $ groff -Tps meintro.txt | mpage -2 | lpr
    

    13.9.2 SGML

    次のパッケージをインストールして SGML を使う準備を行います。

         # apt-get install debiandoc-sgml debiandoc-sgml-doc
    

    debiandoc-sgml の参考文献をいくつか挙げます。

    SGML により複数の文書フォーマットの管理を行えます。簡単な SGML システムの一つ が Debiandoc であり、本文書でも用いられています。Debiandoc は オリジナルのテキストファイルから次の文字について些細な変換が必要です。

    セクションを印刷不可能なコメントとしてマークするには、次に示すような 内容を挿入します。

         <!-- State issue here ... -->
    

    セクションを変換可能なコメントとしてマークするには、次に示すような内容を 挿入します。

         <![ %FIXME; [ State issue here ... ]]>
    

    SGML では、エンティティの 最初の定義 が優先されます。例えば、

         <!entity % qref "INCLUDE">
         <![ %qref; [ <!entity param "Data 1"> ]]>
         <!entity param "Data 2">
         &param;
    

    では、"Data 1" になります。最初の行が "INCLUDE" ではなく "IGNORE" を 含んでいる場合は、"Data 2" となります。(二行目は条件文) 又、フレーズの繰り返しは内容からあらかじめ分けて定義できます。

         <!entity whoisthis "my">
         Hello &whoisthis; friend.
         This is &whoisthis; book.
    

    これは次のような結果となります。

         Hello my friend.
         This is my book.
    

    examples にある短い SGML のサンプルの sample.sgml をご覧下さい。

    SGML 文書が巨大になった場合、バックエンドテキストプロセッサとして 使われる TeX が時々エラーを起こす場合があります。TeX/LaTeX, 第 13.9.3 節 をごらんください。


    13.9.3 TeX/LaTeX

    準備:

         # tasksel # その他 --> TeX/LaTeX 環境 を選択して
         TeX/LaTeX をインストールしましょう。
    

    LaTeX の参考文献をいくつか示します。

    TeX は最強の植字環境です。多くの SGML プロセッサは TeX をバックエンド テキストプロセッサとして使っています。lyx, lyx-xforms 又は lyx-qt により供給される Lyx や、 texmacs により供給される GNU TeXmacs は見栄えの良い LaTeX 用のWYSIWYG 編集環境を提供しますが、 多くの人はソースの編集のためには Emacs や Vim を選択しています。

    多くのオンラインのリソースが得られます。

    文書が巨大になった場合、TeX はエラーを起こす場合がときどきあります。 この問題を修正するには、/etc/texmf/texmf.cnf の pool サイズ を増大させる (又は /etc/texmf/texmf.d/95NonPath を適切に編集して update-texmf を起動する) 必要があります。


    13.9.4 Literate Programming

    文書を含むコードを書く代わりに、文芸的プログラマはコードを含む文書 を書くものです。この手法はプログラムのための良い文書を保証します。

    文芸的プログラムについては、 Literate Programming をごらんください。


    13.9.4.1 Noweb

    準備

         # apt-get install nowebm
    

    Noweb の参考文献をいくつか挙げます。

    これは WEB ライクな文芸的プログラムツールであり、よりシンプルですが 拡張性と言語との独立性を供給します。 [66] noweb が起動されると、プログラムのソースコードを noweb ファイルで言及されている出力ファイルに書き出し、文書の植字のために TeX ファイルを出力します。

    Debian の ifupdown パッケージが良い例です。

         $ apt-get source ifupdown
         $ cd ifupdown*
         $ make ifupdown.pdf ifupdown.ps
    

    13.9.4.2 Doxygen

    準備

         # apt-get install doxygen doxygen-doc doxygen-gui
    

    Doxygen (created by doxygen!) の参考文献をいくつか挙げます。

    C++, C, Java, IDL, さらにある程度は PHP と C#も含めて プログラムに関する HTML, RTF, Unix マニュアルページ, PostScript そして PDF (LaTeX を用いて) 文書を生成できます。Doxygen は JavaDoc (1.1), Qt-Doc, KDOC と互換性があり、 Troll Tech の Qt ツールキットを利用する プロジェクトが用いるために特別に設計されていました。 Doxygen はドキュメント化されていないプログラムであっても、依存グラフ、 協同ダイアログ、そしてグラフィカルなクラス階層グラフを含む内容を生成します。 この出力は Qt のドキュメントに似ています。


    13.10 パッケージング

    準備

         # apt-get install debian-policy developers-reference \
                           maint-guide dh-make debhelper
         # apt-get install packaging-manual # if Potato
    

    パッケージのための参考文献をいくつか挙げます。


    13.10.1 単独のバイナリをパッケージングする

    Joey Hess による単独のバイナリをパッケージングするためのクイックハックな 方法です。

         # mkdir -p mypkg/usr/bin mypkg/DEBIAN
         # cp binary mypkg/usr/bin
         # cat > mypkg/DEBIAN/control
         Package: mypackage
         Version: 1
         Architecture: i386
         Maintainer: Joey Hess <joeyh@debian.org>
         Description: my little package
          Don't expect much.
         ^D
         # dpkg-deb -b mypkg
    

    13.10.2 ツールを用いたパッケージング

    dh-make パッケージにある dh_make を使って パッケージのベースラインを作成します。そして、 dh-make(1) にある指示に従って処理します。 これは debian/rules 内で debhelper を利用します。

    古いアプローチでは debmake にある deb-make を使います。この方法は debhelper を利用せず、シェルのみに 依存します。debmake は使わないようにしましょう。

    複数のソースパッケージの例としては、"mc" (dpkg-source -x mc_4.5.54.dsc をごらんください。これは Adam Heath による "sys-build.mk" を利用しています。又、"glibc" (dpkg-source -x glibc_2.2.4-1.dsc) は Joel Klecker (espy@debian.org) による他のシステムを利用しています。


    [ 前のページ ] [ 目次 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 次のページ ]


    Debian Reference
    第 14 章 - GnuPG


    参考文献をいくつか挙げます。


    14.1 GnuPG のインストール

         # gpg --gen-key                   # 新しい鍵を生成
         # gpg --gen-revoke my_user_ID     # my_user_ID 用の失効鍵を生成
         # host -l pgp.net | grep www|less # pgp キーサーバを知る
    

    $HOME/.gnupg/gpg.conf (又は旧バージョンでは $HOME/.gnupg/options に) 設定すべき良質の標準キーサーバには 次が含まれます。

         keyserver hkp://subkeys.pgp.net
    

    ここで 二つ以上のサブ鍵を生成しない ように注意する必要が あります。そうしてしまった場合、pgp.net にあるキーサーバはあなたの鍵を 壊す 可能性があります。これらの壊れたサブ鍵を扱うには、 新しい gnupg (1.2.1-2 以降) を使ってください。 http://fortytwo.ch/gpg/subkeys をごらんください。


    14.2 GnuPG を使う

    ファイルの操作方法を次に挙げます。

         $ gpg  [options]  command  [args]
         $ gpg {--armor|-a} {--sign|-s} file # ファイルに署名してテキストファイル file.asc に置く
         $ gpg --clearsign file              # メッセージを clearsign で署名する
         $ gpg --clearsign --not-dash-escaped patchfile  # パッチファイルを
         clearsign で署名する
         $ gpg --verify file                 # clearsign された file を検証する
         $ gpg -o file.sig {-b|--detach-sig} file # 単独の署名を作成
         $ gpg --verify file.sig file        # file.sig を用いて file を検証する
         $ gpg -o crypt_file {--recipient|-r} name {--encrypt|-e} file 
                 # 名前を対象とした公開鍵の暗号化
         $ gpg -o crypt_file {--symmetric|-c} file # 対称暗号化
         $ gpg -o file --decrypt crypt_file  # 復号化
    

    14.3 GnuPG の管理

    GnuPG の主な管理手順をいくつか挙げます。

         $ gpg --edit-key user_ID               # 対話的なヘルプ
         $ gpg -o file --exports                # 全ての鍵を file にエクスポート
         $ gpg --imports file                   # 全ての鍵を file からインポート
         $ gpg --send-keys user_ID              # user_ID の鍵をキーサーバに送信
         $ gpg --recv-keys user_ID              # キーサーバから user_ID の鍵を取得
         $ gpg --list-keys user_ID              # user_ID の鍵をリスト
         $ gpg --list-sigs user_ID              # user_ID の署名をリスト
         $ gpg --check-sigs user_ID             # user_ID の署名をチェック
         $ gpg --fingerprint user_ID            # user_ID のフィンガープリントをチェック
         $ gpg --list-sigs | grep '^sig' | grep '[User id not found]' \
           | awk '{print $2}' | sort -u | xargs gpg --recv-keys # 未知の鍵を取得
           # 全ての未知の署名に対する鍵を更新
         $ gpg --refresh-keys                              # ローカルの keyring を更新
    

    コードの信頼度の指針を示します。

         -         ownertrust が割り当てられていない/まだ計算されていない
         e         信頼度の計算に失敗。
         q         評価のための情報が足りない。
         n         この鍵を信頼できない。
         m         ある程度信頼できる。
         f         完全に信頼できる。
         u         究極的に信頼できる。
    

    次の手順により、評判の良いキーサーバである hkp://subkeys.pgp.net に自分の鍵 "A8061F32" をアップロードできます。

         $ gpg --keyserver hkp://subkeys.pgp.net --send-keys A8061F32
    

    14.4 アプリケーションで GnuPG を使う


    14.4.1 Mutt で GnuPG を使う

    次の内容を ~/.muttrc に追加すれば、処理の重い GnuPG を自動で 起動せずに、index メニューで `S' をタイプすると GnuPG が呼び出される ようになります。

         macro index S ":toggle pgp_verify_sig\n"
         set pgp_verify_sig=no
    

    14.4.2 Vim で GnuPG を使う

    GnuPG を自動的に起動するために、examples subdirectory から得られる _vimrc の内容を ~/.vimrcに追加してください。


    [ 前のページ ] [ 目次 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 次のページ ]


    Debian Reference
    第 15 章 - Debian のサポート


    次のリソースは Debian を使う上でのヘルプ、助言、そしてサポート を提供します。メーリングリストで泣きつく前にこれらを使って自助努力 してみましょう。:)

    WWW ブラウザを使ったり、 dwwwdhelp パッケージ と同名のコマンドを通じてシステム上のたくさんのドキュメントに アクセスできます。


    15.1 参考文献

    次の参考文献は Debian と Linux 一般のためのものです。 これらの内容はお互いに矛盾する場合は、ドキュメントなどの二次文書よりも ソースなどの一次文書を常に信頼してください。

    次の参考文献は Unix 一般のためのものです。異なる Unix システムの間には いくつかの些細な相異点が存在することに注意してください。デバイス名 や初期化方法には特に注意が必要です。


    15.2 単語の意味を調べる

    Debian では暗号的な jargon や短縮形の単語が良く使われています。 次のコマンドはこれらの問題のほとんどを解決してくれます。 (dict パッケージと関連パッケージが必要です)

         $ dict put-a-weird-word-here
    

    15.3 Debian パッケージの人気度を調べる

    Debian には多くのパッケージが存在するので、まず試すべきパッケージを 知るのが難しい場合があります。他の人が何を使っているかを知るには Debian Popularity Contest Results をごらんください。又、この統計に貢献するには popularity-contest パッケージをインストールしてください。


    15.4 Debian バグ追跡システム (BTS)

    Debian ディストリビューション はユーザや開発者により 報告されたバグを記録する bug tracking system (BTS) を持ちます。報告された各バグには番号が振られ、処理されたとマークされるまでは ファイルに保存されます。

    バグレポートを提出するまでに、誰か他の人により提出されているかどうかを チェックする必要があります。現在提出されているバグのリストは World Wide Webelsewhere にあります。Debian のバグをチェックし、助けを求める, 第 6.3.1 節 もご覧下さい。

    FTBFS としてマークされているリリースクリティカルな バグレポートが多くあります。これは "ソースからビルドすることに失敗" を示します。

    バグレポートする方法についての指示は http://www.debian.org/Bugs/Reporting に 与えられています。


    15.5 メーリングリスト

    最低でも Debian の状況についていくために "debian-devel-announce" (英語、購読のみでトラフィック数は少ない) を 購読してください。

    Debian ユーザが最も興味を抱くメーリングリストは "debian-user" (英語、オープンで高トラフィック) と他の "debian-user-language" メーリングリスト (他言語用) です。

    これらのメーリングリストの情報と購読方法の詳細については、 http://lists.debian.org/ をごらんください。質問を投稿する前に質問の解答が あるかどうか知るためにアーカイブをチェックしてください。又、標準的な メーリングリストのエチケットを守ってください。

    メーリングリストの返答で CCを入れてもらいたい場合には、 Mail-Followup-To: ヘッダを使うのが大変有効です。 これはメーリングリストの非公式の慣習で http://cr.yp.to/proto/replyto.html に説明されています。


    15.6 Internet Relay Chat (IRC)

    IRC (Internet Relay Chat) は世界中の人々が同時に会話するための方法です。 Debian 向けの IRC チャンネルは freenode IRC ネットワークで見かります。 接続するには、IRC クライアントが必要です。有名なクライアントとしては、 XChat, BitchX, ircII, irssi, eipc4, や LSirc があり、これらは Debian パッケージとして存在します。クライアントをインストールした後に、 サーバに接続するようにクライアントに指示する必要があります。 ほとんどのクライアントでは、次のようにタイプすれば接続できます。

         /server irc.debian.org
    

    接続した後、次のようにタイプして #debian チャンネルに参加します。

         /join #debian
    

    #debian チャンネルから離れるには、次をタイプします。

         /part #debian
    

    irc クライアントを終了するには、次をタイプします。

         /quit
    

    foo に個人的なメッセージ "Hello Mr. foo" を送るには、 次をタイプします。

         /msg foo Hello Mr. Foo
    

    / を前に置かずにタイプした全てはメッセージとしてチャンネルに 送られることに注意してください。

    注意: XChat のようなクライアントはサーバ/チャンネルに参加するための グラフィックユーザインターフェースが異なる場合が良くあります。


    15.7 サーチエンジン

    Debian に関連するドキュメントを提供するサーチエンジンはたくさんあります。

    例えば、"cgi-perl" のような文字列を検索すると、その制御ファイルに ある簡潔な説明よりも、このパッケージのより詳細な説明が得られます。 関連する助言は Debian のバグをチェックし、助けを求める, 第 6.3.1 節 をごらんください。


    15.8 ウェブサイト

    私が特別な話題について集めた URL をランダムにいくつか示します。


    [ 前のページ ] [ 目次 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 次のページ ]


    Debian Reference
    補遺 A - 付録


    A.1 著者

    Debian Reference はまず Osamu Aoki osamu#at#debian.org により 個人的なインストールメモとして書かれ、結局 "クイックリファレンス" と呼ばれました。 コンテンツの多くは "debian-users" メーリングリストのアーカイブ から取られました。又、"Debian Installation Manual" および "Debian Release Notes" も参照されました。

    Debian Documentation Project (DDP) に関して 非常にアクティブな人物であり、現在の "The Debian FAQ" のメンテナである Josip Rodin の助言に従い、本文書は "Debian Reference" と改名し、 "The Debian FAQ" からリファレンス形式の内容としていくつかの章をマージしています。

    本文書は次に挙げる QREF チームメンバーにより編集、翻訳と 拡張が行われています。

    QREF はもともとの文書のタイトル "Quick Reference..." の短縮であり、 qref.sourceforge.net でのプロジェクト名でもあります。

    本文書を書くためにはまず Debian システム上の多くの マニュアルページや info ページが参照されました。 作者が公平な引用と考える程度で、マニュアルの多く部分、特に コマンド定義が本文書の形式と目標に適合するように注意深く 編集した後で部分的に成句として使用されました。

    Debian の基礎知識, 第 2 章 のほとんどの内容は元々は "The Debian FAQ" (March 2002) のものです。

    "Debian FAQ" の章は Debian システムの変更を反映するために 大きな再構築を行った後に本文書に含まれました。 現在は両文書共に同時に更新されています。

    オリジナルの "Debian FAQ" は J. H. M. Dassen (Ray) と Chunk Stickelman により作成と維持が行われました。書き直された "Debian FAQ" の著者は Susan G. Kleinmann と Sven Rudolph です。 その後、"Debian FAQ" は Santiago Vila がメンテナンスしました。 現在のメンテナは Josip Rodin です。

    "Debian FAQ" の情報の一部は次に挙げるリストからもたらされました。

    "Tutorial" セクションのうちいくらかは次の文書が由来です。

    著者は本文書を可能にするのを手助けしてくださった全ての人に感謝します。


    A.2 保証

    私は専門家では無いので、一般に Debian 又は Linux に関する完全な知識を 持っているふりをするつもりはありません。私が考慮するセキュリティは ホームユースにだけ適合しているかもしれません。

    本文書は権威のあるガイドの置き換えにはなり得ません。

    全ての保証を放棄します。全ての商標はそれぞれの商標保有者が所有しています。


    A.3 フィードバック

    本文書に対するコメントや追加は大歓迎です。 debian-reference パッケージあるいは翻訳版パッケージに 対して Debian BTS system にメールを 送ってください。 reportbug を使うと簡単に詳細な bug report を提出できます。 また、osamu#at#debian.org (Osamu Aoki) に英語でメールを送るか、翻訳者に日本語でメールを送ることもできます。

    著者はアメリカ合衆国に居住していましたが、英語の非ネーティブスピーカです。 文法の修正は大歓迎です。

    最良の形のフィードバックは SGML 版に対するパッチですが、テキスト版に対する パッチも歓迎しています。 公式サイトについては 公式文書, 第 1.1 節 をご覧ください。

    本文書を作成するのに使用されるオリジナルの SGML ファイルは、 :pserver:anonymous@cvs.sf.net/cvsroot/qref にある CVS 又は http://qref.sourceforge.net/Debian/qref.tar.gz から取得できます。


    A.4 文書フォーマット

    本文書は DebianDoc SGML DTD (LinuxDoc SGML から書き直された) を用いて書かれました。DebianDoc SGML システムにより、1つのソースから さまざまな形式のフォーマットでファイルを作成できるようになりました。 すなわち、本文書は HTML, プレーンテキスト, TeX DVI, Postscript, PDF そして GNU info 形式で見ることができます。

    DebianDOC SGML 用の変換ユーティリティは Debian パッケージ debiandoc-sgml にあります。


    A.5 Debian 迷路

    Linux システムはネットワーク化されたコンピュータのための非常に パワフルなコンピュータプラットフォームです。しかし、Linux の全能力を 利用する方法を学ぶことはたやすいことではありません。 プリンタの設定が良い例です。

    "ソースコード" という完全かつ詳細なマップが存在します。 これは非常に正確ですが理解しがたいものです。又、HOWTO や mini-HOWTO と呼ばれるリファレンスもあります。これらは理解しやすいですが、詳細に 渡り過ぎて概観を失いがちです。いくつかのコマンドを実行する必要がある時に、 長大な HOWTO の該当する章を探すのに骨が折れることが時々ありました。

    Linux システム設定の迷路を案内するため、自分だけのクイックリファレンスとして シンプルなメモ書きをテキスト形式で書きはじめました。このメモリストは段々 大きくなっていき、さらにメモを作る合間に debiandoc を習いました。その産物が この Debian Reference です。


    A.6 Debian の格言

    Debian メーリングリストにいくつかの興味深い格言があります。


    Debian Reference

    1

    debian-installer プロジェクトは .udeb で終わる ファイル名のパッケージを導入しました。要するに、マイクロ .deb フォーマットは ポリシーに正しくは従う必要はなく、ドキュメントなどの 内容を欠いており、debian-installer だけに用いられることを 意味しています。この新しい Debian インストーラは Sarge のリリースのために 初めて開発されました。.deb.udeb のファイルフォーマット は同じ物です。udpkg プログラムは 標準の dpkg より制限された能力を持つ .udeb パッケージを操作するために使われ、 より少ないパッケージの関係をサポートします。名前に違いがあるのは、 Debian アーカイブのメンテナはポリシーに従わないアーカイブに .deb という名前を持つのを好まなかったからです。それゆえ、2つのフォーマットの違い を目立たせ、本当のシステムに .udeb ファイルを無意識にインストール しないように名前を変更しました。.udeb は本当に制限された Debian システムを作成するため、base システムをインストールする間に最初のラムディスク 上で使用されます。

    2

    このメカニズムはパッケージを展開する 順番が非常に重要 であった a.out フォーマットから ELF フォーマットへのシステムの 安全な更新をサポートするために供給されました。

    3

    左側の Ctrl キー、左側の Alt キー、そして F1 キーを同時に押すことです。

    4

    /etc/motd にある歓迎メッセージを編集した場合、メッセージは 異なることに注意。

    5

    簡単でだらしがないだけの理由で必要以上にスーパーユーザアカウントを 使っていたことを認めなくてはなりません。

    6

    gpm, emacs21, や doc-linux-html をインストールするのも良い考え かもしれません。マウスの設定, 第 3.3 節エディタ, 第 11 章 参照。

    7

    私はいつもインストール中に作成されるアカウントを admin としますが、 任意の名前でかまいません。

    8

    この penguin ユーザを adm グループに追加 して /var/log/ にある多くのログファイルを読めるようにしたい かもしれません。 passwd(5), group(5), shadow(5), group(5), vipw(8), そして vigr(8) をご覧ください。 ユーザやグループの公式な意味は、 Users and Groups 文書の最近のバージョンをご覧ください。

    9

    コンソールから左 Ctrl キー、左 Alt キーと Delete キーを同時に押します。 標準のシステムでは、これはシステムをリブートさせます。最初のインストール後にさらにいくつかパッケージを インストールする, 第 3.8.1 節 に記述しているように、shutdown コマンドのオプションが -h となるように /etc/inittab を修正する必要が あります。

    10

    これは Debian システムでは、標準のインストール直後でさえも、 非特権ユーザがシステムに損害を与えるのを防ぐように適切なファイルアクセス権が 設定されているからです。もちろん、まだ利用される可能性のある穴がいくつか 残っているかもしれませんが、この問題を心配している人は本書ではなく、 Securing Debian Manual を読むべきです。

    11

    左 Ctrl キーと d キーを同時に押すこと。これらのコントロールキーが "control D" のように大文字で書かれていても、Shift キーを押す必要は ありません。

    12

    ここで penguin の代わりに root と対応したパスワードを入力すると、root アカウントに ログインします。この手順は root アカウントへのアクセスを 回復するために必要です。

    13

    たとえここで説明したことを正確に理解できなくとも、この作業は後でできます。

    14

    日本人用の konkterm のような端末上の場合は、 特定のグラフィック文字に関する問題が発生します。MC のコマンドライン オプションに -a を追加すると、問題を防止できるかもしれません。

    15

    実際には、vinvi のようなプログラムも 見つかります。私は、初心者のためには vim を代わりに選びます。 vim は F1 キーを通したヘルプを提供し、同じ位十分かつより力強いからです。

    もし vim がしっくりしない場合は、 ほとんどのシステムメインテナンス作業に関して mcedit を使い続けて良いです。 mcedit は 8 ビットクリーンで、 あまり賢くない (テキストエンコーディングに無関心) ので、エンコーディング 不明のファイルの編集の際には、むしろ有利です。mcedit は UTF-8 のファイルを正確に表示できません。

    16

    チュートリアルの章では、シェルは bash を意味します。 他種のシェルの真実については、シェル, 第 13.2 節 参照。

    17

    通常の Linux キャラクタコンソールでは、左側の Ctrl と Alt キーを使う ことを想定しています。

    18

    stty(1) を使ってこれらのターミナル機能を無効 にできます。

    19

    X Window 環境では、マウスは Xterm プログラムを用いると同様に機能します。

    20

    ここで "Unix" を純粋な意味で使用しています。Unix クローン OS は通常 等価なコマンドを提供します。Debian システムも例外ではありません。 望んだようにコマンドが働かなくても心配しないでください。 これらの例はこの順序で実行されることを意味していません。

    21

    もしIalias がシェル中で用いられた場合は、 これらの出力は異なります。

    22

    Unix は伝統的に、"." で始まるファイル名を隠します。これらは 伝統的に設定情報やユーザプリファレンスを含むファイルです。

    23

    素の Debian システムの標準のページャは more であるため、スクロールバックができません。コマンドライン apt-get install less を用いて less を インストールすることにより、less が標準のページャ になり、カーソルキーでスクロールバックできるようになります。

    24

    正規表現中の [[grep が 自分自身にマッチするのを避けることを可能とします。正規表現中の 4* は数字 4 の 0 回以上の繰り返しを意味するので、 grepeximexim4 の両方にマッチすることが可能になります。 * はシェルのファイルネームのワイルドカードや正規表現で 使われますが、これらの意味は異なります。

    25

    Potato にある旧版の tar でも動くように、新しい短縮形の オプション -j の代わりに --bzip2 をここでは用いています。

    26

    互換性を保つためにここでは --bzip2 を用いられています。

    27

    ここで、初心者のために事実を単純化しています。正確な説明は bash(1) 参照。

    28

    次のような出力を得るには、フランス語ロケールのインストールが必要です。 ロケール, 第 9.7.2 節 参照。これは必ずしもチュートリアルには必要ありません。 これはその潜在的な効果を示すためだけに行われました。

    29

    Debian システムはマルチタスクシステムです。 >

    30

    ディレクトリ はいくつかのシステムでは フォルダと呼ばれています。

    31

    ファイル名にはほとんど全ての文字や記号を使えますが、 実際には使うべきではない文字や記号があります。コマンドラインで特別な意味 を持つ文字を使うのを避けるのが良いでしょう。それらには、スペース、タブ、 改行や他の特別な文字: { } ( ) [ ] ' ` " \ / > < | ; ! # & ^ * % @ $ が含まれます。

    複数の単語からなるファイル名を付けたい場合、ピリオド、ハイフンや下線を 使うのが良い選択です。各単語の先頭文字を、LikeThis のように 大文字にするのも良いでしょう。

    32

    パス という単語の他の使いかたもあります。 コマンド検索パス, 第 4.3.6 節 をご覧ください。意図された意味は通常文脈から 判断するとはっきりします。

    33

    もちろんこの方法は 3 桁の数字モードの場合のみ機能します。

    34

    testingunstable を追いかけている場合、 /etc/apt/sources.list/etc/apt/preferences から stable への参照を削除できます。その理由は testingstable のコピーとして始まっているからです。

    35

    upgradedist-upgrade の違いは、新しいバージョンと 古いバージョンのパッケージに依存関係の違いが見られる場合にのみ現れます。 詳細は apt-get(8) をご覧下さい。

    aptitude upgradeaptitude dist-upgrade は コマンドラインモードで aptitude を起動します。 e キーを押してこれらをフルスクリーンモードに切替えられます。

    36

    いくつかの *config スクリプトは新しい Sarge リリースでは 消えており、パッケージの設定機能は debconf に移動しています。

    37

    recodeiconv よりずっと便利なエイリアスが可能です。

    38

    行端

    39

    /etc/default/ にあるディレクトリは環境変数の割り当て のみ を含みます。 各ファイルはこれらの割り当てが init スクリプト自身にある標準の 変数の設定を上書きするような方法で、対応する init スクリプトにより 読み込まれます。 このディレクトリ名の選択は Debian 独特 のものです。 大まかに言うと、Red Hat や他のディストリビューションで見られる /etc/sysconfig と同じものです。

    40

    これは Woody では得られませんが、Sarge からインストールできます。

    41

    Woody ではこのパッケージは Microsoft の website の変更により、 2002年 8月の時点で動きません。Woody をインストールしていても Sarge のパッケージを使いましょう。

    42

    xft1 を他には使っていないので、この変更が効力を及ぼす前に X を 再起動する必要があるかどうか分かりません。"xftcache" が Xft1 キャッシュを 更新するはずだと記憶していますが、だれかが確認して私に知らせていただくと ありがたい。

    43

    Fontconfig は Woody には存在しません。

    44

    次の章では exim を例として使っています。 Sarge の場合は必要に応じて exim4 に置き換えてください。

    45

    ブロードバンドルータ経由でダイアルアップ, DSL, ケーブルサービス又は LAN 接続を行っているホストに対してこのルールに従う必要があります。ホストが 固定 IP を持っている場合でも、このルールに従うのは依然良い考えです。 ほとんどのワークステーションやホームサーバはこのカテゴリに属します。

    46

    In this example, 2 bug work arounds are deployed for the version of blackbox in 2003. I use sh -c in command. Also ~/.menu/* entry is not used but root requiring /etc/menu/* was used instead.

    47

    パッケージ名と重複しない名前を使いましょう。

    48

    パッケージ名と重複しないファイル名を使いましょう。

    49

    section="/" のスラッシュは最初の menu へのエントリを可能にし、 title=" Mozilla Navigator" にある先頭のスペースはリストの 先頭へのエントリを可能にします。

    50

    無線 LAN インターフェイスの一部は本当はイーサネットインターフェイスの別名 であり、無線 LAN 独特の設定パラメータへのヒントを与えてくれます。 これらのパラメータは iwconfig プログラムを用いて 制御可能です。

    51

    これは IPv4 が使用されている場合に正しい。IPv6 ではアドレスは 128 ビット。 http://www.ipv6.org/ 参照。

    52

    ネットワークのアドレスはネットワークアドレスとネットワークのネットマスクの和を 取ることにより得られます。ブロードキャストアドレスはネットワークアドレスと ネットマスクの一の補数の積を取ることにより得られます。

    53

    このオプションファイルは call オプションを用いて含まれます。

    54

    2004年4月時点では、dhcp-client パッケージも利用可能です。 これには ISC DHCP クライアントの version2 が含まれています。 これは現在 dhcp3-client に収録されている version 3 により 置き換えられます。メンテナは dhcp3-client を Sarge 以降に dhcp-client に改名しようと計画しています。

    experimentalバージョンの dhcp-client がインストールされ てない事を確認して下さい。ifupdown がうまく動きません。

    55

    最新のバージョンの /etc/network/interfaces の ファイルフォーマットは Potato 以前のフォーマットと少し互換性がありません。 ifupdown のインストール後スクリプトが必要な場合に 自動的にこのファイルを更新します。

    56

    bug #196877 参照。

    57

    bug #127786 参照

    58

    この技術は ifupdown のドキュメントで使用されています。

    59

    auto 行にあるインターフェイス名は物理インターフェイスで 無ければいけません。論理インターフェイスではありません。

    60

    詳細は ランレベル, 第 2.4.2 節 を参照下さい。

    61

    /etc/hotplug.d/net/ にインストールされたあらゆる フックスクリプトによっても設定されるかもしれません。 例えば ifplugdwaproamd パッケージはフックスクリプトをそこにインストールします。

    62

    hotplug はバージョン0.0.20040329-4あたりでは ここに記載されたのと異なった挙動をするモードに設定できる。 そのようなモードの一つはいわゆる "all" モードで、 hotplug は全てのホットプラグ可能なインターフェイスを 起動します。そうのようなもう一つのモードはいわゆる "auto" モードで hotplug/etc/network/interfaces の中に auto 行にリストされている場合にのみインターフェイスを 起動します。このような特殊なモードでは ifup=hotplug というサフィックス無しで起動されます。

    63

    過去の Debian リリースでは、PCMCIA ネットワークカードの標準的な 設定方法は cardmgr を通じた /etc/pcmcia/network/etc/pcmcia/network.opts フックスクリプトでした。 これらのフックスクリプトはより一般的な目的の hotplug 能力が得られた Linux の前の時代に開発されました。

    標準状態では、 インターフェイスが追加されると ifup を、 インターフェイスが削除されると igdown を単に呼び出すだけの これらのスクリプトをまだ使っている人がいます。 上に述べたように、今はインターフェイスの追加削除の作業を行うには、 hotplug を使うことを推奨します。

    /etc/pcmcia/network.opts にある特定の変数が y にセットされると有効にされる低レベルなネットワーク設定コマンドを呼ぶ Debian Woody の特別なシステムを利用する人もまだいます。 このシステムには複数の問題があります。 問題としては、競合条件による不具合や、16 ビット PCMCIA カードしか 動かないこと、ifupdown が行うために残した方が 良いことをやってしまうことがあります。 結果としてこれは時代遅れです。

    64

    ここで 16進数で nn に対応する文字 をエンコードするのには、 %nn を用います。

    65

    この本に収納されている TeX のソースは ftp://ftp.dante.de/pub/tex/systems/knuth/tex/texbook.tex で取得可能です。 ftp://ftp.dante.de/pub/tex/systems/knuth/lib/manmac.tex には必要なマクロのほとんどが 含まれています。この文書の 7 から 10 行目をコメントアウトし、 \input manmac \proofmodefalse を追加した後に 文書を tex で処理できます。

    オンライン版を使わずにこの本 (と Donald E. Knuth による他の全ての本) を購入するのを強くお薦めします。しかしソースは TeX 入力の 素晴らしい例です!。

    66

    WEB は World Wide Web とは 何も 関連はありません。 (PASCAL 用の) WEB と (C/C++ 用の) CWEB は伝統的な文芸的プログラム ツールです。


    [ 前のページ ] [ 目次 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 次のページ ]


    Debian Reference

    This translation is based on old version of Debian Reference (English, version 1.x), well before Sat, 26 Jan 2008.

    Osamu Aoki (青木 修) osamu#at#debian.org
    翻訳: 角田 慎一 tsuno#at#ngy.1st.ne.jp
    著者, 第 A.1 節