• 快速搭建 Linux 软件 repository 的镜像站


    repository 镜像站用来干什么?

    GNU/Linux是一种基于网络协作的 release 套件,在其上部署软件是推荐使用在线包管理工具完成软体部署的。通过搭建repository镜像站,可以解决在离线环境下借助Linux包管理工具部署软件的问题。

    搭建repository使用什么工具?

    搭建repository站点可以使用的工具有很多,其根本原理就是对目标站点进行复刻以制作成镜像站点。针对特定的Linux软件仓库,推荐使用清华大学开源站基于go语言开发的 tunasync。tunasync的工作原理是使用 rsync 做增量同步。

    tunasync 设计架构:


    Tunasync Release:
    https://github.com/tuna/tunasync
    https://github.com/tuna/tunasync/releases

    依赖工具:
    rsync
    (如果要通过编译源代码的形式安装tunasync,还需要配置go运行环境)

    *******************************************************************************************************

    Step 1 初始化OS基础环境(以CentOS 7 2207 为例)
    关闭SELinux、Firewalld[ 如果是在有特殊网络安全要求的内网环境中运行即将搭建的Repository则建议合理配置SELinux和Firewalld策略,而不是选择关闭之。]
    Step 2 创建运行tunasync服务的OS账户
    useradd -m -s /bin/bash tunasync
    passwd tunasync
    Step 3 创建Repository数据存储目录[ 此处假定是使用了local-storage作为存储路径,也可以为tunasync配置远程持久化存储路径。]
    mkdir -pv /data/{mirrors,logs,dbs}
    chown -R tunasync:tunasync /data
    Step 4 安装并配置tunasync服务
    tunasync服务安装路径:/usr/bin/
    tunasync服务配置文件路径:/etc/tunasync/
    拟部署方式:worker 和 manager 都在本机部署。
    wget https://github.com/tuna/tunasync/releases/download/v0.8.0/tunasync-linux-amd64-bin.tar.gz  
    tar xzvf tunasync-linux-bin.tar.gz -C /usr/bin/

    编辑配置文件 /etc/tunasync/manager.conf[ 模板文件参考https://github.com/tuna/tunasync/blob/master/docs/zh_CN/get_started.md。]
    debug = false

    [server]
    addr = "127.0.0.1"[ manager服务监听地址。]
    port = 12345[ manager服务监听端口。]
    ssl_cert = ""[ SSL加密通信的证书,如果你 worker 和 manager 都是在本机,那么没必要使用 https。此时 ssl_key 和 ssl_cert留空。worker 的 ca_cert 也留空,api_base 以 http:// 开头。如果需要加密的通信,则需要指定 ssl_key 和 ssl_cert。worker 也要指定 ca_cert,并且 api_base 应该是 https:// 开头。]
    ssl_key = ""[ SSL加密通信的密钥,如果你 worker 和 manager 都是在本机,那么没必要使用 https。此时 ssl_key 和 ssl_cert留空。worker 的 ca_cert 也留空,api_base 以 http:// 开头。如果需要加密的通信,则需要指定 ssl_key 和 ssl_cert。worker 也要指定 ca_cert,并且 api_base 应该是 https:// 开头。]

    [files]
    db_type = "bolt"[ 除了 bolt 以外,还支持 badger、leveldb 和 redis 的数据库后端。对于 badger 和 leveldb,只需要修改 db_type。如果使用 redis 作为数据库后端,把 db_type 改为 redis,并把下面的 db_file 设为 redis 服务器的地址: redis://user:password@host:port/db_number。]
    db_file = "/data/dbs/manager.db"[ 此路径为数据库后端路径,可以自定义。]
    ca_cert = ""

    编辑配置文件 /etc/tunasync/worker.conf[ 模板文件参考https://github.com/tuna/tunasync/blob/master/docs/zh_CN/workers.conf。]
    [global]
    name = "CentOS"[ 定义进程名,方便识别该进程。]
    log_dir = "/data/logs/tunasync/{{.Name}}"[ 定义同步镜像时产生的日志。]
    mirror_dir = "/data/mirrors/"[ 被同步的数据的存储路径。]
    concurrent = 10[ 同步时的线程数。]
    interval = 120[ 同步周期,单位为分钟。]

    [manager]
    api_base = "http://localhost:12345"[ 定义tunasync-manager地址。]
    token = ""
    ca_cert = ""

    [cgroup]
    enable = false[ 表示不启用cgroup。]
    base_path = "/sys/fs/cgroup"
    group = "tunasync"

    [server]
    hostname = "localhost"
    listen_addr = "127.0.0.1"
    listen_port = 6000[ 该 worker 自身的监听端口,如果同一台服务器上有多个 worker,各个 worker 的配置文件中务必配置不同端口。]
    ssl_cert = ""
    ssl_key = ""

    [[mirrors]]
    name = "elvish"[ 填写被同步对象名,比如被同步的CentOS、docker、Kubernetes、Ubuntu等。此处同步的是elvish。tunasync 会在镜像根目录下建立一个该名称的目录用于存储对应的镜像。]
    provider = "rsync"
    upstream = "rsync://rsync.elv.sh/elvish/"[ 数据同步的源地址。注意,最后需要有“/”,否则启动 tunasync 时会报错。]
    use_ipv6 = false[ 表示不启用IPv6.]

    [[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

    编写tunasync启停脚本 /etc/init.d/tunasync-manager
    #!/bin/sh
    # Provides:          tunasync-manager 
    # Description:       Mirror job management tool.

    # Author: whsir

    NAME=tunasync
    TUNASYNC_NAME=tunasync-manager
    TUNASYNC_BIN=/usr/bin/$NAME
    OPTIONS="manager --config /etc/tunasync/manager.conf"
    StatBin=/bin/ps

    case "$1" in
        start)
            if $StatBin -ef | grep -v grep | grep -q "tunasync manager";then
                TUNASYNC_PID=`ps -ef | grep -v grep | grep "tunasync manager" | awk -F" " '{print $2}'`
                echo "$TUNASYNC_NAME (pid $TUNASYNC_PID) already running."
            else
                $TUNASYNC_BIN $OPTIONS > /dev/null &
                echo "Starting $TUNASYNC_NAME... "
            fi
        ;;

        status)
            if $StatBin -ef | grep -v grep | grep -q "tunasync manager";then
                TUNASYNC_PID=`ps -ef | grep -v grep | grep "tunasync manager" | awk -F" " '{print $2}'`
                echo "$TUNASYNC_NAME (pid $TUNASYNC_PID) is running."
            else
                echo "$TUNASYNC_NAME is not running."
            fi
        ;;

        stop)
            if $StatBin -ef | grep -v grep | grep -q "tunasync manager";then
                TUNASYNC_PID=`ps -ef | grep -v grep | grep "tunasync manager" | awk -F" " '{print $2}'`
                kill $TUNASYNC_PID
                echo "Stop $TUNASYNC_NAME...."
            else
                echo "$TUNASYNC_NAME already stopping."
            fi
        ;;

        restart)
            $0 stop
            $0 start
        ;; 

        *)
            echo "Usage: $0 {start|stop|restart|status}"
            exit 1
        ;;
    esac

    编写tunasync启停脚本 /etc/init.d/tunasync-worker
    #!/bin/sh
    # Provides:          tunasync-worker
    # Description:       Mirror job management tool.

    # Author: whsir

    NAME=tunasync
    TUNASYNC_NAME=tunasync-worker
    TUNASYNC_BIN=/usr/bin/$NAME
    OPTIONS="worker --config /etc/tunasync/worker.conf"
    StatBin=/bin/ps

    case "$1" in
        start)
            if $StatBin -ef | grep -v grep | grep -q "tunasync worker";then
                TUNASYNC_PID=`ps -ef | grep -v grep | grep "tunasync worker" | awk -F" " '{print $2}'`
                echo "$TUNASYNC_NAME (pid $TUNASYNC_PID) already running."
            else
                $TUNASYNC_BIN $OPTIONS > /dev/null &
                echo "Starting $TUNASYNC_NAME... "
            fi
        ;;

        status)
            if $StatBin -ef | grep -v grep | grep -q "tunasync worker";then
                TUNASYNC_PID=`ps -ef | grep -v grep | grep "tunasync worker" | awk -F" " '{print $2}'`
                echo "$TUNASYNC_NAME (pid $TUNASYNC_PID) is running."
            else
                echo "$TUNASYNC_NAME is not running."
            fi
        ;;

        stop)
            if $StatBin -ef | grep -v grep | grep -q "tunasync worker";then
                TUNASYNC_PID=`ps -ef | grep -v grep | grep "tunasync worker" | awk -F" " '{print $2}'`
                kill $TUNASYNC_PID
                echo "Stop $TUNASYNC_NAME...."
            else
                echo "$TUNASYNC_NAME already stopping."
            fi
        ;;

        restart)
            $0 stop
            $0 start
        ;; 

        *)
            echo "Usage: $0 {start|stop|restart|status}"
            exit 1
        ;;
    esac

    启动tunasync服务[ 建议使用tunasync用户执行。]
    /etc/init.d/tunasync-manager start
    /etc/init.d/tunasync-worker start

    查看tunasync同步状态
    tunasynctl list -p 12345 --all

    同步清华大学提供的centos和epel仓库

    rsync -aHvh --no-o --no-g --stats --exclude .~tmp~/ --delete --delete-after --delay-updates --safe-links --timeout=120 --contimeout=120 rsync://mirrors.tuna.tsinghua.edu.cn/epel/ /data/mirrors/epel

    rsync -aHvh --no-o --no-g --stats --exclude .~tmp~/ --delete --delete-after --delay-updates --safe-links --timeout=120 --contimeout=120 rsync://mirrors.tuna.tsinghua.edu.cn/centos/ /data/mirrors/centos

    **********************************************************************************************************

    如果要把此repository镜像提供为内网软件仓库服务,可以通过 ftp 服务或者 web 服务把该仓库路径暴露出来,目标客户机只需要在其软件仓库配置文件中将mirrors地址指向本软件仓库即可。

  • 相关阅读:
    生存资料校准曲线calibration curve的绘制
    Pytest插件
    awk命令的使用
    十 动手学深度学习v2 ——卷积神经网络之NiN + GoogLeNet
    simulink求解器选择的小tip
    云服务器实例重启后,各个微服务的接口(涉及mysql操作的)都用不了了
    概率论与数理统计学习:随机事件(一)——知识总结与C语言实现案例
    用友YonSuite前后端一体化数智赋能,有化妆品的地方就有老中医
    解压apk后各文件夹含义
    【图像去噪】基于边缘增强扩散 (cEED) 和 Coherence Enhancing Diffusion (cCED) 滤波器实现图像去噪附matlab代码
  • 原文地址:https://blog.csdn.net/UsamaBinLaden6976498/article/details/133240197