如何根据使用setup.py安装RPM的位置定义将在脚本中设置的变量?

时间:2015-12-09 21:51:36

标签: rpm setup.py

我正在尝试在将放置在多台计算机上的脚本中设置IP地址。我使用setup.py将脚本打包在RPM中(使用脚本作为入口点),并使用yum在这些机器上安装RPM。我希望IP地址变量基于RPM安装的机器。

其他系统可能会从安装位置提取脚本,但我需要将IP地址保留为安装RPM的计算机。

如果这没有意义,我会尝试列出步骤:

  1. my_scriptipaddress变量需要设置为 机器安装在
  2. my_script打包在my.rpm
  3. my.rpm使用yum安装在计算机A上导致my_script 放置为/usr/bin/my_script(此时my_script 应该将IP地址直接写入my_script并存储 在ipaddress
  4. 机器B将脚本复制到使用
  5. 在安装期间有没有办法在脚本中设置变量?

    我不必使用setup.py,如果需要,我可以切换到使用makefile / spec文件设置来构建RPM。

2 个答案:

答案 0 :(得分:0)

在脚本中对变量进行硬编码是不好的做法。您应该将其存储在config中,脚本应该解析配置。

然后你会在spec文件中找到:

Requires(post): gawk
Requires(post): iproute

%install
mkdir -p %{buildroot}%{_sysconfdir}/yourconfig
touch %{buildroot}%{_sysconfdir}/yourconfig

%post
ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print "IP="$2}' | cut -f1  -d'/' > /etc/yourconfig 

%files
%config(noreplace) %{_sysconfdir}/yourconfig

答案 1 :(得分:0)

您可能希望将其作为以某种方式解析ip addr list输出的脚本,而不是将其存储在文件中。然后你可以拥有你的智能"在一个地方,如果由于某种原因IP发生变化,您将无需重新安装RPM。

另一个优点是您可以继续为其添加智能,例如你可能想要过滤掉VM接口,home,unroutables等。