内容简介
《linux软件管理平台设计与实现》是国内部关于软件管理平台设计与实现(针对大规模linux服务器集群)的著作,由淘宝软件开发工程师和系统运维工程师撰写,书中凝结了作者在淘宝运维一线积累的宝贵经验。不仅详细讲解了rpm和yum等软件管理工具的使用方法、技巧、原理和本质,还系统讲解了linux软件管理平台的规划、设计与具体实现。对于从事linux服务器管理和运维的工程师来说,本书将是不可多得的至宝。
全书共8章,在逻辑上分为三个部分:第一部分(第1~4章)为基础技术篇,详细介绍了rpm的概念、组织方式和制作方法,另外对yum服务进行了深入的分析,目的是为对软件开发感兴趣的读者在rpm和yum领域提供导引,为运维和系统管理人员提供指导,帮助读者在rpm/yum的使用和理解方面扫清障碍;第二部分(第5~6章)为问题分析和系统设计篇,结合企业中软件管理的现状,提出问题,然后从基本的系统开始,逐步解决问题,优化方案,形成一套软件管理平台的设计方案,适合在企业中负责软件平台优化和系统服务管理的人员阅读;第三部分(第7~8章)为实现篇,如果读者想将本书中设计的软件管理平台应用到自己所在企业的环境中,可以参考这部分的内容进行详细设计和编码实现。附录列举了rpm和yum在日常使用中经常会遇到的问题以及对应的解决方法。
目录
前言
第1章rpm认知与格式剖析
1.1软件包的演变史
1.2rpm软件包基础知识
1.2.1rpm软件包的功能
1.2.2rpm实现引子
1.3rpm格式剖析
1.3.1从协议说起
1.3.2rpm格式总览
1.3.3rpm之lead
1.3.4headerstructure
1.3.5rpm之signature和header
1.3.6rpm之archive
1.4rpm解析例程
1.5本章小结
第2章rpm制作与spec详解
2.1rpm生成要素
2.2rpm制作实例
2.2.1环境准备
2.2.2源码准备
2.2.3spec文件编写
2.2.4生成rpm包
2.3rpmbuild介绍
2.3.1概述
2.3.2使用说明
2.4spec文件解析
2.4.1spec组成元素
2.4.2spec元素解析
2.5本章小结
第3章深入理解和使用yum
3.1rpm运行机制浅析
3.1.1rpm数据库和packages文件
3.1.2rpm日志和定时任务
3.1.3yum/rpm阻塞现象
3.2yum的出现
3.2.1rpm面临的问题
3.2.2yum的构成
3.3yum服务搭建实例
3.4软件包的索引机制
3.4.1createrepo命令
3.4.2索引文件
3.5本地缓存
3.5.1缓存中的内容
3.5.2索引中的sqlite文件
3.6配置详解
3.6.1全局配置
3.6.2repo配置
3.6.3插件配置
3.7本章小结
第4章yum的插件机制
4.1插件介绍
4.1.1插件的概念
4.1.2插件的调用方式
4.2yum的插件
4.2.1yum插件的组织方式
4.2.2yum插件调用情景
4.3yum插件开发注意事项
4.3.1函数接口规范
4.3.2插件私有选项读取方法
4.3.3插件类型
4.4再议仓库优先级
4.5插件开发与实例分析
4.5.1view_hook插件
4.5.2downloadonly插件
4.5.3fastestmirror插件
4.6本章小结
第5章企业软件管理现状与规划
5.1企业软件管理特点
5.1.1异地多机房
5.1.2服务器数量多
5.1.3软件数量多
5.1.4os版本较多
5.1.5服务高可用
5.1.6网络环境复杂
5.2问题总结
5.2.1软件个数过多
5.2.2rpm冲突
5.2.3开发测试包和线上包
5.2.4不同rhel版本支持
5.2.5单点问题
5.2.6跨机房访问带来的带宽问题
5.2.7大量客户端引起的网络瓶颈
5.2.8异地机房灾备
5.3软件仓库规划之路
5.3.1软件仓库划分
5.3.2redhat仓库分支规划
5.3.3第三方包仓库规划
5.3.4仓库结构
5.3.5测试包和线上包管理
5.4本章小结
第6章软件管理平台设计
6.1软件发布环节
6.1.1组成要素
6.1.2软件发布设计
6.1.3软件模型
6.2索引更新设计
6.2.1更新效率问题
6.2.2解决方案
6.2.3软件工作模型
6.3构建高可用索引服务器
6.3.1软件发布概述
6.3.2读写分离的必然性
6.3.3改进后的软件模型
6.4加入镜像机制
6.4.1镜像服务器问题分析
6.4.2解决方案
6.4.3改进后的软件模型
6.5加入缓存机制
6.5.1缓存服务器的出现
6.5.2搭建缓存服务器
6.5.3改进后软件模型
6.6镜像与缓存的选择
6.6.1镜像与缓存的搭建原则
6.6.2新机房中镜像与缓存的搭建实现
6.7智能dns和多机房容灾
6.7.1多机房容灾的必要性
6.7.2解决方案
6.7.3软件模型
6.8节点数据同步优化
6.8.1问题分析
6.8.2解决方案
6.9软件管理平台模型
6.10本章小结
第7章平台实现梗概
7.1平台实现约定
7.2机器角色与职能
7.2.1打包发布服务器
7.2.2索引服务器
7.2.3镜像服务器
7.2.4缓存服务器
7.2.5访问客户端
7.3角色实例化
7.3.1结构图
7.3.2中心机房结构图
7.3.3镜像机房结构图
7.4本章小结
第8章平台具体实现
8.1软件包制作工具mkpkg
8.1.1概述
8.1.2完整sp
摘要与插图
前言为什么要写这本书
在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万,这些机器分布在不同地域的不同城市中,处在不同的网络环境中,这个复杂的情况为我们平添了很多问题。不论是在技术方面,还是业务方面,我们都花费了不少时间和精力,才形成了一个能够支撑整个公司服务器集群的软件管理平台。可以说,这个软件管理平台和伴随这个项目总结的经验都来之不易,而且是弥足珍贵的,因此我决定通过书籍的方式来将这些经验和方案分享给广大的同行。
在上述的软件管理平台改造过程中,我通过和其他公司的朋友进行沟通了解到,在一些较大的软件或者互联网公司,软件管理平台仍然是一个很简易和初级的系统,大家对软件管理规范的概念都很淡漠。所以在本书的后半部分,我为同样从事软件管理工作的同行提供了一套方案,也是一份礼物,即从软件管理平台的模型开始,对我在实际工作中的经验和遇到的问题逐个进行剖析,在这个过程中总结经验、不断改造,形成了一套软件管理平台的设计方案。希望这个方案能够给同行企业或者感兴趣的读者提供参考。总之,我希望本书的内容能够帮助读者提高工作效率,当然更希望它能帮助同行的公司增加收益。
另外,关于Linu