Skip to content

IPv6 support missing in boot #757

@telmich

Description

@telmich

Describe the bug

When running boot in an IPv6 only network with NAT64/DNS64 (i.e. the IPv4 Internet can be reached via IPv6), boot fails to download the dependencies.
This can be seen when trying to install dependencies as follows:

Step 8/10 : RUN git clone https://github.com/twohundredok/perun.git && cd perun && boot build; cd ..
 ---> Running in d825a487f90d
Cloning into 'perun'...
Downloading https://github.com/boot-clj/boot/releases/download/2.7.2/boot.jar...
Exception in thread "main" java.net.SocketException: Network is unreachable (connect failed)
	at java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
	at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
	at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
	at java.net.Socket.connect(Socket.java:607)
	at sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:666)
	at sun.security.ssl.BaseSSLSocketImpl.connect(BaseSSLSocketImpl.java:173)
	at sun.net.NetworkClient.doConnect(NetworkClient.java:180)
	at sun.net.www.http.HttpClient.openServer(HttpClient.java:463)
	at sun.net.www.http.HttpClient.openServer(HttpClient.java:558)
	at sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:264)
	at sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:367)
	at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:191)
	at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1162)
	at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1056)
	at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:177)
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1570)
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1498)
	at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:268)
	at java.net.URL.openStream(URL.java:1067)
	at Boot.download(Boot.java:176)
	at Boot.install(Boot.java:227)
	at Boot.main(Boot.java:241)

To Reproduce
Steps to reproduce the behavior:

  1. Go to https://gitlab.200ok.ch/200ok/200ok.ch/blob/custom-docker-image-for-ci/Dockerfile

  2. Click on 'Download'

  3. Save file in a directory

  4. Run "docker build ." in that directory in an IPv6 only network

This will fail due to non-IPv6 calls.

Expected behavior
I'd expect boot to use the happy eyeballs algorithm (try v6/v4 in parallel and use what is fastest) like most tools (curl, wget, chromium, firefox. ...) do.

Screenshots
Log file:

Removing intermediate container c70ac38b72ba
 ---> 5009822183ba
From 'debian:unstable-20191014'
# Using Debian Unstable, because we need openjdk-8. And interestingly
# that old version is only available in the newest version of Debian(;

MAINTAINER Alain M. Lafon <[email protected]>

RUN apt-get update -y -qq && apt-get install git curl lftp rsync time pandoc -y
RUN apt-get install openjdk-8-jdk -y

# Install Clojure boot
RUN bash -c "cd /usr/local/bin && curl -fsSLo boot https://github.com/boot-clj/boot-bin/releases/download/latest/boot.sh && chmod 755 boot"
ENV PATH=$PATH:$BOOT_INSTALL
ENV BOOT_AS_ROOT=yes

# Install the 200ok fork of Perun
RUN git clone https://github.com/twohundredok/perun.git && cd perun && boot build; cd ..

RUN boot

CMD ["boot", "repl"]
...skipping...
Step 8/10 : RUN git clone https://github.com/twohundredok/perun.git && cd perun && boot build; cd ..
 ---> Running in d825a487f90d
Cloning into 'perun'...
Downloading https://github.com/boot-clj/boot/releases/download/2.7.2/boot.jar...
Exception in thread "main" java.net.SocketException: Network is unreachable (connect failed)
	at java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
	at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
	at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
	at java.net.Socket.connect(Socket.java:607)
	at sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:666)
	at sun.security.ssl.BaseSSLSocketImpl.connect(BaseSSLSocketImpl.java:173)
	at sun.net.NetworkClient.doConnect(NetworkClient.java:180)
	at sun.net.www.http.HttpClient.openServer(HttpClient.java:463)
	at sun.net.www.http.HttpClient.openServer(HttpClient.java:558)
	at sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:264)
	at sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:367)
	at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:191)
	at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1162)
	at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1056)
	at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:177)
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1570)
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1498)
	at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:268)
	at java.net.URL.openStream(URL.java:1067)
	at Boot.download(Boot.java:176)
	at Boot.install(Boot.java:227)
	at Boot.main(Boot.java:241)
Removing intermediate container d825a487f90d
 ---> e24841a74526
Step 9/10 : RUN boot
 ---> Running in 69ca002864cc
Downloading https://github.com/boot-clj/boot/releases/download/2.7.2/boot.jar...
Exception in thread "main" java.net.SocketException: Network is unreachable (connect failed)
	at java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
	at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
	at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
	at java.net.Socket.connect(Socket.java:607)
	at sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:666)
	at sun.security.ssl.BaseSSLSocketImpl.connect(BaseSSLSocketImpl.java:173)
	at sun.net.NetworkClient.doConnect(NetworkClient.java:180)
	at sun.net.www.http.HttpClient.openServer(HttpClient.java:463)
	at sun.net.www.http.HttpClient.openServer(HttpClient.java:558)
	at sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:264)
	at sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:367)
	at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:191)
	at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1162)
	at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1056)
	at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:177)
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1570)
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1498)
	at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:268)
	at java.net.URL.openStream(URL.java:1067)
	at Boot.download(Boot.java:176)
	at Boot.install(Boot.java:227)
	at Boot.main(Boot.java:248)

Desktop (please complete the following information):

  • OS: Linux
  • Browser n/a
  • Version latest

Additional context
I tested this in docker, but it is likely to happen in any IPv6 only network.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions