CentOS 7에서 Python 3.10 이상 버전 사용하기 전 OpenSSL 1.1.1을 RPM으로 설치하는 방법

PEP644 문서에는 Python 3.10 이상부터 OpenSSL 1.1.1 이상을 요구하고 있습니다.

PEP 644 — Require OpenSSL 1.1.1 or newer 

https://peps.python.org/pep-0644/

 

PEP 644 – Require OpenSSL 1.1.1 or newer | peps.python.org

PEP 644 – Require OpenSSL 1.1.1 or newer PEP 644 Title Require OpenSSL 1.1.1 or newer Author Christian Heimes BDFL-Delegate n/a Discussions-To https://discuss.python.org/t/pep-644-require-openssl-1-1-or-newer/5584 Status Final Type Standards Track Create

peps.python.org

 

그러나, 여러 대기업, 관공서등에서 CentOS 7을 아직도 많이 사용을 하고 있고, CentOS 7은 OpenSSL 1.1.1이 아닌 OpenSSL 1.0.2가 설치되어있습니다.

$ openssl version
OpenSSL 1.0.2k-fips  26 Jan 2017

CentOS 7에서 Python 3.10을 사용하고 싶은데, OpenSSL 1.1.1이 설치가 되지 않아 소스 컴파일하여 사용해야 하나 이런 고민을 많이 했습니다.

그러나, 일본의 파이썬 개발자가 공유한 글을 보고, CentOS 7에서 OpenSSL 1.1.1을 소스 컴파일이 아닌 RPM설치로도 가능하다는 걸 알게 되었습니다.

아래는 일본 파이썬 개발자가 작성한 글 “Python 3.10の新機能(その8) OpenSSL 1.1.1が必須に”[번역: Python 3.10의 신기능(8번째 부분) OpenSSL 1.1.1이 필수임] 입니다.

 

Python 3.10の新機能(その8) OpenSSL 1.1.1が必須に - python.jp

Pythonでは、https通信やメッセージダイジェストの作成などの暗号関連機能に、OpenSSLを利用しています。 これまで、Pythonでは OpenSSL のVersion 1.0.2以降が利用可能でしたが、Python 3.10からは、OpenSS

www.python.jp

여기에서는 CentOS 7에서 OpenSSL1.1.1을 설치하려면 Fedora Project에서 제공하는 EPEL(Extra Packages for Enterprise Linux) 저장소를 추가하여 설치하면 된다고 하더군요.

다음의 명령어로 CentOS 7에서 OpenSSL1.1.1을 설치할 수 있습니다.

yum install epel-release
yum install openssl11 openssl11-devel

OpenSSL1.1.1 설치가 끝나면 아래의 명령어로 확인 가능합니다

$ openssl11 version 
OpenSSL 1.1.1k  FIPS 25 Mar 2021

pyenv로 설치 시 아래와 같이 환경변수를 지정해야 CentOS 7에서 Python을 설치할 수 있습니다

export CFLAGS=$(pkg-config --cflags openssl11)
export LDFLAGS=$(pkg-config --libs openssl11)
pyenv install 3.10.4

만약, Python을 소스 빌드로 설치하려면 아래와 같이 명령어를 입력하면 됩니다.

yum install epel-release
yum install openssl11 openssl11-devel
export CFLAGS=$(pkg-config --cflags openssl11)
export LDFLAGS=$(pkg-config --libs openssl11)
./configure
make
sudo make install

여담으로, 3월 24일에 예정된 일정 이전에 Python 3.10.4 및 3.9.12 버전이 출시되었다고 글이 공개되었습니다.

Python 3.10.4 and 3.9.12 are now available out of schedule

https://blog.python.org/2022/03/python-3104-and-3912-are-now-available.html

 

Python Insider: Python 3.10.4 and 3.9.12 are now available out of schedule

Did anybody say cursed releases? Well, it turns out that 3.10.3 and 3.9.11 both shipped a regression which caused those versions not to build on Red Hat Enterprise Linux 6. While this 11-year-old version is now out of maintenance support, it’s still used

blog.python.org

글 내용을 보면, “Red Hat Enterprise Linux 6”에서 Python3.10.3 및 3.9.11 버전이 빌드가 되지 않는 문제 때문이라고 하더군요. RHEL(Red Hat Enterprise Linux) 6은 11년 전에 출시되었고, 이제는 유지보수 지원이 끝났습니다만, 많은 사무 업무분야에서 여전히 많이 사용되고 있다고 합니다. 게다가 자체 manylinux2010 이미지는 CentOS 6을 기반으로 합니다….

아직도 RHEL 6/Cent OS6기반으로 이미지를 사용하는 경우도 많군요

 

보안 이슈때문에 라이브러리를 새로 바꿔줘야 하는데 Legacy(낡은 것)를 뺄 수가 없으니, 버리는 것이 쉽지 않다는 걸, CentOS 7에서 Python 3.10(지금 기준 — 3.10.4)을 설치하며 알게 되었습니다.

ps.CentOS 7에서 pyenv 로 3.11-dev설치할때도, OpenSSL1.1.1에 대한 환경변수 설정 후에 설치를 해야 정상 설치 됩니다.

export CFLAGS=$(pkg-config --cflags openssl11)
export LDFLAGS=$(pkg-config --libs openssl11)
pyenv install 3.11-dev

참고: PEP(Python Enhancement Proposal)는 “파이썬 언어의 개선된 제안”으로 번역하며, 파이썬 커뮤니티에서 수많은 사람들이 의견을 내고 토론하고 발전하며 논의된 주제를 PEP(Python Enhancement Proposal)로 문서화를 하였습니다 

출처: https://wikidocs.net/21733

 

 

1) PEP

## PEP 파이썬 창시자 귀도를 중심으로 수많은 사람들이 기여해서 발전해온 언어입니다. 귀도라는 최종 결정권자 혹은 그리고 결정을 하는데 가장 큰 영향력을 끼치는 독재 ...

wikidocs.net

 

Buy me a coffeeBuy me a coffee

2010년 10월 21일

@Linux_Kernel Twitter에 아래와 같은 소식이 올라왔습니다.


드디어 Linux Kernel 2.6.36이 정식출시되었다는겁니다.

설마 하면서 Linux 터미널에서 아래와 같은 명령어로 쳐보니 진짜 2.6.36이 Release가 되었군요^^

[root@localhost ~]# finger @ftp.kernel.org                                     

The latest linux-next version of the Linux kernel is:         next-20101021

The latest snapshot 2.6 version of the Linux kernel is:       2.6.36-rc8-git5

The latest mainline 2.6 version of the Linux kernel is:       2.6.36

The latest stable 2.6 version of the Linux kernel is:         2.6.36

The latest stable 2.6.35 version of the Linux kernel is:      2.6.35.7

The latest stable 2.6.34 version of the Linux kernel is:      2.6.34.7

The latest stable 2.6.33 version of the Linux kernel is:      2.6.33.7

The latest stable 2.6.32 version of the Linux kernel is:      2.6.32.24

The latest stable 2.6.31 version of the Linux kernel is:      2.6.31.14

The latest stable 2.6.27 version of the Linux kernel is:      2.6.27.54

The latest stable 2.4.37 version of the Linux kernel is:      2.4.37.10

[root@localhost ~]#


저는 git으로 CentOS에 Linux Kernel 2.6.36을 올렸습니다.

컴파일 해서 올리니 드디어 Linux Kernel 2.6.36을 쓸 수 있게 되었습니다.

커널을 컴파일해서 올리는 방법은 아래에 적혀있습니다.

2010/08/19 - [컴퓨터/Linux] - Linux Kernel 2.6.18에서 2.6.27로 컴파일 기록.


Linux Kernel 2.6.36 컴파일 후 결과물

[root@localhost ~]# uname -srvi

Linux 2.6.36 #1 SMP Thu Oct 21 21:26:28 KST 2010 i386

[root@localhost ~]#

Buy me a coffeeBuy me a coffee



CentOS 5.5에서 Android 커널 컴파일 하다 아래와 같은 오류가 생길 때가 있다.


host C: sqlite3 <= external/sqlite/dist/shell.c

external/sqlite/dist/shell.c: In function ‘callback’:

external/sqlite/dist/shell.c:540: warning: comparison between signed and unsigned

external/sqlite/dist/shell.c:551: warning: comparison between signed and unsigned

external/sqlite/dist/shell.c:561: warning: comparison between signed and unsigned

external/sqlite/dist/shell.c:575: warning: comparison between signed and unsigned

external/sqlite/dist/shell.c:580: warning: comparison between signed and unsigned

external/sqlite/dist/shell.c: In function ‘do_meta_command’:

external/sqlite/dist/shell.c:1051: warning: comparison between signed and unsigned

external/sqlite/dist/shell.c:1603: warning: comparison between signed and unsigned

host Executable: sqlite3 (out/host/linux-x86/obj/EXECUTABLES/sqlite3_intermediates/sqlite3)

/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../libreadline.so: undefined reference to `PC'

/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../libreadline.so: undefined reference to `tgetflag'

/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../libreadline.so: undefined reference to `tgetent'

/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../libreadline.so: undefined reference to `UP'

/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../libreadline.so: undefined reference to `tputs'

/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../libreadline.so: undefined reference to `tgoto'

/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../libreadline.so: undefined reference to `tgetnum'

/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../libreadline.so: undefined reference to `BC'

/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../libreadline.so: undefined reference to `tgetstr'

collect2: ld returned 1 exit status

make: *** [out/host/linux-x86/obj/EXECUTABLES/sqlite3_intermediates/sqlite3] 오류 1

[studioego@localhost cupcake]$

위와 같은 문제가 일어날 경우 아래와 같이 작업을 해준다.

[studioego@localhost cupcake]$ yum install -y readline*

[studioego@localhost cupcake]$ vi ./external/sqlite/dist/Android.mk


ifneq ($(strip $(have_readline)),)

-LOCAL_LDLIBS += -lreadline

 endif


위의 대용 대신 대신 아래와 같이 -lncurses 를 추가한다.

+LOCAL_LDLIBS += -lreadline -lncurses


ifneq ($(strip $(have_readline)),)

-LOCAL_LDLIBS += -lreadline -lncurses

 endif


 

Buy me a coffeeBuy me a coffee
이번에 학회서버를 CentOS로 깔려고 합니다.
예전에 Fedora Core를 썼다가, 크게 데인 기억도 있고, Debian 계열의 Ubuntu를 쓰다가 하드웨어랑 충돌났던 기억때문에 어떤 OS를 깔까 고민하다가 결국 Redhat계열의 CentOS를 깔기로 하였습니다.

레드헷 계열 오픈소스 프로젝트 중 하나인 CentOS는 Redhat Enterprise Linux AS 기반의 리눅스 배포판입니다. CentOS는 RedHat 또는 Redhat Enterprise Linux 설치단계부터 운영하는 방법등이 거의 비슷합니다.
서점에 레드햇계열의 책들이 널려서 있는 국내 상황에서는 CentOS가 금방 배우기 쉬울듯 하면서 관리하기도 쉬울 것입니다.

눈에 띠는 것은 페도라와 마찬가지로 업데이트용 프로그램인 yum 이 포함되어 있습니다. yum이란 ubuntu의 apt-get과 비슷한 기능이죠. 커맨드 프롬프트에서 yum update 하는것만으로도 시스템을 업데이트 할 수 있습니다. 또 SMP 시스템일 경우 유리한 irqbalace 도 포함되어 있습니다. 같은 설정으로 설치한 경우 페도라에 비해서는 잡다한 프로그램들이 덜 깔린다고 합니다.

최근 레드헷의 업데이트는 중단되었고, 레드헷 엔터프라이즈의 경우 유료 고객지원을 받아야 하기 때문에 레드헷 사용이 쉽지 않습니다. CentOS는 상용으로 판매하고 있는 RedHat Enterprise Linux에서 제공하는 Source RPM을 활용하여 RedHat의 트레이드마크 등 재배포가 금지되어 있는 부분만을 제외한 RHEL의 클론을 제공하는 프로젝트입니다. CentOS를 사용하면 RHEL이 소비자에게 과금하는 서비스의 핵심인 소프트웨어 업데이트까지도 RHEL과 몇 시간/며칠 차이를 두고 그대로 이용할 수 있습니다.

RedHat을 사용 해봤다면 CenOS를 설치하거나 운영하는데 어려움이 없으리라 보여지며, RedHat 기반의 리눅스 운영자라면 업데이트 측면과 안정성 측면에서 권장할 만한 운영체제입니다.
학회서버는 이제 CentOS를 설치를 할 것입니다.

저도 이제 Debian계열의 Ubuntu만 쓰다가 이제 Redhat계열의 CentOS를 쓰게 되군요

'컴퓨터 > Linux' 카테고리의 다른 글

Ruby on rails 설치  (0) 2008.05.10
Virtual PC 2007에서 Ubuntu 7.10설치하는 방법  (1) 2008.02.15
2007 JCO 오픈소스 컨퍼런스에 갑니다  (2) 2007.10.07
Happy 10th Birthday GNOME!  (0) 2007.08.22
Apache Tomcat 설치기  (3) 2007.08.09
Buy me a coffeeBuy me a coffee

+ Recent posts