【问题标题】:debian package creating needed directories in preinstdebian 软件包在 preinst 中创建所需的目录
【发布时间】:2009-11-30 23:40:45
【问题描述】:

我有以下 debian 结构:

  • debian/usr/share/test
  • debian/usr/share/test/test
  • debian/usr/share/test/test/a
  • debian/usr/share/test/test/b

使用 dpkg-deb --build 构建软件包并使用 dpkg -i 安装它后,如果文件夹不存在,它似乎不会自动创建文件夹 test。我需要在 preinst 脚本中手动创建它们吗?

更新:问题是因为 preinst 有一个错误,所以解包没有机会发生。

劳伦特

【问题讨论】:

    标签: debian package dpkg


    【解决方案1】:

    看看我的一个例子here

    debian/DEBIAN 
    debian/usr/bin
    debian/usr/lib
    

    你有几个选择:

    1. 生成包(二进制包)之前用文件填充目录
    2. 构建一个 source 包,其中将调用 MAKE 来构建包并安装它。

    在第一种情况下,您不需要通过preinst 脚本创建目录:安装包时,包管理器将根据需要创建文件夹层次结构。

    在第二种情况下,您需要在install 阶段使用mkdir -p 创建文件夹层次结构。


    去年我经历了 3 种不同的 Debian 存储库打包方式,相信我,需要考虑的细节很多。一种解脱是结识 Launchpad 及其 PPA 发布流程。

    【讨论】:

    • 在我的例子中,它是一个二进制包。我的结构和你的一样,但是当我使用 dpkg -i 时,它不会解压缩任何文件或文件夹。
    • 大约有 8000 个源码包——你为什么不选择一个现有的简单的,看看它的作用?出于这个原因,我们曾经有一个简单的“hello”包作为工作示例。
    • 更新:问题是因为 preinst 有一个错误,所以解包没有机会发生。
    【解决方案2】:

    您需要在包中命名为 tmp 或与您在 debian/control 中列出的第一个包相同的包,具体取决于您选择的 debhelper 兼容模式的版本。

    例如来自debhelper 示例文件之一的调用:

    $(MAKE) prefix=`pwd`/debian/`dh_listpackages`/usr install
    

    你在这里缺少了一层间接性。

    【讨论】:

    • 查看操作方法,他们说要创建以下文件夹,例如: mkdir -p ./debian/usr/bin 然后 ./debian/DEBIAN/control 等...他们没有似乎在“debian”之前添加了包名。我错过了什么吗?
    • 如果我查看我的包的 data.tar.gz,我有 ./usr/share/test,如果我与其他 debian 包相比,这是预期的。问题是为什么 dpkg 在解压时不创建 /usr/share/test。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-06
    • 2011-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多