概要
パッケージ間の依存関係について調べてみた。このあたりの仕組みをきちんと理解していなくて、意図した通りにパッケージがインストールできずハマってしまった。
環境
Ubuntu 22.04.2 LTS (Jammy)
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.2 LTS
Release: 22.04
Codename: jammy
aptコマンドのバージョン
$ apt --version
apt 2.4.9 (amd64)
パッケージの依存関係
パッケージ間の依存関係には、Depends、Recommends、Suggests、Conflicts、Replaces、Breaks、Providesがある。詳細は下記ページに載っている。
apt / apt-cache
apt
やapt-cache
を使って、libc6についていろいろ調べてみた。
apt list
apt list
でlibc6パッケージを検索してみる。2.35-0ubuntu3.1がインストールされているのがわかる。
$ apt list libc6 --all-versions
Listing... Done
libc6/jammy-updates,now 2.35-0ubuntu3.1 amd64 [installed,automatic]
libc6/jammy 2.35-0ubuntu3 amd64
apt show
apt show
でlibc6パッケージの詳細情報を見てみると。上述のDepends、Recommendsなどの依存関係の情報が含まれているのがわかる。
$ apt show libc6
Package: libc6
Version: 2.35-0ubuntu3.1
Priority: required
Section: libs
Source: glibc
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: GNU Libc Maintainers <debian-glibc@lists.debian.org>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 13.9 MB
Depends: libgcc-s1, libcrypt1 (>= 1:4.4.10-10ubuntu4)
Recommends: libidn2-0 (>= 2.0.5~), libnss-nis, libnss-nisplus
Suggests: glibc-doc, debconf | debconf-2.0, locales
Breaks: busybox (<< 1.30.1-6), fakeroot (<< 1.25.3-1.1ubuntu2~), hurd (<< 1:0.9.git20170910-1), ioquake3 (<< 1.36+u20200211.f2c61c1~dfsg-2~), iraf-fitsutil (<< 2018.07.06-4), libgegl-0.4-0 (<< 0.4.18), libtirpc1 (<< 0.2.3), locales (<< 2.35), locales-all (<< 2.35), macs (<< 2.2.7.1-3~), nocache (<< 1.1-1~), nscd (<< 2.35), openarena (<< 0.8.8+dfsg-4~), openssh-server (<< 1:8.2p1-4), r-cran-later (<< 0.7.5+dfsg-2), wcc (<< 0.0.2+dfsg-3)
Replaces: libc6-amd64
Homepage: https://www.gnu.org/software/libc/libc.html
Task: minimal, server-minimal
Original-Vcs-Browser: https://salsa.debian.org/glibc-team/glibc
Original-Vcs-Git: https://salsa.debian.org/glibc-team/glibc.git
Download-Size: 3235 kB
APT-Manual-Installed: no
APT-Sources: http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages
Description: GNU C Library: Shared libraries
Contains the standard libraries that are used by nearly all programs on
the system. This package includes shared versions of the standard C library
and the standard math library, as well as many others.
N: There is 1 additional record. Please use the '-a' switch to see it
apt-cache
dependsコマンド
apt-cache depends
でlibc6が直接に依存しているパッケージを表示する。インストールされていないパッケージも含めて表示する。また、--recurse
オプションを付けると、依存しているパッケージを再帰的に表示する。
$ apt-cache depends libc6
libc6
Depends: libgcc-s1
Depends: libcrypt1
Breaks: busybox
Breaks: fakeroot
Breaks: <hurd>
Breaks: ioquake3
Breaks: iraf-fitsutil
Breaks: libgegl-0.4-0
Breaks: <libtirpc1>
Breaks: locales
Breaks: locales-all
Breaks: macs
Breaks: nocache
Breaks: nscd
Breaks: openarena
Breaks: openssh-server
Breaks: r-cran-later
Breaks: wcc
Recommends: libidn2-0
Recommends: libnss-nis
Recommends: libnss-nisplus
Suggests: glibc-doc
|Suggests: debconf
Suggests: <debconf-2.0>
cdebconf
debconf
Suggests: locales
Replaces: <libc6-amd64>
apt-cache depends
は、--installed
オプションを付けると、インストールされているパッケージにのみ表示する。
$ apt-cache depends libc6 --installed
libc6
Depends: libgcc-s1
Depends: libcrypt1
Breaks: fakeroot
Breaks: locales
Breaks: openssh-server
Recommends: libidn2-0
|Suggests: debconf
Suggests: locales
--installed
オプションの有無での差分を表示してみる。赤文字で行頭に-
があるのものがインストールされていないパッケージとなる。
$ diff -u <(apt-cache depends libc6) <(apt-cache depends libc6 --installed)
--- /dev/fd/63 2023-05-21 17:45:26.026407399 +0900
+++ /dev/fd/62 2023-05-21 17:45:26.026407399 +0900
@@ -1,29 +1,9 @@
libc6
Depends: libgcc-s1
Depends: libcrypt1
- Breaks: busybox
Breaks: fakeroot
- Breaks: <hurd>
- Breaks: ioquake3
- Breaks: iraf-fitsutil
- Breaks: libgegl-0.4-0
- Breaks: <libtirpc1>
Breaks: locales
- Breaks: locales-all
- Breaks: macs
- Breaks: nocache
- Breaks: nscd
- Breaks: openarena
Breaks: openssh-server
- Breaks: r-cran-later
- Breaks: wcc
Recommends: libidn2-0
- Recommends: libnss-nis
- Recommends: libnss-nisplus
- Suggests: glibc-doc
|Suggests: debconf
- Suggests: <debconf-2.0>
- cdebconf
- debconf
Suggests: locales
- Replaces: <libc6-amd64>
dottyコマンド
dotty
コマンドを使って、apt-cache depends
で得られる情報をGraphvizを使って可視化できる。
normal packagesは四角形、pure virtual packagesは三角形、mixed virtual packagesは菱形、missing packagesは六角形で表示される。オレンジ色の四角形は再起を停止(leaf packages)、青色の線はpre-depends、緑色の線はconflictsを意味する。
$ apt-cache dotty libc6 | dot -Tpng > libc6.png
出力される図が大きすぎる場合は、APT::Cache::GivenOnly
オプションを使って、コマンドラインで指定したパッケージのみに限定できる。
$ apt-cache dotty libc6 --option APT::Cache::GivenOnly=true | dot -Tpng > libc6.png
参考情報
apt
apt-cache
graphviz
Debian Package Meta-Information