Linux程序包管理与源码安装

时间:2023-02-14 18:40:17

一、RPM包简介:

linux之所以那么强大,除了linux强大的内核,还有很大一部分取决于linux的软件包,假想没有软件包,就一个内核在运行,人类需要和内核打交道是多么痛苦,但是聪明的人类发明了bash,通过bash,人就可以使用高级语言,和机器沟通,这其中的bash起始也是一个软件包,当然linux除了bash还有各式各样的包,帮助我们完成各种任务,这其中便涉及到程序的包管理。

     rpm包管理器(原名redhat package manager,后成为行业标准,命名为rpm package manager)。像是FedoracentosSuSE,等厂商的发行版都是使用rpm管理程序包管理器,rpm软件包其实是预先编译好的压缩包,其中包括可执行程序、脚本,可以在安装时检查系统,硬件资源,操作系统版本,防止用户错误安装,但是大部分大软件包会有依赖性,比如说,在安装A软件时有可能依赖于软件BB软件又依赖如C软件,为了知道软件的依赖性,rpm在系统中建立了一个数据库,记录rpm的依赖性。

    dpkg:最早是debian linux社区开发出来的,debian衍生的版本,包括B2DUbuntu等都支持dpkg的包管理器


二、RPM包名字格式:

 例如:httpd-devel-2.4.6-40.el7.centos.x86_64.rpm

 其中httpd-devel是包名,2是主版本号,2.6是此版本号,40是编译次数(程序每次改动之后,重新编译一次el7.centos是指发行版:企业版centos7系统),x86是硬件平台,之所以要有硬件平台是因为程序对不同的硬件优化以及设置都不一样,所以要针对不同的硬件进行编译(常见的平台有i386:几乎所有的x86平台, i586, i686,x86_64:针对64cpu进行最佳编译,noarch:和硬件无关的类型)。


三、RPM包管理:

1安装:

       -i 安装

       -v 显示安装过程的详细信息,-vv 更详细

       -h #表示安装进度

       --test 测试安装,不真正安装

       --nodeps 忽略依赖关系

       --force 强制安装

    [root@centos7 ~]# rpm -ivh/mnt/cdrom/Packages/tree-1.6.0-10.el7.x86_64.rpm         Preparing...            ################################# [100%]
    Updating / installing...
    1:tree-1.6.0-10.el7        ################################# [100%]

2升级:

-U 如果已经安装,并且出现新版本则升级,如果没有安装则安装最新版本的软件包。

-F 单纯升级,如果指定的软件没有安装,则什么都不做。


注:上面的UF参数可以配合vh两个参数使用,内核不建议使用升级选项来升级内核,因为一旦升级失败,原来的内核也将不能使用。软件也可以通过使用--oldpackage安装上一个版本的软件包。

      

3卸载: 

        -e 卸载软件包

        --nodeps 忽略依赖关系

        --test 测试卸载

       注:程序包的配置文件如果修改之后,卸载软件默认是不删除文件的,只是将配置文件改名为.rpmsave为后缀的文件

3查询:软件的查询要加必选选项-q

       -q 查询软件包,可以是全名,也可以是包名

              -a 查询安装的所有包。

              -f查询某文件是由那个包安装生成的

              -p 查询没有安装的包的信息一般配合i使用

              -i 查询包的简要说明信息

              -c 查询某程序的配置文件

              -l 查询包安装生成的文件列表

        [root@centos7 ~]# rpm -qi tree  //查询软件的详细信息                Name    :    tree        Version     :    1.6.0        Release   :    10.el7        Architecture:     x86_64        Install Date:     Mon 25 Jul 2016 05:21:38 PM CST        Group       :Applications/File        Size        :89505        License   :    GPLv2+        Signature   :    RSA/SHA256, Fri 04 Jul 2014 01:36:46 PM CST, Key ID 24c6a8a7f4a80eb5        Source RPM  :    tree-1.6.0-10.el7.src.rpm        Build Date  :    Tue 10 Jun 2014 03:28:53 AM CST        Build Host  :    worker1.bsys.centos.org        Relocations :     (not relocatable)        Packager    : CentOSBuildSystem <http://bugs.centos.org>        Vendor      :CentOS        URL         :http://mama.indstate.edu/users/ice/tree/        Summary     :File system tree viewer        Description :        The tree utility recursively displays the contents ofdirectories in a        tree-like format. Tree is basically a UNIX port of the DOS tree        utility.
        [root@centos7 ~]# rpm -qpi/mnt/cdrom/Packages/httpd-2.4.6-40.el7.centos.x86_64.rpm //查询未装包信息                Name        :httpd        Version     :2.4.6        Release     :40.el7.centos        Architecture: x86_64        Install Date: (not installed)        Group       :System Environment/Daemons        Size        :9806197        License     :ASL 2.0        Signature   :RSA/SHA256, Wed 25 Nov 2015 10:41:23 PM CST, Key ID 24c6a8a7f4a80eb5        Source RPM  :httpd-2.4.6-40.el7.centos.src.rpm        Build Date  :Fri 20 Nov 2015 05:45:11 AM CST        Build Host  :worker1.bsys.centos.org        Relocations : (not relocatable)        Packager    :CentOS BuildSystem <http://bugs.centos.org>        Vendor      :CentOS        URL         :http://httpd.apache.org/        Summary     :Apache HTTP Server        Description :        The Apache HTTP Server is a powerful, efficient, andextensible        web server.
        [root@centos7 ~]# rpm -qc httpd //查询程序的配置文件                /etc/httpd/conf.d/autoindex.conf        /etc/httpd/conf.d/userdir.conf        /etc/httpd/conf.d/welcome.conf        /etc/httpd/conf.modules.d/00-base.conf        /etc/httpd/conf.modules.d/00-dav.conf        /etc/httpd/conf.modules.d/00-lua.conf        /etc/httpd/conf.modules.d/00-mpm.conf        /etc/httpd/conf.modules.d/00-proxy.conf        /etc/httpd/conf.modules.d/00-systemd.conf        /etc/httpd/conf.modules.d/01-cgi.conf        /etc/httpd/conf/httpd.conf        /etc/httpd/conf/magic        /etc/logrotate.d/httpd        /etc/sysconfig/htcacheclean        /etc/sysconfig/httpd


4校验:查询包安装之后的文件发生的变化如果显示ok则包生成的内容没有发生变化。使用时用-V参数检验软件包

       S:size  文件容量大小发生变化

       M: mode 文件的类型或文件的属性是否发生变化

       5md5发生变化

       D: 装置的主次代码已经发生改变

       L: link 文件的路径发生变化

       U: Userowership 文件的属主发生变化

       GGroup owership 文件的所属组发生变化

       T: mtime文件的创建时间发生变化

    文件检验示例:

    [root@centos7 ~]# rpm -V vsftpd   //安装完没有做任何修改的软件包检测没有任何输出        [root@centos7 ~]# rpm -qc vsftpd  //检查安装产生配置文件    /etc/logrotate.d/vsftpd    /etc/pam.d/vsftpd    /etc/vsftpd/ftpusers    /etc/vsftpd/user_list    /etc/vsftpd/vsftpd.conf     [root@centos7 ~]# touch /etc/vsftpd/vsftpd.conf //刷新文件的时间戳    [root@centos7 ~]# rpm -V vsftpd   //再次检查发现文件多了T属性,表示时间改变,其他没有改变    .......T.  c /etc/vsftpd/vsftpd.conf    [root@centos7 ~]# echo "">> /etc/vsftpd/vsftpd.conf //通过echo一个空行发现文件的大小(S),文件的MD5(5),文件的时间(T)发生改变    [root@centos7 ~]# rpm -V vsftpd    S.5....T.  c /etc/vsftpd/vsftpd.conf



导入本地公钥进行验证:

rpm --import  /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7(这是7本地密钥),导入后就可以验证包内容是否合法。

5rpm数据库的建立:一旦rpm的数据库丢失,重建后的数据库将无法查询到之前安装的包数据库文件存放位置:/var/lib/rpm/

--initdb -v --dbpath 如果存在就不建立文件,不存在就建立文件

--rebuilddb 无论数据库文件时候存在都强制重建

四、YUM包管理:

1. yumrpm的一个前端工具,通过分析rpm的标头数据后,根据各种软件的依赖关系自动解决软件的依赖性问题。假如rpm不能使用,yum也将不能使用,yum的工作模式是基于C/S的模式,就是说必须配置有一个文件服务器用来存放软件和依赖关系的文件,当然也可以配置一个本地服务器的yum安装源。配置本地yum客户端需要指向服务器的/repodata/ 目录的父目录

 /etc/yum.conf 全局仓库的配置文件

 

2. repodata是一个目录,里面包含了一个以 .xml结尾的文件,这个文件是yum索引文件,包含了rpm包的一些信息,比如依赖关系这些的。通过它用yum安装才能在自动解决依赖关系。一般光盘里面会自带有repodata目录。如果没有就手动生成了。方法:安装createrepo包,这个你用rpm方式安装。成功后执行createrepo -v /mnt/cdrom 来重建索引文件

 

3. yum客户端配置:

 [root@centos7 msh]# cat/etc/yum.repos.d/local.repo

[local]   ===> 仓库ID repositoryID)全局唯一

name=local  ===>描述性的信息

baseurl=file:///mnt/cdrom/  ===>最重要的地方支持httpfileftp三种协议

enabled=1  ===>默认不写为1

gpgcheck=1  ===>指定rpm包是否需要检查合法性

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7==>指定公钥路径也是三种URL http httpsfileftp

 

4. yum相关命令:

 

1yum-config-manager --disable “repo_name”  对某一仓库(repo_name)禁用

2yum-config-manager --enable “repo_name”  启用某一仓库

3 yum repolist [all | enabled | disabled ]  显示仓库列表

4 yum list {available | installd | updates | }  glob_exp1 可以使用通配符列出各种安装包

5)安装和重装包:

       yum install package ... 支持安装多个包

       yum reinstall package ... 重新安装程序包

       yum update package ...  升级安装程序包

       yum downgrade package.. 降级安装包

       yum check-update 检查可用的升级

6yum remove | erase package 卸载安装包

7)查看程序包info

       yum info [package ...] 查看包信息

       yum provides [package] 查看某文件是由那个程序提供的

[root@cnode6_8 ~]#yum provides /usr/share/doc/HTML/sr/kioslave/httpLoaded plugins:fastestmirror, refresh-packagekit, securityLoading mirrorspeeds from cached hostfilekde-l10n-Serbian-4.3.4-5.el6.noarch: Serbian language support for KDERepo        : baseMatched from:Filename    : /usr/share/doc/HTML/sr/kioslave/http


8)清理构建缓存:

       yum clean all  //清理缓存

       yum makecache // 生成缓存

9)查看yum事务历史:

       yum history  查看yum history

       yum history # 查看具体的第#yum信息

       yum history undo # 撤销第#条操作

10)日志操作:

       /var/log/yum.log

11)包组管理:

       yum groupinstall group1... 包组安装

       yum groupupdate group1... 包组更新

       yum groupremove group1... 包组卸载

       yum groupinfo  group1... 查看包组信息

12yum的命令行选项:

       -y 自动回答yes

       -q 静默模式

13yumrepo配置文件中可以使用变量替代发行版等变量,部署大量服务器时可以使用统一的配置文件,对服务器进行yum配置

       示例:在yum服务器上有发行版67的两个版本的yum源,在同时拥有rhel6rhel7的版本的服务器时配置文件:

       $releasever: 当前OS发行版的主版本:

       $arch: 平台,i386,i486,i586,X86_64

       $basearch 基础平台;i386

 

服务器是分别共享的目录:

http://server/centos/7/x86_64

http://server/centos/6/i384

 

http://server/centos/$releasever/$basearch/  //配置文件的baseurl这样写

 

四、源码安装:

1. 编译安装

1)执行configure脚本,之所以要执行configure脚本,是因为硬件,操作系统等比较多比较杂,针对不同的硬件配置信息等会不一样,不一样的发行版本操作系统也是会有许多差别,存放库文件等的地方也会有很大的差别,软件发行厂商会编写configure 侦测程序,程序会针对不同的硬件和操作系统改变配置和做部分优化,然后生成makefile文件,供make调用进行编译和安装。软件包解压之后会产生许多的源码文件和可执行文件,脚本,READMENOTICEinstall等供编译安装时的帮助信息可供参考。configure --help可以看到执行configure时可以指定的参数,如 --prefix=/PATH --sysconfdir=/PATH 两个选项分别指定安装路径和配置文件存放的目录,没有指定则按软件本身的默认路径执行,在编译安装可能会报错,可以按照报错消息添加选项等安装,直至configure执行成功。configure支持交叉编译,就是说在本地给其他不同的硬件或操作系统执行编译只需指定system type

2make  根据makefile 预设工作进行编译,只有编译成功后才能执行下一步工作

3make install : make根据编译好的二进制文件安装到响应的目录

2. 安装后的配置:

1将二进制程序目录导入至PATH 环境变量中:就可以在任意目录执行安装文件的二进制程序

2导入库文件路径:

       编辑/etc/ld.so.conf.d/NAME.conf 添加新的库文件所在的目录至此文件当中,让系统重新生成缓存:

       ldconfig -v

3)导入头文件:因为在系统之中,头文件是存放在/usr/loca 目录下面,想要让安装的软件包头文件可以让系统使用,可以将安装的头文件在/usr/local 目录下面单独建立一个目录用户存放该软件的头文件,或者建立一个软连接指向安装的软件的头文件目录以httpd为例:

[root@cnode6_8include]# ln -sv /usr/local/http2/include/ /usr/include/httpd`/usr/include/httpd'-> `/usr/local/http2/include/'


4)导入man帮助手册

rhel6man配置文件/etc/man.config

rhel7配置文件:/etc/man_db.conf

通过在man配置文件当中添加软件的man路径,可以将软件的man帮助添加到man中方便查询

 


本文出自 “jackcui” 博客,转载请与作者联系!