Установка Python 3.5 дело не сложное, да вот установится он на Ubuntu 12.04 скомпилированный на OpenSSL 1.0.1, а для поддержки современных протоколов TLS необходима версия не ниже 1.0.2+.
Проблема: При подключении из Python 3.5 используя TLS, получаем ошибку:
[code]SSLError: [SSL: TLSV1_UNRECOGNIZED_NAME] unknown error (_ssl.c:###)[/code]
Исходные данные:
- Ubuntu Server 12.04
- OpenSSL 1.0.1
Что получим:
- OpenSSL 1.0.2+
- Python 3.5.2 с поддержкой современных протоколов
- Nginx c полноценной поддержкой HTTP/2 (бонусом)
Одна из программ, которые нам понадобятся — checkinstall. Она предназначена для создания бинарного пакета из исходных файлов, что позволит устанавливать и удалять готовый пакет. Дополнительным преимуществом является возможность использования данного пакета на схожих машинах. Подробнее здесь.
Установим ее:
[code batch]
1 |
sudo apt-get install checkinstall |
[/code]
Актуальный OpenSSL возьмем из ppa-репозитория с Nginx. Устаналиваем необходимые пакеты для комфортного подключения репозитория, подключаем репозиторий и устанавливаем нужные пакеты openssl и libssl-dev.
[code batch]
1 2 3 4 |
sudo apt-get install software-properties-common python-software-properties sudo add-apt-repository ppa:ondrej/nginx sudo apt-get update sudo apt-get install openssl libssl-dev |
[/code]
Также можно и Nginx правильный установить с полноценной поддержкой HTTP/2, о чем подробнее здесь.
Проверим версию OpenSSL командой [code batch]openssl version[/code]. Если видим версию выше 1.0.2, тогда успех на нашей стороне.
Теперь скачаем исходники Python и распакуем их.
[code batch]
1 2 |
wget https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz tar -xzf Python-3.5.2.tgz |
[/code]
Теперь готовим исходники и создаем бинарный пакет, заполнив необходимые данные. Созданный пакет будет сразу установлен в систему и его можно будет использовать. Примеры заполнения полей checkinstall:
- Название (name): python3.5
- Provides: python3.5
- Версия (version): 3.5.2-20161029
[code batch]
1 2 3 4 |
cd Python-3.5.2 ./configure make sudo checkinstall |
[/code]
Установить и удалить готовый пакет можно командами:
[code batch]
1 2 |
dpkg -i python3.5_3.5.2-20161029-1_amd64.deb apt-get remove python3.5 |
[/code]
Проверка версии OpenSSL внутри Python:
[code batch]
1 |
python3.5 -c "import ssl; print(ssl.OPENSSL_VERSION)" |
[/code]
Если видим версию 1.0.2+, значит фортуна нам благоволит. Дополнительно будет установлен pip3.5, который можно использовать для установки virtualenv и дальнешего создания окружений.
Напишите в комментариях, стоит ли вообще пялиться с Ubuntu 12?