
CentOS 7は2024年6月30日にEoLを迎えたので、速やかにOSを移行するのがベストだけど、様々な事情でまだOSを変えられない場合にCentOS 7に Python 3.13 や Python 3.12 をインストールして延命できるかやってみた。
uv 素晴らしい。
用意したもの
- CentOS 7.9 amd64(x86_64) を最小構成でセットアップした Proxmox VE 上のVM
- OSインストールに使った ISO は https://vault.centos.org/7.9.2009/isos/x86_64/ から取得した CentOS-7-x86_64-NetInstall-2009.iso
- インストールソースは https://vault.centos.org/7.9.2009/os/x86_64/
- インストール後は /etc/yum.repos.d/CentOS-Base.repo の base , updates , extras の baseurl を vault.centos.org に変えて
sudo yum update
で更新
手順
uv を全ユーザー用にインストール
過去の手順の「uvを全ユーザー用にインストール」のとおり
uv で全ユーザー用に Python をインストール
- CentOS 7 の Python は 2.7.5 なので表示されない
$ uv python list cpython-3.14.0a6+freethreaded-linux-x86_64-gnu <download available> cpython-3.14.0a6-linux-x86_64-gnu <download available> cpython-3.13.2+freethreaded-linux-x86_64-gnu <download available> cpython-3.13.2-linux-x86_64-gnu <download available> cpython-3.12.9-linux-x86_64-gnu <download available> cpython-3.11.11-linux-x86_64-gnu <download available> cpython-3.10.16-linux-x86_64-gnu <download available> cpython-3.9.21-linux-x86_64-gnu <download available> cpython-3.8.20-linux-x86_64-gnu <download available> cpython-3.7.9-linux-x86_64-gnu <download available>
- sudo の secure_path に追加
CentOS 7 は sudo の secure_path に /usr/local/bin が含まれていないので追加する
ついでに /usr/local/sbin も
/usr/local 以下は root しか書けないし、AmazonLinux 2023 や Debian 12 では最初から含まれているから問題ないでしょうsudo visudo
コマンドで追加
これをDefaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
こうする
Defaults secure_path = /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
PATHと同じで左から順に探すから、/usr/local/を先に書いておく
- secure_path への追加を確認
$ sudo -l 既定値のエントリと照合中 (ユーザー名 nissy) (ホスト名 djangocms-cent7): !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep +="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/usr/local/sbin\:/usr/local/bin\:/sbin\:/bin\:/usr/sbin\:/usr/bin ユーザー nissy は djangocms-cent7 上で コマンドを実行できます (ALL) ALL
- -i オプションで全ユーザーがアクセスできるディレクトリに 3.13 をインストール
$ sudo uv python install 3.13 -i /opt/uv-python/ Installed Python 3.13.2 in 3.66s + cpython-3.13.2-linux-x86_64-gnu
- ついでに Python 3.12 もインストールしてみる
$ sudo uv python install 3.12 -i /opt/uv-python/ Installed Python 3.12.9 in 4.33s + cpython-3.12.9-linux-x86_64-gnu
- alternativesで切り替えられるように登録する
$ sudo alternatives --install /usr/local/bin/python3.13 python3.13 /opt/uv-python/cpython-3.13.2-linux-x86_64-gnu/bin/python3.13 2 $ sudo alternatives --install /usr/local/bin/python3.12 python3.12 /opt/uv-python/cpython-3.12.9-linux-x86_64-gnu/bin/python3.12 9 $ alternatives --list | grep python3 python3.13 auto /opt/uv-python/cpython-3.13.2-linux-x86_64-gnu/bin/python3.13 python3.12 auto /opt/uv-python/cpython-3.12.9-linux-x86_64-gnu/bin/python3.12
- 確認
$ uv python list cpython-3.14.0a6+freethreaded-linux-x86_64-gnu <download available> cpython-3.14.0a6-linux-x86_64-gnu <download available> cpython-3.13.2+freethreaded-linux-x86_64-gnu <download available> cpython-3.13.2-linux-x86_64-gnu /usr/local/bin/python3.13 -> /etc/alternatives/ python3.13 cpython-3.13.2-linux-x86_64-gnu <download available> cpython-3.12.9-linux-x86_64-gnu /usr/local/bin/python3.12 -> /etc/alternatives/ python3.12 cpython-3.12.9-linux-x86_64-gnu <download available> cpython-3.11.11-linux-x86_64-gnu <download available> cpython-3.10.16-linux-x86_64-gnu <download available> cpython-3.9.21-linux-x86_64-gnu <download available> cpython-3.8.20-linux-x86_64-gnu <download available> cpython-3.7.9-linux-x86_64-gnu <download available>
$ which python3.12 /usr/local/bin/python3.12 $ which python3.13 /usr/local/bin/python3.13
OpenSSLバージョン確認
- OS標準の Python 2.7.5 ではEoLを過ぎたバージョンのOpenSSL
$ env python -V Python 2.7.5 $ env python -c 'import ssl; print(ssl.OPENSSL_VERSION)' OpenSSL 1.0.2k-fips 26 Jan 2017
- uvでインストールした Python 3.13.2 では、現行のLTS版の3.0.16
素晴らしい$ env python3.13 -V Python 3.13.2 $ env python3.13 -c 'import ssl; print(ssl.OPENSSL_VERSION)' OpenSSL 3.0.16 11 Feb 2025
$ strings /opt/uv-python/cpython-3.13.2-linux-x86_64-gnu/lib/libpython3.13.so.1.0 | grep '^OpenSSL 3' OpenSSL 3.0.16 11 Feb 2025
$ ls -lh /opt/uv-python/cpython-3.13.2-linux-x86_64-gnu/lib/libpython3.13.so.1.0 -rwxr-xr-x. 1 root root 37M 4月 3 18:42 /opt/uv-python/cpython-3.13.2-linux-x86_64-gnu/lib/ libpython3.13.so.1.0
Django CMS 4.1.5 を試す
証明書更新
証明書更新
$ sudo curl -o /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem https://curl.se/ca/cacert.pem
$ sudo ln -sf /etc/pki/tls/certs/ca-bundle.crt /etc/ssl/cert.pem
CentOS 7 の証明書は古いし、EoLを過ぎていて ca-certificate パッケージを更新しても最新にならず以下のエラーが出るから手動で更新しておく。
$ djangocms mysite
Clone template using django-admin
django-admin startproject "mysite" --template https://github.com/django-cms/cms-template/archive/4.1.tar.gz
CommandError: couldn't download URL https://github.com/django-cms/cms-template/archive/4.1.tar.gz to 4.1.tar.gz: <urlopen
error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1028)>
Django CMS インストール
- uv が使う Python のバージョンを確認
[nissy@djangocms-cent7 ~]$ uv python find /usr/local/bin/python3.13
pin で切り替えもできる
[nissy@djangocms-cent7 ~]$ uv python pin 3.13 Updated `.python-version` from `3.12` -> `3.13`
- 仮想環境作成
djangocms
コマンドの途中でpip
が必要だから--seed
オプションを付けて入れておく[nissy@djangocms-cent7 ~]$ uv venv --seed ~/venvs/djangodms Using CPython 3.13.2 interpreter at: /usr/local/bin/python3.13 Creating virtual environment with seed packages at: venvs/djangodms + pip==25.0.1 Activate with: source venvs/djangodms/bin/activate
- 仮想環境に入る
[nissy@djangocms-cent7 ~]$ source ~/venvs/djangodms/bin/activate (djangodms) [nissy@djangocms-cent7 ~]$
uv pip
で django-cmsをインストール(djangodms) [nissy@djangocms-cent7 ~]$ uv pip install django-cms Using Python 3.13.2 environment at: venvs/djangodms Resolved 11 packages in 705ms Prepared 11 packages in 1.51s Installed 11 packages in 1.21s + asgiref==3.8.1 + django==5.2 + django-classy-tags==4.1.0 + django-cms==4.1.5 + django-formtools==2.5.1 + django-sekizai==4.1.0 + django-treebeard==4.7.1 + djangocms-admin-style==3.3.1 + packaging==24.2 + setuptools==78.1.0 + sqlparse==0.5.3
- ディレクトリ作成
(djangodms) [nissy@djangocms-cent7 ~]$ mkdir -p ~/webapps/djangocms
- サイト作成
(djangodms) [nissy@djangocms-cent7 ~]$ djangocms mysite ~/webapps/djangocms Clone template using django-admin django-admin startproject "mysite" --template https://github.com/django-cms/cms-template/archive/ 4.1.tar.gz --directory "/home/nissy/webapps/djangocms" cd "/home/nissy/webapps/djangocms" Install requirements in /home/nissy/webapps/djangocms/requirements.in python -m pip install -r "/home/nissy/webapps/djangocms/requirements.in" Run migrations python -m manage migrate Create superuser python -m manage createsuperuser Username (leave blank to use 'nissy'): Email address: Password: Password (again): Superuser created successfully. Check installation python -m manage cms check *************************************** django CMS 4.1.5 installed successfully *************************************** Congratulations! You have successfully installed django CMS, the lean enterprise content management powered by Django! Now, to start the development server first go to your newly created project and then call the runserver management command: $ cd /home/nissy/webapps/djangocms $ python -m manage runserver Learn more at https://docs.django-cms.org/ Join the django CMS Discord Server at https://discord-main-channel.django-cms.org Enjoy!
- Django CMS 実行
(djangodms) [nissy@djangocms-cent7 ~]$ cd ~/webapps/djangocms (djangodms) [nissy@djangocms-cent7 ~]$ python -m manage runserver
- Django CMS にアクセス
TCP:8000 を SSH ローカル転送して http://127.0.0.1:8000 にWebブラウザでアクセスし、python -m manage createsuperuser
で作成したユーザーとパスワードでログインする
CentOS 7 でも Python 3.13 をインストールして Django CMS 4.1.5 を起動できた!
