首页 > 解决方案 > 安装 unison 时 Linux shell 脚本抛出错误

问题描述

尝试在运行 Ubuntu 16.04 的 AWS EC2 实例上设置Facebook CTF实例,并在进行快速设置时遇到以下错误。

xz: (stdin): File format not recognized
tar: Child died with signal 13
tar: Error is not recoverable: exiting now
curl: (23) Failed writing body (390 != 16384)

跟踪错误以在 /extra/lib.sh 中运行,其中 install_union 正在从 /extra/provision.sh 调用

function dl_pipe() {
  local __url=$1
  curl --retry 5 --retry-delay 15 -sSL "$__url"
}

function install_unison() {
  cd /
  dl_pipe "https://www.archlinux.org/packages/extra/x86_64/unison/download/" | sudo tar Jx
}

URL 链接到我可以直接下载的 tar.zst 文件,但不清楚为什么 shell 脚本不能。想法?

标签: linuxshell

解决方案


该脚本可以下载它,但假定它不是。

(GNU)的J标志tar尝试使用xz预先解析文件来解压缩文件。但该文件实际上zstd并没有xz压缩。因此xz无法识别格式。

看起来 Arch Linux 的软件包已经切换到使用zstd而不是前xz一段时间:https ://www.phoronix.com/scan.php?page=news_item&px=Arch-Linux-Pacman-Zstd-Near

但问题是为什么你(或脚本)想要在 Ubuntu 上安装 Arch Linux 包。应该有一个适用于 Ubuntu 的 Unison软件包。尝试仅使用它。

或者,如果您(或脚本)坚持使用 Arch Linux 软件包,请尝试为 zstd 安装 Ubuntu 软件包(或克隆https://github.com/facebook/zstd并自己编译)并更改行有问题

dl_pipe "https://www.archlinux.org/packages/extra/x86_64/unison/download/" | zstd -d | sudo tar x

或者更改脚本中的 URL,使其指向仍使用xz压缩的(可能较旧的)包。


推荐阅读