Alpineに特定のパッケージバージョンをインストールする方法は?


90

DockerfileAlpine LinuxベースのDockerイメージを作成する必要があります。ここで、この一部としてパッケージをインストールする必要がありますDockerfile

現在私は持っています:

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

結果は非決定的であるため、どうやらこれは悪い考えです。代わりに、イメージをビルドする時点、gitインストールされているバージョンに依存します。

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

私がお伝えしていることを推測しupdatedupgradeそしてaddどのバージョンが使用することを、私はこれをどのように行うのですか?

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

言い換えると、をgit介してインストールできる場合npm、私は実行できるでしょう:

npm install git@1.9.2

(または私が持ちたいバージョン)。Alpine Linuxでこれに相当するものは何ですか?

回答:


79

次のように「スティッキー」バージョンを設定できます。

# 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で表示できますが、sources / packageデータベースを更新します。

apk update

パッケージリポジトリは次の場所にあります

https://pkgs.alpinelinux.org/packages

これは機能しますか?このスレッドから、それが実際に何もしていないようです:forum.alpinelinux.org/forum/general-discussion/...
トラヴィスReederの

2
@TravisR こちらのAlpine APKドキュメントをご覧ください
カイザー

私の場合、高山3.7から高山3.6にダウングレードするのに役立ちました!
DUzun

センデルチルダ範囲もapk add ansible~=2.4.1意味どおりに機能し>=2.4.1 <2.5.0ます。jubianchi.github.io/semver-checkをチェックして、独自の範囲をテストしてください。
マイクD

利用可能なパッケージのリストを含むリポジトリpkgs.alpinelinux.org/packagesは、私にとって最も役に立ちました。
エゲル

16

現在、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

1

testingリポジトリを使用していたからです。私は自分のコピーを作成することになりました。手順:

パッケージの詳細に移動します。例:

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

コミットをクリックし、APKBUILDファイルのリンクをクリックし、メニューの[ログ]をクリックして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

次にpackager、APKBUILDファイルと同じディレクトリにビルドします。

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

エラーを見つけて依存関係をインストールする必要がある場合があります。私の例では、既存のDockerイメージでroot次のようにこれを行う必要がありました。

apk add python-dev

ビルドに成功しpackagerたら、root次のようにインストールします。

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

--allow-untrusted部品の取り外し方法はわかりませんが、手順はうまくいきました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.