openEuler 搭建本地 repo 源

闫志聪
2024-08-14 / 0 评论 / 130 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2024年08月14日,已超过281天没有更新,若内容或图片失效,请留言反馈。

1 前言

everything 镜像中包含了许多 rpm 包,可以提供基本的安装使用,然而还有一部分软件包需要连网到公网 repo 源中下载。但是在生产环境中,服务器大多数是不能连接公网的,因此需要搭建一个局域网 repo 源,即让一台能够连接公网的服务器从公网 repo 源中同步 rpm 包到本地,然后局域网的其他服务器再从这台能连接公网的服务器中下载 rpm 包


2 所需的服务或命令

2.1 Web 服务

用于局域网中其他服务器访问,可以使用 httpd 服务或 nginx 服务


2.2 dnf reposync 命令

$ dnf reposync [OPTIONS]
    -c [CONFIG FILE]                指定配置文件运行(默认配置文件是 /etc/yum.conf)
    -q                                安静操作
    -v                                显示详细信息
    -b                                尝试使用最佳的软件包版本
    -C                                完全从系统缓存运行,不更新缓存
    -R [minutes]                    最大命令等待时间
    -y                                所有问题自动回答 yes
    --assumeno                        所有问题自动回答 no
    --enablerepo [repo]                启用其他存储库,可以指定多次
    --disablerepo [repo]            禁用仓库,可以指定多次
    --repo [repo], --repoid [repo]    仅使用指定的存储库
    --exclude [package]                排除软件包            
    --forcearch ARCH                强制使用指定的架构
    --arch [arch]                    仅下载指定架构的软件包
    --delete                        删除存储库中不再存在的本地软件包
    -n                                仅下载最新的软件包
    -p DOWNLOAD_PATH                指定软件包下载的位置
    --norepopath                    在下载目录中不重新生成以 `repo name` 命名的目录


2.3 createrepo 命令

$ createrepo [OPTION?] <directory_to_index>
    -q                                以安静模式运行
    -v                                显示详细信息
    -o                                指定生成的元数据存放的位置
    --excludes=PACKAGE_NAME_GLOB    指定生成元数据时排除的包
    --update                        在原有元数据上升级,只更新有变化的软件
    --workers                        读取 rpm 包的数量,默认为 5


3 同步官方源

服务器名称用途操作系统版本IP 地址
Server搭建局域网 repo 源openEuler 22.03 LTS SP1192.168.255.221
Client模拟局域网内主机openEuler 22.03 LTS192.168.255.220


3.1 Server 端配置

3.1.1 系统基本设置

# 关闭防火墙,并停止开机自启
$ systemctl stop firewalld
$ systemctl disable firewalld

# 关闭 SELinux
$ setenforce 0

# 安装用于提供 reposync 命令的工具包
$ yum install -y dnf-plugins-core

# 安装用于提供 createrepo 命令的工具包
$ yum install -y createrepo

# 创建专用目录,保存同步的 RPM 包
$ mkdir /openEuler-22.03-LTS-REPO

另外注意要留有足够的分区空间去保存 RPM 包


3.1.2 配置 Web 服务

此处使用 nginx 服务

# 安装 nginx
$ yum install -y nginx

# 启动服务,并设置开机自启
$ systemctl start nginx
$ systemctl enable nginx

# 在默认网页根目录下创建 openEuler-22.03-LTS 目录及以下子目录,用来存放 RPM 包
$ mkdir -p /usr/share/nginx/html/openEuler-22.03-LTS/{everything,update,EPOL}
$ mkdir -p /usr/share/nginx/html/openEuler-22.03-LTS/EPOL/main

# 编写配置文件,允许显示目录索引
$ cat > /etc/nginx/conf.d/openEuler-22.03-LTS.conf <<EOF
server {
    listen 8001;
    root /usr/share/nginx/html/openEuler-22.03-LTS;
    location / {
        autoindex on;
        autoindex_exact_size off;
        autoindex_format html;
        autoindex_localtime on;
    }
}
EOF

# 重启 nginx 服务
$ systemctl restart nginx

使用 Windows 浏览器访问 http://192.168.255.221:8001,查看访问是否正常

image-20231213141430980


3.1.3 配置 repo 源

Server 端需要配置局域网内客户端主机操作系统的 repo 源。例如本实验中作为局域网 repo 源服务器的 Server 端的操作系统版本为 openEuler 22.03 LTS SP1,而客户端主机操作系统为 openEuler 22.03 LTS,那么需要在 Server 端配置 openEuler 22.03 LTS 操作系统的 repo 源

openEuler 各版本的 repo 源可以在论坛中找到:【汇总贴】openEuler常用repo源 - 迁移 - openEuler 论坛

注意:

一定要修改新添加的 repo 源的 repo id 和 repo name,即修改 [ REPO ID ]naem=REPO NAME 的内容,否则可能会和现有的 repo 源名字冲突

# 在 Server 端配置客户端主机操作系统的 reop 源
$ cat > /etc/yum.repos.d/openEuler-22.03-LTS.repo <<EOF
[openEuler-22.03-everything]
name=openEuler-22.03-everything
baseurl=http://repo.huaweicloud.com/openeuler/openEuler-22.03-LTS/everything/x86_64/
enabled=1
gpgcheck=0
gpgkey=http://repo.huaweicloud.com/openeuler/openEuler-22.03-LTS/everything/x86_64/RPM-GPG-KEY-openEuler

[openEuler-22.03-EPOL]
name=openEuler-22.03-EPOL
baseurl=http://repo.huaweicloud.com/openeuler/openEuler-22.03-LTS/EPOL/main/x86_64/
enabled=1
gpgcheck=0

[openEuler-22.03-update]
name=openEuler-22.03-update
baseurl=http://repo.huaweicloud.com/openeuler/openEuler-22.03-LTS/update/x86_64/
enabled=1
gpgcheck=0
EOF

# 清空 yum 缓存
$ yum clean all

# 重建 yum 缓存
$ yum makecache

# 查看当前的 repo 源
$ yum repolist
repo id                                            repo name
openEuler-22.03-EPOL                               openEuler-22.03-EPOL
openEuler-22.03-everything                         openEuler-22.03-everything
openEuler-22.03-update                             openEuler-22.03-update

从命令返回结果看到,openEuler 22.03 LTS 版本的 repo 源已经成功添加,另外需要记住此处的 repo id ,在同步时会指定 --repoid=REPO_ID 选项


3.1.4 同步 everything 源

(1)同步 everything 源的 RPM 包到本地

# 同步 everything 源的 RPM 包到本地
$ dnf reposync -v --repoid=openEuler-22.03-everything -p /openEuler-22.03-LTS-REPO

# 同步完成后会在 /openEuler-22.03-LTS-REPO 目录创建一个名称同 repo name 的目录
$ ls /openEuler-22.03-LTS-REPO/
openEuler-22.03-everything

# 查看目录结构
$ tree -L 1 /openEuler-22.03-LTS-REPO/openEuler-22.03-everything/
/openEuler-22.03-LTS-REPO/openEuler-22.03-everything/
└── Packages

(2)生成 everything 源的 RPM 包元数据

# 执行以下命令生成元数据
$ createrepo -v --workers 10 /openEuler-22.03-LTS-REPO/openEuler-22.03-everything

# 查看生成元数据后的目录结构
$ tree -L 1 /openEuler-22.03-LTS-REPO/openEuler-22.03-everything/
/openEuler-22.03-LTS-REPO/openEuler-22.03-everything/
├── Packages
└── repodata
    
# 查看生成的元数据文件
$ ls /openEuler-22.03-LTS-REPO/openEuler-22.03-everything/repodata
0079e1d3bd752a19486cb91269c98c8b5a6254d3ca13e5c0326e085561f1ed2a-other.sqlite.bz2
355628d38b0cd6163757264bc7971f3d86ff1d530a44c034786f3116b167f490-filelists.xml.gz
73565b368f50f6d2bb92543e2f7bcef4a9bc159ccdfbc728fc22e9b2ed5bb528-primary.xml.gz
7c20d73494e2525944a113b55983be13ba437e354da3e45f19f456b8f39457b4-other.xml.gz
9b353c421ef03be739e96d529e92393dfc4864205d974309a6af813e47893fff-filelists.sqlite.bz2
bd6c1976aae37a44ef7c7f9390c0321b4f7a27c4991e318f57b9c37016cb32fa-primary.sqlite.bz2
repomd.xml

(3)创建软链接到 nginx 网页根目录

# 创建 everything 源软链接到 nginx 网页根目录
$ ln -s /openEuler-22.03-LTS-REPO/openEuler-22.03-everything/ /usr/share/nginx/html/openEuler-22.03-LTS/everything/x86_64


3.1.5 同步 update 源

(1)同步 update 源的 RPM 包到本地

# 同步 update 源的 RPM 包到本地
$ dnf reposync -v --repoid=openEuler-22.03-update -p /openEuler-22.03-LTS-REPO

# 同步完成后会在 /openEuler-22.03-LTS-REPO 目录创建一个名称同 repo name 的目录
$ ls /openEuler-22.03-LTS-REPO/
openEuler-22.03-update

# 查看目录结构
$ tree -L 1 /openEuler-22.03-LTS-REPO/openEuler-22.03-update/
/openEuler-22.03-LTS-REPO/openEuler-22.03-update/
└── Packages

(2)生成 update 源的 RPM 包元数据

# 执行以下命令生成元数据
$ createrepo -v --workers 10 /openEuler-22.03-LTS-REPO/openEuler-22.03-update

# 查看生成元数据后的目录结构
$ tree -L 1 /openEuler-22.03-LTS-REPO/openEuler-22.03-update
/openEuler-22.03-LTS-REPO/openEuler-22.03-update
├── Packages
└── repodata
    
# 查看生成的元数据文件
$ ls /openEuler-22.03-LTS-REPO/openEuler-22.03-update/repodata
8943580f5aefe7f532fbbd9f19d771aaf9407a855b0acad33723007d8dde4199-primary.xml.gz
ad1a113f7358bfebf9d13783d8fa8ce0a9b151725ecfc2da059226280422c30a-other.xml.gz
bf573c34d9f77a76757a2a496b2c9ee671dddc81d660a95b063f8b81b8d7a4f9-filelists.sqlite.bz2
c6b747c4c6ee6cb6a44683b4a3636066cba5c9e573ea19ad95a5e315a9af1836-primary.sqlite.bz2
e152e3b11a7fcf011e16a27f7e6ba855ac12025b114ec5916e09d4edb0fa61e9-other.sqlite.bz2
f88eb68a9e41086c6b2de992367613c9b1e530bea82a73aa82e6faad6e5ed53d-filelists.xml.gz
repomd.xml

(3)创建软链接到 nginx 网页根目录

# 创建 update 源软链接到 nginx 网页根目录
$ ln -s /openEuler-22.03-LTS-REPO/openEuler-22.03-update/ /usr/share/nginx/html/openEuler-22.03-LTS/update/x86_64


3.1.6 同步 EPOL 源

(1)同步 EPOL 源的 RPM 包到本地

# 同步 update 源的 RPM 包到本地
$ dnf reposync -v --repoid=openEuler-22.03-EPOL -p /openEuler-22.03-LTS-REPO

# 同步完成后会在 /openEuler-22.03-LTS-REPO 目录创建一个名称同 repo name 的目录
$ ls /openEuler-22.03-LTS-REPO/
openEuler-22.03-EPOL

# 查看目录结构
$ tree -L 1 /openEuler-22.03-LTS-REPO/openEuler-22.03-EPOL
/openEuler-22.03-LTS-REPO/openEuler-22.03-EPOL/
└── Packages

(2)生成 EPOL 源的 RPM 包元数据

# 执行以下命令生成元数据
$ createrepo -v --workers 10 /openEuler-22.03-LTS-REPO/openEuler-22.03-EPOL

# 查看生成元数据后的目录结构
$ tree -L 1 /openEuler-22.03-LTS-REPO/openEuler-22.03-EPOL
/openEuler-22.03-LTS-REPO/openEuler-22.03-EPOL
├── Packages
└── repodata
    
# 查看生成的元数据文件
$ ls /openEuler-22.03-LTS-REPO/openEuler-22.03-EPOL/repodata
2d41ed62331b529104c7b04fd34680e8eeb8783e212e910e5230daaa66a900a4-filelists.sqlite.bz2
3445b86e5fd0157d0fd08aaf06cde6f1feca76517b574d8fdd3b40abe827b71e-other.xml.gz
709755e7d41e355645979f47b78155234bae9d50b2422105a4b03fca6ea93c83-filelists.xml.gz
70e673639de7efb802e65a54ce80e99c49ea93b1a8a4b4a676a47a91cadc99fa-primary.xml.gz
8c1cb6add3f18391a70436bed3bca18b9e0eac6861d8c5e2266c9952be3ea9f0-other.sqlite.bz2
bae172c52a64e4637d189780ff27d983e3c97bcbc17278f74afe0a23ab6e9ecd-primary.sqlite.bz2
repomd.xml

(3)创建软链接到 nginx 网页根目录

# 创建 EPOL 源软链接到 nginx 网页根目录
$ ln -s /openEuler-22.03-LTS-REPO/openEuler-22.03-EPOL/ /usr/share/nginx/html/openEuler-22.03-LTS/EPOL/main/x86_64


3.1.7 在前端界面查看 RPM 包

使用 Windows 浏览器访问: http://192.168.255.221:8001,查看 RPM 包

image-20231213162745739


3.2 Client 端配置

3.2.1 系统基本设置

# 关闭防火墙,并停止开机自启
$ systemctl stop firewalld
$ systemctl disable firewalld

# 关闭 SELinux
$ setenforce 0


3.2.2 配置 repo 源

# 创建备份目录,将现有的 repo 源都移动到备份目录中
$ cd /etc/yum.repos.d/
$ mkdir bak
$ mv ./* bak/

# 编写新的 repo 源,URL 地址指向局域网 repo 源服务器
cat > /etc/yum.repos.d/lan.repo <<EOF
[openEuler-22.03-everything]
name=openEuler-22.03-everything
baseurl=http://192.168.255.221:8001/everything/x86_64/
enabled=1
gpgcheck=0

[openEuler-22.03-EPOL]
name=openEuler-22.03-epol
baseurl=http://192.168.255.221:8001/EPOL/main/x86_64/
enabled=1
gpgcheck=0

[openEuler-22.03-update]
name=openEuler-22.03-update
baseurl=http://192.168.255.221:8001/update/x86_64/
enabled=1
gpgcheck=0
EOF

# 清空 yum 缓存
$ yum clean all

# 重建 yum 缓存
$ yum makecache

# 查看当前的 repo 源
$ yum repolist
repo id                                            repo name
openEuler-22.03-EPOL                               openEuler-22.03-epol
openEuler-22.03-everything                         openEuler-22.03-everything
openEuler-22.03-update                             openEuler-22.03-update


3.2.3 测试 repo 源

# 随便搜索一个软件包
$ yum provides tree
Last metadata expiration check: 0:08:11 ago on Wed 13 Dec 2023 04:36:36 PM CST.
tree-1.8.0-2.oe2203.x86_64 : Tree file viewer tool
Repo        : openEuler-22.03-everything
Matched from:
Provide    : tree = 1.8.0-2.oe2203

# 安装搜索的软件包
$ yum install -y tree


4 使用 .iso 镜像搭建本地 repo 源

4.1 基于 HTTP 协议搭建

# 安装 httpd 服务及其他工具
$ yum install -y httpd createrepo

# 修改配置文件,不显示默认网页
$ mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.conf.bak
$ sed -i '/^\s*DirectoryIndex/ s/index.html//' /etc/httpd/conf/httpd.conf

# 挂载 everything 镜像
$ mount /dev/sr0 /mnt/

# 创建 repo 目录
$ mkdir -p /var/www/html/openEuler-LTS-SP1/Package

# 从镜像中复制软件包到 repo 目录
$ cp /mnt/Packages/* /var/www/html/openEuler-LTS-SP1/Package/

# 生成元数据信息
$ createrepo -v --workers 20 /var/www/html/openEuler-LTS-SP1/

# 修改目录及文件权限
$ chmod 755 /var/www/html/openEuler-LTS-SP1/Package/
$ chmod 755 /var/www/html/openEuler-LTS-SP1/repodata/
$ chmod 644 /var/www/html/openEuler-LTS-SP1/Package/*
$ chmod 644 /var/www/html/openEuler-LTS-SP1/repodata/*

# 启动 httpd 服务
$ systemctl start httpd

客户端编写 repo 文件:

# 编写 repo 文件
$ cat > /etc/yum.repos.d/local.repo <<EOF
[local-repo]
name=local-repo
baseurl=http://192.168.230.201/openEuler-LTS-SP1/
enabled=1
gpgcheck=0
EOF


4.2 基于 FTP 协议搭建

# 安装 vsftpd 服务及其他工具
$ yum install -y vsftpd createrepo

# 配置 vsftpd 服务,允许匿名用户登录
$ sed -i '/^anonymous_enable/c anonymous_enable=YES' /etc/vsftpd/vsftpd.conf

# 挂载 everything 镜像
$ mount /dev/sr0 /mnt/

# 创建 repo 目录
$ mkdir -p /var/ftp/pub/openEuler-22.03-LTS-SP1/Packages

# 从镜像中复制软件包到 repo 目录
$ cp /mnt/Packages/* /var/ftp/pub/openEuler-22.03-LTS-SP1/Packages/

# 生成元数据信息
$ createrepo -v --workers 20 /var/ftp/pub/openEuler-22.03-LTS-SP1/

# 启动 vsftpd 服务
$ systemctl start vsftpd

客户端编写 repo 文件:

# 编写 repo 文件
$ cat > /etc/yum.repos.d/local.repo <<EOF
[local-repo]
name=local-repo
baseurl=ftp://192.168.230.201/pub/openEuler-22.03-LTS-SP1/
enabled=1
gpgcheck=0
EOF
0

评论

博主关闭了当前页面的评论