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を直指定すれば入るかもしれないが依存関係とかの問題に当たりそうで諦める。
ソースからビルド
ここでは説明しない。
依存ライブラリのインストールなど大変だ。