Linux软件管理平台设计与实现
上QQ阅读APP看书,第一时间看更新

前言

为什么要写这本书

在2011年以前,我一直从事软件开发工作,后来开始参与运维工作,一半运维,一半开发。我在将自己开发的程序部署到公司几万台服务器上的过程中遇到了一些RPM和yum使用上的问题,于是便花了很长时间对RPM和yum等软件管理工具进行了学习,对RPM的格式剖析、RPM的制作以及yum的使用、原理和详细配置等进行了总结,并将收获写成文章发布在网上,希望能帮到有同样需求的同行们。文章发布后不久,意外发现,对Linux环境下的RPM和yum感兴趣的同行竟然有这么多。因此,便计划对这块知识进一步学习,并进行整理,以期能帮到更多朋友。

碰巧在2012年,公司的三个子公司合并,各个子公司负责yum服务管理的同事由于离职或者转岗等原因,不再从事原来的yum维护工作,此事便交给我来负责。后来,部门又成立了软件配置统一规范化管理的项目,我也顺理成章地被安排来负责该项目。在经过了大半年的整合和改造后,公司的软件管理服务终于能够基本统一,使用同一套服务、同一套仓库、同一套配置,这样,Linux软件包的管理工作就变得轻松起来了(事实上,我们还有很多事情要做)。

2013年春节过后,由于个人岗位调整的原因,原来负责的软件管理平台整合和改造工作要交给别的部门来维护,为了不让学习到的知识和经验废弃,我便计划对这个项目中积累的知识和经验进行总结。而且在2012年这一年的时间中,几乎每天都会被同事的RPM和yum的使用问题“骚扰”,我和同事们也一直在尝试通过某种途径来减少这些问题的发生,比如通过培训分享的方式来对RPM、yum和公司的软件管理服务进行介绍,以提高部门中每个人解决RPM和yum问题的能力,从而减少系统管理员的工作量,提高部门工作效率。

当项目经验总结和日常问题压力这两个理由汇总到一起时,我便决定写一本书,对Linux环境下的软件管理方法进行介绍。首先,对RPM文件及SPEC文件等进行分析,以丰富读者在RPM方面的基础知识;另外,对RPM管理工具—yum,从原理到使用细节,再到常见问题以及插件等进行详细剖析,这部分可以说是Linux软件包管理的中高级话题,也算是对我之前提到的网上发布的那三篇文章的细化和扩展。我期望对RPM和yum感兴趣的学生、开发人员和从事运维工作的人员通过对这部分技术的学习,能够了解RPM和yum的本质和原理,进而帮助他们解决在实际工作中使用这些工具时遇到的大多数问题。

另外,在对软件管理平台进行改造时,我们的软件管理平台支持的服务器数量已经接近7万,这些机器分布在不同地域的不同城市中,处在不同的网络环境中,这个复杂的情况为我们平添了很多问题。不论是在技术方面,还是业务方面,我们都花费了不少时间和精力,最终才形成了一个能够支撑整个公司服务器集群的软件管理平台。可以说,这个软件管理平台和伴随这个项目总结的经验都来之不易,而且是弥足珍贵的,因此我决定通过书籍的方式来将这些经验和方案分享给广大的同行。

在上述的软件管理平台改造过程中,我通过和其他公司的朋友进行沟通了解到,在一些较大的软件或者互联网公司,软件管理平台仍然是一个很简易和初级的系统,大家对软件管理规范的概念都很淡漠。所以在本书的后半部分,我为同样从事软件管理工作的同行提供了一套方案,也是一份礼物,即从软件管理平台的最初模型开始,对我在实际工作中的经验和遇到的问题逐个进行剖析,在这个过程中总结经验、不断改造,最终形成了一套软件管理平台的设计方案。希望这个方案能够给同行企业或者感兴趣的读者提供参考。总之,我希望本书的内容能够帮助读者提高工作效率,当然更希望它能帮助同行的公司增加收益。

另外,关于Linux环境中软件管理平台设计方法的书籍,在市场上还鲜有出现,因此,笔者希望本书的出版,能够在图书领域和技术领域,都打开一个新的篇章,让我们的图书出版行业多一个软件管理平台的类目;也让我们的技术领域,多一个软件管理平台的研究方向。

以上就是本书撰写的初衷。

读者对象

本书的读者对象如下:

  • 对Linux环境下软件开发感兴趣的技术人员
  • 从事计算机系统管理的工作人员
  • 互联网公司技术部的运维人员
  • 对软件架构设计和优化感兴趣的工程人员
  • 计算机相关专业的高等院校学生

如何阅读本书

本书共分8章,按照讲述的内容和适应读者的不同层次,可以划分为三大部分:

第一部分为基础技术篇,包括第1~4章,介绍了RPM的概念、组织方式和制作方法,另外对yum服务进行了深入的分析。这部分的目的是为对软件开发感兴趣的读者在RPM和yum领域提供导引,为运维和系统管理人员提供指导,帮助这部分读者尽可能扫清在RPM和yum的使用和理解方面的疑问。

第二部分为问题分析和系统设计篇,包括第5章和第6章,结合企业中软件管理的现状,提出问题,然后从基本的系统开始,逐步解决问题、优化方案,最终形成一套软件管理平台的设计方案。这部分内容适合在企业中负责软件平台优化和系统服务管理的人员阅读。在阅读这部分内容时,从事运维/系统管理的读者大多会找到能与笔者产生的共鸣之处,或者会有一种“身临其境”、“似曾相识”的感觉,因为这部分所涉及的索引更新问题、多机房镜像问题、数据同步问题以及RPM包冲突问题等,都是Linux软件管理工作中最容易遇到的问题,而我们的讨论正是针对这些常见问题展开的。

第三部分为实现篇,包括第7章和第8章。如果读者想将本书中设计的软件管理平台应用到自己所在企业的环境中,可以参考这部分的内容进行详细设计和编码实现。

附录列举了RPM和yum在日常使用中经常会遇到的问题以及对应的解决方法。

勘误和支持

由于作者的水平有限,加之编写时间仓促,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正。如果大家有任何宝贵意见,可发送邮件到cmesoft@126.com或者duanjigang1983@gmail.com,期待您的真挚反馈。

另外,书中提到的示例代码和最终软件管理平台的部分代码,在https://github.com/duanjigang1983/lsmd上会提供下载和后续更新,欢迎读者朋友们跟进,并与我交流。您也可以到华章公司的网站下载相应的源代码,华章公司网站的网址为:http://www.hzbook.com

致谢

首先要感谢RPM和yum的开发者,没有他们的付出,就不会有RPM和yum这样优秀的工具产生,Linux系统下的包管理工作也不会像现在这样便利。

在本书定稿的前一天,也就是2013年7月10日,yum工具的开发者Seth Vidal先生因为车祸不幸去世,我们为计算机领域失去这位专家感到惋惜。虽然本书的内容远不能达到Seth Vidal先生对计算机领域所做贡献的高度,但是我仍希望本书能够和RPM、yum工具一起,在被读者阅读和使用时,能使他们想起曾经有一位伟大的开发者—Seth Vidal,为计算机行业做出了很大的贡献。

感谢参考文献中提及的所有文章或书籍的作者,正是有了这些作者无私的分享,我才能对RPM和yum技术进行全面的学习和研究。

还要感谢我所在公司的诸多同事:感谢于霆在运维方面对我的指导;感谢王波和杨家宁在系统管理方面对我的影响;感谢谢杰灵、李拓和刘轶在智能DNS技术方面为我提供的帮助;感谢赵立文和司加详在网络技术方面对我提供的支持;感谢陆严、王惠军和张雅群等在工作中对我的支持;感谢周琪凯等对本书出版的关注;感谢周末篮球小组中的李一鑫、杨旭、林杰和戴海军四位同事对本书出版的支持。

另外还要感谢ChinaUnix社区的周荣茂、白金、刘岐、王东洋、陈小玉、江均勇、方云麟和张飞对本书出版的支持。

感谢机械工业出版社华章公司的编辑杨福川老师和孙海亮老师在书籍编写过程中对我的帮助。

最后感谢我的家人对我的支持,感谢我的女朋友在生活中对我的关怀、包容和支持!

段继刚

2013年于杭州西溪