前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[nghttp2]压测工具,源码编译并进行deb打包过程

[nghttp2]压测工具,源码编译并进行deb打包过程

作者头像
landv
发布2019-08-07 16:08:18
1.6K0
发布2019-08-07 16:08:18
举报
文章被收录于专栏:landvlandv

编译环境: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构建。这避免了与构建捆绑应用程序相关的潜在的构建错误。

要构建并运行应用程序(nghttpnghttpdnghttpxh2load在)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属于‘大便’系列。

安装下面的这些需要的包吧

代码语言:javascript
复制
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脚本,如下所示:

代码语言:javascript
复制
$ ./configure PKG_CONFIG_PATH=/path/to/pkgconfig

对于pkg配置管理库,*_CFLAG*_LIBS 环境变量的定义(例如,OPENSSL_CFLAGSOPENSSL_LIBS)。为这些变量指定非空字符串会完全覆盖pkg-config。换句话说,如果指定了它们,则不会将pkg-config用于检测,并且用户有责任为这些变量指定正确的值。有关这些变量的完整列表,请运行./configure -h

从发布tar存档构建nghttp2

nghttp2项目定期发布tar档案,其中包括nghttp2源代码和生成的构建文件。可以从“ 版本”页面下载它们。

从git构建nghttp2需要autotools开发包。从tar档案构建不需要它们,因此它更容易。通常的构建步骤如下:

代码语言:javascript
复制
$ tar xf nghttp2-XYZtar.bz2 
$ cd nghttp2-XYZ 
$ ./configure 
$ make

从git构建

这是重点

代码语言:javascript
复制
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

说白了还是不熟悉,如果对这些知识很熟悉,那就是信手捏来。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-08-07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 环境要求
    • 构建libnghttp2库需要一下包:
      • 要构建和运行单元测试曾想,需要以下包:
        • 要构建文档,你需要安装:
          • 要构建并运行应用程序(nghttp,nghttpd, nghttpx和h2load在)src目录,需要以下包:
            • 要启用-a选项(从下载的资源获取链接的资源)nghttp,需要以下包:
              • 要在nghttpx中启用systemd支持,需要以下包:
                • HPACK工具需要以下包:
                  • 要在examples目录下构建源代码,需要libevent:
                    • 为了缓解长时间运行的服务器程序(nghttpd和nghttpx)中的堆碎片,建议使用jemalloc:
                      • libnghttp2_asio C ++库需要以下包:
                        • Python绑定需要以下包:
                          • 我的环境是DEEPIN基于Ubuntu,so属于‘大便’系列。
                            • 要为nghttpx启用mruby支持,需要mruby。我们需要使用C ++ ABI明确打开来构建mruby,并且可能需要其他mrgem,mruby由第三方/ mruby目录下的git子模块管理。目前,默认情况下禁用对nghttpx的mruby支持。要启用mruby支持,请使用--with-mrubyconfigure选项。请注意,在撰写本文时,Debian / Ubuntu中的libmruby-dev和mruby包不能用于nghttp2,因为它们不启用C ++ ABI。要构建mruby,需要以下包:
                        • 从发布tar存档构建nghttp2
                        • 从git构建
                        • nghttp2官方文档
                        • 修改版本号
                        • deb包下载地址
                        • 说白了还是不熟悉,如果对这些知识很熟悉,那就是信手捏来。
                        相关产品与服务
                        SSL 证书
                        腾讯云 SSL 证书(SSL Certificates)为您提供 SSL 证书的申请、管理、部署等服务,为您提供一站式 HTTPS 解决方案。
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档