自建yum仓库(Centos6 版本 阿里云+epel)

起因:公司有屏蔽外网的高保密级生产内网,内有linux机器,但是装软件很麻烦,需要一个个上传rpm包,会导致依赖性检查地狱。于是打算建个yum软件仓库,来提供软件安装支持。

服务器内网IP:192.168.0.66(之后看到这个IP,请根据自己的软件仓库服务器更改此IP,建议按照后记的方法设置个域名绑定)

客户端系统版本:redhat-6.5,配置源为CentOS6+rhel

先通过yum装上要使用的工具

yum install createrepo yum-utils -y

然后创建个目录,用于存放yum仓库的文件,我的是在/home/yum/yum_ali_cloud/下,请自行修改,如果怕出问题就山寨我的目录好了。

既然要copy别人的软件源,就要选个速度尽量快+支持reposync的软件源仓库。这里选用的是阿里云。在/etc/yum.repos.d/ 路径下新建一个.repo文件,填入以下的阿里云软件源配置。

# CentOS-Base.repo

# The mirror system uses the connecting IP address of the client and the

# update status of each mirror to pick mirrors that are updated to and # geographically close to the client. You should use this for CentOS updates

# unless you are manually picking other mirrors.

#

# If the mirrorlist= does not work for you, as a fall back you can try the # remarked out baseurl= line instead.

#

#

[base] name=CentOS-$releasever – Base – mirrors.aliyun.com failovermethod=priority baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/ http://mirrors.aliyuncs.com/centos/$releasever/os/$basearch/ #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os gpgcheck=1 gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-6 #released updates [updates] name=CentOS-$releasever – Updates – mirrors.aliyun.com failovermethod=priority baseurl=http://mirrors.aliyun.com/centos/$releasever/updates/$basearch/ http://mirrors.aliyuncs.com/centos/$releasever/updates/$basearch/ #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates gpgcheck=1 gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-6 #additional packages that may be useful [extras] name=CentOS-$releasever – Extras – mirrors.aliyun.com failovermethod=priority baseurl=http://mirrors.aliyun.com/centos/$releasever/extras/$basearch/ http://mirrors.aliyuncs.com/centos/$releasever/extras/$basearch/ #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras gpgcheck=1 gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-6 #additional packages that extend functionality of existing packages [centosplus] name=CentOS-$releasever – Plus – mirrors.aliyun.com failovermethod=priority baseurl=http://mirrors.aliyun.com/centos/$releasever/centosplus/$basearch/ http://mirrors.aliyuncs.com/centos/$releasever/centosplus/$basearch/ #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus gpgcheck=1 enabled=0 gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-6 #contrib – packages by Centos Users [contrib] name=CentOS-$releasever – Contrib – mirrors.aliyun.com failovermethod=priority baseurl=http://mirrors.aliyun.com/centos/$releasever/contrib/$basearch/ http://mirrors.aliyuncs.com/centos/$releasever/contrib/$basearch/ #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib gpgcheck=1 enabled=0 gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-6

 

因为服务器的系统也是redhat 6.5,这里的环境量$releasever 返回值不对,导致添加的yum源后报错,提示内容为无法访问对应网址。需要手动把$releasever替换为版本号6。(不要自作聪明,把$releasever替换为6.5,阿里云下的源好像已经汇总到6的大版本号了,6.5里面只有个readme,提示你修改成6)

也可以自己设置个环境变量,把releasever的值设置为6。

bash环境下的设置方式

export releasever=”6″

c-shell环境下的设置方式

setenv releasever 6

接下来继续添加rhel源,这个源里面包含大部分redhat的企业软件资源包

rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm

然后进行yum缓存更新,把这两个软件源的软件列表缓存到本地

#先清除一波yum的缓存

yum clean all

#缓存软件列表

yum makecache

添加完毕,接下来cd到仓库目录,执行以下命令

reposync -r base

trpodunv -r epel

reposync -r extras

reposync -r updates

利用reposync指令,把源里面的4个源复制下来,于是会在仓库目录下多出来base、epel、extras、updates四个文件夹。

reposync的工作方式有点类似于rsync,是按差量进行比对的,可以中断后重传。截止发帖是,以上四个文件源文件夹大概有25G左右的体积,2万多个软件包,故同步下载的时候请注意时间,尽量不要用经常会断开连接的ssh客户端来跑,用nohup或者screen挂个后台会比较好。

建完之后就是创建YUM仓库了,打开这四个文件夹,每个文件夹里都跑一次create repo

createrepo ./

注意,是在base、epel这些文件夹里跑,时间比较长,请提前安排好任务和时间计划。

执行完毕后,这个目录就能当yum仓库了。接下来就是建立http服务,把这些内容通过http形式,提供给内网,这里用的是nginx。

yum -y install nginx

安装nginx完毕后,进入/etc/nginx/conf.d/,修改default.conf。

server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
#root /usr/share/nginx/html;
autoindex on;
root /home/yum/yum_ali_cloud;
}

里面的 root /home/yum/yum_ali_cloud表示把目录设定到我们的yum仓库目录。

做到这一步,已经把我们的yum仓库搭建完毕了,但是事情还没完,还要给内网的其他机器添加我们这台服务器的本地源。到他们的/etc/yum.repos.d/添加一个新的repo文件,例如:local.repo

[base]
name=CentOS-Base(GDS)
baseurl=http://192.168.0.66/base
path=/
enabled=1
gpgcheck=0

[updates]
name=CentOS-Updates(GDS)
baseurl=http://192.168.0.66/updates
path=/
enabled=1
gpgcheck=0

[epel]
name=Redhat-enterprise(epel)
baseurl=http://192.168.0.66/epel
path=/
enabled=1
gpgcheck=0

[extras]
name=CentOS-Extras(GDS)
baseurl=http://192.168.0.66/extras
path=/
enabled=1
gpgcheck=0

192.168.0.66为服务器装好后你配的内网地址,务必为固定地址,免得以后自动分配IP导致IP变动,无法访问yum服务器。

也可以把地址

然后把这个/etc/yum.repos.d/文件夹下之前的yum源给删掉,反正你以后用不到他们了,没必要留在里头添乱。再进行yum缓存更新

yum clean all

yum makecache

enjoy!

 

后记:

把IP设置为192.168.0.66这个固定IP的方法有点蠢,其实最好方法应该是把以上的192.168.0.66绑定一个域名(比如 yum.****.com  ,***可以是公司名,反正只在内网生效,随便取),然后通过修改/etc/hosts 的方式来实现本地的域名解析。

这样,万一服务器需要更换IP了,编辑一下hosts文件,再挂到HTTP服务器上(偷懒的话,可以直接挂到yum服务器的HTTP服务目录内),每个linux主机再去手动wget一下即可。

hosts实例(请按照格式添加到hosts文件尾部):

192.168.0.66 yum.yourcompany.com

将0.66这个IP改成你自己的yum服务器IP, 域名可以随便按喜好取,符合规范即可。