前置知识: 运维

包管理与仓库

00:00
2 min Intermediate 2026/6/14

包管理与仓库:RPM/DEB包管理、YUM/APT仓库、Artifactory与制品管理

1. RPM 包管理

1.1 RPM 基础

RPM(Red Hat Package Manager)是 Red Hat 系列管理式。

# 安装
rpm -ivh package.rpm      # 安装并显示进度
rpm -Uvh package.rpm      # 升级安装
rpm -Fvh package.rpm      # 仅升级(已安装才升级)

# 查询
rpm -qa                   # 列出所有已安装包
rpm -qi package           # 查看包信息
rpm -ql package           # 列出包文件
rpm -qf /path/file        # 查询文件所属包
rpm -qR package           # 查看依赖

# 卸载
rpm -e package            # 卸载包
rpm -e --nodeps package   # 忽略依赖卸载

# 验证
rpm -V package            # 验证包完整性
rpm --import RPM-GPG-KEY  # 导入GPG密钥

1.2 RPM 包结构

package-name-version-release.architecture.rpm
例: nginx-1.24.0-1.el9.x86_64.rpm

名称: nginx
版本: 1.24.0
发行号: 1.el9
架构: x86_64

RPM 内部结构

├── HEADER(元数据)
│   ├── 名称、版本、描述
│   ├── 依赖关系
│   ├── 安装/卸载脚本
│   └── 文件列表和校验和
└── PAYLOAD(cpio 归档 + gzip)
    └── 实际文件

1.3 SPEC 文件

构建 RPM 配置文件

Name:           myapp
Version:        1.0.0
Release:        1%{?dist}
Summary:        My Application

License:        MIT
URL:            https://example.com
Source0:        %{name}-%{version}.tar.gz

BuildRequires:  gcc, make
Requires:       openssl >= 1.1

%description
My application description.

%prep
%setup -q

%build
%configure
make %{?_smp_mflags}

%install
make install DESTDIR=%{buildroot}

%files
%doc README.md
%license LICENSE
%{_bindir}/myapp
%{_mandir}/man1/myapp.1*

%changelog
* Sat Jun 14 2026 fanquanpp <fanquanpp@example.com> - 1.0.0-1
- Initial package

2. DEB 包管理

2.1 dpkg 基础

# 安装
dpkg -i package.deb       # 安装
dpkg -r package           # 卸载(保留配置)
dpkg -P package           # 完全卸载

# 查询
dpkg -l                   # 列出所有已安装包
dpkg -l package           # 查看包状态
dpkg -L package           # 列出包文件
dpkg -S /path/file        # 查询文件所属包
dpkg -s package           # 查看包详细信息

2.2 DEB 包结构

package.deb
├── debian-binary        # 版本信息
├── control.tar.gz       # 控制信息
│   ├── control          # 包元数据
│   ├── preinst          # 安装前脚本
│   ├── postinst         # 安装后脚本
│   ├── prerm            # 卸载前脚本
│   └── postrm           # 卸载后脚本
└── data.tar.gz          # 实际文件

control 文件

Package: myapp
Version: 1.0.0
Architecture: amd64
Maintainer: fanquanpp <fanquanpp@example.com>
Description: My Application
 My application description.
Depends: libc6 (>= 2.31), libssl3

3. YUM/DNF 仓库

3.1 YUM/DNF 基础

# 安装
dnf install package
dnf install package-1.0.0   # 指定版本

# 更新
dnf update                  # 更新所有
dnf update package          # 更新指定包

# 查询
dnf search keyword          # 搜索包
dnf info package            # 查看包信息
dnf list installed          # 列出已安装包
dnf list available          # 列出可用包

# 依赖
dnf deplist package         # 查看依赖
dnf repoquery --requires package  # 查询依赖

# 清理
dnf clean all               # 清理缓存
dnf autoremove              # 删除不需要的依赖

3.2 配置仓库

# /etc/yum.repos.d/myrepo.repo
[myrepo]
name=My Custom Repository
baseurl=https://repo.example.com/centos/$releasever/$basearch/
enabled=1
gpgcheck=1
gpgkey=https://repo.example.com/RPM-GPG-KEY
priority=1

3.3 创建本地仓库

# 安装工具
dnf install createrepo

# 创建仓库
mkdir -p /repo/rpms
cp *.rpm /repo/rpms/
createrepo /repo/rpms/

# 更新仓库
createrepo --update /repo/rpms/

4. APT 仓库

4.1 APT 基础

# 安装
apt install package
apt install package=1.0.0    # 指定版本

# 更新
apt update                   # 更新索引
apt upgrade                  # 升级所有
apt full-upgrade             # 完整升级(可删除包)

# 查询
apt search keyword
apt show package
apt list --installed
apt depends package

# 清理
apt autoremove
apt clean

4.2 配置源

# /etc/apt/sources.list
deb https://mirrors.aliyun.com/ubuntu/ jammy main restricted
deb https://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted
deb https://mirrors.aliyun.com/ubuntu/ jammy-security main restricted

式:deb URL distribution component

4.3 创建 APT 仓库

# 安装工具
apt install dpkg-dev

# 创建仓库
mkdir -p /repo/debs
cp *.deb /repo/debs/
cd /repo
dpkg-scanpackages debs / | gzip > debs/Packages.gz

5. 制品仓库管理

5.1 Artifactory

JFrog Artifactory 是企业级制品仓库

仓库类型说明
Local本地存储内部制品
Remote远程代理外部仓库
Virtual虚拟聚合多个仓库

支持格式:Maven、npm、Docker、PyPI、RPM、DEB、Go、Helm 等。

5.2 Nexus

Sonatype Nexus 是另一个流行的制品仓库

Nexus
├── maven-releases (hosted)    # 发布仓库
├── maven-snapshots (hosted)   # 快照仓库
├── maven-central (proxy)      # 代理中央仓库
└── maven-public (group)       # 组仓库

5.3 制品版本管理

语义化版本(SemVer)

  • MAJOR:不兼容的 API 变更
  • MINOR:向后兼容的功能新增
  • PATCH:向后兼容的问题修复

版本范围

>=1.0.0 <2.0.0    # 兼容1.x
^1.2.3            # >=1.2.3 <2.0.0
~1.2.3            # >=1.2.3 <1.3.0
1.*               # 1.x任意版本

6. 安全与签名

6.1 GPG 签名

# 生成密钥对
gpg --full-generate-key

# 签名 RPM
rpm --addsign package.rpm

# 验证签名
rpm --checksig package.rpm

# 签名 DEB
dpkg-sig -s builder -k KEYID package.deb

6.2 仓库安全

  • 启用 GPG 检查(gpgcheck=1)
  • 使用 HTTPS 传输
  • 定期签名密钥
  • 实施访问控制策略

知识检测

学习进度

-- 已学文档
--% 知识覆盖率

学习推荐

专注模式