1. 安装 apt-mirror

首先,在你的服务器上安装

sudo apt update
sudo apt install apt-mirror


2. 配置 apt-mirror

apt-mirror 的配置文件位于 /etc/apt/mirror.list,我们需要修改这个文件以指定同步的源。你可以使用 nano 或其他文本编辑器来编辑该文件:

sudo vim /etc/apt/mirror.list

添加阿里云

修改或添加如下内容到配置文件中:

############# config ##################
set base_path /var/spool/apt-mirror
set mirror_path $base_path/mirror
set skel_path $base_path/skel
set var_path $base_path/var
set cleanscript $base_path/var/clean.sh
set defaultarch amd64
set postmirror_script $var_path/postmirror.sh
set run_postmirror 0
#开20个进程同时下载
set nthreads 20
set _tilde 0

############# end config ##############
#Ubuntu 22.04
deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse

#Ubuntu 24.04
deb http://mirrors.aliyun.com/ubuntu/ noble main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ noble-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ noble-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ noble-backports main restricted universe multiverse

# 源码仓库禁用(我们用不到)
# deb-src http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
# deb-src http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
# deb-src http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
# deb-src http://mirrors.aliyun.com/ubuntu/ noble main restricted universe multiverse
# deb-src http://mirrors.aliyun.com/ubuntu/ noble-updates main restricted universe multiverse
# deb-src http://mirrors.aliyun.com/ubuntu/ noble-security main restricted universe multiverse

配置文件中的目录路径可以根据你的需要调整,默认路径是/var/spool/apt-mirror


3. 开始同步

配置完成后,使用以下命令开始同步阿里云的镜像:

sudo apt-mirror

Apt 本地源仓库搭建_nginx


同步过程可能需要一些时间,每个版本数据大约200G。


4. 报错解决

同步完成后,客户端同步报错404。

由于apt-mirror在2017年就停止了维护更新,之后出现的ubuntu20和ubuntu22更新了仓库的索引文件,apt-mirror没有办法兼容。所以可以通过修改apt-mirror脚本来下载缺失的文件。

编辑/usr/bin/apt-mirror 脚本,在大约450行加入

add_url_to_download( $url . $_ . "/cnf/Commands-" . $arch . ".xz" );
sudo vim /usr/bin/apt-mirror

Apt 本地源仓库搭建_ubuntu_02


再次同步完成

sudo apt-mirror

Ubuntu同步目录结构如下:

Apt 本地源仓库搭建_vim_03



5. 安装Nginx暴露更新路径

1) 安装配置Nginx
sudo apt install nginx
sudo vim /etc/nginx/sites-available/default
server {
 listen 80 default_server;
 listen [::]:80 default_server;
 root /var/spool/apt-mirror/mirror;
 index index.html
 server_name 10.18.x.x;
 location / {
 }
 location /source {
 alias /var/spool/apt-mirror/mirror/source;
 autoindex on;
 try_files $uri $uri/ =404;
 }
 location /ubuntu {
 alias /var/spool/apt-mirror/mirror/mirrors.aliyun.com/ubuntu;
 autoindex on;
 try_files $uri $uri/ =404;
 }
 location /zabbix {
 alias /var/spool/apt-mirror/mirror/mirrors.aliyun.com/zabbix/zabbix;
 autoindex on;
 try_files $uri $uri/ =404;
 }
}

Apt 本地源仓库搭建_vim_04

2)启用
sudo systemctl enable nginx
sudo systemctl restart nginx


6. 测试同步的仓库

客户端设置本地仓库源测试是否能正常更新和安装软件。


7. 设置本地仓库向阿里云每周更新

crontab -e
00 00 * * 1 /usr/bin/apt-mirror >/var/log/apt-mirror/AMsync-$(date +\%Y-\%m-\%d_\%H:\%M:\%S).log 2>&1 &

Apt 本地源仓库搭建_vim_05