【MacBook Pro 2011 拆機記 — 清風扇】

對於第一次拆MacBook Pro的確蠻新鮮的,不過隨著Apple公司產品線的發展,新的機種趨向於採用訂製款,說好聽一點就是產品的一致化,其實是不要讓使用者可以輕易的來「改裝」硬體配備,以2011年版的MacBookPro是相對好拆裝的,而且還保有升級空間。

Apple產品令人驚艷於產品的工藝設計,由於做工小巧精緻,不管在拆還是裝的過程中都必須非常小心,尤其是螺絲的部分,真的都非常微小,一旦不小心掉落,可能就遺失了

首先我們先準備好要拆機的螺絲起子組吧,當然還包括MacBookPro的本體

20171125_013752.jpg

我們用「PH000」十字螺絲起子將機殼背板給拆下來

20171125_013043.jpg
小小提醒:建議拆下來的螺絲依照相對位置放置,這樣才能明確紀錄螺絲對應的螺絲孔,你會發現每個孔所對應的螺絲長度不一樣
20171125_010255
「PH000」十字螺絲

準備把皮扒下來囉

內部構造:

  • 左上角為光碟機位置
  • 左下角為硬碟機位置
  • 上方為風扇位置
  • 中間為記憶體位置
  • 右下方為電池位置
20171125_010213.jpg
原來內部長這個樣子啊

還沒有拆風扇前,就可以清楚看到主機板/電池及側邊上沾染了灰塵

20171125_010325.jpg

20171125_010227.jpg

接著來拆風扇,要注意排線,以免斷裂喔

20171125_010727.jpg
拆風扇所使用的「T4」六角星形螺絲
20171125_010906
拆下風扇後,將灰塵一掃而空吧

利用刷子清潔風扇完後的結果

20171125_011222.jpg

再來是拆電池,猛然一看原來電池也積了許多灰塵

20171125_011541.jpg
利用「Y2.0」的Y型螺絲起子來拆電池
20171125_011700.jpg
電池拆下來後,就看到下方的軌跡板囉,一樣拆電池請注意右上角的排線,不要把它扯斷了

清潔完後,就可以把背板蓋上囉

20171125_012404.jpg
清潔完後的樣子
20171125_012419.jpg
突然覺得細微的電晶體還蠻美的 ><
20171125_012611
準備蓋棺論定囉! 哈哈

將螺絲一一鎖上就完成囉

20171125_013740.jpg
小提醒:鎖螺絲時不要一次鎖到底,可以預留一些空間,待每個螺絲都就定位後,再一一鎖緊即可,這樣可以避免螺絲沒有對好孔而崩牙的狀況

 

 

【Mac OS 移除應用程式方法】

一開始小弟拿到蘋果的產品真的興奮了好久,由於對Windows失去信心,被Windows給陰了,於是只好痛定思痛的轉移到蘋果的陣營,疑?真的是很痛嗎,其實是感到既期待又怕受傷害呢,期待Mac能給我不一樣的體驗,諸如:號稱Retina視網膜等級的螢幕,絕佳的系統速度與管理,的確這些真的在小弟剛使用Mac的前期大為震驚,但是又怕從Windows轉移到Mac這段時間的適應期需要多久?

以下就舉一個例子來說,我們在Windows底下安裝應用程式後,哪天想移除這個應用程式,我想我們都會很一致的點選 「控制台」–> 「新增移除程式」,我們就可以開開心心的將它斬草除根了,對我沒有用錯,是「斬草除根」,因為在Mac中要完整的移除應用程式並不是那麼簡單

螢幕快照 2017-11-21 上午2.20.40

螢幕快照 2017-11-21 上午2.20.58

有使用過Mac的人應該不陌生吧,通常直觀的方式就是直接進入應用程式的資料夾,將它丟到垃圾桶中,然而其實這樣並不是完全移除掉,我們只是移除應用程式的捷徑而已,所殘存下來有關該應用程式的相關設定檔案,其實都還留在Mac中,若是要重新安裝該應用程式,上次未完全移除所留下來的檔案,可能會導致這次重新安裝錯誤,或是安裝完後仍是移除之前所設定的環境狀態,因此以下就來說明要如何完整移除應用程式,以下總共有兩種方法

[方法一] 終端機視窗
#此處以「Intellij IDEA」這個應用程式為例
! !!!! 重要提醒 ! !!!!
rm」就是叫電腦執行刪除的動作;「r」表示消除指定目標中的所有一切(一般指該資料夾底下所有檔案);「f」代表「強制(force)」,意思就是告訴電腦在執行檔案刪除時,可以忽略平常的提醒和警示,所以執行此指令要非常謹慎,否則你的資料會跟你Say Goodbye

—————————————————————————-

以下為刪除指令的部分(再次提醒請小心),應用程式名稱請自行替換

  • Configuration 移除應用程式設定檔案
    rm -rf    ~/Library/Preferences/ [應用程式名稱]
  • Caches 移除應用程式快取
    rm -rf    ~/Library/Caches/[應用程式名稱]
  • Plugins 移除應用程式附加套件
    rm -rf   ~/Library/Application Support/[應用程式名稱]
  • Logs 移除應用程式日誌檔案
    rm -rf   ~/Library/Logs/ [應用程式名稱]
螢幕快照 2017-11-21 上午2.27.21
可以在 rm -rf  ~/Library/Caches/ 之後連續按兩下tab鍵,系統會顯示底下可刪除的目錄,在尋找該應用程式所在的目錄即可
螢幕快照 2017-11-21 上午2.27.45
輸入例子中 Intellij IDEA 這個應用程式放置在 IntelliJIdea2017.2中,我們將它移除

其餘依此類推,有時某應用程式可能不會只有存放在一個目錄裡面,有相關的套件都需要移除乾淨,以Intellij IDEA 為例相關的目錄除了「IntelliJIdea2017.2」中外,還有 「Jetbrains」均要做移除

[方法二] Finder視窗

  • 開啟 Finder ,按住鍵盤上「Option」鍵不要放,滑鼠移到前往頁籤,下拉式選單就會出現「資源庫」選項,點選進入
  • 找到Preferences / Caches / Application Support / Logs 以下目錄將對應的應用程式檔案刪除乾淨

 

螢幕快照 2017-11-21 上午3.21.34
按住「Option」鍵才會有喔

 

螢幕快照 2017-11-21 上午3.21.59
進入「Library」

螢幕快照 2017-11-21 上午3.22.28

螢幕快照 2017-11-21 上午3.22.44

螢幕快照 2017-11-21 上午3.23.03

螢幕快照 2017-11-21 上午3.23.19

 

移除完畢後就可以重新進行全新乾淨的安裝囉

螢幕快照 2017-11-21 上午2.39.29
看到Complete Installation有種莫名的感動

 

 

 

【Mininet指令介紹】

現在我們就直接來看看要怎麼操作mininet,mininet下指令的介面分為兩種

  • Mininet CLI Mode (透過mn的指令進入mininet>的提示字元)
  • 直接下完整的mn [各種參數] 來完成指令

    首先我們介紹CLI Mode

    sudo mn
    進入到mininet> 提示字元

    Screenshot from 2017-11-09 02-26-08.png

    Screenshot from 2017-11-09 02-29-02.png
    預設產生出來的拓墣為1個controller/ 1個switch / 2個host
  • 顯示所有網路的連接情況

    mininet> net

    Screenshot from 2017-11-09 02-30-09.png

  • 列出所有節點的資訊

    mininet> nodes

    Screenshot from 2017-11-09 02-30-46.png

  • 列出所有節點的連接狀態

    mininet> links

    Screenshot from 2017-11-09 02-31-03.png

  • 查看交換機連接的port

    mininet> ports

    Screenshot from 2017-11-09 02-31-38.png

  • 顯示各節點資訊

    mininet> dump

    Screenshot from 2017-11-09 02-32-15.png

  • 顯示幫助(可以下的指令包含範例)

    mininet> help

    Screenshot from 2017-11-09 02-32-53.png

  • 列出所有的網路介面

    mininet> intfs

    Screenshot from 2017-11-09 02-34-51.png

  • 兩節點之間進行iperf TCP測試

    mininet> iperf

    Screenshot from 2017-11-09 02-36-31.png

  • 兩節點之間進行自訂頻寬的udp測試

    mininet> iperfudp

    Screenshot from 2017-11-09 02-36-55.png

  • 所有主機與其他所有主機進行ping測試

    mininet> pingall

    Screenshot from 2017-11-09 02-37-18.png

  • 所有主機與其他所有主機進行ping測試,並顯示詳細資訊

    mininet> pingallfull

    Screenshot from 2017-11-09 02-37-35.png

  • 對首兩台主機進行ping測試

    mininet> pingpair

    Screenshot from 2017-11-09 02-37-54.png

  • 對首兩台主機進行ping測試,並顯示詳細資訊

    mininet> pingpairfull

    Screenshot from 2017-11-09 02-38-05.png

  • 顯示設備的網路介面設定

    mininet> [設備名稱 host/switch] ifconfig

    Screenshot from 2017-11-09 02-38-58.png

  • 設備間相互ping

    mininet> [來源設備名稱 host/switch] ping [-c封包數] [目的設備名稱 host/switch]

    Screenshot from 2017-11-09 02-39-32.png

  • 開啟設備的終端機視窗

    mininet> xterm [設備名稱]

    Screenshot from 2017-11-09 02-40-43.png

    Screenshot from 2017-11-09 02-43-26.png
    我們也可以在各個終端機下指令,就好像操作每台設備一樣

     

  • 執行python指令

    mininet> py + 指令/[檔案名].py

    Screenshot from 2017-11-09 02-47-00.png

  • 執行shell指令

    mininet> sh + 指令/[檔案名].shell

    Screenshot from 2017-11-09 02-47-20.png

  • 離開mininet

    mininet> exit

    Screenshot from 2017-11-09 02-47-50.png

    Screenshot from 2017-11-09 02-47-55.png
    離開mininet後回到原系統目錄

    接著我們介紹mn [參數] 模式

    # mn [–topo] [–controller] [–link] [–switch] [–mac] [–nat] [–ipbase]

  • 清除mininet設定(通常上一個拓墣或指令下完,都會先執行清除,避免錯誤)

    mn -c

    Screenshot from 2017-11-09 02-48-19

  • mininet提供的GUI拓墣設定模式(除了在command line的模式下下拓墣指令,mininet更提供了一個人性化的拓墣設計介面)

    # 執行miniedit.py這個檔案
    # 該檔案預設放置於~/mininet/examples底下

    python miniedit.py

    Screenshot from 2017-11-09 03-03-22.png
    執行miniedit.py後的初始化介面

     

    Screenshot from 2017-11-09 03-05-17.png
    設計完拓墣後,按下"run"後發現左邊console也跟著執行拓墣
  • 設定MAC位址等於Deive ID

    # 比較有無–mac參數的差異
    mn [–mac]

    Screenshot from 2017-11-09 03-12-15.png
    一般我們在建立拓樸時,如沒有加入參數–mac,Mininet 將會以隨機產生的方式將產生出來的 MAC address 分配給各個節點,但如果加入了,則會變成有順序的方式產生 MAC address
  • 設定NAT到拓譜中

    # 比較有無–nat參數的差異
    mn [–nat]

    Screenshot from 2017-11-09 03-14-56

  • 設定拓譜內的IP位址

    # 比較有無–ipbase=ip_address參數的差異
    mn [–ipbase=ip_address]

    Screenshot from 2017-11-09 03-20-37.png

  • 在 Mininet 2.0 後允許使用者可以對連線條件進行設定,所以使用者可以進一步的設定頻寬、延遲時間等等

    mn [–link]

    Screenshot from 2017-11-09 03-24-14.png

  • 設定所使用的switch版本

    # Switch 的選擇,對整體的測試是佔有一定程度的影響的。以下就舉UserSwitch跟預設的OVSSwitch進行比較

    mn –switch user –test iperf
    mn –switch ovsk –test iperf

    Screenshot from 2017-11-09 03-26-55.png
    測試出來的數據,有很明顯的差異。UserSwitch因為還需要額外處理核心與使用者介面的溝通,大幅增加效率上的成本。UserSwitch也是會有需要它的時候,但應該不會使用在需要高即時性的狀況下
  • 將 Switch 與 Controller 規劃在同一個 Netwrok Namespace(user switch only)

    # 比較命名空間的不同

    sudo mn –switch user
    sudo mn –innamespace –switch user

    Screenshot from 2017-11-09 03-30-26
    現在我們可以觀察出差別了。加入選項–innamespace後,Switch 跟 Controller 被分開了,並分配在同一個網段中

     

    Screenshot from 2017-11-09 03-32-13.png
    由於controller和switch位於同一個命名空間,亦在同一個網段,故可以互ping
  • mininet與controller進行連接

    # remote表示外部controller
    mn –controller=remote,ip=[controller_ipaddress],port=[controller_listening_port]

    Screenshot from 2017-11-09 03-54-07.png
    mininet與ryu controller連接

     

    Screenshot from 2017-11-09 03-54-45.png
    我們發現h1和h2彼此間無法互相ping
    Screenshot from 2017-11-09 03-56-07.png
    我們在ryu controller執行simple_switch_13.py後,h1和h2間可以相互ping,因為simple_switch_13.py裡面有openvswitch13的相關協定與flow table

     

  • mininet的內建拓墣

    # mn [–topo = single/linear/tree]

    1)單一switch

    –topo single,n
    n表示switch個數

    2.線性拓墣

    –topo linear,n
    n表示n個switch線性連接

    3.樹狀拓墣

    –topo tree,depth=a,fanout=b
    depth表示樹的深度,fanout表示一個節點下面連接n個葉節點。所有葉子節點均為host,非葉子節點均為switch

    Screenshot from 2017-11-09 04-02-59

    Screenshot from 2017-11-09 04-03-26

    Screenshot from 2017-11-09 04-04-27

  • mininet的自定義拓墣

    # mn –custom 路徑/檔案名稱.py –topo=拓墣名稱

    建議直接copy位於~/mininet/custom/底下的topo-2sw-2host.py,來做修改比較不會有error

    /////////////////////////////////////////////////////////////////////////////////////////////
    //                                                controller                                                    //
    //                                               /             |       \                                               //
    //                                   switch          switch   switch                                  //
    //                                 /      |    \              |            |                                         //
    //                 switch   switch switch   host      host                                     //
    //                     |               |         |                                                                   //
    //                 host          host     host                                                               //
    /////////////////////////////////////////////////////////////////////////////////////////////

    Screenshot from 2017-11-09 04-18-25
    自己修改的新拓墣
    Screenshot from 2017-11-09 04-20-53
    執行結果

     

【OpenDayLight(Lithium版本)介紹與安裝 — on Ubuntu 16.04】

OpenDaylight (ODL) is a modular open platform for customizing and automating networks of any size and scale. The OpenDaylight Project arose out of the SDN movement, with a clear focus on network programmability. It was designed from the outset as a foundation for commercial solutions that address a variety of use cases in existing network environments.

ODL is driven by a global, collaborative community of vendor and user organizations that continuously adapts to support the industry’s broadest set of SDN and NFV use cases. With over 1000 developers, 50 member organizations and supporting approximately 1 billion subscribers around the world, OpenDaylight is quickly evolving integrated toolchains for leading use cases.

OpenDaylight code has been integrated or embedded in more than 50 vendor solutions and apps, and can be utilized within a range of services. It is also at the core of broader open source frameworks, including ONAPOpenStack, and OPNFV.

                       (節錄於 https://www.opendaylight.org/what-we-do/odl-platform-overview)

OpenDayLigh是一個開放原始碼軟體專案,由Linux基金會支持。 Linux基金會在2013年4月8日公布了這項專案,其目標在於開發支援軟體定義網路(SDN)的各種軟體工具,建立網路功能虛擬化的基礎。主要開發語言為Java

———————————–  安裝流程 ——————————–

現在我們就直接來看看要怎麼安裝吧,首先我們先安裝好Ubuntu 16.04(在這裡示範的是16.04的版本,其他版本沒有測試過)和mininet(還沒安裝mininet的可先到  【Mininet介紹與安裝 — on Ubuntu 16.04】 看看怎麼安裝吧)

  • 安裝java的jdk版本(建議安裝jdk版本比較完整)

    sudo cd /home/[帳戶名稱]
    sudo apt-get install openjdk-8-jdk

    Screenshot from 2017-11-08 17-02-06.png
    安裝java 8 的jdk版本
  • 檢查java是否有成功安裝,以及版本是否正確

    sudo javac
    sudo java -version

    Screenshot from 2017-11-08 03-30-09.png
    輸入javac指令後,系統會提示後面的參數訊息,確認無誤後按下鍵盤 “Ctrl + C”鍵來停止,確認java的版本號為1.8.X開頭

     

  • 設定java的系統變數

    sudo export JAVA_HOME=/usr/lib/jvm/[java版本號資料夾]
    # 預設java安裝路徑在/usr/lib/jvm/底下

    sudo vi /etc/profile
    # 我們將“JAVA_HOME=/usr/lib/jvm/[java版本號資料夾]” 指令加在/etc/profile 檔案裡面的最後一行,作為系統的全域變數

    sudo source /etc/profile
    # 利用source引入進系統變數內

    Screenshot from 2017-11-08 17-05-15.png
    範例中引入的java安裝位置在/usr/lib/jvm/java-1.8.0-openjdk-amd64,請依照實際狀況做替換
    Screenshot from 2017-11-08 17-05-28.png
    將“JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64”加在/etc/profile檔案中的最後一行並儲存

    Screenshot from 2017-11-08 17-05-46.png

  • 下載OpenDayLight套件

    # 下載方式
    1) 官網中直接透過瀏覽器下載(tar / zip 格式均可)
    2) 透過wget 指令下載

    sudo wget [OpenDayLight的網站位址]

    Screenshot from 2017-11-08 17-08-17.png
    OpenDayLight官網的下載位置,由於本範例採用Lithium的版本,所以要到先前的版本去尋找下載頁面

    Screenshot from 2017-11-08 17-14-09
    透過wget指令下載ODL套件
  • 解開壓縮檔

    # 副檔名為tar.gz適用
    sudo tar -zxvf [檔案名稱].tar.gz

    # 副檔名為zip適用
    sudo unzip  [檔案名稱].zip

    Screenshot from 2017-11-08 17-14-29.png
    此處下載下來的檔案名稱為“distribution-karaf-0.3.0-Lithium.tar.gz”
    Screenshot from 2017-11-08 17-15-07.png
    解壓縮後在該目錄底下多了“distribution-karaf-0.3.0-Lithium”資料夾

     

  • 啟動OpenDayLight

    sudo cd distribution-karaf-0.3.0-Lithium
    sudo cd bin
    sudo ./karaf

    Screenshot from 2017-11-08 17-15-30.png
    進入位於ODL所在資料夾底下的bin,並執行./karaf

     

    Screenshot from 2017-11-08 17-15-52.png
    ODL執行成功後,就會看到此畫面
  • 安裝ODL相關features

    # 啟動成功後,系統會有 opendaylight-user@root> 的提示字元,我們可以進行以下操作
    feature:list                                        查看所有features
    feature:list -i                                     查看所有已安裝的features
    feature:install [feature名稱]          安裝features

    # 我們進行以下套件安裝
    feature:install odl-restconf
    feature:install odl-l2switch-switch
    feature:install odl-l2switch-all
    feature:install odl-openflowplugin-all
    feature:install odl-mdsal-all
    feature:install odl-mdsal-apidocs
    feature:install odl-dlux-all
    feature:install odl-adsal-northbound
    feature:install odl-mdsal-clustering
    feature:install odl-dlux-core
    feature:install odl-dlux-node

    Screenshot from 2017-11-09 05-50-32
    安裝完後就把它放著,不要動它
  • 讓OpenDayLight 連上Mininet

    # 請開出兩個terminate,一個執行ODL,一個執行Mininet
    [ODL左]
    保持剛剛的terminate

    —————————————————-
    [Mininet右]
    mn –topo=tree,3 –controller=remote,ip=[本機端/Controller IP 位址]

    Screenshot from 2017-11-08 17-40-03
    此範例本機端位址為192.168.64.12,請視情況調整
  • 查看OpenDayLight GUI 拓墣

    # 請打開外部瀏覽器
    連結網址http://[Controller IP]:8181/index.html
    帳號以及密碼預設均為admin

    螢幕快照 2017-11-08 下午5.45.33.png
    此處範例是用Mac OS執行parallel desktop虛擬機的ubuntu,故以Mac系統來說算是外部瀏覽器
    螢幕快照 2017-11-08 下午5.37.27
    連結網址http://192.168.64.12:8181/index.html,即可看見ODL的登入介面,帳號密碼輸入admin進行登入,此處Controller IP為192.168.64.12請視情況替換
    螢幕快照 2017-11-08 下午5.41.09
    剛剛用mininet所建立的拓墣
    螢幕快照 2017-11-08 下午5.41.45
    flow table欄位

     

    螢幕快照 2017-11-08 下午5.43.07
    相對於Ryu GUI而言,ODL GUI提供較多的資訊,且介面比較華麗

     

  • 顯示OpenDayLight GUI 拓墣的host節點

    # mininet執行pingall
    mininet> pingall

    # 切換至瀏覽器重新載入即可看到host

    Screenshot from 2017-11-09 05-52-45
    右邊mininet環境中執行pingall指令
    螢幕快照 2017-11-09 上午5.53.00
    ODL拓墣顯示了host節點

     

【Ryu介紹與安裝(利用git安裝) — on Ubuntu 16.04】

Ryu is a component-based software defined networking framework.

Ryu provides software components with well defined API that make it easy for developers to create new network management and control applications. Ryu supports various protocols for managing network devices, such as OpenFlow, Netconf, OF-config, etc. About OpenFlow, Ryu supports fully 1.0, 1.2, 1.3, 1.4, 1.5 and Nicira Extensions.

                                   (節錄於 http://ryu.readthedocs.io/en/latest/getting_started.html)

根據ryu官方網站的說法,ryu提供了軟體定義網路(software defined networking)一個很好的開發框架,其支援許多的API和協定,如此一來不僅是在網路管理或應用開發層面,均方便許多

———————————–  安裝流程 ——————————–

現在我們就直接來看看要怎麼安裝吧,首先我們先安裝好Ubuntu 16.04(在這裡示範的是16.04的版本,其他版本沒有測試過)和mininet(還沒安裝mininet的可先到  【Mininet介紹與安裝 — on Ubuntu 16.04】 看看怎麼安裝吧)

  • 安裝python的套件管理工具

    sudo cd /home/[帳戶名稱]
    sudo apt-get install python-pip
    sudo apt-get install python-setuptools

    Screenshot from 2017-11-04 22-54-13.png

    Screenshot from 2017-11-04 22-55-29.png

  • 安裝python的相依套件

    sudo apt-get install python-eventlet
    sudo apt-get install python-routes
    sudo apt-get install python-webob
    sudo apt-get install python-paramiko
    sudo apt-get install python-gevent

    # 建議一個個套件慢慢安裝,比較能夠看出來是哪個套件安裝出現問題,當然偷懶的話可以下sudo apt-get install python-eventlet python-routes python-webob python-paramiko python-gevent 一次給他安裝完

    Screenshot from 2017-11-04 22-56-03.png

    Screenshot from 2017-11-04 22-56-30.png

    Screenshot from 2017-11-04 22-56-59.png

    Screenshot from 2017-11-04 22-57-19.png

    Screenshot from 2017-11-04 22-58-11.png

  • 安裝python的相依套件(剩下的)

    # 剩下有關的套件一次全部安裝完,以防止出錯

    sudo apt-get install python-dev
    sudo apt-get install autoconf
    sudo apt-get install binutils
    sudo apt-get install bison
    sudo apt-get install build-essential
    sudo apt-get install ccache
    sudo apt-get install flex
    sudo apt-get install gawk
    sudo apt-get install gettext
    sudo apt-get install git
    sudo apt-get install libncurses5-dev
    sudo apt-get install libssl-dev
    sudo apt-get install ncurses-term
    sudo apt-get install quilt
    sudo apt-get install sharutils
    sudo apt-get install subversion
    sudo apt-get install texinfo
    sudo apt-get install xsltproc
    sudo apt-get install zlib1g-dev
    sudo apt-get install libxml2-dev
    sudo apt-get install libxslt1-dev

  • 利用pip安裝執行ryu所需要的相依套件

    pip install lxml
    pip install paramiko
    pip install ovs
    pip install six
    pip install six –upgrade
    pip install flask
    pip install gevent-websocket
    pip install netaddr
    pip install eventlet
    pip install tinyrpc
    pip install msgpack-python
    pip install oslo.config

    Screenshot from 2017-11-04 23-01-16.png
    pip 安裝 lxml / paramiko / ovs 過程

    Screenshot from 2017-11-06 23-20-34.png

    Screenshot from 2017-11-06 23-29-52.png

    Screenshot from 2017-11-06 23-32-03

  • 利用git下載 ryu

    # 使用git前請先確認是否有安裝git (apt-get install git)

    sudo git clone git://github.com/osrg/ryu.git

    Screenshot from 2017-11-04 23-02-41.png
    下載完後在該目錄(/home/parallels)底下會有一個ryu的資料夾
  • 開始安裝ryu

    sudo cd ryu
    sudo python ./setup.py install

    Screenshot from 2017-11-04 23-03-14.png

    Screenshot from 2017-11-04 23-03-30.png
    安裝過程中沒有出現錯誤訊息就代表成功了
  • 修正錯誤(如果沒有發生錯誤的話,就不用修正可直接跳過此步驟)

    # 執行ryu-manager後會跳出DistributionNotFound:XXX的錯誤訊息,我們利用pip install XXX的指令來安裝遺漏的相依套件

    ryu-manager
    pip install tinyrpc
    ryu-manager
    pip install oslo.config>=1.15.0
    ryu-manager
    pip install msgpack-python>=0.3.0

    # 直到出現“loading app ryu.controller.ofp_handler
    instantiating app ryu.controller.ofp_handler of OFPHandler“為止

    Screenshot from 2017-11-04 23-05-46.png
    持續修正遺漏套件

    Screenshot from 2017-11-04 23-06-09.png
    修正完成
  • 讓Ryu連上Mininet

    # 請開出兩個terminate,一個執行Ryu,一個執行Mininet
    [Ryu左]
    ryu-manager –verbose –observe-links ryu/app/gui_topology/gui_topoplogy.py

    —————————————————-
    [Mininet右]
    mn –topo=tree,depth=3 –controller=remote

    Screenshot from 2017-11-04 23-11-58

    Screenshot from 2017-11-04 23-12-05.png

    Screenshot from 2017-11-04 23-12-19.png

  • 打開GUI

    # 打開瀏覽器在網址列輸入127.0.0.1:8080或localhost:8080

    Screenshot from 2017-11-04 23-12-44.png

【Ryu介紹與安裝(利用pip安裝) — on Ubuntu 16.04】

Ryu is a component-based software defined networking framework.

Ryu provides software components with well defined API that make it easy for developers to create new network management and control applications. Ryu supports various protocols for managing network devices, such as OpenFlow, Netconf, OF-config, etc. About OpenFlow, Ryu supports fully 1.0, 1.2, 1.3, 1.4, 1.5 and Nicira Extensions.

                                   (節錄於 http://ryu.readthedocs.io/en/latest/getting_started.html)

根據ryu官方網站的說法,ryu提供了軟體定義網路(software defined networking)一個很好的開發框架,其支援許多的API和協定,如此一來不僅是在網路管理或應用開發層面,均方便許多

———————————–  安裝流程 ——————————–

現在我們就直接來看看要怎麼安裝吧,首先我們先安裝好Ubuntu 16.04(在這裡示範的是16.04的版本,其他版本沒有測試過)和mininet(還沒安裝mininet的可先到  【Mininet介紹與安裝 — on Ubuntu 16.04】 看看怎麼安裝吧)

  • 安裝python的套件管理工具

    sudo apt-get install python-pip
    sudo apt-get install python-setuptools

    Screenshot from 2017-11-04 21-23-21
    pip是Python的套件管理工具,它集合下載、安裝、升級、管理、移除套件等功能,藉由統一的管理,可以使我們事半功倍,更重要的是,也避免了手動執行上述任務會發生的種種錯誤

    Screenshot from 2017-11-04 21-25-21.png

  • 利用pip自帶的ryu套件安裝

    pip install ryu

    Screenshot from 2017-11-04 21-25-44.png

    Screenshot from 2017-11-04 21-26-31.png
    pip 安裝過程會自動下載相關的套件,安裝訊息若沒有跳出錯誤訊息的話,就代表安裝成功
  • 執行Ryu

    ryu-manager [–verbose] [–observe-links]
    # []部分為選用參數
    # verbose 顯示更多訊息,有利於debug
    # observe-link 顯示鏈結間的訊息

    Screenshot from 2017-11-04 21-26-57
    執行ryu-manager後出現“loading app ryu.controller.ofp_handler
    instantiating app ryu.controller.ofp_handler of OFPHandler“就代表正確無誤

     

  • 讓Ryu連上Mininet

    # 請開出兩個terminate,一個執行Ryu,一個執行Mininet
    [Ryu左]             ryu-manager –verbose –observe-links
    [Mininet右]      mn –topo=linear,2 –controller=remote

    Screenshot from 2017-11-04 21-43-53.png
    Ryu執行後會等待mininet的連接
    Screenshot from 2017-11-04 21-45-10
    執行Mininet後,已成功連上Ryu了

     

  • 顯示Ryu的圖形化介面

    # 請開出兩個terminate,一個執行Ryu,一個執行Mininet

    [Ryu左]

    pip show –files ryu      # 尋找ryu的安裝路徑

    cd /usr/local/lib/python2.7/dist-packages

    ryu-manager –verbose –observe-links ryu/app/gui_topology/gui_topoplogy.py

    ——————————————————————
    [Mininet右]

    mn –topo=tree,depth=3 –controller=remote

    Screenshot from 2017-11-04 22-29-40.png

    Screenshot from 2017-11-04 22-30-58.png
    此處的例子ryu是安裝在/usr/local/lib/python2.7/dist-packages 路徑中,請依照現實狀況做更動
    Screenshot from 2017-11-04 22-31-05.png
    執行Ryu後提示訊息綁定在http://0.0.0.0:8080這個位址
    Screenshot from 2017-11-04 22-31-53
    執行Mininet後連接上Ryu

     

  • 打開GUI

    # 打開瀏覽器在網址列輸入127.0.0.1:8080或localhost:8080

    Screenshot from 2017-11-04 22-32-27

【Mininet介紹與安裝 — on Ubuntu 16.04】

Mininet is a network emulator which creates a network of virtual hosts, switches, controllers, and links. Mininet hosts run standard Linux network software, and its switches support OpenFlow for highly flexible custom routing and Software-Defined Networking.

Mininet supports research, development, learning, prototyping, testing, debugging, and any other tasks that could benefit from having a complete experimental network on a laptop or other PC.

 根據mininet官方網站的說法,mininet是一個執行在Linux平台中的網路拓墣模擬器,可以同時產生多個虛擬主機 / 交換機 / 控制器,並將其串接起來,由於其交換機支持OpenFlow的協定,更有助於軟體定義網路(Software Defined Networking)的模擬環境開發

———————————–  安裝流程 ——————————–

現在我們就直接來看看要怎麼安裝吧,首先我們先安裝好Ubuntu 16.04(在這裡示範的是16.04的版本,其他版本沒有測試過)

  • 安裝好Ubuntu 16.04後,我們先來更新一下套件源的列表(update)和套件的升級(upgrade)
  • 更新和升級好後重新啟動

    sudo apt-get update
    sudo apt-get upgrade
    reboot

    Screenshot from 2017-11-02 04-10-18
    下完指令後就開始進行套件清單比對
    Screenshot from 2017-11-02 04-11-10
    系統檢查要升級的套件列表,輸入“y”等他升級完成吧
    Screenshot from 2017-11-02 04-24-55.png
    升級完成後如果沒有錯誤訊息,基本上是算升級成功,接著重新啟動讓Ubuntu載入新設定

    小知識:

    • update
      更新我們的套件清單 /etc/apt/sources.list,這樣在我們更新時才能比對最新的套件清單,決定是否更新
    • upgrade
      根據前述的更新清單 /etc/apt/sources.list,比對是否更新套件。若有相依性問題,則放棄更新。
    • dist-upgrade
      根據前述的更新清單 /etc/apt/sources.list,比對是否更新套件。若有相依性問題,會嘗試做安裝/移除,將相依性問題解決並更新。
      PS. 通常視為較危險的更新
  • 重新開機後,我們先下載git的套件
  • 切換到/home/[用戶帳戶名稱] 目錄底下 (用戶帳戶名稱要替換成你的帳戶名稱)
  • 在到放置mininet相關套件的github中clone到本機端

    #如果覺得每次都要一直打sudo很麻煩,可以直接打“sudo -i”或“sudo su”直接取得
    #super user 權限,之後的指令就不需要再打sudo

    sudo apt-get install git
    sudo cd /home/[用戶帳戶名稱]
    sudo git clone git://github.com/mininet/mininet

    Screenshot from 2017-11-02 02-09-36
    安裝git套件
    Screenshot from 2017-11-02 13-39-59
    切換到/home/parallels目錄底下(此處的帳戶名稱為parallels),切換到此目錄的原因是我們都把下載下來的套件統一放置較好管理

    Screenshot from 2017-11-02 14-35-33.png
    將mininet的套件clone下來,利用ls檢查目錄底下多了mininet資料夾就代表已經下載下來了
    • 進入mininet/util目錄
    • 利用shell檔案安裝mininet

      sudo cd mininet/util/
      sudo ./install.sh -a

      # mininet 安裝選項
      install.sh -a                                              安裝所有mininet的套件
      install.sh -s 指定目錄 -a                          在指定目錄下安裝所有mininet的套件
      install.sh -nfv                                           安裝mininet + 自訂switch + Open vSwitch

      Screenshot from 2017-11-02 14-46-10.png
      進入mininet/util 目錄,並進行安裝
      Screenshot from 2017-11-02 14-56-11.png
      看到Enjoy mininet 就代表安裝完成

      email-notification_318-31978 注意

      Screenshot from 2017-11-04 20-30-49
      官網上提到可用git tag指令查看有哪些版本可以安裝,但實際測試下2.2.1和2.2.2的版本安裝時都會有錯誤,因此就不要在此選擇版本,直接用預設的版本
      Screenshot from 2017-11-04 21-00-17.png
      用預設安裝mininet後的版本為2.3.0

       

 

  • 可以簡單進行幾個指令測試

    sudo mn –test pingall

    Screenshot from 2017-11-02 15-05-19.png
    pingall 測試成功