程序包
linux的程序包主要分为两类;二进制可执行安装包和源代码程序文件包
二进制应用程序的组成部分: 二进制文件、库文件、配置文件、帮助文件 查看二进制程序所依赖的库文件: ldd /PATH/TO/BINARY_FILE 管理及查看本机装载的库文件: ldconfig /sbin/ldconfig -p: 显示本机已经缓存的所有可用库文件名及文件路径映射关系; 配置文件为:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf 缓存文件:/etc/ld.so.cache 程序包管理: 功能:将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷地实现程序包的安装、卸载、查询、升级和校验等管理操作; 1、程序的组成组成清单 (每个包独有) 文件清单 安装或卸载时运行的脚本 2、数据库(公共) 程序包名称及版本 依赖关系; 功能说明; 安装生成的各文件的文件路径及校验码信息; 管理程序包的方式: 使用包管理器:rpm 使用前端工具:yum, dnf 获取程序包的途径: (1) 系统发版的光盘或官方的服务器; CentOS镜像: 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 (4) 自己制作 建议:检查其合法性 来源合法性; 程序包的完整性;
程序包管理器
linux中在二进制可执行安装程序包安装上会涉及多个文件的操作, 操作过程就会比较复杂, 为简化该过程就使用程序安装包管理器来管理程序包的安装过程, 大大简化了程序包安装过程. Linux根据发行版本不同, 使用不同的程序包管理器实现对程序包的管理, 以下是一些发行版本的包管理器的前端工具
yum:rpm包管理器的前端工具; apt-get:deb包管理器前端工具; zypper: suse上的rpm前端管理工具; dnf: Fedora 22+ rpm包管理器前端管理工具;
RPM
RPM是Red Hat Package Manager的缩写,原意是Red Hat软件包管理: 这一文件格式名称虽然打上了RedHat的标志,但是其原始设计理念是开放式的,现在包括OpenLinux、S.u.S.E.以及Turbo Linux等Linux的分发版本都有采用,可以算是公认的行业标准了。
RPM软件包
RPM软件包分为二进制包(Binary)、源代码包(Source)和Delta包三种。二进制包可以直接安装在计算机中,而源代码包将会由RPM自动编译、安装。源代码包经常以src.rpm作为后缀名。 rpm 包种类、格式
rpm格式二进制可执行安装包
gd-2.0.35-11.el6.x86_64.rpm
src.rpm格式 源码包格式
gd-2.0.35-11.el6.src.rpm
rpm命名方式:name-version-release.arch.rpm
name:表示包的名称,包括主包名和分包名 version:表示包的版本信息 release“用于标识rmp包本身的发型号,可还包含适应的操作系统 arch:表示主机平台
gd-devel-2.0.35-11.el6.x8664.rpm源码包 gd是这个主包名,devel是这个包的分包名 2.0.35是表示版本信息,2为主版本,0为次版本,35为修订号, 11.el6中的11是表示发行号,el6表示是RHEL6 x8664是表示包适合的平台,如果是noarch这表示与平台无关
rpm工具命令的使用
rpm {-i|–install} [install-options] PACKAGE_FILE … -i:install安装 -v|vv|vvv: verbose显示详细信 -h: 以#显示程序包管理执行进度;每个#表示2%的进度
rpm -ivh PACKAGE_FILE ... [install-options] --test: 测试安装,但不真正执行安装过程;dry run模式; --nodeps:忽略依赖关系; --replacepkgs: 重新安装; --nosignature: 不检查来源合法性; --nodigest:不检查包完整性; --noscipts:不执行程序包脚本片断; %pre: 安装前脚本; --nopre %post: 安装后脚本; --nopost %preun: 卸载前脚本; --nopreun %postun: 卸载后脚本; --nopostun 1. 碰到多个依赖关系可以多个安装 2. 重新安装时,如果重新安装有可能导致之前的配置文件失效
升级: rpm {-U|–upgrade} [install-options] PACKAGEFILE … rpm {-F|–freshen} [install-options] PACKAGEFILE …
upgrage:安装有旧版程序包,则“升级”;如果不存在旧版程序包,则“安装”; freeshen:安装有旧版程序包,则“升级”;如果不存在旧版程序包,则不执行升级操作; rpm -Uvh PACKAGE_FILE ... rpm -Fvh PACKAGE_FILE ... --oldpackage:降级; --force: 强行升级; 注意:(1) 不要对内核做升级操作;Linux支持多内核版本并存,因此,对直接安装新版本内核; (2) 如果原程序包的配置文件安装后曾被修改,长级时,新版本的提供的同一个配置文件并不会直接覆盖老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留;
查询: rpm {-q|–query} [select-options] [query-options]
[select-options]挑选选项 -a: 所有包 -f: 查看指定的文件由哪个程序包安装生成 -p /PATH/TO/PACKAGE_FILE:针对尚未安装的程序包文件做查询操作; --whatprovides CAPABILITY:查询指定的CAPABILITY由哪个包所提供; --whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖; CAPABILITY:可以查询路径,文件 [query-options]查询选项 --changelog:查询rpm包的changlog修改日志 -c: 查询程序的配置文件 -d: 查询程序的文档 -i: information 相关信息 Name:姓名 Version:版本 Release:发行号 Architecture:支持的平台 Install Date:安装日期 Group:支持的包组 Size:大小 License:许可证 Signature:签名日期 source RPM:额外提供了源码包 Build Date:制造日期 Build Host:在那个服务器上安装 Relovations:有没有重新公共 Packager:作者 vendor:提供组织 URL:官方站点 Summary:简要功能描述 Description:描述信息 -l: 查看指定的程序包安装后生成的所有文件; --scripts:程序包自带的脚本片断 -R: 查询指定的程序包所依赖的CAPABILITY; --provides: 列出指定程序包所提供的CAPABILITY; -qa 查看所有已经安装的包 rpm -qa 查看所有包名 rpm -qa | grep 包名查看某个包名 -qi 查看包的摘要信息 -qf 查看文件是有那个包安装的 rpm -qf /path/to/file -ql 查看包安装生成的文件清单 -qc 查看包安装生成的配置文件 -qd 查看包安装生成的帮助文档 -q --scripts 查看相关的脚本 rpm -q --scripts 包名 -qp[i|l|d|c] 查看尚未安装包的详细信息 rpm -qpi /path/to/rpm_file
卸载: rpm {-e|–erase} [–allmatches] [–nodeps]忽略依赖关系 [–noscripts] [–notriggers] [–test] PACKAGE_NAME …
校验: 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 包来源合法性验正及完整性验正: 完整性验正:SHA256 来源合法性验正:RSA 公钥加密: 对称加密:加密、解密使用同一密钥; 非对称加密:密钥是成对儿的, public key: 公钥,公开所有人 secret key: 私钥, 不能公开 导入所需要公钥: rpm --import /PATH/FROM/GPG-PUBKEY-FILE CentOS 7发行版光盘提供的密钥文件:RPM-GPG-KEY-CentOS-7
数据库重建: 数据库 var/lib/rpm rpm {–initdb|–rebuilddb} initdb: 初始化 如果事先不存在数据库,则新建之;否则,不执行任何操作;
rebuilddb:重建 无论当前存在与否,直接重新创建数据库;
RPM示例
实验环境:centos7 1.初始化数据库 通过rpm命令查询一个rpm包是否安装了,也要通过rpm命令来安装;不是所有的软件包都能通过rpm命令来安装的,文件已.rpm后缀结尾的才行; 数据库重建: rpm 数据库 var/lib/rpm rpm {–initdb|–rebuilddb} initdb: 初始化 如果事先不存在数据库,则新建之;否则,不执行任何操作;
rebuilddb:重建 #会花很长时间 无论当前存在与否,直接重新创建数据库;
2.软件包的安装 rpm {-i|–install} [install-options] PACKAGE_FILE … -v: verbose -vv: 显示更多的verbose -h: 以#显示程序包管理执行进度;每个#表示2%的进度
rpm -ivh PACKAGE_FILE ... [install-options] --test: 测试安装,但不真正执行安装过程;dry run模式; --nodeps:忽略依赖关系; --replacepkgs: 重新安装; --nosignature: 不检查来源合法性; --nodigest:不检查包完整性; --noscipts:不执行程序包脚本片断; %pre: 安装前脚本; --nopre %post: 安装后脚本; --nopost %preun: 卸载前脚本; --nopreun %postun: 卸载后脚本; --nopostun 1. 碰到多个依赖关系可以多个安装 2. 重新安装时,如果重新安装有可能导致之前的配置文件失效 [root@localhost Packages]# rpm -ivh --test zziplib-0.13.62-5.el7.x86_64.rpm 准备中... ################################# [100%] #只用来检查依赖关系可以用--test,如果要重新安装可以用--replacepkgs。 [root@localhost Packages]# rpm -ivh zziplib-0.13.62-5.el7.x86_64.rpm 准备中... ################################# [100%] 正在升级/安装... 1:zziplib-0.13.62-5.el7 ################################# [100%]
3.软件包的升级: rpm {-U|–upgrade} [install-options] PACKAGEFILE … rpm {-F|–freshen} [install-options] PACKAGEFILE …
upgrage:安装有旧版程序包,则“升级”;如果不存在旧版程序包,则“安装”; freeshen:安装有旧版程序包,则“升级”;如果不存在旧版程序包,则不执行升级操作; rpm -Uvh PACKAGE_FILE ... rpm -Fvh PACKAGE_FILE ... --oldpackage:降级; --force: 强行升级; 注意:(1) 不要对内核做升级操作;Linux支持多内核版本并存,因此,对直接安装新版本内核; (2) 如果原程序包的配置文件安装后曾被修改,长级时,新版本的提供的同一个配置文件并不会直接覆盖老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留; [root@localhost Packages]# rpm -Uvh zziplib-0.13.62-5.el7.x86_64.rpm 准备中... ################################# [100%] 软件包 zziplib-0.13.62-5.el7.x86_64 已经安装 #如果想对程序包进行降级可以使用--oldpackage进行降级;
4.软件包的查询
rpm {-q|–query} [select-options] [query-options]
[select-options]挑选选项 -a: 所有包 -f: 查看指定的文件由哪个程序包安装生成 -p /PATH/TO/PACKAGE_FILE:针对尚未安装的程序包文件做查询操作; --whatprovides CAPABILITY:查询指定的CAPABILITY由哪个包所提供; --whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖; CAPABILITY:可以查询路径,文件 [query-options]查询选项 --changelog:查询rpm包的changlog修改日志 -c: 查询程序的配置文件 -d: 查询程序的文档 -i: information 相关信息 Name:姓名 Version:版本 Release:发行号 Architecture:支持的平台 Install Date:安装日期 Group:支持的包组 Size:大小 License:许可证 Signature:签名日期 source RPM:额外提供了源码包 Build Date:制造日期 Build Host:在那个服务器上安装 Relovations:有没有重新公共 Packager:作者 vendor:提供组织 URL:官方站点 Summary:简要功能描述 Description:描述信息 -l: 查看指定的程序包安装后生成的所有文件; --scripts:程序包自带的脚本片断 -R: 查询指定的程序包所依赖的CAPABILITY; --provides: 列出指定程序包所提供的CAPABILITY; 用法: -qi PACKAGE, -qf FILE, -qc PACKAGE, -ql PACKAGE, -qd PACKAGE -qpi PACKAGE_FILE, -qpl PACKAGE_FILE, ... -qa
yum
Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装
YUM的特点: 可以同时配置多个资源库(Repository) 简洁的配置文件(/etc/yum.conf) 自动解决增加或删除rpm包时遇到的依赖性问题 使用方便 保持与RPM数据库的一致性
yum源
yum源安装: yum源大致上分为两类: 本地 网络 本地光盘yum源的搭建:
通过ISO镜像挂载或者复制文件 mount /dev/cdrom /media/cdrom 编辑本地YUM源文件 cd /etc/yum.repos.d/ 清除老配置,rm -rf * vim localcdrom.repo 配置文件: [c7-media] name=CentOS-$releasever - Media baseurl=file:///media/CentOS/ file:///media/cdrom/ file:///media/cdrecorder/ gpgcheck=1 enabled=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 清除yum缓存并更新 yum clean all yum makecache 已加载插件:fastestmirror c7-media | 3.6 kB 00:00:00 (1/4): c7-media/group_gz | 155 kB 00:00:00 (2/4): c7-media/filelists_db | 6.2 MB 00:00:00 (3/4): c7-media/primary_db | 5.3 MB 00:00:00 (4/4): c7-media/other_db | 2.3 MB 00:00:00 Determining fastest mirrors 元数据缓存已建立
网络源安装 编辑网络YUM源文件
cd /etc/yum.repos.d/ 清除老配置,rm -rf * vim networkcdrom.repo 配置文件: [c7-network] name=network baseurl=http://mirrors.aliyun.com/centos/7/os/x86_64 gpgcheck=0 enabled=1 清除yum缓存并更新 yum clean all yum makecache
注:以上配置是很简单的配置
yum客户端: 配置文件: /etc/yum.conf:为所有仓库提供公共配置或者不属于仓库的配置 /etc/yum.repos.d/*.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,意为随机挑选; priority:表示优先级 cost= 默认为1000 注:=左右不可出现空格 教室里的yum源:http://172.16.0.1/cobbler/ks_mirror/CentOS-6.6-x86_64/ CentOS 6.6 X84_64 epel: http://172.16.0.1/fedora-epel/6/x86_64/ yum repolist :显示可以使用的yum的仓库 yum命令的用法: yum [options] [command] [package ...] command is one of: * install package1 [package2] [...] 安装 * update [package1] [package2] [...] * update-to [package1] [package2] [...] * check-update * upgrade [package1] [package2] [...] * upgrade-to [package1] [package2] [...] * distribution-synchronization [package1] [package2] [...] * remove | erase package1 [package2] [...] * list [...] * info [...] * provides | whatprovides feature1 [feature2] [...] * clean [ packages | metadata | expire-cache | rpmdb | plugins | all ] * makecache * groupinstall group1 [group2] [...] * groupupdate group1 [group2] [...] * grouplist [hidden] [groupwildcard] [...] * groupremove group1 [group2] [...] * groupinfo group1 [...] * search string1 [string2] [...] * shell [filename] * resolvedep dep1 [dep2] [...] * localinstall rpmfile1 [rpmfile2] [...] (maintained for legacy reasons only - use install) * localupdate rpmfile1 [rpmfile2] [...] (maintained for legacy reasons only - use update) * reinstall package1 [package2] [...] * downgrade package1 [package2] [...] * deplist package1 [package2] [...] * repolist [all|enabled|disabled] * version [ all | installed | available | group-* | nogroups* | grouplist | groupinfo ] * history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats] * check * help [command] 帮助 显示仓库列表: repolist [all|enabled|disabled] all:所有 enabled:启用的 disabled:禁用的 显示程序包: list 显示anaconda的是操作系统安装的 # yum list [all | glob_exp1] [glob_exp2] [...] glob_exp1:使用glob的通配符 # yum list {available|installed|updates} [glob_exp1] [...] available:可用的 installed:所有安装的 updates:所有可升级 安装程序包: install package1 [package2] [...] 可以一次安装多个包 默认是安装最新的 reinstall package1 [package2] [...] (重新安装) 升级程序包: update [package1] [package2] [...] downgrade package1 [package2] [...] (降级) 检查可用升级包: check-update 卸载程序包: remove | erase package1 [package2] [...] 卸载时会把依赖的包也会卸载的, 查看程序包information: info [...] 查看指定的特性(可以是某文件)是由哪个程序包所提供: provides | whatprovides feature1 [feature2] [...] 清理本地缓存: clean [ packages | metadata | expire-cache | rpmdb | plugins | all ] packages metadata expire-cache rpmdb plugins all 构建缓存: makecache 搜索: search string1 [string2] [...] 以指定的关键字搜索程序包名及summary信息; rpm -k 查看指定包所依赖的capabilities: deplist package1 [package2] [...] 查看yum事务历史: history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats] 安装及升级本地程序包: * localinstall rpmfile1 [rpmfile2] [...] (maintained for legacy reasons only - use install) * localupdate rpmfile1 [rpmfile2] [...] (maintained for legacy reasons only - use update) 包组管理的相关命令: * groupinstall group1 [group2] [...] * groupupdate group1 [group2] [...] * grouplist [hidden] [groupwildcard] [...] * groupremove group1 [group2] [...] * groupinfo group1 [...] 如何使用光盘当作本地yum仓库: (1) 挂载光盘至某目录,例如/media/cdrom # mount -r -t iso9660 /dev/cdrom /media/cdrom (2) 创建配置文件 [CentOS7] name= baseurl= gpgcheck= enabled= yum的命令行选项: --nogpgcheck:禁止进行gpg check; -y: 自动回答为“yes”; -q:静默模式; --disablerepo=repoidglob:临时禁用此处指定的repo; --enablerepo=repoidglob:临时启用此处指定的repo; --noplugins:禁用所有插件; yum的repo配置文件中可用的变量: $releasever: 当前OS的发行版的主版本号; $arch: 平台; $basearch:基础平台; $YUM0-$YUM9 http://mirrors.magedu.com/centos/$releasever/$basearch/os
列表
yum list <package_name> 列出指定安装软件的清单 yum list installed 列出所有已安装的软件包 yum list extras 列出所有已安装但不在 yum 仓库內的软件包 yum grouplist 列出所有的组 yum grouplist "Group1" 列出指定组的软件包列表
安装
yum -y install <package_name> 安装指定的软件 yum -y groupinstall "Group1" "Group2" 安装指定的组 yum -y localinstall <package_name> 安装下载到本地的rpm包 yum reinstall <package_name> 重新安装一遍
更新
yum check-update 列出所有可更新的软件清单 yum update 更新所有安装的软件 yum update <package_name> 更新指定的软件
信息
yum info 安装指定的软件 yum info <package_name> 显示指定包的信息 yum groupinfo "Group1" "Group2" 显示指定组的信息 yum repolist [all|enable|disable] 查看yum仓库的个数,默认显示启用的 yum makecache 手动生成缓存 yum search <package_name> yum list | grep “*package*” 查找rpm yum reinstall <package_name> 重新安装一遍 yum whatprovides “*/COMMAND” 查看命令是用那个软件包提供的
原创文章,作者:N19_king,如若转载,请注明出处:http://www.178linux.com/16981