#!/usr/bin/env bash # PHP Installer # Min. Requirement : GNU/Linux Ubuntu 14.04 & 16.04 # Last Build : 15/08/2019 # Author : ESLabs.ID (eslabs.id@gmail.com) # Since Version : 1.0.0 # Include helper functions. if [ "$(type -t run)" != "function" ]; then BASEDIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd ) # shellchechk source=scripts/helper.sh # shellcheck disable=SC1090 . "${BASEDIR}/helper.sh" fi # Define build directory. BUILD_DIR=${BUILD_DIR:-"/usr/local/src/lemper"} if [ ! -d "${BUILD_DIR}" ]; then run mkdir -p "${BUILD_DIR}" fi # Make sure only root can run this installer script. requires_root function add_php_repo() { # Add PHP (latest stable) from Ondrej's repo # Source: https://launchpad.net/~ondrej/+archive/ubuntu/php echo "Add Ondrej's PHP repository..." if "${DRYRUN}"; then warning "PHP repository added in dryrun mode." else { # Fix for NO_PUBKEY key servers error run apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 4F4EA0AAE5267A6C run add-apt-repository -y ppa:ondrej/php run apt-get update -y } fi } function install_php_fpm() { # PHP version. local PHPv="${1}" if [ -z "${PHPv}" ]; then PHPv=${PHP_VERSION:-"7.3"} fi local PHP_PKGS=() export PHP_IS_INSTALLED="no" # Checking if php already installed. if [[ -n $(command -v "php${PHPv}") ]]; then PHP_IS_INSTALLED="yes" warning "PHP${PHPv} & FPM package already installed..." else echo "Installing PHP${PHPv} & FPM..." # Add repo first DISTRIB_REPO=${DISTRIB_REPO:-$(get_release_name)} if [ ! -f "/etc/apt/sources.list.d/ondrej-php-${DISTRIB_REPO}.list" ]; then add_php_repo fi PHP_PKGS=("php${PHPv} php${PHPv}-bcmath php${PHPv}-cli php${PHPv}-common \ php${PHPv}-curl php${PHPv}-dev php${PHPv}-fpm php${PHPv}-mysql php${PHPv}-gd \ php${PHPv}-gmp php${PHPv}-imap php${PHPv}-intl php${PHPv}-json php${PHPv}-ldap \ php${PHPv}-mbstring php${PHPv}-opcache php${PHPv}-pspell php${PHPv}-readline \ php${PHPv}-recode php${PHPv}-snmp php${PHPv}-soap php${PHPv}-sqlite3 \ php${PHPv}-tidy php${PHPv}-xml php${PHPv}-xmlrpc php${PHPv}-xsl php${PHPv}-zip \ php-geoip php-pear pkg-php-tools spawn-fcgi fcgiwrap geoip-database" "${PHP_PKGS[@]}") if [[ "${#PHP_PKGS[@]}" -gt 0 ]]; then echo "Installing PHP${PHPv} & FPM packages..." # shellcheck disable=SC2068 run apt-get install -y ${PHP_PKGS[@]} fi if [[ -n $(command -v "php${PHPv}") ]]; then status "PHP${PHPv} & FPM packages installed." fi # Install php mcrypt? echo "" while [[ $INSTALL_PHPMCRYPT != "y" && $INSTALL_PHPMCRYPT != "n" ]]; do read -rp "Do you want to install PHP Mcrypt for encryption/decryption? [y/n]: " \ -i n -e INSTALL_PHPMCRYPT done echo "" if [[ "$INSTALL_PHPMCRYPT" == Y* || "$INSTALL_PHPMCRYPT" == y* ]]; then if [ "${PHPv//.}" -lt "72" ]; then run apt-get install -y "php${PHPv}-mcrypt" elif [ "${PHPv}" == "7.2" ]; then run apt-get -y install gcc make autoconf libc-dev pkg-config \ libmcrypt-dev libreadline-dev && \ pecl install mcrypt-1.0.1 # Enable Mcrypt module. echo "Update PHP ini file with Mcrypt module..." run bash -c "echo extension=mcrypt.so > /etc/php/${PHPv}/mods-available/mcrypt.ini" if [ ! -f "/etc/php/${PHPv}/cli/conf.d/20-mcrypt.ini" ]; then run ln -s "/etc/php/${PHPv}/mods-available/mcrypt.ini" \ "/etc/php/${PHPv}/cli/conf.d/20-mcrypt.ini" fi if [ ! -f "/etc/php/${PHPv}/fpm/conf.d/20-mcrypt.ini" ]; then run ln -s "/etc/php/${PHPv}/mods-available/mcrypt.ini" \ "/etc/php/${PHPv}/fpm/conf.d/20-mcrypt.ini" fi else run apt-get install -y dh-php # use libsodium instead warning "Mcrypt is deprecated for PHP version ${PHPv} or greater, you should using Libsodium or OpenSSL." fi fi if [ ! -d /var/log/php ]; then mkdir /var/log/php fi fi } # Install ionCube Loader function install_ioncube() { echo "Installing ionCube PHP loader..." # Delete old loaders file. if [ -d /usr/lib/php/loaders/ioncube ]; then echo "Removing old/existing ionCube PHP loader..." run rm -fr /usr/lib/php/loaders/ioncube fi run pushd "${BUILD_DIR}" ARCH=${ARCH:-$(uname -p)} if [[ "${ARCH}" == "x86_64" ]]; then run wget -q "http://downloads2.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz" run tar -xzf ioncube_loaders_lin_x86-64.tar.gz run rm -f ioncube_loaders_lin_x86-64.tar.gz else run wget -q "http://downloads2.ioncube.com/loader_downloads/ioncube_loaders_lin_x86.tar.gz" run tar -xzf ioncube_loaders_lin_x86.tar.gz run rm -f ioncube_loaders_lin_x86.tar.gz fi echo "Installing latest ionCube PHP loader..." run mv -f ioncube /usr/lib/php/loaders/ run popd } # Enable ionCube Loader function enable_ioncube() { # PHP version. local PHPv="${1}" if [ -z "${PHPv}" ]; then PHPv=${PHP_VERSION:-"7.3"} fi echo "Enabling ionCube PHP${PHPv} loader" if "${DRYRUN}"; then warning "ionCube PHP${PHPv} enabled in dryrun mode." else if [ -f "/usr/lib/php/loaders/ioncube/ioncube_loader_lin_${PHPv}.so" ]; then cat > "/etc/php/${PHPv}/mods-available/ioncube.ini" < "/etc/php/${PHPv}/mods-available/sourceguardian.ini" <> "/etc/php/${PHPv}/fpm/php.ini" <> "/etc/php/${PHPv}/fpm/pool.d/lemper.conf" <