[ 前のページ ] [ 目次 ] [ 1 ] [ 2 ] [ 3 ] [ A ] [ 次のページ ]

Debian クイックレファレンス
第 3 章 - Debian パッケージ管理


Debian のレポジトリーへのネットワーク負荷を低減するために、 APT を通してパッケージをダウンロードする際には、必要に応じて http_proxy 環境変数を設定するか、/etc/apt/apt.conf の中の http の値を設定し、squidを使ったローカルの http プロキシをセットアップするようにしたい。 これはネットワークアップグレードのパフォーマンスを非常に向上させる。 この効果は LAN上に複数の Debian ボックスがある際に更に顕著である。

apt_preferences(5) に記載された pin 機能は非常に強力であるが、依存性のために他の基本的なプログラムパッケージの新しいバージョン引き込みやすいと言うことがあるので全ての依存性の問題を解決するわけではない。

chroot 手法は、 システムの安定性と最新ソフトウエアバージョンアクセスの両方を確保できるので望ましい手法である。

本章は Woody システムに準拠しているが、(apt_preferences(5)/etc/apt/preferences に関連したトピックスを除くと)ほとんどの情報は Potato システムにも当てはまる。


3.1 イントロダクション

もし全てのデベロッパー向けのドキュメンテーションを読むのが辛いなら、本章をまず読み Debian の testingunstable を含めた全パワーを楽しんでください:-)


3.1.1 主要ツール

     dselect   – メニュー式パッケージ管理ツール (トップレベル)
     dpkg      – パッケージをインストール (パッケージファイル中心)
     apt-get   – パッケージをインストール (パッケージアーカイブ中心、CLI APT)
     tasksel   – タスクをインストール (一連のパッケージ)
     aptitude  – パッケージをインストール (パッケージとタスク, ncurses APT)
     deity     – また別の ncurses APT ツール
     synaptic, gsynaptic – また別の GUI APT ツール

これらは同レベルのツールではありません。 dselect は APT (そのコマンドラインコマンドは apt-get) や dpkg の上で走っています。

APT は 取得可能なパッケージを追跡するために /var/lib/apt/lists/* を使いますが、 dpkg/var/lib/dpkg/available を使います。 apt-get 又は aptitude などの同様のプログラムを 使って直接パッケージをインストールした場合、dselect select, taskseldpkg -l を起動する前に dselect[U]pdate 選択メニュから /var/lib/dpkg/available を更新するか、シェルコマンド "dselect update" を確実に実行してください。

パッケージの依存性に従い、apt-get は自動的に depends するパッケージを引っ張ってきますが、recommendssuggests するパッケージはそのままにします。一方、 dselect はこれらのパッケージの選択に対するメニュドリブンな制御 を提供し、dependsrecommends および suggests に基づくパッケージ選択を促します。 aptitudedepends, recommends および suggests に基づいて 自動的に全パッケージを引っ張って来るオプションを提供します。


3.1.2 変換ツール

     apt-cache         - ローカルキャッシュにあるパッケージアーカイブをチェックする
     dpkg-reconfigure  - 既にインストールしたパッケージを再設定する
                         (debconf を使っている場合)
     dpkg-source       - source パッケージファイルを管理
     dpkg-buildpackage - パッケージファイルの構築の自動化
     ...

3.2 Debian パッケージ管理の基礎

task と呼ばれるパッケージ群をインストールすることが可能ですし、 パッケージそれぞれをインストールしたり、下で述べるパッケージ管理ツール を用いてシステムを更新することもできます。


3.2.1 tasksel 又は aptitude を用いて task をインストール

taskselDebian Task インストーラ であり、 システムのインストール中に "シンプル" なオプションとして 提供されます。

複数のパッケージが要求する共通の機能をインストールする必要が ある場合、これが最良の方法です。コマンドを次のように確実に実行してください:

     # dselect update
     # tasksel

aptitudetask へのアクセス手段を提供します。 task の選択ができるだけでなく、メニューを通じて task 内のパッケージをそれぞれ選択/除外できます。


3.2.2 APT システムのセットアップ

ここに挙げる混在環境を追いかけようとする場合、パッケージの依存性の 衝突に出くわすかもしれません。flavor を混在させるのは良い考えでは ありません。次に挙げる方法はいくらかのリスクを喜んで許容する人の ための方法です。

testing を追いかけている間にパッケージを選択して更新する場合、 (Woody 以降の) APT システムを apt_preferences(5) 機能を用いるために Woody 版の APT への移行, 第 2.1 節 としてセットアップする 必要があります。

まず、 stable, testing ならびに unstable 用のソースを /etc/apt/sources.list に追加します。 そして、/etc/apt/preferences を編集して、適切な Pin-Priority を設定します。 [1]

     Package: *
     Pin: release a=stable
     Pin-Priority: 500
     
     Package: *
     Pin: release a=testing
     Pin-Priority: 600
     
     Package: *
     Pin: release a=unstable
     Pin-Priority: 50

3.2.3 dselect

dselect を起動すると、自動的に "Required", "Important" および "Standard" パッケージの全てを選択します。 Potato システムでは、 teTeX や Emacs のような巨大なプログラムもこれらのカテゴリに所属 していたため、最初のインストールではこれらのインストールを ('_' をタイプすることにより) 手動で解除するのがベストでした。 Woody では、これらは "Optional" パッケージカテゴリに移動しました。

dselect はいくらか奇妙なユーザインターフェースを持ちます。 4個のあいまいなコマンドがあります。 (Capital means CAPITAL!):

     キーストローク   アクション
     Q           終了。現在の選択を認め、とにかく終了する。
                 (依存性を上書きする)
     R           戻る! 悪気はありません。
     D           しまった! dselect が考えていることは分かりません。
     U           全てを推奨される状態にセットする。

DQ により、リスクを負って衝突した選択を 選ぶことができます。これらのコマンドを注意深く扱ってください。 現在は、dselectsuggestsrecommends の選択を通じたきめの細かい依存性制御を 提供する、熟成したメニュドリブンなツールです。

雑音を減らすために、 "expert" オプションを含む行を /etc/dpkg/dselect.cfg に追加してください。 低速なマシンでは、パッケージを検索するためには他の高速なマシンで dselect を走らせたり、パッケージのインストールのために apt-get installを使うと良いかもしれません。

dselect は Pin-Priority により選択されないパッケージへの アクセス手段は提供しません。


3.2.4 aptitude

aptitudedselect に似たメニュドリブンな新しい パッケージインストーラです。apt-get の代わりのコマンドライン コマンドとしても使えます。 aptitude(1) をご覧ください。

aptitude は通常小文字の一文字のキーコマンドを受け付けます。

     キーストローク  アクション
     F10             メニュ
     ?               キーストロークヘルプを表示
     u               パッケージアーカイブ情報を更新
     g               選択パッケージのダウンロードおよびインストール
     q               現在のスクリーンを終了し、変更点を保存する
     x               現在のスクリーンを終了し、変更点を無視する
     Enter           パッケージの情報を閲覧

aptitudedepends, recommends および suggests に基づいて必要な全パッケージを自動的に 引っ張ってくるオプションを提供します。 メニュの F10 -> Options -> Dependency handling を選択 することにより、この挙動を変更できます。

aptitude はパッケージの全バージョンへのアクセス手段を提供します。


3.2.5 apt-cache およびapt-get コマンド

上の例で記述しているように testing を追いかけていると、 次のようなコマンドを用いてシステムを管理できます:

上の例では、-u オプションにより、apt-get が アップグレードする予定のパッケージを表示し、実行に移る前にユーザに通知します。 次のコマンドは -u オプションを標準の動作に設定します:

     $ cat >> /etc/apt/apt.conf << .
     // 更新するパッケージを常に表示する (-u)
     APT::Get::Show-Upgraded "true";
     .

実際に更新せずに更新をシミュレートするためには、 -s オプションを 使ってください。


3.2.6 Debian ディストリビューションの特定 flavor を追いかける

Debian のどの flavor を追いかけるかによって、要求に合うように APT システムのセットアップ, 第 3.2.2 節/etc/apt/preference を変更できます:

     stable を追いかける: testing の Pin-Priority を 50 に変更
     testing を追いかける: 上記設定を保持
     testing(unstable) を追いかける: unstable の Pin-Priority を 500 に変更
     unstable(testing) を追いかける: unstable の Pin-Priority を 800 に変更

A guideline for the choice of Pin-Priority is to move from the top to bottom in the above table as the time moves from a time immediately after a distribution release to a time of freeze for the next release.

注意: Debian の testing flavor を追いかけることには、 セキュリティ修正が非常に遅いという副作用があります。

Debian の flavor を混在させている場合、stabletesting または unstable を混ぜると、 testing または unstable から意図せずに主要なパッケージを バグを持っている可能性があるにもかかわらず引っ張ってくることが良くあります。 ですから警告しておきます。

必須ではないパッケージは熟成されていないバージョンを追いかけるけれど、 いくつかの主要なパッケージは熟成されたバージョンを保持するための /etc/apt/preferences の例は examples subdirectorypreferences.testingpreferences.unstable として得られます。 一方、preferences.stable は全パッケージを stable にダウングレードさせます。


3.2.7 全パッケージを stable にダウングレードする

全パッケージを stable にダウングレードするには、 /etc/apt/preferences を次のように編集します:

     Package: *
     Pin: release a=stable
     Pin-Priority: 1001

そして "apt-get upgrade" を実行し、Pin-Priority > 1000 に従いダウングレードを強行します。ささいな依存性に関する異常が生じる かもしれないことを警告しておきます。


3.2.8 /etc/apt/preferences の概観

APT システムのセットアップ, 第 3.2.2 節 に示した /etc/apt/preferences の例では、 最初の行の "Package: *" は本セクションが全パッケージに適用されることを 意味しています。あるパッケージに Pin-Priority を指定するため、 "*" の代わりにパッケージ名を使いたいかもしれません。

次の行の "Pin: release a=stable" は apt-get が "Archive: stable" 行を持つ Release ファイルを含む アーカイブから Packages.gz を取得することを意味しています。

最後の行の "Pin-Priority: 500" は Pin-Priority を 500 に指定しています。

同じ名前のパッケージが複数ある場合は、通常最大の Pin-Priority 値を持つ パッケージがインストールされます。

ここに、Pin-Priority の意味を示します:

--target-release と同じ効果が /etc/apt/apt.conf に次のような設定を行うことにより得られます:

     # echo 'APT::Default-Release "testing";' >> /etc/apt/apt.conf

コマンドラインオプション --target-release/etc/apt/apt.conf の設定は /etc/apt/preferences の設定に優先します。/etc/apt/preferences で遊ぶ場合は この干渉に注意してください。


3.3 Debian で生き残るためのコマンド

本章の知識により、永遠の upgrade 生活をすごせます。 :)


3.3.1 Debian のバグをチェックし、助けを求める

特定のパッケージに関する問題に直面している場合、助けを求めたり、 バグレポートを出す前にこれらのサイトをチェックしましょう。 (lynxlinks および w3m は 同じように機能します):

     $ lynx http://bugs.debian.org/
     $ lynx http://bugs.debian.org/package-name  # パッケージ名を知っている場合
     $ lynx http://bugs.debian.org/bugnumber     # バグ番号を知っている場合

"site:debian.org" を含む検索語により Google (www.google.com) を検索して みてください。

疑問がある場合は、良質のマニュアルを読んでください。CDPATH を 次のように設定してください:

     export CDPATH=.:/usr/local:/usr/share/doc

そして次を実行してください。

     $ cd packagename
     $ pager README.Debian # 存在する場合
     $ mc

3.3.2 APT アップグレードのトラブルシュート

パッケージの依存性問題は Debian システムの更新, 第 2.3 節 に記述したように unstable 又は testing にアップグレードする場合に 発生する可能性があります。 ほとんどの場合、これはアップグレードされるパッケージが新たに解決されない 依存性の問題を持つためです。

     # apt-get dist-upgrade

これが動かない場合、もんだ意が解決するまで次のコマンドを繰り返し実行してください:

     # apt-get upgrade -f         # エラーが起きても upgradeを続ける
     ... 又は
     # apt-get dist-upgrade -f    # エラーが起きても dist-upgrade を続ける

時々本当に壊れたアップグレードスクリプトにより持続的な問題を起こすことがあります。この種の状況を解決するには、/var/lib/dpkg/info/packagename.{post,pre}{inst,rm} スクリプトを調べ、次を実行するのがよいでしょう:

     # dpkg --configure -a    # 部分的にインストールされたパッケージを全て設定

スクリプトに設定ファイルが無いと言っている場合、対応する設定ファイルに対して /etc/ を調べてください。.new (又は同種の) 拡張子 を持つファイルが存在する場合、名前を変更して拡張子を削除してください。

パッケージの依存性問題は unstable 又は testing に インストールする場合に発生する場合があります。依存性を迂回する手段があります。

     # apt-get install -f package # 壊れた依存性を上書きする

これらの状況を修正するための代替手段として、equivs パッケージを使えます。 /usr/share/doc/equivs/README.Debian をご覧ください。


3.3.3 dpkg を用いたレスキュー

dselect (APT) のクラッシュから、本当に壊れたシステム上で APT を用いずに dpkg だけを用いてアドホックに回復できます:

     # cd /var/cache/apt/archives
     # dpkg -i libc6* libdb2* perl*
     # dpkg -i apt* dpkg* debconf*
     # dpkg -i *  # エラーが起きなくなるまで実行

パッケージが無い場合、次のコマンドを用いて mirror sites から取得してください:

     # mc            # "FTP link" を Debian FTP サーバに向けて使用

最近、HTTP/FTP サーバ上の実際のパッケージは古典的な /dist に置かれず、/pool/ ディレクトリに置かれています。

そして、次のようにインストールしてください:

     # dpkg -i /var/cache/apt/archives/packagefile.deb

依存性が壊れている場合、修正するか、次のコマンドを使用してください:

     # dpkg --ignore-depends=package1,... -i packagefile.deb
     # dpkg --force-depends -i packagefile.deb
     # dpkg --force-depends --purge package
     # dpkg --force-confmiss -i packagefile.deb # 失った conffile をインストールする

3.3.4 パッケージ選択データの回復

/var/lib/dpkg/status がなんらかの理由で壊れた場合、 Debian システムはパッケージ選択データを失い、ひどく苦しみます。 /var/lib/dpkg/status-old/var/backups/dpkg.status.* にある古い /var/lib/dpkg/status ファイルを探してください。

別のパーティションに /var/backups/ を保持するのは、 このディレクトリが多くの重要なシステムデータを含んでいるので、良い考えです。

古い /var/lib/dpkg/status ファイルが得られない場合、まだ /usr/share/doc/ にあるディレクトリからの情報で回復できます。

     # ls /usr/share/doc | \
       grep -v [A-Z] | \
       grep -v '^texmf$' | \
       grep -v '^debian$' | \
       awk '{print $1 " install"}' | \
       dpkg --set-selections
     # dselect --expert # システムを再インストールし、必要ない物を除外する

3.3.5 /var のクラッシュ後のシステム回復

/var ディレクトリはメールなどの定期的に更新されるデータを 含むので、汚染されやすくなっています。このディレクトリを別のパーティションに 分けることにより、リスクを限定できます。故障が発生した場合、 /var ディレクトリを再構築して Debian システムを回復 する必要があるかもしれません。

最小限 Debian が機能する /var ディレクトリの基幹部分を同一又は古い Debian バージョンから、例えば var.tar.gz などを取得し、壊れたシステムの root ディレクトリに置きます。そして

     # cd /
     # mv var var-old      # 役に立つ内容が残っている場合
     # tar xvzf var.tar.gz # Woody の基幹ファイルを使用
     # aptitude            # 又は dselect

を実行します。これによりシステムが機能するようになるはずです。 パッケージ選択データの回復, 第 3.3.4 節 に記述している技術を用いてパッケージ選択データ の回復をはかどらせることができます。 ([FIXME]: 本手順はさらなる検証が必要。)


3.3.6 ブート不能なシステムにパッケージをインストール

Debian レスキューフロッピ/CD 又は マルチブート Linux システム上の別の パーティションを用いて Linux をブートしてください。 ブート不可能なシステムを /target にマウントし、dpkg の chroot install mode を使用します。

     # dpkg --root /target -i packagefile.deb

そして設定を行い、問題を修正します。

ところで、lilo が壊れてブート不能になった場合、標準の Debian レスキューディスクを用いてブートできます。 Linux をインストールしてある root パーティションを /dev/hda12 と仮定し、ランレベル 3 で起動したいとすると、lilo のプロンプトで次を 入力してください:

     boot: rescue root=/dev/hda12 3

そしてフロッピディスク上の kernel を用いてほぼ完全に機能するシステムに ブートできました。(kernel の機能やモジュールがないことによる些細な不都合が 存在するかもしれません。)


3.3.7 dpkg コマンドが壊れた場合どうするか

dpkg が壊れると .deb ファイルがインストール不能になります。次の手順によりこのような状況からの回復の助けになります。(第1行の "links" を好みのブラウザコマンドに置き換えてください。)

     $ links http://http.us.debian.org/debian/pool/main/d/dpkg/
       ... 良好な dpkg_version_arch.deb をダウンロード
     $ su
     password: *****
     # ar x dpkg_version_arch.deb
     # mv data.tar.gz /data.tar.gz
     # cd /
     # tar xzfv data.tar.gz

i386 に対しては、 http://packages.debian.org/dpkg が URL としても使われます。


3.4 Debian 涅槃コマンド

これらのコマンドを 愉しむ と、永遠のアップグレード地獄から救い出し、Debian の 涅槃 に導くことができます。:)


3.4.1 ファイルに関する情報

あるファイルがどのパッケージに所属するかを見つけるには:

     $ dpkg {-S|--search} pattern # インストール済みパッケージにパターン検索
     $ zgrep -e pattern /local/copy/of/debian/woody/Contents-i386.gz
                  # debian アーカイブでファイル名パターン検索

又は特別なパッケージコマンドを使います:

     # apt-get install dlocate  
                      # slocate (locate の安全版と衝突する)
     $ dlocate filename         # dpkg -L と dpkg -S の高速な代替品
     ...
     # apt-get install auto-apt # オンデマンドのパッケージインストールツール
     # auto-apt update          # autp-apt 用の db ファイルを作成
     $ auto-apt search pattern  
     # インストールされているかに係わらず、全パッケージをパターン検索

3.4.2 パッケージ情報

パッケージアーカイブから情報を検索し、表示します。/etc/apt/sources.list を編集して APT が適切なアーカイブを指すようにしてください。 testing 又は unstable にあるパッケージが現在インストール しているパッケージに対してどうなっているかを知るには、 apt-cache policy を使うのが良いでしょう。

     # apt-get   check      # キャッシュを更新し、壊れたパッケージをチェック
     $ apt-cache search  pattern # テキストの説明からパッケージ検索
     $ apt-cache policy  package # パッケージの priority/dist 情報を表示
     $ apt-cache show -a package # 全 dists のパッケージ説明を表示
     $ apt-cache showsrc package 
     # マッチした source パッケージの説明を表示
     $ apt-cache showpkg package # パッケージのデバッグ情報を表示
     # dpkg  --audit|-C          # 部分的にインストールされたパッケージを検索
     $ dpkg {-s|--status} package ... 
     # インストール済みのパッケージの説明を表示
     $ dpkg -l package ...       
     # インストール済みパッケージのステータスを表示 (1行毎)
     $ dpkg -L package ...       
     # 指定したパッケージに含まれるファイル名リストを表示

apt-cache showrc は Woody リリースではドキュメント化されていませんが、使えます :)

また、次に挙げるファイルからもパッケージ情報を検索できます(これらを見るのに mc を使っています):

     /var/lib/apt/lists/*
     /var/lib/dpkg/available

次のファイルを比較すると、最後のインストールセッションで何が起きたかが 正確に分かります。

     /var/lib/dpkg/status
     /var/backups/dpkg.status*

3.4.3 APT によりキーボードに触らずにインストール

キーボードに触らずにインストールするには、次の行を /etc/apt/apt.conf に追加してください:

     Dpkg::Options {"--force-confold";}

これは apt-get -q -y packagename を起動するのと同じことです。これは全プロンプトについて自動的に "yes" で答えるので、問題が発生するかもしれません。ゆえに慎重にこのトリックを使ってください。 apt.conf(5) および dpkg(1) をご覧ください。

インストール済みパッケージの再設定, 第 3.4.4 節 に従い、特定のパッケージを後で設定することもできます。


3.4.4 インストール済みパッケージの再設定

Use the following to reconfigure any already-installed package. 次のコマンドを使ってインストール済みパッケージの再設定を行います。

     # dpkg-reconfigure --priority=medium package [...]
     # dpkg-reconfigure --all   # 全パッケージの再設定
     # dpkg-reconfigure locales # 特別な locale の生成
     # dpkg-reconfigure --p=low xserver-xfree86 # X サーバの再設定

debconf ダイアログモードが永続的に必要な場合は、 debconf を再設定してください。

特別な設定スクリプトを持つプログラムがいくつかあります。 [2]

     apt-setup     - /etc/apt/sources.list の生成
     install-mbr   - Master Boot Record manager のインストール
     tzconfig      - ローカル time zone の設定
     gpmconfig     - gpm マウスデーモンの設定
     sambaconfig   - Potato で Samba の設定を行う (Woody は debconf を使用)
     eximconfig    - Exim (MTA) の設定
     texconfig     - teTeX の設定
     apacheconfig  - Apache (httpd) の設定
     cvsconfig     - CVS の設定
     sndconfig     - サウンドシステムの設定
     ...
     update-alternatives - 標準のコマンドの設定、例えば vim を vi に設定
     update-rc.d         - System-V init スクリプトマネージャ
     update-menus        - Debian menu システム
     ...

3.4.5 パッケージの削除及びパージ

設定ファイルを維持したままパッケージを削除:

     # apt-get remove package ...
     # dpkg  --remove package ...

設定ファイルを含め、パッケージを削除:

     # apt-get remove --purge package ...
     # dpkg    --purge        package ...

3.4.6 古いパッケージをホールド

例えば、libc6libc6-devdselect および apt-get -u upgrade package に対してホールドするには、次を実行します:

     # echo -e "libc6 hold\nlibc6-dev hold" | dpkg --set-selections

apt-get -u install package はこの "hold" により隠されません。 apt-get -u upgrade package 又は apt-get -u dist-upgrade に対する自動ダウングレードの強行からパッケージをホールドするには、 /etc/apt/preferences に次の行を追加してください:

     Package: libc6
     Pin: release a=stable
     Pin-Priority: 2000

ここで、 "Package:" エントリは "libc6*" のようなエントリを使えません。glibc source パッケージに同期したバージョンの全バイナリパッケージを保持する必要がある場合、それらのパッケージを明示的に挙げる必要があります。

次のコマンドによりホールドされたパッケージをリストできます:

     dpkg --get-selections "*"|grep -e "hold$"

3.4.7 stable/testing/unstable システムの混在

apt-show-versions により、インストール済みパッケージのバージョン/flavor をリスト化できます。

     $ apt-show-versions | fgrep /testing | wc
     ... testing からのパッケージ数をカウント
     $ apt-show-versions -u
     ... アップグレード可能なパッケージ数
     $ apt-get install `apt-show-versions -u -b | fgrep /unstable`
     ... 全ての unstable パッケージを最新バージョンにアップグレード

3.4.8 キャッシュされたパッケージファイルを取り除く

APT でパッケージをインストールすると、キャッシュされたパッケージファイルが /var/cache/apt/archives に残されるので、これらを消す必要が あります。

     # apt-get autoclean # 必要ないパッケージファイルのみ削除
     # apt-get clean     # キャッシュされたパッケージファイル全てを削除

3.4.9 システム設定の記録/コピー

パッケージ選択ステータスのローカルコピーを取るには、次を実行します:

     $ dpkg --get-selections "*" >myselections   # 又は \* を使用

"*" により、myselections が "purge" 用の パッケージエントリにも含まれるようになります。

このファイルを他のコンピュータに転送し、これを使ってインストールできます:

     # dselect update
     # dpkg --set-selections <myselections
     # apt-get -u dselect-upgrade    # 又は dselect install

3.4.10 stable システムへのパッケージ移植

stable システムの部分的なアップグレードのためには、ソースパッケージを 用いて stable 環境でパッケージを再構築するのが望ましいです。パッケージ再構築により、依存性による強引なパッケージアップグレードを避けることができます。まず、次のエントリを /etc/apt/sources.list に追加します:

     deb-src http://http.us.debian.org/debian testing \
      main contrib non-free
     deb-src http://non-us.debian.org/debian-non-US testing/non-US \
      main contrib non-free
     deb-src http://http.us.debian.org/debian unstable \
      main contrib non-free
     deb-src http://non-us.debian.org/debian-non-US unstable/non-US \
      main contrib non-free

ここで、deb-src に対する各エントリは印刷時の制限のために2行に分割されていますが、実際の sources.list は一行としてください。

そしてソースを取得し、ローカルパッケージを作成します:

     $ apt-get update  # ソースパッケージの検索リストを更新
     $ apt-get source package
     $ dpkg-source -x package.dsc
     $ cd package-version
       ... 要求されたパッケージを検査 (.dsc ファイル中の Build-depends) し、
           それらもインストールする。"fakeroot" パッケージも必要。
     
     $ dpkg-buildpackage -rfakeroot 
     
       ...又は (サイン無し)
     $ dpkg-buildpackage -rfakeroot -us -uc #必要ならば後で "debsign" を使用
     
       ...そしてインストール
     $ su -c "dpkg -i packagefile.deb"

普通、"-dev" サフィックスが付く2、3個のパッケージは、パッケージの依存性を 満たすためにインストールする必要があります。debsigndevscripts パッケージにあります。auto-apt を使うと、依存性を簡単に満足させられるかもしれません。fakeroot を使うと、root アカウントの不必要な使用を避けられます。

Woody では、依存性の問題は単純にできます。例えば、 ソースのみの pine パッケージをコンパイルするには、

     # apt-get build-dep pine
     # apt-get source -b pine

だけです。


3.4.11 ローカルパッケージのアーカイブ

APT 並びに dselect システムとの互換性を持つローカルパッケージの アーカイブを作成するには、Packages を作成し、 特定のディレクトリツリーに置く必要があります。

公式の Debian アーカイブと同様のローカル deb リポジトリは次のように 作成できます:

     # apt-get install dpkg-dev
     # cd /usr/local
     # install -d pool # 真のパッケージはここに置きます
     # install -d dists/unstable/main/binary-i386
     # ls -1 pool | sed 's/_.*$/ priority section/' | uniq > override
     # editor override # prioritysection を調整
     # dpkg-scanpackages pool override /usr/local/ \
        > dists/unstable/main/binary-i386/Packages
     # cat > dists/unstable/main/Release << EOF
     Archive: unstable
     Version: 3.0
     Component: main
     Origin: Local
     Label: Local
     Architecture: i386
     EOF
     # echo "deb file:/usr/local unstable main" \
        >> /etc/apt/sources.list

代わりに、手早いけど汚いローカル deb リポジトリは次のように作れます:

     # apt-get install dpkg-dev
     # mkdir /usr/local/debian
     # mv /some/where/package.deb /usr/local/debian
     # dpkg-scanpackages /usr/local/debian /dev/null | \
       gzip - > /usr/local/debian/Packages.gz
     #  echo "deb file:/usr/local/debian ./" >> /etc/apt/sources.list

HTTP や FTP メソッドによりディレクトリへのアクセス手段を供給し、 /etc/apt/sources.list にエントリを追加することにより、 これらのアーカイブへのリモートからのアクセスを可能にします。


3.4.12 alien バイナリパッケージへの変換又はインストール

alien はRed Hat rpm 形式、Stampede slp 形式、Slackware tgz 形式、そして Solaris pkg 形式で供給される バイナリパッケージを Debian deb パッケージ形式に変換することを 可能とします。他の Linux ディストリビューションからのパッケージを システムにインストールしているディストリビューションで使いたい場合、 alien を使って使用中のディストリビューションのパッケージフォーマットに変換し、インストールできます。alien は LSB パッケージもサポートします。


3.4.13 インストールされたパッケージファイルを検証する

debsums は MD5 チェックサムを用いてインストールされたパッケージファイルの検証ができます。いくつかのパッケージは MD5 チェックサムを得られません。 システム管理者が可能な一時的な修正はこのようなものです:

     # cat >>/etc/apt/apt.conf.d/90debsums
     DPkg::Post-Install-Pkgs {"xargs /usr/bin/debsums -sg";};
     ^D

Joerg Wendland joergland@debian.org からのメールによる。 (未検証).


3.5 他の Debian 独特な点


3.5.1 dpkg-divert コマンド

Diversions というファイルにより、dpkg は ファイルをインストールする時に本来意図していた場所ではなく、 退避した 場所にインストールするようになる。 Diversions は Debian パッケージスクリプトで衝突がおこりうる ファイルを移動させるために使うことができる。システム管理者はパッケー ジ の設定ファイルや他のファイルを (conffiles としてマーク されていなければ) dpkg が新しいバージョンのパッケージを インストールする時にそれらのファイルを上書きしてしまわないようにするために diversion を使うことができる。 .

     # dpkg-divert [--add]  filename # "diversion" を追加
     # dpkg-divert --remove filename # "diversion" を削除

本当に必要でない限り、dpkg-divert を使わない方が 通常は良いでしょう。


3.5.2 equivs パッケージ

ソースからプログラムをコンパイルした場合、最も良いのは本当のローカルな debian 化したパッケージ (.deb) にすることです。 equivs を最後の手段として使います。

     Package: equivs
     Priority: extra
     Section: admin
     Description: Debian パッケージの依存関係を偽るためのパッケージ
      これはダミーパッケージで、依存情報だけを含んだ Debian パッケージの
      作成に使用することができます。

3.5.3 Alternative コマンド

vi コマンドが vim を起動するようにするには、 update-alternatives を使います:

     # update-alternatives --display vi
     ...
     # update-alternatives --config vi
       Selection    Command
     -----------------------------------------------
           1        /usr/bin/elvis-tiny
           2        /usr/bin/vim
     *+    3        /usr/bin/nvi
     
     default[*] を保つために Enter を打つか、selection 番号 2 をタイプしましょう。

Debian alternatives システムのアイテムは /etc/alternatives/ に シンボリックリンクとして保持されています。

好みの X Window 環境を設定するには、update-alternatives/usr/bin/x-session-manager/usr/bin/x-window-manager に適用します。

/bin/sh/bin/bash 又は /bin/dash の直接のシンボリックリンクです。 古い Bashism で汚染されたスクリプトとの互換性のため、 /bin/bash を使う方が安全ですが、POSIX 互換性を強制するには、/bin/dash を使うのがより良い訓練となります。 2.4 Linux kernel にアップグレードすると、/bin/sh/bin/dash にセットしがちです。


3.5.4 System-V init およびランレベル

ブートする標準のランレベルは /etc/inittab で設定できます。

他のディストリビューションと違い、Debian はランレベル管理を完全にシステム管理者の責任にしています。System-V スタイルの init の Debian 上での 管理は update-rc.d スクリプトにより行われることを意図しています。

ランレベル 1,2,3 で /etc/init.d/name を起動し、 ランレベル 4,5 で停止し、優先度番号 20 (通常) を振るには、次のようにします:

     # update-rc.d name start 20 1 2 3 . stop 20 4 5 .

init.d にまだあるスクリプトのシンボリックリンクを削除するには、 次のようにします:

     # update-rc.d -f name remove

ランレベルの編集には、私はずるをします。mc のシェルプロンプトで Alt-Enter を使ってリンクエントリをコピーしながら、mv コマンドを 使って手動でエントリを編集します。例えば:

     # mv S99xdm K99xdm # xdm (X display manager) を無効にする

クイックハックとして、init.d スクリプトの先頭に exit 0 を挿入することによりデーモンを無効にさえします。 これらは結局のところ conffile です。


3.5.5 デーモンサービスを無効にする

Debian ディストリビューションはシステムのセキュリティを厳しくし、 システム管理者が有能であることを期待しています。それゆえ、 時々、使いかたを簡単にするとは二次的的な問題とみなされ、多くのデーモン サービスは最高のセキュリティレベルとされ、標準のインストール状態として 使用可能なサービスが少ない (又は全く無い) 状態となっています。

デーモンサービス (Exim, DHCP など) に疑いを持った場合、 ps aux を起動するか、/etc/init.d/*/etc/inetd.conf の内容を調べましょう。 また、/etc/hosts.deny も調べましょう。 pidof コマンドも役立ちます。 (pidof(8) 参照)

最近の Debian において、標準では X11 は TCP/IP 経由の遠隔接続を 許可していません。 SSH での X フォワードも無効にされています。


[ 前のページ ] [ 目次 ] [ 1 ] [ 2 ] [ 3 ] [ A ] [ 次のページ ]

Debian クイックレファレンス

1.07-2, 2004年 4月 11日 日曜日 08時00分07秒 UTC時間

Osamu Aoki (青木 修) osamu@debian.org
翻訳: 角田 慎一 tsuno@ngy.1st.ne.jp
著者, 第 A.1 節