古いバージョンのNode.js(4.4.4)をAlpineにインストールしようとしています。これが私のコマンドです:
apk update
apk add nodejs-lts=4.4.4-r0
実行すると、エラーが発生します(Alpine:3.4 Dockerイメージを使用しているため、rootとして実行しています)。
/ # apk update
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
v3.4.6-64-Gd029d25 [http://dl-cdn.alpinelinux.org/Alpine/v3.4/main]
v3.4.6-33-g38ef2d2 [http://dl-cdn.alpinelinux.org/Alpine/v3.4/community]
OK: 5977 distinct packages available
/ # apk add nodejs-lts=4.4.4-r0
ERROR: unsatisfiable constraints:
nodejs-lts-4.6.0-r0:
breaks: world[nodejs-lts=4.4.4-r0]
特定の古いバージョンのパッケージをapk
にインストールするにはどうすればよいですか?
それは正しいです。残念ながら、4.4.4は使用できません。
独自のパッケージミラーとパッケージビルドを制御しない限り、パッケージバージョンを明示的にしないでください。使用中のアルパインリリース用にパッケージシステムで処理できるようにしてください。
Alpine 3.4の場合、使用できるのは4.6.0のみです。 nodejs-ltsのオンラインAlpine 3.4 x86_64パッケージを検索
あなたがそうしたいと思っているなら、ここにパッケージのソースがあり、選択した特定のバージョンをビルドするために変更します。
アルパインにはWikiページがあります: アルパインパッケージの作成 。
「nodejs-lts」パッケージ名は廃止されていることに注意してください。
extends = "nodejs-lts = $ pkgver"#後方互換性のため
replaces = "nodejs-current nodejs-lts"#下位互換性のためのnodejs-lts
残念ながら、Alpine-Linux Package Managementは、利用可能な新しいバージョンがある場合、古いパッケージを削除します。正確なバージョンの再現可能なイメージが必要なため、DockerでAlpine Linuxを使用するのは困難です。
全体の概要については、この 記事 を参照してください。提供されている2つのソリューション:独自のミラーを作成し、アクセスし続けたいパッケージの特定のバージョンをホストする(おそらく努力する価値はない)、または古いバージョンを落とさないUbuntuなどの別のベースイメージを使用するパッケージ(現代のパッケージ管理システムから直感的に予想されるとおり)。
そして、Dockerファイルを更新して、それらのパッケージの最新バージョンを使用することもできますが、同じ状況に再び遭遇するのは時間の問題だと思います。本番システム用に構築している場合は、スケーラブルではありません。
以下を使用して、以前のアルパインリリースの特定のバージョンを使用できます。アルペンエッジではalia-lib-dev
が1.1.7-r0に設定されていますが、ここではアルパイン3.8から1.1.6-r0に強制されています。
apk add --no-cache --update-cache --repository http://nl.alpinelinux.org/Alpine/v3.8/main alsa-lib-dev=1.1.6-r0