程序以源代码方式提供:
需要编译成特有的格式:二进制的文件才可以使用。
部分程序还有依赖关系。
程序的组成部分:
编译前:源代码。
编译后:(应用程序的组成部分)
二进制程序
库文件(项目里面共享的代码模块或研发接口)
配置文件(命令行选项)
帮助文件(手册或文档)
位置:
二进制程序:/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
images 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 重建数据库(无论数据存在与否)