第9章 システムに関するティップ

目次

9.1. screen プログラム
9.1.1. screen(1) の使い方のシナリオ
9.1.2. screen コマンドのキーバインディング
9.2. データーの記録と表現
9.2.1. ログデーモン
9.2.2. ログアナライザー
9.2.3. シェルの活動を綺麗に記録
9.2.4. テキストデーターのカスタム化表示
9.2.5. 時間と日付のカスタム化表示
9.2.6. 着色化されたシェル出力
9.2.7. 着色化されたコマンド
9.2.8. 複雑な反復のためにエディターでの活動を記録
9.2.9. X アプリケーションの画像イメージの記録
9.2.10. 設定ファイルの変更記録
9.3. データー保存のティップ
9.3.1. ディスク空間の利用状況
9.3.2. ディスクパーティション設定
9.3.3. UUID を使ってパーティションをアクセス
9.3.4. ファイルシステム設定
9.3.5. ファイルシステムの生成と整合性チェック
9.3.6. マウントオプションによるファイルシステムの最適化
9.3.7. スーパーブロックによるファイルシステムの最適化
9.3.8. ハードディスクの最適化
9.3.9. SMART を用いたハードディスクの破壊の予測
9.3.10. LVM を使う使用可能なストレージ空間の拡張
9.3.11. 他パーティションをマウントする使用可能なストレージ空間の拡張
9.3.12. 他ディレクトリをバインドマウントする使用可能なストレージ空間の拡張
9.3.13. シムリンクを使う使用可能なストレージ空間の拡張
9.3.14. aufs を使う使用可能なストレージ空間の拡張
9.4. データー暗号化ティップ
9.4.1. dm-crypt/LUKS を使ったリムーバブルディスクの暗号化
9.4.2. dm-crypt を使って swap パーティションを暗号化
9.4.3. eCryptfs を使って自動的にファイルを暗号化
9.4.4. eCryptfs を自動的にマウント
9.5. プログラム活動の監視と制御と起動
9.5.1. プロセスの時間計測
9.5.2. スケジューリングのプライオリティー
9.5.3. ps コマンド
9.5.4. top コマンド
9.5.5. プロセスによって開かれているファイルのリスト
9.5.6. プログラム活動の追跡
9.5.7. ファイルやソケットを使っているプロセスの識別
9.5.8. 一定間隔でコマンドを反復実行
9.5.9. ファイルに関してループしながらコマンドを反復実行
9.5.10. GUI からプログラムをスタート
9.5.11. スタートするプログラムのカスタム化
9.5.12. プロセスの停止
9.5.13. タスク1回実行のスケジュール
9.5.14. タスク定期実行のスケジュール
9.5.15. Alt-SysRq キー
9.6. システム管理ティップ
9.6.1. だれがシステム上にいる?
9.6.2. 全員への警告
9.6.3. ハードウエアーの識別
9.6.4. ハードウエアー設定
9.6.5. システムとハードウエアーの時間
9.6.6. ターミナルの設定
9.6.7. 音のインフラ
9.6.8. スクリーンセーバーの無効化
9.6.9. ブザー音の無効化
9.6.10. 使用メモリー
9.6.11. システムのセキュリティーと整合性のチェック
9.7. カーネル
9.7.1. Linux カーネル 2.6
9.7.2. カーネル変数
9.7.3. カーネルヘッダー
9.7.4. カーネルと関連モジュールのコンパイル
9.7.5. カーネルソースのコンパイル: Debian 標準手法
9.7.6. モジュールソースのコンパイル: Debian 標準手法
9.7.7. カーネルソースのコンパイル: 古典的方法
9.7.8. Non-free ハードウエアードライバー
9.8. 仮想化システム
9.8.1. 仮想化ツール
9.8.2. 仮想化の業務フロー
9.8.3. 仮想ディスクイメージファイルをマウント。
9.8.4. Chroot システム
9.8.5. 複数のデスクトップシステム

主にコンソールからシステムを設定や管理する基本的なティップを次に記します。

9.1. screen プログラム

screen(1) は、ネットワーク接続中断をサポートするので信頼性が低く断続的な接続経由でリモートサイトをアクセスする人にとっては非常に有用なツールです。

表9.1 ネットワーク切断の中断をサポートするプログラムのリスト

パッケージ ポプコン サイズ 説明
screen * V:10, I:32 952 VT100/ANSI ターミナルエミュレーションを使ってのターミナルマルチプレクサ

9.1.1. screen(1) の使い方のシナリオ

screen(1) は複数のプロセスを1つのターミナルウィンドウでうまく動作させるのみならず、接続が中断してもリモートシェルプロセスを生き延びさせる事もできます。screen(1) の使われ方の典型的シナリオは次です。

  1. リモート機器にログインします。

  2. 単一のコンソール上で screen を起動します。

  3. ^A c ("Control-A" に続いて "c") によって作られた screen のウィンドウ中で複数のプログラムを実行します。

  4. ^A n ("Control-A" に続いて "n") によって、複数の screen のウィンドウ間を切り替えます。

  5. 突然ターミナルを離れる必要ができたけれども、接続を継続してあなたが実行中の作業を失いたくありません。

  6. 次のようないかなる方法ででも、screen のセッションをデタッチできます。

    • 暴力的にネットワーク接続を引き抜く

    • ^A d ("Control-A" に続いて "d") とタイプしてリモート接続から手動でログアウト

    • ^A DD ("Control-A" に続いて "DD") とタイプして screen をデタッチしてログアウト

  7. 同じリモート機器に (たとえ異なるターミナルからでも) 再びログインします。

  8. screen を"screen -r" として起動します。

  9. screen は全アクティブなプログラムが実行されている過去の全 screen ウィンドウを魔法のようにリアタッチします。

[ティップ] ティップ

screen を使うと、切断してもプロセスをアクティブにしておけその後で再接続した時にリアタッチできるので、ダイヤルアップやパケット接続のような計量されたネットワーク接続での接続料金の節約ができます。

9.1.2. screen コマンドのキーバインディング

screen セッションではコマンドキーストローク以外の全てのキーボード入力は現在のウィンドウに送られます。全ての screen コマンドキーストロークは ^A ("Control-A") と単一キー [プラス何らかのパラメーター] をタイプすることによって入力されます。次に覚えておくべき重要なコマンドキーストロークを記します。

表9.2 screen キーバインディングのリスト

キーバインディング 意味
^A ? ヘルプスクリーンを表示 (キーバインディングを表示)
^A c 新規ウィンドウを作成しそれに切り替える
^A n 次のウィンドウに切り替える
^A p 前のウィンドウに切り替える
^A 0 0番のウィンドウに切り替える
^A 1 1番のウィンドウに切り替える
^A w ウィンドウのリストを表示
^A a Ctrl-A を現在のウィンドウにキーボード入力として送る
^A h 現在のウィンドウのハードコピーをファイルに書く
^A H 現在のウィンドウのファイルへのロギングを開始/終了する
^A ^X ターミナルをロック (パスワードで保護)
^A d ターミナルから screen のセッションをデタッチ
^A DD screen のセッションをデタッチしてログアウト

詳細は screen(1) を参照下さい。

9.2. データーの記録と表現

9.2.1. ログデーモン

多くのプログラムは "/var/log/" ディレクトリーの下にそれぞれの活動を記録します。

  • カーネルログデーモン: klogd(8)

  • システムログデーモン: rsyslogd(8)

「システムメッセージ」「カーネルメッセージ」を参照下さい。

9.2.2. ログアナライザー

注目すべきログアナライザー (aptitude(8) で"~Gsecurity::log-analyzer") を次に記します。

表9.3 システムログアナライザーのリスト

パッケージ ポプコン サイズ 説明
logwatch * V:2, I:2 1795 綺麗な出力の Perl で書かれたログアナライザー
fail2ban * V:5, I:6 672 複数回の認証エラーを発生させる IP を使用禁止にします
analog * V:1.0, I:15 4524 ウェッブサーバーのログアナライザー
awstats * V:1.9, I:3 3101 強力で機能の多いウェッブサーバーのログアナライザー
sarg * V:1.5, I:1.6 944 squid の分析レポートジェネレター
pflogsumm * V:0.2, I:0.6 160 Postfix ログ項目サマライザー
syslog-summary * V:0.19, I:1.2 84 syslog ログファイルの内容をまとめる
lire * V:0.10, I:0.12 5304 機能豊富なログアナライザーとレポートジェネレター
fwlogwatch * V:0.07, I:0.17 440 ファイアウォールログアナライザー
squidview * V:0.08, I:0.5 193 squid の access.log ファイルのモニターと分析
visitors * V:0.07, I:0.2 228 ウェッブサーバーの高速ログアナライザー
swatch * V:0.05, I:0.2 112 正規表現マッチ、ハイライト、フック機能付きログファイルビューワー
crm114 * V:0.04, I:0.14 1336 制御可能な正規表現切断機とスパムフィルター (CRM114)
icmpinfo * V:0.04, I:0.2 84 ICMP メッセージの解釈

[注記] 注記

CRM114TRE 正規表現ライブラリーを使うファジーなフィルターを書く言語インフラを提供します。そのよくある応用はスパムメールのフィルターですが、ログアナライザーとしても使えます。

9.2.3. シェルの活動を綺麗に記録

単に script(1) を使ってシェル活動を記録すると (「シェル活動の記録」参照)、コントロール文字の入ったファイルが生成されます。このような事は次のようにして col(1) を使うことで避けられます。

$ script
Script started, file is typescript

何なりとします … そして script から脱出するために Ctrl-D を押します。

$ col -bx <typescript >cleanedfile
$ vim cleanedfile

(例えば、initramfs 中のブートプロセスの途中のように) script が無い場合には、その代わりに次のようにすれば良いです。

$ sh -i 2>&1 | tee typescript
[ティップ] ティップ

gnome-terminal のような一部の x-terminal-emulator は記録できます。スクロールバック用バッファーを拡大するのが良いかもしれません。

[ティップ] ティップ

screen(1) を"^A H" と一緒に使っても (「screen コマンドのキーバインディング」参照) コンソールの記録が録れます。

[ティップ] ティップ

emacs(1) を"M-x shell" か "M-x eshell" か "M-x term" と一緒に使ってもコンソールの記録が録れます。後で "C-x C-w" とするとバッファーをファイルに書き出せます。

9.2.4. テキストデーターのカスタム化表示

more(1)less(1) 等のページャーツール (「ページャー」参照) や、ハイライトやフォーマット用のカスタムツール (「プレーンテキストデーターをハイライトとフォーマット」参照) はテキストデーターを綺麗に表示できますが、汎用エディター (「テキストエディター」参照) が最も汎用性がありカスタム化が可能です。

[ティップ] ティップ

vim(1) やそのページャーモードのエリアス view(1) では、":set hls" とするとハイライトサーチが可能になります。

9.2.5. 時間と日付のカスタム化表示

"ls -l" コマンドによる時間と日付のデフォールトの表示形式はロケール (値は「タイムスタンプ」を参照) に依存します。"$LANG" 変数が最初に参照され、それを "$LC_TIME" 変数によりオーバーライドする事ができます。

実際の各ロケールでのデフォールトの表示形式は使われた標準 C ライブラリー (libc6 パッケージ) のバージョンに依存します。つまり Debian の異なるリリースは異なるデフォールトです。

ロケール以上にこの時間や日付の表示フォーマットをカスタム化したいと真摯に望むなら、"--time-style" 引数か "$TIME_STYLE" 値を使って時間スタイル値を設定するべきです (ls(1)date(1) と "info coreutils 'ls invocation'" を参照下さい)。

表9.4 lenny での "ls -l" コマンドによる時間と日付の表示例

時間スタイル値 ロケール 時間と日付の表示
iso any 01-19 00:15
long-iso any 2009-01-19 00:15
full-iso any 2009-01-19 00:15:16.000000000 +0900
locale C Jan 19 00:15
locale en_US.UTF-8 2009-01-19 00:15
locale es_ES.UTF-8 ene 19 00:15
+%d.%m.%y %H:%M any 19.01.09 00:15
+%d.%b.%y %H:%M C または en_US.UTF-8 19.Jan.09 00:15
+%d.%b.%y %H:%M es_ES.UTF-8 19.ene.09 00:15

[ティップ] ティップ

例えば "alias ls='ls --time-style=+%d.%m.%y\ %H:%M'" とするコマンドエリアスを使うことでコマンドライン上に長いオプションを入力しなくてよくなります (「コマンドエリアス」を参照下さい)。

[ティップ] ティップ

このような iso フォーマットは ISO 8601 に準拠しています。

9.2.6. 着色化されたシェル出力

殆どの現代的なターミナルへのシェル出力は ANSI エスケープコードを使って着色化できます ("/usr/share/doc/xterm/ctlseqs.txt.gz" を参照)。

例えば、次を試してみて下さい:

$ RED=$(printf "\x1b[31m")
$ NORMAL=$(printf "\x1b[0m")
$ REVERSE=$(printf "\x1b[7m")
$ echo "${RED}RED-TEXT${NORMAL} ${REVERSE}REVERSE-TEXT${NORMAL}"

9.2.7. 着色化されたコマンド

着色化されたコマンドは対話環境で出力を検査するのに便利です。私は、私の "~/.bashrc" に次を含めています。

if [ "$TERM" != "dumb" ]; then
    eval "`dircolors -b`"
    alias ls='ls --color=always'
    alias ll='ls --color=always -l'
    alias la='ls --color=always -A'
    alias less='less -R'
    alias ls='ls --color=always'
    alias grep='grep --color=always'
    alias egrep='egrep --color=always'
    alias fgrep='fgrep --color=always'
    alias zgrep='zgrep --color=always'
else
    alias ll='ls -l'
    alias la='ls -A'
fi

エリアスを使うことで色効果を対話コマンド使用時に限定します。こうすると less(1) 等のページャープログラムの下でも色を見られるので、環境変数 "export GREP_OPTIONS='--color=auto'" をエキスポートするより都合が良いです。他のプログラムにパイプする際に色を使いたくないなら、先ほどの "~/.bashrc" 例中で代わりに "--color=auto" とします。

[ティップ] ティップ

このような着色するエリアスは、対話環境でシェルを "TERM=dumb bash" として起動することで無効にできます。

9.2.8. 複雑な反復のためにエディターでの活動を記録

複雑な反復のためにエディターでの活動を記録できます。

Vim の場合以下のようにします。

  • "qa": 名前付きレジスタ "a" にタイプした文字の記録を開始。

  • … エディターでの活動

  • "q": タイプした文字の記録を終了。

  • "@a": レジスター "a" の内容を実行。

Emacs の場合は以下のようにします。

  • "C-x (": キーボードマクロの定義開始。

  • … エディターでの活動

  • "C-x )": キーボードマクロの定義終了。

  • "C-x e": キーボードマクロの実行。

9.2.9. X アプリケーションの画像イメージの記録

xterm の表示を含めた、X アプリケーションの画像イメージを記録するにはいくつか方法があります。

表9.5 画像の操作ツールのリスト

パッケージ ポプコン サイズ コマンド
xbase-clients * I:43 59 xwd(1)
gimp * V:13, I:46 13042 GUI メニュー
imagemagick * V:23, I:46 207 import(1)
scrot * V:0.3, I:1.4 80 scrot(1)

9.2.10. 設定ファイルの変更記録

DVCS システムを使って設定ファイルの変更を記録する専用ツールがあります。

表9.6 VCS 中に設定の履歴を記録するパッケージのリスト

パッケージ ポプコン サイズ 説明
etckeeper * V:1.4, I:1.9 240 Git (デフォールト) か MercurialBazaar を使って設定ファイルとそのメタデーターを保存 (新規)
changetrack * V:0.07, I:0.09 148 RCS を使って設定ファイルを保存 (旧式)

git(1) which put entire "/etc" 全てを VCS のコントロール下に置くように、git(1) とともに etckeeper パッケージを使うことをお薦めします。そのインストール案内とチュートリアルは "/usr/share/doc/etckeeper/README.gz" にあります。

本質的に "sudo etckeeper init" を実行すると、"/etc" に関する git レポジトリーが、徹底的な手順を踏む特別のフックスクリプト付きでちょうど「設定履歴記録のための Git」と同様に初期化されます。

あなたが設定を変える毎に、普通に git(1) を使って記録できます。パッケージ管理コマンドを使うと、変更に関して上手に毎回自動記録もします。

[ティップ] ティップ

"/etc" の変更履歴を閲覧するには、"sudo GIT_DIR=/etc/.git gitk" と実行すると、新規インストールされたパッケージや削除されたパッケージやパッケージのバージョンの変化が一目瞭然です。

9.3. データー保存のティップ

Linux のlive CDs とかレスキューモードで debian-installer CDs であなたのシステムをブートすることでブートデバイス上のデーターストレージの再設定が簡単にできるようになります。「バイナリーデーター」も参照下さい。

9.3.1. ディスク空間の利用状況

ディスク空間使用状況は coreutils パッケージが提供するプログラムで評価できます:

  • mount(8) はマウントされたファイルシステム(ディスク)すべてを報告します。

  • df(8) はファイルシステムのディスク空間使用状況を報告します。

  • du(8) はディレクトリーツリーのディスク空間使用状況を報告します。

[ティップ] ティップ

du(8) の出力を xdu(1x) に "du -k . |xdu" や "sudo du -k -x / |xdu" 等として注ぎ込むとそのグラフィカルでインタラクティブな表現が作成できます。

9.3.2. ディスクパーティション設定

ディスクのパーティションの設定に関して、fdisk(8) は標準と考えられてきていますが、parted(8) も注目に値します。"ディスクパーティションデーター" や "パーティションテーブル" や "パーティションマップ" や "ディスクラベル" は全て同意語です。

殆どの PC では、ディスクのパーティションデーターが最初のセクターつまり LBA セクター 0 (512バイト) に保持される、古典的なマスターブートレコード (MBR) 方式が使われています。

[注記] 注記

新規の Intel ベースの Mac のような拡張ファームウェアインターフェイス (EFI) 付きの一部 PC では、ディスクパーティションデーターをセクターの最初以外に保持する GUID Partition Table (GPT) 方式が使われています。

fdisk(8) はディスクパーティションツールの標準でしたが、parted(8) がそれを置き換えつつあります。

表9.7 ディスクパーティション管理パッケージのリスト

パッケージ ポプコン サイズ GPT 説明
util-linux * V:90, I:99 1700 非サポート fdisk(8)cfdisk(8) を含む雑多なシステムユーティリティー
parted * V:1.2, I:10 240 サポート GNU Parted ディスクパーティションとリサイズのプログラム
gparted * V:2, I:20 4945 サポート libparted ベースの GNOME パーティションエディター
qtparted * V:0.03, I:0.4 NOT_FOUND サポート libparted ベースの KDE パーティションエディター
gptsync * V:0.01, I:0.2 72 サポート 古典的 MBR パーティションテーブルを GPT パーティションテーブルと同期
kpartx * V:1.0, I:1.9 132 サポート パーティション用のデバイスマッピングを作成するプログラム

[注意] 注意

parted(8) はファイルシステムを生成やリサイズも出きるということですが、そのようなことは mkfs(8) (mkfs.msdos(8)mkfs.ext2(8)mkfs.ext3(8) と…) とか resize2fs(8) 等の最もよくメンテされている専用ツールを使って行う方がより安全です。

[注記] 注記

GPTMBR 間で切り替えるには、ディスクの最初数ブロックの内容を直接消去し (「ファイル内容の消去」参照)、"parted /dev/sdx mklabel gpt" か "parted /dev/sdx mklabel msdos" を使ってそれを設定する必要があります。ここで "msdos" がMBR のために使われていることを覚えておきます。

9.3.3. UUID を使ってパーティションをアクセス

あなたのパーティションの再設定やリムーバブルストレージメディアの起動順序はパーティションの名前を変えることになるかもしれませんが、それに首尾一貫してアクセスできます。もしディスクが複数ありあなたの BIOS がそれに首尾一貫したデバイス名をつけない時にも、これは役に立ちます。

  • "-U" オプションを使って mount(8) を実行すると "/dev/sda3" のようなファイル名を使うのではなく UUID を使ってブロックデバイスをマウントできます。

  • "/etc/fstab" (fstab(5) 参照) は UUID を使えます。

  • ブートローダー (「2段目: ブートローダー」) もまた UUID を使えます。

[ティップ] ティップ

ブロックスペシャルデバイスの UUIDblkid(8) を使って見極められます。

[ティップ] ティップ

リムーバブルストレージメディア等のデバイス名は、必要なら udev rules を使って静的になります。「udev システム」を参照下さい。

9.3.4. ファイルシステム設定

ext3 ファイルシステム用に e2fsprogs パッケージは次を提供します。

  • 新規の ext3 ファイルシステムを作成するための mkfs.ext3(8)

  • 既存の ext3 ファイルシステムをチェックと修理するための fsck.ext3(8)

  • ext3 ファイルシステムのスーパーブロックを設定するための tune2fs(8)

mkfs(8)fsck(8) コマンドは各種ファイルシステム依存プログラム (mkfs.fstypefsck.fstype) のフロントエンドとして e2fsprogs により提供されています。ext3 ファイルシステム用は、mkfs.ext3(8)fsck.ext3(8) で、それぞれ mke2fs(8)e2fsck(8) にハードリンクされています。

類似コマンドが Linux によってサポートされる各ファイルシステム用にあります。

表9.8 ファイルシステム管理用パッケージのリスト

パッケージ ポプコン サイズ 説明
e2fsprogs * V:60, I:99 2372 ext2/ext3/ext4 ファイルシステムのためのユーティリティー
reiserfsprogs * V:1.4, I:5 1200 Reiserfs ファイルシステムのためのユーティリティー
dosfstools * V:4, I:46 162 FAT ファイルシステムのためのユーティリティー (Microsoft: MS-DOS, Windows)
xfsprogs * V:2, I:9 3135 XFS ファイルシステムのためのユーティリティー (SGI: IRIX)
ntfsprogs * V:3, I:28 676 NTFS ファイルシステムのためのユーティリティー (Microsoft: Windows NT, …)
jfsutils * V:0.4, I:2 1888 JFS ファイルシステムのためのユーティリティー (IBM: AIX, OS/2)
reiser4progs * V:0.08, I:0.6 1296 Reiser4 ファイルシステムのためのユーティリティー
hfsprogs * V:0.10, I:0.9 280 HFSHFS Plus ファイルシステムのためのユーティリティー (Apple: Mac OS)
btrfs-tools * V:0.6, I:1.4 2128 btrfs ファイルシステムのためのユーティリティー
zerofree * V:0.12, I:1.0 56 ext2/3 ファイルシステムのフリーブロックをゼロにセットするプログラム

[ティップ] ティップ

Ext3 ファイルシステムは Linux システムのデフォールトのファイルシステムなので、特段使わない理由が無い限りそれを使うことを強くお薦めします。Linux カーネル 2.6.30 (Debian squeeze) 以降、ext4 ファイルシステムが使えるようになり、Linux システムのデフォールトのファイルシステムとなると期待されています。btrfs ファイルシステムは、Linux システムの ext4 ファイルシステムの次のデフォールトのファイルシステムとなると期待されています。

[警告] 警告

まだ新しいので ext4 を使うと色々制約があるかもしれません。例えば、ext4 パーティションのサイズ変更をするには Linux カーネルが 2.6.30 以降でなければいけません。

[ティップ] ティップ

一部のツールはファイルシステムへのアクセスを Linux カーネルのサポート無しでも可能にします (「ディスクをマウントせずに操作」参照)。

9.3.5. ファイルシステムの生成と整合性チェック

mkfs(8) コマンドは Linux システム上でファイルシステムを生成します。fsck(8) コマンドは Linux システム上でファイルシステムの整合性チェックと修理機能を提供します。

[注意] 注意

一般的に fsckマウントされているファイルシステムに行うことは安全ではありません。

[ティップ] ティップ

ブートスクリプトから実行される fsck(8) コマンドの結果を "/var/log/fsck/" 中のファイルからチェックします。

[ティップ] ティップ

"shutdown -F -r now" を使うことでリブートの際に強制的にルートファイルシステムを含む全てのファイルシステムに関して fsck(8) コマンドを安全に実行します。詳細は shutdown(8) マンページを参照下さい。

9.3.6. マウントオプションによるファイルシステムの最適化

ファイルシステムのパーフォーマンスや性格はそれに使われるマウントオプションによって最適化できます (fstab(5)mount(8) 参照)。

  • "defaults" オプションはデフォールトのオプションが次の意味です: "rw,suid,dev,exec,auto,nouser,async"。(一般的)

  • "noatime" もしくは "relatime" オプションは読出しアクセスを高速化するのに非常に効果的です。(一般的)

  • "user" オプションは通常ユーザーがファイルシステムをマウント出来るようにします。このオプションは "noexec,nosuid,nodev" オプションの組み合わせの意味です。(一般的、CD や floppy に使用)

  • "noexec,nodev,nosuid" オプションの組み合わせはセキュリティーの強化に使われます。(一般的)

  • "noauto" オプションは明示的操作のみにマウントを制限します。(一般的)

  • ext3fs への "data=journal" オプションは、書込み速度を犠牲ににしますが、停電時のデーター整合性を強化します。

[ティップ] ティップ

ルートファイルシステムに非デフォールトのジャーナルモードを設定するには、例えば "rootflags=data=journal" 等の、カーネルブートパラメーター (「2段目: ブートローダー」参照) を与える必要があります。lenny の場合、デフォールトのジャーナルモードは "rootflags=data=ordered" です。squeeze の場合、デフォールトのジャーナルモードは "rootflags=data=writeback" です。

9.3.7. スーパーブロックによるファイルシステムの最適化

tune2fs(8) コマンドを用いてファイルシステムのスーパーブロックによってファイルシステムを最適化できます。

  • "sudo tune2fs -l /dev/hda1" を実行するとそのファイルシステムスーパーブロックを表示します。

  • "sudo tune2fs -c 50 /dev/hda1" を実行するとファイルシステムのチェック (ブートアップ時の fsck 実行) の頻度を50回のブート毎に変更します。

  • "sudo tune2fs -j /dev/hda1" の実行は ext2 から ext3 へとファイルシステム変換してファイルシステムにジャーナリングの機能を追加します。(アンマウントしたファイルシステムに対して実行します。)

  • "sudo tune2fs -O extents,uninit_bg,dir_index /dev/hda1 && fsck -pf /dev/hda1" の実行はファイルシステムを ext3 から ext4 に変換します。(アンマウントしたファイルシステムに対して実行します。)

[警告] 警告

ext4 ファイルシステムへのブートデバイスのファイルシステム変換は GRUB ブートローダーが ext4 ファイルシステムをよくサポートしインストールされた Linux カーネルバージョンが 2.6.30 以降となるまではしないでおくべきです。

[ティップ] ティップ

tune2fs(8) は、その名前にもかかわらず、ext2 ファイルシステムに機能するだけでなく ext3 とか ext4 ファイルシステムに関しても機能します。

9.3.8. ハードディスクの最適化

[警告] 警告

ハードディスクの設定はデーターの整合性にとって非常に危険な事なので、その設定をさわる前にお使いのハードウエアーをチェックし hdparam(8) のマンページをチェックします。

例えば "/dev/hda" に対して "hdparm -tT /dev/hda" とするとハードディスクのアクセス速度をテストできます。(E)IDE を使って接続された一部のハードディスクでは、"(E)IDE 32ビット I/O サポート" を有効にし "using_dma フラグ" を有効にし "interrupt-unmask フラグ" を設定し "複数16セクター I/O" を設定するように、"hdparm -q -c3 -d1 -u1 -m16 /dev/hda" とすると高速化できます (危険です!)。

例えば "/dev/sda" に対して "hdparm -W /dev/sda" とするとハードディスクの書込みキャッシュ機能をテストできます。"hdparm -W 0 /dev/sda" とするとハードディスクの書込みキャッシュ機能を無効にできます。

不良プレスの CDROM を現代的な高速 CD-ROM ドライブで読むには、"setcd -x 2" としてそれを減速して使えば読めるかもしれません。

9.3.9. SMART を用いたハードディスクの破壊の予測

smartd(8) デーモンを使うと SMART に文句を言うハードディスクの監視と記録ができます。

  1. BIOSSMART 機能を有効にします。

  2. smartmontools パッケージをインストールします。

  3. df(1) を使ってリストすることであなたのハードディスクを識別します。

    • 監視対象のハードディスクを "/dev/hda" と仮定します。

  4. SMART 機能が実際に有効となっているかを "smartctl -a /dev/hda" のアウトプットを使ってチェックします。

    • もし有効でない場合には、"smartctl -s on -a /dev/hda" として有効にします。

  5. 次のようにして smartd(8) デーモンを実行します。

    • "/etc/default/smartmontools" ファイル中の "start_smartd=yes" をアンコメントします。

    • "sudo /etc/init.d/smartmontools restart" として smartd(8) デーモンを再実行します。

[ティップ] ティップ

smartd(8) デーモンは、警告の通知の仕方を含めて /etc/smartd.conf ファイルを用いてカスタム化できます。

9.3.10. LVM を使う使用可能なストレージ空間の拡張

インストール時に論理ボリュームマネージャー (LVM) (Linux 機能) 上に作られたパーティションは、大掛かりなシステムの再設定無しに複数のストレージデバイスにまたがる LVM 上のエクステントを継ぎ足したりその上のエクステントを切り捨てることで簡単にサイズ変更が出きます。

[注意] 注意

現行の LVM システムを採用すると、ハードディスクの書込みキャッシュ機能を無効にしてパーフォーマンスを犠牲にしないと、ext3fs 等のジャーナルファイルシステムによって提供されるファイルシステムの破壊に対する保証を劣化させるかもしれません。

9.3.11. 他パーティションをマウントする使用可能なストレージ空間の拡張

空のパーティションがあれば (例えば "/dev/sdx")、それを mkfs.ext3(1) を使ってフォーマットし、それをあなたが空間をより必要とするディレクトリーに mount(8) することができます。(元来あったデーター内容はコピーする必要があります。)

$ sudo mv work-dir old-dir
$ sudo mkfs.ext3 /dev/sdx
$ sudo mount -t ext3 /dev/sdx work-dir
$ sudo cp -a old-dir/* work-dir
$ sudo rm -rf old-dir
[ティップ] ティップ

上記の代わりに、空のディスクイメージファイル (「空のディスクイメージ作成」参照) をループデバイスとしてマウントする (「ディスクイメージファイルをマウント」参照) 事もできます。実際のディスク使用は実際にデーターを溜め込むとともに成長します。

9.3.12. 他ディレクトリをバインドマウントする使用可能なストレージ空間の拡張

使える空間がある他のパーティション中に空のディレクトリーがあれば (例えば "/path/to/emp-dir")、そのディレクトリーを --bind" オプションを使って、空間を必要としているディレクトリー (例えば "work-dir")にマウントすることができます。

$ sudo mount --bind /path/to/emp-dir work-dir

9.3.13. シムリンクを使う使用可能なストレージ空間の拡張

[ティップ] ティップ

本方法はお薦めできません。できれば 「他ディレクトリをバインドマウントする使用可能なストレージ空間の拡張」 で代用しましょう。

使える空間がある他のパーティション中に空のディレクトリーがあれば (例えば "/path/to/emp-dir")、そのディレクトリーへ ln(8) を使ってシムリンクを作成することができます。

$ sudo mv work-dir old-dir
$ sudo mkdir -p /path/to/emp-dir
$ sudo ln -sf /path/to/emp-dir work-dir
$ sudo cp -a old-dir/* work-dir
$ sudo rm -rf old-dir
[警告] 警告

"ディレクトリーへのシムリンク" を "/opt" のようなシステムが管理するディレクトリーに使用してはいけません。システムがアップグレードされる際にそのようなシムリンクは上書きされるかもしれません。

[注意] 注意

一部のプログラムは "ディレクトリーへのシムリンク" ではうまく機能しないかもしれません。

9.3.14. aufs を使う使用可能なストレージ空間の拡張

他のパーティション中に使える空間があれば (例えば "/path/to/")、その中にディレクトリーを作り aufs を使って空間を必要とするディレクトリー上に積み重ねることができます。

$ sudo mv work-dir old-dir
$ sudo mkdir work-dir
$ sudo mkdir -p /path/to/emp-dir
$ sudo mount -t aufs -o br:/path/to/emp-dir:old-dir none work-dir
[注意] 注意

aufs を長期間のデーターのストレージに使うのは、まだ開発中でそのデザイン変更が問題を引き起こすかもしれないので感心しません。

[ティップ] ティップ

aufs を使うには、そのユーティリティーパッケージ aufs-toolsaufs-modules-2.6-amd64 等の aufs のためのカーネルモジュールパッケージをインストールする必要があります。

[ティップ] ティップ

aufs は多くの現代的ライブ CD プロジェクトによって書込み可能なルートファイルシステムを提供するのに使われています。

9.4. データー暗号化ティップ

あなたの PC への物理的アクセスがあると、誰でも簡単に root 特権を獲得できあなたの PC の全てのファイルにアクセスできます (「root パスワードのセキュリティー確保」参照)。これが意味するところは、あなたの PC が盗まれた場合にログインのパスワードではあなたのプライベートでセンシティブなデーターを守れないと言うことです。それを達成するにはデーターの暗号化技術を適用しなければいけません。GNU プライバシーガード (「データーセキュリティーのインフラ」参照) はファイルを暗号化できますが、少々手間がかかります。

dm-crypteCryptfs は最小限のユーザー努力でできる自動的なデーターの暗号化を Linux のカーネルモジュールその物を使って提供します。

表9.9 データー暗号化ユーティリティーのリスト

パッケージ ポプコン サイズ 説明
cryptsetup * V:4, I:6 740 暗号化されたブロックデバイス (dm-crypt / LUKS) のためのユーティリティー
cryptmount * V:0.3, I:0.5 323 ノーマルユーザーによるマウント/アンマウントに焦点を当てた暗号化されたブロックデバイス (dm-crypt / LUKS) のためのユーティリティー
ecryptfs-utils * V:0.3, I:0.4 372 暗号化されたスタックドファイルシステム (eCryptfs) のためのユーティリティー

Dm-cryptdevice-mapper を使う暗号学的ファイルシステムです。Device-mapper は1つのブロックデバイスをもう1つのブロックデバイスにマップします。

eCryptfs はスタックドファイルシステムを使うもう1つのファイルシステムです。スタックドファイルシステムはマウントされたファイルシステム上の既存のディレクトリーの上に重ね合わせます。

[注意] 注意

データーの暗号化には CPU 時間等の負担がかかります。その利益と負担の両天秤をします。

[注記] 注記

debian-installer (lenny 以降) を使うと、dm-crypt/LUKS と initramfs を使って、全 Debian システムを暗号化したディスク上にインストールできます。

[ティップ] ティップ

ユーザー空間での暗号化ユーティリティーに関しては「データーセキュリティーのインフラ」を参照下さい: GNU プライバシーガード

9.4.1. dm-crypt/LUKS を使ったリムーバブルディスクの暗号化

例えば "/dev/sdx" にある USB メモリースティックのようなリムーバブルストレージデバイスの内容を dm-crypt/LUKS を使って暗号化できます。それを単に次のようにフォーマットします。

# badblocks -c 10240 -s -w -t random -v /dev/sdx
# shred -v -n 1 /dev/sdx
# fdisk /dev/sdx
... "n" "p" "1" "return" "return" "w"
# cryptsetup luksFormat /dev/sdx1
...
# cryptsetup luksOpen /dev/sdx1 sdx1
...
# ls -l /dev/mapper/
total 0
crw-rw---- 1 root root  10, 60 2008-10-04 18:44 control
brw-rw---- 1 root disk 254,  0 2008-10-04 23:55 sdx1
# mkfs.vfat /dev/mapper/sdx1
...
# cryptsetup luksClose sdx1

こうすると暗号化されたディスクは、現代的な GNOME のようなデスクトップ環境では gnome-mount(1) を使ってパスワードを聞く以外は通常のディスクと同様に "/media/<disk_label>" にマウントできます (「リムーバブルストレージデバイス」参照)。全て書込まれるデーターが暗号化されている点が相違点です。上記と違い、例えば "mkfs.ext3 /dev/sdx1" を使って ext3 等の異なったフォーマットで記録メディアをフォーマットしても良いです。

[注記] 注記

もしデーターのセキュリティーが本当に偏執狂的に気になるなら、上記例で複数回の重ね書きをする必要があるかもしれません。でもこの操作は非常に時間がかかります。

9.4.2. dm-crypt を使って swap パーティションを暗号化

オリジナルの "/etc/fstab" が次の内容と仮定します。

/dev/sda7 swap sw 0 0

dm-crypt を使って swap パーティションの暗号化を次のようにして有効にします

# aptitude install cryptsetup
# swapoff -a
# echo "cswap /dev/sda7 /dev/urandom swap" >> /etc/crypttab
# perl -i -p -e "s/\/dev\/sda7/\/dev\/mapper\/cswap/" /etc/fstab
# /etc/init.d/cryptdisks restart
 ...
# swapon -a

9.4.3. eCryptfs を使って自動的にファイルを暗号化

eCryptfsecryptfs-utils パッケージを使うことで、"~/Private/" の下に書かれるファイルを自動的に暗号化できます。

  • ecryptfs-setup-private(1) を実行してプロンプトに従って "~/Private/" を設定します。

  • ecryptfs-mount-private(1) を実行して "~/Private/" を有効にします。

  • センシティブなデーターファイルを "~/Private/" に移動し、必要に応じてシムリンクを作成します。

    • 候補: "~/.fetchmailrc"、"~/.ssh/identity"、"~/.ssh/id_rsa"、"~/.ssh/id_dsa"、"go-rwx" を持つ他のファイル

  • センシティブなデーターディレクトリーを "~/Private/" 中のサブディレクトリーに移動し、必要に応じてシムリンクを作成します。

    • 候補: "~/.gnupg"、"go-rwx" を持つ他のディレクトリー

  • デスクトップ操作がしやすいように "~/Desktop/Private/" から "~/Private/" までのシムリンクを作成します。

  • ecryptfs-umount-private(1) を実行して "~/Private/" を無効にします。

  • 暗号化されたデーターが必要な際に "ecryptfs-mount-private" を実行して "~/Private/" を有効にします。

[ティップ] ティップ

eCryptfs はセンシティブなファイルのみを選択的に暗号化するので、そのシステムへの負担は dm-crypt を全ルートとか "/home" デバイスとかに使うよりはるかに少ないです。eCryptfs は特段のディスク上のストレージの割り当て努力の必要はありませんが、全てのファイルシステムメタデーターを秘匿することはできません。

9.4.4. eCryptfs を自動的にマウント

もしあなたのログインパスワードを暗号化キーを包むのに使っている場合には、"/etc/pam.d/common-auth" 中の "pam_permit.so" のすぐ前に次に記す行があるようにすることで PAM (プラグ可能な認証モジュール: Pluggable Authentication Modules) を使って eCryptfs を自動的にマウントできます。

"/etc/pam.d/common-auth" の "pam_permit.so" の直前に次の行を挿入します。

auth required pam_ecryptfs.so unwrap

"/etc/pam.d/common-session" の最後に次の行を挿入します。

session optional pam_ecryptfs.so unwrap

"/etc/pam.d/common-password" の最初の有効行に次の行を挿入します。

password required pam_ecryptfs.so

これは非常に便利です。

[警告] 警告

PAM の設定エラーをすると、あなた自身のシステムからあなたを締め出すかもしれません。4章認証を参照下さい。

[注意] 注意

もしあなたのログインパスワードを暗号化キーを包むのに使っている場合には、あなたの暗号化されたデーターのセキュリティーはあなたのユーザーログインパスワードと同程度です (「良好なパスワード」参照)。注意深く強力なパスワードを設定していないと、あなたのラップトップを誰かが盗んだ後にパスワード破りソフトを実行すれば、あなたのデーターは危険にさらされます (「root パスワードのセキュリティー確保」参照)。

9.5. プログラム活動の監視と制御と起動

プログラム活動は専用ツールを用いて監視と制御できます。

表9.10 プログラム活動の監視と制御のツールのリスト

パッケージ ポプコン サイズ 説明
coreutils * V:90, I:99 13477 nice(1): スケジューリングの優先順位の変更してプログラムを実行
bsdutils * V:80, I:99 200 renice(1): 実行中プロセスのスケジューリングの優先順位を変更
procps * V:85, I:99 575 "/proc" ファイルシステムのユーティリティー: ps(1)top(1)kill(1)watch(1)
psmisc * V:50, I:92 688 "/proc" ファイルシステムのユーティリティー: killall(1)fuser(1)pstree(1)pstree(1)
time * V:7, I:86 152 time(1): 時間に関するシステムリソース使用状況を報告するためにプログラムを実行
sysstat * V:6, I:9 1225 sar(1)iostat(1)mpstat(1)、…: Linux 用のシステムパーフォーマンスツール
isag * V:0.05, I:0.8 126 sysstat の対話型システムアクティビティーグラフ化ソフト
lsof * V:16, I:91 444 lsof(8): "-p" を使い実行中のプロセスが開いているファイルをリスト
strace * V:4, I:29 404 strace(1): システムコールやシグナルを追跡
ltrace * V:0.3, I:2 188 ltrace(1): ライブラリーコールを追跡
xtrace * V:0.02, I:0.14 400 xtrace(1): X11 のクライアントとサーバーの間の通信を追跡
powertop * V:0.8, I:16 380 powertop(1): Intel を使ったラップトップのシステムの電力情報
cron * V:90, I:99 284 cron(8) デーモンからバックグランドでスケジュール通りプロセスを実行
anacron * V:43, I:48 120 1日24時間動作でないシステム用の cron 類似のコマンドスケジューラー
at * V:51, I:86 140 at(1)batch(1) コマンド: 特定の時間や特定のロードレベル以下でジョブを実行

[ティップ] ティップ

procps パッケージはプログラム活動の監視と制御と起動の基本中の基本を提供します。このすべてを習得するべきです。

9.5.1. プロセスの時間計測

コマンドが起動したプロセスにより使われた時間を表示します。

# time some_command >/dev/null
real    0m0.035s       # 壁時計の時間 (実経過時間)
user    0m0.000s       # ユーザーモードの時間
sys     0m0.020s       # カーネルモードの時間

9.5.2. スケジューリングのプライオリティー

ナイス値はプロセスのスケジューリングのプライオリティーを制御するのに使われます。

表9.11 スケジューリングのプライオリティーのためのナイス値のリスト

ナイス値 スケジューリングのプライオリティー
19 最低優先順位プロセス (ナイス)
0 ユーザーにとっての非常に高優先順位プロセス
-20 rootにとっての非常に高優先順位プロセス (非ナイス)

# nice  -19 top                                      # 非常にナイス
# nice --20 wodim -v -eject speed=2 dev=0,0 disk.img # 非常に高速

極端なナイス値はシステムに害を与えるかもしれません。本コマンドは注意深く使用下さい、

9.5.3. ps コマンド

Debian 上の ps(1) コマンドは BSD と SystemV 機能の両方をサポートしプロセスの活動を静的に特定するのに有用です。

表9.12 ps コマンドのスタイルのリスト

スタイル 典型的コマンド 特徴
BSD ps aux %CPU %MEM を表示
System V ps -efH PPID を表示

ゾンビ (動作していない) 子プロセスに関して、"PPID" フィールドで識別される親プロセス ID を使ってプロセスを停止できます。

pstree(1) コマンドはプロセスの木 (ツリー) を表示します。

9.5.4. top コマンド

Debian 上の top(1) は機能が豊で、どのプロセスがおかしな動きをしているかを動的に識別することに役立ちます。

表9.13 top のコマンドのリスト

コマンドキー レスポンスの説明
h? ヘルプの表示
f ディスプレーフィールドのセットとリセット
o 表示フィールドの順番変更
F ソートキーフィールドの設定
k プロセスを停止
r プロセスのナイス値を変更
q top コマンドを終了

9.5.5. プロセスによって開かれているファイルのリスト

プロセス ID (PID)、例えば1を使うプロセスによって開かれている全ファイルは次のようにしてリストできます。

$ sudo lsof -p 1

PID=1 は通常 init プログラムです。

9.5.6. プログラム活動の追跡

プラグラムの活動状況は、システムコールとシグナルは strace(1) で、ライブラリーコールは ltrace(1) で、X11 のクライアントとサーバーの通信は xtrace(1) でプラグラムの活動状況を追跡できます。

ls コマンドのシステムコールを次のようにして追跡できます。

$ sudo strace ls

9.5.7. ファイルやソケットを使っているプロセスの識別

例えば "/var/log/mail.log" 等のファイルを使っているプロセスは fuser(1) によって次のようにして識別できます。

$ sudo fuser -v /var/log/mail.log
                     USER        PID ACCESS COMMAND
/var/log/mail.log:   root       2946 F.... rsyslogd

"/var/log/mail.log" ファイルが rsyslogd(8) コマンドによって書込みのために開かれている事が分かります。

例えば "smtp/tcp" 等のソケットを使っているプロセスは fuser(1) によって次のようにして識別できます。

$ sudo fuser -v smtp/tcp
                     USER        PID ACCESS COMMAND
smtp/tcp:            Debian-exim   3379 F.... exim4

SMTP ポート (25) への TCP 接続を処理するためにあなたのシステムでは exim4(8) が実行されている事がこれで分かります。

9.5.8. 一定間隔でコマンドを反復実行

watch(1) はプログラムを一定間隔で反復実行しながらフルスクリーンでその出力を表示します。

$ watch w

こうすると2秒毎更新でシステムに誰がログオンしているかを表示します。

9.5.9. ファイルに関してループしながらコマンドを反復実行

例えばグロブパターン "*.ext" へのマッチ等の何らかの条件にマッチするファイルに関してループしながらコマンドを実行する方法がいくつかあります。

for x in *.ext; do if [ -f "$x"]; then command "$x" ; fi; done
  • find(1)xargs(1) の組み合わせ:

find . -type f -maxdepth 1 -name '*.ext' -print0 | xargs -0 -n 1 command
  • コマンド付きの "-exec" オプションを使って find(1):

find . -type f -maxdepth 1 -name '*.ext' -exec command '{}' \;
  • 短いシェルスクリプト付きの "-exec" オプションを使って find(1):

find . -type f -maxdepth 1 -name '*.ext' -exec sh -c "command '{}' && echo 'successful'" \;

上記の例はスペースを含む等の変なファイル名でも適正に処理できるように書かれています。find(1) に関する上級の使用法の詳細は「ファイル選択の慣用句」を参照下さい。

9.5.10. GUI からプログラムをスタート

グラフィカルユーザーインターフェース (GUI) からプロセスをスタートできるように設定できます。

GNOME デスクトップ環境下では、ローンチャアイコンを ダブルクリックしたり、ファイルアイコンをローンチャアイコンへドラッグアンドドロップしたり、ファイルアイコンを右クリックで "Open with …" メニューとしたりしてプログラムを適正な引数とともにスタートできます。KDE でも同様の事ができます。

次は gnome-terminal(1) 中で mc(1) をスタートさせるローンチャアイコンを作る GNOME 下での例です。

実行可能プログラム "mc-term" を次のように作成。

# cat >/usr/local/bin/mc-term <<EOF
#!/bin/sh
gnome-terminal -e "mc \$1"
EOF
# chmod 755 /usr/local/bin/mc-term

ディレクトリーを次のように作成します。

  1. デスクトップを右クリックして "Create Launcher …" を選択

  2. "Type" を"Application" と設定します。

  3. "Name" を"mc" と設定します。

  4. "Command" を"mc-term %f" と設定します。

  5. "OK" をクリックします。

open-with との関連付けを作成します。

  1. フォルダを右クリックして "Open with Other Application …" を選択します。

  2. "Use a custom command" ダイアログをクリックして開き、"mc-term %f" を入力します。

  3. "Open" をクリックします。

[ティップ] ティップ

ローンチャとは "~/Desktop" 上の ".desktop" と言う拡張子のファイルです。

9.5.11. スタートするプログラムのカスタム化

一部のプログラムは他のプログラムを自動的にスタートします。このプロセスをカスタム化する上でのチェックポイントを次に記します。

  • アプリケーション設定メニュー:

    • GNOME デスクトップ: "System" → "Preferences" → "Preferred Application"

    • KDE デスクトップ: "K" → "Control Center" → "KDE Components" → "Component Chooser"

    • Iceweasle ブラウザー: "Edit" → "Preferences" → "Applications"

    • mc(1): "/etc/mc/mc.ext"

  • "$BROWSER" や "$EDITOR" や "$VISUAL" や "$PAGER" といった環境変数 (eviron(7) 参照)

  • "editor" や "view" や "x-www-browser" や "gnome-www-browser" や "www-browser" 等のプログラムに関する update-alternatives(8) システム (「デフォールトのテキストエディターの設定」参照)

  • MIME タイプとプログラムと関係づける、"~/.mailcap" や "/etc/mailcap" ファイルの内容 (mailcap(5) 参照)

  • ファイル拡張子と MIME タイプとプログラムと関係づける、"~/.mime.types" や "/etc/mime.types" ファイルの内容 (run-mailcap(1) 参照)

[ティップ] ティップ

update-mime(8) は"/etc/mailcap.order" ファイルを使って "/etc/mailcap" ファイルを更新します (mailcap.order(5) 参照)。

[ティップ] ティップ

debianutils パッケージは、どのエディターやページャーやウェッブブラウザーを呼び出すかに関してそれぞれ賢明な判断をする sensible-browser(1)sensible-editor(1)sensible-pager(1) を提供します。これらのシェルスクリプトを読む事をお薦めします。

[ティップ] ティップ

X の下で mutt のようなコンソールアプリケーションをあなたの好むアプリケーションとして実行するには、次のようにして X アプリケーションを作成し、前記の方法であなたの好む起動されるアプリケーションとして "/usr/local/bin/mutt-term" を設定します。

# cat /usr/local/bin/mutt-term <<EOF
#!/bin/sh
gnome-terminal -e "mutt \$@"
EOF
chmod 755 /usr/local/bin/mutt-term

9.5.12. プロセスの停止

kill(1) を使ってプロセス ID を使ってプロセスを停止 (プロセスへシグナルを送信) します。

killall(1)pkill(1) プロセスコマンド名や他の属性を使ってプロセスを停止 (プロセスへシグナルを送信) します。

表9.14 kill コマンドが良く使うシグナルのリスト

シグナル値 シグナル名 機能
1 HUP デーモンの再スタートします
15 TERM 普通に停止します
9 KILL 徹底的に停止します

9.5.13. タスク1回実行のスケジュール

at(1) コマンドを次のように実行して1回だけのジョブをスケジュールします。

$ echo 'command -args'| at 3:40 monday

9.5.14. タスク定期実行のスケジュール

cron(8) コマンドを実行して定期的タスクをスケジュールします。crontab(1)crontab(5) を参照下さい。

例えば foo というノーマルユーザーとして "crontab -e" コマンドを使って "/var/spool/cron/crontabs/foo" という crontab(5) ファイルを作成することでプロセスをスケジュールして実行する事ができます。

crontab(5) ファイルの例を次に記します。

# use /bin/sh to run commands, no matter what /etc/passwd says
SHELL=/bin/sh
# mail any output to paul, no matter whose crontab this is
MAILTO=paul
# Min Hour DayOfMonth Month DayOfWeek command (Day... are OR'ed)
# run at 00:05, every day
5  0  *  * *   $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
# run at 14:15 on the first of every month -- output mailed to paul
15 14 1  * *   $HOME/bin/monthly
# run at 22:00 on weekdays(1-5), annoy Joe. % for newline, last % for cc:
0 22 *   * 1-5 mail -s "It's 10pm" joe%Joe,%%Where are your kids?%.%%
23 */2 1 2 *   echo "run 23 minutes after 0am, 2am, 4am ..., on Feb 1"
5  4 *   * sun echo "run at 04:05 every Sunday"
# run at 03:40 on the first Monday of each month
40 3 1-7 * *   [ "$(date +%a)" == "Mon" ] && command -args
[ティップ] ティップ

連続的に稼働していないシステムでは、機器のアップタイム上可能な限り指定間隔に近く定期的にコマンドをスケジュールするために anacron パッケージをインストールします。anacron(8)anacrontab(5) を参照下さい。

[ティップ] ティップ

スケジュールされたシステムメインテナンススクリプトは、そのようなスクリプトを "/etc/cron.hourly/" か "/etc/cron.daily/" か "/etc/cron.weekly/" か "/etc/cron.monthly/" 中に置くことで root アカウントからそれらを定期的に実行できます。これらのスクリプトの実行時間は "/etc/crontab" と "/etc/anacrontab" でカスタム化できます。

9.5.15. Alt-SysRq キー

システム異常に対する保険はカーネルコンパイルオプションの "マジック SysRq キー" (SAK キー) によって提供されます。現在の Debian カーネルではこれがデフォールトです。Alt-SysRq に続いて次のキーの中から1つを押すことでシステムのコントロールを救済するマジックが起きます。

表9.15 SAK コマンドキーのリスト

Alt-SysRq に続くキー アクションの説明
r X クラッシュの後でキーボードを raw (生コード発生) モードから復旧
0 エラーメッセージを減らすべくコンソールログレベルを 0 と変更
k 全ての現仮想ターミナル上の全てのプロセスを停止 (Kll)
e init(8) 以外の全てのプロセスに、SIGTERM を送信
i init(8) 以外の全てのプロセスに、SIGKILL を送信
s 全てのマウントされたファイルシステムを同期 (Sync)
u 全てのマウントされたファイルシステムを読出し専用で再マウント (アンマウント、umount)
b 同期することもアンマウントする事も無しに、システムをリブート (Reboot)

"Alt-SysRq s" と "Alt-SysRq u" と "Alt-SysRq r" の組み合わせは、非常に悪い状況からの脱出に有効です。

"/usr/share/doc/linux-doc-2.6.*/Documentation/sysrq.txt.gz" を参照下さい。

[注意] 注意

Alt-SysRq 機能があることはユーザーに root 特権機能をアクセスさせることになるのでセキュリティーリスクと考える事もできます。"/etc/rc.local" 中に "echo 0 >/proc/sys/kernel/sysrq" とか "/etc/sysctl.conf" 中に "kernel.sysrq = 0" と置くと Alt-SysRq 機能を無効にできます。

[ティップ] ティップ

SSH ターミナルなどからは、"/proc/sysrq-trigger" に書き込むことで Alt-SysRq 機能が使えます。例えば、リモートのシェルプロンプトから "echo s > /proc/sysrq-trigger; echo u > /proc/sysrq-trigger" とすると、全てのマウントされたファイルシステムを sync (同期) して umount (アンマウント) します。

9.6. システム管理ティップ

9.6.1. だれがシステム上にいる?

だれがシステム上にいるかは、次のようにしてチェックできます。

  • who(1) は、誰がログオンしているかを表示します。

  • w(1) は、誰がログオンしていて何をしているかを表示します。

  • last(1) は、最後にログインしたユーザーのリストを表示します。

  • lastb(1) は、最後にログイン失敗したユーザーのリストを表示します。

[ティップ] ティップ

"/var/run/utmp" と "/var/log/wtmp" と "/var/run/utmp" はこのようなユーザー情報を保持します。login(1)utmp(5) を参照下さい。

9.6.2. 全員への警告

wall(1) を使うと、次のようにしてシステムにログオンしている全員にメッセージを送れます。

$ echo "We are shutting down in 1 hour" | wall

9.6.3. ハードウエアーの識別

PCI 的デバイス (AGPPCI-ExpressCardBusExpressCard、等) では、 (きっと "-nn" オプションとともに使う) lspci(8) がハードウエアー識別の良いスタート点です。

この代わりに、"/proc/bus/pci/devices" の内容を読むか、"/sys/bus/pci" の下のディレクトリーツリーを閲覧することでハードウエアーの識別ができます (「procfs と sysfs」参照)。

表9.16 ハードウエアー識別ツールのリスト

パッケージ ポプコン サイズ 説明
pciutils * V:18, I:95 936 Linux PCI ユーティリティー: lspci(8)
usbutils * V:29, I:94 628 Linux USB ユーティリティー: lsusb(8)
pcmciautils * V:4, I:16 92 Linux 2.6 のための PCMCIA ユーティリティー: pccardctl(8)
scsitools * V:0.16, I:0.9 424 SCSI ハードウエアー管理のためのツール集: lsscsi(8)
pnputils * V:0.02, I:0.14 108 Plug and Play BIOS のためのユーティリティー: lspnp(8)
procinfo * V:0.3, I:2 164 "/proc" から得られるシステム情報: lsdev(8)
lshw * V:1.2, I:8 656 ハードウエアー設定に関する情報: lshw(1)
discover * V:5, I:52 120 ハードウエアー識別システム: discover(8)

9.6.4. ハードウエアー設定

GNOME や KDE のような現代的な GUI のデスクトップ環境ではほとんどのハードウエアー設定が付随する GUI 設定ツールを通じて管理できますが、それらの設定の基本的手法を知っておくのは良い事です。

表9.17 ハードウエアー設定ツールのリスト

パッケージ ポプコン サイズ 説明
hal * V:24, I:32 1516 ハードウエアーアブストラクションレイヤー: lshal(1)
console-tools * V:24, I:49 956 Linux コンソールのフォントとキーテーブルユーティリティー
x11-xserver-utils * V:36, I:54 544 X サーバーユーティリティー: xset(1)xmodmap(1)
acpid * V:53, I:93 165 Advanced Configuration and Power Interface (ACPI) によって起こるイベントの管理のためのデーモン
acpi * V:5, I:61 92 ACPI デバイス上の情報を表示するユーティリティー
apmd * V:1.5, I:14 252 Advanced Power Management (APM) によって起こるイベントの管理のためのデーモン
noflushd * V:0.03, I:0.06 248 ハードディスクをスピンダウンできるようにするデーモン
sleepd * V:0.06, I:0.08 148 非使用状況のときにラップトップをスリープさせるデーモン
hdparm * V:12, I:52 304 ハードディスクアクセスの最適化 (「ハードディスクの最適化」参照)
smartmontools * V:7, I:23 1324 S.M.A.R.T. を使ってストレージシステムを制御監視
setserial * V:1.2, I:2 116 シリアルポートの管理ツール集
memtest86+ * V:0.3, I:6 2342 メモリーハードウエアー管理のためのツール集
scsitools * V:0.16, I:0.9 424 SCSI ハードウエアー管理のためのツール集
tpconfig * V:0.2, I:0.6 220 タッチパッドデバイス設定ユーティリティー
setcd * V:0.04, I:0.2 28 コンパクトデバイスアクセス最適化
big-cursor * I:0.15 68 X のための大きなマウスカーソール

上記で、ACPIAPM より新しい電力管理システムの枠組みです。

[ティップ] ティップ

最近のシステム上の CPU フリーケンシースケーリングは acpi_cpufreq のようなカーネルモジュールで管理されています。

9.6.5. システムとハードウエアーの時間

以下はシステムとハードウエアーの時間を MM/DD hh:mm, CCYY (月/日 時:分, 年) に設定します。

# date MMDDhhmmCCYY
# hwclock --utc --systohc
# hwclock --show

Debian システムでは時間は通常地域の時間が表示されますが、ハードウエアーとシステムの時間は通常 UT (GMT) を使います。

ハードウエアー (BIOS) 時間が UT に設定されている場合は、"/etc/default/rcS" の中の設定を "UTC=yes" と変更します。

ネットワーク経由でシステムの時間を更新したい場合には、ntpntpdatechrony 等のパッケージを使って NTP サービスを利用することを考えます。

次を参照下さい。

[ティップ] ティップ

ntp パッケージ中の ntptrace(8) を使うと、NTP サービスの継がりを第一義的根源まで溯ることができます。

9.6.6. ターミナルの設定

文字コンソールと ncurses(3) システム機能を設定するのはいくつかの要素があります。

  • "/etc/terminfo/*/*" ファイル (terminfo(5))

  • "$TERM" 環境変数 (term(7))

  • setterm(1)stty(1)tic(1)toe(1)

もし xterm 用の terminfo エントリーが非 Debian のxterm でうまく機能しない場合には、リモートから Debian システムにログインする時にターミナルタイプ、"$TERM"、を "xterm" から "xterm-r6" のような機能限定版に変更します。詳細は "/usr/share/doc/libncurses5/FAQ" を参照下さい。"dumb" は"$TERM" の最低機能の共通項です。

9.6.7. 音のインフラ

現在の Linux 2.6 のためのサウンドカードのためのデバイスドライバーは Advanced Linux Sound Architecture (ALSA) で提供されています。ALSA は過去の Open Sound System (OSS) と互換性のためのエミュレーションモードを提供します。

"dpkg-reconfigure linux-sound-base" を実行し、カーネルモジュールをブラックリストすることで ALSA を使うように選択します。非常に新しいサウンドハードウエアーをお持ちで無ければ udev インフラがあなたのサウンドシステムを設定します。

[ティップ] ティップ

"cat /dev/urandom > /dev/audio" か speaker-test(1) を使ってスピーカをテストします。(^C で停止)

[ティップ] ティップ

音が出ない場合ですが、あなたのスピーカーが消音された出力につながっているかもしれません。現代的なサウンドシステムには多くの出力があります。alsa-utils パッケージ中の alsamixer(1) は音量や消音の設定をするのに便利です。

アプリケーションソフトはサウンドデバイスに直接アクセスするようにばかりでなく標準的なサウンドサーバーシステム経由で間接的にアクセスするように設定されているかもしれません。

表9.18 サウンドパッケージのリスト

パッケージ ポプコン サイズ 説明
linux-sound-base * V:41, I:51 128 ALSA と OSS サウンドシステムの基本パッケージ
alsa-base * V:2, I:50 504 ALSA ドライバー設定ファイル
alsa-utils * V:36, I:50 1958 ALSA を設定し使用するユーティリティー
oss-compat * V:17, I:21 72 ALSA の下で "/dev/dsp not found" エラーを防ぐ OSS 互換性
esound-common * V:10, I:52 79 Enlightened Sound Daemon (ESD) 共通 (Enlightenment と GNOME)
esound * V:0.2, I:2 NOT_FOUND Enlightened Sound Daemon (ESD) サーバー (Enlightenment と GNOME)
esound-clients * V:1.4, I:6 NOT_FOUND Enlightened Sound Daemon (ESD) クライアント (Enlightenment と GNOME)
libesd0 * V:12, I:52 45 Enlightened Sound Daemon (ESD) ライブラリー (Enlightenment と GNOME)
arts * I:3 NOT_FOUND aRts サーバー (KDE)
libarts1c2a * V:5, I:12 NOT_FOUND aRts ライブラリー (KDE)
libartsc0 * V:3, I:20 NOT_FOUND aRts ライブラリー (KDE)
jackd * V:0.3, I:3 32 JACK Audio Connection Kit. (JACK) サーバー (低遅延)
libjack0 * V:2, I:16 132 JACK Audio Connection Kit. (JACK) ライブラリー (低遅延)
nas * V:0.16, I:0.2 265 Network Audio System (NAS) サーバー
libaudio2 * V:27, I:46 176 Network Audio System (NAS) ライブラリー
pulseaudio * V:9, I:11 4721 PulseAudio サーバー、ESD 代替
libpulse0 * V:25, I:50 812 PulseAudio クライアント、ESD 代替
libgstreamer0.10-0 * V:35, I:53 3896 GStreamer: GNOME サウンドエンジン
libxine1 * V:4, I:24 29 xine: KDE 旧サウンドエンジン
libphonon4 * I:24 604 Phonon: KDE 新サウンドエンジン

各ポピュラーなデスクトップ環境では普通共通のサウンドエンジンがあります。アプリケーションに使われるそれぞれのサウンドエンジンはそれと異なるサウンドサーバーにつなぐようにもできます。

9.6.8. スクリーンセーバーの無効化

スクリーンセーバーを無効にするには、次のコマンドを使います。

表9.19 スクリーンセーバーを無効にするコマンドのリスト

環境 コマンド
Linux コンソール setterm -powersave off
X Window (スクリーンセーバー消去) xset s off
X Window (dpms 無効) xset -dpms
X Window (スクリーンセーバーの GUI 設定) xscreensaver-command -prefs

9.6.9. ブザー音の無効化

PC スピーカーのコネクタを外すとブザー音は確実に無効にできます。pcspkr カーネルモジュールを削除すると同じ事ができます。

次のようにすると bash(1) が使う readline(3) プログラムが "\a" (ASCII=7) に出会った際にブザー音を発生するのを防げます。

$ echo "set bell-style none">> ~/.inputrc

9.6.10. 使用メモリー

"/var/log/dmesg" 中にあるカーネルブートメッセージに使えるメモリーの正確な全サイズが書かれています。

free(1)top(1) は稼働中システムのメモリーリソース情報を表示します。

# grep '\] Memory' /var/log/dmesg
[    0.004000] Memory: 990528k/1016784k available (1975k kernel code, 25868k reserved, 931k data, 296k init)
$ free -k
             total       used       free     shared    buffers     cached
Mem:        997184     976928      20256          0     129592     171932
-/+ buffers/cache:     675404     321780
Swap:      4545576          4    4545572
[ティップ] ティップ

"Mem:" 行の "used" のサイズが大きかったり "free" のサイズが小さかったりについて悩まないでおきます。それらの1行下の (次の例では675404と321780) を読んで安心して下さい。

1GB=1048576k の DRAM (video システムがこのメモリーの一部を使用) が付いている私の MacBook では次のようになっています。

表9.20 レポートされるメモリーサイズのリスト

報告 サイズ
dmesg 中の全サイズ (Total) 1016784k = 1GB - 31792k
dmesg 中の未使用 (free) 990528k
shell 下での全 (total) 997184k
shell 下での未使用 (free) 20256k (しかし実質は 321780k)

9.6.11. システムのセキュリティーと整合性のチェック

ダメなシステム管理をするとあなたのシステムを外界からの攻撃にさらすことになるかもしれません。

システムのセキュリティーと整合性のチェックには、次の事から始めるべきです。

表9.21 システムセキュリティーや整合性確認のためのツールリスト

パッケージ ポプコン サイズ 説明
logcheck * V:2, I:3 284 システムログの異常を管理者にメールするデーモン
debsums * V:2, I:4 324 MD5 チェックサムを使ってインストールされたパッケージファイルを検証するユーティリティー
chkrootkit * V:1.9, I:5 808 ルートキット検出ソフト
clamav * V:2, I:9 584 Unix 用アンチウィルスユーティリティー - コマンドラインインターフェース
tiger * V:0.8, I:0.9 3016 システムセキュリティーの脆弱性を報告
tripwire * V:0.6, I:0.7 9456 ファイルやディレクトリーの整合性チェックソフト
john * V:0.6, I:2 472 アクティブなパスワードクラッキングツール
aide * V:0.2, I:0.3 1240 先進的進入検出環境 - 静的ライブラリー
bastille * V:0.08, I:0.2 1960 セキュリティー強化ツール
integrit * V:0.07, I:0.14 440 ファイル整合性確認プログラム
crack * V:0.02, I:0.2 204 パスワード推定プログラム

次のシンプルなスクリプトを使うと、典型的な間違いの全員書込み可のファイルパーミッションをチェックできます。

# find / -perm 777 -a \! -type s -a \! -type l -a \! \( -type d -a -perm 1777 \)
[注意] 注意

debsums パッケージはローカルに保存された MD5 チェックサムを使うので、悪意ある攻撃に対抗するセキュリティー監査ツールとしては完全には信頼できません。

9.7. カーネル

Debian はモジュール化された Linux カーネルをサポートされるアーキテクチャに対してパッケージとしてディストリブートしています。

9.7.1. Linux カーネル 2.6

Linux カーネル 2.4 と比較して特記すべき Linux カーネル 2.6 の機能がいくつかあります。

  • デバイスは udev システムで生成されます (「udev システム」参照)。

  • IDE CD/DVD デバイスへの読出し/書込みアクセスは ide-scsi モジュールを使用しません。

  • ネットワークのパケットフィルター機能は iptable カーネルモジュールを使います。

9.7.2. カーネル変数

多くの Linux の機能はカーネル変数を使い次のように設定されます。

linux-doc-2.6.* パッケージで供給される Linux カーネル文書 ("/usr/share/doc/linux-doc-2.6.*/Documentation/filesystems/*") 中の "kernel-parameters.txt(.gz)" や関連する他の文書を参照下さい。

9.7.3. カーネルヘッダー

ほとんどの普通のプログラムはカーネルヘッダーを必要としませんし、コンパイルするのにそれらを直接用いるとコンパイルがうまくいかないかもしれません。普通のプログラムは Debian システム上では (glibc ソースパッケージから生成される) libc6-dev パッケージが提供する "/usr/include/linux" や "/usr/include/asm" 中のヘッダを使ってコンパイルするべきです。

[注記] 注記

外部ソースからのカーネルモジュールやオートマウンターデーモン (amd) のようなカーネル固有の一部プログラムをコンパイルする場合、例えば "-I/usr/src/linux-particular-version/include/" 等の対応するカーネルヘッダーへのパスをコマンドラインで指定しなければいけません。module-assistant(8) (またはその短縮形 m-a) はユーザーが1つ以上のカスタムカーネルに関するモジュールパッケージを簡単にビルドとインストールすることを援助します。

9.7.4. カーネルと関連モジュールのコンパイル

Debian にはカーネルと関連モジュールをコンパイルする独自の方法があります。

表9.22 Debian システム上でカーネルの再コンパイルためにインストールする重要パッケージのリスト

パッケージ ポプコン サイズ 説明
build-essential * I:47 48 Debian パッケージをビルドする上で不可欠なパッケージ: makegcc、…
bzip2 * V:55, I:80 132 bz2 ファイルのための圧縮と解凍ユーティリティー
libncurses5-dev * V:5, I:22 1192 ncurses のためのデベロッパ用ライブラリーと文書
git * V:10, I:35 10625 git: Linux カーネルによって使われている分散型リビジョンコントロールシステム
fakeroot * V:6, I:44 369 パッケージを非 root としてビルドするための fakeroot 環境を提供
initramfs-tools * V:44, I:98 456 initramfs をビルドするツール (Debian 固有)
kernel-package * V:1.3, I:10 2316 Linux カーネルパッケージをビルドするツール (Debian 固有)
module-assistant * V:2, I:15 564 モジュールパッケージをビルドするツール (Debian 固有)
dkms * V:7, I:17 452 動的カーネルモジュールサポート (DKMS) (汎用)
devscripts * V:2, I:9 1499 Debian パッケージメンテナ用ヘルパースクリプト (Debian 固有)
linux-tree-2.6.* N/A N/A Linux カーネルのソースツリーのメタパッケージ (Debian 固有)

「2段目: ブートローダー」 中で initrd を使う場合、initramfs-tools(8)update-initramfs(8)mkinitramfs(8)initramfs.conf(5) 中の関連情報をしっかり読んで下さい。

[警告] 警告

Linux カーネルソースをコンパイルする時にソースツリー中のディレクトリー (例えば "/usr/src/linux*") から "/usr/include/linux" や "/usr/include/asm" へのシムリンクを張ってはいけません。(古くなった一部文書はまだこれをすることを提案しています。)

[注記] 注記

Debian の stable (安定版) システム上で最新の Linux カーネルをコンパイルする際には、Debian のunstable (非安定版) システムからバックポートされた最新のツールが必要かもしれません。

[注記] 注記

動的カーネルモジュールサポート (DKMS) は、カーネル全体を変えること無く個別カーネルモジュールをアップグレードできるようにする新しいディストリビューションに依存しない枠組みです。これに squeeze でのアウトオブツリーのモジュールの管理方法として承認されます。これはあなたがカーネルをアップグレードする際にモジュールを簡単に再構築できるようにします。

9.7.5. カーネルソースのコンパイル: Debian 標準手法

カスタムカーネルパッケージを作るためにカーネルソースをコンパイルする Debian の標準手法は make-kpkg(1) を使います。正式の文書は "/usr/share/doc/kernel-package/README.gz" (最後の部分) にあります。カスタム化は kernel-pkg.conf(5)kernel-img.conf(5) を参照下さい。

amd64 システムの例を次に記します。

# aptitude install linux-tree-<version>
$ cd /usr/src
$ tar -xjvf linux-source-<version>.tar.bz2
$ cd linux-source-<version>
$ cp /boot/config-<oldversion> .config
$ make menuconfig
 ...
$ make-kpkg clean
$ fakeroot make-kpkg --append_to_version -amd64 --initrd --revision=1.0 kernel_image modules_image
$ cd ..
# dpkg -i linux-image*.deb

"shutdown -r now" としてリブートし、新しいカーネルへ移行します。

[注意] 注意

1台の機器のためだけにコンパイルされた非モジュール化したカーネルを作りたい際には、initrd を使わないので make-kpkg を"--initrd" オプション無しで実行します。"make-kpkg kernel_image" によって "make oldconfig" と "make dep" が実行されるので、これらを別途実行する必要はありません。

9.7.6. モジュールソースのコンパイル: Debian 標準手法

カスタムカーネルパッケージのためのカスタムモジュールパッケージを生成しインストールする Debian 標準手法は module-assistant(8) と module ソースパッケージを使います。例えば次のようにすると、unionfs カーネルモジュールがビルドされ、それがインストールされます。

$ sudo aptitude install module-assistant
...
$ sudo aptitude install unionfs-source unionfs-tools unionfs-utils
$ sudo m-a update
$ sudo m-a prepare
$ sudo m-a auto-install unionfs
...
$ sudo apt-get autoremove

9.7.7. カーネルソースのコンパイル: 古典的方法

加工されていないソースからの Linux カーネルを今でも古典的手法でビルドできます。システムの設定の詳細は手動で面倒を見る必要があります。

$ cd /usr/src
$ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-<version>.tar.bz2
$ tar -xjvf linux-<version>.tar.bz2
$ cd linux-<version>
$ cp /boot/config-<version> .config
$ make menuconfig
 ...
$ make dep; make bzImage
$ make modules
# cp ./arch/x86_64/boot/bzImage /boot/vmlinuz-<version>
# make modules_install
# depmod -a
# update-initramfs -c -k <version>

ブートローダーは次のように設定します。

  • lilo を使う場合には、"/etc/lilo.conf" を編集し、"/sbin/lilo" を実行します。

  • grub を使う場合には、"/boot/grub/menu.lst" を編集します。

"shutdown -r now" としてリブートし、新しいカーネルへ移行します。

9.7.8. Non-free ハードウエアードライバー

ほとんどのハードウエアードライバーはフリーソフトウエアーとして入手でき Debian システムの一部となっていますが、あなたのシステム上の Winmodem のような一部の non-free の外部ドライバーをロードする必要があるかもしれません。

該当リソースをチェックします。

9.8. 仮想化システム

仮想化されたシステムを利用すると単一ハード上で同時に複数のシステムのインスタンスを実行することが加能となります。

[ティップ] ティップ

http://wiki.debian.org/SystemVirtualization を参照下さい。

9.8.1. 仮想化ツール

Debian には、単純な chroot ではない仮想化エミュレーション関連のパッケージがあります。一部のパッケージはあなたがそのような環境をセットアップする事を援助します。

表9.23 仮想化ツールのリスト

パッケージ ポプコン サイズ 説明
schroot * V:0.9, I:1.3 2676 Debian バイナリーパッケージを chroot 中で実行する専用ツール
sbuild * V:0.10, I:0.3 564 Debian ソースから Debian バイナリーパッケージをビルドするツール
pbuilder * V:0.5, I:2 1320 Debian パッケージの個人的なパッケージビルドソフト
debootstrap * V:1.5, I:10 224 基本的な Debian システムのブートストラップ (sh で書かれている)
cdebootstrap * V:0.2, I:1.7 71 Debian システムのブートストラップ (C で書かれている)
rootstrap * V:0.02, I:0.17 156 完全な Linux ファイルシステムイメージをビルドするツール
virt-manager * V:0.6, I:2 5225 仮想マシンマネージャー: 仮想マシンを管理するデスクトップアプリケーション
libvirt-bin * V:1.9, I:3 3379 libvirt ライブラリー用のプログラム
user-mode-linux * V:0.05, I:0.3 20800 User-mode Linux (kernel)
bochs * V:0.03, I:0.2 2944 Bochs: IA-32 PC エミュレーター
qemu * I:5 344 QEMU: 高速で汎用のプロセッサエミュレーター
qemu-system * V:3, I:5 58043 QEMU: フルシステムエミュレーションのバイナリ
qemu-user * V:0.5, I:5 40909 QEMU: ユーザーモードエミュレーションのバイナリ
qemu-utils * V:0.8, I:6 1238 QEMU: ユーティリティー
qemu-kvm * V:2, I:3 4290 KVM: ハードウエア補助仮想化を利用する x86 ハードウエア上のフル仮想化
virtualbox-ose * V:1.2, I:4 117 VirtualBox: i386 と amd64 上での x86 仮想化解決策
xen-tools * V:0.2, I:1.7 1228 Debian XEN 仮想サーバーの管理ツール
wine * V:1.1, I:11 96 Wine: Windows API の実装 (標準スイート)
dosbox * V:0.5, I:2 2568 DOSBox: Tandy/Herc/CGA/EGA/VGA/SVGA グラフィクス、サウンド、DOS 付きの x86 エミュレーター
dosemu * V:0.2, I:1.0 5944 DOSEMU: Linux 用 DOS エミュレーター
vzctl * V:0.7, I:1.0 769 OpenVZ サーバー仮想化策 - コントロールツール
vzquota * V:0.7, I:1.0 204 OpenVZ サーバー仮想化策 - クオータツール
lxc * V:0.12, I:0.5 438 Linux コンテナ - ユーザースペースツール

異なるプラットフォーム仮想化策の詳細な比較は Wikipedia の記事 Comparison of platform virtual machines を参照下さい。

9.8.2. 仮想化の業務フロー

[注記] 注記

ここに記載された機能の一部は squeeze でのみ利用可能です。

[注記] 注記

lenny以来の Debian のデフォルトカーネルは KVM をサポートしています

仮想化のための典型的な業務フローにはいくつかの段階があります。

9.8.3. 仮想ディスクイメージファイルをマウント。

raw ディスクイメージファイルに関しては、「ディスクイメージ」を参照下さい。

他の仮想ディスクイメージに関しては、qemu-nbd(1) を使ってネットワークブロックデバイスプロトコルを用いてそれらをエクスポートし nbd カーネルモジュールを使ってそれらをマウントできます。

qemu-nbd(1)QEMU がサポートする次のディスクフォーマットをサポートします: raw、qcow2、qcowvmdkvdibochs、cow (user-mode Linux の copy-on-write)、parallelsdmgcloopvpc、vvfat (virtual VFAT)、host_device。

ネットワークブロックデバイスloop デバイスと同様の方法でパーティションをサポートします (「ディスクイメージファイルをマウント」参照)。"image.img" の最初のパーティションは次のようにするとマウントできます。

# modprobe nbd max_part=16
# qemu-nbd -v -c /dev/nbd0 disk.img
...
# mkdir /mnt/part1
# mount /dev/nbd0p1 /mnt/part1
[ティップ] ティップ

qemu-nbd(8) に"-P 1" オプションを用いると、"disk.img" の最初のパーティションだけをエクスポートできます。

9.8.4. Chroot システム

chroot(8) を使うのは、GNU/Linux 環境の異なったインスタンスをリブートすることなく単一システム上で同時に実行する最も基本的な手法です。

[注意] 注意

次の例は親システムと chroot システムが同じ CPU アーキテクチャを共有していると仮定しています。

pbuilder(8) プログラムを script(1) の下で次のように実行すると chroot(8) の設定と使い方が学べます。

$ sudo mkdir /sid-root
$ sudo pbuilder --create --no-targz --debug --buildplace /sid-root

"sid-root" の下に sid 環境のためのシステムデーターをどのようにして充足するかは debootstrap(8)cdebootstrap(1) を見ると分かります。

[ティップ] ティップ

この debootstrap(8)cdebootstrap(1) は、Debian インストーラーが Debian をインストールするのに使われています。これらは Debian のインストールディスクを使わず他の GNU/Linux ディストリビューションから Debian をインストールするのにも使えます。

$ sudo pbuilder --login --no-targz  --debug --buildplace /sid-root

どのようにして sid 環境下で実行されるシステムシェルが作られるかが次で観察できます。

  1. ローカル設定のコピー ("/etc/hosts" と "/etc/hostname" と "/etc/resolv.conf")

  2. "/proc" ファイルシステムのマウント

  3. "/dev/pts" ファイルシステムのマウント

  4. 常に101でプログラム終了する "/usr/sbin/policy-rc.d" を作成

  5. "chroot /sid-root bin/bash -c 'exec -a -bash bin/bash'" を実行

[注記] 注記

プログラムによっては機能するために chroot の下で pbuilder が提供するより多くの親システムのファイルへのアクセスする必要があります。例えば、"/sys" や "/etc/passwd" や "/etc/group" や "/var/run/utmp" や "/var/log/wtmp" 等が bind マウントもしくはコピーされる必要があるかもしれません。

[注記] 注記

"/usr/sbin/policy-rc.d" ファイルは、Debian システム上でデーモンプログラムが自動的に起動されることを防ぎます。"/usr/share/doc/sysv-rc/README.policy-rc.d.gz" を参照下さい。

[ティップ] ティップ

pbuilder という特化した chroot パッケージの本来の目的は、chroot システムを作りその chroot 中でパッケージをビルドすることです。それはパッケージのビルド依存関係が正しいことをチェックし、不必要で間違ったビルド依存関係が出来上がったパッケージに混入しないようにする理想的なシステムです。

[ティップ] ティップ

類似の schroot パッケージは i386 の chroot システムを amd64 の親システムの下で実行方法を教えてくれます。

9.8.5. 複数のデスクトップシステム

仮想化を使って複数のデスクトップシステムを安全に実行するには、Debian 安定版 (stable) システム上で QEMUVirtualBox を使うことをお勧めします。これらを使うと通常ありがちなリスクに晒されずに Debian テスト版 (testing) や不安定版 (unstable) システムのデスクトップアプリケーションを実行できるようになります。

純粋な QEMU は非常に遅いので、ホストシステムがサポートする際には KVM を使って加速することをお勧めします。

QEMU 用の Debian システムを含む仮想ディスクイメージ "virtdisk.qcow2" はdebian-installer: 小さな CD を使って次のように作成できます。

$ wget http://cdimage.debian.org/debian-cd/5.0.3/amd64/iso-cd/debian-503-amd64-netinst.iso
$ qemu-img create -f qcow2 virtdisk.qcow2 5G
$ qemu -hda virtdisk.qcow2 -cdrom debian-503-amd64-netinst.iso -boot d -m 256
...

更なるティップに関しては Debian wiki: QEMU を参照下さい。

VirtualBoxQt の GUI ツールとして提供され非常に直感的に理解できます。その GUI とコマンドラインツールは VirtualBox User ManualVirtualBox User Manual (PDF) で説明されています。

[ティップ] ティップ

UbuntuFedra 等の GNU/Linux ディストリビューションを仮想化の下で実行するのは設定ティップを学ぶ非常に良い方法です。他のプロプライエタリな OS もこの GNU/Linux の仮想化の下で上手く実行できます。