dpkg-scanpackages createrepo

dpkg-scanpackagescreaterepo 是两种不同 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-scanpackagescreaterepo

工具 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 使用。
  • 适用场景
    • 企业内网服务器无法连接外网。
    • 批量部署相同软件环境。
    • 离线安装特定版本的软件包。

通过这两种工具,可以轻松搭建本地软件仓库,实现离线环境下的软件包管理。

posted @ 2025-04-26 23:02  mofy  阅读(125)  评论(0)    收藏  举报