it-swarm-ja.com

古いバージョンのNode.jsをインストールすると、Alpine apkが「満足できない制約」を報告するのはなぜですか?

古いバージョンの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にインストールするにはどうすればよいですか?

3
Matthew Adams

それは正しいです。残念ながら、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

7
robwdux

残念ながら、Alpine-Linux Package Managementは、利用可能な新しいバージョンがある場合、古いパッケージを削除します。正確なバージョンの再現可能なイメージが必要なため、DockerでAlpine Linuxを使用するのは困難です。

全体の概要については、この 記事 を参照してください。提供されている2つのソリューション:独自のミラーを作成し、アクセスし続けたいパッケージの特定のバージョンをホストする(おそらく努力する価値はない)、または古いバージョンを落とさないUbuntuなどの別のベースイメージを使用するパッケージ(現代のパッケージ管理システムから直感的に予想されるとおり)。

そして、Dockerファイルを更新して、それらのパッケージの最新バージョンを使用することもできますが、同じ状況に再び遭遇するのは時間の問題だと思います。本番システム用に構築している場合は、スケーラブルではありません。

5
Govind Rai

以下を使用して、以前のアルパインリリースの特定のバージョンを使用できます。アルペンエッジでは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
0
vim