Hi Kenneth,

I was going to suggest looking at chmod or chown and permissions for that 
folder, but looks like you've done that already.


I'm on Ubuntu 18.04, but running from my user home directory. In case you are 
running out of ideas, maybe you can try some of these and see if it helps:


- could it be that you have ACL set for that directory or one of its parents? 
(see getfacl)

- not likely to have selinux as you are on Ubuntu, so maybe apparmor is set up 
and could be interfering?

- any extra logs under /var/log/syslog or /var/log/auth.log?

- could it be that one of the parent directories has a more restrictive 
permission?


Hope that helps

Bruno






On Friday, 19 June 2020, 4:37:59 pm NZST, Kenneth Keefe <[email protected]> 
wrote: 





I'm trying to set Fuseki up on a Ubuntu 20.04 box. I'm running Tomcat
9.0.31. I want to set the FUSEKI_BASE to /srv/etc/fuseki. In order to
accomplish that, I created the file /usr/share/tomcat9/bin/setenv.sh that
contains this:

#!/bin/sh
> export FUSEKI_BASE="/srv/etc/fuseki"


When I deploy the 3.15.0 fuseki.war on tomcat, I get the following
exception:

19-Jun-2020 04:23:37.533 SEVERE [main]
org.apache.catalina.core.StandardContext.listenerStart Exception sending
context initialized event to listener instance of class
[org.apache.jena.fuseki.webapp.ShiroEnvironmentLoader]

org.apache.jena.fuseki.FusekiConfigException: FUSEKI_BASE is not writable:
/srv/etc/fuseki

at
org.apache.jena.fuseki.webapp.FusekiWebapp.formatBaseArea(FusekiWebapp.java:139)

at
org.apache.jena.fuseki.webapp.ShiroEnvironmentLoader.contextInitialized(ShiroEnvironmentLoader.java:50)

at
org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4685)

at
org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5146)

at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)

at
org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:717)

at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:690)

at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:705)

at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:978)

at
org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1849)

at
java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)

at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)

at
org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)

at
java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:118)

at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:773)

at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:427)

at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1576)

at
org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:309)

at
org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)

at
org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:423)

at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:366)

at
org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:936)

at
org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:841)

at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)

at
org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384)

at
org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374)

at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)

at
org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)

at
java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)

at
org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909)

at
org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)

at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)

at
org.apache.catalina.core.StandardService.startInternal(StandardService.java:421)

at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)

at
org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:930)

at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)

at org.apache.catalina.startup.Catalina.start(Catalina.java:633)

at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)

at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.base/java.lang.reflect.Method.invoke(Method.java:566)

at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:343)

at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:478)


I have checked the permissions on the file system. /srv and /srv/etc are
both 775. I changed ownership of /srv/etc/fuseki to the tomcat user and
group and still get the exception. I tried changing permissions for both
/srv/etc and /srv/etc/fuseki to 777 to see if it is running as a different
user somehow. I still get the exception.

What is the deal? What is causing this exception?

I tried to look up the code that is throwing the exception and it looks
like it is coming from this block of code:

if ( Files.exists(FUSEKI_BASE) ) {
    if ( ! Files.isDirectory(FUSEKI_BASE) )
        throw new FusekiConfigException("FUSEKI_BASE is not a directory:
"+FUSEKI_BASE) ;
    if ( ! Files.isWritable(FUSEKI_BASE) )
        throw new FusekiConfigException("FUSEKI_BASE is not writable:
"+FUSEKI_BASE) ;
  } else {
    ensureDir(FUSEKI_BASE);
  }

I don't understand how a Files.isWritable() call is failing with the file
permissions set the way they are.

Ideas?

Ken

Reply via email to