Linux程序包管理:
API: Application Programming Interface
应用程序接口
POSIX:Protable OS
程序在不同操作系统中,可能会不兼容,所以API就是每个系统必须遵循的接口,
使程序可以在不同操作系统上执行
ABI:Application Binary Interface
应用程序二进制接口
只能在固定操作系统上执行
Linux与Windows不兼容
Linux:用WINE
Windows:cywin
程序源代码 ——> 预处理 ——> 编译 ——>汇编 ——> 链接
静态编译:
共享编译:调用lib或lib64下的.os模块
系统级开发
C
C++
应用及开发
java
Python
php
per1
ruby
二进制应用程序组成部分:
二进制文件、库文件、配置文件、帮助文件
程序包管理器:
debian:deb,dpt
redhat:rpm,rpm
rpm:Redhat Pacage Manager
Getoo:
Archlinux:
rpm包命名方式:
name-VERSION-re.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 :没平台
testapp:拆包
testapp-VERSION-ARCH.rpm:主包
testapp-devel-VERSION-ARCH.rpm:支包
testapp-testing-VERSION-ARCH.rpm
包之间:存在依赖关系
yum:RPM包管理的前端工具
apt-get:deb包管理器前端工具;
zypper:
ldd命令:查看二进制程序所依赖的库文件:
ldd 文件name
管理及查看本机装载的库文件:
ldconfig
/sbin/ldconfig -p : 显示本机已经缓存的所有可用库文件名及文件路径
配置文件为:/etc/ld.so.conf,/etc/ld.so.conf.d/*.conf
缓存文件:/etc/ld.so.cache
程序包管理:
功能:将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷的实现程序包的安装、
卸载、查询、升级和校验等管理操作
1、程序的组成清单(每个包独有)
文件清单
安装或卸载时运行的脚本
2、数据库(公共)
程序包名称及版本
依赖关系
功能说明
安装生成的各文件的文件路径及校验码信息
管理程序包的方式
使用包管理器:rpm
使用前端工具:yum,dnf
获取程序包的途径:
(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)自己制作
建议:检查其合法性
来源合法性
程序包的完整性;
centos系统上rpm命令管理程序包:
安装、卸载、升级、查询、校验、数据库维护
安装:
rpm {-i | --install} [install-options] PACKAGE_FILE ...
-v:verbose
-vv:
-h:以#显示程序包管理执行进度:每个#代表百分之2
rpm -ivh Pacage_FILE ...
[install-options]
--test:测试安装,但不真正执行安装过程:dry run模式;
--nodeps:忽略依赖关系:
--replacepackages
--nodigest:不检查包完整性
--nosignature:不检查来源合法性
--noscripts:安装但不执行脚本片段
%pre:安装前脚本; --nopre
%post:安装后脚本; --nopost
%preun:卸载前脚本 --nopreun
%postun:卸载后脚本 --nopostun
升级:
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
upgrade:安装有旧版程序包,则 "升级";如果不存在旧版程序包则 "安装"
freshen:安装有旧版程序包则"升级",如果不存在旧版程序包,则不执行升级操作;
rpm -Uvh PACKAGE_FILE ...
rpm -Fvh PACKAGE_FILE ...
--oldpackage:降级;
--force:强制升级;
注意:(1) 不要对内核做升级操作;Linux支持多内核版本并存,因此对直接安装新版本内核;
(如果能启动则用,不能启动则用旧版)
(2) 如果源程序包的配置文件安装后曾被修改,升级时,新版本的提供的同一个配置文件并不会直接覆盖
老版本的配置文件,而把新版本的文件重命名(finename.rpmnew)后保留
查询:
rpm {-q|--query} [select-options] [query-options]
[select-options]
-a:所有包
-f fileName:查询指定的文件由那个程序包安装生成
--whatprovides CAPABILITY:查询指定的CAPBILITY由那个包所提供
--whatrequires CAPABILITY:查询指定的CAPBILITY被哪个包所依赖;
[query-options]
--changelog:查询rpm包的changelog
-c :查询程序包的配置文件
-d:查询程序的文档
-i:information 信息
-l:查看指定的程序包安装后生成的所有文件
--scripts:程序包自带的脚本片段
-R:查询指定的程序包所依赖的CAPABILITY;
--provide:列出指定程序包所提供的CAPABILITY
用法:
-qi 包名,-qf 文件名,-qc 包名,-ql 包名,-qd包名
-qpi 包名,-qpl 包名,。。。
-qa
卸载:
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts]
[--notriggers] [--test] PACKAGE_FILE
校验:
rpm {-V|--verify} [select-options] [verify-options]
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 dirffer
包来源合法性验证及完整性验证:
完整性验证:
公钥加密:
对称加密:加密、解密使用同一秘钥;
非对称加密:秘钥是成对的,
public key:公钥
secret key:私钥
导入所需要公钥:
rpm --import /PATH/FROM/GPG-PUBKEY-FILE
Centos7 发行版光盘提供的秘钥文件:RPM-GPG-KEY-Centos-7
数据库重建:
rpm {--initdb|--rebuilddb}
--initdb : 初始化
如果事先不存在数据库,则新建之,否则,不执行任何操作;
rebuilddb 重建
无论当前存在与否,直接重新创建数据库