马哥博客作业第四周
软件包管理
一、软件运行和编译
1. ABI : Application Binary Interface
2. API : Application Programming Interface
实现过程:C 程序源代码 --> 预处理 --> 编译 --> 汇编 --> 链接
主要经过的4个过程:
二、静态链接和动态链接
静态链接
- 把程序对应的依赖库复制一份到包
- 生成模块文件libxxx.a
- 嵌入程序包 升级难,需重新编译
- 占用较多空间,迁移容易
动态链接
- 只把依赖加做一个动态链接
- 生成模块文件libxxx.so
- 连接指向
- 占用较少空间,升级方便
三、软件包和包管理器
1.软件包的文件分类: 二进制文件 库文件 配置文件 帮助文件
2.主流的程序包管理器:redhat:rpm文件, rpm 包管理器
debian:deb文件, dpkg 包管理器
3.包的依赖工具:
- yum:rpm包管理器的前端工具
- dnf:Fedora 18+ rpm包管理器前端管理工具,CentOS 8 版代替 yum
- apt:deb包管理器前端工具
- zypper:suse上的rpm前端管理工具
4.程序包管理器相关文件
包文件组成(每个包独有): 包内的文件 元数据(包的名称、版本、依赖性、描述) 可能会有包安装或卸载是运行的脚本
数据库(公共)/var/lib/rpm: 程序包名称及版本 依赖关系 功能说明 包安装后生成的个文件路径及校验码信息
5.获取程序包的途径
CentOS镜像:
https://www.centod.org/download/
http://miirors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com
Fedora-EPEL
http://pkgs.org
http://rpmfind.net
http://rpm.pbone.net
https://sourceforge.net/
四、包管理器rpm
功能: 安装 卸载 升级 查询 校检 数据库维护
格式:rpm {-i|--install} [install-options] PACKAGE_FILE
选项:
-i 安装 -v: 显示过程
-vv: -h: 以#显示程序包管理执行进度
rpm包安装:
--test: 测试安装,但不真正执行安装,即dry run模式
--nodeps: 忽略依赖关系
--replacepkgs | replacefiles
--nosignature: 不检查来源合法性
--nodigest: 不检查包完整性
--noscripts: 不执行程序包脚本
%pre: 安装前脚本 --nopre
%post: 安装后脚本 --nopost
%preun: 卸载前脚本 --nopreun
%postun: 卸载后脚本 --nopostun
升级和降级
有旧版,升级rpm -U [install-option] PACKAGE_FILE
没有旧版,不升级rpm -F [install-option] PACKAGE_FILE
示例rpm -Uvh PACKAGE_FILE
[install-options]--oldpackage
降级--force
强制安装
rpm包查询
格式:rpm {-q|--query} [select-options] [query-options]
选项
[select-options]
- -a:所有包
- -f:查看指定的文件由哪个程序包安装生成
- -p rpmfile:针对尚未安装的程序包文件做查询操作
[query-options]
- --changelog:查询rpm包的changelog
- -c:查询程序的配置文件
- -d:查询程序的文档
- -i:information
- -l:查看指定的程序包安装后生成的所有文件
- --scripts:程序包自带的脚本
#和CAPABILITY相关
- --whatprovides CAPABILITY:查询指定的CAPABILITY由哪个包所提供
- --whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖
- --provides:列出指定程序包所提供的CAPABILITY
- -R:查询指定的程序包所依赖的CAPABILITY
查看指定的包安装后生成的所有文件: rpm -ql httpd
rpm包卸载: rpm -e [OPTIONS] PACKAGE_FILE
rpm包校验:rpm -V [select-option] [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 differ
. (点) 表示当前位置代表的字符含义一致
c 所在的位置表示文件类型
c 配置文件
d 文件数据文件
g 该文件不属于某个文件(极少情况)
l 许可证文件(license file)
r 自述文件(READ ME)
rpm数据库
数据库重建/var/lib/rpm
rpm {--initdb| --rebuiddb}
initdb
初始化
rebuilddb
重建
五、yum和dnf
1. yum客户端配置文件
/etc/yum.conf #为所有仓库提供公共配置
/etc/yum.repos.d/*.repo: #为每个仓库的提供配置文件
/var/log/yum.log #日志文件
2、yum-config-manager命令.
#增加仓库 yum-config-manager --add-repo URL或file
#禁用仓库 yum-config-manager --disable “仓库名"
#启用仓库 yum-config-manager --enable “仓库名”
3、yum命令
格式:yum [options] [command] [package ...]
选项:
-y #自动回答为“yes”
-q #静默模式
--nogpgcheck #禁止进行
gpg check --enablerepo=repoidglob #临时启用此处指定的repo,支持通配符,如:”*“
--disablerepo=repoidglob #临时禁用此处指定的repo,和上面语句同时使用,放在后面的生效
4.1显示仓库列表:yum repolist [all|enabled|disabled]
4.2显示程序包:yum list
yum list [all | glob_exp1] [glob_exp2] [...]
yum list {available|installed|updates} [glob_exp1] [...]
4.3安装程序包:yum install package1 [package2] [...]
yum reinstall package1 [package2] [...] #重新安装
4.4卸载程序包:yum remove | erase package1 [package2] [...]
4.5升级和降级:yum update [package1] [package2] [...]
yum downgrade package1 [package2] [...] (降级)
4.6查看程序包:yum info [...]
4.7查看指定的特性(可以是某个文件)是由哪个程序包所提供的
yum provides | whatprovides feature1 [feature2] [...]
注意:文件要写全路径,而不只是文件名,否则无法查询到
4.8以指定的关键字搜索程序包名及summary信息
yum search string1 [string2] [...]
4.9查看指定包所依赖的capabilities
yum deplist package1 [package2] [...]
4.10仓库缓存:yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
4.11构建仓库:yum makecache
4.12安装及升级本地程序包:yum localinstall|install rpmfile1 [rpmfile2] [...]
yum localupdate|update rpmfile1 [rpmfile2] [...]
4.13包组管理的相关命令:yum grouplist [hidden] [groupwildcard] [...]
yum groupinstall group1 [group2] [...]
yum groupupdate group1 [group2] [...]
yum groupremove group1 [group2] [...]
yum groupinfo group1 [...]
4.14创建私有yum仓库:createrepo [options] <directory>
五、DNF 用法和yum一样
5.1配置文件:
/etc/dnf/dnf.conf
5.2仓库文件:
/etc/yum.repos.d/ *.repo
5.3日志:
/var/log/dnf.rpm.log
/var/log/dnf.log
5.4yum 和 dnf 失败主要原因:
yum的配置文件格式或路径错误 解决方法: 检查/etc/yum.repos.d/*.repo文件格式 y
um cache 解决方法: yum clean all
网络不通: 解决方法: 网卡配置