程序包管理是在电脑中自动安装、配制、卸载和升级软件包的工具组合,在各种系统软件和应用软件的安装管理中均有广泛应用。
在Linux发行版中,几乎每一个发行版都有自己的软件包管理系统。常见有: 管理deb软件包的dpkg以及它的前端apt(使用于Debian、Ubuntu)。 rpm以及它的前端yum(使用于Fedora)、前端ZYpp(使用于openSUSE)、 前端urpmi(使用于Mandriva Linux、Mageia)等。使用软件包管理系统将大大简化在Linux发行版中安装软件的过程。其他软件包管理系统有ArchLinux中使用的Pacman,Gentoo使用的基于源代码的Portage和Mac系统下的Homebrew等。
一、rpm
1.1、rpm程序包的命名规则
- Name:软件包名
- Major:主版本号,如软件的框架做重大更改后才会修改
- Minor:次版本号,如软件添加了某些新功能后才会修改
- 第一个Release:发行号,如软件修复了某些bug后才会修改
- 第二个Release:修订号,如源码未做过修改,发行商对发行的RPM包进行再次发行后才会修改
- Arch:硬件平台架构
1.2 rpm程序包管理的主要功能是安装,升级,卸载,查询,验证等。
1.2.1 通用选项
- -v:显示安装的详细信息
- -vv:显示安装时的更详细信息
- -h:通过50个#号来显示安装进度
1.2.2 常用查询选项
rpm {-q|--query} [select-options] [query-options]
- [select-options]
- PACKAGE_NAME:包名
- -a:查询已安装的包
- -p PACKAGE_FILE:对未安装包的详细信息查询,与[query-options]配合使用
- -f或--file FILE:查询某文件有哪个包生成
- [query-options]
- --changelog:查询RPM包的变更信息
- -c, --configfiles:显示包的配置文件
- -d, --docfiles:显示包的帮助文件
- -i, --info:显示包的信息,包含包名,版本和描述
- -l, --list:显示包中的所有文件
- --provides:列出包提供的功能
- -R或--requires:列出这个包所依赖的功能
- --scripts:列出包安装和卸载时运行的特定脚本
- preinstall: 安装前执行的脚本
- postinstall: 安装后执行的脚本
- preuninstall: 卸载前执行的脚本
- postuninstall: 卸载后执行的脚本
查询包生成的配置文件
- [[email protected]_6_N1 ~]# rpm -ql cronolog
- /usr/bin/cronosplit
- /usr/sbin/cronolog
- /usr/share/doc/cronolog-1.6.2
- /usr/share/doc/cronolog-1.6.2/AUTHORS
- /usr/share/doc/cronolog-1.6.2/COPYING
- /usr/share/doc/cronolog-1.6.2/ChangeLog
- /usr/share/doc/cronolog-1.6.2/NEWS
- /usr/share/doc/cronolog-1.6.2/README
- /usr/share/doc/cronolog-1.6.2/TODO
- /usr/share/info/cronolog.info.gz
- /usr/share/man/man1/cronolog.1m.gz
- /usr/share/man/man1/cronosplit.1m.gz
查询某包是否安装
- [[email protected] Packages]# rpm -q zsh
- package zsh is not installed
查询已安装的所有包
- [[email protected] Packages]# rpm -qa
查询某文件由哪个包安装生成的
- [[email protected] Packages]# rpm -qf /etc/fstab
- setup-2.8.14-20.el6_4.1.noarch
查询未安装包的相关信息与与[query-options]配合使用
- [[email protected] Packages]# rpm -qpi zsh-4.3.10-7.el6.x86_64.rpm
- [[email protected] Packages]# rpm -qpc zsh-4.3.10-7.el6.x86_64.rpm
查询RPM包的变更信息
- [[email protected] Packages]# rpm -q zsh --changelog
- * Mon Aug 05 2013 James Antill <james.antill@redhat.com> - 4.3.10-7
- - Change {NAME:OFFSET:LENGTH} substitution feature to ignore KSH_ARRAYS option.
- - Fixup tests.
- - Resolves: rhbz#820530
查询所提供的功能
- [[email protected] Packages]# rpm -q xz --provides
- xz = 4.999.9-0.5.beta.20091007git.el6
- xz(x86-64) = 4.999.9-0.5.beta.20091007git.el6
查询所依赖的功能
- [[email protected] Packages]# rpm -q xz --requires
- /bin/sh
- libc.so.6()(64bit)
- libc.so.6(GLIBC_2.2.5)(64bit)
- libc.so.6(GLIBC_2.3)(64bit)
- libc.so.6(GLIBC_2.3.4)(64bit)
- libc.so.6(GLIBC_2.4)(64bit)
- libc.so.6(GLIBC_2.6)(64bit)
- libc.so.6(GLIBC_2.7)(64bit)
- liblzma.so.0()(64bit)
- libpthread.so.0()(64bit)
- libpthread.so.0(GLIBC_2.2.5)(64bit)
- rpmlib(CompressedFileNames) <= 3.0.4-1
- rpmlib(FileDigests) <= 4.6.0-1
- rpmlib(PayloadFilesHavePrefix) <= 4.0-1
- rtld(GNU_HASH)
- xz-libs = 4.999.9-0.5.beta.20091007git.el6
- rpmlib(PayloadIsXz) <= 5.2-1
1.2.3 常用安装选项
rpm {-i|--install} [install-options] PACKAGE_FILE ...
- [install-options]
- --test 测试安装
- --nodeps 忽略依赖关系
- --replacepkgs 重新安装RPM包
- --prefix NEWPATH 指定安装目录
软件包的安装
- [[email protected] Packages]# rpm -ivh zsh-4.3.10-7.el6.x86_64.rpm
- warning: zsh-4.3.10-7.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
- Preparing... ########################################### [100%]
- 1:zsh ########################################### [100%]
软包重新安装
- [[email protected] Packages]# rpm -ivh zsh-4.3.10-7.el6.x86_64.rpm --replacepkgs
- Preparing... ########################################### [100%]
- 1:zsh ########################################### [100%]
测试安装
- [[email protected] Packages]# rpm -ivh zsh-4.3.10-7.el6.x86_64.rpm --test
- Preparing... ########################################### [100%]
- [[email protected] Packages]# rpm -q zsh
- package zsh is not installed
忽略依赖关系
- [[email protected] Packages]# rpm -ivh gcc-4.4.7-11.el6.x86_64.rpm
- error: Failed dependencies:
- cloog-ppl >= 0.15 is needed by gcc-4.4.7-11.el6.x86_64
- cpp = 4.4.7-11.el6 is needed by gcc-4.4.7-11.el6.x86_64
- [[email protected] Packages]# rpm -ivh gcc-4.4.7-11.el6.x86_64.rpm --nodeps
- Preparing... ########################################### [100%]
- 1:gcc ########################################### [100%]
1.2.4 常用卸载选项
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...
卸载程序,如卸载程序的配置文件被修改过,卸载是被更改的配置文件将被重命名为***.rpmsave
- [[email protected] Packages]# rpm -e zsh
- warning: /etc/zlogin saved as /etc/zlogin.rpmsave
1.2.5 常用升级选项
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
- [install-options]
- --oldpackage:降级安装
- --force: 忽略冲突,强制执行过程
升级安装,U 选项:如果有较旧版本程序包,则升级安装;否则,则执行安装操作
- [[email protected] Packages]# rpm -Uvh zsh-4.3.10-7.el6.x86_64.rpm
- Preparing... ########################################### [100%]
- 1:zsh ########################################### [100%]
- [[email protected] Packages]# rpm -q zsh
- zsh-4.3.10-7.el6.x86_64
升级安装, F 选项:如果有较旧版本程序包,则升级安装;否则,中止
- [[email protected] Packages]# rpm -q bash
- bash-4.1.2-15.el6_4.x86_64
- [[email protected] Packages]# rpm -Fvh bash-4.1.2-29.el6.x86_64.rpm
- Preparing... ########################################### [100%]
- 1:bash ########################################### [100%]
- [[email protected] Packages]# rpm -q bash
- bash-4.1.2-29.el6.x86_64
- [[email protected] Packages]# rpm -Fvh zsh-4.3.10-7.el6.x86_64.rpm
- [[email protected] Packages]# rpm -q zsh
- package zsh is not installed
1.2.6 常用校验选项
rpm {-V|--verify} [select-options] [verify-options]
- [select-options]
- PACKAGE_NAME:包名
- -a:查询已安装的包
- -p PACKAGE_FILE:对未安装包的详细信息查询,与[query-options]配合使用
- -f或--file FILE:查询某文件有哪个包生成
- [verify-options]
- --nosignature: 不检查来源合法性
- --nodigest: 不检查完整性
对程序进行校验,/etc/zlogin更改后,校验信息如下
- [[email protected] Packages]# vim /etc/zlogin
- [[email protected] Packages]# rpm -V zsh
- S.5....T. c /etc/zlogin
开始的9个选项分别表示如下:
- 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
后面的c选项位置有如下选项,被更改的文件类型:
- c %config configuration file.
- d %doc documentation file.
- g %ghost file (i.e. the file contents are not included in the package payload).
- l %license license file.
- r %readme readme file.
1.3 其他相关
为了验证程序包来源和合法性和完成性,安装的时候需要对程序包进行校验。密钥存放位置/etc/pki/rpm-gpg/
当有warning: zsh-4.3.10-7.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY 提示时,可以导入光盘中的公钥或到官网下在相关公钥。
1.3.1 导入PUBKEY rpm --import PUBKEY ...
- [[email protected] Packages]# rpm -ivh zsh-4.3.10-7.el6.x86_64.rpm
- warning: zsh-4.3.10-7.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
- Preparing... ########################################### [100%]
- 1:zsh ########################################### [100%]
- [[email protected] cdrom]# rpm --import RPM-GPG-KEY-CentOS-6
- [[email protected] Packages]# rpm -ivh zsh-4.3.10-7.el6.x86_64.rpm --replacepkgs
- Preparing... ########################################### [100%]
- 1:zsh ########################################### [100%]
1.3.2 PUBKEY的查询与删除
- [[email protected] base]# rpm -q gpg-pubkey
- package gpg-pubkey is not installed
- [[email protected] base]# rpm --import /media/cdrom/RPM-GPG-KEY-CentOS-6
- [[email protected] base]# rpm -q gpg-pubkey
- gpg-pubkey-c105b9de-4e0fd3a3
- [[email protected] base]# rpm -q gpg-pubkey
- gpg-pubkey-c105b9de-4e0fd3a3
- [[email protected] base]# rpm -e gpg-pubkey-c105b9de-4e0fd3a3
- [[email protected] base]# rpm -q gpg-pubkey
- package gpg-pubkey is not installed
1.3.3 RPM数据库
为了能有效管理系统上的软件,RPM有一个数据库,存放在/var/lib/rpm文件夹下。RPM文件尝尝会安装,移除,升级等操作,某些动作可能导致RPM数据损坏,可以通过以下来初始化和重建
[[email protected] ~]# rpm --initdb
[[email protected] ~]# rpm --rebuilddb
二、yum
YUM全名Yellow dog Updater,是一个基于RPM包管理的字符前端软件包管理器。能够从指定的服务器自动下载RPM包并且安装,可以处理依赖性关系(安装A-->B,B-->C,B和C就需要一起安装),并且一次安装所有依赖的软件包,无需繁琐地一次次下载、安装。
2.1 一个程序有这么多的rpm包,为什么不打包在一个中呢?
- 为了重复利用既有的软件功能,因此很多软件都会以函数库的方式释放出部分功能,以方便其他软件的调用
- 节省磁盘空间,不必为了调用相应的库而把整个软件都安装上
- 安全,功能越多,BUG的可能性就越大
2.2 yum的相关命令
选项
- --enablerepo= 启用repo
- --disablerepo= 禁用repo 注意:优先级高于/etc/yum.repos.d/*.repo配置文件中定义的属性;
- -y: 自动回答为yes
- --nogpgcheck
列出所有仓库,程序包,包组
yum repolist 列出所有仓库
yum list all 列出所有的软件(包含未安装仓库上可用的)
yum list installed 列出所有已安装的软件
yum list available 列出仓库上的软件
yum grouplist 列出包组
安装程序包
yum install PACKAGE_NAME ... 安装程序包
yum install PACKAGE-VERSION 如果要安装指定的版本的程序
yum reinstall PACKAGE_NAME 重装指定的程序包
升级程序包
yum update PACKAGE_NAME 升级程序包
yum update PACKAGE-VERSION 如果有多个版本的升级包可用,且仅期望升级到指定版本:
yum downgrade PACKAGE_NAME 降级
yum check-update 检查可用升级
卸载程序包
yum remove|erase PACKAGE_NAME 卸载程序包依赖于指定程序包的其它包,会被一并卸载
查询程序包
yum list 列出所有包
yum info PACKAGE_NAME 显示包的信息
yum search KEYWORD 根据关键字模糊查询包名或包的sumary信息包含此KEYWORD的相关列表;
yum provides|whatprovides /path/to/somefile 查询包所提供的功能
包组管理
yum grouplist 显示所有包组
yum groupinfo "GROUP_NAME" 显示某包组的相关信息:
yum groupinstall "GROUP_NAME" 安装包组
yum install @GROUP_NAME
yum groupremove "GROUP_NAME" 卸载包组
yum remove @"GROUP_NAME"
yum groupupdate "GROUP_NAME" 升级包组:
安装本地rpm包
yum localinstall /path/to/rpm_package_file ...
yum install /path/to/rpm_package_file ... CentOS7上使用
yum导入PUBKEY,在/etc/yum.repos.d下新建sohu.repo
[Sohu]
name=SohuRepo
baseurl=http://mirrors.sohu.com/centos/$releasever/os/$basearch
gpgcheck=1
gpgkey=http://mirrors.sohu.com/centos/6/os/x86_64/RPM-GPG-KEY-CentOS-6
cost=900
Downloading Packages:
zsh-4.3.10-7.el6.x86_64.rpm
warning: rpmts_HdrFromFdno: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
Retrieving key from http://mirrors.sohu.com/centos/6/os/x86_64/RPM-GPG-KEY-CentO
Importing GPG key 0xC105B9DE:
Userid: "CentOS-6 Key (CentOS 6 Official Signing Key) <centos-6-key@centos.org>
From : http://mirrors.sohu.com/centos/6/os/x86_64/RPM-GPG-KEY-CentOS-6
Is this ok [y/N]: n
三、yum 客户端相关配置
主配置文件/etc/yum.conf
- [main]
- cachedir=/var/cache/yum/$basearch/$releasever 缓存存放路径,如安装包
- keepcache=0 安装成功后是否保存缓存和包,默认1保存,0不保存
- debuglevel=2 调试级别0-10,默认为2
- logfile=/var/log/yum.log 日志目录
- exactarch=1 默认为1,不会更新i686的包到i386的包
- obsoletes=1
- gpgcheck=1 是否检查GPG签名
- plugins=1 是否支持插件,0关闭,1启用
- installonly_limit=5
- bugtracker_url=http://bugs.centos.org/set_project.php?project_id=19&ref=http://bugs.centos.org/bug_report_page.php?category=yum
- distroverpkg=centos-release
接下来就是定义软件仓库位置的配置文件,目录为/etc/yum.repos.d,可以有1个或多个,文件由以下主要参数构成
- [repository_ID]:在所有配置文件中必须唯一
- name:一个通俗易懂的名字
- baseurl:指向YUM仓库的链接
- $releasever This is replaced with the package‘s version, as listed in distroverpkg. This defaults to the version of the redhat-release package.
- $arch This is replaced with your system‘s architecture, as listed by os.uname() in Python.
- $basearch This is replaced with your base architecture. For example, if $arch=i686 then $basearch=i386.
- $YUM0-9 This is replaced with the value of the shell environment variable of the same name. If the shell environment variable does not exist, then the configuration file variable will not be replaced.
- 为让不同的系统获取相应版本的软件,可以通过一下替换来实现:
- http://mirrors.sohu.com/centos/6/os/x86_64/
- http://mirrors.sohu.com/centos/$releasever/os/$basearch
- enabled:是否启用YUM仓库,0启用,1禁用
- gpgcheck:GPG签名检查,1启用,0不检查 http://mirrors.sohu.com/centos/6/os/x86_64/
- gpgkey:Public Key存放位置
- cost:开销默认为1000,越小优先级越高