> CentOS > CentOS教程 >

在Centos7.3搭建Yum私有仓库

方法一、

使用本地iso镜像创建本地yum仓库,该方法不推荐,只针对yum服务器无法上公网的环境下操作,毕竟iso镜像里的包非常有限。

使用putty的上传工具,上传一个完整的centos操作系统

G:\centos>pscp "CentOS-7.3-x86_64-DVD-1611 (1).iso" root@192.168.0.172:/root/

root@192.168.0.172's password:

CentOS-7.3-x86_64-DVD-161 | 961092 kB | 11175.5 kB/s | ETA: 00:04:56 |  22%



mount -o loop CentOS-7.3-x86_64-DVD.iso /mnt

mkdir /centos7.3

cp -r /mnt/Packages/*.rpm  /centos7.3/



yum install -y createrepo

使用createrepo创建索引

createrepo /centos7.3



更新索引

createrepo --update /centos7.3

清理yum缓存数据

yum clean all

yum makecache

更改系统默认的yum源



vi  /etc/yum.repos.d/CentOS-Base.repo

[base]

name=CentOS-$releasever - Base

#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra

baseurl=file:///centos7.3

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7.3





测试环境Centos7.3

本文涉及到的fpm知识,具体请参考用FPM制作rpm包

方法一、

使用本地iso镜像创建本地yum仓库,该方法不推荐,只针对yum服务器无法上公网的环境下操作,毕竟iso镜像里的包非常有限。

mount -o loop CentOS-7.3-x86_64-DVD.iso /mnt

mkdir /centos7

cp -r /mnt/Packages/*.rpm  /centos7/



使用createrepo创建索引

createrepo /centos7



更新索引

createrepo --update /centos7



清理yum缓存数据

yum clean all



然后使用yum makecache #更新缓存



更改系统默认的yum源

cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak



vi  /etc/yum.repos.d/CentOS-Base.repo

[base]

name=CentOS-$releasever - Base

#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra

baseurl=file:///centos7

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7



现在我们安装个ntpdate包来测试一下

yum install ntpdate,如下图发现已用本地yum源安装成功





方法二、

使用rsync来和公网的yum仓库同步,推荐使用此方法同步,特别是在网络不稳定容易中断的情况下,因为rsync是快速增量备份工具,它能从上次中断的文件后继续同步,缺点是很多门户网站yum源不支持rsync同步。

因为这里直接下载了公网yum源的repo文件,所以不需要再用createrepo来创建索引了,同步完之后就直接可以用了。





Base包和相关repo文件



/usr/bin/rsync -avrtzH --delete --delay-updates rsync://rsync.mirrors.ustc.edu.cn/centos/7/os/x86_64/Packages/ /var/www/html/centos/7/os/x86_64/Packages/ > /tmp/rsyncbase.log 2>&1
/usr/bin/rsync -avrtzH --delete --delay-updates rsync://rsync.mirrors.ustc.edu.cn/centos/7/os/x86_64/repodata/ /var/www/html/centos/7/os/x86_64/repodata/ > /tmp/rsyncbaserepo.log 2>&1




Update包和相关repo文件



/usr/bin/rsync -avrtzH --delete --delay-updates rsync://rsync.mirrors.ustc.edu.cn/centos/7/updates/x86_64/Packages/  /var/www/html/centos/7/updates/x86_64/Packages/ > /tmp/rsyncupdate.log 2>&1
/usr/bin/rsync -avrtzH --delete --delay-updates rsync://rsync.mirrors.ustc.edu.cn/centos/7/updates/x86_64/repodata/ /var/www/html/centos/7/updates/x86_64/repodata/ > /tmp/rsyncupdaterepo.log 2>&1
epel的扩展包



/usr/bin/rsync -avrtzH --delete --delay-updates --exclude=SRPMS/ --exclude=aarch64/ --exclude=ppc64/ --exclude=ppc64le/ --exclude=x86_64/debug/ rsync://rsync.mirrors.ustc.edu.cn/epel/7/  /var/www/html/epel/7/  > /tmp/rsyncepel.log 2>&1
参数说明-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属

-v, --verbose 详细模式输出

-r, --recursive 对子目录以递归模式处理

-t, --times 保持文件时间信息

-z, --compress 对备份的文件在传输时进行压缩处理

-H, --hard-links 保留硬链接

--delete 删除那些DST中SRC没有的文件

--delay-updates 在传输末尾把所有更新的文件放到位

--exclude=PATTERN 指定排除不需要传输的文件模式

--include=PATTERN 指定不排除而需要传输的文件模式



方法三、

使用reposync来和公网yum源同步

这里拿阿里云的epel源来做测试

1、现在阿里云镜像源repo文件到本地:

wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo



2、安装httpd服务,用于提供存放yum源:

[root@localhost~] yum install httpd -y

使用默认配置即可,如果有特殊需求可以修改配置文件/etc/httpd/conf/httpd.conf

http默认家目录/var/www/html



3、安装yum-utils提供reposync服务

yum install yum-utils -y
4、选择指定仓库标识作为本地yum源:

   执行yum repolist命令查看yum仓库标识







使用epel作为本地yum源,用/var/www/html作为yum仓库根目录

reposync -r epel -p /var/www/html







命令执行完毕后,会将阿里云中的epel源同步到本地/var/www/html中;在/var/www/html中自动创建epel目录用于存放rpm包;第一次同步是时间可能较长,大概1W多个rpm包。



5、createrepo命令对/var/www/html/epel下的 rpm包创建为本地的 YUM 仓库,目的是为生成repodata目录并自动创建索引信息

[root@localhost ~]# createrepo -pdo /var/www/html/epel/ /var/www/html/epel/

#第一个目录是repodata存放目录,第二个目录是需要生成索引信息yum源仓库目录



登录其他内网其他服务器,要能与yum源服务器通信;编写repo文件:

vim /etc/yum.repos.d/epel-7.repo内容如下
[epel]
name=local epel
baseurl=http://yum源服务器IP/epel
enabled=1
gpgcheck=0
执行yum clean all、yum makecache清除并更新yum缓存



6、为保证本地yum源能和阿里云镜像源同步,可以通过脚本定时任务实现:



vim /root/yum-update.sh
#!/bin/bash
datetime=`date +"%Y-%m-%d"`
exec > /var/log/epel.log  #同步日志输出
reposync -d -r epel -p /var/www/html/    #同步镜像源
if [ $? -eq 0 ];then
    createrepo --update  /var/www/html/epel   #每次添加新的rpm时,必须更新epel索引信息
echo "SUCESS: $datetime epel update successful"
else
echo "ERROR: $datetime epel update failed"
fi
#定时任务:每周六凌晨三点同步yum源

crontab -e

3 * * 6 /bin/bash/root/yum-update.sh



创建属于自己配置要求的定制化yum仓库

上面我们说的都是怎么从公网yum源到本地,现在我们根据需求自己用tar包编译安装,然后使用fpm工具来生成 rpm安装包,最后把生成的rpm包放进属于你自己的yum仓库

安装fpm工具



yum install -y ruby rubygems ruby-devel rpm-build
gem sources --remove https://rubygems.org/
gem sources -a https://mirrors.aliyun.com/rubygems/
gem install fpm -v 1.4.0


需要先手动编译一下nginx



groupadd nginx
useradd -g nginx -s /sbin/nologin nginx
mkdir /var/log/nginx&&chown -R nginx:nginx /var/log/nginx
mkdir /usr/local/www&&chown -R nginx:nginx /usr/local/www

wget http://nginx.org/download/nginx-1.14.0.tar.gz
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-http_flv_module  \
--with-http_gzip_static_module
make
make install DESTDIR=/tmp/nginx  #将安装文件生成一份安装在/tmp/nginx下
make install
生成rpm包需要的4个脚本

rpm包安装前脚本



[root@localhost scripts]# cat install_nginx_before.sh
#!/bin/bash
date=`date +%Y%m%d%H%M%S`

[[ -n `ps aux|grep sbin/nginx|grep -v grep` ]] && killall -9 nginx
if [ -f /usr/local/nginx/conf/nginx.conf ];then
    mv -f /usr/local/nginx/conf/nginx.conf /tmp/nginx.conf-${date}
fi
if [ -d /usr/local/nginx ];then
    rm -rf /usr/local/nginx
fi
[[ -n `getent group nginx` ]] || groupadd  nginx
[[ -n `getent passwd nginx` ]] || useradd nginx -g nginx -s /sbin/nologin
exit 0
rpm安装后脚本



[root@localhost scripts]# cat install_nginx_after.sh
#!/bin/bash
log="/var/log/nginx"
web="/usr/local/www"
if [ -d "$log" ];then
    rm -rf "$log"
    mkdir "$log"
else
   mkdir "$log"
fi

if [ -d "$web" ];then
    rm -rf "$web"
    mkdir "$web"
else
   mkdir "$web"
fi
chown -R nginx.nginx /var/log/nginx
chown -R nginx.nginx /usr/local/www
exit 0


rpm包卸载前脚本



[root@localhost scripts]# cat uninstall_nginx_before.sh
#!/bin/bash
[[ -n `ps aux|grep sbin/nginx|grep -v grep` ]] && killall -9 nginx
exit 0
rpm包卸载后脚本



[root@localhostscripts]# cat uninstall_nginx_after.sh
#!/bin/bash
rm -rf/usr/local/nginx
rm -rf /usr/local/www
rm -rf /var/log/nginx
userdel -r nginx
exit 0
fpm命令打包



fpm -s dir -t rpm -n nginx_test -v 1.14.0  -d "pcre-devel,openssl-devel >= 1:1.0.2k-8"  --pre-install /tmp/scripts/install_nginx_before.sh --post-install /tmp/scripts/install_nginx_after.sh --pre-uninstall /tmp/scripts/uninstall_nginx_before.sh --post-uninstall /tmp/scripts/uninstall_nginx_after.sh -C /tmp/nginx/
复制生成的rpm到你的私有仓库

cp nginx_test12-1.14.0-1.x86_64.rpm /var/www/html/private

使用createrepo创建索引

createrepo /var/www/html/private/

最后我们看下客户端机器的yum仓库配置文件,这里以192.168.10.59为yum仓库为例

Base的本地仓库

[root@localhost tmp]#cat /etc/yum.repos.d/CentOS-Base.repo

[base]

name=CentOS-$releasever- Base

#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra

baseurl=http://192.168.10.59/centos/$releasever/os/$basearch/

enabled=1

gpgcheck=0



gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7



#released updates

[updates]

name=CentOS-$releasever- Updates

#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra

baseurl=http://192.168.10.59/centos/$releasever/updates/$basearch/

#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/

enabled=1

gpgcheck=0

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7



epel的本地仓库

[root@localhost tmp]#cat /etc/yum.repos.d/epel.repo

[epel]

name=Extra Packagesfor Enterprise Linux $releasever - $basearch

baseurl=http://192.168.10.59/epel/7/x86_64/

failovermethod=priority

enabled=1

gpgcheck=0

gpgkey=http://mirrors.sohu.com/RPM-GPG-KEY-EPEL-$releasever



最后通过fpm生成rpm包的私有yum仓库

[root@localhost tmp]#cat /etc/yum.repos.d/private.repo

[private]

name=private - Base

#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra

baseurl=http://192.168.10.59/private/

enabled=1

gpgcheck=0

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

先执行yum clean all后执行yum makecache

执行yum repolist命令查看yum仓库标识

执行yum install nginx_test12

我们看到能够成功通过yum安装nginx_test12测试包。

https://blog.csdn.net/u013127762/article/details/54314550

http://blog.51cto.com/gdlwolf/1729020

http://www.mamicode.com/info-detail-1839438.html



(责任编辑:IT)