最近升级了下电脑内存到32G,开多台虚拟机做一些测试,初始化系统升级内核的时候下载 kernel.*rpm 包太慢了,于是自建了一个 yum repo 仓库。
1、找一个 repo 源,既然是内核方面的,自然要找 elrepo 了,先下载这个kernel repo
# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org # rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
执行以上两步,elerpo 就安装到了 /etc/yum.repo.d 中:
2、确认自己要同步的 rpm 包所在的 repo id,大家可以打开 elrepo.repo 看一下,里面是多个 repo id ,不同的 id 里的 rpm 包是不一样的,此处我需要 kernel 相关的包,所有只 需要 “[elrepo-kernel]” 下的内容
3、安装 repo 的两个工具:
(1)资源同步工具 - reposync
(2)元数据遍历工具 - createrepo
# yum install yum-utils createrepo -y
4、在本地服务器上创建 repository 资源目录,准备存放用 reposync 工具同步下来的 rpm 包
# mkdir /opt/work/repository
将 elrepo 源中的 elrepo-kernel 组中的 rpm 包同步到本机的 /opt/work/repository/ 目录
# reposync -g -m -r elrepo-kernel -p /opt/work/repository/
同步动作完成后,去看下资源目录,发现 reposync 自动创建了层级目录
5、建立自建源的元数据和依赖关系,执行:
# createrepo /opt/work/repository/elrepo-kernel/RPMS/
看一下目录,元数据都创建好了,有兴趣的自己打开文件看下
6、最后编辑自己的 repo 文件,此处我命名为 selfbuild.repo,注意必须放在 /etc/yum.repo.d/ 目录下,我是复制的 elrepo.repo 文件修改的
# vim /etc/yum.repos.d/selfbuild.repo
[selfbuidrepo-kernel] name=selfbuild Linux Kernel Repository - el7 baseurl=file:///opt/work/repository/elrepo-kernel/RPMS/ enabled=1 gpgcheck=0
创建好自己 repo 之后,可以检查一下:
# yum clean all # yum repolist all
此时 repo 源已基本可用,但只能在本机使用,不能为内网其他的服务器服务
可以利用 nginx 将本地目录发布出来,替换 baseurl 字段即可,以下贴出 nginx 的配置,自己参考修改即可:(此处我修改了/opt/work/repository/elrepo-kernel 目录名称)
# vim /usr/local/nginx/conf/vhosts/9002-repo.conf
server { listen 9002; root /usr/local/nginx/html; location /yum { alias /opt/work/repository/selfbuild-kernel/RPMS; autoindex on; autoindex_exact_size off; autoindex_localtime on; } }
替换 /etc/yum.repo.d/selfbuild-kernel.repo 中的 baseurl:
# vim /etc/yum.repos.d/selfbuild.repo
[selfbuidrepo-kernel] name=selfbuild Linux Kernel Repository - el7 baseurl=http://172.16.0.11:9002/yum enabled=1 gpgcheck=0
最后确认一下,将 selfbuild-kernel.repo 放到目标服务器的 /etc/yum.repo.d/ 目录下即可
备注:使用 yum clean all 和 yum repolist all 来检查源是否已生效。
扩展:
1、reposync 是同步整个源站的 rpm 包,大部分时候我们并不需要这么大而全,仅仅需要很少量的包,
可以使用 yumdownloader 来下载指定的包,使用 ‘--resolve ’ 参数将依赖包一并下载,使用 '--destdir' 来指定rpm的存放位置,默认下载到当前目录;
备注: yumdownloader 命令在 yum-utils 包中
# yumdownloader --resolve vim --destdir=/tmp
2、每次更新 rpm 包后要重新建立元数据,可以做计划任务定时更新同步并重建 ;
# createrepo --update /opt/work/repository/selfbuild-kernel/RPMS
3、yum 指定特定的 repo;
# yum --enablerepo=selfbuild-kernel install kernel-ml.x86_64
4、注意 baseurl 后面的地址不能带权限访问。