我制作了一个用于自动安装 oozie 的 debian 软件包。postinst 脚本基本上是一个 shell 脚本,在安装包后运行。我想访问此脚本中的环境变量。我应该在哪里设置环境变量?
问问题
5210 次
3 回答
4
根据您实际尝试完成的任务,将信息传递给包脚本的正确方法是使用Debconf变量。
简而言之,您添加一个debian/templates
类似这样的文件:
Template: oozie/secret
Type: string
Default: xyzzy
Description: Secret word for teleportation?
Configure the secret word which allows the player to teleport.
并将您的 postinst 脚本更改为类似
#!/bin/sh -e
# Source debconf library.
. /usr/share/debconf/confmodule
db_input medium oozie/secret || true
db_go
# Check their answer.
db_get oozie/secret
instead_of_env=$RET
: do something with the variable
您可以在运行打包脚本之前使用值预置 Debconf 数据库;oozie/secret
那么它不会提示输入值。只需做类似的事情
debconf-set-selections <<<'oozie oozie/secret string plugh'
用值预配置它plugh
。
另见http://www.fifi.org/doc/debconf-doc/tutorial.html
无法保证安装程序在特定环境中运行或dpkg
由特定用户调用,或从完全可以由用户操作的环境中运行。在这些情况下,正确的包装需要稳健性和可预测性;还要考虑可用性。
于 2015-12-21T05:13:09.673 回答
2
将此添加到您的 postinst 脚本中:
#!/bin/sh -e
# ...
pid=$$
while [ -z "$YOUR_EVAR" -a $pid != 1 ]; do
ppid=`ps -oppid -p$pid|tail -1|awk '{print $1}'`
env=`strings /proc/$ppid/environ`
YOUR_EVAR=`echo "$env"|awk -F= '$1 == "YOUR_EVAR" { print $2; }'`
pid=$ppid
done
# ... Do something with YOUR_EVAR if it was set.
仅export YOUR_EVAR=...
在 dpkg -i 运行之前。
不是推荐的方式,但它紧凑、简单,正是 PO 所要求的。
于 2017-02-08T03:01:44.293 回答
1
隔了很久才回复。
实际上,我是通过 dpkg 以 sudo 用户身份部署 oozie 自定义 debian。因此,要启用对这些环境变量的访问,我实际上必须在 /etc/sudoers 文件中进行一些更改。我所做的更改是将文件中的每个环境变量名称添加为
Defaults env_keep += "ENV)VAR_NAME"
在此之后,我能够在 postinst 脚本中访问这些变量。
于 2018-08-08T16:04:54.227 回答