今日、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-tools
、ubuntu-sdk
とubuntu-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-get
、upgrade
コマンドdo
... 現在インストールされていて、新しいバージョンが利用可能なパッケージが取得され、アップグレードされます。いかなる状況でも、現在インストールされているパッケージが削除されたり、まだインストールされていないパッケージが取得され、インストールされたりすることはありません。別のパッケージのインストール状態を変更せずにアップグレードできない、現在インストールされているパッケージの新しいバージョンは、現在のバージョンのままになります。
つまり、apt-get upgrade
アップグレード中にパッケージをインストールまたは削除しません。パッケージに新しいバージョンがある場合でも、その場合、その特定のパッケージ (およびこれによって必要な関連パッケージ) は保留されます。これはシステムの安全のためです。
しかし、のmanページからapt-get
、dist-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-upgrade
(upgrade
)またはaptitude full-upgrade
( )を使用してdist-upgrade
、インストールまたは削除するパッケージリストが表示されているときに、d依存関係情報を見るには、 を使用full-upgrade
します。または、 を使用しているときに、o提案された依存関係解決ソリューションを確認します。これにより、パッケージがインストールまたは削除される理由が表示されます。
詳細については、次のリンクをご覧ください。