バージョン 3.1.3
製作著作 © 1999 Jason Gunthorpe
ライセンスについて
"APT" and this document are free software; you can redistribute them and/or modify them under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. |
For more details, on Debian systems, see the file /usr/share/common-licenses/GPL for the full license. |
概要
このドキュメントはネットワークがない環境での APT の使用方法を説明しています。具体的には、アップグレード時の「スニーカーネット」アプローチです。
目次
通常 APT は Debian アーカイブに、ローカルメディアから、あるいはネットワーク経由で直接アクセスできる必要があります。他によくある苦情としてはある Debian マシンの接続がモデム等のために低速で、別のマシンには非常に高速な接続があるけれども物理的に遠い、といったことがあります。 |
これに対する解法としては Zip や SuperDisk ディスクといった大容量脱着可能メディアを使います。こういったディスクは Debian アーカイブ全体を格納するには十分とは言えない容量ですがほとんどのユーザにとって必要なその一部を収めるには十分余裕があります。その考え方は APT を使って必要なパッケージの一覧を生成し、接続状態の良好な別のマシンを使ってそのディスク上に取得します。APT を使える別の Debian マシンや、完全に異なる OS で wget のようなダウンロードツールを使うことも可能です。リモートホストはパッケージをダウンロードするマシン、対象ホストは接続がないあるいは良くないマシンだと考えてください。 |
これは APT 設定ファイルを独創的に操作することで実現できます。あるディスクを APT が検索するようにするために必須となる前提条件はアーカイブファイルです。そのディスクは長いファイル名を扱えるファイルシステム、例えば ext2 や fat32、vfat でフォーマットする必要があることに注意してください。 |
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 ファイルをコピー *しないでください* !! |
wget は人気のある移植性の高いダウンロードツールで、ほぼあらゆるマシンで実行できます。上記の方法とは異なり、これには利用可能なパッケージの一覧を Debian マシンで用意しておく必要があります。 |
基本的な考え方は、リモートサイトからダウンロードしたアーカイブファイルだけを収録したディスクを作成するということです。これは apt-get に --print-uris オプションを使って行い、それから wget スクリプトを準備して実際にパッケージを取得します。 |
前の技とは異なり、特別な設定ファイルを必要としません。標準的な APT コマンドを単純に使ってファイル一覧を生成します。 |
# apt-get dist-upgrade
[ 問い合わせには no を回答し、意図しない動作を起こすことのないように ]
# apt-get -qq --print-uris dist-upgrade > uris
# awk '{print "wget -O " $2 " " $1}' < uris > /disc/wget-script
|
dselect-upgrade を含め、ここでは dist-upgrade 以外の任意のコマンドを使えます。 |
/disc/wget-script ファイルには、必要なアーカイブを取得するために実行する wget コマンドの一覧を収録するようになっています。ディスク上の出力を減らすため、このスクリプトは現在のディレクトリをそのディスクのマウントポイントとして実行するようにしてください。 |
リモートマシンでは以下のようにします。 |
# cd /disc # sh -x ./wget-script [ お待ちください... ] |
アーカイブのダウンロードが終わってディスクが Debian マシンに返ってくるとインストールを続けられるようになります。 |
# apt-get -o dir::cache::archives="/disc/" dist-upgrade |
これで、ディスクにある取得済みのアーカイブを使用するようになります。 |