使用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简单使用

欢迎关注我的其它发布渠道