[nghttp2]壓測工具,源碼編譯並進行deb打包過程


編譯環境:deepin 15.11桌面版

nghttp2下載地址:https://github.com/nghttp2/nghttp2

 

環境要求

emm只能在類Linux環境才能完整編譯,想在Windows里面使用只能編譯成dll,再進行引用開發使用,不能直接搞。

構建libnghttp2庫需要一下包:

  • pkg-config >= 0.20

要構建和運行單元測試曾想,需要以下包:

  • cunit>=2.1

要構建文檔,你需要安裝:

  • sphinx(http://sphinx-doc.org)

如果你只需要libnghttp2庫,那么上面的軟件包就是你需要安裝的,使用--enable-lib-only ,以確保只有libnghttp2構建。這避免了與構建捆綁應用程序相關的潛在的構建錯誤。

要構建並運行應用程序(nghttpnghttpd, nghttpxh2load在)src目錄,需要以下包:

  • OpenSSL> = 1.0.1
  • libev> = 4.11
  • zlib> = 1.2.3
  • libc-ares> = 1.7.5

ALPN支持需要OpenSSL>=1.0.2(2015年1月22日發布),可以使用LibreSSL>=2.2.0代替OpenSSL,但在編寫時OpenSSL比LibreSSL具有更多功能。

要啟用-a選項(從下載的資源獲取鏈接的資源)nghttp,需要以下包:

  • libxml2> = 2.6.26

要在nghttpx中啟用systemd支持,需要以下包:

  • libsystemd-dev> = 209

HPACK工具需要以下包:

  • jansson> = 2.5

要在examples目錄下構建源代碼,需要libevent:

  • libevent-openssl> = 2.0.8

為了緩解長時間運行的服務器程序(nghttpdnghttpx)中的堆碎片,建議使用jemalloc:

  • jemalloc

    注意

    由於受到限制,Alpine Linux目前不支持malloc替換。查看問題#762中的詳細信息

libnghttp2_asio C ++庫需要以下包:

  • libboost-dev> = 1.54.0
  • libboost-thread-dev> = 1.54.0

Python綁定需要以下包:

  • cython> = 0.19
  • python> = 2.7
  • python-setuptools

我的環境是DEEPIN基於Ubuntu,so屬於‘大便’系列。

安裝下面的這些需要的包吧

sudo apt-get install g++ make binutils autoconf automake autotools-dev libtool pkg-config \
  zlib1g-dev libcunit1-dev libssl-dev libxml2-dev libev-dev libevent-dev libjansson-dev \
  libc-ares-dev libjemalloc-dev libsystemd-dev \
  cython python3-dev python-setuptools

 

要為nghttpx啟用mruby支持,需要mruby我們需要使用C ++ ABI明確打開來構建mruby,並且可能需要其他mrgem,mruby由第三方/ mruby目錄下的git子模塊管理。目前,默認情況下禁用對nghttpx的mruby支持。要啟用mruby支持,請使用--with-mrubyconfigure選項。請注意,在撰寫本文時,Debian / Ubuntu中的libmruby-dev和mruby包不能用於nghttp2,因為它們不啟用C ++ ABI。要構建mruby,需要以下包:

  • ruby
  • bison

nghttpx支持OpenSSL / LibreSSL的永不過時的特權分離引擎。簡而言之,當像Heartbleed這樣的嚴重漏洞被利用時,它可以最大限度地降低私鑰泄漏的風險。默認情況下禁用。要啟用它,請使用--with-neverbleedconfigure選項。

編譯libnghttp2 C源代碼需要C99編譯器。已知gcc 4.8就足夠了。為了編譯C ++源代碼,需要gcc> = 6.0或clang> = 6.0。C ++源代碼需要C ++ 14語言功能。

注意:

要在nghttpx中啟用mruby支持,請使用--with-mruby configure選項。

 

注意

Mac OS X用戶可能需要--disable-threadsconfigure選項來禁用nghttpd,nghttpx和h2load中的多線程以防止它們崩潰。歡迎使用補丁程序在Mac OS X平台上進行多線程處理。

注意

要編譯關聯的應用程序(nghttp,nghttpd,nghttpx和h2load),必須使用--enable-appconfigure選項並確保滿足上面指定的要求。通常,配置腳本檢查所需的依賴項以構建這些應用程序,並--enable-app自動啟用,因此您不必顯式使用它。但是,如果您發現應用程序未構建,那么使用--enable-app可能會找到原因,例如缺少依賴項。

注意

為了檢測第三方庫,使用了pkg-config(但是我們不對某些庫使用pkg-config(例如,libev))。默認情況下,pkg-config *.pc在標准位置搜索文件(例如,/ usr / lib / pkgconfig)。如果需要*.pc在自定義位置使用 文件,請指定PKG_CONFIG_PATH環境變量的路徑 ,並將其傳遞給configure腳本,如下所示:

$ ./configure PKG_CONFIG_PATH=/path/to/pkgconfig

對於pkg配置管理庫,*_CFLAG*_LIBS 環境變量的定義(例如,OPENSSL_CFLAGS, OPENSSL_LIBS)。為這些變量指定非空字符串會完全覆蓋pkg-config。換句話說,如果指定了它們,則不會將pkg-config用於檢測,並且用戶有責任為這些變量指定正確的值。有關這些變量的完整列表,請運行./configure -h

從發布tar存檔構建nghttp2

nghttp2項目定期發布tar檔案,其中包括nghttp2源代碼和生成的構建文件。可以從“ 版本”頁面下載它們

從git構建nghttp2需要autotools開發包。從tar檔案構建不需要它們,因此它更容易。通常的構建步驟如下:

$ tar xf nghttp2-XYZtar.bz2 
$ cd nghttp2-XYZ 
$ ./configure 
$ make

從git構建

這是重點

sudo apt install auto-apt 
#也可直接安裝deb包 
#http://mirrors.edge.kernel.org/ubuntu/pool/universe/a/auto-apt/auto-apt_0.3.24_amd64.deb
#木的辦法,奇葩的事情總會有很多

sudo apt install checkinstall
sudo apt install libboost-dev
sudo apt install libboost-all-dev

git submodule update --init 
autoreconf -i 
automake 
autoconf 

auto-apt run ./configure --enable-app
make
sudo checkinstall -D -install=no --pkgversion=1.0 --pkgname=nghttp2-tools make install # 制作deb包
# 更多checkinstall用法請自行查找


#dpkg 安裝deb包
dpkg -i package-file-name
#dpkg 卸載deb包
dpkg -P package-file-name

 

nghttp2官方文檔

https://nghttp2.org/documentation/index.html

 修改版本號

configure.ac文件

找到進行修改即可

AC_PREREQ(2.61)
AC_INIT([nghttp2], [1.40.0-DEV], [t-tujikawa@users.sourceforge.net])

deb包下載地址

https://github.com/landv/nghttp2/releases

https://github.com/landv/nghttp2/releases/download/v1.39.11/nghttp2-tools_1.0-1_amd64.deb

 說白了還是不熟悉,如果對這些知識很熟悉,那就是信手捏來。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM