Linux的程序包管理

Linux的程序包管理

 

软件包管理工具:rpm、yum


POSIX:Portable Openratin System  跨平台调用

  • API:兼容,意味开发库兼容,因此,源代码可跨平台

  • ABI:兼容,编译后的程序可以跨平台


库为函数,function

  • 库:可执行程序,本身不能作为程序执行入口,但可以被调用

               是编译好的二进制格式


程序的过程:预编译、编译、汇编、链接

  • 静态链接:将库包含在程序中

  • 动态链接:dll,so(shared object)

编译:源代码翻译成cpu指令集的过程


 注意:

  • os平台:编译好的应用程序必须为特定平台所支持的版本

  • 硬件平台:应用程序为特定的cpu所支持


软件包的组成部分

  • 二进制程序:/bin,/sbin /usr/sbin,/usr/local.bin,/usr/local/sbin


  • 自身库文件:/lib /lib64 /usr/lib /usr/lib64 /usr/local/lib  /usr/local/lib64

                               开发时调用API,运行时调用ABI


  • 通过调整/etc/ld.so.conf /etc/ld.so.conf.d/*.conf

       

  • 配置文件:/etc,无须额外配置


  • 帮助文件:

                 man文件,info文件,README,INSTALL,ChangeLog

                 man COMMAND


                 到某路径下查找与命令名同名的通常以。gz结尾的压缩文件的名字

                 /usr/share/man


总结: 

  • /usr/local/nginx

  • 二进制程序:bin sbin 

  • 自身库:lib

  • 头文件:include

  • 帮助文件:man(配置文档/etc/man.conf)

  • 配置文件:etc/conf                 


ldd命令:

  • 查看应用所依赖的共享库

  • ldd [options] 二进制文件  



[root@bogon ~]# ldd /bin/cat
linux-vdso.so.1 =>  (0x00007fffc47ff000)
libc.so.6 => /lib64/libc.so.6 (0x0000003a04800000)
/lib64/ld-linux-x86-64.so.2 (0x0000003a04000000)


  • 函数名(参数),头文件,保存在/usr/include/中保存


[root@bogon ~]# ls /usr/include/
aio.h        features.h           ifaddrs.h       netax25      QtMultimedia 
aliases.h    fenv.h               inttypes.h      netdb.h      QtNetwork      
alloca.h     fmtmsg.h             jconfig.h       neteconet    QtOpenGL


应用程序管理器:

  • 数据库:

                 名称和版本,

                 安装生成的各文件路径,校验码,

                 依赖关系

                 提供功能性的说明

  • 提供程序组成格式:

                文件清单

                安装卸载时运行的脚本


 包管理器的基本功能

  • 打包

  • 安装

  • 查询

  • 升级

  • 卸载

  • 校验

  • 数据库管理


总结:

  • 应用程序的安装方式

  • 使用包管理器:便捷、易用

  • 包管理器的前段管理:yum

  • 源代码编译

  • 简单打包的二进制格式

 

rpm包的使用:

    

rpm包命名格式:

  • 源程序:name-version.tar.{gz|bz2|xz}

                        version:major.minor.release

  • rpm包:name-version-release.arch.rpm

                      release:通常包含rpm的只做发行号,还包含使用的OS

                      bash-4.3.3-2.el6.x86_64.rpm

  • OS平台:

                   el6:redhat enterprise linux 6

                   el5:redhat enterprise linux 5

                   CentOS5

                   CentOS6

                   suse11

  • arch:

                  x86_64

                  i386,i586,i686

                  ppc

                  noarch

              nginx-1.4.16-5.noarch.rpm

  • 分包:把一个复制的程序打包制作成多个rpm格式

                

                  主包:bash-4.3.3-2.el6.x86_64.rpm

                  支包:bash-hello-4.3.3-2.el6.x86_64.rpm

                              bash-world-4.3.3-2.el6.x86_64.rpm

  • 来源合法性验证:

                  源程序:通过md5或sha1校验码验证;                  

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

                  验证包完整性:校验码

                  验证来源合法:公钥加密算法

  • 获取rpm的途径:

                  1、发行商的光盘或站点服务器

                       CentOS:

                       http://mirrors.163.com

                       http://mirrors.sohu.com


                  2、rpmfind 

                       http://rpmfind.net


                  3、rpmpbone

                       http://rpm.pbone.net


注意:

  • 发行商。发行光盘中的包,需要升级时,官方释放出升级包

  • Fedora EPEL


安装程序包:

  • rpm -i --install 安装


  • rpm -i /path/to/rpm_package ...

             -v:显示安装信息

             -vv:二级详细

             -vvv:三级详细

             -h:hash 以#的个数显示安装进度,一个#表示2%的进度

             --test:仅测试,不真正执行安装过程

[root@bogon 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%]安装进度

 

重新安装:

  •  -ivh  --replacepkgs 

  • 原来的配置文件不会被覆盖,新安装的配置文件将会重命名为以.rpmnew为后缀的文件     


[root@bogon Packages]# rpm -ivh --replacepkgs 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%]


如果存在依赖:

  • 解决依赖关系:

  • 忽略依赖关系:--nodeps


[root@bogon Packages]# rpm -ivh --nodeps php-mysql-5.3.3-26.el6.x86_64.rpm 
warning: php-mysql-5.3.3-26.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
Preparing...          ########################################### [100%]
1:php-mysql         ########################################### [100%]

    

卸载程序包:

  • rpm -e --erase

  • rpm -e package_name


[root@bogon Packages]# rpm -e zsh

[root@bogon Packages]# rpm -e php-mysql

    

如果卸载被其他程序所依赖的包

  • 把依赖者一同卸载

  • 忽略依赖关系:--nodeps

  • 不再卸载


rpm包管理:查询

  • rpm -q:查询某单个包是否安装

  • rpm -qa:查询所有已经安装的包

  • rpm -qi 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 -q package_name

[root@bogon Packages]# rpm -q zsh 
zsh-4.3.10-7.el6.x86_64


查询包安装之后在当前系统生成的文件列表:rpm -ql package_name

[root@bogon Packages]# rpm -ql zsh
/bin/zsh
/etc/skel/.zshrc
/etc/zlogin
/etc/zlogout
...

查询某个文件是哪个包安装生成的:rpm -qf /path/to/somefile

[root@bogon Packages]# rpm -qf /etc/passwd
setup-2.8.14-20.el6_4.1.noarch

[root@bogon Packages]# rpm -qf /bin/bash 
bash-4.1.2-15.el6_4.x86_64

查询包安装后生成的帮助文档:rpm -qd package_name

[root@bogon Packages]# rpm -qd zsh
/usr/share/doc/zsh-4.3.10/BUGS
/usr/share/doc/zsh-4.3.10/CONTRIBUTORS
/usr/share/doc/zsh-4.3.10/FAQ
/usr/share/doc/zsh-4.3.10/FEATURES
...

查询包安装后生成的配置文件:rpm -qc package_name

[root@bogon Packages]# rpm -qc zsh
/etc/skel/.zshrc
/etc/zlogin
/etc/zlogout
/etc/zprofile
/etc/zshenv
/etc/zshrc

查询包相关的脚本:rpm -q --scripts package_name

[root@bogon Packages]# rpm -q --scripts zsh
postinstall scriptlet (using /bin/sh):
if [ ! -f /etc/shells ] ; then
echo "/bin/zsh" > /etc/shells
else
...

查询尚未安装的rpm包文件的相关信息:

查询安装后会生成的文件列表:rpm -qpl /path/to/package_file

[root@bogon Packages]# rpm -qpl zsh-4.3.10-7.el6.x86_64.rpm

查询其简单描述信息:rpm -qpi /path/to/package_file

Name(名称)  : bash     Relocations(重定位): (not relocatable)
Version版本 : 4.1.2    Vendor提供商: CentOS
Release     : 15.el6_4 Build Date制作时间: Thu 18 Jul 2013 09:21:24 PM CST
Install Date: Thu 13 Feb 2014    Build Host:在那个系统制作的 c6b10.bsys.dev.centos.org
Group  : System Environment/Shells Source RPM(源码的rpm包): bash-4.1.2-15.el6_4.src.rpm
Size   : 3139291                          License许可证: GPLv3+
Signature数字签名 : RSA/SHA1, Thu 18 Jul 2013 09:46:10 PM CST, Key ID 0946fca2c105b9de
Packager  制作者  : CentOS BuildSystem <http://bugs.centos.org>
URL: http://www.gnu.org/software/bash
Summary 简要: The GNU Bourne Again shell Description :详细信息
The GNU Bourne Again shell (Bash) is a shell or command language
interpreter that is compatible with the Bourne shell (sh). Bash
incorporates useful features from the Korn shell (ksh) and the C shell
(csh). Most sh scripts can be run by bash without modification.

rpm包升级:

  • rpm -U:升级或安装

  • rpm -F:升级

  • rpm {-Uvh|-Fvh}/path/to/package_file

  • --nodeps:忽略依赖关系

  • --force:强行安装

注意:

  • 不要对内核执行升级操作

  • 多版本内核可并存,因此,建议执行安装操作


rpm包管理:校验

  • 检查安装后生成的文件是否被修改过

  • rpm -V package_name

[root@bogon Packages]# rpm -V zsh

[root@bogon Packages]# rpm -V zsh
S.5....T.    /usr/share/zsh/4.3.10/functions/zfls


. 为发生改变		
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 能力改变


校验来源合法性和软件完整性 

  • 包完整行:通过单向加密机制(MD5|sha1)

  • 来源合法性:通过公钥加密机制(RSA)

命令:gpg

  • rpm -K /path/to/somefile

  • rpm --checksig /path/to/package_file

  • --nosigeature:不检查来源合法性

  • --nodigest:不检查包完整性


导入密钥:

  • rpm --import /path/to/gpg-key-file

  • 导入以后再做验证


数据库

  • 位置:/var/lib/rpm


  • 重建:rpm --initdb:初始化

          如果事先不存在一个数据库,则新建之

          rpm --rebuilddb 重建

  直接新建数据库,会覆盖原有库


依赖关系:

  • 程序包管理器的前段工具:

  • yum(Yellowdog Update Modifier)

  • 自动解决依赖关系      

文件服务器(共享rpm包):通过yum所支持的文件共享机制将各rpm包通过文件服务共享

  • repository:仓库

      1.需要的各rpm包

      2、依赖关系、程序包安装后所能够生成的列表等元数据文件


  • ftp,http,nfs,file


yum客户端

  • 配置文件:指定各可用的yum仓库;

  • 缓存元数据:yum会到各可用yum仓库获取元数据,并缓存至本地

  • 分析元数据:根据具体的操作请求完成元数据分析,可能包括依赖关系、文件列表等信息

执行具体操作

  • 客户端配置文件指定对服务器配置文件:

    ftp ftp://server/path/to/repo

    http http://server/path/to/repo

    nfs  nfs://servr/nfs_path

    file file:///path/to/path

 

yum [install] command

check          Check for problems in the rpmdb
check-update   Check for available package updates
clean          Remove cached data
deplist        List a package's dependencies
downgrade      downgrade a package
erase          Remove a package or packages from your system
groupinfo      Display details about a package group
groupinstall   Install the packages in a group on your system
grouplist      List available package groups
groupremove    Remove the packages in a group from your system
help           Display a helpful usage message
history        Display, or use, the transaction history
info           Display details about a package or group of packages
install        Install a package or packages on your system
list           List a package or groups of packages
load-transaction load a saved transaction from filename
makecache      Generate the metadata cache
provides       Find what package provides the given value
reinstall      reinstall a package
repolist       Display the configured software repositories 显示各可用的仓库列表
resolvedep     Determine which package provides the given dependency
search         Search package details for the given string
shell          Run an interactive yum sh ell
update         Update a package or packages on your system
update-minimal Works like update, but goes to the 'newest' package match which fixes a problem that affects your system
updateinfo     Acts on repository update information
upgrade        Update packages taking obsoletes into account
version        Display a version for the machine and/or available repos.

           

要使用yum管理应用程序,首先得配置其可用的yum仓库,保存在配置文件中

  • /etc/yum.conf

  • /etc/yum.repo.d/*.repo

配置文件格式:由两段组成。类似window的ini配置文件

  • [main]:主配置段

  • [repo]:仓库配置段

配置repo

[repo_ID]
name=String
baseurl=仓库的访问路径
enabled={1|0}1,表示启用。0表示不启用
gpgcheck={1|0}1,验证gpg。0表示不验证
gpgkey=公钥地址(可以是本地,也可以是服务器端路径)
cost=定义此仓库开销,默认为1000

[base]
name=Centos 6.5 X86_64 release
baseurl=
enabled=
gpgcheck=












  

你可能感兴趣的:(linux,rpm)