@H_
301_1047@
之前总结的搭建本地
yum
源是通过
rsync
直接同步其他在线的
源,例如清华大学大
YUM
源,但是类似的阿里云的
源,因为其不支持
所以不能进行同步,
同样的,想要同步其他一些官方的YUM源,也要对方支持rsync才能支持同步,而有很希望安装的YUM源并不支持rsync,这样怎么办呢?
因上述原因我想到了另一种思路去同步“所有”我想同步的YUM源,并且搭建成本地可用的YUM源,下面记录下我的思路。
1、首先预备好一台Nginx或者apache的server来做本地的YUM源(我喜欢Nginx),该操作可以去参考“YUM本地源搭建,且Rsync同步官方”的操作。
2、搭建好的本地YUM源server后,再下载想要同步YUM源的repo文件。
例如:
wget -O /etc/yum.repos.d/CentOS-Base.repohttp://mirrors.aliyun.com/repo/Centos-6.repo
3、安装几个工具,默认的centos是没有安装,yum installcreaterepo yum-utils -y
安装这两个工具主要使用createrepo和reposync这两个命令
4、上面的操作完毕后,执行命令yum repolist
例如:其中“仓库标识:中的名字是我们下面将要用到的
5、例如我想要把wmj作为本地YUM源(这是我在做Ambari + hadoop实验的yum源,因为该源可能被很多台hadoop datanode端用到所有,搭建本地yum源会节约大量的出口带宽
提高工作效率。)那么我执行如下命令行
[root@localhosttmp]# reposync -r wmj
如下开始自动更新yum源到本地文件夹
当然在这一步,我们可以参考下reposync的帮助,直接把想要同步的yum源直接定位到希望下载的某个目录,
例如使用参数-p
也可以使用-d来删除本地老旧,yum源已经不存的安装包。
6、当通过reposync命令同步yum源到想要指定的路径之下后,然后使用createrepo命令创对该路径下的rpm包创建为本地的YUM仓库
6.1、到这里的时候,其实想要的yum本地仓库已经算是制作完毕,为了简化工作量,我们可以把上面的操作制作成bash脚本
思路如下:
reposync自动同步想要的yum源到指定的路径,因为每次同步后,内容可能有所改变,所以需要重新执行createrepo命令重新创建YUM仓库。
7、上面的操作完毕后,就是在client端制作repo文件并指向我们本地的YUM源了,因为我们同步YUM源的时候,可能会忽略掉对方的gpgkey,那么记得“gpgcheck=0”
例子:
为方便日常工作,需要在本地搭建CentOS\EPEL\Ovirt等的本地yum源,根据一般网上文章步骤搭建的本地源基本上都缺少软件分组信息,无法使用yum group*的相关命令,在认真研究相关命令的文档的前提下,经过实践,整理形成完美的,基于reposync/createrepo命令的YUM本地源搭建过程,具体步骤如下:
一、上游源配置目录结构及信息如下:
1、目录结构如下:
/app/yumconfig/centos6
├── cache
├── log
├── yum.conf
└── yum.repos.d
└── Centos-6.repo
[main]
cachedir=/app/yumconfig/centos6/cache/yum/x86_64/6
keepcache=0
debuglevel=2
logfile=/app/yumconfig/centos6/log/yum.log
exactarch=1
obsoletes=0
gpgcheck=1
plugins=0
installonly_limit=3
reposdir=/app/yumconfig/centos6/yum.repos.d
3、Centos-6.repo的内容:
(上游源为阿里云的软件源)
[base]
name=CentOS-6-Base-mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/6/os/x86_64/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-6
#releasedupdates
[updates]
name=CentOS-6-Updates-mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/6/updates/x86_64/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-6
#additionalpackagesthatmaybeuseful
[extras]
name=CentOS-6-Extras-mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/6/extras/x86_64/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-6
#additionalpackagesthatextendfunctionalityofexistingpackages
[centosplus]
name=CentOS-6-Plus-mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/6/centosplus/x86_64/
gpgcheck=1
enabled=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-6
二、同步脚本sync_centos6.sh的内容如下:
#!/bin/bash
#set -x
date=`date +%Y%m%d`
log_file="/app/log/sync_centos6.$date.log" #同步日志
文件,请根据实际情况进行
修改
echo "---- $Date `date` Begin ----" >>$log_file
cd /app/centos6 #本地软件源目目录,请根据实际情况进行
修改
reposync -m -c /app/yumconfig/centos6/yum.conf -n>> $log_file 2>&1
#从上游源同频软件包及软件分组信息:
#-m选项指明需下载软件分组信息
文件——comps.xml,
#-n选项指明只下载最新的软件包
for file in `ls `
do
if [ -d $file ]
then
if [ -f ./$file/comps.xml ]
then
createrepo -g comps.xml --update ./$file>> $log_file 2>&1 #如果存在comps.xml
文件,则创建含软件分组信息的本地包索引信息
else
createrepo --update ./$file >> $log_file 2>&1
fi
fi
done
#createrepo ./ >> $log_file 2>&1
echo "---- $Date `date` End ----" >>$log_file
三、配置apache,通过http服务发布"/app/centos6"目录的本地源
发布时需注意目录
文件的权限问题,建议执行:chown -R apache:apache /app/centos6命令,确保权限设置正确。