Вопрос или проблема
Клиент, использующий Ubuntu 18.04, хочет обновить php с версии 7.2.24-0ubuntu0.18.04.17 (cli) до последней версии 7.4 и заблокировать её (программное обеспечение, которое он использует, не работает с php8). Я видел другие вопросы о блокировке пакетов на определённой версии, но не уверен, что делаю не так. Является ли php особым случаем?
На данный момент я сделал следующее:
sudo add-apt-repository ppa:ondrej/php
sudo apt update
sudo apt install php7.4
php -v показывает версию 7.4.33, что вполне нормально.
sudo vi /etc/apt/preferences
Я добавил следующие строки в preferences:
Package: php
Pin: version 7.4.*
Pin-Priority: 1000
Таким образом, насколько я понимаю, после этого каждый раз, когда я выполняю, например,
sudo apt update
sudo apt full-upgrade
sudo apt autoremove
версия php должна оставаться на 7.4.*. Однако этого не происходит, php -v показывает версию 8.2.4 после этого, что я упустил? Неправильное имя сборки или что-то другое?
Также, связанный с этим вопрос: как быть со всеми другими сборками, начинающимися со строки php (sudo apt list php*)? Я предполагаю, что они также должны оставаться на версии, совместимой с php 7.4.x, так они останутся на месте, пока php будет на 7.4.x, или мне нужно добавить все их в настройки apt также? Могу ли я использовать подстановочный знак php* для этого?
Или есть какой-то лучший способ заблокировать php на версии 7.4?
ОБНОВЛЕНИЕ: Будет ли, например:
sudo apt-mark hold <имя пакета>
простым способом заблокировать версию, и могу и должен ли я использовать php* как имя пакета, чтобы заблокировать любые связанные с php пакеты на их текущих версиях? Есть ли какие-либо недостатки в этом?
Чтобы установить конкретную версию как умолчание для PHP, вы можете использовать следующую команду:
sudo update-alternatives --config php
Эта команда отобразит меню, подобное этому: это.
Ответ или решение
Для того чтобы зафиксировать версию PHP на Ubuntu 18.04, вам нужно выполнить несколько шагов, так как ваша цель — не только обновить PHP до версии 7.4, но и предотвратить его автоматическое обновление до более поздних версий (например, PHP 8). Основное внимание будет уделено нескольким методам, а также тому, как можно управлять другими пакетами PHP.
1. Установка PHP 7.4
Вы уже выполнили необходимые команды для добавления PPA и установки PHP 7.4. Давайте убедимся, что всё было выполнено корректно:
sudo add-apt-repository ppa:ondrej/php
sudo apt update
sudo apt install php7.4
Теперь вы можете проверить текущую версию PHP:
php -v
Если выводит 7.4.33
, значит установка прошла успешно.
2. Закрепление версии с помощью APT Preferences (необходимые модификации)
Вы пытались использовать файл /etc/apt/preferences
, но, возможно, допустили небольшую ошибку, так как до сих пор видите обновлённую версию PHP 8.2.4. Убедитесь, что содержимое файла выглядит следующим образом:
Package: php7.4
Pin: version 7.4.*
Pin-Priority: 1000
Package: php*
Pin: version 7.4.*
Pin-Priority: 50
- Здесь первый блок влияет на пакет
php7.4
, а второй используется для других связанных пакетов, начинающихся сphp
.
3. Использование apt-mark hold
для удержания версии
Альтернативный способ зафиксировать версию PHP — использование команды apt-mark hold
. Это позволит заблокировать так необходимые пакеты:
sudo apt-mark hold php7.4
sudo apt-mark hold php7.4-cli
sudo apt-mark hold php7.4-common
sudo apt-mark hold php7.4-fpm
Вы можете повторить этот процесс для любых других зависимостей PHP, установленных у вас на системе. В отличие от метода с preferences
, метод hold
более прямолинеен и прост в управлении.
4. Проверка текущих установленных пакетов
Чтобы убедиться в том, что вы удерживаете все необходимые пакеты PHP на версии 7.4, выполните следующую команду:
apt list --installed | grep php
Это позволит вам увидеть все установленные версии пакетов и убедиться, что они соответствуют нужной версии.
5. Обновление альтернативных версий PHP
Если у вас установлено несколько версий PHP и вы хотите установить PHP 7.4 по умолчанию, выполните следующую команду:
sudo update-alternatives --config php
После выполнения этой команды вы увидите меню для выбора текущей версии PHP.
Заключение
Таким образом, для фиксирования версии PHP на Ubuntu 18.04 вы можете использовать как настройки в apt preferences
, так и команду apt-mark hold
. Убедитесь, что вы также следите за обновлениями и зависящими пакетами, чтобы избежать возможного несоответствия. Эти методы являются стандартными и позволят вам избежать нежелательных обновлений в будущем, сохраняя стабильную работу вашего программного обеспечения на PHP 7.4.