From 44981e6c3e072122a87f94b15afabbd9f8bb1cde Mon Sep 17 00:00:00 2001 From: Ark74 Date: Mon, 22 Jan 2024 19:47:43 -0600 Subject: [PATCH] tools: add standalone prepare_php.sh script. --- tools/prepare_php.sh | 126 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 tools/prepare_php.sh diff --git a/tools/prepare_php.sh b/tools/prepare_php.sh new file mode 100644 index 0000000..bc91d18 --- /dev/null +++ b/tools/prepare_php.sh @@ -0,0 +1,126 @@ +#!/bin/bash +# Automated PHP environment build for Nextcloud. +# SwITNet Ltd © - 2024, https://switnet.net/ +# GPLv3 or later. + +PHPVER=$1 +STABLE_PHP="$(apt-cache madison php|grep -v ppa|awk -F'[:+]' 'NR==1{print $2}')" +PHP_REPO="$(apt-cache policy | awk '/http/&&/php/{print$2}' | awk -F "/" 'NR==1{print$5}')" +PHP_FPM_DIR="/etc/php/$PHPVER/fpm" +PHP_INI="$PHP_FPM_DIR/php.ini" +PHP_CONF="/etc/php/$PHPVER/fpm/pool.d/www.conf" +TMP_GPG_REPO="$(mktemp -d)" + +if [ $# -ne 1 ]; then + echo "Usage: $0 8.2" + exit 1 +fi + +install_aval_package() { +for i in $1 + do + if [ -z "$(apt-cache madison "$i" 2>/dev/null)" ]; then + echo " > Package $i not available on repo." + else + echo " > Add package $i to the install list" + packages="$packages $i" + fi + done + echo "$packages" + apt-get -y install "$packages" + packages="" +} + +add_gpg_keyring() { +apt-key adv --recv-keys --keyserver keyserver.ubuntu.com "$1" +apt-key export "$1" | gpg --dearmour | tee "$TMP_GPG_REPO"/"$1".gpg >/dev/null +apt-key del "$1" +mv "$TMP_GPG_REPO"/"$1".gpg /etc/apt/trusted.gpg.d/ +} + +add_php_repo() { +if [ "$PHP_REPO" = "php" ]; then + echo "PHP $PHPVER already installed" + apt-get -q2 update + apt-get -yq2 dist-upgrade +else + echo "# Adding Ondrej PHP $PHPVER PPA Repository" + add_gpg_keyring E5267A6C + echo "deb [arch=amd64] http://ppa.launchpad.net/ondrej/php/ubuntu $DISTRO_RELEASE main" > /etc/apt/sources.list.d/php"$PHPVER".list + apt-get update -q2 +fi +} + +add_php_repo + +install_aval_package " \ + imagemagick \ + php$PHPVER-fpm \ + php$PHPVER-bcmath \ + php$PHPVER-bz2 \ + php$PHPVER-cli \ + php$PHPVER-cgi \ + php$PHPVER-curl \ + php$PHPVER-gd \ + php$PHPVER-gmp \ + php$PHPVER-imagick \ + php$PHPVER-intl \ + php$PHPVER-json \ + php$PHPVER-ldap \ + php$PHPVER-mbstring \ + php$PHPVER-pgsql \ + php$PHPVER-redis \ + php$PHPVER-soap \ + php$PHPVER-xml \ + php$PHPVER-xmlrpc \ + php$PHPVER-zip \ + redis-server \ + unzip \ + " + +#System related +install_ifnot smbclient +sed -i "s|.*env\[HOSTNAME\].*|env\[HOSTNAME\] = \$HOSTNAME|" "$PHP_CONF" +sed -i "s|.*env\[PATH\].*|env\[PATH\] = /usr/local/bin:/usr/bin:/bin|" "$PHP_CONF" +sed -i "s|.*env\[TMP\].*|env\[TMP\] = /tmp|" "$PHP_CONF" +sed -i "s|.*env\[TMPDIR\].*|env\[TMPDIR\] = /tmp|" "$PHP_CONF" +sed -i "s|.*env\[TEMP\].*|env\[TEMP\] = /tmp|" "$PHP_CONF" +sed -i "s|;clear_env = no|clear_env = no|" "$PHP_CONF" + +echo " +Tunning PHP.ini... +" +# Change values in php.ini (increase max file size) +# max_execution_time +sed -i "s|max_execution_time =.*|max_execution_time = 3500|g" "$PHP_INI" +# max_input_time +sed -i "s|max_input_time =.*|max_input_time = 3600|g" "$PHP_INI" +# memory_limit +sed -i "s|memory_limit =.*|memory_limit = 512M|g" "$PHP_INI" +# post_max +sed -i "s|post_max_size =.*|post_max_size = 1025M|g" "$PHP_INI" +# upload_max +sed -i "s|upload_max_filesize =.*|upload_max_filesize = 1024M|g" "$PHP_INI" + +phpenmod opcache +{ + +echo "# OPcache settings for Nextcloud" +echo "opcache.enable=1" +echo "opcache.enable_cli=1" +echo "opcache.interned_strings_buffer=8" +echo "opcache.max_accelerated_files=10000" +echo "opcache.memory_consumption=256" +echo "opcache.save_comments=1" +echo "opcache.revalidate_freq=1" +echo "opcache.validate_timestamps=1" +} >> "$PHP_INI" + +update-alternatives --set php /usr/bin/php"$STABLE_PHP" +update-alternatives --set php-fpm.sock /run/php/php"$STABLE_PHP"-fpm.sock +update-alternatives --set php-cgi /usr/bin/php-cgi"$STABLE_PHP" +update-alternatives --set php-cgi-bin /usr/lib/cgi-bin/php"$STABLE_PHP" +update-alternatives --set phar /usr/bin/phar"$STABLE_PHP" +update-alternatives --set phar.phar /usr/bin/phar.phar"$STABLE_PHP" + +systemctl restart php"$PHPVER"-fpm.service