alpine linuxへ古いバージョンのパッケージをインストールする

## 概要

alpine linux便利で、最近dockerのベースOSとして使い始めたんですが、特定のバージョンや、過去の古いバージョンのパッケージが見つからない（あるいはインストールできない）事が多々あります。

そこで、少し調べてみたので備忘録的にメモで残しておきます。

## バージョンを指定する

そのままなんですが、指定できるみたいです。最初に見つけた記事でした。

 - [linux - How to install a specific package version in Alpine? - Super User] (http://superuser.com/questions/1055060/how-to-install-a-specific-package-version-in-alpine)
 - [How to install a specific package version in Alpine and Docker? | Today I learned] (https://til.codes/how-to-install-a-specific-package-version-in-alpine-and-docker/)

ただ、やってみたんですが思った感じで古いパッケージをインストールすることができず・・・。

```
bash-4.3# apk add --update 'postgresql<9.3' --no-cache
fetch http://dl-cdn.alpinelinux.org/alpine/v3.4/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.4/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.4/community/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.4/community/x86_64/APKINDEX.tar.gz
ERROR: unsatisfiable constraints:
  postgresql-9.5.4-r0:
    breaks: world[postgresql<9.3]
bash-4.3# apk add --update postgresql=9.3 --no-cache
fetch http://dl-cdn.alpinelinux.org/alpine/v3.4/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.4/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.4/community/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.4/community/x86_64/APKINDEX.tar.gz
ERROR: unsatisfiable constraints:
  postgresql-9.5.4-r0:
    breaks: world[postgresql=9.3]
```

## apkファイルをダウンロードしてインストールする

次に見つけた方法は、

 - [Index of /alpine/](http://dl-3.alpinelinux.org/alpine/)

からapkファイルをダウンロードしてきて、

 - [installation - How to install .apk on Alpine Linux like .deb in Debian using dpkg - Super User](http://superuser.com/questions/468348/how-to-install-apk-on-alpine-linux-like-deb-in-debian-using-dpkg)

にある方法で直接インストールする方法です。やってみました。

まずは、

http://dl-3.alpinelinux.org/alpine/v3.2/main/x86_64/

からpostgre9.3を探します・・・ありました。

http://dl-3.alpinelinux.org/alpine/v3.0/main/x86_64/postgresql-9.3.11-r0.apk

wgetでダウンロードします。

```
bash-4.3# cd /tmp/
bash-4.3# wget http://dl-3.alpinelinux.org/alpine/v3.0/main/x86_64/postgresql-9.3.11-r0.apk
Connecting to dl-3.alpinelinux.org (74.117.189.115:80)
postgresql-9.3.11-r0 100% |********************************************************************************************************************************************************************************************|  5001k  0:00:00 ETA
bash-4.3#
```

インストールします

```
bash-4.3# apk add --allow-untrusted postgresql-9.3.11-r0.apk --no-cache
fetch http://dl-cdn.alpinelinux.org/alpine/v3.4/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.4/community/x86_64/APKINDEX.tar.gz
(1/6) Installing db (5.3.28-r0)
(2/6) Installing libsasl (2.1.26-r7)
(3/6) Installing libldap (2.4.44-r1)
(4/6) Installing libpq (9.5.4-r0)
(5/6) Installing postgresql-client (9.5.4-r0)
(6/6) Installing postgresql (9.3.11-r0)
Executing busybox-1.24.2-r11.trigger
OK: 52 MiB in 37 packages
bash-4.3#
```

確認します。

```
bash-4.3# su postgres
/tmp $ postgres --version
postgres (PostgreSQL) 9.3.11
/tmp $
```

postgresqlの9.3を入れれました。

## /etc/apk/repositoriesを編集する

直接ダウンロードしなくても、repositoryを書き換えればできるんですね。。恥ずかしい。

```
bash-4.3# cat /etc/apk/repositories
# http://dl-cdn.alpinelinux.org/alpine/v3.4/main
# http://dl-cdn.alpinelinux.org/alpine/v3.4/community
http://dl-cdn.alpinelinux.org/alpine/v2.7/main
bash-4.3# apk search --update postgresql
fetch http://dl-cdn.alpinelinux.org/alpine/v2.7/main/x86_64/APKINDEX.tar.gz
collectd-postgresql-5.4.1-r1
postgresql-doc-9.3.10-r0
postgresql-contrib-9.3.10-r0
postgresql-client-9.3.10-r0
freeradius3-postgresql-3.0.10-r0
lua-dbi-postgresql-0.5-r3
freeradius-postgresql-2.2.9-r0
qt-postgresql-4.8.5-r2
acf-postgresql-0.7.0-r0
postgresql-dev-9.3.10-r0
postgresql-9.3.10-r0
bash-4.3#
```