编译和维护应用程序?

  1. 你用什么configuration格式编译,为什么?

    示例(您不必以示例的forms回复,但请注明您的目录设置):

    <Layout MyPersonalizedLayout> prefix: /usr exec_prefix: ${prefix} bindir: ${prefix}/bin sbindir: ${prefix}/sbin libdir: ${prefix}/lib/application_name libexecdir: ${prefix}/lib/application_name/modules installbuilddir: ${prefix}/lib/application_name/build mandir: ${prefix}/man sysconfdir: /etc/application_name includedir: ${prefix}/include/application_name localstatedir: /var runtimedir: ${localstatedir}/run/application_name logfiledir: ${localstatedir}/log/application_name </Layout> 
  2. 在重新编译或升级应用程序之前,您考虑采取哪些步骤以及执行什么操作?

  3. 你如何跟踪你上次用来编译应用程序的所有configuration选项?

  4. 你是否定期从configuration文件备份? 多久 ?

  5. 你有一个特殊/不同的升级系统,所以你可以保持最后的工作应用程序,直到新的准备推出?

  6. 您是否通常在将其编译到生产服务器之前对其进行testing,在此之前您有什么考虑?


我不是一个使用yum,apt-get等安装pipe理器的人,而我确实相信他们对于一些我喜欢的应用程序来说我有自己的控制和可能性是非常好的,所以我会想知道每个人如何威胁这一点。

如果这个问题得到更多的3个答案,我会把它作为一个社区维基,直到那时我要求你不要把它成为一个

我倾向于使用主要脚本和源来标准化我的系统版本。 其他人通常喜欢使用configurationpipe理工具,并从源代码创build自己的软件包,以发布本地软件包pipe理器。 如果你正确地标准化你的构build,这些方法在很大程度上提供了相同的结果,而且它们只是不同的做事方式。

我仍然使用系统包和本地系统构build实用程序。 对于RHEL,Kickstart对于初始构build是绝对必要的。 对于常见的用户级工具,我倾向于默认使用包。 我只从源编译主服务器angular色。 例如:数据库,Web服务器,代理服务器,负载均衡器等等。

A1:我希望尽可能遵循文件系统层次结构标准 。

答:这是一个复杂的话题。 如果升级需要升级库,其他软件也可能需要这些库。 构buildangular色的所有核心要求我倾向于按源代码编译。 图书馆我经常会在构build之间共享,并重新编译针对它们编译的任何软件,因为我很less进行静态编译。 如果您的更改经过testing并正确进行生产,您可以将风险降至最低。

A3:configuration选项通常在构build时适用于所有服务器。 如果是独特的configuration,比如Web服务器集群上的特定的VirtualHost,我会在Revision Control System中维护这些configuration文件。 在以编程方式构build服务器之后,将完成系统清单以进行健全性检查并configuration最佳手动处理的任何选项。 您也可以使用configurationpipe理系统来帮助您,但取决于您的构build标准化程度如何,可能会使其过时。

A4:是的。 所有configuration文件的每晚备份是唯一的。

A5:升级系统主要是embedded到初始脚本中的逻辑,并在其周围包装脚本。 这允许升级作为构build的一部分被维持。 有时,在bash和pipe道中使用for循环的一组更简单的脚本通过ssh进行更改。 这个想法是为了所有的变化首先得到适当的标准化。

A6:在升级到生产之前,所有更改都将在testing环境中进行testing和validation。 所有预期的function应该被validation是可操作的。

老实说,我可以根据你的问题写一本关于这个主题的书。 你基本上是问如何正确地构build,标准化和维护生产环境。 我的回答并不详尽,所有方法都有基本的标准。 您可能会从“ 系统和networkingpipe理实践 ”一书中build立的基础中受益。

我也就这个问题写了其他的答案。 也可以看看:

在多个服务器上pipe理应用程序,或PXE与cfEngine / Chef / Puppet

使用源代码自动化服务器设置

你如何跟踪你上次用来编译应用程序的所有configuration选项?

这取决于我如何构build应用程序。 如果我正在构build一个Debian软件包,我将存储如果在SVN中的debian /文件夹的内容。

如果我构build安装没有包pipe理器,我将构build一个脚本或一个生成文件,并将其存储在SVN中。

你是否定期从configuration文件备份?

SVN存储库每天都进行备份。

您是否通常在将其编译到生产服务器之前对其进行testing,在此之前您有什么考虑?

我几乎总是testing,但我究竟如何testing取决于应用程序和它是如何。

我为我使用的软件构buildSRPM,然后将其备份。 这样,我有一个无限可重现的方法,干净地构build我在任何系统上使用的任何代码。