测试配置yum仓库的http镜像

一、基础环境1、在tvm-base的基础上,复制一个镜像为tvm-yum来测试。2、网络:eth0:host-only(用于虚拟内网,手动固定IP,这样从宿主机可以直接连接到这个vm)eth1:NAT(用于上外网,动态IP)[root@tvm-yum ~]# cd /etc/sysconfig/network-scripts/[root@tvm-yum network-scripts]# cat ifcfg-eth0DEVICE=eth0TYPE=EthernetONBOOT=yesNM_CONTROLLED=yesBOOTPROTO=noneIPADDR=192.168.56.254PREFIX=24GATEWAY=192.168.56.1[root@tvm-yum network-scripts]# cat ifcfg-eth1DEVICE=eth1TYPE=EthernetONBOOT=yesNM_CONTROLLED=yesBOOTPROTO=dhcp[root@tvm-yum ~]# ip a s dev eth0 |grep global    inet 192.168.56.254/24 brd 192.168.56.255 scope global eth0[root@tvm-yum ~]# ip a s dev eth1 |grep global     inet 10.0.3.15/24 brd 10.0.3.255 scope global eth1[root@tvm-yum ~]# route -nKernel IP routing tableDestination     Gateway         Genmask         Flags Metric Ref    Use Iface10.0.3.0        0.0.0.0         255.255.255.0   U     0      0        0 eth1192.168.56.0    0.0.0.0         255.255.255.0   U     0      0        0 eth0169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0169.254.0.0     0.0.0.0         255.255.0.0     U     1003   0        0 eth10.0.0.0         10.0.3.2        0.0.0.0         UG    0      0        0 eth13、配置这台服务器为ntp和dns服务器,涉及:1)ntp服务(防火墙放行:udp 123)使用脚本配置:https://github.com/opera443399/ops/blob/master/bin/linux/init_datetime.sh[root@tvm-yum ~]# sh init_datetime.sh s2)dnsmasq服务 (防火墙放行:udp 53)[root@tvm-yum ~]# yum -y install dnsmasq将涉及域名写入hosts文件:[root@tvm-yum ~]# cat /etc/hosts |grep -v localhost127.0.0.1 tvm-yum192.168.56.254 mirrors.office.test192.168.56.254 ntp.office.test192.158.56.252 cobbler.office.test启动服务:[root@tvm-yum ~]# service dnsmasq start增加到开机启动:[root@tvm-yum bin]# chkconfig dnsmasq on二、配置web服务1、防火墙放行80端口2、配置httpd若没有禁用selinux,则应当这样配置:[root@tvm-yum ~]# chcon -Rv --type=httpd_sys_content_t /data/yum/repo/否则,直接禁用selinux[root@tvm-yum ~]# yum -y install httpd调整httpd的配置:[root@tvm-yum ~]# cat /etc/httpd/conf/httpd.conf |grep ServerName |grep ^[^#]ServerName 127.0.0.1虚拟主机:[root@tvm-yum ~]# mv /etc/httpd/conf.d/welcome.conf /tmp/[root@tvm-yum ~]# cat /etc/httpd/conf.d/mirrors.office.test.conf 
    ServerAdmin pc@office.test    ServerName mirrors.office.test    DocumentRoot /data/yum/repo        ErrorLog logs/mirrors.office.test-error_log    CustomLog logs/mirrors.office.test-access_log common    
        options Indexes FollowSymLinks        AllowOverride None        Order allow,deny        Allow from all    3、启动httpd服务[root@tvm-yum ~]# chown -R apache:apache /data/yum/repo[root@tvm-yum ~]# service httpd start接下来需要:1)配置一个local yum 镜像,并定时从公网的mirrors同步数据。注1:不需要i386目录,此处只用x86_64的版本。注2:不需要isos目录,里面存放的是iso文件。注3:不需要ppc64目录,里面是powerpc架构的。2)提供local-office.repo文件,供客户端用。三、配置目录和脚本,制作本地的yum镜像[root@tvm-yum ~]# mkdir -p /data/yum/repo/{centos,epel}/6 /data/download/ /data/ops/bin/1、从iso文件拷贝内容。本机目前只有CentOS-6.5的版本,当然,应该用6.6的更佳。2种方式:1)上传iso文件到/data/download/2)也可以直接挂载光碟[root@tvm-yum ~]# ls /data/download/CentOS-6.5-x86_64-bin-DVD1.iso  CentOS-6.5-x86_64-bin-DVD2.iso[root@tvm-yum ~]# mkdir -p /data/yum/repo/centos/6/os/x86_642、同步iso文件中的内容:[root@tvm-yum ~]# mount -ro loop /data/download/CentOS-6.5-x86_64-bin-DVD1.iso /mnt[root@tvm-yum ~]# rsync -avHPS /mnt/ /data/yum/repo/centos/6/os/x86_64/[root@tvm-yum ~]# umount /mnt[root@tvm-yum ~]# mount -ro loop /data/download/CentOS-6.5-x86_64-bin-DVD2.iso /mnt[root@tvm-yum ~]# rsync -avHPS /mnt/ /data/yum/repo/centos/6/os/x86_64/[root@tvm-yum ~]# umount /mnt3、测试httpd服务的访问访问:http://mirrors.office.test/centos抓包信息:[root@tvm-yum ~]# curl -o /dev/null -v -I http://mirrors.office.test/centos/* About to connect() to mirrors.office.test port 80 (#0)*   Trying 192.168.56.254... connected* Connected to mirrors.office.test (192.168.56.254) port 80 (#0)> HEAD /centos/ HTTP/1.1> User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2> Host: mirrors.office.test> Accept: */*> < HTTP/1.1 200 OK< Date: Tue, 14 Jul 2015 02:32:14 GMT< Server: Apache/2.2.15 (CentOS)< Connection: close< Content-Type: text/html;charset=UTF-8<   % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current                                 Dload  Upload   Total   Spent    Left  Speed  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* Closing connection #0chrome抓包信息:Remote Address:192.168.56.254:80Request URL:http://mirrors.office.test/centos/Request Method:GETStatus Code:200 OKRemote Address:192.168.56.254:80Request URL:http://mirrors.office.test/centos/Request Method:GETStatus Code:200 OK4、选一个mirrors,通过脚本从mirrors同步。这里我选择了一个支持rsync协议的镜像:http://mirrors.ustc.edu.cn/centos/可以在搜索引擎搜索“rsync epel  6/x86_64/”这类关键词来找mirros,当然这里也有一个centos的列表:http://www.centos.org/download/mirrors/配置脚本同步,并放到crontab中定时执行----------------------------------------[root@tvm-yum bin]# cat repo_update.sh #!/bin/bash## 2015/7/17f_log='/tmp/repo_update_run.log'if [ -f /var/lock/subsys/repo_update ]; then    echo "[`date`] 同步任务已经在执行中。" >>${f_log}    exit 0fid_centos='/data/yum/repo/centos/6'd_epel='/data/yum/repo/epel/6'-d ${d_centos} ||mkdir -p ${d_centos}-d ${d_epel} ||mkdir -p ${d_epel}touch /var/lock/subsys/repo_update### centos ###echo "[`date`] 开始同步centos"  >>${f_log} rsync -avzP --delete --delete-excluded --exclude "isos" --exclude "i386" rsync://mirrors.ustc.edu.cn/centos/6/ /data/yum/repo/centos/6/ 2>>${f_log}echo "[`date`] 操作结束。"  >>${f_log} ### epel ###echo "[`date`] 开始同步epel"  >>${f_log} rsync -avzP --delete  --delete-excluded --exclude "i386" --exclude "ppc64" rsync://mirrors.ustc.edu.cn/epel/6/ /data/yum/repo/epel/6/ 2>>${f_log}echo "[`date`] 操作结束。"  >>${f_log} rm /var/lock/subsys/repo_updateecho "[`date`] 完成本次任务。"  >>${f_log} chown -R apache:apache /data/yum/repo----------------------------------------放到crontab中[root@tvm-yum ~]# cat <<_NTP >>/var/spool/cron/root# repo update0 4 * * * /bin/bash /data/ops/bin/repo_update.sh >/tmp/repo.log 2>&1 &_NTP先手动执行一次:[root@tvm-yum ~]# /bin/bash /data/ops/bin/repo_update.sh >/tmp/repo.log 2>&1 &5、提供一个office源,供自定义的安装,包含企业定制rpm包,新版本的开源软件的rpm包[root@tvm-yum ~]# yum install createrepo[root@tvm-yum ~]# mkdir -p /data/yum/repo/office/centos/6/x86_64[root@tvm-yum ~]# cd /data/yum/repo/office/6/x86_64[root@tvm-yum x86_64]# wget 还可以一次下载多个rpm包:[root@tvm-yum ~]# wget --execute robots=off -nc -nd -r -l1 -A'*.rpm' http://download.gluster.org/pub/gluster/glusterfs/3.6/LATEST/CentOS/epel-6/x86_64/ 使用createrepo工具:[root@tvm-yum x86_64]# createrepo .[root@tvm-yum ~]# cd -[root@tvm-yum ~]# chown -R apache:apache /data/yum/repo                            6、提供local-office.repo文件现有的目录:[root@tvm-yum ~]# tree /data/yum/repo/ -L 3/data/yum/repo/├── centos│   ├── 6│   │   ├── centosplus│   │   ├── cloud│   │   ├── contrib│   │   ├── cr│   │   ├── extras│   │   ├── fasttrack│   │   ├── os│   │   ├── SCL│   │   ├── updates│   │   └── xen4│   └── RPM-GPG-KEY-CentOS-6├── epel│   ├── 6│   │   ├── SRPMS│   │   └── x86_64│   └── RPM-GPG-KEY-EPEL-6├── local-office.repo└── office    └── 6        └── x86_64制作文件:local-office.repo-----------------------------------[root@tvm-yum ~]# cat /data/yum/repo/local-office.repo ## local-office.repo# 2015/8/6# 包含:Centos-Base, epel, office源。## ------------------ 包含基础的os里面的rpm包[base]name=CentOS-$releasever - Basebaseurl=http://mirrors.office.test/centos/$releasever/os/$basearch/gpgcheck=1gpgkey=http://mirrors.office.test/centos/RPM-GPG-KEY-CentOS-$releasever#released updates - 包含可以更新的包[updates]name=CentOS-$releasever - Updatesbaseurl=http://mirrors.office.test/centos/$releasever/updates/$basearch/gpgcheck=1gpgkey=http://mirrors.office.test/centos/RPM-GPG-KEY-CentOS-$releasever#additional packages that may be useful - 包含额外的包[extras]name=CentOS-$releasever - Extrasbaseurl=http://mirrors.office.test/centos/$releasever/extras/$basearch/gpgcheck=1gpgkey=http://mirrors.office.test/centos/RPM-GPG-KEY-CentOS-$releasever#additional packages that extend functionality of existing packages - 包含功能扩展的包[centosplus]name=CentOS-$releasever - Plusbaseurl=http://mirrors.office.test/centos/$releasever/centosplus/$basearch/gpgcheck=1enabled=0gpgkey=http://mirrors.office.test/centos/RPM-GPG-KEY-CentOS-$releasever#contrib - packages by Centos Users - 包含用户贡献的包[contrib]name=CentOS-$releasever - Contribbaseurl=http://mirrors.office.test/centos/$releasever/contrib/$basearch/gpgcheck=1enabled=0gpgkey=http://mirrors.office.test/centos/RPM-GPG-KEY-CentOS-$releasever# ------------------ epel - 包含额外的包[epel]name=Extra Packages for Enterprise Linux 6 - $basearchbaseurl=http://mirrors.office.test/epel/6/$basearchfailovermethod=priorityenabled=1gpgcheck=1gpgkey=http://mirrors.office.test/epel/RPM-GPG-KEY-EPEL-$releasever[epel-debuginfo]name=Extra Packages for Enterprise Linux 6 - $basearch - Debugbaseurl=http://mirrors.office.test/epel/6/$basearch/debugfailovermethod=priorityenabled=0gpgkey=http://mirrors.office.test/epel/RPM-GPG-KEY-EPEL-$releasevergpgcheck=1[epel-source]name=Extra Packages for Enterprise Linux 6 - $basearch - Sourcebaseurl=http://mirrors.office.test/epel/6/SRPMSfailovermethod=priorityenabled=0gpgkey=http://mirrors.office.test/epel/RPM-GPG-KEY-EPEL-$releasevergpgcheck=1# ------------------ office - 包含企业定制rpm包,新版本的开源软件的rpm包[office]name=enterprise office repobaseurl=http://mirrors.office.test/office/$releasever/$basearch/gpgcheck=0enabled=1-----------------------------------注意:/etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6 这个key一开始是不存在的,这里由http服务来提供,在repo文件中指向到对应的URL:gpgkey=http://mirrors.office.test/epel/RPM-GPG-KEY-EPEL-$releaseverGPG-KEY在这里:[root@tvm-yum ~]# cp /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 /data/yum/repo/centos/[root@tvm-yum ~]# cp /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6 /data/yum/repo/epel/默认安装centos后已经有了RPM-GPG-KEY-CentOS-6,RPM-GPG-KEY-EPEL-6可以通过安装公网的epel源来获取:# rpm -Uvh http://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm当然了,我们应该移除现有的repo文件,仅使用上面提供的自己的repo配置即可:【在本地】[root@tvm-yum ~]# mv /etc/yum.repos.d/*.repo /tmp/[root@tvm-yum ~]# cp /data/yum/repo/local-office.repo /etc/yum.repos.d/local-office.repo【在客户端】[root@tvm-rpm ~]# mv /etc/yum.repos.d/*.repo /tmp/ \&& wget http://mirrors.office.test/local-office.repo -O /etc/yum.repos.d/local-office.repo \&& yum clean all \&& yum makecache四、等mirros同步完成后,开始测试1、本机测试先清除缓存:[root@tvm-yum ~]# yum clean allLoaded plugins: fastestmirror, securityCleaning repos: base extras updatesCleaning up EverythingCleaning up list of fastest mirrors试着更新下系统:[root@tvm-yum ~]# yum update(略)(369/369): yum-utils-1.1.30-30.el6.noarch.rpm                                 | 110 kB     00:00     -----------------------------------------------------------------------------------------------------Total                                                                 16 MB/s | 430 MB     00:26     Running rpm_check_debugRunning Transaction TestTransaction Test SucceededRunning Transaction(略)  yum.noarch 0:3.2.29-60.el6.centos                                                                    yum-plugin-fastestmirror.noarch 0:1.1.30-30.el6                                                      yum-plugin-security.noarch 0:1.1.30-30.el6                                                           yum-utils.noarch 0:1.1.30-30.el6                                                                   Replaced:  libsss_autofs.x86_64 0:1.9.2-129.el6                                                               Complete![root@tvm-yum ~]# [root@tvm-yum ~]# cat /etc/issueCentOS release 6.6 (Final)Kernel \r on an \m2、瞧,已经升级到6.6的版本,建议reboot一下先。reboot前,先将httpd服务加入开机启动。[root@tvm-yum centos]# chkconfig httpd on[root@tvm-yum centos]# chkconfig --list |grep httpdhttpd           0:off   1:off   2:on    3:on    4:on    5:on    6:off用update升级系统后,在/etc/yum.repos.d/里面更新了CentOS相关的repo文件,因此在重启后可以考虑移除[root@tvm-yum ~]# mv -f CentOS-* /etc/yum.repos.d/ /tmp/五、客户端使用local-office.repo文件[root@tvm-rpm ~]# yum update符合预期。[root@tvm-rpm ~]# yum install nginx[root@tvm-test conf.d]# nginx -vnginx version: nginx/1.8.0符合预期。ZYXW、参考1、Creating a local repo (Mirror) with CentOS 6.2+http://darktraining.com/93/2、Creating Local Mirrors for Updates or Installshttps://wiki.centos.org/HowTos/CreateLocalMirror3、List of CentOS Mirrorshttp://www.centos.org/download/mirrors/4、How To Set Up and Use Yum Repositories on a CentOS 6 VPShttps://www.digitalocean.com/community/tutorials/how-to-set-up-and-use-yum-repositories-on-a-centos-6-vps