【Linux-系统软件包管理器】
一、Linux软件安装
Linux软件安装概述
安装程序的方式:
- 通用二进制格式:直接解压压缩文件,就可以使用;但一定要注意安装平台
- 软件包管理器:如RPM
- 软件包管理器的前端工具:如YUM
-
软件包概述
软件包的组成部分:
二进制程序,位于 /bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin 等目录中。
- 库文件,位于 /lib, /usr/lib, /usr/local/lib 等目录中。Linux中库文件以 .so(动态链接库)或 .a(静态链接库)作为文件后缀名。
- 配置文件,位于 /etc 目录中。
- 帮助文件:手册, README, INSTALL (/usr/share/doc/)
在没有软件包管理器之前,安装程序,卸载程序是非常繁杂的。
软件包管理工具的特性:
- 文件清单
- 文件放置路径
- 提供的功能说明
- 依赖关系
软件包管理器内部有一个数据库,其中记载着程序的基本信息,校验信息,程序路径信息等。
二、YUM
Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器
- YUM使用Python语言写成
- 使用YUM进行RPM包的管理,非常简单方便
- 基于RPM包管理,可以通过HTTP服务器下载、FTP服务器下载、本地软件池的等方式获得软件包
- 能够从指定的服务器自动下载RPM包并且安装,且缓存在本地,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装
- YUM提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记
YUM客户端的配置
YUM的配置方式是基于分段配置的
- 主配置文件:/etc/yum.conf
- YUM的片段配置:/etc/yum.repos.d/*.repo
- 主配置文件配置了一个特殊的仓库,名称为main。main是为其他仓库提供默认的全局配置的
cat /etc/yum.conf配置文件的说明:
参数 | 说明 |
---|---|
[main] | main仓库。[ ]中括号表示一个仓库的定义。其中是仓库的名称 |
cachedir=/var/cache/yum/$basearch/$releasever | RPM包的缓存位置 RPM包的缓存位置 |
keepcache=0 | RPM包在本地是否需要长期保存。1表示yes,0表示no |
debuglevel=2 | 日志级别 |
logfile=/var/log/yum.log | 日志文件 |
exactarch=1 | 下载的RPM包是否需要与本地平台完全匹配。1表示yes,0表示no |
obsoletes=1 | |
gpgcheck=1 | 是否需要自动来源合法性检测 |
plugins=1 | |
installonly_limit=5 | |
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=16&ref=http://bdistroverpkg=centos-release |
cd /etc/yum.repos.d/ && ls 配置文件:
CentOS自带的这些配置文件中,其实只有CentOS-Base.repo文件有效。按照需求,这些文件可以删除,或改名,或自己建立一个.repo的配置文件。实际使用中,可以参考CentOS-Base.repo的配置自定义.repo文件。
查看cat CentOS-Base.repo配置文件
对配置文件中的一些配置项作说明:
[ … ]:仓库的名称。不能重复。
name:对仓库的描述,该项必须有。
baseurl:配置仓库的路径。用于指定一个url。
mirrorlist:指向一个镜像列表,里面有多个url。
enabled:是否启用当前仓库。值为1或0,默认为1。
gpgcheck:是否需要gpg校验。值为1或0,默认为1。
gpgkey:验证RPM包的密钥文件路径。该文件可以在远处服务器上,也可以在本地。
cost:代价,其本质是仓库优先级的配置。值越低,表示访问的代价越低,也即优先使用。
注意:配置文件中的”=”号的前后不能有空格
例:自己写一个repo配置文件
[base]
name=CentOS 6.4 x86_64
baseurl=http://172.16.0.1/cobbler/ks_mirror/centos-6.4-x86_64/
enabled=1
gpgcheck=0
YUM命令的使用
分类 | 说明 | 命令 |
---|---|---|
yum命令 | yum [options] [subcommand] [package …] | |
镜像 安装与升级 |
安装软件包 | yum [-y] install <包1 … 包n>yum [-y] install |
重新安装软件包 | yum [-y] reinstall <包1 … 包n> | |
检查可升级的包 | yum check-update | |
升级软件包 | yum update <包2 … 包n> yum update-to 包-版本号 |
|
卸载 | 卸载软件包 | yum remove <包1 … 包n> 注意:若该包被依赖,则该卸载可能会导致一些问题。如A依赖B,若卸载B,则A也会被卸载 |
本地安装升级RPM包 | 本地安装升级RPM包 | 在RHEL6/CentOS6可以直接使用install,update命令安装本地rpm包 yum install <rpm包> yum update <rpm包> 或者使用localinstall,localupdate。在RHEL5/CentOS5下必须使用localinstall,localupdate yum localinstall <rpm包> yum localupdate <rpm包> yum安装rpm默认会查询软件包来源合法性,但有时没提供密钥,无法安装。使用—nogpgcheck选项,可以避免yum作校验 yum localinstall —nogpgcheck |
|
| 操作历史 | 查看此前安装卸载等操作历史 | yum history |
| | | |
| 模糊**匹配搜索 | 查找网络库上的软件包 | yum search <查询名> |
| list
相关命令 | 列出网络库所有可安装的软件包 | yum list 或 yum list all
输入之后会出现内容:
- 第一列:软件包名称.平台名称
- 第二列:软件版本号-release号
- 第三列:安装情况
执行 yum list all | more 后,若显示:
- AppStream: 则表示应用程序流
- epel: 是Fedora小组维护的一个软件仓库项目
- BaseOS: 底层操作系统
最常用**
yum list <包名> —showduplicates | sort -r
|
| | 列出所有可更新的软件包 | yum list updates |
| | 只显示没有安装,但可安装的包 | yum list available |
| | 列出所有已安装的软件包 | yum list installed |
| | 列出所有已安装但不在 Yum Repository 内的软件包 | yum list extras |
| | 列出所指定的软件包 | yum list <package>
可以配合通配符使用,比如_yum list gi*
- Installed Package:表示已经安装的包
- Avaliable Package:表示没有安装,但可以安装的包
|
| | 显示被废弃的包 | yum list obsoletes |
| | 新添加进yum仓库的包 | yum list recent |
| | 启动项 |
- 开机
- [x] systemctl enable <服务名>
- [ ] chkconfig <服务名> on
- 关机
- [x] systemctl disable <服务名>
- [ ] chkconfig <服务名> off
- 查看是否该服务设置启动项
- systemctl is-enabled <服务名>
- [ ] chkconfig <服务名>
- 查看各个级别下服务的启动与禁用情况
- [x] systemctl list-unit-files —type=service
- [x] systemctl list-unit-files | grep enabled
- [ ] chkconfig —list
| | | 启动状态 | systemctl status
systemctl status <服务名>
列出当前系统服务的状态清单
systemctl list-units | grep active | grep <服务名> |
| | 开机图形 | #开机不开启图形
systemctl set-default multi-user.target
开机启动图形
systemctl set-default graphical.target |
| | | |
| info
相关命令 | 列出所有软件包的信息 | yum info |
| | 列出所有可更新的软件包信息 | yum info updates |
| | 列出所有已安装的软件包信息 | yum info installed |
| | 使用YUM获取指定软件包信息 | yum info <package>
类似于rpm -qi 包名 |
| | 列出所有已安装但不在 Yum Repository 内的软件包信息 | yum info extras |
| | | |
| provides相关命令 | 查询某个文件是由哪个软件包生成的 | yum provides <文件>
yum whatprovides 文件
该功能类似于rpm -qf 包名 |
| | | |
|
repo**相关命令 | 查看仓库 | yum repo list |
| | 显示所有仓库 | yum repo list all |
| | 显示禁用的仓库 | yum repo list disabled |
| | 显示启用的仓库 | yum repo list enabled |
| | | |
| 清空缓存 | 本地缓存需要清空 | yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ] |
| | 手动在本地建立缓存 | yum makecache |
| | | |
| | | |
| 安装包组** | 查看yum仓库里的包组 | yum grouplist |
| | 显示指定的包组信息 | yum groupinfo <包组> |
| | 安装包组 | yum [-y] groupinstall 包组1 包组n
例:安装开发环境,构建编译源码的环境。
一般为了防止出现不必要的问题,开发环境需要配置如下三个包组:
RHEL6/CentOS6:”Development tools”、”Server Platform Development”、”Desktop Platform Development”
RHEL5/CentOS5:”Development tools”、”Development Libraries”
输入命令:yum [-y] groupinstall “Development tools” “Server Platform Development” “Desktop Platform Development” |
| | 升级包组 | yum [-y] groupupdate 包组1 包组n |
| | 卸载包组 | yum [-y] groupremove 包组1 包组n |
搭建YUM仓库
yum仓库又称为yum源,yum仓库一般会支持ftp协议(ftp://),http协议(http://),文件协议(file://)
本地的YUM仓库
使用系统安装盘当作YUM仓库。对于RHEL系列的Linux,其安装光盘就是一个yum仓库。挂在上光盘,将yum客户端的仓库指向光盘路径。
例:将baseurl指向光盘路径。使用file://协议。
[base]
name=CentOS 6.4 x86_64
#baseurl=http://mirrors.sohu.com/centos/6.4/os/x86_64/
baseurl=file:///media/cdrom
enabled=1
gpgcheck=0
在配置完后,需要清空yum缓存 yum clean all 然后生成缓存 yum makecache 查看当前的可用的yum仓库 yum repolsit 配置yum仓库为网易镜像站中CentOS 6.4 x8664的目录。只需要修改repo的baseurl。_baseurl=http://mirrors.sohu.com/centos/6.4/os/x86_64/
YUM内置变量
yum内置变量是关于操作系统、CPU平台的一些信息。可用于动态的配置yum路径。
说明:
$releasever:当前操作系统的主版本号。若CentOS6.4 该值为6。
$arch: 当前平台版本架构。x86_64 或 i386/i586/i686。
$basearch: 当前平台的基本架构。x86_64 或 i386。
$YUM0-9: 这十个变量分别被 shell 环境中的同名变量的值所替代。如果 /etc/yum.conf 文件中设置了这些变量,而 shell 环境中没有同名变量,它的值则不被代替。
例:配置基于网易镜像站的跨平台路径
baseurl=http://mirror.sohu.com/centos/relasever/os/basearch/
_
创建YUM仓库
使用createrepo命令创建YUM仓库。该命令系统中默认是没有的。可以使用rpm或yum安装上该命令。
格式:createrepo rpm包目录
该命令会在指定目录中生成repodata目录。该目录中是所有RPM包的信息文件,及其依赖关系的信息文件。以xml文档和sqllite数据库文件的形式存储。
创建基于HTTP访问的yum仓库
搭建Web服务器,让浏览器能访问到相应的yum仓库目录,即可通过HTTP访问yum仓库。
使用yum源
#查看Linux内核版本命令
uname -a
cat /proc/version
#查看Linux系统版本的命令
cat /etc/redhat-release
lsb_release -a
cat /etc/issue
#配置解析
vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
BOOTPROTO="dhcp"
ONBOOT="yes"
TYPE="Ethernet"
NM_CONTROLLED="no"
IPV6_AUTOCONF="yes"
IPV6INIT="yes"
NOZEROCONF="yes"
vi /etc/resolv.conf
# Generated by NetworkManager
nameserver 8.8.8.8
nameserver 100.100.2.136
nameserver 100.100.2.138
Centos7中使用阿里云的yum源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
#curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
sudo yum clean all #清理所有缓存
sudo yum makecache # 生成新的缓存
三、RPM
RPM早期被称为RedHat Package Manager,但由于目前RPM非常流行,且已经成为Linux工业标准。所以RPM现在又被称为RPM is Package Manager。 RPM管理支持事务机制。增强了程序安装卸载的管理。 RPM的功能:打包、安装、查询、升级、卸载、校验、数据库管理
RPM的缺点
由于Linux中的程序大多是小程序。程序与程序之间存在非常复杂的依赖关系。RPM无法解决软件包的依赖关系
RPM包
用RPM工具可以将二进制程序进行打包,包被称为RPM包。RPM包并不是跨平台的
- RedHat的RPM包与SUSE的RPM包不能混用
- 实际上RedHat的安装,初始软件也都是使用RPM包进行安装的
源程序的命名规范**:name-version.tar.{gz|bz2|xz}
版本号:major.minor.release
例: bash-4.3.1.tar.xz
RPM包的命名规范:name-version-release.os.arch.rpm
name: 程序名称。
version: 程序版本号。
release(发行号):用于标识RPM包本身的发行号,与源程序的release号无关。
os: 即说明RPM包支持的操作系统版本。如el6(即rhel6)、centos6、el5、suse11。
arch: 主机平台。如i686、x86_64、amd64、ppc(power-pc)、noarch(即不依赖平台)
例:bash-4.3.2-5.el6.x86_64.rpm
RPM分包
在把二进制文件打包时,将主要功能打入主包。将辅助功能打入分包。分包在需要的情况下安装,若不需要就可以不安装
- 主包:核心包
- 分包:又称为支包
获取需要的RPM包互联网中RPM常用站点
http://mirrors.sohu.com
http://rpmfind.net
http://rpm.pbone.net/
epel
epel是为RedHat提供扩展的RPM包。这些包是Linux安装盘中没有的。该项目目前由Fedora维护
例:使用网易镜像站查看epel
点击进入可以看到不同RedHat版本的目录。选定版本,在目录中去寻找需要的RPM。
注意:优先使用Linux光盘中的包。其次考虑epel中的包。尽量不要使用来路不明的RPM包
RPM包的验正机制
RPM可以验证来源的合法性、软件包的完整性
RPM命令的使用
选项 | 说明 |
---|---|
RPM常用 | |
-i , —install | 表示安装 |
-h , —hash | 以”#”号显示安装进度 |
-q , —query | 查询指定包名 |
-v , -vv , -vvv | 表示详细信息 |
-e | 卸载指定包名 |
-U | 升级软件,若未软件尚未安装,则安装软件 |
-F | 升级软件 |
-V | 对RPM包进行验证 |
—nodeps | 忽略依赖关系 |
—force | 忽略软件包及文件的冲突 |
—test | 仅作测试,不真正执行,可用于测试安装,测试卸载 |
—replacepkgs | 重新安装。替换原有的安装 |
—initdb | 新建RPM的数据库 |
—rebuilddb | 重建RPM的数据库 |
—percent | 以百分比的形式输出安装的进度 |
RPM包的查询 | |
rpm -q | 查询某一个RPM包是否已安装 |
rpm -qi | 查询某一个RPM包的详细信息 |
rpm -ql | 列出某RPM包中所包含的文件 |
rpm -qf | 查询某文件是哪个RPM包生成的 |
rpm -qa | 列出当前系统所有已安装的包 |
安装RPM包
rpm -i <rpm包>
rpm -ivh <rpm包> -ivh 显示详细的安装进度信息
卸载RPM包
rpm -e <包名>_
安装或卸载时,可能出现如下类似警告信息: warning:/etc/sysconfig/named created as /etc/sysconfig/named.rpmnew 该警告信息表示:rpm的配置文件被另存为了一份文件
查询RPM相关信息
结合-q选项,RPM提供了许多种查询信息的方式
命令格式:rpm -q 包名
命令格式:rpm --query 包名
查询所有已经安装包:rpm -qa
配合grep的使用:rpm -qa | grep 'zip'
查询包的摘要信息:rpm -qi 包名
查询包安装生成的文件清单:rpm -ql 包名
查询某文件是由哪个rpm包安装生成的:rpm -qf </PATH/TO/RPM_FILE>
查询包安装生成的配置文件:rpm -qc 包名
查询包安装生成的帮助文档:rpm -qd 包名
查询包相关的脚本:rpm -q --scripts 包名
对未安装的RPM包查询信息,使用"-p",可以与其他查询相关的其他选项组合使用。
命令格式:rpm -qpi </PATH/TO/RPM_FILE>
查询包相关的脚本
rpm -q —scripts <rpm包>
RPM包的脚本有四个:
preinstall:安装前脚本
postinstall:安装后脚本
preuninstall:卸载前脚本
postuninstall:卸载后脚本
升级软件
rpm -Uvh <rpm包>
rpm -Fvh <rpm包>
校验RPM包
rpm -V <rpm包>
对已经安装的软件,进行将要。若无输出,则表示已安装的软件没有被修改。若软件被修改,则会输出信关信息。具体请查看RPM相关手册
RPM的数据库
数据库文件位于:cd /var/lib/rpm
若库损坏,很多RPM的查询将无法使用,对损坏的数据库,可以进行数据库重建:
- rpm —initdb #新建数据库
- rpm —rebuilddb #重建数据库
注意:重建数据库时间会比较长
源码格式的RPM包
SPRM即源码格式的RPM包。一般后缀名为”.src.rpm”。其中包含了源码与spec文件。rpm通过spec文件进行打包