软件安装包管理


linux中,软件安装包的管理和windows是很不一样的.

软件包分类

linux下,软件包分为 源码包和二进制包(如 .rpm, 类似windows 上的 .exe 文件).

源码安装包特点

优点:开源,如果有足够的能力,可以修改源码
缺点:步骤多, 安装时间长, 而且一旦报错新手很难解决

二进制包特点

二进制包分类: 
DPKG包: 主要用于Debian 和 unbantu中.
RPM包:  由Red Hat 公司开发的,很多linux都在用,包括Centos, SuSE等.
优点: 包管理系统简单,只通过几个命令就可以实现包的安装,升级,查询和卸载; 安装速度比源码包安装快得多.
缺点: 经过编译,不再可以看到源代码;功能选择不如源码包灵活; 依赖性的处理很繁琐.

软件包选择建议:

源码包:如果服务是给大量客户端提供访问的,建议使用源码包,源码包效率高;
RPM包: 如果程序是给少量用户访问,或者本地使用的,建议RPM 包,因为RPM管理方便。

RPM包依赖性

树形依赖: a -- > b -- > c
环形依赖: a -- > b -- > c -- > a
解决环形依赖的方法:直接同时安装这几个包.
模块依赖: 安装的时候,提示函数库缺失.
解决模块依赖:去www.rpmfind.net 中, 输入这个函数库的名字,去找到它在哪个文件里, 然后下载并安装这个文件即可.
但是即使 有这个网站可以找到模块依赖, 人手动来解决模块依赖也是一件很麻烦的事情.
为此, centos 推出了 yum  来直接在线安装, 我们通过yum 来连接 官方的仓库, 直接安装依赖和软件. (缺点是需要联网) 

RPM包 安装

RPM 包命名规则

httpd-2.2.15-15.e16.centos.1.i686.rpm
httpd 软件包名
2.2.15-15 软件版本
15 软件发布的次数
e16 软件发行商
i686 适合的硬件平台, noarch是没有硬件限制
rpm  rpm包的拓展名

包全名和包名的区别

包全名: 操作未安装的软件包,要使用包全名, 而且需要注意绝对路径,要么用绝对路径安装,  要么去到包所在的目录下进行安装.
包名: 操作已安装的软件包, 则使用包名即可.系统会生产RPM 包的数据库(/var/lib/rpm/), 而且在任意路径下操作已经安装的软件包.

RPM 包安装

rpm - ivh 包全名
注意,一定要是包全名
选项: 
    -i   install 安装
    -v   显示更详细的信息(verbose)
    -h   打印#显示安装进度(hash)
    --nodeps   不检测依赖性安装(没意义,了解即可)
    --replacefiles  替换文件安装. 如果安装软件包,可是包中部分文件已经存在,那么正常安装就会报错"某文件已经存在",通过这个选项,可以覆盖安装.
    --replacepkgs   替换软件包安装. 也就是如果安装了,就重复安装一次.
    --force         强制安装.不管是否已经安装,都重新安装,是 --replacefiles 和--replacepkgs 的综合.
    --test          测试安装.不会实际安装, 只是检测一下依赖性.
    --perfix        指定安装路径(不建议,一般都是用默认路径安装)

服务启动

centos 下的服务启动
centos6 中,用service 服务器名 start|stop|restart|status
centos7 中, 则是用systemctl 替换了service , systemctl start|stop|restart|status  服务名

非centos 的,如何启动服务?

用rpm 安装的阿帕奇 举例

/etc/rc.d/init.d/httpd start|stop|restart|status #这是centos6 的
如果是centos7 以上的用 systemctl , 目录不一样, 而且相对麻烦一些.

RPM包安装的时候不要指定安装路径

使用rpm 包 安装, 不建议指定安装路径,会导致 service  的命令无法找到 安装后的软件的位置, 而且也会导致它的配置文件等文件位置都不是系统默认的,找起来很麻烦.

但是用源码包安装的时候, 就需要指定安装路径, 它是没有卸载的,不用了,就直接删除安装位置即可.

因此 使用 rpm 安装包是不能指定安装路径的.

软件包管理升级和卸载

RPM 包升级

rpm -Uvh 包全名
选项:
-U(大写)  升级安装, 如果没有安装过,系统直接安装。 如果安装过旧的版本,则升级到新版本
-F(大写)  升级安装, 如果没有安装过, 则不会安装. 必须安装有较旧的版本,才能升级
这个rpm 升级,用的很少, 这升级有局限性, 必须有旧的安装包和新的安装包(自行下载)
卸载命令反而是常用一些.

RPM 包卸载

rpm -e 包名
选项: 
    --nodeps   不检查依赖性
    -e         卸载
一般还是不要使用 --nodeps , 如果造成麻烦. 当卸载的时候,提示必须先卸载什么就去卸载它.

使用yum 卸载和 rpm卸载的区别

使用 yum 卸载的弊端, 卸载是从上到下的. 
安装是从低到高的依赖. 用yum 卸载可能会误删了被其他包公共引用的文件,然后因为不知道缺失了啥依赖文件, 最后安装的时候, 也不知道补啥依赖文件, 只能重头安装软件.
因此,卸载,最好是使用rpm 进行卸载!
生产环境,禁止这样不检测依赖就卸载. 要根据依赖提示决定卸载的先后顺序.
总结: 安装的依赖是从下到上, 卸载的依赖是从上到下, 卸载处于中间的依赖, 对于yum卸载要慎用,免得造成 生产事故.

软件包管理之查询

rpm  -q  包名  查询软件包是否安装过
rpm  -qa 查询系统中所有的软件包
rpm  -qi  包名  查询已经安装的某个软件包信息
rpm  -ql  包名  查询已经安装的某个软件包中的文件列表和安装的完整路径
rpm  -qlp 包全名 查询还没有安装的软件包中的文件列表和安装的完整路径
rpm  -qf  系统文件名  查询系统文件属于哪个RPM 包
rpm  -qR  包名  查询系统中和已经按住给你的软件包有依赖关系的软件包
选项: -q 查询
     -a  所有
     -i  查询软件信息
     -l  列出软件包中所有的文件列表和软件所安装的目录
     -p  查询还没有安装的软件包信息
     -f  查询系统文件属于哪个文件包
     -R  查询软件包的依赖性

软件包管理之验证和数字证书

验证

基本命令
rpm -Va              校验本机已经安装的所有软件包
rpm -V  包名         校验指定的已经安装的软件包中的文件
rpm -Vf 系统文件名   校验某个系统文件是否被修改
选项: 
    -Va 校验本机已经安装的所有软件包
    -V  校验指定的已经安装的软件包中的文件
    -Vf 校验某个系统文件是否被修改
缺点:但是如果rpm包, 本身就被动过手脚,那么校验就不能解决问题了.还是需要使用数字证书.

数字证书

数字证书有如下特点:
首先必须找到原厂的公钥文件,然后进行安装;
再安装rpm包时, 会去提取RPM包中的证书信息,然后和本机安装的原厂证书进行验证;
如果验证通过,则允许安装;如果验证不通过, 则不允许安装并警告.
数字证书的位置: 默认安装在系统中.位置是 /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOs6

Centos7里, 数字证书不需要导入, 安装后就有(可能最小化安装需要)

文章作者: 陌上人如玉
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 陌上人如玉 !
  目录