Files
server/opt/psa/admin/sbin/modules/panel-migrator/plesk-migrator-post-install-packages.sh
2026-01-07 20:52:11 +01:00

193 lines
5.7 KiB
Bash
Executable File

#!/bin/bash
### Copyright 1999-2025. Plesk International GmbH. All rights reserved.
set -e
ai_url="${REPOSITORY_URL:-https://autoinstall.plesk.com}"
gpg_key_url="$ai_url/plesk-2025-03-05.gpg"
python_package="plesk-py3"
modules=(
PyYAML==6.0 paramiko==3.4.0 dnspython==2.2.1 imapclient==3.0.1
)
modules_to_check=(
PyYAML paramiko dnspython imapclient
)
python_path="/opt/plesk/python/3/bin/pip"
export DEBIAN_FRONTEND=noninteractive
psa_version=()
IFS=" " read -r -a psa_version <<< "$(cat /usr/local/psa/version)"
if [ "$PLESK_DEBUG" != "1" ] ; then
yum_quiet="-q"
apt_quiet="-qq"
fi
remove_debian_migrator_repository()
{
rm -f /etc/apt/sources.list.d/plesk-migrator.list
}
remove_centos_migrator_repository()
{
rm -f /etc/yum.repos.d/plesk-migrator.repo
}
remove_debian()
{
remove_debian_migrator_repository
[ -n "$(command -v apt-get)" ] && apt-get remove -y $apt_quiet "$python_package"
}
remove_centos()
{
remove_centos_migrator_repository
[ -n "$(command -v yum)" ] && yum remove -y $yum_quiet "$python_package"
}
if [ "$1" = "remove" ] ; then
case "${psa_version[1]}${psa_version[2]}" in
Debian*|Ubuntu*) remove_debian ;;
CentOS*|RedHatel*) remove_centos ;;
*) not_supported "${psa_version[1]} ${psa_version[2]}" ;;
esac
exit 0
fi
not_supported()
{
echo "Sorry, your operating system $1 is not supported" >&2
exit 1
}
check_installed_debian()
{
if ! dpkg -s "$python_package" > /dev/null
then
echo "Package $python_package was not installed" >&2
exit 1
fi
}
check_installed_centos()
{
if ! rpm -q "$python_package" > /dev/null
then
echo "Package $python_package was not installed" >&2
exit 1
fi
}
install_python_modules_by_pip()
{
$python_path install "${modules[@]}" > /dev/null
}
check_installed_python_modules()
{
local has_missing_modules=0
for module in "${modules_to_check[@]}"; do
if ! $python_path show "$module" > /dev/null
then
echo "Python module $module was not installed" >&2
has_missing_modules=1
fi
done
exit $has_missing_modules
}
bootstrap_debian()
{
local plesk_can_manage_repos="$3"
[[ $plesk_can_manage_repos ]] && remove_debian_migrator_repository
local os_name="$1"
local os_version="$2"
local arch_spec=""
case "$(uname -m)" in
x86_64) arch_spec="[arch=amd64]" ;;
aarch64) arch_spec="[arch=arm64]" ;;
esac
local url_path="$4"
[[ -z "$5" ]] || echo 'APT::Get::AllowUnauthenticated "true";' > "/etc/apt/apt.conf.d/plesk-migrator"
echo "Bootstrapping dependencies for $os_name $os_version..."
if [[ $plesk_can_manage_repos ]]; then
plesk sbin repository --create --persistent --source "deb $arch_spec $ai_url/$url_path $os_version all" --gpg-key "$gpg_key_url"
plesk sbin package --install "$python_package"
plesk sbin repository --delete --persistent --source "deb $arch_spec $ai_url/$url_path $os_version all"
else
echo "deb $arch_spec $ai_url/$url_path $os_version all" > /etc/apt/sources.list.d/plesk-migrator.list
apt-get update $apt_quiet -o Dir::Etc::sourcelist="sources.list.d/plesk-migrator.list" \
-o Dir::Etc::sourceparts="-" \
-o APT::Get::List-Cleanup="0"
apt-get install -y $apt_quiet -o APT::Install-Suggests=false -o APT::Install-Recommends=false "$python_package"
fi
check_installed_debian
install_python_modules_by_pip
check_installed_python_modules
}
bootstrap_redhat()
{
local plesk_can_manage_repos="$3"
[[ $plesk_can_manage_repos ]] && remove_centos_migrator_repository
local os_name="$1"
local os_version="$2"
local os_arch
os_arch="$(uname -m)"
[[ "$(uname -m)" =~ .*64$ ]] || os_arch='i386'
local url_path="$4"
echo "Bootstrapping dependencies for centos $os_version $os_arch..."
if [[ $plesk_can_manage_repos ]]; then
plesk sbin repository --create --persistent \
--baseurl "$ai_url/$url_path/dist-rpm-$os_name-$os_version-$os_arch" \
--gpg-key "$gpg_key_url"
plesk sbin package --install "$python_package"
else
cat > /etc/yum.repos.d/plesk-migrator.repo <<EOF
[plesk-migrator]
name=Plesk packages for migrator
baseurl=$ai_url/$url_path/dist-rpm-$os_name-$os_version-$os_arch
enabled=1
gpgcheck=1
gpgkey=$gpg_key_url
EOF
yum install -y $yum_quiet "$python_package"
fi
check_installed_centos
install_python_modules_by_pip
check_installed_python_modules
}
pmm_repo="PMM_1.1.0"
plesk_version=()
IFS="." read -r -a plesk_version <<< "${psa_version[0]}"
[[ ${plesk_version[0]} -ge 17 ]] && plesk_can_manage_repos=true || plesk_can_manage_repos=false
case "${psa_version[1]}${psa_version[2]}" in
Debian10*) bootstrap_debian "debian" "buster" $plesk_can_manage_repos "$pmm_repo" ;;
Debian11*) bootstrap_debian "debian" "bullseye" $plesk_can_manage_repos "$pmm_repo" ;;
Debian12*) bootstrap_debian "debian" "bookworm" $plesk_can_manage_repos "$pmm_repo" ;;
Debian13*) bootstrap_debian "debian" "trixie" $plesk_can_manage_repos "$pmm_repo" ;;
Ubuntu18.04) bootstrap_debian "ubuntu" "bionic" $plesk_can_manage_repos "$pmm_repo" ;;
Ubuntu20.04) bootstrap_debian "ubuntu" "focal" $plesk_can_manage_repos "$pmm_repo" ;;
Ubuntu22.04) bootstrap_debian "ubuntu" "jammy" $plesk_can_manage_repos "$pmm_repo" ;;
Ubuntu24.04) bootstrap_debian "ubuntu" "noble" $plesk_can_manage_repos "$pmm_repo" ;;
CentOS7*|RedHatel7*) bootstrap_redhat "CentOS" "7" $plesk_can_manage_repos "$pmm_repo" ;;
RedHatel8*) bootstrap_redhat "RedHat" "el8" $plesk_can_manage_repos "$pmm_repo" ;;
RedHatel9*) bootstrap_redhat "RedHat" "el9" $plesk_can_manage_repos "$pmm_repo" ;;
RedHatel10*) bootstrap_redhat "RedHat" "el10" $plesk_can_manage_repos "$pmm_repo" ;;
*) not_supported "${psa_version[1]} ${psa_version[2]}" ;;
esac
echo "Done"