Skip to content

Instantly share code, notes, and snippets.

@jjpeleato
Last active January 6, 2024 13:39
Show Gist options
  • Star 9 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jjpeleato/3327c2e38fc0fea7d6602401f9849809 to your computer and use it in GitHub Desktop.
Save jjpeleato/3327c2e38fc0fea7d6602401f9849809 to your computer and use it in GitHub Desktop.
Install Curl with HTTP2 support. (Script run on Ubuntu 16.04, 18.04 or 20.04)
#! /bin/bash
#
# Shell script for install Curl with HTTP2 support. Script run on Ubuntu 16.04, 18.04 or 20.04
#
# Notes:
# - Ubuntu environment is assumed
# - I did run shell script on Ubuntu 18.04
#
# Gratitude:
# - https://gist.github.com/tlacroix
#
# Update version to latest, found here: https://curl.se/download/
VERSION=7.76.1
cd ~
sudo apt-get update -y
sudo apt-get install -y build-essential nghttp2 libnghttp2-dev libssl-dev wget
wget https://curl.haxx.se/download/curl-${VERSION}.tar.gz
tar -xzvf curl-${VERSION}.tar.gz && rm -f curl-${VERSION}.tar.gz && cd curl-${VERSION}
./configure --prefix=/usr/local --with-ssl --with-nghttp2
make -j4
sudo make install
sudo ldconfig
cd ~ && rm -rf curl-${VERSION}
@Farzadyz
Copy link

Hi
How i can install it on centos 7?

@jjpeleato
Copy link
Author

Hi
How i can install it on centos 7?

Sorry, I don't use centos 7, I don't know, you can search the Centos community forum: https://forums.centos.org/

Good luck!

@imperyal
Copy link

imperyal commented Nov 3, 2020

It worked on Ubunto 16.04.6 LTS too, perfect.

@foxhoundsk
Copy link

Nice one, thanks!

BTW, is package nghttp2 necessary? I think installing its related library is enough.

@talwarabhimanyu
Copy link

Perfect, thank you so much! Works on Ubuntu 20.04.1 LTS

I had a curl version installed already, and so I pointed to the new one in /usr/local/bin to run it.

@tlacroix
Copy link

tlacroix commented Apr 23, 2021

Thanks for your script, works like a charm. I modified it a bit to be able to specify a version once for this project: https://github.com/gepo/apns-http2

My modified version below:

#!/bin/bash

# Update version below to latest, found here: https://curl.se/download/
VERSION=7.76.1

cd ~
sudo apt-get update -y
sudo apt-get install -y build-essential nghttp2 libnghttp2-dev libssl-dev wget
wget https://curl.haxx.se/download/curl-${VERSION}.tar.gz
tar -xzvf curl-${VERSION}.tar.gz && rm -f curl-${VERSION}.tar.gz && cd curl-${VERSION}
./configure --prefix=/usr/local --with-ssl --with-nghttp2
make -j4
sudo make install
sudo ldconfig
cd ~ && rm -rf curl-${VERSION}

There's a few security issues/vulnerabilities between 7.63 and the latest version at the time of this comment (7.76.1), and I'm working on a few HIPAA/PIPEDA projects that needs to be top notch in terms of security, hence my mod. 7.75 and up is recommended at this time. More info: https://curl.se/docs/security.html

Cheers

@tlacroix
Copy link

Nice one, thanks!

BTW, is package nghttp2 necessary? I think installing its related library is enough.

Not sure, always been using the apt-get install ... nghttp2 libnghttp2-dev ... part, but according to the cURL documentation:

nghttp2
libcurl uses this 3rd party library for the low level protocol handling parts. The reason for this is that HTTP/2 is much more complex at that layer than HTTP/1.1 (which we implement on our own) and that nghttp2 is an already existing and well functional library.
We require at least version 1.12.0.

https://curl.se/docs/http2.html

So required at least to build it I guess.

@jjpeleato
Copy link
Author

Thanks for your script, works like a charm. I modified it a bit to be able to specify a version once for this project: https://github.com/gepo/apns-http2

My modified version below:

#!/bin/bash

# Update version below to latest, found here: https://curl.se/download/
VERSION=7.76.1

cd ~
sudo apt-get update -y
sudo apt-get install -y build-essential nghttp2 libnghttp2-dev libssl-dev wget
wget https://curl.haxx.se/download/curl-${VERSION}.tar.gz
tar -xzvf curl-${VERSION}.tar.gz && rm -f curl-${VERSION}.tar.gz && cd curl-${VERSION}
./configure --prefix=/usr/local --with-ssl --with-nghttp2
make -j4
sudo make install
sudo ldconfig
cd ~ && rm -rf curl-${VERSION}

There's a few security issues/vulnerabilities between 7.63 and the latest version at the time of this comment (7.76.1), and I'm working on a few HIPAA/PIPEDA projects that needs to be top notch in terms of security, hence my mod. 7.75 and up is recommended at this time. More info: https://curl.se/docs/security.html

Cheers

Thank you! I updated my script according your recommendation @tlacroix

@jjpeleato
Copy link
Author

Nice one, thanks!

BTW, is package nghttp2 necessary? I think installing its related library is enough.

Yes, it is necessary.

Look at the pre requisites according official documentation =)

https://curl.se/docs/http2.html

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment