Príručka k simulátoru siete ns-3. Kapitola 3

Príručka k simulátoru siete ns-3. Kapitola 3
kapitoly 1,2

3 Začínajúc prácu
3.1 Prehľad
3.2 Predpoklady
3.2.1 Stiahnutie vydania ns-3 vo forme archívu so zdrojovými kódmi
3.3 Sťahovanie ns-3 pomocou Git
3.3.1 Stiahnutie ns-3 pomocou Bake
3.4 Skladanie ns-3
3.4.1 Skladanie pomocou build.py
3.4.2 Skladanie s Bake
3.4.3 Skladanie s Waf
3.5 Testovanie ns-3
3.6 Spustenie skriptu
3.6.1 Argumenty príkazového riadku
3.6.2 Ladenie
3.6.3 Pracovný adresár

Kapitola 3

Začínajúc prácu

Táto kapitola je zameraná na to, aby pripravila čitateľa na prácu s počítačom, na ktorý možno nikdy nebol nainštalovaný ns-3. Obsahuje platformy, predpoklady, spôsoby získania ns-3, spôsoby skladania ns-3 a spôsoby overenia vašej zostavy a spustenia jednoduchých programov.

3.1 Prehľad

Simulátor ns-3 je postavený ako systém spolupracujúcich knižníc programového softvéru. Pri skladaní sa kód užívateľských programov prelinkuje s týmito knižnicami. Na písanie užívateľských programov sa používajú programovacie jazyky C++ alebo Python.

Ns-3 sa distribuuje vo forme zdrojového kódu, čo znamená, že cieľový systém musí mať prostredie na vývoj softvéru, aby najprv skompletizoval knižnice a následne skompletizoval užívateľský program. V zásade môže byť ns-3 distribuovaný aj ako hotové knižnice pre konkrétny systém, a v budúcnosti by mohli byť distribuované týmto spôsobom. Avšak v súčasnosti mnohí užívatelia vykonávajú svoju prácu úpravou samotného ns-3, preto je užitočné mať zdrojový kód na zostavovanie knižníc. Ak by sa niekto rád ujal úlohy vytvorenia hotových knižníc a balíkov pre operačné systémy, nech sa prosím skontaktuje so zoznamom zasielania. ns-developers.

Ďalej preskúmame tri spôsoby, ako stiahnuť a zostaviť ns-3. Prvý spôsob spočíva v stiahnutí a zostavení oficiálneho vydania z hlavnej stránky. Druhý spôsob je vybratie a zostavenie kópií vývojových verzií základnej inštalácie ns-3. Tretí spôsob je použitie dodatočných nástrojov na zostavovanie na stiahnutie väčšieho množstva rozšírení pre ns-3. Prejdeme si každý z nich, pretože nástroje sa trochu líšia.

Skúsení používatelia Linuxu sa môžu opýtať, prečo sa ns‑3 neposkytuje vo forme balíka, ako väčšina ostatných knižníc používajúcich správcu balíkov? Hoci existujú binárne balíky pre rôzne distribúcie Linuxu (napríklad Debian), väčšina používateľov nakoniec upravuje knižnice a musí si znova zostavovať ns‑3, takže dostupnosť zdrojového kódu je výhodná. Z tohto dôvodu sa zameriame na inštaláciu zo zdrojového kódu.

Pre väčšinu aplikácií ns‑3 nie sú práva root potrebné, odporúča sa používať neoprávnený používateľský účet.

3.2 Predpoklady

Celý súbor dostupných knižníc ns‑3 má množstvo závislostí od externých knižníc, ale väčšinou môže byť ns‑3 zostavený a používaný s podporou niekoľkých bežne sa vyskytujúcich (často predvolene nainštalovaných) komponentov: kompilátor C++, Python, editor zdrojového kódu (napríklad vim, emacs alebo Eclipse) a, ak sa používajú vývojové repozitáre, systémy kontroly verzií Git. Väčšina začínajúcich používateľov sa nemusí obávať, ak ich konfigurácia hlási niektoré chýbajúce dodatočné funkcie ns‑3, ale pre tých, ktorí si prajú úplnú inštaláciu, projekt poskytuje wiki, ktorá obsahuje stránky s množstvom užitočných rád a tipov. Jednou z takýchto stránok je stránka „Inštalácia“ s pokynmi na inštaláciu pre rôzne systémy, dostupnými na https://www.nsnam.org/wiki/Installation.

Sekcia „Predpoklady“ tejto wiki-stránky vysvetľuje, ktoré balíky sú potrebné na podporu bežných možností ns‑3, a poskytuje príkazy používané na ich inštaláciu v bežných variantách Linuxu alebo macOS.

Môžete využiť takúto príležitosť, ako je štúdium wiki-stránky ns‑3 alebo hlavného webu: https://www.nsnam.org, pretože tam je veľa informácií. Od poslednej verzie ns‑3 (ns‑3.29) sú potrebné na spustenie ns‑3 nasledujúce nástroje:

Nástroj Balík/verzia

  • Kompilátor C++
    clang++ alebo g++ (g++ verzia 4.9 alebo vyššia)
  • Python
    python2 verzia >= 2.7.10, alebo python3 verzia >= 3.4
  • Git
    akákoľvek najnovšia verzia (na prístup k ns‑3 na GitLab.com)
  • tar
    akákoľvek najnovšia verzia (na rozbalenie vydania ns‑3)
  • bunzip2
    akákoľvek najnovšia verzia (na rozbalenie vydania ns‑3)

Aby ste skontrolovali verziu Pythonu nainštalovanú predvolene, zadajte python -V. Ak chcete skontrolovať verziu g++, zadajte g++ -v. Ak niektoré nástroje chýbajú alebo sú príliš staré, pozrite sa do príručky na inštaláciu na wiki stránke ns‑3.

Od tejto chvíle predpokladáme, že čitateľ pracuje na Linuxe, MacOS alebo emulátore Linuxového prostredia a má aspoň vyššie uvedené nástroje.

3.2.1 Stiahnutie vydania ns-3 vo forme archívu so zdrojovými kódmi

Toto je postup nového používateľa, ktorý chce stiahnuť a experimentovať s najnovšími vydaniami a balíčkovými verziami ns‑3. Vydania ns‑3 sa publikujú vo forme komprimovaných archívov zdrojových kódov, niekedy nazývaných tarball. tarball — to je špeciálny formát programového archívu, v ktorom sú viaceré súbory zlúčené dohromady. Archív je zvyčajne komprimovaný. Proces sťahovania ns‑3 cez tarball je jednoduchý, stačí si vybrať vydanie, stiahnuť a rozbaliť ho.

Predpokladajme, že ako používateľ chcete zostaviť ns‑3 do lokálneho adresára s názvom workspace. Môžete získať pracovnú kópiu vydania zadaním do konzoly Linuxu nasledovné (samozrejme, nahraďte príslušnými číslami verzií)

$ 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 

Všimnite si vyššie uvedený nástroj wget, ktorý je príkazovým nástrojom na sťahovanie objektov z internetu. Ak ste ho nenainštalovali, môžete na to použiť prehliadač.

Nasledovaním týchto krokov prejdete do adresára ns-allinone-3.29, kde by ste mali vidieť niekoľko súborov a adresárov

$ 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

Teraz ste pripravení zostaviť základný distribučný balík ns‑3 a môžete prejsť na časť o zostavovaní ns‑3.

3.3 Sťahovanie ns-3 pomocou Git

Kód ns‑3 je dostupný v Git repozitároch na GitLab.com na adrese https://gitlab.com/nsnam/. Skupina nsnam združuje rôzne repozitáre, ktoré používajú projekty s otvoreným zdrojovým kódom.

Najjednoduchší spôsob, ako začať používať Git repozitáre, je urobiť fork alebo sklonovať prostredie ns‑3-allinone. Toto je súbor skriptov, ktorý riadi sťahovanie a zostavenie najpoužívanejších subsystémov ns‑3. Ak ste nováčik v Git, termíny "fork" a "klonovanie" vám môžu byť neznáme; ak je to tak, odporúčame jednoducho sklonovať (vytvoriť svoju vlastnú kópiu) úložisko na GitLab.com nasledovne:

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

V tomto okamihu je vzhľad vášho adresára ns‑3-allinone sa trochu líši od vyššie opísaného adresára s archívom vydania. Mala by vyzerať približne takto:

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

Všimnite si prítomnosť skriptu download.py, ktorý navyše extrahuje ns-3 a sprievodný zdrojový kód. Tu máte na výber: buď stiahnuť najnovší snapshot vývoja ns-3:

$ python download.py

alebo uprednostniť vydanie ns-3 s použitím parametra -n na určenie čísla vydania:

$ python download.py -n ns-3.29

Po tomto kroku sa do adresára ns‑3-allinone stiahnu ďalšie repozitáre ns-3, bake, pybindgen a netanim.

Poznámka
Na stroji s čistou Ubuntu16.04 som musel zmeniť príkaz na takýto tvar: $ sudo python3 download.py -n ns-3.29 (tu a ďalej poznámky prekladateľa).

3.3.1 Stiahnutie ns-3 pomocou Bake

Dva vyššie uvedené spôsoby (archív zdrojov alebo repozitár ns‑3-allinone cez Git) sú užitočné na získanie najjednoduchšej inštalácie ns-3 s niekoľkými doplnkami (pybindgen na generovanie viazaní Python a netanim na animovanie siete). Tretí repozitár, dodávaný predvolene v ns-3-allinone, sa nazýva bake.

Bake — to je nástroj na koordinovanú kompiláciu softvéru z viacerých repozitárov, navrhnutý pre projekt ns-3. Bake môže sa používať na získavanie vývojových verzií ns-3, ako aj na sťahovanie a kompiláciu rozšírení základnej verzie distribúcie ns-3, ako je prostredie Direct Code Execution, CradleNetwork Simulation Cradle, možnosť vytvárať nové viazania Python a rôzne "aplikácie" ns-3.

Poznámka
CradleNetwork Simulation Cradle — rámec, ktorý umožňuje vo vnútri sieťového simulátora používať skutočné sieťové stacky TCP / IP.

Ak predpokladáte, že vaša inštalácia ns-3 by mala mať rozšírené alebo ďalšie funkcie, môžete sledovať tento spôsob inštalácie.

V posledných vydaniach ns-3 Bake bol pridaný do tar-vydania. Do vydania bol zahrnutý konfiguračný súbor, ktorý umožňuje sťahovať aktuálne verzie softvéru k okamihu vytvorenia vydania. T.j. napríklad verzia Bake, ktorá je distribučná s vydaním ns-3.29, môže byť použitá na získavanie komponentov pre toto vydanie ns-3 alebo staršie, ale nemôže byť použitá na extrakciu komponentov pre novšie vydania (ak súbor popisu balíka bakeconf.xml nebol aktualizovaný).

Môžete tiež získať najnovšiu kópiu bake, zadaním nasledujúceho príkazu do vašej konzoly Linux (za predpokladu, že máte nainštalovaný Git):

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

Pri vykonávaní príkazu git by ste mali vidieť niečo takéto:

Klonovanie do 'bake'...
remote: Vypisovanie objektov: 2086, hotovo. 
remote: Počítanie objektov: 100% (2086/2086), hotovo. 
remote: Komprimovanie objektov: 100% (649/649), hotovo. 
remote: Celkom 2086 (delta 1404), opätovne použité 2078 (delta 1399) 
Prijímanie objektov: 100% (2086/2086), 2.68 MiB | 3.82 MiB/s, hotovo. 
Riešenie delta: 100% (1404/1404), hotovo.

Po dokončení príkazu klon by ste mali mať adresár s názvom bake, ktorého obsah by mal vyzerať približne takto:

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

Všimnite si, že ste stiahli niekoľko skriptov Python, modul Python s názvom bake a konfiguračný súbor XML. Ďalším krokom bude použitie týchto skriptov na stiahnutie a zostavenie distribúcie ns-3 podľa vášho výberu. K dispozícii je niekoľko cieľov nastavenia:

  1. ns-3.29: modul zodpovedajúci vydaniu; stiahne komponenty podobné vydaniu v tarballe;

  2. ns-3-dev: podobný modul, ale s použitím kódu z vývojového stromu;

  3. ns-allinone-3.29: modul, ktorý zahŕňa ďalšie funkcie, ako je Click smerovanie a Network Simulation Cradle, Openflow pre ns-3.

  4. ns‑3-allinone: podobne ako verzia modulu allinone, ale pre vývojový kód.

Poznámka
Click — modulárna softvérová architektúra na vytváranie smerovačov.

Openflow je protokol na riadenie spracovania údajov prenášaných cez sieť smerovačmi a prepínačmi, ktorý implementuje technológiu softvérovo konfigurable siete.

Aktuálny vývojový snapshot (nevydaný) ns-3 je možné nájsť na adrese:https://gitlab.com/nsnam/ns-3-dev.git.

Vývojári sa snažia udržiavať tieto repozitáre v súlade, ale nachádzajú sa v oblasti vývoja a obsahujú nevydaný kód, preto ak neplánujete používať nové funkcie, vyberte oficiálnu verziu.

Môžete nájsť poslednú verziu kódu prehliadaním zoznamu repozitárov alebo prechodom na webovú stránku „ns-3 Releases“:https://www.nsnam.org/releases/ a kliknutím na odkaz poslednej verzie. V tomto príklade budeme pokračovať s ns-3.29.

Teraz, aby sme získali potrebné časti ns-3, použijeme nástroj Bake. Povedzme niekoľko úvodných slov o práci Bake.

Bake funguje sťahovaním zdrojov balíkov do adresára source a inštalovaním knižníc do adresára zostavovania. Bake môže byť spustený odkazom na spustiteľný súbor, ale ak chcete spúšťať Bake nie z adresára, do ktorého bol nahraný, je vhodné pridať cestu k bake vašej ceste (premenná prostredia PATH), napríklad nasledujúcim spôsobom (príklad pre shell Linux bash). Prejdite do adresára „bake“ a potom nastavte nasledujúce premenné prostredia:

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

To umiestni program bake.py do cesty shellu a umožní ostatným programom nájsť spustiteľné súbory a knižnice, ktoré vytvoril bake. V niektorých prípadoch použitia bake, popísaná vyššie inštalácia PATH a PYTHONPATH nie je potrebná, ale pre úplnú kompiláciu ns-3-allinone (s ďalšími balíčkami) je zvyčajne potrebná.

Prejdite do pracovného adresára a do konzoly zadajte nasledujúce:

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

Potom vás požiadame Bake skontrolovať, či máme dostatočne nástroje na sťahovanie rôznych komponentov. Napíšte:

$ ./bake.py check

Mali by ste vidieť niečo ako nasledujúce:

> 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 ...

Predovšetkým sťahovacie nástroje, ako Mercurial, CVS, Git a Bazaar, sú kľúčové v tomto kroku, pretože nám umožňujú získať kód. V tomto kroku nainštalujte chýbajúce nástroje bežným spôsobom pre vašu systém (ak to dokážete) alebo sa obráťte na svojho systémového administrátora.

Ďalej sa pokúste stiahnuť softvér:

$ ./bake.py download

výsledkom by malo byť niečo ako:

>> Hľadanie systémovej závislosti setuptools - OK 
>> Hľadanie systémovej závislosti libgoocanvas2 - OK 
>> Hľadanie systémovej závislosti gi-cairo - OK 
>> Hľadanie systémovej závislosti pygobject - OK 
>> Hľadanie systémovej závislosti pygraphviz - OK 
>> Hľadanie systémovej závislosti python-dev - OK 
>> Hľadanie systémovej závislosti qt - OK 
>> Hľadanie systémovej závislosti g++ - OK 
>> Sťahovanie pybindgen-0.19.0.post4+ng823d8b2 (cieľový adresár:pybindgen) - OK 
>> Sťahovanie netanim-3.108 - OK 
>> Sťahovanie ns-3.29 - OK

To bude znamenať, že boli stiahnuté tri zdrojové kódy. Teraz prejdite do adresára source a zadajte ls; mali by ste vidieť:

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

Teraz ste pripravení zostaviť distribúciu ns-3.

3.4 Skladanie ns-3

Rovnako ako pri sťahovaní ns-3, existuje niekoľko spôsobov, ako zostaviť ns-3. Hlavne chceme zdôrazniť, že ns-3 je zostavený pomocou nástroja na zostavenie nazvaného Waf, popísaného nižšie. Väčšina používateľov bude pracovať s Waf, ale existuje niekoľko praktických skriptov, ktoré vám pomôžu začať alebo usporiadať zložitejšie zostavy. Preto, prosím, predtým, než prečítate o Waf, pozrite sa na build.py a zostavu s bake.

3.4.1 Skladanie pomocou build.py

Pozor! Tento krok zostavy je dostupný iba z verzie pôvodného archívu, získanej tak, ako je popísané vyššie; a nie stiahnutej cez git alebo bake.

Pri práci s vydaným archívom tarball, v ns‑3‑allinone existuje praktický skript, ktorý môže zjednodušiť zostavu komponentov. Nazýva sa build.py. Tento program nastaví projekt pre vás najprínosnejším spôsobom. Napriek tomu si uvedomte, že zložitejšie nastavenia a práca s ns‑3 zvyčajne zahŕňa použitie vlastného systému zostavy ns‑3, Waf, ktorý bude predstavený neskôr v tejto príručke.

Ak ste si stiahli pomocou tarball, potom vo vašej priečinke ~/workspace by sa mala objaviť priečka s názvom niečo ako ns-allinone-3.29. Zadajte nasledujúce:

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

Pri volaní build.py sme použili argumenty príkazového riadka na to, aby sme zostavili príklady a testy použité v tejto príručke, ktoré sa v ns‑3 podľa predvolených nastavení nezostavujú. Podľa predvolených nastavení program tiež zostavuje všetky dostupné moduly. Potom, ak budete chcieť, môžete zostaviť ns‑3 bez príkladov a testov alebo vylúčiť moduly, ktoré nie sú potrebné pre vašu prácu.

Uvidíte množstvo výstupných hlásení kompilátora, zobrazených skriptom pri zostavovaní rôznych častí, ktoré ste načítali. Najprv sa skript pokúsi zostaviť animátor netanim, potom generátor viazaní pybindgen a nakoniec ns‑3. Na konci procesu by ste mali vidieť nasledovné:

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

V posledných troch riadkoch výpisu vidíme hlásenie o moduloch, ktoré neboli zostavené:

Moduly neboli zostavené (pozri tutorial ns-3 na vysvetlenie):
brite                     klik

To jednoducho znamená, že niektoré moduly ns-3, ktoré závisia od externých knižníc, nemuseli byť zostavené, alebo že pre túto konfiguráciu ich zostavenie nie je potrebné. Neznamená to, že simulátor sa nezostavil alebo že zostavené moduly budú nefunkčné.

3.4.2 Skladanie s Bake

Ak ste pre získanie zdrojového kódu z repozitárov projektu použili bake, môžete ho naďalej používať aj na zostavenie ns-3. Napíšte:

$ .\/bake.py build

a mali by ste vidieť niečo ako:

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

Tip: môžete tiež vykonať oba kroky naraz, stiahnutie a zostavenie, vyvolaním "bake.py deploy".

Pri zostavovaní všetkých komponentov môžu nastať zlyhania, ale zostavovanie bude pokračovať, ak komponent nie je povinný. Napríklad nedávny problém s prenositeľnosťou spočíval v tom, že castxml môže byť zostavený nástrojom bake nie na všetkých platformách. V tomto prípade sa objaví správa vo formáte:

>> Zostavovanie castxml - Problém 
> Problém: Voliteľná závislosť, modul "castxml" zlyhal
To môže znížiť funkčnosť konečného zostavenia.
Avšak, bake bude pokračovať, pretože "castxml" nie je základná závislosť.
Pre viac informácií zavolajte bake s -v alebo -vvv, pre úplný podrobný režim.

Avšak castxml je potrebný len v prípade, že chcete vytvoriť aktualizované väzby Python. Pre väčšinu používateľov to nie je potrebné (aspoň pokiaľ nezačnú meniť ns-3), takže takéto varovania môžete zatiaľ bezpečne ignorovať.

Ak dôjde k zlyhaniu, nasledujúci príkaz vám poskytne tip o chýbajúcich závislostiach:

$ .\/bake.py show

Budú vymenované rôzne závislosti balíkov, ktoré sa pokúšate zostaviť.

3.4.3 Skladanie s Waf

Doteraz sme na začatie zostavovania ns-3 použili buď skript build.py, alebo nástroj bake. Tieto nástroje sú užitočné na zostavovanie ns-3 a podporu knižníc. V skutočnosti spúšťajú nástroj na zostavovanie Waf z adresára ns-3. Waf je nainštalovaný spolu so zdrojovým kódom ns-3. Väčšina používateľov rýchlo prechádza na priame používanie Waf. Takže, aby sme pokračovali, prejdite do adresára ns-3, ktorý ste pôvodne vytvorili.

V súčasnosti to nie je striktne nutné, ale bolo by užitočné urobiť malé odbočenie a pozrieť sa, ako vykonávať zmeny v konfigurácii projektu. Najpravdepodobnejšou a najprínosnejšou zmenou konfigurácie, ktorú môžete vykonať, bude vytvorenie optimalizovanej verzie kódu. Predvolene ste nastavili svoj projekt na zostavenie ladenia. Pozrime sa na projekt pre vytvorenie optimalizovanej zostavy. Aby ste Waf vysvetlili, že má vykonať optimalizované zostavy, ktoré obsahujú príklady a testy, budete musieť vykonať nasledujúce príkazy:

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

Toto spustí Waf mimo miestneho adresára (pre vaše pohodlie). Prvý príkaz vykonáva čistenie od predchádzajúcej zostavy, zvyčajne to nie je striktne potrebné, ale je to dobrá prax (pozrite tiež profily zostaví nižšie); odstráni to predtým vytvorené knižnice a objektové súbory nachádzajúce sa v adresári build/. Keď je projekt prekonfigurovaný a systém zostavovania kontroluje rôzne závislosti, mali by ste vidieť výstup podobný nasledujúcemu:

Nastavenie top na      : /home/ns3user/workspace/bake/source/ns-3-dev
Nastavenie out na      : /home/ns3user/workspace/bake/source/ns-3-dev/build
Kontrola 'gcc' (C kompilátor)        : /usr/bin/gcc 
Kontrola verzie cc                : 7.3.0 
Kontrola 'g++' (C++ kompilátor)      : /usr/bin/g++ 
Kontrola kompilátorovej vlajky -march=native podpora : ok 
Kontrola kompilátorovej vlajky -Wl,--soname=foo podpora : ok 
Kontrola kompilátorovej vlajky -std=c++11 podpora       : ok 
Kontrola boost knižníc   : hlavičky nenájdené, prosím, poskytnite argument --boost-includes (pozrite si pomoc) 
Kontrola boost knižníc   : hlavičky nenájdené, prosím, poskytnite argument --boost-includes (pozrite si pomoc) 
Kontrola programu 'python'            : /usr/bin/python 
Kontrola verzie python >= 2.3       : 2.7.15 python-config                                                                     : /usr/bin/python-config
Pýtanie python-config na pyembed '--cflags --libs --ldflags' vlajky : áno
Testovanie pyembed konfigurácie                                      : áno
Pýtanie python-config na pyext '--cflags --libs --ldflags' vlajky   : áno
Testovanie pyext konfigurácie                                        : áno

Kontrola kompilátorovej vlajky -fvisibility=hidden podpora          : ok 
Kontrola kompilátorovej vlajky -Wno-array-bounds podpora            : ok 
Kontrola umiestnenia pybindgen          : ../pybindgen ,!(odhadované) 
Kontrola python modulu 'pybindgen'   : 0.19.0. ,!post4+g823d8b2 
Kontrola verzie pybindgen           : 0.19.0. ,!post4+g823d8b2 
Kontrola vzorového kódu                : áno 
Kontrola ekvivalencie typov uint64_t a unsigned long : nie 
Kontrola vzorového kódu                                 : nie 
Kontrola ekvivalencie typov uint64_t a unsigned long long     : áno 
Kontrola apidefs, ktoré môžu byť použité pre Python viazanie                       : gcc-LP64 
Kontrola interného GCC cxxabi         : kompletné 
Kontrola python modulu 'pygccxml'    : nenájdené 
Kontrola umiestnenia click              : nenájdené 
Kontrola programu 'pkg-config'        : /usr/bin/pkg- ,!config 
Kontrola 'gtk+-3.0'                  : nenájdené 
Kontrola 'libxml-2.0'                : áno 
kontrola pre uint128_t                   : nenájdené 
kontrola pre __uint128_t                 : áno 
Kontrola vysokej presnosti implementácie   : 128-bitové celé číslo ,!(predvolené) 
Kontrola záhlavia stdint.h             : áno 
Kontrola záhlavia inttypes.h           : áno 
Kontrola záhlavia sys/inttypes.h       : nenájdené 
Kontrola záhlavia sys/types.h          : áno 
Kontrola záhlavia sys/stat.h           : áno 
Kontrola záhlavia dirent.h             : áno 
Kontrola záhlavia stdlib.h             : áno 
Kontrola záhlavia signal.h             : áno 
Kontrola záhlavia pthread.h            : áno 
Kontrola záhlavia stdint.h             : áno 
Kontrola záhlavia inttypes.h           : áno 
Kontrola záhlavia sys/inttypes.h       : nenájdené
Kontrola knižnice rt                  : áno 
Kontrola záhlavia sys/ioctl.h          : áno 
Kontrola záhlavia net/if.h             : áno 
Kontrola záhlavia net/ethernet.h       : áno 
Kontrola záhlavia linux/if_tun.h       : áno 
Kontrola záhlavia netpacket/packet.h   : áno 
Kontrola umiestnenia NSC                : nenájdené 
Kontrola 'sqlite3'                   : nenájdené 
Kontrola záhlavia linux/if_tun.h       : áno 
Kontrola python modulu 'gi'          : 3.26.1 
Kontrola python modulu 'gi.repository.GObject'      : ok 
Kontrola python modulu 'cairo'                      : ok 
Kontrola python modulu 'pygraphviz'                 : 1.4rc1 
Kontrola python modulu 'gi.repository.Gtk'          : ok 
Kontrola python modulu 'gi.repository.Gdk'          : ok 
Kontrola python modulu 'gi.repository.Pango'        : ok 
Kontrola python modulu 'gi.repository.GooCanvas'    : ok 
Kontrola programu 'sudo'                             : /usr/bin/sudo 
Kontrola programu 'valgrind'                         : nenájdené 
Kontrola 'gsl' : nenájdené python-config            : nenájdené 
Kontrola kompilátorovej vlajky -fstrict-aliasing podpora : ok 
Kontrola kompilátorovej vlajky -fstrict-aliasing podpora : ok 
Kontrola kompilátorovej vlajky -Wstrict-aliasing podpora : ok 
Kontrola kompilátorovej vlajky -Wstrict-aliasing podpora : ok 
Kontrola programu 'doxygen'                          : /usr/bin/doxygen
---- Zhrnutie voliteľných vlastností ns-3:
Profil zostavenia : optimalizovaný
Zostavenie adresára : 
Integrácia BRITE : nie je povolená (BRITE nie je povolené (pozrite si možnosť --with- ,!brite)) 
Zber dát DES Metrics udalostí : nie je povolený (predvolene zakázané) 
Emulácia FdNetDevice        : povolené 
Príklady                     : povolené 
NetDevice s deskriptorom súboru    : povolené 
GNU Scientific Library (GSL) : nie je povolená (GSL nenájdené) 
Gcrypt knižnica               : nie je povolená
(libgcrypt nenájdené: môžete použiť ,!libgcrypt-config na nájdenie jeho umiestnenia.) GtkConfigStore               : nie je povolené (knižnica 'gtk+-3.0 >= 3.0' nebola nájdená)
MPI podpora                  : nie je povolená (možnosť --enable-mpi nebola vybraná)
ns-3 Click Integrácia       : nie je povolená (nsclick nie je povolené (pozrite si možnosť --with- ,!nsclick))
ns-3 OpenFlow Integrácia   : nie je povolená (Potrebné boost knižnice nenájdené) 
Network Simulation Cradle    : nie je povolené (NSC nenájdené (pozrite si možnosť --with-nsc))
PlanetLab FdNetDevice         : nie je povolené (planetLab operačný systém nebol detekovaný ,!(pozrite si možnosť --force-planetlab)) PyViz vizualizátor : povolené 
Podpora skenovania Python API   : nie je povolená (Chýbajúci modulu Python 'pygccxml')
Python viazania : povolené 
Reálny čas simulátor           : povolené 
SQlite schémy dátový výstup      : nie je povolené (knižnica 'sqlite3' nenájdené)
Tap Bridge                    : povolené 
Tap FdNetDevice               : povolené
Testy                         : povolené 
Primíty vlákien          : povolené 
Použite sudo na nastavenie suid bitu   : nie je povolené (možnosť --enable-sudo nebola vybraná)
XmlIo                         : povolené
'configure' úspešne dokončené (6.387s)

Všimnite si poslednú časť uvedeného zoznamu vyššie. Niektoré možnosti ns-3 nie sú predvolene zahrnuté alebo si vyžadujú podporu zo strany systému pre správne fungovanie. Napríklad na zahrnutie XmlTo musí byť v systéme prítomná knižnica libxml-2.0. Ak táto knižnica nebola nájdená a príslušná funkcia ns-3 nebola zahrnutá, zobrazí sa správa. Takisto si uvedomte, že je možné použiť príkaz sudo na nastavenie bitu suid „nastavenie ID skupiny počas vykonávania“ pre určité programy. Predvolene nie je zahrnuté, a preto sa táto funkcia zobrazuje ako „nie je zahrnutá“ („not enabled“). Nakoniec, aby ste získali zoznam zapnutých možností, použite Waf s parametrom --check-config.

Teraz sa vrátime a prepneme späť na laditeľnú verziu, ktorá obsahuje príklady a testy.

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

Systém zostavenia je teraz nastavený a môžete zostaviť laditeľné verzie programov ns-3 jednoducho zadaním:

$ ./waf

Nech vás vyššie popísané kroky donútili zostaviť časť systému ns-3 dvakrát, ale teraz viete, ako zmeniť konfiguráciu a zostaviť optimalizovaný kód.

Na overenie, ktorý profil je aktívny pre danú konfiguráciu projektu, existuje príkaz:

$ .\/waf --check-profile 
Waf: Vstup do adresára `\/path\/to\/ns-3-allinone\/ns-3.29\/build' 
Profil zostavenia: debug

Preskúmaný scenár vyššie build.py taktiež podporuje argumenty --enable-examples a --enable-tests, ale iné možnosti Waf nepodporuje priamo. Napríklad, toto nebude fungovať:

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

reakcia bude taká:

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

Napriek tomu môže byť špeciálny operátor - - použitý na odovzdanie ďalších parametrov cez waf, preto namiesto vyššie uvedeného bude fungovať nasledujúci príkaz:

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

keďže generuje základný príkaz .\/waf configure —disable-python. Tu je niekoľko ďalších úvodných tipov o Waf.

Správa chýb pri zostavovaní

Verzie ns-3 boli testované na najnovších kompilátoroch C++, ktoré boli dostupné v čase vydania na bežných distribúciách Linuxu a MacOS. Avšak časom vychádzajú nové distribúcie s novými kompilátormi, a tieto novšie kompilátory sú zvyčajne prísnejšie voči varovaniam. ns-3 nastavuje svoje zostavenie na spracovanie všetkých varovaní ako chýb, takže niekedy, ak používate staršiu verziu v novšom systéme, môže byť varovanie kompilátora prekážkou pre zostavenie.

Napríklad, predtým bola vydaná verzia ns-3.28 pre Fedora 28, ktorá obsahovala novú hlavnú verziu gcc (gcc-8). Pri zostavovaní verzie ns-3.28 alebo starších verzií pod Fedora 28, ak je nainštalovaný Gtk2+, sa objaví takáto chyba:

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

V vydaniach, počnúc ns-3.28.1, Waf je dostupná možnosť na riešenie týchto problémov. Vypína inštaláciu príznaku „-Werror“ v g++ a clang++. Táto možnosť „--disable-werror“ by sa mala aplikovať počas konfigurácie:

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

Konfigurovať alebo zostaviť

Niektoré príkazy Waf majú zmysel iba v fáze konfigurácie, a niektoré pôsobia iba v fáze zostavenia. Napríklad, ak chcete používať funkcie emulácie ns-3, môžete zahrnúť nastavenie bitu suid použitím sudo, ako je uvedené vyššie. To zruší príkazy fázy konfigurácie, a týmto spôsobom môžete zmeniť konfiguráciu pomocou nasledujúceho príkazu, ktorý tiež zahŕňa príklady a testy.

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

Ak to urobíte, Waf spustí sudo, aby zmenilo programy vytvárania zásuviek emulovaného kódu na spúšťanie s právami root. V Waf existuje množstvo ďalších možností pre fázy konfigurácie a zostavenia. Ak chcete preskúmať možnosti, zadajte:

$ ./waf --help

V nasledujúcej kapitole budeme používať niektoré možnosti týkajúce sa testovania.

Profily zostavy

Už sme videli, ako je možné nastaviť Waf pre zostavy debug a optimized:

$ ./waf --build-profile=debug

Existuje aj medzičlánkový profil zostavy, release. Možnosť -d je synonymom --build-profile. Profil zostavy riadi používanie protokolovania, afirmácií (assertions) a optimalizačných kľúčov kompilátora:

Príručka k simulátoru siete ns-3. Kapitola 3

Ako môžete vidieť, logovanie a asertácie sú dostupné iba v ladených zostaveniach. Odporúčaná prax spočíva v tom, že svoj skript vypracujete v režime ladenia a potom vykonáte opakované spustenia (pre štatistiky alebo zmenu parametrov) v optimalizovanom profile zostavenia.

Ak máte kód, ktorý sa má vykonávať iba v určitých profiloch zostavenia, použite makro Code Wrapper Macro:

NS_BUILD_DEBUG (std::cout << "Časť výstupného riadku..." << std::flush; timer.Start, !()); DoLongInvolvedComputation();
NS_BUILD_DEBUG (timer.Stop(); std::cout << "Hotovo: " << timer << std::endl;)

Predvolene, Waf umiestňuje artefakty zostavenia do adresára zostavenia. Môžete zadať iný výstupný adresár pomocou možnosti - -out, napríklad:

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

Kombinovaním tohto s profilmi zostavenia môžete ľahko prechádzať medzi rôznymi parametrami kompilácie:

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

Čo vám umožňuje pracovať s viacerými zostaveniami, aniž by ste zakaždým prepisovali posledné zostavenie. Keď prejdete na iný profil, Waf bude kompilovať iba ten, bez úplnej prekódovania všetkého.

Keď takýmto spôsobom prepínate profily zostavenia, musíte dbát na to, aby ste zakaždým poskytovali rovnaké parametre konfigurácie. Pomôže vám vyhnúť sa chybám definovanie niekoľkých premenných prostredia:

$ 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

Kompilátory a flagy

V uvedených príkladoch Waf pre zostavenie ns‑3 používa C++ kompilátor z GCC ( g++). Napriek tomu, je možné zmeniť používaný Waf C++ kompilátor definovaním premennej prostredia CXX. Napríklad, aby ste použili C++ kompilátor Clang, clang++,

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

Podobne je možné nastaviť Waf na použitie distribuovanej kompilácie pomocou distcc:

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

Podrobnejšie informácie o distcc a distribuovanej kompilácii nájdete na stránke projektu v sekcii 'Dokumentácia'. Aby ste pri konfigurácii ns‑3 pridali flagy kompilátora, použite premennú prostredia CXXFLAGS_EXTRA.

Inštalácia

Waf môže sa použiť na inštaláciu knižníc na rôzne miesta v systéme. Predvolene sú zhromaždené knižnice a spustiteľné súbory umiestnené v adresári build, a keďže Waf pozná umiestnenie týchto knižníc a spustiteľných súborov, nie je potrebné inštalovať knižnice nikam inam.

Ak používateľom vyhovuje inštalácia mimo adresár pre stavbu, môžu vykonať príkaz .\/waf install. Predvolene je prefix pre inštaláciu — /usr/local, takže .\/waf install bude inštalovať programy do /usr/local/bin, knižnice do /usr/local/lib a hlavičkové súbory do /usr/local/include. Práva superužívateľa sú zvyčajne potrebné na inštaláciu s predvoleným prefixom, takže typický príkaz bude sudo .\/waf install. Pri spustení Waf najprv uprednostní použitie zdieľaných knižníc v adresári pre stavbu a potom bude hľadať knižnice podľa cesty k knižniciam nastaveným v lokálnom prostredí. Takže pri inštalácii knižníc do systému je dobrá prax skontrolovať, že sa používajú požadované knižnice. Používatelia si môžu zvoliť inštaláciu s iným prefixom, pričom počas konfigurácie odovzdajú voľbu --prefix, napríklad:

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

Ak neskôr, po zbuildovaní, používateľ zadá príkaz inštalácie .\/waf, bude sa používať prefix /opt/local.

Tím .\/waf clean by mala byť použitá pred novou konfiguráciou projektu, ak sa na inštaláciu použije Waf pod iným prefixom.

Tým pádom nie je potrebné volať ns‑3, .\/waf install. Väčšine používateľov tento príkaz nebude potrebný, pretože Waf získa aktuálne knižnice z adresára pre stavbu, ale niektorí používatelia to môžu považovať za užitočné, keď ich činnosť zahŕňa prácu s programami mimo adresáru ns‑3.

Waf je jednotný

Na najvyššej úrovni stromu zdrojového kódu ns‑3 existuje iba jeden Waf skript. Keď začnete pracovať, stráviť veľa času v adresári scratch\/ alebo hlbšie, vsrc\/... a pritom sa potrebovať spustiť Waf. Môžete si jednoducho pamätať, kde ste, a spustiť Waf nasledovne:

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

ale to bude únavné a náchylné na chyby, preto existujú lepšie riešenia. Jedným z bežných spôsobov je použiť textový editor, ako je emacs alebo vim, v ktorom sa otvoria dve terminálové relácie, jedna sa používa na stavbu ns‑3 a druhá na úpravu zdrojového kódu. Ak máte len tarball, to môže pomôcť premenná prostredia:

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

$ cd scratch 
$ waff build

V adresári modulu môže byť lákavé pridať triviálny skript waf ako vzor exec ..\/..\/waf. Prosím, nerobte to. Zmätie to nováčikov a pri zlom vykonaní vedie k ťažko odhaliteľným chybám pri zostavení. Riešenia uvedené vyššie sú cestou, ktorou by sa malo ísť.

3.5 Testovanie ns-3

Môžete vykonať modulárne testy distribúcie ns-3 spustením skriptu .\/test.py:

$ .\/test.py

Tieto testy sa vykonávajú paralelne s Waf. Nakoniec by ste mali vidieť správu, že

92 z 92 testov prešlo (92 prešlo, 0 zlyhalo, 0 havarovalo, 0 chyby valgrind)

Toto je dôležitá správa na identifikáciu zlyhaní, pádov alebo chýb valgrind, ktorá poukazuje na problémy s kódom alebo nekompatibilitu medzi nástrojmi a kódom.

Tiež uvidíte konečný výstup od Waf a testera, ktorý vykonáva každý test, ktorý bude vyzerať približne takto:

Waf: Vstup do adresára `\/path\/to\/workspace\/ns-3-allinone\/ns-3-dev\/build' 
Waf: Opúšťanie adresára `\/path\/to\/workspace\/ns-3-allinone\/ns-3-dev\/build' 
'build' bolo dokončené úspešne (1.799s) 

Zostavené moduly:
aodv           aplikácie          most
click          config-store      jadro
csma           csma-layout       dsdv
emu            energia           monitorovanie-prúdu
internet       lte               mesh
mobilita      mpi               netanim
sieť         nix-vector-routing ns3tcp
ns3wifi        olsr              openflow
point-to-point point-to-point-layout propagácia
spektrum       štatistiky       tap-bridge
šablóna       test              nástroje
topológia-čítať  uan             virtuálne-netové-zariadenie
vizualizér     wifi              wimax

PASS: TestSuite ns3-wifi-interference
PASS: TestSuite histogram 

...

PASS: TestSuite objekt
PASS: TestSuite generátory-náhodných-čísel
92 z 92 testov prešlo (92 prešlo, 0 zlyhalo, 0 havarovalo, 0 chyby valgrind)

Tento príkaz zvyčajne spúšťajú používatelia na rýchlu kontrolu správnosti zostavenia distribúcie ns-3. (Všimnite si, že poradie riadkov „PASS: …“ sa môže líšiť, to je normálne. Dôležité je, že v konečnom riadku na konci správy všetky kontroly prešli; žiaden test neskončil neúspešne alebo nezlyhal.) A Waf, a test.py budú paralelizovať prácu podľa dostupných jadier procesora stroja.

3.6 Spustenie skriptu

Obvykle spúšťame skripty pod kontrolou Waf. To umožňuje systému zostavovania zabezpečiť, aby cesty k zdieľanej knižnici boli nastavené správne a aby boli knižnice dostupné počas vykonávania. Ak chcete spustiť program, jednoducho použite Waf s parametrom - run. Spustíme pre ns-3 ekvivalent všadeprítomného programu hello world, zadaním nasledujúceho:

$ .\/waf --run hello-simulator

Waf najprv skontroluje, či je program správne zostavený, a v prípade potreby vykoná zostavenie. Potom Waf vykoná program, ktorý vykoná nasledujúci výstup.

Hello Simulator

Gratulujeme! Teraz ste používateľom ns‑3!

Čo mám robiť, ak nevidím výsledok?

Ak vidíte správy Waf, ktoré naznačujú, že zostavenie bolo úspešne dokončené, ale nevidíte výstup „Hello Simulator“, existuje pravdepodobnosť, že ste v sekcii [Zostavenie-s-Waf] zmenili svoj režim zostavenia na optimized, ale vynechali ste spätné prepínanie do režimu debug. Celý výstup konzoly, ktorý sa používa v tejto príručke, využíva špeciálnu komponentu ns‑3, ktorá vykonáva zápis logu a používa sa na tlač užívateľských správ do konzoly. Výstup z tejto komponenty je automaticky vypnutý pri kompilácii optimalizovaného kódu — je „optimalizovaný“. Ak nevidíte výstup „Hello Simulator“, zadajte nasledujúce:

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

aby ste nastavili Waf na zostavenie odladěných verzií programov ns‑3, ktoré zahŕňajú príklady a testy. Potom by ste mali znovu zostaviť aktuálnu odladěnú verziu kódu zadaním

$ ./waf

Teraz, ak spustíte program hello-simulator, mali by ste vidieť očakávaný výsledok.

3.6.1 Argumenty príkazového riadku

Aby ste odovzdali argumenty príkazového riadku do programu ns‑3, použite nasledujúcu šablónu:

$ .\/waf --run  --command-template="%s "

Nahraďte názvom vášho programu a argumentmi. Argument - -command-template pre Waf — je v podstate recept na zostavenie skutočného príkazového riadku Waf používaného na vykonanie programu. Waf kontroluje, že zostavenie je dokončené, nastavuje cesty k spoločnej knižnici, potom s použitím poskytnutej šablóny príkazového riadku a dosadením názvu programu namiesto zástupného symbolu %s volá spustiteľný súbor. Ak sa vám tento syntax zdá zložitý, existuje jednoduchšia možnosť, ktorá zahŕňa program ns‑3 a jeho argumenty uzavreté do jednoduchých úvodzoviek:

$ .\/waf --run ' --arg1=value1 --arg2=value2 ...'

Iným, obzvlášť užitočným, príkladom je selektívne spustenie súborov testov. Predpokladajme, že existuje testovací súbor (suite) mytest (v skutočnosti neexistuje). Vyššie sme použili skript .\/test.py na paralelné spustenie celého radu testov, ktorý viackrát volá program testovania test-runner. Zavolanie test-runner priamo na vykonanie jedného testu:

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

Argumenty budú poslané programu test-runner. Keďže mytest neexistuje, bude sa generovať chybové hlásenie. Ak chcete vytlačiť dostupné parametre test-runner, zadajte:

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

3.6.2 Ladenie

Na spustenie programov ns-3 pod riadiacou utilitou, ako je ladenie (napríklad gdb) alebo nástroj na overenie pamäte (napríklad valgrind), použite podobnú formu - -command-template = "…". Napríklad, ak chcete spustiť vo ladení gdb vašu aplikáciu hello-simulator ns-3 s argumentmi:

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

Všimnite si, že názov programu ns-3 ide s argumentom - run, a riadiaca utilita (tu gdb) je prvým tokenom v argumente - -command-template. Možnosť - -args oznamuje gdb, že zvyšok príkazového riadku patrí "nižšiemu" programu. (Niektoré verzie gdb nezhodujú voľbu - -args. V takom prípade odstráňte argumenty programu z - -command-template a použite súbor príkazov gdb args.) Môžeme kombinovať tento recept a predchádzajúci na spustenie testu pod ladením:

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

3.6.3 Pracovný adresár

Waf by mal byť spustený zo svojho umiestnenia na vrchole stromu ns-3. Táto zložka sa stáva pracovným adresárom, kam budú zapísané výstupné súbory. Ale čo robiť, ak chcete uchovať tieto súbory mimo zdrojového stromu ns-3? Použite argument - -cwd:

$ . /waf --cwd=...

Možno bude pre vás pohodlnejšie získavať výstupné súbory vo vašom pracovnom adresári. V takom prípade môže pomôcť takéto nepriame opatrenie:

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

Takéto dekorovanie predchádzajúcej verzie príkazu uchováva aktuálny pracovný adresár, prechádza do adresára Waf, a potom pokyn Waf na zmenu pracovného adresára späť na uložený pred spustením programu aktuálny pracovný adresár. Spomíname príkaz - -cwd pre úplnosť, väčšina používateľov jednoducho spúšťa Waf z adresára najvyššej úrovne a tam generujú výstupné súbory.

Pokračovanie: kapitola 4

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster