Alpine Linux で .tar.zx
が解凍・展開できない
Docker の Alpine イメージに最新版の
shellcheck
をインストールしようとしました。しかし、ダウンロードした.tar.zx
形式のアーカイブ・ファイルを解凍・展開しようとするとNo such file or directory
エラーが出ます。でも、ファイルは確かにあるのです。いや、本当に。
TL; DR (今北産業)
-
xz
コマンドが入っていないのでNo such file or directory
と叱られます。 -
xz
コマンドが入っていないので、当然exec
(実行)できないのでエラーになります。 -
apk add --no-cache xz
でインストールします。(xz
のスペルに注意)
TS; DR (xz-utils
なんてなかった)
tarも入ってる
$ which tar
/bin/tar
エラー内容の例
#8 0.467 Install shellcheck
#8 0.471 TEMP PATH: /tmp/tmp.mnPaFm TEMP FILE: /tmp/tmp.mnPaFm/shellcheck-latest.linux.x86_64.tar.xz
#8 0.485 Connecting to github.com (xxx.xxx.xxx.xxx:xxx)
#8 0.814 Connecting to github-releases.githubusercontent.com (xxx.xxx.xxx.xxx:xxx)
#8 1.183 saving to '/tmp/tmp.mnPaFm/shellcheck-latest.linux.x86_64.tar.xz'
#8 1.386 shellcheck-latest.li 100% |********************************| 1350k 0:00:00 ETA
#8 1.386 '/tmp/tmp.mnPaFm/shellcheck-latest.linux.x86_64.tar.xz' saved
#8 1.389 tar (child): xz: Cannot exec: No such file or directory // <- ここ
#8 1.389 tar (child): Error is not recoverable: exiting now
#8 1.390 tar: Child returned status 2
#8 1.390 tar: Error is not recoverable: exiting now
よく確認もせず apk add xz-utils
したら、そんなパッケージはないと叱られます。「んなこたーない」と、Alpine 本家のパッケージ一覧を検索したら出て来ました。xz
だけで良かった。
- xz | edge | Packages @ pkgs.alpinelinux.org
apk add --no-cache xz
「"alpine" tar xz: Cannot exec: No such file or directory
」でググっても apt
や apt-get
の情報ばかりで、Alpine の情報がすぐに出てこなかったので、自分のググラビリティとして。
おまけ (shellcheck を Alpine Docker に入れるワンライナー)
shellcheckをAlpineのDockerにインストールするワンライナー
RUN echo "Install shellcheck" \
&& name_file_arch="shellcheck-latest.linux.$(uname -m).tar.xz" \
&& url_download="https://github.com/koalaman/shellcheck/releases/download/latest/${name_file_arch}" \
&& path_dir_tmp=$(mktemp -d) \
&& path_file_arch="${path_dir_tmp}/${name_file_arch}" \
&& wget -P "${path_dir_tmp}" "$url_download" \
&& tar x -v -f "$path_file_arch" -C "$path_dir_tmp" \
&& cp "${path_dir_tmp}/shellcheck-latest/shellcheck" "${GOPATH:?Undefined}/bin/shellcheck" \
&& shellcheck --version \
&& rm -rf "${path_dir_tmp:?Undefined}"