名称 | Name: createrepo
版本 | Version: 1.0.0
作者 | Author: OS Build Agent
领域 | Domain: RPM Repository Management
专业的 RPM 仓库创建和管理技能,支持创建本地 YUM/DNF 仓库、仓库元数据生成、仓库同步等功能。
Professional RPM repository creation and management skill supporting local YUM/DNF repository creation, metadata generation, and repository synchronization.
bash
# RHEL/Fedora
dnf install createrepo_c deltarpm
# openSUSE
zypper install createrepo_c
# Debian/Ubuntu (交叉编译)
apt-get install createrepo-c
text
/path/to/repo/
├── x86_64/
│ ├── Packages/ # RPM 包
│ ├── repodata/ # 元数据
│ │ ├── primary.xml.gz
│ │ ├── filelists.xml.gz
│ │ ├── other.xml.gz
│ │ └── repomd.xml
│ └── comps.xml # 包组
├── src/ # 源码包
└── aarch64/ # 其他架构
bash
# 创建基本仓库
# Create basic repository
createrepo /path/to/repo
# 创建仓库(指定输出目录)
# Create repo (specify output dir)
createrepo --outputdir /path/to/output /path/to/packages
# 快速创建(跳过某些元数据)
# Quick create (skip some metadata)
createrepo --skip-stat /path/to/repo
# 带校验和的仓库
# Repository with checksums
createrepo --checksum sha256 /path/to/repo
bash
# 增量更新元数据
# Incremental metadata update
createrepo --update /path/to/repo
# 增量更新(带数据库)
# Incremental update (with database)
createrepo --update --deltas /path/to/repo
# 仅更新特定包
# Update specific packages only
createrepo --update \
--pkglist packages.txt \
/path/to/repo
bash
# 创建带包组的仓库
# Create repo with package groups
createrepo --groupfile comps.xml /path/to/repo
# 更新包组
# Update package groups
createrepo --update \
--groupfile comps.xml \
/path/to/repo
# comps.xml 示例
# comps.xml example
cat > comps.xml << 'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE comps PUBLIC "-//Red Hat, Inc.//DTD Comps info//EN" "comps.dtd">
<comps>
<group>
<id>mygroup</id>
<name>My Group</name>
<description>Group description</description>
<default>true</default>
<uservisible>true</uservisible>
<packagelist>
<packagereq type="mandatory">package1</packagereq>
<packagereq type="optional">package2</packagereq>
</packagelist>
</group>
</comps>
EOF
bash
# 为特定架构创建仓库
# Create repo for specific architecture
createrepo --arch x86_64 /path/to/repo/x86_64
# 创建源码仓库
# Create source repository
createrepo --arch src /path/to/repo/src
# 创建 noarch 仓库
# Create noarch repository
createrepo --arch noarch /path/to/repo/noarch
# 合并多架构
# Merge multi-architecture
createrepo --baseurl http://example.com/repo \
/path/to/repo
bash
# 导入 GPG 密钥
# Import GPG key
rpm --import /path/to/RPM-GPG-KEY-myrepo
# 签名所有包
# Sign all packages
for rpm in /path/to/repo/Packages/*.rpm; do
rpm --addsign "$rpm"
done
# 生成仓库元数据签名
# Generate repo metadata signature
gpg --detach-sign --armor \
/path/to/repo/repodata/repomd.xml
# 验证仓库
# Verify repository
gpg --verify \
/path/to/repo/repodata/repomd.xml.asc \
/path/to/repo/repodata/repomd.xml
bash
# 同步远程仓库
# Sync remote repository
reposync --repoid=fedora \
--download_path=/path/to/mirror
# 同步特定架构
# Sync specific architecture
reposync --repoid=fedora \
--arch=x86_64 \
--download_path=/path/to/mirror
# 同步最新包
# Sync latest packages only
reposync --repoid=fedora \
--newest-only \
--download_path=/path/to/mirror
# 同步并生成元数据
# Sync and generate metadata
reposync --repoid=fedora \
--download_path=/path/to/mirror
createrepo /path/to/mirror/fedora
bash
# 列出仓库信息
# List repo info
repocreate --info /path/to/repo
# 列出国包
# List packages
repoquery --repofrompath="myrepo,/path/to/repo" \
--list "*"
# 查询包依赖
# Query package dependencies
repoquery --repofrompath="myrepo,/path/to/repo" \
--requires package-name
# 查询包提供
# Query package provides
repoquery --repofrompath="myrepo,/path/to/repo" \
--provides package-name
ini
# /etc/yum.repos.d/myrepo.repo 示例
# /etc/yum.repos.d/myrepo.repo example
[myrepo]
name=My Repository
baseurl=http://example.com/repo/$releasever/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-myrepo
metadata_expire=1h
repo_gpgcheck=1
# 本地仓库示例
# Local repo example
[mylocalrepo]
name=My Local Repository
baseurl=file:///path/to/repo
enabled=1
gpgcheck=0
bash
# 使用旧元数据加速更新
# Use old metadata for faster update
createrepo --update \
--oldpackagedir /path/to/old/packages \
/path/to/repo
# 生成增量元数据
# Generate incremental metadata
createrepo --update \
--retain-old-md 5 \
/path/to/repo
bash
# 生成 delta RPM
# Generate delta RPM
deltarpm /path/to/old.rpm \
/path/to/new.rpm \
/path/to/delta.rpm
# 创建带 delta 的仓库
# Create repo with deltas
createrepo --deltas \
--max-delta-rpm-size 100M \
/path/to/repo
# 仅生成 delta
# Generate deltas only
deltarpm --server \
--output-dir /path/to/deltas \
/path/to/packages
bash
# 压缩元数据
# Compress metadata
createrepo --compress-type xz \
/path/to/repo
# 指定校验和类型
# Specify checksum type
createrepo --checksum sha256 \
/path/to/repo
# 跳过统计信息
# Skip statistics
createrepo --skip-stat \
/path/to/repo
# 限制 worker 数量
# Limit worker count
createrepo --workers 4 \
/path/to/repo
选项Option描述Description-ooutputdir输出目录Output directory--updateupdate增量更新Incremental update--deltasdeltas生成 delta RPMGenerate delta RPM--groupfilegroupfile包组文件Package groups file--checksumchecksum校验和类型Checksum type--compress-typecompress压缩类型Compression type--skip-statskip stat跳过统计Skip statistics--workersworkersworker 数量Worker count
选项Option描述Description--repoidrepo id仓库 IDRepository ID--download-pathdownload path下载路径Download path--archarchitecture架构Architecture--newest-onlynewest only仅最新包Only latest packages
bash
# 清理并重新生成
# Clean and regenerate
rm -rf /path/to/repo/repodata
createrepo /path/to/repo
# 验证元数据
# Verify metadata
repomd-check /path/to/repo/repodata/repomd.xml
bash
# 查找冲突包
# Find conflicting packages
repoquery --repofrompath="myrepo,/path/to/repo" \
--whatprovides <capability>
# 删除冲突包
# Remove conflicting package
rm /path/to/repo/Packages/conflicting-*.rpm
createrepo --update /path/to/repo
MIT License