Debian stableにtesting/unstableのパッケージを投入する

ども！
Debianのstableを使っているとバージョンが枯れてきて新しいものが使えないという状態にまれになる事があります、というかサーバー環境でなくデスクトップ環境で利用しているようなものは特にそうなりがちです。

そういう場合の対処法ですが、まず基本は[Debian Backports](http://backports.debian.org/) にパッケージが無いか調べます。あれば解決ですが、無い場合が問題になってきます。

簡単に考えられる方法としては

1. 野良ビルド
2. 中途半端にtesting/sidを入れる(apt-lineを書き換えるなどして)

などが考えられますが、これらを行うとシステムが収集つかないくらいにグチャグチャになってしまう可能性があります。とりわけ、2. の中途半端な奴はlibcなどが引き上げられてstableなのかunstableなのかよくわからない状態にまでなる事があります。こうなるともはやstableを利用している意味が全くなくなってしまうというわけです。

、、というわけで、ここではstable(この記事の時点ではwheezy)の環境を可能な限り保ちつつ、testing/sidのパッケージを導入する方法を考えてみます。


## お題  keepass2

http://packages.debian.org/keepass2

まずは、上記のサイトで状況を調べます。バージョンを確認すると...

  * wheezy (stable): 2.19+dfsg-2: all 
  * jessie (testing): 2.27+dfsg-1: all 
  * sid (unstable): 2.28+dfsg-1: all 

となっており、stableがtesting/unstableと随分古くなっているのがわかります。しかし**all**と書いてある点が割と大事で、アーキテクチャの依存が無い事を示しています。こういうのは入りやすいです。スクリプトやドキュメントなどが多いですが、これはどうやらmonoを使ったモノらしいです。なんつってな。

、、、さて、アーキテクチャー allの場合はとりあえずdebを取ってきて入れるとかいう鬼な事から始めてみる事にします。
以下はあまりよろしくない例ですが、システムは壊れません。

```
# wget http://ftp.jp.debian.org/debian/pool/main/k/keepass2/keepass2_2.28+dfsg-1_all.deb
# dpkg -i keepass2_2.28+dfsg-1_all.deb
以前に未選択のパッケージ keepass2 を選択しています。
(データベースを読み込んでいます ... 現在 71431 個のファイルとディレクトリがインストールされています。)
(keepass2_2.28+dfsg-1_all.deb から) keepass2 を展開しています...
dpkg: 依存関係の問題により keepass2 の設定ができません:
 keepass2 は以下に依存 (depends) します: mono-runtime (>= 3.0~) ...しかし:
  パッケージ mono-runtime はまだインストールされていません。
 keepass2 は以下に依存 (depends) します: libmono-corlib4.5-cil (>= 3.2.8) ...しかし:
  パッケージ libmono-corlib4.5-cil はまだインストールされていません。
 keepass2 は以下に依存 (depends) します: libmono-system-drawing4.0-cil (>= 3.0.6) ...しかし:
  パッケージ libmono-system-drawing4.0-cil はまだインストールされていません。
 keepass2 は以下に依存 (depends) します: libmono-system-security4.0-cil (>= 1.0) ...しかし:
  パッケージ libmono-system-security4.0-cil はまだインストールされていません。
 keepass2 は以下に依存 (depends) します: libmono-system-windows-forms4.0-cil (>= 1.0) ...しかし:
  パッケージ libmono-system-windows-forms4.0-cil はまだインストールされていません。
dpkg: keepass2 の処理中にエラーが発生しました (--install):
 依存関係の問題 - 設定を見送ります
man-db のトリガを処理しています ...
処理中にエラーが発生しました:
 keepass2

```

満たせない依存関係がある事がわかります。このような場合は**apt-get install -f**すると解決する事もあります、が、

```
# apt-get install -f
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
依存関係を解決しています ... 完了
以下のパッケージは「削除」されます:
  keepass2
アップグレード: 0 個、新規インストール: 0 個、削除: 1 個、保留: 47 個。
1 個のパッケージが完全にインストールまたは削除されていません。
この操作後に 2,433 kB のディスク容量が解放されます。
続行しますか [Y/n]?
```
依存が満たせないので吐き出されます。仕方がないのでYで吐き出してしまいましょう。
なお、ここで依存が満たせた場合は作業終わりです。最後に書いてあるパッケージを手動で入れた場合、って注意にだけ気を付けましょう。

### 依存をよく見てみる

ここで失敗している原因を見ます。以下のパッケージの特定のバージョンに依存しているのだけど、stableに無いので怒られている感じです。

  *  mono-runtime (>= 3.0~)
  *  libmono-corlib4.5-cil (>= 3.2.8)
  *  libmono-system-drawing4.0-cil (>= 3.0.6)
  *  libmono-system-security4.0-cil (>= 1.0)
  *  libmono-system-windows-forms4.0-cil (>= 1.0)

なるほどね、**monoが古い**、っつーわけですね

```
# apt-cache show mono-runtime
Package: mono-runtime
Source: mono
Version: 2.10.8.1-8
<snip>
```

というわけなんでmonoを何とかしないといかん感じです。これはとりあえず[monoのページ](http://www.mono-project.com/docs/getting-started/install/linux/)に行ってみる所から始めます。なお、ここは「mono debian」とかでｸﾞｸﾞったら出ました。

ここにdebianシステムに入れる方法などが書いてあります。apt-lineが用意されてるんでおそらく何かあっても大丈夫でしょう！(きっと)

```
# apt-key adv --keyserver pgp.mit.edu --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
# echo "deb http://download.mono-project.com/repo/debian wheezy main" > /etc/apt/sources.list.d/mono-xamarin.list
# apt-get update
...
```

じゃあ、入れていきますか。やり方はいろいろあると思うけど、さっき足りなかった奴をとりあえず入れる、と(しかしこのやり方ではautoremoveが効かなくなる可能性があありますので、あんまりよいとは言えませんが、、今回はとりあえずやります)

```
# apt-get install mono-runtime libmono-corlib4.5-cil libmono-system-drawing4.0-cil libmono-system-security4.0-cil libmono-system-windows-forms4.0-cil
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下の特別パッケージがインストールされます:
  cli-common libcairo2 libexif12 libffi5 libgdiplus libgif4 libglib2.0-0
  libglib2.0-data libmono-accessibility4.0-cil libmono-data-tds4.0-cil
  libmono-i18n-west4.0-cil libmono-i18n4.0-cil libmono-posix4.0-cil
  libmono-security4.0-cil libmono-system-configuration4.0-cil
  libmono-system-data4.0-cil libmono-system-enterpriseservices4.0-cil
  libmono-system-runtime-serialization-formatters-soap4.0-cil
  libmono-system-transactions4.0-cil libmono-system-xml4.0-cil
  libmono-system4.0-cil libmono-webbrowser4.0-cil libpixman-1-0 libtiff5
  libxcb-render0 libxcb-shm0 libxrender1 mono-4.0-gac mono-gac
  mono-runtime-common mono-runtime-sgen shared-mime-info
提案パッケージ:
  libmono-i18n4.0-all libgnomeui-0 libgtk2.0-0 librsvg2-2 libasound2 libgamin0
  xdg-utils libgnome2-0 konqueror
推奨パッケージ:
  libgluezilla
以下のパッケージが新たにインストールされます:
  cli-common libcairo2 libexif12 libffi5 libgdiplus libgif4 libglib2.0-0
  libglib2.0-data libmono-accessibility4.0-cil libmono-corlib4.5-cil
  libmono-data-tds4.0-cil libmono-i18n-west4.0-cil libmono-i18n4.0-cil
  libmono-posix4.0-cil libmono-security4.0-cil
  libmono-system-configuration4.0-cil libmono-system-data4.0-cil
  libmono-system-drawing4.0-cil libmono-system-enterpriseservices4.0-cil
  libmono-system-runtime-serialization-formatters-soap4.0-cil
  libmono-system-security4.0-cil libmono-system-transactions4.0-cil
  libmono-system-windows-forms4.0-cil libmono-system-xml4.0-cil
  libmono-system4.0-cil libmono-webbrowser4.0-cil libpixman-1-0 libtiff5
  libxcb-render0 libxcb-shm0 libxrender1 mono-4.0-gac mono-gac mono-runtime
  mono-runtime-common mono-runtime-sgen shared-mime-info
アップグレード: 0 個、新規インストール: 37 個、削除: 0 個、保留: 47 個。
20.9 MB 中 14.8 MB のアーカイブを取得する必要があります。
この操作後に追加で 58.8 MB のディスク容量が消費されます。
続行しますか [Y/n]?
```

ちなみにバージョンとかよく見てません。とりあえず入ったみたいです。さて、dpkgを...

```
# dpkg -i keepass2_2.28+dfsg-1_all.deb
以前に未選択のパッケージ keepass2 を選択しています。
(データベースを読み込んでいます ... 現在 71998 個のファイルとディレクトリがインストールされています。)
(keepass2_2.28+dfsg-1_all.deb から) keepass2 を展開しています...
dpkg: 依存関係の問題により keepass2 の設定ができません:
 keepass2 は以下に依存 (depends) します: libx11-6 (>= 2:1.6.0) ...しかし:
システム上の libx11-6:i386 のバージョン は 2:1.5.0-1+deb7u1 です。

dpkg: keepass2 の処理中にエラーが発生しました (--install):
 依存関係の問題 - 設定を見送ります
man-db のトリガを処理しています ...
shared-mime-info のトリガを処理しています ...
処理中にエラーが発生しました:
 keepass2
```

あ、あれ(死) 。ちなみに、ここでdpkgを行って入ってしまう事もあります。この場合も後述する注意の所を気にしてください。

なおぶっ壊れた状態なので、先程のように

```
# apt-get install -f
```
すると依存の壊れたパッケージが吐き出されます。吐き出しておきましょう(どうせ動かない)


### libx11-6が古い...

パッケージの状態を見ます

http://packages.debian.org/libx11-6

  * wheezy (stable) (libs): 2:1.5.0-1+deb7u1
  * jessie (testing) (libs): 2:1.6.2-3
  * sid (unstable) (libs): 2:1.6.2-3


要求は(>= 2:1.6.0)なのでstableだとかなりイケてない状態です。backportsも無いので割と詰みな気配も漂ってきましたが、まだもうちょっと粘ります。

### libx11-6が古い、のであれば新しくし直してやる

ここからが割と本題です。libx11-6を作り直します。この作業は一般ユーザで行います**rootはダメっす**

まず、apt-lineを確認します。っつっても/etc/apt/sources.listは一般ユーザでは書き換えられないのでroot権限で...

```
% sudo vi /etc/apt/sources.list 
```

ここにsidのdeb-srcラインを貼ります。srcは特殊なラインなのでupgradeとかしても何も起こらないです。

```
deb http://ftp.jp.debian.org/debian/ wheezy main
deb-src http://ftp.jp.debian.org/debian/ wheezy main
# ↓これを追加
deb-src http://ftp.jp.debian.org/debian/ sid main

deb http://security.debian.org/ wheezy/updates main
deb-src http://security.debian.org/ wheezy/updates main

# wheezy-updates, previously known as 'volatile'
deb http://ftp.jp.debian.org/debian/ wheezy-updates main
deb-src http://ftp.jp.debian.org/debian/ wheezy-updates main
```

apt-get updateします、てかこれもroot権限必要ですね

```
% sudo apt-get update 
```

apt-get upgradeするとわかるけど、sidにはアップグレードされません。あくまでsrcラインです、というわけでsourceを取りましょう。ここではユーザのhome以下で行うのを想定してます、いわゆる **~/** みたいな所、に~/debianとかいうディレクトリでも作って作業しましょうか。結構ぶちまけられるので。

```
% mkdir ~/debian 
% cd ~/debian
```

ここでapt-get sourceします。**root権限で行ってはいけません**

```
% apt-get source libx11-6                                        
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
'libx11-6' の代わりに 'libx11' をソースパッケージとして選出しています
注意: 'libx11' パッケージは以下の場所の 'Git' バージョン制御システムで保守されています:
git://git.debian.org/git/pkg-xorg/lib/libx11
3,195 kB のソースアーカイブを取得する必要があります。
取得:1 http://ftp.jp.debian.org/debian/ sid/main libx11 2:1.6.2-3 (dsc) [2,510 B]
取得:2 http://ftp.jp.debian.org/debian/ sid/main libx11 2:1.6.2-3 (tar) [3,120 kB]
取得:3 http://ftp.jp.debian.org/debian/ sid/main libx11 2:1.6.2-3 (diff) [72.8 kB]
<snip...>
```

sidのsourceを取りにいってる所に注目。


```
% ls                                                             
libx11-1.6.2/           libx11_1.6.2-3.dsc
libx11_1.6.2-3.diff.gz  libx11_1.6.2.orig.tar.gz
```

とこんな感じになりました。

次に、libx11-6をビルドするのに必要なもの一式をシステムに組み入れます。**apt-get build-dep**です。
これはシステムの中につっこむので**rootでやります**(ややこしい)

```
% sudo apt-get build-dep libx11-6 
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
'libx11-6' の代わりに 'libx11' をソースパッケージとして選出しています
以下のパッケージが新たにインストールされます:
  autoconf automake autotools-dev debhelper diffstat docbook-xml docbook-xsl
  gettext html2text intltool-debian libcroco3 libgc1c2 libgettextpo0
  libpthread-stubs0 libpthread-stubs0-dev libtool libunistring0 libxau-dev
  libxcb1-dev libxdmcp-dev libxml2-utils libxslt1.1 m4 pkg-config po-debconf
  quilt sgml-data w3m x11proto-core-dev x11proto-input-dev x11proto-kb-dev
  x11proto-xext-dev x11proto-xf86bigfont-dev xmlto xorg-sgml-doctools xsltproc
  xtrans-dev xutils-dev
```

自分のシステムも割と使いこんである奴なのでここでの依存性は人それぞれになってるかもしれません。とりあえず私の状態ではこんな感じでした。ともあれこれが無いとビルドできないというわけなんで、入れましょうか。

で、**libx11-1.6.2**にcdします

```
% cd libx11-1.6.2
```


最後に**dpkg-buildpackage**します。オプションは以下の通り。zshだと補完してくれるんで便利ですね～

```
% dpkg-buildpackage -(tabキーをパパッとな)
--help     -h  -- show usage message
--version      -- show version
-B             -- binary-only build, no source or arch-indep binaries
-D             -- check build dependencies and conflicts
-E             -- negates previously-set -W
-S             -- source-only build, no binaries
-W             -- turn certain errors into warnings
-b             -- binary-only build, no source
-d             -- do not check build dependencies and conflicts
-nc            -- do not clean source tree
-tc            -- clean the source tree after build
-uc            -- do not sign .changes file
-us            -- do not sign source package
--admindir   -I           -e           -k           -p           -s
-C           -a           -i           -m           -r           -v
```

ここでは-us -ucを与えます。簡単にまとめると署名系をすっとばすという事ですかね。

```
% dpkg-buildpackage -us -uc
<snip.....>
dpkg-deb: `../libx11-6_1.6.2-3_i386.deb' にパッケージ `libx11-6' を構築しています。
dpkg-deb: `../libx11-6-udeb_1.6.2-3_i386.udeb' にパッケージ `libx11-6-udeb' を構築しています。
dpkg-deb: `../libx11-6-dbg_1.6.2-3_i386.deb' にパッケージ `libx11-6-dbg' を構築しています。
dpkg-deb: `../libx11-dev_1.6.2-3_i386.deb' にパッケージ `libx11-dev' を構築しています。
dpkg-deb: `../libx11-xcb1_1.6.2-3_i386.deb' にパッケージ `libx11-xcb1' を構築しています。
dpkg-deb: `../libx11-xcb1-dbg_1.6.2-3_i386.deb' にパッケージ `libx11-xcb1-dbg' を構築しています。
dpkg-deb: `../libx11-xcb-dev_1.6.2-3_i386.deb' にパッケージ `libx11-xcb-dev' を構築しています。
 dpkg-genchanges  >../libx11_1.6.2-3_i386.changes
dpkg-genchanges: not including original source code in upload
 dpkg-source --after-build libx11-1.6.2
dpkg-buildpackage: binary and diff upload (original source NOT included)

```
これでビルドが通れば勝ち。通らなかったら自力で何とかするしか無いかも。今回は幸い通りました、と。

一つ上にcdしますと

```
% cd ..
% ls
libx11-1.6.2/                    libx11-xcb-dev_1.6.2-3_i386.deb
libx11-6-dbg_1.6.2-3_i386.deb    libx11-xcb1-dbg_1.6.2-3_i386.deb
libx11-6-udeb_1.6.2-3_i386.udeb  libx11-xcb1_1.6.2-3_i386.deb
libx11-6_1.6.2-3_i386.deb        libx11_1.6.2-3.diff.gz
libx11-data_1.6.2-3_all.deb      libx11_1.6.2-3.dsc
libx11-dev_1.6.2-3_i386.deb      libx11_1.6.2-3_i386.changes
libx11-doc_1.6.2-3_all.deb       libx11_1.6.2.orig.tar.gz
```

でぶが一杯出来てる (ﾉﾟωﾟ)ﾉ というわけなんで、このdebを入れます。dpkgを使ってもいいし、ローカルapt-lineを書いてもいいです、まあ今回は面倒なんでdpkgを使います。(本当はローカルapt-lineの方がいいでしょう。この違いは後で書きたいと思います)

あ、あと見ての通り32bitシステムで実行してるので64bitだとサフィックスがamd64とかいう名前になります。

システムに変更がかかるんで、rootで行います

```
% sudo dpkg -i libx11-*.deb                                      
以前に未選択のパッケージ libx11-6-dbg:i386 を選択しています。
(データベースを読み込んでいます ... 現在 74770 個のファイルとディレクトリがインストールされています。)
(libx11-6-dbg_1.6.2-3_i386.deb から) libx11-6-dbg:i386 を展開しています...
libx11-6:i386 2:1.5.0-1+deb7u1 を (libx11-6_1.6.2-3_i386.deb で) 置換するための準備をしています ...
libx11-6:i386 を展開し、置換しています...
libx11-data 2:1.5.0-1+deb7u1 を (libx11-data_1.6.2-3_all.deb で) 置換するための準備をしています ...
libx11-data を展開し、置換しています...
以前に未選択のパッケージ libx11-dev:i386 を選択しています。
(libx11-dev_1.6.2-3_i386.deb から) libx11-dev:i386 を展開しています...
以前に未選択のパッケージ libx11-doc を選択しています。
(libx11-doc_1.6.2-3_all.deb から) libx11-doc を展開しています...
以前に未選択のパッケージ libx11-xcb-dev:i386 を選択しています。
(libx11-xcb-dev_1.6.2-3_i386.deb から) libx11-xcb-dev:i386 を展開しています...
以前に未選択のパッケージ libx11-xcb1-dbg:i386 を選択しています。
(libx11-xcb1-dbg_1.6.2-3_i386.deb から) libx11-xcb1-dbg:i386 を展開しています...
以前に未選択のパッケージ libx11-xcb1:i386 を選択しています。
(libx11-xcb1_1.6.2-3_i386.deb から) libx11-xcb1:i386 を展開しています...
libx11-data (2:1.6.2-3) を設定しています ...
libx11-doc (2:1.6.2-3) を設定しています ...
man-db のトリガを処理しています ...
libx11-6:i386 (2:1.6.2-3) を設定しています ...
libx11-dev:i386 (2:1.6.2-3) を設定しています ...
libx11-xcb1:i386 (2:1.6.2-3) を設定しています ...
libx11-6-dbg:i386 (2:1.6.2-3) を設定しています ...
libx11-xcb-dev:i386 (2:1.6.2-3) を設定しています ...
libx11-xcb1-dbg:i386 (2:1.6.2-3) を設定しています ...
```

入りました。続いて**keepass2_2.28+dfsg-1_all.deb**を入れます

```
% sudo dpkg -i keepass2_2.28+dfsg-1_all.deb
```

入りますた！作ったdebは当然流用できます(i386とamd64の違いには注意)

## ローカルapt-line

dpkg -i でも、いいんですけれども、keepass2を削除したくなった時など

```
# apt-get remove keepass2
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下のパッケージは「削除」されます:
  keepass2
アップグレード: 0 個、新規インストール: 0 個、削除: 1 個、保留: 0 個。
この操作後に 2,433 kB のディスク容量が解放されます。
続行しますか [Y/n]?
```

当然、keepass2だけ消える事になり、作ったlibx11系のアレは残っちゃいます。これらは不要と判断した場合は一つずつ手動で消さないといけません。

```
# apt-get remove keepass2 libx11-6 libx11-6-dbg libx11-data libx11-dev libx11-doc libx11-xcb-dev libx11-xcb1 libx11-xcb1-dbg
```

やってられん、、、そしてよく見ると-devとかいうのまで付いてきてますな。dpkg -iでゴサっと入れたんで... というわけで、作ったdebもaptで管理したいと。

とりあえず場所を決めます。今回は**/var/local/debian**とします(場所はどこでもいい、管理しやすい所)

あと**dpkg-scanpackages**とかいうコマンドを使います。無い？そんな時は**dpkg-dev**をaptやね！

とりあえず、こんな感じにしました

```
# mkdir -p /var/local/debian/unstable
# mv keepass2_2.28+dfsg-1_all.deb ~user/debian/libx11*.deb /var/local/debian/unstable/
```

つまり、さっき作ったdebと、件のkeepass2_2.28+dfsg-1_all.debを**/var/local/debian/unstable/**に全部放りこみます。現状

```
# find /var/local/debian/unstable/
/var/local/debian/unstable/
/var/local/debian/unstable/libx11-dev_1.6.2-3_i386.deb
/var/local/debian/unstable/libx11-xcb-dev_1.6.2-3_i386.deb
/var/local/debian/unstable/libx11-xcb1_1.6.2-3_i386.deb
/var/local/debian/unstable/libx11-data_1.6.2-3_all.deb
/var/local/debian/unstable/libx11-doc_1.6.2-3_all.deb
/var/local/debian/unstable/keepass2_2.28+dfsg-1_all.deb
/var/local/debian/unstable/libx11-xcb1-dbg_1.6.2-3_i386.deb
/var/local/debian/unstable/libx11-6-dbg_1.6.2-3_i386.deb
/var/local/debian/unstable/libx11-6_1.6.2-3_i386.deb
```

**/var/local/debian/**にcdしまして、dpkg-scanpackageとかいう魔法のコマンドを打ちこみます


```
# cd /var/local/debian/
# dpkg-scanpackages . /dev/null  | gzip -9c > Packages.gz
dpkg-scanpackages: warning: Packages in archive but missing from override file:
dpkg-scanpackages: warning:   keepass2 libx11-6 libx11-6-dbg libx11-data libx11-dev libx11-doc libx11-xcb-dev libx11-xcb1 libx11-xcb1-dbg
dpkg-scanpackages: info: Wrote 9 entries to output Packages file.
```

まあ、何かwarnが出てるけど気にしない。

dpkg-scanpackageのコマンドは適当なシェルスクリプトにしておくと便利です。deb-srcも欲しい場合はdpkg-scansourcesも書かないといけません。必要なら適当に調べてみてください。


続いて**/etc/apt/souces.list**

```
deb http://ftp.jp.debian.org/debian/ wheezy main
deb-src http://ftp.jp.debian.org/debian/ wheezy main
deb-src http://ftp.jp.debian.org/debian/ sid main

deb http://security.debian.org/ wheezy/updates main
deb-src http://security.debian.org/ wheezy/updates main

# wheezy-updates, previously known as 'volatile'
deb http://ftp.jp.debian.org/debian/ wheezy-updates main
deb-src http://ftp.jp.debian.org/debian/ wheezy-updates main

# ↓これを追加
deb file:///var/local/debian/ ./
```
```
# apt-get update
```
の後、、、

ここでようやく**keepass2**をaptします

```
# apt-get install keepass2
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下の特別パッケージがインストールされます:
  libcairo2 libgdiplus libmono-system-drawing4.0-cil
  libmono-system-windows-forms4.0-cil libx11-6 libx11-data libxrender1 xsel
提案パッケージ:
  keepass2-doc mono-dmcs xdotool libgnomeui-0 libgtk2.0-0 librsvg2-2
以下のパッケージが新たにインストールされます:
  keepass2 libcairo2 libgdiplus libmono-system-drawing4.0-cil
  libmono-system-windows-forms4.0-cil libx11-6 libx11-data libxrender1 xsel
アップグレード: 0 個、新規インストール: 9 個、削除: 0 個、保留: 0 個。
5,606 kB 中 18.7 kB のアーカイブを取得する必要があります。
この操作後に追加で 14.9 MB のディスク容量が消費されます。
続行しますか [Y/n]?
警告: 以下のパッケージは認証されていません!
  libx11-data libx11-6 keepass2
検証なしにこれらのパッケージをインストールしますか [y/N]?
```

お、おう

```
<snip.....>
libx11-data (2:1.6.2-3) を設定しています ...
libx11-6:i386 (2:1.6.2-3) を設定しています ...
libxrender1:i386 (1:0.9.7-1+deb7u1) を設定しています ...
libcairo2:i386 (1.12.2-3) を設定しています ...
libgdiplus (3.8-0xamarin1) を設定しています ...
libmono-system-drawing4.0-cil (3.10.0-0xamarin1) を設定しています ...
libmono-system-windows-forms4.0-cil (3.10.0-0xamarin1) を設定しています ...
keepass2 (2.28+dfsg-1) を設定しています ...
xsel (1.2.0-1) を設定しています ...
```

入りました！
これの良い所は例えば

```
# apt-get remove keepass2
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
  libcairo2 libexif12 libgdiplus libgif4 libmono-accessibility4.0-cil
  libmono-data-tds4.0-cil libmono-posix4.0-cil libmono-system-data4.0-cil
  libmono-system-drawing4.0-cil libmono-system-enterpriseservices4.0-cil
  libmono-system-runtime-serialization-formatters-soap4.0-cil
  libmono-system-transactions4.0-cil libmono-system-windows-forms4.0-cil
  libmono-webbrowser4.0-cil libpixman-1-0 libtiff5 libx11-6 libx11-data
  libxcb-render0 libxcb-shm0 libxrender1 xsel
これを削除するには 'apt-get autoremove' を利用してください。
以下のパッケージは「削除」されます:
  keepass2
アップグレード: 0 個、新規インストール: 0 個、削除: 1 個、保留: 0 個。
この操作後に 2,433 kB のディスク容量が解放されます。
続行しますか [Y/n]?
```

と、keepass2だけに必要だったものを検知して、もういらんからautoremoveすると全部掃除するよ、という機能です。ありがとうUbuntu!

## 最後に注意点

自分で作ったり、取ってきたりしたdebは当然ながらupdateされませんから、sid側で変更があった場合は、いちいち作り直さなければいけません。セキュリティーホールなどが出て困るパッケージは、頻繁に確認しなくてはならなくなります、結構ツラいです。

結局こういうのはただ動けばいいやってもの向け。デスクトップ環境のブツとかであれば、そういうのでもいいのかなと思います。