我使用 fakeroot v1.12.4 进行打包和提取RHEL-6.4。我有两台不同的服务器,我使用 tar v1.23 压缩文件。其中一台服务器上的压缩失败,并出现以下错误:
tar: ./isolinux/etc/modprobe.d/blacklist.conf: Cannot open: Not a directory
tar: Exiting with failure status due to previous errors
如果我检查此文件的文件类型(作为普通用户),它会说这是一个 ASCII 文件:
girishp@~$ file ./isolinux/etc/modprobe.d/blacklist.conf
isolinux/etc/modprobe.d/blacklist.conf: ASCII English text
girishp@~$
但是如果我在 fakeroot 环境中检查文件类型,它会说它是目录:
+ file ./isolinux/etc/modprobe.d/blacklist.conf
./isolinux/etc/modprobe.d/blacklist.conf: directory
我用来压缩的命令是:
tar -czf /home/users/girishp/tarfiles/mytar.tgz .
使用*
而不是.
tar -czf /home/users/girishp/tarfiles/mytar.tgz *
我比较了两台机器的环境变量,环境没有区别。如果我使用sudo
而不是fakeroot
,它工作正常。strace
oftar
说它正在尝试使用O_DIRECTORY
选项打开文件。
open("./isolinux/etc/modprobe.d/blacklist.conf", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = -1 ENOTDIR (Not a directory)
我试图取消设置以下所使用的一些环境变量fakeroot
:
unset LD_LIBRARY_PATH
unset LD_PRELOAD
Tar 可以很好地完成这一点。
为什么这个文件在fakeroot环境中显示为目录?
答案1
已将 fakeroot 更新至 v1.20.2-1,更新 fakeroot 后不再出现问题。