# 網路模擬與分析 (2/22):Ubuntu 與 Mininet 安裝 ###### tags: `Mininet`、`HTTP Server`、`Python` ## 環境架設與安裝 ### ubuntu 16.04 安裝 (for mac) 1. ubuntu 16.04 iso(desktop):https://mirror.umd.edu/ubuntu-iso/16.04/ 2. 下載完之後到 VMWare 進行創建虛擬機 ![](https://i.imgur.com/7BLtjnv.png) 3. 選擇安裝的方式,點選**繼續** 4. 匯入 iso 檔 ![](https://i.imgur.com/9QcxHpt.png) 5. 創建虛擬機名稱,例如:ubuntu 16.04 完成後,你的 ubuntu 系統就完成安裝了 ![](https://i.imgur.com/jKBay9v.png) ### Mininet 安裝 變更 root 權限密碼 ``` sudo passwd root ``` 用 git clone 下載 ``` git clone https://github.com/mininet/mininet.git ``` * 若你尚未安裝 git,可使用`apt-get install git` ``` root@ubuntu:/home/user# apt-get install git Reading package lists... Done Building dependency tree Reading state information... Done The following additional packages will be installed: git-man liberror-perl Suggested packages: git-daemon-run | git-daemon-sysvinit git-doc git-el git-email git-gui gitk gitweb git-arch git-cvs git-mediawiki git-svn The following NEW packages will be installed: git git-man liberror-perl 0 upgraded, 3 newly installed, 0 to remove and 159 not upgraded. Need to get 3,932 kB of archives. After this operation, 25.6 MB of additional disk space will be used. Do you want to continue? [Y/n] Y Get:1 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 liberror-perl all 0.17-1.2 [19.6 kB] Get:2 http://us.archive.ubuntu.com/ubuntu xenial-updates/main amd64 git-man all 1:2.7.4-0ubuntu1.9 [736 kB] Get:3 http://us.archive.ubuntu.com/ubuntu xenial-updates/main amd64 git amd64 1:2.7.4-0ubuntu1.9 [3,176 kB] Fetched 3,932 kB in 3s (1,085 kB/s) Selecting previously unselected package liberror-perl. (Reading database ... 177262 files and directories currently installed.) Preparing to unpack .../liberror-perl_0.17-1.2_all.deb ... Unpacking liberror-perl (0.17-1.2) ... Selecting previously unselected package git-man. Preparing to unpack .../git-man_1%3a2.7.4-0ubuntu1.9_all.deb ... Unpacking git-man (1:2.7.4-0ubuntu1.9) ... Selecting previously unselected package git. Preparing to unpack .../git_1%3a2.7.4-0ubuntu1.9_amd64.deb ... Unpacking git (1:2.7.4-0ubuntu1.9) ... Processing triggers for man-db (2.7.5-1) ... Setting up liberror-perl (0.17-1.2) ... Setting up git-man (1:2.7.4-0ubuntu1.9) ... Setting up git (1:2.7.4-0ubuntu1.9) ... root@ubuntu:/home/user# git clone https://github.com/mininet/mininet.git Cloning into 'mininet'... remote: Enumerating objects: 10154, done. remote: Total 10154 (delta 0), reused 0 (delta 0), pack-reused 10154 Receiving objects: 100% (10154/10154), 3.15 MiB | 1.96 MiB/s, done. Resolving deltas: 100% (6782/6782), done. Checking connectivity... done. ``` 進入`mininet`資料夾後,使用`util/install.sh -a`進行安裝 > 可先使用`-h`查看有哪些指令 結果出現這樣的畫面就代表已經成功安裝好 mininet ``` ---------------------------------------------------------------------- make[3]: Nothing to be done for 'install-data-am'. make[3]: Leaving directory '/home/user/oflops/example_modules/snmp_cpu' make[2]: Leaving directory '/home/user/oflops/example_modules/snmp_cpu' make[2]: Entering directory '/home/user/oflops/example_modules' make[3]: Entering directory '/home/user/oflops/example_modules' make[3]: Nothing to be done for 'install-exec-am'. make[3]: Nothing to be done for 'install-data-am'. make[3]: Leaving directory '/home/user/oflops/example_modules' make[2]: Leaving directory '/home/user/oflops/example_modules' make[1]: Leaving directory '/home/user/oflops/example_modules' Making install in cbench make[1]: Entering directory '/home/user/oflops/cbench' make[2]: Entering directory '/home/user/oflops/cbench' /bin/mkdir -p '/usr/local/bin' /bin/bash ../libtool --mode=install /usr/bin/install -c cbench '/usr/local/bin' libtool: install: /usr/bin/install -c cbench /usr/local/bin/cbench make[2]: Nothing to be done for 'install-data-am'. make[2]: Leaving directory '/home/user/oflops/cbench' make[1]: Leaving directory '/home/user/oflops/cbench' Making install in doc make[1]: Entering directory '/home/user/oflops/doc' make[1]: Nothing to be done for 'install'. make[1]: Leaving directory '/home/user/oflops/doc' Enjoy Mininet! ``` --- 我們可以使用一些簡單的指令,例如:`mn`來建立拓樸 ``` root@ubuntu:/home/user/mininet# mn *** Creating network *** Adding controller *** Adding hosts: h1 h2 *** Adding switches: s1 *** Adding links: (h1, s1) (h2, s1) *** Configuring hosts h1 h2 *** Starting controller c0 *** Starting 1 switches s1 ... *** Starting CLI: mininet> ``` * Topology:一台交換機相連兩台 host,其中控制器去控制交換機的行為 ![](https://i.imgur.com/272eRmw.png) 使用 mininet 呼叫 h1、h2,其中我們把 h1 當客戶端,h2 當服務端 ``` xterm h1 h2 ``` 1. h2 建立網頁伺服器 ``` echo "hi" > hi.htm ``` 建立服務連線 ``` python -m SimpleHTTPServer 80 ``` ![](https://i.imgur.com/24PYt3H.png) 2. h1 使用`curl`進行尋找網頁伺服器 ``` curl 10.0.0.2/hi.htm ``` ![](https://i.imgur.com/Ebg6DnM.png) * 若有出現 **Curl: (7) Failed to connect to port 443: Connection refused** 的訊息,可以透過以下幾種方式進行除錯 1. 查看埠號資訊:`netstat -tunlp | grep 80` 2. curl 本地端:`curl 127.0.0.1` 3. 檢查 apache2 是否安裝以及啟動: `apt-get install apache2 -y` `systemctl start apache2` `systemctl enable apache2` `systemctl status apache2` ## Reference 1. Mininet 相關課程:https://www.bilibili.com/video/BV1y4411t71s?from=search&seid=1247895496549182471 2. Mininet github:https://github.com/mininet/mininet 3. ubuntu 16.04 iso:https://mirror.umd.edu/ubuntu-iso/16.04/ 4. ubuntu 16.04 desktop iso on google drive : https://drive.google.com/drive/folders/1o_IuGVW37Ux4fzHlAO9r15SNdO0XRPpH?usp=sharing 5. 上課教學影片:https://drive.google.com/drive/folders/1hcu-E649f1py88s95eIZrl1iX_fnOBBK?usp=sharing 6. Mininet 安裝教學:https://sites.google.com/site/sdnruantidingyiwanglu/vmware-xia-zai-yu-an-zhuang/mininet