web-dev-qa-db-ja.com

擬似パッケージの実際のパッケージ名とバージョンを取得するにはどうすればよいですか?

apt-get install pseudo-package-nameを実行した場合にインストールされる実際の完全なパッケージ名(バージョンを含む)を取得するにはどうすればよいですか?

これはこの前の質問に関連しています: ltsパッケージからカーネルバージョンを取得しますか?

例:

apt-get install linux-image-generic-lts-trusty

インストールします(現在のところ、32ビットのTrustyサーバーに):

linux-image-3.13.0-35-generic

私は次のことを試しましたが、誰も答えをくれません。 linux-headersを取得できるように、これをスクリプト化しようとしています。

$ Sudo apt-get install -qqs linux-image-generic-lts-trusty
Inst linux-image-generic-lts-trusty (3.13.0.35.42 Ubuntu:14.04/trusty-updates [i386])
Conf linux-image-generic-lts-trusty (3.13.0.35.42 Ubuntu:14.04/trusty-updates [i386])
$ apt-cache depends linux-image-generic-lts-trusty
linux-image-generic-lts-trusty
  Depends: linux-image-generic
$ apt-cache depends linux-image-generic
linux-image-generic
  Depends: linux-image-3.13.0-35-generic
  Depends: linux-image-extra-3.13.0-35-generic
  Depends: linux-firmware
$ apt-cache policy linux-image-generic-lts-trusty
linux-image-generic-lts-trusty:
  Installed: (none)
  Candidate: 3.13.0.35.42
  Version table:
     3.13.0.35.42 0
        500 http://us.archive.ubuntu.com/ubuntu/ trusty-updates/main i386 Packages
        500 http://security.ubuntu.com/ubuntu/ trusty-security/main i386 Packages
     3.13.0.24.28 0
        500 http://us.archive.ubuntu.com/ubuntu/ trusty/main i386 Packages

/ var/lib/{apt、dpkg}を少し調査した後、この問題に対する一般的なスクリプト可能な回答はないことを再認識しました。だから、@ mchidと@muruからの以下の答えと同様に、私はそれを次のようにした:

#!/bin/bash

metapackage=linux-image-generic-lts-trusty
linux_package_version=$(apt-cache policy $metapackage |\
    sed -nE '/Candidate:/ s,[^[:digit:]]*([[:digit:]\.]+)\.([[:digit:]]+)\.[[:digit:]]+,\1-\2,p')

apt-get download linux-headers-${linux_package_version}-generic linux-headers-${linux_package_version})
4
Harvey

まず、メタパッケージが提供するパッケージを正確に示す必要があります。

例:

apt-cache show linux-image-generic-lts-trusty | grep Depends:

出力:

Depends: linux-image-generic
Depends: linux-image-generic

これで、メタパッケージの特定のパッケージを入力すると、正確な結果が得られます。

apt-cache show linux-image-generic | grep Depends:

出力:

Depends: linux-image-3.13.0-35-generic, linux-image-extra-3.13.0-35-generic, linux-firmware
Depends: linux-image-3.13.0-24-generic, linux-image-extra-3.13.0-24-generic, linux-firmware

次の例のように特に指定されていない限り、常に最新バージョンがインストールされます。

Sudo apt-get install linux-image-3.13.0-24-generic

あるいは、単にバージョンが必要な場合は、代わりに次のコマンドまたはそのバリエーションを入力できます。

apt-cache show linux-image-generic-lts-trusty | grep Version:

出力:

Version: 3.13.0.35.42
Version: 3.13.0.24.28
4
mchid

問題は依存関係です:

linux-image-generic-lts-trusty
└── linux-image-generic
    └── linux-image-3.13.0-35-generic

このため、インストールされるパッケージに関する情報を直接取得できない場合があります。 apt-rdepends のようなものを使用する必要があります。

3
muru

一般的にはできません。 「email-client」などのパッケージは、追跡および解決できる依存関係チェーンを提供しません。

1
Joshua