搭建apt、pip本地源

背景

项目部署的时候不能使用公网,需要提前把apt/pip包离线缓存。然后笔记本接入部署现场,作为apt/pip源服务器。

软件准备

apt-mirror :同步apt包,因为不清楚现场系统的小版本号,这里直接把Ubuntu Bionc库都拉下来,大概230GB。
pip2pi :同步pypi包

操作步骤

apt-mirror

安装
sudo apt update
sudo apt install -y apt-mirror
复制代码
配置

主要修改base_pathrun_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

复制代码

坑点

  1. postgresql类似库需要自行添加key,apt-mirror不会同步密钥信息
  2. 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
复制代码

如果一切正常,则会出现类似页面

image.png

内网主机配置源

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文件的好处就显现出来了,一次配置,整体使用

坑点
你可能遇到以下情况

image.png 其他包可以正常安装,而且确定已经为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…

猜你喜欢

转载自juejin.im/post/7079237533237788686