简述软件包管理系统

July 5th, 2011 no comment

四月份写的一篇blog,就差个结尾,今天补上。

软件包管理是个很大的话题,希望我能说清楚这事。

上周和运营的同事头一次开会讨论了一下我们游戏上线前要注意的事。当时提到了我们软件的更新问题,由于系统运营指定的CentOS linux系统,所以我当时就说使用系统的软件包管理器yum来做软件的发布,这么合理并且靠铺的一个方案当时就被否。理由是:yum这套东西太复杂,不好使,且我们没有统一的yum源服务器。要求我们用他们自己开发的一个package方案。我暂时不知道这套package方案是如何实现的,猜测估计就是tar出来文件,然后有一个安装的bash脚本。

软件包管理系统在*nix系统中有非常重要的意义。一个能够正常工作或者提供服务的平台一般需要数百甚至数千个软件包。包管理系统就是能协调好这些软件关系,并且方便增、删、查、升级的一套系统。

先从软件开发角度考虑,一个软件安装程序需要包含以下几方面内容:

  1. 程序运行所需要的可执行文件,库文件,资源文件。并把这些文件包装成一个文件方便存放和传输;
  2. 软件包需要有版本号,并且和版本控制中代码的tag有一定的对应;
  3. 软件包能够安装、删除、升级、降级;
  4. 上面的每个过程中的每个阶段都能执行shell脚本;
  5. 软件包对第三方库的依赖性必须能够体现并规范;
  6. 软件包安装后的各个文件必须有checksum信息以获知是否被修改;
  7. 软件包本身有checksum信息,以获知其是否是原生包(debian的secure apt保证了这点,详见以前的一篇blog);
  8. 需要有统一的网络接口、工具去更新和发布软件;
  9. 能对软件进行配置和维护,相当于dpkg-reconfigure;
  10. 级联的升级或者级联的降级;
  11. 需要有工具方便的创建软件包,并且搞定以上所有的事情。

能满足以上11点需求的软件包管理器,有能力无bug的短时间搞定么?觉悟起来用现成的yum吧。