獲取yum的安裝包
不管是安裝openstack還是相關(guān)的組件毅访,都常用yum命令來下載白群,而默認(rèn)的yum源經(jīng)常是指向國(guó)外的網(wǎng)站,下載速度都不會(huì)太快签钩,這時(shí)候有兩個(gè)選擇:
- 更改repo文件掏呼,使其指向國(guó)內(nèi)的yum源
- 更改repo文件,使其指向本地的yum源
本文主要講述的是第二種铅檩,即更改repo文件憎夷,使其指向本地的yum源。
系統(tǒng)環(huán)境
- windows 10操作系統(tǒng)
-
python3.5.2
(主要用到lxml昧旨,requests拾给,os三個(gè)包,如果lxml無法安裝兔沃,也可以用BeautifulSoup或者正則代替) - wget1.5.1
- centos7
使用本地yum源主要分為以下幾步:
- 在windows上下載所需的RPM包
- 將RPM包上傳到centos7的虛擬機(jī)
- 使用createrepo創(chuàng)建索引
- 修改repo文件使其指向本地文件
在windows上下載所需的RPM包
在下載RPM包的時(shí)候選擇的是國(guó)內(nèi)的開源鏡像站阿里云和網(wǎng)易云鸣戴,下載過程中主要分為兩步:
- 生成鏈接文件
- 使用wget下載文件中的鏈接
之所以使用wget是開始看到wget有一個(gè)參數(shù)-r可以遞歸下載,可是在windows系統(tǒng)上試驗(yàn)時(shí)候發(fā)現(xiàn)只能下載html文件粘拾,不能下載整個(gè)目錄,查資料和試驗(yàn)后決定先寫一個(gè)簡(jiǎn)單的爬蟲爬取鏡像站RPM包的地址创千,生成一個(gè)text文件缰雇,然后使用wget的-i選項(xiàng)來下載相應(yīng)的文件,python腳本如下:
from lxml import etree
import requests
import os
class wget_list(object):
def __init__(self,url):
self.url_b=url
self.response = requests.get(self.url_b)
self.response.encoding = 'utf-8'
self.html = etree.HTML(self.response.text)
self.url_list=[]
self.comd_b='wget -nc -P '
def get_child_url(self):
self.tmp = self.html.xpath('////@href')
for i in self.tmp:
self.url_list.append(self.url_b+i.text)
return self.url_list
def write_url_list(self,file_dict,url_w):
f = open(file_dict, 'a')
for i in url_w:
f.write(i)
f.write('\n')
f.close()
def wget_url(self,file_dict,file_name):
comd=self.comd_b+file_dict+' '+file_name
os.system(comd)
url='http://mirrors.aliyun.com/epel/7/x86_64/'
file_dict='F:\wget\epel'
file_name='F:\wget\epel.txt'
t=wget_list(url)
lu=t.get_child_url()
for i in lu:
wmt=wget_list(i)
li2=wmt.get_child_url()
wmt.write_url_list(file_name,li2)
t.wget_url(file_dict,file_name)
主要思想是先爬取網(wǎng)頁追驴,分析網(wǎng)頁后拿到網(wǎng)頁上面的全部鏈接械哟,然后將鏈接寫入txt文件,最后調(diào)用wget命令下載列表中的文件殿雪。
以epel為例暇咆,阿里云上分為了多個(gè)文件夾,每個(gè)文件夾里面又有很多的rpm文件,總共10000+個(gè)文件爸业,如果一個(gè)一個(gè)下載幾乎不可能其骄,但是可以通過爬蟲獲取鏈接,然后批量下載扯旷。下面解釋下代碼部分拯爽。
class wget_list(object):
def __init__(self,url):
self.url_b=url
self.response = requests.get(self.url_b)
self.response.encoding = 'utf-8'
self.html = etree.HTML(self.response.text)
self.url_list=[]
self.comd_b='wget -nc -P '
以上部分初始化,通過傳入的url鏈接生成etree钧忽,并初始化相關(guān)變量毯炮。
def get_child_url(self):
self.tmp = self.html.xpath('//a')
for i in self.tmp:
self.url_list.append(self.url_b+i.text)
get_child_url這個(gè)方法是獲取子鏈接,通過之前生成的etree來通過xpath進(jìn)行解析耸黑,通過分析頁面發(fā)現(xiàn)子鏈接都是a標(biāo)簽桃煎,所以可以通過下面這xpath獲取所有的子鏈接,再將子鏈接寫入到url_list這個(gè)變量里大刊。
def write_url_list(self,file_dict,url_w):
f = open(file_dict, 'a')
for i in url_w:
f.write(i)
f.write('\n')
write_url_list這個(gè)方法是將傳入的url列表追加寫入到txt文件为迈,主要用于保存構(gòu)造的下載鏈接。
def wget_url(self,file_dict,file_name):
comd=self.comd_b+file_dict+' '+file_name
os.system(comd)
wget_url這個(gè)方法則是根據(jù)傳入的文件和目錄奈揍,文件內(nèi)的url下載到目錄下曲尸。
創(chuàng)建repo文件
創(chuàng)建repo文件主要可以分為以下幾步:
- 下載安裝createrepo
- 上傳RPM包
- 執(zhí)行createrepo命令
下載安裝createrepo包
獲取了rpm安裝包之后可以在linux環(huán)境下使用createrepo命令來創(chuàng)建索引,之后使用yum命令就可以直接安裝男翰,而使用createrepo命令需要先下載createrepo包另患,這個(gè)包可以直接使用系統(tǒng)盤來安裝,過程如下:
- 掛載光盤到指定目錄
- 修改repo文件
-
直接使用yum命令下載
掛載光盤到指定目錄可以直接使用以下mount命令蛾绎,這樣子就可以將光盤的內(nèi)容掛載到指定目錄了
mount -o loop /dev/cdrom /mnt/cdrom/
備份并新增repo文件:
cd /etc/yum.repos.d/
rename .repo .repo.bak *
vi local.repo
然后在新增的repo文件輸入如下命令:
[base]
name=base
baseurl=file:///mnt/cdrom
gpgcheck=0
enable=1
因?yàn)閥um命令會(huì)判斷/etc/yum.repos.d目錄下的后綴為repo的文件信息進(jìn)行下載安裝昆箕,所以先將原repo文件重命名備份,然后新增一個(gè)后綴為repo的文件即可租冠。
文件內(nèi)容第一行鹏倘、第二行僅僅指代庫的名稱,可以任意填寫顽爹,但中括號(hào)內(nèi)的必須唯一纤泵,第三行指yum源的repodata文件夾坐在目錄,后面的兩項(xiàng)指的是不需要驗(yàn)證镜粤,且該內(nèi)容有效捏题。
最后通過以下命令來下載安裝createrepo包。
yum install createrepo
上傳RPM包
以在鏡像站下載的openstack-liberty為例子肉渴,在進(jìn)行簡(jiǎn)單的IP配置之后公荧,可以通過相關(guān)工具將文件上傳到指定目錄,比較常用的有secureCRT自帶secureFX來將下載的openstack-liberty上傳到centos的目錄下同规。
createrepo命令
createrepo is a program that creates a repomd (xml-based rpm metadata) repository from a set of rpms.
根據(jù)命令介紹循狰,craterepo是一個(gè)創(chuàng)建RPM包的倉庫索引的程序窟社,常用的主要有-p -o -d
-d --database
Generate sqlite databases for use with yum. This is now the default.
-p --pretty
Output xml files in pretty format.
-o --outputdir <url>
Optional output directory (useful for read only media).
-d指使用sqlite數(shù)據(jù)庫使用yum,這個(gè)是默認(rèn)選項(xiàng)绪钥;
-p指的是用漂亮的個(gè)數(shù)輸出xml文件
-o指的是輸出目錄灿里,選項(xiàng)后必須接目錄
現(xiàn)在可以使用以下命令來創(chuàng)建repodata文件
createrepo -p -d -o /var/ftp/openstack-liberty /var/ftp/openstack-liberty
由執(zhí)行命令后的截圖可以看到生成了一個(gè)repodata文件夾,文件夾下面有一個(gè)repomd.xml文件和其他文件昧识,這里就是倉庫的索引文件钠四,同理用命令對(duì)其他的RPM包也創(chuàng)建repo文件。
配置yum源
配置本機(jī)yum源
配置本機(jī)yum源跪楞,只需要按照之前的步驟缀去,執(zhí)行以下命令修改repo文件即可,修改后的文件如圖所示:
vi /etc/yum.repos.d/local.repo
圖中顯示repo文件包含了3個(gè)包甸祭,base缕碎,openstack-liberty和epel,其中base是光盤自帶的基礎(chǔ)包池户,openstack-liberty是從開源鏡像站下載的rpm包咏雌,epel是centos的一些擴(kuò)展應(yīng)用包,基本能解決大部分軟件的安裝問題校焦∩薅叮可以通過以下命令驗(yàn)證是否配置成功,運(yùn)行結(jié)果如圖所示寨典,可以看到存在base氛雪,epel,openstack-liberty三個(gè)包:
yum clean all
yum list
這里配置本機(jī)yum源完成耸成。
配置FTP服務(wù)器
配置好本機(jī)yum源后报亩,為了不必再其他機(jī)器上面也上傳文件等一系列操作,可以直接建立一個(gè)ftp服務(wù)器井氢,然后其他機(jī)器可以直接配置repo文件指向該目錄弦追,具體步驟如下:
- 安裝vsftpd
yum install vsftpd - 啟動(dòng)ftp服務(wù)并設(shè)置為自啟動(dòng)
systemctl restart vsftpd.service
systemctl enable vsftpd.service - 修改配置文件指定ftp的目錄,在最后一行添加一句anon_root=/var/ftp/來指定ftp目錄花竞,之后可以登錄本機(jī)FTP站點(diǎn)驗(yàn)證劲件。
vi /etc/vsftpd/vsftpd.conf
- 關(guān)閉防火墻
systemctl stop firewalld.service
systemctl disable firewalld.service - 清空iptables
iptables -Z
iptables -F
iptables -X
修改repo文件
在另一臺(tái)機(jī)上面?zhèn)浞輗epo文件,然后修改repo文件如下:
cd /etc/yum.repos.d/
rename .repo .repo.bak *
vi local.repo
在另一臺(tái)機(jī)執(zhí)行命令约急,進(jìn)行測(cè)試寇仓,發(fā)現(xiàn)可以正常使用,至此烤宙,本地yum配置完成。
yum clean all
yum list
遇過的問題:
- 寫python文件的時(shí)候俭嘁,最開始是通過提取元素內(nèi)容然后拼接得到鏈接地址躺枕,最后發(fā)現(xiàn)有的元素內(nèi)容不完全,會(huì)將http://mirrors.aliyun.com/epel/7/x86_64/3/389-admin-console-doc-1.1.12-1.el7.noarch.rpm 地址生成為http://mirrors.aliyun.com/epel/7/x86_64/3/389-admin-console-doc-1.1.12-1.el.. 這種地址,會(huì)省略掉后面的一些位數(shù)拐云,后來改為取標(biāo)簽內(nèi)的a屬性的內(nèi)容即可罢猪。
- 由于centos7默認(rèn)使用firewall,所以不能像centos6直接清空iptables叉瘩,還需要關(guān)閉防火墻膳帕。