• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于Vagrant部署程序設(shè)計(jì)類課程實(shí)驗(yàn)教學(xué)環(huán)境

    2018-12-07 09:32:18郭海智
    關(guān)鍵詞:宿主機(jī)配置文件網(wǎng)卡

    郭 亮 ,郭海智,謝 光

    (三亞學(xué)院 理工學(xué)院,海南 三亞 572022)

    隨著社會需求及信息技術(shù)的發(fā)展,軟件開發(fā)相關(guān)的語言、平臺及應(yīng)用呈現(xiàn)出多樣性。高校計(jì)算機(jī)類專業(yè)為滿足各類人才培養(yǎng)需求,其應(yīng)對的程序設(shè)計(jì)類課程的設(shè)置也緊跟其變化,相應(yīng)的試驗(yàn)環(huán)境也需跟隨調(diào)整。為減少實(shí)踐教學(xué)過程中各類開發(fā)環(huán)境搭建產(chǎn)生的相互干擾、軟件版本沖突、操作系統(tǒng)差異性和兼容性等引入的諸多問題,當(dāng)前部分高校機(jī)房采用一機(jī)安裝多重操作系統(tǒng),并在其中針對特定程序設(shè)計(jì)類課程建立開發(fā)環(huán)境的方式并不利于教學(xué)環(huán)境的靈活調(diào)整,以及解決相關(guān)配置發(fā)生變化和軟件升級引入等各類問題。隨著作為云計(jì)算[1-3]基礎(chǔ)的虛擬化技術(shù)[4-5]逐漸成熟,越來越多的教學(xué)環(huán)境中引入虛擬化方式是對現(xiàn)有實(shí)驗(yàn)課程建設(shè)的有力補(bǔ)充[6-7]。Vagrant作為一種創(chuàng)建和部署虛擬化開發(fā)環(huán)境的開源工具,提供了易于配置、重復(fù)性好、便攜式的工作環(huán)境搭建方法,能夠簡化程序設(shè)計(jì)類教學(xué)相關(guān)的準(zhǔn)備工作,提升實(shí)驗(yàn)室教學(xué)實(shí)踐環(huán)境的部署能力,有利于教和學(xué)的開展。

    1 工具簡介

    Vagrant[8]是Hashicorp公司推出的一款開源DevOps[9]基礎(chǔ)設(shè)施工具,是該公司對數(shù)據(jù)中心管理技術(shù)研發(fā)系列產(chǎn)品的一部分,支持軟件的持續(xù)交付及持續(xù)部署[10-11]。Vagrant基于Ruby語言建立,通過統(tǒng)一管理 VirtualBox、VMWare、KVM等多種虛擬機(jī)系統(tǒng)軟件,以及AWS等多種云計(jì)算服務(wù)平臺上的VPS,為開發(fā)者提供了控制各類虛擬機(jī)的單一接口,如圖1所示。通過該單一接口統(tǒng)一了工作環(huán)境的配置、重構(gòu)、分享,保證了開發(fā)環(huán)境與實(shí)施環(huán)境的一致性。使用者只需通過簡單的一條命令就可基于自定義方式快速搭建所需環(huán)境。

    圖1 Vagrant分層架構(gòu)

    為此,宿主機(jī)需先安裝Git、Virtualbox和Vagrant,獲取Vagrant專用工具打包的虛擬機(jī)鏡像Box文件(該文件可通過http://www.vagrantbox.es或https://atlas.hashicorp.com/boxes/search云平臺選取經(jīng)過測試并廣泛認(rèn)可的各類Linux基礎(chǔ)鏡像文件后按需加入功能軟件構(gòu)成,也可以完全自定義構(gòu)建),然后通過命令Vagrant box add添加鏡像,最后需按特定環(huán)境編寫Vagrantfile配置文件。具體使用中通過Vagrant up、Vagrant ssh及Vagrant halt三條命令完成虛擬機(jī)的啟動、登錄和關(guān)機(jī)操作。

    2 搭建實(shí)驗(yàn)教學(xué)環(huán)境

    2.1 準(zhǔn)備工作

    以下以網(wǎng)絡(luò)編程課程及計(jì)算機(jī)網(wǎng)絡(luò)教學(xué)過程為例,對利用Vagrant工具搭建基于真實(shí)操作系統(tǒng)的虛擬環(huán)境試驗(yàn)平臺進(jìn)行說明。首先使用centos7從頭搭建基礎(chǔ)Box文件,其制作基本過程為用centos7.3在VirtualBox中創(chuàng)建新虛擬機(jī),安裝所需開發(fā)工具,安裝VirtualBox增強(qiáng)功能以滿足共享目錄設(shè)置等需要,完成登錄學(xué)生user1的創(chuàng)建及其權(quán)限設(shè)置等基礎(chǔ)設(shè)定后,用Vagrant package打包該虛擬機(jī)為centos73.box,并執(zhí)行Vagrant box add centos73.box添加到本地Box倉庫。

    2.2 網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)設(shè)計(jì)

    網(wǎng)絡(luò)編程和計(jì)算機(jī)網(wǎng)絡(luò)課程所需的典型實(shí)驗(yàn)環(huán)境的拓?fù)浣Y(jié)構(gòu)中,至少需要兩臺互聯(lián)的虛擬機(jī)以完成網(wǎng)絡(luò)通信和數(shù)據(jù)抓包需要,并且宿主機(jī)可通過ssh登錄虛擬機(jī)以完成代碼編譯及調(diào)試運(yùn)行工作。根據(jù)教學(xué)需要還要實(shí)現(xiàn)局域網(wǎng)內(nèi)虛擬機(jī)的網(wǎng)絡(luò)互聯(lián)以實(shí)現(xiàn)一對多的服務(wù)測試,拓?fù)湓O(shè)計(jì)如圖2所示。其中,Host代表學(xué)生使用的宿主機(jī),Guest代表宿主機(jī)上運(yùn)行的虛擬機(jī)。虛擬機(jī)通過eth0以NAT模式(網(wǎng)絡(luò)地址轉(zhuǎn)換模式)連接宿主機(jī)以方便用戶登錄到server和client完成程序編譯、運(yùn)行及調(diào)試。C/C++網(wǎng)絡(luò)程序通過eth1以Host-only模式(主機(jī)模式)在虛擬機(jī)server和client間運(yùn)行和測試。所有宿主機(jī)中的虛擬機(jī)通過eth2以Publicnetwork模式(網(wǎng)橋模式)接入整個(gè)教室局域網(wǎng)并可從DHCP服務(wù)器獲得ip地址及DNS相關(guān)配置信息,以方便網(wǎng)站開發(fā)、網(wǎng)絡(luò)聊天等多人參與類程序的驗(yàn)證和測試。

    圖2 實(shí)驗(yàn)環(huán)境拓?fù)浣Y(jié)構(gòu)

    2.3 配置文件及說明

    配置文件Vagrantfile采用Ruby語言進(jìn)行編寫,易于上手。通過配置文件可完成虛擬機(jī)的各類設(shè)定及網(wǎng)絡(luò)配置等工作。依照圖2的實(shí)驗(yàn)環(huán)境拓?fù)浣Y(jié)構(gòu)設(shè)計(jì),相應(yīng)Vagrantfile配置文件及說明如下:

    01 Vagrant.configure("2")do |c(diǎn)onfig|

    02 config.vm.box="centos73"

    03 config.vm.synced_folder".","/vagrant",disab led:true

    04 config.vm.define"serv"do |serv|

    05 serv.vm.provider"virtualbox"do |v|

    06 v.customize["modifyvm",:id,"--name","serv","--memory","256","--cpus","1"]

    07 end

    08 serv.vm.hostname="server"

    09 serv.vm.synced_folder"serv_share","/home/user1/codes"

    10 serv.vm.network"private_network",ip:"192.168.200.10"

    11 serv.vm.network"public_network",ip:"192.168.19.222",netmask:"255.255.255.0"

    12 #serv.vm.network"public_network"

    13 serv.vm.network"forwarded_port",guest:9090,host_ip:"192.168.1.186",host:9090

    14 end

    15 config.vm.define"clnt"do |c(diǎn)lnt|

    16 clnt.vm.provider"virtualbox"do |v|

    17 v.customize["modifyvm",:id,"--name","clnt","--memory","256","--cpus","1"]

    18 end

    19 clnt.vm.hostname="client"

    20 clnt.vm.synced_folder"clnt_share","/home/user1/codes"

    21 clnt.vm.network"private_network",ip:"192.168.200.11",netmask:"255.255.255.240"

    22 clnt.vm.network"public_network",ip:"192.168.19.223",netmask:"255.255.255.0"

    23 clnt.vm.network"forwarded_port",guest:22,host_ip:"192.168.19.186",host:9999

    24 end

    25 end

    代碼第1行設(shè)定配置信息以Vagrant配置文件的版本2格式編寫;第2行設(shè)定虛擬機(jī)系統(tǒng)所對應(yīng)的本地倉庫中特定Box文件,此處也可改為網(wǎng)絡(luò)下載地址;第3行關(guān)閉默認(rèn)的共享目錄設(shè)置;第4~第14行對虛擬機(jī)server進(jìn)行配置,其中第5~第7行調(diào)用已安裝的虛擬化軟件程序,如VirtrualBox的VBoxManage,完成特定虛擬機(jī)的資源分配及其配置,如cpu數(shù)量1,內(nèi)存大小256 MB以及虛擬機(jī)名稱;第8行對虛擬機(jī)系統(tǒng)主機(jī)名進(jìn)行設(shè)置;第9行建立宿主機(jī)和特定虛擬機(jī)的同步目錄;第10行安裝網(wǎng)卡eth1配置為主機(jī)模式并設(shè)定ip地址,如需進(jìn)行特定子網(wǎng)分配可仿照第21行進(jìn)行;第11行安裝網(wǎng)卡eth2配置為網(wǎng)橋模式并設(shè)定好ip地址;第12行如果局域網(wǎng)配置了DHCP服務(wù)器可放開該注釋行以安裝網(wǎng)卡eth3并配置為網(wǎng)橋模式,且設(shè)定該網(wǎng)卡以DHCP方式獲取網(wǎng)絡(luò)配置信息;第13行配置端口轉(zhuǎn)發(fā),對虛擬機(jī)的9090端口對外暴露為宿主機(jī)ip地址上的9090端口,使得局域網(wǎng)內(nèi)宿主機(jī)中的虛擬機(jī)上的網(wǎng)絡(luò)客戶端程序通過接入宿主機(jī)的9090端口連入server端口為9090的網(wǎng)絡(luò)服務(wù)端程序,方便多人參與類程序的測試;第15~第23行配置虛擬機(jī)client,過程與server配置類似,其中,第23行功能類似第13行,通過端口轉(zhuǎn)發(fā)以192.168.19.186:9999端口暴露虛擬機(jī)client的ssh端口,使得外部機(jī)器可遠(yuǎn)程登錄該虛擬機(jī)以進(jìn)行管理。

    2.4 環(huán)境驗(yàn)證

    首先下發(fā)上述配置文件到學(xué)生機(jī)工作目錄test,并在其中建立子目錄serv_share和clnt_share以分別對應(yīng)共享目錄放置服務(wù)器和客戶機(jī)的程序代碼,然后在工作目錄運(yùn)行命令Vagrant up同時(shí)啟動server和 client虛擬機(jī),使用命令 Vagrant ssh server和Vagrant ssh client分別登錄到server和client系統(tǒng)中。在server中以 ip address查看網(wǎng)絡(luò)配置,特別是驗(yàn)證第12行配置對啟用DHCP后server的eth3通過dhcp獲得的配置信息。在server中ping 192.168.200.11測試與client通過eth1的連通性,ping 192.168.19.223測試與client通過eth2的連通性,從其他宿主機(jī)或其上的虛擬機(jī)telent 192.168.1.186 9090或 ssh-p 9999 user1@192.168.19.186測試端口轉(zhuǎn)發(fā)。在test/serv_share及test/clnt_share中編寫網(wǎng)絡(luò)回顯測試程序,驗(yàn)證共享目錄設(shè)定正確。

    2.5 擴(kuò)展管理

    Vagrant構(gòu)建的基礎(chǔ)Box文件可能不滿足特定課程的軟件配置需要,此時(shí)可在Vagrantfile配置文件中調(diào)用外部shell腳本或聯(lián)合Ansible[12]和Puppet[13]等自動化運(yùn)維工具完成虛擬機(jī)的自動化配置管理。如要對上述環(huán)境進(jìn)行缺省路由配置及telnet軟件的安裝,可在配置文件中加入配置命令 (config.vm.provision"shell"),路徑"script.sh",并在工作目錄中建立script.sh文件加入shell命令:

    01 routedel default

    02 route add defaultgw 10.36.192.1

    03 cat/dev/null>/etc/resolv.conf

    04 echo"nameserver 8.8.8.8">/etc/resolv.conf

    05 echo"nameserver 8.8.4.4">>/etc/resolv.conf

    06 yum install-y telnet>> /tmp/provision.log 2>&1

    上述代碼第1行刪除已建立的缺省路由,第2行添加新的缺省路由,第3行刪除原有dns服務(wù)器配置,第4~第5行設(shè)定新的 dns服務(wù)器配置,第6行完成telnet軟件的安裝并記錄安裝日志。修改配置文件后通過命令Vagrant reload重啟虛擬機(jī)即可使得擴(kuò)展配置生效。

    對于其他程序設(shè)計(jì)類實(shí)驗(yàn)課程,只需利用上述Box文件作為基礎(chǔ)鏡像,對Vagrantfile配置文件設(shè)定虛擬機(jī)基本配置、ip地址和端口轉(zhuǎn)發(fā)設(shè)置,修改script.sh以安裝相應(yīng)編譯工具及庫文件并進(jìn)行配置,最后下發(fā)Vagrantfile和script.sh到學(xué)生機(jī)即可。以搭建python web開發(fā)環(huán)境為例,只需在Vagrantfile中配置虛擬機(jī),以Public-network模式添加網(wǎng)卡并設(shè)定ip地址加入內(nèi)網(wǎng),在script.sh文件最后加入下面三行語句即可。

    sudo yum-y install python-pip

    sudo pip install--upgrade pip

    sudo pip installflask

    3 結(jié)束語

    從以上課程所需的實(shí)驗(yàn)搭建過程可見,只需進(jìn)行很少的部署操作,3~5 min左右就能完成特定開發(fā)環(huán)境的搭建,方法簡單且易于掌握。該方法減少了開發(fā)環(huán)境不一致所導(dǎo)致的各類問題,簡化了實(shí)驗(yàn)室的相關(guān)配置工作且擴(kuò)展性強(qiáng),方便了學(xué)生在其個(gè)人電腦上快速完成開發(fā)環(huán)境的搭建并保持與教學(xué)環(huán)境的完全一致,有利于學(xué)生深入理解課程本身的知識要點(diǎn)。通過共享目錄以及學(xué)生已熟悉的開發(fā)環(huán)境,一定程度上降低了學(xué)習(xí)Linux相關(guān)技術(shù)的門檻,保障了教學(xué)的順利實(shí)施。

    猜你喜歡
    宿主機(jī)配置文件網(wǎng)卡
    在DDS 中間件上實(shí)現(xiàn)雙冗余網(wǎng)卡切換的方法
    提示用戶配置文件錯(cuò)誤 這樣解決
    搭建簡單的Kubernetes集群
    互不干涉混用Chromium Edge
    Server 2016網(wǎng)卡組合模式
    忘記ESXi主機(jī)root密碼怎么辦
    虛擬網(wǎng)絡(luò)實(shí)驗(yàn)室在農(nóng)村職校計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)教學(xué)中的應(yīng)用研究
    嵌入式計(jì)算機(jī)軟件測試關(guān)鍵技術(shù)的思考
    挑戰(zhàn)Killer網(wǎng)卡Realtek網(wǎng)游專用Dragon網(wǎng)卡
    嵌入式計(jì)算機(jī)軟件測試關(guān)鍵技術(shù)研究
    陈巴尔虎旗| 平顶山市| 出国| 广饶县| 湘潭县| 东源县| 肃北| 独山县| 西峡县| 沾化县| 浑源县| 山东省| 鄂尔多斯市| 旬阳县| 江西省| 庄河市| 阿克陶县| 花莲市| 长顺县| 北京市| 洮南市| 伊宁市| 丹巴县| 鄂州市| 安溪县| 二连浩特市| 卢氏县| 桓台县| 屯留县| 马山县| 玛沁县| 桐柏县| 蒲城县| 海盐县| 镇宁| 东乌珠穆沁旗| 漾濞| 广宁县| 阿合奇县| 岱山县| 绩溪县|