如何在AWS EMR上安装openSSL 1.1?

问题描述 投票:0回答:1

我正在使用 boostrap 文件为运行 Pyspark 的 EMR 项目安装 python 3.10。 Python 3.10 需要 openSSL 1.1 或更高版本才能使用,但 EMR 有 OpenSSL 1.0.2k-fips(运行命令

openssl version
),我无法升级它。

我尝试使用 yum 安装我需要的版本:

sudo yum install -y openssl11-devel <+_some_other_packages>

但是 EMR 有一些存储库优先级保护,阻止我安装 1.1 版本:

13 packages excluded due to repository priority protections
Package gcc-7.3.1-15.amzn2.x86_64 already installed and latest version
Package 2:tar-1.26-35.amzn2.0.2.x86_64 already installed and latest version
Package gzip-1.5-10.amzn2.0.1.x86_64 already installed and latest version
Package wget-1.14-18.amzn2.1.x86_64 already installed and latest version
Package 1:make-3.82-24.amzn2.x86_64 already installed and latest version
Resolving Dependencies
--> Running transaction check
---> Package bzip2-devel.x86_64 0:1.0.6-13.amzn2.0.3 will be installed
---> Package libffi-devel.x86_64 0:3.0.13-18.amzn2.0.2 will be installed
---> Package openssl11-devel.x86_64 1:1.1.1g-12.amzn2.0.15 will be installed
--> Processing Conflict: 1:openssl11-devel-1.1.1g-12.amzn2.0.15.x86_64 conflicts openssl-devel
--> Finished Dependency Resolution
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest

然后,我尝试使用上述建议,使用标志 --skip-broken 并禁用优先级检查:

sudo yum install -y --disableplugin=priorities --skip-broken openssl11-devel <+ some other packages>

日志显示由于依赖问题,它跳过了 1.1 版本:

Resolving Dependencies
--> Running transaction check
---> Package bzip2-devel.x86_64 0:1.0.6-13.amzn2.0.3 will be installed
---> Package libffi-devel.x86_64 0:3.0.13-18.amzn2.0.2 will be installed
---> Package openssl11-devel.x86_64 1:1.1.1g-12.amzn2.0.15 will be installed
--> Processing Conflict: 1:openssl11-devel-1.1.1g-12.amzn2.0.15.x86_64 conflicts openssl-devel
--> Running transaction check
---> Package openssl11-devel.x86_64 1:1.1.1g-12.amzn2.0.15 will be installed
--> Running transaction check
---> Package bzip2-devel.x86_64 0:1.0.6-13.amzn2.0.3 will be installed
---> Package libffi-devel.x86_64 0:3.0.13-18.amzn2.0.2 will be installed
--> Finished Dependency Resolution

Packages skipped because of dependency problems:
    1:openssl11-devel-1.1.1g-12.amzn2.0.15.x86_64 from amzn2-core

最后,我尝试在安装新版本1.1之前卸载当前版本1.0:

sudo yum remove openssl

日志显示在依赖项检查后它已被删除:

================================================================================
 Package                  Arch   Version               Repository          Size
================================================================================
Removing:
 openssl                  x86_64 1:1.0.2k-24.amzn2.0.7 installed          830 k
Removing for dependencies:
 authconfig               x86_64 6.2.8-30.amzn2.0.2    installed          2.2 M
 cloud-init               noarch 19.3-46.amzn2.0.1     installed          3.2 M
 ec2-instance-connect     noarch 1.1-19.amzn2          installed           23 k
 perl-IO-Socket-SSL       noarch 1.94-7.amzn2.0.1      @amzn2-core        216 k
 perl-Net-HTTP            noarch 6.06-2.amzn2          @amzn2-core         51 k
 perl-XML-LibXML          x86_64 1:2.0018-5.amzn2.0.2  @amzn2-core        940 k
 perl-XML-SAX             noarch 0.99-9.amzn2          @amzn2-core        125 k
 perl-libwww-perl         noarch 6.05-2.amzn2          @amzn2-core        487 k
 platform-startup-install noarch 1.17.0-1              @emr-platform-repo 2.0 k
 python-jwcrypto          noarch 0.4.2-1.amzn2         installed          249 k
 python2-cryptography     x86_64 1.7.2-2.amzn2         installed          2.6 M
 python2-oauthlib         noarch 2.0.1-8.amzn2.0.1     installed          780 k
 rng-tools                x86_64 6.8-3.amzn2.0.5       installed          102 k
 system-lsb               x86_64 4.1-27.amzn2.3.6      @amzn2-core        0.0  
 system-lsb-languages     x86_64 4.1-27.amzn2.3.6      @amzn2-core        814  

Transaction Summary
================================================================================
Remove  1 Package (+15 Dependent packages)

但是日志在这里停止,引导程序在此时冻结一小时,直到失败。我看不到它是否尝试安装 1.1 版本(此步骤之后出现)。

所以我的问题是:如何在 EMR 上安装/升级当前版本的 OpenSSL 到 1.1 以运行 pyhton 3.10?

我的引导文件如下:

#!/usr/bin/env bash

PYTHON_VERSION=3.10.6

echo
echo "-----------------------------------------------"
echo "Removing SSL"
echo "-----------------------------------------------"
echo
echo "Current SSL version:"
openssl version

sudo yum update -y
sudo yum remove openssl

echo
echo "-----------------------------------------------"
echo "Installing OpenSSL"
echo "-----------------------------------------------"
echo
sudo yum update -y
sudo yum install -y --disableplugin=priorities --skip-broken gcc openssl11-devel bzip2-devel libffi-devel tar gzip wget make

echo "New SSL version:"
openssl version

echo
echo "-----------------------------------------------"
echo "Installing Python ${PYTHON_VERSION}"
echo "-----------------------------------------------"
echo
wget https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tgz
tar xzf Python-${PYTHON_VERSION}.tgz
cd Python-${PYTHON_VERSION}
./configure --enable-optimizations
make install
make altinstall prefix=~/local  # specify local installation directory
ln -s ~/local/bin/python3.10 ~/local/bin/python
cd ..
openssl amazon-emr python-3.10
1个回答
0
投票

我在基于 EMR emr-on-eks/spark/emr-6.14.0 映像的 dockerfile 中安装 python 3.10 时解决了类似的问题。

步骤如下:

安装 Amazon Linux 2 所需的库。

yum install -y git wget gcc make patch zlib-devel bzip2 bzip2-devel \
         readline-devel sqlite sqlite-devel openssl11 openssl11-devel tk-devel libffi-devel xz-devel

这里最重要的是:openssl11 和 openssl11-devel。并且不要安装 openssl-devel。

从源安装Python

PYTHON_VERSION=3.10.13    
curl -O https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tgz
tar -xvzf Python-${PYTHON_VERSION}.tgz
cd Python-${PYTHON_VERSION}
./configure --enable-optimizations
make altinstall
ln -s /usr/local/bin/python3.10 /usr/local/bin/python3

通过使用 make altinstal,您可以将操作系统附带的 python 安装保留在 /usr/bin/python 中。使用 altinstall python 被单独安装到 usr/local/bin/ 中。 pip 可以参考新的 python 版本 python3.10 和 pip3.10 (当然将 3.10 替换为您想要安装的适当版本的 python)

或者,您可以使用命令

make install
而不是
make altinstall
将 python 版本安装为默认版本。在这种情况下,python 将安装在 /usr/bin/python 中

© www.soinside.com 2019 - 2024. All rights reserved.