第11章 Debian GNU/Linux システムの調整

目次

11.1. プログラムが全て確実に同一の用紙サイズを使うようにする方法は?
11.2. セキュリティ問題を発生させることなくハードウェア周辺機器へのアクセスを提供する方法は?
11.3. Debian のやり方で起動時にコンソール用フォントを読み込む方法は?
11.4. X11 プログラムのアプリケーションデフォルトを設定する方法は?
11.5. How does a Debian system boot?
11.6. And how about Debian and traditional System V init?
11.7. And are there yet other ways of booting a Debian system?
11.8. パッケージ管理システムは他のパッケージの設定ファイルを収録するパッケージをどのように扱いますか?
11.9. パッケージによりインストールされたファイルを上書きして、異なるバージョンを代わりに使う方法は?
11.10. ローカルでビルドしたパッケージをパッケージ管理システムが認識する利用可能パッケージ一覧で見られるようにする方法は?
11.11. あるユーザは mawk、別のユーザは gawk、あるユーザは vim、別のユーザは elvis、あるユーザは trn、別のユーザは tin を好みます。Debian は多様性をどのようにサポートしますか?

11.1. プログラムが全て確実に同一の用紙サイズを使うようにする方法は?

libpaper1 パッケージをインストールするとシステム全体のデフォルト用紙サイズを聞いてきます。この設定はファイル /etc/papersize に残されます。

Users can override the paper size setting using the PAPERSIZE environment variable. For details, see the manual page papersize(5).

11.2. セキュリティ問題を発生させることなくハードウェア周辺機器へのアクセスを提供する方法は?

/dev ディレクトリにある多数のデバイスファイルは事前に定義されたグループのいくつかに所属しています。例えば /dev/sr0cdrom グループに属しています。

こういったデバイスの1つに特定のユーザがアクセスできるようにしたい場合は、そのデバイスが属するグループにそのユーザを追加するだけで済みます。つまり:

adduser ユーザ グループ

こうすることでデバイス上のファイルの権限を変更しなくてよくなります。

ユーザシェルや GUI 環境でこれを行った場合はそのグループ権の効果を反映させるには一旦ログアウトして再びログインしなければなりません。自分が属するグループを確認するには groups を実行してください。

udev の導入以降、ハードウェア周辺機器の権限を変更した場合、デバイスによってはシステム起動時に調整されることがあることに注意してください。差し込んだハードウェア周辺機器でこれが起きた場合は /etc/udev にある規則を調整する必要があるでしょう。

11.3. Debian のやり方で起動時にコンソール用フォントを読み込む方法は?

kbd パッケージがこれをサポートしています。/etc/kbd/config ファイルを編集してください。

11.4. X11 プログラムのアプリケーションデフォルトを設定する方法は?

Debian の X プログラムはアプリケーションのリソースデータを /etc/X11/app-defaults/ ディレクトリにインストールします。X アプリケーション全体を独自化したい場合、その独自化に関するファイルはここに配置してください。ここに配置したものは設定ファイルとして扱うためアップグレードしてもその内容が維持されます。

11.5. How does a Debian system boot?

Like all Unices, Debian boots up by executing the program init. Like most Linux distributions, a default Debian system uses systemd as the implementation of init. Traditional System-V style init and other methods are also supported. [6]

To control the order in which services are started, traditional System-V style Unix systems use runlevels. These are replaced by targets under systemd. To display the default target to which systemd will bring the system, run the command

systemctl get-default

During boot-up, systemd starts the services or other targets listed in the default target file /lib/systemd/system/default.target. The files for these services and targets are installed and the service is enabled during Debian package installation. If you specifically wish not to start a service during boot-up, instead of removing the corresponding package, you can run the command

systemctl disable service.service

using the name of the service file installed in /lib/systemd/system (usually based on the name of the package).

The service file /lib/systemd/rc.local.service provides an easy way to run customized scripts in the file /etc/rc.local after boot-up, similar to what's offered on Debian systems running System-V style init. Beware: this script will fail if it tries to interact with the console such as asking for a user password or trying to clear the screen.

You can check the status of any service by the command

service package status

. To start or stop a service, run

service package start

and

service package stop

. The service command works with any init system supported on a Debian system, not just with systemd. If you however prefer to use the same command on any systemd-supported Linux system, for checking the status run

systemctl status package.service

to get the same information.

For more information on systemd for Debian, see https://wiki.debian.org/systemd.

11.6. And how about Debian and traditional System V init?

Debian supports booting using traditional System V init, via the sysvinit-core package. The configuration file for System V init (which is /etc/inittab) specifies that the first script to be executed should be /etc/init.d/rcS. This script runs all of the scripts in /etc/rcS.d/ by forking subprocesses to perform initialization such as to check and to mount file systems, to load modules, to start the network services, to set the clock, and to perform other initialization.

ブートプロセスの完了後、init はデフォルトランレベル (このランレベルは /etc/inittabid エントリで指定されています) で指定されたディレクトリにある開始スクリプトを全て実行します。ほとんどの System V 互換 Unix と同様、Linux にはランレベルが7つあります:

  • 0 (システムの停止)、

  • 1 (シングルユーザモード)、

  • 2から5 (様々なマルチユーザモード)、

  • 6 (システムの再起動)。

Debian システムは id=2 で、マルチユーザ状態に入ったときのデフォルトのランレベルが「2」であることを示し、/etc/rc2.d/ にあるスクリプトが実行されます。

Debian は /etc/init.d/ にある各スクリプトの LSB ヘッダを使い、insserv 経由で依存関係を基にしてブート順を決定し、さらに startpar を利用し、同時に平行してブートすることでブートプロセスを高速化しています。

ディレクトリ群 /etc/rcN.d/ にあるスクリプトは /etc/init.d/ にあるスクリプトに向けた単なるシンボリックリンクです。ただし、各 /etc/rcN.d/ ディレクトリにあるファイルの名前/etc/init.d/ にあるスクリプトの実行方法を示すようになっています。具体的に言うと、そのランレベルに入る前に「K」で始まるスクリプトがすべて実行されます。このスクリプト群はサービスを終了させます。それから「S」で始まるスクリプトがすべて実行されます。このスクリプト群はサービスを開始させます。「K」や「S」に続く2ケタの数値はスクリプトの実行順を示します。この数値の低いスクリプトから実行されます。

このやり方は /etc/init.d/ にあるスクリプトが全て、「start」、「stop」、「reload」、「restart」、「force-reload」のどれかを引数に取り、その引数で示された作業を実行するため機能します。このスクリプト群はシステム起動後でも、様々なプロセスを制御するのに利用できます。

例えばコマンドに引数「reload」を付けて

/etc/init.d/sendmail reload

sendmail デーモンにシグナルを送り設定ファイルを再読込させます。

/etc/init.d/ スクリプトを呼び出すために invoke-rc.d を使うべきではないことに注意してください。代わりに service を使うべきです。

11.7. And are there yet other ways of booting a Debian system?

If you do like System V init, but don't like the /etc/rc?.d/* links, you could install the file-rc package. That will convert the links into one single configuration file /etc/runlevel.conf instead.

If you like neither System V nor systemd, you might like openrc or runit or daemontools.

11.8. パッケージ管理システムは他のパッケージの設定ファイルを収録するパッケージをどのように扱いますか?

例えば Debian パッケージ群とローカルで生成した設定ファイル群からなるパッケージをインストールすることで新しいサーバを作成したいユーザがいます。これは通常良い方法ではありません。というのは、設定ファイルが異なるパッケージにある場合、dpkg はそのことについて知らず、最初のパッケージ「群」のどれかがアップグレードされたときに競合する設定を書き込むかもしれません。

代わりに、当該 Debian パッケージ「群」の設定ファイルを変更するローカルパッケージを作成します。そうすると dpkg その他のパッケージ管理システムはそのファイルがローカル「システム管理者」により変更されたことを理解し、そのパッケージのアップグレード時に上書きしようとはしません。

11.9. パッケージによりインストールされたファイルを上書きして、異なるバージョンを代わりに使う方法は?

システム管理者やローカルユーザが Debian の login パッケージにより提供されるプログラム「login」に代えてプログラム「login-local」を使いたいと仮定して

 

  • /bin/loginlogin-local で上書きする

ということはしないでください。パッケージ管理システムはこの変更について知らず、login (や任意の /bin/login を提供するパッケージ) がインストールまたは更新されたときに独自化した /bin/login をあっさりと上書きします。

上書きするのではなく

  • 代わりに

    dpkg-divert --divert /bin/login.debian /bin/login
    

    を実行して、将来 Debian の login パッケージをインストールするときには全てファイル /bin/login の代わりに /bin/login.debian に書き込むようにします。

  • それから

    cp login-local /bin/login
    

    を実行して自分でローカルでビルドしたプログラムを所定の位置に移動します。

そのシステムで現在どの代替が有効になっているのか確認するには dpkg-divert --list を実行してください。

Details are given in the manual page dpkg-divert(8).

11.10. ローカルでビルドしたパッケージをパッケージ管理システムが認識する利用可能パッケージ一覧で見られるようにする方法は?

コマンド

dpkg-scanpackages BIN_DIR OVERRIDE_FILE [PATHPREFIX] > my_Packages

を実行してください。

  • BIN-DIR は Debian アーカイブファイル (拡張子は通常「.deb」) が置かれるディレクトリです。

  • OVERRIDE_FILE はディストリビューションのメンテナにより編集されるファイルで、通常「main」ディストリビューションにある Debian パッケージの場合は Debian FTP アーカイブの indices/override.main.gz に置かれています。ローカルパッケージの場合はこれは無視できます。

  • PATHPREFIX はオプションの文字列で、my_Packages ファイルを生成するときに前に付加されます。

ファイル my_Packages をビルドできたら、コマンド

dpkg --merge-avail my_Packages

If you are using APT, you can add the local repository to your sources.list(5) file, too.

11.11. あるユーザは mawk、別のユーザは gawk、あるユーザは vim、別のユーザは elvis、あるユーザは trn、別のユーザは tin を好みます。Debian は多様性をどのようにサポートしますか?

2つのパッケージが1つのプログラムの異なるバージョンを提供し、どちらも同一の主要機能を提供しているような状況がいくらかあります。ユーザによっては習慣から、あるいはパッケージのユーザインターフェイスが他方のインターフェイスよりもいくらか使いやすいという理由で、どちらか一方を好むかもしれません。同一のシステムの別のユーザは異なる選択をするかもしれません。

Debian は「仮想」パッケージシステムを使って、同一の基本機能を提供するツールが複数ある場合に、システム管理者 (またはユーザ) に好みのものを選択させつつ、特定のパッケージを指定することなくパッケージの依存要求を満たすことができるようにしています。

例えばあるシステム上に2つの異なるバージョンのニュースリーダーが存在するかもしれません。ニュースサーバパッケージはあるニュースリーダーがそのシステムに存在することを「推奨」するかもしれません。しかし、tintrn のどちらを選択するかは個々のユーザに委ねたい。これは仮想パッケージ news-reader を提供する tintrn パッケージの両方を持っておくことで満たせます。起動するプログラムは、仮想パッケージの /etc/alternatives/news-reader というファイルから選択したファイル、例えば /usr/bin/trn を指すリンクにより判断します。

単一のリンクでは代替プログラムのあらゆる用途に対応するには不十分です。通常はマニュアルページや、もしかすると他の支援ファイルも選択する必要があるかもしれません。Perl スクリプト update-alternatives が、指定されたパッケージに関連するファイルがシステムのデフォルトとして確実に全て選択する方法を提供しています。

例えばどの実行可能ファイルが「x-window-manager」を提供しているのか確認したい場合は

update-alternatives --display x-window-manager

を実行します。変更したい場合は

update-alternatives --config x-window-manager

を実行して表示される指示に従ってください (基本的には良いと思う番号を押せばいいでしょう)。

あるパッケージがなんらかの理由によりそれ自体をウィンドウマネージャとして登録しない (それが誤りであればバグを報告してください)、あるいはウィンドウマネージャを /usr/local ディレクトリから利用する場合、表示される選択肢には希望する項目がないでしょう。コマンドラインオプションから

update-alternatives --install /usr/bin/x-window-manager \
  x-window-manager /usr/local/bin/wmaker-cvs 50

のようにしてリンクを更新できます。「--install」オプションへの最初の引数は /etc/alternatives/[名前] を指すシンボリックリンクで、[名前]は2つ目の引数になります。3つ目の引数は /etc/alternatives/[名前] が指すシンボリックリンクで、4つめの引数は優先度 (大きな値を指示するとその代替は自動的に選択される可能性が高くなります) です。

追加した代替を削除する場合は、単純に以下を実行します:

update-alternatives --remove x-window-manager /usr/local/bin/wmaker-cvs


[6] In 2014, Debian changed its default init system from System V init to systemd. Debian 8 "jessie" in April 2015 was the first release to ship with systemd as default init. Four decisions of the Debian Technical Committee were involved: Bug #727708 2014-02-11: "The committee decided that the default init system for Linux architectures in jessie should be systemd." Bug #746715 2014-08-01: "The technical committee expects maintainers to continue to support the multiple available init systems", and merge reasonable contributions. Bug #746578 2014-11-15: "The committee decided that systemd-shim should be the first listed alternative dependency of libpam-systemd instead of systemd-sysv." This decision made it easier to keep running a non-systemd Debian system. Bug #7621942017-11-04: "On automatic init system switching on upgrade"