程序以源代码方式提供:

需要编译成特有的格式:二进制的文件才可以使用。

部分程序还有依赖关系。

程序的组成部分:

编译前:源代码。

编译后:(应用程序的组成部分)

二进制程序

库文件(项目里面共享的代码模块或研发接口)

配置文件(命令行选项)

帮助文件(手册或文档)

位置:

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

库文件:/lib,/lib64, /usr/lib,/usr/lib64,/usr/local/lib,/usr/local/lib64

配置文件:/etc ,/etc/DIR ,/usr/local/{etc,conf}

帮助文件: /usr/share/{man,doc},/usr/local/share/man


特殊应用程序可执行位置于libexec目录:

程序包管理器:

应用程序打包:有特定格式。对兼容格式程序包管理。

程序包:

源代码的压缩包(压缩比依此大):appname-VERSION.tar.gz,appname-VERSINON.tar.bz2,appname-VERSION.tar.xz

常见的包管理器:

.deb :Debian

.rpm :Red hat Package Manager(RPM is Package Manager)

rpm 包命名格式:

appname-VERSION-RELEASE.APCH.rpm

VERSION:

major :主版本号

minor :次版本号

release:发行号

RELEASE:包自身修订号(适用于的OS信息)

ARCH:适用的平台

x86:i386,i486,i686

x86_64:amd64,x86_64

powerpc:ppc

noarch :跟平台无关

场景:某程序30种功能,10种常用,其余不常用。

解决思路:

分包机制。

核心包:主包:命名于源项目名称一致

例如:

子包(支包):源项目名后附加描述功能。

rpm 是 Hed Hat的核心内容。其实:安装过程就是调用并安装这些程序包的过程。


rpm命令的作用:RPM Package Manager 对 linux 系统上的rpm程序包操作。

包括;安装,卸载,升级,查询,校验等。

先查找rpm:

使用光盘镜像:

挂载光盘:mkdir /media/cdrom(创建mount-point)

[root@172 cdrom]# mount -o ro -t iso9660 /dev/sr0 /media/cdrom/

[root@172 /]# mount  (检验是否挂载完成)

/dev/sr0 on /media/cdrom type iso9660 (ro)

安装准备:查看挂载光盘里的rpm

[root@172 /]# cd /media/cdrom/

[root@172 cdrom]# ls

CentOS_BuildTag  RELEASE-NOTES-en-US.html

EFI              repodata

EULA             RPM-GPG-KEY-CentOS-6

GPL              RPM-GPG-KEY-CentOS-Debug-6

p_w_picpaths           RPM-GPG-KEY-CentOS-Security-6

isolinux         RPM-GPG-KEY-CentOS-Testing-6

Packages         TRANS.TBL

[root@172 cdrom]# cd Packages/

[root@172 Packages]# ls

显示一堆的rpm包,这里以zsh-4.3.10-7.el6.x86_64.rpm为例:

安装:

rpm {-i|--install} [install-options] PACKAGE_FILE


还有就是:rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...(升级或安装)

例子:(如安装过。可使用 rpm -e PACKAGE_NAME卸载)

[root@172 Packages]# rpm -U -v 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 packages for installation...

zsh-4.3.10-7.el6


[root@172 Packages]# rpm -i zsh-4.3.10-7.el6.x86_64.rpm(安装)

[root@172 Packages]# which zsh (测试安装与否)

/bin/zsh

常见选项:

-v 显示安装过程的详情(v可以最多连用3个 例如:-ivvvh  v的次数多显示过程越仔细。)

-h 以#开头表示安装进度

例子:安装组合命令 -ivh

[root@172 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%]

--test 测试安装,并非实际安装   (主要用途报告依赖关系及冲突信息)

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

[root@172 Packages]# which zsh

/usr/bin/which: no zsh in (/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)


安装前测试(显示)依赖关系:

[root@172 Packages]# rpm -ivh --test php-5.3.3-38.el6.x86_64.rpm 

warning: php-5.3.3-38.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY

error: Failed dependencies:

php-cli(x86-64) = 5.3.3-38.el6 is needed by php-5.3.3-38.el6.x86_64

php-common(x86-64) = 5.3.3-38.el6 is needed by php-5.3.3-38.el6.x86_64

程序包之间的依赖关系:是最大的安装难题。

由linux思想决定:众多单一小程序,程序间存在相关性。

两个程序间循环依赖的 。需要两个程序一同安装。


忽略依赖关系:有可能运行失败。(如某些需要依赖文档,可以忽略,只会降低用户体验不影响使用)


--nodeps :忽略依赖关系


root@172 Packages]# rpm -ivh --test --nodeps php-5.3.3-38.el6.x86_64.rpm 

warning: php-5.3.3-38.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY

Preparing...                ########################################### [100%]


覆盖安装: 重新安装并覆盖原有文件。(会破坏修改的配置文件)


--replacepkgs


package zsh-4.3.10-7.el6.x86_64 is already installed(确认程序已经安装,下面覆盖)

[root@172 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%]


强制安装(导致冲突时。或级别改变时,明确要安装才用)

--force


改变目录(允许改变路径的包才有此功能)

--relocate

杂项:

--replacefiles(安装时只替换指定文件)

--oldpackage(程序包降级)后面跟低版本文件

--nopre(安装前脚本不执行)

--nopost(安装后脚本不执行)

--nopreun(卸载前脚本不执行)

--nopostun(卸载后脚本不执行)


升级:(操作和安装相似)(没有下载成功软件。在yum完后在不上这个试验过程)

rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...(升级或安装)

rpm {-F|--freshen} [install-options] PACKAGE_FILE ...(单纯升级) 

常用组合:-Uvh   -Fvh    

支持:--test  --nodeps    --foce    --oldpackage


&& 不要对内核执行升级。(linux 允许多内核共存)

方法是:装多个版本内核,启动时要选择需要的。&&

&&程序包的配置文件被修改,升级时:新版本的配置文件不会覆盖老版本的文件。而是把新版本文件重命名后保存(.rpmnew)后缀名。

卸载:

移除已经安装的工具包

rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...


--allmatches (如果一个程序安装多个版本,一次全卸载)

--nodeps (如果一个程序包依赖,忽略依赖,卸载。)

(--test   | dry-run 模式)

卸载时:改变的配置文件会被保存。(以zsh为例子:zshrc.rpmsave)

查询:

是否安装包及包的详细信息。

rpm {-q|--query} [select-options] [query-options]


[query-options]:

1.查询某包的简要信息  -i

[root@172 Packages]# rpm -qi zsh

Name        : zsh                          Relocations: (not relocatable)

Version     : 4.3.10                            Vendor: CentOS

Release     : 7.el6                         Build Date: Mon 25 Nov 2013 01:40:59 AM CST

Install Date: Wed 08 Apr 2015 09:36:26 AM CST      Build Host: c6b9.bsys.dev.centos.org

Group       : System Environment/Shells     Source RPM: zsh-4.3.10-7.el6.src.rpm

Size        : 5009102                          License: BSD

Signature   : RSA/SHA1, Mon 25 Nov 2013 03:33:46 AM CST, Key ID 0946fca2c105b9de

Packager    : CentOS BuildSystem <http://bugs.centos.org>

URL         : http://zsh.sunsite.dk/

Summary     : A powerful interactive shell

Description :

The zsh shell is a command interpreter usable as an interactive login

shell and as a shell script command processor.  Zsh resembles the ksh

shell (the Korn shell), but includes many enhancements.  Zsh supports

command line editing, built-in spelling correction, programmable

command completion, shell functions (with autoloading), a history

mechanism, and more.

2.查询某包安装生成的文件列表 -l

[root@172 Packages]# rpm -ql php

/etc/httpd/conf.d/php.conf

/usr/lib64/httpd/modules/libphp5.so

/var/lib/php/session

/var/www/icons/php.gif

3.查询某包安装完成后生成的配置文件 -c

[root@172 Packages]# rpm -qc zsh

/etc/skel/.zshrc

/etc/zlogin

/etc/zlogout

/etc/zprofile

/etc/zshenv

/etc/zshrc

4.查询安装生成的帮助文件(文档) -d (rpm -qd RPM_NAME)

5.查看某包制作时随版本变化的changelong信息

--changelog(rpm -q --changelog php)

6.查询某包提供的capabilities:

rpm -q --provides php

7.查询某包依赖的capabilities

--requires

8.查询某包卸载和安装时执行的脚本

rpm -q --scripts zsh

脚本分四类

preinstall:安装过程开始之前执行的脚本

postinstall:安装过程完成之后执行的脚本

preuninstall:卸载过程开始前执行脚本

postuninstall:卸载过程执行完成脚本


查询所有的安装包(-a)

(rpm -qa |wc -l)

可以使用glob 例如:显示所有安装的PHP的包

[root@172 Packages]# rpm -qa |grep "php.*"

php-common-5.3.3-38.el6.x86_64

php-cli-5.3.3-38.el6.x86_64

php-5.3.3-38.el6.x86_64


查询某文件是由那个包安装生成。(-f)

[root@172 Packages]# rpm -qf /etc/zshrc

zsh-4.3.10-7.el6.x86_64


查询尚未安装的包文件的相关信息   -p

可接[query-options]的所有选项

注意的是 后面查询的是:PRM_FILE

校验:

rpm {-V|--verify} [select-options] [verify-options]


[root@172 Packages]# rpm -V zsh

S.5....T.  c /etc/zshrc


显示改变后的属性

  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


程序包合法性认证:

来源合法

由信任的制作者提供

依赖于:制作者的数字签名(非对称加密算法)

签名是作者使用自己的私钥加密程序包的特征码进行的

内容合法

完整性校验成功(包未被二次修改)

依赖于:制作者提供的程序特征码

验证方式:安装者用同样的特征码提取算法提取程序的特征码,并与原作者提供的相比较。


[root@172 cdrom]# rpm --import RPM-GPG-KEY-CentOS-6(导入公钥)

[root@172 cdrom]# cd Packages/

[root@172 Packages]# rpm -K zsh-4.3.10-7.el6.x86_64.rpm 

zsh-4.3.10-7.el6.x86_64.rpm: rsa sha1 (md5) pgp md5 OK


--nosignature :不检查来源的合法性

--nodigest: 不检查完整性

rpm 管理器数据库: /var/lib/rpm

重建数据库:

--initdb  初始化数据库(数据库完全不存在可以新建)

--rebuliddb 重建数据库(无论数据存在与否)