0

I have been trying to install Jenkins on tomcat9 but when I go for the first time on http://myip:8080/jenkins to finish the setup; I have the the following error:

java.io.IOException: Read-only file system
    at java.io.UnixFileSystem.createFileExclusively(Native Method)
    at java.io.File.createTempFile(File.java:2026)
    at hudson.util.AtomicFileWriter.<init>(AtomicFileWriter.java:142)
Caused: java.io.IOException: Failed to create a temporary file in /var/lib/jenkins
    at hudson.util.AtomicFileWriter.<init>(AtomicFileWriter.java:144)
    at hudson.util.AtomicFileWriter.<init>(AtomicFileWriter.java:109)
    at hudson.util.AtomicFileWriter.<init>(AtomicFileWriter.java:84)
    at hudson.util.AtomicFileWriter.<init>(AtomicFileWriter.java:74)
    at hudson.util.TextFile.write(TextFile.java:116)
    at jenkins.model.Jenkins.<init>(Jenkins.java:910)
    at hudson.model.Hudson.<init>(Hudson.java:85)
    at hudson.model.Hudson.<init>(Hudson.java:81)
    at hudson.WebAppMain$3.run(WebAppMain.java:262)
Caused: hudson.util.HudsonFailedToLoad
    at hudson.WebAppMain$3.run(WebAppMain.java:279)

First: Tomcat9 is working well, I can access it locally or remortly I have created /var/lib/jenkins which is owned by jenkins (unix user I have created), I have even setup the permission to 777.

Second: if i run the war in command line 'java -jar jankins.war" ( I have exported JENKINS_HOME=/var/lib/jenkins before), then jenkins works correctly. So the war is not corrupt.

third: on tomcat, I have modified the context.xml to set up JENKINS_HOME to /var/lib/jenkins, it is working as you can see the above error (5th line). Then in context.xml I have tried to setup JENKINS_USER to several different users (jenkins, tomcat, root etc) , I tried different ownership for /var/lib/jenkins (and group as well).

here is my context.xml:

<Context>
    <Environment name="JENKINS_HOME" value="/var/lib/jenkins" type="java.lang.String" />
    <Environment name="JENKINS_USER" value="jenkins" type="java.lang.String" />
    <!-- Default set of monitored resources. If one of these changes, the    -->
    <!-- web application will be reloaded.                                   -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>
    <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
    <!-- Uncomment this to disable session persistence across Tomcat restarts -->
    <!--
    <Manager pathname="" />
    -->
</Context>

But nothing is working, it looks like JENKINS_USER is not taken into account and/or whatever I do the directory is read-only ....

NB: as I have read there might be some issues with JDK version, so I have tried with open-jdk-11 (at the beginning) then with open-jdk-8

Has anyone face this issue ?

laurent
  • 3
  • 1

1 Answers1

0

If you run tomcat9 from the Ubuntu repositories, it will run as the unix user tomcat. Providing access to a user jenkins won't give permissions to tomcat. And just defining arbitrary environment variables (JENKINS_HOME, JENKINS_USER) won't make a web application magically change its identity.

All web applications in tomcat run as the same user, and that's the one that you need to provide access to.

Also, notice that Debian's Tomcat runs in a sandboxed environment (see this answer to a relevant question), so you'll need to work on the sandbox environment in addition to the owner of the files/process.

Olaf Kock
  • 46,930
  • 8
  • 59
  • 90
  • Thank you @olaf, for your kind answer. What you write makes perfect sens, actually that's what I did at first, and as it was not working I tried other solutions..like changing the user .. Anyway to double check I tried again and it is still not working. Btw as I wrote I chmod 777 the directory to give anyone access to the /var/lib/jenkins directory but still I have the same error. – laurent Aug 24 '20 at 16:56
  • In that case, you're running into https://stackoverflow.com/a/56835997/13447. I'll edit it into my answer as well. Without the complication of a different user account, this question would be a duplicate. This way it adds a separate layer to the problem and I consider it not to be a duplicate. – Olaf Kock Aug 24 '20 at 17:12
  • Yesss ! thx a lot Olaf. I am back with normal permissions/ownership and a normal behavior. – laurent Aug 24 '20 at 19:09