【问题标题】:Debian package : where is the right place to put temporary installation files?Debian 软件包:放置临时安装文件的正确位置在哪里?
【发布时间】:2018-09-07 04:01:48
【问题描述】:

我正在尝试为 Debian 构建一个二进制包(使用 dpkg-deb --build),我需要将一些文件复制到目标机器中以使用 postinst 脚本完成安装(并在之后删除它们)。

但我不知道把它们放在哪里。

我试过/tmp/mypkg/bin/mypkgtmp//usr/share/mypkg/tmp。 但是 Lintian 对所有这些都产生了错误/警告:

这是一个包含一些二进制文件的目录,所以我唯一可以使用的地方似乎是/usr/bin/mh

但是/usr/bin/mh似乎和邮件处理有关(不是很清楚)。

在不产生 Lintian 错误或警告的情况下放置我的临时文件的正确位置是什么?

这是我的实际树:

.tmp
├── DEBIAN
│   ├── control
│   └── postinst
└── usr
    ├── bin
    │   ├── mypkg
    │   └── mh
    │       └── mypkgtmp
    │           ├── build
    │           │   └── lib.linux-x86_64-3.4
    │           │       ├── myClib.cpython-34m.so
    │           │       └── mytools.py
    │           └── setupCython.py
    └── share
        └── doc
            └── mypkg
                ├── changelog.gz
                └── copyright

谢谢。

【问题讨论】:

  • 只是为了理解,你是指二进制包中的临时文件,安装后应该删除,还是构建包的临时文件?
  • 也许你能解释一下什么样的临时文件。通常它可能会导致更多问题(如果是第一种情况)。安装必须是幂等的。随着软件包的删除或升级,各种 pre/post-install/remove 被调用。尽量避免使用临时文件:或者在构建时进行“计算”,或者安装支持文件。
  • 究竟是什么 lintian 错误?将包的根作为.tmp 也是非标准的。您应该使用包名- 版本。作为基础的隐藏文件是坏的。 (不确定所有工具都能很好地处理这个问题)。
  • .tmp 仅用于构建我的包。紧接着,我用好名字重命名它。
  • 我的临时文件是由 cython (myClib.cpython-34m.so) 生成的二进制文件和我想用 setup.py 安装的纯 python 文件 (mytools.py)。不应该有编译。只是一个副本,但由 python 管理。我认为这是个好方法。

标签: debian package dpkg lintian


【解决方案1】:

将它们保存在源目录中。也许你在那里创建了一个tmp。生成目标文件(.o)和其他中间文件并保存在那里。只是不要将它们放在输出目录$(DESTDIR) 中,这样它们就不会包含在包中。并且不要放在构建目录之外,以便构建工具将您的包与构建系统的其余部分隔离开来。

【讨论】:

  • 您的答案是 src 或 bin 包?我已经添加了我的包的树。我应该把 tmp 文件夹放在哪里?
  • 源码包由源码完成,可能未经修改。所以你应该没有临时文件或其他文件。如果你篡改了源,它就不再是一个源包。现在在您的问题中,您正在显示 DESTDIR(所以输出)。
  • 我这里暴露的树不是输出,而是dpkg-deb --build .tmp命令的输入
【解决方案2】:

如果文件只对postinst 脚本有用,或许您可以简单地将它们嵌入其中?此处的文档是一种在脚本中保存一组数据块的便捷方式(如果它们不是纯文本,则可能是 base64 编码或类似的)。

#!/bin/sh
set -e
t=$(mktemp -t -d mypostinst.XXXXXXXXXX) || exit
trap 'rm -rf "$t"' EXIT ERROR INT HUP TERM
cat <<\: >"$t"/somedata.txt
some
verbatim
text
:
base64 <<\: >"$t"/somebinary.dat
deadbeefc0ffeeman===
:

如果您的需求稍微复杂一些,也可以查看shar

【讨论】:

  • 感谢您的回答,但不希望进入这种复杂的解决方案。似乎与 mh 合作,但不认为这是正确的地方。
  • 用不相关的文件污染mh 命名空间肯定应该产生警告。
  • 我说的是应该,而不是它应该。
【解决方案3】:

您可以将文件放在/usr/lib/mypkg/ 中,即使它们在postinst 之后没有必要或无用,也可以将它们留在那里。

有一个(弱)提示,打包程序可能会选择方便地将其用于Policy section 9.1.1 中与体系结构无关和与体系结构相关的文件,尽管当然您的特定postinst 场景不包括在那里。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2013-03-07
  • 2016-06-13
  • 2016-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多