File: /var/lib/dpkg/info/imunify360-php-i360.postinst
#!/bin/bash
set -e
I360_PREFIX=/usr/share/i360-php
is_cloudways()
{
CW_REGEXP=".*\.cloudways(apps|stagingapps).com$"
APM_BIN=/usr/local/sbin/apm
HOSTNAME=$(hostname -f | sed 's/.*/\L&/g')
if [[ ${HOSTNAME} =~ ${CW_REGEXP} ]]; then
return 0
fi
if [ -f ${APM_BIN} ]; then
if ${APM_BIN} info | grep -q "Cloudways"; then
return 0
fi
fi
return 1
}
case "$1" in
triggered)
declare -a altphps
altphps=(`cat "/usr/share/i360-php/altphps.txt"`)
if ! is_cloudways; then
for value in "${altphps[@]}"; do
# if alt-php is installed and i360.ini is missing in php.d, then copy i360.ini to php.d
if [ -e "/opt/alt/${value}/etc/php.ini" ] && [ -e "${I360_PREFIX}/${value}/etc/php.d.all/i360.ini" ] && ! [ -f "/opt/alt/${value}/etc/php.d/i360.ini" ]; then
mkdir -p "/opt/alt/${value}/etc/php.d/"
cp ${I360_PREFIX}/${value}/etc/php.d.all/i360.ini /opt/alt/${value}/etc/php.d/i360.ini
fi
done
else
for path in ${2}; do
# basename of triggered path, i.e. /etc/php/8.2 -> 8.2
version=${path##*/}
php_bin="/usr/bin/php${version}"
if [[ -n $version ]] && [[ -e ${php_bin} ]]; then
if [[ -z "$(${php_bin} -i | grep "i360 pkg ver")" ]]; then
/usr/share/i360-php/native-php/install-clean.sh --install-i360 "${php_bin}"
fi
fi
done
fi
;;
configure)
declare -a altphps
altphps=(`cat "/usr/share/i360-php/altphps.txt"`)
LIBS=""
if [ "$(uname -m)" == "x86_64" ]; then
LIBS="/x86_64-linux-gnu"
fi
IS_CLOUDWAYS=0
if ! is_cloudways; then
for value in "${altphps[@]}"; do
if [ -f ${I360_PREFIX}/${value}/etc/php.d.all/i360.ini ]; then
mkdir -p /opt/alt/${value}/etc/php.d.all
if [ ! -f /opt/alt/${value}/etc/php.d.all/i360.ini ]; then
cp -f ${I360_PREFIX}/${value}/etc/php.d.all/i360.ini /opt/alt/${value}/etc/php.d.all/i360.ini
fi
fi
# update i360.so
if [ -f ${I360_PREFIX}/${value}/usr/lib${LIBS}/php/modules/i360.so ]; then
mkdir -p /opt/alt/${value}/usr/lib${LIBS}/php/modules
cp -f ${I360_PREFIX}/${value}/usr/lib${LIBS}/php/modules/i360.so /opt/alt/${value}/usr/lib${LIBS}/php/modules/i360.so
fi
# if alt-php is installed and i360.ini is missing in php.d, then copy i360.ini to php.d
if [ -e "/opt/alt/${value}/etc/php.ini" ] && [ -e "${I360_PREFIX}/${value}/etc/php.d.all/i360.ini" ] && ! [ -f "/opt/alt/${value}/etc/php.d/i360.ini" ]; then
mkdir -p "/opt/alt/${value}/etc/php.d/"
cp ${I360_PREFIX}/${value}/etc/php.d.all/i360.ini /opt/alt/${value}/etc/php.d/i360.ini
fi
done
else
IS_CLOUDWAYS=1
fi
if [ ! -e /usr/share/i360-php-opts/.i360-lock ]; then
touch /usr/share/i360-php-opts/.i360-lock
chmod 644 /usr/share/i360-php-opts/.i360-lock
else
chmod 644 /usr/share/i360-php-opts/.i360-lock
fi
#detect native php if exists for Plesk
if [ -e /usr/local/psa/version ]; then
if [ -e /usr/bin/php ]; then
VERS=$(/usr/bin/php --version | head -n1 | cut -d' ' -f2 | cut -c 1,3)
EXT_DIR=$(/usr/bin/php -i | grep -e "^extension_dir" | cut -d"=" -f2 | tr ">" " " | sed 's/^ *//;s/ *$//')
INI_EXISTS=$(/usr/bin/php -i | grep "Scan this dir for additional .ini files" | cut -d"=" -f2 | tr ">" " " | sed 's/^ *//;s/ *$//')
if [ -e "/opt/alt/php${VERS}/usr/lib${LIBS}/php/modules/" -a -n "$INI_EXISTS" -a -e "$INI_EXISTS" ]; then
if [ -e /opt/alt/php${VERS}/usr/lib${LIBS}/php/modules/ -a -e "${EXT_DIR}" ]; then
if [ -e /opt/alt/php${VERS}/usr/lib${LIBS}/php/modules/i360.so ]; then
rm -f "${EXT_DIR}/i360.so"
fi
cp /opt/alt/php${VERS}/usr/lib${LIBS}/php/modules/i360.so "${EXT_DIR}"
fi
INI_PATH=$(dirname $(dirname $(/usr/bin/php -i | grep "Scan this dir for additional .ini files" | cut -d"=" -f2 | tr ">" " " | sed 's/^ *//;s/ *$//')))
if [ -e /opt/alt/php${VERS}/etc/php.d.all/i360.ini -a -e ${INI_PATH}/mods-available -a -e /usr/sbin/phpenmod ]; then
cp /opt/alt/php${VERS}/etc/php.d.all/i360.ini ${INI_PATH}/mods-available
/usr/sbin/phpenmod i360
fi
fi
fi
fi
# detect if native php exists for DA
if [ -e /usr/local/directadmin/custombuild ]; then
if [ -x /usr/share/i360-php/easyapache3/native_da.hook ]; then
/usr/share/i360-php/easyapache3/native_da.hook --install-i360
fi
for unit in $(systemctl list-units --state=running "php-fpm*" | grep "loaded active" | awk '{ print $1 }')
do
systemctl restart $unit
done
fi
if [ ${IS_CLOUDWAYS} -eq 1 ]; then
if [ -x /usr/share/i360-php/native-php/install-clean.sh ]; then
/usr/share/i360-php/native-php/install-clean.sh --install-i360
for unit in $(systemctl list-units --state=running | grep "php.*-fpm\.service" | awk '{ print $1 }')
do
systemctl restart $unit
done
fi
# Remove cpanel, plesk php configs
rm -rf /opt/cpanel /opt/plesk /usr/share/cagefs/.cpanel.multiphp
fi
#
# When imunify360-php-i360 and imunify360-php-i360-rules are installed
# in one transaction, it comes out, that /usr/bin/i360-storage
# is not yet available in %post for imunify360-php-i360-rules.
#
# That is why we repeat this step in %post for imunify360-php-i360
#
/usr/bin/i360-storage.immunity mkdump /usr/share/i360-php-opts/.rules /usr/share/i360-php-opts/.rulesdump
# Generate .rules and .rulesdump
# from /var/imunify360/files/static/proactive/rules/[version]
if [ ${IS_CLOUDWAYS} -eq 0 ]; then
/usr/bin/i360-storage-new --silent-on-noop
else
# skip v1 compilation on cloudways when v2 is available
/usr/bin/i360-storage-new --silent-on-noop --optimize
fi
if [ -e /usr/bin/i360-exclcomp ]; then
if [ -e /etc/sysconfig/imunify360/malware-filters-admin-conf/pd-combined.txt ]; then
if [ ! -e /usr/share/i360-php-opts/pd-combined-compiled ]; then
/usr/bin/i360-exclcomp
fi
fi
fi
#on install or upgrade check if exists autorules.yaml and recreate rules
if [ -e /usr/share/i360-php-opts/autorules.yaml ] && [ -e /etc/sysconfig/imunify360/imunify360-merged.config ]; then
IS_PHP_IM_ENABLED=$(awk 'BEGIN {found=0;}{if(/PROACTIVE_DEFENCE/){found=1;}else if($found && /php_immunity/ && /true/){print "true";}}' /etc/sysconfig/imunify360/imunify360-merged.config)
if [ -n "$IS_PHP_IM_ENABLED" ]; then
if [ -e /usr/bin/i360-storage-mkcustom ]; then
/usr/bin/i360-storage-mkcustom /usr/share/i360-php-opts/autorules.yaml
fi
fi
fi
# restore important values from old config file
JIT_COMPATIBLE_MODE=$(grep jit_compatible_mode /usr/share/i360-php-opts/module.ini.old) || echo ""
if [ -n "${JIT_COMPATIBLE_MODE}" ]; then
sed -i '/jit_compatible_mode/d' /usr/share/i360-php-opts/module.ini
echo -e "\n${JIT_COMPATIBLE_MODE}" >> /usr/share/i360-php-opts/module.ini
rm /usr/share/i360-php-opts/module.ini.old
fi
/bin/systemctl daemon-reload >/dev/null 2>&1 || :
/bin/systemctl reset-failed >/dev/null 2>&1 || :
;;
abort-upgrade|abort-remove|abort-deconfigure)
;;
*)
echo "postinst called with unknown argument \`$1'" >22
exit 1
;;
esac
exit 0