* パッケージやパッケージシステムの FAQ [#p613d99a]

----

#contents

----

* パッケージシステムの FAQ [#h42b5d8d]

-[[Debianリファレンス - 第2章 Debianパッケージ管理>http://www.jp.debian.org/doc/manuals/debian-reference/ch02]]

**パッケージ管理には apt と aptitude のどちらを使えばいいのですか? &aname(apt_vs_aptitude); [#a50c8376]
etch や lenny では aptitude を使うことが推奨されていました。
>
-[[Debian GNU/Linux 4.0 リリースノート 2.1.1 パッケージ管理>http://www.jp.debian.org/releases/etch/i386/release-notes/ch-whats-new#s-pkgmgmt]]
-[[Debian GNU/Linux 5.0 リリースノート 2.1.1 パッケージ管理>http://www.jp.debian.org/releases/lenny/i386/release-notes/ch-whats-new#pkgmgmt]]
<

squeeze では、インタラクティブなツールとしては aptitude、
ノンインタラクティブなコマンドラインツールとしては apt-get が推奨されています。
特に、 lenny → squeeze のアップグレードの際は、 apt-get を使うことが推奨されています。
>
-[[Debian GNU/Linux 6.0 リリースノート 2.1.1 パッケージ管理>http://www.jp.debian.org/releases/squeeze/i386/release-notes/ch-whats-new#pkgmgmt]]
-[[Debian GNU/Linux 6.0 リリースノート 4.5. パッケージのアップグレード>http://www.jp.debian.org/releases/squeeze/i386/release-notes/ch-upgrading#upgradingpackages]]
<

***aptとaptitudeの利用について [#e45cf662]
lenny以降のaptはaptitudeの拡張管理情報を扱えるので、混在して利用しても問題ありません。

aptitudeの拡張情報をaptで共有するためには、aptitudeを実行しておく必要があります。

参照:
-[[Debian GNU/Linux リリースノート 4.5.5. aptitude の「自動的にインストールされたパッケージ」の一覧を apt と共有する>http://www.jp.debian.org/releases/stable/i386/release-notes/ch-upgrading.ja.html#aptconvert]]

**aptitude の特徴 [#v63e49f7]
-Aptitude は ''APT'' のフロントエンドである。
-依存関係に従って間接的にインストールされたパッケージを不要になった時点で自動的に削除できる。
-推奨 (Recommends) のような依存 (Depends) よりも弱い関係にあるパッケージをいっしょにインストールすることができる。
-システムにインストールされたパッケージの情報を扱うことができる。
-Ncurses ベースのメニューシステムにより直感的に操作できる。
-apt-get を置き換えるコマンドラインインターフェイスを持っている。
-パッケージインストールの記録(ログ)を残す。
-この aptitude にはスーパー牛さんパワーなどはありません。;)  

>
参照:
-[[Aptitude - Debian Wiki>http://wiki.debian.org/Aptitude]]
-[[Debianリファレンス - 2.2.1. apt-get/apt-cacheとaptitudeの比較>http://www.jp.debian.org/doc/manuals/debian-reference/ch02#_literal_apt_get_literal_literal_apt_cache_literal_vs_literal_aptitude_literal]]
<

**aptitude の使い方を知りたい [#h3bf1172]

***メニューシステムとして使う [#c6dcfbc7]
コマンドラインから
 $ aptitude

root 権限が必要になる場面では root パスワードの入力を求められます。

基本的な操作はカーソルキーを使って移動。Enter キーを使って選択。q キーで終了です。
パッケージ操作は最後に g キーを押して実行しない限り変更されません。~
最初から操作をやり直したい場合は、Ctrl+u (Ctrl キーと u キーを一緒に押す)で操作を取り消すことができます。

|キーバインド一覧|>|h
|カーソルキー上下|カーソル移動|
|Page Up/Page Down|~|
|Enter|選択|
|Ctrl+T/F10|メニュー選択|
|?|ヘルプ表示|
|q|終了|
|u|パッケージ一覧をアップデートする|
|+|パッケージをインストール(install)マークをつける|
|-|パッケージを削除(delete)マークをつける|
|_|パッケージを完全に削除(purge)のマークをつける|
|=|パッケージを固定(hold)のマークをつける|
|:|マークを外す|
|L|パッケージを再インストールする|
|F|特定バージョンへの自動更新を禁止する|
|g|つけたマークを実行する|
|Ctrl+u|アクションをすべて取り消す|
|/|パッケージの前方検索|
|\|パッケージの後方検索|
|[|パッケージグループを開く|
|]|パッケージグループをたたむ|

*** メニューシステムを使っている時の Tips [#vaff65be]
「更新可能なパッケージ」などのパッケージグループの上でも、+ キーや−キーなどを使ってパッケージ操作をすることができます。
sid を使っているとパッケージの更新が大量にある時がありますが、その場合「更新可能なパッケージ」の上で+キーを押すと、一度にパッケージをアップデートすることができて便利です。

***コマンドラインから使う [#xa85ab8d]
apt の使い方とほぼ同じです。

 使用方法: aptitude [オプション]<アクション> ...

例えばパッケージをインストールするなら
 aptitude install (パッケージ名)
のように使います。

|アクション一覧(aptitude 0.4.10)|>|h
|install|パッケージをインストール・更新します|
|remove|パッケージを削除します|
|purge|パッケージと設定ファイルを削除します|
|hold|パッケージを固定します|
|unhold|パッケージの固定を解除します|
|markauto|自動的にインストールされたマークをパッケージにつけます|
|unmarkauto|手動でインストールされたマークをパッケージにつけます|
|forbid-version|aptitude に特定のパッケージバージョンの更新を禁止させます|
|update|新規および更新可能なパッケージの一覧をダウンロードします|
|safe-upgrade(lenny/sid)|安全なアップグレード。以前「upgrade」と知られていたアクション|
|upgrade(etch)|~|
|full-upgrade(lenny/sid)|状況によりパッケージをアンインストールしたり追加するアップグレード。以前「dist-upgrade」と知られていたアクション|
|dist-upgrade(etch)|~|
|forget-new|どのパッケージが「新規」かの情報を消去します|
|search|名前や正規表現でパッケージを検索します|
|show|パッケージについての詳細な情報を表示します|
|clean|ダウンロード済みのパッケージファイルを消去します|
|autoclean|古いダウンロード済みのパッケージファイルを消去します|
|changelog|パッケージの変更履歴を表示します|
|download|パッケージ用の .deb ファイルをダウンロードします|
|reinstall|現在インストールされているパッケージをダウンロードし (場合によっては) 再インストールします|

参照:
-[[aptitude ユーザマニュアル>http://dolphin.c.u-tokyo.ac.jp/~nori1/aptitude-ja/]]

**apt の使い方を知りたい [#f03ea088]

%%[[APT HOWTO>http://www.jp.debian.org/doc/manuals/apt-howto/]] というドキュメントがあります。%% ((Obsolete Documentation))

>
-[[Debianリファレンス - 第2章 Debianパッケージ管理>http://www.jp.debian.org/doc/manuals/debian-reference/ch02]]
<

//dselect は安定してますが、操作性がイマイチです。
// # dselect
//6つの項目が出る。~
//0.の[A]ccess を選び apt を選択する。~
//apt-line、リリース (っていうのか知らないけど)、non-free を使用するか、6つの項目に戻る。~
//1.の[U]pdate を選ぶ。~
//Update中~
//6つの項目に戻る~
//6.の[Q]uitで dselect を終了する。

**apt/aptitude 使用時に "GPG error" が出る &aname(secapt); [#o2435080]

参照:~
-[[KeN's GNU/Linux Diary | secure apt>http://kmuto.jp/d/index.cgi/debian/apt-secure.htm]]
-[[SecureApt - Debian Wiki>http://wiki.debian.org/SecureApt]]

etch 以降ではパッケージの改竄を防止するため 
[[secure apt>http://wiki.debian.org/SecureApt]] (apt-secure) というシステムが
導入されています。~
これは ''apt-key'' というコマンド (実態は ''gpg'' コマンドのラッパースクリプト) と 
''Release.gpg'' というパッケージリポジトリにあるファイルによって構成されています。

***主なエラー [#v9e5b546]

''1. gnupg パッケージがない''
>W: GPG error: http://ftp.jp.debian.org unstable Release: Could not execute /usr/bin/gpgv to verify signature (is gnupg installed?)

secure apt は [[GNU Privacy Guard>http://www.gnupg.org/]] の公開鍵暗号処理を
利用しているため、[[gnupg>http://packages.qa.debian.org/g/gnupg.html]] パッケージ
をインストールする必要があります。~
通常は apt インストール時に gnupg もインストールされます。

 # aptitude install gnupg

''2. /etc/apt/trusted.gpg がない''
>W: GPG error: http://ftp.jp.debian.org unstable Release: Couldn't access keyring: No such file or directory

以下のコマンドを実行してください。

 # apt-key update

上記コマンドを実行すると/etc/apt/trusted.gpg が自動生成されます。
なければ手動でコピーしてください。
 # cp /usr/share/keyrings/debian-archive-keyring.gpg /etc/apt/trusted.gpg

''3. 公式アーカイブの鍵が失効している''
>W: GPG error: http://ftp.jp.debian.org unstable Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY F1D53D8C4F368D5D

公式アーカイブのための公開鍵はある程度経つと失効するため、
必要に応じて公開鍵を更新しなければなりません。~

通常は、新しい鍵を同梱した apt パッケージに更新することでこの問題を回避することができます。
(新しい鍵が apt パッケージに反映されるのに少し時間がかかるかもしれません。)

メンテナスクリプトが鍵をコピーしてくれますが、正常に更新されない場合は、手動で鍵をコピーしてください。
 # cp /usr/share/keyrings/debian-archive-keyring.gpg /etc/apt/trusted.gpg
また、鍵自体は 
[[debian-archive-keyring>http://packages.qa.debian.org/d/debian-archive-keyring.html]] 
として独立したパッケージにもなっています。~

他の鍵のありかとしては、 [[ftp-master>http://ftp-master.debian.org/]] の "Archive signing key" などがあります。~
例えば、2007 年 (etch) のものは、

>http://ftp-master.debian.org/archive-key-4.0.asc

です。導入方法は、
 # wget http://ftp-master.debian.org/archive-key-4.0.asc -O - | apt-key add -

以上の方法でも駄目な場合は、次の"[[パッケージリポジトリの鍵を導入する方法>#repos_key]]"を参照してください。

***パッケージリポジトリの鍵を導入する方法 &aname(repos_key); [#tde3c371]

/etc/apt/trusted.gpg.d/ がある場合、
バイナリ形式の公開鍵が取得できるときは、
 # chmod 600 ./pub.gpg
 # cp -a ./pub.gpg /etc/apt/trusted.gpg.d/
というように /etc/apt/trusted.gpg.d/ 以下に放り込むだけで ok (squeeze から?)

公式、非公式含め、各パッケージリポジトリ (apt-line) の鍵 ID が判明している時は
次の様に導入して下さい。~

 # gpg --keyserver (鍵サーバ名) --recv-keys (鍵 ID)
 # gpg --armor --export (鍵 ID) | apt-key add -

>
上記のコマンドではパイプを使用するので、sudo を使いたいときは、(sudo(8) 参照)
 $ sudo sh -c "gpg --armor --export (鍵 ID) | apt-key add -"
su を使いたいときは、
 $ su -c "gpg --armor --export (鍵 ID) | apt-key add -"
として下さい。
<

例) 鍵サーバ名=wwwkeys.eu.pgp.net 鍵 ID=1F41B907 (Christian Marillat)~
鍵 ID はエラーメッセージなどに表示されます。
(''NO_PUBKEY'' 以下の 16 文字もしくは ''0x''... で始まる 16 進数表示の 8 文字のもの)~
他の鍵サーバ: pgp.nic.ad.jp など
 # gpg --keyserver wwwkeys.eu.pgp.net --recv-keys 1F41B907

必要ならば署名の検証をして下さい。
 # gpg --check-sigs 1F41B907
// # gpg --check-sigs A8EFD603
// ...
//
//もし自分の鍵が DD の誰かに署名されているならば、最終的に自分の鍵に辿り着けばよい。~
//(Web of Trust)~
 # gpg --fingerprint 1F41B907

最後に鍵を apt-key を用いてインポートして下さい。
 # gpg --armor --export 1F41B907 | apt-key add -

再度 aptitude update すれば GPG error が解消されます。

***鍵の更新 [#g710b860]
 # apt-key update
を実行してください。

***その他 [#a3415e82]
グラフィカルなツールとして、[[gui-apt-key>http://packages.qa.debian.org/g/gui-apt-key.html]] などがあります。

**apt ではなく dpkg を使ってもパッケージの管理 (インストールや削除) ができますか [#b115267c]

できますが、パッケージの依存関係がしっかりと理解できないならば、やめておいた方が良いでしょう。

apt は基本的に dpkg が適切に処理できるように、パッケージの取得や依存関係の解決などを行ない、整理したものを dpkg に渡す仕事をしています。
apt を使わない場合、これらをすべて自力で行なわなくてはならず面倒ではありますが管理自体は可能です。

これらの関係を Red Hat Enterprise Linux で置き替えるならば dpkg が rpm コマンド、apt/aptitude が yum コマンドに相当します。

dpkg によるインストールでは、依存関係に必要なすべてのファイルをあらかじめ手元に用意し、依存関係に従って'''順番通りに'''インストールする必要があります。

**dpkg の基本的なコマンドを知りたい [#c68b0ecc]
よく使うと思われる代表的なコマンドには、次のものがあります。

|dpkg|コマンド|h
|新規/アップグレード・インストール時|# dpkg -i '''パッケージファイル名'''|
|アンインストール (削除) 時|# dpkg -r '''パッケージ名'''|

その他のコマンド / オプション (他にも多数あるので関連項目を参照)
|コマンド|機能・簡単な説明|h
|$ dpkg -l|インストール済みパッケージの一覧を表示させる|
|$ dpkg -s '''パッケージ名'''|パッケージの詳細情報を表示させる|
//|-force-depends|依存関係を無視してインストール (削除) する|

**インストール済のすべてのパッケージの一覧が見たい [#bc10e043]

 $ dpkg -l
ページャなどに出力すると読み易いです
 $ dpkg -l | pager
また、環境変数  COLUMNS でリストのコラム数を指定できます
 $ COLUMNS=100 dpkg -l

**インストール済のパッケージに含まれているファイルの一覧を見たい [#faf4f272]

 $ dpkg -L (パッケージ名)

ページャなどに出力すると読み易いです

 $ dpkg -L | pager

**インストール済のコマンドやファイルがどのパッケージに入ってるか探したい [#t508ffe0]
-dpkg と which で探す

 $ dpkg -S `which (コマンド名)`
 例)
 $ dpkg -S `which ps`
 procps: /bin/ps

-dlocate で探す

 # aptitude install dlocate
 # update-dlocatedb
 $ dlocate (コマンド名やファイル名)

**インストールしてないコマンドやファイルがどのパッケージに入ってるか探したい [#eb51f795]

***本家のサイトにある「パッケージの内容を検索」で探す [#qad6f74e]

http://www.jp.debian.org/distrib/packages#search_contents

//-apt-cache コマンドを使う。
//
//パッケージ名と description しか検索しないので見つからないかも。
//
// $ apt-cache search (コマンドやファイル名、関連するキーワードなど)

***別途 CUI ツールをインストールして使う [#ndb2e301]

[[auto-apt>http://packages.qa.debian.org/a/auto-apt.html]] や [[apt-file>http://packages.qa.debian.org/a/apt-file.html]] などがある。

 # aptitude install auto-apt
 # auto-apt update
 $ auto-apt search (ファイル名)
 $ auto-apt search bin/(コマンド名)
 $ auto-apt search (コマンド名) | grep -w (コマンドのフルパスの頭から"/"を取ったもの)

 # aptitude install apt-file
 # apt-file update
 $ apt-file search (コマンドやファイル名)
 $ apt-file search (コマンド名) | grep -w (コマンドのフルパスの頭から"/"を取ったもの)

***別途 GUI ツールをインストールして使う [#w398f2a8]

[[synaptic>http://www.nongnu.org/synaptic/]] や [[packagesearch>http://packagesearch.sourceforge.net/]] などがある。

 # aptitude install synaptic
 $ synaptic

 # aptitude install packagesearch
 $ packagesearch

**パッケージファイルの中身が見たい [#q6c2bd4a]
 $ dpkg -c (パッケージファイル名)
 例)
 $ dpkg -c w3m_0.5.1-3_i386.deb

**パッケージファイルの中身を取り出したい [#wf027e62]
アプリやライブラリなどのファイルを取り出したい場合は
 $ dpkg -x (パッケージファイル名) (展開するディレクトリ)
 例)
 $ dpkg -x w3m_0.5.1-3_i386.deb ~/w3m_data

postinst や postrm などの maintainer scripts を取り出したい場合は
 $ dpkg -e (パッケージファイル名) (展開するディレクトリ)
 例)
 $ dpkg -e w3m_0.5.1-3_i386.deb ~/w3m_control

binutils に入っている ar を使うと、構成ファイルと maintainer scripts の両方が取り出せる。~
control.tar.gz には maintainer scripts, チェックサムなど、data.tar.gz には構成ファイルが入っている。~
 $ ar x (パッケージファイル名)
 $ tar xzf control.tar.gz
 $ tar xzf data.tar.gz

**パッケージのバージョンを指定してインストールしたい [#j83e5400]
 # aptitude install (パッケージ名)=(バージョン)
例:
 # aptitude install apache=1.3.26-0woody3
もちろん apt-line やローカルのキャッシュに指定したファイルがないと駄目です。

**testing や unstable のパッケージを借りたい [#f2d52afb]
testing/unstableのパッケージを借りる前に、stable用にtesting/unstableのパッケージをバックポートした、
[[Debian Backports>./#backports]] を探してみましたか?

まずは [[Backports パッケージ検索のページ>http://backports.debian.org/Packages/]] から検索したり、
[[lenny-backportsのセクション一覧>http://packages.debian.org/lenny-backports/]] から探してみて、
なければ以下のことをしてみてもよいでしょう。

ただし、安易にtestingやunstableのapt-lineを追加してパッケージをインストールしようとすると、libc6 などの根幹にかかわるパッケージも依存関係でアップグレードされ、'''大変なことになる'''になる可能性もあるので慎重に作業をしてください。

***ターゲットリリースの指定 &aname(target-release); [#q1ca8e1b]
/etc/apt.conf 或いは /etc/apt/apt.conf.d/ 配下にファイルを作成してデフォルトのターゲットリリースを指定する。

例えば /etc/apt/apt.conf.d/99target に
 APT::Default-Release "stable";
と書く。
((これを指定しないと、全ての apt-line のうち最新バージョンが優先されるため、全てのパッケージが testing や unstable になってしまう))
その後、 testing や unstable 等の apt-line を追加する。

 # aptitude install (パッケージ名)
で stable のパッケージが入る。

testing や unstable から一時的にパッケージを借りる場合はそれぞれ以下のようにする。
 # aptitude install (パッケージ名)/testing
 # aptitude install (パッケージ名)/unstable
或いは
 # aptitude -t testing install (パッケージ名)
 # aptitude -t unstable install (パッケージ名)
この場合、このパッケージが testing や unstable でバージョンアップされても上記インストール時のパッケージがキープされる。

>
-[[Debianリファレンス - 第2章 Debianパッケージ管理 - 2.7.3. 候補バージョンの調整>http://www.jp.debian.org/doc/manuals/debian-reference/ch02#_tweaking_candidate_version]]
<

***preferences を使う &aname(apt-pinning); [#y193a8b6]
上記の [[ターゲットリリースを指定>./#target-release]] する代わりに、
/etc/apt/preferences でパッケージのプライオリティを指定する。~
(/etc/apt/preferences.d ディレクトリがある場合は同様の内容のファイルをそこに置いてもよい。)

例えば、
 Package: *
 Pin: release a=testing
 Pin-Priority: 110
 
 Package: *
 Pin: release a=unstable
 Pin-Priority: 90
のように書く。
(100 < testing < 500, 1 < unstable < 100)
リリース間は空行で分離する。~
こちらを用いることの利点は、
+非公式なパッケージもバージョンナンバーが大きければちゃんとインストールされる。
+pin を使って入れた testing または unstable パッケージはそれ以降 testing の最新版が入るようになる。
+もちろん、特にいじらないパッケージは stable のまま。

Pin-Priority の値の意味は以下の表を参考に
|Pin-Priority|意味|h
|0未満(マイナス値)|インストールしない|
|(1)|NotAutomatic アーカイブ (experimental や backports 等) の priority|
|1-100|指定すればインストールできるが、アップグレードの対象にはならない|
|(100)|現在インストールされているパッケージの priority|
|101-500|通常のアーカイブよりも優先度が低いが、指定してインストールしたものはアップグレードの対象になる|
|(500)|「ターゲットリリース」に指定されていない通常のアーカイブの priority|
|501-990|「ターゲットリリース」指定のアーカイブよりも優先度が低いが、指定してインストールしたものはアップグレードの対象になる|
|(990)|「ターゲットリリース」に指定したアーカイブの priority|
|991-1000|現在インストールされているパッケージよりも新しければ「ターゲットリリース」指定に関係なくインストールされる|
|1001以上|ダウングレードしてでもそのパッケージをインストールさせる|

デフォルトの状態 (/etc/apt/preferences が書かれていない状態) では apt-line に指定したアーカイブは (NotAutomatic アーカイブを除き) priority = 500 であり、
 Package: *
 Pin: release a=experimental
 Pin-Priority: 1
 
 Package: *
 Pin: (特に指定しないデフォルト)
 Pin-Priority: 500
と指定した場合とほぼ同じ状態になっている。
 
/etc/apt/apt.conf.d/99target で
 APT::Default-Release "stable";
のようにデフォルトターゲットを指定すると /etc/apt/preferences で
 Package: *
 Pin: release a=stable
 Pin-Priority: 990
と指定した場合と同じ意味合いを持つ。

 # aptitude -t unstable install (パッケージ名)
のように指定してインストールした場合は、一時的に (aptitude コマンドの実行中は)
 Package: (パッケージ名)
 Pin: release a=unstable
 Pin-Priority: 990
と指定した場合と同じ効力を持つ。

インストール済みのパッケージ・バージョンは priority = 100 であり、
priority 100 より高いアーカイブの中にインストール済みのパッケージのバージョンよりも高いバージョンがあれば、
その中で一番高い priority のアーカイブのバージョンにアップグレードされる。
例えば、
 installed:    version 1.0-1
 priority 90:  version 2.0-1
 priority 500: version 1.5-3
 priority 990: version 1.0-3
の場合には、priority 990 の version 1.0-3 にアップグレードされる。
 installed:    version 1.5-1
 priority 90:  version 2.0-1
 priority 500: version 1.5-3
 priority 990: version 1.0-3
の場合には、priority 500 の version 1.5-3 にアップグレードされる。
実際の例は [[apt-cache policy コマンド>./#apt-cache-policy]] の実行結果参照。

このやりかたは、''apt-pinning'' と呼ばれているようです。

>参考:
-[[Apt-Pinning for Beginners>http://jaqque.sbih.org/kplug/apt-pinning.html]]:
分かりやすく順を追って説明しています。
-http://debian.dtdns.net/2ch-debian/1033049225/52.html
-man 5 apt_preferences
-[[AptPreferences - Debian Wiki>http://wiki.debian.org/AptPreferences]]
-[[Debianリファレンス - 第2章 Debianパッケージ管理 - 2.7.3. 候補バージョンの調整>http://www.jp.debian.org/doc/manuals/debian-reference/ch02#_tweaking_candidate_version]]
-[[APT HOWTO - 3.7 インストール済パッケージを特定バージョンのまま保持する方法>http://www.jp.debian.org/doc/manuals/apt-howto/ch-apt-get#s-pin]] (Obsolete Documentation)
<

***メジャーリリース直後の apt-pinning お勧め設定 [#r3cd38ff]
apt-pinning を利用している環境で、メジャーリリース直後、
メジャーリリースの適用を一時保留したいような場合の設定方法。

例えば、etch がリリースされた状況で、一時的に etch へのアップデートを保留して、
sarge の更新を取得/適用することができる。

上記の [[preferences を使う>#za11c269]] の設定に加えて、
新規のリリースをバージョン (リビジョン) 指定で Pin しておく。例えば、
sarge -> etch を保留するのであれば、
 Package: *
 Pin: release l=Debian-Security, a=stable
 Pin-Priority: 97
 
 Package: *
 Pin: release v=4.0
 Pin-Priority: 95
 
 Package: *
 Pin: release v=4.0r0
 Pin-Priority: 95
 
 Package: *
 Pin: release v=4.0r1
 Pin-Priority: 95

を追加しておく。これで、etch のパッケージが stable になっても、
無条件で導入されてしまうことはない。

もちろん、sarge をインストールしつづけるために、例えば下記のような、
stable ではなく sarge を指定した apt-line を追加しておく必要がある。
 deb http://pkg_src/pub/linux/debian/debian sarge main contrib non-free

また、Pin はマイナーリリース毎に設定する必要があるので、
この状態で長期運用する予定があるならば、v=4.0r5 くらいまで項目を追加しておくと良い。

***rebuild する [#h149de6e]

[[パッケージに自分で修正を加えたい>#customize]]を読んでください。
修正を加えず単に build するだけです。

**特定のパッケージをアップグレードの対象から外したい [#k16c9262]

オススメは pin を使った方法。
/etc/apt/preferences に留めておきたいパッケージ名とバージョンを
 Package: (パッケージ名)
 Pin: version (バージョン)
 Pin-Priority: (優先度)
 
 例)
 Package: jnethack
 Pin: version 1.1.5-11
 Pin-Priority: 1001

のように書いておく。

その他には
 # aptitude hold (パッケージ名)
 例)
 # aptitude hold jnethack

 # echo (パッケージ名) hold | dpkg --set-selections
 例)
 # echo jnethack hold | dpkg --set-selections

**testing/unstable から stable にダウングレードしたい [#de0edda6]
不可能ではありませんが、現在では推奨されません。

[[Debianリファレンス - 2.7.7. 緊急ダウングレード>http://www.jp.debian.org/doc/manuals/debian-reference/ch02#_emergency_downgrading]] 参照

**どのパッケージを testing や unstable から借りてるか知りたい [#x5a412bf]
[[apt-show-versions>http://packages.qa.debian.org/a/apt-show-versions.html]] を使うとよいでしょう。
例えば testing を使っているけど一部 unstable から借りている場合
 $ apt-show-versions | grep unstable

**パッケージのバージョンを調べたい [#qaa58025]
[[apt-show-versions>http://packages.qa.debian.org/a/apt-show-versions.html]] を使うと便利です。
たとえば stable 環境で apache のバージョンを知りたければ
 $ apt-show-versions -p apache
 apache/stable uptodate 1.3.26-0woody3
といった感じに出力されます。
testing/unstable のバージョンも知りたければ、
 $ apt-show-versions -a -p apache
 apache  1.3.26-0woody3  install ok installed
 apache  1.3.26-0woody3  stable
 No proposed-updates version
 apache  1.3.26-1.1      testing
 apache  1.3.27-0.1      unstable
 apache/stable uptodate 1.3.26-0woody3
のように出力されます。

**あるパッケージがどの apt-line からインストールされるのか知りたい &aname(apt-cache-policy); [#f4f8fafd]

 $ apt-cache policy パッケージ名

**あるパッケージがどのパッケージに依存している/されているのか知りたい [#j36c0914]
どのパッケージに依存しているのか調べるには
 $ apt-cache depends (パッケージ名)
[[apt-rdepends>http://packages.qa.debian.org/a/apt-rdepends.html]] を使えば指定したパッケージに依存しているパッケージの依存状態も表示できる。
 $ apt-rdepends (パッケージ名)

どのパッケージに依存されているのか調べるには
 $ apt-cache rdepends (パッケージ名)

**依存関係から孤立したパッケージを探すには &aname(orphan); [#he458230]
[[deborphan>http://packages.qa.debian.org/d/deborphan.html]] を使いましょう。
 $ deborphan --guess-all
削除する場合に便利なフロントエンドもあります。
 # orphaner --guess-all
また GTK+ フロントエンドの [[gtkorphan>http://packages.qa.debian.org/g/gtkorphan.html]] もあります。

**依存関係で足りないパッケージを探すには [#gde5d153]
 # apt-get check

**recommends なパッケージも一緒にインストールしたい [#ue9e7804]
aptitude を使えば recommends なパッケージも一緒にインストールされます。
 # aptitude install (パッケージ名)

設定は aptitude をフルスクリーンモードで起動して
 # aptitude
F10 → Options → Dependency handling で。

**recommends なパッケージを自動的にインストールさせたくない [#u14754fd]
testing/unstableのaptitudeではrecommendsなパッケージを強制的にインストールするようになっています。これを防ぐには

コマンドラインからは
 # aptitude -R install (パッケージ名)

設定は aptitude をフルスクリーンモードで起動して
 # aptitude
F10 → Options → Dependency handling → Install Recommended packages automatically のチェックを外しておきます。

デフォルトでrecommendsをインストールさせないようにするには、/etc/apt/apt.confに

 APT::Install-Recommends "false";

と書いておきます。

**削除したパッケージに関連したパッケージを削除したい [#baaa7ba3]

インストール時に aptitude を使いましょう。
依存関係で芋蔓式にインストールされたパッケージも一緒に削除できます。

もう遅い、という人は[[依存関係から孤立したパッケージを探すには>#orphan]]を読んで、手動で検索して削除しましょう。
そして次から aptitude を使うように。

**aptitude upgrade で消したくないパッケージを REMOVE すると言ってきます。 [#i86fca43]
aptitude は自動的にインストールされたものか、指定してインストールされたものかを独自で管理しています。
 # aptitude unmarkauto パッケージ名
で自動的にインストールしたものではないと設定できます。

**既存のシステムと全く同じパッケージ構成にしたい [#yc542fea]
既存のシステムと全く同じパッケージ構成を再現したいときには、
既存のマシンから、
 $ dpkg --get-selections > list
でパッケージ構成を取得、/var/lib/apt/extended_states と共に新規マシンにコピーし、
 # dpkg --set-selections < list
 # apt-get dselect-upgrade
とすれば、パッケージリストファイルの内容にしたがってパッケージがインストールされます。

aptitude の構成情報を全てアーカイブするには、
 # aptitude-create-state-bundle archive.tar.bz2
(上記アーカイブには dpkg, apt の構成情報も含まれています。)~
上記 archive.tar.bz2 を新しいシステム上で反映させるには、
 # aptitude-run-state-bundle archive.tar.bz2
//thx

**初回インストール時の質問による設定をもう一度したい [#qc5a4f24]
 # dpkg-reconfigure (パッケージ名)
 例)
 # dpkg-reconfigure debconf
このパッケージ構成フレームワークは ''Debconf'' と呼ばれます。

参照:~
-[[DebConf - Debian Wiki>http://wiki.debian.org/DebConf]]
-[[debconf User編>http://www.eto.to/debian/debconf-u.html]]
-[[Open Tech Press | Debconfを用いたシステム構成>http://opentechpress.jp/developer/06/06/12/0131253.shtml]]

**パッケージインストール時の質問がウザい [#s28597c6]
Debconf の質問に関する設定を変更しましょう。
 # dpkg-reconfigure debconf
例えば「低 (low)」にすると用意されている質問をすべて表示します。~
「高 (high)」にするとデフォルト選択肢が用意されていない質問のみ表示します。

**Debconf を使用するパッケージを探したい [#s7f62a89]
[[configure-debian>http://packages.qa.debian.org/c/configure-debian.html]] をインストールして、
 # configure-debian
を実行すると、admin や base などの各サブセクション毎に Debconf を使用する
パッケージがリストアップされ、パッケージを選択することにより、Debconf を用いて
再設定できます。

**dpkg -l でパッケージ名とかバージョンが途中までしか表示されない [#h902820b]
環境変数 COLUMNS を大きな値 (200 とか) に設定してみてください。
 例:
 $ COLUMNS=200 dpkg -l
alias に登録しておくという手もあります。
 $ alias dpkg='COLUMNS=${COLUMNS:-80} dpkg' 

**aptitude update したら "E: Dynamic MMap ran out of room" とエラーが出た [#rc3b12ea]
sources.list にたくさん書きすぎです。apt-line を減らすか、/etc/apt/apt.conf.d/99cache_limit に
 APT::Cache-Limit "100000000";
などと書いておくといいです。

詳しくは man apt.conf 参照。

**aptitude upgrade で 400 Bad Request が返る [#a46deee8]
おそらく HTTP 1.1 を解さない proxy のせいです。debian-user@Org での 
[[Jason Gunthorpe 氏の投稿>http://lists.debian.org/debian-user/1999/10/msg00177.html]]
を要約すると

+ [[診断くん>http://taruo.net/e/]]等を利用して、ISP が proxy を利用していることを確認したのち、ISP にゴルァ電。ISP がソフトウェアをアップグレードしてくれるまで続ける。「(ベンダ名) 逝ってよし!」と叫ぶのも忘れない。ftp を使うと少しはましな結果になるかもしれない。
+ acquire::http::pipeline-depth=0 を設定する (see "man apt.conf")

の 2 通りの方法があるようです。

**ローカルにあるパッケージを APT でインストールしたい [#b78c303f]

***apt-ftparchive [#tbcb533d]
//deb を置いたディレクトリで dpkg-scanpackages
// $ dpkg-scanpackages ./ /dev/null | gzip -c9 > Packages.gz 
//でもいいけど
// $ apt-ftparchive packages . | gzip -c9 > Packages.gz
// $ apt-ftparchive sources . | gzip -c9 > Sources.gz
//の方がムトゥ神推奨。apt-ftparchive は apt-utils パッケージに入っている。~

.deb, .dsc, .diff.gz, .changes, .orig.tar.gz を同じディレクトリに突っ込む。~
(本当は公式アーカイブのようにアーキテクチャ、リリース毎にディレクトリを分けるべきだが、ここでは説明しない。)~
以下このディレクトリで作業する。~

以下の内容で apt-archive.conf を作成

 Dir {
   ArchiveDir "." ;
 };
 
 BinDirectory "." {
   Packages "./Packages" ;
   Sources "./Sources" ;
   Contents "./Contents-i386" ;
 };
 
apt-utils パッケージインストール後、以下のコマンドを実行

 $ apt-ftparchive generate apt-archive.conf

これでカレントディレクトリに Packages, Packages.gz, Sources, Sources.gz, Contents-i386 Contents-i386.gz が生成される。~

続いて以下の内容で、apt-release.conf ファイルを作成

 APT {
   FTPArchive {
     Release {
       Origin "unreleased" ;
       Label "unreleased" ;
       Suite "unstable" ;
       Codename "sid" ;
       Architectures "i386 all source" ;
       Components "main contrib non-free" ;
       Description "Unofficial packages - Not Released" ;
      };
   };
 };

以下のコマンドを実行

 $ LANG=C apt-ftparchive -c apt-release.conf release . > Release

署名済 Release ファイルを生成
 $ gpg -abs -o Release.gpg Release

この時署名に使用した公開鍵を /etc/apt/trusted.gpg.d/ ディレクトリにバイナリ形式で放り込む。

 # gpg --export xxx > /etc/apt/trusted.gpg.d/local.gpg
 # apt-key list
 ...
 /etc/apt/trusted.gpg.d//local.gpg
 ---------------------------------
 ...

最後に sources.list に ローカルパッケージをインストールするための apt-line を追加する。~
通常は file プロトコルを使用すればよいが、.deb ファイルが /var/cache/apt/archives 以下にコピーされるようにするには、
copy プロトコルを使用する。

 deb file:(ディレクトリ) ./
 deb-src file:(ディレクトリ) ./
または、
 deb copy:(ディレクトリ) ./
 deb-src copy:(ディレクトリ) ./

 例)
 deb file:/usr/src/ ./
apt-line を追加したら、
 # aptitude update && aptitude install (パッケージ名)
で完了。

参考:~
-man apt-ftparchive(1)
-/usr/share/doc/apt/offline.html

*** gdebi [#l6f47aff]

GUIだったら、gnomeのファイルマネージャの右クリックに、「Gdebi パッケージ マネージャで開く」がある。

gnomeを載せてないサーバなどの環境では、gdebiをインストール:

 $ sudo aptitude install gdebi

gdebi-gtkも含まれているので、gtk関係がインストールされていないサーバとかだったら、gtkを使うためのXのクライアント関係のパッケージもたくさん入るが、目をつむる。

 $ sudo gdebi パッケージ名.deb

で、aptを呼び出して、関連のパッケージも入れてくれる。

**/etc/apt/sources.list を分割したい [#efa6854c]
apt の バージョン 0.6.43 以降では、/etc/apt/sources.list と同じ書式の、"."で始まらず、
英数字と "_" "-" "." だけからなり、拡張子が "list" のファイルをディレクトリ /etc/apt/sources.list.d に配置すると、読み込んでくれます。~
これにより肥大化した sources.list を分割することができます。~

**apt の GUI フロントエンドはありますか? [#i4fea9a8]
[[synaptic>http://www.nongnu.org/synaptic/]] や [[gnome-apt>http://packages.qa.debian.org/g/gnome-apt.html]]、[[packagesearch>http://packagesearch.sourceforge.net/]]、[[kpackage>http://www.general.uwa.edu.au/u/toivo/kpackage/]] などがあります。

**パッケージの更新を通知して欲しい [#fc86a8c4]
etchでデフォルトのデスクトップ環境(GNOME)をインストールしたなら、[[update-manager>http://packages.qa.debian.org/u/update-manager.html]]がインストールされるので必要ありませんが、それ以外の環境では以下の物を使うとよいかもしれません。

KDE環境では[[adept>http://packages.qa.debian.org/a/adept.html]]を使いましょう。

その他の環境では[[apt-watch>http://packages.qa.debian.org/a/apt-watch.html]] を使いましょう。
[[cron-apt>http://packages.qa.debian.org/c/cron-apt.html]] と組み合わせて使えば cron-apt で情報を取得し、更新があれば apt-watch が更新した事を通知してくれます。

類似パッケージに [[apticron>http://packages.qa.debian.org/a/apticron.html]] などがあります。

**自動で upgrade させたいんですけど [#p8b9b2ba]
[[cron-apt>http://packages.qa.debian.org/c/cron-apt.html]] を使いましょう。~
ただしデフォルトではダウンロードのみされるように設定されてます。
/etc/cron-apt/action.d/3-download の upgrade から "-d" オプションを取り除き、debconf や apt.conf などに APT::Get::Assume-Yes "true" などを設定しておきましょう。
危険なので stable でセキュリティ Fix のみするような用途以外にはオススメしません。

**aptitude upgrade したときのパッケージの変更点を知りたい [#xb4534c6]
aptitudeでは知りたいパッケージにカーソルを合わせ「C(大文字)」キーを押すと、ChangeLogが表示されるので変更点を知ることができます。

他には [[apt-listchanges>http://packages.qa.debian.org/a/apt-listchanges.html]] を使う方法もあります。~
apt-listchangesをインストールしているとアップグレードされるパッケージの変更点を表示してくれます。

ChangeLog の表示方法など、各種設定を行うには次を実行してください。
 # dpkg-reconfigure apt-listchanges

apt-get -u upgrade も使える?

**aptitude install/upgrade 時にパッケージの BTS を調査したい [#fdb5222f]
[[apt-listbugs>http://packages.qa.debian.org/a/apt-listbugs.html]] をインストールしましょう。

**パッケージのセキュリティの状態を調査したい [#x8e66fcf]
[[debsecan>http://packages.qa.debian.org/d/debsecan.html]] というパッケージがあります。
これは現在インストールされているパッケージのセキュリティホールを cron を用いてリストアップしてくれます。

**主なエラー [#c7e13b1e]

***aptitude や apt にて dpkg がエラーを吐く [#d8b2e9f0]
:原因:|/var/lib/dpkg/status が壊れた事で debconf の install 状態が
不明になったため

:対処:| /var/lib/dpkg/status を別の場所から取ってくる
+/var/lib/dpkg/status-old
+/var/backups/dpkg.status.*
+他のマシンから持ってくる

参考:~
http://lists.debian.or.jp/debian-users/200404/msg00132.html

***/var/cache/apt/available が頻繁に壊れるんだけど [#zf705272]
まずは [[memtest86>http://packages.qa.debian.org/m/memtest86.html]] 等でメモリチェックしてみましょう。
grub などのブートローダから起動する事もできます。

参考:~
http://lists.debian.or.jp/debian-users/200408/msg00098.html

まさかディスクが不良ブロックだらけって事はないよね?
 # badblocks -v /dev/hda1

ext2/ext3 なら該当パーテョションをマウントしていない状態で
 # e2fsck -cf /dev/hda1
すればファイルシステムが不良ブロックを使う事を回避できる。

Reiserfs なら [[Bad block handling in ReiserFS>http://namesys.com/bad-block-handling.html]] を参照。
XFS, JFS な人は不良ブロックを回避できないらしい?

***apt-get でセグメンテーション違反が出た [#v04606bb]
 # mv /var/cache/apt/pkgcache.bin /var/cache/apt/pkgcache.bin.bak
 # mv /var/cache/apt/srcpkgcache.bin /var/cache/apt/srcpkgcache.bin.bak
してから、apt-get update してみると回避できるかもしれません。~
上記で駄目なら以下も試してみてください。~
 dpkg --configure -a 

***「壊れているか、完全にインストールされていません」というエラーが出る [#ydb128e2]
パッケージの状態がおかしくなっているのかもしれません。
 # apt-get install -f
や
 # dpkg --configure -a
でほとんどの場合はシステムを修復できます。
失敗した場合「どのパッケージが原因となって失敗したか」というメッセー
ジが出力されるので、それを元に手作業で修復しましょう。

-そのパッケージを再インストールしてみる
-そのパッケージを削除して再インストールしてみる
-そのパッケージの maintainer scripts を調べてみる

参考:~
http://lists.debian.or.jp/debian-users/200409/msg00086.html

***apt の "-f" オプションでも問題が解決しないとき [#idd6472b]
下記のようなエラーメッセージが返ってくることがあります。

 −−−−−−−−−−省略−−−−−−−−−−
 dpkg: /var/cache/apt/archives/package-AAA*.deb の読み込みエラーです(--unpack):
 `*'を上書きしようとしています。これはパッケージ package-BBB にも含まれています。。
 dpkg-deb: サブプロセス paste がシグナル (パイプが切断されました) によって強制終了しました。
 以下のパッケージの処理中にエラーが発生しました:
 /var/cache/apt/archives/package-AAA*.deb
 E: Sub-process /usr/bin/dpkg returned an error code (1)

恐らく package-AAA に package-BBB を Replaces するよう指定されていない事が原因で、メンテナのパッケージングミスです。
軽度な場合は再度 upgrade を実行すれば回避できるかもしれません。

駄目な場合は package-BBB を削除すれば回避できるかもしれませんし、余計にややこしい状態になるかもしれません。
急ぎでなければ BTS に投げて修正されるのを待ちましょう。

***/var/lib/dpkg/available が壊れた [#n66724ba]
// 壊れているときにどんな害があるのか知りませんが・・・
// /var/lib/apt/lists/* を dpkg 用に Reformat し、現時点のパッケージ情報を書き加えた設定ファイル。
apt-get update, aptitude update などでは修復できません。~
(dpkg が管理する設定ファイルであるため。)

dselect を起動して 2 の update を実行しましょう。

//dselect は UTF-8 ロケールに対応していないので、
//起動時は
// # LC_ALL=C dselect
//などとするとよいです。

2 の update を実行したら終了してしまってかまいません。

*パッケージの FAQ [#r3d1cf56]

**バグを発見したのでバグレポートを出したい [#f40d3910]
[[Debian にバグを報告する方法>http://www.jp.debian.org/Bugs/Reporting]]を読みましょう。~
英語が苦手でもエラーメッセージなどを添えて報告すれば多分伝わります。~
勇気を出して!

もちろん Debian 固有のバグではないと分かった場合は配布元の方へ報告しましょう。~
送る前に同じバグレポートがないかチェックするのを忘れずに。

**apt-line の proposed-updates って何? &aname(proposed-updates); [#v3178fef]
これはリリース後に行われた修正を取り込んだパッケージを暫定的に置く所で、
原則次のリリース時には本体に取り込まれます。~
従ってこれは Debian の "正式" リリースではありません。~
主にセキュリティ Fix の為に設置されますが、あくまで開発者向けの暫定的なものなので
突然パッケージがなくなったりして依存関係に問題が出ることもあり、注意が必要です。
また、パッケージが十分にレビューされていない可能性もあるので、
一般のユーザは取り込まない方が良いでしょう。~
//(testing-proposed-updates はこの限りではありません。)~
この "リリース" というのはメジャーリリースではなくマイナーリリースのことで、
例えば、sarge (3.1) ならば 3.1r0 などの r0 というリビジョンが振られます。~
>
-[[リリースノート - 2.1.2. proposed-updates セクション>http://www.jp.debian.org/releases/stable/i386/release-notes/ch-whats-new#proposed-updates-intro]]
<

[[Debian - News: Debian Security Support in Place, July 8th, 2005>http://www.jp.debian.org/News/2005/20050708]] 
では、導入に対する警告が行われました。

**古いパッケージを入れたい [#g1e5690e]

-アップグレードしたら新しいパッケージがうまく動かない
-少し前のバージョンのパッケージに戻したいけど /var/cache/apt/archives にパッケージが見あたらない

そんな経験はありませんか?そんなあなたに、スナップショットデビアンオルグ!

オフィシャルで過去に提供されていた古いバージョンのパッケージが置かれています。
ローカル (/var/cache/apt/archives) にキャッシュが残っていない場合などは、ここから古いバージョンのパッケージが入手できます。
使い方は http://snapshot.debian.org/ を参照。

ここで貴方のお望みのパッケージがきっと見つかるはずです。

**Debian では i586 や i686 などに最適化されたパッケージは提供されないの? &aname(optimize); [#l73aab9d]
kernel-image や glibc などの一部を除いて本家では提供される予定はありません。
自分で rebuild しましょう。
pentium-builder をインストールして
 $ export DEBIAN_BUILDARCH=i586
などとしておけばパッケージングするときに -mcpu=i586 -march=i586 でコンパイルしてくれます。
こうしてできあがったパッケージは hogehoge_i386.deb ですが、ちゃんと i586 に最適化されています。
また ix86 だけでなく DEBIAN_BUILDARCH=athlon なども指定できます。
大量に rebuild したい場合は apt-build や apt-src などを使うと便利です。
ソースをダウンロード、パッケージング、インストールという一連の作業を自動でやってくれます。
また [[ccache>http://packages.qa.debian.org/c/ccache.html]] や [[distcc>http://packages.qa.debian.org/d/distcc.html]] などをうまく使えばコンパイル時間も短縮できます。

参考~
http://julien.danjou.info/article-apt-build.html

**パッケージに自分で修正を加えたい &aname(customize); [#q1ce6073]
例:xsnow 1.42-1

apt-line に deb-src がなければ追記して
 # apt-get update
パッケージの build に必要なものをインストール
 # apt-get install build-essential devscripts
 # apt-get build-dep xsnow
作業するディレクトリに xsnow のソースをダウンロード
 $ cd (作業するディレクトリ)
 $ apt-get source xsnow
あらかじめローカルに .tar.gz .diff .dsc を用意している場合は
 $ dpkg-source -x xsnow-1.42-1.dsc
そして好きなように修正を加えます。

修正作業が終わったら、変更点を changelog に書く
 $ cd xsnow-1.42
 $ dch -n
そしてパッケージの build
 $ debuild -us -uc
無事に build できたら、パッケージをインストール
 # dpkg -i ../xsnow_1.42-1.1_*.deb

すべてのパッケージが対応している訳じゃないですが、環境変数 DEB_BUILD_OPTIONS に指定する事で以下のような操作ができます。
-nostrip : バイナリを strip しない
-debug : -g オプションをつけてビルド
-noopt : -O0 オプションでビルド

man dh_strip も参照してみてください。

なお、特定のアーキテクチャ向けに最適化したい場合は、
[[Debian では i586 や i686 などに最適化されたパッケージは提供されないの?>#optimize]]を参考のこと。

また、apt-get build-dep の代わりに mk-build-deps で作った xsnow-build-deps パッケージをインストールする方法があります。
不要になったビルド依存パッケージを削除する時に便利です。

**自作パッケージを作りたい &aname(SelfMadePackage); [#hed2a3b7]
ほとんどが自動化ツールで生成可能なので、本家マージや配布を考えなければ簡単につくれます。~
大抵のソフトウェアは普通にコンパイルする手間とさほど変わらないかと。

とりあえず以下をインストール
-[[build-essential>http://packages.qa.debian.org/b/build-essential.html]]
-[[devscripts>http://packages.qa.debian.org/d/devscript.html]]
-[[dh-make>http://packages.qa.debian.org/d/dh-make.html]]
-[[lintian>http://lintian.debian.org/]]
-[[fakeroot>http://packages.qa.debian.org/f/fakeroot.html]]

配布を考えているなら以下もインストール
-[[gnupg>http://packages.qa.debian.org/g/gnupg.html]]

とりあえず目的のモノが正常にコンパイルできる環境である事が前提です。
配布を考えているなら自分の名前やメールアドレスを指定しておきましょう。
 $ export DEBEMAIL="hoge@foge.ne.jp"
 $ export DEBFULLNAME="hoge fuge"
また gnupg など署名をつける場合にはあらかじめ鍵を作っておく必要があります。

まず作業したいディレクトリで tarball を展開します。
 $ tar xvfz hoge-0.1.tar.gz
展開したソースディレクトリに移動。
 $ cd hoge-0.1
次は hoge-0.1/debian の雛型をスクリプトによって自動で生成します。
 $ dh_make
ここで作成するパッケージの種類を聞かれますが、適当に答えましょう。
-s : 1つのパッケージとして作成
-m : 複数のパッケージに分割して作成
-l : ライブラリのパッケージとして作成
-k : カーネルモジュールのパッケージとして作成
-b : [[cdbs>http://packages.qa.debian.org/c/cdbs.html]] ベースのパッケージとして作成 (dh-make >= 0.40)

このままだとパッケージに関する情報のほとんどが空ですが、このままでもパッケージは作成できます。
でも配布を考えているなら最低限、ライセンスや依存関係等々を debian/ 下にある各種ファイルに書き込みましょう。
-control : パッケージの情報や依存関係等を記述
-copyright : ソフトウェアのライセンスや Upstream に関する情報を記述

記述の仕方は既存のパッケージを参考にするといいでしょう。
また *.ex というファイルが沢山ありますが、それらは高度なパッケージを作る場合に使用するファイルの雛形です。
使わなければ削除してしまっても問題ありません。~
debian/rules ファイルの書き方で悩む場合、(./configure &&) make 
([[GNU Autotools>http://ja.wikipedia.org/wiki/Autotools]]) 型のものであれば、(debhelper v7 以降専用ですが)

 #!/usr/bin/make -f
 %:
         dh $@
ですべて事が片付くかもしれません。(CDBS を使用するよりもはるかに簡単にはなっています。)

以上でパッケージ作成のための最低限の準備は整ったので、パッケージを構築します。
 $ debuild
lintian もしくは %%linda%%((lenny からは削除されています。)) が [[debian ポリシー>http://www.jp.debian.org/doc/debian-policy/]]に適合しているかチェックしてくれるので、表示された結果を元にエラー箇所を潰していけます。エラーの詳細を調べたいときは、
 $ lintian -i hoge_0.1-1_arch.changes
するといいでしょう。~
致命的な問題がなければ一つ上のディレクトリに hoge_0.1-1_arch.deb が生成されてます。
が、中身が意図してる状態になっているか確認しときましょう
 $ dpkg -c ../hoge_0.1-1_arch.deb
問題なければ Let's install!
 # dpkg -i ../hoge_0.1-1_arch.deb

新たにパッチなどを当てたのでリビジョンを上げたい。
そんな場合にはソースディレクトリで
 $ dch -i
changelog の編集を要求されるので、変更点などを書き込んで
 $ debuild
とすれば hoge_0.1-2_arch.deb が作れます。
[[dpatch>http://packages.qa.debian.org/d/dpatch.html]] などのパッチ管理ツールも用意されてるので利用しましょう。

hoge のバージョンが 0.1 から 0.2 に上がり、パッケージでもそれを追いかけたい。~
そんな場合には hoge-0.1 のあるディレクトリに hoge-0.2.tar.gz を置き
 $ cd hoge-0.1
 $ uupdate -v 0.2 ../hoge-0.2.tar.gz
 $ cd ../hoge-0.2
 $ debuild
で hoge_0.2-1_arch.deb が作れます。

//超テキトウなので誰か直して。
'''詳しくは以下を参考に、というか読め。'''

-[[Debian パッケージの作り方>http://www.ep.sci.hokudai.ac.jp/~epnetfan/zagaku/2000/1006/deb-make.html]]
-[[Debian 新メンテナガイド>http://www.jp.debian.org/doc/manuals/maint-guide/]]
-[[Debian パッケージの作り方 (ムトゥ神 lc2000 プレゼン版)>http://www.topstudio.co.jp/~kmuto/debian/event/lc2000f/]]
-[[Introduction to Debian packaging (ムトゥ神 ttyrec - かなり長いので注意)>http://namazu.org/~satoru/tty/]]
-[[Debian Linuxパッケージを作成する (IBM:dW)>http://www.ibm.com/developerworks/jp/linux/library/l-debpkg/]]
-[[dpatchの利用方法>http://www.netfort.gr.jp/~dancer/column/dpatch.html.ja]]
-[[Lintian report, sorted by tags>http://lintian.debian.org/reports/tags.html]]
-[[svn-buildpackage - Debian パッケージを Subversionで管理する>http://www.sabishiro.net/~tyuyu/debian/doc/svn-buildpackage/HOWTO/]]
-[[CDBS Documentation>http://cdbs-doc.duckcorp.org/]]
-[[CDBS 移行への 1st step>http://sugi.nemui.org/doc/cdbs/cdbs-trans-1st.html]]
-[[Online CDBS Gallery>http://cdbs.ueberalles.net/]]
//CDBS の使い方についての暫定メモ
//
//dh-make で cdbs 向けの雛形を生成する事ができる
// $ dh_make --cdbs
//
///usr/share/cdbs/1/rules/tarball.mk
//DEB_TAR_SRCDIR
//DEB_AUTO_CLEANUP_RCS
//
///usr/share/cdbs/1/class/autotools.mk
//DEB_CONFIGURE_EXTRA_FLAGS
//COMMON_CONFIGURE_FLAGS
//DEB_CONFIGURE_SCRIPT_ENV
//DEB_AUTO_UPDATE_LIBTOOL
//DEB_AUTO_UPDATE_AUTOCONF
//DEB_AUTO_UPDATE_AUTOMAKE
//
///usr/share/cdbs/1/rules/debhelper.mk
//
///usr/share/cdbs/1/rules/simple-patchsys.mk
//DEB_PATCHDIRS
//
///usr/share/cdbs/1/rules/dpatch.mk
-[[第 36 回 関西 Debian 勉強会>http://tokyodebian.alioth.debian.org/pdf/debianmeetingresume201006-kansai.pdf]]
--"4. dh &#8764;source format 3.0, the magic debhelper rules&#8764;" (debhelper v7 から導入された `dh' コマンドについて)

'''書籍'''

-[[[入門] Debian パッケージ>http://www.gihyo.co.jp/books/syoseki.php/4-7741-2768-X]]

**パッケージインストール時の処理について詳しく知りたい [#q172e31e]
メンテナスクリプト (maintainer scripts) については [[MaintainerScripts>http://women.debian.org/wiki/English/MaintainerScripts]] (英語) という文書があります。

**Debconf についての資料はありますか? [#ecfe041b]
[[仕様書>http://www.jp.debian.org/doc/packaging-manuals/debconf_specification.html]]があります。~
また、ukai さんによる資料もあります。~
[[第8回東京エリアDebian勉強会: debconfの使い方>http://ukai.jp/Slides/2005/0910-tokyodebian/]]

**build 時に要求される Build-Dep を検索したい [#y0e105eb]
[[grep-dctrl>http://packages.qa.debian.org/g/grep-dctrl.html]] ([[dctrl-tools>http://packages.qa.debian.org/d/dctrl-tools.html]])
に含まれている grep-available コマンドを利用してみては。
 $ grep-available -s Package -F Build-Depends (パッケージ名) /var/lib/apt/lists/(update で取得したデータ)

参考:~
http://lists.debian.or.jp/debian-users/200501/msg00201.html

**deb パッケージと rpm などの他のパッケージとの違いが知りたい [#rdffb898]
[[Linux/UNIX バイナリパッケージ形式の比較>PkgComp]] ([[原文>http://www.kitenet.net/~joey/pkg-comp/]])という素敵なドキュメントがあります。

**udeb ってなに? [#of255754]
インストーラなどに使われる、ドキュメントなどが省略されたパッケージ。~
普通の deb と udeb はファイル形式の観点から見れば同じもの。
udeb パッケージは [[kernel-wedge>http://packages.qa.debian.org/k/kernel-wedge.html]] でつくれます。

**unstable から testing にパッケージがなかなか降りてこないんだけど [#zdb34650]
通常は RC bug がなければ urgency=low の場合で 10 日ほどで testing に入る。
しかし他のパッケージに依存している場合、依存先のパッケージも testing に入ってないと降りてこない。
なので glibc などで RC bug が見つかったりするとほぼ更新が止まる。
どのパッケージがどんな理由で降りてこないのかは [[Why is package X not in testing yet?>http://bjorn.haxx.se/debian/]] で検索できます。

また [[devscripts>http://packages.qa.debian.org/d/devscripts.html]] に同梱されている grep-excuses でも同じような情報が取り出せます。
 $ grep-excuses (パッケージ名)
//参考: http://kmuto.jp/d/?date=20050104#p10

**パッケージのバグをチェックしたい [#ic060833]
[[reportbug>http://packages.qa.debian.org/r/reportbug.html]] パッケージに含まれる querybts コマンドを使うと、BTS をチェックできます。使い方は、
 $ querybts (パッケージ名)
を実行してください。

**パッケージ化の要望を出したい [#lb99b16d]
本当にオフィシャルパッケージが存在していないかチェック。~
その上で [[BTS の wnpp package>http://bugs.debian.org/wnpp]] をチェック。
BTS の wnpp packageとは開発者の助けを必要としているすべてのパッケージの情報を扱うための BTS 上だけの擬似パッケージ名です。~
ITP とあればすでに誰かがパッケージ化の宣言をしています。
ITP したまま放置されていなければ、その内パッケージ化されるでしょう。~
RFP とあればすでにパッケージ化の要望が出ています。
もし RFP もなければ、あなたが RFP を出して誰かが作ってくれるのを待ちましょう。~
詳しくは[[作業が望まれるパッケージ>http://www.jp.debian.org/devel/wnpp/]]参照。~
もちろんあなたが作ってもかまいません。 
ITP を宣言して[[パッケージを作って>http://www.jp.debian.org/doc/maint-guide/]]下さい。
その時は wnpp package に対する [[bug report>http://www.jp.debian.org/Bugs/Reporting]] という形で出します。~

当然再配布禁止のソフトウェアや商用ソフトウェアは入りません。
また既に公式パッケージがあるソフトウェアにパッチを当てただけのようなものも入りません。
[[パッケージ化することができないソフトウェア>http://www.jp.debian.org/devel/wnpp/unable-to-package]]も見ておきましょう。

**パッケージがなかなか更新されないんだけど [#n7a26701]
主な原因として
-ソフトウェア側に大きな変更や致命的なバグがあった。
-パッケージングに大幅な変更を加える予定。
-サポートしているアーキテクチャで build できなかった。
-メンテナが忙しくて更新作業をする暇がない。
-新しいメンテナを募集中。

**Mentors ってなに? [#gd5123f2]
Debianパッケージを作った人がパッケージをアップロードして、Debian開発者にスポンサー(後見人)になってもらうサイト。
Debianには入ってない新しいパッケージがあります。
> http://mentors.debian.net/

バイナリパッケージは提供していない(転送量過多で停止になった)ので、自分でパッケージをビルドする必要があります。

**Backports ってなに? &aname(backports); [#j909cbc8]
安定版用にテスト版や不安定版のパッケージを再ビルドして提供しています。
> http://backports.debian.org/

どのようなパッケージが提供されているかは [[lenny-backportsのセクション一覧>http://packages.debian.org/lenny-backports/]] を参照。

使用するにはapt-lineに以下を追加。

 deb http://ftp.jp.debian.org/debian-backports lenny-backports main contrib non-free
 deb-src http://ftp.jp.debian.org/debian-backports lenny-backports main contrib non-free
// deb http://backports.debian.org/debian-backports lenny-backports main contrib non-free
// deb-src http://backports.debian.org/debian-backports lenny-backports main contrib non-free

これ以外のミラーは http://backports.debian.org/Mirrors/ を参照。

gpg鍵の追加は以下のどれかでおこないます。

 apt-get install debian-backports-keyring

 gpg --keyserver hkp://subkeys.pgp.net --recv-keys 16BA136C
 gpg --export 16BA136C | apt-key add -

// wget -O - http://backports.org/debian/archive.key | apt-key add -

パッケージのインストールは-tオプションでbackportsを明示的に指定してインストールします。
(明示しない場合は安定版のパッケージがインストールされます)

 $ sudo apt-get -t lenny-backports install “package”
 $ sudo aptitude -t lenny-backports install “package”

Backports からインストールしたパッケージを最新状態に保ちたいなら、/etc/apt/preferences を編集してください。
例えば
 Package: *
 Pin: release a=lenny-backports
 Pin-Priority: 200

詳細は [[Debian Backports - Instructions>http://backports.debian.org/Instructions/]] 参照。

**Experimental ってなに? [#m0d7287a]
リスクが大きく、unstable に入れる前に実験をしたいソフトウェアがあります。
>http://packages.debian.org/experimental/

使用するには以下の apt-line を追加
 deb http://ftp.jp.debian.org/debian experimental main
 deb-src http://ftp.jp.debian.org/debian experimental main

さらに -t オプションで experimental を明示する必要があり。

**仮想パッケージやダミーパッケージってなに? [#i80e4b18]
仮想パッケージ (Virtual package) は実パッケージが存在しないパッケージのこと。
[[virtual section>http://packages.debian.org/unstable/virtual/]] に属します。
依存関係を柔軟に設定するために用意されているみたい。
-http://www.jp.debian.org/doc/FAQ/ch-pkg_basics#s-virtual
-http://www.jp.debian.org/doc/debian-policy/ch-binary#s-virtual_pkg
-http://www.jp.debian.org/doc/debian-policy/ch-relationships#s-virtual

ダミーパッケージ (メタパッケージ) は中身が Changelog や リンク提供のみの空パッケージのこと。
パッケージの分割等で変更された依存関係に互換性を持たせるため用意されたりします。
基本的には削除しても動作に問題は出ません。

**インストール済みのソフトウェアをパッケージに戻したい [#b1f4ab86]
[[dpkg-repack>http://packages.qa.debian.org/d/dpkg-repack.html]] を使いましょう。
一度パッケージからインストールしたソフトウェアを、再びパッケージに戻してくれます。
またインストール後に設定ファイルの編集等をした場合、その変更点を受け継いだパッケージが生成されます。
 # dpkg-repack (パッケージ名)

**unstable から削除されたパッケージを知りたい [#zd9eec67]
以下を参照
- http://ftp-master.debian.org/removals.html

削除された理由も一緒に書いてあります。~

//RSS Feed はこちら
//>http://newraff.debian.org/~joerg/removals/removals.rss

**testing から削除されたパッケージを知りたい [#kcef175e]
以下を参照
- http://ftp-master.debian.org/testing/hints/vorlon

削除された理由も一緒に書いてあります。

**unstable に追加されたパッケージを知りたい [#q2cd7928]
以下を参照
- http://packages.debian.org/unstable/main/newpkg
- http://packages.debian.org/unstable/contrib/newpkg
- http://packages.debian.org/unstable/non-free/newpkg

**人気コンテストへの参加 [#r2358ba4]
[[Debian Popularity Contest>http://popcon.debian.org/]] でパッケージの利用状況等を集計しています。
この結果は Orphan されたパッケージを QA Team で保守するかどうか、インストール CD に含めるパッケージを決める時等に利用されます。
参加するには [[popularity-contest>http://packages.qa.debian.org/p/popularity-contest.html]] をインストールするだけです。
 # aptitude install popularity-contest

**Microsoft Windows 上でパッケージを操作したい [#aaecf99b]
//[[Undeb>http://www.crystalidea.com/?action=freeware]], 
[[7-Zip>http://www.7-zip.org/]] 
などがあります。
Debian パッケージは debian-binary (ただのプレーンテキスト), control.tar.gz, data.tar.gz の 3 つを ar でアーカイブしたものなので、展開するだけなら ar 形式に (更に tgz 形式にも) 対応したアーカイバソフトでできるはずです。

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS