由于大部分的主要业务都在专网,内网环境下运行,无法使用yum安装升级和更新,服务器少的情况下可以使用离线安装,但随着服务器规模上升,还是需要使用统一的自建yum源更方便。
什么是yum源
yum是在ReddHat中的一个包管理器。基于RPM包管理,能够从指定服务器自动下载RPM包并安装,可以自动处理依赖关系,能够一次安装所有依赖的软件包,无需一次一次的下载安装。yum源就是存放rpm包以及依赖关系的服务器,一般公共网络的yum源:163、souhu、阿里、中国科技大学、清华等。
yum源标识(repo id)
base:之操作系统镜像源,包含了ISO镜像内的所有软件包
updates:包含了系统更新,升级的软件包
extras:扩充的软件包合集
epel:为“红帽系”的错做系统提供额外的软件包,适用于RHEL、CentOS和Scientific Linux
自定义repo id
以K8S yum源为例,[repo id]本地可以随意定义,主要是看baseurl连接的源,当多个repo id重复时,会以最后加载的为准
搭建离线yum源
注意:需要准备一台可以连接互联网的服务器,安装所需依赖环境和软件包
# 安装所需软件 # createrepo:用于生成yum源各软件之间的依赖索引 # yum-utils:安装后可使用yumdownloader命令下载所需如软件包 # reposync:Reposync用于将远程yum存储同步到本地,使用yum检索包的目录 yum install -y wget yum-utils createrepo rm -rf /etc/yum.repos.d/* # 配置yum源 以阿里Centos7的yum源为例 wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF
# 全量离线yum源 # 查看已经配好的网络源id yum repolist
# 按照源id将网络源拉取到本地 reposync -r base -p /data/yum/ reposync -r epel -p /data/yum/ reposync -r extras -p /data/yum/ reposync -r updates -p /data/yum/ reposync -r kubernetes -p /data/yum/ reposync -r docker-ce-stable -p /data/yum/
# 生成repodata索引依赖 createrepo /data/yum/base createrepo /data/yum/epel createrepo /data/yum/extras createrepo /data/yum/updates createrepo /data/yum/kubernetes createrepo /data/yum/docker-ce-stable
# 在Packages同级目录中可以看到生成的repodata目录 # 使用测试 # 备份/etc/yum.repo.d/中的其他文件,手动添加 [Centos7-base] name=centos-base baseurl=file:///opt/base/base gpgcheck=0 enabled=1
#其他repo id按照同样格式书写 [kubernetes] name=k8s baseurl=http://192.168.12.12/yum/kubernetes ...... # 注意:baseurl可以使用file、ftp或http,目录路径要写到Package和repodata目录
# 测试 yum repolist
# 将本地的rpm包和依赖包压缩打包,放入内网环境,这样其他服务器也可以通过添加自定义repo文件连接yum源仓库了
# 安装nginx使其他机器也可以使用 yum install -y nginx systemctl enable --now nginx # 配置文件如下 /etc/nginx/default.d/yum.conf location / { root /data/yum; index index.html; autoindex on; } # 使配置文件生效 systemctl reload nginx
# 其他机器修改yum源地址 mkdir /etc/yum.repos.d/bak mv /etc/yum.repos.d/* /etc/yum.repos.d/bak
# 编辑内容如下 /etc/yum.repos.d/private-yum.repo [base] name=CentOS-Base baseurl=http://10.0.0.28/base/ gpgcheck=0 enabled=1
[updates] name=CentOS-Updates baseurl=http://10.0.0.28/updates/ gpgcheck=0 enabled=1
[extras] name=CentOS-Extras baseurl=http://10.0.0.28/extras gpgcheck=0 enabled=1
[epel] name=CentOS-Contrib baseurl=http://10.0.0.28/epel gpgcheck=0 enabled=1
[docker-ce-stable] name=CentOS-docker-ce-stable baseurl=http://10.0.0.28/docker-ce-stable gpgcheck=0 enabled=1
[kubernetes] name=CentOS-docker-ce-stable baseurl=http://10.0.0.28/kubernetes gpgcheck=0 enabled=1
# 使yum源生效 yum clean all yum makecache
# 拉取指定服务rpm包和依赖 yumdownloader --resolve --destdir=./docker_rpms/ docker # 生成repodata索引依赖 createrepo ./docker_rpms # 测试 cat <<EOF>> /etc/yum.repos.d/test.repo [docker] name=dokcer-ce baseurl=file:///root/docker_rpms gpgcheck=0 enabled=1 EOF
yum repolist
|