前言
内部主机在无公网网络或不占用公网带宽的情况下更新 / 安装软件包. 挂载系统镜像做为本地仓库源数据, 基本能解决大部分需求, 但有时需要更新大量软件包, 这时就需要本地仓库数据和官方仓库数据保持一致.
本文主要实现基于挂载系统镜像和同步官方数据的本地仓库
约定
本地仓库目录:/data/repo
ftp/web 服务安装配置不在此介绍
服务端 OS 仓库 ip:192.168.100.10
客户端 主机 ip :192.168.100.100
系统镜像: Centos6.x86_64.iso
准备
服务端:
系统镜像文件上传到主机 / data 目录下
挂载 iso 镜像
- #mkdir /data/repo/cdrom
- #mount -o loop /data/Centos6.x86_64.iso /data/repo/cdrom
同步 / 下载官方源数据
官方提供镜像地址列表 https://www.centos.org/download/mirrors/
因完整源数据数据量大 (大概有 300G+), 这里只获取需要的数据源 (centos 6 系)
创建相关目录
os: 基础包源
updates: 更新 / 升级包源
extras: 扩展包源
epel: 额外包源
- mkdir -p /data/repo/centos/6/{os,updates,extras}/x86_64
- mkdir -p /data/repo/epel/6/x86_64
这里有以下几种方式获取源数据 (根据具体环境, 任选一种即可)
1.rsync
仓库主机需要公网访问权限, 亦可将办公电脑作为数据中转站 (先同步到办公电脑, 再推送到仓库主机上)
源数据同步到本地 (需要源地址支持 rsync 协议)
远程同步到本地, 数据源地址在前, 本地目录在后
本地同步到远程, 数据源目录在前, 目的地址在后
- #rsync -artv rsync://mirrors.shu.edu.cn/centos/6/os/x86_64//data/repo/centos/6/os/x86_64
- #rsync -artv rsync://mirrors.shu.edu.cn/centos/6/updates/x86_64//data/repo/centos/6/updates/x86_64
- #rsync -artv rsync://mirrors.shu.edu.cn/centos/6/extras/x86_64//data/repo/centos/6/extras/x86_64
- #rsync -artv --exclude=debug rsync://mirrors.shu.edu.cn/epel/6/x86_64//data/repo/epel/6/x86_64
-a, --archive 归档模式, 表示以递归方式传输文件, 并保持所有文件属性, 等于 - rlptgoD
-r, --recursive 对子目录以递归模式处理
-v, --verbose 详细模式输出
-t, --times 保持文件时间信息
-u, --update 仅仅进行更新, 也就是跳过所有已经存在于 DST, 并且文件时间晚于要备份的文件, 不覆盖更新的文件
2.ftp
此种方式适用于仓库服务器无法访问公网情况, 使用可访问公网的电脑, 通过 ftp 客户端将源数据下载到本地, 然后再将数据上传到仓库服务器
目录结构与上述方式相同, 具体步骤不做描述
3.yum makecache
配置 yum 文件
cat /etc/yum.repo.d/yum.repo
- [Base]
- name=CentOS-Base
- baseurl=http://mirrors.shu.edu.cn/centos/$releasever/os/$basearch/
- enabled=1
- gpgcheck=1
- gpgkey=http://mirrors.shu.edu.cn/centos/$releasever/os/$basearch/RPM-GPG-KEY-CentOS-6
- [Updates]
- name=CentOS-Updates
- baseurl=http://mirrors.shu.edu.cn/centos/$releasever/updates/$basearch/
- enabled=1
- gpgcheck=1
- gpgkey=http://mirrors.shu.edu.cn/centos/$releasever/os/$basearch/RPM-GPG-KEY-CentOS-6
- [Extras]
- name=CentOS-Extras
- baseurl=http://mirrors.shu.edu.cn/centos/$releasever/extras/$basearch/
- enabled=1
- gpgcheck=1
- gpgkey=http://mirrors.shu.edu.cn/centos/$releasever/os/$basearch/RPM-GPG-KEY-CentOS-6
- [Epel]
- name=CentOS-Epel
- baseurl=http://mirrors.shu.edu.cn/epel/$releasever/$basearch/
- enabled=1
- gpgcheck=0
如果系统获取不到变量或获取不正确, 可将变量替换为对应的版本和架构, 如
$releasever 替换为 6
$basearch 替换为 x86_64
http://mirrors.shu.edu.cn/centos/$releasever/os/$basearch/
替换为
http://mirrors.shu.edu.cn/centos/6/os/x86_64
centos 可使用如下命令获取读应变量值
rpm -qi centos-release
arch
清空原有缓存, 并建立数据缓存
- yum clean all
- yum makecache
获取仓库列表
yum repolist
同步镜像到本地
cd /data/repo
reposync -r Base
reposync -r Updates
reposync -r Extras
reposync -r Epel
建立元数据索引
createrepo -d Base
createrepo -d Updates
createrepo -d Extras
createrepo -d Epel
可上传自有 rpm 包到仓库, 上传后使用 createrepo -u 仓库目录, 更新仓库索引即可.
以上三种方式, 前两种都可以同步到元数据索引, 因此不需要重新建立, 最后一种数据未下载完, 因此不确认是否有 repodata 目录, 如有此目录且目录不为空, 基本就是包含索引的.
到此就完成了元数据的创建, 可使用 ftp/nginx 服务作为外部访问, 配置时将根目录配置为 / data/repo 目录即可
客户端使用本地 yum 源
配置客户端 yum 文件
cat /etc/yum.repo.d/yum.repo
- [Base]
- name=CentOS-Base
- baseurl=http://192.168.100.10/centos/6/os/$basearch/
- enabled=1
- gpgcheck=1
- [Updates]
- name=CentOS-Updates
- baseurl=http://192.168.100.10/centos/6/updates/$basearch/
- enabled=1
- gpgcheck=1
- [Extras]
- name=CentOS-Extras
- baseurl=http://192.168.100.10/centos/6/extras/$basearch/
- enabled=1
- gpgcheck=1
- [Epel]
- name=CentOS-Epel
- baseurl=http://192.168.100.10/epel/6/$basearch/
- enabled=1
- gpgcheck=0
清空缓存并更新
- yum clean all
- yum update -y
到此, 客户端就可以使用本地 yum 源更新 / 安装软件了
Issue:
yum grouplist 时报错, 无法获取 group 信息
更新 / 创建组索引
这里需要注意下使用 comps.xml 文件, 完整文件名不统一, 但文件名后面肯定是 "comps.xml"
cd /data/repo/centos/6/os/x86_64/
createrepo -g repodata/2318fd068164b0f042845474d6a22262798b9f0d1f49ad1bf9f95b953089666d-c6-x86_64-comps.xml ./
来源: http://blog.51cto.com/morrowind/2104418