APT を両方のマシンで利用できるようにする最も単純な設定を考えます。基本的な考え方は status ファイルのコピーをそのディスクに置いて最新のパッケージファイルの取得やダウンロードするパッケージの決定にはリモートマシンを使います。そのディスクのディレクトリ構造は次のようになります:
/disc/ archives/ partial/ lists/ partial/ status sources.list apt.conf
設定ファイルでは APT が管理ファイルをそのディスクに保存し、そのディスク上の設定ファイルを同様に利用するように指示する必要があります。sources.list ではリモートマシンから利用する適切なサイトを指定し、status ファイルは対象ホストの /var/lib/dpkg/status をコピーしたものを利用します。ローカルアーカイブを使っている場合はその URI を利用しないといけないことに注意してください。書式はファイルの URI と同一です。
apt.conf には APT がそのディスクを使うようにするのに必要な情報を記述しないといけません:
APT { /* This is not necessary if the two machines are the same arch, it tells the remote APT what architecture the target machine is */ Architecture "i386"; Get::Download-Only "true"; }; Dir { /* Use the disc for state information and redirect the status file from the /var/lib/dpkg default */ State "/disc/"; State::status "status"; // Binary caches will be stored locally Cache::archives "/disc/archives/"; Cache "/tmp/"; // Location of the source list. Etc "/disc/"; };
apt.conf の man ページや /usr/share/doc/apt/examples/apt.conf にある見本の設定ファイルを調べるとさらなる詳細があります。
対象のマシンでまず行うことはディスクをマウントしてそのディスクに /var/lib/dpkg/status をコピーすることです。概要にまとめられているように、ディレクトリ archives/partial/ 及び lists/partial/ を作成する必要もあるでしょう。それからディスクをリモートマシンに移動して sources.list を設定します。リモートマシンでは以下の手順を実行します:
# export APT_CONFIG="/disc/apt.conf" # apt-get update [ package ファイルを APT が取得します ] # apt-get dist-upgrade [ 対象マシンをアップグレードするのに必要なパッケージを、APT が取得します ]
dist-upgrade コマンドは他の任意の標準的な APT コマンド、特に dselect-upgrade に置き換えることができます。dselect 等の APT フロントエンドを使うこともできます。しかし、それには選択したときにローカルコンピュータとやりとりしてしまうという問題があります。
これで、対象のマシンをアップグレードするのに必要な索引ファイルとアーカイブが全てこのディスクに収録されたということになります。ディスクを戻して実行します:
# export APT_CONFIG="/disc/apt.conf" # apt-get check [ キャッシュファイルのローカルコピーを生成します ] # apt-get --no-d -o dir::state::status=/var/lib/dpkg/status dist-upgrade [ もしくはその他の APT コマンド ]
適切に機能するためにはローカルのファイルを status ファイルに再指定する必要があります。これは非常に重要です!
dselect を使っている場合、disc/status はリモートマシンで何か選択すると更新されるため /var/lib/dpkg/status にコピーするのは非常に危険です。選択はローカルマシンでのみ行うことを強く勧めます - しかしこれは常に可能だとは限りません。dpkg や APT を実行している間は status ファイルをコピー *しないでください* !!