目次
![]() |
注記 |
---|---|
本章は最新安定版リリースがコード名: |
Debianは、フリーソフトウエアーのコンパイル済みバイナリーパッケージからなる整合性あるディストリビューションを作り、そのアーカイブを通じてそれらを頒布するボランティア組織です。
Debianのアーカイブは、HTTPやFTP法によるアクセスされるための多くのリモートのミラーサイトとして提供されています。それは、CD-ROM/DVDによっても提供されています。
Debianのパッケージ管理システムは、適切に使われれば、バイナリーパッケージの整合性ある組み合わせがアーカイブからシステムにインストールされるようになっています。現在、amd64アーキテクチャーには27561つのパッケージがあります。
Debianのパッケージ管理システムは、多彩な歴史があり、使用されるフロントエンドのユーザープログラムやバックエンドのアーカイブへのアクセス方法に多くの選択肢があります。現在はDebianのパッケージ管理活動のメインフロントエンドプログラムとしてaptitude
(8)を推薦します。
表2.1 Debianのパッケージ管理ツールのリスト
パッケージ | ポプコン | サイズ | 説明 |
---|---|---|---|
aptitude *
|
V:26, I:98 | 11544 |
ターミナルベースのパッケージマネージャー(現在の標準、apt のフロントエンド)
|
apt
*
|
V:90, I:99 | 5320 |
アドバンスドパッケージツール(APT)、"http "や"ftp "や"file "というアーカイブへのアクセス方法をdpkg に提供するフロントエンド(apt-get /apt-cache コマンドを含む)
|
tasksel *
|
V:7, I:94 | 904 | Debianシステムにタスクをインストールするための選択ツール(APTのフロントエンド) |
unattended-upgrades *
|
V:3, I:23 | 216 | セキュリティーアップデートの自動インストールを可能にするAPTの拡張パッケージ |
dselect *
|
V:3, I:43 | 2288 | ターミナルベースのパッケージマネージャー(過去の標準、APTや他の旧式のアクセス法のフロントエンド) |
dpkg
*
|
V:92, I:99 | 6688 | Debianのためのパッケージ管理システム |
synaptic *
|
V:17, I:44 | 6164 | グラフィカルなパッケージマネージャー(APTのGNOMEフロントエンド) |
kpackage *
|
V:4, I:12 | 936 | グラフィカルなパッケージマネージャー(APTのKDEフロントエンド) |
apt-utils *
|
V:52, I:99 | 524 |
APTユーティリティープログラム:
apt-extracttemplates (1)とapt-ftparchive (1)とapt-sortpkgs (1)
|
apt-listchanges *
|
V:6, I:9 | 504 | パッケージ変更履歴の通知ツール |
apt-listbugs *
|
V:1.5, I:2 | 508 | APTによる各インストール前にクリチカルバグをリストする |
apt-file *
|
V:1.7, I:9 | 184 | APTパッケージ探索ユーティリティー -- コマンドラインインターフェース |
apt-rdepends *
|
V:0.14, I:0.9 | 92 | パッケージの依存関係を再帰的にリスト |
![]() |
注記 |
---|---|
|
Debianシステム上でのパッケージ設定の要点を次に記します。
debconf
(7)と呼ばれる標準化されたユーザーインターフェースを使用し、それぞれ毎の設定スクリプトとともに提供されます。
![]() |
警告 |
---|---|
ランダムな混合のスイーツからパッケージをインストールしてはいけません。コンパイラーのABIとかライブラリー のバージョンとかインタープリターの機能等のシステム管理に関する深い知見が必要なパッケージの整合性がきっと破壊されます。 |
初心者のDebianシステム管理者はDebianの安定版stable
リリースをセキュリティーアップデートを適用しながら使うべきです。Debianシステムを非常によく理解するまでは、用心として次の有効なアクションですら避けておくべきと考えます。次は留意点です。
/etc/apt/sources.list
"の中にテスト版testing
とか不安定版unstable
とかを含めません。
/etc/apt/sources.list
"の中に標準のDebianとDebian以外のUbuntuのようなアーカイブを混在させません。
/etc/apt/preferences
"を作成しません。
dpkg -i <random_package>
"でインストールしません。
dpkg --force-all -i
<random_package>
"で絶対インストールしません。
/var/lib/dpkg/
"の中のファイルを消去や改変しません。
ソースから直接コンパイルしたソフトウエアープログラムをインストールする際にシステムファイルを上書きしません。
/usr/local/
"か"/opt/
"中にインストールします。
上記のアクションで起きるDebianパッケージシステムへのコンパチブルでない効果はシステムを使えなくするかもしれません。
ミッションクリティカルなサーバーを走らせる真剣なDebianシステム管理者は更なる用心をすべきです。
安全な条件下であなたの特定の設定で徹底的にテストすることなくセキュリティーアップデートをも含めた如何なるパッケージもインストールをしてはいけません。
私が上記で警告したとはいえ、自分自身で管理するデスクトップ環境ではDebianのテスト版testing
や不安定版unstable
のスイーツを自分のメインのシステムとして使おうと多くの本書の読者が望むことは分かっています。システムは非常に快調に動くし、頻繁に更新されるし、最新の機能が提供されるからです。
![]() |
注意 |
---|---|
あなたの業務サーバーには、セキュリティーアップデートをした安定版 |
"/etc/apt/sources.list
"の中のディストリビューション文字列を、"testing
"とか"unstable
"というスイーツ名、もしくは"squeeze
とか"sid
"というコード名に単に設定するだけで十分です。
testing
やunstable
を使うことは大変楽しいけれど、リスクがついてきます。Debianシステムのunstable
スイーツさえおおむね非常に安定に見えますが、Debianシステムのtesting
やunstable
スイーツでは過去パッケージ上の問題をいくつか経験して来てるし、その一部は簡単には解決できないものでした。結構痛い目に会うことになるかもしれませんよ。時々、壊れたパッケージや機能の欠損が数週間続くことが起こります。
Debianパッケージのバグからの早急かつ簡単な復元を確実にするいくつかのアイデアがここにあります。
stable
スイーツを別のパーティションにインストールし、システムをヂュアルブータブル化
apt-listbugs
をインストールしてアップグレードの前にDebianバグトラッキングシステム(BTS)をチェックを考慮
(これらの用心のための方策の何れもできないなら、テスト版testing
や不安定版unstable
スイーツを使うのにはあなたはきっと準備不足です。)
以下に記すことにより悟りを開けば、アップグレード地獄という果てしない因果応報の葛藤から人は解脱し、Debianの涅槃の境地に到達できます。
Debianアーカイブをシステムユーザーの視点から見てみます。
![]() |
ティップ |
---|---|
Debianアーカイブの正式のポリシーはDebianポリシーマニュアル、第2章 - Debianアーカイブに規定されています。 |
典型的なHTTPアクセスの場合、現在の安定版stable
=lenny
システムを例にとると、次の様に"/etc/apt/sources.list
"ファイルの中にアーカイブは規定されています。
deb http://ftp.XX.debian.org/debian/ lenny main contrib non-free deb-src http://ftp.XX.debian.org/debian/ lenny main contrib non-free deb http://security.debian.org/ lenny/updates main contrib deb-src http://security.debian.org/ lenny/updates main contrib
"ftp.XX.debian.org
"はあなたの所在場所に合う、Debianの全世界ミラーサイトリスト中に見つかるミラーサイトのURL、例えば日本なら
"ftp.jp.debian.org
"、に置き換えなければいけません。これらのサーバーの状況はDebianミラー確認サイトで確認できます。
上記で、次の安定版stable
がリリースされて驚かされ無いように、私はスイート名の"stable
"でなくコード名の"lenny
"を使います。
"/etc/apt/sources.list
"の意味はsources.list
(5)に記載されていて、要点は以下です。
deb
"行がバイナリーパッケージのための定義です。
deb-src
"行がソースパッケージのための定義です。
ソース関連のメタデーターにアクセスしないaptitude
のためだけなら"deb-src
"行は安全に省略(もしくは"#"を行頭に挿入してコメントアウト)することができます。こうするとアーカイブのメタデーターの更新速度が向上します。URLは"http://
"や"ftp://
"や"file://
"等々の何れも可能です。
![]() |
ティップ |
---|---|
もし上記の例で" |
次は設定ファイル内に用いられるDebianアーカイブサイトのURLとスイーツ名もしくはコード名です。
表2.2 Debianアーカイブサイトのリスト
アーカイブのURL | スイート名(コード名) | 目的 |
---|---|---|
http://ftp.XX.debian.org/debian/ |
stable (lenny )
|
安定版(lenny)のリリース |
http://ftp.XX.debian.org/debian/ |
testing (squeeze )
|
テスト版(squeeze)のリリース |
http://ftp.XX.debian.org/debian/ |
unstable (sid )
|
不安定版(sid)のリリース |
http://ftp.XX.debian.org/debian/ |
experimental
|
実験的プリリリース(任意、開発者専用) |
http://ftp.XX.debian.org/debian/ |
stable-proposed-updates
|
次回安定版ポイントリリース用のアップデート(任意) |
http://security.debian.org/ |
stable/updates
|
安定版用のセキュリティーアップデート(重要) |
http://security.debian.org/ |
testing/updates
|
テスト版用のセキュリティーアップデート(重要) |
http://volatile.debian.org/debian-volatile/ |
volatile
|
スパムフィルターやIMクライアント他用のコンパチブルなアップデート |
http://volatile.debian.org/debian-volatile/ |
volatile-sloppy
|
スパムフィルターやIMクライアント他用のノンコンパチブルなアップデート |
http://backports.org/debian/ |
lenny-backports
|
lennyのためのバックポートされたパッケージ(非正規、任意) |
![]() |
注意 |
---|---|
セキュリティーアップデートされた純粋な安定版 |
![]() |
注意 |
---|---|
基本的に、 |
![]() |
注記 |
---|---|
|
各Debianアーカイブは3つのコンポーネントから成り立っています。コンポーネントには"Debianポリシー"ではカテゴリーとか"Debian社会契約"ではエリアという別名が使われています。コンポーネントは"Debianフリーソフトウエアーガイドライン" (DFSG)に準拠しているかどうかによって分類されています。
表2.3 Debianアーカイブコンポーネントのリスト
コンポーネント | パッケージ数 | パッケージのクライテリア |
---|---|---|
main
|
26980 |
DSFGに完全準拠し、non-free のパッケージに非依存(main=主要)
|
contrib
|
180 |
DSFGに完全準拠だがnon-free のパッケージに依存有り(contrib=寄与)
|
non-free
|
401 | 非DSFG準拠 |
ここで、上記にあるパッケージ数はamd64アーキテクチャーに関する数字です。厳密に言うなら、main
コンポーネントのアーカイブのみをDebianシステムと考えるべきです。
Debianアーカイブの構成は、各アーカイブのURLの後ろにdists
かpool
をつけたURLにブラウザーを向ければ学習できます。
ディストリビューションは、スイーツとコード名の2つの方法で言及されます。この他にディストリビューションと言う言葉は多くの文書でスイーツの同義語としても使われています。スイーツとコード名の関係は次のようにまとめられます。
表2.4 スイーツとコード名の関係
タイミング |
スイーツ = 安定版 stable
|
スイーツ = テスト版 testing
|
スイーツ = 不安定版 unstable
|
---|---|---|---|
lenny リリース後
|
コード名 = lenny
|
コード名 = squeeze
|
コード名 = sid
|
squeeze リリース後
|
コード名 = squeeze
|
コード名 = squeeze+1
|
コード名 = sid
|
コード名の歴史は、Debian FAQ: 6.3.1 Which other codenames have been used in the past?に記載されています。
比較的厳格なDebianアーカイブの用語法では、"セクション"という言葉はアプリケーションの分野によるパッケージ分類に特化して使われます。(しかし、"mainセクション"という言葉はmainコンポーネントを提供するDebianアーカイブ部分を表現するのにしばしば使われています。)
Debianデベロッパー(DD)が不安定版unstable
アーカイブに新たなアップロードを(incomingでの処理を経由して)する度毎に、アップロードするパッケージが最新の不安定版unstable
アーカイブの最新のパッケージ集合とコンパチブルであるようにする義務がDDにはあります。
重要なライブラリーのアップグレード他の理由でDDがこのコンパチビリティーを壊す際には、debian-develのメーリングリスト他に通常アナウンスがされます。
Debianのアーカイブ管理スクリプトによって非安定版unstable
アーカイブからテスト版testing
アーカイブへパッケージ集合が移動される前に、アーカイブ管理スクリプトはパッケージの成熟度(約10日経過)とRCバグレポート状況を確認するばかりでなく、テスト版testing
アーカイブの最新パッケージ集合とのコンパチブルであるようにするように努めます。このプロセスがあるので、テスト版testing
アーカイブは非常に新しくかつ使いやすいのです。
リリースチームによる徐々のアーカイブ凍結過程を通じて、少々の手動の介入を伴いつつテスト版testing
アーカイブは完全に整合性をもったバグの無い状態へと徐々に熟成されます。そして、古いテスト版testing
アーカイブのコード名を新たな安定版stable
アーカイブへと割り当て、新たなコード名を新たなテスト版testing
アーカイブへと割り当てることで、新たな安定版stable
がリリースされます。新たなテスト版testing
アーカイブの当初の内容は、新たにリリースされた安定版stable
アーカイブとまったく同じです。
不安定版unstable
もテスト版testing
アーカイブもともにいくつかの要因で一時的に細かな問題発生があるかもしれません。
unstable
にて)
unstable
にて)
testing
とunstable
の両方にて)。
testing
にて)、等。
もしこれらのアーカイブを使おうと考えるなら、この種の細かな問題の修復や回避は必須技能です。
![]() |
注意 |
---|---|
たとえいつも非安定版 |
![]() |
ティップ |
---|---|
テスト版 |
アーカイブの定義は、Debianポリシーマニュアルを参照下さい。
Debianシステムはコントロールファイル中のバージョン情報付きのバイナリー依存関係宣言を通して整合性のあるバイナリーパッケージの集合を提供します。ここにその少々簡素化し過ぎの定義を示します。
"Depends"
"Pre-Depends"
"Recommends"
"Suggests"
"Enhances"
"Conflicts"
"Replaces"
"Provides"
![]() |
注記 |
---|---|
正常な設定として"Provides"と"Conflicts"と"Replaces"とを単一バーチャルパッケージに対し同時宣言することがあります。こうするといかなる時にも当該バーチャルパッケージを提供する実パッケージのうち確実に一つだけがインストールされます。 |
ソースの依存関係をも含む正式の定義はthe Policy Manual: Chapter 7 - Declaring relationships between packagesにあります。
パッケージ管理の簡略化されたイベントの流れをまとめると次のようになります。
更新 ("aptitude
update
"か"apt-get update
"):
アップグレード("aptitude
safe-upgrade
"と"aptitude
full-upgrade
"か、"apt-get
upgrade
"と"apt-get dist-upgrade
"):
インストール ("aptitude install
...
"か"apt-get install ...
"):
削除 ("aptitude remove
...
"か"apt-get remove ...
"):
完全削除 ("aptitude purge
...
"か"apt-get purge ...
"):
上記では全体像の理解のためにわざと技術詳細を端折っています。
内容が正確な正式文書を読むように心がけるべきです。まずDebianに特定のことが記載された"/usr/share/doc/<package_name>/README.Debian
"を最初に読むべきです。また"/usr/share/doc/<package_name>/
"の中にある他の文書も参照すべきです。「Bashのカスタム化」に書かれたようなシェル設定がされていれば、次のようにタイプして下さい。
$ cd <package_name> $ pager README.Debian $ mc
さらに詳しい情報を得るには"-doc
"というサフィクスを持った対応する文書パッケージをインストールする必要があるかもしれません。
特定パッケージに関する問題に出会った際には、Debianバグトラッキングシステム(BTS)サイトを必ず確認します。
表2.5 特定パッケージの問題解決のためのキーとなるウェッブサイトのリスト
ウェッブサイト | コマンド |
---|---|
Debianバグトラッキングシステム(BTS)のホームページ |
sensible-browser "http://bugs.debian.org/"
|
既知のパッケージに関するバグレポート |
sensible-browser
"http://bugs.debian.org/<package_name>"
|
既知のバグ番号に関するバグレポート |
sensible-browser
"http://bugs.debian.org/<bug_number>"
|
"site:debian.org
"や"site:wiki.debian.org
"や"site:lists.debian.org
"等を含む検索語でGoogleを検索します。
バグ報告をする際には、reportbug
(1)コマンドを使います。
AptitudeはDebianシステムで現在推薦されるパッケージ管理ツールです。apt-get
/
apt-cache
をコマンドラインで代替もしますし、またフルスクリーンのインタラクティブなパッケージ管理ツールとしても使えます。
パッケージをインストールしたりパッケージのメタデーターを更新するようなパッケージ管理操作にはroot権限が必要です。
aptitude
(8)やapt-get
(8)
/apt-cache
(8)を使うコマンドラインによるパッケージ管理操作を次に記します。
表2.6 aptitude
(8)やapt-get
(8)
/apt-cache
(8)を使うコマンドラインによる基本パッケージ管理操作を次に記します。
aptitude シンタックス
|
apt-get /apt-cache シンタックス
|
説明 |
---|---|---|
aptitude update
|
apt-get update
|
パッケージアーカイブメタデーター更新 |
aptitude install foo
|
apt-get install foo
|
"foo "パッケージの候補バージョンをその依存関係とともにインストール
|
aptitude safe-upgrade
|
apt-get upgrade
|
他のパッケージを削除すること無くインストール済みパッケージの候補バージョンをインストール |
aptitude full-upgrade
|
apt-get dist-upgrade <パッケージ>
|
必要なら他のパッケージを削除しながらインストール済みパッケージの候補バージョンをインストール |
aptitude remove foo
|
apt-get remove foo
|
設定ファイルを残したまま"foo "パッケージを削除
|
N/A |
apt-get autoremove
|
既に必要なくなっている自動済みパッケージを削除 |
aptitude purge foo
|
apt-get purge foo
|
設定ファイルを含めて"foo "パッケージを完全削除
|
aptitude clean
|
apt-get clean
|
収集されローカルに貯蔵されたパッケージファイルを完全消去 |
aptitude autoclean
|
apt-get autoclean
|
収集されローカルに貯蔵されたパッケージファイルのうち古くなったパッケージを消去 |
aptitude show foo
|
apt-cache show <パッケージ>
|
"foo "パッケージに関する詳細情報を表示
|
aptitude search <regex>
|
apt-cache search <regex>
|
<regex>とマッチするパッケージを検索 |
aptitude why <regex>
|
N/A | なぜ<regex>とマッチするパッケージがインストールされるのかを説明 |
aptitude why-not <regex>
|
N/A | なぜ<regex>とマッチするパッケージがインストールされないのかを説明 |
Debianシステム上の異なったパッケージツールを混用しても問題が起こらなくなりましたが、できるだけaptitude
を使い続けるのが最善です。
"safe-upgrade
"/"upgrade
"と"full-upgrade
"/"dist-upgrade
"の違いは新しいバージョンのパッケージが該当する古いバージョンと異なった依存関係がある場合にのみ起こります。"aptitude
safe-upgrade
"コマンドは新規のパッケージをインストールも削除もしません。
"aptitude why <regex>
"は"aptitude -v why
<regex>
"とすることでさらに詳しい情報を表示します。同様の情報は"apt-cache
rdepends <package>
"とすることでも得られます。
aptitude
コマンドが最初コマンドラインモードで実行されパッケージ間のコンフリクトのような問題に直面した場合は、プロンプトがでた際に"e
"を押すことでフルスクリーンのインタラクティブモードに切り替えられます。
"aptitude
"のすぐ後ろにコマンドオプションをつけられます。
表2.7 aptitude
(8)に関する特記すべきコマンドオプション
コマンドオプション | 説明 |
---|---|
-s
|
コマンド結果のシミュレート |
-d
|
インストール/アップグレード無しにダウンロードのみする |
-D
|
自動的なインストールや削除の前に簡単な説明を表示 |
詳細はaptitude
(8)や"/usr/share/doc/aptitude/README
"にある"aptitude
user's manual"を参照下さい。
![]() |
ティップ |
---|---|
現在でも存続している |
インタラクティブなパッケージ管理のためにはaptitude
をインタラクティブモードでコンソールのシェルプロンプトから次のように立ち上げます。
$ sudo aptitude -u Password:
これによりアーカイブ情報のローカルコピーは更新され、フルスクリーンのパッケージリストがメニュー付きで表示されます。Aptitudeの設定ファイルは"~/.aptitude/config
"にあります。
![]() |
ティップ |
---|---|
userの設定ファイルでなくrootの設定ファイルを使いたい際には、上記の例で" |
![]() |
ティップ |
---|---|
|
パッケージの状態を閲覧し、"予定のアクション"の設定をこのフルスクリーンモードで各パッケージするための重要なキーを次に記します。
表2.8 aptitudeのキーバインディングのリスト
キー | キーバインディング |
---|---|
F10 もしくくはCtrl-t
|
メニュー |
?
|
(より詳細な)キーの意味のヘルプの表示 |
F10 → ヘルプ → ユーザーマニュアル
|
ユーザーマニュアルの表示 |
u
|
パッケージアーカイブ情報の更新 |
+
|
パッケージをアップグレードまたはインストールするとマーク |
-
|
パッケージを削除するとマーク(設定ファイルは温存) |
_
|
パッケージを完全削除するとマーク(設定ファイルも削除) |
=
|
パッケージをホールド |
U
|
全てのアップグレード可能なパッケージをマーク(full-upgradeとして機能) |
g
|
選ばれたパッケージのダウンロードとインストールをスタート |
q
|
現在のスクリーンを終了し変更を保存 |
x
|
現在のスクリーンを終了し変更を廃棄 |
Enter
|
パッケージに関する情報閲覧 |
C
|
パッケージの変更履歴を閲覧 |
l
|
表示されるパッケージの制限を変更 |
/
|
最初のマッチを検索 |
\
|
最終検索の反復 |
コマンドラインのファイル名の規定や、"l
"や"/
"を押した後のメニュープロンプトは次に記すaptitudeのregex(正規表現)が使われます。aptitudeのregexは"~n
"で始めそれにパッケージ名を続けた文字列を使うことで明示的にパッケージ名とマッチさせられます。
![]() |
ティップ |
---|---|
ビジュアルインターフェースで全てのインストール済みパッケージを候補バージョンにアップグレードさせるには" |
インタラクティブなフルスクリーンモードのaptitude
(8)はパッケージリスト中のパッケージは次の例のように表示されます。
idA libsmbclient -2220kB 3.0.25a-1 3.0.25a-2
上記の行は左から次に記すような意味です。
![]() |
ティップ |
---|---|
" |
現在のローカルの環境設定によって候補バージョンは選ばれます(apt_preferences
(5)と「候補バージョンの調整」を参照)。
"表示
"メニューの下に数種のパッケージ表示があります。
表2.9 aptitudeの表示のリスト
表示 | 状況 | ビューの説明 |
---|---|---|
パッケージ画面
|
良好 | 表2.10「標準パッケージ画面の分類」参照(デフォールト) |
推奨を監査
|
良好 | 何らかのインストール済みパッケージによって推薦されているがインストールされていないパッケージをリスト |
平坦なパッケージリスト
|
良好 | パッケージを分類せずにリスト(regexとともに使用) |
Debtags表示
|
十分使える | パッケージのdebtagsのエントリーにより分類したパッケージをリスト |
カテゴリー別表示
|
非推奨 |
パッケージのカテゴリー別に分類してパッケージをリスト(これに代えてDebtags表示 を利用しましょう)
|
![]() |
注記 |
---|---|
パッケージのdebtagsによるタグ付け状況を改善するのにご協力下さい! |
標準"パッケージ画面
"はパッケージをdselect
にいくつかの機能を加えた感じで分類します。
表2.10 標準パッケージ画面の分類
分類 | ビューの説明 |
---|---|
更新可能なパッケージ
|
section → component →
package と整理してパッケージをリスト
|
新規パッケージ
|
, , |
インストール済みのパッケージ
|
, , |
インストールされていないパッケージ
|
, , |
廃止された、またはローカルで作成されたパッケージ
|
, , |
仮想パッケージ
|
同一機能のパッケージをリスト |
タスク
|
タスクに一般的に必要な機能を持つパッケージのリスト |
![]() |
ティップ |
---|---|
|
Aptitudeはそのregex式機能を通してパッケージを探索する方法をいくつか提供します。
シェルコマンドライン:
aptitude search
'<aptitude_regex>'
"
aptitude show '<package_name>'
"
対話型フルスクリーンモード:
l
"
/
"
\
"
n
"
N
"
![]() |
ティップ |
---|---|
<package_name>という文字列は、" |
aptitudeのregex式はmutt的な拡張ERE(「正規表現」参照)でaptitude
に特定なマッチ規則の拡張は次に示すとおりです。
表2.11 aptitudeのregex式のリスト
拡張マッチ規則の説明 | regex式 |
---|---|
パッケージ名とのマッチ |
~n<名前のregex>
|
記述とのマッチ |
~d<記述のregex>
|
タスク名とのマッチ |
~t<タスクのregex>
|
debtagとのマッチ |
~G<debtagのregex>
|
メンテナとのマッチ |
~m<maintainerのregex>
|
パッケージセクションとのマッチ |
~s<セクションのregex>
|
パッケージバージョンとのマッチ |
~V<バージョンのregex>
|
アーカイブ(archive)とのマッチ |
~A{sarge,etch,sid }
|
オリジン(origin)とのマッチ |
~O{debian,… }
|
優先度(priority)とのマッチ |
~p{extra,important,optional,required,standard }
|
必須(essential)パッケージとのマッチ |
~E
|
仮想パッケージとのマッチ |
~v
|
新規パッケージとのマッチ |
~N
|
次のアクションとのマッチ |
~a{install,upgrade,downgrade,remove,purge,hold,keep }
|
インストール済みパッケージとのマッチ |
~i
|
A-マークのついたインストール済みパッケージとマッチ(自動インストール済みパッケージ) |
~M
|
A-マークのついていないインストール済みパッケージとマッチ(管理者が選択したパッケージ) |
~i!~M
|
インストール済みかつアップグレード可能なパッケージとマッチ |
~U
|
削除済みだが完全削除されていないパッケージとマッチ |
~c
|
削除済みか完全削除済みか削除可能なパッケージとマッチ |
~g
|
パッケージ依存関係が壊れたパッケージとマッチ |
~b
|
depends/predepends/conflictの依存関係が壊れたパッケージとマッチ |
~B<type>
|
<term>パッケージに対して<type>の依存関係があるパッケージとマッチ |
~D[<type>:]<term>
|
<term>パッケージに対して<type>の壊れた依存関係があるパッケージとマッチ |
~DB[<type>:]<term>
|
<term>パッケージに対して<type>の依存関係があるパッケージとマッチ |
~R[<type>:]<term>
|
<term>パッケージに対して<type>の壊れた依存関係があるパッケージとマッチ |
~RB[<type>:]<term>
|
他のインストール済みパッケージが依存するパッケージとマッチ |
~R~i
|
他のインストール済みパッケージが一切依存しないパッケージとマッチ |
!~R~i
|
他のインストール済みパッケージが依存もしくは推薦するパッケージとマッチ |
~R~i|~Rrecommends:~i
|
フィルターされたバージョンの<term>とマッチ |
~S filter <term>
|
常に全てのパッケージにマッチ(真) |
~T
|
どのパッケージにもマッチしない(偽) |
~F
|
^
"や".*
"や"$
"などを使うegrep
(1)やawk
(1)やperl
(1)といった典型的なUnix的テキストツールで使われるEREと同様です。
![]() |
ティップ |
---|---|
<regex_pattern>がヌル文字列の場合は" |
次がショーとカットです。
~P<term>
" ==
"~Dprovides:<term>
"
~C<term>
" ==
"~Dconflicts:<term>
"
…~W term
" == "(…|term)
"
muttが表現のお手本なので、mutt
に慣れているユーザーはすぐ慣れるでしょう。"User's Manual"
("/usr/share/doc/aptitude/README
")中の"SEARCHING, LIMITING,
AND EXPRESSIONS"を参照下さい。
![]() |
注記 |
---|---|
|
aptitude
によるパッケージの選択は、"F10
→ Options →
Dependency
handling"のメニュー設定に従って、"Depends:
"リストに規定されたパッケージばかりでは無く"Recommends:
"リストに規定されたパッケージも引き込みます。このような自動的にインストールされたパッケージは不要になるとaptitude
が自動的に削除します。
![]() |
注記 |
---|---|
|
パッケージアクティビティーの履歴はログファイルで確認できます。
表2.12 パッケージアクティビティーのログファイル
ファイル | 内容 |
---|---|
/var/log/dpkg.log
|
全パッケージアクティビティのdpkg レベルのアクティビティーのログ
|
/var/log/apt/term.log
|
APTアクティビティのログ |
/var/log/aptitude
|
aptitude コマンドアクティビティのログ
|
これらのログから意味のある理解を迅速に得るのは実際には難しいです。より簡単な方法については「設定ファイルの変更記録」を参照下さい。
Aptitudeは他のAPT準拠のパッケージシステム(apt-get, apt-cache, synaptic, …)と比べて次の有利な点があります。
aptitude
は独自の追加層(/var/lib/aptitude/pkgstates
)を使用して自動インストールされ使われなくなったパッケージを自動的に削除します。(新しいlenny
では、他のAPTも同様のことをします。)
aptitude
を使うことでパッケージ間のコンフリクト解消や推薦パッケージの追加がしやすくなります。
aptitude
を使うことで"廃止された、またはローカルで作成されたパッケージ"の下にリストすることで廃止ソフトウェアを追跡がしやすくなります。
aptitude
は"/var/log/aptitude
にその履歴記録を残します。
aptitude
を使うことで利用可能な全てのバージョンのパッケージにアクセスできます。
aptitude
には特定パッケージを探したり表示を制限するためのかなり強力なregexシステムがあります。
aptitude
はsu
機能がついているので本当に管理権限が必要になるまでは通常のユーザーからの実行ができます。
旧式のetch
リリースのバージョンでは、synaptic
も履歴記録がありました。またapt-get
には履歴記録がありませんでしたが、dpkg
の記録に頼れました。
何れにせよaptitude
はコンソールでのインタラクティブな使用に好適です。
aptitude
(8)操作例を次に示します。
次のコマンドはパッケージの名前がregexにマッチするパッケージをリストします。
$ aptitude search '~n(pam|nss).*ldap' p libnss-ldap - NSS module for using LDAP as a naming service p libpam-ldap - Pluggable Authentication Module allowing LDAP interfaces
これはパッケージの正確な名前を探すときに非常に便利です。
"平坦なパッケージリスト"のビューで"l
"のプロンプトにregex"~dipv6
"を入れるとその意味にマッチするパッケージにビューが制限され、その情報をインタラクティブに閲覧できます。
削除したパッケージが残した全ての設定ファイルを次のようにして完全削除できます。
次のコマンドの結果をチェックします。
# aptitude search '~c'
もしリストされたパッケージが完全削除されても問題ないなら、次のコマンドを実行します。
# aptitude purge '~c'
同様のことをインタラクティブにすればよりきめの細かい結果が得られます。
"平坦なパッケージリスト"のビューで"l
"のプロンプトにregex"~c
"を入れるとregexにマッチする"削除されたが完全さ駆除されていない"パッケージにビューが制限されます。トップレベルの見出しの上で"[
"を押すとregexにマッチする全てのパッケージが表示されます。
次に"インストール済みのパッケージ"等のトップレベルの見出しの上で"_
"を押します。その見出しの下のregexにマッチするパッケージだけが完全削除と設定されます。インタラクティブに個々のパッケージの上で"=
"を押せばそれらのパッケージを完全削除対象から外せます。
このテクニックは非常に便利で、他の多くのコマンドキーでも使えます。
(非aptitudeのパッケージインストーラー等を使った後で)パッケージの自動/手動インストールの状態を整理する私の方法を次に記します。
aptitude
をrootとしてインタラクティブに起動します。
u
"と"U
"と"f
"と"g
"とタイプしてパッケージリストを更新しパッケージをアップグレードします。
~i(~R~i|~Rrecommends:~i)
"と入力するために"l
"とタイプし、自動インストールとなるよう"M
"と"インストール済みのパッケージ"の上でタイプします。
~prequired|~pimportant|~pstandard|~E
"と入力するために"l
"とタイプし、手動インストールとなるよう"m
"と"インストール済みのパッケージ"の上でタイプします。
~i!~M
"と入力するために"l
"とタイプし、"インストール済みのパッケージ"の上で"[
"とタイプしてパッケージを見えるようにした後で個々のパッケージの上で"-
"とタイプして使っていないパッケージを削除します。
~i(~R~i|~Rrecommends:~i)
"と入力するように"l
"とタイプし、"インストール済みのパッケージ"の上で自動インストールとなるよう"M
"とタイプします。
aptitude
を終了します。
apt-get -s autoremove|less
"とrootから起動して何が使われていないのか確認します。
aptitude
とインタラクティブモードで再起動して必要なパッケージを"m
"でマークします。
apt-get -s
autoremove|less
"とrootから再起動して削除対象が期待にかなっていることを再確認します。
apt-get autoremove|less
"とrootから起動して使用していないパッケージを自動削除します。
"Tasks
"の上で"m
"を押すのも一案で、大量ファイル除去となる事態が回避できます。
![]() |
注記 |
---|---|
新規リリース等への移行は、Debianでは下記のようにアップグレードできるのですが、新たなシステムをクリーンインストールすることを考えるべきです。こうすると溜めてきたゴミの除去ができる上に最新のパッケージの最良の組み合わせも分かります。もちろん安全な場所に完全なシステムのバックアップ(「バックアップと復元」参照)を事前にしなくてはいけません。異なったパーティションを使ったデュアルブート設定をすることをスムーズな移行をするためにお薦めします。 |
"/etc/apt/sources.list
"ファイルの内容を新規リリースへと向けるように変更し、"aptitude
update; aptitude full-upgrade
"コマンドを実行することでシステム全体のアップグレードができます。
安定版stable
からテスト版testing
や不安定版unstable
にアップグレードするには、「Debianアーカイブの基本」にある"/etc/apt/sources.list
"例の"lenny
"を"squeeze
"か"sid
"に置き換えます。
一部のパッケージで移行に関して支障をきたすことが実際には起こるかもしれません。これは大体パッケージ依存関係に起因します。アップグレードする差が大きければ大きいほど比較的大きな問題似合う可能性がより大きくなります。以前の安定版stable
からリリース後の新規安定版stable
への移行では新規リリースノートを読んでそこに記載された手続き通りに完全にすれば問題発生を防げます。
安定版stable
からテスト版testing
へ移行すると決めた時には頼りにするリリースノートはありません。前回の安定版stable
のリリースの後で安定版stable
とテスト版testing
の差がかなり大きくなっているかもしれません。そうだとアップグレードをする状況は複雑になっています。
メーリングリストから最新情報を収集するとか常識を使うといった予防措置をしながらフルアップグレードをするべきです。
script
(1)を使ってアップグレード活動を記録します。
aptitude unmarkauto
vim
"等として、"unmarkauto"を重要なパッケージに適用します。
/etc/apt/preferences
"ファイルを削除します(apt-pinningを無効化)。
oldstable
→
安定版stable
→ テスト版testing
→
不安定版unstable
。
/etc/apt/sources.list
"ファイルを更新して新アーカイブ対象に"aptitude
update
"を実行します。
aptitude install perl
"等として、先に新規の中核的パッケージを必要に応じてインストールします。
aptitude full-upgrade -s
"コマンドを実行して影響を確認します。
aptitude full-upgrade
"コマンドを実行します。
![]() |
注意 |
---|---|
|
![]() |
注意 |
---|---|
過去の"リリースノート"ではシステム全体のアップグレードをするのにGCCやLinuxカーネルやinitrd-toolsやGlibcやPerlやAPT tool chain等には特別な配慮が必要でした。 |
unstable
での毎日のアップグレードは「パッケージ問題からの防御」を参照下さい。
aptitude
ではハイレベル過ぎるとか必要な機能を欠くという他のパッケージ管理操作のリストです。
表2.13 高度なパッケージ管理操作
コマンド | アクション |
---|---|
COLUMNS=120 dpkg -l <パッケージ名パターン>
|
バグレポートのためのにインストールされたパッケージの状態をリスト |
dpkg -L <パッケージ名>
|
インストールされたパッケージの内容をリスト |
dpkg -L <パッケージ名> | egrep '/usr/share/man/man.*/.+'
|
インストールされたパッケージのマンページをリスト |
dpkg -S <ファイル名パターン>
|
マッチするファイル名があるインストールされたパッケージをリスト |
apt-file search <ファイル名パターン>
|
マッチするファイル名があるアーカイブ中のパッケージをリスト |
apt-file list <パッケージ名パターン>
|
アーカイブ中のマッチするパッケージをリスト |
dpkg-reconfigure <パッケージ名>
|
特定パッケージを再設定 |
dpkg-reconfigure -p=low <パッケージ名>
|
もっとも詳細な質問で特定パッケージを再設定 |
configure-debian
|
フルスクリーンメニューからパッケージを再設定 |
dpkg --audit
|
部分的にインストールされたパッケージに関してシステムを監査 |
dpkg --configure -a
|
全ての部分的にインストールされたパッケージを設定 |
apt-cache policy <バイナリーパッケージ名>
|
バイナリーパッケージに関して使用可能なバージョンやプライオリティーやアーカイブ情報を表示 |
apt-cache madison <パッケージ名>
|
パッケージに関して使用可能なバージョンやアーカイブ情報を表示 |
apt-cache showsrc <バイナリーパッケージ名>
|
バイナリーパッケージに関してソースパッケージの情報を表示 |
apt-get build-dep <パッケージ名>
|
パッケージをビルドするのに必要なパッケージをインストール |
apt-get source <パッケージ名>
|
(標準アーカイブから)ソースをダウンロード |
dget <dscファイルのURL>
|
(他のアーカイブから)ソースをダウンロード |
dpkg-source -x
<パッケージ名>_<バージョン>-<debianバージョン>.dsc
|
ソースパッケージの組("*.tar.gz "と"*.diff.gz ")からソースツリーをビルド
|
debuild binary
|
ローカルのソースツリーからパッケージをビルド |
make-kpkg kernel_image
|
カーネルソースツリーからカーネルパッケージをビルド |
make-kpkg --initrd kernel_image
|
カーネルソースツリーからinitramfsを有効にしてカーネルパッケージをビルド |
dpkg -i
<パッケージ名>_<バージョン>-<debianバージョン>_<アーキテクチャー名>.deb
|
ローカルパッケージをシステムにインストール |
debi
<パッケージ名>_<バージョン>-<debianバージョン>_<アーキテクチャー名>.dsc
|
ローカルパッケージ(複数)をシステムにインストール |
dpkg --get-selection '*' >selection.txt
|
dpkg レベルのパッケージ選択状態情報を保存
|
dpkg --set-selection <selection.txt
|
dpkg レベルのパッケージ選択状態情報を設定
|
![]() |
注意 |
---|---|
" |
以下に注意下さい。
aptitude
と異なり、他のパッケージ管理コマンドはシェルグロブ(「シェルグロブ」参照)のようなパターンを使います。
apt-file
パッケージに入っているapt-file
(1)は事前に"apt-file
update
"を実行する必要があります。
configure-debian
パッケージに入っているconfigure-debian
(8)はそのバックエンドとしてdpkg-reconfigure
(8)を実行します。
dpkg-reconfigure
(8)はそのバックエンドとしてdebconf
(1)を利用するパッケージスクリプトを実行します。
apt-get build-dep
"や"apt-get
source
"や"apt-cache
showsrc
"コマンドは"/etc/apt/sources.list
"の中に"deb-src
"エントリーが必要です。
dget
(1)やdebuild
(1)やdebi
(1)はdevscripts
パッケージが必要です。
apt-get source
"を使った(再)パッケージ化の手続きは「安定版システムへのパッケージ移植」を参照下さい。
make-kpkg
コマンドはkernel-package
パッケージが必要です(「カーネル」参照)。
![]() |
ティップ |
---|---|
ソースパッケージの組としてここで説明したソースパッケージのフォーマット(" |
debsums
をインストールするとdebsums
(1)を使って"/var/lib/dpkg/info/*.md5sums
"ファイル中のMD5sum値との比較でインストールされたパッケージファイルを検証できます。MD5sumがどのような仕組かは「MD5和」参照下さい。
![]() |
注記 |
---|---|
侵入者によってMD5sumのデーターベースが改竄されているかもしれないので |
多くのユーザーは新規機能やパッケージを求めてDebianシステムの非安定版unstableリリースを追いかけることを好みます。こういうことをするとクリティカルなパッケージのバグにシステムが遭遇しやすくなります。
apt-listbugs
パッケージをインストールすれば、APTシステムを使ってアップグレードする時にDebianのBTSを自動的にクリティカルなバグに関して点検することで、クリティカルなバグからあなたのシステムを防御できます。
apt-listchanges
パッケージをインストールすれば、APTシステムを使ってアップグレードする時にNEWS.Debian
中の重要ニュースを表示します。
最近はDebianサイトのhttp://packages.debian.org/を訪問するとパッケージメタデーターの検索を簡単に出きるようになっていますが、より伝統的な方法を見てみます。
grep-dctrl
(1)やgrep-status
(1)やgrep-available
(1)コマンドはDebianのパッケージコントロールファイルの一般的フォーマットに従ういかなるファイルを検索するのにも使えます。
マッチする名前のファイルを含むdpkg
でインストールされたパッケージ名を探索するのに"dpkg
-S <ファイル名パターン>
"が使えます。しかしメンテナスクリプトで生成されるファイルはこれでは見逃されます。
dpkgのメタデーターに関してより詳細な検索をする必要がある場合、"/var/lib/dpkg/info/
"ディレクトリーで"grep
-e regexパターン
*
"コマンドを実行しないといけません。こうすることでパッケージスクリプトやインストール時の質問テキスト中の言葉まで検索できます。
パッケージ依存関係を再帰的に検索したい際には、apt-rdepends
(8)を使います。
Debianのパッケージ管理システムが内部的のどのように機能するのかを学びます。何らかのパッケージ問題が発生した際にあなた自身の解決を見出すのに役立つでしょう。
各ディストリビューションのメタデーターのファイルは例えば"http://ftp.us.debian.org/debian/
"のような各Debianミラーサイトの"dist/<コード名>
"の下に保存されています。そのアーカイブ構造はウェッブブラウザーで閲覧できます。6つのタイプの重要メタデーターがあります。
表2.14 Debianアーカイブのメタデーターの内容
ファイル | 場所 | 内容 |
---|---|---|
Release
|
ディストリビューションのトップ | アーカイブの説明との整合性情報 |
Release.gpg
|
ディストリビューションのトップ |
アーカイブキーで署名された"Release "ファイルに関する署名ファイル
|
Contents-<アーキテクチャー>
|
ディストリビューションのトップ | 該当アーカイブ中全てのパッケージに関する全ファイルリスト |
Release
|
各ディストリビューション/コンポーネント/アーキテクチャーの組み合わせのトップ |
apt_preferences (5)のルールに利用されるアーカイブの記述。
|
Packages
|
各ディストリビューション/コンポーネント/バイナリーアーキテクチャーの組み合わせのトップ |
バイナリーパッケージに関してdebian/control を連結
|
Sources
|
各ディストリビューション/コンポーネント/ソースの組み合わせのトップ |
ソースパッケージに関してdebian/control を連結
|
最近のアーカイブではネットワークトラフィックを減らすべく圧縮された差分ファイルとしてこれらのメタデーターは保存されています。
![]() |
ティップ |
---|---|
セキュアーAPTシステムではトップレベルの"Release"ファイルがアーカイブを署名するのに使われています。 |
Debianアーカイブの各スイーツには例えば次に示すような"http://ftp.us.debian.org/debian/dists/unstable/Release
"のようなトップレベルの"Release"ファイルがあります。
Origin: Debian Label: Debian Suite: unstable Codename: sid Date: Sat, 26 Jan 2008 20:13:58 UTC Architectures: alpha amd64 arm hppa hurd-i386 i386 ia64 m68k mips mipsel powerpc s390 sparc Components: main contrib non-free Description: Debian x.y Unstable - Not Released MD5Sum: e9f11bc50b12af7927d6583de0a3bd06 22788722 main/binary-alpha/Packages 43524d07f7fa21b10f472c426db66168 6561398 main/binary-alpha/Packages.gz ...
![]() |
注記 |
---|---|
「Debianアーカイブの基本」の中で"スイーツ(suite)"や"コード名(codename)"や"コンポーネント(component)"を使う理由はこれを見れば分かるでしょう。"ディストリビューション"は"スイーツ"と"コード名"との両方を指したい際に用いられます。 |
トップレベルの"Release
"ファイルの整合性は セキュアーaptという暗号学手法インフラストラクチャーによって検証されます。
Release.gpg
"は真正のトップレベルの"Release
"ファイルと秘密のDebianアーカイブキーから作成されます。
公開のDebianアーカイブキーは"/etc/apt/trusted.gpg
"に取り込むには次のようにします。
base-files
パッケージを用いてキーリングをインストールすることで自動で取り込む。
gpg
かapt-key
ツールを用いて手動で取り込む。
Release.gpg
"ファイルと"/etc/apt/trusted.gpg
"中の公開アーカイブキーを用いてダウンロードされたトップレベルの"Release
"ファイルの整合性を暗号学手法を用いて検証します。
"全てのPackages
"と"Sources
ファイルの整合性はそのトップレベルの"Release
"ファイル中のMD5sum値を用いて検証します。"パッケージファイルの整合性は"Packages
"や"Sources
"ファイル中のMD5sum値を用いて検証します。debsums
(1)と「インストールされたパッケージファイルの検証」を参照下さい。
暗号学手法を用いた署名の検証はMD5sum値の計算よりも非常にCPUを使うプロセスなので、トップレベルの"Release
"ファイルには暗号学手法を用いた署名を使いつつ各パッケージにはMD5sum値を用いることでパーフォーマンスを保ったまま良好なセキュリティーが確保できます(「データーセキュリティーのインフラ」参照)。
![]() |
ティップ |
---|---|
アーカイブレベルの" |
"http://ftp.us.debian.org/debian/dists/unstable/main/binary-amd64/Release
"や"http://ftp.us.debian.org/debian/dists/sid/main/binary-amd64/Release
"等の"/etc/apt/sources.list
"中の"deb
"行で特定される全てのアーカイブロケーションにはアーカイブレベルの次に示すような"Release
"ファイルがあります。
Archive: unstable Component: main Origin: Debian Label: Debian Architecture: amd64
![]() |
注意 |
---|---|
" |
experimental
やvolatile-sloppy
やlenny-backports
のような自動的にインストールされるべきでないパッケージを含むような一部アーカイブでは次に示す"http://ftp.us.debian.org/debian/dists/experimental/main/binary-amd64/Release
"のような追加の行があります。
Archive: experimental Component: main Origin: Debian Label: Debian NotAutomatic: yes Architecture: amd64
"NotAutomatic:
yes
"となっていない通常のアーカイブではデフォールトのPin-Priority値は500ですが、"NotAutomatic:
yes
"となっている特別なアーカイブではデフォールトのPin-Priority値は1です(apt_preferences
(5)と「候補バージョンの調整」参照)。
aptitude
やapt-get
やsynaptic
やapt-file
やauto-apt
等のAPTツールが使われる際にはDebianアーカイブ情報を含むメタデーターのローカルコピーを更新する必要があります。この様なローカルのコピーは"/etc/apt/sources.list
"中のディストリビューション
とコンポーネント
とアーキテクチャー
の名前に対応する次のファイル名です(「Debianアーカイブの基本」参照)。
/var/lib/apt/lists/ftp.us.debian.org_debian_dists_<ディストリビューション>_Release
"
/var/lib/apt/lists/ftp.us.debian.org_debian_dists_<ディストリビューション>_Release.gpg
"
/var/lib/apt/lists/ftp.us.debian.org_debian_dists_<ディストリビューション>_<コンポーネント>_source_Sources
"
/var/lib/apt/lists/ftp.us.debian.org_debian_dists_<ディストリビューション>_<コンポーネント>_source_Sources
"
/var/cache/apt/apt-file/ftp.us.debian.org_debian_dists_<ディストリビューション>_Contents-<アーキテクチャー>.gz
"
(apt-file
用)
最初の4つのタイプのファイルは全ての適切なAPTコマンド間で共有されておりコマンドラインから"apt-get
update
"や"aptitude
update
"によって更新されます。もし"/etc/apt/sources.list
"中に"deb
"行があれば"Packages
"メタデーターが更新されます。もし"/etc/apt/sources.list
"中に"deb-src
"行があれば"Sources
"メタデーターが更新されます。
"Packages
"や"Sources
"メタデーターはバイナリーやソースパッケージのファイルの場所を指している"Filename:
"スタンザを含んでいます。現在、それらのパッケージはリリース間の移行を滞り無くするために"pool/
"ディレクトリーツリーの下に置かれています。
"Packages
"メタデーターのローカルコピーはaptitude
を使ってインタラクティブに検索できます。grep-dctrl
(1)という専用の検索コマンドを使うと"Packages
"と"Sources
"メタデーターのローカルコピーを検索できます。
"Contents-<アーキテクチャー>
"メタデーターのローカルコピーは"apt-file
update
"で更新でき、他の4つと異なるところにあります。apt-file
(1)を参照下さい。(auto-apt
では"Contents-<アーキテクチャー>.gz
"のローカルコピーがデフォールトでは異なるところにあります。)
lenny
以降のAPTツールではリモートから取得したメタデーターに追加でローカルで生成されるインストール状態情報を"/var/lib/apt/extended_states
"に保存して、自動インストールされた全パッケージを全てのAPTツールで追跡するのに用います。
aptitude
コマンドではリモートから取得したメタデーターに追加でローカルで生成されるインストール状態情報を"/var/lib/aptitude/pkgstates
"に保存して用いています。
Debianのパッケージファイルには特定の名前の構造があります。
表2.15 Debianパッケージの名前の構造
パッケージタイプ | 名前の構造 |
---|---|
バイナリーパッケージ(所謂deb) |
<パッケージ名>_<エポック>:<アップストリームのバージョン>-<debianのバージョン>-<アーキテクチャー>.deb
|
debianインストーラーのためのバイナリーパッケージ(所謂udeb) |
<パッケージ名>_<エポック>:<アップストリームのバージョン>-<debianのバージョン>-<アーキテクチャー>.udeb
|
ソースパッケージ(アップストリームのソース) |
<パッケージ名>_<エポック>:<アップストリームのバージョン>-<debianのバージョン>.tar.gz
|
ソースパッケージ(Debianの変更部分) |
<パッケージ名>_<エポック>:<アップストリームのバージョン>-<debianのバージョン>.diff.gz
|
ソースパッケージ(内容記述) |
<パッケージ名>_<エポック>:<アップストリームのバージョン>-<debianのバージョン>.dsc
|
表2.16 Debianパッケージ名の各部分に使用可能な文字
名前の部分 | 使用可能文字(regex) | 存在 |
---|---|---|
<パッケージ名>
|
[a-z,A-Z,0-9,.,
|
必須 |
<エポック>:
|
[0-9]+:
|
任意 |
<アップストリームのバージョン>
|
[a-z,A-Z,0-9,.,
|
必須 |
<debianのバージョン>
|
[a-z,A-Z,0-9,.,
|
任意 |
![]() |
注記 |
---|---|
パッケージバージョンの順位は |
![]() |
注記 |
---|---|
Debianインストーラー(d-i)のバイナリーパッケージには、通常の |
dpkg
(1)はDebianパッケージ管理の最も低レベルのツールです。非常に強力ですから気をつけて使う必要があります。
"<パッケージ名>
"というパッケージをインストールする際に、dpkg
は次に記す順番でパッケージを処理します。
ar -x
"と等価)
debconf
(1)を使い"<package_name>.preinst
"を実行
tar -x
"と等価)
debconf
(1)を使い"<package_name>.postinst
"を実行
debconf
システムによってI18NとL10N(8章I18NとL10N)のサポートのある標準化されたユーザーとの対話が実現できます。
表2.17 dpkg
が作成する特記すべきファイル
ファイル | 内容の説明 |
---|---|
/var/lib/dpkg/info/<パッケージ名>.conffiles
|
設定ファイルのリスト。(ユーザー変更可能) |
/var/lib/dpkg/info/<パッケージ名>.list
|
パッケージによりインストールされるファイルやディレクトリーのリスト |
/var/lib/dpkg/info/<パッケージ名>.md5sums
|
パッケージによりインストールされるファイルのMD5ハッシュ値のリスト |
/var/lib/dpkg/info/<パッケージ名>.preinst
|
パッケージインストールの前に実行するパッケージスクリプト |
/var/lib/dpkg/info/<パッケージ名>.postinst
|
パッケージインストールの後に実行するパッケージスクリプト |
/var/lib/dpkg/info/<パッケージ名>.prerm
|
パッケージ削除の前に実行するパッケージスクリプト |
/var/lib/dpkg/info/<パッケージ名>.prerm
|
パッケージ削除の前に実行するパッケージスクリプト |
/var/lib/dpkg/info/<パッケージ名>.conffiles
|
debconf システムのためのパッケージスクリプト
|
/var/lib/dpkg/alternatives/<パッケージ名>
|
update-alternatives コマンドが用いる代替情報
|
/var/lib/dpkg/available
|
すべてのパッケージの入手可能性情報 |
/var/lib/dpkg/diversions
|
dpkg (1)に用いられ、dpkg-divert (8)が設定する迂回情報。
|
/var/lib/dpkg/statoverride
|
dpkg (1)に用いられ、dpkg-statoverride (8)が設定する状態の上書き情報。
|
/var/lib/dpkg/status
|
全パッケージに関する状態情報 |
/var/lib/dpkg/status-old
|
"var/lib/dpkg/status "ファイルの第一世代のバックアップ
|
/var/backups/dpkg.status*
|
"var/lib/dpkg/status "ファイルの第二世代以前のバックアップ
|
"status
"ファイルはdpkg
(1)や"dselect
update
"や"apt-get -u
dselect-upgrade
"のようなツールによって使われます。
grep-dctrl
(1)という専用の検索コマンドを使うと"status
"と"available
"メタデーターのローカルコピーを検索できます。
![]() |
ティップ |
---|---|
デビアンインストーラー
環境下では、 |
Debianシステムにはupdate-alternatives
(8)を用いて何らかの重畳するプログラムを平和裏にインストールするメカニズムがあります。例えばvim
とnvi
の両方のパッケージがインストールされた状況下でvi
コマンドがvim
を選択して実行するようにできます。
$ ls -l $(type -p vi) lrwxrwxrwx 1 root root 20 2007-03-24 19:05 /usr/bin/vi -> /etc/alternatives/vi $ sudo update-alternatives --display vi ... $ sudo update-alternatives --config vi Selection Command ---------------------------------------------- 1 /usr/bin/vim *+ 2 /usr/bin/nvi Enter to keep the default[*], or type selection number: 1
Debianの代替(alternatives)システムは、その選択を"/etc/alternatives/
"の中のシムリンクとして保持します。選択プロセスには"/var/lib/dpkg/alternatives/
"の中の対応するファイルが使われます。
dpkg-statoverride
(8)コマンドで提供される状態の上書きは、パッケージをインストールする際にファイルに関して異なる所有者やモードを使うようdpkg
(1)に指示する方法です。もし"--update
"が指定されファイルが存在すれば、即座に新たな所有者やモードに設定されます。
![]() |
注意 |
---|---|
パッケージが所有するファイルの所有者やモードをシステム管理者が |
![]() |
注記 |
---|---|
ここでファイルと言いましたが、実際には |
非安定(unstable)
システムを動かす時には、管理者には壊れたパッケージ管理状況から復元できることが望まれます。
![]() |
注意 |
---|---|
ここで説明するいくつかの方法は非常にリスクが高いアクションです。警告しましたよ! |
もしデスクトップGUIプログラムが上流の大きなバージョンアップグレードの後に不安定性を経験した際には、そのプログラムが作った古いローカル設定ファイルとの干渉を疑うべきです。もし新規作成したユーザーアカウントでそのプログラムが安定なら、この仮説が裏付けられます。(これはパッケージングのバグで、通常パッケージャーによって回避されます。)
安定性を復元するには、対応するローカル設定ファイルを移動しGUIプログラムを再スタートします。後日設定情報を回復するために古い設定ファイルの内容を読む必要があるかもしれません。(あまり慌てて消去しないようにしましょう。)
aptitude
(8)やapt-get
(1)等の、アーカイブレベルのパッケージ管理システムはパッケージの依存関係を使って重複するファイルを持つファイルのインストールしようとさえしません(「パッケージ依存関係」参照)。
パッケージメインテナによるエラーや、システム管理者による不整合な混合ソースのアーカイブの採用(「混合したアーカイブソースからのパッケージ」参照)があった場合には、パッケージ依存関係が誤って定義される事態が発生するかもしれません。そういう状況下で重複するファイルを持つパッケージをaptitude
(8)やapt-get
(1)を使ってインストールしようとすると、パッケージを展開するdpkg
(1)は既存ファイルを上書きすることなく呼ばれたプログラムにエラーを確実に返します。
![]() |
注意 |
---|---|
第三者が作成したパッケージを使うと、root権限で実行されるシステムに関して何でもできるメンテナスクリプトが実行されるので、システムが重大なリスクにさらされます。 |
そのような壊れたインストール状況は、まず古い問題原因となっているパッケージ<old-package>
を削除すれば回避できます。
$ sudo dpkg -P <old-package>
パッケージスクリプト内のコマンドが何らかの理由でエラーを返しスクリプトがエラーで終了した場合には、パッケージ管理システムは動作を途中終了するので部分的にインストールされたパッケージのある状況が生まれます。パッケージがその削除スクリプト内にバグを持つ場合には、パッケージが削除不能になりうるので大変厄介です。
"<パッケージ名>
"のパッケージスクリプトの問題に関しては、次のパッケージスクリプトの内容を確認するべきです。
/var/lib/dpkg/info/<パッケージ名>.preinst
"
/var/lib/dpkg/info/<パッケージ名>.postinst
"
/var/lib/dpkg/info/<パッケージ名>.prerm
/var/lib/dpkg/info/<パッケージ名>.prerm
"
スクリプトの問題原因部分を次のようなテクニックを使いrootから編集します。
#
"を挿入し問題行を無効にする
|| true
"を挿入し成功を強制的に返さす
全ての部分的にインストールされたパッケージを次のコマンドで設定します。
# dpkg --configure -a
dpkg
は非常に低レベルのパッケージツールなのでネットワーク接続もないブート不能な非常に劣悪な状況下でも機能します。foo
パッケージが壊れていて置き換える必要があると仮定します。
バグの無い古いバージョンのfoo
パッケージが"/var/cache/apt/archives/
"にあるパッケージキャッシュの中に見つかるかもしれません。(ここにみつからなければ、http://snapshot.debian.net/アーカイブからダウンロードしたり、機能している機器のパッケージキャッシュからコピーできます。)
もしブート不可能な場合には、次のコマンドを使ってインストールすることもできます。
# dpkg -i /path/to/foo_<old_version>_<arch>.deb
![]() |
ティップ |
---|---|
システムがそれほど壊れていないなら、「緊急ダウングレード」に書かれているようにして、より高レベルのAPTシステムを通じてシステム全体をダウングレードする手もあります。 |
ハードディスクからブートできない場合は、他の方法でのブート方法を考えるべきです。
/target
"にマウントします。
foo
パッケージを次のようにしてインストールします。
# dpkg --root /target -i /path/to/foo_<old_version>_<arch>.deb
この例は、たとえハードディスク上のdpkg
コマンドが壊れていても機能します。
![]() |
ティップ |
---|---|
ハードディスク上の別のシステムであれ、GNU/LinuxのライブCDであれ、ブート可能なUSBキードライブであれ、ネットブートであれ、どのように起動されたGNU/Linuxシステムでも同様にして壊れたシステムを救済するのに使えます。 |
もしこの方法でパッケージをインストールしようとして何らかの依存関係違反のためにうまくいかなくてどうしようもなくなった場合には、dpkg
の"--ignore-depends
"や"--force-depends
"や他のオプションを使って依存関係をオーバーライドすることができます。こうした場合には、後で依存関係を修復するように真剣に取り組む必要があります。詳細はdpkg
(8)を参照下さい。
![]() |
注記 |
---|---|
システムがひどく壊れた場合には、システムを安全な場所に完全バックアップし(「バックアップと復元」参照)、クリー(see 「バックアップと復元」)ンインストールを実行するべきです。こうすることは時間お節約でもあり最終的に良い結果に結びつきます。 |
もし何らかの理由で"/var/lib/dpkg/status
"の内容が腐った場合には、Debianシステムはパッケージ選択データーが失われ大きな打撃を被ります。古い"/var/lib/dpkg/status
"ファイルは、"/var/lib/dpkg/status-old
"や"/var/backups/dpkg.status.*
"としてあるので探します。
"/var/backups/
"は多くの重要な情報を保持しているので、これを別のパーティション上に置くのも良い考えです。
ひどく壊れた場合には、システムのバックアップをした後フレッシュに再インストールすることをお薦めします。たとえ"/var/
"ディレクトリーの中が完全に消去されても、"/usr/share/doc/
"ディレクトリー中から新規インストールのガイドとなる情報を復元できます。
最低限の(デスクトップ)システムを再インストールします。
# mkdir -p /path/to/old/system
"/path/to/old/system/
"に古いシステムをマウントします。
# cd /path/to/old/system/usr/share/doc # ls -1 >~/ls1.txt # cd /usr/share/doc # ls -1 >>~/ls1.txt # cd # sort ls1.txt | uniq | less
こうすると、インストールすべきパッケージ名が表示されます。("texmf
"のようなパッケージ名以外が一部あるかもしれません。)
パッケージの説明や"Tasks"の下のリストを使ってあなたが必要なパッケージをaptitude
で見つけることができます。
2つ以上の似たパッケージに出会いが"試行錯誤"の努力無しにどのパッケージをインストールするか迷った際には、常識を使って下さい。次に示す点は好ましいパッケージの良い指標と考えます。
python
によるpython2.4
)
Debianは分散型の開発モデルのボランティアプロジェクトですので、そのアーカイブには目指すところや品質の異なる多くのパッケージがあります。これらをどうするかは自己判断をして下さい。
![]() |
注意 |
---|---|
|
testing
を追跡しながら、unstable
にある特定の新規アップストリームバージョンのパッケージを1回だけ取り入れる操作例を次に示します。
/etc/apt/sources.list
"ファイルを変更し、単一の"unstable
"エントリーのみにします。
aptitude update
"を実行します。
aptitude install <パッケージ名>
"の実行します。
testing
のためのオリジナルの"/etc/apt/sources.list
"ファイルを復元します。
aptitude update
"を実行します。
この様な手動のアプローチをすると"/etc/apt/preferences
"ファイルを作ることもないし、またapt-pinningについて悩むこともありません。でもこれではとても面倒です。
![]() |
注意 |
---|---|
混合したアーカイブソースを使うことをDebianが保証していないので、その場合にはパッケージ間の互換性は自分自身で確保しなければいけません。もしパッケージに互換性がないと、システムを壊すことになるかもしれません。この様な技術的要件を判断できる必要があります。ランダムな混合したアーカイブソースを使うことは全く任意の操作ですが、私としてはこの操作はお薦めできません。 |
異なるアーカイブからパッケージをインストールするための一般ルールは以下です。
非バイナリーパッケージのインストールは比較的安全です。
バイナリーパッケージ(非"Architecture:
all
")のインストールは、通常多くの障害があり、安全ではありません。
![]() |
注記 |
---|---|
パッケージを比較的安全にインストールできるようにするために、一部の商用non-freeバイナリープログラムパッケージは完全に静的にリンクされたライブラリーとともに提供される事があります。そんなパッケージに関してもABI互換性等の問題は確認するべきです。 |
![]() |
注記 |
---|---|
壊れたパッケージを短期的に避ける場合以外では、公式にサポートされていないアーカイブからバイナリーパッケージをインストールするのは一般的には賢明ではありません。たとえapt-pinning(「候補バージョンの調整」参照)を使った場合にもこれは当てはまります。chrootや類似のテクニック(「仮想化システム」参照)使って、他のアーカイブからのプログラムを実行するよう検討するべきです。 |
![]() |
警告 |
---|---|
|
"/etc/apt/preferences
"ファイル無しだと、APTシステムはバージョン文字列を用いて、最新バージョンを候補バージョンとします。これが通常状態でAPTシステムの最も推薦される使い方です。全ての公式にサポートされたアーカイブの組み合わせは、自動的にアップグレードするソースとすべきでないアーカイブはNotAutomaticとマークされていて適切な扱いを受けるので、"/etc/apt/preferences
"ファイルを必要としません。
![]() |
ティップ |
---|---|
バージョン文字列比較ルールは、例えば" |
パッケージを混合したアーカイブからのソース(「混合したアーカイブソースからのパッケージ」参照)から定常的にインストールする場合には、apt_preferences
(5)に書かれたように適切な項目のある"/etc/apt/preferences
"ファイルを作り候補バージョンに関するパッケージ選択ルールを操作することによってこういった複雑な操作を自動化できます。これをapt-pinningと呼びます。
![]() |
警告 |
---|---|
初心者のユーザーによるapt-pinningの利用は大トラブル発生を間違いなく起こします。本当に必要な時以外はapt-pinningの利用は避けなければいけません。 |
![]() |
注意 |
---|---|
apt-pinningを利用する際には、Debianはパッケージの互換性を保証しないので、ユーザー自身がパッケージの互換性を確保しなければいけません。apt-pinningは全く任意の操作で、著者が使うようにと勧めているわけではありません。 |
![]() |
注意 |
---|---|
アーカイブレベルのReleaseファイル(「アーカイブレベルの"Release"ファイル」参照)が |
![]() |
注意 |
---|---|
非Debianアーカイブをapt-pinningの一部に使う場合には、それが提供されている対象の確認とその信頼性の確認をします。例えば、UbuntuとDebianは混合して使うようにはなっていません。 |
![]() |
注記 |
---|---|
" |
単純化したapt-pinningテクニックの説明を次にします。
APTシステムは"/etc/apt/sources.list
"ファイル中に規定された使えるパッケージソースから最高のPin-Priorityでアップグレードするパッケージを候補バージョンパッケージとして選択します。パッケージのPin-Priorityが1000より大きい場合には、このアップグレードするというバージョン制約が外れるのでダウングレードできるようになります(「緊急ダウングレード」参照)。
各パッケージのPin-Priority値は"/etc/apt/preferences
"ファイル中の"Pin-Priority"項目にて規定されるか、そのデフォールト値が使われます。
表2.18 各パッケージソースタイプ毎のデフォールトPin-Priority値のリスト
デフォールトPin-Priority | パッケージソースタイプ |
---|---|
990 | ターゲットリリースアーカイブ |
500 | normal archive |
100 | installed package |
1 | NotAutomaticアーカイブ |
ターゲットのリリースアーカイブは次のようにして設定できます。
APT::Default-Release
"stable";
"行を使う"/etc/apt/apt.conf
"ファイル
apt-get install -t testing
some-package
"等の"-t
"オプションの引数
アーカイブ中のアーカイブレベルのReleaseファイル(「アーカイブレベルの"Release"ファイル」参照)に"NotAutomatic:
yes
"を含まれるとNotAutomaticアーカイブが設定されます。
複数アーカイブソースの<package>に関するPin-Priority値は"apt-cache policy
<package>
"の出力で表示されます。
Package
pin:
"で始まる行は、<package>のみとの関連付けが"Package pin:
0.190
"等と定義されている場合に、pinのパッケージバージョンを示します。
Package
pin:
"という行はありません。
0.181
700
"等としてリストされます。
0
"が"0.181
0
"等としてリストされます。
/etc/apt/preferences
"ファイル中に"Package:
*
"として定義)はアーカイブへのパスの左側に、"200 http://backports.org
etch-backports/main Packages
"等としてリストされます。
testing
を追跡しながら、unstable
にある特定の新規アップストリームバージョンのパッケージが定常的にアップグレードされる、apt-pinningテクニックの例を次に示します。全ての必要なアーカイブを"/etc/apt/sources.list
"ファイル中に次のようにリストします。
deb http://ftp.us.debian.org/debian/ testing main contrib non-free deb http://ftp.us.debian.org/debian/ unstable main contrib non-free deb http://security.debian.org/ testing/updates main contrib
"/etc/apt/preferences
"を次のように設定します。
Package: * Pin: release a=testing Pin-Priority: 500 Package: * Pin: release a=unstable Pin-Priority: 200
"<package-name>
"という名前のパッケージとその依存ファイルをunstable
アーカイブからこの設定の下でインストールしたい場合、"-t
"オプションを使ってターゲットリリースを切り替える(unstable
のPin-Priorityが990になる)次のコマンドを実行します。
$ sudo apt-get install -t unstable <package-name>
この設定では、通常の"apt-get upgrade
"や"apt-get
dist-upgrade
"
(もしくはsqueeze
の場合、"aptitude
safe-upgrade
"や"aptitude
full-upgrade
")の実行は、testing
アーカイブからインストールされたパッケージは最新のtesting
アーカイブを使ってアップグレードし、unstable
アーカイブからインストールされたパッケージは最新のunstable
アーカイブを使ってアップグレードします。
![]() |
注意 |
---|---|
" |
![]() |
ティップ |
---|---|
著者は上記操作のすぐ後に" |
![]() |
ティップ |
---|---|
もし" |
最初の"-t
unstable
"によるインストール無しに、unstable
の特定パッケージを自動的に追跡したい場合、"/etc/apt/preferences
"ファイルを作りそのトップにこれらパッケージを明示的に次のようにリストします。
Package: <package-1> Pin: release a=unstable Pin-Priority: 700 Package: <package-2> Pin: release a=unstable Pin-Priority: 700
以上で、各特定パッケージに関してPin-Priority値が設定されます。例えば最新のunstable
バージョンのこの"Debianリファレンス"を英語版で追跡するためには、"/etc/apt/preferences
"ファイルに次の項目を設定します。
Package: debian-reference-en Pin: release a=unstable Pin-Priority: 700 Package: debian-reference-common Pin: release a=unstable Pin-Priority: 700
![]() |
ティップ |
---|---|
このapt-pinningテクニックは |
次にunstable
を追跡しながらexperimental
にある特定の新規アップストリームバージョンのパッケージを取り込むapt-pinningテクニックの例を示します。すべての必要なアーカイブを"/etc/apt/sources.list
"ファイルに次のようにリストします。
deb http://ftp.us.debian.org/debian/ unstable main contrib non-free deb http://ftp.us.debian.org/debian/ experimental main contrib non-free deb http://security.debian.org/ testing/updates main contrib
experimental
アーカイブのデフォールトのPin-Priority値は、NotAutomaticアーカイブ(「アーカイブレベルの"Release"ファイル」参照)なので、常に1(<<100)です。experimental
アーカイブにある特定パッケージを次回アップグレード時に自動的に追跡しようとしない限り、"/etc/apt/preferences
"ファイル中でexperimental
アーカイブを使うためにPin-Priority値を明示的に設定する必要はありません。
stable
のためのアップグレードパッケージを提供する、debian-volatile projectとbackports.orgアーカイブがあります。
![]() |
警告 |
---|---|
|
![]() |
注意 |
---|---|
backports.orgは、提供しているパッケージがDebian開発者によってサインされているとはいえ、非Debianアーカイブです。 |
![]() |
注意 |
---|---|
アーカイブレベルのReleaseファイル(「アーカイブレベルの"Release"ファイル」参照)が |
次にlenny
とvolatile
を追跡しながらlenny-backports
にある特定の新規アップストリームバージョンのパッケージを取り込むapt-pinningテクニックの例を示します。すべての必要なアーカイブを"/etc/apt/sources.list"ファイルに次のようにリストします。
deb http://ftp.us.debian.org/debian/ lenny main contrib non-free deb http://security.debian.org/ lenny/updates main contrib deb http://volatile.debian.org/debian-volatile/ lenny/volatile main contrib non-free deb http://volatile.debian.org/debian-volatile/ lenny/volatile-sloppy main contrib non-free deb http://backports.org/debian/ lenny-backports main contrib non-free
backports.orgとvolatile-sloppy
アーカイブのデフォールトのPin-Priority値は、NotAutomaticアーカイブ(「アーカイブレベルの"Release"ファイル」参照)なので、常に1(<<100)です。experimental
アーカイブにある特定パッケージを次回アップグレード時に自動的に追跡しようとしない限り、"/etc/apt/preferences
"ファイル中でbackports.orgとvolatile-sloppy
アーカイブを使うためにPin-Priority値を明示的に設定する必要はありません。
"<package-name>
"という名前のパッケージをその依存関係ともどもlenny-backports
アーカイブからインストールしたい時には、"-t
"オプションでターゲットリリースを切り替えながら次のコマンドを使います。
$ sudo apt-get install -t lenny-backports <package-name>
特定のパッケージをアップグレードしたいときには、"/etc/apt/preferences
"ファイルを作成しその中に全てのパッケージを次のように明示的にリストしなければいけません。
Package: <package-1> Pin: release o=Backports.org archive Pin-Priority: 700 Package: <package-2> Pin: release o=volatile.debian.org Pin-Priority: 700
また、"/etc/apt/preferences
"ファイルを次のようにしてもよい。
Package: * Pin: release a=stable , o=Debian Pin-Priority: 500 Package: * Pin: release a=lenny, o=volatile.debian.org Pin-Priority: 500 Package: * Pin: release a=lenny-backports, o=Backports.org archive Pin-Priority: 200 Package: * Pin: release a=lenny-sloppy, o=volatile.debian.org Pin-Priority: 200
"apt-get upgrade
"と"apt-get
dist-upgrade
" (もしくは、squeeze
では"aptitude
safe-upgrade
"と"aptitude
full-upgrade
")の実行は、stable
アーカイブからインストールされたパッケージを最新のstable
アーカイブを使ってアップグレードし、他のアーカイブからインストールされたパッケージを最新の"/etc/apt/sources.list
"ファイルに記載された全てのアーカイブの最新の対応するアーカイブを使ってアップグレードします。
apt
パッケージには、パッケージの自動ダウンロードのサポートする専用のcronスクリプト"/etc/cron.daily/apt
"が同梱されています。このスクリプトはunattended-upgrades
パッケージをインストールすることで自動アップグレード実行の機能拡張をします。これらは、"/usr/share/doc/unattended-upgrades/README
"に記述されているように、"/etc/apt/apt.conf.d/02backup
"と"/etc/apt/apt.conf.d/50unattended-upgrades
"の中のパラメーターでカスタム化できます。
unattended-upgrades
パッケージは基本的にstable
システムのセキュリティーアップグレードのためです。既存のstable
システムが、自動アップグレードで壊される危険性が、セキュリティーアップグレードがすでに閉じたセキュリティーホールからの侵入者によりシステムが壊わされる危険性より小さいなら、パラメーターを次のように設定して自動アップグレードをするのも一計です。
APT::Periodic::Update-Package-Lists "1"; APT::Periodic::Download-Upgradeable-Packages "1"; APT::Periodic::Unattended-Upgrade "1";
unstable
システムを使っている場合には、自動アップグレードするとシステムはいつの日か確実に壊われるので、それはしたくないでしょう。そんなunstable
の場合でも、次に記すような事前にパッケージをダウンロードするパラメーターを設定でインタラクティブなアップグレードをするための時間を節約したいでしょう。
APT::Periodic::Update-Package-Lists "1"; APT::Periodic::Download-Upgradeable-Packages "1"; APT::Periodic::Unattended-Upgrade "0";
APTによるダウンロードのバンド幅を例えば800Kib/sec (=100kiB/sec)に制限したい場合には、APTのパラメーターを次のように設定します。
APT::Acquire::http::Dl-Limit "800";
![]() |
注意 |
---|---|
Debianでは設計としてはダウングレードを正式にサポートしません。緊急の復元処置の一部としてのみ実行されるべきです。こういう状況であるにもかかわらず、多くの場合にうまく機能することがある知られています。重要なシステムでは回復処置の後に全ての重要データーをバックアップし、最初から新規システムを再インストールします。 |
壊れたシステムアップグレードからの復元するために、候補バージョンを操作して新しいアーカイブから古いアーカイブにダウングレードすることがうまくいくかもしれません(「候補バージョンの調整」参照)。これは、何度も"dpkg -i
<broken-package>_<old-version>.deb
"コマンドを実行する退屈な作業をしないでよくする方法です(「dpkgコマンドを使っての救済」参照)。
次に記すような"unstable
"を追跡する"/etc/apt/sources.list
"ファイル中の行を探します。
deb http://ftp.us.debian.org/debian/ sid main contrib non-free
それをtesting
を追いかけるように次と交換します。
deb http://ftp.us.debian.org/debian/ squeeze main contrib non-free
"/etc/apt/preferences
"を次のように設定します。
Package: * Pin: release a=testing Pin-Priority: 1010
そして、"apt-get
dist-upgrade
"を実行して、システム全体にわたってパッケージのダウングレードを強制します。
この緊急ダウングレードの後でこの特別の"/etc/apt/preferences
"ファイルを削除します。
![]() |
ティップ |
---|---|
依存関係の問題を最小限とすべく、できるだけ多くのパッケージを削除(removeで、完全削除purgeではありません!)します。システムのダウングレードのためには手動でいくつかのパッケージを削除とインストールしなければいけないかも知れません。LinuxカーネルやブートローダーやudevやPAMやAPTやネットワーク関係のパッケージやそれらの設定ファイルには特に注意が必要です。 |
"/var/lib/dpkg/available
"や"/usr/share/doc/package_name/changelog
"の中にリストされたメンテナの名前は"誰がパッケージ化活動の背後にいるのか"に関していくばくかの情報を提供しますが、パッケージを実際にアップロードをした人がはっきりしません。devscripts
パッケージ中のwho-uploads
(1)はDebianのソースパッケージを実際にアップロードした人を確定します。
ソースからプログラムをコンパイルしてDebianパッケージを置換えたい際には、それを実際にローカルでDebian化してパッケージ(*.deb
)して、私的アーカイブを使うのが好ましいです。
しかし、プログラムをソースからコンパイルして"/usr/local
"にインストールすることを選んだ際には、パッケージ依存関係を満足させるための最後の手段としてequivs
を使う必要があるかもしれません。
Package: equivs Priority: extra Section: admin Description: Circumventing Debian package dependencies This is a dummy package which can be used to create Debian packages, which only contain dependency information.
stable
システムの部分アップグレードのためには、その環境内でソースパッケージを使ってパッケージをリビルドするのが好ましいです。こうすることでパッケージ依存関係による大掛かりなアップグレードをしないで済みます。
stable
システムのための"/etc/apt/sources.list
"ファイルに次のエントリーを追加します。
deb-src http://http.us.debian.org/debian unstable main contrib non-free
コンパイルするのに必要なパッケージをインストールしソースパッケージをダウンロードをします。
# apt-get update # apt-get dist-upgrade # apt-get install fakeroot devscripts build-essential $ apt-get build-dep foo $ apt-get source foo $ cd foo*
必要があればパッケージを調整しましょう
次を実行します。
$ dch -i
"+bp1
"を後ろに付けるなどして、"debian/changelog
"中でパッケージバージョンを先に進める
次のようにしてパッケージをビルドしシステムにインストールします。
$ debuild $ cd .. # debi foo*.changes
Debianアーカイブの特定サブセクション全てをミラーするとディスク空間とネットワークのバンド幅の大いなる無駄遣いですので、LAN上に多くのシステムを管理している際にはAPTのためのローカルのプロキシサーバーを設置することを考えるのは良いことです。APTは、apt.conf
(5)
とか"/usr/share/doc/apt/examples/configure-index.gz
"に説明されたようにして、汎用のsquid
のような
ウェッブ(http)プロキシサーバー(「他のネットワークアプリケーションサーバー」参照)を使うように設定できます。"$http_proxy
"環境変数による設定は、"/etc/apt/apt.conf
"ファイル中の設定より優先します。
Debianアーカイブ専用のプロキシツールがあります。実際に使う前にBTSをチェック下さい。
表2.19 Debianアーカイブ専用のプロキシツールのリスト
パッケージ | ポプコン | サイズ | 説明 |
---|---|---|---|
approx *
|
V:0.2, I:0.3 | 3868 | Debianアーカイブファイルのキャッシュプロキシサーバー(コンパイルされたOCamlプログラム) |
apt-proxy *
|
V:0.3, I:0.4 | 396 | Debianアーカイブプロキシと部分ミラー作成機(Pythonプログラム) |
apt-cacher *
|
V:0.3, I:0.5 | 308 | Debianパッケージとソースファイルのキャッシュプロキシ(Perlプログラム) |
apt-cacher-ng *
|
V:0.2, I:0.2 | 768 | ソフトウエアーパッケージの頒布ためのキャッシュプロキシ(コンパイルされたC++プログラム) |
debtorrent *
|
V:0.12, I:0.2 | 1173 | Debianパッケージのためのbittorrentプロキシ(Pythonプログラム) |
![]() |
注意 |
---|---|
Debianがそのアーカイブ構造を再編した際に、このような専用のプロキシツールはパッケージメンテナによるコードの修正が必要で、一定期間使えなくなることがあります。一方、汎用のウェッブ(http)プロキシは比較的堅牢ですしそのような変化に合わすのも簡単です。 |
近代的なセキュアーAPTシステム(「トップレベルの"Release"ファイルと信憑性」参照)と互換性のある小規模のパブリックアーカイブを作る例を次に示します。まず、いくつかの仮定をします。
foo
"
www.example.com
"
apt-utils
やgnupg
等のパッケージ
http://www.example.com/~foo/
" ( →
"/home/foo/public_html/index.html
")
amd64
"
サーバーシステム上でFooのアーカイブキーを作成します。
$ ssh foo@www.example.com $ gpg --gen-key ... $ gpg -K ... sec 1024D/3A3CB5A6 2008-08-14 uid Foo (ARCHIVE KEY) <foo@www.example.com> ssb 2048g/6856F4A7 2008-08-14 $ gpg --export -a 3A3CB5A6 >foo.public.key
Fooに関するキーID"3A3CB5A6
"のアーカイブキーファイル"foo.public.key
"を公開
"Origin: Foo"というアーカイブツリーを作成します。
$ umask 022 $ mkdir -p ~/public_html/debian/pool/main $ mkdir -p ~/public_html/debian/dists/unstable/main/binary-amd64 $ mkdir -p ~/public_html/debian/dists/unstable/main/source $ cd ~/public_html/debian $ cat > dists/unstable/main/binary-amd64/Release << EOF Archive: unstable Version: 4.0 Component: main Origin: Foo Label: Foo Architecture: amd64 EOF $ cat > dists/unstable/main/source/Release << EOF Archive: unstable Version: 4.0 Component: main Origin: Foo Label: Foo Architecture: source EOF $ cat >aptftp.conf <<EOF APT::FTPArchive::Release { Origin "Foo"; Label "Foo"; Suite "unstable"; Codename "sid"; Architectures "amd64"; Components "main"; Description "Public archive for Foo"; }; EOF $ cat >aptgenerate.conf <<EOF Dir::ArchiveDir "."; Dir::CacheDir "."; TreeDefault::Directory "pool/"; TreeDefault::SrcDirectory "pool/"; Default::Packages::Extensions ".deb"; Default::Packages::Compress ". gzip bzip2"; Default::Sources::Compress "gzip bzip2"; Default::Contents::Compress "gzip bzip2"; BinDirectory "dists/unstable/main/binary-amd64" { Packages "dists/unstable/main/binary-amd64/Packages"; Contents "dists/unstable/Contents-amd64"; SrcPackages "dists/unstable/main/source/Sources"; }; Tree "dists/unstable" { Sections "main"; Architectures "amd64 source"; }; EOF
あなたのサーバーシステム上のAPTアーカイブ内容の繰り返しアップデートはdupload
を設定することで自動化できます。
次に示す内容の"~/.dupload.conf
"を設定したクライアントで"dupload -t
foo
changes_file
"を実行して、全てのパッケージファイルを"~foo/public_html/debian/pool/main/
"に設置します。
$cfg{'foo'} = { fqdn => "www.example.com", method => "scpb", incoming => "/home/foo/public_html/debian/pool/main", # The dinstall on ftp-master sends emails itself dinstall_runs => 1, }; $cfg{'foo'}{postupload}{'changes'} = " echo 'cd public_html/debian ; apt-ftparchive generate -c=aptftp.conf aptgenerate.conf; apt-ftparchive release -c=aptftp.conf dists/unstable >dists/unstable/Release ; rm -f dists/unstable/Release.gpg ; gpg -u 3A3CB5A6 -bao dists/unstable/Release.gpg dists/unstable/Release'| ssh foo@www.example.com 2>/dev/null ; echo 'Package archive created!'";
dupload
(1)が起動するpostuploadフックスクリプトがアップロード毎に更新されたアーカイブファイルを作成します。
この小規模のパブリックアーカイブをクライアントシステムのapt行に追加できます。
$ sudo bash # echo "deb http://www.example.com/~foo/debian/ unstable main" \ >> /etc/apt/sources.list # apt-key add foo.public.key
![]() |
ティップ |
---|---|
もしローカルファイルシステム上にアーカイブがある場合には、上記の代わりに" |
パッケージとdebconfの選択状態のローカルコピーは次に記すようにして作成できます。
# dpkg --get-selections '*' > selection.dpkg # debconf-get-selections > selection.debconf
ここで、"*
"は"selection.dpkg
"が"purge"に関するパッケージ項目も含めるようにします。
これら2ファイルを他のコンピューターに移動し、次のようにしてインストールします。
# dselect update # debconf-set-selections < myselection.debconf # dpkg --set-selections < myselection.dpkg # apt-get -u dselect-upgrade # or dselect install
実質的に同じ設定でクラスターとなった多くのサーバーを管理することをお考えの場合には、専用パッケージであるfai
等を使って全システムを管理することを考えます。
alien
(1)を使うと、Red
Hatのrpm
やStampedeのslp
やSlackwareのtgz
やSolarisのpkg
ファイルフォーマットをDebianのdeb
パッケージに変換できます。あなたのシステムにインストールしたパッケージに替えて他のLinuxディストリビューション由来のパッケージを使いたい際には、alien
を使って変換しインストールします。alien
はLSBパッケージをサポートします。
![]() |
警告 |
---|---|
|
現行の"*.deb
"パッケージの内容は、どんなUnix的環境でも標準のar
(1)とtar
(1)を使っうことで、dpkg
(1)を使うこと無く開梱できます。
# ar x /path/to/dpkg_<version>_<arch>.deb # ls total 24 -rw-r--r-- 1 bozo bozo 1320 2007-05-07 00:11 control.tar.gz -rw-r--r-- 1 bozo bozo 12837 2007-05-07 00:11 data.tar.gz -rw-r--r-- 1 bozo bozo 4 2007-05-07 00:11 debian-binary # mkdir control # mkdir data # tar xvzf control.tar.gz -C control # tar xvzf data.tar.gz -C data
パッケージの内容はmc
コマンドを使っても閲覧できます。
パッケージ管理に関しては次の文書からさらに学習できます。
パッケージ管理の一義的文書:
aptitude
(8)とdpkg
(1)とtasksel
(8)とapt-get
(8)とapt-config
(8)とapt-key
(8)とsources.list
(5)とapt.conf
(5)とapt_preferences
(5);
/usr/share/doc/apt-doc/guide.html/index.html
"と"/usr/share/doc/apt-doc/offline.html/index.html
"
from the apt-doc
package;
aptitude-doc-en
パッケージに入っている、"/usr/share/doc/aptitude/html/en/index.html
"。
正規で詳細なDebianアーカイブに関する文書:
Debianユーザー向けのDebianパッケージ作成の入門書: