Mac OS X, Mac OS X Server: NetInfo データベースを置き換える方法
このドキュメントでは、(万が一)NetInfo データベースをバックアップコピーからリストアしたり、デフォルトバージョンと置き換えたりすることが必要な場合に、NetInfo データベースを置き換える方法を説明します。
------------------------------------------------------------------------
ディスカッション

このドキュメントは、バージョン 10.2 以上の Mac OS X と Mac OS X Server に適用されるものです。

警告

1. 新しい NetInfo データベースをデフォルトデータから作成すると、NetInfo をインストールしてから加えたすべての変更が消去されてしまいます。もし NetInfo データベースの構築に多大な時間を費やしているならば、デフォルトに戻してしまうのは、最後の手段としてのみ用いた方がよいでしょう。可能な場合は、バックアップから NetInfo データベースのコンテンツをリストアするほうが一般的に容易です。

2. もし NetInfo にあまり慣れていない場合は、NetInfo データベースの置き換え作業を行うのは、NetInfo に精通している人についてもらっているときのみにしたほうがよいでしょう。そうしないと、このドキュメントで示す方法は通常のトラブルシューティングの一環として推奨されるものではありません。可能ならば、以下に示す作業は、コマンドラインインターフェイスの使用経験があるユーザが行うのが望ましいでしょう。「rm」などのコマンドの使い方を間違うと、データの損失につながります。コマンドを正しく入力するよう、十分注意してください。また、入力したコマンドをテキストエディタにコピー&ペーストして、スペースの入力が正しいかどうか、確認するようにしましょう。


I. コンピュータをシングルユーザモードで起動する
バックアップからリストアする場合も、デフォルト値に置き換える場合も、command + S キーを押しながら起動し、シングルユーザモードでコンピュータを起動してください。詳しくは、TIL 106388「 Mac OS X 10.0: シングルユーザまたは Verbose モードで起動する方法」を参照してください。

シングルユーザモードで起動すると、ファイルシステムはリードオンリー(読み込みのみ)での利用となりますが、以下の作業を行うには、リード/ライト(読み書き)でアクセスしなければなりません。また、安全のために fsck を実行します。以下の手順にしたがってください。

1. コマンドプロンプト(#)で、次のコマンドを入力します。

/sbin/fsck -y

2. Return キーを押すと、fsck が実行されます。
3. 次のプロンプトで、次のコマンドを入力します。

/sbin/mount -uw /

4. Return キーを押します。

これでファイルシステムがリード/ライト(読み書き)で利用できるようになります。このあとバックアップからリストアする場合とデフォルトと置き換える場合とで作業は異なりますが、いずれの場合も後述するセクションで説明します。なお以下のセクションでは、プロンプト(#)で始まる各行はコマンドです。実行するにはコマンドを入力して、Return キーを押します。


II. バックアップからリストアする
NetInfo データベースのバックアップは、そのときコンピュータが起動していれば、毎日午前 3 時 15 分に作成されます。このバックアップは、/var/backups/ に格納されています。万一、お使いの NetInfo の設定に図らずも壊滅的な変更を加えてしまった場合でも、最後にバックアップされたバージョンからリストアすることができます。もし NetInfo を動かしているコンピュータが常時電源の入っているサーバマシンなら、最長で 24 時間以内のバックアップを持っているというわけです。ネットワークデータベースをリストアするのに、このセクションの手順 3 を行う場合は、シングルユーザモードで起動し直す前に、セクション IV に書かれている方法でスクリプトファイルのコピーを保存してください。

1. 上述した方法で、シングルユーザモードでコンピュータを起動します。
2. 次のコマンドは、現在のローカル NetInfo データベースの名前を変更し、アーカイブされたコピーと置き換えます。

# mv /var/db/netinfo/local.nidb /var/db/netinfo/local.nidb.bad
# /usr/libexec/create_nidb

注意:リストアすべきネットワークデータベースがない場合は、手順 4 に進んでください。ネットワークレベルの NetInfo ドメインを作成した場合は、利用しているのはネットワーク NetInfo データベースだけのはずです。

3. ネットワークデータベースをリストアするには、まずこのドキュメントのセクション IV に記述してあるスクリプトのコピーを保存してください。以下のコマンド群は、作成したテキストファイルを実行可能にしたのちに実行します。このスクリプトは、NetInfo データベースの起動とバックアップのリストアに必要なユーザとマシンのエントリを持つ NetInfo ドメインの骨格を作成します。なお、以下のコマンドの中で「yourhostname」となっている箇所には、お使いのコンピュータの実際のホスト名を入力してください。「youripaddress」となっている箇所も同様に、実際の IP アドレスを入力します。また「yourpath」となっている箇所は、create_restore_nidb を保存した場所への実際のパスを入力してください。

# cd /var/db/netinfo
# mv network.nidb network.nidb.bad
# chmod u+x /yourpath/create_restore_nidb
# /yourpath/create_restore_nidb yourhostname youripaddress

4. 以下のコマンドは、ネットワーク、すなわち NetInfo システムを開始し、バックアップデータと共にローカルデータベースを読み込みます。いくつかのメッセージが表示されます。

# /usr/libexec/kextd
# /usr/sbin/configd
# /sbin/SystemStarter
# /usr/bin/niload -d -r -t / localhost/local < /var/backups/local.nidump

5. ネットワーク NetInfo データベースを持っていて、かつ手順 3 を完了した場合は、次のコマンドを実行してください。そうでない場合は、手順 6 に進んでください(この手順 5 はオプションです)。

# /usr/bin/niload -d -r -t / yourhostname/network < /var/backups/network.nidump

6. 次のコマンドを入力し、リストアされた NetInfo データベースでコンピュータを再起動します。

# reboot


III. デフォルトデータからリストアする

利用できそうなバックアップがなかったり、最初からやり直したかったりする場合は、デフォルトデータからリストアすることができます。以下の手順にしたがってください。

1. 上述した方法で、シングルユーザモードでコンピュータを起動します。

2. 次のコマンドは、あとで自動的に置き換えられるように、現在の NetInfo データベースの名前を変更します。

# mv /var/db/netinfo/local.nidb /var/db/netinfo/local.nidb.bad

3. ネットワークドメインを持っている場合は、次のコマンドを入力します(この手順はオプションです)。

# mv /var/db/netinfo/network.nidb /var/db/netinfo/network.nidb.bad

注意:/var/db/netinfo にある、リストアされていないほかのすべての nibd フォルダは移動しても構いません。

4. AppleSetupDone ファイルを削除します。

# rm /var/db/.AppleSetupDone

5. コンピュータを再起動します。

# reboot


以上の手順は、お使いのコンピュータを、Mac OS X を最初にインストールしたときと同様の NetInfo のデフォルト設定に戻します。コンピュータが起動したら、設定アシスタントが表示されます。

IV. create_restore_nidb スクリプト

このスクリプトのコピーを保存するには、以下の手順にしたがってください。

1. 次の行以下をコピーします。
------------------------------------------------------------------------



#!/usr/bin/perl

##
# Create a barebones NetInfo database that can be restored from niload.
# Usage: create_restore_nidb masterhostname ipaddress
#
# The default tag is network.
##

use Sys::Hostname;

my $usage = "Usage: create_restore_nidb masterhostname ipaddress [tag]\nThe default tag is network\n";

my $nipath = "/var/db/netinfo";

if ($ARGV[0]) { $master = $ARGV[0]; }
else
{
die $usage
}

if ($ARGV[1]) { $ipaddress = $ARGV[1]; }
else
{
die $usage
}

if ($ARGV[2]) { $tag = $ARGV[2]; }
else
{
$tag = network
}

my $nidb = "${nipath}/${tag}.nidb";

die "Error: database ${nidb} exists\n" if (-d ${nidb});

my $nicl = "nicl -q -raw ${nidb}";

##
# For debugging:
open(NICL, ">/dev/tty");
##

##
# Create the database
##

system("${nicl} -create");
open(NICL, "|${nicl}");

##
# Setup root directory
##

print NICL "create / master ${master}/${tag}\n";

print NICL "create /users\n";
print NICL "create /machines\n";


##
# Create a root user
##


print NICL "cd /users\n";
print NICL "create root\n";
print NICL "cd root\n";
print NICL "create . passwd *\n";
print NICL "create . uid 0\n";
print NICL "create . gid 0\n";
print NICL "create . change 0\n";
print NICL "create . expire 0\n";
print NICL "create . realname \"System Administrator\"\n";
print NICL "create . home /var/root\n";
print NICL "create . shell /bin/tcsh\n";
print NICL "create . _writers_passwd root\n";
print NICL "cd ..\n";


##
# Create an entry for this machine
##
print NICL "cd /machines\n";
print NICL "create $master ip_address $ipaddress\n";
print NICL "create $master serves ./${tag} ${master}/local\n";

print NICL "quit\n";
close (NICL);


------------------------------------------------------------------------

この行の上までをコピーします。

2. ターミナル (Terminal)「/Applications/Utilities/」で、pico と入力します。
3. Return キーを押します。ターミナルの中に pico テキストエディタが開きます。
4. 手順 1 でコピーしたテキストを、pico にペーストします。
5. 上向き矢印キーを押して、pico 内にペーストしたテキストの一番上までスクロールします。一番上の 2 行は空白になっていますので、この 2 行を削除してください。
6. Control + O キーを押し、ファイルの書き込み(保存)を行います。
7. ファイル名を尋ねられたら、create_restore_nidb と入力します。
8. Return キーを押します。ファイルが書き込まれたという内容のメッセージが表示されます。
9. Control + X キーを押して、pico を終了します。

以上で、ファイル create_restore_nidb のコピーを保存できました。保存先ディレクトリは、ターミナルで作業していた場所です。デフォルトでは、自分の Home ディレクトリのはずです。Finder ウィンドウ内の Home ディレクトリを見て、ファイルの場所を確認してください。ファイルがそこにあれば、パス名は ~/create_restore_nidb となります。

その場合、セクション II の手順 3 でのパス名入力は、次のようになります。

# chmod u+x ~/create_restore_nidb

注意:pico 以外のテキストエディタを使うこともできますが、最良の結果を得るためには pico をお使いください。Web ブラウザからコピー&ペーストした場合、pico 以外のテキストエディタを使っていると予期せぬキャラクタが挿入されてしまい、スクリプトを正しく実行できないことがあります。
------------------------------------------------------------------------

INDEX