码迷,mamicode.com
首页 > 其他好文 > 详细

yum方式软件管理及进阶源码编译安装

时间:2015-06-13 18:47:00      阅读:226      评论:0      收藏:0      [点我收藏+]

标签:管理工具   服务器   yum rpm   软件包   

1. yum简介
2. yum组成结构
3. yum配置使用
4. yum命令详解
5. yum源变量
6. yum仓库创建
7.进阶源码编译安装


1. yum简介
YUM: Yellowdog Updater Modifed, 是由Duke University团队修改Yellow Dog Linux的Yellow Dog Updater开发而来的,是一个基于RPM包管理器的字符前端软件管理器(依赖于RPM包)。能够从指定的服务器自动下载RPM包并且安装,可以处理RPM包的依赖关系,并且一次安装所有依赖的软件包,无须繁琐的一次次下载、安装。被Fedora、Red Hat Enterprise Linux、CentOS所使用。


2. yum的组成结构

 

简单的说: YUM就是一个RPM包管理工具,而且YUM是C/S结构,服务端就是一个文件服务器,都是rpm包;而YUM客户端可以配置多个YUM服务端来使用。

2.1 YUM服务端

yum repository: 称之为yum仓库,存在于yum服务器端,分成两部分:
    a. 仓库数据:
        各个数据包
    b. 元数据(meta data)
        数据文件信息在centos5是xml格式,在centos6,7上用的是sqlite,基于文件来实现关系型数据库
        元数据包括:
            包名,版本信息,各包所包含的文件列表,依赖关系,包分组信息
            我们可以使用createrepo命令来给rpm包创建仓库


    yum仓库 主要有以下几类:
        base库   #基础库
        update库 #更新版本库
        extra库  #格外库
        epel库   #fedora维护的库

        #如果某软件base库里有,update库里也有,则应该使用update库中的包,因为update库中是更新的版本
        以上库的优先顺序应为: base > update > extra > epel

yum机制:
    要想确保YUM正常工作,要满足以下几点:
        2.1.1 确保有yum repo可用
            rpm包的文件服务器中, repodta目录所在的父目录,就是一个可用仓库
            例如:http://mirrors.sohu.com/centos/6/os/x86_64/ 目录下有repodate目录的就可认定为一个yum仓库

            yum仓库可以通过以下三种方式共享:

            ftp: ftp://server/path/to/repository
            http http://server/path/to/repository
            nfs nfs://server/nfs_path
            file file:///path/to/repository  #本地文件系统,挂载光盘后直接就可以用 file:///media/cdrom 即可

 


3. yum配置使用


        在客户端上必须要提供repo配置文件,指明仓库访问路径及各种属性信息

        主配置文件(中心配置文件): /etc/yum.conf (此配置文件的参数作用可以通过 man yum.conf查看), 内容如下:

            [main]
            cachedir=/var/cache/yum/$basearch/$releasever    #缓存目录
            keepcache=0     #是否保存缓存数据? 0 不保存
            debuglevel=2     #debug信息等级
            logfile=/var/log/yum.log    #yum的日志信息保存地址
            exactarch=1    #exact arch match? 是否要精确匹配平台?
            obsoletes=1    #是否要检查过期仓库?
            gpgcheck=1
            plugins=1
            installonly_limit=5
            bugtracker_url=http://bugs.centos.org/set_project.php?project_id=19&ref=http://bugs.centos.org/bug_report_page.php?category=yum
            distroverpkg=centos-release

            #  This is the default, if you make this bigger yum won‘t see if the metadata
            # is newer on the remote and so you‘ll "gain" the bandwidth of not having to
            # download the new metadata and "pay" for it by yum not having correct
            # information.
            #  It is esp. important, to have correct metadata, for distributions like
            # Fedora which don‘t keep old packages around. If you don‘t like this checking
            # interupting your command line usage, it‘s much better to have something
            # manually check the metadata once an hour (yum-updatesd will do this).
            # metadata_expire=90m

            # PUT YOUR REPOS HERE OR IN separate files named file.repo
            # in /etc/yum.repos.d


        一个或多个相关仓库的配置信息可保存在一个文件,文件名都以.repo结尾,存放在/etc/yum.repos.d 目录下


        在.repo文件定义一个yum repo指向的格式:

        [REPOID] #这个REPOID可以自己设定任意字符
        name=Some name for this repository #此行等号两侧不能有空格,右侧可以加空格,不写此字段使用yum会报warning
        baseurl=file:///media/cdrom  #baseurl可以有多个,用来指定真正仓库的所在地
                ftp: ftp://server/path/to/repository
                http http://server/path/to/repository
                nfs nfs://server/nfs_path
        #多个baseurl 必须按照上面格式书写,第二个baserul不能出现在行首
        enabled={0,1} #1为启用此repo
        gpgcheck={0,1} #是否检查GPG(GNU Private Guard),一种密钥方式签名。
        gpgkey=URL #当配置gpgcheck选项时,要加上gpgkey来验证
            例如:gpgkey=file:///media/cdrom/GPG-RPM-KEY-centos-6
        mirrorlist=URL to a file #这个文件指向多个baseurl,不定义baseurl的时候可以用这个指定多个仓库
        cost={1..n} #默认值为1000, 指定访问此仓库的开销

 

        例如在yum客户端创建一个新的repo,首先定位到/etc/yum.repos.d下创建一个文件 163.repo
        内容如下:

            [163]
            name=CentOS 6 from 163 mirror
            baseurl=http://mirrors.163.com/centos/6.6/os/x86_64/ #记得检查该目录是否有 repodata目录
            enabled=1
            gpgcheck=0

        然后可以使用命令 yum repolist 查看到此repo配置

4. yum命令详解

    这里的yum命令都是指在客户端上使用的,包括列表,清理缓存,安装/重新安装/降级安装/卸载,查询等命令。

4.1 列出所有可用repo
    yum repolist {enabled|disabled|all} #列出{已经启用的|已禁用的|所有的}可用的repo

4.2 列出rpm包
    yum list {all|installed|available} # 列出{所有|已安装|未安装但repo内有的}

4.3 查看包的描述信息
    yum info package_name

4.4 列出所有的包组信息
    yum grouplist

4.5 显示包组的信息, 指定某个包组的程序包列表和功能
    yum groupinfo "GROUP NAME"
        例如: yum groupinfo "Server Platform Development"

4.6 清理缓存
    yum clean {all|packages|metadata|expire-cache|rpmdb|plugins}  #清理{所有|特定rpm包|元数据|过期缓存|repo数据库|插件}的缓存

    只有yum clean all比较常用,其他用的到的在来翻看笔记吧

    #注,清理缓存并不会删除目录结构,只是结构内的数据被清除
        可以用 tree /var/cache/yum来对比 清理缓存后的文件列表对比

 

4.7 安装程序包
    yum install package_name

    重新安装程序包
    yum reinstall package_name

4.8 升级程序
    检查可用的升级包
        yum check-update  #并不会执行安装
    升级包
        yum update package_name
            例如: 我们要升级一个程序 x-1.3.1
            当前repo中存在x-1.3.2, x-1.3.3, x-2.0.1 三个版本,我们只想安装特定的x-1.3.2
            而直接运行 yum update x ,会直接将x升级到最新版本 x-2.0.1
            这时候,我们可以加上rpm包的版本,指定升级版本

    升级到特定版本
        yum update package_name-version

    降级包
        yum downgrade package_name


4.9 卸载包
    yum remove|erase package_name
        #如果卸载一个软件被其他软件依赖, 那会连同所用的依赖包一同卸载掉。

4.10 查询某配置文件是由哪个包生成的?
    yum whatprovides | provides /path/to/somefile
        #whatprovides和provides两个参数都可以

4.11 安装包组
    yum groupinstall "GROUP NAME" #可以用yum gourplist来查看都支持哪些包组

4.12 卸载包组
    yum groupremove "GROUP NAME"


4.1.3 安装仓库外rpm包

假设: 从其他处获得一个rpm包, 如果此包依赖于其他包(在仓库中), 如何安装?
    如果只是单次安装需要:
        CentOS 5:
            yum install /path/to/package_file

        CentOS 6,7:
            yum localinstall /path/to/package_fiel

 


5. yum源变量

在使用在线的repo源的时候, 客户端yum配置文件中中可以使用4个变量

$releasever: 程序的版本 #可以根据系统来替换成相应的主版本号,5,6,7,而主版本号下的连接是当前发行版的最新版本5.6,6.5,7.1等
$arch: 系统架构
$basearch: 系统基本架构,如i686, i586等的基本架构为i386
$uuid:
$YUM0-9: 在系统中定义的环境变量, 可以在yum中使用:

ps: 实际环境中,baseurl中常用$releasever和$basearch来替换本地架构和linux版本来让仓库的配置文件更具有通用性,让不同的平台版本可以使用同一个配置文件。

5.1 获取yum源变量值

获取当前系统相应变量替换结果的办法:
-bash-4.1# python
Python 2.6.6 (r266:84292, Jan 22 2014, 09:42:36)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2
>>> import yum,pprint
>>> yb = yum.YumBase()
>>> pprint.pprint(yb.conf.yumvar,width=1)
Loaded plugins: fastestmirror, refresh-packagekit
{‘arch‘: ‘ia32e‘,
 ‘basearch‘: ‘x86_64‘,
 ‘infra‘: ‘stock‘,
 ‘releasever‘: ‘6‘,
 ‘uuid‘: ‘54298ec4-d059-4bfe-a967-cce66eb95513‘}
>>> quit()

6. yum仓库创建

yum仓库可以分为本地仓库和在线仓库两种:

6.1 自建本地yum仓库:
    1. 如何自建基于光盘镜像的yum repo
        挂载光盘
        mount /dev/cdrom /media/cdrom
        在/etc/yum.repo.d/下创建一个.repo文件
        内容为:
        [base]
        name=Local Media
        baseurl=file:///media/cdrom
        pgpcheck=0
        enabled=1


    2. 自简提供yum仓库的中心服务器
        ftp, http, nfs 三种常用的文件服务器

        以http为例:,步骤:
            1. 安装httpd程序
            #rpm -ivh http-x-x-x-x.rpm
            1.2 启动httpd服务
            #service httpd start
            #chkconfig httpd on   #centos7 不适用

            2. httpd的文档根目录为/var/www/html
                创建子目录,存放某相关的所有rpm包


            3. 为仓库生成元数据文件,以使其能够作为仓库使用
                3.1 安装 craeterepo
                    rpm -ivh createrepo-xxx.xxx.xxx.rpm
                    或者
                    #yum install createrepo

                3.2 对rpm包目录createrepo:
                #createrepo /var/www/html/zabbix
                # createrepo /var/www/html/zabbix
                Spawning worker 0 with 16 pkgs
                Workers Finished
                Gathering worker results

                Saving Primary metadata
                Saving file lists metadata
                Saving other metadata
                Generating sqlite DBs
                Sqlite DBs complete
               
                则该目录下会自动生成一个repodata目录,该目录/var/www/html/zabbix就可以当repo用了

            4. 配置yum客户端
                [zabbix]
                name=zabbix repo
                baseurl=http://192.168.229.141
                gpgcheck=0
                enabled=1


            然后就可以使用这个repo了

7.进阶源码编译安装

7.1 编译安装,依赖于开发环境
        程序源码:
            c/c++ 底层,无跨平台能力
            perl
            python

    别人制作好的rpm包,都是编译过的,而当源码包的功能有20个,
            主包:6个功能
            分包1: 2个功能
            分包2: 4个功能

        也就是说别人会根据需求订制功能,编译后rpm包功能会比源码功能少,并且也会比源码包慢几个版本
        可能出现你需要的功能,在别人编译好的rpm上没办法使用,这时候就需要我们自己来根据源代码来自己编译安装

    开源的源代码有如下两个方式来提供:

        1.开源应用程序:
            自建站点:  #一般都是比较大型的项目会有自己的站点
                apache, ASF
                mysql
                drbd
        2. 代码托管:  #一些中小型项目的源代码一般都使用代码托管的方式,寄存在以下的代码托管网站
                Sourceforge
                github.com
                code.google.com

        tips: 编译安装的缺点是: 无法自动卸载安装的文件,所以习惯把编译安装的软件放在一个目录下,便于日后升级卸载

 

7.2 编译工具:gcc
        gnu c complier 只能用来编译c程序
        gcc-c++ 用来编译c++程序
        使用 rpm -qa| grep gcc 可以看到本机有很多种针对不同语言的编译工具,编译是很耗时的


7.3 源代码的组织格式:
        多文件:
            文件中的代码有依赖关系
        项目管理工具:
            GNU make(gcc) 定义好多文件之间的编译关系,处理多文件内源码的依赖关系

            项目: 50文件
                项目的制作者: 利用make工具,为make提供一个配置文件
            make不是编译工具,是编译的管理工具

            autoconf: 生成编译环境检查(检查开发环境是否满足编译需求)及编译功能配置(选择源码内的功能)脚本
                生成configure
                当configure脚本执行的时候,会结合automake工具生成的Makefile.in来生成makefile

            automake: 生成一个Makefile.in  --> makefile

7.4 编译源程序的步骤:
        # tar xf testapp-version.tar.{xz|bz|gz}
        # cd testapp-version
        # ./configure
            还需要通过许多选项指定编译特性,选取功能
        # make
        # make install


        ./configure 脚本的使用:
            1. 获取帮助
                ./configure --help    #基于每个项目内的配置选项是不同的,需要查看

            2. 通用一些选项
                安装路径相关:
                --prefix=/path/to/somewhere: 指定安装路径
                --sysconfdir=/path/to/somewhere: 指定配置文件安装路径的, 路径应该为/etc/下某个目录

            指定启用/禁用的特性
                --enable-FEATURE   例如 --enable-fpm ,但是启用一个功能,就会依赖另外的开发环境包
                --disable-FEATURE  例如 --disable-socket

            指定所依赖的功能、程序或文件
                --with-FUNCTION[=/path/to/somewhere]
                --without-FUNCTION

           
7.5 安装后的配置:

    7.5.1 程序运行及维护:

        1. 让二进制程序直接运行,而无需输入路径
        #vim /etc/profile.d/APPNAME.sh
        export PATH=$PATH:/path/to/somewhere

        2. 导出手册页:
            编辑/etc/man.config 配置文件,添加一项MANPATH,路径为新安装的程序的man目录
            或者
            #man -M /path/to/somewhere KEYWORD 就可以找KEYWORD的帮助手册了

        3. 自己编写/etc/init.d/的启动脚本

ps: 如果只是为了编译安装,并运行软件,则到此就可以结束了。
    下面的步骤是为了解决其他应用程序依赖开发环境,和针对编译安装程序的二次开发准备环境使用的。
==========================================================================================


    7.5.2 程序开发: 如果其他应用程序依赖此程序的开发环境,或针对此程序做二次开发
        1. 导出库文件
            第一步: 指定让系统搜索定制的路径
                编辑/etc/ld.so.conf.d/APPNAME.conf
                    一行一个库文件路径

            例如: vim /etc/ld.so.conf.d/nginx.conf
                    #/usr/local/ngxin/lib
                       
            第二步:触发系统重新搜索所有的库文件并生成缓存
                    #ldconfig
                        -v 显示过程

        2. 导出头文件
            /usr/local/ngxin/include

            系统找头文件的路径是 /usr/include


            导出方式: 创建链接进行
                ln -sv /usr/local/ngxin/include /usr/include/nginx

 

启动程序得自己写,在/etc/init.d/,不是不能启动,自己写好,就可以和其他软件用同一种风格来运行了。


yum方式软件管理及进阶源码编译安装

标签:管理工具   服务器   yum rpm   软件包   

原文地址:http://richier.blog.51cto.com/1447532/1661544

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!