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 里的标准仓库定义

image

# 第1段:

deb:二进制包仓库,客户端可以下载并安装 .deb 包

deb-src:源码包仓库,下载源代码(.dsc、.tar.gz、.diff.gz)

# 第2段:仓库的根 URL

# 第3段:发行版的版本代号,Debian 系列可通过 lsb_release -cs 查看版本代号

除了基础代号,还有三种后缀:

image

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

image

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:

image

注:有些 Linux 发行版 createrepo 已作为软链接指向 createrepo_c

其它方案对比:

image

# 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

posted @ 2026-09-24 09:40  demoduan  阅读(11)  评论(0)    收藏  举报