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}"