使用rsync搭建centos的镜像站

简介

自己一直以来相搭建一个开源镜像站,一方面可以了解搭建镜像站的知识,一方面可以同步那些国内没有的linux发行版软件源,但是最主要的原因只是为了好玩

注意点

我这个教程不是专业教程,但是要注意的是镜像站是一个对I/O要求很高,网络带宽要求很高,磁盘占用量的站点,不然没人用

步骤

  • 安装需要的软件(nginx,rsync)
  • 配置nginx
  • 编写同步脚本

编译安装nginx

  • 安装PCRE库 下载解压 wget https://ftp.pcre.org/pub/pcre/pcre-8.41.tar.gz tar -zxvf pcre-8.41.tar.gz cd pcre-8.41 编译安装 ./configure --prefix=/usr/local/pcre make make install
  • 安装zlib 下载解压 wget http://zlib.net/zlib-1.2.11.tar.gz tar -zxvf zlib-1.2.11.tar.gz cd zlib-1.2.11 编译安装 ./configure --prefix=/usr/local/zlib make make install
  • 安装openssl库 wget https://www.openssl.org/source/openssl-1.0.2l.tar.gz tar -zxvf openssl-1.0.2l.tar.gz cd openssl-1.0.2l 编译安装 ./config --prefix=/usr/local/openssl make make install
  • 安装nginx 下载解压 wget http://mirrors.sohu.com/nginx/nginx-1.12.1.tar.gz tar -zxvf nginx-1.12.1.tar.gz cd nginx-1.12.1 编译安装 ./configure --prefix=/usr/local/nginx --with-pcre=/usr/local/pcre/ --with-zlib=/usr/local/zlib/ --with-openssl=/usr/local/openssl/ make 报错
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
[[email protected] nginx-1.12.1]# make
make -f objs/Makefile
make[1]: Entering directory `/root/nginx-1.12.1'
cd /usr/local/pcre/ \
&& if [ -f Makefile ]; then make distclean; fi \
&& CC="cc" CFLAGS="-O2 -fomit-frame-pointer -pipe " \
./configure --disable-shared 
/bin/sh: line 2: ./configure: No such file or directory
make[1]: *** [/usr/local/pcre//Makefile] Error 127
make[1]: Leaving directory `/root/nginx-1.12.1'
make: *** [build] Error 2

百度了一下,原来–with-pcre要指定的不是安装目录而是源码目录 ./configure --prefix=/usr/local/nginx --with-pcre=/root/pcre-8.41 --with-zlib=/usr/local/zlib/ --with-openssl=/usr/local/openssl/ make 又报错

1
2
3
4
5
6
7
src/http/modules/ngx_http_log_module.c:13:18: fatal error: zlib.h: No such file or directory
 #include <zlib.h>
                  ^
compilation terminated.
make[1]: *** [objs/src/http/modules/ngx_http_log_module.o] Error 1
make[1]: Leaving directory `/root/nginx-1.12.1'
make: *** [build] Error 2

直接指定zlib的源码目录好了 ./configure --prefix=/usr/local/nginx --with-pcre=/root/pcre-8.41 --with-zlib=/root/zlib-1.2.11 --with-openssl=/usr/local/openssl/ make make install 成功

  • 测试一下 如果你这个时候还是访问不了你的nginx,出现ERR_ADDRESS_UNREACHABLE这个错误,你要检查一下你的防火墙,可以配置也可以选择关闭 systemctl stop firewalld.service

其实到这一步的时候我已经忘记我在干什么了,看了一下标题,哦!原来我在做一个镜像站,,,,,

安装rsync

yum install rsync

配置

之后,配置一下站点 在home文件夹下创建一个站点文件来存放同步过来的资源 mkdir /home/mirror 之后修改nginx.conf的server段为

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
    server {
        listen       80;
        server_name  localhost;
        root    /home/mirror;
        location / {    
                autoindex on;
                autoindex_exact_size off;
                autoindex_localtime on;
        }

    }

重启一下服务器

1
2
3
4
5
6
[[email protected] sbin]# pidof nginx
31632 31631
[[email protected] sbin]# kill 31632 31631
[[email protected] sbin]# pidof nginx
[[email protected] sbin]# ./nginx
[[email protected] sbin]# 

接着你去访问站点,看到的就会是下面这样,因为打开了nginx的目录浏览功能autoindex

1
2
Index of /
../

安装createrepo yum install createrepo 因为centos的软件包目录有点多,而且大,所以为了方便我就只同步epel软件源了 mkdir epel cd epel mkdir 7 之后编写一个同步脚本

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
rsync -avz rsync://mirror.de.leaseweb.net/epel/7/SRPMS/ /home/mirror/epel/7/SRPMS/
createrepo /home/mirror/epel/7/SRPMS/

rsync -avz rsync://mirror.de.leaseweb.net/epel/7/aarch64/ /home/mirror/epel/7/aarch64/
createrepo /home/mirror/epel/7/aarch64/

rsync -avz rsync://mirror.de.leaseweb.net/epel/7/ppc64/ /home/mirror/epel/7/ppc64/
createrepo /home/mirror/epel/7/ppc64/

rsync -avz rsync://mirror.de.leaseweb.net/epel/7/ppc64le/ /home/mirror/epel/7/ppc64le/
createrepo /home/mirror/epel/7/ppc64le/

rsync -avz rsync://mirror.de.leaseweb.net/epel/7/x86_64/ /home/mirror/epel/7/x86_64/
createrepo /home/mirror/epel/7/x86_64/

echo "bboysoul done"

赋予执行权限 sudo chmod +x rsync.sh 安装screen yum install screen 建立一个新的会话 screen -S rsync 执行脚本 ./rsync.sh ctrl+a+d退出 你可以安装bwm-ng来监控网速 经过两天的折腾,镜像终于同步完成 至于为什么这么慢,是因为之前是在清华大学mirror下同步的,但是那个mirror总是同步到一半之后就同步不料了,下面我推荐一个国外镜像站,清华大学的epel源也是在那边同步过来的,这个时候我不得不说一下很多国外镜像源都是支持rsync的,这可以看出,外国人还是挺良心的,所以百度我草泥马,为什么骂百度?因为没什么地方骂,所以,骂百度是没有错的。 epel源同步完成之后,总的大小有

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
[[email protected] 7]# df -h
文件系统                      容量  已用  可用 已用% 挂载点
/dev/mapper/cl_bboysoul-root   50G  2.3G   48G    5% /
devtmpfs                      235M     0  235M    0% /dev
tmpfs                         245M     0  245M    0% /dev/shm
tmpfs                         245M  4.3M  241M    2% /run
tmpfs                         245M     0  245M    0% /sys/fs/cgroup
/dev/sda1                    1014M  138M  877M   14% /boot
/dev/mapper/cl_bboysoul-home  247G  108G  139G   44% /home
tmpfs                          49M     0   49M    0% /run/user/0

108G!没错。

客户端配置

首先update一下原来的系统,证明原来的系统有软件源,而且是可以用的

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
[[email protected] etc]# yum update
已加载插件:fastestmirror
base                                                     | 3.6 kB     00:00     
extras                                                   | 3.4 kB     00:00     
updates                                                  | 3.4 kB     00:00     
extras/7/x86_64/primary_db                                 | 191 kB   00:00     
Loading mirror speeds from cached hostfile
 * base: mirrors.zju.edu.cn
 * extras: mirrors.zju.edu.cn
 * updates: centos.ustc.edu.cn
No packages marked for update

接着备份一下原来客户端的软件源

1
2
3
4
[[email protected] etc]# cp -rf yum.repos.d/ /root
[[email protected] etc]# ls /root/yum.repos.d/
CentOS-Base.repo  CentOS-Debuginfo.repo  CentOS-Media.repo    CentOS-Vault.repo
CentOS-CR.repo    CentOS-fasttrack.repo  CentOS-Sources.repo

删除原来的所有软件源

1
2
[[email protected] etc]# rm -rf yum.repos.d/
[[email protected] etc]# mkdir yum.repos.d

在文件夹中新建一个文件bboysoul.repo touch bboysoul.repo 写入内容

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[epel-1]
name=bboysoul local mirror
baseurl=http://1.1.1.15/epel/7/x86_64/
enabled=1
gpgcheck=0

[epel-2]
name=bboysoul local mirror
baseurl=http://1.1.1.15/epel/7/ppc64le/
enable=1
gpgcheck=0

[epel-3]
name=bboysoul local mirror
baseurl=http://1.1.1.15/epel/7/ppc64/
enable=1
gpgcheck=0

[epel-4]
name=bboysoul local mirror
baseurl=http://1.1.1.15/epel/7/aarch64/
enable=1
gpgcheck=0

[epel-5]
name=bboysoul local mirror
baseurl=http://1.1.1.15/epel/7/SRPMS/
enable=1
gpgcheck=0

接着清理原来的缓存再建立新的缓存 yum clean all

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[[email protected] yum.repos.d]# yum makecache
已加载插件:fastestmirror
epel-1                                                          | 2.9 kB  00:00:00     
epel-2                                                          | 2.9 kB  00:00:00     
epel-3                                                          | 2.9 kB  00:00:00     
epel-4                                                          | 2.9 kB  00:00:00     
epel-5                                                          | 2.9 kB  00:00:00     
(1/15): epel-1/primary_db                                       | 6.7 MB  00:00:00     
(2/15): epel-1/filelists_db                                     |  14 MB  00:00:00     
(3/15): epel-1/other_db                                         | 3.6 MB  00:00:00     
(4/15): epel-2/primary_db                                       | 6.0 MB  00:00:00     
(5/15): epel-2/filelists_db                                     |  13 MB  00:00:00     
(6/15): epel-2/other_db                                         | 3.4 MB  00:00:00     
(7/15): epel-3/primary_db                                       | 6.1 MB  00:00:00     
(8/15): epel-3/filelists_db                                     |  13 MB  00:00:00     
(9/15): epel-3/other_db                                         | 3.4 MB  00:00:00     
(10/15): epel-4/primary_db                                      | 6.2 MB  00:00:00     
(11/15): epel-4/filelists_db                                    |  13 MB  00:00:01     
(12/15): epel-4/other_db                                        | 3.4 MB  00:00:00     
(13/15): epel-5/filelists_db                                    | 704 kB  00:00:00     
(14/15): epel-5/primary_db                                      | 2.1 MB  00:00:00     
(15/15): epel-5/other_db                                        | 1.7 MB  00:00:00     
Determining fastest mirrors
元数据缓存已建立

之后安装一个软件包试试

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
[[email protected] yum.repos.d]# yum install htop
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
正在解决依赖关系
--> 正在检查事务
---> 软件包 htop.x86_64.0.2.0.2-1.el7 将被 安装
--> 解决依赖关系完成

依赖关系解决

===============================================================================
 Package        架构             版本                   源                大小
===============================================================================
正在安装:
 htop           x86_64           2.0.2-1.el7            epel-1            98 k

事务概要
===============================================================================
安装  1 软件包

总下载量:98 k
安装大小:207 k
Is this ok [y/d/N]: y
Downloading packages:
htop-2.0.2-1.el7.x86_64.rpm                                                                                                                              |  98 kB  00:00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  正在安装    : htop-2.0.2-1.el7.x86_64                                                                                                                                     1/1 
  验证中      : htop-2.0.2-1.el7.x86_64                                                                                                                                     1/1 

已安装:
  htop.x86_64 0:2.0.2-1.el7                                                                                                                                                     

完毕!
[[email protected] yum.repos.d]# 

没问题

服务端自动执行脚本同步

我这里使用的是crontab 编辑crontab的配置文件 crontab -e 输入下面的内容

1
*  0  *  *  *  /home/mirror/rsync.sh

sudo service crond restart 这样你的机器就会在每天晚上12点自动同步软件源了,了解crontab的详细使用方法可以看我的博客 crontab简单使用