193 lines
5.7 KiB
Bash
Executable File
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"
|