FishEye as non-root user
Asked by Robert Middleton:

I'm trying to get FishEye running on CentOS 5.9 x64 as a non-root user. I'm able to run the server properly as root, which is clearly not desireable in terms of security. So, I have given a different user access to the FishEye install directory and the FishEye data directory, however this user is unable to start FishEye. Whenever I try to do a restore, I get the following error:
> jira@serv \[/sw/fecru-2.9.1\]# bin/fisheyectl.sh restore -f /home/jira/FeCru-backup.zip --username username --password password --dbtype mysql --jdbcurl jdbc:mysql://localhost:3306/db_name  
> ERROR: problem invoking main class: com.cenqua.fisheye.ctl.Restore  
> java.lang.NoClassDefFoundError: org/apache/xmlbeans/XmlString  
> at java.lang.ClassLoader.defineClass1(Native Method)  
> at java.lang.ClassLoader.defineClass(Unknown Source)  
> at java.security.SecureClassLoader.defineClass(Unknown Source)  
> at java.net.URLClassLoader.defineClass(Unknown Source)  
> at java.net.URLClassLoader.access$100(Unknown Source)  
> at java.net.URLClassLoader$1.run(Unknown Source)  
> at java.net.URLClassLoader$1.run(Unknown Source)  
> at java.security.AccessController.doPrivileged(Native Method)  
> at java.net.URLClassLoader.findClass(Unknown Source)  
> at java.lang.ClassLoader.loadClass(Unknown Source)  
> at java.lang.ClassLoader.loadClass(Unknown Source)  
> at com.cenqua.crucible.hibernate.DBType.\<clinit\>(DBType.java:31)  
> at com.cenqua.fisheye.ctl.Restore.\<clinit\>(Restore.java:72)  
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
> at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)  
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)  
> at java.lang.reflect.Method.invoke(Unknown Source)  
> at com.cenqua.fisheye.FishEyeCtl.mainImpl(FishEyeCtl.java:98)  
> at com.cenqua.fisheye.FishEyeCtl.main(FishEyeCtl.java:41)  
> Caused by: java.lang.ClassNotFoundException: org.apache.xmlbeans.XmlString  
> at java.net.URLClassLoader$1.run(Unknown Source)  
> at java.net.URLClassLoader$1.run(Unknown Source)  
> at java.security.AccessController.doPrivileged(Native Method)  
> at java.net.URLClassLoader.findClass(Unknown Source)  
> at java.lang.ClassLoader.loadClass(Unknown Source)  
> at java.lang.ClassLoader.loadClass(Unknown Source)  
> ... 19 more

This same command works perfectly fine when I am root. The permessions should be setup properly, as I am able to open all of the JAR files in the /sw/fecru-2.9.1/lib directory. Is there something else that this user needs to have access to in order to run FishEye?


Answers:
author: Robert Middleton
body: The problem in this case was that the user that I had created was only able to open 100 simultaneous files at the same time(ulimit -n). Since there are \~200 jar files in the lib directory that FishEye needs, it could never load all of the jar files that it needed. I increased this limit to 1000 so that this particular error does not happen anymore.


author: Jobin Kuruvilla [Adaptavist]
body: Can you make sure change the ownership of those 2 directories with a -R option? Do it after you stop Fisheye and then start it as the new user.

comments: author: Robert Middleton
body: Tried that, still the same error. I even tried permissions of 777, no change at all.