ns-3 sare-simulatzailearen tutoriala. 3. kapitulua

ns-3 sare-simulatzailearen tutoriala. 3. kapitulua
1,2. kapitulua

3 Hasteko
3.1 Ikuspegi orokorra
3.2 Aurrebaldintzak
3.2.1 ns-3 bertsioa deskargatu iturri artxibo gisa
3.3 ns-3 deskargatzea Git erabiliz
3.3.1 Bake erabiliz ns-3 kargatzea
3.4 Muntaketa ns-3
3.4.1 build.py-rekin eraikitzea
3.4.2 Bake-rekin eraikitzea
3.4.3 Waf-ekin eraiki
3.5 Proba ns-3
3.6 Gidoia exekutatzen
3.6.1 Komando-lerroko argumentuak
3.6.2 Arazketa
3.6.3 Laneko direktorioa

3 kapitulua

Hasten

Kapitulu honek irakurlea prestatu nahi du agian ns-3 inoiz instalatu ez duen ordenagailu batekin hasteko. Onartutako plataformak, aurrebaldintzak, ns-3 nola lortu, ns-3 nola eraiki eta zure eraikitze eta programa sinpleak nola probatu eta exekutatu ditu.

3.1 Ikuspegi orokorra

ns-3 simulagailua lankidetzako software liburutegien sistema gisa eraiki da. Muntatzean, erabiltzaile-programen kodea liburutegi hauekin lotzen da. C++ edo Python programazio lengoaiak programa pertsonalizatuak idazteko erabiltzen dira.

Ns-3 iturburu-kode gisa banatzen da, hau da, xede-sistemak software garapen-ingurune bat izan behar du lehenik liburutegiak eraikitzeko eta ondoren erabiltzailearen programa eraikitzeko. Printzipioz, ns-3 sistema zehatz baterako prest egindako liburutegi gisa banatu liteke, eta etorkizunean horrela banatu daitezke. Baina gaur egun erabiltzaile askok ns-3 bera editatuz egiten dute lana, beraz, erabilgarria da iturburu-kodea edukitzea liburutegiak eraikitzeko. Norbaitek sistema eragileetarako prest dauden liburutegiak eta paketeak sortzeko lana bere gain hartu nahi badu, jarri harremanetan posta-zerrendara. ns-garatzaileak.

Ondoren, ns-3 deskargatzeko eta eraikitzeko hiru modu aztertuko ditugu. Lehenengoa oharra ofiziala gune nagusitik deskargatu eta eraikitzea da. Bigarrena, oinarrizko ns-3 instalazioaren garapen bertsioen kopiak hautatzea eta muntatzea da. Hirugarrena ns-3rako luzapen gehiago kargatzeko eraikuntza-tresna osagarriak erabiltzea da. Bakoitzak aztertuko ditugu tresnak zertxobait desberdinak direlako.

Linux-eko erabiltzaile esperientziadunek galdetu dezakete zergatik ns-3 ez den pakete gisa eskaintzen pakete-kudeatzailea erabiltzen duten beste liburutegi gehienak bezala? Linux banaketa ezberdinetarako (adibidez, Debian) pakete bitarrak badaude ere, erabiltzaile gehienek liburutegiak editatzen eta ns-3 beraiek berreraiki behar izaten dute, beraz, iturburu-kodea eskura edukitzea erabilgarria da. Hori dela eta, iturritik instalatzen zentratuko gara.

Aplikazio gehienetarako ns-3 eskubideetarako root ez dira beharrezkoak, pribilegiorik gabeko erabiltzaile-kontu bat erabiltzea gomendatzen da.

3.2 Aurrebaldintzak

Eskuragarri dauden ns-3 liburutegien multzo osoak menpekotasun batzuk ditu hirugarrenen liburutegiekiko, baina gehienetan ns-3 osagai arrunt (sarritan lehenespenez instalatuta) laguntzarekin eraiki eta erabil daiteke: C++ konpilatzailea, Python, iturburu-kode editorea (adibidez, vim, emacs edo Eclipse) eta, garapen-biltegiak erabiltzen badira, Git bertsioak kontrolatzeko sistemak. Lehen aldiz erabiltzaile gehienek ez dute kezkatu beharko euren konfigurazioak ns-3 funtzio aurreratu batzuk falta direla jakinarazten badu, baina instalazio osoa nahi dutenentzat, proiektuak aholku eta trikimailu erabilgarriak dituen orrialdeak biltzen dituen wiki bat eskaintzen du. Horrelako orrialde bat Instalazio orria da, hainbat sistemaren instalaziorako argibideekin, hemen eskuragarri: https://www.nsnam.org/wiki/Installation.

Wiki honetako Aurrebaldintzak atalean ns-3 aukera arruntak onartzeko beharrezkoak diren paketeak azaltzen dira eta Linux edo macOSen ohiko zaporeetan instalatzeko erabiltzen diren komandoak ere ematen ditu.

Aukera hau aprobetxa dezakezu ns-3 wiki orria edo webgune nagusia arakatzeko: https://www.nsnam.org, informazio asko dagoelako bertan. ns-3-ren azken bertsioarekin (ns-3.29) hasita, tresna hauek behar dira ns-3 exekutatzeko:

Tresna paketea/bertsioa

  • C++ konpilatzailea
    clang++ edo g++ (g++ 4.9 bertsioa edo berriagoa)
  • Python
    python2 bertsioa >= 2.7.10 edo python3 bertsioa >=3.4
  • Git
    edozein azken bertsioa (ns-3 GitLab.com-en sartzeko)
  • tar
    edozein azken bertsioa (ns-3 bertsioa deskonprimitzeko)
  • bunzip2
    edozein azken bertsioa (ns-3 bertsioa deskonprimitzeko)

Python-en bertsio lehenetsia egiaztatzeko, idatzi python -V. g++ bertsioa egiaztatzeko, idatzi g++ -v. Tresnaren bat falta bada edo zaharregia bada, ikusi ns-3 wiki orrialdeko instalazio-gidara.

Hemendik aurrera, irakurleak Linux, MacOS edo Linux emuladore bat exekutatzen ari dela suposatzen dugu, eta gutxienez goiko tresnak dituela.

3.2.1 ns-3 bertsioa deskargatu iturri artxibo gisa

Hau da ns-3-ren azken bertsio eta paketeen bertsioak deskargatu eta esperimentatu nahi dituen erabiltzaile berri baten jardunbidea. ns-3 bertsioak iturburu-artxibo konprimitu gisa argitaratzen dira, batzuetan deitzen zaie tarball. tarball software artxibo formatu berezi bat da eta bertan hainbat fitxategi konbinatzen dira. Artxiboa konprimitu ohi da. ns-3 abio prozesuaren bidez tarball erraza da, bertsio bat hautatu, deskargatu eta deskonprimitu besterik ez duzu behar.

Demagun, erabiltzaile gisa, deitutako tokiko direktorio batean ns-3 eraiki nahi duzula lan eremua. Argitalpenaren kopia bat lor dezakezu Linux kontsolan honako hau sartuta (bertsio-zenbaki egokiak ordezkatuz, noski)

$ cd 
$ mkdir workspace 
$ cd workspace 
$ wget https://www.nsnam.org/release/ns-allinone-3.29.tar.bz2 
$ tar xjf ns-allinone-3.29.tar.bz2 

Erreparatu goian erabilitako erabilgarritasunari wget, Internetetik objektuak deskargatzeko komando lerroko tresna bat da. Ez baduzu instalatu, zure arakatzailea erabil dezakezu horretarako.

Pauso hauek jarraituz ns-allinone-3.29 direktoriora eramango zaitu, bertan hainbat fitxategi eta direktorio ikusi beharko zenuke

$ cd ns-allinone-3.29
$ ls
bake constants.py ns-3.29 README
build.py netanim-3.108 pybindgen-0.17.0.post58+ngcf00cc0 util.py

Orain prest zaude ns-3 oinarrizko banaketa eraikitzeko eta ns-3 eraikitzeko atalera joan zaitezke.

3.3 ns-3 deskargatzea Git erabiliz

ns-3 kodea GitLab.com-eko Git biltegietan dago eskuragarri https://gitlab.com/nsnam/. Taldea nsnam kode irekiko proiektu batek erabiltzen dituen hainbat biltegi biltzen ditu.

Git biltegiak erabiltzen hasteko modurik errazena ingurunea bifurkatzea edo klonatzea da ns-3-allinona. Gehien erabiltzen diren ns-3 azpisistemen karga eta muntaketa kudeatzen dituen script multzo bat da. Git-en berria bazara, baliteke "fork" eta "klona" terminoak ezezagunak izatea; bada, GitLab.com-en dagoen biltegia honela klonatu (zure kopia propioa) gomendatzen dugu:

$ cd 
$ mkdir workspace 
$ cd workspace 
$ git clone https://gitlab.com/nsnam/ns-3-allinone.git 
$ cd ns-3-allinone 

Fase honetan, zure direktorioaren ikuspegia ns-3-allinona goian deskribatutako oharra artxibo-direktoriotik apur bat desberdina. Honelako itxura izan beharko luke:

$ ls
build.py constants.py download.py README util.py

Kontuan izan gidoi bat dagoela deskargatu.py, ns-3 eta horrekin batera datorren iturburu kodea ere aterako dituena. Hemen duzu aukera: edo deskargatu ns-3 garapenaren azken argazkia:

$ python download.py

edo nahiago ns-3 oharra bandera erabiliz -n kaleratze-zenbakia adierazteko:

$ python download.py -n ns-3.29

Pauso honen ondoren direktoriora ns-3-allinona biltegi osagarriak deskargatuko dira ns-3, bake, pybindgen ΠΈ netanim.

Kontuan izan
Ubuntu16.04 garbia duen makina batean, komandoa honetara aldatu behar nuen: $ sudo python3 download.py -n ns-3.29 (aurrerantzean itzultzailearen oharrak).

3.3.1 Bake erabiliz ns-3 kargatzea

Goiko bi metodoak (iturburu artxiboa edo biltegia ns-3-allinona Git bidez) erabilgarriak dira ns-3 instalazio errazena lortzeko gehigarri anitzekin (pybindgen Python loturak sortzeko eta netanim sareko animaziorako). ns-3-allinone-n lehenespenez emandako hirugarren biltegiari deitzen zaio bake.

Labean ns-3 proiekturako garatua den biltegi anitzetako softwarea koordinatuko eraikitzeko tresna da. Labean ns-3-ren garapen-bertsioak lortzeko erabil daiteke, baita ns-3 banaketaren oinarrizko bertsioaren luzapenak deskargatzeko eta eraikitzeko ere, hala nola ingurunea. Kode Zuzeneko Exekuzioa, CradleNetwork Simulazio Sehaska, Python lotura berriak eta hainbat ns-3 "aplikazio" sortzeko gaitasuna.

Kontuan izan
CradleNetwork Simulation Cradle sare-simulagailu baten barruan TCP/IP sare-pilak errealak erabiltzeko aukera ematen duen esparru bat da.

Zure ns-3 instalazioak funtzio aurreratu edo osagarriak izatea espero baduzu, instalazio bide hau jarraitu dezakezu.

Azken ns-3 bertsioetan Labean tar oharra gehitu zen. Argitalpenak bertsioaren unean uneko software-bertsioak deskargatzeko aukera ematen duen konfigurazio-fitxategi bat dakar. Hori da, adibidez, bertsioa Labean, ns-3.29 bertsioarekin banatzen dena, ns-3 bertsio horren edo lehenagoko osagaiak berreskuratzeko erabil daiteke, baina ezin da erabili geroagoko bertsioetarako osagaiak berreskuratzeko (paketearen deskribapen fitxategia bada. bakeconf.xml eguneratu gabe).

Azken kopia ere lor dezakezu bakekomando hau zure Linux kontsolan sartuz (Git instalatuta duzula suposatuz):

$ cd 
$ mkdir workspace 
$ cd workspace 
$ git clone https://gitlab.com/nsnam/bake.git

Git komandoa exekutatzen duzunean, honelako zerbait ikusi beharko zenuke:

Cloning into 'bake'...
remote: Enumerating objects: 2086, done. 
remote: Counting objects: 100% (2086/2086), done. 
remote: Compressing objects: 100% (649/649), done. 
remote: Total 2086 (delta 1404), reused 2078 (delta 1399) 
Receiving objects: 100% (2086/2086), 2.68 MiB | 3.82 MiB/s, done. 
Resolving deltas: 100% (1404/1404), done.

Komandoa amaitu ondoren klonatu direktorio bat izan beharko zenuke bake, horren edukiak honelako itxura izan beharko luke:

$ cd bake
$ ls
bake bakeconf.xml bake.py doc examples generate-binary.py test TODO

Kontuan izan hainbat Python script kargatu dituzula, izeneko Python modulua bake eta XML konfigurazio fitxategi bat. Hurrengo urratsa script hauek erabiltzea da nahi duzun ns-3 banaketa deskargatzeko eta eraikitzeko. Hainbat pertsonalizazio helburu eskuragarri daude:

  1. ns-3.29: oharrari dagokion modulua; bertsioaren antzeko osagaiak deskargatuko ditu tarball-ean;

  2. ns-3-garapena: antzeko modulua, baina garapen zuhaitzeko kodea erabiliz;

  3. ns-allinona-3.29: Klik-bideraketa eta Network Simulation Cradle, Openflow ns-3-rako beste ezaugarri osagarri batzuk biltzen dituen modulua.

  4. ns-3-allinona: moduluaren bertsioaren antzekoa allinone, baina garapen kodearako.

Kontuan izan
Klikatu β€” Routerrak sortzeko software-arkitektura modularra.

Openflow router eta kommutadoreek datu-sare batean transmititutako datuak prozesatzeko prozesua kudeatzeko protokoloa da, softwareak definitutako sare-teknologia ezarriz.

Gaur egungo garapenaren argazkia (argitaratzerik gabekoa) ns-3 helbidean aurki daiteke:https://gitlab.com/nsnam/ns-3-dev.git.

Garatzaileak biltegi hauek funtzionamendu koherentean mantentzen saiatzen dira, baina garapen-eremuan daude eta kaleratu gabeko kodea dute, beraz, funtzio berriak erabiltzeko asmoa ez baduzu, hautatu bertsio ofiziala.

Kodearen azken bertsioa biltegien zerrendan arakatuz edo ns-3 Releases web orrira joanda aurki dezakezu:https://www.nsnam.org/releases/ eta azken bertsioaren estekan klik eginez. Adibide honetan ns-3.29rekin jarraituko dugu.

Orain, behar ditugun ns-3 osagaiak lortzeko, tresna erabiliko dugu Labean. Esan ditzagun lanaren sarrerako hitz batzuk Labean.

Bake-k paketeen iturriak direktorio batean kargatuz funtzionatzen du iturri eta liburutegiak eraikitze direktorioan instalatzea. Labean bitarrari erreferentzia eginez exekutatu daiteke, baina exekutatu nahi baduzu Labean ez deskargatu den direktoriotik, bidea gehitzea komeni da bake zure bidera (PATH ingurune-aldagaia), adibidez, honela (adibidea Linux bash shell-erako). Joan "bake" direktoriora eta ezarri ondoko ingurune-aldagaiak:

$ export BAKE_HOME=`pwd` 
$ export PATH=$PATH:$BAKE_HOME:$BAKE_HOME/build/bin 
$ export PYTHONPATH=$PYTHONPATH:$BAKE_HOME:$BAKE_HOME/build/lib

Honek programa jarriko du labean.py shell bidera eta beste programa batzuei aukera emango die berak sortutako exekutagarriak eta liburutegiak aurkitzeko bake. Erabilera kasu batzuetan bake, goian deskribatutako PATH eta PYTHONPATH ezarpena ez da beharrezkoa, baina ns-3-allinone-ren eraikuntza osoa (pakete gehigarriekin) normalean eskatzen du.

Joan zure laneko direktoriora eta sartu honako hau kontsolan:

$ ./bake.py configure -e ns-3.29

Jarraian galdetuko dugu Labean egiaztatu osagai ezberdinak kargatzeko behar adina tresna dugun. Markatu:

$ ./bake.py check

Horrelako zerbait ikusi beharko zenuke:

> Python - OK 
> GNU C++ compiler - OK 
> Mercurial - OK 
> Git - OK 
> Tar tool - OK 
> Unzip tool - OK 
> Make - OK 
> cMake - OK 
> patch tool - OK 
> Path searched for tools: /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin ...

Bereziki, Mercurial, CVS, Git eta Bazaar bezalako kargatzeko tresnak ezinbestekoak dira urrats honetan, kodea lortzeko aukera ematen digutelako. Une honetan, instalatu falta diren tresnak zure sistemarako ohiko moduan (nola badakizu) edo jarri harremanetan zure sistema-administratzailearekin laguntza eskatzeko.

Ondoren, saiatu softwarea deskargatzen:

$ ./bake.py download

emaitza bezalako zerbait izan beharko litzateke:

>> Searching for system dependency setuptools - OK 
>> Searching for system dependency libgoocanvas2 - OK 
>> Searching for system dependency gi-cairo - OK 
>> Searching for system dependency pygobject - OK 
>> Searching for system dependency pygraphviz - OK 
>> Searching for system dependency python-dev - OK 
>> Searching for system dependency qt - OK 
>> Searching for system dependency g++ - OK 
>> Downloading pybindgen-0.19.0.post4+ng823d8b2 (target directory:pybindgen) - OK 
>> Downloading netanim-3.108 - OK 
>> Downloading ns-3.29 - OK

Horrek esan nahi du hiru iturri deskargatu direla. Orain joan iturburu-direktoriora eta idatzi ls; Ikusi beharko zenuke:

$ cd source 
$ ls
netanim-3.108 ns-3.29 pybindgen

Orain prest zaude ns-3 banaketa eraikitzeko.

3.4 Muntaketa ns-3

ns-3 deskargatzean bezala, ns-3 eraikitzeko hainbat modu daude. Azpimarratu nahi dugun gauza nagusia da ns-3 izeneko eraikitze-tresna baten bidez eraikitzen dela Wafjarraian deskribatzen da. Erabiltzaile gehienekin lan egingo dute Waf, baina badaude script erabilgarri batzuk hasteko edo eraikuntza konplexuagoak antolatzen laguntzeko. Beraz, mesedez, buruz irakurri aurretik Waf, begiratu eraiki.py eta muntaia-rekin bake.

3.4.1 build.py-rekin eraikitzea

Arreta! Eraikitze-urrats hau goian deskribatutako moduan lortutako iturburu-artxiboaren bertsiotik bakarrik dago eskuragarri; eta ez git edo bake bidez deskargatu.

Oharra artxibo batekin lan egitean tarballin ns-3-allinona Osagaiak muntatzea erraztu dezakeen script erabilgarri bat dago. build.py deitzen da. Programa honek proiektua konfiguratuko dizu modurik erabilgarrienean. Hala ere, kontuan izan konfigurazio aurreratuagoak eta ns-3-rekin lan egitea normalean ns-3-ren eraikitze-sistema propioa erabiltzea dakar, Waf, tutoretza honetan geroago aurkeztuko dena.

erabiliz deskargatu baduzu tarball, gero zure direktorioan ~/lan-eremua antzeko zerbait duen direktorio bat ns-allinona-3.29. Hurrengoa sartu:

$ ./build.py --enable-examples --enable-tests

Deitzean eraiki.py Komando-lerroko argumentuak erabili ditugu tutorial honetan erabilitako adibideak eta probak eraikitzeko, ns-3-n lehenespenez eraikiak ez direnak. Lehenespenez, programak erabilgarri dauden modulu guztiak ere eraikitzen ditu. Ondoren, nahi baduzu, ns-3 eraiki dezakezu adibiderik eta probarik gabe, edo zure lanerako beharrezkoak ez diren moduluak baztertu.

Konpiladorearen irteera-mezu asko ikusiko dituzu gidoiak bistaratzen dituena, kargatu dituzun zati desberdinak eraikitzen dituen heinean. Lehenik eta behin gidoia animatzailea eraikitzen saiatuko da netanim, gero lotura-sorgailua pybindgen eta azkenik ns-3. Prozesua amaitutakoan, honako hau ikusi beharko zenuke:

Waf: Leaving directory '/path/to/workspace/ns-allinone-3.29/ns-3.29/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.29

Zerrendaren azken hiru lerroetan eraiki gabeko moduluei buruzko mezu bat ikusten dugu:

Modules not built (see ns-3 tutorial for explanation):
brite                     click

Horrek esan nahi du, besterik gabe, kanpoko liburutegien menpe dauden ns-3 modulu batzuk ez direla eraikitzea edo konfigurazio honetarako eraiki behar ez direla. Horrek ez du esan nahi simulagailua muntatuta ez dagoenik edo muntatutako moduluak behar bezala funtzionatuko ez dutenik.

3.4.2 Bake-rekin eraikitzea

Goiko bakea erabili baduzu proiektuaren biltegietatik iturburu kodea lortzeko, ns-3 eraikitzeko erabiltzen jarraitu dezakezu. Markatu:

$ ./bake.py build

eta horrelako zerbait ikusi beharko zenuke:

>> Building pybindgen-0.19.0.post4+ng823d8b2 - OK 
>> Building netanim-3.108 - OK 
>> Building ns-3.29 - OK

lagundu: deskargatu eta eraikitzeko urratsak aldi berean egin ditzakezu "bake.py deploy" deituz.

Osagai guztiak muntatzeak huts egin dezake, baina muntaketak jarraituko du osagairen bat behar ez bada. Adibidez, azken eramangarritasun arazo bat hori izan zen castxml erreminten bidez munta daiteke bake ez plataforma guztietan. Kasu honetan, honelako mezu bat agertuko da:

>> Building castxml - Problem 
> Problem: Optional dependency, module "castxml" failed
This may reduce the functionality of the final build.
However, bake will continue since "castxml" is not an essential dependency.
For more information call bake with -v or -vvv, for full verbose mode.

Baina castxml bakarrik beharrezkoa da Python lotura eguneratuak sortu nahi badituzu. Erabiltzaile gehienentzat ez dago horren beharrik (ns-3 aldatzen duten arte behintzat), beraz, oraingoz abisu horiek modu seguruan baztertu daitezke.

Huts egiten badu, komando honek falta diren mendekotasunei buruzko iradokizun bat emango dizu:

$ ./bake.py show

Eraikitzen saiatzen ari zaren paketeen menpekotasun desberdinak zerrendatuko dira.

3.4.3 Waf-ekin eraiki

Orain arte, ns-3 eraikitzen hasteko, script-a erabili dugu eraiki.py, edo tresna bake. Tresna hauek erabilgarriak dira ns-3 eraikitzeko eta liburutegiak mantentzeko. Izan ere, eraikitzeko eraikitzeko tresna exekutatzen dute Waf ns-3 direktoriotik. Waf ns-3 iturburu-kodearekin instalatuta. Erabiltzaile gehienak azkar pasatzen dira erabilera zuzenera ns‑3 konfiguratzeko eta muntatzeko Waf. Beraz, jarraitzeko, joan hasiera batean sortu zenuen ns-3 direktoriora.

Hau ez da guztiz beharrezkoa une honetan, baina erabilgarria izango da pixka bat atzera egitea eta proiektuaren konfigurazioan aldaketak nola egin ikustea. Seguruenik, egin dezakezun konfigurazio-aldaketarik erabilgarriena kodearen bertsio optimizatua sortzea da. Lehenespenez, zure proiektua konfiguratu duzu arazketa-bertsio bat eraikitzeko. Ikus dezagun proiektu bat muntaketa optimizatu bat sortzeko. Waf-i adibideak eta probak barne hartzen dituzten eraikuntza optimizatuak egin behar dituela azaltzeko, komando hauek exekutatu beharko dituzu:

$ ./waf clean 
$ ./waf configure --build-profile=optimized --enable-examples --enable-tests

Hau martxan jarriko da Waf tokiko direktoriotik kanpo (zure erosotasunerako). Lehenengo komandoa aurreko eraikuntzatik garbitzen da, normalean hau ez da guztiz beharrezkoa, baina praktika ona da (ikusi behean eraikitzeko profilak ere); honek aldez aurretik sortutako liburutegiak eta direktorioan dauden objektu-fitxategiak ezabatuko ditu eraiki/. Proiektua birkonfiguratzen denean eta eraikitze-sistemak mendekotasun desberdinak egiaztatzen dituenean, irteera honen antzekoa ikusi beharko zenuke:

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.19.0. ,!post4+g823d8b2 
Checking for pybindgen version           : 0.19.0. ,!post4+g823d8b2 
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 fou   nd)
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)

Kontuan izan goiko zerrendaren azken zatia. Ns-3 aukera batzuk ez daude lehenespenez gaituta edo sistemaren laguntza behar dute behar bezala funtzionatzeko. Adibidez, XmlTo gaitzeko, liburutegiak sisteman egon behar du libxml-2.0. Liburutegi hau aurkitu ez bada eta dagokion ns-3 funtzioa gaituta ez badago, mezu bat bistaratuko da. Kontuan izan komandoa erabil daitekeela ere sudo programa jakin batzuetarako "set group ID at runtime" suid bit ezartzeko. Lehenespenez ez dago gaituta eta, beraz, funtzio hau "ez gaituta" agertzen da. Azkenik, gaituta dauden aukeren zerrenda bat lortzeko, erabili Waf parametroarekin --check-config.

Orain atzera egin dezagun eta itzul gaitezen adibide eta probak dituen arazketa-eraikitzera.

$ ./waf clean 
$ ./waf configure --build-profile=debug --enable-examples --enable-tests

Eraikitze-sistema konfiguratuta dago eta ns-3 programen arazketa-bertsioak eraiki ditzakezu, besterik gabe idatzita:

$ ./waf

Baliteke goiko urratsek ns-3 sistemaren zati bat bi aldiz eraikitzera behartu izana, baina orain badakizu nola aldatu konfigurazioa eta kode optimizatua eraikitzen.

Proiektuaren konfigurazio jakin baterako zein profil aktibo dagoen egiaztatzeko, komando bat dago:

$ ./waf --check-profile 
Waf: Entering directory `/path/to/ns-3-allinone/ns-3.29/build' 
Build profile: debug

Goiko eszenatokia eraiki.py argudioak ere onartzen ditu --enable-examples ΠΈ --enable-tests, baina beste aukera batzuk Waf ez du zuzenean onartzen. Adibidez, honek ez du funtzionatuko:

$ ./build.py --disable-python

erreakzioa hau izango da:

build.py: error: no such option: --disable-python

Hala ere, operadore berezia - - parametro gehigarriak pasatzeko erabil daiteke wafberaz, aurrekoaren ordez komando honek funtzionatuko du:

$ ./build.py -- --disable-python

komando nagusia sortzen duelako ./waf konfiguratu --disable-python. Hona hemen sarrerako aholku gehiago Waf.

Eraikuntza-erroreak kudeatzea

ns-3 bertsioak Linux eta MacOS banaketa arruntetan argitaratzen den unean eskuragarri dauden C++ konpiladore berrienetan probatzen dira. Hala ere, denboraren poderioz, banaketa berriak konpilatzaile berriekin kaleratzen dira, eta konpilatzaile berri hauek abisuei buruz pedanteagoak izan ohi dira. ns-3-k bere eraikuntza konfiguratzen du abisu guztiak errore gisa tratatzeko, beraz, batzuetan, bertsio zaharrago bat sistema berriago batean exekutatzen ari bazara, konpiladorearen abisu batek eraikuntza geldiarazi dezake.

Adibidez, aurretik ns-3.28 bertsioa zegoen Fedora 28rako, bertsio nagusi berri bat barne. gcc (gcc-8). Fedora 3.28-n ns-28 bertsioa edo aurreko bertsioak eraikiz, Gtk2+ instalatuta, errore hau gertatuko da:

/usr/include/gtk-2.0/gtk/gtkfilechooserbutton.h:59:8: error: unnecessary parentheses ,!in declaration of β€˜__gtk_reserved1’ [-Werror=parentheses] void (*__gtk_reserved1);

ns‑3.28.1-tik hasitako bertsioetan, in Waf aukera bat dago arazo hauek konpontzeko. "-Werror" bandera ezartzea desgaitzen du g++ eta clang++-n. Hau "--disable-werror" aukera da eta konfigurazioan aplikatu behar da:

$ ./waf configure --disable-werror --enable-examples --enable-tests

Konfiguratu edo muntatu

Agindu batzuk Waf konfigurazio fasean soilik dute esanahia, eta batzuk eraikitze fasean bakarrik balio dute. Adibidez, ns-3 emulazio funtzioak erabili nahi badituzu, bit ezarpena gaitu dezakezu hegoaldera erabiliz sudo, goian azaldu bezala. Honek konfigurazio-urratseko komandoak gainidatziko ditu, eta, beraz, konfigurazioa alda dezakezu honako komando hau erabiliz, adibideak eta probak ere biltzen dituena.

$ ./waf configure --enable-sudo --enable-examples --enable-tests

Hau egiten baduzu Waf abiaraziko da sudoemulazio kodea socket sortzeko programak baimenekin exekutatzeko aldatzeko root. Urtean Waf Beste aukera asko daude eskuragarri konfiguratzeko eta eraikitzeko urratsetarako. Zure aukerak aztertzeko, sartu:

$ ./waf --help

Hurrengo atalean probarekin lotutako aukera batzuk erabiliko ditugu.

Muntaia-profilak

Dagoeneko ikusi dugu nola konfigura dezakezun Waf batzarretarako arazteko ΠΈ optimizada:

$ ./waf --build-profile=debug

Tarteko muntaia-profila ere badago, askatu. Aukera -d -ren sinonimoa da --build-profile. Eraikitze-profilak erregistroa, baieztapenak eta konpiladoreen optimizazio etengailuen erabilera kontrolatzen du:

ns-3 sare-simulatzailearen tutoriala. 3. kapitulua

Ikus dezakezunez, erregistroa eta baieztapenak arazketa-eraiketetan soilik daude eskuragarri. Gomendatutako praktika zure script-a arazketa-moduan garatzea da, ondoren errepikatu exekuzioak egitea (estatistikak edo parametroak aldatzeko) profil optimizatu batean.

Konpilazio profil jakin batzuetan bakarrik exekutatu behar den kodea baduzu, erabili Code Wrapper Makroa:

NS_BUILD_DEBUG (std::cout << "Part of an output line..." << std::flush; timer.Start ,!()); DoLongInvolvedComputation ();
NS_BUILD_DEBUG (timer.Stop (); std::cout << "Done: " << timer << std::endl;)

Lehenetsia, Waf eraikitzeko artefaktuak tokiak eraikitze direktorioan. Irteera direktorio ezberdin bat zehaztu dezakezu aukera erabiliz -β€―-out, adibidez:

$ ./waf configure --out=my-build-dir

Hau eraikitze-profilekin konbinatuz, erraz alda dezakezu konpilazio-aukera desberdinetatik:

$ ./waf configure --build-profile=debug --out=build/debug
$ ./waf build
... 
$ ./waf configure --build-profile=optimized --out=build/optimized 
$ ./waf build
...

Horrek askotariko muntaketarekin lan egiteko aukera ematen dizu, aldi bakoitzean azken muntaia berridatzi beharrik gabe. Beste profil batera aldatzen zarenean, Waf hura bakarrik konpilatuko du, dena guztiz birkonpilatu gabe.

Era honetan eraikitze-profilak aldatzen dituzunean, kontuz ibili behar duzu aldi bakoitzean konfigurazio-aukera berdinak ematen. Hainbat ingurune-aldagai definitzeak akatsak saihesten lagunduko dizu:

$ export NS3CONFIG="--enable-examples --enable-tests" 
$ export NS3DEBUG="--build-profile=debug --out=build/debug"
$ export NS3OPT=="--build-profile=optimized --out=build/optimized" 

$ ./waf configure $NS3CONFIG $NS3DEBUG
$ ./waf build 
... 
$ ./waf configure $NS3CONFIG $NS3OPT
$ ./waf build

Konpilatzaileak eta banderak

Goiko adibideetan Waf ns-3 eraikitzeko GCC-ko C++ konpilatzailea erabiltzen du ( g ++). Hala ere, erabiltzen duzuna alda dezakezu Waf C++ konpilatzailea, CXX ingurune-aldagaia definituz. Adibidez, C++ konpilatzailea Clang, clang++ erabiltzeko,

$ CXX="clang++" ./waf configure 
$ ./waf build 

Modu berean konfigura dezakezu Waf erabiliz konpilazio banatua erabiltzeko distcc:

$ CXX="distcc g++" ./waf configure 
$ ./waf build

Distcc eta banatutako konpilazioari buruzko informazio gehiago dokumentazioa atalean proiektuaren orrian aurki daiteke. ns-3 konfiguratzean konpiladore-markak gehitzeko, erabili CXXFLAGS_EXTRA ingurune-aldagaia.

Instalazio-

Waf liburutegiak sistemako leku ezberdinetan instalatzeko erabil daiteke. Lehenespenez, konpilatutako liburutegiak eta exekutagarriak direktorioan daude eraikitzeko, eta Wafek liburutegi eta exekutagarri horien kokapena ezagutzen duenez, ez dago liburutegiak beste inon instalatu beharrik.

Erabiltzaileek eraikitze-direktoriotik kanpo instalatu nahi badute, komandoa exekutatu dezakete ./waf instalatu. Instalaziorako aurrizki lehenetsia da / Usr / localBeraz, ./waf instalatu programak instalatuko ditu / Usr / local / bin, liburutegiak / Usr / local / lib eta goiburuko fitxategiak /usr/local/include. Supererabiltzaileen eskubideak normalean aurrizki lehenetsi batekin ezarri behar dira, beraz, komando tipikoa izango litzateke sudo ./waf instalatu. Abian jartzen denean, Wafek lehenik eta behin aukeratuko du partekatutako liburutegiak eraikitze-direktorioan erabiltzea, eta gero liburutegiak bilatuko ditu tokiko ingurunean konfiguratutako liburutegietarako bidetik. Beraz, sistema batean liburutegiak instalatzean, praktika ona da liburutegi egokiak erabiltzen ari direla egiaztatzea. Erabiltzaileek beste aurrizki batekin instalatzea aukera dezakete konfigurazioan aukera emanez --prefix, adibidez:

./waf configure --prefix=/opt/local

Geroago, eraiki ondoren, erabiltzaileak instalazio komandoa sartzen du ./waf, aurrizkia erabiliko da /opt/local.

Team ./waf clean erabili behar da proiektua birkonfiguratu aurretik instalazioak erabiliko badu Waf beste aurrizki baten azpian.

Horrela, ns-3 erabiltzeko ez dago dei beharrik ./waf install. Erabiltzaile gehienek ez dute komando hau beharko Waf eraikitze-direktoriotik uneko liburutegiak jasoko ditu, baina erabiltzaile batzuek baliagarria izan dezakete haien jarduerak ns-3 direktoriotik kanpoko programekin lan egiten badute.

Waf singlea

ns-3 iturburu-zuhaitzaren goiko mailan, Waf script bakarra dago. Lanean hasten zarenean, denbora asko igaroko duzu direktorioan scratch/ edo sakonagosrc/... eta aldi berean korrika egin behar Waf. Non zauden gogoratu eta korrika egin dezakezu Waf honela:

$ ../../../waf ...

baina hau aspergarria eta akatsak izango dira, beraz, irtenbide hobeak daude. Modu arrunt bat testu-editore bat erabiltzea da emacs edo vim, zeinetan bi terminal saio irekitzen diren, bata ns-3 eraikitzeko erabiltzen da, eta bigarrena iturburu-kodea editatzeko. Bakarrik baduzu tarball, orduan ingurune-aldagai batek lagun dezake:

$ export NS3DIR="$PWD" 
$ function waff { cd $NS3DIR && ./waf $* ; } 

$ cd scratch 
$ waff build

Modulu-direktorioan tentagarria izan liteke waf script hutsal bat gehitzea exec ../../waf. Mesedez, ez egin hori. Hau nahasgarria da hasiberrientzat eta, gaizki egiten denean, detektatzeko zailak diren eraikuntza-akatsak eragiten ditu. Goian agertzen diren irtenbideak erabili beharreko bidea dira.

3.5 Proba ns-3

ns-3 banaketaren unitate-probak exekutatu ditzakezu scripta exekutatuz ./test.py:

$ ./test.py

Proba hauek paraleloki egiten dira Waf. Azkenean, mezu bat ikusi beharko zenuke esaten duena:

92 of 92 tests passed (92 passed, 0 failed, 0 crashed, 0 valgrind errors)

Valgrind-en hutsegite, hutsegite edo akatsak identifikatzeko mezu garrantzitsua da, kodearekin arazoak edo tresnen eta kodearen arteko bateraezintasuna adierazteko.

Azken irteera ere ikusiko duzu Waf eta proba bakoitza exekutatzen ari den probatzaile bat, itxura hau izango duena:

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 ns3-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)

Komando hau normalean erabiltzaileek exekutatzen dute ns-3 banaketa behar bezala eraikita dagoela azkar egiaztatzeko. (Kontuan izan "GAIA: ..." lerroen ordena ezberdina izan daitekeela, hau normala da. Garrantzitsua da txostenaren amaierako laburpen-lerroak froga guztiak gainditu direla; probak ez direla huts egin edo huts egin duela.) Eta WafEta proba.py makinaren prozesadore-nukleoen artean lana paralelizatuko du.

3.6 Gidoia exekutatzen

Normalean kontrolpean exekutatzen ditugu scriptak Waf. Horri esker, eraikuntza-sistema partekatutako liburutegien bideak behar bezala ezarrita daudela eta liburutegiak exekuzioan erabilgarri daudela ziurtatzen du. Programa exekutatzeko, erabili Waf parametroarekin -β€―-run. Exekutatu dezagun nonahiko programaren ns-3 baliokidea kaixo munduahonako hau idatziz:

$ ./waf --run hello-simulator

Waf-ek programa behar bezala eraikita dagoela egiaztatuko du lehenik eta behar izanez gero. Gero Waf honako irteera hau sortzen duen programa bat exekutatuko du.

Hello Simulator

Zorionak! Orain ns-3 erabiltzailea zara!

Zer egin behar dut emaitzarik ikusten ez badut?

Mezuak ikusten badituzu Waferaikuntza behar bezala amaitu dela adieraziz, baina ez duzu irteera ikusten "Kaixo simulatzailea", orduan [Eraiki-with-Waf] atalean zure eraikuntza modura aldatzeko aukera dago optimizada, baina galdu egin du modura itzultzea arazteko. Tutorial honetan erabilitako kontsola-irteera guztiek ns-3 osagai berezi bat erabiltzen dute, erregistroa egiten duena eta kontsolan mezu pertsonalizatuak inprimatzeko erabiltzen dena. Osagai honen irteera automatikoki desgaitzen da optimizatutako kodea konpilatzen denean - "optimizatua" da. "Hello Simulator" irteera ikusten ez baduzu, idatzi honako hau:

$ ./waf configure --build-profile=debug --enable-examples --enable-tests

pertsonalizatzeko Waf ns-3 programen arazketa bertsioak eraikitzeko, adibideak eta probak barne. Ondoren, kodearen uneko arazketa bertsioa birsortu beharko zenuke idatziz

$ ./waf

Orain programa exekutatzen baduzu kaixo-simulatzailea, espero den emaitza ikusi beharko zenuke.

3.6.1 Komando-lerroko argumentuak

Komando-lerroko argumentuak ns-3 programara pasatzeko, erabili eredu hau:

$ ./waf --run <ns3-program> --command-template="%s <args>"

Ordezkatu zure programaren izenari eta argudioei. Argudioa -β€―-command-template egiteko Waf funtsean, benetako komando-lerroa eraikitzeko errezeta bat da Waf programa exekutatzeko erabiltzen da. Waf-ek eraikuntza osatuta dagoela egiaztatzen du, liburutegi partekatuko bideak ezartzen ditu, ondoren emandako komando lerroko txantiloia erabiltzen du eta %s leku-markaren ordez programaren izena ordezkatzen du exekutagarria deitzeko. Sintaxi hau konplikatua iruditzen bazaizu, badago bertsio sinpleago bat ns-3 programa eta bere argumentuak komatxo bakarren artean sartuta:

$ ./waf --run '<ns3-program> --arg1=value1 --arg2=value2 ...'

Bereziki erabilgarria den beste adibide bat proba-suiteak modu selektiboan exekutatzen dira. Demagun mytest izeneko proba-multzo bat dagoela (hain zuzen ere, ez dago). Goian ./test.py script-a erabili dugu hainbat proba paraleloan exekutatzeko, proba-programari behin eta berriz deitzen diona proba-korrikalari. Deitu proba-korrikalari zuzenean proba bat egiteko:

$ ./waf --run test-runner --command-template="%s --suite=mytest --verbose"

Argudioak programara pasatuko dira proba-korrikalari. Mytest existitzen ez denez, errore-mezu bat sortuko da. Test-runner eskuragarri dauden aukerak inprimatzeko, idatzi:

$ ./waf --run test-runner --command-template="%s --help"

3.6.2 Arazketa

ns-3 programak beste utilitate batean exekutatzeko, esate baterako, arazketa bat (adibidez, gdb) edo memoria probatzeko tresna bat (adibidez, valgrind), erabili antzeko forma bat -β€―-command-template = "…". Adibidez, arazketan exekutatzeko gdb zure hello-simulator ns-3 programa argumentuekin:

$ ./waf --run=hello-simulator --command-template="gdb %s --args <args>"

Kontuan izan ns-3 programaren izena argumentuarekin datorrela -β€―-run, eta kudeaketa-erabilgarritasuna (hemen gdb) argumentuko lehen seinalea da -β€―-command-template. Aukera -β€―-args txostenak gdbkomando-lerroaren gainerakoa "beheko" programari dagokiola. (Bertsio batzuk gdb ez dut ulertzen aukera -β€―-args. Kasu honetan, kendu programaren argumentuak -β€―-command-template eta erabili komando multzoa gdb args.) Errezeta hau eta aurrekoa konbina ditzakegu proba araztearen azpian egiteko:

$ ./waf --run test-runner --command-template="gdb %s --args --suite=mytest --verbose"

3.6.3 Laneko direktorioa

Waf-a ns-3 zuhaitzaren goiko kokapenetik abiarazi behar da. Karpeta hau irteerako fitxategiak idatziko diren laneko direktorio bihurtzen da. Baina zer gertatzen da fitxategi hauek ns-3 iturburu-zuhaitzetik kanpo mantendu nahi badituzu? Erabili argumentua -β€―-cwd:

$ ./waf --cwd=...

Baliteke erosoagoa irudituko zaizu irteerako fitxategiak zure lan-direktorioan jasotzea. Kasu honetan, zeharkako ekintza hauek lagun dezakete:

$ function waff {
CWD="$PWD" 
cd $NS3DIR >/dev/null 
./waf --cwd="$CWD" $*
cd - >/dev/null 
}

Komandoaren aurreko bertsioaren dekorazio honek uneko lan-direktorioa gordetzen du, direktoriora doa Wafeta gero agintzen du Waf lan-direktorioa programa hasi aurretik gordetako uneko lan-direktoriora itzultzeko. taldea aipatzen dugu -β€―-cwd Osotasunerako, erabiltzaile gehienek Waf goi-mailako direktoriotik exekutatu eta irteera-fitxategiak sortzen dituzte bertan.

Jarraipena: 4. kapitulua

Iturria: www.habr.com

Gehitu iruzkin berria