与Windows类似,在Linux上也可以安装各种应用程序,或称软件包,Linux软件包分为三类:
分类 | 安装 | 特点 |
---|---|---|
rpm包 | 预先编译打包,安装简单 | 通常软件的稳定版会被官方做成rpm,所以软件版本偏低 |
源码包 | 手动编译打包,安装繁琐 | 软件版本丰富,可选择性强 |
二进制包 | 解压即可使用,安装简单 | 不能修改源代码 |
rpm包管理
在主流的Linux系统上,多数软件的安装、升级、移除以及维护工作都是使用RPM软件包管理程序来完成的。
RPM是Red-Hat Package Manager(RPM软件包管理器)的缩写,这一文件格式名称虽然打上了RedHat的标志,但是其原始设计理念是开放式的。
rpm包格式
rpm包获取方式:
-
1、本地镜像光盘
# 虚拟机上是直接使用光盘镜像文件,挂载即可,实体机上则是使用光驱或U盘。 mount /dev/sr0 /media # 也可将镜像文件拷贝到主机内,然后再挂载。 dd if=/dev/sr0 of=/root/CentOS7.iso mount -o loop /root/CentOS7.iso /media # 或者使用xshell远程登录,然后使用rz命令通过网络传输至服务端
-
2、网络下载软件包
1、Centos镜像:http://mirrors.aliyun.com http://mirrors.sohu.com http://mirrors.163.com 2、第三方组织:Fedora-EPEL 3、搜索引擎:http://pkgs.org http://rpmfind.net http://rpm.pbone.net 4、项目官方站点
对于从网上下载的软件包:1、检查其来源合法性。2、检查软件包完整性。
rpm包管理工具
安装:
rpm {-i|--install} [install-options] PACKAGE_FILE ...
-v:verbose显示安装过程
-h:以#显示程序包管理执行进度:每个#表示2%的进度
rpm -ivh package 安装常用组合,还可以接上链接地址直接从网络下载安装。
install-options:
--test:测试安装,但不真正执行安装过程:dry run 模式
--nodeps:忽略依赖关系
--replacepkgs:重新安装,安装后配置文件可能不会启用或覆盖旧配置文件
--nodigest:不检查包完整性
--nosignature:不检查来源合法性
--noscripts:不执行程序包脚本片断
%pre:安装前脚本 --nopre:不执行脚本
%post:安装后脚本 --nopost:不执行脚本
%preun:卸载前脚本 --nopreun
%postun:卸载后脚本 --nopostun
rpm如果在安装过程中保错:curl: (60) Peer's Certificate has expired҅,就先将系统时间修改正确,再安装即可。
升级:
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
rpm -Uvh Package 常用升级组合
upgrade:安装有旧版程序包则“升级”,如果不存在旧版程序包则“安装”
freshen:安装有旧版程序包,则“升级”,如果不存在旧版程序包,则不执行升级操作
--oldpackage:降级
--force:强制升级
注意:
- 1、不要对内核做升级操作:Linux支持多内核版本并存,因此直接安装新版本内核。
- 2、如果源程序包的配置文件安装后曾被修改,升级时,新版本提供的同一个配置文件并不会直接覆盖老 版本的配置文件,而是把新版本的文件重命名(Filename.rpmnew)后保留。
查询:
rpm {-q|--query} [select-options] [query-options]
select-options
-a:所有包
-f:查询指定的文件由哪个程序包安装生成
-p /packages_file:针对未安装的程序包文件做查询操作
--whatprovides CAPABILITY:查询指定的capability由哪个包所提供
--whatrequires CAPABILITY:查询指定的capability被哪个包所依赖
query-options
--changelog:查询rpm包的changelog
-c:查询程序包的配置文件
-d:查询程序的帮助文档
-i:information
-l:列出指定的程序包安装完后生成的所有文件列表
--scripts:查询指定程序的脚本片断
-R:查询程序所依赖的CAPABILITY
--provides:列出指定程序包所提供的CAPABILITY
常见用法:
-qi package,-qf file,-qc package,-ql package,-qd package
-qpi package_file,-qpl package_file,-qa
# 使用-q指定包名查询时可能查不到,可以使用包名+副包名,或者使用-qa | grep过滤。
[chirou@duorou network-scripts ]$ rpm -q vim
未安装软件包 vim
[chirou@duorou network-scripts ]$ rpm -q vim*
未安装软件包 vim*
[chirou@duorou network-scripts ]$ rpm -qa | grep "vim"
vim-filesystem-7.4.629-6.el7.x86_64
vim-common-7.4.629-6.el7.x86_64
vim-enhanced-7.4.629-6.el7.x86_64
vim-minimal-7.4.629-6.el7.x86_64
[chirou@duorou network-scripts ]$ rpm -q vim-filesystem
vim-filesystem-7.4.629-6.el7.x86_64
卸载:
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts]
[--notriggers] [--test] PACKAGE_NAME ...
--nodeps:卸载时忽略依赖关系,轻易不要使用,可能会有很多重要程序依赖此包。
校验:
rpm {-V|--verify} [select-options] [verify-options]
...skipping...
S file Size differs
M Mode differs (includes permissions and file type)
5 digest (formerly MD5 sum) differs
D Device major/minor number mismatch
L readLink(2) path mismatch
U User ownership differs
G Group ownership differs
T mTime differs
P caPabilities differ
包完整性验证:hash加密算法SHA256
来源合法性验证:
对称加密:加密、解密使用同一秘钥
非对称加密:秘钥是成对的
public key:公钥,公开所有人
secret key:私钥,不公开
# 导入所需公钥:
rpm --import /GPG-PUBKEY-FILE
-K:不用安装,直接校验程序包来源合法性和完整性
CentOS 7发型版光盘提供的秘钥文件:RPM-GPG-KEY-CentOS-7
数据库重建:
rpm {--initdb|--rebuilddb}
--initdb:初始化
# 如果事先不存在数据库,则新建之。否则,不执行任何操作
--rebuilddb:重建
# 无论当前存在与否,直接重新创建数据库
yum包管理工具
YUM全称:yellow dog,Yellowdog Update Modifier
YUM是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理工具。基于rpm包管理,能够从指定的服务器自动下载rpm包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。
yum命令
yun命令行选项:
--nogpgcheck:禁止进行gpg check
-y:自动回答为“yes”
-q:静默模式
--disabelrepo=repoidglob:临时禁用此处指定的repo
--enablerepo=repoidglob:临时启动此处指定的repo
--noplugins:禁用所有插件
安装:
# 安装,-y表示确认安装。
yum install package1 [package2] [...]
# 重装程序包:生产环境慎用
yum reinstall package1 [package2] [...]
# 安装包组
yum groupinstall PackageGroup...
升级:
# 升级程序包:
yum update [package1] [package2] [...]
# 升级所有软件包,包括内核,通常只在刚装完系统时执行,生产环境中不要用。
yum update
# 降级程序包:
yum downgrade package1 [package2] [...]
卸载:
# 卸载程序包:
yum remove | erase package1 [package2] [...]
# 卸载包组
yum groupremove PackageGroup...
查询:
# 显示仓库列表:
yum repolist [all | enabled | disabled]
# 显示已安装程序包和可安装程序包:
yum list [all | glob_exp1] [glob_exp2] [package...]
yum list {available | installed | updates} [glob_exp1] [package...]
# 显示包组
yum grouplist
# 查看程序包information:
yum info [package...]
# 查看指定的特性(可以是某文件或命令)由哪个程序包提供,可以是未安装的程序包。
yum provides | whatprovides feature1 [feature2] [...]
# 以指定的关键字搜索程序包名及summary概括信息
yum search string1 [string2] [...]
# 查看指定的包所依赖的capabilities:
yum deplist [package1] [package2] [...]
# 安装及升级本地程序包:
yum localinstall rpmfile1 [rpmfile2] [...]
清除和构建缓存:
# 元数据缓存指的是将yum仓库的元数据缓存到本地,下次安装时省去了检索过程,安装速度可以加快。元数据包括可用软件包信息以及依赖关系等。
# 清理本地元数据缓存:
yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
# 构建元数据缓存:
yum makecache
# 构建安装包缓存:
将/etc/yum.conf文件内的keepcache=0修改为1,会保存安装的软件包。
查看yum事务历史:
# 查询yum历史操作
yum history
# 查询具体某条yum命令的详细信息
yun history info ID
# 撤销执行过的yum命令
yum history undo ID
yum repo(yum仓库):
全称yum repository,或称yum源。存储了众多的rpm包,以及相关的元数据文件(放置于特定的目录下:repodata)。
能作为yum仓库必须具备两点:
- 1、文件下涵盖所有相关的软包
- 2、该文件夹下必须要有一个文件记录了本文件夹所包含的软件包依赖关系
yum客户端配置文件:
-
/etc/yum.conf:为所有仓库提供公共配置
[main] # [main]部分是强制性的,并且只能是一个 cachedir=/var/cache/yum/$basearch/$releasever # yum下载的RPM包的缓存目录 keepcache=0 # 下载的缓存包是否保存,1保存,0不保存。 debuglevel=2 # 调试级别(0-10),默认为2,只记录安装和删除记录。 logfile=/var/log/yum.log # yum的日志文件所在的位置 exactarch=1 # 在更新的时候,是否允许更新不同硬件平台的RPM包,设为1则不更新。 obsoletes=1 gpgcheck=1 # 是否检查GPG签名 plugins=1 # 是否允许使用插件,一般会用yum-fastestmirror这个插件。 installonly_limit=5 # 允许保留多少个内核包。 bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum distroverpkg=centos-release
-
/etc/yum.repos.d/*.repo:为仓库的指向提供配置
# Centos7配置方式: [] # 源标识,yum以此项为准 name= # 源的描述信息 baseurl= # 指定源地址,指定到repodate文件所在的目录 常用服务协议: ftp:// http:// nfs:// file:///PATH/Dir gpgcheck= # 是否检查签名 enabled= # 是否启用该仓库,默认为1启用
配置yum源
- 1、配置本地yum源:
# 方式一:使用光盘当做本地yum仓库
# 1、挂载光盘至某目录
mount /dev/sr0 /meida/cdrom
# 或把光盘镜像文件拷贝下来,再挂载至某目录,这样即使卸载光盘设备,也能使用
dd if=/dev/zero of=/root/Censos7.iso
mount -o loop *.iso /media/cdrom
# 2、在/etc/yum.repos.d目录配置yum源
# 方式二:把本地的一个文件夹做成yum源,方案实例
1、部署集群时,需要在多台机器上安装相同的软件包,可以在安装前将配置文件/etc/yum.conf文件中的keepcache改为1,然后安装相同版本的操作系统,安装完毕后统一执行yum update -y。接着先在一台机器上安装好需要的软件包,这样能保存安装的软件包和相关的依赖包。默认会保存在chchefile指定的目录中。
2、执行createrepo /PATH 生成repodata目录,里面记录着软件包的依赖关系,这个包含软件包和依赖包以及repodata目录的目录就可以作为yum源。
3、使用ftp服务将该目录共享给集群其他集群,在其他待安装软件包的机器中/etc/yum.repos.d目录配置yum源文件地址即可保证安装的软件包版本都相同。
4、在线上环境部署时,就用该本地源就好,不要轻易升级,不要滥用yum源,这样可以严格控制各个服务的版本。
- 2、配置网络yum源:
CentOS自带有一些base基础源,常用的还有epel扩展源以及项目的官方站点源。EPEL的全称是Extra Packages for Enterprise Linux ̶repodata。由Fedora社区打造,为RHEL及衍生版如CentOS提供高质量软件包。为了使用稳定,epel提供的rpm包往往会比项目官方站点的rpm包滞后一些。
# 配置epel源:直接使用yum命令安装,或指定官网安装
yum install -y epel-release
yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
# epel官网:https://fedoraproject.org/wiki/EPEL/zh-cn
# 配置nginx源稳定版
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
# 国内的一些yum镜像
# 163网易的yum源
wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
# sohu的yum源
wget http://mirrors.sohu.com/help/CentOS-Base-sohu.repo
# 阿里云
wget http://mirrors.aliyun.com/repo/Centos-7.repo
# 中科大
http://mirrors.ustc.edu.cn/help/
# 清华大学
https://mirrors.tuna.tsinghua.edu.cn/
注:1、repodata目录所在的路径才是仓库的URL。
2、指定baseurl时有两个变量,$basearch:硬件平台,$releasever:系统发行版。
3、yum同时只能运行一个,不要用两个终端同时安装。