软件包的组成部分由:二进制程序、库、配置文件、帮助文件等组成,其存放的一般路径为:

二进制程序:/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}i686i386

有时可以使用分包来限定其使用的功能如:

主包: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位的系统

注:硬件架构一致且版本相同的centosredhat包可以互用。

包与包之间存在依赖关系:X ——> Y——>Z

 

来源合法性验证

源程序:通过md5sha1校验码验证

rpm包:发行商提供的合法性是可信的

 验证包完整性:校验码

 验证来源合法性:公钥

 

获取rpm包的途径

1、发行版提供的程序包;

2Fedora-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 重装程序包

 

实例:

[root@localhost 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、不再卸载

实例:

[root@localhost Packages]# rpm  -e zsh           以刚才安装的包为例
[root@localhost 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的软件包

[root@localhost 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文件是由那个包生成的

[root@localhost 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

 

实例:

测试软件包的完整性

[root@localhost Packages]# rpm -V zsh    首先使用 –V来检查该包完整性
[root@localhost Packages]# rpm -qc zsh   跟着使用-qc显示其生成的配置文档
/etc/skel/.zshrc
/etc/zlogin
/etc/zlogout
/etc/zprofile
/etc/zshenv
/etc/zshrc
[root@localhost Packages]# vim /etc/zshrc    编辑/etc/zshrc文件
[root@localhost 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)是一个在FedoraRedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。

 

配置yum仓库

yum的配置文件路径:/etc/yum.conf;/etc/yum.repo.d/*.repo

格式为:由两段组成。类似windowini配置文件

   [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,验证gpg0表示不验证

  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仓库

[root@localhost Packages]# vim/etc/yum.repos.d/iso.repo
[root@localhost 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仓库

[root@localhost 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

[root@localhost 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 出现以下错误,请老师指点一下问题在那

[root@localhost ~]# dnf repolist
Failed to open: /var/cache/dnf/x86_64/7/x86_64/7/epel/repodata/49c4e3bd54f19136521be9b254830c954369cc22ce1b661db502ebef13b0004c-updateinfo.xml.bz2.
[root@localhost ~]# dnf clean all 
Cleaning repos: epel ali base updates cdroom extras
Cleaning up Everything
[root@localhost ~]# 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.