2016-03-20 08:45:08 +0000 2016-03-20 08:45:08 +0000
102
102

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

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

現在私が持っているものは以下の通りです。

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

どうやらこれは結果が非決定的なものになってしまうので、良くない考えだと思います。代わりに、イメージをビルドした時点でどのバージョンのgitがインストールされているかに依存します。

正しい方法は何ですか?

updatedupgradeaddapkにどのバージョンを使用するかを指示しなければならないと思いますが、どうすればいいのでしょうか?

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

つまり。npm を経由して 0x6& をインストールできれば、実行できるのですが。

npm install git@1.9.2

(または私が欲しいバージョン) を実行できるようになります。これに相当するものは、Alpine Linuxでは何でしょうか?

回答 (5)

89
89
89
2016-03-29 14:25:32 +0000

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

# 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

alpine パッケージリポジトリの “edge” ブランチのパッケージをピン留めしないでください。( pkgs.alpinelinux.org/packages で “edge” をクリックして、使用している alpine イメージのバージョンに変更し、再度 “search” をクリックしてください)。

17
17
17
2016-03-25 08:30:23 +0000

現在のところ、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
1
1
2020-02-14 21:42:45 +0000

alpine パッケージを apk で固定するための構文は apk add packageName==x.y.z です。

ただし、 docker イメージ に alpine パッケージを固定する場合は、 イメージにマッチする特定のバージョンを使用し、edge ブランチ を避けるように注意しなければなりません。

alpine パッケージは https://pkgs.alpinelinux.org/packages で見ることができます。 残念ながら、これはデフォルトで **edge ブランチになります。

https://pkgs.alpinelinux.org/packages から、欲しいパッケージの名前を入力し、使用しているアルパインイメージのバージョンに合わせて、edge からのブランチを変更してくださいArch (アーキテクチャ) を設定してから search を押してください。(アーキテクチャがわからない場合は、コンテナを実行して uname -m と入力してください。)

これで、安全に固定できるパッケージの *安定版 のみが表示されます。パッケージを別のバージョンに固定すると、パッケージがalpineパッケージリポジトリから取り消されてしまい、Dockerfileがある日突然動かなくなることがあります。

例:

FROM alpine:3.3
RUN apk update && apk upgrade
RUN apk add --no-cache \
  git==2.8.6-r0 \
  bash==4.3.42-r6 \
  python3==3.5.1-r0
1
1
1
2020-02-26 16:02:56 +0000

ヴラド・フロロフはすでに答えを出しています。私はdockerソリューションを書いています。私はv3.8のリポジトリからいくつかのパッケージを追加しようとしていました。

  • 古いアーカイブ http://dl-cdn.alpinelinux.org/alpine/ を参照して、あなたのソフトウェアの特定のリポジトリのバージョンを取得します。
  • リポジトリのバージョンを取得したら、そのバージョンを docker ファイルに追加する
  • リポジトリからパッケージの正確なバージョンを指定する
1
1
1
2018-08-21 17:55:01 +0000

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

と同じディレクトリにpackagerとしてビルドします。私の例では、既存のDockerイメージ上でrootとしてこれを行う必要がありました。

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

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

apk add python-dev

--allow-untrusted の部分を削除する方法はよくわかりませんが、私の場合はこの手順でうまくいきました。