首先创建apt-mirror的服务端,也就是存储所有apt-get下载的文件和依赖。大约需要300G,预留400G左右空间就可以开始了。
安装ubuntu省略,用的是ubuntu202204
ubuntu挂载硬盘(不需要的可以跳过):
#下载挂载工具
sudo apt-get install nfs-3g
#查看空间大小,比照大小找到你的加的400G以上的硬盘
#df -lh
#创建一个挂载目录
mkdir /data1
#挂载
mount -t ntfs-3g /"df -lh命令找到的磁盘目录" /data1
#然后cd 到 / 目录,你就可以看到你新加的硬盘/data1了
正式开始
一、服务端
1、安装插件
apt-mirror用于下载源并保存;nginx用于开启服务,让apt后续配置sources.list文件的地址可以找到。
sudo apt-get install apt-mirror
sudo apt-get install nginx
2、创建apt-miror存储目录
在刚刚挂载的硬盘中创建源存储目录:
#如果你是按照上述把新硬盘挂载在了/data1,那就进入/data1创建这个文件夹,后续所有涉及目录的地方也要加上/data1,后面出现的地方我会提示
mkdir /linoxide
3、修改apt-mirror配置文件
第一个配置是修改下载目录和下载的源
vi /etc/apt/mirror.list
############# config ##################
#
#数据基目录,此处看你的环境是否需要改为/data1/linoxide
set base_path /linoxide
#
# set mirror_path $base_path/mirror
# set skel_path $base_path/skel
# set var_path $base_path/var
# set cleanscript $var_path/clean.sh
# set defaultarch <running host architecture>
# set postmirror_script $var_path/postmirror.sh
# set run_postmirror 0
#设置下载线程数
set nthreads 20
set _tilde 0
#
############# end config ##############
deb https://mirror.sjtu.edu.cn/ubuntu jammy main restricted universe multiverse
deb https://mirror.sjtu.edu.cn/ubuntu jammy-security main restricted universe multiverse
deb https://mirror.sjtu.edu.cn/ubuntu jammy-updates main restricted universe multiverse
deb https://mirror.sjtu.edu.cn/ubuntu jammy-proposed main restricted universe multiverse
deb https://mirror.sjtu.edu.cn/ubuntu jammy-backports main restricted universe multiverse
deb-src https://mirror.sjtu.edu.cn/ubuntu jammy main restricted universe multiverse
deb-src https://mirror.sjtu.edu.cn/ubuntu jammy-security main restricted universe multiverse
deb-src https://mirror.sjtu.edu.cn/ubuntu jammy-updates main restricted universe multiverse
deb-src https://mirror.sjtu.edu.cn/ubuntu jammy-proposed main restricted universe multiverse
deb-src https://mirror.sjtu.edu.cn/ubuntu jammy-backports main restricted universe multiverse
#这个脚本会清除上游服务器废弃的包的
clean https://mirror.sjtu.edu.cn/ubuntu
记得保存
第二个配置是让apt-mirror识别到cnf文件并下载同步(其实下载完成后不只是缺cnf,但是只加上cnf就可以了。后续追求完美看看apt update的时候缺什么可以加一下)
vi /usr/bin/apt-mirror
add_url_to_download( $url . $_ . "/binary-" . $arch . "/Packages.bz2" );
add_url_to_download( $url . $_ . "/binary-" . $arch . "/Packages.xz" );
#差不多在450行左右加入下面这一句
add_url_to_download( $url . $_ . "/cnf/Commands-" . $arch . ".xz" );
add_url_to_download( $url . $_ . "/i18n/Index" );
记得保存
【vi不好用可以用nano编辑】
4、开始下载
直接运行指令:
sudo apt-mirror
可能需要很长时间,等待下载就可以了,下载完成差不多是这个样子
下载完的目录内容是三个文件
mirror文件就是主要内容了
5、替换文件
将/mirror/mirror.sjtu.edu.cn/ubuntu目录下的的dists文件替换为/skel/mirror.sjtu.edu.cn/ubuntu目录下的dists文件
否则配置sources.list后每次apt-install都会显示无法找到下载文件。
6、固定IP
固定服务端也就是下载好apt-mirror的电脑IP
apt-get install net-tools
ifconfig
#ubuntu202204是这个,老版本好像不太一样
cd /etc/netplan
vi 01-network-manager-all.yaml
network:
ethernets:
#换成你ifconfig看到的决定ip的网口,我这里是叫enp2s0
enp2s0:
dhcp4: false
#保证端口号别被占用
addresses: [192.168.1.166/24]
gateway4: 192.168.1.1
optional: true
nameservers:
addresses: [144.144.144.144, 8.8.8.8]
version: 2
记得保存,然后生效一下
sudo netplan apply
然后再ifconfig看看ip是否生效,再打开ubuntu自动安装的火狐看看有没有网络
7、挂载源文件
纯粹为了方便管理
#看你的磁盘情况是/data1/linoxide还是/linoxide
sudo ln -s /linoxide /packages/apt-mirror
8、开放apt-mirror文件服务
这里要用到第一步中下载的nginx
sudo vi /etc/nginx/sites-available/default
server {
#保证80别被占用,占用了用别的端口号也行,但是后面客户端源端口要改
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html
server_name loaclhost;
autoindex on;
location / {
index index.html index.htm;
#当然你也可以绑定的深一点,然后apt配置文件直接加/ubuntu
root /packages;
try_files $uri $uri/ =404;
}
}
记得保存,然后生效一下
sudo service nginx restart
然后打开网站就可以看到:
进入我们的关键目录看一看
服务端配置完成,服务端就可以不需要网络了。
如果是有网络环境可以定时执行sudo apt-mirror更新源,也可以写一个脚本定时更新。
二、客户端
客户端要和服务端同一网段,我上面服务端是192.168.1.166,客户端也要在192.168.1下。客户端也随便固定个ip就可以了。
1、更改apt源
sudo vi /etc/apt/sources.list
模拟环境是客户端没有网络,所以其他源也请求不到了,只能请求到新的服务端的源,所以文件内之前的内容全部注释或者删掉都可以。
文件内写入下面几行:
#下面的192.168.1.166换成你设置的服务端IP
#地址也是,nginx可以绑定更深层,这里也就可以少写了
deb [arch=amd64] http://192.168.1.166/apt-mirror/mirror/mirror.sjtu.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb [arch=amd64] http://192.168.1.166/apt-mirror/mirror/mirror.sjtu.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
deb [arch=amd64] http://192.168.1.166/apt-mirror/mirror/mirror.sjtu.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb [arch=amd64] http://192.168.1.166/apt-mirror/mirror/mirror.sjtu.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
deb [arch=amd64] http://192.168.1.166/apt-mirror/mirror/mirror.sjtu.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
记得保存,然后生效一下
sudo apt-get update
等待执行完成
2、验证
sudo apt-get install apache2
如果下载成功,看一下下载的源是什么地方,如果是刚才配置的服务器,那就是成功了。
sudo apt policy apache2