Linux 搭建内网私有软件仓库
以三大主流 Linux 发行版(Redhat、Debian、SUSE)系列为例搭建内网私有软件仓库,遵循 "下载" → "存储" → "提供访问"
Redhat(CentOS / Rocky / Alma)
核心工具:reposync + nginx
# 1. 安装工具
dnf install -y epel-release dnf-utils nginx
# 2. 同步远程仓库(-p 指定下载路径;--download-metadata 下载 repodata 元数据,等价于 createrepo_c ;-r 指定 repoid,redhat 不同系列间亦有差异,可用 dnf repolist 命令查询 repoid;-n 只下载最新版本,不保留历史版本;-d 删除本地已不在远程仓库中的包)
mkdir -p /opt/repo/
reposync -p /opt/repo/ --download-metadata -r baseos
reposync -p /opt/repo/ --download-metadata -r appstream
reposync -p /opt/repo/ --download-metadata -r epel
# 3. 配置 nginx 提供内网访问
# /etc/nginx/conf.d/repo.conf 示例
server {
listen 80;
server_name _;
root /opt/repo;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
location / {
try_files $uri $uri/ =404;
}
}
systemctl enable nginx --now
Debian(Ubuntu / Kali)
核心工具:apt-mirror + nginx
# 1. 安装工具
apt update && apt install -y apt-mirror nginx
# 2. 配置镜像源
# 以 Ubuntu 26.04 为例,实际环境还需将 resolute 替换为对应版本代号
# sources.list / mirror.list 里的标准仓库定义

# 第1段:
deb:二进制包仓库,客户端可以下载并安装 .deb 包
deb-src:源码包仓库,下载源代码(.dsc、.tar.gz、.diff.gz)
# 第2段:仓库的根 URL
# 第3段:发行版的版本代号,Debian 系列可通过 lsb_release -cs 查看版本代号
除了基础代号,还有三种后缀:

# 第4段:组件(Component),表示仓库里包含哪几类软件

vim /etc/apt/mirror.list
### BEGIN CONFIG ###
set base_path /var/spool/apt-mirror # 镜像存储的根目录
set mirror_path $base_path/mirror # 实际下载的软件包和索引文件存放目录
set skel_path $base_path/skel # 存放仓库骨架文件的目录,主要用于存放同步过程中需要的临时元数据,比如 Release、InRelease、Release.gpg 的副本
set var_path $base_path/var # 存放 apt-mirror 的运行时状态目录
set postmirror_script $var_path/postmirror.sh # 指定后置脚本的路径,每次同步完成后如果 run_postmirror 开启,就会执行这个脚本。常用于:记录镜像大小、磁盘剩余;发送同步结果通知(邮件、钉钉、企业微信);清理临时文件;触发下游同步;更新软链接等
set run_postmirror 0 # 是否执行后置脚本,1 表示执行,0 表示不执行
set nthreads 20 # 并发下载线程数
set _tilde 0 # 是否下载文件名中带 '~' 的版本,'~' 在 Debian 系列版本中表示预发布、快照、测试版,优先级低于正式版。0 表示不下载,1 表示下载
set use_proxy yes # 下载镜像使用代理
set http_proxy http://proxy.example.com:8080 # 设置下载镜像的 http 代理
set https_proxy http://proxy.example.com:8080 # 设置下载镜像的 https 代理
set defaultarch amd64 # 默认下载的 cpu 架构,通常只写一个。arm 架构 cpu 需改为 arm64
set arch amd64 # 设置额外架构,可以写多个,用于多架构同步
set _autoclean 1 # 否自动清理本地镜像中上游已删除的旧文件,1 表示开启自动清理,0 表示关闭自动清理,旧文件一直保留
### END CONFIG ###
### BEGIN SOURCE ###
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ resolute main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ resolute-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ resolute-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ resolute-security main restricted universe multiverse
clean https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ # 指定源进行自动清理,配合 set _autoclean 使用
### END SOURCE ###
# 3. 开始同步
apt-mirror > /var/log/apt-mirror.log 2>&1
# 4. 配置 nginx (参考如上 /etc/nginx/conf.d/repo.conf )
ln -s /var/spool/apt-mirror/mirror/mirrors.tuna.tsinghua.edu.cn/ubuntu /usr/share/nginx/html/ubuntu
systemctl enable nginx --now
SUSE(SLES / OpenSUSE)
核心工具:rsync + createrepo_c + nginx
createrepo 对比 createrepo_c:

注:有些 Linux 发行版 createrepo 已作为软链接指向 createrepo_c
其它方案对比:

# 1. 安装工具
zypper install -y rsync createrepo_c nginx
# 2. 同步源仓库(如果是增量更新,createrepo_c 需添加 --update 参数)
# OpenSUSE
mkdir -p /srv/repo/opensuse15/{oss,updates}
rsync -av --delete rsync://mirrors.tuna.tsinghua.edu.cn/opensuse/distribution/leap/15.5/repo/oss/x86_64/ /srv/repo/opensuse15/oss/
rsync -av --delete rsync://mirrors.tuna.tsinghua.edu.cn/opensuse/update/leap/15.5/oss/x86_64/ /srv/repo/opensuse15/updates/
createrepo_c /srv/repo/opensuse15/oss/
createrepo_c /srv/repo/opensuse15/updates/
# SLES(订阅制,SCC 提供 URL,通常只能 HTTP 下载)
mkdir -p /srv/repo/sles15-sp5/{oss,updates}
wget -r -np -nH --cut-dirs=3 -R "index.html*" -P /srv/repo/sles15-sp5/oss/ https://updates.suse.com/SUSE/Products/SLE-Module-Basesystem/15-SP5/x86_64/product/
wget -r -np -nH --cut-dirs=3 -R "index.html*" -P /srv/repo/sles15-sp5/updates/ https://updates.suse.com/SUSE/Updates/SLE-Module-Basesystem/15-SP5/x86_64/update/
createrepo_c /srv/repo/sles15-sp5/oss/
createrepo_c /srv/repo/sles15-sp5/updates/
# 3. 配置 nginx (参考如上 /etc/nginx/conf.d/repo.conf)
systemctl enable nginx --now

浙公网安备 33010602011771号