一、yum简介
二、客户端配置文件
三、yum命令使用
四、*.repo的配置文件变量
五、使用本地光盘当做yum仓库
六、创建yum仓库
七、程序包的编译安装
八、开源程序的源代码的获取与安装
九、configure脚本十、后续步骤

前言    
    rpm弊端:依赖关系,yum会自动解决依赖关系
    Centos:yum,dnf
    debian:apt-get
    suse:zypper
    
一、yum简介  
    C/S架构:yelow dog Update Modifer
    S:文件服务器,放置rpm包,共享到外部主机
        描述性信息{元数据文件}:版本,包名,依赖关系
    c:支持rpm包的基本功能和yum工具
        安装程序的时候:先下载描述性信息到本地缓存中//查看是否存在目标程序,分析依赖关系,下载,安装,删除程序包,但是不会删除元数据
        //问题:元数据本地的和server可能没有同步,方法:每一次使用yum的时候,同步校验码(元数据)是否相同,判断是否更新
    同一个服务器,多个网站地址:镜像列表
        
    yum弊端:假如安装过程中断的话,恢复后,无法继续,需要重新开始
        dnf主要用于解决该问题
    yum仅仅是rpm的前端工具
    
    要素:
        yum命令
        配置文件
        仓库存在
    createrepo:创建元数据文件,自动分析依赖关系
            //分组:xml格式的
    yum repository:yum repo 仓库
        存储了众多的rpm包,以及包的相关的元数据文件(放置于特定目录下,repodata)
        文件服务器:
            ftp://
            http://
            nfs://
            file://
    [root@mt ~]# rpm -qc yum
        /etc/logrotate.d/yum    //日志滚动
        /etc/yum.conf            //主配置文件
        /etc/yum/version-groups.conf
    多个仓库:yum会分析所有仓库的元数据,都有目标程序的时候,yum会安装最新的
    
二、客户端配置文件
    /etc/yum.conf :为所有仓库提供公共配置
        [main] //仓库名 repositoryid
        exactarch=1 //是否做严格的平台匹配,i386,x86..
        installonly_limit=5 //一次同时安装几个程序包
         //man yum.conf //查看配置文件帮助手册
    /etc/yum.repo.d/*.repo 为仓库的指向提供配置
        [repositoryid]  //唯一
        name=随意启用
        baserurl=[ftp|http|file|]://path/to/repository
                 url://server1/paht/to/repository
                 url://server1/paht/to/repository    //查找根据顺序查找
        mirrorlist= //以镜像方式,在线共享的文件
                //yum需要支持插件功能,baseurl和mirrorlist选择一个使用
        enabled=1/0 //是否启用
        gpgcheck=0/1 //是否检查其完整性和来源合法性
        repo_gpgcheck=0/1 //检查仓库的元数据的GPG签名
        gpgkey=URL //密钥文件所在地
        enablegroups=0/1 //默认支持,是否基于组批量管理程序包
        failovermethod=roundrobin/priority 故障转移方法,轮训(随机抽取)|根据优先级
                            //多个仓库的查找顺序,默认为roundrobin:随机
        timeout //超时时间,默认30s
        username
        password  //指明账号和密码
        cost= 默认都是1000
    https://mirrors.aliyun.com/centos/7/os/x86_64/  //这个路径下有repodata目录,指定到这里就可以
    
    问题:baseurl和mirrorlist的区别
        baseurl:相对稳定
        mirrorlist也是一个网址,在这个网址里能下到更新源列表
            mirrorlist是从上面查找最近的更新源

三、yum命令使用
    注意:yum是具有事务的概念的,同时只能启动一个
        * repolist [all|enabled|disabled]
        * repoinfo [all|enabled|disabled]
        list all|通配符  //glob风格的通配符,默认只列出未安装的包
             available|通配符  //尚未安装的
             updates |通配符    //可用的升级包
             installed |通配符//已经安装的
             extras|通配符  //拓展的仓库内容
             obsoletes|通配符 //废弃的包
             recent|通配符  //最近添加到repository中的
        grouplist
        search string1 [string2] [...] //搜索包名和summary信息        
        reinstall|install pk1 pk2     安装
            yum reinstall zsh --enablerepo=base、
         update pk1 pk2         升级
        check-update         检查更新
        remove|erase    pk1 pk2 卸载
        info                 简要信息
        clean                  清理本地缓存
            clean  [  packages  | metadata | expire-cache | rpmdb |  plugins | all ]
        deplist //显示依赖关系
        provides | whatprovides feature1 [feature2] [...]  //查看指定的特性(可以是某文件)是由哪个程序包提供的
            yum whatprovides /bin/ls
        makecache [fast]
        downgrade package1 [package2] [...  //降级安装
        version    grouplist | groupinfo | installed | available | all
        history [summary] //安装和更新的事务,只查看摘要信息
                [info|list| package-list|package-info|summary|addon-info|redo|undo|rollback|new|sync| stats]
        
        localinstall/localupdate     //本地安装,而不是仓库中的包,现在直接使用intall和update都可以了
        grouinstall
        groupupdate
        grouplist
        groupremove
        groupinfo
    
    指定repo安装:--enablerepo=base
    降级安装:yum downgrade zsh    
        

四、*.repo的配置文件变量
    $releasever:代表发行版的版本,从[main]部分的distroverpkg获取,如果没有,则根据redhat-release包进行判断。
    $arch:cpu体系,如i686,athlon等
    $basearch:cpu的基本体系组,如i686和athlon同属i386,alpha和alphaev6同属alpha。
    
    http://mirrors.173.com/centos/6/i386/os
    http://mirrors.173.com/centos/7/x86_64/os
    http://mirrors.173.com/centos/7/i686/os
    http://mirrors.173.com/centos/$releasever/$basearch/os


        $releasever == [6|7|8| r //主版本号,6.7是6,7.1是7
        $arch == 平台
        $basearch 基础平台,i386,i686的基础平台都是i386
        $YUM0-$YUM9 //自定义了10个变量,供用户使用
    http://updates/$releasever/$basearch
  http://updates/$releasever/$basearch
  http://updates/$releasever/$basearc
    
    yum install yum-priorities
        priority=N (N为1到99的正整数,数值越小越优先)

五、使用本地光盘当做yum仓库
    mount -r -t iso9660 /dev/cdrom /mnt
    创建repo文件

        [cdrom]
        name=
        baseurl=
        gpgcheck=
        gpgkey=
        enabled=

    yum install zsh --nogpgcheck
        -y 自动回答为yes
        -q quiet静默模式
        --disablerepo,--enablerepo ;临时禁止或者启用repo
        --disableplugin=plugin 禁用某个插件  
        --noplugin 禁用插件
        
六、创建yum仓库
    yum install createrepo
    mkdir /tmp/test //repo所在地,复制部分rpm包到该文件中

    -x 排除某些包
    -g 指明groupfile
    -v 显示过程
    -c cachedir
    --basedir rpm所在位置

    cd /tmp/test ; createrepo ./   //直接在本目录创建
    createrepo /tmp --basedir=tmp/test
    
七、程序包的编译安装
    testapp-VERSION-release.src.rpm -->安装后,使用rpmbuild命令制作成二进制的rpm包,而后在安装
    源代码组织格式:
        多文件:文件中的代码之间,很可能存在跨文件依赖关系
        C、C++:make:依赖于(mkefile.in-->makefile)文件
            //makefile.in是一个模板,例如安装路径,启用功能等,
            //configure允许传递选项,指定编译参数,到makefile.in文件,生成makefile
        jave:maven
    源代码--->预处理--->编译(gcc)--->汇编(汇编器)--->链接(链接器)-->执行
    
    编译安装三步骤:
        ./confiure    //生成makefile文件
            (1)通过选项传递参数,指定启用特性,安装路径等;执行时会参考用户的指定以及Makefile.in文件生成makefile文件
            (2)检查依赖到的外部环境
        make //make将源代码翻译成二进制,但是需要调用gcc实现
            根据makefile文件,构建应用程序
        make install
            使用cp命令也可以实现
    开发工具:自动生成makefile.in
        autoconf:生成confiure脚本 //也要结合一个脚本实现,脚本中描述程序的功能等
        automake:生成makefile.in //依赖于一个脚本,脚本中包括了,各种依赖关系,编译器版本等
    建议:安装前查看INSTALL,README文件
    
八、开源程序的源代码的获取与安装
    官方自建站点
        apache.org
        mariadb.org
        ...
    代码托管点:
        SourceForge:
        Github.com
        code.google.com
    
    c/c++ :gcc (GNU C Complier) :功能强悍
    编译C源代码:
        前提:提供开发工具及开发环境
            开发工具:make,gcc等
            开发环境:开发库,头文件
                glibc:标准库,兼容posix的标准
        通过“包组”提供开发组件
            Centos 6:“Development Tools",“Server Platform Development”
    注意:老版本的程序和新版本的程序在不同的OS上可能要求环境不一样导致无法安装
    
九、configure脚本
    选项:指定安装位置,指定启用的特性
    --help:获取支持的选项
        选项分类:
            安装路径设定:
                --prefix=/PATH/TO/SOMEWHERE :指定默认安装位置,默认/usr/local
                --sysconfdir=/PATH/TO/SOMEWHERE:配置文件路径
            System types:编译的操作可以执行交叉编译:在本平台编译其他平台的程序
            Optional Features:可选特性
                --disable-Feature:禁用该特性
                --enable-Feature:启用该特性
            Some influential environment variables:可能会产生影响的环境变量
            OPtional Packages:可选程序包,它依赖的包
                --with-PACKAGE[=ARG] :使用该包,需要指定路径
                --without-PACKAGE:不使用该包
                --with-include-apr
    make && make install
    
十、后续步骤
    /usr/local/apache/    man,lib和头文件
    1.到处二进制程序目录至PATH环境变量中
        /etc/profile.d/NAME.sh
            export PATH=$PATH:/usr/local/apache/
    2.导出库文件路径
        编辑/etc/ld.so.conf.d/NAME.conf
            /usr/local/apache/lib
        让系统重新生成缓存:ldconfig -v
    3.到处头文件//基于链接的方式实现
        ln -sv /usr/local/apache/include /usr/include
    4.导出帮助手册
        /etc/man.config
            添加一条MANPATH
             MANPATH     /usr/local/apache/man
        CentOS 6:/etc/man.config ;
##        CentOS 7: /etc/man_db.conf

练习:
    1.yum的配置和使用,包括yum repository
    2.编译安装apache 2.2 ;启动此服务