方法一、 使用本地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) |