tip:本篇是NS-3安裝,vmware與ubuntu安裝請看系列其他文章。
ps:以下僅記錄了本人安裝時遇到的各類問題。僅針對ubuntu。遇到其他問題&其他型別虛擬機器器請參考其他文章。
資訊網路建模與模擬這門課要裝……具體的我也沒學QAQ……好像這是個很nice的東西^ _ ^
操作環境:VMware Workstation 15 Pro
虛擬機器器發行版:ubuntu-20.04.1-desktop-amd64(64位元虛擬機器器)
安裝教學:參考我的同系列文章
NS安裝包:直接通過linux shell獲得ns-allinone-3.32
命令如下(範例):
//缺少依賴、版本衝突什麼的感覺安裝不起來就用aptitude指令試一試:sudo aptitude install 加上軟體包
//如果沒有安裝aptitude就sudo apt-get install aptitude
sudo apt-get install gcc g++ python python-dev //這句會說需要選中python2 而非python之類的話,那麼就再輸入一個命令 sudo apt-get install python2;如此類推,後面出現類似提示也這麼操作
sudo apt-get install mercurial
sudo apt-get install bzr
sudo apt-get install gdb valgrind
sudo apt-get install gsl-bin libgsl0-dev libgsl0ldbl //這句在執行時出現錯誤libgsl0lbdl已經廢棄,可以由其他軟體包libgsl2取代,那麼就輸入sudo apt-get install libgsl2;諸如此類,後面出現類似提示也這麼操作
sudo apt-get install flex bison libfl-dev
sudo apt-get install tcpdump
sudo apt-get install sqlite sqlite3 libsqlite3-dev
sudo apt-get install libxml2 libxml2-dev
sudo apt-get install libgtk2.0-0 libgtk2.0-dev
sudo apt-get install vtun lxc
sudo apt-get install uncrustify
sudo apt-get install doxygen graphviz imagemagick
sudo apt-get install texlive texlive-pdf texlive-latex-extra texlive-generic-extra texlive-generic-recommended //這句在執行時出現錯誤E:無法定位軟體包texlive-pdf 把不可以定位的軟體包先刪掉,重新執行這個指令,安裝其餘軟體包。
sudo apt-get install texinfo dia texlive texlive-pdf texlive-latex-extra texlive-extra-utils texlive-generic-recommended texi2html
sudo apt-get install python-sphinx dia
sudo apt-get install python-pygraphviz python-kiwi python-pygoocanvas libgoocanvas-dev //這裡可能也會報錯無法定位軟體包blablabla看下面解決辦法
sudo apt-get install qt4-qmake //如果這一步不行 可以改成sudo apt-get install qt5-default
sudo apt-get install qt4-dev-tools //這個是後邊NetAnim模擬介面需要依賴的軟體包
sudo apt-get install libboost-signals-dev libboost-filesystem-dev
sudo apt-get install openmpi-bin openmpi-doc libopenmpi-dev
sudo apt-get install cmake libc6-dev libc6-dev-i386 libclang-dev llvm-dev automake
總結出現問題解決方案
用aptitude指令試一試:
sudo aptitude install 加上軟體包名稱
sudo apt-get install aptitude
那麼就再輸入一個命令 sudo apt-get install python2;如此類推,後面出現類似提示也這麼操作
把不可以定位的軟體包先刪掉,重新執行原來指令-無法定位的軟體包名稱,安裝其餘軟體包。
那麼就輸入sudo apt-get install libgsl2
;諸如此類,出現類似提示也這麼操作
ps:這個加了之後能解決很多無法定位軟體包的問題
step1 安裝vim
sudo apt-get install vim
step2 編輯軟體原始檔sources.list
sudo vim /etc/apt/sources.list
step3 新增源
在sources.list檔案末尾新增
deb http://archive.ubuntu.com/ubuntu/ trusty main universe restricted multiverse
step4 儲存退出
:wq
step5 更新軟體源
sudo apt-get update
step6 重新安裝
sudo apt-get install ……
評論區有同學建議使用清華映象源,對於沒有科學上網的朋友的網速會很友好,所以給出使用清華映象源的方式,請參考我的其他部落格。
參考官網:
This option is for the new user who wishes to download and experiment
with the most recently released and packaged version of ns-3. ns-3
publishes its releases as compressed source archives, sometimes
referred to as a tarball. A tarball is a particular format of software
archive where multiple files are bundled together and the archive is
usually compressed. The process for downloading ns-3 via tarball is
simple; you just have to pick a release, download it and uncompress
it.Let’s assume that you, as a user, wish to build ns-3 in a local
directory called workspace. If you adopt the workspace directory
approach, you can get a copy of a release by typing the following into
your Linux shell (substitute the appropriate version numbers, of
course)
$ cd
$ mkdir workspace
$ cd workspace
$ wget https://www.nsnam.org/release/ns-allinone-3.32.tar.bz2
$ tar xjf ns-allinone-3.32.tar.bz2
評論區給的建議:安裝在/opt/nsnam目錄下面,這樣方便日後刪除
如果你和我一樣這個虛擬機器器只是單純為了跑這一個軟體交作業……那就當上面沒說Orz
Notice the use above of the wget utility, which is a command-line tool
to fetch objects from the web; if you do not have this installed, you
can use a browser for this step.Following these steps, if you change into the directory
ns-allinone-3.32, you should see a number of files and directories
$ cd ns-allinone-3.32
$ ls
bake constants.py ns-3.32 README
build.py netanim-3.108 pybindgen-0.21.0 util.py
到這裡ns-3發行版構建的準備工作就完成了
前面使用tarball下載,則進入、workspace/ns-allinone-3.32/ns-3.32這個目錄下面,輸入
$ ./build.py --enable-examples --enable-tests
等待一會……
如果沒有問題的話,最終應該看到以下以下資訊:
Waf: Leaving directory '/path/to/workspace/ns-allinone-3.32/ns-3.32/build'
'build' finished successfully (6m25.032s)
Modules built:
antenna aodv applications
bridge buildings config-store
core csma csma-layout
dsdv dsr energy
fd-net-device flow-monitor internet
internet-apps lr-wpan lte
mesh mobility mpi
netanim (no Python) network nix-vector-routing
olsr point-to-point point-to-point-layout
propagation sixlowpan spectrum
stats tap-bridge test (no Python)
topology-read traffic-control uan
virtual-net-device visualizer wave
wifi wimax
Modules not built (see ns-3 tutorial for explanation):
brite click openflow
Leaving directory ./ns-3.32
關於未構建模組的部分
Modules not built (see ns-3 tutorial for explanation):
brite click
官網解釋如下:
This just means that some ns-3 modules that have dependencies on
outside libraries may not have been built, or that the configuration
specifically asked not to build them. It does not mean that the
simulator did not build successfully or that it will provide wrong
results for the modules listed as being built.
簡單來說,就是沒什麼影響,並不意味著無法成功構建。
ok,繼續跟著官網走,用waf構建
到目前為止,我們已經使用build.py指令碼或
bake工具開始構建ns-3。這些工具對於構建ns-3和支援庫很有用,它們呼叫ns-3目錄來呼叫Waf構建工具進行實際構建。Waf的安裝與ns-3原始碼捆綁在一起。大多數使用者迅速過渡到直接使用Waf來設定和構建ns-3。因此,要繼續,請將您的工作目錄更改為最初構建的ns-3目錄。這不是嚴格要求的,但是稍微繞道並瞭解如何對專案的設定進行更改將非常有價值。您可能要做的最有用的設定更改是構建程式碼的優化版本。預設情況下,您已經設定了專案以構建偵錯版本。讓我們告訴專案進行優化的構建。為了向Waf解釋它應該進行包括範例和測試的優化構建,您將需要執行以下命令:
$ ./waf clean
$ ./waf configure --build-profile=optimized --enable-examples --enable-tests
等待一會後,能看見類似以下內容的輸出:
Setting top to : /home/ns3user/workspace/bake/source/ns-3-dev
Setting out to : /home/ns3user/workspace/bake/source/ns-3-dev/build
Checking for 'gcc' (C compiler) : /usr/bin/gcc
Checking for cc version : 7.3.0
Checking for 'g++' (C++ compiler) : /usr/bin/g++
Checking for compilation flag -march=native support : ok
Checking for compilation flag -Wl,--soname=foo support : ok
Checking for compilation flag -std=c++11 support : ok
Checking boost includes : headers not found, please provide a --boost-includes argument (see help)
Checking boost includes : headers not found, please provide a --boost-includes argument (see help)
Checking for program 'python' : /usr/bin/python
Checking for python version >= 2.3 : 2.7.15
python-config : /usr/bin/python-config
Asking python-config for pyembed '--cflags --libs --ldflags' flags : yes
Testing pyembed configuration : yes
Asking python-config for pyext '--cflags --libs --ldflags' flags : yes
Testing pyext configuration : yes
Checking for compilation flag -fvisibility=hidden support : ok
Checking for compilation flag -Wno-array-bounds support : ok
Checking for pybindgen location : ../pybindgen (guessed)
Checking for python module 'pybindgen' : 0.21.0
Checking for pybindgen version : 0.21.0
Checking for code snippet : yes
Checking for types uint64_t and unsigned long equivalence : no
Checking for code snippet : no
Checking for types uint64_t and unsigned long long equivalence : yes
Checking for the apidefs that can be used for Python bindings : gcc-LP64
Checking for internal GCC cxxabi : complete
Checking for python module 'pygccxml' : not found
Checking for click location : not found
Checking for program 'pkg-config' : /usr/bin/pkg-config
Checking for 'gtk+-3.0' : not found
Checking for 'libxml-2.0' : yes
checking for uint128_t : not found
checking for __uint128_t : yes
Checking high precision implementation : 128-bit integer (default)
Checking for header stdint.h : yes
Checking for header inttypes.h : yes
Checking for header sys/inttypes.h : not found
Checking for header sys/types.h : yes
Checking for header sys/stat.h : yes
Checking for header dirent.h : yes
Checking for header stdlib.h : yes
Checking for header signal.h : yes
Checking for header pthread.h : yes
Checking for header stdint.h : yes
Checking for header inttypes.h : yes
Checking for header sys/inttypes.h : not found
Checking for library rt : yes
Checking for header sys/ioctl.h : yes
Checking for header net/if.h : yes
Checking for header net/ethernet.h : yes
Checking for header linux/if_tun.h : yes
Checking for header netpacket/packet.h : yes
Checking for NSC location : not found
Checking for 'sqlite3' : not found
Checking for header linux/if_tun.h : yes
Checking for python module 'gi' : 3.26.1
Checking for python module 'gi.repository.GObject' : ok
Checking for python module 'cairo' : ok
Checking for python module 'pygraphviz' : 1.4rc1
Checking for python module 'gi.repository.Gtk' : ok
Checking for python module 'gi.repository.Gdk' : ok
Checking for python module 'gi.repository.Pango' : ok
Checking for python module 'gi.repository.GooCanvas' : ok
Checking for program 'sudo' : /usr/bin/sudo
Checking for program 'valgrind' : not found
Checking for 'gsl' : not found
python-config : not found
Checking for compilation flag -fstrict-aliasing support : ok
Checking for compilation flag -fstrict-aliasing support : ok
Checking for compilation flag -Wstrict-aliasing support : ok
Checking for compilation flag -Wstrict-aliasing support : ok
Checking for program 'doxygen' : /usr/bin/doxygen
---- Summary of optional NS-3 features:
Build profile : optimized
Build directory :
BRITE Integration : not enabled (BRITE not enabled (see option --with-brite))
DES Metrics event collection : not enabled (defaults to disabled)
Emulation FdNetDevice : enabled
Examples : enabled
File descriptor NetDevice : enabled
GNU Scientific Library (GSL) : not enabled (GSL not found)
Gcrypt library : not enabled (libgcrypt not found: you can use libgcrypt-config to find its location.)
GtkConfigStore : not enabled (library 'gtk+-3.0 >= 3.0' not found)
MPI Support : not enabled (option --enable-mpi not selected)
NS-3 Click Integration : not enabled (nsclick not enabled (see option --with-nsclick))
NS-3 OpenFlow Integration : not enabled (Required boost libraries not found)
Network Simulation Cradle : not enabled (NSC not found (see option --with-nsc))
PlanetLab FdNetDevice : not enabled (PlanetLab operating system not detected (see option --force-planetlab))
PyViz visualizer : enabled
Python API Scanning Support : not enabled (Missing 'pygccxml' Python module)
Python Bindings : enabled
Real Time Simulator : enabled
SQlite stats data output : not enabled (library 'sqlite3' not found)
Tap Bridge : enabled
Tap FdNetDevice : enabled
Tests : enabled
Threading Primitives : enabled
Use sudo to set suid bit : not enabled (option --enable-sudo not selected)
XmlIo : enabled
'configure' finished successfully (6.387s)
執行./test.py
來執行ns-3的測試程式碼,如果許可權不夠,就改為sudo ./test.py
稍等片刻,應該能看到如下內容:
Waf: Entering directory `/path/to/workspace/ns-3-allinone/ns-3-dev/build'
Waf: Leaving directory `/path/to/workspace/ns-3-allinone/ns-3-dev/build'
'build' finished successfully (1.799s)
Modules built:
aodv applications bridge
click config-store core
csma csma-layout dsdv
emu energy flow-monitor
internet lte mesh
mobility mpi netanim
network nix-vector-routing ns3tcp
ns3wifi olsr openflow
point-to-point point-to-point-layout propagation
spectrum stats tap-bridge
template test tools
topology-read uan virtual-net-device
visualizer wifi wimax
PASS: TestSuite wifi-interference
PASS: TestSuite histogram
...
PASS: TestSuite object
PASS: TestSuite random-number-generators
92 of 92 tests passed (92 passed, 0 failed, 0 crashed, 0 valgrind errors)
接下來,常規操作helloworld來一下。
$ ./waf --run hello-simulator
獲得結果:
完成撒花~❀❀❀