rpm与yum的初步学习
我们在使用linux系统时需要安装和卸载软件,我们这节就先来看一下rpm和yum的初步简单实用。
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/)
了解安装方式和软件包组成之后我们用什么来安装和卸载软件呢? 这里我们就需要用到软件包管理器来实现,要知道在没有软件包管理器之前,安装程序,卸载程序是非常繁杂的。
软件包管理工具的特性:
文件清单
文件放置路径
提供的功能说明
依赖关系
软件包管理器内部有一个数据库,其中记载着程序的基本信息,校验信息,程序路径信息等。
软件包管理器:
debian:deb文件, dpkg包管理器
redhat: rpm文件, rpm包管理器
rpm: Redhat Package Manager
RPM Package Manager
RPM
RPM早期被称为RedHat Package Manager,但由于目前RPM非常流行,且已经成为Linux工业标准。所以RPM现在又被称为RPM is Package Manager。RPM管理支持事务机制。增强了程序安装卸载的管理。RPM的功能:打包、安装、查询、升级、卸载、校验、数据库管理。
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分包:
包:分类和拆包
Application-VERSION-ARCH.rpm: 主包
Application-devel-VERSION-ARCH.rpm 开发子包
Application-utils-VERSION-ARHC.rpm 其它子包
Application-libs-VERSION-ARHC.rpm 其它子包
这里需要注意的是:包之间可能存在依赖关系,甚至循环依赖。
解决依赖包管理工具:
yum:rpm包管理器的前端工具
apt-get:deb包管理器前端工具
zypper: suse上的rpm前端管理工具
dnf: Fedora 18+ rpm包管理器前端管理工具
这里我们稍后会简单介绍yum的使用,先来把RPM讲完。
上面我们说过的包的组成有二进制程序、库文件、配置文件和帮助文档,我们说说库文件。
库文件:
查看二进制程序所依赖的库文件:
ldd /PATH/TO/BINARY_FILE
示例:
[root@centos6 Packages]# ldd /bin/ls linux-vdso.so.1 => (0x00007ffcfbd95000) libselinux.so.1 => /lib64/libselinux.so.1 (0x000000359f400000) librt.so.1 => /lib64/librt.so.1 (0x000000359e400000) libcap.so.2 => /lib64/libcap.so.2 (0x00000035a4800000) libacl.so.1 => /lib64/libacl.so.1 (0x00000035a8800000) libc.so.6 => /lib64/libc.so.6 (0x000000359dc00000) libdl.so.2 => /lib64/libdl.so.2 (0x000000359d800000) /lib64/ld-linux-x86-64.so.2 (0x000000359d400000) libpthread.so.0 => /lib64/libpthread.so.0 (0x000000359e000000) libattr.so.1 => /lib64/libattr.so.1 (0x00000035a8400000)
管理及查看本机装载的库文件:
ldconfig
/sbin/ldconfig -p: 显示本机已经缓存的所有可用库文件名及文件路径映射关系
配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
缓存文件:/etc/ld.so.cache
示例:
[root@centos7 Packages]# /sbin/ldconfig -p 922 libs found in cache `/etc/ld.so.cache' p11-kit-trust.so (libc6,x86-64) => /lib64/p11-kit-trust.so libzapojit-0.0.so.0 (libc6,x86-64) => /lib64/libzapojit-0.0.so.0 libz.so.1 (libc6,x86-64) => /lib64/libz.so.1 libyelp.so.0 (libc6,x86-64) => /lib64/libyelp.so.0 libyajl.so.2 (libc6,x86-64) => /lib64/libyajl.so.2 ...
程序包管理器:
功能:将编译好的应用程序的各组成文件打包一个或几个 程序包文件,从而方便快捷地实现程序包的安装、卸载、查询、 升级和校验等管理操作
1、包文件组成(每个包独有)RPM包内的文件 RPM的元数据,如名称,版本,依赖性,描述等 安装或卸载时运行的脚本
2、数据库(公共) 程序包名称及版本 依赖关系 功能说明 包安装后生成的各文件路径及校验码信息
获取程序包的途径:
(1) 系统发版的光盘或官方的服务器;
CentOS镜像:
https://www.centos.org/download/
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com
(2) 项目官方站点
(3) 第三方组织
Fedora-EPEL
搜索引擎:
http://pkgs.org
http://rpmfind.net
http://rpm.pbone.net
https://sourceforge.net
(4) 自己制作
rpm包管理:
CentOS系统上使用rpm命令管理程序包:
安装、卸载、升级、查询、校验、数据库维护
安装:-i
rpm {-i|–install} [install-options] PACKAGE_FILE …
[install-options]:
-v:详细信息
-vv:更详细信息
-h:输出进度条 (hash marks)每个#代表2%
–test:测试安装,检查并报告以来关系及冲突消息
–nodeps:忽略依赖关系
–justdb:只升级数据库
–relpacepkgs:重新安装
-F:升级
rpm -Fvh PACKAGE FILE
-U:升级或安装
rpm -Uvh PACKAGE FILE
–oldpackage:降级
–force:强制升级
-e:卸载
–allmatches:卸载所有匹配指定名称的程序包的个版本
–nodeps:忽略依赖关系
–test:测试卸载
-q:查询
rpm {-q|–query} [select-options] [query-options]
[select-options]:
PACKAGE——NAME:查询指定程序包是否已经安装,及其版本
-a –all:查询已安装的所有程序包
-f FILE:查询指定的文件由哪个程序包安装生成
[root@centos7 Packages]# rpm -qf /usr/sbin/httpd httpd-2.4.6-40.el7.centos.x86_64
–whatprovides CAPBILITY:查询指定的CAPBILITY由哪个程序包提供
–whatrequires CAPBILITY:查询指定的CAPBILITY被哪个包依赖
[query-options]:
–changelog:查询rpm包的changelog
-l –list:安装程序包生成了多少个文件
rpm -ql 包名
[root@centos7 Packages]# rpm -ql httpd /etc/httpd /etc/httpd/conf /etc/httpd/conf.d /etc/httpd/conf.d/README ... [root@centos7 Packages]# rpm -ql httpd | wc -l 496
-i –info:查询程序包information(版本号,大小等)
rpm -qi 包名
[root@centos7 Packages]# rpm -qi httpd Name : httpd Version : 2.4.6 Release : 40.el7.centos Architecture: x86_64 Install Date: Sun 21 Aug 2016 11:17:05 PM EDT Group : System Environment/Daemons Size : 9806197 License : ASL 2.0 Signature : RSA/SHA256, Wed 25 Nov 2015 09:41:23 AM EST, Key ID 24c6a8a7f4a80eb5 Source RPM : httpd-2.4.6-40.el7.centos.src.rpm Build Date : Thu 19 Nov 2015 04:45:11 PM EST Build Host : worker1.bsys.centos.org Relocations : (not relocatable) Packager : CentOS BuildSystem <http://bugs.centos.org> Vendor : CentOS URL : http://httpd.apache.org/ Summary : Apache HTTP Server Description : The Apache HTTP Server is a powerful, efficient, and extensible web server.
-c –configfiles:程序包配置文件
-d:查询指定的程序包提供的文档
–provides:列出指定的程序包所提供的CAPBILITY
-R –requires:查询指定程序包依赖关系
–scripts:查询程序包自带的脚本
[root@centos7 Packages]# rpm -q --scripts httpd preinstall scriptlet (using /bin/sh): # Add the "apache" user /usr/sbin/useradd -c "Apache" -u 48 \ -s /sbin/nologin -r -d /usr/share/httpd apache 2> /dev/null || : postinstall scriptlet (using /bin/sh): if [ $1 -eq 1 ] ; then # Initial installation /usr/bin/systemctl preset httpd.service htcacheclean.service >/dev/null 2>&1 || : fi preuninstall scriptlet (using /bin/sh): if [ $1 -eq 0 ] ; then # Package removal, not upgrade /usr/bin/systemctl --no-reload disable httpd.service htcacheclean.service > /dev/null 2>&1 || : /usr/bin/systemctl stop httpd.service htcacheclean.service > /dev/null 2>&1 || : fi postuninstall scriptlet (using /bin/sh): /usr/bin/systemctl daemon-reload >/dev/null 2>&1 || : # Trigger for conversion from SysV, per guidelines at: # https://fedoraproject.org/wiki/Packaging:ScriptletSnippets#Systemd posttrans scriptlet (using /bin/sh): test -f /etc/sysconfig/httpd-disable-posttrans || \ /bin/systemctl try-restart httpd.service htcacheclean.service >/dev/null 2>&1 || :
rpm包自带脚本:
自带的脚本分为4类:
preinstall:安装之前运行的
postinstall:安装完成之后运行的
preuninstall:卸载真正开始执行之前运行
postuninstall:卸载过程执行完成之后执行
安装程序包时加上下面的参数命令:
–noscrips : 不执行脚本
–nosidnature:不检查包签名信息,不检查来源合法性
–nodigest: 不检查程序包完整性
包校验:-V
rpm {-V|–verify} [select-options] [verify-options]
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
包来源合法性验证和完整性验证:
来源合法性验证:RSA
数字签名
完整性验正:SHA256
rpm -K|checksig rpmfile 检查包的完整性和签名
导入所需要公钥:
rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
示例:
[root@centos7 Packages]# rpm --import /run/media/root/CentOS\ 7\ x86_64/RPM-GPG-KEY-CentOS-7 [root@centos7 Packages]# rpm -ivh zsh-5.0.2-14.el7.x86_64.rpm Preparing... ################################# [100%] Updating / installing... 1:zsh-5.0.2-14.el7 ################################# [100%] [root@centos7 Packages]# rpm -K zsh-5.0.2-14.el7.x86_64.rpm zsh-5.0.2-14.el7.x86_64.rpm: rsa sha1 (md5) pgp md5 OK [root@centos7 rpm-gpg]# ll total 12 -rw-r--r--. 1 root root 1690 Dec 9 2015 RPM-GPG-KEY-CentOS-7 -rw-r--r--. 1 root root 1004 Dec 9 2015 RPM-GPG-KEY-CentOS-Debug-7 -rw-r--r--. 1 root root 1690 Dec 9 2015 RPM-GPG-KEY-CentOS-Testing-7
手动验证:rpm -K PACKAGE_FILE
数据库重建:
[root@centos7 rpm]# ls
Basenames __db.001 __db.003 Group Name Packages Requirename Sigmd5
Conflictname __db.002 Dirnames Installtid Obsoletename Providename Sha1header Triggername
[root@centos7 rpm]# pwd
/var/lib/rpm
rpm数据库路径
查询操作:通过此处的数据库进行;
rpm {–initdb|–rebuilddb}
–initdb:事先无任何数据库时可创建新的;有时不执行任何操作
–rebuilddb:重新构建,通过读取当前系统上的所有已安装的程序包进行重新构建;
yum
YUM被称为 Yellow dog Updater, Modified,是一个在Shell前端软件包管理器。YUM客户端基于RPM包进行管理,可以通过HTTP服务器下载、FTP服务器下载、本地软件池的等方式获得软件包,可以从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系。YUM在安装RPM时,会从服务器下载相应包,且缓存在本地。
yun repository:yum repo (yum仓库)
存储众多rpm包,以及相关的元数据文件(放置于目录下:repodata);
文件服务器:
ftp://
http://
nfs://
file:///
yum客户端:
[root@centos7 ~]# rpm -qc yum /etc/logrotate.d/yum /etc/yum.conf 主配置文件 /etc/yum/version-groups.conf /etc/yum.conf 为所有仓库提供公共配置 /etc/yum.repos.d/*.repo 为仓库的指向提供配置
仓库指向的定义:
配置文件的说明:
[main] #main仓库。[ ]中括号表示一个仓库的定义。其中是仓库的名称。
cachedir=/var/cache/yum/$basearch/$releasever #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
CentOS-Base.repo配置文件:
[repositoryID]
name=Some name for this repository
baseurl=url://path/to/repository/
enabled={1|0}
gpgcheck={1|0}
gpgkey=URL
enablegroups={1|0}
failovermethod={roundrobin|priority} 默认为:roundrobin意为随机挑选
cost= 默认为1000
对配置文件中的一些配置项作说明:
[ … ]:仓库的名称。不能重复。
enabled {1|0} 是否启用仓库,不写默认启用。
gpgcheck {1|0} 检查合法性
repo_gpgcheck{1|0} 是否检查仓库元数据
gpgkey=URL gpgkey:验证RPM包的密钥文件路径。该文件可以在远处服务器上,也可以在本地。
enablegroups {1|0} 是否允许在此仓库使用组批量管理程序包
baseurl:配置仓库的路径。用于指定一个url。可设置多个
baseurl=url://path/to/repository/
url://server2/path/to/repository/
url://server3/path/to/repository/
mirrorlist:指向一个镜像列表,里面有多个url。
cost:代价,其本质是仓库优先级的配置。
显示仓库列表:
repolist [all|enabled|disabled]
显示程序包:list
# yum list [all | glob_exp1] [glob_exp2] […]
# yum list {available|installed|updates} [glob_exp1]
yum list相关命令:
yum list all
最左边第一列:软件包名称.平台名称;中间列:软件版本号-release号;最右边一列:安装情况。
若显示@则表示该软件已经通过仓库安装;如@anaconda表示已经通过naconda仓库安装;install,则表示系统已经安装,未通过仓库安装。若无@或不是install,则表示尚未安装。如base,表示未安装,包位于base仓库中。updates,表示未安装,包位于updates仓库中。
yum list installed 显示已安装
yum list available 只显示没有安装,但可安装的包
yum list updates 查看所有可更新的包。
yum list extras 显示不属于任何仓库的,额外的包。
yum list obsoletes 显示被废弃的包
yum list recent 新添加进yum仓库的包
显示查询某个文件是由哪个软件包生成的
yum provides 文件
yum whatprovides 文件
[root@centos7 Packages]# yum whatprovides /etc/issue Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile centos-release-7-2.1511.el7.centos.2.10.x86_64 : CentOS Linux release file Repo : base Matched from: Filename : /etc/issue centos-release-7-2.1511.el7.centos.2.10.x86_64 : CentOS Linux release file Repo : @anaconda Matched from: Filename : /etc/issue
安装程序包:
install package1 [package2] […]
reinstall package1 [package2] […] (重新安装)
升级程序包:
update [package1] [package2] […]
[root@centos7 Packages]# yum update ftp-0.17-66.el7.x86_64.rpm Loaded plugins: fastestmirror, langpacks Examining ftp-0.17-66.el7.x86_64.rpm: ftp-0.17-66.el7.x86_64 ftp-0.17-66.el7.x86_64.rpm: does not update installed package. No packages marked for update
downgrade package1 [package2] […] (降级)
检查可用升级:
check-update
卸载程序包:
remove | erase package1 [package2] […]
查看程序包information:
info […]
示例:
[root@centos7 Packages]# yum info ftp Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile Installed Packages Name : ftp Arch : x86_64 Version : 0.17 Release : 66.el7 Size : 96 k Repo : installed From repo : base Summary : The standard UNIX FTP (File Transfer Protocol) client URL : ftp://ftp.linux.org.uk/pub/linux/Networking/netkit License : BSD with advertising Description : The ftp package provides the standard UNIX command-line FTP (File : Transfer Protocol) client. FTP is a widely used protocol for : transferring files over the Internet and for archiving files. : : If your system is on a network, you should install ftp in order to do : file transfers.
搜索:
search string1 [string2] […] 以指定的关键字搜索程序包名及summary信息
[root@centos7 Packages]# yum search ftp Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile ============================================================= N/S matched: ftp ===================== ftp.x86_64 : The standard UNIX FTP (File Transfer Protocol) client lftp-scripts.noarch : Scripts for lftp syslinux-tftpboot.x86_64 : SYSLINUX modules in /var/lib/tftpboot, available for network booting tftp.x86_64 : The client for the Trivial File Transfer Protocol (TFTP) tftp-server.x86_64 : The server for the Trivial File Transfer Protocol (TFTP) vsftpd.x86_64 : Very Secure Ftp Daemon vsftpd-sysvinit.x86_64 : SysV initscript for vsftpd daemon curl.x86_64 : A utility for getting files from remote servers (FTP, HTTP, and others) lftp.i686 : A sophisticated file transfer program lftp.x86_64 : A sophisticated file transfer program wget.x86_64 : A utility for retrieving files using the HTTP or FTP protocols Name and summary matches only, use "search all" for everything.
查看指定包所依赖的capabilities:
deplist package1 [package2] […]
查看yum事务历史:
history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
[root@centos7 Packages]# yum history Loaded plugins: fastestmirror, langpacks ID | Login user | Date and time | Action(s) | Altered ------------------------------------------------------------------------------- 3 | root <root> | 2016-08-21 23:17 | Install | 5 < 2 | root <root> | 2016-08-19 05:57 | Install | 1 > 1 | System <unset> | 2016-07-20 05:39 | Install | 1243 history list
yum的命令行选项:
–nogpgcheck:禁止进行gpg check
-y: 自动回答为“yes”
-q:静默模式
–disablerepo=repoidglob:临时禁用此处指定的repo
–enablerepo=repoidglob:临时启用此处指定的repo
–noplugins:禁用所有插件
rpm软件包之间的依赖性问题往往会很繁琐,尤其是软件由多个rpm包组成时。Yum(全称为 Yellow dog Updater, Modified)是Shell前端软件包管理器。基於RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。
原创文章,作者:zanghonglei,如若转载,请注明出处:http://www.178linux.com/38856