本书是国内首部关于软件管理平台设计与实现(针对大规模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软件包的演变史2
- 1.2RPM软件包基础知识3
- 1.2.1RPM软件包的功能3
- 1.2.2RPM实现引子6
- 1.3RPM 格式剖析7
- 1.3.1从协议说起7
- 1.3.2RPM格式总览8
- 1.3.3RPM之lead9
- 1.3.4header structure11
- 1.3.5RPM之signature和header14
- 1.3.6RPM之archive18
- 1.4RPM解析例程19
- 1.5本章小结21
- 第2章RPM制作与SPEC详解22
- 2.1RPM生成要素23
- 2.2RPM制作实例23
- 2.2.1环境准备24
- 2.2.2源码准备25
- 2.2.3SPEC文件编写25
- 2.2.4生成RPM包26
- 2.3rpmbuild介绍30
- 2.3.1概述30
- 2.3.2使用说明30
- 2.4SPEC文件解析31
- 2.4.1SPEC组成元素32
- 2.4.2SPEC元素解析32
- 2.5本章小结58
- 第3章深入理解和使用yum59
- 3.1RPM运行机制浅析60
- 3.1.1RPM数据库和Packages文件61
- 3.1.2RPM日志和定时任务64
- 3.1.3yum/rpm阻塞现象65
- 3.2yum的出现66
- 3.2.1RPM面临的问题66
- 3.2.2yum的构成68
- 3.3yum服务搭建实例69
- 3.4软件包的索引机制72
- 3.4.1createrepo命令73
- 3.4.2索引文件78
- 3.5本地缓存84
- 3.5.1缓存中的内容84
- 3.5.2索引中的SQLite文件86
- 3.6配置详解87
- 3.6.1全局配置88
- 3.6.2repo配置92
- 3.6.3插件配置97
- 3.7本章小结97
- 第4章yum的插件机制98
- 4.1插件介绍99
- 4.1.1插件的概念99
- 4.1.2插件的调用方式99
- 4.2yum的插件100
- 4.2.1yum插件的组织方式100
- 4.2.2yum插件调用情景101
- 4.3yum 插件开发注意事项104
- 4.3.1函数接口规范104
- 4.3.2插件私有选项读取方法105
- 4.3.3插件类型105
- 4.4再议仓库优先级107
- 4.5插件开发与实例分析108
- 4.5.1view_hook插件108
- 4.5.2downloadonly插件110
- 4.5.3fastestmirror插件113
- 4.6本章小结118
- 第5章企业软件管理现状与规划119
- 5.1企业软件管理特点120
- 5.1.1异地多机房120
- 5.1.2服务器数量多121
- 5.1.3软件数量多121
- 5.1.4OS版本较多121
- 5.1.5服务高可用122
- 5.1.6网络环境复杂122
- 5.2问题总结123
- 5.2.1软件个数过多123
- 5.2.2RPM冲突123
- 5.2.3开发测试包和线上包124
- 5.2.4不同RHEL版本支持124
- 5.2.5单点问题124
- 5.2.6跨机房访问带来的带宽问题124
- 5.2.7大量客户端引起的网络瓶颈125
- 5.2.8异地机房灾备125
- 5.3软件仓库规划之路125
- 5.3.1软件仓库划分126
- 5.3.2redhat仓库分支规划128
- 5.3.3第三方包仓库规划133
- 5.3.4最终仓库结构134
- 5.3.5测试包和线上包管理136
- 5.4本章小结137
- 第6章软件管理平台设计138
- 6.1软件发布环节140
- 6.1.1组成要素140
- 6.1.2软件发布设计140
- 6.1.3软件模型142
- 6.2索引更新设计143
- 6.2.1更新效率问题143
- 6.2.2解决方案145
- 6.2.3软件工作模型147
- 6.3构建高可用索引服务器148
- 6.3.1软件发布概述148
- 6.3.2读写分离的必然性149
- 6.3.3改进后的软件模型149
- 6.4加入镜像机制150
- 6.4.1镜像服务器问题分析150
- 6.4.2解决方案151
- 6.4.3改进后的软件模型152
- 6.5加入缓存机制153
- 6.5.1缓存服务器的出现153
- 6.5.2搭建缓存服务器154
- 6.5.3改进后软件模型156
- 6.6镜像与缓存的选择157
- 6.6.1镜像与缓存的搭建原则157
- 6.6.2新机房中镜像与缓存的搭建实现158
- 6.7智能DNS和多机房容灾159
- 6.7.1多机房容灾的必要性159
- 6.7.2解决方案160
- 6.7.3软件模型161
- 6.8节点数据同步优化162
- 6.8.1问题分析162
- 6.8.2解决方案164
- 6.9软件管理平台最终模型164
- 6.10本章小结165
- 第7章平台实现梗概166
- 7.1平台实现约定167
- 7.2机器角色与职能169
- 7.2.1打包发布服务器169
- 7.2.2索引服务器172
- 7.2.3镜像服务器174
- 7.2.4缓存服务器175
- 7.2.5访问客户端176
- 7.3角色实例化177
- 7.3.1全网结构图178
- 7.3.2中心机房结构图179
- 7.3.3镜像机房结构图180
- 7.4本章小结181
- 第8章平台具体实现182
- 8.1软件包制作工具mkpkg183
- 8.1.1概述183
- 8.1.2完整SPEC文件方式184
- 8.1.3模版SPEC文件方式188
- 8.2发布工具pkg-release192
- 8.3索引更新程序repobuilder196
- 8.4同步服务端程序rsync198
- 8.5同步客户端程序yumclone199
- 8.6yumcache缓存服务200
- 8.7初始化RPM包repoutils205
- 8.8更多功能207
- 8.9本章小结210
- 附录yum/RPM常见问题解决方案 211
- 参考文献215