首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问debian包的postinst脚本中的环境变量

访问debian包的postinst脚本中的环境变量
EN

Stack Overflow用户
提问于 2015-12-16 08:59:22
回答 3查看 5K关注 0票数 5

我已经制作了一个debian包,用于自动化oozie安装。postinst脚本基本上是一个shell脚本,它在安装包之后运行。我想访问这个脚本中的环境变量。我应该在哪里设置环境变量?

EN

回答 3

Stack Overflow用户

发布于 2015-12-21 13:13:10

根据您实际尝试完成的任务,将信息传递到包脚本的正确方法是使用Debconf变量。

简单地说,您可以添加一个debian/templates文件,如下所示:

代码语言:javascript
复制
Template: oozie/secret
Type: string
Default: xyzzy
Description: Secret word for teleportation?
 Configure the secret word which allows the player to teleport.

并将postinst脚本更改为如下所示

代码语言:javascript
复制
#!/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

在运行打包脚本之前,您可以使用oozie/secret的值对Debconf数据库执行preseed操作;然后,它将不会提示输入值。简单地做一些事情,比如

代码语言:javascript
复制
debconf-set-selections <<<'oozie oozie/secret string plugh'

为其预配置值plugh

另请参阅http://www.fifi.org/doc/debconf-doc/tutorial.html

无法保证安装程序在特定环境中运行,或者dpkg由特定用户调用,或者从用户完全可以操纵的环境中调用。在这些场景中,正确的打包需要健壮性和可预测性;还要考虑可用性。

票数 4
EN

Stack Overflow用户

发布于 2017-02-08 11:01:44

将以下代码添加到您的postinst脚本中:

代码语言:javascript
复制
#!/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.

仅运行dpkg -i之前的export YOUR_EVAR=...

不是推荐的方式,但它是紧凑、简单的,并且正是PO所要求的。

票数 2
EN

Stack Overflow用户

发布于 2018-08-09 00:04:54

在很长一段时间后回复。

实际上,我是作为sudo用户通过dpkg部署oozie自定义debian的。因此,为了能够访问这些环境变量,我必须实际对/etc/sudoers文件进行一些更改。我所做的更改是将文件中的每个环境变量名添加为

代码语言:javascript
复制
Defaults        env_keep += "ENV)VAR_NAME"

在此之后,我可以在postinst脚本中访问这些变量。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34302261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档