Как исправить ошибку «E: Package ‘php-mcrypt’ has no installation candidate» на Ubuntu 20.04 / 18.04 ?
Сегодняшнее руководство будет посвящено установке расширения PHP mcrypt в Ubuntu 20.04 / 18.04.
Расширение PHP mcrypt является интерфейсом библиотеки криптографии mcrypt и поддерживает широкий спектр алгоритмов, таких как DES, TripleDES, Blowfish (по умолчанию), 3-WAY, SAFER-SK64, SAFER-SK128, TWOFISH, TEA, RC2 и ГОСТ в режимах шифрования CBC, OFB, CFB и ECB.
Если вы попытаетесь установить mcrypt с помощью apt, вы получите сообщение об ошибке:
$ sudo apt install php-mcrypt
Reading package lists... Done
Building dependency tree
Reading state information... Done
Package php-mcrypt is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
E: Package 'php-mcrypt' has no installation candidate
Расширение mcrypt было перемещено в репозиторий PECL и больше не связано с PHP начиная с PHP 7.2.0.
PECL – это репозиторий для всех известных расширений PHP, откуда пользователи могут загружать и размещать разработанные расширения PHP.
Укажите вашей ОС вытащить последний список пакетов, доступных в репозиториях:
sudo apt update
Установите средства разработки на Ubuntu:
sudo apt update
sudo apt install -y build-essential
Подтвердите версии make и gcc:
$ gcc --version gcc (Ubuntu 9.3.0-10ubuntu2) 9.3.0 Copyright (C) 2019 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. $ make --version GNU Make 4.2.1 Built for x86_64-pc-linux-gnu Copyright (C) 1988-2016 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.
Сначала вам нужно установить расширения PHP, dev и pear в Ubuntu 20.04 | 18.04.
sudo apt install php php-pear php-dev libmcrypt-dev
Убедитесь, что команда pecl доступна в вашей системе.
$ which pecl
/usr/bin/pecl
Использование PECL:
$ pecl help
Commands:
build Build an Extension From C Source
bundle Unpacks a Pecl Package
channel-add Add a Channel
channel-alias Specify an alias to a channel name
channel-delete Remove a Channel From the List
channel-discover Initialize a Channel from its server
channel-info Retrieve Information on a Channel
channel-login Connects and authenticates to remote channel server
channel-logout Logs out from the remote channel server
channel-update Update an Existing Channel
clear-cache Clear Web Services Cache
config-create Create a Default configuration file
config-get Show One Setting
config-help Show Information About Setting
config-set Change Setting
config-show Show All Settings
convert Convert a package.xml 1.0 to package.xml 2.0 format
cvsdiff Run a "cvs diff" for all files in a package
cvstag Set CVS Release Tag
download Download Package
download-all Downloads each available package from the default channel
info Display information about a package
install Install Package
list List Installed Packages In The Default Channel
list-all List All Packages
list-channels List Available Channels
list-files List Files In Installed Package
list-upgrades List Available Upgrades
login Connects and authenticates to remote server [Deprecated in favor of channel-login]
logout Logs out from the remote server [Deprecated in favor of channel-logout]
makerpm Builds an RPM spec file from a PEAR package
package Build Package
package-dependencies Show package dependencies
package-validate Validate Package Consistency
pickle Build PECL Package
remote-info Information About Remote Packages
remote-list List Remote Packages
run-scripts Run Post-Install Scripts bundled with a package
run-tests Run Regression Tests
search Search remote package database
shell-test Shell Script Test
sign Sign a package distribution file
svntag Set SVN Release Tag
uninstall Un-install Package
update-channels Update the Channel List
upgrade Upgrade Package
upgrade-all Upgrade All Packages [Deprecated in favor of calling upgrade with no parameters]
Usage: pecl [options] command [command-options] <parameters>
Type "pecl help options" to list all options.
Type "pecl help shortcuts" to list all command shortcuts.
Type "pecl help version" or "pecl version" to list version information.
Type "pecl help <command>" to get the help for the specified command.
Обновление каналов:
$ sudo pecl channel-update pecl.php.net Updating channel "pecl.php.net" Update of Channel "pecl.php.net" succeeded $ sudo pecl update-channels Updating channel "doc.php.net" Update of Channel "doc.php.net" succeeded Updating channel "pear.php.net" Update of Channel "pear.php.net" succeeded Updating channel "pecl.php.net" Channel "pecl.php.net" is up to date
Давайте поищем расширение mcrypt.
$ sudo pecl search mcrypt
Matched packages, channel pecl.php.net:
=======================================
Package Stable/(Latest) Local
mcrypt 1.0.3 (stable) Bindings for the libmcrypt library
mcrypt_filter 0.1.0 (beta) Applies mcrypt symmetric encryption using stream filters
Вы можете установить расширение mcrypt с помощью команды pecl с опцией install.
$ sudo pecl install mcrypt downloading mcrypt-1.0.3.tgz ... Starting to download mcrypt-1.0.3.tgz (33,590 bytes) .........done: 33,590 bytes 6 source files, building running: phpize Configuring for: PHP Api Version: 20190902 Zend Module Api No: 20190902 Zend Extension Api No: 320190902 ........
Когда вы видите подсказку
libmcrypt prefix? [autodetect] :
Нажмите Enter для автоопределения.
Вы должны получить вывод, аналогично показанному ниже по завершению установки расширения mcrypt на компьютере с Linux Ubuntu 20.04.
Build process completed successfully
Installing '/usr/lib/php/20190902/mcrypt.so'
install ok: channel://pecl.php.net/mcrypt-1.0.3
configuration option "php_ini" is not set to php.ini location
You should add "extension=mcrypt.so" to php.ini
Включите расширение в файле php.ini.Ubuntu 20.04:
$ sudo vim /etc/php/7.4/cli/php.ini
extension=mcrypt.so
$ sudo vim /etc/php/7.4/apache2/php.ini
extension=mcrypt.so
Ubuntu 18.04:
$ sudo vim /etc/php/7.2/cli/php.ini
extension=mcrypt.so
$ sudo vim /etc/php/7.2/apache2/php.ini
extension=mcrypt.so
Вы можете подтвердить, что модуль был установлен и включен с помощью команды:
$ php -m | grep mcrypt
mcrypt
Если вы используете приложение, размещенное на веб-сервере Apache или Nginx, перезапустите их.
--- рестарт Apache ---
$ sudo systemctl restart apache2
--- рестарт nginx ---
$ sudo systemctl restart nginx
Спасибо большое автору, не знал что PHP модули так можно инсталлить!
Всегда рады!