包仓库配置

核心知识点

1. 包仓库基础

1.1 什么是包仓库

包仓库是存储软件包及其元数据的中央位置,包管理器通过访问仓库来获取软件包。包仓库可以是官方的、第三方的或本地的。

包仓库的组成:

组成部分 描述
软件包 二进制或源码形式的软件
元数据 软件包的描述、依赖关系、版本等信息
索引文件 用于快速查找软件包的数据结构
GPG 密钥 用于验证软件包签名的密钥

1.2 仓库类型

按来源分类:

类型 描述 优点 缺点
官方仓库 由发行版官方维护 安全可靠,兼容性好 软件版本可能较旧
第三方仓库 由社区或厂商维护 提供更多软件和更新版本 可能存在安全风险
本地仓库 本地搭建的仓库 速度快,可控性强 需要自行维护
镜像仓库 官方仓库的镜像 下载速度快 可能存在同步延迟

按内容分类:

类型 描述 示例
主仓库 核心软件包 CentOS Base, Ubuntu Main
更新仓库 安全更新和错误修复 CentOS Updates, Ubuntu Updates
扩展仓库 额外的软件包 EPEL, Ubuntu Universe
测试仓库 测试中的软件包 Fedora Updates-Testing
源码仓库 软件源码包 CentOS Source, Ubuntu Source

2. YUM/DNF 仓库配置

2.1 仓库配置文件

配置文件位置:

位置 描述
/etc/yum.conf 主配置文件
/etc/yum.repos.d/ 仓库配置目录
/etc/dnf/dnf.conf DNF 主配置文件(CentOS 8+)

仓库配置文件格式:

[repo-id]
name=Repository Name
baseurl=url://path/to/repo
enabled=1
gpgcheck=1
gpgkey=file:///path/to/gpgkey

配置选项说明:

选项 描述 默认值
name 仓库名称
baseurl 仓库地址
mirrorlist 镜像列表地址
enabled 是否启用仓库 1
gpgcheck 是否检查 GPG 签名 1
gpgkey GPG 密钥地址
priority 仓库优先级(需要优先级插件) 99
cost 仓库成本(DNF) 1000
exclude 排除的软件包
includepkgs 包含的软件包

2.2 官方仓库配置

CentOS 7 官方仓库:

# CentOS-Base.repo
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

[updates]
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra
baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

[extras]
name=CentOS-$releasever - Extras
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra
baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

[centosplus]
name=CentOS-$releasever - Plus
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra
baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

CentOS 8 官方仓库:

# CentOS-Linux-BaseOS.repo
[baseos]
name=CentOS Linux $releasever - BaseOS
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=BaseOS&infra=$infra
baseurl=http://mirror.centos.org/$contentdir/$releasever/BaseOS/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial

# CentOS-Linux-AppStream.repo
[appstream]
name=CentOS Linux $releasever - AppStream
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=AppStream&infra=$infra
baseurl=http://mirror.centos.org/$contentdir/$releasever/AppStream/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial

2.3 第三方仓库配置

EPEL 仓库:

# 安装 EPEL 仓库
yum install epel-release
# 或
dnf install epel-release

# 验证配置
cat /etc/yum.repos.d/epel.repo

RPM Fusion 仓库:

# 安装 RPM Fusion 自由软件仓库
yum install https://download1.rpmfusion.org/free/el/rpmfusion-free-release-7.noarch.rpm

# 安装 RPM Fusion 非自由软件仓库
yum install https://download1.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-7.noarch.rpm

# 验证配置
cat /etc/yum.repos.d/rpmfusion-free.repo

ELRepo 仓库:

# 导入 ELRepo GPG 密钥
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

# 安装 ELRepo 仓库
rpm -Uvh https://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm

# 验证配置
cat /etc/yum.repos.d/elrepo.repo

3. APT 仓库配置

3.1 仓库配置文件

配置文件位置:

位置 描述
/etc/apt/sources.list 主仓库配置文件
/etc/apt/sources.list.d/ 额外仓库配置目录
/etc/apt/preferences 包优先级配置文件
/etc/apt/preferences.d/ 包优先级配置目录

仓库配置文件格式:

deb <uri> <distribution> <component1> <component2> ...
deb-src <uri> <distribution> <component1> <component2> ...

配置选项说明:

选项 描述 示例
deb 二进制包仓库 deb http://archive.ubuntu.com/ubuntu/ jammy main
deb-src 源码包仓库 deb-src http://archive.ubuntu.com/ubuntu/ jammy main
&lt;uri&gt; 仓库地址 http://archive.ubuntu.com/ubuntu/
&lt;distribution&gt; 发行版代号 jammy, bullseye
&lt;component&gt; 仓库组件 main, restricted, universe, multiverse

3.2 官方仓库配置

Ubuntu 官方仓库:

deb http://archive.ubuntu.com/ubuntu/ jammy main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ jammy main restricted universe multiverse

deb http://archive.ubuntu.com/ubuntu/ jammy-security main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ jammy-security main restricted universe multiverse

deb http://archive.ubuntu.com/ubuntu/ jammy-updates main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ jammy-updates main restricted universe multiverse

deb http://archive.ubuntu.com/ubuntu/ jammy-backports main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ jammy-backports main restricted universe multiverse

Debian 官方仓库:

deb http://deb.debian.org/debian/ bullseye main non-free contrib
deb-src http://deb.debian.org/debian/ bullseye main non-free contrib

deb http://security.debian.org/debian-security bullseye-security main non-free contrib
deb-src http://security.debian.org/debian-security bullseye-security main non-free contrib

deb http://deb.debian.org/debian/ bullseye-updates main non-free contrib
deb-src http://deb.debian.org/debian/ bullseye-updates main non-free contrib

deb http://deb.debian.org/debian/ bullseye-backports main non-free contrib
deb-src http://deb.debian.org/debian/ bullseye-backports main non-free contrib

3.3 第三方仓库配置

PPA 仓库:

# 添加 PPA 仓库
add-apt-repository ppa:user/ppa

# 更新软件包列表
apt update

# 查看配置
cat /etc/apt/sources.list.d/user-ppa-*.list

# 删除 PPA 仓库
add-apt-repository --remove ppa:user/ppa

Google Chrome 仓库:

# 导入 Google GPG 密钥
wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | apt-key add -

# 添加 Google Chrome 仓库
echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google-chrome.list

# 更新软件包列表
apt update

# 安装 Google Chrome
apt install google-chrome-stable

Docker 仓库:

# 安装依赖
apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common

# 导入 Docker GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -

# 添加 Docker 仓库
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

# 更新软件包列表
apt update

# 安装 Docker
apt install docker-ce docker-ce-cli containerd.io

4. 本地仓库搭建

4.1 RPM 本地仓库

创建步骤:

# 1. 安装 createrepo 工具
yum install createrepo

# 2. 创建仓库目录
mkdir -p /var/www/html/repo

# 3. 复制 RPM 包到仓库目录
cp *.rpm /var/www/html/repo/

# 4. 初始化仓库
createrepo /var/www/html/repo/

# 5. 更新仓库
createrepo --update /var/www/html/repo/

# 6. 配置本地仓库文件
cat > /etc/yum.repos.d/local.repo << EOF
[local]
name=Local Repository
baseurl=file:///var/www/html/repo/
enabled=1
gpgcheck=0
EOF

# 7. 清理缓存并重建
yum clean all
yum makecache

# 8. 验证配置
yum repolist

使用 HTTP 服务提供仓库:

# 1. 安装 HTTP 服务
yum install httpd

# 2. 启动并启用 HTTP 服务
systemctl start httpd
systemctl enable httpd

# 3. 配置防火墙
firewall-cmd --add-service=http --permanent
firewall-cmd --reload

# 4. 其他机器配置仓库
cat > /etc/yum.repos.d/remote.repo << EOF
[remote]
name=Remote Repository
baseurl=http://server-ip/repo/
enabled=1
gpgcheck=0
EOF

# 5. 清理缓存并重建
yum clean all
yum makecache

4.2 DEB 本地仓库

创建步骤:

# 1. 安装 dpkg-dev 工具
apt install dpkg-dev

# 2. 创建仓库目录
mkdir -p /var/www/html/repo

# 3. 复制 DEB 包到仓库目录
cp *.deb /var/www/html/repo/

# 4. 生成仓库索引
cd /var/www/html/repo
dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz

# 5. 配置本地仓库文件
cat > /etc/apt/sources.list.d/local.list << EOF
deb [trusted=yes] file:///var/www/html/repo/ ./
EOF

# 6. 更新软件包列表
apt update

# 7. 验证配置
apt-cache policy

使用 HTTP 服务提供仓库:

# 1. 安装 HTTP 服务
apt install apache2

# 2. 启动并启用 HTTP 服务
systemctl start apache2
systemctl enable apache2

# 3. 配置防火墙
ufw allow 'Apache'

# 4. 其他机器配置仓库
cat > /etc/apt/sources.list.d/remote.list << EOF
deb [trusted=yes] http://server-ip/repo/ ./
EOF

# 5. 更新软件包列表
apt update

5. 仓库管理工具

5.1 YUM/DNF 仓库管理

# 查看启用的仓库
yum repolist enabled
dnf repolist enabled

# 查看所有仓库
yum repolist all
dnf repolist all

# 启用仓库
yum-config-manager --enable repo-id
dnf config-manager --enable repo-id

# 禁用仓库
yum-config-manager --disable repo-id
dnf config-manager --disable repo-id

# 查看仓库详情
yum repolist -v
dnf repolist -v

# 清理仓库缓存
yum clean all
dnf clean all

# 重建仓库缓存
yum makecache
dnf makecache

# 检查仓库同步状态
yum check-update
dnf check-update

5.2 APT 仓库管理

# 查看仓库配置
cat /etc/apt/sources.list
ls /etc/apt/sources.list.d/

# 更新软件包列表
apt update

# 查看仓库状态
apt-cache policy

# 清理仓库缓存
apt clean
apt autoclean

# 检查仓库同步状态
apt update

# 查看包的来源
apt-cache show package | grep Origin

# 查看包的版本信息
apt-cache policy package

5.3 仓库镜像管理

使用镜像加速器:

发行版 镜像提供商 配置方法
CentOS 阿里云 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
Ubuntu 阿里云 sed -i &#39;s/archive.ubuntu.com/mirrors.aliyun.com/g&#39; /etc/apt/sources.list
Debian 阿里云 sed -i &#39;s/deb.debian.org/mirrors.aliyun.com/g&#39; /etc/apt/sources.list
Fedora 阿里云 /etc/dnf/dnf.conf 中添加 fastestmirror=True

配置 fastestmirror 插件:

# 安装 fastestmirror 插件
yum install yum-plugin-fastestmirror

# 配置插件
cat /etc/yum/pluginconf.d/fastestmirror.conf

# 清理缓存并重建
yum clean all
yum makecache

6. 仓库安全管理

6.1 GPG 密钥管理

RPM 系统:

# 导入 GPG 密钥
rpm --import GPG-KEY

# 列出已导入的密钥
rpm -qa gpg-pubkey*

# 查看密钥详情
rpm -qi gpg-pubkey-<key-id>

# 删除密钥
rpm -e gpg-pubkey-<key-id>

DEB 系统:

# 导入 GPG 密钥
apt-key add GPG-KEY

# 列出已导入的密钥
apt-key list

# 删除密钥
apt-key del <key-id>

# 现代密钥管理(Ubuntu 20.04+)
mkdir -p /etc/apt/keyrings
wget -qO- https://example.com/key.gpg | gpg --dearmor > /etc/apt/keyrings/example.gpg
echo "deb [signed-by=/etc/apt/keyrings/example.gpg] https://example.com/repo/ stable main" > /etc/apt/sources.list.d/example.list

6.2 HTTPS 仓库配置

配置 HTTPS 仓库的好处:

好处 描述
加密传输 防止中间人攻击
完整性验证 确保仓库数据未被篡改
身份验证 确保连接到正确的仓库服务器

RPM 系统 HTTPS 仓库配置:

[repo-id]
name=Repository Name
baseurl=https://repo-url/
enabled=1
gpgcheck=1
gpgkey=https://repo-url/GPG-KEY

DEB 系统 HTTPS 仓库配置:

deb https://repo-url/ distribution component
deb-src https://repo-url/ distribution component

安装 HTTPS 支持:

# RPM 系统
yum install curl ca-certificates

# DEB 系统
apt install apt-transport-https ca-certificates

实用案例分析

案例 1:配置国内镜像源

场景描述

默认的官方仓库下载速度较慢,需要配置国内镜像源以提高下载速度。

配置步骤

CentOS 7:

# 1. 备份原配置
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

# 2. 下载阿里云镜像源配置
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

# 3. 清理缓存并重建
yum clean all
yum makecache

# 4. 验证配置
yum repolist

Ubuntu 22.04:

# 1. 备份原配置
cp /etc/apt/sources.list /etc/apt/sources.list.backup

# 2. 编辑配置文件
cat > /etc/apt/sources.list << EOF
deb https://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
EOF

# 3. 更新软件包列表
apt update

# 4. 验证配置
apt-cache policy

案例 2:创建私有仓库

场景描述

需要创建一个私有仓库,用于存储和管理内部开发的软件包。

配置步骤

RPM 私有仓库:

# 1. 安装所需工具
yum install createrepo httpd mod_ssl

# 2. 创建仓库目录结构
mkdir -p /var/www/html/repo/{stable,testing}

# 3. 复制 RPM 包到相应目录
cp stable/*.rpm /var/www/html/repo/stable/
cp testing/*.rpm /var/www/html/repo/testing/

# 4. 初始化仓库
createrepo /var/www/html/repo/stable/
createrepo /var/www/html/repo/testing/

# 5. 配置 HTTPS
# 生成自签名证书
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/pki/tls/private/localhost.key -out /etc/pki/tls/certs/localhost.crt

# 配置 Apache SSL
cat > /etc/httpd/conf.d/ssl.conf << EOF
<VirtualHost *:443>
    ServerName repo-server
    DocumentRoot /var/www/html
    SSLEngine on
    SSLCertificateFile /etc/pki/tls/certs/localhost.crt
    SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
</VirtualHost>
EOF

# 6. 启动服务
systemctl start httpd
systemctl enable httpd

# 7. 配置防火墙
firewall-cmd --add-service=https --permanent
firewall-cmd --reload

# 8. 客户端配置
cat > /etc/yum.repos.d/private.repo << EOF
[private-stable]
name=Private Stable Repository
baseurl=https://repo-server/repo/stable/
enabled=1
gpgcheck=0

[private-testing]
name=Private Testing Repository
baseurl=https://repo-server/repo/testing/
enabled=0
gpgcheck=0
EOF

# 9. 禁用 SSL 验证(仅测试环境)
echo "sslverify=false" >> /etc/yum.conf

# 10. 清理缓存并重建
yum clean all
yum makecache

DEB 私有仓库:

# 1. 安装所需工具
apt install dpkg-dev apache2 ssl-cert

# 2. 创建仓库目录结构
mkdir -p /var/www/html/repo/{stable,testing}

# 3. 复制 DEB 包到相应目录
cp stable/*.deb /var/www/html/repo/stable/
cp testing/*.deb /var/www/html/repo/testing/

# 4. 生成仓库索引
cd /var/www/html/repo/stable
dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz

cd /var/www/html/repo/testing
dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz

# 5. 配置 HTTPS
a2enmod ssl
a2ensite default-ssl
systemctl restart apache2

# 6. 配置防火墙
ufw allow 'Apache Full'

# 7. 客户端配置
cat > /etc/apt/sources.list.d/private.list << EOF
deb [trusted=yes] https://repo-server/repo/stable/ ./
deb [trusted=yes] https://repo-server/repo/testing/ ./
EOF

# 8. 禁用 SSL 验证(仅测试环境)
echo "Acquire::https::repo-server::Verify-Peer "false";
Acquire::https::repo-server::Verify-Host "false";" > /etc/apt/apt.conf.d/99no-ssl-verify

# 9. 更新软件包列表
apt update

案例 3:管理仓库优先级

场景描述

系统中配置了多个仓库,需要管理仓库的优先级,确保从正确的仓库获取软件包。

配置步骤

RPM 系统(使用优先级插件):

# 1. 安装优先级插件
yum install yum-plugin-priorities

# 2. 配置插件
cat /etc/yum/pluginconf.d/priorities.conf

# 3. 设置仓库优先级
# 修改仓库配置文件,添加 priority 选项
cat > /etc/yum.repos.d/epel.repo << EOF
[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch
metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
priority=10
EOF

# 4. 验证优先级
yum repolist -v | grep priority

# 5. 测试优先级
# 安装一个在多个仓库中都存在的包
yum install package
# 查看包的来源
yum info package

DEB 系统(使用 pinning):

# 1. 创建 pinning 文件
cat > /etc/apt/preferences.d/repo-pin << EOF
Package: *
Pin: release o=Ubuntu,a=jammy
Pin-Priority: 900

Package: *
Pin: release o=Ubuntu,a=jammy-updates
Pin-Priority: 800

Package: *
Pin: release o=Ubuntu,a=jammy-backports
Pin-Priority: 700

Package: *
Pin: release o=Ubuntu,a=jammy-security
Pin-Priority: 990

Package: *
Pin: release o=Third-Party
Pin-Priority: 600
EOF

# 2. 验证 pinning
apt-cache policy

# 3. 测试 pinning
# 安装一个在多个仓库中都存在的包
apt install package
# 查看包的来源
apt-cache policy package

最佳实践

  1. 使用官方仓库:优先使用发行版官方仓库,保证软件的安全性和稳定性。

  2. 合理配置镜像源:根据网络环境,配置合适的镜像源以提高下载速度。

  3. 谨慎使用第三方仓库:使用第三方仓库时,确保其可信度,并注意仓库优先级的设置。

  4. 定期更新仓库:定期同步和更新仓库,确保软件包是最新的。

  5. 启用 GPG 验证:开启 GPG 签名验证,确保软件包的完整性和来源可信。

  6. 使用 HTTPS 仓库:配置仓库使用 HTTPS 协议,防止中间人攻击。

  7. 备份仓库配置:在修改仓库配置前,先备份原配置文件。

  8. 管理仓库优先级:合理设置仓库优先级,避免软件包版本冲突。

  9. 清理过期仓库:及时清理不再使用的仓库配置,减少系统负担。

  10. 监控仓库状态:定期检查仓库的可用性和同步状态,确保仓库正常工作。

总结

本教程详细介绍了 Linux 包仓库的配置方法和管理技巧。通过实际案例,我们学习了如何配置国内镜像源、创建私有仓库、管理仓库优先级等实用技能。掌握这些知识后,可以更加高效地管理 Linux 系统中的软件包,确保系统的稳定性和安全性。

包仓库是 Linux 包管理系统的重要组成部分,它为用户提供了便捷的软件获取途径。通过合理配置和管理包仓库,可以大大提高软件安装和更新的效率,同时保证系统的安全性和稳定性。

« 上一篇 包依赖管理 下一篇 » 源码编译安装