包管理简介
Linux 上的应用程序一般是以源码形式或者编译后的二进制格式提供给用户使用。对于以源码形式提供的应用程序,用户需要借助于编译器,自行编译成二进制格式才能使用。而即便是编译后的二进制包,用户也需要根据安装文档将应用程序的二进制程序、库文件、配置文件和帮助文件等文件复制到指定路径下。这个过程十分繁琐。面对这个恼人的问题,Linux 业界人士怎么能忍得下去,千呼万唤始出来,终于诞生了程序包管理器。
有了程序包管理器之后,应用程序提供者可将应用程序的二进制程序、库文件。配置文件、帮助文件等以特定形式组织成一个或有限几个“包”文件(不同程序包管理器的组织形式不同)。用户可下载打包好的程序包文件,然后通过程序包管理器的命令实现应用程序的安装,而不再需要手动的复制程序文件到指定的路径下,这些工作都交由程序包管理器来完成了。
最开始研发出的程序包管理器是 Debian 的dpt,全名是 Debian Package Tool,后更名为 dpkg,其程序包的后缀是.deb。后来 RedHat 也研发出了程序包管理器 RedHat Package Manager,简称rpm,其程序包后缀为.rpm。在RedHat的推动下,rpm成为了Linux程序包管理器中的事实上的标准。RedHat对强大后的rpm进行了重新的解释,rpm的全称变为“rpm is Package Manager”。SUSE使用的程序包管理器也是rpm,但它的程序包与RedHat的是不兼容的。此外,Gentoo也有自己的程序包管理器ports。
包基础知识
包名
一个 rpm 包的名称分为包全名和包名,包全名如 httpd-2.2.15-39.el6.centos.x86_64.rpm,包全名中各部分的意义如下:
httpd 包名
2.2.15 版本号,版本号格式[ 主版本号.[ 次版本号.[ 修正号 ] ] ]
39 软件发布次数
el6.centos 适合的操作系统平台以及适合的操作系统版本
x86_64 适合的硬件平台,硬件平台根据cpu来决定,有i386、i586、i686、x86_64、noarch或者省略,noarch或省略表示不区分硬件平台
rpm 软件包后缀扩展名
使用 rpm 工具管理包时,如果要操作未安装的包,则使用包全名,如安装包,查看未安装包的信息等;如果要操作已安装的 rp m包,则只需要给定其包名即可,如查询已装包生成了哪些文件,查看已装包的信息等。
而对于 yum 工具来说,只需给定其包名即可,若有需要,再指定版本号,如明确指明要安装1.6.10版本的 tree 工具,如:
yum install tree-1.6.10
主包和子包
对于一个程序而言,在制作rpm包时,很多时候都将其按功能分割成多个子包,如客户端程序包、服务端程序包等。
以 mysql为例,它分有以下几个包:
* mysql-server.x86_64
* mysql.x86_64
* mysql-bench.x86_64
* mysql-libs.x86_64
* mysql-devel.x86_64
其中 mysql-server.x86_64 是提供服务的主包,mysql.x86_64 是客户端主包,mysql-bench 是用于对 MySQL 进行压力测试的包,mysql-libs 和 mysql-devel 分别是库文件包和头文件包。后两者是提供给其他需要联合 mysql 的程序使用的,仅就实现 mysql 服务而言,只需安装 mysql-serve r即可。
而源码编译安装的包会包含所有功能包,也就是说编译安装一个程序后,它的客户端工具、服务提供程序、库文件、头文件等等都已经安装了。
rpm 管理包工具安装、升级和卸载的功能都很少使用。对于安装来说,它需要人为解决包的依赖关系,这是极其令人恶心的事对于升级来说,基本上都会使用 yum 工具进行安装和升级,而卸载行为在 Linux上很少出现,大不了直接覆盖重装。所以我们这里重点关注 yum 管理包工具的使用。
yum 管理包
yum( Yellow dog Updater, Modified)是一个在 Fedora 和 RedHat 以及 SUSE 中的 Shell 前端软件包管理器。基於 RPM 包管理,能够从指定的服务器自动下载 RPM 包 并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。
/etc/yum.conf
/etc/yum.conf是yum的默认文件,里面配置的也是全局默认项。
[root@server2 ~]# cat /etc/yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasever # 缓存目录
keepcache=0 # 是否保留缓存,设置为1时,安装包时所下载的包将不会被删除
debuglevel=2 # 调试信息的级别
logfile=/var/log/yum.log # 日志文件位置
exactarch=1 # 设置为1将只会安装和系统架构完全匹配的包
obsoletes=1 # 是否允许更新旧的包
gpgcheck=1 # 是否要进行gpg check
plugins=1 # 是否允许使用yum插件
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 # 指定基准包,yum会根据这个包判断发行版本
yum 仓库配置
配置文件为 /etc/yum.conf 和 /etc/yum.repos.d/中的".repo"文件,其中 /etc/yum.conf配置的是仓库的默认项,一般配置yum源都是在 /etc/yum.repos.d/*.repo中配置。注意,该目录中任意repo文件都会被读取。
默认 /etc/yum.repos.d/下会有以下几个仓库文件,除了CentOS-Base.repo,其他的都可以删掉,基本没用。
[marklogzhu@VM_0_15_centos /]$ ls /etc/yum.repos.d/
CentOS-Base.repo CentOS-Epel.repo
repo文件的配置格式如下:
[root@xuexi yum.repos.d]# vim CentOS-Base.repo
[base] # 仓库ID,ID必须保证唯一性
name # 仓库名称,可随意命名
mirrorlist # 该地址下包含了仓库地址列表,包含一个或多个镜像站点,和baseurl使用一个就可以了
#baseurl # 仓库地址。网络上的地址则写网络地址,本地地址则写本地地址,格式为“file://”后接路径,如file:///mnt/cdrom
gpgcheck=1 # 指定是否需要签名,1表示需要,0表示不需要
gpgkey= # 签名文件的路径
enable # 该仓库是否生效,enable=1表示生效,enable=0表示不生效
cost= # 开销越高,优先级越低
【repo配置文件中可用的宏:】
$releasever:程序的版本,对Yum而言指的是redhat-relrase版本。只替换为主版本号,如Redhat6.5 则替换为6
$arch:系统架构
$basharch:系统基本架构,如i686,i586等的基本架构为i386
$YUM0-9:在系统定义的环境变量,可以在yum中使用
修改 yum 默认仓库
因为某些因素,访问国外的资源有时候很慢,我们这边配置成国内的仓库源,这里采用网易 yum 源。
- 备份 /etc/yum.repos.d/CentOS-Base.repo 文件
sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
- 下载对应版本 repo 文件, 放入 /etc/yum.repos.d/
- CentOS5 :http://mirrors.163.com/.help/CentOS5-Base-163.repo
- CentOS6 :http://mirrors.163.com/.help/CentOS6-Base-163.repo
- CentOS7 :http://mirrors.163.com/.help/CentOS7-Base-163.repo
sudo wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
sudo mv CentOS7-Base-163.repo etc/yum.repos.d/CentOS-Base.repo
- 生成缓存
yum clean all
yum makecache
yum 命令
语法
yum [options] [command] [package ...]
- options:可选,选项包括-h(帮助),-y(当安装过程提示选择全部为"yes"),-q(不显示安装的过程)等等。
- command:要进行的操作。
- package操作的对象。
常用命令
- 1.列出所有可更新的软件清单命令:yum check-update
- 2.更新所有软件命令:yum update
- 3.仅安装指定的软件命令:yum install <package_name>
- 4.仅更新指定的软件命令:yum update <package_name>
- 5.列出所有可安裝的软件清单命令:yum list
- 6.删除软件包命令:yum remove <package_name>
- 7.查找软件包 命令:yum search
- 8.清除缓存命令:
- yum clean packages: 清除缓存目录下的软件包
- yum clean headers: 清除缓存目录下的 headers
- yum clean oldheaders: 清除缓存目录下旧的 headers
- yum clean, yum clean all (= yum clean packages; yum clean oldheaders) :清除缓存目录下的软件包及旧的headers
实例
安装 vim
[marklogzhu@VM_0_15_centos /]$ sudo yum install vim
[sudo] password for marklogzhu:
Loaded plugins: fastestmirror, langpacks
epel | 3.2 kB 00:00:00
(1/2): epel/7/x86_64/updateinfo | 933 kB 00:00:00
(2/2): epel/7/x86_64/primary | 3.6 MB 00:00:01
Determining fastest mirrors
epel 12647/12647
Nothing to do