软件包管理
程序源代码 --> 预处理 --> 编译 --> 汇编 --> 链接
静态编译:.a
动态编译:.so
静态和动态链接
链接主要作用是把各个模块之间相互引用的部分处理好,使得各个模块之间能够正确地衔接,分为静态链接和动态链接
.静态链接
.把程序对应的依赖库复制一份到包
.libxxx.a
.嵌入程序包
.升级难,需重新编译
.占用较多空间,迁移容易
.动态链接
.只把依赖加做一个动态链接
.libxxx.so
.连接指向
.占用较少空间,升级方便
包的组成:
二进制文件、库文件、配置文件、帮助文件
.程序包管理器:
debian: deb文件, dpkg包管理器
redhat: rpm文件, rpm包管理器
包命名
rpm包命名方式:
name-VERSION-release.arch.rpm
例:bash-4.2.46-19.el7.x86_64.rpm
包之间:可能存在依赖关系,甚至循环依赖
解决依赖包管理工具:
yum:rpm包管理器的前端工具
dnf:Fedora 18+ rpm包管理器前端管理工具
库文件
查看二进制程序所依赖的库文件
ldd /PATH/TO/BINARY_FILE
管理及查看本机装载的库文件
ldconfig 加载配置文件中指定的库文件
/sbin/ldconfig –p 显示本机已经缓存的所有可用库文件名及文件路径映射关系
配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
缓存文件:/etc/ld.so.cache
rpm包管理
CentOS系统上使用rpm命令管理程序包:
安装、卸载、升级、查询、校验、数据库维护
rpm包安装
--test: 测试安装,但不真正执行安装,即dry run模式
--nodeps:忽略依赖关系
--replacepkgs | replacefiles
--nosignature: 不检查来源合法性c
--nodigest:不检查包完整性
--noscripts:不执行程序包脚本
rpm包升级
upgrade:安装有旧版程序包,则“升级”
如果不存在旧版程序包,则“安装”
freshen:安装有旧版程序包,则“升级”
如果不存在旧版程序包,则不执行升级操作
--oldpackage:降级
--force: 强制安装
包查询
-a:所有包
-f:查看指定的文件由哪个程序包安装生成
-p rpmfile:针对尚未安装的程序包文件做查询操作
包校验
包来源的合法性验证及完整性验证
完整性验证:SHA256
来源合法性验证:RSA
公钥加密
对称加密:加密、解密使用同一密钥
非对称加密:密钥是成对儿的
public key: 公钥,公开所有人
secret key: 私钥, 不能公开
导入所需要公钥
rpm -K|checksig rpmfile 检查包的完整性和签名
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
------------------------------------------------------------------------------------
yum
YUM: Yellowdog Update Modifier,rpm的前端程序,可解决软件包相关依赖性,可在多个库之间定位软件包,up2date的替代工具
文件服务器:
http://
https://
ftp://
file://
yum配置文件
yum客户端配置文件:
/etc/yum.conf:为所有仓库提供公共配置
/etc/yum.repos.d/*.repo:为仓库的指向提供配置
创建yum仓库
保存并退出
yum命令
显示仓库列表:
yum repolist
显示程序包:
yum list
安装程序包:
yum install
升级程序包:
yum update
检查可用升级:
yum check-upd
卸载程序包:
yum remove
编译安装
第一步:configure脚本
选项:指定安装位置、指定启用的特性
--help: 获取其支持使用的选项
选项分类:
安装路径设定:
--prefix=/PATH:指定默认安装位置,默认为/usr/local/
--sysconfdir=/PATH:配置文件安装位置
Optional Features: 可选特性
--disable-FEATURE
--enable-FEATURE[=ARG]
.Optional Packages: 可选包
--with-PACKAGE[=ARG] 依赖包
--without-PACKAGE 禁用依赖关系
.注意:通常被编译操作依赖的程序包,需要安装此程序包的“开发”组件,其包名一般类似于name-devel-VERSION
第二步:make
第三步:make install
编译安装前先解压压缩包
进入解压下的文件目录里,进行安装
预编译config配置
编译---make ,make install 完成后