本质上,我想问的问题与 Solaris 10 上软件包部署的自动化有关。
具体来说,我在 tar 文件中有一组软件组件,它们在主机环境中提取和配置后作为守护进程运行。与任何服务器端软件包一样,我需要确保在提取和运行软件之前满足一系列先决条件。例如:
检查某些用户是否存在,以及他们是否与一个或多个用户组关联。如果不存在,则创建这些用户及其组关联。
检查目标应用程序文件夹是否存在,如果不存在,则使用组装包时定义的预配置路径值创建它们。
检查这些文件夹是否具有适合特定用户的访问控制级别和所有权。如果没有,则进行设置。
检查一组环境变量是否在 /etc/profile 中定义、指向预定义路径位置、添加到通用 $PATH 环境变量中,并最终导出到用户环境中。其他文件包括 /etc/services 和 /etc/system。
显然,手动对许多盒子(所讨论的目标)执行此操作可能会很慢并且容易出错。
我认为一个更好的选择是以某种方式使这个过程自动化。到目前为止,我已经考虑过以下选项,但出于某种原因放弃了它们。
1) 传统的 shell 脚本。我之前只对这些脚本进行过故障排除,对它们并没有太多经验。这些脚本将是我的最后手段。
2) 使用 pexpect 库分析系统命令输出的 Python 脚本。这是我的初始选择,因为目标 Solaris 环境已安装它。但是,我想确保我不会再重复做无用功 :P。
3) Ant 或 Gradle 脚本。它们可能是一种选择,因为这些框也启用了 Java 1.5,并且文件集抽象可能非常有用。但是,在处理用户和文件夹权限检查/设置时,它们可能会不足。
显然我不是第一个遇到这种情况的人,但我似乎找不到适合此目的的实用框架。如果有更好的方法来实现这一点,请告诉我。
感谢您的时间和帮助。
答案1
您可能希望为此使用变更自动化。例如 Puppet、Chef、cfengine、bcm2 或其他。
就我个人而言,过去三年我一直在 Solaris 上使用 Puppet,并且对这个决定非常满意。我们使用它来管理系统管理的各个方面:用户、文件、cron 作业、ZFS 文件系统、NFS 挂载、区域、服务(通过 SMF)等等。它非常有用。
Puppet SRV4 软件包提供程序可以工作,但它缺乏远程拉取文件的能力(例如,通过 HTTP)。您可以通过编写一个为您安装软件包的函数来解决此问题。如果软件包在本地可用(通过 NFS),则提供程序应该可以正常工作。
除了 Solaris 10,我们还使用相同的 Puppet repo 来管理我们的 Solaris Express 和 Debian Linux 系统。
我写了这篇文章一段时间,可能会有所帮助:http://mirrorshades.net/post/196593566