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)
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 <alain@200ok.ch>
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.
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:
To Reproduce Steps to reproduce the behavior:
Go to https://gitlab.200ok.ch/200ok/200ok.ch/blob/custom-docker-image-for-ci/Dockerfile
Click on 'Download'
Save file in a directory
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:
Desktop (please complete the following information):
Additional context I tested this in docker, but it is likely to happen in any IPv6 only network.