2023-02-06

【備忘録】CentOS 7 に Python3.11 をインストール

CentOS (Community Enterprise Operating System) は、コミュニティがサポートするフリーでオープンソースのコンピュータプラットフォームで、その上流のソース、Red Hat Enterprise Linux(RHEL)と機能的に互換性があります。

Wikipedia より引用・翻訳

CentOS 8 は 8.5.2111 が最後のリリースになり、開発およびサポートが終了(正式な終了は 2021 年 12 月 31 日)しましたが、CentOS 7 の方は 2024 年 6 月 30 日までメンテナンスアップデートが続けられます。

とある事情で CentOS 7 上で、どうしても最新の Python 3.11.x を使いたい状況になり、/usr/local 以下に、ソースからコンパイルして使うことにしましたので、その顛末を備忘録としてまとめました。

全面的に下記の記事を参考にさせていただきました。

今回は下記を GNOME Desktop が使えるオプションでインストール、アップデートした環境を使います。

OS CentOS 7.9-2009 (x86_64)
CentOS 7.9-2009 のデスクトップ画面

準備

インストールするソフトウェアの入手

ソースからコンパイル、インストールするソフトウェアは、下記の2つです。それぞれをダウンロードしておきます。

Python 3.11 をビルドするためには OpenSSL 1.1.1 以上のバージョンが必要になりますが、CentOS 7 で使用している OpenSSL のバージョンは 1.0.2k であるため、より新しい OpenSSL をインストールします。

コンパイル環境

まず、基本的なコンパイル環境を整えます。

[bitwalk@centos7 ~]$ sudo yum group install "Development Tools"
...

次に、OpenSSL と Python をビルドするのに必要な rpm パッケージをインストールします(不要なパッケージがあるかもしれません)。

[bitwalk@centos7 ~]$ sudo yum install bluez-libs-devel bzip2-devel libtirpc-devel libffi-devel ncurses-devel perl-Test-Harness perl-Test-Simple readline-devel sqlite-devel tcl-devel tk-devel tkinter xz-devel zlib-devel 

OpenSSL のビルド

まず、ソースを解凍してビルドします。

[bitwalk@centos7 ~]$ cd Downloads
[bitwalk@centos7 Downloads]$ ls
openssl-1.1.1s.tar.gz  Python-3.11.1.tar.xz
[bitwalk@centos7 Downloads]$ tar xvf openssl-1.1.1s.tar.gz
[bitwalk@centos7 Downloads]$ cd openssl-1.1.1s
[bitwalk@centos7 openssl-1.1.1s]$ ls
ACKNOWLEDGEMENTS  Configurations  external  NOTES.ANDROID  README.ENGINE
apps              Configure       FAQ       NOTES.DJGPP    README.FIPS
appveyor.yml      CONTRIBUTING    fuzz      NOTES.PERL     ssl
AUTHORS           crypto          include   NOTES.UNIX     test
build.info        demos           INSTALL   NOTES.VMS      tools
CHANGES           doc             LICENSE   NOTES.WIN      util
config            engines         ms        os-dep         VMS
config.com        e_os.h          NEWS      README         wycheproof
[bitwalk@centos7 openssl-1.1.1s]$ ./config
Operating system: x86_64-whatever-linux2
Configuring OpenSSL version 1.1.1s (0x1010113fL) for linux-x86_64
Using os-specific seed configuration
Creating configdata.pm
Creating Makefile

**********************************************************************
***                                                                ***
***   OpenSSL has been successfully configured                     ***
***                                                                ***
***   If you encounter a problem while building, please open an    ***
***   issue on GitHub <https://github.com/openssl/openssl/issues>  ***
***   and include the output from the following command:           ***
***                                                                ***
***       perl configdata.pm --dump                                ***
***                                                                ***
***   (If you are new to OpenSSL, you might want to consult the    ***
***   'Troubleshooting' section in the INSTALL file first)         ***
***                                                                ***
**********************************************************************
[bitwalk@centos7 openssl-1.1.1s]$ make
...
...
[bitwalk@centos7 openssl-1.1.1s]$ make test
...
...
../test/recipes/99-test_fuzz.t ..................... ok     
All tests successful.
Files=158, Tests=2648, 89 wallclock secs ( 2.71 usr  0.20 sys + 71.28 cusr 28.29 csys = 102.48 CPU)
Result: PASS
make[1]: Leaving directory `/home/bitwalk/Downloads/openssl-1.1.1s'
[bitwalk@centos7 openssl-1.1.1s]$ sudo make install
[sudo] password for bitwalk: 
...
/usr/local/share/doc/openssl/html/man7/x509.html
[bitwalk@centos7 openssl-1.1.1s]$ 

共有ライブラリの検索パスを追加し、システムが OpenSSL 1.1.1s の共有ライブラリを検索できるようにします。

[bitwalk@centos7 openssl-1.1.1s]$ sudo ldconfig -p | grep libssl.so
	libssl.so.10 (libc6,x86-64) => /lib64/libssl.so.10
[bitwalk@centos7 openssl-1.1.1s]$ ldd /usr/local/bin/openssl
	linux-vdso.so.1 =>  (0x00007ffecb7d9000)
	libssl.so.1.1 => not found
	libcrypto.so.1.1 => not found
	libdl.so.2 => /lib64/libdl.so.2 (0x00007f3154d41000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f3154b25000)
	libc.so.6 => /lib64/libc.so.6 (0x00007f3154757000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f3154f45000)
[bitwalk@centos7 openssl-1.1.1s]$ sudo sh -c 'echo /usr/local/lib64 > /etc/ld.so.conf.d/local.conf'
[bitwalk@centos7 openssl-1.1.1s]$ ls /etc/ld.so.conf.d 
bind-export-x86_64.conf                  libiscsi-x86_64.conf
dyninst-x86_64.conf                      local.conf
kernel-3.10.0-1160.71.1.el7.x86_64.conf  mariadb-x86_64.conf
kernel-3.10.0-1160.83.1.el7.x86_64.conf  tix-x86_64.conf
[bitwalk@centos7 openssl-1.1.1s]$ cat /etc/ld.so.conf.d/local.conf
/usr/local/lib64
[bitwalk@centos7 openssl-1.1.1s]$ sudo ldconfig
[bitwalk@centos7 openssl-1.1.1s]$ sudo ldconfig -p | grep libssl.so
	libssl.so.10 (libc6,x86-64) => /lib64/libssl.so.10
	libssl.so.1.1 (libc6,x86-64) => /usr/local/lib64/libssl.so.1.1
	libssl.so (libc6,x86-64) => /usr/local/lib64/libssl.so
[bitwalk@centos7 openssl-1.1.1s]$ ldd /usr/local/bin/openssl
	linux-vdso.so.1 =>  (0x00007ffd587c4000)
	libssl.so.1.1 => /usr/local/lib64/libssl.so.1.1 (0x00007f69eccf4000)
	libcrypto.so.1.1 => /usr/local/lib64/libcrypto.so.1.1 (0x00007f69ec809000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007f69ec605000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f69ec3e9000)
	libc.so.6 => /lib64/libc.so.6 (0x00007f69ec01b000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f69ecf87000)
[bitwalk@centos7 openssl-1.1.1s]$ /usr/local/bin/openssl version
OpenSSL 1.1.1s  1 Nov 2022

既存の OpenSSL を依存関係を無視してアンインストールし、ビルドした OpenSSL 1.1.1s のリンクを /usr/bin 以下に貼ります。ただし、既存の openssl-libs は残しておきます。

[bitwalk@centos7 openssl-1.1.1s]$ sudo rpm -e --nodeps openssl
[bitwalk@centos7 openssl-1.1.1s]$ sudo ln -s /usr/local/bin/openssl /usr/bin/openssl
[bitwalk@centos7 openssl-1.1.1s]$ openssl version
OpenSSL 1.1.1s  1 Nov 2022
[bitwalk@centos7 openssl-1.1.1s]$ cd ..

Python のビルド

Python も同様に、ソースを解凍してビルドします。なお、configure--enable-optimizations オプションを付けると make でエラーが出たので外しました。

[bitwalk@centos7 Downloads]$ ls
openssl-1.1.1s  openssl-1.1.1s.tar.gz  Python-3.11.1.tar.xz
[bitwalk@centos7 Downloads]$ tar Jxvf Python-3.11.1.tar.xz
...
[bitwalk@centos7 Downloads]$ cd Python-3.11.1
[bitwalk@centos7 Python-3.11.1]$ ls
aclocal.m4    Doc         LICENSE          Objects   pyconfig.h.in
config.guess  Grammar     Mac              Parser    Python
config.sub    Include     Makefile.pre.in  PC        README.rst
configure     install-sh  Misc             PCbuild   setup.py
configure.ac  Lib         Modules          Programs  Tools
[bitwalk@centos7 Python-3.11.1]$ ./configure
...
configure: creating Makefile
configure:

If you want a release build with all stable optimizations active (PGO, etc),
please run ./configure --enable-optimizations

[bitwalk@centos7 Python-3.11.1]$ make
...
[bitwalk@centos7 Python-3.11.1]$ make test
...
0:06:18 load avg: 3.38 [434/434] test_concurrent_futures passed (2 min 23 sec)

== Tests result: SUCCESS ==

413 tests OK.

21 tests skipped:
    test_dbm_gnu test_dbm_ndbm test_devpoll test_gdb test_idle
    test_ioctl test_kqueue test_launcher test_msilib test_ossaudiodev
    test_startfile test_tcl test_tix test_tk test_ttk_guionly
    test_ttk_textonly test_turtle test_winconsoleio test_winreg
    test_winsound test_zipfile64

Total duration: 6 min 18 sec
Tests result: SUCCESS
[bitwalk@centos7 Python-3.11.1]$ sudo make install
...
Installing collected packages: setuptools, pip
  WARNING: The scripts pip3 and pip3.11 are installed in '/usr/local/bin' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Successfully installed pip-22.3.1 setuptools-65.5.0
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
[bitwalk@centos7 Python-3.11.1]$ 

/usr/local/bin にインストールされた python3.11 と pip3.11 のリンクを /usr/bin 以下に貼ります。

[bitwalk@centos7 Python-3.11.1]$ sudo ln -s /usr/local/bin/python3.11 /usr/bin/python3
[bitwalk@centos7 Python-3.11.1]$ sudo ln -s /usr/local/bin/pip3.11 /usr/bin/pip3
[bitwalk@centos7 Python-3.11.1]$ python3 --version
Python 3.11.1
[bitwalk@centos7 Python-3.11.1]$ pip3 --version
pip 22.3.1 from /usr/local/lib/python3.11/site-packages/pip (python 3.11)
[bitwalk@centos7 Python-3.11.1]$ 

OpenSSL の2つのバージョン 1.0.2k と 1.1.1s がシステムに混在しているので気持ちが悪いのですが、とりあえず Python 3.11.x が動作するようになりました。

そろそろ Python 3.11.2 がリリースされると思いますので、Python のビルドをやり直します。

参考サイト

  1. /index.html (OpenSSL)
  2. Welcome to Python.org

 

 

ブログランキング・にほんブログ村へ bitWalk's - にほんブログ村 にほんブログ村 IT技術ブログ オープンソースへ
にほんブログ村

オープンソース - ブログ村ハッシュタグ
#オープンソース



このエントリーをはてなブックマークに追加

0 件のコメント: