linux程序包管理之yum

       yum:之前命名为:yellow dog ,后来因为及其好用,很多发行版都以此为默认rpm程序前端管理工具,故此更名为:yellowdog update modifier,更牛的还有一个基于redhat的二次发行版也叫yellow dog


功能:

yum解决程序包依赖性前端管理工具:

Centos:yum,dnf

suse:zyyer(rpm)


yum repository:yum repo (yum仓库)

存储了众多rpm包,以及包的相关元数据文件(放置于特定目录下:repodate):

 

repodate:目录所在的位置就应该是仓库应该指向的路径,而这个路径指向的叫做文件服务器,其中有ftp、http、file、nfs等



yum客户端:

配置文件:

主配置文件:/etc/yum.conf  

 //为所有仓库提供公共配置(如:在安装程序包时是否要精确的平台匹配(exactarch=1)、 装某一个包时是否要检查其合法性及其完整性(gpgcheck=1,1表示开启)是否支持插件机制(plugins=1)等等.........),此文件很少动用。


各仓库的定义地址:/etc/yum.repos.d/*.repo 

    //此遵循linux把大配置文件分割为小文件进行管理风格,每个文件中以.repo结尾的可以配置一个至多个仓库,用此方法便于管理



仓库的定义:

        [repository]仓库名

name:描述

baseurl:yum仓库地址(其中可同时指定多个)

enabled:{1|0}:默认开启(1为开启)

gpgcheck:对于此仓库的所有程序包在安装之前是否要检查其来源合法性及其完整性

repo_gpgcheck:是否要检查仓库元数据文件的签名信息。

gpgkey:指明一个url,系其秘钥文件地址

mirrorlist:以镜像方式指定baseurl地地址

enablegroups={1|0}:是否支持在此仓库中使用组来批量管理程序包。

failovermethod {roundrobin(轮寻)|priority(优先级)}:baseurl指向多个时,默认为roundrobin(意为随机挑选),而priority则是至上而下的故障转移方法 

cost:默认为1000,如果决定把某一个仓库cost值变小,则此仓库则会优先应用。




yum命令的用法:

yum [options] [command] [package ...]



子命令:

        * install package1 [package2] [...]

安装指定程序包


        * reinstall package1 [package2] [...]

            重启安装==rpm -ivh --replacepkgs  P-file


        * update [package1] [package2] [...]

升级的指定程序包:


        * downgrade package1 [package2] [...]

降级指定的程序包


        * check-update

检查有哪些升级包可用


        * remove | erase package1 [package2] [...]

卸载指定程序包(依赖于此删除的程序包的所有包都会被卸载)


        * info [...]

用于列出可用的包的描述和汇总信息

#yum info gcc


        * provides | whatprovides feature1 [feature2] [...]

查看指定的特性(可以是某文件)是由那个程序包提供

相当于rpm -qf

#yum provides  /bin/cat  /bin/ls


        * clean [ packages | metadata | expire-cache | rpmdb | plugins | all ] 

清理本地缓存:

        * makecache

生成、构建缓存


        * search string1 [string2] [...]

根据指定的关键字搜索包含指定的关键的所有信息(模糊匹配,匹配的是程序包的包名和summary(摘要总结))



        * localinstall rpmfile1 [rpmfile2] [...]

           (maintained for legacy reasons only - use install)

        * localupdate rpmfile1 [rpmfile2] [...]

           (maintained for legacy reasons only - use update)

安装及升级本地程序包(并非yum仓库中的包)

//在网上download一个程序包,如果此包拥有依赖关系。则不能用rpm -ivh,则需使用yum 只带的本地安装命令。如遇发现需要解决依赖关系,yum会自动从仓库中查找安装。解决了依赖关系问题。 

注:可直接使用install,功能相同


        

        * deplist package1 [package2] [...]

查看指定包所依赖的(capabilities)能力

显示指定程序包的依赖关

 #yum deplist p-name

          *   history   [info|list|packages-list|packages-info|summary|ad don -info|redo|undo|roll-back|new|sync|stats]

查看yum事务历史

查看过去的事物中发生的什么事,查询不触发事物,只有安装,升级、卸载等修改类的动作才会触发事物

#yum history

                summary:只显示摘要

#yum history summary

 list :默认动作

 stats:显示统计数据


显示仓库列表总量:(默认显示启用的)

repolist [all|enabled|disabled]  

显示所有:all,

启用 :enabled,

未启用:disabled

显示程序包:

    yum list available| updates |installed | [glob_exp1] [...]

#yum list | less      

#ConsoleKit.x86_64   0.4.1-6.el6      @anaconda-CentOS-201605220104.x86_64/6.8

显示程序包后面为@anaconda时,表示已经安装过,并且是操作系统安装时直接装上的。

yum list [all | glob_exp1] [glob_exp2] [...]

   all :显示所有的

#yum list all

  glob_exp1:显示glob匹配到的程序包

#yum list php*


    yum list available| updates |installed | [glob_exp1] [...]

available:显示仓库中有但并为安装的

updates:可用的升级包

installed:已安装的包

都可用glob模糊匹配指定程序包




包组管理相关命令

       * grouplist [hidden] [groupwildcard] [...]

显示包组

        * groupinstall group1 [group2] [...]

安装包组(只能安装显示出来可用的组

         #yum groupinstall “development-toos”


        * groupupdate group1 [group2] [...]

升级包组


        * groupremove group1 [group2] [...]

移除指定包组


        * groupinfo group1 [...]  

包组信息

# yum groupinfo "development-toos"

其中:Mandatory表示必须安装的包

default:默认要安装的包

options:可选的




yum的命令行选项:

用在命令行中执行安装卸载程序包时的选项

    --nogpgcheck:禁止做包校验
    --enablerepo=(repoid) :临时禁用指定的某repo
    --disablerepo=repoidglob   :临时启用指定的repo
    -y:自动回答为yes
    -q:静默模式
    -noplugins:禁用所有插件




yum的repo配置文件中可用的变量:

为什么会用到变量:

判断获取当前系统发行版本号

判断平台架构

$releasever:当前os的发行版的主版本号

$arch  :平台

$basearch:基础平台(只要是32位的通通认为是i3863 )

$YUM0-$YUM9  :如果需要,自己定义

定义:http://mirrors.magedu.com/centos/$releasever/$basharch/os


创建yum仓库

    如果多个仓库中同时拥有一个程序包,会优先应用cost值低的仓库

createrepo [options] <directory>

options:可省略

移动到rpm所在的文件目录

[centos@root /yum/repo]#createrepo  ./     

 //会尝试读取每一个rpm包的元数据,把原数据读出来之后,分析创建一个repo。

创建之后保存名字为repodate,可进入查看

之后添加到/etc/yum.repos.d/*.repo文件内。即可使用

用repolist列出已经配置的所有可用仓库




程序包编译安装

     编译是真正将代码编译成为cpu可以执行的指令的过程,能够编译成为自己需要版本的过程。

1.找不到合适的rpm包

2.虽然有合适的,不满足我们的需要的功能

    testapp-VERSION-release.src.rpm 

    //使用rpmbuild命令制作成二进制格式的rpm包,而后再安装。

   

     src=source :未经过编译的源码包,能够编译成为当前硬件架构适用的程序





 源代码组织格式:

    源代码--预处理--编译(gcc)--汇编器--链接--执行

多文件:文件中的代码之间。很可能存在跨文件依赖关系:

项目打包构建管理工具:

c、c++:make(会完成以上源代码的所有过程)

(configure --》Makefile.in (模板)--》makefile)

java:maven

C代码编译安装三步骤

(1)./configure

1) 通过选项传递参数,指定启用特性、安装路径等;执行时会参考用户的指定以及Makefile.in文件生成makefile

2)检查依赖到的外部环境;

 (2)make

根据makefile文件,构建应用程序


(3)make  install

(使用install命令)

开发工具:

     对于 不同的程序都是不同的

    autoconf:生成configure脚本

//autofile需要结合额外的配置文件去生成configure脚本。

    automake:生成Makefile.in 


 建议:安装前查看(软件里自带的)INSTALL,README



开源程序源代码的获取

官方自建站点

apache.org(ASF)

mariadb.org

代码托管:

SourceForge

Github.com

code.google.com


c/c++:gcc (GUN C complier GUN的组织c编译器)

融合了很多其他编译器



编译C源代码:

前提:提供开发工具及开发环境

开发工具:make,gcc等

开发环境:开发库,头文件

glibc:GUN的C标准库

 

通过“包组”提供开发组件

#yum grouplist 

Centos 6 :“Development Tools”,"Server Platfor Development"

第一步:configure脚本

选项:指定安装位置,指定启用的特性。

--help:获取其支持的选项

[root@CentOs6 httpd-2.2.29]# ./configure --help

选项分类:

安装路径设定:

--prefix=/Path/to/somewhere:指定默认安装位置

//如果其他很多文件安装地址不指定自动在默认目录下创建子目录

--sysconfdir=/path/to/somewhere:配置文件安装位置:

system type:

只有在交叉编译时才会用到

可选特性:

disable feature:禁用某个特性

enable feature:启用某个特性

optional Packages

可选程序包,依赖到的程序包

--with-PACKAGE[=ARG]

--without-PACHAGE

第二步:make

第三部:make insatll

第二第三部一般不需要用其他附加选项,直接执行就行。




步骤实现:

1、进入源码包目录:设置configure属性

     #./configure --prefix=/usr/local/apache2 --sysconfigdir=/etc/http2


2、属性执行完成之后使用make命令执行编译

     # make


3、编译完成之后执行安装命令安装即完成

    # make install




安装后的配置:

(1)如果不在命令搜索路径下,则需导出二进制程序目录至PATH环境变量中:

编辑文件/etc/profile.d/NAME.sh

export PATH=/PATH/TO/BIN:$PATH

(2)导出库文件路径

编辑文件/etc/ld.so.conf.d/NAME.conf

添加新的库文件所在目录至此文件中;

让系统重新生成缓存

ldconfig -v

(3)导出头文件

基于链接的方式实现

ln -sv 

导出所有每一个文件为一个链接

(4)导出帮助手册

编辑/etc/man.config文件

添加MANPATH=/usr/local/apchach2/man    //此为http服务源码安装时指定的文件地址