软件包的组成部分由:二进制程序、库、配置文件、帮助文件等组成,其存放的一般路径为:
二进制程序:/bin,/sbin,/usr/bin,/usr/sbin,/usr/local/bin,/usr/local/sbin
库:/lib,/usrlib,/lib64,/usr/lib64,/usr/local/lib,/usr/local/lib
配置文件:/etc
帮助文件: man文件,info文件,README,INSTALL,Changelog
包管理器的基本功能:
打包
安装
查询
卸载
校验
数据库管理
常用的包管理工具有:
Debian版本: .deb,dpkg
RedHat版本: .rpm,rpm(RedHatPackage Manger)
rpm: RPM is Package Manger
rpm包的命名格式:
源程序:name-VERSION-RELEASE.ARCH.rpm
VERSION:表示其版本,一般来说有三个版本号,依次为主版本号(major)、次版本号(minor)、修订号(RELEASE)
ARCH :使用的硬件架构,如:X86_{64|32}、i686、i386等
有时可以使用分包来限定其使用的功能如:
主包:bash-4.3.2-2.el6.x86_64.rpm
子包:bash-l1-4.3.2-2.el6.x86_64.rpm
bash-l2-4.3.2-2.el6.x86_64.rpm
以zlib-devel-1.2.3-29.el6.x86_64.rpm为例
zlib-devel:表示这个包是zlib的开发分包
1.2.3-29:该软件的版本:1为主版本号,2为次版本号,3-29为其修订版本号已修改了29次
el6: 表示其使用在6版本的系统上
x86_64: 表示其适用的硬件平台为:x86_64位的系统
注:硬件架构一致且版本相同的centos跟redhat包可以互用。
包与包之间存在依赖关系:X ——> Y——>Z
来源合法性验证:
源程序:通过md5或sha1校验码验证
rpm包:发行商提供的合法性是可信的
验证包完整性:校验码
验证来源合法性:公钥
获取rpm包的途径:
1、发行版提供的程序包;
2、Fedora-EPEL
3、项目的官方站点
4、搜索引擎
http://rpmfind.net
http://rpm.pbone.net
http://pkgs.org
rpm包管理与安装
格式:rpm -i ( or --install) options file1.rpm ... .rpm
常用参数
--test 只对安装进行测试,并不实际安装。
--nodeps 不检查依赖性关系
-v 显示附加信息
-vv 显示调试信息
-h:hash, 以#的个数显示安装进度,一个#表示2%的进度
--replacepkgs 重装程序包
实例:
[[email protected] Packages]# rpm -ivhzsh-4.3.11-4.el6.centos.x86_64.rpm warning:zsh-4.3.11-4.el6.centos.x86_64.rpm: Header V3 RSA/SHA1 Signature, key IDc105b9de: NOKEY Preparing... ###########################################[100%] 1:zsh ########################################### [100%]
卸载
rpm -e, --erase
rpm -e package_name
注:如果卸载被其他程序所依赖的包:
1、把依赖者一同卸载
2、忽略依赖关系 --nodeps
3、不再卸载
实例:
[[email protected] Packages]# rpm -e zsh 以刚才安装的包为例 [[email protected] Packages]# rpm -e zsh error: package zsh is not installed
rpm包查询
rpm -q 查询所有已经安装的包:rpm-qa (可用通配符)
查询包的描述信息:rpm -qi package_name
查询某单个包是否安装:rm -q package_name
查询包安装之后在当前系统生成文件列表:rpm -ql package_name
查询某文件是哪个包安装生成的:rpm -qf /path/to/somefile
查询包安装后生成的帮助文档:rpm -qd package_name
查询包安装之后生成的配置文件:rpm -qc package_name
查询包相关的脚本:rpm -q --scripts package_name
脚本有四类:
preinstall:安装前脚本
postinstall:安装后脚本
preuninstall:卸载前脚本
postuninstall:卸载后脚本
查询尚未安装的rpm包文件的相关信息:
查询安装后会生成的文件列表:rpm -qpl /path/to/package_file
查询其简单描述信息:rpm -qpi /path/to/package_file
实例:
显示yum的软件包
[[email protected] Packages]# rpm -qa |grepyum yum-plugin-fastestmirror-1.1.30-30.el6.noarch PackageKit-yum-plugin-0.5.8-25.el6.x86_64 yum-metadata-parser-1.1.2-16.el6.x86_64 yum-plugin-security-1.1.30-30.el6.noarch PackageKit-yum-0.5.8-25.el6.x86_64 yum-utils-1.1.30-30.el6.noarch yum-3.2.29-69.el6.centos.noarch
查询/etc/passwd文件是由那个包生成的
[[email protected] Packages]# rpm -qf/etc/passwd setup-2.8.14-20.el6_4.1.noarch
rpm包之升级:
rpm-U:升级或安装
rpm-F:升级
rpm{-Uvh|-Fvh} /path/to/package_file
--nodeps:忽略依赖关系
--force:强行安装
注意:不要对内核执行升级操作, 多版本内核可并存,因此,建议执行安装操作。
rpm包校验
检查包安装后生成的文件是否被修改过
rpm-V package_name
实例:
测试软件包的完整性
[[email protected] Packages]# rpm -V zsh 首先使用 –V来检查该包完整性 [[email protected] Packages]# rpm -qc zsh 跟着使用-qc显示其生成的配置文档 /etc/skel/.zshrc /etc/zlogin /etc/zlogout /etc/zprofile /etc/zshenv /etc/zshrc [[email protected] Packages]# vim /etc/zshrc 编辑/etc/zshrc文件 [[email protected] Packages]# rpm -V zsh 最后再使用-V,显示修改后其包完整性出错 S.5....T. c /etc/zshrc
对应上面显示的错误信息,可参考下面的说明
S file Size differs M Mode differs (includes permissions andfile 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
检验来源合法性和软件包完整性
包完整性:通过单向加密机制(md5|sha1)
来源合法性:通过公钥加密机制(RSA)
命令:gpg,pgp
导入制作者的公钥,Centos发行版的公钥在iso文件中
导入命令:rpm--import /path/to/gpg-key-file
检查: rpm -K /path/to/package_file
rpm --checksing /path/to/package_file
--nosignature:不检查来源合法性
--nodigest:不检查完整性
YUM:(全称为 Yellow dogUpdater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。
配置yum仓库
yum的配置文件路径:/etc/yum.conf;/etc/yum.repo.d/*.repo
格式为:由两段组成。类似window的ini配置文件
[main]:主配置段
[repo]:仓库配置段
repo的配置说明
[repo_ID] 可随便设
name= 可随便设
baseurl= 仓库的访问路径:如果仓库在ftp服务器上的,其格式为: ftp://server/path/to/repo
如果仓库在http服务器上的,其格式为 :http://server/path/to/repo
如果仓库在nfs服务器上的,其格式为: nfs://servr/nfs_path
如果仓库在本地的,其格式为:file:///path/to/path
enabled={1|0}1,表示启用。0表示不启用
gpgcheck={1|0}1,验证gpg。0表示不验证
gpgkey=公钥地址(可以是本地,也可以是服务器端路径)
cost=定义此仓库开销,默认为1000
yum的一般命令
格式:yum [options][command] [package ...]
参数
--skip-broken 忽略依赖问题 --nogpgcheck 忽略GPG验证 check-update 检查可更新的包 clearn 清除全部缓存
repolist列出所有可用的yum repo
install 安装
remove 卸载
update 升级
list all|installed|availiable 查询所有|已安装|未安装的
provides /PATH/TO/SOMEFILE 查询指定文件由哪个包安装生成
reinstall 重新安装
downgrade 降级
grouplist 包组
实例:
设置yum仓库
[[email protected] Packages]# vim/etc/yum.repos.d/iso.repo [[email protected] Packages]# yum repolist [base] name=base baseurl=file:///mnt/iso gpgcheck=0 [ali] name=ali baseurl=http://mirrors.aliyun.com/epel/6Server/x86_64/ enable=1 gpgcheck=0
检查yum仓库
[[email protected] Packages]# yum repolist Loaded plugins: fastestmirror,refresh-packagekit, security Loading mirror speeds from cached hostfile repo id repo name status ali ali 11,765 base base 6,575 repolist: 18,340
确认无误后,安装httpd
[[email protected] Packages]# yum installhttpd Is this ok [y/N]: y Downloading Packages: Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running Transaction Installing : httpd-2.2.15-45.el6.centos.x86_64 1/1 Verifying :httpd-2.2.15-45.el6.centos.x86_64 1/1 Installed: httpd.x86_64 0:2.2.15-45.el6.centos Complete!
在7.1上安装dnf后使用dnf -repolist 出现以下错误,请老师指点一下问题在那
[[email protected] ~]# dnf repolist Failed to open: /var/cache/dnf/x86_64/7/x86_64/7/epel/repodata/49c4e3bd54f19136521be9b254830c954369cc22ce1b661db502ebef13b0004c-updateinfo.xml.bz2.
[[email protected] ~]# dnf clean all Cleaning repos: epel ali base updates cdroom extras Cleaning up Everything [[email protected] ~]# dnf repolist all Extra Packages for Enterprise Linux 7 - x86_64 108 kB/s | 9.0 MB 01:25 Failed to open: /var/cache/dnf/x86_64/7/x86_64/7/epel/repodata/178a5e979a68eaf5d9f15ae1d7d8cafc60b0a36a8eb2632336e227382ec3a98d-updateinfo.xml.bz2.