我是在Vmware的Ubuntu20.04的虚拟机下进行配置,目的是为了搭建一个基于http2的流媒体播放器,所以我需要首先搭建一个http2的server。
强调一下:最好是使用Ubuntu20.04版本,因为自带的python3环境是python3.8,nghttp2的python依赖包里面有对于python>=3.8的要求,我尝试了ubuntu16.04和ubuntu18.04都出现了问题(如果是使用低于20的版本,下面也提供了解决的方法)。
ubuntu20.04及以上版本用户不需要,只需要使用默认的即可,如果更改会出现broke packages问题
首先,国内的用户推荐先去把镜像源改成阿里源,这样下载依赖的时候会相对更快,更加节省时间。(可以使用cp命令先备份一下原始文件)
vi /etc/apt/sources.list
esc+dG快速删除原始文件中的内容
这里有放入该文件的内容
更新镜像源列表命令:
sudo apt-get update
nghttp2提供不同的功能应用(Applications)包括:nghttp, nghttpd, nghttpx, h2load
根据官方的文档提示,比较简单的方法就是使用下面的方法安装依赖:
(注意!!非20.04版本用户不要安装python3-dev和python-setuptools,等到下面报关于python>=3.8的错再安装指定版本的依赖)
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
如果以上格式不可用,可以点击链接
很容易就能找到上面的内容;
ubuntu20.04用户如果将镜像源修改为了阿里源,可能会出现以下问题:
The following packages have unmet dependencies
修改还是可以的,但是还是不更改source.list比较省心,虽然下载慢
如果是服务器或者一些对于存储要求较高的环境
推荐根据官方文档的依赖提示逐个安装
这里最好是加上 ** --depth 1** 这个参数来限制拉取最近的版本。因为nghttp2的下载文件会比较大,导致git出现超时等失败拉取的情况(网速贼快的小伙伴可以忽略,可以先尝试不加参数,如果出问题再加参数)
git clone https://github.com/tatsuhiro-t/nghttp2.git --depth 1
使用工具库对源码进行处理
cd nghttp2 && autoreconf -i && automake && autoconf
对源代码库进行编译 (使用./configure --help来查看自己偏好的编译选项)
需要使用c++库libnghttp2_asio的先跳转到最后查看前序依赖安装
./configure
在./configure之后会出现要求python>=3.8的要求而导致编译error
所以我们直接
sudo apt install python3.8
这里通过:
sudo apt-get install python3.8-dev
sudo make && make install
make的时候可能会出现下面这样的问题:
可以查看一下当前已经安装了python3-dev对应的版本
我这里已经是python3.8的环境,所以没有任何的问题
如果你还没有python3.8,那就需要先安装python3.8
或者你有python3.8但是python3-dev显示的是非3.8版本的
那么:
sudo apt-get remove python3-dev
再去安装python3.8-dev,最后安装setuptools即可成功make和install
sudo apt-get install python3-setuptools
完成安装。看到刚才编译的结果中,发现Features中的libnghttp2_asio还是显示no,但我在configure的过程中已经使用了“ --enable-asio-lib ”作为参数,这就告诉我肯定是因为依赖没有安装所以检测过程失败导致最后安装失败。
boost安装成功率100%的方法:
ubuntu下安装boost教程
安装完boost库后,再次configure操作
./configure --enable-asio-lib
得到下面的结果
完结撒花~
关于使用libnghttp2_asio进行服务器编程也有很多技术点
后续另外写文章更新
2021.3.4 日更新
我自己部署成功后也有继续关注这方面的内容,发现了一个比较公整的日本网站qiita中博主的内容,这里推荐一下。
nghttp2を使用する #3
这是关于部署和server编程,但其实代码就是官方文档提供
nghttp2を使用する #4
这个关于client编程,但其实代码也是官方文档照抄