方法一、
使用本地iso镜像创建本地yum仓库,该方法不推荐,只针对yum服务器无法上公网的环境下操作,毕竟iso镜像里的包非常有限。
使用putty的上传工具,上传一个完整的centos操作系统
G:\centos>pscp "CentOS-7.3-x86_64-DVD-1611 (1).iso" [email protected]:/root/
[email protected]'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