概要
AWSのEC2インスタンスを Amazon Linux 2 で作成し、PostgreSQL11のクライアントをインストールしようとしたところ少しハマったので手順を書きます。
実行環境
Amazon Linux release 2 (Karoo)
手順
インストール手順
$ sudo rpm -ivh --nodeps https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-7-x86_64/ここに取得したいRPMを入れて
※以下のリンクから取得したいバージョンのRPMを確認し、上記コマンド末尾を書き換えて実行すること。
https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-7-x86_64/
例えばPostgreSQL11.2を取得したい場合、以下のRPMに書き換える。
postgresql11-11.2-2PGDG.rhel7.x86_64.rpm
上記コマンド実行後、 PostgreSQLのリポジトリ設定について確認する。
一部を確認したいだけなのでpgdg11部分のみ抜粋
[pgdg11]
name=PostgreSQL 11 $releasever - $basearch
baseurl=https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-$releasever-$basearch
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
リポジトリファイルには変数 $releasever と $basearch があるが、AmazonLinux 2 では、 $releaserver は system-release のバージョン番号で、$basearch はアーキテクチャのようだ。
確認したところ、 system-release は "release 2" なので $releaserver は "2" となる。
$basearch はアーキテクチャで "x86_64" となる。
$ cat /etc/system-release
Amazon Linux release 2 (Karoo)
$ arch
x86_64
つまり、この場合、リポジトリに記載されているbaseurlは
"https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-2-x86_64"
になるのだが、そのようなパスは存在しないので404になる。
AmazonLinux2 はredhat7をベースにしているようなので、
"https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-7-x86_64"
としたい。そのため、以下のコマンドで一括置換する。
sudo sed -i "s/\$releasever/7/g" "/etc/yum.repos.d/pgdg-redhat-all.repo"
あとはインストールするだけ。必要なものをインストールすればよいですが、ここではクライアントのみインストールする例。
$ sudo yum install -y postgresql11
以上!
追記(2022/10/25)
amazon linux 2 で PostgreSQL 13 をインストールしてみました。
記載通りでだいたい問題ないですが、私の環境では以下のファイルがなかったので作成しました。
/etc/yum.repos.d/pgdg-redhat-all.repo
また、GPGkeyファイルもなかったので、以下の場所から取得し、pgdg-redhat-all.repoのgpgkeyを同じファイル名に書き換えるとうまくいきました。
取得ファイル:RPM-GPG-KEY-PGDG-13
https://apt.postgresql.org/pub/repos/yum/