SlideShare a Scribd company logo
Debianパッケージ情報
  と依存関係の可視化

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

やまだつよし
●twitter: @minimum2scp
●fb: fb.me/minimum2scp
●インフラエンジニア
●Debian,Rubyとかが好き
Agenda
● Debianパッケージ情報
 ○ Depends, Suggests, Recommends ...
 ○ Debianリファレンス
● 依存関係の可視化
 ○ apt-cache dotty の紹介
 ○ debtree の紹介
 ○ debtree-web.rb の紹介
Debianパッケージ情報
% apt-cache show パッケージ名
% apt-cache dumpavail


で出力されるDebianパッケージの情報
apt-cache show python-sphinx
Package: python-sphinx
Source: sphinx
Version: 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-doc
Suggests: jsmath, libjs-mathjax, texlive-latex-
recommended,
 texlive-latex-extra, texlive-fonts-recommended
(...snip...)
apt-cache show ruby
Package: ruby
(...snip...)
Replaces: irb, rdoc
Provides: irb, rdoc
Depends: ruby1.9.1 (>= 1.9.3.194-1)
Suggests: ri, ruby-dev
Conflicts: irb, rdoc
Breaks: apt-listbugs (<< 0.1.6)
(...snip...)
apt-cache show openssh-server
Package: openssh-server
(...snip...)
Replaces: openssh-client (<< 1:3.8.1p1-11), ssh, ssh-krb5
Provides: ssh-server
Depends: 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), procps
Recommends: xauth, ncurses-term, openssh-blacklist, openssh-blacklist-extra
Suggests: ssh-askpass, rssh, molly-guard, ufw, monkeysphere
Conflicts: 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...)
Depends, Recommends, Suggests...
apt-get install でパッケージをインストールするとき
に Depends, Recommends, Suggests などの情
報を参照している
apt-get install python-sphinx
The 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]?
apt-get install ruby
The following extra packages will be installed:
 libffi5 libruby1.9.1 libssl1.0.0 libyaml-0-2 ruby1.9.1
Suggested packages:
 ri ruby-dev ruby1.9.1-examples ri1.9.1 graphviz
 ruby1.9.1-dev ruby-switch
The following NEW packages will be installed:
 libffi5 libruby1.9.1 libssl1.0.0 libyaml-0-2 ruby
 ruby1.9.1
0 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]?
apt-get install openssh-server
The 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]?
Debian リファレンス
2.1.6 パッケージ依存関係
http://www.debian.org/doc/manuals/debian-reference/ch02.
ja.html#_package_dependencies
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
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.1
            alpha+20120614), libselinux1 (>= 1.32),
            zlib1g (>= 1:1.1.4), tar (>= 1.23)
perl-base   libc6 (>= 2.11), dpkg (>= 1.14.20)
2.1.6 パッケージ依存関係
Recommends
これは強いが絶対でない依存を宣言します。多くのユーザーは
このフィールドにリストされたパッケージ全てがインストールされ
ていなければ、当該パッケージを望まないでしょう。


例: git パッケージの場合

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

例: git パッケージの場合

Suggests: git-doc, git-arch, git-cvs, git-svn, git-email, git-
daemon-run, git-gui, gitk, gitweb
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
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
2.1.6 パッケージ依存関係
Breaks,Conflicts,Replaces,Provides
Breaks      これは通常バージョン制約付きでパッケージのインコンパチビリ
            ティーを宣言します。一般的にこのフィールドにリストされた全ての
            パッケージをアップグレードすることで解決します。

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

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

Provides    当該パッケージがこのフィールドにリストされたパッケージのファイル
            と機能の全てを提供する際にこれを宣言します。
2.1.6 パッケージ依存関係
バーチャルパッケージ
正常な設定として "Provides" と "Conflicts" と "Replaces" とを
単一バーチャルパッケージに対し同時宣言することがありま
す。こうするといかなる時にも当該バーチャルパッケージを提供
する実パッケージのうち確実に一つだけがインストールされま
す。
バーチャルパッケージの例: mail-transfer-agent
Package: postfix
Version: 2.10.0-3
Installed-Size: 3522
Maintainer: LaMont Jones <lamont@debian.org>
Architecture: amd64
Replaces: mail-transport-agent
Provides: mail-transport-agent
Depends: libc6 (>= 2.11), (...snip...)
Recommends: python
Suggests: procmail, postfix-mysql, (...snip...)
Conflicts: libnss-db (<< 2.2-3), mail-transport-agent,
smail
Description-en: High-performance mail transport agent
 (...snip...)
バーチャルパッケージの例: mail-transfer-agent
Package: cron
Version: 3.0pl1-124
Installed-Size: 300
Maintainer: Javier Fernández-Sanguino Peña <jfs@debian.
org>
Architecture: amd64
Provides: cron-daemon
Depends: libc6 (>= 2.7), (...snip...)
Pre-Depends: dpkg (>= 1.15.7.2)
Recommends: exim4 | postfix | mail-transport-agent
Suggests: anacron (>= 2.0-1), logrotate, checksecurity
Breaks: dpkg (<< 1.15.4)
Description-en: process scheduling daemon
Debian Policy Manual
http://www.debian.org/doc/debian-policy/ch-relationships.html
Debianポリシーマニュアル
(Debian JP Project)
http://www.debian.or.jp/community/devel/debian-policy-ja/policy.ja.html/ch-
relationships.html
依存関係の可視化

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

● apt-cache dotty
● debtree
man apt-cacheより
dotty パッケージ...

dotty は、コマンドライン上のパッケージ名から、GraphViz[1]
パッケージの dotty コマンドで利用するのに便利な出力を生成
します。結果はパッケージの関係を表わ
す、ノード・エッジのセットで表現されます。デフォルトでは、すべ
ての依存パッケージをトレースするので、非常に大きい図が得
られます。コマンドラインに列挙した
パッケージだけを出力するように制限するには、APT::Cache::
GivenOnly をセットしてください。
man apt-cache より(続き)


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

注意) dotty は、パッケージのより大きなセットのグラフは描けま
せん。
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万行を越える巨大なグラフ)
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
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
debtreeの紹介
http://collab-maint.alioth.debian.org/debtree/
debtree
同じようにグラフを作成してみる

% debtree python-sphinx > /tmp/python-sphinx.dot
% dot -Tsvg -o /tmp/python-sphinx.svg /tmp/python-sphinx.
dot
できた!でも説明するには大きすぎ
たので他のパッケージで...
debtree debconf




 紫の実線    Pre-Depends   赤の実線   Conflicts
 青の実線    Depends       緑の実線   Provides
debtree debconf




                  黒の実線   Recommends


                  黒の点線   Suggests
debtree-web.rb
https://gist.github.com/minimum2scp/5252671

● apt-cache dotty, debtree のオプションを覚えき
  れない、コマンドが面倒
● web interface を作った (ruby + sinatra)
● 元々debtree用に作ったものを昨日 apt-cache
  dotty に対応させた
まとめ

● Debianパッケージ情報の Depends などパッ
  ケージ依存性情報について調べました
● Recommends と Suggests の違いをようやく覚
  えました (Recommendsが通常インストールさ
  れる)
● apt-cache dotty, debtree の紹介
● debtree-web.rb の紹介

More Related Content

PDF
Version管理 1
PDF
試して覚えるPacemaker入門 『リソース設定編』
PDF
Gluster fs and_swiftapi_20120429
PPTX
CentOSでつくる神Plesk
PDF
Pacemakerを使いこなそう
PDF
HAクラスタで PostgreSQLレプリケーション構成の 高可用化
PDF
OpenStackでも重要な役割を果たすPacemakerを知ろう!
PDF
30分でRHEL6 High Availability Add-Onを超絶的に理解しよう!
Version管理 1
試して覚えるPacemaker入門 『リソース設定編』
Gluster fs and_swiftapi_20120429
CentOSでつくる神Plesk
Pacemakerを使いこなそう
HAクラスタで PostgreSQLレプリケーション構成の 高可用化
OpenStackでも重要な役割を果たすPacemakerを知ろう!
30分でRHEL6 High Availability Add-Onを超絶的に理解しよう!

What's hot (20)

PDF
第4回Linux-HA勉強会資料 Pacemakerの紹介
PDF
痛い目にあってわかる HAクラスタのありがたさ
PDF
Pacemaker NextGen OSC2012TokyoFall-20120908
PDF
PG-REXで学ぶPacemaker運用の実例
PDF
OpenStack + Common Lisp
PDF
"Bits from the Apache Maintainers / Upcoming apache2 2.4 transition" を読んでみた
PDF
Infinite Debian - Platform for mass-producing system every second
PDF
Using Kubernetes on Google Container Engine
PDF
RHEL7/CentOS7 NetworkManager徹底入門
PDF
VarnishCache入門Rev2.1
PDF
LAMP環境にDocker環境を追加してみた
PDF
CloudStackユーザ会 OSC.cloud
PDF
5ステップで始めるPostgreSQLレプリケーション@hbstudy#13
PDF
第7回oss貢献者賞 森-20120316
PDF
Okinawa Open Days 2014 OpenStackハンズオンセミナー / OpenStackの機能概要
PPTX
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワーク
PDF
nginx入門
ODP
「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)
KEY
Mysql casial01
PDF
PostgreSQL Query Cache - "pqc"
第4回Linux-HA勉強会資料 Pacemakerの紹介
痛い目にあってわかる HAクラスタのありがたさ
Pacemaker NextGen OSC2012TokyoFall-20120908
PG-REXで学ぶPacemaker運用の実例
OpenStack + Common Lisp
"Bits from the Apache Maintainers / Upcoming apache2 2.4 transition" を読んでみた
Infinite Debian - Platform for mass-producing system every second
Using Kubernetes on Google Container Engine
RHEL7/CentOS7 NetworkManager徹底入門
VarnishCache入門Rev2.1
LAMP環境にDocker環境を追加してみた
CloudStackユーザ会 OSC.cloud
5ステップで始めるPostgreSQLレプリケーション@hbstudy#13
第7回oss貢献者賞 森-20120316
Okinawa Open Days 2014 OpenStackハンズオンセミナー / OpenStackの機能概要
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワーク
nginx入門
「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)
Mysql casial01
PostgreSQL Query Cache - "pqc"
Ad

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

PDF
今最もアツイdistribution Gentoo Linuxについて
PDF
曖昧 RPM 講座
PDF
Debian Multiarch Support
PDF
Vsubuntu
PDF
Ubuntuで最新パッケージを導入
PPTX
LinAction Theme LPICの問題を解いてみる~インストールとパッケージ管理編~
PDF
Debian パッケージングチュートリアル
PDF
とあるWeb企業でのDebianシステムの使い方。
PDF
意外と知らない?Yumパッケージ管理
PDF
環境構築自動化ツールのご紹介
PDF
pkgsrc とは何か? - よもやま話
PDF
DebianとFedoraでパッケージをリリースするまでの話
PDF
今すぐ始める!Ubuntu入門
PDF
今すぐ始める!Ubuntu入門
PDF
openSUSE におけるパッケージ管理入門
PDF
pbuilder, cowbuilder, lxcで作るお手軽サンドボックス
PDF
Personal Cloud Automation
PDF
201005 Debian/つくらぐ勉強会 lightning talk
PDF
GPD WINでStretchを動かす
PDF
Gentooサークル新歓コンパのご案内
今最もアツイdistribution Gentoo Linuxについて
曖昧 RPM 講座
Debian Multiarch Support
Vsubuntu
Ubuntuで最新パッケージを導入
LinAction Theme LPICの問題を解いてみる~インストールとパッケージ管理編~
Debian パッケージングチュートリアル
とあるWeb企業でのDebianシステムの使い方。
意外と知らない?Yumパッケージ管理
環境構築自動化ツールのご紹介
pkgsrc とは何か? - よもやま話
DebianとFedoraでパッケージをリリースするまでの話
今すぐ始める!Ubuntu入門
今すぐ始める!Ubuntu入門
openSUSE におけるパッケージ管理入門
pbuilder, cowbuilder, lxcで作るお手軽サンドボックス
Personal Cloud Automation
201005 Debian/つくらぐ勉強会 lightning talk
GPD WINでStretchを動かす
Gentooサークル新歓コンパのご案内
Ad

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