linux程序包管理与源码安装

一、RPM包简介:

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

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

dpkg:最早是debian linux社区开发出来的,debian衍生的版本,包括B2D,Ubuntu等都支持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:针对64位cpu进行最佳编译,noarch:和硬件无关的类型)。

三、RPM包管理:

(1)安装:

-i 安装

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

-h 以#表示安装进度

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

--nodeps 忽略依赖关系

--force 强制安装

    [[email protected] ~]# 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 单纯升级,如果指定的软件没有安装,则什么都不做。

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

(3)卸载:

-e 卸载软件包

--nodeps 忽略依赖关系

--test 测试卸载

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

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

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

-a 查询安装的所有包。

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

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

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

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

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

        [[email protected] ~]# 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.
        [[email protected] ~]# 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.
        [[email protected] ~]# 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 文件的类型或文件的属性是否发生变化

5:md5发生变化

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

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

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

G:Group owership 文件的所属组发生变化

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

文件检验示例:

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

导入本地公钥进行验证:

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

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

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

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

四、YUM包管理:

1. yum是rpm的一个前端工具,通过分析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客户端配置:

[[email protected] msh]# cat/etc/yum.repos.d/local.repo

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

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

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

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

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

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

4. yum相关命令:

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

(2)yum-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 检查可用的升级

(6)yum remove | erase package 卸载安装包

(7)查看程序包info

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

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

[[email protected]_8 ~]#yum provides /usr/share/doc/HTML/sr/kioslave/http
Loaded plugins:fastestmirror, refresh-packagekit, security
Loading mirrorspeeds from cached hostfile
kde-l10n-Serbian-4.3.4-5.el6.noarch: Serbian language support for KDE
Repo        : base
Matched 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... 查看包组信息

(12)yum的命令行选项:

-y 自动回答yes

-q 静默模式

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

示例:在yum服务器上有发行版6和7的两个版本的yum源,在同时拥有rhel6和rhel7的版本的服务器时配置文件:

$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调用进行编译和安装。软件包解压之后会产生许多的源码文件和可执行文件,脚本,README,NOTICE,install等供编译安装时的帮助信息可供参考。configure --help可以看到执行configure时可以指定的参数,如 --prefix=/PATH --sysconfdir=/PATH 两个选项分别指定安装路径和配置文件存放的目录,没有指定则按软件本身的默认路径执行,在编译安装可能会报错,可以按照报错消息添加选项等安装,直至configure执行成功。configure支持交叉编译,就是说在本地给其他不同的硬件或操作系统执行编译只需指定system type

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

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

2. 安装后的配置:

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

(2)导入库文件路径:

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

ldconfig -v

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

[[email protected]_8include]# ln -sv /usr/local/http2/include/ /usr/include/httpd
`/usr/include/httpd‘-> `/usr/local/http2/include/‘

(4)导入man帮助手册

rhel6中man配置文件/etc/man.config

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

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

时间: 2024-08-05 02:41:47

linux程序包管理与源码安装的相关文章

linux程序包管理之源码编译安装

一.linux程序包基础概念 1.1.linux程序开发遵循开源协定:GPL, BSE, Apache等 1.2.源程序常用的开发语言:C, C++, perl, python等 1.3.应用程序的开发.编译和运行 就像面包师直接使用的材料是面粉而非麦种一样,我们大部分应用程序员在开发程序时也并非直接接触硬件层,因为底层硬件太过抽象和"丑陋",如果应用程序开发都从底层开始,无疑工作量巨大.于是,有些系统级程序员在"裸机"上抹上了一层操作系统,用于管理硬件资源,这个系

linux下yum程序包管理及源码安装

1.yum仓库中的repodata目录中元数据文件: primary.xml.gz:代表所有RPM包的列表和依赖关系以及每个RPM安装生成的文件列表: filelists.xml.gz:代表当前仓库中所有RPM包的所有文件列表: other.xml.gz:代表额外信息,RPM包的修改日志: repomd.xml记录的是上面三个文件的时间戳和校验和: comps*.xml: RPM包分组信息 2.yum定义repo文件 [Repo_ID] name=Description baseurl= ftp

Linux下的程序包管理之源码形式

 Linux下程序包管理之源码形式 程序包的前世今生: 说到程序包管理,不得不提到是就是程序包是由什么组成的?也就是怎么形成的?程序是由源代码程序经过预处理.编译.然后汇编形成二进制的程序,这是针对特定硬件而形成的程序.有计算机编程基础的同学都应该知道源代码编译的时候是要调用特定的库(库文件),而这些库,在不同的系统上是不同的,比如Linux和window上的就不同,不同发行版的Linux上的库也不尽相同,所以这就导致了在不同种类系统上编译生成的二进制程序的运行环境也不尽相同,那么这些程序是不能

源码编译安装程序包及httpd源码安装实践

源码编译安装程序包从步骤并不复杂,实际安装过程中最主要的就是准备好编译环境:根据自己的实际需求,选择或设置程序包编译参数:以及程序包安装后的相关配置. 1.  编译环境准备 以CentOS6为例,一般通过yum安装2个包组,编译工具,以及编译程序包依赖的主要的头文件和库文件就都准备好了. # yum groupinstall "Development Tools" # yum groupinstall "Server Platform Development" 另外

Linux程序包管理--源码编译的原理和基本方法

Linux中使用rpm格式的程序文件包来安装是比较方便的方法, 但是有一部分程序文件包没有rpm包格式, 这时就需要用户自己手工编译源码包来进行安装. 文本主要讲解源码编译的原理和基本操作过程. 源码包命名方式 name - VERSION . tar . gz 其中: VERSION = major . minor . release major表示主版本号, 经过比较大的改进 minor表示次版本号, 改进比较小 release表示对一些bug进行修复 源码包编译过程 源码包是指经过程序员编

Python学习第六天----Linux内存管理、进程管理、RPM包安装管理及源码安装软件

Linux内存管理.进程管理.RPM包安装管理及源码安装软件 一.交换分区     交换分区其实就相当于Windows系统下的虚拟内存的概念,当物理内存不够用的时候,由操作系统将硬盘的一块区域划分出来作为内存使用.具体使用方法如下:      [[email protected] ~]# fdisk -l 磁盘 /dev/sdb:16.1 GB, 16106127360 字节,31457280 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):5

rpm、yum管理及源码安装程序包

linux程序包管理: 为了更好的实现程序的安装.升级.卸载.查询.校验以及数据库的维护,所以把将编译好的程序的各个组成文件打包成一个或者多个程序包文件. 软件包的获取途径: 1.到各个镜像网站获取: 比如:mirrors.aliyun.com   mirrors.163.com   mirrors.souhu.com 2.到各个程序官网获取 比如:apache.org  nginx.org 3.通过第三方组织 比如:epel.搜索引擎 1.rpm包管理  :  不能处理依赖关系 RPM 是以一

Linux程序包管理及yum安装管理

Linux程序包管理: API:ApplicationProgramming Interface   应用编程接口 POSIX:Portable OS    遵循本协议的程序均可在不同系统间移植 程序编写完成后,执行所要经过的处理步骤: 程序源代码 --> 预处理 --> 编译 --> 汇编 --> 链接 静态编译: 共享编译:直接调用.so共享对象实现 ABI:ApplicationBinary Interface  应用二进制接口 Windows与Linux所支持的可执行二进制

Linux软件包管理之源码安装

Linux软件包管理之源码安装 源码包的编译用到了linux系统里的编译器,常见的源码包一般都是用C语言开发的,这也是因为C语言为linux上最标准的程序语言.Linux上的C语言编译器叫做gcc,利用它就可以把C语言变成可执行的二进制文件.所以如果你的机器上没有安装gcc就没有办法去编译源码.你可以使用 yum install -y gcc 来完成安装. 3.1 源码包安装的步骤 1.拿到源代码,并解压 #tar xf package-version.tar.{gz|bz2|xz} 注意:展开