etc-update の使い方
昨日の続きで、etc-update による設定ファイルの更新方法をご紹介します。
GentooLinux でインストール済みパッケージの更新を行うと、最後に以下のように表示されることがあります。
* GNU info directory index is up-to-date. * IMPORTANT: 28 config files in /etc need updating. * Type emerge --help config to learn how to update config files.
これは、設定ファイル(主に "/etc" 以下にあるもの)が更新されたため、手動でそれらを現在のファイルにマージする必要があることを示しています。GentooLinux では安全性を優先して、設定ファイルの更新はユーザーの判断で行うようになっているのです。手動といっても etc-update という専用のツールが用意されており、対話的に更新が行えるようになっているので、さほど大変ではありません。楽でもありませんが。(^^;
それでは、さっそく設定ファイルの更新をやってみましょう。以下のようにして etc-update を起動します。コマンドラインオプションなどはとくにありません。
etc-update
すると、以下のようなメニューが表示されます。
Scanning Configuration files... The following is the list of files which need updating, each configuration file is followed by a list of possible replacement files. 1) /etc/udev/rules.d/50-udev.rules /etc/udev/rules.d/._cfg0000_50-udev.rules 2) /etc/init.d/bootmisc /etc/init.d/._cfg0000_bootmisc 3) /etc/init.d/checkfs /etc/init.d/._cfg0000_checkfs 4) /etc/init.d/checkroot /etc/init.d/._cfg0000_checkroot 5) /etc/conf.d/clock /etc/conf.d/._cfg0000_clock 6) /etc/init.d/clock /etc/init.d/._cfg0000_clock Please select a file to edit by entering the corresponding number. (don't use -3 or -5 if you're unsure what to do) (-1 to exit) (-3 to auto merge all remaining files) (-5 to auto-merge AND not use 'mv -i'):
最初に更新する必要のある設定ファイルがリストされており、その後にコマンド入力を促すプロンプトが表示されています。ここで使えるコマンドは以下のとおりです。
コマンド | 機能 |
---|---|
リストの番号 | 該当する設定ファイルの更新を開始 |
-1 | etc-update を終了 |
-3 | 残りのファイルをすべて新しいもので上書き(確認あり) |
-5 | 残りのファイルをすべて新しいもので上書き(確認なし) |
それでは、例として "/etc/conf.d/clock" を更新してみましょう。5 を入力して Enter を押すと、以下のように現在のファイルと新しいファイルとの差分が表示されます。
Showing differences between /etc/conf.d/clock and /etc/conf.d/._cfg0000_clock --- /etc/conf.d/clock 2005-12-27 08:57:58.000000000 +0900 +++ /etc/conf.d/._cfg0000_clock 2006-01-22 22:41:56.000000000 +0900 @@ -2,9 +2,10 @@ # Set CLOCK to "UTC" if your system clock is set to UTC (also known as # Greenwich Mean Time). If your clock is set to the local time, then -# set CLOCK to "local". +# set CLOCK to "local". Note that if you dual boot with Windows, then +# you should set it to "local". -CLOCK="local" +CLOCK="UTC" # If you wish to pass any other arguments to hwclock during bootup, # you may do so here.
基本的に、変更があった行の前後 3 行が表示されます。行頭が + の行が追加された行、- の行が削除された行です。それ以外の行は変更されていません。カーソルキーでスクロールできるので、変更箇所を一通り確認しましょう。q キーで差分表示を終了すると、以下のようなメニューが表示されます。
1) Replace original with update 2) Delete update, keeping original as is 3) Interactively merge original with update 4) Show differences again Please select from the menu above (-1 to ignore this update):
ここで入力できるコマンドは以下の通りです。
コマンド | 機能 |
---|---|
1 | 新しいファイルで上書きする |
2 | 新しいファイルを削除し、古いファイルを保持する |
3 | 対話的に新旧のファイルをマージする |
4 | 再度差分を表示する |
-1 | 前のメニューに戻る |
1, 2, 3, -1 のコマンドは説明の必要もないかと思います。ここでは、3 の対話的なマージをやってみましょう。3 を入力して、Enter を押してください。すると、以下のように新旧の変更箇所を左右に並べた表示になります。% はプロンプトです。
/etc/conf.d/._cfg0000_clock /etc/conf.d/clock /etc/conf.d/clock.merged Merging /etc/conf.d/._cfg0000_clock and /etc/conf.d/clock # set CLOCK to "local". | # set CLOCK to "local". Note that if you dual boot with Wind > # you should set it to "local".
中間に | がある行は変更があった行、> は追加、< は削除です。 ここでは、以下のコマンドが使えます。
コマンド | 機能 |
---|---|
ed | ヘッダつきで、双方の変更を編集した後、採用する |
eb | ヘッダなしで、双方の変更を編集した後、採用する |
el | 古いバージョンを編集した後、採用する |
er | 新しいバージョンを編集した後、採用する |
e | 新規にその部分を入力し、採用する |
l | 古いバージョンを採用する |
r | 新しいバージョンを採用する |
s | 共通行の表示 ON |
v | 共通行の表示 OFF |
q | 終了 |
ここでは、r コマンドで新しいバージョンを採用することにします。次は、以下のように表示されました。
CLOCK="local" | CLOCK="UTC"
ここはインストール時に変更した部分ですので、l コマンドで現在のバージョンを採用することにします。このファイルの変更点はこれだけですので、マージは終了です。以下のメニューが表示されます。
1) Replace /etc/conf.d/clock with merged file 2) Show differences between merged file and original 3) Remerge original with update 4) Edit merged file 5) Return to the previous menu Please select from the menu above (-1 to exit, losing this merge):
これは先ほどのメニューと似ていますが、項目が若干違います。ここで使えるコマンドは以下の通りです。
コマンド | 機能 |
---|---|
1 | マージしたファイルで上書きする |
2 | 旧ファイルとマージ後のファイルの差分を表示する |
3 | マージをやり直す |
4 | マージ後のファイルを編集する |
5 | 前のメニューに戻る |
-1 | マージ結果を破棄し、終了する |
ここではマージした結果を反映させるために、1 を入力し、Enter を押します。すると、以下のように上書き確認してきますので、覚悟を決めて yes を入力し、Enter を押します。
Replacing /etc/conf.d/clock with /etc/conf.d/clock.merged mv: overwrite `/etc/conf.d/clock'?
さらに、マージ前の新バージョンのファイルを削除も確認してくるので、こちらも yes で答えます。
rm: remove regular file `/etc/conf.d/._cfg0000_clock'?
これで、"/etc/conf.d/clock" の更新が終わりました。文章にすると長いですね・・・orz。以下のように最初のメニューに戻りますが、すでに更新した "/etc/conf.d/clock" の項目は欠番になっています。
The following is the list of files which need updating, each configuration file is followed by a list of possible replacement files. 1) /etc/udev/rules.d/50-udev.rules /etc/udev/rules.d/._cfg0000_50-udev.rules 2) /etc/init.d/bootmisc /etc/init.d/._cfg0000_bootmisc 3) /etc/init.d/checkfs /etc/init.d/._cfg0000_checkfs 4) /etc/init.d/checkroot /etc/init.d/._cfg0000_checkroot 6) /etc/init.d/clock /etc/init.d/._cfg0000_clock Please select a file to edit by entering the corresponding number. (don't use -3 or -5 if you're unsure what to do) (-1 to exit) (-3 to auto merge all remaining files) (-5 to auto-merge AND not use 'mv -i'):
残りのファイルは変更した覚えがありませんので、新しいファイルを上書きしても大丈夫でしょう。そんなときは、-3 で一括処理できます。-3 を入力し、リターンキーを押すと、それぞれのファイルに関して上書き確認をしてきますので、yes で答えていけば OK です。最後に、以下のように表示されれば更新完了です。
Exiting: Nothing left to do; exiting. :)
結構な文章量になってしまいましたが、慣れてしまえばやるのは簡単です。通常、変更している設定ファイルはごく一部のはずなので、ほとんどは上書きするだけです。こんな風にシステムの奥の部分に触れる機会が多いのも、GentooLinux の醍醐味といえるでしょうね :)
詳しくはこちらの記事をどうぞ!
この記事にコメントする