LoginSignup
0
1

More than 3 years have passed since last update.

apk add --virtual で同じ名前の仮想パッケージを複数回実行してみる

Last updated at Posted at 2020-05-16

あまりapk add --virtualについての記事が見当らなかったのでメモ書き程度に書いてみる。

2020/06/20 修正

コメントを頂いた通り、apkのバージョンごとに挙動が異なるので追記修正しました。

alpine:3.10(apk:2.10.4)以降

同じ名前の仮想パッケージが複数回実行された場合、
初めにインストールしていたパッケージ群が パージ され、後に指定したパッケージ群がインストールされる。
追加上書きでなく丸々上書いているようだ。

apkのgitのこのあたりの変更でこの挙動になった模様。
パージする挙動の処理まで追いきれなったため断定できないが、後述する従来の挙動(addで仮想パッケージに追加する挙動)通りでは無い気がするので将来的に修正が入りそうな気がします。

挙動確認

  • まず仮想パッケージとしてvimを入れる
# apk add --virtual .test vim

fetch http://dl-cdn.alpinelinux.org/alpine/v3.11/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.11/community/x86_64/APKINDEX.tar.gz
(1/4) Installing xxd (8.2.0-r0)
(2/4) Installing lua5.3-libs (5.3.5-r2)
(3/4) Installing vim (8.2.0-r0)
(4/4) Installing .test (20200514.092303)
  • 同じ名前でbashを指定
# apk add --virtual .test --no-cache bash

fetch http://dl-cdn.alpinelinux.org/alpine/v3.11/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.11/community/x86_64/APKINDEX.tar.gz
(1/6) Installing bash (5.0.11-r1)
Executing bash-5.0.11-r1.post-install
(2/6) Upgrading .test (20200514.092303 -> 20200514.092335)
(3/6) Purging vim (8.2.0-r0)
(4/6) Purging xxd (8.2.0-r0)
(5/6) Installing cmake-bash-completion (3.15.5-r0)
(6/6) Purging lua5.3-libs (5.3.5-r2)
Executing busybox-1.31.1-r9.trigger
OK: 522 MiB in 126 packages

パッケージ群を管理している仮想パッケージが上書きされたあと、元の関連パッケージは丸々消えることがわかる。

所感

このあたりの動作を把握していなかったので、下記のように書いてしまって少しつまずいた。
パッケージが無いよと、スクリプト実行時にエラーが出るので原因究明時に手間取ることに...

2.10.4以降
RUN apk add --virtual .build --no-cache openblas-dev lapack-dev freetype-dev
# .buildの中身はhdf5-devだけになる
RUN apk add --virtual .build --no-cache -X http://dl-cdn.alpinelinux.org/alpine/edge/community hdf5-dev

testingなどのリポジトリを個別指定して入れる時(-Xオプション使用時)は別名の仮想パッケージを切るしかないって事か...

alpine:3.9(apk:2.10.3)

このバージョンだけ同じ名前で追加しようとしても、追加されずエラーも出ず素通りという挙動をする。

挙動確認

/ # apk --version
apk-tools 2.10.3, compiled for x86_64.
/ # apk add --virtual .test --no-cache bash
fetch http://dl-cdn.alpinelinux.org/alpine/v3.9/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.9/community/x86_64/APKINDEX.tar.gz
(1/6) Installing ncurses-terminfo-base (6.1_p20190105-r0)
(2/6) Installing ncurses-terminfo (6.1_p20190105-r0)
(3/6) Installing ncurses-libs (6.1_p20190105-r0)
(4/6) Installing readline (7.0.003-r1)
(5/6) Installing bash (4.4.19-r1)
Executing bash-4.4.19-r1.post-install
(6/6) Installing .test (0)
Executing busybox-1.29.3-r10.trigger
OK: 14 MiB in 20 packages
/ # apk add --virtual .test --no-cache vim
fetch http://dl-cdn.alpinelinux.org/alpine/v3.9/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.9/community/x86_64/APKINDEX.tar.gz
OK: 14 MiB in 20 packages
/ # vim
/bin/sh: vim: not found
/ # bash
bash-4.4#

所感

2.10.3(alpine:3.9)開発時に取り込まれたバグのようで、同名の仮想パッケージが存在している時にapk add --virtualをすると無視される。。
エラーが出ないので、原因究明が面倒臭いタイプ

alpine:3.8(apk:2.10.4)以前

自分が最初に想定していた、追加上書きの挙動をしてくれる。

挙動確認

/ # apk --version
apk-tools 2.10.1, compiled for x86_64.
/ # apk add --virtual .test --no-cache bash
fetch http://dl-cdn.alpinelinux.org/alpine/v3.8/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.8/community/x86_64/APKINDEX.tar.gz
(1/6) Installing ncurses-terminfo-base (6.1_p20180818-r1)
(2/6) Installing ncurses-terminfo (6.1_p20180818-r1)
(3/6) Installing ncurses-libs (6.1_p20180818-r1)
(4/6) Installing readline (7.0.003-r0)
(5/6) Installing bash (4.4.19-r1)
Executing bash-4.4.19-r1.post-install
(6/6) Installing .test (0)
Executing busybox-1.28.4-r3.trigger
OK: 13 MiB in 19 packages
/ # apk add --virtual .test --no-cache vim
fetch http://dl-cdn.alpinelinux.org/alpine/v3.8/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.8/community/x86_64/APKINDEX.tar.gz
(1/2) Installing lua5.3-libs (5.3.5-r2)
(2/2) Installing vim (8.1.1365-r0)
Executing busybox-1.28.4-r3.trigger
OK: 40 MiB in 21 packages
/ # vim
/ # bash
bash-4.4# 

所感

パッケージ数が増えていることも確認できるし、指定したバイナリもきちんと読み込めたことが確認できた。

0
1
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1