Понижение версий пакетов в Ubuntu

2021.08.23
Продолжаю приключения со свежей нестабильной версией Ubuntu 21.04. Сегодня будем устанавливать пакет, который зависит от более старой версии другого пакета, свежего выпуска которого еще не было, но будет.

Продолжаю приключения со свежей нестабильной версией Ubuntu 21.04. Сегодня будем устанавливать пакет, который зависит от более старой версии другого пакета, свежего выпуска которого еще не было, но будет, а ждать некогда и надо чтобы здесь и сейчас работало.

На этот раз не удалось поставить php7.3-gd по следующей причине:

$ sudo apt install php7.3-gd
Чтение списков пакетов… Готово
Построение дерева зависимостей… Готово
Чтение информации о состоянии… Готово         
Некоторые пакеты не могут быть установлены. Возможно, то, что вы просите,
неосуществимо, или же вы используете нестабильную версию дистрибутива, где
запрошенные вами пакеты ещё не созданы или были удалены из Incoming.
Следующая информация, возможно, вам поможет:

Следующие пакеты имеют неудовлетворённые зависимости:
 php7.3-gd : Зависит: php7.3-common (= 7.3.28-2+ubuntu20.04.1+deb.sury.org+1) но 7.3.28-2+ubuntu21.04.1+deb.sury.org+1 должен быть установлен
E: Невозможно исправить ошибки: у вас зафиксированы сломанные пакеты.

Особый интерес в ответе вызывает следующая строка:

php7.3-gd : Зависит: php7.3-common (= 7.3.28-2+ubuntu20.04.1+deb.sury.org+1) 
но 7.3.28-2+ubuntu21.04.1+deb.sury.org+1 должен быть установлен

php7.3-common - это пакет php, который включает в себя общие файлы для пакетов PHP, общие утилиты и библиотеки.

Проверяем данные пакета php7.3-common, точнее нас интересует версия (на самом деле ответ команды ниже выдает намного больше информации, которая может рассказать о том, что такое php7.3-common):

$ sudo apt-cache showpkg php7.3-common
Package: php7.3-common
Versions: 7.3.28-2+ubuntu21.04.1+deb.sury.org+1 (/var/lib/dpkg/status)
...

Нас интересует только версия, поэтому можно короче:

$ dpkg -s php7.3-common | grep Version
Version: 7.3.28-2+ubuntu21.04.1+deb.sury.org+1

php7.3-gd треубет php7.3-common версии 7.3.28-2+ubuntu20.04.1+deb.sury.org+1, а на данный момент на сервере имеется версия 7.3.28-2+ubuntu21.04.1+deb.sury.org+1.

Варианты:

При помощи даунгрейда (понижения версии) зависимого пакета можно установить зависящий рабочий пакет.

Даунгрейдим пакет php7.3-common:

$ sudo apt install php7.3-common=7.3.28-2+ubuntu20.04.1+deb.sury.org+1
Чтение списков пакетов… Готово
Построение дерева зависимостей… Готово
Чтение информации о состоянии… Готово         
Следующий пакет устанавливался автоматически и больше не требуется:
  libzip4
Для его удаления используйте «sudo apt autoremove».
Следующие пакеты будут УДАЛЕНЫ:
  libapache2-mod-php7.3 php-pear php7.3 php7.3-cli php7.3-curl php7.3-fpm php7.3-json php7.3-mbstring php7.3-mysql php7.3-opcache
  php7.3-readline php7.3-xml php7.3-zip
Следующие пакеты будут заменены на СТАРЫЕ версии:
  php7.3-common
Обновлено 0 пакетов, установлено 0 новых пакетов, 1 пакетов заменено на старые версии, для удаления отмечено 13 пакетов, и 9 пакетов не обновлено.
Необходимо скачать 581 kB архивов.
После данной операции объём занятого дискового пространства уменьшится на 20,3 MB.

dpkg: предупреждение: снижение версии php7.3-common с 7.3.28-2+ubuntu21.04.1+deb.sury.org+1 до 7.3.28-2+ubuntu20.04.1+deb.sury.org+1

Теперь установка зависящего пакета пройдет успешно, и он будет успешно работать.

В телеграм канале DevOps от первого лица можно оставить комментарий или почитать интересные истории из практики DevOps