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

CentOS 软件安装--卓越软件管理

时间:2016-03-22 06:33:32      阅读:444      评论:0      收藏:0      [点我收藏+]

标签:rpm 软件包管理 yum 源码安装

    Linux 作为开源系统其软件管理解决了纷繁复杂的开源软件安装,卸载维护,软件依赖的问题。今天介绍下CentOS的软件管理器。

    开源软件设计中秉承了利用小而精巧的程序来实现复杂的功能实现。在这个过程中,各个小程序之间就有了不少的设计依赖,对于我们这样的小白,安软件解决软件依赖是头疼的一件事。Linux 牛人们开发了软件管理软件方便我们安装软件,免除了自己动手编译,更自动解决依赖关系。这里简单介绍CentOS发行版的软件包管理器。

    CentOS中软件安装分为三种方式;rpm包管理器、YUM软件管理器和源码编译安装;

    rpm包管理器:Redhat Package Manager

    主要思想是:将编译好的应用程序的各组成文件打包成一个或几个程序包文件,操作软件都将所有信息分类记录在本地数据库中,从而更方便地实现程序包的安装、升级、卸载和查询等管理操作。

    具体实现:每个rpm包制作过程中额外添加程序包的组成清单,安装、卸载时运行的脚本;主机内部创建公共数据库存储:程序包名称、版本依赖关系,功能说明,安装生成的文件路径等等。

 一、rpm命令 

1.rpm命令:rpm  [OPTIONS]  [PACKAGE_FILE]

    rpm 安装

    rpm  -ivh  PACKAGE_FILE ...

        GENERAL OPTIONS:

-v:verbose,详细信息

-vv:更详细的输出

        [install-options]:

-h:“#”号输出进度条;每个#表示2%的进度;

--test:测试安装,检查并报告依赖关系及冲突消息等;

# rpm -ivh atomic-0-0.8.git4ff7dbd.el7.centos.x86_64.rpm  --test
warning: atomic-0-0.8.git4ff7dbd.el7.centos.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
error: Failed dependencies:
	docker is needed by atomic-0-0.8.git4ff7dbd.el7.centos.x86_64
	python-docker-py >= 1.0.0-21 is needed by atomic-0-0.8.git4ff7dbd.el7.centos.x86_64
	python-requests is needed by atomic-0-0.8.git4ff7dbd.el7.centos.x86_64
	python-six >= 1.3.0 is needed by atomic-0-0.8.git4ff7dbd.el7.centos.x86_64
	python-websocket-client >= 0.11.0 is needed by atomic-0-0.8.git4ff7dbd.el7.centos.x86_64

--nodeps:忽略依赖关系;不建议;

# rpm -ivh atomic-0-0.8.git4ff7dbd.el7.centos.x86_64.rpm   --nodeps
warning: atomic-0-0.8.git4ff7dbd.el7.centos.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Preparing...               ################################# [100%]
Updating / installing...
   1:atomic-0-0.8.git4ff7dbd.el7.cento################################# [100%]

--replacepkgs:重新安装

# rpm -ivh atomic-0-0.8.git4ff7dbd.el7.centos.x86_64.rpm --replacepkgs  --nodeps
warning: atomic-0-0.8.git4ff7dbd.el7.centos.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:atomic-0-0.8.git4ff7dbd.el7.cento################################# [100%]

            --nosignature:不对认证签名检测

[root@localhost rpms]# rpm -ivh atomic-0-0.8.git4ff7dbd.el7.centos.x86_64.rpm --replacepkgs  --nodeps --nosignature
#主要是上侧例子中的少了一端,就是warning那个。
Preparing...                          ################################# [100%]
Updating / installing...
   1:atomic-0-0.8.git4ff7dbd.el7.cento################################# [100%]

    rpm升级:

rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...升级或安装软件包,若软件没安装则安装软件包;

rpm {-F|--freshen} [install-options] PACKAGE_FILE ...仅升级软件包,若不存在,则退出                  两个特殊的选项:--oldpackage:使用低版本降级当前版本

                                        --force :强制安装,老版本升级被其他包依赖,升级新包会影响依赖关系。

旧版本升级到新版本,前后对照看下!查询版本一会在介绍。
# rpm -qa|grep atomic
atomic-0-0.8.git4ff7dbd.el7.centos.x86_64
# rpm -Uvh atomic-1.0-108.el7.centos.x86_64.rpm  --nodeps --nosignature
Preparing...                          ################################# [100%]
Updating / installing...
   1:atomic-1.0-108.el7.centos        ################################# [ 50%]
Cleaning up / removing...
   2:atomic-0-0.8.git4ff7dbd.el7.cento################################# [100%]
# rpm -qa|grep atomic
atomic-1.0-108.el7.centos.x86_64
将新版本降级为旧版本,同样前后对照下!
# rpm -qa|grep atomic
atomic-1.0-108.el7.centos.x86_64
# rpm -Uvh atomic-0-0.8.git4ff7dbd.el7.centos.x86_64.rpm --oldpackage --nodeps --nosignature
Preparing...                          ################################# [100%]
Updating / installing...
   1:atomic-0-0.8.git4ff7dbd.el7.cento################################# [ 50%]
Cleaning up / removing...
   2:atomic-1.0-108.el7.centos        ################################# [100%]
[root@localhost rpms]# rpm -qa|grep atomic
atomic-0-0.8.git4ff7dbd.el7.centos.x86_64


    注意:(1) 不要对内核做升级操作;Linux支持多内核版本并存,因此,还是直接安装新版本内核;

 (2) 如果某原程序包的配置文件安装后曾被修改过,升级时,新版本的程序提供的同一个配置文件不会覆盖原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.rpmnew)后提供;

    卸载:

    rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--test] PACKAGE_NAME ...

    注意:这里卸载用的是PACKAGE_NAME,而不是PACKAGE_FILE;

--allmatches:卸载所有匹配指定名称的程序包的各版本;

--nodeps:忽略依赖关系

--test:测试卸载,dry run模式

试试卸载,是否有依赖关系,即要卸载软件是否被其他软件所依赖!卸载前都要检查。
# rpm -e agg --test
error: Failed dependencies:
	agg = 2.5-18.el7 is needed by (installed) agg-devel-2.5-18.el7.x86_64
	libagg.so.2()(64bit) is needed by (installed) agg-devel-2.5-18.el7.x86_64
	libaggfontfreetype.so.2()(64bit) is needed by (installed) agg-devel-2.5-18.el7.x86_64
强制卸载,卸载掉了
# rpm -e agg --nodeps 
# rpm -qa |grep agg
agg-devel-2.5-18.el7.x86_64
下载所有匹配的各种版本软件,这里没有不同软件包,
# rpm -e --nodeps --allmatches agg
# rpm -qa|grep agg
agg-devel-2.5-18.el7.x86_64

    查询:这是rpm管理中最重要的功能,经常会用到

rpm {-q|--query} [select-options] [query-options]

[select-options] 挑选选项

PACKAGE_NAME:查询指定的程序包是否已经安装,及其版本,不加参数就显示所有;

# rpm -q ssh
package ssh is not installed
# rpm -q openssh
openssh-6.6.1p1-22.el7.x86_64

-a, --all:查询所有已经安装过的包;

[root@localhost rpms]# rpm -qa|grep  openssh
openssh-server-6.6.1p1-22.el7.x86_64
openssh-6.6.1p1-22.el7.x86_64
openssh-clients-6.6.1p1-22.el7.x86_64

-f  FILE:查询指定的文件由哪个程序包安装生成;

# rpm -qf /etc/passwd
setup-2.8.71-6.el7.noarch

-p, --package PACKAGE_FILE:用于实现对未安装的程序包执行查询操作;

#根据数据包查询数据包信息,安装前可以通过该命令查询要安装的包的信息
# rpm -qp agg-2.5-18.el7.x86_64.rpm 
warning: agg-2.5-18.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY

--whatprovides CAPABILITY:查询指定的功能由哪个程序包提供;(功能见query-options中的--provides)

# rpm -q --whatprovides passwd
passwd-0.79-4.el7.x86_64

--whatrequires CAPABILITY:查询指定的功能被哪个包所依赖;

#查看被那些包所依赖
# rpm -q --requires passwd
/etc/pam.d/system-auth
audit-libs >= 1.0.14
config(passwd) = 0.79-4.el7
libaudit.so.1()(64bit)
libc.so.6()(64bit)

[query-options] 查询选项

--changelog:查询rpm包的changlog;

# 查看rpm包的更改记录
# rpm -q --changelog  passwd
* Thu Jan 30 2014 Miloslav Trma <mitr@redhat.com> - 0.79-4
- Include updated translations
  Resolves: #1044298

* Fri Jan 24 2014 Daniel Mach <dmach@redhat.com> - 0.79-3
...

                  -l, --list:程序安装生成的所有文件列表;

# rpm -ql passwd
/etc/pam.d/passwd
/usr/bin/passwd
/usr/share/doc/passwd-0.79
/usr/share/doc/passwd-0.79/AUTHORS
/usr/share/doc/passwd-0.79/COPYING
/usr/share/doc/passwd-0.79/ChangeLog
/usr/share/doc/passwd-0.79/NEWS
/usr/share/locale/ar/LC_MESSAGES/passwd.mo

 -i, --info:程序包相关的信息,版本号、大小、所属的包组,等;

# rpm -qi passwd
Name        : passwd
Version     : 0.79
Release     : 4.el7
Architecture: x86_64
Install Date: Fri 04 Mar 2016 02:56:42 AM CST
Group       : System Environment/Base

-c, --configfiles:查询指定的程序包提供的配置文件;

# rpm -qc passwd
/etc/pam.d/passwd

    -d, --docfiles:查询指定的程序包提供的文档;

# rpm -q --provides passwd
config(passwd) = 0.79-4.el7
passwd = 0.79-4.el7
passwd(x86-64) = 0.79-4.el7

    -R, --requires:查询指定的程序包的依赖关系;

# rpm -q -R  passwd
/etc/pam.d/system-auth
audit-libs >= 1.0.14
pam >= 1.0.90
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1

    --scripts:查看程序包自带的脚本片断;

# rpm -q --scripts openssh
preinstall scriptlet (using /bin/sh):
getent group ssh_keys >/dev/null || groupadd -r ssh_keys || :

        说明:还可以使用rpm -qpi PACKAGE_FILE ,-qpc PACKAGE_FILE,-qpl PACKAGE_FILE

     校验:检验软件安装后是否文件列表是否被修改

         rpm {-V|--verify} [select-options] [verify-options]

            [select-options] 挑选选项

        获取并导入信任的包制作者的密钥:

            对于CentOS发行版来说:rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

验正:

(1) 安装此组织签名的程序时,会自动执行验正;

rpm -ivh atomic-0-0.8.git4ff7dbd.el7.centos.x86_64.rpm 
error: Failed dependencies:
	docker is needed by atomic-0-0.8.git4ff7dbd.el7.centos.x86_64
	python-docker-py >= 1.0.0-21 is needed by atomic-0-0.8.git4ff7dbd.el7.centos.x86_64

(2) 手动验正:rpm -K PACKAGE_FILE

# rpm -K atomic-1.0-108.el7.centos.x86_64.rpm 
atomic-1.0-108.el7.centos.x86_64.rpm: rsa sha1 (md5) pgp md5 OK

    数据库重建

    CentOS 6:man rpm

    CentOS 7:man rpmdb

    rpm {--initdb|--rebuilddb} [--dbpath DIRECTORY] [--root DIRECTORY]

        --initdb:初始化数据库,当前无任何数据库可实始化创建一个新的;当前有数据库时不执行任何操作;

# rpm --initdb --dbpath=/tmp/rpm
[root@localhost rpms]# ls /tmp/rpm/
Basenames     __db.001  __db.003  Group       Name          Packages     Requirename  Sigmd5
Conflictname  __db.002  Dirnames  Installtid  Obsoletename  Providename  Sha1header   Triggername

    --rebuilddb:重新构建,通过读取当前系统上所有已经安装过的程序包头进行重新创建;

# rpm --rebuilddb --dbpath=/tmp/rpm
# ls /tmp/rpm/
Basenames     Dirnames  Installtid  Obsoletename  Providename  Sha1header  Triggername
Conflictname  Group     Name        Packages      Requirename  Sigmd5

二、YUM软件包管理器

    rpm已经很完美了,为什么还要用YUM呢?rpm只能解决软件的编译依赖条件判断,信息记录的功能,方便了软件的安装卸载,但是如果软件A依赖于软件B,那么安装A时是仅仅提示依赖关系不满足,即使用--nodeps选项安装上软件也是不能用的,rpm不会帮我们找一个合适版本的软件B并安装呢?不会,但是YUM会!

    YUM(Yellow Dog Manager)是采用cs架构理念:客户端使用YUM客户端工具yum,YUM客户端根据配置文件设定的YUM仓库配置文件,到服务器端请求元数据并缓存本地,根据元数据中的软件库内容及其依赖关系和本地rpm库信息查到的已安装的程序,找到需要下载的软件到服务器上下载并缓存本地,依照以来关系按次序安装rpm包,之后删除缓存的rpm包。这就解决了上面的依赖关系了,如图

技术分享

    YUM是rpm的前端工具,依靠rpm库的机制,不能脱离rpm包管理器的。

     YUM服务器将大量的rpm程序包放置在文件服务内,并使用工具rpocreate 抽取所有rpm包头信息(包括依赖关系)生成元数据。

    YUM客户端在/etc/yum.conf,和/etc/yum.reos.d/*.repo中配置仓库:配置文件类似于windows系统的ini.文件,头部定义段名,并附加段配置,yum.repo设置中main段设置全局配置,其他数据端设置仓库信息。

1.仓库指向的定义:文件在/etc/yum.reos.d/*.repo

[repositoryID]#除了main外都是对仓库的定义

name=Some name for this repository

baseurl=url://path/to/repository/ #所有等号两侧不能有空格,可以多个,顺序查找

enabled={1|0}#默认1

gpgcheck={1|0}#是否启用gpg检测授权发行检测和软件一致性检测

gpgkey=URL #repodata文件夹位置

enablegroups={1|0} #默认1

failovermethod={roundrobin|priority}#故障转移策略,roundrobin策略在URL指向多个如mirrorlist是随机选择,

                         priority策略是根据优先级别选择,默认为:roundrobin,意为随机挑选;

cost=  ;默认为1000

2.yum命令的用法:

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

       command is one of:

        * install package1 [package2] [...] or rpm1 [rpm2][...] # 安装包package1 ,这里还可以使用本地rpm包

        * update [package1] [package2] [...] or rpm1 [rpm2][...] #升级,默认废弃包也会计算在内。

        * update-to [package1] [package2] [...] # 升级到指定版本,软件需要指定软件版本

        * remove | erase package1 [package2] [...] #卸载软件包,并将相关依赖包删除

        * list [...] #显示软件包的描述和综述

        * info [...]

        * reinstall package1 [package2] [...]

        * downgrade package1 [package2] [...]

        * deplist package1 [package2] [...]

        * repolist [all|enabled|disabled] #显示配置的仓库

        * search string1 [string2] [...] # 模糊搜索软件包和综述,找不到的情况下搜索描述,url

        * history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]

        * check-update # 检测是否有软件包更新

        * clean [ packages | metadata | expire-cache | rpmdb | plugins | all ] #清理堆积在YUM缓存路径中的各种文件

        * makecache #对所有使能的YUM源下载元数据并使其有效

        * groupinstall group1 [group2] [...]

        * groupupdate group1 [group2] [...]

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

        * groupremove group1 [group2] [...]

        * groupinfo group1 [...]

        * distribution-synchronization [package1] [package2] [...]

        * provides | whatprovides feature1 [feature2] [...] # 用于查找软件包提供的特性或文件

        * shell [filename]

        * resolvedep dep1 [dep2] [...]

        * version [ all | installed | available | group-* | nogroups* | grouplist | groupinfo ]

        * check

        * help [command]


显示仓库列表:

     repolist [all|enabled|disabled]:显示定义的仓库,默认显示启用的

# yum repolist 
    Loaded plugins: fastestmirror, langpacks
    Loading mirror speeds from cached hostfile
     * base: mirrors.cqu.edu.cn
     * extras: mirrors.yun-idc.com
     * updates: mirrors.yun-idc.com
    repo id                                              repo name                                                  
status
    base/7/x86_64                                        CentOS-7 - Base                                            9,007
    extras/7/x86_64                                      CentOS-7 - Extras                                        226
    updates/7/x86_64                                     CentOS-7 - Updates                                       942

显示程序包:

    list

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

    yum list {available|installed|updates|extra} [glob_exp1] [...]显示可用的、安装的,可更新的,额外的。

[root@localhost ~]# yum list installed
    Loaded plugins: fastestmirror, langpacks
    Loading mirror speeds from cached hostfile
     * base: mirrors.cqu.edu.cn
     * extras: mirrors.yun-idc.com
     * updates: mirrors.yun-idc.com
    Installed Packages
    NetworkManager.x86_64                                1:1.0.6-27.el7                                      @a    naconda
    NetworkManager-libnm.x86_64                          1:1.0.6-27.el7                                      @a    naconda
    NetworkManager-team.x86_64                           1:1.0.6-27.el7

安装程序包:

     install package1 [package2] [...] :可以在包名后添加版本,默认最新的,老版本使用添加

版本

     reinstall package1 [package2] [...]  (重新安装)

升级程序包:

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

     downgrade package1 [package2] [...] (降级)

检查可用升级:

     check-update

卸载程序包:

     remove | erase package1 [package2] [...] #依赖的包也会被删除

查看程序包information:

     info [...]# 类似于rpm -qi 

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

     provides | whatprovides feature1 [feature2] [...]  #相当于rpm -qf

    yum provides gcc 

    清理本地缓存:

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

构建缓存:

     makecache

搜索:

     search string1 [string2] [...]

     以指定的关键字搜索程序包名及summary信息;

查看指定包所依赖的capabilities:

     deplist package1 [package2] [...]# CAPABILITYIES ; PACKAGE

查看yum事务历史:修改才会生成事务

     history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]

安装及升级本地程序包:网络上下载本地rpm包,rpm的依赖用yum自动解决,直接install 指定rpm包也是可以的

* localinstall rpmfile1 [rpmfile2] [...]

           (maintained for legacy reasons only - use install)

        * localupdate rpmfile1 [rpmfile2] [...]

           (maintained for legacy reasons only - use update)

包组管理的相关命令:

        * groupinstall group1 [group2] [...]

        * groupupdate group1 [group2] [...]

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

        * groupremove group1 [group2] [...]

        * groupinfo group1 [...]

 如何使用光盘当作本地yum仓库:

     (1) 挂载光盘至某目录,例如/media/cdrom

     # mount -r -t iso9660 /dev/cdrom /media/cdrom

     (2) 创建配置文件

     [CentOS7]

     name=

     baseurl=

     gpgcheck=

     enabled=

 yum的命令行选项:

     --nogpgcheck:禁止进行gpg check;

     -y: 自动回答为“yes”;

     -q:静默模式;

     --disablerepo=repoidglob:临时禁用指定的repo;

     --enablerepo=repoidglob:临时启用指定的repo;

     --noplugins:禁用所有插件;

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

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

     $arch: 平台类型;

     $basearch:基础平台类型 i486,i586i,i686 任务i386是他们的基础平台

     $YUM0-$YUM9:脚本内定义的变量

     http://mirrors.magedu.com/centos/$releasever/$basearch/os

创建yum仓库:使用指向光盘或网络

     createrepo -o /path/to/repo/dir /path/to/rpms/dir#repo文件在package目录同级目录的repodata目录中。

三、手动编译安装

源代码组织格式:

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

     C、C++: make (configure --> Makefile.in --> makefile)

     java: maven

C代码编译安装三步骤:

     ./configure:

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

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

     make:./configure 失败,make也不能执行

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

     make install:copy二进制文件到指定目录中

    开发工具:Makefile.in 是由项目构建工具生成的,需要软件就是这个文件

             autoconf: 生成configure脚本,根据配置文件,

             automake:生成Makefile.in,根据配置文件,比如:先后程序顺序,编译器版本

     说明:安装前查看INSTALL,README,还有手动修改配置文件。










本文出自 “君临城” 博客,请务必保留此出处http://kingslanding.blog.51cto.com/9130940/1753691

CentOS 软件安装--卓越软件管理

标签:rpm 软件包管理 yum 源码安装

原文地址:http://kingslanding.blog.51cto.com/9130940/1753691

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