apt-get アップグレードの依存関係の変更を一覧表示する (パッケージが保留されている理由)

apt-get アップグレードの依存関係の変更を一覧表示する (パッケージが保留されている理由)

今日、Ubuntu 14.04 のアップデートを試してみました:

$ sudo apt-get update # ...
$ sudo apt-get upgrade 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Calculating upgrade... Done
The following packages have been kept back:
  phablet-tools ubuntu-sdk ubuntu-sdk-ide
The following packages will be upgraded:
  cgroup-lite curl libcurl3 libcurl3-gnutls python3-update-manager
  update-manager update-manager-core xserver-xorg-core-lts-xenial
8 upgraded, 0 newly installed, 0 to remove and 3 not upgraded.
Need to get 2,305 kB of archives.
After this operation, 13.3 kB of additional disk space will be used.
Do you want to continue? [Y/n] ^C

さて、このことからphablet-toolsubuntu-sdkubuntu-sdk-ideパッケージの依存関係がこの更新で変更されたため、 を呼び出す必要があることがわかりますdist-upgrade。そのため、次のようにします。

$ sudo apt-get dist-upgrade 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Calculating upgrade... Done
The following packages were automatically installed and are no longer required:
  at dctrl-tools devscripts distro-info-data dput intltool
  libcommon-sense-perl libdistro-info-perl libexporter-lite-perl
  libio-stringy-perl libjson-perl libjson-xs-perl libparse-debcontrol-perl
  unity-scope-tool
Use 'apt-get autoremove' to remove them.
The following NEW packages will be installed:
  autopilot-desktop gir1.2-gconf-2.0 gir1.2-upstart-app-launch-2
  libautopilot-gtk libautopilot-qt liblxc1 libseccomp2 libxpathselect1.4
  lxc-common lxcfs lxd lxd-client python-autopilot python-autopilot-trace
  python-autopilot-vis python-contextlib2 python-decorator python-evdev
  python-extras python-fixtures python-junitxml python-mimeparse python-psutil
  python-subunit python-testscenarios python-testtools squashfs-tools
  ubuntu-sdk-tools uidmap
The following packages have been kept back:
  ubuntu-sdk
The following packages will be upgraded:
  cgroup-lite curl libcurl3 libcurl3-gnutls python3-update-manager
  ubuntu-sdk-ide update-manager update-manager-core
  xserver-xorg-core-lts-xenial
9 upgraded, 29 newly installed, 0 to remove and 1 not upgraded.
Need to get 50.2 MB of archives.
After this operation, 66.9 MB of additional disk space will be used.
Do you want to continue? [Y/n] ^C

一つは、ubuntu-sdkまだ保留中ですが、今では「不要になった」として削除するパッケージが大量にあり、インストールするパッケージも大量にあります。これは私をいらだたせます。なぜなら、どれの特に、パッケージ (依存関係) は、新しいパッケージのインストール、または「不要になった」古いパッケージの削除を引き起こします。

apt-getそこで私の質問は、現在のバージョンから新しいバージョンへの依存関係の変更内容を一覧表示する、または同様のプログラムの詳細モードやスイッチなどがあるかどうかですaptitude。次の操作を実行できることはわかっています。

$ apt-cache depends ubuntu-sdk
ubuntu-sdk
  Depends: autopilot-desktop
  Depends: intltool
  Depends: phablet-tools
  Depends: ubuntu-device-flash
  Depends: ubuntu-sdk-ide

...しかし、私はこれを現在のバージョンの状態として読みました。私が望むのは次のようなものです(疑似コード)

$ apt-command --show-dependency-changes ubuntu-sdk
ubuntu-sdk:
  Installed: 1.126.2~0ubuntu1~trusty2 # as in 'apt-cache policy ubuntu-sdk'  
  Candidate: 1.266~0ubuntu1~0trusty
Depends: autopilot-desktop (installed v. XXX, candidate no longer required)
Depends: intltool (installed v. XXX, candidate v. YYY)
Depends: dctrl-tools (installed no dependency, candidate v. YYY)
...

つまり、特定のパッケージが新しくインストールまたは削除される理由について詳細な説明が欲しいのです。

これに似たものはありますか?

答え1

のマニュアルページからapt-getupgradeコマンドdo

... 現在インストールされていて、新しいバージョンが利用可能なパッケージが取得され、アップグレードされます。いかなる状況でも、現在インストールされているパッケージが削除されたり、まだインストールされていないパッケージが取得され、インストールされたりすることはありません。別のパッケージのインストール状態を変更せずにアップグレードできない、現在インストールされているパッケージの新しいバージョンは、現在のバージョンのままになります。

つまり、apt-get upgradeアップグレード中にパッケージをインストールまたは削除しません。パッケージに新しいバージョンがある場合でも、その場合、その特定のパッケージ (およびこれによって必要な関連パッケージ) は保留されます。これはシステムの安全のためです。

しかし、のmanページからapt-getdist-upgrade

dist-upgrade は、アップグレード機能の実行に加えて、パッケージの新しいバージョンとの依存関係の変更もインテリジェントに処理します。apt-get には「スマートな」競合解決システムがあり、必要に応じて、重要度の低いパッケージを犠牲にして最も重要なパッケージをアップグレードしようとします。そのため、dist-upgrade コマンドは一部のパッケージを削除する場合があります。

つまり、ここでわかるように、dist-upgradeはより残酷ですupgrade。新しいバージョンのをインストールしようとします。重要一部のパッケージの削除や新しいパッケージのインストールが必要な場合でも、パッケージをアップグレードしないでください。そのため、質問の状況のように、dist-upgrade は他のパッケージのインストール/削除をトリガーできます。

また、パッケージはheld-backピン留めなどの他のケースにも使用できることに注意してください。パッケージをピン留めすると、アップグレードされません。

held-backまた、依存パッケージの 1 つ以上が不足しているために、パッケージの新しいバージョンをインストールできない場合にも発生する可能性があります。

特定のパッケージが新しくインストールまたは削除される理由について、詳細な説明をお願いします。

便利なテクニックとしては、インストールするパッケージ名を書き留めておき、バージョン間の依存関係の変更を手動で確認することが挙げられます。

あなたの特定のケースでは、と をubuntu-sdk使用して依存関係の変更を確認できます。追加のパッケージを必要とする新しいバージョンが表示されます。apt-cache depends ubuntu-sdk=<version-installed>apt-cache depends ubuntu-sdk=<version-candidate>

aptitude safe-upgradeupgrade)またはaptitude full-upgrade( )を使用してdist-upgrade、インストールまたは削除するパッケージリストが表示されているときに、d依存関係情報を見るには、 を使用full-upgradeします。または、 を使用しているときに、o提案された依存関係解決ソリューションを確認します。これにより、パッケージがインストールまたは削除される理由が表示されます。

詳細については、次のリンクをご覧ください。

関連情報