APT ユーザガイド ----------------------------------------------------------------------------- Jason Gunthorpe バージョン 2.9.2 ----------------------------------------------------------------------------- 製作著作 © 1998 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. 概要 This document provides an overview of how to use the APT package manager. ----------------------------------------------------------------------------- 目次 1. 全般 1.1. パッケージシステムの構造 2. apt-get 3. DSelect 4. インターフェース 4.1. スタートアップ 4.2. 状態レポート 4.2.1. 追加パッケージリスト 4.2.2. 削除するパッケージ 4.2.3. 新規パッケージリスト 4.2.4. 一時固定リスト 4.2.5. 保留パッケージの警告 4.2.6. 最後のまとめ 4.3. 状態表示 4.4. Dpkg 第1章全般 目次 1.1. パッケージシステムの構造 APT パッケージは現在、APT dselect メソッドと apt-get コマンドラインユーザ     インターフェイスの2つを収録しています。両方ともインターネットから新しいパ ッケージをダウンロードするのと同様、パッケージをインストール、削除する方 法を提供しています。 1.1. パッケージシステムの構造 Debian パッケージシステムには各パッケージに関連する膨大な情報があり、シス     テムに手際良く簡単に統合することを支援します。その最も重要な機能は依存シ ステムです。 依存システムにより、システムにあるライブラリ等の共有要素を個々のプログラ ムを使えるようになります。簡単に言うと、プログラムのうちまれに利用される     部分を別個のパッケージに配置して、平均的ユーザがインストールを必要とする ものの数を減らします。また、メール転送エージェントや X サーバ等の選択がで きるようにもなります。 依存システムの理解はまず単純な依存の概念を把握することから始まります。単     純な依存というのは、あるパッケージが適切に機能するためには別のパッケージ が同時にインストールされている必要があるということです。 例えば mailcrypt は emacs を拡張するプログラムで、GPG によるメールの暗号     化を支援します。GPGP がインストールされていなければ mailcrypt は役に立た ないので mailcrypt には GPG に単純に依存しています。また、これは emacs の 拡張なので emacs に単純に依存し、emacs がないと何の役にも立ちません。 理解しておかないといけないもう一つの重要な依存に競合する依存があります。 これはあるパッケージが別のパッケージと同時にインストールされていると機能 せず、システムにとってひどく有害なこともあります。例として sendmail や     exim、qmail 等のメール転送エージェントで考えてみましょう。メール転送エー ジェントはどれもメールを受け取るのにネットワークを待ち受ける必要があるた め、2つインストールすることは不可能です。複数インストールするとシステムに 重大な被害を与える可能性があるため、メール転送エージェントはどれも他のあ らゆるメール転送エージェントと競合依存となっています。 複雑な例としては、別のパッケージのように装うパッケージがあります。exim と sendmail について見てみると、その多くの目的は同一で、両方ともメールを配送 し、一般的インターフェイスを解釈します。そこで、パッケージシステムにはど     ちらも mail-transport-agents だと宣言する方法があります。そうして exim と sendmail は両方とも mail-transport-agent を提供すると宣言し、他のメール転 送エージェントを必要とするパッケージは mail-transport-agent に依存します 。手作業によりパッケージを修正しようとしたときに多大な混乱が生まれる可能 性があります。 既にインストールされている、あるいはされていないパッケージについて、1つの     依存が生まれる可能性は常にあります。APT はインストールするパッケージの選 択を支援する自動化でのアルゴリズムをいくつか提供することで依存問題の解決 支援に努めます。 第2章 apt-get apt-get はコマンドラインからパッケージをインストールする簡単な方法を提供     します。dpkg とは異なり、apt-get は .deb ファイルを解釈せず、連携するのは パッケージ特有の名前で、インストールできるのはソースにある .deb アーカイ ブだけです。 apt-get を使う前にまずやるべきことは^[1]パッケージ一覧をソースから取得す     ることで、それにより利用できるパッケージがわかるようになります。これには apt-get update を実行します。例えば # apt-get update     取得 http://ftp.de.debian.org/debian-non-US/ stable/binary-i386/ Packages 取得 http://llug.sep.bnl.gov/debian/ testing/contrib Packages パッケージリストを読み込んでいます... 完了     更新後は複数のコマンドを使えます: upgrade upgrade を行うとシステム全体を穏やかにアップグレードします。アップグ レードでは新しいパッケージのインストールや既存のパッケージの削除、ア ップグレードすると他のパッケージを破壊する可能性のある場合のそのパッ ケージのアップグレードは行いません。これは毎日実行してシステムを比較 的安全にアップグレードできます。upgrade を行うとアップグレードできな いパッケージがある場合にその一覧を表示します。これは通常新しいパッケ ージに依存しているか他のパッケージと競合しているということになります 。dselect や apt-get install を使うとそういったパッケージを強制的にイ ンストールできます。 install install を使ってパッケージを名前によりインストールします。パッケージ は自動的に取得、インストールされます。これはインストールするパッケー     ジの名前が既にわかっていて GUI を使って選択したくない場合に有用です。 インストールするパッケージはいくらでも指定でき、全て取得されます。 install では対象パッケージ一覧から自動的に依存問題の解決に努めてまと めを提示し、指示以外の変更がある場合は確認を促します。 dist-upgrade dist-upgrade は完全なアップグレードを行うように設計されていて、Debian のリリース間のアップグレードを単純化します。洗練されたアルゴリズムを 使って、システムをできるだけ最新のリリースにするためにインストール、 アップグレード、削除する最善のパッケージ群を決定します。状況によって は dselect で手作業により時間を掛けて依存を解決するよりも dist-upgrade を使う方が希望には合うかもしれません。dist-upgrade 完了 後は dselect を使って、残っているパッケージがあればインストールできま す。 dist-upgrade が実行する内容をよく観察するのは重要です。かなり驚くよう な判断がなされることもあります。 apt-get にはコマンドラインオプションが複数あり、man ページの apt-get(8) で詳細に説明されています。最も有用なオプションは取得したファイルをインス トールしない -d です。システムが大量のパッケージをダウンロードする必要が     ある場合、何かうまくいかなかったときにインストールを開始するのは望ましく はないでしょう。-d を指定すると、ダウンロードしたときのコマンドを単純に再 び、-d を付けずに実行することでダウンロードしたアーカイブをインストールで きます。 -----------------------------------------------------------------------------     ^[1] http プロキシサーバを使っている場合はまず http_proxy 環境変数をセッ トする必要があります。sources.list(5) を見てください 第3章 DSelect APT の dselect メソッドは dselect パッケージ選択 GUI を使った完全な APT     システムを提供します。インストールや削除するパッケージの選択には dselect を使い、実際のインストールは APT が行います。 APT メソッドを有効にするには、dselect でアクセス(a) を選択し、それから APT メソッドを選択する必要があります。そうするとアーカイブの取得先の場所 となるソース群を聞かれます。これにはリモートのインターネットサイトやロー カルの Debian ミラー、CD-ROM を指定できます。各ソースで Debian アーカイブ     全体のうちの一部を提供でき、APT は自動的に組み合わせてパッケージ群一式を 構成します。CD-ROM がある場合はまずそれを指定し、それからミラーを指定する のが良い方法で、そうすることで最新のバグ修正にアクセスできるようになりま す。APT はインターネットからダウンロードする前に CD-ROM にあるパッケージ を自動的に利用します。 ディストリビューションソース位置一覧の準備 Debian ディストリビューションの基底 URL を指定してください。 認識できるアクセス方法: http file     例: file:/mnt/debian, ftp://ftp.debian.org/debian, http://ftp.de.debian.org/debian, URL [http://llug.sep.bnl.gov/debian]: ソースの準備は基礎となる Debian アーカイブの質問から始まり、デフォルトは     HTTP ミラーとなっています。その次は取得するディストリビューションを質問し ます。 取得するディストリビューションのタグやパッケージファイルへのパスを / で終える形式で指定してください。ディストリビューションのタグには     以下のようなものがあります: stable unstable testing non-US ディストリビューション [stable]: ディストリビューションはアーカイブ中の Debian バージョンを参照し、stable は最新のリリース版を、unstable は開発版を参照します。non-US は一部のミラ     ーでのみ利用可能で、合衆国からの輸出ができない暗号化技術その他のものを収 録するパッケージを参照します。ただしこういったパッケージの合衆国への輸入 は合法です。 取得するコンポーネントを指定してください     コンポーネントには以下のようなものがあります: main contrib non-free non-free-firmware コンポーネント [main contrib non-free non-free-firmware]: コンポーネント一覧は取得するサブディストリビューションの一覧を参照します 。このディストリビューションはソフトウェアのライセンスを基にして分けられ     ています。main にあるのは DFSG フリーのパッケージですが contrib や non-free には利用目的や配布形態に様々な制限を課せられているものが収録され ています。     ソースはいくらでも追加できます。準備スクリプトは必要なソースを全て指定す るまで聞き続けます。 dselect を使う前にメニューから更新(u)を選択して利用可能なパッケージ一覧を     更新する必要があります。これは apt-get update の上位集合で、取得した情報 を dselect から利用できるようにします。以前に apt-get update を実行してい ても更新(u)を実行する必要があります。 その後は選択(s)を使って選択し、導入(i)を使ってインストールします。APT メ     ソッドを使っている場合は設定(c)や削除(r)コマンドに意味はなく、導入(i)コマ ンドがその両方を実行します。 デフォルトで APT はインストールに成功したパッケージ (.deb) ファイルを自動     的に削除します。この挙動を変更するには /etc/apt/apt.conf 中に Dselect::clean "prompt"; と記述します。 第4章インターフェース 目次 4.1. スタートアップ 4.2. 状態レポート 4.2.1. 追加パッケージリスト 4.2.2. 削除するパッケージ 4.2.3. 新規パッケージリスト 4.2.4. 一時固定リスト 4.2.5. 保留パッケージの警告 4.2.6. 最後のまとめ 4.3. 状態表示 4.4. Dpkg APT の dselect メソッドと apt-get は共に同一のインターフェイスを共有して います。通常は行う内容を告知して実行する簡単なシステムです。^[2] 実行内容     のまとめを告知した後 APT が参考になる状態メッセージをいくらか表示するため 、どれくらい進んでいるのか、あるいは残り作業がどれくらいあるのか見積もる ことができるようになっています。 4.1. スタートアップ update 以外のあらゆる操作で、APT はいくつか処理を行い内部状態を準備します     。また、システムの状態についてもいくらか確認します。この処理は apt-get check によりいつでも実行できます。 # apt-get check     パッケージリストを読み込んでいます... 完了 依存関係ツリーを作成しています 状態情報を読み取っています... 完了 これが最初に行うのはパッケージファイルを全てメモリに読み込むことです。APT     はキャッシュを使うようになっているので、この処理は次に実行するときには早 く終わります。見つけられないパッケージファイルがある場合は無視され、 apt-get 終了時に注意を表示します。 最後の処理はシステムの依存関係の詳細な分析です。インストール、あるいは展     開されたパッケージの依存関係を全て確認し、問題ないか判断します。問題が見 つかった場合は報告し、apt-get の実行を拒否します。 # apt-get check パッケージリストを読み込んでいます... 完了 依存関係ツリーを作成しています 状態情報を読み取っています... 完了 これらを直すためには 'apt --fix-broken install' を実行する必要があるかもしれません。 下のパッケージには満たせない依存関係があります: 9fonts: 依存: xlib6g しかし、インストールされていません     uucp: 依存: mailx しかし、インストールされていません blast: 依存: xlib6g (>= 3.3-5) しかし、インストールされていません adduser: 依存: perl-base しかし、インストールされていません aumix: 依存: libgpmg1 しかし、インストールされていません debiandoc-sgml: 依存: sgml-base しかし、インストールされていません bash-builtins: 依存: bash (>= 2.01) しかし、2.0-3 はインストールされています cthugha: 依存: svgalibg1 しかし、インストールされていません 依存: xlib6g (>= 3.3-5) しかし、インストールされていません libreadlineg2: 競合:libreadline2 (<< 2.1-2.1) この例ではシステムに libreadlineg2 に関する重大な問題を含めて多数の問題が     あります。未解決の依存関係があれば各パッケージごとにそのパッケージに問題 があることを示し、併せて未解決の依存関係を1行で出力します。そのパッケージ の依存問題の理由について簡潔な説明も添えられます。 システムがこのように壊れた状態となる原因は2つあります。1つ目はアップグレ ード実行時にパッケージ間の難解な依存関係を dpkg がいくらか欠いていること     によります。^[3]2つ目はパッケージのインストール処理中に何か失敗した場合で す。この状況では依存するパッケージがインストールされないままパッケージが 展開されている可能性があります。 APT がパッケージのインストール順序に特定の制約を設けていることにより2つ目 の状況は1つ目の状況と比べて重大ですらなくなります。どちらの場合でも     apt-get に -f オプションを指定することで APT は解決方法を推測し、処理を続 けます。APT dselect メソッドでは常に -f オプションを有効にして、メンテナ スクリプトでの問題が起きた場合でも簡単に処理を継続できるようにしています 。 しかし、1つ目の状況により重大な壊れ方になっているシステムの修正に -f オプ ションを使った場合はインストールにすぐに失敗、あるいはインストール順序が     おかしくなる可能性があります。どちらの場合も、APT が処理を十分に進められ るところまで手作業により dpkg を使って (恐らく強制するオプションを指定し て) 状況を修正する必要があります。 4.2. 状態レポート 処理を続ける前に apt-get は実行しようとする処理について報告します。通常こ     の報告は実行される操作の種類を反映したものになりますが、一般的要素がいく つかあります。どの場合でもこの処理一覧は最終的な状態を示し、-f オプション その他の実行されるコマンドに関連する動作を考慮したものとなります。 4.2.1. 追加パッケージリスト 以下の特別パッケージがインストールされます: libdbd-mysql-perl xlib6 zlib1 xzx libreadline2 libdbd-msql-perl     mailpgp xdpkg fileutils pinepgp zlib1g xlib6g perl-base bin86 libgdbm1 libgdbmg1 quake-lib gmp2 bcc xbuffy squake pgp-i python-base debmake ldso perl libreadlineg2 ssh 追加パッケージリストはコマンドラインで指示した以外にインストールやアップ     グレードされるパッケージを全て表示します。これは install コマンドの場合に のみ生成されます。一覧に挙げられるパッケージは自動インストールの結果によ る場合が多くなります。 4.2.2. 削除するパッケージ 以下のパッケージは「削除」されます: The following packages will be REMOVED:     xlib6-dev xpat2 tk40-dev xkeycaps xbattle xonix xdaliclock tk40 tk41 xforms0.86 ghostview xloadimage xcolorsel xadmin xboard perl-debug tkined xtetris libreadline2-dev perl-suid nas xpilot xfig 削除するパッケージリストはシステムから削除されるパッケージを全て表示しま す。これはどの操作でも起きるもので、重要なものが失われることのないように     注意深く確認すべきです。-f オプションを使った場合はパッケージの削除を伴う ことが特に多く、そのためこのオプションを指定した場合は特に注意を払うよう にしてください。この一覧にはインストールの中止等により一部だけがインスト ールされているために削除されるパッケージが含まれることがあります。 4.2.3. 新規パッケージリスト     以下のパッケージが新たにインストールされます: zlib1g xlib6g perl-base libgdbmg1 quake-lib gmp2 pgp-i python-base 新規パッケージリストでは単純にこれから起きることを再通知します。このパッ     ケージ一覧は現在システムにインストールされておらず、APT 処理後には存在す ることになります。 4.2.4. 一時固定リスト 以下のパッケージは保留されます     compface man-db tetex-base msql libpaper svgalib1 gs snmp arena lynx xpat2 groff xscreensaver システム全体をアップグレードする場合、新しいパッケージが必要であったり既 にインストールされているパッケージと競合するためにパッケージの新しいバー     ジョンがインストールできないということがあります。この場合、そのパッケー ジは一時固定リストに表示されます。この一覧に挙げられたパッケージをインス トールする最善の方法は apt-get install または dselect を使ってその問題を 解決することです。 4.2.5. 保留パッケージの警告     以下の変更禁止パッケージは変更されます: cvs 保留となっているパッケージをインストールするように APT に指示することもで     きます。その際、保留となっているパッケージを変更することを警告します。こ れは dist-upgrade または install を指示したときにしか起きないはずです。 4.2.6. 最後のまとめ     最後に、APT は発生する全変更のまとめを表示します。 アップグレード: 206 個、新規インストール: 8 個、削除: 23 個、保留: 51 個。     12 個のパッケージが完全にインストールまたは削除されていません。 66.7MB 中 65.7MB のアーカイブを取得する必要があります。 この操作後に追加で 26.5MB のディスク容量が消費されます。 まとめの1行目は単純に一覧を全て短くまとめたもので、アップグレードされる (既にインストールされていて新しいバージョンが利用可能な) パッケージの数に ついても示します。2行目は設定が完了していないパッケージの数を示し、インス トールを中止した場合にこれに集計されることがあります。最終行はそのインス トールで必要となる容量の要件を示します。最初の数値の組はアーカイブファイ     ルのサイズを示します。この1つ目の数値はリモートから取得してくる必要のある バイト数、2つ目は必要となる全アーカイブの合計サイズを示します。次の数値は 現在インストールされているパッケージと新しくインストールしたパッケージの サイズの違いを示します。これは処理が全て終わった後に /usr で消費される容 量にほぼ相当します。パッケージを大量に削除する場合は解放される容量を示す こともあります。     他の報告として、-u オプションを使うとアップグレードされるパッケージを表示 します。これは前に示した例と似たものです。 4.3. 状態表示     アーカイブやパッケージファイルのダウンロード中、APT は状態を示す一連のメ ッセージを表示します。 # apt-get update 取得:1 http://ftp.de.debian.org/debian-non-US/ stable/non-US/ Packages 取得:2 http://llug.sep.bnl.gov/debian/ testing/contrib Packages     ヒット http://llug.sep.bnl.gov/debian/ testing/main Packages 取得:4 http://ftp.de.debian.org/debian-non-US/ unstable/binary-i386/ Packages 取得:5 http://llug.sep.bnl.gov/debian/ testing/non-free Packages 11% [5 testing/non-free `Waiting for file' 0/32.1k 0%] 2203b/s 1m52s APT がファイルの取得を開始すると、最終行でダウンロードの進捗状況を示しつ     つ取得で始まる行が表示されます。進捗の最初のパーセント値は全ファイルに対 する取得済みの全体での割合を示します。残念ながらパッケージファイルのサイ ズは不明なので apt-get update は不正確な予測を行う可能性があります。 状態を示す行の次の節は各ダウンロードスレッドごとに1度ずつ繰り返され、進行 中の操作や処理についての有用な情報をいくらか示します。この節は単純に     Forking となっていることもあり、その場合は OS がダウンロード用のモジュー ルを読み込んでいることを示します。[ の後の最初の語は履歴に表示されている 取得番号です。その次の語はダウンロード対象の名前の短縮形です。アーカイブ の場合は取得中のパッケージの名前が入ります。 単一引用符内はダウンロードのやりとりの進捗を示す有益な文字列です。標準的 には...へ接続していますからファイルを待っていますへ、それから...をダウン ロードしていますまたは...を再開していますへと進みます。最後の値はリモート サイトからダウンロードしたバイト数です。ダウンロードが始まるとこれは 102/ 10.2k のように表示され、この場合10.2キロバイトのうち102バイトが取得済みで     あることを示します。合計サイズは常に4ケタで表示され、表示空間を保つように なっています。サイズ表示の後はそのファイル自体の進捗状況を百分率で示した ものです。その2つ後は瞬間的な平均速度です。この値は5秒ごとに更新され、そ の間のデータ転送速度を反映します。最後は推定転送時間を表示しています。こ れは定期的に更新され、表示している転送速度で全て完了する時間を表示します 。 状態表示は0.5秒ごとに更新してダウンロードの進捗状況を絶えず通知し、取得行     は新しいファイルの処理が始まるたびに流れていきます。状態表示は絶えず更新 されるためファイルへの記録には適しません。-q オプションを使うと状態を表示 しないようにできます。 4.4. Dpkg APT はアーカイブのインストールに dpkg を使い、ダウンロードの完了後は dpkg インターフェイスに切り替わります。dpkg もパッケージの処理中にいくつか質問     し、パッケージ自体も複数質問するかもしれません。通常それぞれの質問の前に それが何を聞いているのか説明します。その質問の内容は多岐にわたるものであ り、ここで説明できるものでは全くありません。 ----------------------------------------------------------------------------- ^[2] dselect メソッドは実際に apt-get に対するラッパースクリプト群です。     このメソッドでは apt-get 単体に存在している以上の機能を実際に提供していま す。     ^[3] APT はそれでも既知の依存関係を全て検討し、パッケージが壊れた状態とな ることを回避しようとします。