CentOS7.9 搭建內部yum源伺服器同步阿里yum源

2023-03-08 12:00:25

CentOS7.9 搭建內部yum源伺服器同步阿里yum源

環境說明:

1、企業內網需求:企業內部許多伺服器是不能連線網際網路,但每臺centos主機安裝軟體包時都設定本地yum源很麻煩,也缺少第三方yum源,因此在內網搭建一臺yum源伺服器滿足這一需求,同時網路層面策略只允許此yum源伺服器每週日晚限時聯網同步阿里雲的yum源。

參考連線:http://blog.itpub.net/70004783/viewspace-2790196/

2、準備兩臺測試主機,一臺用作yum源伺服器(能連網際網路),一臺用作使用者端。

3、系統版本:CentOS 7.9

 

實操步驟:

一、新增阿里雲yum

備份原系統的repo

[root@yumserver ~]# mkdir /etc/yum.repos.d/backup
[root@yumserver ~]# mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup

新增阿里雲yum源並快取(Centos-7.repo是軟體倉庫組態檔,epel-7.repo是擴充套件源、提供額外的軟體包)

[root@yumserver ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
[root@yumserver ~]# curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@yumserver ~]# yum makecache
[root@yumserver ~]# yum repolist

 二、安裝相關軟體

[root@yumserver ~]# yum install -y wget make cmake gcc gcc-c++ pcre-devel zlib-devel openssl openssl-devel httpd yum-utils createrepo

備註:

yum-utils:yum-utils是yum的工具包集合,reposync一個同步工具。
createrepo:createrepo是一個對rpm檔案進行索引建立的工具,就是對指定目錄下的rpm檔案進行檢索,把每個rpm檔案的資訊儲存到指定的索引檔案中,這樣方便遠端yum命令在安裝更新時進行檢索。
httpd:通過Apache軟體提供web服務,也可以使用nginx。

三、同步阿里雲yum源軟體包到本地伺服器指定目錄/mirror(自定義目錄) 

建立存放軟體包目錄/mirror,(chown設定檔案所有者和檔案關聯組,chmod控制使用者對檔案的許可權)

[root@yumserver ~]# mkdir -p /mirror
[root@yumserver ~]# chown -R apache:apache /mirror
[root@yumserver ~]# chmod -R 755 /mirror

 同步阿里雲yum源軟體包

###引數-n指下載最新軟體包,-p指定目錄,指定原生的源--repoid(如果不指定就同步本地伺服器所有的源),下載過程比較久(10個小時左右)
[root@yumserver ~]# reposync -n --repoid=extras --repoid=updates --repoid=base --repoid=epel -p /mirror

[root@yumserver ~]# du -sh /mirror/*
9.0G    /mirror/base
16G     /mirror/epel
323M    /mirror/extras
3.3G    /mirror/updates

四、建立倉庫索引

createrepo -po /mirror/base/ /mirror/base/
createrepo -po /mirror/extras/ /mirror/extras/
createrepo -po /mirror/updates/ /mirror/updates/
createrepo -po /mirror/epel/ /mirror/epel/

五、更新資料來源

createrepo --update /mirror/base/
createrepo --update /mirror/extras/
createrepo --update /mirror/updates/
createrepo --update /mirror/epel/

六、啟動並設定Apache服務

6.1、啟動Apache(httpd)服務(如果沒有httpd,需要yum install -y httpd 安裝一下)

[root@yumserver ~]# systemctl start httpd
[root@yumserver ~]# systemctl enable httpd
[root@yumserver ~]# systemctl status httpd

6.2、系統防火牆放行80埠(apache服務使用的是80埠)

[root@yumserver ~]# firewall-cmd --permanent --zone=public --add-port=80/tcp
success
[root@yumserver ~]# firewall-cmd --reload
success

 備註:必要時可以執行 systemctl restart httpd 重啟一下服務。

6.3、關閉selinux(SELINUX=disabled)

[root@yumserver ~]# vi /etc/selinux/config 

6.4、設定httpd.conf檔案

[root@yumserver ~]# vi /etc/httpd/conf/httpd.conf
DocumentRoot "/mirror/"
<Directory "/mirror/">
    Options Indexes FollowSymLinks
    AllowOverride  None
    Order allow,deny
    Allow from all
    Require all granted
</Directory>

 注意:上面設定的httpd.conf檔案,需要找到如下圖DocumentRoot字樣的行進行更改,而不是直接複製貼上插入。

6.5、修改web介面的 index.html 檔案

###修改Apache預設首頁index.html,直接複製貼上執行
cat << EOF > /usr/share/httpd/noindex/index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CentOS 7 映象</title>

<script>document.createElement("myHero")</script>
<style>
myHero {
        display: block;
        background-color: #ddd;
        padding: 10px;
        font-size: 20px;
} 
</style> 

</head>
<body>
    <h1>簡介</h1>
    <hr>
    <p>CentOS,是基於 Red Hat Linux 提供的可自由使用原始碼的企業級 Linux 發行版本,是一個穩定,可預測,可管理和可複製的免費企業級計算平臺。</p>
    <hr>
    <br>
    <br>

        <h1>CentOS 7 設定內部YUM源</h1>
    <br>
        <h2>1、備份</h2>
        <myHero>mkdir /etc/yum.repos.d/backup</myHero>
        <myHero>mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/</myHero>
    <br>
        <h2>2、下載新的 CentOS-Base.repo 到 /etc/yum.repos.d/ </h2>
        <myHero>curl -o /etc/yum.repos.d/CentOS-Base.repo http://xx.xx.xx.xx/repo/CentOS-Base.repo</myHero>
    <br>
        <h2>3、執行 yum makecache 生成快取</h2>
    <br>
        <h2>4、執行 yum repolist   檢視已經生成快取</h2>
    <br>
    <br>

</body>
</html>
EOF

注意: 上文中的 http://xx.xx.xx.xx 填寫自身yum源伺服器的ip地址。

七、編寫yum源使用者端組態檔

建立repo資料夾

[root@yumserver ~]# mkdir -p /mirror/repo/
###複製貼上執行,注意:xx.xx.xx.xx需要更改為伺服器ip地址。

[root@yumserver ~]# cat << EOF > /mirror/repo/CentOS-Base.repo

[base]
name=CentOS- Base - xx.xx.xx.xx
failovermethod=priority
baseurl=http://xx.xx.xx.xx/base/
enable=1
gpgcheck=0
 
#released updates 
[updates]
name=CentOS- Updates - xx.xx.xx.xx
failovermethod=priority
baseurl=http://xx.xx.xx.xx/updates/
enable=1
gpgcheck=0
 
#additional packages that may be useful
[extras]
name=CentOS- Extras - xx.xx.xx.xx
failovermethod=priority
baseurl=http://xx.xx.xx.xx/extras/
enable=1
gpgcheck=0
 
#additional packages that may be useful
[epel]
name=CentOS- Epel - xx.xx.xx.xx
failovermethod=priority
baseurl=http://xx.xx.xx.xx/epel/
enable=1
gpgcheck=0
EOF

八、使用者端設定yum 

登入使用者端作業系統執行以下命令(注意:xx.xx.xx.xx為yum源伺服器的ip地址)

[root@client ~]# mkdir /etc/yum.repos.d/backup/
[root@client ~]# mv /etc/yum.repos.d/* /etc/yum.repos.d/backup/
[root@client ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo http://xx.xx.xx.xx/repo/CentOS-Base.repo
[root@client ~]# yum makecache

 使用者也可以用瀏覽器存取 http://xx.xx.xx.xx 檢視設定使用者端yum源的方法

 九 、設定定時同步yum源的任務

編輯指令碼

[root@yumserver ~]# cat  /mirror/script/centos_yum_update.sh
#!/bin/bash
echo 'Updating Aliyum Source'
DATETIME=`date +%F_%T`
exec > /var/log/aliyumrepo_$DATETIME.log
reposync -np /mirror
if [ $? -eq 0 ];then
 createrepo --update /mirror/base
  createrepo --update /mirror/extras
   createrepo --update /mirror/updates
   createrepo --update /mirror/epel
    echo "SUCESS: $DATETIME aliyum_yum update successful"
    else
     echo "ERROR: $DATETIME aliyum_yum update failed"
    fi

新增定時任務,每週一凌晨1點執行 

[root@yumserver ~]# crontab -l
0 1 * * 1 /bin/bash /mirror/script/centos_yum_update.sh

至此,結束。。。

 

問題:有時伺服器端的yum源倉庫索引沒有更新成功。
手動更新:
[root@yumserver ~]# createrepo --update /mirror/base/
[root@yumserver ~]# createrepo --update /mirror/extras/
[root@yumserver ~]# createrepo --update /mirror/updates/
[root@yumserver ~]# createrepo --update /mirror/epel/