rakucro

Perl 6 Cro's stub doesn't run: HTTP/2 is requested, but ALPN is not supported


I created a stub service with Perl 6's cro but it errors out because "ALPN is not supported".

$ cro stub http ds4 ds4
Stubbing a HTTP Service 'ds4' in 'ds4'...

First, please provide a little more information.

Secure (HTTPS) (yes/no) [no]: yes
Support HTTP/1.1 (yes/no) [yes]: 
Support HTTP/2.0 (yes/no) [yes]: 
Support Web Sockets (yes/no) [no]: yes

$ cd ds4
$ cro run
ā–¶ Starting ds4 (ds4)
šŸ”Œ Endpoint HTTPS will be at https://localhost:20000/
ā™» Restarting ds4 (ds4)
āš  ds4 HTTP/2 is requested, but ALPN is not supported
āš  ds4   in method new at /home/zoffix/rakudo/install/share/perl6/site/sources/D142088174DCE80630FC7C31793703D9D56E26D6 (Cro::HTTP::Server) line 128
āš  ds4   in block <unit> at service.p6 line 5
āš  ds4 

I googled around for this error, but all I get is info on rebuilding nginx and Apache, which I'm not using. It mentioned libssl and on this fairly ancient install I have libssl1.0.0:i386 and libssl0.9.8:i386 with no newer packages available.

Would manually compiling a new libssl potentially fix the issue I'm having?


UPDATE: assuming I did install newer libssl correctly, the problem still remains:

$ cd $(mktemp -d)
$ wget https://www.openssl.org/source/openssl-1.1.1-pre6.tar.gz
$ tar -xvvf *
$ cd open*
$ ./config && make
$ make
$ sudo make install

...

$ zef uninstall Cro::Core Cro::HTTP cro Cro::TLS Cro::WebSocket OpenSSL IO::Socket::SSL IO::Socket::SSL::Async
$ zef install --/test cro
$ cro run
ā–¶ Starting ds4 (ds4)
šŸ”Œ Endpoint HTTPS will be at https://localhost:20000/
ā™» Restarting ds4 (ds4)
āš  ds4 HTTP/2 is requested, but ALPN is not supported
āš  ds4   in method new at /home/zoffix/rakudo/install/share/perl6/site/sources/AA08D168A5945413FFDA254577A6F6FF64F66989 (Cro::HTTP::Server) line 128
āš  ds4   in block <unit> at service.p6 line 5
āš  ds4 

Solution

  • Installing new .so files to the system usually requires updating ld's caches; apt, rpm, and friends all do this in post-install hooks automatically when needed, but when you install a library manually, you may have to do it manually.

    The command to do this is

    sudo ldconfig

    Hope that helps!