Понадобилось мне недавно установить Python3 определенной версии на сервера с ОС RHEL 7. И вот вроде задача простая, но были несколько условий, а именно:
- На контуре закрыт доступ в сеть Интернет
- В локальном репозитории нет нужной версии
И еще были требования к минимальным номерам версий, Python должен быть не ниже 3.10.10 и исходя из этого появлялась еще необходимость обновить OpenSSL до версии 1.1.1. После прочтения нескольких статей родилась эта короткая инструкция.
Заходим на сервер, копируем архивы с Python и OpenSSL в папку /tmp и погнали. Начнём с установки OpenSSL версии 1.1.1n.
sudo -s
yum install nano wget yum-utils gcc openssl-devel bzip2-devel libffi-devel perl -y
cp /tmp/openssl-1.1.1n.tar.gz /usr/src
cd /usr/src
tar -xzf openssl-1.1.1n.tar.gz
cd openssl-1.1.1n
./config
make -j $(nproc)
make install
mkdir lib
cp *.{so,so.1.1,a,pc} ./lib
rm -f /usr/src/openssl-1.1.1n.tar.gz
echo 'export LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib64' >> /etc/profile.d/openssl.sh
source /etc/profile.d/openssl.sh
openssl version
Если последняя команда выведет номер версии отличный от 1.1.1, то выполняем следующее:
mv /usr/bin/openssl /usr/bin/openssl.backup.1.0.2k-fips
ln -s /usr/local/bin/openssl /usr/bin/openssl
С OpenSSL разобрались, теперь приступаем к установке Python версии 3.10.10.
cd /tmp
tar -xzf Python-3.10.10.tgz
cd Python-3.10.10
./configure --prefix=/opt/python310 --with-system-ffi --with-computed-gotos --enable-loadable-sqlite-extensions --with-openssl=/usr/src/openssl-1.1.1n
make -j $(nproc)
make altinstall
rm -f /tmp/Python-3.10.11.tgz
ln -s /opt/python310/bin/python3.10 /usr/bin/python3.10
python3.10 -m pip install pyopenssl
python3.10 -c "import ssl; print(ssl.OPENSSL_VERSION)"
На этом всё.
Обсудить эту заметку можно в нашем Телеграм канале: https://t.me/devops_spb_ru (@devops_spb_ru)