boot-clj / boot

Build tooling for Clojure.
https://boot-clj.github.io/
Eclipse Public License 1.0
1.75k stars 181 forks source link

IPv6 support missing in boot #757

Open telmich opened 4 years ago

telmich commented 4 years ago

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 <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):

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