[LINUX] BESS Development Memo Teil 01: BESS-Installation und grundlegende Verwendung

Einführung

Dies ist ein Leitfaden zur Entwicklung von BESS (Berkeley Extensible Software Switch). Das offizielle Wiki hat nur eine englische Version und es gibt wenig Inhalt, deshalb werde ich dieses Memo schreiben. Dieses Memo enthält wichtige Inhalte im offiziellen Wiki sowie Verständnis und Entdeckungen beim Entwickeln und Lesen des Quellcodes. Wenn es jemandem hilft, wird es Glück haben.

Offizielle Seite-> BESS Offizielles Wiki und Repo-> BESS Wiki

Entwicklungsumgebung

Ubuntu 18.04 LTS empfohlen

Wir empfehlen die Installation von Ubuntu auf VMware. Wenn Sie die Snapshot-Funktion nutzen und das System irreparable Schäden erleidet, können Sie problemlos zum Normalzustand zurückkehren. Installieren Sie niemals genügend Speicher in der VM. 2-4 GB sind eine Anleitung.

Abhängigkeitsinstallation

BESS benötigt die folgenden Soft Packages:

sudo apt install make apt-transport-https ca-certificates g++ make pkg-config libunwind8-dev liblzma-dev zlib1g-dev libpcap-dev libssl-dev libnuma-dev git python python-pip python-scapy libgflags-dev libgoogle-glog-dev libgraph-easy-perl libgtest-dev libgrpc++-dev libprotobuf-dev libc-ares-dev libbenchmark-dev libgtest-dev protobuf-compiler-grpc
pip install --user protobuf grpcio scapy

Bauen

Führen Sie Klone und Skripte von Repo aus:

git clone https://github.com/NetSys/bess.git
cd bess/
sudo ./build.py

Wenn die Ausgabe als nächstes erfolgt, ist der Build erfolgreich:

> sudo ./build.py
Configuring DPDK...
 - "Mellanox OFED" is not available. Disabling MLX4 and MLX5 PMDs...
Building DPDK...
Generating protobuf codes for pybess...
Building BESS daemon...
Building BESS kernel module (4.15.0-74-generic - running kernel) ...
Done.

Vorsichtsmaßnahmen

  1. Wenn Sie das DPDK während eines Builds nicht herunterladen können, laden Sie die Ausgabe manuell herunter, entpacken Sie sie in den Ordner `` `deps``` und erstellen Sie sie erneut.
  2. Wenn Sie den Quellcode von `` core``` ändern, wird empfohlen, die zugehörigen `* .o```-Dateien vor dem erneuten Erstellen zu löschen.
  3. Der Quellcode im Ordner `` `core / pb``` wird von protobuf generiert, daher gibt es vor dem Build nichts.
  4. Alle Warnungen werden als Fehler behandelt. Wenn ein Fehler auftritt, schlägt der Build definitiv fehl.
  5. Installieren Sie niemals eine große Seite nach dem Build. Wenn die Reihenfolge falsch ist, kann die nächste Ära eintreten:
Log:
 make: Entering directory '/home/****/bess/core'
[CXX]       opts.o
[CXX]       worker.o
[CXX]       packet_pool.o
[CXX]       task.o
[CXX]       resume_hook.o
[CXX]       memory.o
[CXX]       dpdk.o
[CXX]       event.o
[CXX]       gate.o
[CXX]       port.o
[CXX]       main.o
[CXX]       debug.o
[CXX]       module_graph.o
[CXX]       bessctl.o
g++: internal compiler error: Killed (program cc1plus)
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-7/README.Bugs> for instructions.
Error: bessctl.o
g++ -o bessctl.o -c bessctl.cc -std=c++17 -g3 -ggdb3 -march=native -isystem /home/****/bess/deps/dpdk-17.11/build/include -isystem /home/****/bess/core -isystem ./.. -isystem /home/****/bess/core/modules -D_GNU_SOURCE -Werror -Wall -Wextra -Wcast-align -Wno-error=deprecated-declarations -pthread -I/usr/include/x86_64-linux-gnu -fno-gnu-unique -O3 -DNDEBUG -MT bessctl.o -MMD -MP -MF .deps/bessctl.d
Makefile:439: recipe for target 'bessctl.o' failed
make: *** [bessctl.o] Error 1
make: Leaving directory '/home/****/bess/core'

Error has occured running command: make -j1 -C core

Installation einer riesigen Seite

Diese Installation ist für jeden Neustart erforderlich.

Führen Sie den folgenden Befehl aus (der Befehl ist je nach System unterschiedlich):

# For single-node systems
sudo sysctl vm.nr_hugepages=1024

# For multi-node (NUMA) systems
echo 1024 | sudo tee /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
echo 1024 | sudo tee /sys/devices/system/node/node1/hugepages/hugepages-2048kB/nr_hugepages

Starten Sie BESS und führen Sie das Testskript aus

Führen Sie den folgenden Befehl aus

> sudo bessctl/bessctl
Type "help" for more information.
Connection to localhost:10514 failed
Perhaps bessd daemon is not running locally? Try "daemon start".
<disconnected> $

Führen Sie dann `` `daemon start``` aus:

Done.
localhost:10514 $

Zu diesem Zeitpunkt wurde BESS bereits gestartet.

Lassen Sie uns ein Testskript ausführen:

$ run samples/acl

als Ergebnis:

Done.
localhost:10514 $

Es erfolgt keine Ausgabe. Der Grund ist, dass dieses Skript keine Ausgabebefehle enthält. Geben Sie den Befehl "Monitor Pipeline" ein und erhalten Sie die folgende Ausgabe:

success.jpg

Dies ist ein Beweis dafür, dass das Testskript erfolgreich ausgeführt wurde.

Vorsichtsmaßnahmen

Ich verwende derzeit Python 3 für Linux, schreibe aber Python 2 für BESS. Wenn also die folgende Fehlermeldung angezeigt wird:

Traceback (most recent call last):
  File "bessctl/bessctl", line 186, in <module>
    main()
  File "bessctl/bessctl", line 170, in main
    run_cli()
  File "bessctl/bessctl", line 159, in run_cli
    cli.loop()
  File "bessctl/bessctl", line 134, in loop
    super(BESSCLI, self).loop()
  File "/home/****/bess/bessctl/cli.py", line 528, in loop
    self.process_one_line()
  File "/home/****/bess/bessctl/cli.py", line 440, in process_one_line
    self.call_func(func, args)
  File "bessctl/bessctl", line 95, in call_func
    super(BESSCLI, self).call_func(func, args)
  File "/home/****/bess/bessctl/cli.py", line 411, in call_func
    func(*args)
  File "/home/****/bess/bessctl/commands.py", line 1720, in monitor_pipeline
    _monitor_pipeline(cli, 'pkts', '', graph_args=opts)
  File "/home/****/bess/bessctl/commands.py", line 1711, in _monitor_pipeline
    graph_args=graph_args))
  File "/home/****/bess/bessctl/commands.py", line 1389, in _draw_pipeline
    node_labels[gate.name]), file=f.stdin)
TypeError: a bytes-like object is required, not 'str

Führen Sie bessctl auf Python2 aus: python2 bessctl/bessctl

Fortsetzung

Als nächstes werde ich vorstellen, wie man ein BESS-Skript schreibt. Sie sollten auch verstehen, wie Sie die Module von BESS verwenden.

Recommended Posts

BESS Development Memo Teil 01: BESS-Installation und grundlegende Verwendung
Python-Installation und grundlegende Grammatik
Verwendungshinweise für virtualenv Basic-Befehle
Python (Python 3.7.7) Installation und grundlegende Grammatik
Elasticsearch-Installation und Grundbedienung für Ubuntu
Wie man Fabric installiert und wie man es benutzt
Flask Grundnotiz
[Python] Kapitel 01-02 Über Python (Ausführung und Installation der Entwicklungsumgebung)
Python OpenCV Installation (Memo)
Python-Grundkurs (2 Python-Installation)
Numpy Grundberechnungsnotiz
Installation von Jupyter und Pandas
Grundlegende Verwendung von Flask-Classy
Grundlegende Verwendung von Jinja2
Grundlegende Verwendung von SQL Alchemy
Python-Grundnotiz - Teil 2
Grundlegende Python-Befehlsnotizen
Python grundlegende Grammatik Memo
Python-Grundnotiz - Teil 1
[Memo] Django-Entwicklungsumgebung
Deap Usage Note (OneMax)
RHCSA-Testvorbereitung - Speicherfunktion VDO-Übersicht und Verwendung (Basisversion)