软件包安装

一、软件包分类

  1. 源码包

    优点:

      开源,如果有足够的能力,可以修改源代码

      可以自由选择所需的功能

      软件是编译安装,所以更加适合自己的系统,更加稳定也效率更高

      卸载方便

    缺点:

      安装过程步骤较多,尤其安装较大的软件集合时(如LAMP环境搭建),容易出现拼写错误

      编译过程时间较长,安装比二进制安装时间长

      因为是编译安装,安装过程中一旦报错新手很难解决

  2. 二进制包

  2.1 分类

    dpkg包:是由Debian Linux所开发出来的包管理机制,通过DPKG包,Debian Linux就可以进行软件包管理。主要应用在Debian和unbuntu中

    rpm包:是由Red Hat公司所开发的包管理系统。功能强大,安装、升级、查询和卸载都非常简单和方便。目前很多Linux都在使用这种包管理方式,包括Fedora、CentOS、SuSE等。该篇学习内容为rpm。

  2.2 rpm包优缺点

    优点:

      包管理系统简单,只通过几个命令就可以实现包的安装、升级、查询和卸载

      安装速度比源码包安装快的多

    缺点:

      经过编译,不再可以看到源代码

      功能选择不如源码包灵活

      依赖性。有时我们会发现需要安装软件包a时需要先安装b和c,而安装b时需要安装d和e。这是需要先安装d和e,再安装b和c,最后才能安装a包

  2.3 rpm包依赖性

    树形依赖      a ------> b -------> c

    环形依赖      a ------> b -------> c -------> a

    函数库依赖

二、rpm安装

  1. rpm包命名规则

    httpd-2.2.15-15.el6.centos.1.i686.rpm

    httpd    软件包名

    2.2.15     软件版本号

    15      软件发行次数

    el6     软件发行商

    i686      适合的硬件平台。RPM包可以在不同的硬件平台安装,选择适合不同CPU的软件版本,可以最大化的发挥CPU性能,所以出现了所谓i386(386以上计算机都可以安装)、i586(586以上的计算机都可以安装)、i686(奔腾II以上计算机都可以安装,目前所有的CPU都是奔腾II以上,所以这个软件版本居多)、x86_64(64位CPU可以安装)和noarch(没有硬件限制)等文件名了

    rpm      rpm包的扩展名

  包全名:如果操作的是未安装软件包,则使用包全名,而且需要注意绝对路径

  包名:如果操作的是已经安装的软件包,则使用包名即可,系统会生产RPM包的数据库(/var/lib/rpm/),而且可以在任意路径下操作

  2. rpm包命令安装

  2.1 默认安装位置

    /etc/         配置文件安装目录

    /usr/bin/        可执行命令的安装目录

    /usr/lib/         程序所使用的函数库保存位置

    /usr/share/doc/     基本的软件使用手册保存位置

    /usr/share/man/    帮助文件存放位置

  2.2 rpm包安装

    2.2.1 安装命令

    rpm -ivh 包全名

    -i  install安装

    -v  显示更详细的信息

    -h  显示安装过程

    --nodeps       不检测依赖性安装。软件时会检测依赖性,确定所需的底层软件是否安装。如果没有安装则会报错。如果我不管依赖性,想强行安装,可以使用这个选项。注意:这样不检测依赖性安装的软件基本是不能使用的,所以不建议这样做

    --replacefiles     替换文件安装。如果安装软件包,可是包中部分文件已经存在,那么正常安装时候,会报错“某个文件已经存在”从而导致软件无法安装,使用这个选项可以忽视这个报错,而覆盖安装

    --replacepkgs    替换软件包安装。如果软件包已经安装,此选项可以把软件包重复安装一遍

    --force        强制安装。不管是否已经安装,都重新安装。就是—replacefiles和—replacepkgs的综合

    --test        测试安装。不会实际安装,只是检测一下依赖性

    --prefix        指定安装路径。为安装软件指定安装路径,而不使用默认安装路径。注意:如果指定了安装路径,软件没有安装到系统默认路径中的话,系统会找不到这些安装的软件,需要进行手工配置才能被系统识别。所以rpm包我们一般都采用默认路径安装。

    2.2.2 服务启动

      systemctl start|stop|restart|status 服务名

  2.3 rpm包升级

    rpm -Uvh 包全名

    -U(大写)    升级安装,如果没有安装过,系统直接安装。如果安装过的版本较旧,则升级到新版本(upgrade)

    rpm -Fvh 包全名

    -F        升级安装,如果没有安装过,则不会安装。必须安装有较旧版本,才能升级(freshen)

  2.4 卸载

    rpm -e 包名

    --nodeps  不检查依赖性

    -e     卸载

  2.5 查询

    2.5.1 查询软件包是否安装

      rpm -q 包名

      -q  查询(query)

    2.5.2 查询系统中所有已安装的软件包

      rpm -qa 

      rpm -qa |grep 包名

      -a  all所有

    2.5.3 查询某个软件包的详细信息

      rpm -qi 包名

      -i  查询软件信息information

      也可以查询还没有安装的软件包的详细信息

      rpm -qip 包全名

      -p  查询没有安装的软件包(package)

    2.5.4 查询软件包中的文件列表

      rpm -ql 包名

      -l  列出软件包中所有的文件列表和软件所安装的目录(list)

      也可以查询还没有安装的软件包中的文件列表和打算安装的位置

      rpm -qlp 包全名

      -p  查询没有安装的软件包信息(package)

    2.5.5 查询系统文件属于哪个rpm包

      rpm -qf 系统文件名

      -f  查询系统文件属于哪个软件包(file)  

      不能查询手动创建的文件,

    2.5.6 查询软件包所依赖的软件包

      查询系统中和已经安装的软件包有依赖关系的软件包

      rpm -qR 包名

      -R  查询软件包的依赖性(requires)

      也可以查询没有安装的软件包的依赖性

      rpm -qRp 包全名

  2.6 验证

    2.6.1 基本命令

      rpm -Va

      -Va  校验本机已经安装的所有软件包

      rpm -V 已安装的包名

      -V  校验指定rpm包中的文件(verify)

      rpm -Vf 系统文件名

      -Vf  校验某个系统文件是否被修改

      

       最前面共有8个信息内容,是表示验证内容的。文件名前面的c是表示这是个配置文件(configuration)。最后是文件名。验证内容中的8个信息的具体内容如下:

      S  文件大小是否改变

      M  文件的类型或文件的权限是否发生改变

      5  文件MD5校验和是否改变(可以看成文件内容是否改变)

      D  设备的主从代码是否改变

      L  文件路径是否改变

      U  文件的所有者是否改变

      G  文件的所属组是否改变

      T  文件的修改时间是否改变

      c  配置文件 config file

      d  普通文档 documentation

      g  鬼 文件 ghost file 很少见,就是该文件不应该被这个RPM包包含

      l  授权文件 license file

      r  描述文件 read me 

  2.7 数字证书

    刚刚的校验方法只能对已经安装的RPM包中的文件进行校验,但是如果RPM包本身就被动过手脚,那么校验就不能解决问题了。我们就必须使用数字证书验证了。

    数字证书有如下特点:

      首先必须找到原厂的公钥文件,然后进行安装

      再安装RPM包是,会去提取RPM包中的证书信息,然后和本机安装的原厂证书进行验证

      如果验证通过,则允许安装;如果验证不通过,则不允许安装并警告

    2.7.1 数字证书位置

      光盘中,默认也会放在系统中。

      ll /mnt/cdrom/

      

     2.7.2 数字证书导入

      rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

     查询

      rpm -qa |grep gpg-pubkey

      

   2.8 yum安装

    2.8.1 yum源文件

      yum源配置文件保存在/etc/yum.repos.d/目录中 ,文件的扩展名一定是“*. repo”。也就是说,yum源配置文件只要扩展名是“*.repo”就会生效

      

       这个目录中有5个yum源配置文件,默认情况下CentOS-Base.repo文件生效

      

      在CentOS-Base.repo文件中有5个yum源容器,这里只列出了base容器,其他容器和base容器类似。我们解释一下base这个容器

       [base]    容器名称,一定要放在[]中

      name    容器说明,可以自己随便写

      baseurl    我们的yum源服务器的地址。默认是CentOS官方的yum源服务器,是可以使用的。如果你觉得慢,则可以改成你喜欢的yum源地址

      enabled    此容器是否生效,如果不写或写成enabled=1则表示 此容器生效,写成enabled=0则表示此容器不生效

      gpgcheck    如果为1则表示RPM的数字证书生效;如果为0则表示RPM的数字证书不生效

      gpgkey    数字证书的公钥文件保存位置。不用修改

    2.8.2 搭建本地yum源

      第一步:放入CentOS安装光盘,并挂载光盘到指定位置。命令如下:

      mkdir /mnt/cdrom

      mount /dev/cdrom /mnt/cdrom/

      第二步:修改其他几个yum源配置文件的扩展名,让它们失效,因为只有扩展名是“*.repo”的文件才能作为yum源配置文件。当然也可以删除其他几个yum源配置文件,但是如果删除了,当你又想用网络作为yum源时,就没有了参考文件,所以最好还是修改扩展名。命令如下:

      cd /etc/yum.repos.d/

      mv CentOS-Base.repo CentOS-Base.repo.bak

      ...

      第三步:修改光盘yum源配置文件CentOS-Media.repo,参照以下方法修改

      

  2.9 yum命令

    2.9.1 查询

      查询yum源所有可安装的软件包

      yum list

      查询yum源是否含有某个软件包

      yum list 包名

      查询yum源上所有和关键字相关的软件包

      yum search 关键字

      查询指定软件包的信息

      yum info 包名

    2.9.2 安装

      yum install 包名

      yum -y install 包名

    2.9.3 升级

      yum update 包名

      yum -y update 包名

    2.9.4 卸载

      yum remove 包名

      慎用

      除非你确定卸载的软件的依赖包不会对系统产生影响,否则不要执行yum的卸载,因为很有可能在卸载软件包的同时卸载的依赖包也是重要的系统文件,这就有可能导致系统崩溃

  2.10 yum组管理命令

    查询可以安装的软件组

    yum grouplist

    查询软件组内包含的软件

    yum groupinfo 软件组名

    安装软件组

    yum groupinstall 软件组名

    卸载软件组

    yum groupremove 软件组名

 三、源码包安装

  1. 注意事项

  如何选择

    如果软件包是给大量客户提供访问,建议使用源码包安装,如LAMP环境搭建,因为源码包效率更高。

    如果软件包是给Linux底层使用,或只给少量客户访问,建议使用rpm包安装,因为rpm包简单

  源码包是通过官方网站下载的,如果需要使用,是需要单独下载的

  2. 安装过程

    下载软件包

    解压

    进入解压目录

    ./configure    编译前准备。

      主要有三个作用:

      在安装之前需要检测系统环境是否符合安装要求

      定义需 要的功能选项。“./configure”支持的功能选项较多,可以执行“./configure --help”命令查询其支持的功能。一般都会通过“./configure --prefix=安装路径”来指定安装路径

      把系统环境的检测结果和定义好的功能选项写入Makefile文件,后续的编译和安装需要依赖这个文件的内容

    make    编译

      make会调用gcc编译器,并读取Makefile文件中的信息进行系统软件编译。编译的目的就是把源码程序转变为能被Linux识别的可执行文件,这些可执行文件保存在当前目录下。编译过程较为耗时,需要有足够的 耐

    make clean    清空编译内容(非必需步骤)

      如果在 “./configure”或“make”编译中报错,那么我们在重新执行命令前一定要记得执行make clean命令,它会清空Makefile文件或编译产生的“.o”头文件。

    make install    编译安装

    这才是真正的安装过程,一般会写清楚程序的安装位置。如果忘记指定安装目录,则可以把这个命令的执行过程保存下来,以备将来删除使用。

  3. 卸载

    源码包没有删除命令,如果需要删除,直接删除安装目录即可。

  4. 打入补丁

    4.1 补丁的生成

      diff 选项 old new

      -a    将任何文档当做文本文档处理

      -b    忽略空格造成的不同

      -B    忽略空白行造成的不同

      -I    忽略大小写造成的不同

      -N    当比较两个目录时,如果某个文件只在一个目录中,则在另一个目录中视作空文件

      -r    当比较目录时,递归比较子目录

      -u    使用同一的输出格式

    4.2 打入补丁

      patch –pn < 补丁文件

      -pn    n为数字。代表按照补丁文件中的路径,指定更新文件的位置

      “-pn”不好理解,我们说明下。补丁文件是要打入旧文件的,但是你当前所在的目录和补丁文件中的记录的目录是不一定匹配的,所以就需要“-pn”来同步两个目录。比如我当前是在“/root/test”目录中(我要打补丁的旧文件就在当前目录下),补丁文件中记录的文件目录为“/root/test/old.txt”,这时如果写入“-p1”(在补丁文件目录中取消一级目录)那么补丁文件就会打入“/root/test/root/test/old.txt”文件中,这显然是不对的。那如果写入的是“-p2”(在补丁文件目录中取消二级目录)那么补丁文件打入的就是“/root/test/test/old.txt”,这显然也不对。如果写入的是“-p3”(在补丁文件目录中取消三级目录)那么补丁文件就是打入的“/root/test/old.txt”,我们的old.txt文件就在这个目录下,所以就应该是“-p3”。

原文地址:https://www.cnblogs.com/sswind/p/11793011.html