【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 配置文件:
image.png
CentOS自带的这些配置文件中,其实只有CentOS-Base.repo文件有效。按照需求,这些文件可以删除,或改名,或自己建立一个.repo的配置文件。实际使用中,可以参考CentOS-Base.repo的配置自定义.repo文件。

查看cat CentOS-Base.repo配置文件
image.png

对配置文件中的一些配置项作说明:

[ … ]:仓库的名称。不能重复。
name:对仓库的描述,该项必须有。
baseurl:配置仓库的路径。用于指定一个url。
mirrorlist:指向一个镜像列表,里面有多个url。
enabled:是否启用当前仓库。值为1或0,默认为1。
gpgcheck:是否需要gpg校验。值为1或0,默认为1。
gpgkey:验证RPM包的密钥文件路径。该文件可以在远处服务器上,也可以在本地。
cost:代价,其本质是仓库优先级的配置。值越低,表示访问的代价越低,也即优先使用。
注意:配置文件中的”=”号的前后不能有空格image.png

例:自己写一个repo配置文件

  1. [base]
  2. name=CentOS 6.4 x86_64
  3. baseurl=http://172.16.0.1/cobbler/ks_mirror/centos-6.4-x86_64/
  4. enabled=1
  5. 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://协议。

  1. [base]
  2. name=CentOS 6.4 x86_64
  3. #baseurl=http://mirrors.sohu.com/centos/6.4/os/x86_64/
  4. baseurl=file:///media/cdrom
  5. enabled=1
  6. 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路径。
yum rpm - 图4
说明:
$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源

  1. #查看Linux内核版本命令
  2. uname -a
  3. cat /proc/version
  4. #查看Linux系统版本的命令
  5. cat /etc/redhat-release
  6. lsb_release -a
  7. cat /etc/issue
  8. #配置解析
  9. vi /etc/sysconfig/network-scripts/ifcfg-eth0
  10. DEVICE="eth0"
  11. BOOTPROTO="dhcp"
  12. ONBOOT="yes"
  13. TYPE="Ethernet"
  14. NM_CONTROLLED="no"
  15. IPV6_AUTOCONF="yes"
  16. IPV6INIT="yes"
  17. NOZEROCONF="yes"
  18. vi /etc/resolv.conf
  19. # Generated by NetworkManager
  20. nameserver 8.8.8.8
  21. nameserver 100.100.2.136
  22. nameserver 100.100.2.138


Centos7中使用阿里云的yum源

  1. mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
  2. wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
  3. #curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
  4. sudo yum clean all #清理所有缓存
  5. 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分包

在把二进制文件打包时,将主要功能打入主包。将辅助功能打入分包。分包在需要的情况下安装,若不需要就可以不安装

epel

epel是为RedHat提供扩展的RPM包。这些包是Linux安装盘中没有的。该项目目前由Fedora维护
例:使用网易镜像站查看epel
image.png
点击进入可以看到不同RedHat版本的目录。选定版本,在目录中去寻找需要的RPM。
image.png

注意:优先使用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提供了许多种查询信息的方式

  1. 命令格式:rpm -q 包名
  2. 命令格式:rpm --query 包名
  3. 查询所有已经安装包:rpm -qa
  4. 配合grep的使用:rpm -qa | grep 'zip'
  5. 查询包的摘要信息:rpm -qi 包名
  6. 查询包安装生成的文件清单:rpm -ql 包名
  7. 查询某文件是由哪个rpm包安装生成的:rpm -qf </PATH/TO/RPM_FILE>
  8. 查询包安装生成的配置文件:rpm -qc 包名
  9. 查询包安装生成的帮助文档:rpm -qd 包名
  10. 查询包相关的脚本:rpm -q --scripts 包名
  11. 对未安装的RPM包查询信息,使用"-p",可以与其他查询相关的其他选项组合使用。
  12. 命令格式: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

yum rpm - 图7
若库损坏,很多RPM的查询将无法使用,对损坏的数据库,可以进行数据库重建:

  • rpm —initdb #新建数据库
  • rpm —rebuilddb #重建数据库

注意:重建数据库时间会比较长

源码格式的RPM包

SPRM即源码格式的RPM包。一般后缀名为”.src.rpm”。其中包含了源码与spec文件。rpm通过spec文件进行打包