yum命令及仓库创建与配置
YUM
原理
安装、卸载、查询、升级、检查,本地缓存、重装、降级、历史、获取帮助
仓库
变量、事务、URL、开销、镜像、元数据存储方式及组成
createrepo作用、命令、lftp命令
编译安装
目的
原理
开发工具及开发环境
编译后的处理
获取程序包源代码的途径
YUM
Redhat二次发行版 Yellow Dog Linux,上使用的yum(Yellowdog Update Modifier),由yellow dog 研发
yum命令的工作原理
1、接收用户命令
2、yum扮演为客户端,请求启用的仓库(yum.repos.d/*.repo)中URL对应的文件服务器,下载元数据(repodata),保存至缓存中。
3、yum命令分析元数据,找出将要安装的程序包所依赖的程序包且在系统中没有安装的程序包列表,并向文件服务器请求下载程序包,保存至缓存中。
4、根据缓存中的程序包,先安装被依赖的程序包。
5、安装后,删除程序包,保留元数据。
1、接收命令
2、请求下载repodata目录中元数据校验码:repomd.xml文件
3、比对repomd.xml
相同:用本地的元数据
不相同:重复首次安装过程
Yum作用
1、rpm前端管理工具,自动解决程序包安装/卸载时的依赖关系。
2、C/S架构:C:yum程序所在的电脑,S:文件服务器
3、基于插件,提供众多功能,工作机制或设计体系存在问题,安装过程中半道中止时,下次重启yum命令不能够解决。
4、dnf命令能够解决Yum命令存在的问题,使用方法基本同yum
5、yum支持proxy,color,ssl
yum命令
获取帮助: man yum
获取子命令的帮助:yum help [SUB_COMMAND]
yum [OPTIONS...] [SUB_COMMAND]
OPTIONS
-y 交互式询问,自动回答为yes
-q 静默模式,grep , xz , zip,不显示程序包的依赖信息
--nogpgcheck 禁用 GPG 签名检查,不检查完整性和来源合法性
--disablerepo=REPO 仓库中如果enabled=1,本次安装忽略由REPO指定的仓库
--enablerepo=REPO 仓库中如果enabled=0,本次安装启用由REPO指定的仓库
--noplugins 本次安装禁用所有插件
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
使用示例-y1、不加-y [[email protected] ~]# yum install zsh
总下载量:2.4 M安装大小:5.6 MIs this ok [y/d/N]: 将交互式的显示是否安装
2、加-y[[email protected] ~]# yum install -y zsh
总下载量:2.4 M安装大小:5.6 MDownloading packages:-q1、不加[[email protected] ~]# yum remove zsh
已加载插件:fastestmirror正在解决依赖关系--> 正在检查事务---> 软件包 zsh.x86_64.0.5.0.2-25.el7 将被 删除--> 解决依赖关系完成[[email protected] ~]# yum -q remove zsh
======================================================================================== Package 架构 版本 源 大小
========================================================================================正在删除: zsh x86_64 5.0.2-25.el7 @base 5.6 M
事务概要========================================================================================移除 1 软件包是否继续?[y/N]:
依赖关系解决2、加[[email protected] ~]# yum -q remove zsh
======================================================================================== Package 架构 版本 源 大小
========================================================================================正在删除: zsh x86_64 5.0.2-25.el7 @base 5.6 M
事务概要========================================================================================移除 1 软件包是否继续?[y/N]:
--disablerepo=REPO[[email protected] ~]# yum repolist
已加载插件:fastestmirrorLoading mirror speeds from cached hostfile * epel: mirrors.neusoft.edu.cn
源标识 源名称 状态base CentOS-7 - Base - mirrors.aliyun.com 9,363epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 11,769
repolist: 21,132[[email protected] ~]# yum --disablerepo=base repolist
已加载插件:fastestmirrorLoading mirror speeds from cached hostfile * epel: mirrors.neusoft.edu.cn
源标识 源名称 状态epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 11,769
repolist: 11,769--enablerepo=REPO[[email protected] ~]# yum --enablerepo=extras repolist
已加载插件:fastestmirrorLoading mirror speeds from cached hostfile * epel: mirrors.neusoft.edu.cn
* extras: mirrors.aliyun.com
源标识 源名称 状态base CentOS-7 - Base - mirrors.aliyun.com 9,363epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 11,769
!extras/7/x86_64 CentOS-7 - Extras - mirrors.aliyun.com 449
repolist: 21,581--noplugins1、加载插件[[email protected] ~]# yum install zsh-4.3.11-4.el6.centos.2.i686.rpm
已加载插件:fastestmirror2、不加载插件[[email protected] ~]# yum --noplugins install zsh-4.3.11-4.el6.centos.2.i686.rpm
正在检查 zsh-4.3.11-4.el6.centos.2.i686.rpm: zsh-4.3.11-4.el6.centos.2.i686 |
SUB_COMMAND
安装:install,localinstall,groupinstall
install package ...
localinstall package ... (centos 5安装rpm必须)
groupinstall GROUP ...
1、直接给出: yum install gcc 默认安装最新
2、给出版本: yum install gcc-1.2.3 指定安装版本
|
1
2
3
4
5
6
7
8
9
10
11
|
1、查看当前系统版本:[[email protected] ~]# cat /etc/centos-release
CentOS Linux release 7.3.1611 (Core) 说明安装rpm文件,用install即可
2、安装rpm文件[[email protected] ~]# yum -y install zsh-5.0.2-25.el7_3.1.x86_64.rpm
已加载插件:fastestmirror正在检查 zsh-5.0.2-25.el7_3.1.x86_64.rpm: zsh-5.0.2-25.el7_3.1.x86_64zsh-5.0.2-25.el7_3.1.x86_64.rpm 将被安装正在解决依赖关系.... |
重装: reinstall
reinstall package ...
|
1
2
3
4
5
6
7
8
9
10
11
|
1、安装程序包,报错,已经安装的程序包[[email protected] ~]# yum -y install zsh-5.0.2-25.el7_3.1.x86_64.rpm
已加载插件:fastestmirror正在检查 zsh-5.0.2-25.el7_3.1.x86_64.rpm: zsh-5.0.2-25.el7_3.1.x86_64zsh-5.0.2-25.el7_3.1.x86_64.rpm:不更新已安装的软件包。错误:无须任何处理2、重新安装[[email protected] ~]# yum -y reinstall zsh-5.0.2-25.el7_3.1.x86_64.rpm
[[email protected] ~]# ls /etc/zsh*
/etc/zshenv /etc/zshrc 不会生成其他文件
|
查询:list/repolist grouplist info whatprovides
仓库信息:安装、可用
repolist [all|enabled|disabled] 默认为enabled(启用和禁用)
程序包:
显示: list [all|available|installed|extras|obsoletes|recent] [glob_expr1] ...
搜索:search STRING ... (STRING由Glob通配符和纯文本字符组成)
查看指定CAPABILITY(文件/功能)由哪个程序包所提供
whatprovides CAPABILITY
包内
信息: info package ...
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
yum repolist 显示启用 仓库id 仓库name 程序包的数量yum list 包名 release号 仓库idyum search yum 搜索程序包及简要信息yum whatprovides /bin/ls 显示功能或文件由哪个仓库或程序包来提供yum info yum 类似rpm -q -i 显示程序包的内容Name : yumArch : noarchVersion : 3.4.3
Release : 150.el7.centos
Size : 5.5 M
Repo : installedFrom repo : baseSummary : RPM package installer/updater/manager
URL : http://yum.baseurl.org/
License : GPLv2+Description |
卸载: remove,groupremove
remove package ...
groupremove GROUP ...
|
1
|
[[email protected] ~]# yum remove yum
|
升级: update,groupupdate
update package ...
groupupdate GROUP ...
|
1
2
3
4
5
|
1、检查可用升级[[email protected] ~]# yum --enablerepo=updates check-update
2、升级:[[email protected] ~]# yum --enablerepo=updates update
|
检查升级: check-update
check-update
降级: downgrade
downgrade package ...
本地缓存
清理: clean [headers|packages|metadata|dbcache|plugins|expire-cache|all]
构建: makecache
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
1、清理程序包yum clean packages2、清理头文件yum clean headers3、清理元数据yum clean metadata4、清理插件yum clean plugins5、清理过期缓存yum clean expire-cache6、清理所有yum clean all7、构建缓存yum makecache |
历史: history [info|list|packages-list|summary|addon-info|redo|undo|rollback|new]
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
[[email protected] ~]# yum history #### 相当于yum history list
Loaded plugins: fastestmirrorID | Command line | Date and time | Action(s) | Altered
------------------------------------------------------------------------------- 104 | install zsh-4.3.11-4.el6 | 2017-08-16 18:44 | Install | 1
103 | remove zsh | 2017-08-16 18:44 | Erase | 1
102 | -y reinstall zsh-5.0.2-2 | 2017-08-16 18:24 | Reinstall | 1
101 | install zsh-5.0.2-25.el7 | 2017-08-16 18:22 | Install | 1
100 | --nogpgcheck remove zsh | 2017-08-16 18:18 | Erase | 1
99 | install --nogpgcheck zsh | 2017-08-16 18:17 | Install | 1
98 | remove --nogpgcheck zsh | 2017-08-16 18:16 | Erase | 1
97 | install zsh-4.3.11-4.el6 | 2017-08-16 18:15 | Install | 1
96 | remove zsh | 2017-08-16 18:14 | Erase | 1
95 | --nogpgcheck install zsh | 2017-08-16 18:13 | Install | 1
94 | remove zsh | 2017-08-16 18:13 | Erase | 1
93 | install zsh-4.3.11-4.el6 | 2017-08-16 18:12 | Install | 6 <
92 | install -y zsh | 2017-08-16 18:08 | Install | 1 ><
91 | install createrepo | 2017-08-16 10:01 | Install | 56 ><
90 | install zsh | 2017-08-15 11:58 | Install | 40 ><
89 | install zsh-4.3.11-4.el6 | 2017-08-15 11:05 | Install | 2 >
88 | install mdadm | 2017-08-11 17:14 | Install | 2
87 | install tigervnc-server | 2017-07-31 22:24 | Install | 22 P<
86 | install libtermcap-devel | 2017-07-31 15:54 | Install | 1 ><
85 | -y install sendmail mail | 2017-07-31 15:49 | Install | 4 >
Warning: RPMDB altered outside of yum.history list
[[email protected] ~]# yum history summary
Loaded plugins: fastestmirrorLogin user | Time | Action(s) | Altered -------------------------------------------------------------------------------root <root> | Last day | E, I, R | 74root <root> | Last week | Install | 44root <root> | Last 3 months | E, I, U | 469System <unset> | Last 6 months | I, U | 288
root <root> | Last 6 months | I, U | 206history summary
[[email protected] ~]# yum history info
Loaded plugins: fastestmirrorTransaction ID : 104Begin time : Wed Aug 16 18:44:57 2017
Begin rpmdb : 100:e66a5c3b4265234fa222836dc108212efe773c48End time : 18:44:58 2017 (1 seconds)
End rpmdb : 101:d0ae5b619911556d572b14f912f0be9bdd0a9ba7 **User : root <root>Return-Code : SuccessCommand Line : install zsh-4.3.11-4.el6.centos.2.i686.rpm
Transaction performed with: Installed rpm-4.11.3-21.el7.x86_64 @base
Installed yum-3.4.3-150.el7.centos.noarch @base
Installed yum-plugin-fastestmirror-1.1.31-40.el7.noarch @base
Packages Altered: Install zsh-4.3.11-4.el6.centos.2.i686 @/zsh-4.3.11-4.el6.centos.2.i686
history info
|
版本: version
|
1
2
3
4
5
6
|
[[email protected] ~]# yum version ##rpmdb的版本
Loaded plugins: fastestmirrorWarning: RPMDB altered outside of yum.Installed: 7/x86_64 101:db92c5ee1a848d4268e09e1b87f10e6808a76af1
Group-Installed: yum 15:396f07de8170b01350e3ca880e428c054b68573dversion |
配置文件
ini风格: [] 表示一个配置段
获取帮助:
man的章节: 1: 普通用户 8:管理员 2:syscall 3:libcall 4:设备 5:配置文件 6:game 7:杂项
1)查看帮助手册所有的章节: whatis yum
2)查看帮助: man 5 yum.conf
获取配置文件
rpm -q -c yum
yum.conf ## 所有仓库通用的配置
yum.repos.d/*.conf ## 每个仓库独有的配置
配置文件格式
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
yum.conf[main] 表示主配置段cachedir 缓存文件的位置(程序包+元数据信息)keepcache 缓存使用后是否保留 1保留 0删除debuglevel 调试级别logfile yum安装程序包的安装日志文件路径exactarch 是否精确平台匹配 1是 0否 (当前rhl6,程序包rhl7能否安装?)obsolutes 是否废弃gpgcheck 安装包时是否检查来源合法性及完整性 1检查 (yum --nogpgcheck本次不检查)plugins 是否支持插件机制 1支持 (yum --noplugins 本次关闭)installonly_limit 同时安装几个程序包bugtrack_url 追踪bug的URLdistroverpkg 发行版 版本号 获取位置: centos / redhat |
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
[repositoryid] 仓库ID:多个仓库ID不能相同:base表示安装光盘提供的基本安装树name= 仓库的名字fail over method={roundrobin|priority} 故障转移方法roundrobin: 随机,priority: 从上而下baseurl=URL repodata目录所在的目录:是仓库指向的路径 URL
...
enabled={1|0} 默认启用gpgcheck={1|0} gpgkey=URL 指向能访问**文件的访问路径repo_gpgcheck={1|0} 是否检查元数据信息repodataenablegroups={1|0} 默认启用,是否支持在此仓库上使用组批量管理程序包cost= 设定开销:默认1000keepalive 远程为http1.1时,是否使用保持连接bandwidth 带宽username 用户名password 密码 |
用URL定义仓库指向,baseurl=URL
URL: schema://服务器IP或域名/URL路径(指向一个文件或目录文件)
URL schema: ftp:// http:// https:// nfs:// file:///
变量:简化、统一用户配置yum源
$releasever: 当前OS的发行版的主版本号
$arch: 平台
$basearch: 基础平台(x86平台,统一识别为i386)
$YUM0-YUM9 自定义变量
开销:服务器距离主机的距离,网络的延迟
镜像:同类仓库出现多个时,yum基于插件,同一个仓库指向一堆服务。不同站点同时提供同类仓库
程序包选择:
1、多个版本时,安装新的版本。
2、多个镜像站点,有相同的程序包,选择cost低的服务器
仓库配置及生成
仓库配置
1、挂载光盘
2、配置仓库
仓库的生成
抽取rpm包中元数据(rpm内部文件的清单,CAPABILITY信息),制作repodata文件,放在repodata文件中及元数据的特征码。用createrepo命令实现
createrepo命令
|
1
2
3
4
5
6
7
8
9
|
createrepo [OPTIONS...] DIR-o DIR 将repodata目录输出至-x rpmfile ... 将目录中的rpm包排除-i rpmfile ... 只对目录中的rpm包生成元数据及特殊码--basedir=DIR# createrepo -o /tmp /root /tmp/repodata
repomd.xml 存放元数据的指纹信息 |
元数据的存储的位置
压缩后存储于文件
sqllite接口存储,便于查询
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
1、清空目录[[email protected] ~]# ls /tmp
[[email protected] ~]#
2、创建元数据[[email protected] ~]# createrepo -o /tmp /root
Spawning worker 0 with 5 pkgsWorkers FinishedSaving Primary metadataSaving file lists metadata
Saving other metadataGenerating sqlite DBslSqlite DBs complete3、查看元数据位置[[email protected] ~]# ls /tmp
repodata4、查看元数据的组成[[email protected] ~]# ls /tmp/repodata/
24bff8236c43b8cce77ca9809b2b1e88bfd1e8fdfd74aef81ca79f93581ca228-primary.xml.gz2f2effdd5cfd0a15456308e7f519c71981c5b6b0a022f1e727c753fd9d0b9257-filelists.sqlite.bz2511b71f4b3d7d7a45a0578ca8e9afd8afaaed9ec6bc807245b47a70c3d0f02b1-other.sqlite.bz26fdabd5af8661afc931075fde9bc87f1859f78819fae135832918a2548ed7c9b-other.xml.gz9c564d97a9a0ecd0b8d244b14c9cc22fffb62279989b041e66c8a2df1551c730-primary.sqlite.bz2b0ab6c6ab987d2d530ca3faf2c7c3b725375a156df2130e77ccbc911b1ecc752-filelists.xml.gzrepomd.xml ##以上数据的校验码信息
|
lftp命令
|
1
2
3
|
lftp> !STRING 执行shell命令lftp> lcd DIR 本地执行切换目录lftp> mget file ... 批量下载文件
|
编译安装
目的:
1、提供的rpm功能不全
2、新功能,rpm包还没有制作
原理: 源代码 -- 预处理(预处理器) -- 编译(编译器gcc) -- 汇编代码 -- 汇编(汇编器) -- 二进制指令 -- 链接(链接器)
源代码命名: testapp-1.2.3-1.操作系统平台.src.rpm
编译:
静态: 共享库编译进程序,运行时不调用共享库,不链接,占内存。
共享库:在编译成二进制程序后,需要用链接器,链接库。运行时,调用共享库。节约内存。
源代码中有多个文件间存在依赖关系,为了简化难度提供项目管理工具
java源程序: maven
c,c++程序: make
C,C++代码编译的步骤:
1、获取程序包源代码的途径
1)、官方自建的站点
apache.org(ASF:Apache Software Fundition)
mariadb.org
2)、代码托管站点
SourceForge
Github.com
code.google.com
2、
1)、手动提供开发环境及工具
开发工具
autoconf 生成confiugre脚本
automake 生成Makefile.in文件
make
gcc
开发环境
glibc(Gnu C标准库)、头文件
2)、CentOS包组
6 "Development Tools" "Server Platform Development"
7 "Development Tools"
3、展开查看INSTALL,README帮助手册:获取安装方式
1)只需要make
2)只需要make install
3) 直接使用
4、安装后检验gcc是否安装完毕: gcc version
5、编译
获取编译可指定的选项: ./configure --help
1)指定选项
--prefix=DIR 程序默认安装位置,便于卸载(只有此选项时,所有其他目录均在DIR目录下)
--sysconfdir=CONF_DIR 配置文件安装
--disable-FATURE 默认启用,不想用时,才禁用
--enable-FATURE 默认禁用,想用时,才启用
--with-PACKAGE=PATH 指定当前程序包依赖的包及其所在的路径
--without-PACKAGE 指定当前程序包不依赖的包
2)make 当./configure成功后,生成Makefile文件后,方可make
**注意Make后error信息**
3)make install 调用install命令,完成复制文件(dd,cp,install)
6、编译后的处理
PATH变量输出、库路径输出、头文件路径输出、man手册路径输出
1)导出二进制程序至PATH环境变量
环境变量: profile类
全局: /etc/profile 、 /etc/profile.d/*.sh
个人: ~/.bash_profile
2)导出库文件路径
查看库: ldconfig -p
配置库: /etc/ld.so.conf 、 /etc/ld.so.conf.d/*.conf
重新生成缓存: ldconfig [-v]
查看程序依赖的库:
# ldd path
3)导出头文件
ln -sv /path/to/include /usr/include/NAME
4)导出帮助手册
MANPATH /PATH/TO/man
不导出时:
man -M /PATH/TO/man COMMAND