Как создать команду в Ubuntu, чтобы сообщать, когда была выпущена последняя версия данного пакета?
(Мне нужно проверить это как часть доказательства того, что мы устанавливаем определенные обновления на определенные серверы в течение заданного времени.)
Прямо сейчас мой сценарий делает следующее:
apt-cache policy
apt-cache show
. Предполагается, что локальный индекс обновлен (например, sudo apt-get update
или аналогичный Алент запущен достаточно недавно). Меня это устраивает.
Если не считать этого предположения, насколько это достоверно? Есть ли способ лучше?
Если вы готовы поскрести HTML, вы можете получить дату выпуска пакета для любого пакета с launchpad.
Рассмотрим недавно выпущенный пакет sudo
. Для этого примера предположим, что вы используете Ubuntu 20.04 LTS (focal). У вас есть последний пакет, версия 1.8.31-1ubuntu1.2. Вы можете найти:
https://launchpad.net/ubuntu/+source/sudo/1.8.31-1ubuntu1.2/+publishinghistory
На этой странице вы найдете даты публикации во многих местах. Выберите ту, которую, по вашему мнению, будет легче всего разобрать вашему скрипту.
Launchpad, основная платформа, используемая для отслеживания создания и выпуска пакетов для Ubuntu, предлагает API.
Скорее всего, вас интересует объект История публикаций.
Пример на Python - возможно, вам придется немного усложнить задачу, если вам нужно сначала сопоставить бинарное имя пакета с исходным именем пакета:
from launchpadlib.launchpad import Launchpad
lp = Launchpad.login_anonymously("https://github.com/example/ex")
ubuntu = lp.distributions["ubuntu"]
archive = ubuntu.main_archive
focal = ubuntu.getSeries(name_or_version="focal")
firefox_releases = archive.getPublishedSources(
distro_series=focal,
source_name="firefox", exact_match=True,
status="Published")
for s in firefox_releases:
print(s.source_package_version, s.pocket, s.date_published)
Если это не подходит для ваших нужд, есть шанс, что это будет изменено, если только вы изложите убедительную причину.
Внимание: Использование этого подхода дает возможность изящно обработать некоторые раздражающие режимы отказа вашего подхода. Но что бы вы ни делали с полученными данными, вам все равно придется решать, что делать с состояниями Supersed и Deleted. Пример: Последний пакет, запрошенный сегодня, может быть старше, чем последний пакет, запрошенный вчера, поэтому не следует предполагать строго монотонный рост.