File: //usr/local/mailchannels/bin/install.sh
#!/usr/bin/env bash
if [[ ! ${EUID} -eq 0 ]]; then
echo "You must run the install as root"
exit 1
fi
MIN_CPANEL_VERSION_MAJOR=110
MIN_CPANEL_VERSION_MINOR=0
MIN_CPANEL_VERSION="${MIN_CPANEL_VERSION_MAJOR}.${MIN_CPANEL_VERSION_MINOR}"
PHP_BIN=/usr/local/cpanel/3rdparty/bin/php # This is the PHP used by WHH and
# the plugin itself. We need to use
# the whole path to avoid picking up
# an older PHP used for hosting.
MIN_PHP_VERSION_MAJOR=8
MIN_PHP_VERSION_MINOR=0
MIN_PHP_VERSION="${MIN_PHP_VERSION_MAJOR}.${MIN_PHP_VERSION_MINOR}"
MC_CGI_DIR=/usr/local/cpanel/whostmgr/docroot/cgi/mailchannels
MC_CONF_DIR=/etc/mailchannels
MC_EXIM_CONF_DIR=${MC_CONF_DIR}/exim
MC_DATA_DIR=/var/lib/mailchannels
MC_LOG_DIR=/var/log/mailchannels
MC_PLUGIN_DIR=/usr/local/mailchannels
MC_BIN="${MC_PLUGIN_DIR}/bin"
MC_BIN_LIB="${MC_BIN}/lib"
MC_CPANEL_PLUGIN_DIR="${MC_PLUGIN_DIR}/cpanel-plugin"
CPANEL_INSTALL_FILE="${MC_CPANEL_PLUGIN_DIR}/install"
CHECK_VERSION="${MC_BIN_LIB}/check_version.sh"
RUN_FATAL="${MC_BIN_LIB}/run_fatal.sh"
MC_OLD_PLUGIN_CONF_FILE="/usr/local/cpanel/etc/MailChannels.ini"
MC_OLD_PLUGIN_UNINSTALL_SCRIPT="${MC_BIN}/uninstall_old_plugin.sh"
#USER MESSAGES
YES_NO_PROMPT_MESSAGE="(yes/no)"
MESSAGE="The old MailChannels plugin is still installed. You must remove this plugin before installing the MailChannels"
MESSAGE="${MESSAGE} v3 plugin. Would you like to uninstall it now?"
OLD_PLUGIN_INSTALLED_MESSAGE=${MESSAGE}
MESSAGE="Please uninstall the old plugin before attempting to install the MailChannels v3 plugin . See"
MESSAGE="${MESSAGE} https://mailchannels.zendesk.com/hc/en-us/articles/360026199951-MailChannels-cPanel-WHM-Plugin"
MESSAGE="${MESSAGE} for more information."
UNINSTALL_OLD_PLUGIN_MESSAGE=${MESSAGE}
CPANEL_VERSION_TO_LOW_MESSAGE="Aborting installation, your cPanel version is too low. Please upgrade to at least version ${MIN_CPANEL_VERSION}"
PHP_VERSION_TO_LOW_MESSAGE="Aborting installation, your PHP version is too low. Please upgrade to at least version ${MIN_PHP_VERSION}"
RUNNING_CPANEL_INSTALL_MESSAGE="Running ${CPANEL_INSTALL_FILE}"
runFatal() {
${RUN_FATAL} "$1" "$2"
if [[ $? != 0 ]]; then
exit 1
fi
}
${CHECK_VERSION} "/usr/local/cpanel/cpanel -V" "([0-9]+)\.([0-9]+)" ${MIN_CPANEL_VERSION_MAJOR}
if [[ ! $? -eq 0 ]]; then
echo ${CPANEL_VERSION_TO_LOW_MESSAGE}
exit 1
fi
${CHECK_VERSION} "${PHP_BIN} -v" "PHP\s([0-9]+)\.([0-9]+)\." ${MIN_PHP_VERSION_MAJOR} ${MIN_PHP_VERSION_MINOR}
if [[ ! $? -eq 0 ]]; then
echo ${PHP_VERSION_TO_LOW_MESSAGE}
exit 1
fi
if [[ -f ${MC_OLD_PLUGIN_CONF_FILE} ]]; then
echo "${OLD_PLUGIN_INSTALLED_MESSAGE} ${YES_NO_PROMPT_MESSAGE}:"
read UNINSTALL_OLD_PLUGIN
if [[ "$UNINSTALL_OLD_PLUGIN" != "yes" ]]
then
echo ${UNINSTALL_OLD_PLUGIN_MESSAGE}
exit 1
fi;
runFatal ${MC_OLD_PLUGIN_UNINSTALL_SCRIPT}
fi
runFatal "rm -rf ${MC_CGI_DIR}"
runFatal "mkdir ${MC_CGI_DIR}"
if [[ ! -d ${MC_CONF_DIR} ]]; then
runFatal "mkdir ${MC_CONF_DIR}"
fi;
if [[ ! -d ${MC_EXIM_CONF_DIR} ]]; then
runFatal "mkdir ${MC_EXIM_CONF_DIR}"
fi;
runFatal "chown root:root ${MC_CONF_DIR}"
runFatal "chmod 771 ${MC_CONF_DIR}"
runFatal "chown :mail ${MC_EXIM_CONF_DIR}"
runFatal "chmod 771 ${MC_EXIM_CONF_DIR}"
if [[ ! -d ${MC_DATA_DIR} ]]; then
runFatal "mkdir ${MC_DATA_DIR}"
fi;
runFatal "mkdir -p ${MC_DATA_DIR}/inbound_smtp"
runFatal "mkdir -p ${MC_DATA_DIR}/lock"
runFatal "chown -R root:root ${MC_DATA_DIR}"
runFatal "chmod -R 660 ${MC_DATA_DIR}"
if [[ ! -d ${MC_LOG_DIR} ]]; then
runFatal "mkdir -p ${MC_LOG_DIR}"
fi;
runFatal "chown -R root:root ${MC_LOG_DIR}"
runFatal "chmod -R 660 ${MC_LOG_DIR}"
runFatal "ln -sf ${MC_PLUGIN_DIR}/index.php /usr/local/cpanel/whostmgr/docroot/cgi/mailchannels/index.cgi"
runFatal "ln -sf ${MC_PLUGIN_DIR}/resources /usr/local/cpanel/whostmgr/docroot/cgi/mailchannels/resources"
runFatal "cp ${MC_BIN}/mailchannels.conf ${MC_CONF_DIR}"
runFatal "${PHP_BIN} -q ${MC_BIN}/install.php"
runFatal "/usr/local/cpanel/bin/register_appconfig ${MC_CONF_DIR}/mailchannels.conf"
echo ${RUNNING_CPANEL_INSTALL_MESSAGE}
runFatal "chmod +x ${CPANEL_INSTALL_FILE}"
runFatal "${CPANEL_INSTALL_FILE}"