Take the 2-minute tour ×
Server Fault is a question and answer site for system and network administrators. It's 100% free, no registration required.

I recently installed tomcat via an installation script from the apache solr typo3 community and spent the last 3 days trying to figure out why it won't work until by chance I noticed that when I queried the process listening on the port via "lsof -i", it was bound to the ipv6 protocol. I have googled everywhere and most say that setting address to 0.0.0.0 in the tomcat connector resolves this issue, others say setting JAVA_OPTS="-Djava.net.preferIPv4Stack=true"; I have tried the former which doesn't work but the latter I am unsure of where to put it. One solution I read somewhere suggested to put it in setenv.sh but I can't find this file in my tomcat installation. I would appreciate any help at the moment regarding this. The tomcat version is 6.x and the OS is ubuntu 11.10. Thanks

share|improve this question
    
What ips/ports is it listening on, via lsof -i? –  becomingwisest May 20 '12 at 19:01
    
@becomingwisest 8080. –  Dark Star1 May 20 '12 at 22:50

4 Answers 4

up vote 13 down vote accepted

Ok I finally solved it. I was directed to try this and Henk's solution. Neither of which seemed to work with the remote virtual server. I'm guessing the fact that because I'm on a shared kernel space so the provider prevents this. In any case I added: JAVA_OPTS= $JAVA_OPTS -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresses to the catalina.sh startup script and that seemed to have fixed the issue of binding tomcat to ipv6.

share|improve this answer
1  
So you're on a VPS with a shared kernel... D'oh! –  Henk May 21 '12 at 12:58

Many suggested updating catalina.sh startup script. Yes, that solution would work, but catalina.sh script is not meant to be customized/updated. All changes should go into the customization script instead, i.e. setenv.sh.

NOTE: TOMCAT_HOME/bin/setenv.sh doesn't exist by default, you need to create it. Check the catalina.sh script and you will see the startup script checks if setenv.sh exists, and executes if it does.

So, I suggest you create new TOMCAT_HOME/bin/setenv.sh script with a single line:

JAVA_OPTS="$JAVA_OPTS -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresses=true "
share|improve this answer

If you used this installer: "Apache Solr for TYPO3", you can change the address in the file server.xml.
The default points to localhost, so look for 127.0.0.1 and change it into the IPv4-address you want.
Don't forget to restart Tomcat6 for the changes to take effect.

UPDATE, 20120521

See my comment below on how to disabe IPv6 on Ubuntu 11.10.

I have succesfully tested this on a Virtualbox-VM on my Mac.
The address for the connector port 8080 has been changed from 127.0.0.1 to 0.0.0.0 in server.xml.
Then disabling IPv6 makes the "tcp6" to go away, so it's binded to an IPv4-only address.

Before / with IPv6 enabled:

# netstat -anp | grep 8080
tcp6 0 0 :::8080 :::* LISTEN 1972/java

After / IPv6 disabled:

# netstat -anp | grep 8080
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 2045/java

share|improve this answer
    
Tried this also and that didn't work netstat shows that despite the process being bound to an ipv4 address it's still looking for an ipv6 a la this return: tcp6 0 0 X.X.X.X:8080 :::* LISTEN. which I think is odd but the problem has also been replicated on my friend's vm which is hosted on a mac. –  Dark Star1 May 20 '12 at 22:46
    
And when IPv6 is disabled? Here is a howto for Ubuntu 11.10: pario.no/2011/12/09/disable-ipv6-on-ubuntu-11-10 –  Henk May 21 '12 at 7:29

The correct syntax for modifying catalina.sh would be:

JAVA_OPTS=" $JAVA_OPTS -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresses=true "

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.