在 Alpine 中检查文件校验和

Checking File Checksum In Alpine

我在使用 Alpine 时遇到了这个奇怪的问题。我想检查 bash 控制台中文件的校验和。它在 CentOS 下工作,但在 Alpine 下不工作。哪里出错了?

在 CentOS 下

$ sha1sum /bin/tini
fa23d1e20732501c3bb8eeeca423c89ac80ed452  /bin/tini
$ echo "fa23d1e20732501c3bb8eeeca423c89ac80ed452 /bin/tini" | sha1sum -c -
/bin/tini: OK

高山下

$ sha1sum /bin/tini
fa23d1e20732501c3bb8eeeca423c89ac80ed452  /bin/tini
$ echo "fa23d1e20732501c3bb8eeeca423c89ac80ed452 /bin/tini" | sha1sum -c -
sha1sum: WARNING: 1 of 1 computed checksums did NOT match

能否尝试在校验和和路径之间添加 1 space(总共 2 个):

$ echo "fa23d1e20732501c3bb8eeeca423c89ac80ed452  /bin/tini" | sha1sum -c -

我试过 /bin/busybox:

# sha1sum /bin/busybox
71bdaf6e52759f7f277c89b694c494f472ca2dfb  /bin/busybox
# echo '71bdaf6e52759f7f277c89b694c494f472ca2dfb /bin/busybox' | sha1sum -c -
sha1sum: WARNING: 1 of 1 computed checksums did NOT match
# echo '71bdaf6e52759f7f277c89b694c494f472ca2dfb  /bin/busybox' | sha1sum -c -
/bin/busybox: OK

这个错误是因为 sha1sum 在用 -c 调用时期望它自己的输出作为输入并且它的输出使用 2 spaces.

我在 Alpine Linux v3.13 上安装 kubectl 时遇到了这个问题:

echo "$(<kubectl.sha256) kubectl" | sha256sum -c
sha256sum: WARNING: 1 of 1 computed checksums did NOT match

我的两部分修复:

  1. 默认 shell (ash) 以空换行响应 echo "$(<file.txt)" 而 bash 以文件内容响应(预期行为)。
  2. Alpine 的 sha256sum 版本需要在散列和文件名之间有两个 space(Ubuntu 接受一个 space)。
bash
echo "$(<kubectl.sha256)  kubectl" | sha256sum -c
kubectl: OK