由于大部分的主要业务都在专网,内网环境下运行,无法使用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