我该如何处理“解压档案失败...cpio:符号链接”?

我该如何处理“解压档案失败...cpio:符号链接”?

我遇到了一个问题。我正在将一个现有项目打包成 RPM。它构建得很好,但是当我运行

sudo yum localinstal --nogpgcheck <path to rpm>

我收到以下错误消息:

Error: unpacking of archive failed on file <path to symlink>;5656d545: cpio: symlink

RPM 将项目提取到目录中,然后latest通过执行以下操作更新现有的符号链接以指向它ln -sfn <app name and version>/ latest

谷歌在这个问题上几乎没有做出任何回应,所以我希望有更多经验的人可以提供帮助。

答案1

当 rpm 软件包拥有某个目录或文件,而磁盘上的文件/目录是符号链接时,就会发生这种情况。反之亦然。这是一个众所周知的问题。

您要么必须在安装/升级软件包之前手动删除符号链接,要么更改软件包以使其不拥有该文件。

答案2

我在使用 CentOS 7.6 和 Crystal 时也遇到了类似的问题。

Downloading packages:
crystal-0.27.2-1.x86_64.rpm                                                                                                              |  38 MB  00:00:02
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : crystal-0.27.2-1.x86_64                                                                                                                      1/1
Error unpacking rpm package crystal-0.27.2-1.x86_64
error: unpacking of archive failed on file /usr/share/crystal/src/lib_c/amd64-unknown-openbsd: cpio: rename
  Verifying  : crystal-0.27.2-1.x86_64                                                                                                                      1/1

Failed:
  crystal.x86_64 0:0.27.2-1

Complete!

我最终删除了有问题的整个路径:/usr/share/crystal/* 这解决了这个问题。

答案3

对我来说,当我有一个指向不存在的目录的符号链接时,就会发生这种情况;例如,我有一个指向的符号链接/opt//data//data/由于我在挂载驱动器时出现拼写错误,所以它不存在(/daat/如果你想知道的话)。

如果您的符号链接应该存在,请确保它指向有效位置。

答案4

我遇到了类似(但不同)的问题,由于这个问答是我在搜索时得到的第一个结果,所以我想在这里记录我的经历。

就我而言,rpm 的错误消息是:

Error: unpacking of archive failed on file /dir1/file;xxxxxxxx: cpio: link failed: Directory not empty

对我来说,/dir1/file是 RPM 包中另一个文件的硬链接;称之为/dir2/file

使用 strace,我了解了导致失败的事件顺序:

  • rpm 在包中创建目录
  • rpm 提取/dir2/file成功
  • rpm 调用linkat创建硬链接/dir1/file,但失败EXDEV(不允许跨设备链接)
  • rpm 删除已安装的内容,包括目录
  • 其中一个目录已经存在且包含内容,因此rmdir失败ENOTEMPTY
  • rpm 失败并显示上述错误消息

我试图在/dir1/dir2位于不同分区的系统上安装该软件包,导致EXDEV创建硬链接时失败。然而,rpm 并没有记录该失败,而是报告了rmdir在清理期间执行的后者的错误号。这似乎是 rpm 中的一个错误;在我的情况下,版本为 4.16.1.3。

相关内容