なにもわからない

気分で技術系の雑記を書きます

alpineのapkで古いpackageを指定してインストールする

(これはメモ的なアレです。内容の正しさなどはアレです)

たまに apk で指定バージョンのパッケージをインストールしたい時がある。 例えば VSCode で Remote Container を使っていて、プラグインを動かす用に python 3.5.x がほしい時(具体的には CodeLLDB )。

apk add specific version package とかで検索してみると、package-name>1.2.3package-name=1.2.3 でインストールできると書いてあるものの、実際に試してみるとパッケージが見つからない。

/ # apk add --no-cache python3=3.5
fetch http://dl-cdn.alpinelinux.org/alpine/v3.11/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.11/community/x86_64/APKINDEX.tar.gz
ERROR: unsatisfiable constraints:
  python3-3.5.6-r0:
    breaks: world[python3=3.5]

どうも試行錯誤してみた感じでは、--repository オプションを指定しない場合は v3.11 が使われていて、そもそも v3.11 内に古いパッケージが存在しなそうな挙動だった。 それと = はだいぶ厳格らしく、package-name=1.2.3 は通らず package-name=1.2.3-r12 まで書かないといけないらしい。

結論、 --repository で古いパッケージを含むリポジトリを指定すればよい。もしかしてブランチの指定方法があるんじゃないかと思ったけどなさそう。

apk add --no-cache --repository http://dl-cdn.alpinelinux.org/alpine/v3.5/main python3~=3.5

/etc/apk/repositories に足すのでも動きそうな気はする。

bash-5.0# cat /etc/apk/repositories
http://dl-cdn.alpinelinux.org/alpine/v3.11/main
http://dl-cdn.alpinelinux.org/alpine/v3.11/community

バージョンの指定方法はいくつかあって、この辺りは動きそう。

  • 厳密に書く: python3=3.5.6-r0
  • マイクロバージョンまで書く: python3~=3.5.6
  • マイナーバージョンまで書く: python3~=3.5

詳しくはこちら github.com