前言:之前使用rsync同步官方源沒問題,但是同步國內的yum源時出現了同步不起的問題,所以改用reposync的方式。
操作系統:centos7.2 x64,2c4G,100G系統盤,500G數據盤。分區lvm格式,數據盤單獨一個lv,掛載在 /data目錄。
安裝apache和repository的管理工具yum-utils
yum install httpd yum-utils createrepo -y
systemctl enable httpd
systemctl start httpd
創建文件保存目錄
mkdir -p /data/website/centos/6/
mkdir -p /data/website/centos/7/
mkdir -p /data/website/epel/
修改/etc/yum.repos.d/CentOS-Base.repo
## centos7
[base7]
name=CentOS-7-os-cmiot.local
baseurl=http://mirrors.163.com/centos/7/os/x86_64/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-7
#released updates
[updates7]
name=CentOS-7-updates-cmiot.local
baseurl=http://mirrors.163.com/centos/7/updates/x86_64/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-7
#additional packages that may be useful
[extras7]
name=CentOS-7-extras-cmiot.local
baseurl=http://mirrors.163.com/centos/7/extras/x86_64/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-7
## centos6
[base6]
name=CentOS-6-os-cmiot.local
baseurl=http://mirrors.163.com/centos/6/os/x86_64/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6
#released updates
[updates6]
name=CentOS-6-updates-cmiot.local
baseurl=http://mirrors.163.com/centos/6/updates/x86_64/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6
#additional packages that may be useful
[extras6]
name=CentOS-6-extras-cmiot.local
baseurl=http://mirrors.163.com/centos/6/extras/x86_64/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6
## epel
[epel6]
name=CentOS-6-epel-cmiot.local
baseurl=https://mirrors.aliyun.com/epel/6/x86_64/
gpgcheck=0
[epel7]
name=CentOS-7-epel-cmiot.local
baseurl=https://mirrors.aliyun.com/epel/7/x86_64/
gpgcheck=0
使用yum repolist驗證CentOS-Base.repo文件是否生效
# yum repolist
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
repo id repo name
base6 CentOS-6-os-cmiot.local
base7 CentOS-7-os-cmiot.local
epel6 CentOS-6-epel-cmiot.local
epel7 CentOS-7-epel-cmiot.local
extras6 CentOS-6-extras-cmiot.local
extras7 CentOS-7-extras-cmiot.local
updates6 CentOS-6-updates-cmiot.local
updates7 CentOS-7-updates-cmiot.local
同步CentOS-Base.repo文件中163的centos6包文件
reposync -n --repoid=extras6 --repoid=updates6 --repoid=base6 -p /data/website/centos/6
reposync -n --repoid=epel6 -p /data/website/epel/
同步CentOS-Base.repo文件中163的centos7包文件
reposync -n --repoid=extras7 --repoid=updates7 --repoid=base7 -p /data/website/centos/7
reposync -n --repoid=epel7 -p /data/website/epel/
createrepo 命令用于創建yum源(軟件倉庫),即為存放于本地特定位置的眾多rpm包建立索引,描述各包所需依賴信息,并形成元數據。
參數選項說明:
-u --baseurl <url>
指定Base URL的地址
-o --outputdir <url>
指定元數據的輸出位置
-x --excludes <packages>
指定在形成元數據時需要排除的包
-i --pkglist <filename>
指定一個文件,該文件內的包信息將被包含在即將生成的元數據中,格式為每個包信息獨占一行,不含通配符、正則,以及范圍表達式。
-n --includepkg
通過命令行指定要納入本地庫中的包信息,需要提供URL或本地路徑。
-q --quiet
安靜模式執行操作,不輸出任何信息。
-g --groupfile <groupfile>
指定本地軟件倉庫的組劃分,范例如下:
createrepo -g comps.xml /path/to/rpms
注意:組文件需要和rpm包放置于同一路徑下。
-v --verbose
輸出詳細信息。
-c --cachedir <path>
指定一個目錄,用作存放軟件倉庫中軟件包的校驗和信息。
當createrepo在未發生明顯改變的相同倉庫文件上持續多次運行時,指定cachedir會明顯提高其性能。
--update
如果元數據已經存在,且軟件倉庫中只有部分軟件發生了改變或增減,
則可用update參數直接對原有元數據進行升級,效率比重新分析rpm包依賴并生成新的元數據要高很多。
-p --pretty
以整潔的格式輸出xml文件。
-d --database
該選項指定使用SQLite來存儲生成的元數據,默認項。
創建索引
格式:createrepo -po 源目錄 索引元數據的輸出位置目錄
createrepo -po /data/website/centos/6/base6/ /data/website/centos/6/base6/
createrepo -po /data/website/centos/6/updates6/ /data/website/centos/6/updates6/
createrepo -po /data/website/centos/6/extras6/ /data/website/centos/6/extras6/
createrepo -po /data/website/epel/epel6/ /data/website/epel/epel6/
createrepo -po /data/website/centos/7/base7/ /data/website/centos/7/base7/
createrepo -po /data/website/centos/7/updates7 /data/website/centos/7/updates7
createrepo -po /data/website/centos/7/extras7 /data/website/centos/7/extras7
createrepo -po /data/website/epel/epel7 /data/website/epel/epel7
創建組文件的索引
說明:yum groupinstall的時候會用到這個索引。
wget http://mirrors.163.com/centos/6/base6/repodata/43d8fd068164b0f042845474d6a22262798b9f0d1f49ad1bf9f95b953089777d-c6-x86_64-comps.xml -P /tmp
wget http://mirrors.163.com/centos/7/base7/repodata/38b60f66d52704cffb8696750b2b6552438c1ace283bc2cf22408b0ba0e4cbfa-c7-x86_64-comps.xml -P /tmp
createrepo -g /tmp/43d*-comps.xml /data/website/centos/6/base6/
createrepo -g /tmp/38b*-comps.xml /data/website/centos/7/base7/
下載KEY文件
用戶下載安裝這個RPM包時,引入RH官方的這個RPM GPG公鑰,用來驗證RPM包是不是RH官方簽名的
wget http://mirrors.163.com/centos/7/os/x86_64/RPM-GPG-KEY-CentOS-7 -P /data/website/centos/
wget http://mirrors.163.com/centos/6/os/x86_64/RPM-GPG-KEY-CentOS-6 -P /data/website/centos/
設置apache 根目錄設置為/data/website
修改/etc/httpd/conf/httpd.conf
注釋#DocumentRoot "/var/www/html"這一行,在其下添加
#DocumentRoot "/var/www/html"
DocumentRoot "/data/website"
<Directory "/data/website">
Options Indexes FollowSymLinks
Options Indexes
AllowOverride All
Order allow,deny
IndexOptions Charset=UTF-8
Allow from all
Require all granted
</Directory>
刪除welcome配置,達到訪問服務器地址直接現實站點根目錄
mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.conf.bak
開啟httpd服務
systemctl restart httpd
systemctl enable httpd
瀏覽器就可以通過訪問IP來訪問/data/website目錄
定時同步任務
用戶端/etc/yum.repos.d/CentOS-Base.repo文件修改
下面以centos6為例:
[base]
name=CentOS-$releasever - Base - cmiot.local
baseurl=http://172.20.11.249/centos/$releasever/base6
gpgcheck=1
gpgkey=http://172.20.11.249/centos/RPM-GPG-KEY-CentOS-6
#released updates
[updates]
name=CentOS-$releasever - Updates - cmiot.local
baseurl=http://172.20.11.249/centos/$releasever/updates6
gpgcheck=1
gpgkey=http://172.20.11.249/centos/RPM-GPG-KEY-CentOS-6
#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras - cmiot.local
baseurl=http://172.20.11.249/centos/$releasever/extras6
gpgcheck=1
gpgkey=http://172.20.11.249/centos/RPM-GPG-KEY-CentOS-6
[epel]
name=CentOS-$releasever - Extras - cmiot.local
baseurl=http://172.20.11.249/epel/epel6
gpgcheck=0
設置每天定時更新腳本 update.sh
#!/bin/bash
echo 開始同步ubuntu
apt-mirror
echo ubuntu同步結束
echo 開始同步centos6
reposync -n --repoid=extras6 --repoid=updates6 --repoid=base6 -p /data/website/centos/6
reposync -n --repoid=epel6 -p /data/website/epel/
echo centos6同步結束
echo 開始同步centos7
reposync -n --repoid=extras7 --repoid=updates7 --repoid=base7 -p /data/website/centos/7
reposync -n --repoid=epel7 -p /data/website/epel/
echo centos7同步結束
#更新元數據
createrepo --update /data/website/centos/6/base6/
createrepo --update /data/website/centos/6/updates6/
createrepo --update /data/website/centos/6/extras6/
createrepo --update /data/website/epel/epel6/
createrepo --update /data/website/centos/7/base7/
createrepo --update /data/website/centos/7/updates7/
createrepo --update /data/website/centos/7/extras7/
createrepo --update /data/website/epel/epel7/
crontab -e 添加定時任務
0 6 * * * /data/update.sh
crontab -l 查看定時任務
0 6 * * * /data/update.sh