CentOS程序安装的3种方式{ 源码包安装 | rpm包安装 | yum安装;}

CentOS程序安装的3种方式{ 源码包安装 | rpm包安装 | yum安装;}


CentOS软件安装主要由3种方式,第一种是源码包安装,需要从网站下载并解压之后通过手动编译的方式安装,过程相对比较复杂;第二种是rpm包安装,通过rmp这个包管理器实现程序的安装、升级、卸载等操作,rpm包管理器是RPM Package Manager的简称,功能非常强大,但是由于程序安装过程中可能存在依赖关系,甚至循环依赖,导致程序无法安装,期Linux用户就深受这个问题的困扰,安装一个软件需要很多时间。直到后来,第三种方式出现了,解决了软件包依赖关系,如yum、apt-get、dnf等。yum是rpm包管理器的前端工具,不但解决了rpm包的依赖关系问题,还提高了安装程序的速度。本文主要介绍CentOS系统下的程序安装的3种方式中的yum安装。

yum安装

yum的全称是yellowdog updater modified,它是rpm包管理器的前端程序,yum主要用于软件的自动升级,安装/移除RPM软件包,它能够自动查找并解决RPM包之间的依赖关系,而无需管理员逐个,手工的去安装每一个RPM包,使管理员维护大量的Linux主机时更加轻松自如。 
要成功使用yum工具更新系统和软件,需要有一个包含各种RPM软件包的repository(软件仓库),提供软件仓库的服务器习惯称为“源”服务器。软件仓库可以基于HTTP,FTP,nfs协议或者本地文件目录提供服务,并收集目录中所有的RPM包的header(头部)信息组成repodata(仓库数据),以供yum客户端工具查询分析。它的主要功能是:
仓库管理软件包管理软件包组管理。yum的使用提高了软件安装的效率,弥补了rpm包管理器的的不足。

安装yum工具

#查询yum是否已经安装
[root@cent7]/media/cdrom/Packages>rpm -qa|grep '^yum'
   yum-metadata-parser-1.1.4-10.el7.x86_64
   yum-plugin-fastestmirror-1.1.31-34.el7.noarch
   yum-3.4.3-132.el7.centos.0.1.noarch
#如果看到以上信息则已经安装了yum工具,否则执行下面的命令
[root@cent7]/media/cdrom/Packages>rpm -ivh yum-3.4.3-132.el7.centos.0.1.noarch.rpm
#再次执行第一条命令可看到yum已经安装成功了

yum特点

  • 自动解决软件包的依赖关系

  • 保持与rpm数据库的一致性

  • 可同时配置多个仓库

  • 简易的配置文件

yum仓库—repodata文件

  • 组成 

    • 数据:包含所有的rpm软件包文件

    • 元数据:每个软件包的包名、版本信息、各包所包含的文件列表、包与包之间的依赖关系、包的分组信息等

  • 创建repodata相关文件

  • 使用createrepo工具,能够简洁的快速的将我们所指定的存放大量RPM包的目录,里面所有的RPM包信息都读出来,分析他的依赖关系并生成元数据。所以createrepo可以理解为它是制作yum元数据的工具。在光盘里其实也有这个元数据,路径在光盘中的 repodata/ 里, sqlite文件后缀

11.jpg

yum配置文件

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

    • 为所有仓库提供公共配置

[main]    
cachedir=/var/cache/yum/$basearch/$releasever     #下载RPM包的缓存目录
keepcache=0                                       #RPM缓存的程序包安装完成后是否保存,0表示不保存,1表示保存
buglevel=2                                        #调试级别 取值范围 0 - 10,默认值为2    
logfile=/var/log/yum.log                          #yum相关日志存放路径
exactarch=1                                       #是否要平台完全匹配才能安装
obsoletes=1                                       #需不需要检查已过期的仓库
gpgcheck=1                                        #是否检查包的完整性和合法性
plugins=1     #是否允许支持yum的插件功能,0 表示不允许 ,1表示允许,建议允许,一般会用yum-fastestmirror这个插件          
installonly_limit=5                               #允许保留多少个内核包
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=16&ref=http://bugs.centos.org/bug_report_page.php?category=yum
distroverpkg=centos-release                       #指定一个软件包,yum 会根据这个包判断你的发行版本,默认是redhat-release,也可以是安装的任何针对自己发行版的rpm 包

12.jpg

  • 各仓库的配置文件:/etc/yum.repo.d/xxx.repo 

    • 上图中指出了仓库配置文件的位置,该配置文件以.repo结尾,定义了仓库的名字、多个仓库位置、验证密钥、启用开关等。下面是CentOS7默认生效的配置文件

【第一段】注释说明了yum是从如何获取软件包和缓存的

[root@cent7]~>cat /etc/yum.repos.d/CentOS-Sources.repo
# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client.  You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#

【第二段】CentOS默认的yum源配置

[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

【第三段】发行版的更新源

#released updates 
[updates]
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

【第五段】继承已经存在包功能的包,默认不可用

#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

【第四段】额外可用的包

#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
我们需要用到的配置信息
  [REPOID]             #容器名字,必须是唯一的
 name=                #some name for this repository仓库的名字,仅作一个标识
 baseurl=             #指定真正仓库所在的路径,可以指多个仓库
                      #例如:baseurl=file:///media/cdrom
                      #      ftp://10.1.0.1/path    #备注第二行不能顶格写,否则会出错
 mirrorlist=          #列出容器可以使用站点,如果不想使用,可以再前面加 # 注释
 enabled= {0 | 1}     #指是否启用这个仓库,0表示不启用,1表示启用
 gpgcheck= {0 | 1}    #是否要检测软件包的合法性,0表示不检测,1表示不检查
 gpgkey=              #软件包的公钥文件所在路径,例如
 gpgkey=file:///media/cdrom/GPG-RPM-KEY-centos-6
 cost=                #仓库优先级,比如一个软件包在多个仓库都有,那应该选择哪个安装呢?就是根据这个优先级,默认是1000,数字越小表示越优先使用

使用光盘yum源 (系统默认的配置文件已经支持了cdrom作为yum源)

  • 首先将本地镜像文件挂载好之后进入挂载目录/etc/cdrom/下面查看,有一个Package目录

 ~]#mount -r /dev/cdrom /media/cdrom   如果/media下没有cdrom目录需要手动创建
~]#cat /etc/yum.repos.d/myLocal.repo
[CentOS7.2]         源标识 为 CentOS7.2
name=CentOS 7.2     源名字 为 CentOS7.2
baseurl=file:///media/cdrom 源路径 这里就是镜像的挂载路径
gpgcheck=0          是否检查来源合法性和包完整性,不检查
enabled=1           是否启用此仓库,默认为1 启用,可以不用写
  • 这是CentOS7上自带的本地yum源的配置信息,与上面的相似,可直接使用,无需再自己配置,上面的例子是参照下面这个文件写的,省略了gpgcheck的验证

[root@cent7]~>cat /etc/yum.repos.d/CentOS-Media.repo 
# CentOS-Media.repo
#
#  This repo can be used with mounted DVD media, verify the mount point for
#  CentOS-7.  You can use this repo and yum to install items directly off the
#  DVD ISO that we release.
#
# To use this repo, put in your DVD and use it with the other repos too:
#  yum --enablerepo=c7-media [command]
#  
# or for ONLY the media repo, do this:
#
#  yum --disablerepo=\* --enablerepo=c7-media [command]

[c7-media]
name=CentOS-$releasever - Media
baseurl=file:///media/CentOS/
       file:///media/cdrom/
       file:///media/cdrecorder/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
  • 接着清理一下yum的缓存

[root@cent7]~>[root@cent7]~>yum clean all
已加载插件:fastestmirror, langpacks
正在清理软件源: CentOS7.2 Fedora-EPEL
Cleaning up everything
Cleaning up list of fastest mirrors
[root@Daniel cdrom]# yum repolist
已加载插件:fastestmirror, langpacks
CentOS7.2   | 3.6 kB  00:00:00
Fedora-EPEL | 4.3 kB  00:00:00
(1/5): CentOS7.2/group_gz   | 155 kB  00:00:00
(2/5): CentOS7.2/primary_db | 5.3 MB  00:00:00
(3/5): Fedora-EPEL/group_gz | 170 kB  00:00:02
(4/5): Fedora-EPEL/updateinfo   | 558 kB  00:00:03
(5/5): Fedora-EPEL/primary_db   | 4.1 MB  00:00:04
Determining fastest mirrors
源标识源名称 状态
CentOS7.2 CentOS 7.2  9,007
Fedora-EPEL   Fedora EPEL for EL710,082
repolist: 19,089

可以看到上述源标识名称和状态可用,yum源配置成功。

基于http的yum源

虽然系统自带的仓库已经很常用,只要连接到互联网我们就能很容易有获取到互联网的yum仓库。但是如果是在企业内网,企业内部不允许访问互联网,又或者如果企业服务器众多,如果都要从互联网去获取yum仓库,那将很占用带宽。基于这种情况,我们就需要自己在企业内部创建yum仓库。

13.jpg

yum命令的使用

  • yum [options] [command] [package…]

  • yum的命令行选项: 

    • –nogpgcheck:禁止进行gpg check

    • -y:自动回答为”yes”

    • -q:静默模式

    • –disablerepo=repoid 临时禁用此处指定的repo

    • –enablerepo=repoid 临时启动此处启用的repo

    • –noplugins:禁用所有插件

  • 显示仓库列表 

    • yum repolist [all|enabled|disabled] #显示repository, 第一次使用会从服务器上下载元数据

14.jpg

  • 显示程序包 

    • yum list [all | glob_exp1] [glob_exp2] […]

    • yum list [available | installed | updates] [glob_exp1] […]

  • 安装程序包 

    • install package1 […]

    • reinstall package1 […]

  • 升级程序包 

    • update [package1] […]

    • downgrade [package1] […] #降级安装

  • 检查可用升级: 

    • check-update

  • 卸载程序包 

    • remove | erase package1 […]

  • 查看程序的information 

    • info […]

15.jpg

  • 查看指定的特性是由哪个程序包提供 

    • provides| whatprovieds feature […]

  • 清理本地缓存: 

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

  • 构建缓存: 

    • makecache

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

    • search string […]

16.jpg

  • 查看指定包依赖关系 

    • deplist package1 […]

  • 查看yum事务历史 

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

    • yum history

    • yum history info 6

    • yum history undo 6

  • 安装及升级本地程序包: 

    • yum localinstall rpmfile1 [rpmfile2] […]

    • 或者 yum install rpmfile1

    • yum localupdate rpmfile1 [rpmfile2] […]

    • 或者 yum update rpmfile1

17.jpg

  • 包组管理的相关命令: 

    • groupinstall group1 [group2] […]

    • groupupdate group1 [group2] […]

    • grouplist [hidden] [groupwildcard] […]

    • groupremove group1 [group2] […]

    • groupinfo group1 […]

  • yum日志文件 

    • /var/log/yum.log 记录了安装、卸载等信息

18.jpg

19.jpg

练习

1.模拟服务管理

  1 #!/bin/bash
 2 #
 3 #Author:jasonmc
 4 #Date:2016-08-19
 5 #Description:编写服务脚本/root/bi/testsrv.sh,完成如下要求
 6 # (1) 脚本可接受参数:start, stop, restart, status
 7 # (2) 如果参数非此四者之一,提示使用格式后报错退出
10 # (5) 如是restart,则先stop, 再start,考虑:如果本来没有start,如何处理?
12 #
13 SCRIPT_NAME=/var/lock/subsys/SCRIPT_NAME
14
15 declare -x true=0
16 declare -x false=1
17
22         else
23                 return $false
24         fi
25 }
26 start_service(){
27         if file_exist
28         then
31                 echo "failed."
32         else
33                 touch $SCRIPT_NAME
34                 file_exist &&echo "Starting SCRIPT_NAME SUCCESS!"\
35                            ||echo "ERROR An unexpected error occurred."
36         fi
37 }
38
39 stop_service(){
40
43 }
44 restart_service(){
47 }
48 status_service(){
49         if file_exist
50         then
51                 echo "SCRIPT_NAME (pid xxxx) is running..."
52         else
53                 echo "SCRIPT_NAME is stopped."
54         fi
55 }
56 case $1 in
57         start)
58                 start_service
59                 ;;
60         stop)
61                 stop_service
62                 ;;
63         restart)
64                 restart_service
65                 ;;
66         status)
67                 status_service
68                 ;;
69         *)
70                 echo "Usage: testsrv.sh {start|stop|restart|status}  [ SCR    IPT_NAME server options ]"
71                 ;;
72 esac
73 unset SCRIPT_NAME true false
74

2.备份命令的可执行文件和库

  1 #!/bin/bash
 2 #
 3 #Author:jasonmc
 4 #Date:2016-08-19
 5 #Description:编写脚本/root/bin/copycmd.sh
 6 #(1) 提示用户输入一个可执行命令名称;
 7 #(2) 获取此命令所依赖到的所有库文件列表
14 #
15 clear
16
17 dest_dir=/testdir/cmd
18
19 read -p "Please input a executable command:" cmd
20
21 until [ "$cmd" = 'quit' ]
22 do
23
24         cmd_path=`which $cmd 2> /dev/null`
25
26         if [ $? -eq 0 ]
27         then
28                 if [ ! -e "$dest_dir$cmd_path" ]
29                 then
30                         cp -p -u --parents $cmd_path  $dest_dir &&\
31                                 ldd $cmd_path|grep -o '/.* '|cp -p -u --parents `xargs` $dest_dir&&{ \
32                                         echo -ne " the command \"$cmd\" and dynamically linked libs "
33                                         echo -ne "has been copy to \"$dest_dir/\" "
34                                         echo -e "with The original directory structure.";}
35                 else
36                         echo "the $dest_dir$cmd_path does exist."
37                 fi
38         else
39                 echo " Confirm the existence of the command you entered."
40         fi
41
42         read -p "Please input a executable command:" cmd
43 done

3.汉诺塔问题

  1 #!/bin/bash
 2 #
 3 #Author:jasonmc
 4 #Date:2016-08-19
 5 #Description:汉诺塔(又称河内塔)问题是源于印度一个古老传说。大梵天创造世>    界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆
   盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且
   规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。利用函数
   ,实现N片盘的汉诺塔的移动步骤
 6 #
 7 step=0
 8 hanoi(){
 9         if [ $1 -eq 1 ]
10         then
11                 let ++step
12                 echo "Step=$step;[Move] $2 --> $4"
13         else
14                 hanoi $[$1-1] $2 $4 $3
15                 let ++step
16                 echo "Step=$step;[Move] $2 --> $4"
17                 hanoi $[$1-1] $3 $2 $4
18         fi
19
20 }
21 hanoi $1 A B C



原创文章,作者:helloc,如若转载,请注明出处:http://www.178linux.com/38812

联系我们

400-080-6560

在线咨询

工作时间:周一至周五,9:30-18:30,节假日同时也值班

QR code