简介
自己一直以来相搭建一个开源镜像站,一方面可以了解搭建镜像站的知识,一方面可以同步那些国内没有的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
报错
[root@bboysoul 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
又报错
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段为
server {
listen 80;
server_name localhost;
root /home/mirror;
location / {
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
}
}
重启一下服务器
[root@bboysoul sbin]# pidof nginx
31632 31631
[root@bboysoul sbin]# kill 31632 31631
[root@bboysoul sbin]# pidof nginx
[root@bboysoul sbin]# ./nginx
[root@bboysoul sbin]#
接着你去访问站点,看到的就会是下面这样,因为打开了nginx的目录浏览功能autoindex
Index of /
../
安装createrepo
yum install createrepo
因为centos的软件包目录有点多,而且大,所以为了方便我就只同步epel软件源了
mkdir epel
cd epel
mkdir 7
之后编写一个同步脚本
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源同步完成之后,总的大小有
[root@bboysoul 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一下原来的系统,证明原来的系统有软件源,而且是可以用的
[root@bboysoul 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
接着备份一下原来客户端的软件源
[root@bboysoul etc]# cp -rf yum.repos.d/ /root
[root@bboysoul 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
删除原来的所有软件源
[root@bboysoul etc]# rm -rf yum.repos.d/
[root@bboysoul etc]# mkdir yum.repos.d
在文件夹中新建一个文件bboysoul.repo
touch bboysoul.repo
写入内容
[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
[root@bboysoul 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
元数据缓存已建立
之后安装一个软件包试试
[root@bboysoul 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
完毕!
[root@bboysoul yum.repos.d]#
没问题
服务端自动执行脚本同步
我这里使用的是crontab
编辑crontab的配置文件
crontab -e
输入下面的内容
* 0 * * * /home/mirror/rsync.sh
sudo service crond restart
这样你的机器就会在每天晚上12点自动同步软件源了,了解crontab的详细使用方法可以看我的博客crontab简单使用