37
Debianパッケージ情報 と依存関係の可視化 03回福岡Debian勉強会 (2013-03-28) やまだつよし

20130328 第03回福岡debian勉強会 debianパッケージ情報と依存関係の可視化

Embed Size (px)

Citation preview

Page 1: 20130328 第03回福岡debian勉強会   debianパッケージ情報と依存関係の可視化

Debianパッケージ情報

と依存関係の可視化

第03回福岡Debian勉強会 (2013-03-28)やまだつよし

Page 2: 20130328 第03回福岡debian勉強会   debianパッケージ情報と依存関係の可視化

自己紹介

やまだつよし● twitter: @minimum2scp● fb: fb.me/minimum2scp● インフラエンジニア● Debian,Rubyとかが好き

Page 3: 20130328 第03回福岡debian勉強会   debianパッケージ情報と依存関係の可視化

Agenda

● Debianパッケージ情報○ Depends, Suggests, Recommends ...○ Debianリファレンス

● 依存関係の可視化○ apt-cache dotty の紹介○ debtree の紹介○ debtree-web.rb の紹介

Page 4: 20130328 第03回福岡debian勉強会   debianパッケージ情報と依存関係の可視化

Debianパッケージ情報

% apt-cache show パッケージ名

% apt-cache dumpavail

で出力されるDebianパッケージの情報

Page 5: 20130328 第03回福岡debian勉強会   debianパッケージ情報と依存関係の可視化

apt-cache show python-sphinxPackage: python-sphinxSource: sphinxVersion: 1.1.3+dfsg-4(...snip...)Depends: python (>= 2.5), python-support (>= 0.90.0), python-docutils (>= 0.7), python-pygments (>= 1.2), python-jinja2 (>= 2.3), sphinx-common (= 1.1.3+dfsg-4)Recommends: python (>= 2.6) | python-simplejson, python-imaging, sphinx-docSuggests: jsmath, libjs-mathjax, texlive-latex-recommended, texlive-latex-extra, texlive-fonts-recommended(...snip...)

Page 6: 20130328 第03回福岡debian勉強会   debianパッケージ情報と依存関係の可視化

apt-cache show rubyPackage: ruby(...snip...)Replaces: irb, rdocProvides: irb, rdocDepends: ruby1.9.1 (>= 1.9.3.194-1)Suggests: ri, ruby-devConflicts: irb, rdocBreaks: apt-listbugs (<< 0.1.6)(...snip...)

Page 7: 20130328 第03回福岡debian勉強会   debianパッケージ情報と依存関係の可視化

apt-cache show openssh-serverPackage: openssh-server(...snip...)Replaces: openssh-client (<< 1:3.8.1p1-11), ssh, ssh-krb5Provides: ssh-serverDepends: libc6 (>= 2.8), libcomerr2 (>= 1.01), libgssapi-krb5-2 (>= 1.10+dfsg~), libkrb5-3 (>= 1.6.dfsg.2), libpam0g (>= 0.99.7.1), libselinux1 (>= 1.32), libssl1.0.0 (>= 1.0.1), libwrap0 (>= 7.6-4~), zlib1g (>= 1:1.1.4), debconf (>= 1.2.0) | debconf-2.0, openssh-client (= 1:6.0p1-4), libpam-runtime (>= 0.76-14), libpam-modules (>= 0.72-9), adduser (>= 3.9), dpkg (>= 1.9.0), lsb-base (>= 3.2-13), procpsRecommends: xauth, ncurses-term, openssh-blacklist, openssh-blacklist-extraSuggests: ssh-askpass, rssh, molly-guard, ufw, monkeysphereConflicts: rsh-client (<< 0.16.1-1), sftp, ssh (<< 1:3.8.1p1-9), ssh-krb5 (<< 1:4.3p2-7), ssh-nonfree (<< 2), ssh-socks, ssh2

(...snip...)

Page 8: 20130328 第03回福岡debian勉強会   debianパッケージ情報と依存関係の可視化

Depends, Recommends, Suggests...

apt-get install でパッケージをインストールするときに Depends, Recommends, Suggests などの情報を参照している

Page 9: 20130328 第03回福岡debian勉強会   debianパッケージ情報と依存関係の可視化

apt-get install python-sphinxThe following extra packages will be installed: docutils-common docutils-doc file javascript-common (...snip...)Suggested packages: apache2 httpd rng-tools liblcms-utils python-doc python-tk (...snip...)The following NEW packages will be installed: docutils-common docutils-doc file javascript-common (...snip...)0 upgraded, 41 newly installed, 0 to remove and 0 not upgraded.Need to get 8623 kB/15.2 MB of archives.After this operation, 50.0 MB of additional disk space will be used.Do you want to continue [Y/n]?

Page 10: 20130328 第03回福岡debian勉強会   debianパッケージ情報と依存関係の可視化

apt-get install rubyThe following extra packages will be installed: libffi5 libruby1.9.1 libssl1.0.0 libyaml-0-2 ruby1.9.1Suggested packages: ri ruby-dev ruby1.9.1-examples ri1.9.1 graphviz ruby1.9.1-dev ruby-switchThe following NEW packages will be installed: libffi5 libruby1.9.1 libssl1.0.0 libyaml-0-2 ruby ruby1.9.10 upgraded, 6 newly installed, 0 to remove and 0 not upgraded.Need to get 0 B/5931 kB of archives.After this operation, 16.2 MB of additional disk space will be used.Do you want to continue [Y/n]?

Page 11: 20130328 第03回福岡debian勉強会   debianパッケージ情報と依存関係の可視化

apt-get install openssh-serverThe following extra packages will be installed: adduser krb5-locales libbsd0 libedit2 libgssapi-krb5-2 (...snip...)Suggested packages: krb5-doc krb5-user ssh-askpass libpam-ssh keychain (...snip...)The following NEW packages will be installed: adduser krb5-locales libbsd0 libedit2 libgssapi-krb5-2 (...snip...)0 upgraded, 28 newly installed, 0 to remove and 0 not upgraded.Need to get 8663 kB/11.3 MB of archives.After this operation, 26.8 MB of additional disk space will be used.Do you want to continue [Y/n]?

Page 12: 20130328 第03回福岡debian勉強会   debianパッケージ情報と依存関係の可視化

Debian リファレンス

2.1.6 パッケージ依存関係

http://www.debian.org/doc/manuals/debian-reference/ch02.ja.html#_package_dependencies

Page 13: 20130328 第03回福岡debian勉強会   debianパッケージ情報と依存関係の可視化

2.1.6 パッケージ依存関係

Dependsこれは絶対依存を宣言し、このフィールドにリストされた全てのパッケージは同時または事前にインストールされていなければいけません。

例: git パッケージの場合

Depends: libc6 (>= 2.3.4), libcurl3-gnutls (>= 7.16.2-1), libexpat1 (>= 1.95.8), zlib1g (>= 1:1.2.0), perl-modules, liberror-perl

Page 14: 20130328 第03回福岡debian勉強会   debianパッケージ情報と依存関係の可視化

2.1.6 パッケージ依存関係

Pre-Dependsこれは、リストされたパッケージが事前にインストールを完了している必要がある以外は、Depends と同様です。

Pre-Dependsを指定しているパッケージの例

パッケージ Pre-Dependsフィールド

debconf perl-base (>= 5.6.1-4)

diffutils libc6 (>= 2.4)

dpkg libbz2-1.0, libc6 (>= 2.11), liblzma5 (>= 5.1.1alpha+20120614), libselinux1 (>= 1.32), zlib1g (>= 1:1.1.4), tar (>= 1.23)

perl-base libc6 (>= 2.11), dpkg (>= 1.14.20)

Page 15: 20130328 第03回福岡debian勉強会   debianパッケージ情報と依存関係の可視化

2.1.6 パッケージ依存関係

Recommendsこれは強いが絶対でない依存を宣言します。多くのユーザーはこのフィールドにリストされたパッケージ全てがインストールされていなければ、当該パッケージを望まないでしょう。

例: git パッケージの場合

Recommends: patch, less, rsync, ssh-client

Page 16: 20130328 第03回福岡debian勉強会   debianパッケージ情報と依存関係の可視化

2.1.6 パッケージ依存関係

Suggestsこれは弱い依存を宣言します。このパッケージの多くのユーザーはこのフィールドにリストされたパッケージをインストールすればメリットを享受できるとは言え、それら抜きでも十分な機能が得られます。

例: git パッケージの場合

Suggests: git-doc, git-arch, git-cvs, git-svn, git-email, git-daemon-run, git-gui, gitk, gitweb

Page 17: 20130328 第03回福岡debian勉強会   debianパッケージ情報と依存関係の可視化

Recommends, Suggests のパッケージ

のインストールの制御

Recommends 通常インストールされる。インストールしない場合はapt-get install --no-install-recommends

Suggests 通常インストールされない。インストールする場合はapt-get install --install-suggests

※ /etc/apt/preferences, preferences.d/ 以下の設定にもよる● APT::Install-Recommends● APT::Install-Suggests

Page 18: 20130328 第03回福岡debian勉強会   debianパッケージ情報と依存関係の可視化

2.1.6 パッケージ依存関係

Enhances

これは Suggests 同様の弱い依存を宣言しますが、依存作用の方向が逆です。

Enhancesを指定しているパッケージの例

パッケージ Enhancesフィールド

autossh openssh-client, ssh-client

dbskkd-cdb skk

libvirt-bin qemu, qemu-kvm, xen

mysql-utilities mysql-workbench

Page 19: 20130328 第03回福岡debian勉強会   debianパッケージ情報と依存関係の可視化

2.1.6 パッケージ依存関係

Breaks,Conflicts,Replaces,Provides

Breaks これは通常バージョン制約付きでパッケージのインコンパチビリティーを宣言します。一般的にこのフィールドにリストされた全てのパッケージをアップグレードすることで解決します。

Conflicts これは絶対的排他関係を宣言します。このフィールドにリストされた全てのパッケージを除去しない限り当該パッケージをインストールできません。

Replaces 当該パッケージによりインストールされるファイルがこのフィールドにリストされたパッケージのファイルを置き換える際にこれを宣言します。

Provides 当該パッケージがこのフィールドにリストされたパッケージのファイルと機能の全てを提供する際にこれを宣言します。

Page 20: 20130328 第03回福岡debian勉強会   debianパッケージ情報と依存関係の可視化

2.1.6 パッケージ依存関係

バーチャルパッケージ

正常な設定として "Provides" と "Conflicts" と "Replaces" とを単一バーチャルパッケージに対し同時宣言することがあります。こうするといかなる時にも当該バーチャルパッケージを提供する実パッケージのうち確実に一つだけがインストールされます。

Page 21: 20130328 第03回福岡debian勉強会   debianパッケージ情報と依存関係の可視化

バーチャルパッケージの例: mail-transfer-agent

Package: postfixVersion: 2.10.0-3Installed-Size: 3522Maintainer: LaMont Jones <[email protected]>Architecture: amd64Replaces: mail-transport-agentProvides: mail-transport-agentDepends: libc6 (>= 2.11), (...snip...)Recommends: pythonSuggests: procmail, postfix-mysql, (...snip...)Conflicts: libnss-db (<< 2.2-3), mail-transport-agent, smailDescription-en: High-performance mail transport agent (...snip...)

Page 22: 20130328 第03回福岡debian勉強会   debianパッケージ情報と依存関係の可視化

バーチャルパッケージの例: mail-transfer-agent

Package: cronVersion: 3.0pl1-124Installed-Size: 300Maintainer: Javier Fernández-Sanguino Peña <[email protected]>Architecture: amd64Provides: cron-daemonDepends: libc6 (>= 2.7), (...snip...)Pre-Depends: dpkg (>= 1.15.7.2)Recommends: exim4 | postfix | mail-transport-agentSuggests: anacron (>= 2.0-1), logrotate, checksecurityBreaks: dpkg (<< 1.15.4)Description-en: process scheduling daemon

Page 23: 20130328 第03回福岡debian勉強会   debianパッケージ情報と依存関係の可視化

Debian Policy Manual

http://www.debian.org/doc/debian-policy/ch-relationships.html

Page 24: 20130328 第03回福岡debian勉強会   debianパッケージ情報と依存関係の可視化

Debianポリシーマニュアル

(Debian JP Project)

http://www.debian.or.jp/community/devel/debian-policy-ja/policy.ja.html/ch-relationships.html

Page 25: 20130328 第03回福岡debian勉強会   debianパッケージ情報と依存関係の可視化

依存関係の可視化

apt-cache show で確認できるけど、可視化したい

● apt-cache dotty● debtree

Page 26: 20130328 第03回福岡debian勉強会   debianパッケージ情報と依存関係の可視化

man apt-cacheより

dotty パッケージ... dotty は、コマンドライン上のパッケージ名から、GraphViz[1] パッケージの dotty コマンドで利用するのに便利な出力を生成

します。結果はパッケージの関係を表わす、ノード・エッジのセットで表現されます。デフォルトでは、すべての依存パッケージをトレースするので、非常に大きい図が得られます。コマンドラインに列挙したパッケージだけを出力するように制限するには、APT::Cache::GivenOnly をセットしてください。

Page 27: 20130328 第03回福岡debian勉強会   debianパッケージ情報と依存関係の可視化

man apt-cache より(続き)

結果のノードは数種の形状をとります。通常パッケージは四角、純粋仮想パッケージは三角、複合仮想パッケージは菱形、欠落パッケージは六角形で表します。オレンジの四角は再帰が終了した「リーフパッケージ」、青い線は先行依存、緑の線は競合を表します。 注意) dotty は、パッケージのより大きなセットのグラフは描けま

せん。

Page 28: 20130328 第03回福岡debian勉強会   debianパッケージ情報と依存関係の可視化

apt-cache dotty

% apt-cache dotty python-sphinx > /tmp/python-sphinx.dot% dot -Tsvg -o /tmp/python-sphinx.svg /tmp/python-sphinx.dot

dot コマンドが終わらない

(dot ファイルの中は2万行を越える巨大なグラフ)

Page 29: 20130328 第03回福岡debian勉強会   debianパッケージ情報と依存関係の可視化

apt-cache dotty

マニュアルに書いてある通り、APT::Cache::GivenOnly をセットする

% apt-cache dotty -o APT::Cache::GivenOnly=yes \ python-sphinx > /tmp/python-sphinx.dot% dot -Tsvg -o /tmp/python-sphinx.svg /tmp/python-sphinx.dot

Page 30: 20130328 第03回福岡debian勉強会   debianパッケージ情報と依存関係の可視化

apt-cache dotty引数のパッケージを増やしてみる

% apt-cache dotty -o APT::Cache::GivenOnly=yes \ python-sphinx python-support python-pygments \ python-jinja2 sphinx-common \ > /tmp/python-sphinx.dot% dot -Tsvg -o /tmp/python-sphinx.svg /tmp/python-sphinx.dot

Page 31: 20130328 第03回福岡debian勉強会   debianパッケージ情報と依存関係の可視化

debtreeの紹介

http://collab-maint.alioth.debian.org/debtree/

Page 32: 20130328 第03回福岡debian勉強会   debianパッケージ情報と依存関係の可視化

debtree同じようにグラフを作成してみる

% debtree python-sphinx > /tmp/python-sphinx.dot% dot -Tsvg -o /tmp/python-sphinx.svg /tmp/python-sphinx.dot

Page 33: 20130328 第03回福岡debian勉強会   debianパッケージ情報と依存関係の可視化

できた!でも説明するには大きすぎたので他のパッケージで...

Page 34: 20130328 第03回福岡debian勉強会   debianパッケージ情報と依存関係の可視化

debtree debconf

紫の実線 Pre-Depends 赤の実線 Conflicts

青の実線 Depends 緑の実線 Provides

Page 35: 20130328 第03回福岡debian勉強会   debianパッケージ情報と依存関係の可視化

debtree debconf

黒の実線 Recommends

黒の点線 Suggests

Page 36: 20130328 第03回福岡debian勉強会   debianパッケージ情報と依存関係の可視化

debtree-web.rb

https://gist.github.com/minimum2scp/5252671

● apt-cache dotty, debtree のオプションを覚えきれない、コマンドが面倒

● web interface を作った (ruby + sinatra)● 元々debtree用に作ったものを昨日 apt-cache

dotty に対応させた

Page 37: 20130328 第03回福岡debian勉強会   debianパッケージ情報と依存関係の可視化

まとめ

● Debianパッケージ情報の Depends などパッケージ依存性情報について調べました

● Recommends と Suggests の違いをようやく覚えました (Recommendsが通常インストールされる)

● apt-cache dotty, debtree の紹介● debtree-web.rb の紹介