背景
项目部署的时候不能使用公网,需要提前把apt/pip包离线缓存。然后笔记本接入部署现场,作为apt/pip源服务器。
软件准备
apt-mirror
:同步apt包,因为不清楚现场系统的小版本号,这里直接把Ubuntu Bionc库都拉下来,大概230GB。
pip2pi
:同步pypi包
操作步骤
apt-mirror
安装
sudo apt update
sudo apt install -y apt-mirror
复制代码
配置
主要修改base_path
、run_postmirror
、同步源
############# config ##################
#
set base_path /var/www/html
#
# 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 amd64
# set postmirror_script $var_path/postmirror.sh
# 设置是否执行下载后的脚本操作,默认是1(但是默认没有postmirror.sh脚本,所以报错)
set run_postmirror 0
set nthreads 20
set _tilde 0
#
############# end config ##############
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
# clean http://mirrors.tuna.tsinghua.edu.cn/ubuntu
# postgresql
deb http://mirrors.tuna.tsinghua.edu.cn/postgresql/repos/apt/ bionic-pgdg main
deb https://packagecloud.io/timescale/timescaledb/ubuntu/ bionic main
复制代码
坑点
- postgresql类似库需要自行添加key,apt-mirror不会同步密钥信息
- timescaledb设置镜像库,提前添加GPG,否则缺少Release文件
详见:packagecloud.io/timescale/t…
同步与使用
sudo apt-mirror
# 同步花了一上午。。而且强烈建议在tmux里执行,ssh会不会自己断?这事很玄学
sudo apt install nginx
复制代码
把/etc/nginx/sites-enable下的默认页面软链接删除,防止80端口被占用
在conf.d目录下,新建xx.conf,配置内容大概如下
server {
listen 80;
listen [::]:80;
server_name mirror.xxx.cn;
location / {
alias /var/www/shared/;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
}
}
复制代码
ok,接下来到 /var/www/shared/
,执行命令创建软连接(方便增添不同镜像
注意我这里在/var/www/shared/
使用相对路径,自己确定路径关系就好
sudo ln -s ../html/mirror/mirrors.tuna.tsinghua.edu.cn/ubuntu ubuntu
复制代码
重启nginx服务
sudo service nginx restart
复制代码
如果一切正常,则会出现类似页面
内网主机配置源
Tips:可以先修改/etc/hosts,自定义一个DNS解析规则, 适合内部源IP环境经常变动情况
source.list可以设置如下:
deb [arch=amd64] http://mirror.xxx.cn/ubuntu/ bionic main restricted universe multiverse
deb [arch=amd64] http://mirror.xxx.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb [arch=amd64] http://mirror.xxx.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb [arch=amd64] http://mirror.xxx.cn/ubuntu/ bionic-security main restricted universe multiverse
复制代码
坑点
apt-mirror默认下载与本机架构一致的软件包,比如这里如果不添加[arch=amd64]
,apt update报错找不到i386包信息,不能完成索引工作,会影响amd64包的安装。
完成以上工作后,apt离线源就搭建起来了,需要注意没有i386源
pip2pi
安装与配置
sudo apt update
sudo apt install python3
sudo apt install python3-pip
# 更新pip,旧版本在操作中有奇怪Bug
pip3 install pip --upgrade
# 安装
pip install pip2pi
复制代码
安装后其实有三个执行文件
pip2pi
: 之后两个命令的结合体
pip2tgz
: 下载pypi包
dir2pi
: 为pypi包建立索引
因为我需要建立多个requirements.txt组成的环境,所以先一个个下载,再统一建立索引
pip2tgz /var/www/html/pypi/packages -r requirements.txt
...多个文件
dir2pi /var/www/html/pypi/packages
复制代码
之后步骤与搭建apt一致,在/var/www/shared/
目录下建立软连接,重启Nginx服务
使用
修改内网主机的~/.pip/pip.conf,把新搭建的主机当作pypi源
[global]
index-url = http://mirror.xxx.cn/simple
trusted-host = mirror.xxx.cn
复制代码
这时候,自定义hosts文件的好处就显现出来了,一次配置,整体使用
坑点
你可能遇到以下情况
其他包可以正常安装,而且确定已经为gevent包建立索引
解决方案
:升级内网主机的pip版本
python -m pip install pip --upgrade
复制代码
pip包是可以找到的,不用担心。
暂不知道bug触发的条件,玄学、、
参考来源
segmentfault.com/a/119000002…
juejin.cn/post/705850…
blog.csdn.net/zhifangyou7…
blog.csdn.net/xianjie0318…