きどたかのブログ

いつか誰かがこのブログからトラブルを解決しますように。

Install Python36 on Amazon Linux2 based container

いまは2020年12月ですが、
なかなかどうして、上手くPython36を入れる方法というのがありません。
過去にうまく入れてる例は多いですが、それらの情報は古く、整理しないといけません。


最終的に、アーカイブされてるFedoraのEPELリポジトリから入れることにしました。

動機

EMRで使用するPythonバージョンが3.6と分かっているので、単体試験用の環境として、諸々インストールしたdockerイメージを準備したくCodeBuildでamazoncorretto:8をベースにDockerfileを作ってるところ。
今のCodeBuildの機能ではPython 3.7か3.8しか選べない。

古いFedoraのArchiveされたEPELから入れる

Index of /pub/archive/epel/7.2019-05-29/x86_64/Packages/p
Python 3.6.8がある。
自分でrepoファイルを作らないといけない。

yum install -y https://archives.fedoraproject.org/pub/archive/epel/7.2019-05-29/x86_64/Packages/e/epel-release-7-11.noarch.rpm
sed -i "s/metalink=/#metalink/g/" /etc/yum.repos.d/epel.repo
sed -i "#baseurl=http:\/\/download\.fedoraproject\.org\/pub\/epel\/7\//baseurl=https:\/\/archives\.fedoraproject\.org\/pub\/archive\/epel\/7\.2019-05-29\//g" /etc/yum.repos.d/epel.repo
yum clean all
yum install -y --enablerepo=epel python36

先にepel-releaseを入れる。
epel.repoファイルは出来るが、アーカイブにあったとしてもurlは本物。
metalinkを無効化して、baseurlでアーカイブに向ける。repomd.xmlの問題(更新時刻が古い)がでたりするのでcleanする。/var/yum/cacheを消すまではやらなくても動いた。
enablerepoは付けなくてもいけたかも??

amazon-linux-extrasの方法

この方法は、python3のトピックがdeprecatedになっており、使えなくなるはず。amazon-linux-extras listでpython3のトピックはもう表示されておらずpython3.8が見えてます。
隠れてるのを無理やり使ってます。

amazon-linux-extras enable python3
yum install -y python3-3.6

この方法ではPython 3.6.2が入りました。

amazon-linux-extras enable python3
yum install -y --disablerepo=amzn2-core python3

python3の指定でやるときは念のため、amzn2-coreの方にならないようにした方が良い。さもなくばpython 3.7とかが入ることになったりする。

どんなトピックがあるのか調べてみたときにdeprecatedだと気付いた。
http://amazonlinux.default.amazonaws.com/2/extras-catalog-x86_64.json

amazon-linux-extrasでEPELからはもう無理

amazon-linux-extras install epel -y
yum install -y --enablerepo=epel python36

この方法は、fedora 7のEPELを見るrepoが追加される。
しかし、fedoraのEPELにpython36はもういない。
Index of /pub/epel/7/x86_64/Packages/p
1739804 – Retired python36 breaks CentOS
簡単に言うと、Centos 7.7で、Python3.6はメインのリポジトリに移動して、EPELから消えた。2019年8月頃の話です。

IUS版から入れる方法

Amazon Linuxでは推奨しない。
IUS - FAQ

yum install -y https://centos7.iuscommunity.org/ius-release.rpm
yum install -y python36u

iusのrepoはinstall時に有効化されてるタイプ。

Fedora 32等からは入らない

yum install -y https://dl.fedoraproject.org/pub/fedora/linux/releases/32/Everything/x86_64/os/Packages/f/fedora-repos-32-1.noarch.rpm
yum install -y python36

Fedora 32にはPython 3.6.10がある。
Fedora 33にはPython 3.6.12がある。
インストール失敗。
Python36がEPELにいないので、fedora-reposを入れてみようとしましたが、
system-release(32)が必要と怒られた。
まあ、そうだわな。
うちらFedoraの7がベースだもの。
これは仕方ない。
rpmを直指定すれば入るかもしれないが依存関係とかの問題に当たりそうで諦める。

ソースからビルド

ここでは説明しない。
依存ライブラリのインストールなど大変だ。