1. 程式人生 > >部署本地yum 離線倉庫

部署本地yum 離線倉庫

本地yum倉庫 私有yum庫 yum創建

前言

內部主機在無公網網絡或不占用公網帶寬的情況下更新/安裝軟件包。掛載系統鏡像做為本地倉庫源數據,基本能解決大部分需求,但有時需要更新大量軟件包,這時就需要本地倉庫數據和官方倉庫數據保持一致。
本文主要實現基於掛載系統鏡像和同步官方數據的本地倉庫

約定

本地倉庫目錄:/data/repo
ftp/web服務安裝配置不在此介紹
服務端 OS 倉庫 ip:192.168.100.10
客戶端 主機ip :192.168.100.100
系統鏡像:Centos6.x86_64.iso

準備

服務端:
系統鏡像文件上傳到主機/data 目錄下
掛載iso鏡像

#mkdir /data/repo/cdrom
#mount -o loop /data/Centos6.x86_64.iso /data/repo/cdrom

同步/下載官方源數據

官方提供鏡像地址列表 https://www.centos.org/download/mirrors/
因完整源數據數據量大(大概有300G+),這裏只獲取需要的數據源(centos 6系)
創建相關目錄
os:基礎包源
updates:更新/升級包源
extras:擴展包源
epel:額外包源

mkdir -p /data/repo/centos/6/{os,updates,extras}/x86_64
mkdir -p /data/repo/epel/6/x86_64

這裏有以下幾種方式獲取源數據(根據具體環境,任選一種即可)
1.rsync
倉庫主機需要公網訪問權限,亦可將辦公電腦作為數據中轉站(先同步到辦公電腦,再推送到倉庫主機上)

源數據同步到本地(需要源地址支持rsync協議)
遠程同步到本地,數據源地址在前,本地目錄在後
本地同步到遠程,數據源目錄在前,目的地址在後

#rsync -artv rsync://mirrors.shu.edu.cn/centos/6/os/x86_64/ /data/repo/centos/6/os/x86_64
#rsync -artv rsync://mirrors.shu.edu.cn/centos/6/updates/x86_64/ /data/repo/centos/6/updates/x86_64
#rsync -artv rsync://mirrors.shu.edu.cn/centos/6/extras/x86_64/ /data/repo/centos/6/extras/x86_64

#rsync -artv --exclude=debug rsync://mirrors.shu.edu.cn/epel/6/x86_64/ /data/repo/epel/6/x86_64

-a, --archive 歸檔模式,表示以遞歸方式傳輸文件,並保持所有文件屬性,等於-rlptgoD
-r, --recursive 對子目錄以遞歸模式處理
-v, --verbose 詳細模式輸出
-t, --times 保持文件時間信息
-u, --update 僅僅進行更新,也就是跳過所有已經存在於DST,並且文件時間晚於要備份的文件,不覆蓋更新的文件

2.ftp
此種方式適用於倉庫服務器無法訪問公網情況,使用可訪問公網的電腦,通過ftp客戶端將源數據下載到本地,然後再將數據上傳到倉庫服務器
目錄結構與上述方式相同,具體步驟不做描述

3.yum makecache
配置yum文件

cat /etc/yum.repo.d/yum.repo
[Base]
name=CentOS-Base
baseurl=http://mirrors.shu.edu.cn/centos/$releasever/os/$basearch/
enabled=1
gpgcheck=1
gpgkey=http://mirrors.shu.edu.cn/centos/$releasever/os/$basearch/RPM-GPG-KEY-CentOS-6
[Updates]
name=CentOS-Updates
baseurl=http://mirrors.shu.edu.cn/centos/$releasever/updates/$basearch/
enabled=1
gpgcheck=1
gpgkey=http://mirrors.shu.edu.cn/centos/$releasever/os/$basearch/RPM-GPG-KEY-CentOS-6
[Extras]
name=CentOS-Extras
baseurl=http://mirrors.shu.edu.cn/centos/$releasever/extras/$basearch/
enabled=1
gpgcheck=1
gpgkey=http://mirrors.shu.edu.cn/centos/$releasever/os/$basearch/RPM-GPG-KEY-CentOS-6
[Epel]
name=CentOS-Epel
baseurl=http://mirrors.shu.edu.cn/epel/$releasever/$basearch/
enabled=1
gpgcheck=0

如果系統獲取不到變量或獲取不正確,可將變量替換為對應的版本和架構,如

$releasever 替換為 6
$basearch 替換為 x86_64
http://mirrors.shu.edu.cn/centos/$releasever/os/$basearch/
替換為
http://mirrors.shu.edu.cn/centos/6/os/x86_64
centos 可使用如下命令獲取讀應變量值
rpm -qi centos-release
arch

清空原有緩存,並建立數據緩存

yum clean all
yum makecache

獲取倉庫列表

yum repolist 

同步鏡像到本地

cd /data/repo
reposync -r Base
reposync -r Updates
reposync -r Extras
reposync -r Epel

建立元數據索引

createrepo -d Base
createrepo -d Updates
createrepo -d Extras
createrepo -d Epel

可上傳自有rpm包到倉庫,上傳後使用createrepo -u 倉庫目錄,更新倉庫索引即可。
以上三種方式,前兩種都可以同步到元數據索引,因此不需要重新建立,最後一種數據未下載完,因此不確認是否有repodata目錄,如有此目錄且目錄不為空,基本就是包含索引的。
到此就完成了元數據的創建,可使用ftp/nginx 服務作為外部訪問,配置時將根目錄配置為/data/repo目錄即可

客戶端使用本地yum源

配置客戶端yum文件

cat /etc/yum.repo.d/yum.repo
[Base]
name=CentOS-Base
baseurl=http://192.168.100.10/centos/6/os/$basearch/
enabled=1
gpgcheck=1
[Updates]
name=CentOS-Updates
baseurl=http://192.168.100.10/centos/6/updates/$basearch/
enabled=1
gpgcheck=1
[Extras]
name=CentOS-Extras
baseurl=http://192.168.100.10/centos/6/extras/$basearch/
enabled=1
gpgcheck=1
[Epel]
name=CentOS-Epel
baseurl=http://192.168.100.10/epel/6/$basearch/
enabled=1
gpgcheck=0

清空緩存並更新

yum clean all
yum update -y

到此,客戶端就可以使用本地yum源更新/安裝軟件了

Issue:

  1. yum grouplist時報錯,無法獲取group信息
    更新/創建組索引
    這裏需要註意下使用comps.xml 文件,完整文件名不統一,但文件名後面肯定是“comps.xml”
    cd /data/repo/centos/6/os/x86_64/
    createrepo -g repodata/2318fd068164b0f042845474d6a22262798b9f0d1f49ad1bf9f95b953089666d-c6-x86_64-comps.xml ./

部署本地yum 離線倉庫