zoukankan      html  css  js  c++  java
  • Linux程序包管理之yum及源代码安装

    第十六章、Linux程序包管理之yum及源代码安装

    目录

    • yum介绍
    • yum配置文件
    • yum的repo配置文件中可用的变量
    • yum命令的使用
    • 使用光盘作为本地yum仓库
    • 如何创建yum仓库
    • 编译安装的三步骤
    • 开源程序代码的获取方式
    • 安装后的配置

    16.1、yum简介

    Yum(全称为 Yellow dog Updater, Modified)是redhat系列linux系统的包管理工具。就是类似windows下安装软件那个下一步下一步的东西。由于linux的开源,所以linux下的软件有大量组件依赖。这导致了linux安装一个软件必须先安装各依赖包,yum就是帮助我们解决这个的。

    yum的基础是RPM,RPM是由红帽公司开发的软件包管理方式,使用rpm我们可以方便的进行软件的安装、查询、卸载、升级等工作。但是RPM软件包之间的依赖性问题往往会很繁琐,尤其是软件由多个rpm包组成时。 于是,yum基于rpm包管理,做到了能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包的功能,无须繁琐地一次次下载、安装。

    16.2、yum repository是什么?

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

    通过配置repo文件中指定远程文件服务器的地址来安装指定的程序包,repo文件中文件服务器的格式:

    ftp://
    http://
    nfs://
    file:///指向到repodata所在目录;
    

    16.3、yum客户端

    配置文件

    /etc/yum.conf:为所有仓库提供公共配置
    /etc/yum.repos.d/*.repo:为仓库的指向提供配置
    

    仓库的定义

    [repositoryID]
    name=Some name for this repository
    baseurl=url://path/to/repository/	# 指定仓库的路径
    enabled={1|0}	# 是否启用此仓库	
    gpgcheck={1|0}	# 是否对程序包进行验证
    gpgkey=URL	# 指定程序包的签名
    enablegroups={1|0}	# 是否允许安装包组
    failovermethod={roundrobin | priority}	
    当baseurl指定多个仓库时的次序,默认为:roundrobin,随机挑选;
    cost=
    定义多个repo时访问开销默认为1000;
    
    

    16.4、yum命令的使用方法

    使用格式

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

    [command]列表

    
    command is one of:
    * install package1 [package2] [...]
    * update [package1] [package2] [...]
    * update-to [package1] [package2] [...]
    * update-minimal [package1] [package2] [...]
    * check-update
    * upgrade [package1] [package2] [...]
    * upgrade-to [package1] [package2] [...]
    * distribution-synchronization [package1] [package2] [...]
    * remove | erase package1 [package2] [...]
    * autoremove [package1] [...]
    * list [...]
    * info [...]
    * provides | whatprovides feature1 [feature2] [...]
    * clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
    * makecache [fast]
    * groups [...]
    * search string1 [string2] [...]
    * shell [filename]
    * resolvedep dep1 [dep2] [...]
    (maintained for legacy reasons only - use repoquery or yum provides)
    * localinstall rpmfile1 [rpmfile2] [...]
    (maintained for legacy reasons only - use install)
    * localupdate rpmfile1 [rpmfile2] [...]
    (maintained for legacy reasons only - use update)
    * reinstall package1 [package2] [...]
    * downgrade package1 [package2] [...]
    * deplist package1 [package2] [...]
    * repolist [all|enabled|disabled]
    * repoinfo [all|enabled|disabled]
    * repository-packages  <enabled-repoid>  <install|remove|remove-or-reinstall|remove-
    or-distribution-synchronization> [package2] [...]
    *  version  [  all  |  installed  |  available  | group-* | nogroups* | grouplist |
    groupinfo ]
    * history  [info|list|packages-list|packages-info|summary|addon-info|redo|undo|roll‐
    back|new|sync|stats]
    * load-transaction [txfile]
    * updateinfo [summary | list | info | remove-pkgs-ts | exclude-updates | exclude-all
    | check-running-kernel]
    * fssnapshot [summary | list | have-space | create | delete]
    * fs [filters | refilter | refilter-cleanup | du]
    * check
    * help [command]
    

    16.4.1、常用方法示例

    显示仓库列表

    yum repolist [all | disabled] # 默认只显示以启用的repo
    

    示例:

    [root@www yum.repos.d]# yum repolist
    已加载插件:fastestmirror
    Loading mirror speeds from cached hostfile
     * base: mirrors.aliyun.com
     * epel: mirrors.aliyun.com
     * extras: mirrors.aliyun.com
     * updates: mirrors.aliyun.com
    源标识                       源名称                                                      状态
    base/7/x86_64                CentOS-7 - Base - mirrors.aliyun.com                         9,363
    epel/x86_64                  Extra Packages for Enterprise Linux 7 - x86_64              10,976
    extras/7/x86_64              CentOS-7 - Extras - mirrors.aliyun.com                         435
    localbase                    local base repo                                              9,007
    updates/7/x86_64             CentOS-7 - Updates - mirrors.aliyun.com                        399
    repolist: 30,180
    

    显示程序包

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

    示例:

    # 1、显示以ansible开头的所有的包
    [root@www yum.repos.d]# yum list ansible*
    已加载插件:fastestmirror
    Loading mirror speeds from cached hostfile
     * base: mirrors.aliyun.com
     * epel: mirrors.aliyun.com
     * extras: mirrors.aliyun.com
     * updates: mirrors.aliyun.com
    可安装的软件包
    ansible.noarch                                   2.2.0.0-4.el7                             epel
    ansible-inventory-grapher.noarch                 2.3.2-1.el7                               epel
    ansible-lint.noarch                              3.4.1-1.el7                               epel
    ansible-openstack-modules.noarch                 0-20140902git79d751a.el7                  epel
    ansible-review.noarch                            0.12.2-1.el7                              epel
    ansible1.9.noarch                                1.9.6-2.el7                               epel
    # 2、显示所有已经安装的包
    [root@www yum.repos.d]# yum list installed
    

    安装程序包

    yum install package1 [package2] [...]
    # 默认安装最新版本,如果希望安装老版本则指定版本号
    

    示例:

    # 1、安装tree命令和htop命令
    [root@www yum.repos.d]# yum install tree htop
    

    重新安装程序包

    yum reinstall package1 [package2] [...]
    

    示例:

    # 重新安装tree,htop命令
    [root@www yum.repos.d]# yum reinstall tree htop
    

    升级程序包

    yum update [package1] [package2] [...]
    yum downgrade package1 [package2] [...]  #(降级安装)
    

    示例:

    # 练习1、升级centos7系统vim编辑器
    [root@www yum.repos.d]# yum update vim-common
    已加载插件:fastestmirror
    Loading mirror speeds from cached hostfile
     * base: mirrors.aliyun.com
     * epel: mirrors.aliyun.com
     * extras: mirrors.aliyun.com
     * updates: mirrors.aliyun.com
    正在解决依赖关系
    --> 正在检查事务
    ---> 软件包 vim-common.x86_64.2.7.4.160-1.el7 将被 升级
    --> 正在处理依赖关系 vim-common = 2:7.4.160-1.el7,它被软件包 2:vim-enhanced-7.4.160-1.el7.x86_64 需要
    ---> 软件包 vim-common.x86_64.2.7.4.160-1.el7_3.1 将被 更新
    --> 正在检查事务
    ---> 软件包 vim-enhanced.x86_64.2.7.4.160-1.el7 将被 升级
    ---> 软件包 vim-enhanced.x86_64.2.7.4.160-1.el7_3.1 将被 更新
    --> 解决依赖关系完成
    

    检查可用升级

    yum check-update
    

    卸载程序包

    yum remove | erase package1 [package2] [...]
    # 生产环境中不建议使用remove去卸载,会同时卸载依赖包,影响其它程序;
    

    示例:

    [root@www ~]# yum remove tree
    

    查看程序包信息

    yum info [...]
    

    示例:

    [root@www ~]# yum info htop
    已加载插件:fastestmirror
    Loading mirror speeds from cached hostfile
     * base: mirrors.aliyun.com
     * epel: mirrors.aliyun.com
     * extras: mirrors.aliyun.com
     * updates: mirrors.aliyun.com
    已安装的软件包
    名称    :htop
    架构    :x86_64
    版本    :2.0.2
    发布    :1.el7
    大小    :207 k
    源    :installed
    来自源:epel
    简介    : Interactive process viewer
    网址    :http://hisham.hm/htop/
    协议    : GPL+
    描述    : htop is an interactive text-mode process viewer for Linux, similar to
             : top(1).
    

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

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

    示例:

    [root@www ~]# yum provides /bin/htop
    已加载插件:fastestmirror
    Loading mirror speeds from cached hostfile
     * base: mirrors.aliyun.com
     * epel: mirrors.aliyun.com
     * extras: mirrors.aliyun.com
     * updates: mirrors.aliyun.com
    htop-2.0.2-1.el7.x86_64 : Interactive process viewer
    源    :@epel
    匹配来源:
    文件名    :/bin/htop
    

    清理本地缓存

    yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
    # 通常清理缓存时使用yum clean all
    

    构建缓存

    yum makecache
    

    搜索

    yum search string1 [string2] [...]
    

    示例:

    [root@www ~]# yum search ansible
    

    查看指定包所依赖的程序

    yum deplist package1 [package2] [...]
    

    示例:

    # 查看ansible依赖哪些包
    [root@www ~]# yum deplist ansible
    已加载插件:fastestmirror
    Loading mirror speeds from cached hostfile
     * base: mirrors.aliyun.com
     * epel: mirrors.aliyun.com
     * extras: mirrors.aliyun.com
     * updates: mirrors.aliyun.com
    软件包:ansible.noarch 2.2.0.0-4.el7
       依赖:/usr/bin/python2
       provider: python.x86_64 2.7.5-48.el7
       依赖:PyYAML
       provider: PyYAML.x86_64 3.10-11.el7
       依赖:python(abi) = 2.7
       provider: python.x86_64 2.7.5-48.el7
       依赖:python-httplib2
       provider: python-httplib2.noarch 0.7.7-3.el7
       依赖:python-jinja2
       provider: python-jinja2.noarch 2.7.2-2.el7
       依赖:python-keyczar
       provider: python-keyczar.noarch 0.71c-2.el7
       依赖:python-paramiko
       provider: python2-paramiko.noarch 1.16.1-1.el7
       provider: python-paramiko.noarch 1.12.4-1.el7.centos
       依赖:python-setuptools
       provider: python-setuptools.noarch 0.9.8-4.el7
       依赖:python-six
       provider: python-six.noarch 1.9.0-2.el7
       依赖:sshpass
       provider: sshpass.x86_64 1.05-5.el7
    

    查看yum事务历史

    yum history  [info|list|packages-list|packages-info|summary|addon-info|redo|undo|roll‐back|new|sync|stats]
    

    示例:

    [root@www ~]# yum history
    已加载插件:fastestmirror
    ID     | 登录用户                 | 日期和时间       | 操作           | 变更数
    -------------------------------------------------------------------------------
        15 | root <root>              | 2016-12-29 08:33 | Update         |    2
        14 | root <root>              | 2016-12-29 08:26 | Reinstall      |    2
        13 | root <root>              | 2016-12-29 08:25 | Install        |    2  <
        12 | root <root>              | 2016-12-29 08:16 | Install        |    1 ><
        11 | root <root>              | 2016-12-26 15:07 | Install        |    1 >
        10 | root <root>              | 2016-12-24 15:34 | Install        |    1
         9 | root <root>              | 2016-12-24 15:32 | Install        |    2
         8 | root <root>              | 2016-12-18 15:18 | Install        |    1
         7 | root <root>              | 2016-12-13 11:12 | Install        |    1
         6 | root <root>              | 2016-12-06 22:10 | Install        |    4
         5 | root <root>              | 2016-12-05 21:48 | Install        |    1
         4 | root <root>              | 2016-12-04 18:44 | Install        |    1
         3 | root <root>              | 2016-12-04 18:43 | Install        |    1
         2 | root <root>              | 2016-12-04 18:40 | Install        |    1
         1 | 系统 <空>                | 2016-12-04 18:13 | Install        |  387
    history list
    

    安装本地程序包

    yum install  xxx-VERSION.release.arch.rpm
    

    示例:

    [root@www Packages]# yum install  tree-1.6.0-10.el7.x86_64.rpm
    

    包组管理的相关命令

    yum groupinstall group1 [group2] [...]
    yum groupupdate group1 [group2] [...]
    yum grouplist [hidden] [groupwildcard] [...]
    yum groupremove group1 [group2] [...]
    yum groupinfo group1 [...]
    

    示例:

    [root@www ~]# yum grouplist
    已加载插件:fastestmirror
    没有安装组信息文件
    Maybe run: yum groups mark convert (see man yum)
    Loading mirror speeds from cached hostfile
     * base: mirrors.aliyun.com
     * epel: mirrors.aliyun.com
     * extras: mirrors.aliyun.com
     * updates: mirrors.aliyun.com
    可用的环境分组:
       最小安装
       基础设施服务器
       计算节点
       文件及打印服务器
       MATE 桌面环境
       基本网页服务器
       虚拟化主机
       带 GUI 的服务器
       GNOME 桌面
       KDE Plasma Workspaces
       开发及生成工作站
      [root@www ~]# yum groupinstall "Development Tools"
    

    16.4.2、yum的命令行选项

    --nogpgcheck:禁止进行gpg check
    -y:自动回答为yes
    -q:静默模式;
    --disablerepo=repoidglob:临时禁用此处指定的repo
    --enablerepo=repoidglob:临时启用此处指定的repo
    --noplugins:禁用所有插件;
    

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

    $releasever:当前os的发行版的主版本号;
    $arch:平台;
    $basearch:基础平台;
    $YUM0-$YUM9
    

    16.6、创建yum仓库

    16.6.1、将本地光盘作为yum仓库

    1. 挂在本地光盘
    2. 编辑repo文件
    3. 查看可用仓库
    # 挂载本地光盘
    [root@www ~]# mount /dev/cdrom /media/
    mount: /dev/sr0 写保护,将以只读方式挂载
    [root@www ~]# ls /media/
    CentOS_BuildTag  EULA  images    LiveOS    repodata              RPM-GPG-KEY-CentOS-Testing-7
    EFI              GPL   isolinux  Packages  RPM-GPG-KEY-CentOS-7  TRANS.TBL
    # 编辑repo文件
    [root@www ~]# cd /etc/yum.repos.d/
    您在 /var/spool/mail/root 中有新邮件
    [root@www yum.repos.d]# vim localbase.repo
    [localbase]
    name=local yum repository
    baseurl=file:///media
    enbaled=1
    gpgcheck=0
    # 查看可用仓库
    [root@www yum.repos.d]# yum repolist
    已加载插件:fastestmirror
    Loading mirror speeds from cached hostfile
     * base: mirrors.aliyun.com
     * epel: mirrors.aliyun.com
     * extras: mirrors.aliyun.com
     * updates: mirrors.aliyun.com
    源标识                       源名称                                                      状态
    base/7/x86_64                CentOS-7 - Base - mirrors.aliyun.com                         9,363
    epel/x86_64                  Extra Packages for Enterprise Linux 7 - x86_64              10,976
    extras/7/x86_64              CentOS-7 - Extras - mirrors.aliyun.com                         435
    localbase                    local yum repository                                         9,007
    updates/7/x86_64             CentOS-7 - Updates - mirrors.aliyun.com                        399
    repolist: 30,180
    

    16.6.2、创建指定程序包目录创建为仓库

    1. 安装createrepo命令
    2. 切换至程序包所在目录
    3. 创建repodata数据
    4. 配置repo文件
    # 安装createrepo
    [root@www repo]# yum -y install createrepo
    
    # 创建/yum/repo目录存放程序包
    [root@www ~]# mkdir -p /yum/repo
    [root@www ~]# cp /media/Packages/php* /yum/repo/
    [root@www ~]# ll /yum/repo/|wc -l
    28
    您在 /var/spool/mail/root 中有新邮件
    [root@www ~]# cd /yum/repo/
    [root@www repo]# ls
    php-5.4.16-36.el7_1.x86_64.rpm           php-mysqlnd-5.4.16-36.el7_1.x86_64.rpm
    php-bcmath-5.4.16-36.el7_1.x86_64.rpm    php-odbc-5.4.16-36.el7_1.x86_64.rpm
    php-cli-5.4.16-36.el7_1.x86_64.rpm       php-pdo-5.4.16-36.el7_1.x86_64.rpm
    php-common-5.4.16-36.el7_1.x86_64.rpm    php-pear-1.9.4-21.el7.noarch.rpm
    php-dba-5.4.16-36.el7_1.x86_64.rpm       php-pecl-memcache-3.0.8-4.el7.x86_64.rpm
    php-devel-5.4.16-36.el7_1.x86_64.rpm     php-pgsql-5.4.16-36.el7_1.x86_64.rpm
    php-embedded-5.4.16-36.el7_1.x86_64.rpm  php-process-5.4.16-36.el7_1.x86_64.rpm
    php-enchant-5.4.16-36.el7_1.x86_64.rpm   php-pspell-5.4.16-36.el7_1.x86_64.rpm
    php-fpm-5.4.16-36.el7_1.x86_64.rpm       php-recode-5.4.16-36.el7_1.x86_64.rpm
    php-gd-5.4.16-36.el7_1.x86_64.rpm        php-snmp-5.4.16-36.el7_1.x86_64.rpm
    php-intl-5.4.16-36.el7_1.x86_64.rpm      php-soap-5.4.16-36.el7_1.x86_64.rpm
    php-ldap-5.4.16-36.el7_1.x86_64.rpm      php-xml-5.4.16-36.el7_1.x86_64.rpm
    php-mbstring-5.4.16-36.el7_1.x86_64.rpm  php-xmlrpc-5.4.16-36.el7_1.x86_64.rpm
    php-mysql-5.4.16-36.el7_1.x86_64.rpm
    
    # 生成repodata数据
    [root@www ~]# cd /yum/repo/
    [root@www repo]# createrepo ./
    Spawning worker 0 with 7 pkgs
    Spawning worker 1 with 7 pkgs
    Spawning worker 2 with 7 pkgs
    Spawning worker 3 with 6 pkgs
    Workers Finished
    Saving Primary metadata
    Saving file lists metadata
    Saving other metadata
    Generating sqlite DBs
    Sqlite DBs complete
    [root@www repo]# ll repodata/
    总用量 72
    -rw-r--r-- 1 root root  7642 12月 29 10:23 1f2790b2f5cb011b0ee50480f1a734b1cfef3fcf8cb5c56715c56ab8b373f928-primary.xml.gz
    -rw-r--r-- 1 root root  5091 12月 29 10:23 5bfd453ae038a5befb57f483a0cf16fa2b33c3efbbd5d08102750e751a9dadd6-other.xml.gz
    -rw-r--r-- 1 root root 10581 12月 29 10:23 7f3365a22053bad95693995eb31c88102ba25f9c404e88123226dd19a5fdd29e-other.sqlite.bz2
    -rw-r--r-- 1 root root 19721 12月 29 10:23 861e8e2872ef3faf07613bba90135feeb4128ce850085544c5e51444d9c7e731-primary.sqlite.bz2
    -rw-r--r-- 1 root root 11285 12月 29 10:23 96c960d58f47cc8dd0ecee902139dae3af6c2c5242d9a063549ae54d8cd99548-filelists.sqlite.bz2
    -rw-r--r-- 1 root root  6526 12月 29 10:23 ad31846122b77a0150a5eb6f3434d260d30fabd18d211351ceeb7945c310cddd-filelists.xml.gz
    -rw-r--r-- 1 root root  2980 12月 29 10:23 repomd.xml
    
    # 配置repo文件
    [root@www yum.repos.d]# vim local-php.repo
    [localphp]
    name=local php repository
    baseurl=file:///yum/repo
    enbaled=1
    gpgcheck=0
    
    # 查看可用仓库是否又localphp
    [root@www ~]# yum repolist
    已加载插件:fastestmirror
    localphp                                                                | 2.9 kB  00:00:00
    localphp/primary_db                                                     |  19 kB  00:00:00
    Loading mirror speeds from cached hostfile
     * base: mirrors.aliyun.com
     * epel: mirrors.aliyun.com
     * extras: mirrors.aliyun.com
     * updates: mirrors.aliyun.com
    源标识                       源名称                                                      状态
    base/7/x86_64                CentOS-7 - Base - mirrors.aliyun.com                         9,363
    epel/x86_64                  Extra Packages for Enterprise Linux 7 - x86_64              10,976
    extras/7/x86_64              CentOS-7 - Extras - mirrors.aliyun.com                         435
    localbase                    local yum repository                                         9,007
    localphp                     local php repository                                            27
    updates/7/x86_64             CentOS-7 - Updates - mirrors.aliyun.com                        399
    repolist: 30,207
    

    16.7、程序包编译安装

    16.7.1、开源程序源代码的获取方式

    1. 官方自建站点获取;
    2. 代码托管;常用代码托管机构有:
      1. sourceforge
      2. GitHub.com
      3. code.google.com

    16.7.2、编译安装前准备工作

    编译C源代码

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

    开发工具:make, gcc等;

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

    通过包组提供开发组建

    centos6: "development tools", "server platform development"
    

    16.7.3、编译安装的三个步骤

    第一步:./configure

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

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

    3、通过—help:获取其支持使用的选项

    第二步:make

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

    第三步:make install

    是一个复制文件,生成链接的过程;

    建议:安装前查看INSTALL及README文件;

    16.7.4、安装后的配置

    
    # 1、导出二进制程序目录至PATH环境变量中;
    编辑:/etc/profile.d/NAME.sh
    export PATH=/path/to/bin:$PATH
    
    # 2、导出库文件路径
    编辑:/etc/ld.so.conf.d/NAME.conf
    添加新的库文件所在目录至此文件中;让系统重新生成缓存
    ldconfig [-v]
    
    # 3、导出头文件
    基于链接的方式实现:将安装路径下include目录软链接至/usr/include/与程序对应的名称
    ln -sv /PATH/TO/APPDIR/include /usr/include/APP_NAME #
    
    # 4、导出帮助手册
    编辑/etc/man.config文件
    添加一个MANPATH
    
    
  • 相关阅读:
    Ceph实验室:第六课:Ceph运维之横向扩展
    Ceph实验室:第五课:Ceph运维之换盘
    百度2014软件开发工程师笔试题详解 (转)
    阿里巴巴2014笔试题详解(9月22北京)(转)
    阿里巴巴2014秋季校园招聘-软件研发工程师笔试题详解(转)
    腾讯的2014年校招的软开笔试题(转)
    typedef与define区别
    java流总结(转)
    java 流 复制,重命名,删除目录
    java 流 读
  • 原文地址:https://www.cnblogs.com/wangenzhi/p/6234868.html
Copyright © 2011-2022 走看看