2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Ubuntu - パッケージ間の依存関係

Last updated at Posted at 2023-05-27

概要

パッケージ間の依存関係について調べてみた。このあたりの仕組みをきちんと理解していなくて、意図した通りにパッケージがインストールできずハマってしまった。

環境

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

aptapt-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

libc6_dotty.png

出力される図が大きすぎる場合は、APT::Cache::GivenOnlyオプションを使って、コマンドラインで指定したパッケージのみに限定できる。

$ apt-cache dotty libc6 --option APT::Cache::GivenOnly=true | dot -Tpng > libc6.png

libc6_dotty_dep1.png

参考情報

apt

apt-cache

graphviz

Debian Package Meta-Information

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?