dpkg-scanpackages createrepo
dpkg-scanpackages
和 createrepo
是两种不同 Linux 发行版(Debian/Ubuntu 和 RHEL/CentOS/Fedora)用于创建本地软件仓库的工具。它们的作用是生成包管理工具(APT/YUM/DNF)所需的元数据,使得离线环境或内网服务器可以通过本地源安装软件包。
1. dpkg-scanpackages
(Debian/Ubuntu APT 本地仓库)
功能
- 扫描
.deb
软件包目录,生成Packages.gz
文件(APT 所需的包索引)。 - 让离线机器通过
file:
或http:
访问本地仓库。
使用方法
(1) 在线环境准备
# 安装所需工具
sudo apt update
sudo apt install dpkg-dev -y
# 创建本地仓库目录
mkdir -p /tmp/local-repo
# 下载需要的 .deb 包(示例:nginx)
apt download nginx
# 或者手动复制已有的 .deb 包到 /tmp/local-repo
cp *.deb /tmp/local-repo/
(2) 生成仓库元数据
cd /tmp/local-repo
dpkg-scanpackages . /dev/null | gzip > Packages.gz
/dev/null
:用于忽略override
文件(通常不需要)。Packages.gz
:APT 依赖的包索引文件。
(3) 在离线机器上使用本地仓库
# 添加本地源
echo "deb [trusted=yes] file:/tmp/local-repo ./" | sudo tee /etc/apt/sources.list.d/local-repo.list
# 更新 APT 缓存
sudo apt update
# 安装软件(如 nginx)
sudo apt install nginx
2. createrepo
(RHEL/CentOS/Fedora YUM/DNF 本地仓库)
功能
- 扫描
.rpm
软件包目录,生成repodata/
元数据(YUM/DNF 所需)。 - 让离线机器通过
file:
或http:
访问本地仓库。
使用方法
(1) 在线环境准备
# 安装 createrepo
sudo yum install createrepo -y # CentOS 7/RHEL 7
sudo dnf install createrepo -y # CentOS 8+/RHEL 8+/Fedora
# 创建本地仓库目录
mkdir -p /tmp/local-repo
# 下载需要的 .rpm 包(示例:httpd)
yum install --downloadonly --downloaddir=/tmp/local-repo httpd
# 或者手动复制已有的 .rpm 包到 /tmp/local-repo
cp *.rpm /tmp/local-repo/
(2) 生成仓库元数据
cd /tmp/local-repo
createrepo .
- 这会生成
repodata/
目录,包含repomd.xml
等元数据文件。
(3) 在离线机器上使用本地仓库
# 添加本地源
sudo cat > /etc/yum.repos.d/local-repo.repo <<EOF
[local-repo]
name=Local Repository
baseurl=file:///tmp/local-repo
enabled=1
gpgcheck=0
EOF
# 清理缓存并更新
sudo yum clean all # CentOS 7/RHEL 7
sudo dnf clean all # CentOS 8+/RHEL 8+/Fedora
sudo yum makecache # CentOS 7
sudo dnf makecache # CentOS 8+
# 安装软件(如 httpd)
sudo yum install httpd # CentOS 7
sudo dnf install httpd # CentOS 8+
3. 对比 dpkg-scanpackages
和 createrepo
工具 | dpkg-scanpackages (Debian/Ubuntu) |
createrepo (RHEL/CentOS/Fedora) |
---|---|---|
包格式 | .deb |
.rpm |
生成的元数据 | Packages.gz |
repodata/ (含 repomd.xml ) |
包管理工具 | APT (apt , apt-get ) |
YUM/DNF (yum , dnf ) |
安装工具 | dpkg -i + apt --fix-broken |
rpm -Uvh + yum localinstall |
是否需要额外工具 | dpkg-dev |
createrepo |
4. 进阶用法
(1) 让本地仓库支持 HTTP 访问
-
Debian/Ubuntu
sudo apt install apache2 -y sudo cp -r /tmp/local-repo /var/www/html/ sudo chmod -R 755 /var/www/html/local-repo
然后在离线机器上使用:
echo "deb [trusted=yes] http://<服务器IP>/local-repo ./" | sudo tee /etc/apt/sources.list.d/local-repo.list
-
RHEL/CentOS
sudo yum install httpd -y sudo cp -r /tmp/local-repo /var/www/html/ sudo chmod -R 755 /var/www/html/local-repo sudo systemctl start httpd
离线机器配置:
sudo cat > /etc/yum.repos.d/local-repo.repo <<EOF [local-repo] name=Local Repository baseurl=http://<服务器IP>/local-repo enabled=1 gpgcheck=0 EOF
(2) 更新本地仓库
- Debian/Ubuntu
cd /tmp/local-repo dpkg-scanpackages . /dev/null | gzip > Packages.gz
- RHEL/CentOS
cd /tmp/local-repo createrepo --update .
5. 总结
dpkg-scanpackages
→ 适用于 Debian/Ubuntu,生成Packages.gz
供 APT 使用。createrepo
→ 适用于 RHEL/CentOS/Fedora,生成repodata/
供 YUM/DNF 使用。- 适用场景:
- 企业内网服务器无法连接外网。
- 批量部署相同软件环境。
- 离线安装特定版本的软件包。
通过这两种工具,可以轻松搭建本地软件仓库,实现离线环境下的软件包管理。