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

landv發表於2019-08-07

編譯環境: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

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

相關文章