web-dev-qa-db-ja.com

Alpineに特定のパッケージバージョンをインストールするにはどうすればいいですか?

Alpine LinuxをベースにしたDockerイメージを構築するためのDockerfileがあります。今度はこのDockerfileの一部としてパッケージをインストールする必要があります。

現在私は持っています:

RUN apk update && \
    apk upgrade && \
    apk add git

結果は非決定的なので、どうやらこれは悪い考えです。代わりに、それは私がイメージを構築した時点、どのバージョンのgitがインストールされようとしているかに依存します。

これを行う正しい方法は何ですか?

updatedupgradeaddのどのバージョンを使用するのかを指示する必要があると思いますが、どうすればよいでしょうか。

私はapkがリポジトリの固定をサポートしていることを見ましたが、リポジトリを固定するのではなくパッケージを固定したいので、それは私が望んでいることではありません(少なくともそう思う)。

言い換えれば、gitnpm経由でインストールできれば、私は実行することができるでしょう:

npm install [email protected]

(または私が欲しいどんなバージョンでも)。 Alpine Linuxのこれと同等のものは何ですか?

77
Golo Roden

あなたはこのような "スティッキー"バージョンを設定することができます:

# Both are equal
apk add packagename=1.2.3-suffix
apk add 'packagename<1.2.3-suffix'

指定されたバージョンまでパッケージをアップグレードします。あなたはその後安全に使用することができます…

apk upgrade

すべてのパッケージをアップグレードしますが、バージョンのあるパッケージはそのバージョンのままになります。 最小バージョンを設定するには、単に…を使ってください。

apk add "packagename>1.2.3-suffix"

パッケージが見つからない場合は、AlpineパッケージのUIに表示されますが、ソース/パッケージデータベースを更新してください。

apk update

パッケージリポジトリはここで見つけることができます

https://pkgs.alpinelinux.org/packages
66
kaiser

現在、Alpine Linuxの公式リポジトリから任意の古いバージョンのパッケージをインストールする方法はありません。あなたが達成できる最善のことは、以前のリリースのリポジトリを使うことです。

# cat /etc/Alpine-release
3.3.3

# echo 'http://dl-cdn.alpinelinux.org/Alpine/v3.2/main' >> /etc/apk/repositories

# apk update
fetch http://dl-cdn.alpinelinux.org/Alpine/v3.3/community/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/Alpine/v3.3/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/Alpine/v3.2/main/x86_64/APKINDEX.tar.gz

# apk add bash==4.3.33-r0
(1/1) Updating pinning bash (4.3.33-r0)
OK: 13 MiB in 17 packages

# apk add bash==4.3.42-r3
(1/2) Upgrading bash (4.3.33-r0 -> 4.3.42-r3)
Executing bash-4.3.42-r3.post-upgrade
(2/2) Purging ncurses5-libs (5.9-r1)
Executing busybox-1.24.1-r7.trigger
OK: 13 MiB in 16 packages
13
Vlad Frolov

私はtestingリポジトリを使っていたからです。私は自分でコピーを作った。ステップ:

パッケージの詳細に行きます。例:

https://pkgs.alpinelinux.org/package/Edge/testing/armhf/watchman

コミットをクリックし、APKBUILDファイルのリンクをクリックし、メニューの "Log"をクリックしてAPKBUILDファイルのコミットログを取得します。次に、APKBUILDファイルのコミットを選択してダウンロードします。例:

https://git.alpinelinux.org/cgit/aports/tree/testing/watchman/APKBUILD?id=63f5e7d295659a855709901ce22a3e5f40fce455

ビルドツールをインストールします。

apk -U add Alpine-sdk

rootユーザーではない必要があるので、パスワードを使用してpackagerユーザーを作成します。

adduser -D packager && addgroup packager abuild
passwd packager

それからAPKBUILDファイルと同じディレクトリにpackagerとしてそれを構築します。

su - packager
abuild-keygen -a -i
abuild -r

エラーを見つけて依存関係をインストールする必要があるかもしれません。私の例では、rootとして私の既存のDockerイメージにこれをする必要がありました:

apk add python-dev

packagerとしてビルドが成功したら、rootとしてインストールします。

apk add /home/packager/packages/<something...>/watchman-4.7.0-r0.apk --allow-untrusted

--allow-untrusted部分を削除する方法がわからないが、手順は私のために働いた。

1
s12chung