#!/bin/sh # # Copyright (c) 1999-2008 Parallels # All rights reserved # # # Plesk script # remove_tmp_state() { if [ -d "/tmp/.state" ]; then rm -Rf "/tmp/.state" >> $product_log 2>&1 fi } true apache_status_linux_debian apache_stop_BSD apache_status_linux_debian() { get_pid "/usr/sbin/apache2" false local pid=$common_var if test "$pid" -ne 1; then # running return 0 fi return 1 } apache_stop_BSD() { local apache_script if [ "$std_to_pkg" -ne 0 ]; then apache_script="$PRODUCT_ROOT_D/rc.d/httpd" else apache_script="$PRODUCT_RC_D/$apache_service_name" fi $apache_script stop 2>/dev/null } # db_test test_query awk_script # Runs test_query and processes it with awk_script. If the output is # not empty, return 0, otherwise return 1. Hint: supply '1' for # awk_script to test just for the presence of any output. db_test() { local any_db= eval `sh_get_args '--any-db) any_db=yes;;'` local test_query="$1" local awk_script="$2" if [ -n "$any_db" ]; then local output="`mysql_raw_anydb -e \"$test_query\" 2>>\"$product_log\"`" else local output="`mysql_raw -e \"$test_query\" 2>>\"$product_log\"`" fi local status=$? if [ "$status" -ne 0 ]; then p_echo "$output" die "run the following SQL query: $1" fi echo -n "$output" | awk -F '\t' -- "$awk_script" | test `wc -l` -ne 0 } proftpd_super_server_config() { local action="$1" case "$superserver" in inetd) ftp_rec="ftp stream tcp nowait root $PROFTPD_ROOT/sbin/proftpd proftpd -c $PROFTPD_ETC_D/proftpd.conf" ;; xinetd) ftp_rec="service ftp { socket_type = stream protocol = tcp wait = no disable = no user = root instances = UNLIMITED server = $PROFTPD_ROOT/sbin/proftpd server_args = -c $PROFTPD_ETC_D/proftpd.conf }" ;; *) die "Super server name unknown" ;; esac super_server_action "$action" ftp "$ftp_rec" } # Usage: pleskrc <service> <action> pleskrc() { [ 2 -le $# ] || die "Not enough arguments" local service_name=$1 local action=$2 local ret=0 local inten shift shift # Now check redefined functions if test "$machine" = "linux" && is_function "${service_name}_${action}_${machine}_${linux_distr}"; then "${service_name}_${action}_${machine}_${linux_distr}" $@ return $? elif is_function "${service_name}_${action}_${machine}"; then "${service_name}_${action}_${machine}" $@ return $? elif is_function "${service_name}_${action}"; then "${service_name}_${action}" $@ return $? fi # Not redefined - call default action eval "service=\$${service_name}_service" [ -n "$service" ] || die "Empty service name for $service_name" inten="$action service $service" [ "$action" = "status" -o "$action" = "exists" ] || echo_try "$inten" if [ -x "/usr/sbin/invoke-rc.d" ]; then action_cmd="/usr/sbin/invoke-rc.d $service" elif [ -x "/sbin/service" ]; then action_cmd="/sbin/service $service" elif [ -x "$SYSTEM_RC_D/$service" ]; then action_cmd="$SYSTEM_RC_D/$service" elif [ ! -z ${PRODUCT_RC_D} -a -x "$PRODUCT_RC_D/$service" ]; then action_cmd="$PRODUCT_RC_D/$service" fi if [ "$action" = "exists" ]; then [ -n "$action_cmd" ] && return 0 || return 1 else [ -z "$action_cmd" ] && die "Unable to handle $service" fi case "$action" in start) pleskrc $service_name status || $action_cmd $action $@ ;; stop) if pleskrc $service_name status; then $action_cmd $action $@ else true fi ;; restart) if pleskrc $service_name status; then $action_cmd "restart" $@ else $action_cmd "start" $@ fi ;; reload) if pleskrc $service_name status; then $action_cmd "reload" $@ else true fi ;; status) $action_cmd "status" ;; *) $action_cmd $action $@ ;; esac ret="$?" if [ "$action" != "status" ]; then [ "$ret" -eq 0 ] && suc || warn $inten fi return $ret } is_function() { local type_output="`LANG=C LC_ALL=C LC_MESSAGES=C type \"$1\" 2>/dev/null | head -n 1`" case "$type_output" in *function) return 0 ;; *) return 1 ;; esac } p_echo() { echo "$*" >> "$product_log" 2>&1 echo "$*" } pnnl_echo() { echo -n "$*" >> "$product_log" 2>&1 echo -n "$*" } die() { PACKAGE_SCRIPT_FAILED="$*" if [ "X$trigger_uninstall" != "X1" ]; then printf "\a\a" p_echo p_echo "ERROR while trying to $*" echo "Check the error reason(see log file: ${product_log}), fix and try again" p_echo if [ "X$do_patch" != "X1" -a "X$do_reconfigure" != "X1" ]; then p_echo "Aborting..." p_echo fi fi smart_undo_install selinux_close exit 1 } warn() { local inten inten="$1" p_echo p_echo "WARNING!" pnnl_echo "During the $inten found some problems" echo "(see log file: ${product_log})" p_echo p_echo "Continue..." p_echo } echo_try() { msg="$*" pnnl_echo " Trying to $msg... " } suc() { p_echo "done" } mk_backup() { target="$1" dup="$2" opts="$3" if [ -L "$target" ]; then rm "$target" elif [ -$opts "$target" ]; then if [ ! -$opts "$target.$product_suffo" ]; then case "$dup" in mv) mv -f $target $target.$product_suffo || die "mv -f $target $target.$product_suff" ;; cp) cp -fp $target $target.$product_suffo || die "cp -fp $target $target.$product_suff" ;; *) p_echo " mk_backup: wrong option -- must be 'cp' or 'mv'" die "mk_backup" ;; esac else case "$dup" in mv) mv -f $target $target.$product_suff || die "mv -f $target $target.$product_suff" ;; cp) cp -fp $target $target.$product_suff || die "cp -fp $target $target.$product_suff" ;; *) p_echo " mk_backup: wrong option -- must be 'cp' or 'mv'" die "mk_backup" ;; esac fi else case "$opts" in f|d) ;; *) p_echo " mk_backup: wrong option -- must be 'f' or 'd'" die "mk_backup" ;; esac fi } detect_vz() { local vzcheck_file PLESK_VZ=0 vzcheck_file="/proc/self/status" if [ ! -f ${vzcheck_file} ]; then return 1; fi grep -q -E '^envID\:[[:space:]]*([[:digit:]]+)$' < ${vzcheck_file} >/dev/null 2>&1 if [ $? -eq 0 ]; then PLESK_VZ=1 return 0; fi return 1; } call_optional_function() { export LANG=C LC_MESSAGES=C LC_ALL=C local type_output="`type \"$1\" 2>/dev/null | head -n 1`" case "$type_output" in *function) "$@" ;; *) return 0 ;; esac } sh_get_args() { echo 'while true; do case "$1" in '"$1"'*) break;; esac; shift; done' } sequence() { if type seq; then seq $* elif type jot; then jot $* else die "Unable to find seq or jot command" fi } superserver_reconfig() { pleskrc superserver reload } configure_xinetd_compat() { local inten="configure xinetd compatibility mode with $superserver" if [ "$linux_distr" = "debian" -o "$linux_distr" = "ubuntu" ]; then [ "$superserver_service" = "xinetd" ] || return 1 [ -f "/etc/default/xinetd" ] || return 1 grep -q 'XINETD_OPTS=.*-inetd_compat' /etc/default/xinetd && return 1 echo_try $inten if ! grep -q '^\s*XINETD_OPTS' /etc/default/xinetd; then echo 'XINETD_OPTS="-inetd_compat"' >>/etc/default/xinetd suc return 0 fi eval `grep '^\s*XINETD_OPTS' /etc/default/xinetd` XINETD_OPTS="$XINETD_OPTS -inetd_compat" local tmp_file=`mktemp /tmp/xinetdXXXXXX` sed -e "s/XINETD_OPTS.*/XINETD_OPTS=\"$XINETD_OPTS\"/g" /etc/default/xinetd > $tmp_file && mv -f $tmp_file /etc/default/xinetd suc return 0 fi return 1 } super_server_action() { local in out local action="$1" local service="$2" local template="$3" inten="$action $service service record for $superserver_service daemon" case "$action" in remove) ;; register) [ -z "$template" ] && die "Template for super server $action was not defined" ;; comment|disable) ;; configure) case "$superserver_mode" in native) register_service $superserver_service defaults defaults ;; compat) configure_xinetd_compat && pleskrc superserver restart ;; *) die "Mode for $superserver_service was not defined" ;; esac return 0 ;; *) die "Some arguments was not defined or defined incorrect for action with super server" ;; esac case "$superserver" in inetd) super_server_modify_inetd "$service" "$action" "$template" ;; xinetd) super_server_modify_xinetd "$service" "$action" "$template" ;; *) die "Unable to define super server type" ;; esac if [ $? -ne 0 ]; then die $inten fi } super_server_modify_inetd() { local service="$1" local action="$2" local template="$3" case "$action" in comment|disable) grep -q "^$service[[:space:]]" $superserver_conf || return 0 sed -e "s|^$service|#$service|g" < "$superserver_conf" > "$superserver_conf.tmp" \ && mv -f "$superserver_conf.tmp" "$superserver_conf" \ || return 1 ;; remove) if [ -x /usr/sbin/update-inetd ]; then /usr/sbin/update-inetd --enable "$service" /usr/sbin/update-inetd --remove "$service" else grep -q "^$service[[:space:]]" $superserver_conf || return 0 sed -e "s|^$service[[:space:]].*||g" < "$superserver_conf" > "$superserver_conf.tmp" \ && mv -f "$superserver_conf.tmp" "$superserver_conf" \ || return 1 fi ;; register) if [ -x /usr/sbin/update-inetd ]; then /usr/sbin/update-inetd --enable "$service" /usr/sbin/update-inetd --remove "$service" /usr/sbin/update-inetd --add "$template" else egrep -q "$template" $superserver_conf if [ "$?" -ne "0" ]; then super_server_modify_inetd comment $service && \ echo "$template" >> $superserver_conf || return 1 fi fi ;; esac return 0 } super_server_modify_xinetd() { local file local service="$1" local action="$2" local template="$3" for file in $superserver_dir/*; do grep -q "$service" $file 1>$product_log 2>&1 || continue case "$action" in remove) awk "/^[[:space:]]*(#|[[:space:]])*service[[:space:]]+$service($|[[:space:]]+)/,/.*}.*/ \ {next;} {print} " <$file >$file.tmp \ && mv -f $file.tmp $file || return 1 ;; comment) awk "/^[[:space:]]*service[[:space:]]+$service($|[[:space:]]+)/,/.*}.*/ \ { print \"#\"\$0; next; } {print} " < $file > $file.tmp \ && mv -f $file.tmp $file || return 1 ;; esac done case "$action" in register) echo "$template" > "$superserver_dir/${service}_psa" || return 1 ;; disable) [ -f "$superserver_dir/${service}_psa" ] && mv -f "$superserver_dir/${service}_psa" "$superserver_dir/${service}.psa" ;; esac return 0 } true superserver_status_linux_debian superserver_status_linux_debian() { get_pid "$superserver_binary" false local pid=$common_var if test "$pid" -ne 1; then # running return 0 fi return 1 } package_script_begin_pkg() { package_script_begin } package_script_end_pkg() { package_script_end } package_script_begin() { local title if [ "X$process" = "X" ]; then if [ "X$do_reconfigure" = "X1" ]; then process="reconfiguration" elif [ "X$do_upgrade" = "X1" ]; then process="upgrade" else process="installing" fi fi product_log="/tmp/${PACKAGE_NAME}_${PACKAGE_VERSION}_${PACKAGE_RELEASE}_${process}.`date +%y%m%d.%H.%M`.log" product_problems_log="/tmp/${PACKAGE_NAME}_${PACKAGE_VERSION}_${PACKAGE_RELEASE}_problems.`date +%y%m%d.%H.%M`.log" title="`package_script_log_title`" echo "START $title" >>"$product_log" \ && echo "START $title" >>"$product_problems_log" \ && chmod 600 "$product_log" "$product_problems_log" \ || { echo "Cannot write installation log $product_log, $product_problems_log" >&2 exit 1 } problems_occured=0 product_default_conf initial_conf set_common_params read_conf } package_script_end() { local title title="`package_script_log_title`" packagemng_set_dirty_flag echo "STOP $title" >>"$product_log" echo "STOP $title" >>"$product_problems_log" } package_script_log_title() { local stage case "$do_upgrade" in 0) stage="installing";; 1) stage="upgrading";; *) stage="installing";; esac if [ -n "$PACKAGE_DEB_ACTION" ]; then stage="$stage (deb action: $PACKAGE_DEB_ACTION)" fi echo "$PACKAGE_NAME-$PACKAGE_VERSION-$PACKAGE_RELEASE $stage AT `date`" } # <fun> <function name(s)> NAME VERSION RELEASE [DEB_ACTION] package_script_call_main_function() { package_script_call_main_function_begin "$@" for package_func in $1; do if ! call_optional_function "$package_func"; then break fi done package_script_end_handler ok } package_script_call_main_function_begin() { PACKAGE_NAME="$2" PACKAGE_VERSION="$3" PACKAGE_RELEASE="$4" PACKAGE_DEB_ACTION="$5" package_script_begin_this_system trap "package_script_end_handler error" HUP PIPE INT QUIT TERM EXIT } package_script_end_handler() { case "$1" in error) if [ -z "$PACKAGE_SCRIPT_FAILED" ]; then PACKAGE_SCRIPT_FAILED="Package script failed" fi ;; ok) PACKAGE_SCRIPT_FAILED= ;; esac trap - EXIT package_script_end_this_system } package_script_begin_this_system() { package_script_begin_pkg } package_script_end_this_system() { package_script_end_pkg } get_pid() { local i local ex_f="$1" local opt="$2" local owner="$3" local min_num="1" # Use pidof by default, bug 121868 if type pidof >/dev/null 2>&1; then for pid in `pidof -o $$ -o $PPID -o %PPID -x $ex_f`; do # Check for owner [ "$opt" = "true" -a "$owner" != "`ps -p $pid -o ruser=`" ] && continue min_num=$pid break done common_var=$min_num return $min_num fi case "$opt" in false) for i in `$ps_long | grep $ex_f | grep -v grep | grep -v httpsdctl | grep -v apachectl | awk '{print $2}' -`; do min_num=$i break done ;; true) for i in `$ps_long | grep $ex_f | grep -v grep | grep -v httpsdctl | grep -v apachectl | grep "$owner" | awk '{print $2}' -`; do min_num=$i break done ;; *) p_echo "get_pid: wrong parameter" die "get_pid $ex_f $opt $owner" ;; esac common_var=$min_num return $min_num } kill_pids() { ex_f="$1" owner="$2" for i in `$ps_long | grep $ex_f | grep -v grep | grep -v httpsdctl | grep -v apachectl | grep $owner | awk '{print $2}' -`; do if [ $i -gt 1 ]; then $K_TERM $i >> $product_log 2>&1 fi done } delete_user() { local rm_user rm_user="$1" # if it is mailman user, remove its crontab from system if [ "X${rm_user}" = "X${mailman_user}" ]; then inten="remove crontab of ${rm_user}" echo "y" | $crontab -u "${mailman_user}" -r >> $product_log 2>&1 || die "$inten" fi inten="remove user $rm_user" echo_try "$inten" case "$machine" in BSD) echo "y" | pw userdel $rm_user>> $product_log 2>&1 && suc pwd_mkdb /etc/master.passwd >> $product_log 2>&1 ;; linux|solaris) userdel $rm_user>> $product_log 2>&1 && suc || die "$inten" ;; Darwin) niutil -destroy / /users/"$rm_user" >> $product_log 2>&1 && suc || die "$inten" reload_darwin_netinfo ;; esac } delete_group() { local rm_group rm_group="$1" inten="remove group $rm_group" echo_try "$inten" case "$machine" in BSD) pw groupdel $rm_group>> $product_log 2>&1 pwd_mkdb /etc/master.passwd >> $product_log 2>&1 ;; linux|solaris) mk_backup "/etc/group" cp f if [ -f "/etc/group" ]; then sed -e "/$rm_group/d" < /etc/group > /etc/group.tmp || die $inten mv -f /etc/group.tmp /etc/group >> $product_log 2>&1 if [ "$?" -ne 0 ]; then rsr_backup "/etc/group" cp f die $inten fi fi ;; Darwin) niutil -destroy / /groups/"$rm_group" >> $product_log 2>&1 && suc || die "$inten" reload_darwin_netinfo ;; esac suc } reload_darwin_netinfo() { if [ -f /var/run/memberd.pid ]; then kill -HUP `cat /var/run/memberd.pid` else SystemStarter start memberd fi return 0 } initial_conf() { DEMO_VERSION="no" PRODNAME="psa" PRODUCT_NAME="Plesk" product_full="Plesk" product=${PRODNAME} PRODUCT_FULL_NAME="Plesk" product_etc="/etc/${PRODNAME}" prod_conf_t="/etc/psa/psa.conf" prodkey="$product_etc/$PRODNAME.key" minimal_changes="0" MYSQL_VERS="4.1.18" POSTGRESQL_VERS="7.4.11" EXTERNAL_PACKAGES=" localedata" EXTERNAL_PACKAGES_DIR=""tmp/packages"" BUILDER_UID="10007" PERL5LIB="/usr/local/psa/lib/perl5/site_perl/5.8.8:/usr/local/psa/lib/perl5/site_perl/5.8.8/mach" export PERL5LIB support_contact="http://www.parallels.com/support" sales_email="sales@parallels.com" product_version="8.6.0" product_db_version="0860" product_build="86080722.02" conceived_os_vendor=FreeBSD conceived_os_version="6.1" osrels="fr6.1" # This variable contains all versions, which is supported by # cumulative upgrade known_product_versions="71 75 80 81 82 83 84" prev_product="plesk" prev_clients_group="${prev_product}cln" clients_group="${product}cln" clients_GID=10001 services_group="${product}serv" services_GID=10003 product_suff="saved_by_${product}".`date "+%m.%d;%H:%M"` product_suffo="saved_by_${product}" PREV_PRODUCT_ROOT_D="/usr/local/${prev_product}" # plesk default password if [ "X$DEMO_VERSION" = "Xyes" ]; then PRODUCT_DEFAULT_PASSWORD="plesk" else PRODUCT_DEFAULT_PASSWORD="setup" fi } read_conf() { if [ -s $prod_conf_t ]; then tmp_var=`perl -e 'undef $/; $_=<>; s/#.*$//gm; s/^\s*(\S+)\s*/$1=/mg; print' $prod_conf_t` eval $tmp_var else if [ "X$do_upgrade" = "X1" ]; then [ 0$ignore_miss_conf -ne 1 ] && p_echo "Unable to find product configuration file: $prod_conf_t" return 1 fi fi return 0 } get_my_cnf_param() { local my_cnf cnf_files cnf_files="/etc/my.cnf /etc/mysql/my.cnf /var/db/mysql/my.cnf" for my_cnf in ${cnf_files}; do if [ -f ${my_cnf} ]; then break fi done [ -f ${my_cnf} ] && r=`perl -e '$p="'"$1"'"; undef $/; $_=<>; s/#.*$//gm; /\[mysqld\](.*?)\[/sg; $_=substr($1, rindex $1,"$p") and /$p\s*=(.*)/m and print $1 ' ${my_cnf}` echo $r } get_mysql_socket() { mysql_socket="/tmp/mysql.sock" local mysqlsock=`get_my_cnf_param socket` local MYSQL_SOCKETS="/var/lib/mysql/mysql.sock /tmp/mysql.sock /var/run/mysqld/mysqld.sock" for i in $mysql_socket $mysqlsock $MYSQL_SOCKETS; do if [ -S "$i" ]; then MYSQL_UNIX_PORT=$i export MYSQL_UNIX_PORT mysql_socket="$i" break fi done } #default values product_default_conf() { PRODUCT_ROOT_D=/usr/local/psa PRODUCT_RC_D=/usr/local/etc/rc.d PRODUCT_ETC_D=/usr/local/etc/psa HTTPD_VHOSTS_D=/usr/local/www/vhosts HTTPD_CONF_D=dynamic HTTPD_INCLUDE_D=dynamic HTTPD_BIN_D=/usr/local/sbin HTTPD_LOG_D=/var/log HTTPD_SERVICE=dynamic QMAIL_ROOT_D=/usr/local/psa/qmail QMAIL_MAILNAMES_D=/usr/local/psa/qmail/mailnames RBLSMTPD=/usr/local/psa/qmail/bin/rblsmtpd COURIER_IMAP_ROOT_D=/usr/local/psa/courier-imap FTPD_CONF=/usr/local/psa/ftpd/etc/proftpd.conf FTPD_CONF_INC=/usr/local/psa/ftpd/etc/proftpd.include FTPD_BIN_D=/usr/local/psa/ftpd/bin FTPD_VAR_D=/usr/local/psa/ftpd/var FTPD_SCOREBOARD=/usr/local/psa/ftpd/var/scoreboard NAMED_RUN_ROOT_D=/var/named NAMED_OPTIONS_CONF=/etc/namedb/named.conf.include.plesk-options NAMED_ZONES_CONF=/etc/namedb/named.conf.include.plesk-zones WEB_STAT=/usr/local/psa/webalizer/bin/webalizer LOGROTATE=/usr/local/psa/logrotate/sbin/logrotate MYSQL_VAR_D=/var/db/mysql MYSQL_BIN_D=/usr/local/bin PGSQL_DATA_D=/usr/local/pgsql/data PGSQL_BIN_D=/usr/local/bin DUMP_D=/usr/local/psa/var/dumps MAILMAN_ROOT_D=/usr/local/psa/mailman MAILMAN_VAR_D=/usr/local/psa/mailman PYTHON_BIN=/usr/local/bin/python2.5 CATALINA_HOME=/usr/local/tomcat5.5 DRWEB_ROOT_D=/usr/local/drweb DRWEB_ETC_D=/usr/local/etc/drweb GPG_BIN=/usr/local/psa/bin/gpg TAR_BIN=/usr/bin/tar CURL_CA_BUNDLE_FILE=/usr/share/curl/curl-ca-bundle.crt AWSTATS_ETC_D=/usr/local/etc/awstats AWSTATS_BIN_D=/usr/local/psa/awstats/wwwroot/cgi-bin AWSTATS_TOOLS_D=/usr/local/psa/awstats/tools AWSTATS_DOC_D=/usr/local/psa/awstats/wwwroot OPENSSL_BIN=/usr/bin/openssl LIB_SSL_PATH=/lib/libssl.so LIB_CRYPTO_PATH=/lib/libcrypto.so CLIENT_PHP_BIN=/usr/local/psa/bin/php-cli } #Need for register/unregister services into /etc/rc.conf for BSD OSes. #Create or change strings such as service_option_variable="variable" rc_service() { local service="$1" local option="$2" local variable="$3" local comment="$4" local config="/etc/rc.conf" if [ "X$variable" = "Xdefault" ]; then remove_option_string "${service}_${option}" "$config" return 0 fi if [ ! -f /etc/rc.conf ]; then die 'File /etc/rc.conf not found!' fi if [ "X$service" = "X" -o "X$option" = "X" -o "X$variable" = "X" ]; then die fi local flag="`grep "${service}_${option}" $config`" if [ "X$flag" = "X" ]; then if [ "X$comment" = "Xyes" ]; then echo "#Option for $service created by Plesk installer." >> $config fi echo "${service}_${option}=\"${variable}\"" >> $config || die else sed -i "" -e 's|\('"${service}_${option}"'.*=\"\).*|\1'"${variable}"'\"|' $config || die fi return 0 } register_service() { register_service_freebsd "$@" } register_service_freebsd() { rc_service "$1" "enable" "YES" "yes" } remove_option_string() { #using: remove_option_string <option> <file> substring="$1" file="$2" awk '{ if ($0 ~ "^'"$substring"'") { next; }; print $0; }' < $file > $file.tmp mv $file.tmp $file } selinux_close() { if [ -z "$SELINUX_ENFORCE" -o "$SELINUX_ENFORCE" = "Disabled" ]; then return fi setenforce "$SELINUX_ENFORCE" } #set_params set_common_params() { common_var=0 PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin LANG=C export PATH LANG umask 022 ulimit -n 65535 2>/dev/null K_HUP="/bin/kill -HUP" K_KILL="/bin/kill -KILL" K_TERM="/bin/kill -TERM" K_USR2="/bin/kill -USR2" users_created="" groups_created="" certificate_file="$PRODUCT_ETC_D/httpsd.pem" services="/etc/services" mtab="/etc/mtab" [ -f "/etc/rsyslog.conf" ] && syslog_conf="/etc/rsyslog.conf" || syslog_conf="/etc/syslog.conf" syslog_conf_ng="/etc/syslog-ng/syslog-ng.conf" get_hostname="hostname" get_domainname="domainname" #VZP used to determine that we're inside SVE vza_file="/var/vzagent" #default parameters tar="tar" crontab="/usr/bin/crontab" cp_preserve="cp -p" SYSTEM_RC_D=/etc/rc.d set_common_params_freebsd detect_vz } set_common_params_freebsd() { machine="BSD" fstab="/etc/fstab" sendmail="/usr/sbin/sendmail" mail_local="/usr/libexec/mail.local" ps="ps axw" ps_long="ps axfwu" dummy_shell="/sbin/nologin" dummy_home="/" false_shell="/usr/bin/false" bash_shell="/usr/local/bin/bash" rbash_shell="/usr/local/bin/rbash" compress="gzip -9 -c" uncompress="gunzip -c" uudecode="uudecode -p" uudecode_full="/usr/bin/uudecode" ifconfig="/sbin/ifconfig -a" inet_str="inet" os_version=`uname -v | sed -e 's/^.*FreeBSD[ \t][ \t]*\([0-9\.][0-9\.]*\)-.*$/\1/'` tar="gtar" named_osrelease=040100 # "must be >= 020218 for named -u <named> " return 0 } packagemng_set_dirty_flag() { if [ -f ${PRODUCT_ROOT_D}/admin/bin/packagemng ]; then ${PRODUCT_ROOT_D}/admin/bin/packagemng --set-dirty-flag 1>>$product_log 2>&1 fi } remove_modules() { p_echo p_echo "===> Removing modules" local moduledir for moduledir in $PRODUCT_ROOT_D/var/modules/*; do if [ -d "$moduledir" -a -x "$moduledir/uninstall" ]; then local module=`basename $moduledist` echo_try "uninstall $module module" "$moduledir/uninstall" && suc || warn "uninstallation of $module module" fi done } # mysql set_mysqld_params() { mysql_user="mysql" mysql_UID=3306 mysql_group="mysql" mysql_GID=3306 product_db_sql="$PRODUCT_ETC_D/db/${PRODNAME}_db.sql" set_mysql_server_params set_mysql_client_params } ## @@constructor set_mysqld_params set_mysql_server_params() { local service MYSQL_ROOT="$PRODUCT_ROOT_D/mysql" mysql_bindir="$MYSQL_BIN_D" get_mysql_socket if [ -x "${PRODUCT_RC_D}/mysql-server" ]; then mysql_service="mysql-server" elif [ -x "${PRODUCT_RC_D}/mysql-server.sh" ]; then mysql_service="mysql-server.sh" elif [ -x "${PRODUCT_RC_D}/mysqld" ]; then mysql_service="mysqld" elif [ -x "${PRODUCT_RC_D}/mysql" ]; then mysql_service="mysql" elif [ "X$DEMO_VERSION" = "Xyes" ]; then mysql_service="mysqld" else die "$inten" fi } true mysql_start mysql_stop mysql_status set_mysql_client_params() { mysql_client="$MYSQL_BIN_D/mysql" # Override these variables as needed mysql_db_name="$PRODNAME" mysql_passwd_file="$product_etc/.${PRODNAME}.shadow" prev_mysql_passwd_file="$PREV_PRODUCT_ROOT_D/admin/conf/admin.conf" if [ -z "$mysql_unconfigured" ];then # Need for mysql_status related function set_mysql_server_params set_mysql_auth fi mysql_args="-N" mysql_args_raw="-Br" # For backward compatibility only, should use mysql() and mysql_raw() instead mysql=mysql mysql_raw=mysql_raw } # iF YOUR package want to use mysql db you must call this function directly set_mysql_auth() { local inten="set up mysql authentification" get_admin_passwd pleskrc mysql start 1 mysql_user="--user=admin" mysql_passwd="--password=$admin_passwd" unset mysql_defaults mysql_test_connection || die "$inten" suc } get_admin_passwd() { [ -z "$admin_passwd" ] || return 0 if [ -f "$mysql_passwd_file" ]; then admin_passwd=`cat "$mysql_passwd_file"` return 0 fi admin_passwd="$PRODUCT_DEFAULT_PASSWORD" } #Invoke mysql mysql() { mysql_anydb -D$mysql_db_name "$@" } mysql_anydb() { if test -z "$DB_IS_MYSQL41_COMPATIBLE"; then mysql41_init fi if [ "$DB_IS_MYSQL41_COMPATIBLE" != "compatible" -a "X$machine" != "XBSD" ]; then mysql41_exec_wrapper $mysql_client $mysql_user $mysql_passwd $mysql_args "$@" 2>>"$product_log" else $mysql_client $mysql_user $mysql_passwd $mysql_args "$@" 2>>"$product_log" fi local status=$? if [ $status -gt 0 ]; then $mysql_client $mysql_user $mysql_passwd $mysql_args -D$mysql_db_name $mysql_args_raw -e "show innodb status" >>"$product_log" 2>&1 fi return $status } # the function removes the "character set xxx" and "collate xxx" construction # from -e * arguments, if there are any. # otherwise, it removes the same things from standard input mysql41_exec_wrapper() { perl -e '$has_command = 0; $program = $ARGV[0]; splice (@ARGV, 0, 1); sub remove_charsets($) { $refStr = shift; $$refStr =~ s/\b(medium|long|tiny)?text\s+character\s+set\s+binary(\s+collate\s+[\w]+)?\b/ $1blob /ig; $$refStr =~ s/\b(medium|long|tiny)?text\s+character\s+set\s+[\w]+\s+collate\s+[\w]+_bin\b/ $1blob /ig; $$refStr =~ s/(\bcharacter\s+set\s+binary(\s+collate\s+[\w]+)?\b)/ binary /ig; $$refStr =~ s/(\bcharacter\s+set\s+[\w]+\s+collate\s+[\w]+_bin\b)/ binary /ig; $$refStr =~ s/(\b(character\s+set|collate)\s+[\w]+\b)//ig; } foreach $n (0 .. $#ARGV) { if ($ARGV[$n] eq "-e") { $has_command = 1; remove_charsets \($ARGV[$n + 1]); } } if ($has_command) { exec $program, @ARGV or die "Cannot execute mysql"; } else { open out_command, "|-", $program, @ARGV or die "Cannot start mysql"; while (<STDIN>) { remove_charsets \($_); print out_command $_; } close out_command or die($! ? "Mysql returned an error: $!" : "Mysql exited with non-zero status $?"); }' -- "$@" } # Invoke mysql without any wrapper or something else mysql_direct() { $mysql_client $mysql_defaults $mysql_user $mysql_passwd $mysql_args "$@" 2>>"$product_log" } # Invoke mysql in raw mode mysql_raw() { mysql $mysql_args_raw "$@" } mysql_raw_anydb() { mysql_anydb $mysql_args_raw "$@" } mysql_start() { mysql_start_freebsd if [ -z "$1" ]; then mysql_test_connection 5 || die "Unable to perform test connection to mysql" fi } mysql_start_freebsd() { local inten service count inten="start MySQL server" echo_try $inten mysql_status && return 0 \ || $PRODUCT_RC_D/$mysql_service start >> $product_log 2>&1 echo -n "Waiting for start mysql daemon.. " count=60 while [ 0$count -gt 0 ]; do mysql_status && return 0 sleep 1 count=`expr $count - 1` done die $inten } mysql_test_connection() { inten="establish test connection" echo_try $inten attempts=${1:-1} for i in `sequence $attempts`; do echo "" | mysql_direct mysql >> "$product_log" 2>&1 if [ "$?" -eq "0" ]; then p_echo "connected" return 0 fi [ "$attempts" -eq "1" ] || sleep 1 done return 1 } mysql41_init() { # not_installed is the default state # we must init it to avoid endless cycle DB_IS_MYSQL41_COMPATIBLE=not_installed if ! mysql_anydb </dev/null >>"$product_log" 2>&1; then return fi if db_test --any-db "SHOW VARIABLES LIKE 'version'" '$2 !~ /^(3|4\.0)\./'; then # if database is not yet initiailized, assume it compatible # otherwise, check the flag if db_test --any-db "SHOW DATABASES" '/^psa$/' \ && db_test "SHOW TABLES" '/^misc$/' \ && ! db_test "SELECT val FROM misc WHERE param = 'mysql41_compatible'" '/true/' then DB_IS_MYSQL41_COMPATIBLE='not_compatible' else DB_IS_MYSQL41_COMPATIBLE='compatible' fi fi } ### FIXME: probably need var service_restart warn mysql_stop() { local op_result i inten="stop MySQL server" echo_try $inten $PRODUCT_RC_D/$mysql_service stop >> $product_log 2>&1 op_result=$? if [ "X$linux_distr" = "Xdebian" ]; then # Debian has well designed mysql stopping code [ "$op_result" -eq 0 ] || die $inten suc return 0 fi for i in 2 4 6 8 16; do if ! mysql_status ; then suc return 0 fi case $machine in BSD*|Darwin*) #In BSD systems mysqld must to be killed without -9 flag killall mysqld mysqld_safe >> $product_log 2>&1 ;; *) # I just want to be sure that mysql really stopped killall -9 mysqld mysql safe_mysqld mysqld_safe >> $product_log 2>&1 ;; esac sleep $i done die "$inten" } mysql_status() { local file #Check with native script first #debian script always return 0. bug #111825 [ "X$linux_distr" = "Xdebian" ] && msqld_status_supported="no" if [ -z "$msqld_status_supported" ]; then # MySQL AB packages doesn't know about status command if LC_MESSAGES=C $PRODUCT_RC_D/$mysql_service 2>&1 | grep -q "status"; then msqld_status_supported="yes" else msqld_status_supported="no" fi fi #bug #139564. Possible mistery.. if [ "X$machine" = "XBSD" ]; then file="/usr/local/libexec/mysqld" else if [ "$msqld_status_supported" = "yes" ]; then # Common RPM mysql's $PRODUCT_RC_D/$mysql_service status >> $product_log 2>&1 \ && return 0 else # MySQL AB packages file="/usr/sbin/mysqld" fi fi if [ -x "$file" ]; then #standard build and debian get_pid "$file" false pid=$common_var if test "$pid" -ne 1; then echo "$file (pid $pid) is running..." >>$product_log 2>&1 return 0 else echo "$file is stopped" >>$product_log 2>&1 return 1 fi fi return 1 } true named_status_linux_debian named_status_linux_debian() { get_pid "/usr/sbin/named" false local pid=$common_var if test "$pid" -ne 1; then # running return 0 fi return 1 } poppassd_super_server_config() { local action="$1" case "$superserver" in inetd) case "$machine" in BSD*) poppassd_rec="poppassd stream tcp nowait/1000 root /usr/libexec/tcpd $PRODUCT_ROOT_D/admin/bin/poppassd" ;; *) poppassd_rec="poppassd stream tcp nowait/1000 root /usr/sbin/tcpd $PRODUCT_ROOT_D/admin/bin/poppassd" ;; esac ;; xinetd) poppassd_rec="service poppassd { socket_type = stream protocol = tcp port = 106 wait = no disable = no user = root instances = 1000 flags = KEEPALIVE server = $PRODUCT_ROOT_D/admin/bin/poppassd }" ;; *) die "Super server name unknown" ;; esac super_server_action "$action" poppassd "$poppassd_rec" } true syslog_status_linux_debian syslog_status_linux_debian() { get_pid "$syslog_binary" false local pid=$common_var if test "$pid" -ne 1; then # running return 0 fi return 1 } ## @@constructor set_syslog_params qmail_super_server_config() { local action="$1" local service="$2" case "$superserver" in inetd) qmail_inetd_templates ;; xinetd) qmail_xinetd_templates ;; *) die "Super server name unknown" ;; esac eval "template=\$${service}_rec" super_server_action "$action" "$service" "$template" } qmail_inetd_templates() { maxconn='' if [ "$linux_distr" = "debian" ]; then maxconn='.1000' fi smtp_rec="smtp stream tcp nowait$maxconn root $QMAIL_DIR/bin/tcp-env tcp-env /usr/bin/env SMTPAUTH=1 END=1 $QMAIL_DIR/bin/relaylock $QMAIL_DIR/bin/qmail-smtpd $QMAIL_DIR/bin/smtp_auth $QMAIL_DIR/bin/true $QMAIL_DIR/bin/cmd5checkpw $QMAIL_DIR/bin/true" smtps_rec="smtps stream tcp nowait$maxconn root $QMAIL_DIR/bin/tcp-env tcp-env /usr/bin/env SMTPAUTH=1 END=1 $QMAIL_DIR/bin/relaylock $QMAIL_DIR/bin/qmail-smtpd $QMAIL_DIR/bin/smtp_auth $QMAIL_DIR/bin/true $QMAIL_DIR/bin/cmd5checkpw $QMAIL_DIR/bin/true" submission_rec="submission stream tcp nowait$maxconn qmaild $QMAIL_DIR/bin/tcp-env tcp-env /usr/bin/env SUBMISSION=1 SMTPAUTH=1 END=1 $QMAIL_DIR/bin/qmail-smtpd $QMAIL_DIR/bin/smtp_auth $QMAIL_DIR/bin/true $QMAIL_DIR/bin/cmd5checkpw $QMAIL_DIR/bin/true" } qmail_xinetd_templates() { local TRUE_BIN TRUE_BIN=$QMAIL_DIR/bin/true smtp_rec="service smtp { socket_type = stream protocol = tcp wait = no disable = no user = root instances = UNLIMITED env = SMTPAUTH=1 server = $QMAIL_DIR/bin/tcp-env server_args = -Rt0 $QMAIL_DIR/bin/relaylock $QMAIL_DIR/bin/qmail-smtpd $QMAIL_DIR/bin/smtp_auth $TRUE_BIN $QMAIL_DIR/bin/cmd5checkpw $TRUE_BIN }" smtps_rec="service smtps { socket_type = stream protocol = tcp wait = no disable = no user = root instances = UNLIMITED env = SMTPAUTH=1 server = $QMAIL_DIR/bin/tcp-env server_args = -Rt0 $QMAIL_DIR/bin/relaylock $QMAIL_DIR/bin/qmail-smtpd $QMAIL_DIR/bin/smtp_auth $TRUE_BIN $QMAIL_DIR/bin/cmd5checkpw $TRUE_BIN }" submission_rec="service submission { socket_type = stream protocol = tcp wait = no disable = no user = qmaild instances = UNLIMITED env = SUBMISSION=1 SMTPAUTH=1 server = $QMAIL_DIR/bin/tcp-env server_args = -Rt0 $QMAIL_DIR/bin/qmail-smtpd $QMAIL_DIR/bin/smtp_auth $TRUE_BIN $QMAIL_DIR/bin/cmd5checkpw $TRUE_BIN }" } rsr_backup() { target="$1" dup="$2" opts="$3" common_var=0 # if [ -$opts "$target" ]; then if [ -$opts "$target.$product_suff" ]; then case "$dup" in mv) mv -f $target.$product_suff $target>> $product_log 2>&1 common_var=1 return 1 ;; cp) cp -fp $target.$product_suff $target>> $product_log 2>&1 common_var=1 return 1 ;; *) p_echo " rsr_backup: wrong option -- must be 'cp' or 'mv'" ;; esac else if [ -$opts "$target.$product_suffo" ]; then case "$dup" in mv) mv -f $target.$product_suffo $target>> $product_log 2>&1 common_var=1 return 1 ;; cp) cp -fp $target.$product_suffo $target>> $product_log 2>&1 common_var=1 return 1 ;; *) p_echo " rsr_backup: wrong option -- must be 'cp' or 'mv'" ;; esac fi fi # else # case "$opts" in # f|d) # ;; # *) # p_echo " rsr_backup: wrong option -- must be 'f' or 'd'" # ;; # esac # fi } restore_named() { cd "$PRODUCT_ROOT_D" >> $product_log 2>&1 [ -f /etc/sysconfig/named ] && mv -f "/etc/sysconfig/named" "/etc/sysconfig/named.bak" rsr_backup "/etc/sysconfig/named" mv f [ -L $named_conf ] && rm -f "$named_conf" rsr_backup "$named_conf" mv f [ -L $rndc_conf ] && rm -f "$rndc_conf" rsr_backup "$rndc_conf" mv f case "$machine" in BSD*) rsr_backup /etc/named.boot mv f ;; linux) case "$linux_distr" in redhat) chkconfig --add named >> $product_log 2>&1 # std_named_sh="/etc/rc.d/init.d/named" # rsr_backup $std_named_sh mv f # if [ -f "$std_named_sh" ]; then # mv -f "$std_named_sh.${product}" "$std_named_sh" # fi ;; slackware) rsr_backup /etc/rc.d/rc.inet2 cp f ;; esac rsr_backup /etc/named.boot mv f ;; solaris) rsr_backup /etc/named.boot mv f ;; esac } restore_sendmail() { [ -L $sendmail ] && rm -f "$sendmail" [ -L /usr/lib/sendmail ] && rm -f "/usr/lib/sendmail" rsr_backup "$sendmail" mv f case "$machine" in BSDI) rsr_backup /etc/sendmail.cf mv f ;; *) ;; esac if [ -f "$mail_local" ]; then # case "$machine" in # BSD) # chflags schg "$mail_local" >> $product_log 2>&1 # ;; # *) # ;; # esac rsr_backup "$mail_local" mv f chmod 4555 "$mail_local" >> $product_log 2>&1 fi case "$machine" in linux ) case "$linux_distr" in redhat) chkconfig --add sendmail >> $product_log 2>&1 # rsr_backup "$sndml_ini" mv f ;; slackware) rsr_backup /etc/rc.d/rc.M mv f ;; esac ;; solaris) rsr_backup "$sndml_ini" mv f ;; *) ;; esac } delete_startup_scripts() { cd "$PRODUCT_ROOT_D" >> $product_log 2>&1 case "$machine" in BSD) rm -f /usr/local/etc/rc.d/${product}.sh >> $product_log 2>&1 # rsr_backup /etc/rc.conf cp f rc_service "sendmail" "enable" "YES" rc_service "named" "enable" "YES" rc_service "mysqld" "enable" "NO" ;; BSDI) if [ -f /etc/rc.local.${product} ]; then cp -p /etc/rc.local.${product} /etc/rc.local >> $product_log 2>&1 fi ;; linux) case "$linux_distr" in redhat) chkconfig --del ${product} rm -f /etc/rc.d/init.d/${product} >> $product_log 2>&1 # rm -f /etc/rc.d/rc0.d/K15${product} >> $product_log 2>&1 # rm -f /etc/rc.d/rc1.d/K15${product} >> $product_log 2>&1 # rm -f /etc/rc.d/rc2.d/K15${product} >> $product_log 2>&1 # rm -f /etc/rc.d/rc3.d/S77${product} >> $product_log 2>&1 # rm -f /etc/rc.d/rc4.d/S77${product} >> $product_log 2>&1 # rm -f /etc/rc.d/rc5.d/S77${product} >> $product_log 2>&1 # rm -f /etc/rc.d/rc6.d/K15${product} >> $product_log 2>&1 ;; slackware) if [ -f /etc/rc.d/rc.local.${product} ]; then cp -p /etc/rc.d/rc.local.${product} /etc/rc.d/rc.local >> $product_log 2>&1 fi ;; esac ;; solaris) rm -f /etc/init.d/${product} >> $product_log 2>&1 if [ -f /etc/rc0.d/K01${product} ]; then rm -f /etc/rc0.d/K01${product} >> $product_log 2>&1 fi if [ -f /etc/rc1.d/K01${product} ]; then rm -f /etc/rc1.d/K01${product} >> $product_log 2>&1 fi if [ -f /etc/rc2.d/S77${product} ]; then rm -f /etc/rc2.d/S77${product} >> $product_log 2>&1 fi ;; esac } delete_crontab() { $crontab -l 2>/dev/null > /tmp/crontab.${product} sed -e "s/^.*\/${product}\/admin\/sbin\/statistics.*//g" \ -e "s/^.*\/${product}\/bin\/mysqldump.*//g" \ -e "s/^.*\/usr\/sbin\/ntpdate.*//g" \ < /tmp/crontab.${product} > /tmp/crontab.${product}_tmp mv -f /tmp/crontab.${product}_tmp /tmp/crontab.${product} >> $product_log 2>&1 $crontab /tmp/crontab.${product} >> $product_log 2>&1 rm -f /tmp/crontab.${product} >> $product_log 2>&1 } remove_ftpuser() { user=$1 ftpusers_file="/etc/ftpusers" egrep "^$user" $ftpusers_file >> /dev/null 2>&1 case "$?" in 0) sed -e "/$user/d" < $ftpusers_file > $ftpusers_file.tmp mv -f $ftpusers_file.tmp $ftpusers_file ;; 1) ;; *) ;; esac } remove_product_users_groups() { # delete users of this(unsuccessful) installation for i in $users_created; do delete_user "$i" done # delete users with group=psacln (ftpusers and webusers) for i in `perl -e '$gid=getgrnam("'$clients_group'"); exit if (($gid eq "") || ($gid == 0)); while(($n,$u,$g) = (getpwent)[0,2,3]) {print "$n\n" if (($gid == $g) && ($u >= 500))}'` do delete_user "$i" remove_ftpuser "$i" done # delete users psaadm, psaftp # delete_user "$admin_user" >> "$product_log" 2>&1 # delete_user "$anonftp_user" >> "$product_log" 2>&1 # delete groups of this(unsuccessful) installation for i in $groups_created; do delete_group "$i" done # delete groups psaadm, psaftp, psacln delete_group "$admin_group" >> "$product_log" 2>&1 delete_group "$anonftp_group" >> "$product_log" 2>&1 delete_group "$clients_group" >> "$product_log" 2>&1 } undo_install() { p_echo if pleskrc mysql status; then p_echo "===>Removing installed $PRODUCT_NAME components ... " remove_modules pleskrc mysql stop mysql_pid_file=$mysql_bddir/*.pid if [ -f "$mysql_pid_file" ]; then rm -f "$mysql_pid_file" fi fi $START_SH stop >> "$product_log" 2>&1 proftpd_super_server_config remove super_server_action remove pop3 super_server_action remove pop-3 super_server_action remove imap4 super_server_action remove imap2 super_server_action remove imap qmail_super_server_config remove smtp qmail_super_server_config remove smtps qmail_super_server_config remove submission poppassd_super_server_config remove remove_product_users_groups if [ -f "/etc/ftpchroot" ]; then sed -e "s/^@$clients_group//g" < /etc/ftpchroot > /etc/ftpchroot.tmp mv -f /etc/ftpchroot.tmp /etc/ftpchroot >> $product_log 2>&1 fi if [ -f /etc/shells ]; then case "$machine" in BSD|BSDI) sed -e "s/[/]*sbin[/]*nologin//" < /etc/shells > /etc/shells.tmp ;; linux|solaris) sed -e "s/[/]*bin[/]*false//" < /etc/shells > /etc/shells.tmp ;; esac mv -f /etc/shells.tmp /etc/shells >> $product_log 2>&1 fi remove_tmp_state restore_named restore_sendmail delete_startup_scripts delete_crontab cd /usr/local >> $product_log 2>&1 suc } smart_undo_install() { [ "X$trigger_uninstall" = "X1" -o "X$do_patch" = "X1" -o "X$do_reconfigure" = "X1" ] && return [ "X$PLESK_INSTALLER_NOUNDO" != "X" ] && return # trigger_uninstall - trigger what smart_undo_install is already working now(recurrence) trigger_uninstall=1 if [ "X$can_uninstall" = "X1" ]; then if [ "X$do_upgrade" = "X1" ]; then undo_upgrade else if [ "X$machine" != "XBSD" ]; then undo_install fi fi fi # put suggestions for user what to do call_optional_function failure_note } undo_upgrade() { p_echo " The attempt to upgrade $prev_product_full" p_echo " from version $prev_version to $product_full $product_version has failed." if [ -f "$product_sav_tar" ]; then p_echo p_echo " Now restore contents of $PRODUCT_NAME from $product_sav_tar" p_echo get_pid $PRODUCT_ROOT_D/mysql/bin/safe_mysqld true root req_pid=$common_var if [ $req_pid -gt 1 ]; then $K_KILL $req_pid >> $product_log 2>&1 sleep 2 mysql_pid_file=$mysql_bddir/*.pid kill_pids $PRODUCT_ROOT_D/mysql/libexec/mysqld mysql sleep 2 if [ -f "$mysql_pid_file" ]; then rm -f $mysql_pid_file fi fi $START_SH stop >> $product_log 2>&1 sleep 2 rm -Rf $PRODUCT_ROOT_D qmail_super_server_config remove "smtp" qmail_super_server_config remove "smtps" proftpd_super_server_config remove poppassd_super_server_config remove cd / tar xvf $product_sav_tar > /dev/null 2>&1 case "$?" in 0) # rm -f $product_sav_tar ;; *) p_echo p_echo p_echo "ERROR: restoration of files from $product_sav_tar has failed." p_echo " Please restore them manually." p_echo p_echo "Exiting..." p_echo exit 0 ;; esac fi } detect_upgrade() { clean_install local ver_with_pkg="810" local version_file="$PRODUCT_ROOT_D/version" local PKGNAME='psa-postgresql-configurator' local isBasePackage="" local SkipDetect="" ## Stage 0. if [ ! -z $SkipDetect ]; then return 0 fi #version with epoch local portupgrade_version="`pkg_info -q -O ports-mgmt/portupgrade | awk -F '-' '{print $2}' | \ awk -F ',' '{print $2$1}' | sed -e 's|\([[:digit:]]*\)\.\([[:digit:]]\).*|\1\2|g'`" if [ 0222 -gt 0$portupgrade_version ]; then echo "" echo "Version portupgrade is incorrect. " echo "Make sure that version portupgrade is 2.2 or above." echo "Exiting..." exit 1 fi ## Upgrade detected in portupgrade ## if exists installed port it's already pkg -> pkg upgrade. if [ ! -z "$UPGRADE_PORT" ]; then upgrade_pkg ## Hack for resurect version file for base package. if `echo $UPGRADE_PORT | grep -q 'psa-8.1.0'`; then echo "8.1.0 `uname -s` `uname -r| awk -F '-' '{print $1}'` ${ver_with_pkg}000000.00" > $version_file fi return 0 fi ## Upgrade not detected in portupgrade ### Clean install if [ ! -d $PRODUCT_ROOT_D ]; then clean_install return 0 fi ### Base packages(no need mysql in depends). if [ "X$isBasePackage" = "Xyes" ]; then if [ ! -f $version_file ]; then clean_install return 0 fi install_ver="`cat $version_file | awk '{print $1}'| sed -e 's|\.||g'`" if [ 0$install_ver -lt $ver_with_pkg ]; then upgrade_std else upgrade_pkg fi return 0 fi ### All additional comonents consists depend to base package ### Therefore mysql already exists. #Need for BSD_4.x such as all startup scripts from ports #use include /etc/rc.subr instead /usr/local/etc/rc.subr #rc.subr is exists into BSD_5.x and above. if [ ! -f /etc/rc.subr -a -f /usr/local/etc/rc.subr ]; then cp -f /usr/local/etc/rc.subr /etc/rc.subr fi set_mysqld_params get_mysql_socket pleskrc mysql start 1 query="SELECT db_version from upgrade_history" versions="`echo "$query" | $mysql`" if [ "X$versions" = "X" ]; then clean_install return 0 else local doStdUpgrade=0 for ver in $versions; do if [ 0$ver_with_pkg -gt 0$ver ]; then doStdUpgrade=1 fi done if [ 0$doStdUpgrade -ne 0 ]; then upgrade_std else upgrade_pkg fi fi return 0 } clean_install() { do_upgrade=0 std_to_pkg=0 } upgrade_pkg() { do_upgrade=1 std_to_pkg=0 } upgrade_std() { do_upgrade=1 std_to_pkg=1 } type="$2" if [ "X${PLESK_INSTALLER_DEBUG}" = "X1" ]; then set -x fi package_script_begin detect_upgrade case "$type" in DEINSTALL) if [ "$do_upgrade" = "0" ]; then package_script_call_main_function postgresql_configurator_uninstall_pre postgresql-configurator 8.6.0 fr6.1.build86080722.02 else package_script_call_main_function postgresql_configurator_upgrade_old_pre postgresql-configurator 8.6.0 fr6.1.build86080722.02 fi ;; POST-DEINSTALL) if [ "$do_upgrade" = "0" ]; then package_script_call_main_function "postgresql_configurator_uninstall_post postgresql_configurator_uninstall_purge" postgresql-configurator 8.6.0 fr6.1.build86080722.02 else package_script_call_main_function postgresql_configurator_upgrade_old_post postgresql-configurator 8.6.0 fr6.1.build86080722.02 fi ;; *) exit 1 ;; esac exit 0