WebOS Goodies

WebOS の未来を模索する、ゲームプログラマあがりの Web 開発者のブログ。

WebOS Goodies へようこそ! WebOS はインターネットの未来形。あらゆる Web サイトが繋がり、共有し、協力して創り上げる、ひとつの巨大な情報システムです。そこでは、あらゆる情報がネットワーク上に蓄積され、我々はいつでも、どこからでも、多彩なデバイスを使ってそれらにアクセスできます。 WebOS Goodies は、さまざまな情報提供やツール開発を通して、そんな世界の実現に少しでも貢献するべく活動していきます。
Subscribe       

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'):

最初に更新する必要のある設定ファイルがリストされており、その後にコマンド入力を促すプロンプトが表示されています。ここで使えるコマンドは以下のとおりです。

コマンド機能
リストの番号該当する設定ファイルの更新を開始
-1etc-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 の醍醐味といえるでしょうね :)

関連記事

この記事にコメントする

Recommendations
Books
「Closure Library」の入門書です。
詳しくはこちらの記事をどうぞ!
Categories
Recent Articles