【備忘】Cloud9にpsql(クライアント)を入れる

#### Cloud9からEC2に入れたpostgresqlサーバに接続したい
postgresqlサーバを作った：[【初心者】【備忘】EC2にposgresql12.3をインストール](https://qiita.com/6haramitsu/items/ab183aac93efd2856c94)
ので、`Cloud9`から`psql`クライアントで接続出来るようにしたい。

#####結構ハマりました
Cloud9もEC2なので、postgresqlサーバを作った話しと同じ流れ
**と思いきや…**
うちのAWS環境ではEC2とCloud9でOSのバージョンが違っていました。

|サービス  |OS  |ベースになるOS  |
|---|---|---|
|Cloud9  |Amazon Linux|RHEL6系|
|EC2  |Amazon Linux 2|RHEL7系|

>参考：[Amazon Linux は何系のディストリビューションに該当するのか](https://www.acrovision.jp/service/aws/?p=653)

- Cloud9のOSバージョン確認

```console:
# cat /etc/system-release
Amazon Linux AMI release 2018.03
```

- EC2のOSバージョン確認

```console:
# cat /etc/system-release
Amazon Linux release 2 (Karoo)
```

#### repoインストール
**Amazon Linux 1はRHEL6ベース**らしいのでここからのrepoファイルをインストールする

>https://download.postgresql.org/pub/repos/yum/reporpms/EL-6-x86_64/
pgdg-redhat-repo-latest.noarch.rpm


#### repoファイルのダウンロード。
Cloud9のrootユーザで作業

```console:
$ sudo su -
# wget --no-check-certificate https://download.postgresql.org/pub/repos/yum/reporpms/EL-6-x86_64/pgdg-redhat-repo-latest.noarch.rpm
--2021-10-05 07:15:01--  https://download.postgresql.org/pub/repos/yum/reporpms/EL-6-x86_64/pgdg-redhat-repo-latest.noarch.rpm
Resolving download.postgresql.org (download.postgresql.org)... 217.196.149.55, 72.32.157.246, 147.75.85.69, ...
Connecting to download.postgresql.org (download.postgresql.org)|217.196.149.55|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 6636 (6.5K) [application/x-redhat-package-manager]
Saving to: ‘pgdg-redhat-repo-latest.noarch.rpm’

pgdg-redhat-repo-late 100%[=========================>]   6.48K  --.-KB/s    in 0s      

2021-10-05 07:15:02 (913 MB/s) - ‘pgdg-redhat-repo-latest.noarch.rpm’ saved [6636/6636]
```

#### repoファイルのインストール
↑でダウンロードしたrpmをインストールする
`/etc/redhat-release`ファイルへの依存関係を無視してインストールするため`--nodeps`オプションを付けてインストール

```console:
# rpm -Uvh --nodeps ./pgdg-redhat-repo-latest.noarch.rpm 
warning: ./pgdg-redhat-repo-latest.noarch.rpm: Header V4 DSA/SHA1 Signature, key ID 442df0f8: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:pgdg-redhat-repo-42.0-11         ################################# [100%]
```

この状態で`repolist`見るとOSのバージョンが`PostgreSQL 12 for RHEL/CentOS latest - x86_64`になっててインストールで失敗する

```console:
# yum repolist
Loaded plugins: priorities, update-motd, upgrade-helper
amzn-main                                                        | 2.1 kB  00:00:00     
amzn-updates                                                     | 3.8 kB  00:00:00     
https://download.postgresql.org/pub/repos/yum/9.5/redhat/rhel-latest-x86_64/repodata/repomd.xml: [Errno 14] HTTPS Error 404 - Not Found
Trying other mirror.
To address this issue please refer to the below knowledge base article 

https://access.redhat.com/articles/1320623

If above article doesn't help to resolve this issue please open a ticket with Red Hat Support.

https://download.postgresql.org/pub/repos/yum/9.5/redhat/rhel-latest-x86_64/repodata/repomd.xml: [Errno 14] HTTPS Error 404 - Not Found
Trying other mirror.
repo id                   repo name                                               status
amzn-main/latest          amzn-main-Base                                           5,934
amzn-updates/latest       amzn-updates-Base                                        6,428
epel/x86_64               Extra Packages for Enterprise Linux 6 - x86_64          12,581
hashicorp/latest/x86_64   Hashicorp Stable - x86_64                                  321
pgdg-common/latest/x86_64 PostgreSQL common RPMs for RHEL/CentOS latest - x86_64     326
pgdg10/latest/x86_64      PostgreSQL 10 for RHEL/CentOS latest - x86_64              980
pgdg11/latest/x86_64      PostgreSQL 11 for RHEL/CentOS latest - x86_64            1,080
pgdg12/latest/x86_64      PostgreSQL 12 for RHEL/CentOS latest - x86_64              659
pgdg95/latest/x86_64      PostgreSQL 9.5 for RHEL/CentOS latest - x86_64               0
pgdg96/latest/x86_64      PostgreSQL 9.6 for RHEL/CentOS latest - x86_64             942
repolist: 29,251
```

#### repo編集
このままだとyum installが上手くいかないので、yum.repos.dのファイルを編集する
$releaseverという変数にRHELやCentOSのバージョン数(7とか8)が入るらしいけど、EC2のAmazon Linuxだとsystem-releaseという文字列が入ってyum installが上手くいかない。
参考：[【CentOS7】yum の $releasever、$basearch と $infra を知る方法](https://oki2a24.com/2016/09/11/how-to-know-yum-releaserver-basearch-infra/)
置換する**6**はRHEL/CentOSのバージョン6という意味かな。6向けのバイナリを使えというパスになる。

```console:
# sed --in-place -e "s/\$releasever/6/g" /etc/yum.repos.d/pgdg-redhat-all.repo
```

バージョン6になってる

```console:
# yum repolist
Loaded plugins: priorities, update-motd, upgrade-helper
1277 packages excluded due to repository priority protections
repo id                  repo name                                          status
amzn-main/latest         amzn-main-Base                                            5,934
amzn-updates/latest      amzn-updates-Base                                         6,428
epel/x86_64              Extra Packages for Enterprise Linux 6 - x86_64     11,514+1,067
hashicorp/latest/x86_64  Hashicorp Stable - x86_64                                   321
pgdg-common/x86_64       PostgreSQL common RPMs for RHEL/CentOS 6 - x86_64         324+2
pgdg10/x86_64            PostgreSQL 10 for RHEL/CentOS 6 - x86_64                    980
pgdg11/x86_64            PostgreSQL 11 for RHEL/CentOS 6 - x86_64                  1,080
pgdg12/x86_64            PostgreSQL 12 for RHEL/CentOS 6 - x86_64                    659
pgdg95/x86_64            PostgreSQL 9.5 for RHEL/CentOS 6 - x86_64                317+88
pgdg96/x86_64            PostgreSQL 9.6 for RHEL/CentOS 6 - x86_64               822+120
repolist: 28,379
```

- `yum install`でエラーでハマる。
`systemd`が無いとエラーになるが、RHEL6ベースのAmazon Linux 1ではそりゃ無いよ。
- どうも調べたらPostgresql9までしかRHEL6ベースには入らないっぽい

リポジトリにpsqlクライアントのバージョン9が入ってるか確認

```console:
# yum search postgresql9|grep client
postgresql92.x86_64 : PostgreSQL client programs
                       : clients
                         : clients
postgresql93.x86_64 : PostgreSQL client programs
                       : clients
                         : clients
postgresql94.x86_64 : PostgreSQL client programs
                       : clients
                         : clients
postgresql95.x86_64 : PostgreSQL client programs
                       : clients
                         : clients
postgresql95-tcl.x86_64 : A Tcl client library for PostgreSQL
postgresql96.x86_64 : PostgreSQL client programs
                       : clients
                         : clients
postgresql96-tcl.x86_64 : A Tcl client library for PostgreSQL
```
#### postgresql9の最新版をインストール

```console:
# yum install postgresql96.x86_64
Loaded plugins: priorities, update-motd, upgrade-helper
1277 packages excluded due to repository priority protections
Resolving Dependencies
--> Running transaction check
---> Package postgresql96.x86_64 0:9.6.22-1.85.amzn1 will be installed
--> Processing Dependency: postgresql96-libs(x86-64) = 9.6.22-1.85.amzn1 for package: postgresql96-9.6.22-1.85.amzn1.x86_64
--> Processing Dependency: libpq.so.5()(64bit) for package: postgresql96-9.6.22-1.85.amzn1.x86_64
--> Running transaction check
---> Package postgresql96-libs.x86_64 0:9.6.22-1.85.amzn1 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

========================================================================================
 Package                 Arch         Version                  Repository          Size
========================================================================================
Installing:
 postgresql96            x86_64       9.6.22-1.85.amzn1        amzn-updates       4.3 M
Installing for dependencies:
 postgresql96-libs       x86_64       9.6.22-1.85.amzn1        amzn-updates       290 k

Transaction Summary
========================================================================================
Install  1 Package (+1 Dependent package)

Total download size: 4.6 M
Installed size: 17 M
Is this ok [y/d/N]: y
Downloading packages:
(1/2): postgresql96-libs-9.6.22-1.85.amzn1.x86_64.rpm            | 290 kB  00:00:00     
(2/2): postgresql96-9.6.22-1.85.amzn1.x86_64.rpm                 | 4.3 MB  00:00:00     
----------------------------------------------------------------------------------------
Total                                                       22 MB/s | 4.6 MB  00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Warning: RPMDB altered outside of yum.
** Found 1 pre-existing rpmdb problem(s), 'yum check' output follows:
pgdg-redhat-repo-42.0-11.noarch has missing requires of /etc/redhat-release
  Installing : postgresql96-libs-9.6.22-1.85.amzn1.x86_64                           1/2 
  Installing : postgresql96-9.6.22-1.85.amzn1.x86_64                                2/2 
  Verifying  : postgresql96-libs-9.6.22-1.85.amzn1.x86_64                           1/2 
  Verifying  : postgresql96-9.6.22-1.85.amzn1.x86_64                                2/2 

Installed:
  postgresql96.x86_64 0:9.6.22-1.85.amzn1                                               

Dependency Installed:
  postgresql96-libs.x86_64 0:9.6.22-1.85.amzn1                                          

Complete!
```

- インストール確認

```console:
# psql -V
psql (PostgreSQL) 9.6.22
```