【问题标题】:"No such file or directory" while installing a .deb package安装 .deb 包时“没有这样的文件或目录”
【发布时间】:2014-11-20 17:05:38
【问题描述】:

我对 .deb 包有一个非常奇怪的行为。

当我尝试使用 dpkg -i package.deb 安装时,我收到此错误:

iPadAir:/tmp root# dpkg -i packagename.deb
(Reading database ... 4239 files and directories currently installed.)
Preparing to replace packagename 0.0.0-0 (using packagename.deb) ...
Unpacking replacement packagename ...
dpkg: error processing packagename.deb (--install):
unable to create `PACKAGENAME/AviarySDKResources.bundle/AviaryContentPackCompiledDatabase.sqlite': No such file or directory
dpkg-deb: subprocess paste killed by signal (Broken pipe: 13)
Errors were encountered while processing:
 packagename.deb

但 .deb 文件包含不同的路径! 正确的路径是 /Library/Application Support/PACKAGENAME:

iPadAir:/tmp root# dpkg-deb -c packagename.deb
drwxr-xr-x dok/staff         0 2014-11-20 12:46 ./
drwxr-xr-x dok/staff         0 2014-11-20 12:46 ./Library/
drwxr-xr-x dok/staff         0 2014-11-20 12:46 ./Library/Application Support/
drwxr-xr-x dok/staff         0 2014-11-20 12:46 ./Library/Application Support/PACKAGENAME/
drwxr-xr-x dok/staff         0 2014-11-20 12:46 ./Library/Application Support/PACKAGENAME/AviarySDKResources.bundle/
-rw-r--r-- dok/staff    184320 2014-11-20 12:46 ./Library/Application Support/PACKAGENAME/AviarySDKResources.bundle/AviaryContentPackCompiledDatabase.sqlite

使用调试(1100,因为我只需要文件系统输出)我遇到了奇怪的情况:

iPadAir:/tmp root# dpkg -D1110 -i packagename.deb
D000010: ensure_pathname_nonexisting `/var/lib/dpkg/tmp.ci'
(Reading database ... 4239 files and directories currently installed.)
[....]
[All directories are correctly processed and created...]
[....]
D000010: tarobject ti->Name=`./Library/Application Support/PACKAGENAME/AviarySDKResources.bundle/AviaryColorPalatte.plist' Mode=644 owner=501.20 Type=48(-) ti->LinkName=`' namenode=`/Library/Application Support/PACKAGENAME/AviarySDKResources.bundle/AviaryColorPalatte.plist' flags=2 instead=`<none>'
D000100: setupvnamevbs main=`/Library/Application Support/PACKAGENAME/AviarySDKResources.bundle/AviaryColorPalatte.plist' tmp=`/Library/Application Support/PACKAGENAME/AviarySDKResources.bundle/AviaryColorPalatte.plist.dpkg-tmp' new=`/Library/Application Support/PACKAGENAME/AviarySDKResources.bundle/AviaryColorPalatte.plist.dpkg-new'
D000100: tarobject nonexistent
D000010: ensure_pathname_nonexisting `/Library/Application Support/PACKAGENAME/AviarySDKResources.bundle/AviaryColorPalatte.plist.dpkg-new'
D000010: ensure_pathname_nonexisting `/Library/Application Support/PACKAGENAME/AviarySDKResources.bundle/AviaryColorPalatte.plist.dpkg-tmp'
D000100: tarobject NormalFile[01] open size=479
D000100: tarobject new - no backup
D000100: tarobject done and installed
D000010: tarobject ti->Name=`PACKAGENAME/AviarySDKResources.bundle/AviaryContentPackCompiledDatabase.sqlite' Mode=644 owner=501.20 Type=48(-) ti->LinkName=`' namenode=`/PACKAGENAME/AviarySDKResources.bundle/AviaryContentPackCompiledDatabase.sqlite' flags=2 instead=`<none>'
D000100: setupvnamevbs main=`/PACKAGENAME/AviarySDKResources.bundle/AviaryContentPackCompiledDatabase.sqlite' tmp=`/PACKAGENAME/AviarySDKResources.bundle/AviaryContentPackCompiledDatabase.sqlite.dpkg-tmp' new=`/PACKAGENAME/AviarySDKResources.bundle/AviaryContentPackCompiledDatabase.sqlite.dpkg-new'
D000100: tarobject nonexistent
D000010: ensure_pathname_nonexisting `/PACKAGENAME/AviarySDKResources.bundle/AviaryContentPackCompiledDatabase.sqlite.dpkg-new'
D000010: ensure_pathname_nonexisting `/PACKAGENAME/AviarySDKResources.bundle/AviaryContentPackCompiledDatabase.sqlite.dpkg-tmp'
dpkg: error processing packagename.deb (--install):
 unable to create `PACKAGENAME/AviarySDKResources.bundle/AviaryContentPackCompiledDatabase.sqlite': No such file or directory
D000010: cu_installnew `/PACKAGENAME/AviarySDKResources.bundle/AviaryContentPackCompiledDatabase.sqlite' flags=2
D000100: setupvnamevbs main=`//PACKAGENAME/AviarySDKResources.bundle/AviaryContentPackCompiledDatabase.sqlite' tmp=`//PACKAGENAME/AviarySDKResources.bundle/AviaryContentPackCompiledDatabase.sqlite.dpkg-tmp' new=`//PACKAGENAME/AviarySDKResources.bundle/AviaryContentPackCompiledDatabase.sqlite.dpkg-new'
D000100: cu_installnew not restoring
D000100: unlinkorrmdir `//PACKAGENAME/AviarySDKResources.bundle/AviaryContentPackCompiledDatabase.sqlite.dpkg-new' rmdir No such file or directory
D000010: cu_installnew `/Library/Application Support/PACKAGENAME/AviarySDKResources.bundle/AviaryColorPalatte.plist' flags=52
D000100: setupvnamevbs main=`//Library/Application Support/PACKAGENAME/AviarySDKResources.bundle/AviaryColorPalatte.plist' tmp=`//Library/Application Support/PACKAGENAME/AviarySDKResources.bundle/AviaryColorPalatte.plist.dpkg-tmp' new=`//Library/Application Support/PACKAGENAME/AviarySDKResources.bundle/AviaryColorPalatte.plist.dpkg-new'

如您所见,dpkg 尝试在“根”目录而不是“/Library/Application Support”中创建目录 PACKAGENAME。 我试图重建我的 debian 包,但没有任何改变(是的,debian 包在 tar 存档中有正确的路径)。

有人可以帮我吗?

很多东西

PS:即使你看到 iPadAir,我也在 ubuntu 机器上尝试了相同的 dpkg 命令。同样的错误:(

【问题讨论】:

    标签: linux theos dpkg


    【解决方案1】:

    经过数周的研究,我终于发现我使用的 dpkg-deb (1.13.25) 有错误版本。更新到最新版本(目前为 1.14.25)后,所有错误都消失了!

    【讨论】:

      【解决方案2】:

      如果有人因为遇到同样的问题而停下来:

      dpkg-deb: error: unable to create temporary directory: No such file or directory

      这可能是因为无法正确访问 /tmp 文件夹。它在服务器上被意外删除,因此dpkg-deb 没有地方存储临时文件。

      所以只要恢复它:

      mkdir /tmp
      chmod 1777 /tmp
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-06
        • 2018-02-15
        相关资源
        最近更新 更多