Linux程序管理之rpm,yum,编译安装详解

操作系统:CentOS 6.7 内核版本:2.6.32-573.el6.x86_64



程序编译概念



程序要在机器上运行,就需要编译,编译针对特定的OS平台和硬件平台,编译后的程序只能运行在特定的软硬平台上

 交叉编译:
        在测试机上针对其他平台进行程序编译

编译过程:
        预编译 -> 编译 -> 汇编 -> 链接
            链接:生成库调用的头文件
            静态链接:程序文件本身集成所需调用的库文件
            动态链接:调用标准C库glibc,.so(share object)
                
            头文件:主要是记录程序调用库文件名,调用库参数特性...

库:函数
            
        库调用:
        开发时的库调用:头文件         
        运行时的库调用:可执行二进制程序

动态库调用默认查找路径配置文件:
            /etc/ld.so.conf
            /etc/ld.so.conf.d /*.conf
            一般建议在*.conf目录中配置链接库路径

查看二进制程序所依赖的库文件:
                    如:ldd /bin/cat

程序编译的本质:源代码 -> cpu指令集调用(汇编层面)

    编译后的程序运行基础:
        os平台兼容
        硬件平台兼容
        同平台的情况下,在跨机器运行程序必须提供所依赖的库文件,否则无法运行

程序的兼容性:       
        POSIX:可移植操作系统
        API兼容:则表示程序可跨平台编译
        ABI兼容:则表示编译后的程序可以跨平台运行

程序组成:
        二进制程序:/bin,/sbin
        头文件:include,默认/usr/inlcude

自身库:lib,默认存放在/lib,/lib64

配置文件:conf,默认存放在/etc

帮助文档:man文档,README,INFO等

编译安装可以指定路径安装,若指定路径安装,则安装后需要配置好二进制和帮助文档的PATH环境变量,这样可以解决shell默认的的环境变量无法识别程序和文档路径



 包管理工具基础知识:



   包管理工具:rpm

rpm(RedHat package manager)

后更名为rmp(RPM is package manager)递归缩写

   包管理工具的基本功能
        打包
        安装
        查询
        卸载
        升级
        校验
        数据库管理

前端管理器:yum/apt-get
        能够自动化处理程序安装的依赖关系

依赖关系:
        循环依赖、版本依赖
        某些程序的运行依赖于其他程序,需要先安装所依赖的程序才能使用
    
    应用程序的命名方式:
        源代码:name-major.minor.release.tar.{gz|bz2|xz}

程序名-主版本号-次版本号-发行版本号

rpm包:name-version-release.arch.rpm
            release:通常包含发行号、OS
            arch:架构
    
    程序安装方式:
        以源代码编译安装
        使用包管理器:rpm
        使用前端管理器:yum
        简单打包的二进制格式(相当于windows绿色软件)

分包安装机制:
        将一个大程序按照功能使用分成几个不同的包,在程序安装时供用户选择安装

包来源合法性校验:
        源程序:通过MD5码或sha1校验码验证
        rpm包:
            可靠的发行商
            完整性校验
            验证来源合法:公钥加密算法

rpm包获取途径:
        1、发行商的光盘或站点服务器
               http://mirrors.163.com
               http://mirrors.sohu.com
               http://mirrors.aliyun.com
         2、rpmfind
               http://rpmfind.net
         3、rpmpbone
               http://rpm.pbone.net



rpm包管理器命令使用:



安装:-i,--install
        rpm -ivh /path/to/rpm_package
            -v:显示安装信息
            -vv:显示更详细的安装信息
            -h:以井号显示安装进度
            --nodeps:忽略依赖关系(适用于卸载)
            --force:强行安装(适用于卸载)

[[email protected]‘s linux ~]# rpm -ivh zsh-4.3.10-7.el6.x86_64.rpm 
Preparing...                ########################################### [100%]
   1:zsh                    ########################################### [100%]

重装:--replacepkgs
        rpm -ivh --replacepkgs /path/to/rpm_name

[[email protected]‘s linux ~]# rpm -ivh --replacepkgs zsh-4.3.10-7.el6.x86_64.rpm 
Preparing...                ########################################### [100%]
   1:zsh                    ########################################### [100%]

卸载:-e,--erase
        rmp -e package_name

[[email protected]‘s linux ~]# rpm -e zsh
[[email protected]‘s linux ~]#

卸载成功不会返回信息,对linux而言,没有消息就是最好的消息

升级:-U -F
        升级或安装:
        rpm -U /path/to/rpm_package
            只升级:(若不存在旧版本则不会执行)
            rpm -F /path/to/rpm_package
            通常搭配vh使用:
            rpm -Uvh|-Fvh /path/to/package

注意:不要对内核执行升级操作
            不同内核版本可以共存,因此可执行安装操作,但不建议升级

查询:-q
    查询包是否已安装:
        rpm -q package_name

[[email protected]‘s linux ~]# rpm -q zsh
package zsh is not installed

    查询所有已安装的包:
        rpm -qa

[[email protected]‘s linux ~]# rpm -qa
gnome-packagekit-2.28.3-9.el6.x86_64
redhat-logos-60.0.14-12.el6.centos.noarch
gnome-python2-applet-2.28.0-5.el6.x86_64
dejavu-fonts-common-2.33-1.el6.noarch
gvfs-gphoto2-1.4.3-22.el6.x86_64
pciutils-3.1.10-4.el6.x86_64
plymouth-plugin-label-0.8.3-27.el6.centos.1.x86_64

......

查询已安装包的简要说明:
        rpm -qi package_name

[[email protected]‘s linux ~]# rpm -qi zsh
Name        : zsh                          Relocations: (not relocatable)
Version     : 4.3.10                            Vendor: CentOS
Release     : 7.el6                         Build Date: Sun 24 Nov 2013 09:40:59 AM PST
Install Date: Sat 19 Mar 2016 07:06:37 AM PDT      Build Host: c6b9.bsys.dev.centos.org
Group       : System Environment/Shells     Source RPM: zsh-4.3.10-7.el6.src.rpm
Size        : 5009102                          License: BSD
Signature   : RSA/SHA1, Sun 24 Nov 2013 11:33:46 AM PST, Key ID 0946fca2c105b9de
Packager    : CentOS BuildSystem <http://bugs.centos.org>
URL         : http://zsh.sunsite.dk/
Summary     : A powerful interactive shell
Description :
The zsh shell is a command interpreter usable as an interactive login
shell and as a shell script command processor.  Zsh resembles the ksh
shell (the Korn shell), but includes many enhancements.  Zsh supports
command line editing, built-in spelling correction, programmable
command completion, shell functions (with autoloading), a history
mechanism, and more.
[[email protected]‘s linux ~]#

  查询包安装后生成的文件:
          rpm -ql package_name

[[email protected]‘s linux ~]# rpm -ql zsh
/bin/zsh
/etc/skel/.zshrc
/etc/zlogin
/etc/zlogout
/etc/zprofile
/etc/zshenv
/etc/zshrc
/usr/lib64/zsh
/usr/lib64/zsh/4.3.10

......

  查询某文件是由那个包生成的:
        rpm -qf /path/to/file

[[email protected]‘s linux ~]# rpm -qf /bin/bash
bash-4.1.2-33.el6.x86_64

    查询包安装后生成的帮助文档:
        rpm -qd package_name

[[email protected]‘s linux ~]# rpm -qd zsh
/usr/share/doc/zsh-4.3.10/BUGS
/usr/share/doc/zsh-4.3.10/CONTRIBUTORS
/usr/share/doc/zsh-4.3.10/FAQ
/usr/share/doc/zsh-4.3.10/FEATURES
/usr/share/doc/zsh-4.3.10/LICENCE
/usr/share/doc/zsh-4.3.10/MACHINES
/usr/share/doc/zsh-4.3.10/NEWS

......

   查询包安装后生成的配置文件:
        rpm -qc package_name

 查询包相关的脚本:
        rpm -q --scripts
                    
        脚本分四类
            preinstall 安装前脚本
            postinstall 安装后脚本
            preuninstall 卸载前脚本
            postuninstall 卸载后脚本

查询未安装包的相关信息:-qp
    查询安装后会生成的的文件
        rpm -qpl package_name

[[email protected]‘s linux ~]# rpm -q zsh
package zsh is not installed  
[[email protected]‘s linux ~]# rpm -qpl zsh-4.3.10-7.el6.x86_64.rpm 
/bin/zsh
/etc/skel/.zshrc
/etc/zlogin
/etc/zlogout
/etc/zprofile
/etc/zshenv
/etc/zshrc
/usr/lib64/zsh

    查询包的简单描述信息:
        rpm -qpi package_name

可搭配其选项使用,如-qp --scripts

校验:检查安装后的文件是否被修改过
        rpm -V package_name
        同样的 。没有消息就是最好的消息,若返回,看注释       
        返回的注释信息:
            S file Size differs  大小
            M Mode differs (includes permissions and file type) 头文件
            5 digest (formerly MD5 sum) differs MD5
            D Device major/minor number mismatch
            L readLink(2) path mismatch
            U User ownership differs 属主
            G Group ownership differs 属组
            T mTime differs 修改时间
            P caPabilities differ 能力改变了

   校验来源合法性和软件的完整性
        包完整性:单项加密机制(MD5|sha1..)
        来源合法性:公钥加密机制(RSA)
            rpm -K /path/to/packagefile
            rpm --checksig /path/to/package_file
                    --nosigeature:不检查来源合法性
                    --nodigest:不检查包完整性

[[email protected]‘s linux ~]# rpm -K zsh-4.3.10-7.el6.x86_64.rpm 
zsh-4.3.10-7.el6.x86_64.rpm: rsa sha1 (md5) pgp md5 OK

 导入密钥:
        rpm --import /path/to/gpg-key-file
        导入以后再做验证
        公钥文件文件路径/etc/pki/rpm-gpg

[[email protected]‘s linux ~]# ls /etc/pki/rpm-gpg
RPM-GPG-KEY-CentOS-6        RPM-GPG-KEY-CentOS-Security-6
RPM-GPG-KEY-CentOS-Debug-6  RPM-GPG-KEY-CentOS-Testing-6

    数据库
        位置:/var/lib/rpm       
        重建:
            rpm --initdb:初始化
                如果事先不存在一个数据库,则新建之
            rpm --rebuilddb 重建
                直接新建数据库,会覆盖原有库



包前端管理器:yum



yum:
    程序包管理器前端工具,自动解决依赖关系

    yum仓库:repository
        通过文件服务提供rmp包,程序包安装后生成文件列表、依赖关系等元数据文件

yum客户端:
        工作机制:
        1.读取yum配置文件,指定到可用的yum仓库        
        2.下载并缓存yum仓库中的元数据文件
        3.分析元数据,文件列表信息和依赖关系等
        3.根据分析结果执行具体操作

yum的使用:配置yum仓库
        配置文件:配置可用的yum仓库和yum仓库的使用优先级别等
        配置文件路径:/etc/yum.conf /etc/yum.repos.d
        配置文件格式:两段组成
            [main]:主配置段
            [repo]:仓库配置段
        配置repo
            [repo_ID]仓库ID
            name=仓库命令
            baseurl=仓库访问路径
            enabled={1|0}仓库是否可用,1以代表可用
            gpgcheck={1|0}验证包来源的可靠性与完整性
            gpgkey=公钥地址(可以是本地,也可以是服务器路径)
            cost=定义仓库开销,默认为1000(数字越小优先级越高)

yum的管理命令:
        列出所有可用的yum repo:
            yum repolist [all|enabled(默认)|disabled]

[[email protected]‘s linux yum.repos.d]# yum repolist
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
 * base: mirrors.btte.net
 * extras: mirrors.btte.net
 * updates: mirrors.btte.net
local_base                                  | 4.0 kB     00:00 ... 
repo id                   repo name                          status
base                      CentOS-6 - Base                    6,575
extras                    CentOS-6 - Extras                     50
local_base                centos_DVD1                        6,518
updates                   CentOS-6 - Updates                 1,306
web_repo                  johnson‘s_web_repo                     3
repolist: 14,452

    清理缓存信息:
        yum clean [all|packeages|metadata|expire-cache(过期数据)
                
    显示yum仓库包列表:
        yum list [all|installed|available]
                
    查看yum命令历史:
        yum history

 显示包的详细信息:
        yum info package_nmae

[[email protected]‘s linux ~]# yum info zsh
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
 * base: mirrors.btte.net
 * extras: mirrors.btte.net
 * updates: mirrors.btte.net
Installed Packages
Name        : zsh
Arch        : x86_64
Version     : 4.3.10
Release     : 7.el6
Size        : 4.8 M
Repo        : installed
Summary     : A powerful interactive shell
URL         : http://zsh.sunsite.dk/
License     : BSD
Description : The zsh shell is a command interpreter usable as an
            : interactive login shell and as a shell script command
            : processor.  Zsh resembles the ksh shell (the Korn
            : shell), but includes many enhancements.  Zsh supports
            : command line editing, built-in spelling correction,
            : programmable command completion, shell functions
            : (with autoloading), a history mechanism, and more.

Available Packages
Name        : zsh
Arch        : x86_64
Version     : 4.3.11
Release     : 4.el6.centos.1
Size        : 2.2 M
Repo        : updates
Summary     : A powerful interactive shell
URL         : http://zsh.sunsite.dk/
License     : BSD
Description : The zsh shell is a command interpreter usable as an
            : interactive login shell and as a shell script command
            : processor.  Zsh resembles the ksh shell (the Korn
            : shell), but includes many enhancements.  Zsh supports
            : command line editing, built-in spelling correction,
            : programmable command completion, shell functions
            : (with autoloading), a history mechanism, and more.

  安装指定程序包:
        yum install package_nmae ...
        在包名中指定详细的的版本号可指定版本安装
            
    本地包安装:
        yum install [--nogpgcheck] /path/to/package
        注意:若不指定路径安装,开启了gpg检验,则可能无法安装

重新安装指定程序包:
        yum reinstall package_nmae ...

  检测可更新包:
        yum check-update
            
    升级指定程序包:
        yum update package_nmae ...
            
    降级程序:
        yum downgrade package_nmae

  卸载包:(依赖包也会被卸载)
        yum erase package_nmae ...
        A依赖B,卸载B会把A也卸载

   列出所有包组:
        yum grouplist

 显示包组信息:
        yum groupinfo "group_name":
        包组名可能会有空格,所以要加引号
            
    安装包组:
        yum groupinstall "group_name"

卸载包组:
        yum groupremove "group_name"

搜索:
        yum search package_name
            
    查看指定包的依赖关系:
        yum deplist package_name
            
    构建缓存:(缓存仓库中最新可用的元数据)
        yum makecache

构建本地yum仓库:
    (1)利用本地系统镜像构建
        1.系统读取光盘,物理光驱或虚拟光驱读取都行,若是使用虚拟机,则直接指定镜像的路径即可
        2.挂载镜像:
            创建挂载目录:
                mkdir /media/dvd1

挂载:
                mount /dev/cdrom /media/dvd1
            配置yum repository:
                vim /etc/yum.repos.d/local_mirror.repo

[local_base]
name=centos_DVD1
baseurl=file:///media/dvd1
gpgcheck=0

配置完成

(2)若是利用网上收集的rpm包来构建,需用createrepo命令来构建元数据
        1.创建yum仓库文件夹并存放rpm包
        2.构建原仓库元数据:
            createrepo [options] directory
        3.配置yum repository

(3)配置yum服务器,基于http/ftp....
        1.装好httpd服务器,启动http服务
        2.将rpm包放在/var/www/html目录下
        3.创建yum仓库元数据
        4.web测试

[[email protected]‘s linux ~]# ls /var/www/html/packages/
vim-minimal-7.2.411-1.8.el6.x86_64.rpm
zlib-1.2.3-29.el6.x86_64.rpm
zsh-4.3.10-7.el6.x86_64.rpm
[[email protected]‘s linux ~]# createrepo /var/www/html/packages/
Spawning worker 0 with 3 pkgs
Workers Finished
Gathering worker results

Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
[[email protected]‘s linux ~]# ls /var/www/html/packages/
repodata
vim-minimal-7.2.411-1.8.el6.x86_64.rpm
zlib-1.2.3-29.el6.x86_64.rpm
zsh-4.3.10-7.el6.x86_64.rpm
[[email protected]‘s linux ~]#



源码程序包编译安装:



  源码类型:
        c,c++
        perl
        Python

源码编译步骤:以nginx为例
        事先准备好编译环境,安装必要的开发环境,如开发包组:development tools,否则将会报错

1.源码解压
            tar -xf /path/to/source_package

2.cd到源码目录,当前目录执行./configure脚本
            注意:执行前请看相关文档或使用./configure --help来获得帮助
        option:
            --prefix安装路径
            --sysconfdir配置文件路径

[[email protected]‘s linux ~]# cd nginx-1.4.7
[[email protected]‘s linux nginx-1.4.7]# ls
auto     CHANGES.ru  configure  html     Makefile  objs    src
CHANGES  conf        contrib    LICENSE  man       README

注意:不同程序所使用的命令选项可能不同,所以再次提醒,安装前务必要阅读相关文档

3.执行make命令进行编译
        4.执行make install进行安装
    
    到此安装完成,下一步操作,配置环境变量

在shell环境下,默认会有特定的一些环境变量,这些环境变量定义了:执行二进制程序时的查找路径,库调用的路径,帮助文档的默认查找路径...
     所以,不想每次执行程序、查看文档都要指定一次路径的话,那就需要手动配置了

二进制程序路径配置:
            到profile.d目录下新建一个脚本
            脚本内容:
                #!/bin/bash
                PATH=/usr/local/nginx/sbin:$PATH
                export PATH

头文件输出
            在/usr/include创建符号链接

ln -sv /path/to/app_include /usr/include/ln_name

库文件输出
            到/etc/ld.so.conf.d目录下配置路径文件
            vim /etc/ld.so.conf.d/nginx.conf
            内容:lib的路径

man文档
            配置/etc/man.config文档
            添加路径:MANPATH    /usr/local/man

若执行脚本报错,需要安装某个程序时,注意是要安装该程序的devel包(包名-devel)

时间: 2024-08-25 05:55:40

Linux程序管理之rpm,yum,编译安装详解的相关文章

CentOS程序包管理器rpm、yum以及程序包编译安装详解

一.程序包管理器RPM和Yum简介 程序包管理器:将编译好的应用程序的各组成文件打包成一个或几个程序包文件,可以更方便地实现程序包的安装.升级.卸载和查询等管理操作. rpm软件包管理器(RPM Package Manager):rpm包存在依赖关系,依赖关系复杂,安装时间很长,虽然可以忽略依赖关系,但是可能会导致程序包安装后无法正常使用. yum程序包管理器( Yellow dog Updater, Modified):yum是基于RPM包管理,自动解决程序包间的依赖关系.根据配置文件的资源地

yum httpd安装详解

yum httpd安装详解: 1.安装httpd yum -y install httpd 2.关闭selinux,iptables程序: [[email protected] ~]# service iptables stop [[email protected] ~]# setenforce 0 3.查看下当前系统80端口是否被占用: [[email protected] ~]# ss -tnl State       Recv-Q Send-Q                       

Apache服务简介及编译安装详解

Apache服务简介及编译安装详解 一.Apache简介 Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,是目前世界上使用最广泛的一种web server,它以跨平台,高效和稳定而闻名,可以运行在几乎所有广泛使用的计算机平台上.Apache的特点是简单.速度快.性能稳定,并可做代理服务器来使用. Apache是用C语言开发的基于模块化设计的web应用,总体上看起来代码的可读性高于php代码,它的核心代码并不多,大多数的功能都被分割到各种

LINUX 程序包管理:rpm/yum/编译

Linux怎样进行软件安装?  说到这个软件安装,习惯windows下安装软件的朋友肯定会说,so easy 不就是不停的下一步呗,但是在Linux系统当中安装软件可不是那么简单的事情,虽然linux也可以在图像界面下类似的向windows下点击下一步的方式安装,但这对你的逼格的提升可没有效果,下面就给大家介绍一下Linux的软件安装. Linux的软件包分为俩种: 源码包 二进制包 所谓的源码包就是指软件的开发者用文本处理器编写的程序代码,是写给人类看的程序语言,但机器并不认识所以无法执行.

程序包管理之rpm/yum/编译

本次操作的环境依然还是在CentOS6.6上. 第一部分:rpm解释说明 1.对rpm包的一些简单的解释 在windows系统中,安装一个程序很简单.直接点击下一步一直安装下去即可.但是在linux系统下,却不是.如果玩转linux系统,却连软甲都不会装,确实有些说不过去.因此,今天写点关于linux程序包管理安装的东西. 1.先对linux软件程序需要的程序包进行一定的了解.所谓程序包,其实就是所需程序的安装包.在不同的linux系统上,程序包的格式以及管理工具也有些不同在redhat上以rp

Linux软件包管理之源码编译安装

环境 OS:CentOS 6.5 64位示例软件:nginx  从源代码出发 在Linux环境中,大多数的软件都是用c/c++开发的,这两种语言开发的软件编译安装没有任何区别,我们现在先来看看一款Linux环境中的软件源码组成结构. [[email protected] nginx-1.6.1]# lsauto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  man  README  src 在我们解压每一个软件包后,

rpm管理软件包,以及源码安装详解

一.RPM包的管理    www.2cto.com rpm软件包的一个例子: sudo-1.7.4p5-11.el6.i686.rpm 其中包括软件名(sudo),版本号(1.7.4p5),发行号(11.el6)和硬件平台(i686) 1.卸载 [[email protected] ~]# rpm -e sudo 如果其它软件包有依赖关系,卸载时会产生提示信息,可以使用--nodeps强行卸载 [[email protected] ~]# rpm -e --nodeps samba 2.安装 光

centOS linux 下nginx编译安装详解

Nginx的官方网站是 www.nginx.org Nginx的下载地址是:http://nginx.org/en/download.html 由 于官网的设计非常简洁不大气不上档次,所以我们可以很容易的找到我们需要的内容.打开页面发现有三个版本,分别是Mainline version(开发版).Stable version(稳定版).Legact version(历史稳定版).在这里我们下载最新的稳定版本nginx-1.6.2. 在安装Nginx之前,我们要确保系统已经安装了gcc,opens

编译安装详解

1. 编译安装概述 前面两篇关于程序包管理器的文章谈到,无论是使用rpm命令还是yum命令安装的都是已编译好的程序包,在整个安装过程中用户只需执行一条命令即可完成安装.这样带来的好处是方便,但因为是安装的是已编译好的包,所以用户的系统平台环境必须与rpm包制作者的系统平台环境相同.此外,如果用户要安装使用某程序上的某个功能,而rpm包制作者在编译过程中默认没有指定该功能的实现,这时候该怎么办呢?更何况如果某程序只是提供源码而没有现成的rpm包.这时就需要用户手动编译安装了,而编译安装就是将程序源