快速搭建 yum 仓库构建环境

步骤一、创建配置信息文件 meta.json

{
  "container_name": "yum-repo-builder",
  "remote_server": "xx.xx.xx.xx",
  "remote_dir": "<remote-dir>",
  "docker_image": "<local-target-docker-image-address>"
}

步骤二、创建子目录

$ mkdir -p ./files/packages/

步骤三、创建 build.sh 文件

#!/usr/bin/env bash

set -e

# Get to workdir
cd "$(realpath "$(dirname "$(realpath "${BASH_SOURCE[0]}")")")"

command -v createrepo >/dev/null 2>&1 || \
  (echo "$(date -R) [ ERROR ] command required: createrepo" && false)

echo '+ createrepo ./files/'
createrepo ./files/

步骤四、创建 Dockerfile 文件

FROM docker.1ms.run/openeuler/openeuler:24.03
RUN yum update -y
RUN yum install -y createrepo

步骤五、创建 Makefile 文件

SHELL := /bin/bash

container_name := $(shell jq -r '.container_name' meta.json)
remote_server  := $(shell jq -r '.remote_server' meta.json)
remote_dir     := $(shell jq -r '.remote_dir' meta.json)
docker_image   := $(shell jq -r '.docker_image' meta.json)

help:
    @cat Makefile | grep '# `' | grep -v '@cat Makefile'

.PHONY: docker-image
docker-image:
    docker build \
        --progress plain \
        --pull \
        --tag ${docker_image} \
        --file Dockerfile \
        .

# `make build`                     Build
.PHONY: build
build: docker-image
    docker run \
        --rm \
        --name "${container_name}" \
        -v "$$(pwd)/:/data/" \
        ${docker_image} \
            bash /data/build.sh

# `make shell`                     Shell
.PHONY: shell
shell: docker-image
    docker run \
        --rm \
        -it \
        -v "$$(pwd)/:/data/" \
        --workdir /data \
        ${docker_image} \
            bash

# `make publish`                   Publish
.PHONY: publish
publish:
    ssh 'root@${remote_server}' mkdir -p '${remote_path}/'
    rsync \
        -a -r --no-i-r \
        --info=progress2 --info=name0 \
        --no-owner --no-group --no-perms \
        --delete \
        "$$(pwd)/files/" \
        'root@${remote_server}:${remote_dir}/'

# `make clean`                     Clean
.PHONY: clean
clean:
    docker stop ${container_name} >/dev/null 2>&1 || true
    docker rm   ${container_name} >/dev/null 2>&1 || true
Author: ismdeep
License: Copyright (c) 2025 CC-BY-NC-4.0 LICENSE