BESS 개발 노트 01: BESS 설치 및 기본 사용법
소개
이것은 BESS(Berkeley Extensible Software Switch)의 개발에 관한 가이드북이다. 공식 Wiki에는 영어판 밖에 없는 데다 내용도 적다, 그래서 이 메모를 쓴다. 이 메모에는 공식 위키에 있는 중요한 내용도 포함하여 자신이 개발, 소스 코드를 읽을 때의 이해와 발견 등이 포함되어 있다.
만약 누군가의 도움이 되면, 그것은 다행이 된다.
공식 페이지 -> BESS
공식 Wiki와 Repo -> BESS Wiki
개발 환경
Ubuntu 18.04 LTS 권장
VMware에서 우분투를 설치하는 것이 좋습니다. 스냅샷 기능을 활용하여 시스템에 회복 불가능한 데미지가 나오면 쉽게 정상 상태로 돌아갈 수 있다.
결코 VM에 충분한 메모리를 설치하는 것, 2~4GB의 기준.
종속성 설치
BESS에는 다음 소프트 패키지가 필요합니다.
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
빌드
Repo에서 복제 및 스크립트 실행:
git clone https://github.com/NetSys/bess.git
cd bess/
sudo ./build.py
다음 출력이라면 빌드 성공 :
> 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.
주의사항
deps
로 해동, 그리고 한번 더 빌드한다. core
의 소스 코드를 긁으면, 재빌드의 전과 관련된 *.o
파일을 삭제하는 것을 추천한다. core/pb
에 있는 소스 코드는 protobuf로 생성하기 때문에 빌드 전에 아무것도 없다. 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
hugepage 설치
매번 재부팅하려면이 설치가 필요합니다.
다음 명령을 실행합니다(시스템에 따라 명령이 다름):
# 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
BESS를 시작하고 테스트 스크립트 실행
다음 명령 실행
> sudo bessctl/bessctl
Type "help" for more information.
Connection to localhost:10514 failed
Perhaps bessd daemon is not running locally? Try "daemon start".
<disconnected> $
그런 다음
daemon start
실행 :Done.
localhost:10514 $
이때 BESS는 이미 시작되었다.
특정 테스트 스크립트를 실행해 보겠습니다.
$ run samples/acl
결과:
Done.
localhost:10514 $
아무런 출력도 없다. 그 원인은, 이 스크립트에는 어떤 출력 커멘드도 포함하고 있지 않다.
monitor pipeline
명령을 입력하면 다음 출력이 표시됩니다.이것은 테스트 스크립트를 성공적으로 실행하는 간증입니다.
주의사항
이제 Linux에서는 Python3을 사용하고 있지만 BESS에는 Python2로 작성하므로 다음 오류 메시지가 표시되면 :
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
Python2에서 bessctl 실행 :
python2 bessctl/bessctl
계속
다음은 BESS 스크립트를 작성하는 방법을 소개합니다. BESS가 가지고 있는 모듈을 사용하는 방법도 이해할 수 있을 것이다.
Reference
이 문제에 관하여(BESS 개발 노트 01: BESS 설치 및 기본 사용법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/DStrike/items/f0d3c19f19deeb55fc39텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)