開始之前
YUM(Yellow dog Updater Modified):前身是Yellow dog linux的yellow dog updater修改而來,看名字就知道是怎么回事了
YUM的作用:只要有相對(duì)應(yīng)的yum倉(cāng)庫(kù),理論上可以自動(dòng)化安裝任何軟件。
由于yum倉(cāng)庫(kù)很多都是互聯(lián)網(wǎng)服務(wù)商提供的,例如國(guó)內(nèi)的阿里鏡像站,在下載軟件時(shí)候需要訪問互聯(lián)網(wǎng),但是針對(duì)沒有互聯(lián)網(wǎng)環(huán)境時(shí),只能自己搭建yum倉(cāng)庫(kù)。

正文
兩種方案可以解決這種問題,第一種通過代理服務(wù)器的方式;第二種就是自建yum倉(cāng)庫(kù),今天我們提到的就是第二種方案
其實(shí)整個(gè)搭建過程并不復(fù)雜,分為三種方式:
- 掛載鏡像到本地(不支持遠(yuǎn)程訪問)
- FTP方式(支持遠(yuǎn)程)
- HTTP方式(支持遠(yuǎn)程)
掛載鏡像到本地
我這里的環(huán)境為vmware workstation,只需要在設(shè)置里將下圖中的勾選即可,如果其他虛擬化環(huán)境也是如此,物理機(jī)需要插入光盤。

掛載鏡像文件至media文件夾(掛在一個(gè)空目錄即可),如果對(duì)掛載命令不理解的人,請(qǐng)移步百度
mount /dev/cdrom /media

掛載過程
將系統(tǒng)自帶的yum倉(cāng)庫(kù)文件轉(zhuǎn)移到備份文件夾里
cd /etc/yum.repos.d/
mkdir bak
mv centos* bak/

移動(dòng)到bak文件夾里
創(chuàng)建本地yum文件,并指向掛載的目錄
cat <<EOF > /etc/yum.repos.d/zabbix.repo
[centos]
name=CentOS
baseurl=file:///media
enabled=1
gpgcheck=0
EOF
測(cè)試是否正常
通過yum repolist查看是否OK,再安裝zip服務(wù)(由于我是精簡(jiǎn)版的,所以很多軟件鏡像里沒有,只有zip)

倉(cāng)庫(kù)正常

碰到這個(gè)問題可以導(dǎo)入gpg文件

這里就OK了
HTTP方式
第一種只適合本地化部署,如果需要遠(yuǎn)程訪問就需要用HTTP方式。
既然是http,首先安裝web服務(wù)(這里可以是Apache、可以是Nginx也可以是基于Python的web,自行選擇),其次安裝yum-utils擴(kuò)展模塊及createrepo創(chuàng)建鏡像倉(cāng)庫(kù)工具
yum -y install httpd
yum -y install yum-utils createrepo

安裝http服務(wù)

安裝擴(kuò)展工具
創(chuàng)建yum倉(cāng)庫(kù)的文件夾,文件夾自行創(chuàng)建
mkdir /kasar
下載安裝包到創(chuàng)建文件夾
yum -y install --downloadonly --downloaddir=/kasar vim

因?yàn)榧恿藚?shù),所以不安裝

已經(jīng)下載下來
制作yum倉(cāng)庫(kù),創(chuàng)建倉(cāng)庫(kù)元數(shù)據(jù)文件
createrepo /kasar

修改http配置,將根目錄設(shè)置為yum倉(cāng)庫(kù)目錄,同時(shí)修改權(quán)限和所屬者,以及將welcome的文件修改掉(不然訪問首頁(yè)就是默認(rèn)測(cè)試頁(yè)),并啟動(dòng)
vi /etc/httpd/conf/httpd.conf
cd /etc/httpd/conf.d/
mv welcome.conf welcome.conf.bak
chown apache:apache /kasar -R
chmod 755 /kasar -R
systemctl start httpd && systemctl enable httpd



修改welcome之前

修改之后
在客戶機(jī)使用,同樣屏蔽掉自帶yum倉(cāng)庫(kù)(過程略,查看方式一)
cat <<EOF > /etc/yum.repos.d/kasar.repo
[centos]
name=CentOS
baseurl=http://192.168.17.129
enabled=1
gpgcheck=0
EOF

vim安裝完成

由于只有vim,所以安裝找不到
添加rpm包yum倉(cāng)庫(kù),并更新

添加telnet

沒更新之前,一定沒有
createrepo --update /kasar

更新本地yum倉(cāng)庫(kù)

此時(shí)安裝成功
這一種只能解決當(dāng)前所需要的包,遠(yuǎn)遠(yuǎn)滿足不了企業(yè)的需求,所以需要將阿里或者其他的down下來,那怎么做呢,以zabbix 阿里鏡像站為例,首先安裝阿里的zabbix倉(cāng)庫(kù)文件
cat <<EOF > /etc/yum.repos.d/zabbix.repo
[zabbix]
name=Zabbix Official Repository - $basearch
baseurl=https://mirrors.aliyun.com/zabbix/zabbix/5.2/rhel/8/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591
[zabbix-non-supported]
name=Zabbix Official Repository non-supported - $basearch
baseurl=https://mirrors.aliyun.com/zabbix/non-supported/rhel/8/$basearch/
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX
gpgcheck=1
EOF
curl https://mirrors.aliyun.com/zabbix/RPM-GPG-KEY-ZABBIX-A14FE591
-o /etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591
curl https://mirrors.aliyun.com/zabbix/RPM-GPG-KEY-ZABBIX
-o /etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX
curl https://mirrors.aliyun.com/zabbix/RPM-GPG-KEY-ZABBIX-A14FE591
-o /etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591
curl https://mirrors.aliyun.com/zabbix/RPM-GPG-KEY-ZABBIX
-o /etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX

查看鏡像倉(cāng)庫(kù)

我們需要將數(shù)據(jù)包同步到本地,這里的名字就是repo id的前綴
reposync -r zabbix /kasar

創(chuàng)建repo元數(shù)據(jù)文件
createrepo /kasar/zabbix

客戶端使用,這里需要注意的是IP后需要跟zabbix的目錄,因?yàn)樵獢?shù)據(jù)文件在zabbix目錄里
cat <<EOF > /etc/yum.repos.d/kasar.repo
[centos]
name=CentOS
baseurl=http://192.168.17.129/zabbix
enabled=1
gpgcheck=0
EOF


安裝完成
整個(gè)過程就完成了,ftp過程和http類似,可以舉一反三,如果有疑問的小伙伴歡迎留言哦。
寫在最后
自己本地搭建yum倉(cāng)庫(kù)的好處就是防止用戶訪問外網(wǎng)的時(shí)候因?yàn)橄螺d一些有問題的安裝包,或者有些yum倉(cāng)庫(kù)在境外,下載非常慢,本地倉(cāng)庫(kù)down下來后就沒這個(gè)問題,當(dāng)然云化時(shí)代,很多大廠已經(jīng)在國(guó)內(nèi)有自己的倉(cāng)庫(kù),而且比較權(quán)威,所以上面的一些顧慮可以消除一大半,至于安全合規(guī)性,就看每個(gè)企業(yè)的要求了,還是那句話適合才是最有效的,技術(shù)只能解決一部分問題,剩下的依托管理手段去處理。
附錄
自動(dòng)更新腳本,對(duì)cron不熟悉請(qǐng)移步百度
vim /cron/kasar.sh #編寫同步腳本
reposync -r zabbix -p /kasar -d #刪除本地老舊
reposync -r base -p /kasar/
crontab -e #添加定時(shí)任務(wù)
0 0 1 * * sh /cron/repository.sh #每月1日0時(shí)更新yum倉(cāng)庫(kù)