一、基础软件同步站搭建
1、创建用户及用户组
展开源码
groupadd -g 2001 mirrorgroup
useradd -u 2101 -g mirrorgroup mirrors
passwd mirrors
2、创建数据同步目录
展开源码
mkdir /mirrors
chown -R mirrors:mirrorgroup /mirrors
3、安装tunasync同步软件
展开源码
切换到 mirrors账户
su - mirrors
mkdir /home/mirrors/tunasync
mkdir /home/mirrors/tunasync/conf
mkdir /home/mirrors/tunasync/db
下载在软件https://github.com/tuna/tunasync/releases/tag/v0.8.0/tunasync-linux-bin.tar.gz 到/home/mirrors/tunasync 并解压;
编辑 ~/.bash_profile 文件,增加 TUNAPATH:
TUNAPATH=/home/mirrors/tunasync
PATH=$PATH:$TUNAPATH
source ~/.bash_profile 生效
4、同步配置
创建服务端配置文件 /home/mirrors/tunasync/conf/manager.conf
展开源码
debug = false
[server]
addr = "127.0.0.1"
port = 14242
ssl_cert = ""
ssl_key = ""
[files]
db_type = "bolt"
db_file = "/home/mirrors/tunasync/db/manager.db"
ca_cert = ""
配置说明:
port:监听端口,由于我下载的预编译版 tunasync 的一个小 bug,这里的 port 需固定配置为 14242
ssl_cert与ssl_key:ssl 配置,不需要 ssl 的同学不用配置
db_file:数据库文件,目前统一放在 /home/mirrors/tunasync/db/ 目录
根据需要创建需同步的镜像配置文件,创建 /home/mirrors/tunasync/conf/worker-centos.conf
展开源码
[global]
name = "worker-repo"
log_dir = "/home/mirrors/tunasync/log/tunasync/{{.Name}}"
mirror_dir = "/mirrors"
concurrent = 10
interval = 60
[manager]
api_base = "http://localhost:14242"
token = "some_token"
ca_cert = ""
[cgroup]
enable = false
base_path = "/sys/fs/cgroup"
group = "tunasync"
[server]
hostname = "localhost"
listen_addr = "127.0.0.1"
listen_port = 16010
ssl_cert = ""
ssl_key = ""
[[mirrors]]
name = "centos"
provider = "rsync"
upstream = "rsync://mirrors.tuna.tsinghua.edu.cn/centos/"
use_ipv6 = false
[[mirrors]]
name = "epel"
provider = "rsync"
upstream = "rsync://mirrors.tuna.tsinghua.edu.cn/epel/"
use_ipv6 = false
[[mirrors]]
name = "ubuntu"
provider = "rsync"
upstream = "rsync://mirrors.tuna.tsinghua.edu.cn/ubuntu/"
use_ipv6 = false
[[mirrors]]
name = "ubuntu-cdimage"
provider = "rsync"
upstream = "rsync://mirrors.tuna.tsinghua.edu.cn/ubuntu-cdimage/"
use_ipv6 = false
[[mirrors]]
name = "ubuntu-cloud-images"
provider = "rsync"
upstream = "rsync://mirrors.tuna.tsinghua.edu.cn/ubuntu-cloud-images/"
use_ipv6 = false
[[mirrors]]
name = "ubuntu-releases"
provider = "rsync"
upstream = "rsync://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/"
use_ipv6 = false
[[mirrors]]
name = "ceph"
provider = "rsync"
upstream = "rsync://mirrors.tuna.tsinghua.edu.cn/ceph/"
use_ipv6 = false
[[mirrors]]
name = "docker-ce"
provider = "rsync"
upstream = "rsync://mirrors.tuna.tsinghua.edu.cn/docker-ce/"
use_ipv6 = false
[[mirrors]]
name = "kernel"
provider = "rsync"
upstream = "rsync://mirrors.tuna.tsinghua.edu.cn/kernel/"
use_ipv6 = false
[[mirrors]]
name = "mysql"
provider = "rsync"
upstream = "rsync://mirrors.tuna.tsinghua.edu.cn/mysql/"
use_ipv6 = false
[[mirrors]]
name = "ELK"
provider = "rsync"
upstream = "rsync://mirrors.tuna.tsinghua.edu.cn/ELK/"
use_ipv6 = false
[[mirrors]]
name = "anaconda"
provider = "rsync"
upstream = "rsync://mirrors.tuna.tsinghua.edu.cn/anaconda/"
use_ipv6 = false
[[mirrors]]
name = "apache"
provider = "rsync"
upstream = "rsync://mirrors.tuna.tsinghua.edu.cn/apache/"
use_ipv6 = false
[[mirrors]]
name = "centos-stream"
provider = "rsync"
upstream = "rsync://mirrors.tuna.tsinghua.edu.cn/centos-stream/"
use_ipv6 = false
[[mirrors]]
name = "grafana"
provider = "rsync"
upstream = "rsync://mirrors.tuna.tsinghua.edu.cn/grafana/"
use_ipv6 = false
[[mirrors]]
name = "jenkins"
provider = "rsync"
upstream = "rsync://mirrors.tuna.tsinghua.edu.cn/jenkins/"
use_ipv6 = false
[[mirrors]]
name = "kubernetes"
provider = "rsync"
upstream = "rsync://mirrors.tuna.tsinghua.edu.cn/kubernetes/"
use_ipv6 = false
[[mirrors]]
name = "mariadb"
provider = "rsync"
upstream = "rsync://mirrors.tuna.tsinghua.edu.cn/mariadb/"
use_ipv6 = false
[[mirrors]]
name = "mongodb"
provider = "rsync"
upstream = "rsync://mirrors.tuna.tsinghua.edu.cn/mongodb/"
use_ipv6 = false
[[mirrors]]
name = "zabbix"
provider = "rsync"
upstream = "rsync://mirrors.tuna.tsinghua.edu.cn/zabbix/"
use_ipv6 = false
配置说明:
global name:worker 进程名称,用于程序识别
log_dir:tunasync 的日志路径
mirror_dir:镜像下载地址
concurrent:并发线程数
interval:rsync 同步周期,以分钟为单位
api_base:manager 地址,注意,此处需与 manager 所在服务器配置保持一致
server listen_port:该 worker 自身的监听端口,如果同一台服务器上有多个 worker,各个 worker 的配置文件中务必配置不同端口
mirrors name:镜像名称,tunasync 会在镜像根目录下建立一个该名称的目录用于下载镜像
upstream:同步地址,注意,参数最后需要有“/”,否则启动 tunasync 时会报错
5、启动同步服务,配置后自动按照配置文件需求,周期性和主站同步。
展开源码
开启manager服务(后台守护进程):
tunasync manager --config /home/mirrors/tunasync/conf/manager.conf >> /mirrors/log/plog/manager.log &
开启 worker 服务(后台守护进程):
tunasync worker --config /home/mirrors/tunasync/conf/worker-centos.conf >> /mirrors/log/plog/worker-centos.log &
6、配置web服务:
展开源码
安装apache 服务,开启服务和开机启动
确认防火墙和selinux关闭状态。
yum install httpd -y
systemctl enable httpd
systemctl start httpd
修改默认web目录
vi /etc/httpd/conf/httpd.conf
DocumentRoot "/mirrors"
添加目录访问权限:
<Directory "/mirrors">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
重启服务
systemctl restart httpd
7、生产repo文件。
同步完成后,可将web 绑定域名。测试安装相关软件的包路径和正确性。
二、pypi本地源搭建
1、安装docker
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
2、开启服务
systemctl start docker
systemctl enable docker
3、下载镜像并运行开启容器
docker pull pypa/bandersnatch
docker run -it -v /srv/pypi:/srv/pypi pypa/bandersnatch:latest bash
4、生成配置文件
第一次执行,需要执行一次bandersnatch mirror才会生成/etc/bandersnatch.conf配置文件,才能对配置进行修改。
bandersnatch mirror
编辑 /etc/bandersnatch.conf文件,主要是修改一下存放文件的路径
directory = /srv/pypi
再次执行 bandersnatch mirror进行同步。
bandersnatch mirror
5、使用设置
展开源码
pip install <package> -i http://xx.xx.xx.xx/pypi/simple/ --trusted-host xx.xx.xx.xx或者配置~/.pip/pip.conf文件
cat ~/.pip/pip.conf
[global]
index-url = http://xx.xx.xx.xx/pypi/simple
[install]
trusted-host=xx.xx.xx.xx