1、软件包管理的内涵
习惯了Windows上安装软件的方式——下载安装包,双击运行,点击几次下一步后,软件就安装完了。我也是常年使用Windows,习惯了Windows的方式,却从来没有考虑过软件安装的内涵到底是什么。
我们可能都遇到过这种情况:Windows上软件卸载不完全后,磁盘里仍然残留各种文件与文件夹。虽然知道有残留,但是却不知道哪些是残留的,他们的的路径是什么。
其实软件包安装的内涵就是将软件包的各种文件存放到指定的文件夹中,也有修改系统的某些文件。想想也是,整个电脑系统中除了运行时内存中存有数据,其他的数据就只有以文件的方式存放在磁盘里。如果需要手动的将软件包的各种文件拷贝到目录,那么卸载的时候就需要再次手动将拷贝的文件删掉。这是多么麻烦的一件事!而且,如果是程序源码,还需要编译。可能安装的这个软件还有依赖的其他软件。
软件包管理的作用就是帮助你管理这些过程,rpm就是Linux上的一种软件包管理程序,它将软件安装到你的Linux系统上的时候,还将这些过程记录在自己的数据库中,在卸载软件的时候,根据数据库中的记录执行相反的操作,以这种方式,就可以很方便的管理软件的安装和卸载等过程。
2、rpm的功能
1、存储数据压缩
RPM具有软件包的基本功能——数据压缩存储,RPM 安装列表中的文件在按照某个指定的算法(如 gzip)压缩后,作为最终 RPM 文件的一个数据块,与其他控制信息存储进同一个文件中。最终所有的数据都存储在同一个 RPM 文件中。
2、文件安装
文件安装是软件包的一个基本功能,它将压缩的文件解压至目标操作系统上。安装过程中,还可能动态生成一些文件,并安装到系统中。并将这些过程记录在数据库中,在软件卸载的时候,就可以根据这些记录知道删除与修改哪些文件。
3、配置文件生成
配置文件既可能是预先写好的静态文件,也可能是根据安装环境动态生成的文件。
4、系统服务注册
使用 rpm 安装一些软件包,比如 apache,mysql-server 等,在安装完成后,目录 /etc/init.d/下会生成一个服务启动脚本文件,而且此服务还可能被加入到系统的自动启动服务中。
5、软件依赖检查
大多数程序都会依赖其他组件,比如数据库操作程序可能需要 libmysql 的支持。为了保证每个软件在安装后都能正常运行,在安装过程中,软件安装程序需要对该软件包所依赖的所有元素进行检查。
6、其他功能
RPM 还有一个重要功能就是对嵌入脚本的支持:它支持在安装软件或者卸载软件的过程中,执行用户预定义的指令。常用的脚本执行点如下:
pre install
post install
pre uninstall
post uninstall
pre/post install 表示在安装之前或之后;pre/post uninstall 表示在卸载之前或者之后。
除此之外,RPM 包还可以支持对源包进行数字签名,在安装时可以使用公钥验证 RPM 包的合法性等等。