Как я получаю реальное полное имя пакета (включая версию), который был бы установлен, если бы я работал apt-get install pseudo-package-name
?
Это связано с этим предыдущим вопросом: Получить версию ядра от lts пакета?
Пример:
apt-get install linux-image-generic-lts-trusty
установил бы (с прямо сейчас на моем 32-разрядном Испытанном сервере):
linux-image-3.13.0-35-generic
Я попробовал следующее, но ни один не дает мне ответ. Я пытаюсь написать сценарий этого так, я могу просто захватить заголовки Linux.
$ 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/{склонный, dpkg}, я relealized, что нет универсального, scriptable решения этой проблемы. Так, подобный ответам ниже от @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})
Во-первых, необходимо показать точно, какой пакет метапакет обеспечивает:
пример:
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
Проблемой является зависимость:
linux-image-generic-lts-trusty
└── linux-image-generic
└── linux-image-3.13.0-35-generic
из-за этого, Вы не можете непосредственно получить информацию, на которой будет установлен пакет. Необходимо будет использовать что-то как apt-rdepends
.
В целом Вы не можете. Существуют пакеты, такие как "почтовый клиент", которые не обеспечивают цепочку зависимости, которая может сопровождаться и разрешаться.