Linux 程 序 包 管 理
1.API:Application Progarmming Interface
POSIX :Portable OS
2.程序源代码--à预处理--à编译----à汇编----à链接
静态编译:
共享编译: .so
3.ABI: Application Binary Interface
Windows与Linux不兼容
库级别的虚拟化:
Linux: WINE
Windows: Cywin
4.1系统级开发
C
C++
4.2应用级开发
Java
Python
php
pel
ruby
4.3二进制应用程序的组成部分
二进制文件、库文件、配置文件、帮助文件
程序包管理器:
Debian :dep, dpt
Redhat: rpm ,rpm(Redhat Package Manager)
PRM: RPM is Package Manager
Archlinux :
Gentoo:
5.源代码: name-VERSION.tar.gz
VERSION: major.minor.release
6.rpm包命名方式:
1>.name-VERSION-release.arch.rpm
VERSION:major.Minor.release
release.arch:
release:release.OS
常见的arch:
X86: i386,i486,i586,i686
X86_64: x64,x86_64,amd64
Powerpc:ppc(硬件平台)
跟平台无关: noarch (例如包含java程序包等)
2>.testapp: 拆包
testapp-VERSION-ARCH.rpm:主包
testapp-devel-VERSION-ARCH.rpm: 支包
testapp-testing-VERSION-ARCH.rpm
3>.包之间:存在依赖关系
yum:rpm包管理器的前端工具;
apt-get :dep包管理前端工具;
zipper : suse 上的rpm前端管理工具;
dnf :Fedora 22+ rpm包管理器前端管理工具;
7.1查看二进制程序所依赖的库文件:
ldd /PATH/TO/BINARY_FILE
7.2管理及查看本机装载的库文件:
ldconfig
/sbin/ldconfig -p : 显示本机已经缓存的所有可用库文件名及文件路径映射关系
配置文件为: /etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
缓存文件: /etc/ld.so.cache
8.程序包管理:
1>.功能: 将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷的实现程序包的安装、卸载、查询、升级和校验等管理操作
2>.程序的组成组成清单(每个包独有)
文件清单
安装或卸载时运行的脚本
3>.数据库(公共)
程序包名称及版本
依赖关系
功能说明
安装生成的个文件的文件路径及校验码信息;
9.1管理程序包的方式:
使用包管理器: rpm
使用前端工具: yum, dnf
9.2获取程序包的途径:
1>.系统发版的光盘或官方的服务器;
Centos镜像:
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com
2>.项目官方站点;
3>.第三方组织:
Fedora-EPEL
搜索引擎:
http://pkgs.org
http://rpmfind.net
http://rpm.pbone.net
4>.自己制作
5>>建议检查其合法性
来源合法性;
程序包的完整性;
10.Centos系统上rpm命令管理程序包
安装、卸载、升级、查询、校验、数据库维护
1>.安装
rpm {-i|--install} [install-options] PACKAGE_FILE ...
-v : verbose
-vv:
-h: 以#显示程序包管理执行进度,每个#表示2%的进度
rpm �Civh PACKAGE_FILE …
[install-options]
--test: 测试安装,但不真正执行安装过程;dry run模式;
--nodeps:忽略依赖关系;
--replacepkge: 重新安装;
--nosignature: 不检查来源合法性
--nodigest: 不检查包完整性;
--noscripts : 不执行程序包脚本片断:
%pre :安装前脚本: --nopre
%post: 安装后脚本: --nopost
%preun: 卸载后脚本: --nopreun
%postun: 卸载后脚本: --nopostun
2>.升级:
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
upgrage: 安装有旧版本程序包,则“升级”;如果不存在旧版本程序包,则安装;
freshen:安装有旧版本程序包,则“升级”;如果不存在就版本程序包,则不执行升级操作;
rpm �CUvh PACKAGE_FILE …
rpm �CFvh PACKAGE_FILE …
--oldpackage :降级;
--force: 强行升级;
**.(1) 不要对内核做升级操作; linux支持多内核版本并存,因此,可直接安装新版本内核
(2)如果原程序包的配置文件安装后曾被修改,升级时,新版本的提供的同一配置文件并不会直接覆盖老版本的配置文件,而把新版本的文件重命名(FILENAME.pmnew)后保留;
3>.查询
rpm {-q|--query} [select-options] [query-options]
[select-options]
-a:所有包
-f查看指定的文件由哪个程序包安装生成;
-p /PATHTO/PACKAGE_FILE:针对尚未安装的程序包文件做查询操作;
--whatprovides CAPABILITY :查询指定的APABILITY由哪个包所提供;
--whereprovides CPABILITY:查询指定的APABILITY被哪个包所依赖;
[query-options]
--changelog :查询rpm包的配置文件;
-c: 查询程序的配置文件;
-d: 查询程序的文档;
-i: information
-l: 查看指定的程序包安装后生成的所有文件;
--script: 程序包自导的脚本片断;
-R: 查询指定的程序包所依赖的CPABILITY
--provides: 列出指定程序包所提供的CPABILITY;
用法:
-qi PACKAGE, -qf FILE , -qc PACKAGE, -ql PACKAGE , -qd PACKAGE
-qpi PACKAGE_FILE ,-qpl PACKAGE_FILE
-qa
4>.卸载:
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts]
[--notriggers] [--test] PACKAGE_NAME ...
5>.校验:
rpm {-V|--verify} [select-options] [verify-options]
S fiel Size differs
M Mode differs (inculdes permissions and file type )
5 diget (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 differs
11.包来源合法性验证及完整性验证;
1>.完整性校验
公钥加密:
对称加密: 加密、解密使用同一密钥
非对称加密:密钥是成对儿的;
Public key: 公钥,公开
Secret key: 私钥,不公开
2>.导入所需公钥:
rpm --import /PATH/FRO/GPG-PUBKEY-FILE
3>.数据库重建:
rpm {--initdb|--rebuilddb}
initdb:初始化
如果事先不存在数据库,则新建,否则不执行任何操作
rebuilddb :重建
无论当前存在与否,直接重新创建数据库