Linux安装包 deb 与 rpm 对比

- Debian - pkdk
- Red Hat - rpm
包内部结构
deb包内部结构


Package 包名(tree)、Version 版本(1.5.1.1-1)、Architecture 目标机架构(i386 386及以后)、Maintainer 维护者(Ubuntu MOTU Developers)、Original-Maintainer 原维护者(Florian Ernst)、Installed-Size 安装后大小(92K)、Depends 依赖软件包(libc6 不低于 2.6-1 版本)、Section 包分类(工具)、Priority 优先级(可选)、Description 包描述、Homepage 软件主页
rpm包内部结构

依赖关系类型
bash
# DEB 依赖类型
Depends: # 必须的依赖
Recommends: # 推荐的依赖(默认安装)
Suggests: # 建议的依赖(手动安装)
Enhances: # 增强其他包的功能
Pre-Depends: # 必须在配置前安装的依赖
Breaks: # 会破坏此包的包
Conflicts: # 冲突的包
Replaces: # 替换的包
Provides: # 虚拟包提供
# RPM 依赖类型
Requires: # 必须的依赖
Recommends: # 推荐的依赖(DNF支持)
Suggests: # 建议的依赖(DNF支持)
Enhances: # 增强依赖(DNF支持)
Conflicts: # 冲突的包
Obsoletes: # 废弃的包
Provides: # 虚拟包提供
包构建对比
bash
# 1. DEB 构建环境
sudo apt install build-essential devscripts debhelper dh-make
# 创建构建目录结构
dh_make --createorig -s -n -p myapp_1.0
# 2. DEB 构建流程
cd myapp-1.0/
dpkg-buildpackage -us -uc # 不签名
# 生成:
# myapp_1.0-1_amd64.deb # 二进制包
# myapp_1.0-1_amd64.changes # 变更日志
# myapp_1.0-1.dsc # 源代码描述
# myapp_1.0.orig.tar.gz # 原始源代码
# 3. DEB 规范检查
lintian package.deb # 检查DEB包规范
debc package.deb # 查看包内容
bash
# 1. RPM 构建环境
sudo yum install rpm-build rpmdevtools
# 创建构建目录结构
rpmdev-setuptree
# 目录结构:
# ~/rpmbuild/
# ├── SOURCES/ # 源代码
# ├── SPECS/ # spec文件
# ├── BUILD/ # 构建目录
# ├── RPMS/ # 二进制RPM
# └── SRPMS/ # 源码RPM
# 2. RPM 构建流程
rpmbuild -ba myapp.spec
# 生成:
# ~/rpmbuild/RPMS/x86_64/myapp-1.0-1.x86_64.rpm # 二进制RPM
# ~/rpmbuild/SRPMS/myapp-1.0-1.src.rpm # 源码RPM
# 3. RPM 规范检查
rpmlint myapp.spec # 检查spec文件
rpmlint package.rpm # 检查RPM包
rpm -qpi package.rpm # 查看包信息
操作命令对比

bash
rpm -qa|grep 包名 # 验证是否已经安装了某个软件
包管理工具对比

安装工具对比
deb - apt
apt 包含了apt-get ,apt更适合日常使用,而apt-get更受脚本开发。

bash
apt-cache depends [软件名] # 查询依赖
Rhel - yum
- RPM 包安装的最大的缺点: 依赖性太强
- yum是一个专门为了解决包的依赖关系而存在的软件包管理器
使用 yum 安装 RPM 包时,yum 会先从服务器端下载包的依赖性文件,通过分析此文件从服务器端一次性下载所有相关的 RPM 包并进行安装
yum 查询命令
bash
yum list #查询所有已安装和可安装的软件包
yum list [包名] #查询执行软件包的安装情况
yum search [关键字]#从 yum 源服务器上查找与关键字相关的所有软件包
yum info [包名] #查询执行软件包的详细信息
yum deplist [软件名] # 查询软件依赖的其他命令,库等等
yum 安装
bash
yum -y install [包名]
yum 升级
bash
yum -y update
yum -y update [特定软件包]
yum卸载
bash
yum remove [包名]
使用实例
Debian - pkdk
- deb 是 Debian 系 Linux 使用的软件包格式,使用dpkg管理。dpkg 是 Debian 的"原生"包管理软件
解包
bash
dpkg -X # 将 deb 包的内容文件释放出来
dpkg -e # 将 deb 包的控制信息释放出来

打包
准备:
bash
1. control 配置 # 见包内部结构,路径为DEBIAN/control
2. md5sums 文件 #软件包中各文件的 md5 校验值 md5sum `find usr -type f` > DEBIAN/md5sums
打包:
bash
cd ..
dpkg -b fakeroot/ foo.deb
# 输出foo.deb
安装
bash
sudo dpkg -i foo.deb
Rhel - rpm
选择建议
bash
# 选择 DEB/APT 如果:
1. 你是新手或桌面用户
2. 需要最新软件版本
3. 使用 Ubuntu 云服务器
4. 开发桌面或移动应用
5. 需要广泛的社区支持
# 选择 RPM/DNF 如果:
1. 企业服务器环境
2. 需要长期稳定支持
3. 金融/政府机构
4. 已有 Red Hat 技术栈
5. 需要商业技术支持
参考:
1\] [【Linux】rpm,deb包管理](https://blog.csdn.net/SGchi/article/details/131470745?spm=1001.2101.3001.6650.8&utm_medium=distribute.pc_relevant.none-task-blog-2~default~BlogOpenSearchComplete~Rate-8-131470745-blog-155538748.235%5Ev43%5Epc_blog_bottom_relevance_base3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~BlogOpenSearchComplete~Rate-8-131470745-blog-155538748.235%5Ev43%5Epc_blog_bottom_relevance_base3&utm_relevant_index=9) \[2\] [解密 Linux 包管理:apt 和 apt-get 的区别](https://www.sysgeek.cn/apt-vs-apt-get/) \[3\] [Linux yum源配置以及yum命令讲解](https://learnku.com/articles/48649) \[4\] [制作DEB包](https://ziboyi.github.io/%E5%88%B6%E4%BD%9CDEB%E5%8C%85/)