Solaris系统使用pkgadd安装包时能否读取外部环境变量或询问账号密码
Solaris pkgadd 安装过程读取环境变量或交互输入凭证的实现方案
该需求完全可以实现,核心依赖Solaris官方pkgadd规范内置的request脚本机制。
实现原理
pkgadd执行软件包安装流程时,会优先运行包内携带的request可执行脚本,该脚本支持两类操作:
- 读取当前shell环境下的所有预设环境变量
- 直接关联标准输入/输出和用户进行交互
你可以在该脚本内自定义优先级逻辑,优先读环境变量,变量不存在时再发起交互询问。
具体实现步骤
- 首先在你的软件包构建目录下新建名为
request的脚本,设置可执行权限为755 - 脚本内优先判断目标环境变量是否存在且非空,存在则直接取值,跳过交互流程
- 若未检测到预设环境变量,弹出终端提示要求用户输入用户名和密码,输入密码时建议关闭回显避免明文泄露
- 将最终得到的用户名、密码写入
request脚本第一个参数($1)指向的临时响应文件,后续的postinstall等安装脚本可以直接读取该文件内的变量使用
示例request脚本
#!/bin/sh # 优先读取预设环境变量 if [ -n "$PKG_INSTALL_USER" ]; then USERNAME="$PKG_INSTALL_USER" else echo "请输入服务运行用户名:" read USERNAME fi if [ -n "$PKG_INSTALL_PASSWD" ]; then PASSWORD="$PKG_INSTALL_PASSWD" else echo "请输入服务运行密码:" stty -echo read PASSWORD stty echo echo "" fi # 写入响应文件供后续安装流程调用 echo "USERNAME=$USERNAME" > $1 echo "PASSWORD=$PASSWORD" >> $1
使用方法
非交互安装场景:提前预设环境变量即可实现无人值守安装,执行命令参考:
export PKG_INSTALL_USER=admin PKG_INSTALL_PASSWD=yourpass && pkgadd -d ./your_package.pkg
交互安装场景:不用预设任何环境变量,执行pkgadd时会自动弹出输入提示。
注意事项
- 不要在任何安装日志、脚本打印输出中泄露密码明文
- 构建软件包时需确保
request脚本被正确注册到包的配置清单中,避免pkgadd识别不到
内容的提问来源于stack exchange,提问作者user3258979
相关产品推荐
相关产品推荐

