Suwayomi / Suwayomi-Server

A rewrite of Tachiyomi for the Desktop
Mozilla Public License 2.0
4.02k stars 205 forks source link

[Bug] Wrong MIME Type for WebUI #767

Open Throun opened 11 months ago

Throun commented 11 months ago

Device information

Steps to reproduce

  1. Download jar and the latest version of OpenJDK from .
  2. Run the jar.

Expected behavior

The web ui should load normally.

Actual behavior

The tab Tachidesk opens is blank, accessing other pages via url gives the same result. Firefox's console shows: The stylesheet "http://127.0.0.1:4567/static/css/2.8c49bb0a.chunk.css" was not loaded because its MIME type, "text/html", is not "text/css". The stylesheet "http://127.0.0.1:4567/static/css/main.efc3b6a7.chunk.css" was not loaded because its MIME type, "text/html", is not "text/css". The script from "http://127.0.0.1:4567/static/js/2.8953c29e.chunk.js" was loaded even though its MIME type ("text/html") is not a valid JavaScript MIME type. The script from "http://127.0.0.1:4567/static/js/main.9b92ea11.chunk.js" was loaded even though its MIME type ("text/html") is not a valid JavaScript MIME type. Uncaught SyntaxError: expected expression, got '<' Uncaught SyntaxError: expected expression, got '<'

Other details

I have tried deleting all files in the WebUI folder and restarting, as well as using the Sorayomi and preview WebUI. This was tested with both preinstalled and flatpak Firefox. I tested in a VM and on a HP laptop; both were clean installs.

My personal server on Arch Linux has not faced this issue, so I presume it has something to do with Fedora.

Syer10 commented 11 months ago

This is something we fixed in r1424, I am skeptical since it should be fixed, are you sure you are using r1424 on fedora?

Throun commented 11 months ago

Yes, I tested with both r1197 and r1424, same results. I also just tested them with OpenJDK 17.0.2 to see if it was something to due with the java version, but no difference I could find.

I double-checked the console output and it contains this: 13:31:11.466 [JettyServerThreadPool-41] INFO io.javalin.Javalin - Exception occurred while handling static resource

java.lang.NullPointerException: super.getResource(path) must not be null`
        `at io.javalin.jetty.ConfigurableHandler.getResource(JettyResourceHandler.kt:86)`
        `at io.javalin.jetty.JettyResourceHandler.handle(JettyResourceHandler.kt:41)`
        `at io.javalin.http.JavalinServlet$lifecycle$2$2.invoke(JavalinServlet.kt:51)`
        `at io.javalin.http.JavalinServlet$lifecycle$2$2.invoke(JavalinServlet.kt:46)`
        `at io.javalin.http.JavalinServletHandler.executeNextTask(JavalinServletHandler.kt:99)`
        `at io.javalin.http.JavalinServletHandler.queueNextTaskOrFinish$lambda-1(JavalinServletHandler.kt:85)`
        `at java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187)`
        `at java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309)`
        `at io.javalin.http.JavalinServletHandler.queueNextTaskOrFinish$javalin(JavalinServletHandler.kt:85)`
        `at io.javalin.http.JavalinServletHandler.executeNextTask$lambda-11$lambda-10(JavalinServletHandler.kt:119)`
        `at java.base/java.util.concurrent.CompletableFuture.uniApplyNow(CompletableFuture.java:684)`
        `at java.base/java.util.concurrent.CompletableFuture.uniApplyStage(CompletableFuture.java:662)`
        `at java.base/java.util.concurrent.CompletableFuture.thenApply(CompletableFuture.java:2168)`
        `at io.javalin.http.JavalinServletHandler.executeNextTask(JavalinServletHandler.kt:119)`
        `at io.javalin.http.JavalinServletHandler.queueNextTaskOrFinish$lambda-1(JavalinServletHandler.kt:85)`
        `at java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187)`
        `at java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309)`
        `at io.javalin.http.JavalinServletHandler.queueNextTaskOrFinish$javalin(JavalinServletHandler.kt:85)`
        `at io.javalin.http.JavalinServlet.service(JavalinServlet.kt:89)`
        `at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)`
        `at io.javalin.jetty.JavalinJettyServlet.service(JavalinJettyServlet.kt:58)`
        `at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)`
        `at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799)`
        `at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:554)`
        `at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)`
        `at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624)`
        `at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)`
        `at io.javalin.jetty.JettyServer$start$wsAndHttpHandler$1.doHandle(JettyServer.kt:52)`
        `at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)`
        `at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:505)`
        `at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594)`
        `at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)`
        `at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355)`
        `at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)`
        `at org.eclipse.jetty.server.handler.StatisticsHandler.handle(StatisticsHandler.java:181)`
        `at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)`
        `at org.eclipse.jetty.server.Server.handle(Server.java:516)`
        `at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487)`
        `at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732)`
        `at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479)`
        `at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277)`
        `at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)`
        `at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)`
        `at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)`
        `at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338)`
        `at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315)`
        `at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173)`
        `at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131)`
        `at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409)`
        `at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)`
        `at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)`
        `at java.base/java.lang.Thread.run(Thread.java:833)

EDIT: Ok, I just tested r1424 on a clean install of Fedora KDE 39(not Kinoite), and it worked as expected, so something Fedora does with regards to their immutable systems might be the cause.

Andre-Oliveira commented 10 months ago

Have the same issue in Fedora Onyx, also an immutable spin of Fedora, but not on Arch and Ubuntu.

schroda commented 10 months ago

can you reproduce the issue with the latest preview version, enabled debug logs (via launcher or server.conf, requires server restart to take effect) and then provide the logs (logs folder in the root dir https://github.com/Suwayomi/Tachidesk-Server/wiki/The-Data-Directory)

Throun commented 10 months ago

Here's the logs, issue still persists (debug logs enabled, WebUI channel is 'preview'). application.log

schroda commented 10 months ago

does the server create a webUI dir inside the root dir and is there content inside of it, according to the logs it should exist? what happens if you download the latest webUI preview and extract it to this folder manually before starting the server?

Throun commented 10 months ago

The WebUI directory is created, and the server correctly downloads the WebUI to it if it's empty. Manually extracting the WebUI preview to the directory gives off the same errors as before.

I tested the sorayomi WebUI to see if it would make a difference. I got a similar result, but the page was the same light blue as sorayomi's startup: sorayomi So the browser must be getting something from the UI.

schroda commented 10 months ago

what does the server respond with for the different requests (browser dev tools)? is it always responding with the index.html content?

Throun commented 10 months ago

Here's what I got: console inspector network network2 style

schroda commented 10 months ago

just to make sure, there is a assets folder in webUI and the requested files exist (index-3029e971.js, index-a0ebbc76.css)? because the server can read the webUI/index.html file, but not the others and therefore, answers with the index.html file as a fallback, which causes the mime type issue. if the folder and the files exist, something must be preventing the server from accessing them

Throun commented 10 months ago

Yeah, the folder and the files exist. Everything else about the server appears to work normally, as I could connect to it from other clients, add extensions and download manga. Perhaps Fedora's the cause, but I can't think of anything they change that would affect Tachidesk like this.

Throun commented 10 months ago

Ok, I tested Tachidesk on the other official Fedora immutable desktops. Kinoite and Onyx still don't work. However, the webUI DOES work on Silverblue, which leads me to think there is a package that is only installed in Silverblue causing the problem. I'm going to try and layer some packages onto Kinoite to hopefully narrow down the issue. In the meanwhile, here's the package lists for each spin, plus regular Fedora KDE, in case they may help: pkgs-silverblue.txt pkgs-Onyx.txt pkgs-kinoite.txt pkgs-KDE.txt

acavalin commented 7 months ago

I encountered this error since the 1.0.0 release.

Device information

Steps to reproduce

I run this command (data and dl folders are empty initially):

#!/bin/sh
PWD=$HOME/suwayomi
exec /usr/bin/java \
  -Dsuwayomi.tachidesk.config.server.systemTrayEnabled=false \
  -Dsuwayomi.tachidesk.config.server.initialOpenInBrowserEnabled=false \
  -Dsuwayomi.tachidesk.config.server.rootDir=$PWD/data \
  -Dsuwayomi.tachidesk.config.server.downloadsPath=$PWD/dl \
  -Dsuwayomi.tachidesk.config.server.webUIEnabled=true \
  -Dsuwayomi.tachidesk.config.server.webUIInterface=browser \
  -Dsuwayomi.tachidesk.config.server.webUIFlavor=WebUI \
  -Dsuwayomi.tachidesk.config.server.ip=0.0.0.0 \
  -Dsuwayomi.tachidesk.config.server.port=3000 \
  -Dsuwayomi.tachidesk.config.server.downloadAsCbz=true \
  -jar $PWD/suwayomi.jar

Output

browser blank page ```html Suwayomi
```
application log ```log 12:49:51.818 [main] INFO suwayomi.tachidesk.server.ServerSetup -- Running Suwayomi-Server v1.0.0 revision r1498 12:49:52.519 [main] INFO suwayomi.tachidesk.server.util.AppMutex -- Mutex status is clear, Resuming startup. 12:49:53.382 [main] INFO suwayomi.tachidesk.server.database.DBManager -- Using h2 database version 1.4 12:49:53.675 [main] INFO de.neonew.exposed.migrations.RunMigrations -- Running migrations on database jdbc:h2:/home/cloud/suwayomi/data/database 12:49:53.756 [main] INFO de.neonew.exposed.migrations.RunMigrations -- Empty database found, creating table for migrations 12:49:53.896 [main] INFO de.neonew.exposed.migrations.RunMigrations -- Database version before migrations: null 12:49:53.897 [main] INFO de.neonew.exposed.migrations.RunMigrations -- Running migration version 1: Initial 12:49:54.433 [main] INFO de.neonew.exposed.migrations.RunMigrations -- Running migration version 2: ChapterTableIndexRename 12:49:54.461 [main] INFO de.neonew.exposed.migrations.RunMigrations -- Running migration version 3: DefaultCategory 12:49:54.508 [main] INFO de.neonew.exposed.migrations.RunMigrations -- Running migration version 4: AnimeTablesBatch1 12:49:54.618 [main] INFO de.neonew.exposed.migrations.RunMigrations -- Running migration version 5: AnimeTablesBatch2 12:49:54.702 [main] INFO de.neonew.exposed.migrations.RunMigrations -- Running migration version 6: AnimeTablesBatch3 12:49:54.818 [main] INFO de.neonew.exposed.migrations.RunMigrations -- Running migration version 7: ChapterIsDownloaded 12:49:54.888 [main] INFO de.neonew.exposed.migrations.RunMigrations -- Running migration version 8: ChapterPageCount 12:49:54.992 [main] INFO de.neonew.exposed.migrations.RunMigrations -- Running migration version 9: ChapterLastReadAt 12:49:55.030 [main] INFO de.neonew.exposed.migrations.RunMigrations -- Running migration version 10: MangaAndChapterMeta 12:49:55.076 [main] INFO de.neonew.exposed.migrations.RunMigrations -- Running migration version 11: SourceDropPartOfFactorySource 12:49:55.154 [main] INFO de.neonew.exposed.migrations.RunMigrations -- Running migration version 12: SourceIsNsfw 12:49:55.293 [main] INFO de.neonew.exposed.migrations.RunMigrations -- Running migration version 13: MangaRealUrl 12:49:55.356 [main] INFO de.neonew.exposed.migrations.RunMigrations -- Running migration version 14: MangaRemoveLengthLimit 12:49:55.461 [main] INFO de.neonew.exposed.migrations.RunMigrations -- Running migration version 15: SourceAndExtensionLangAddLengthLimit 12:49:55.586 [main] INFO de.neonew.exposed.migrations.RunMigrations -- Running migration version 16: ChapterIndexRenameToSourceOrder 12:49:55.647 [main] INFO de.neonew.exposed.migrations.RunMigrations -- Running migration version 17: ChapterFetchedAt 12:49:55.703 [main] INFO de.neonew.exposed.migrations.RunMigrations -- Running migration version 18: MangaInLibraryAt 12:49:55.739 [main] INFO de.neonew.exposed.migrations.RunMigrations -- Running migration version 19: RemoveAnime 12:49:55.863 [main] INFO de.neonew.exposed.migrations.RunMigrations -- Running migration version 20: AddMangaLastFetchedAtColumns 12:49:55.924 [main] INFO de.neonew.exposed.migrations.RunMigrations -- Running migration version 21: GlobalAndCategoryMeta 12:49:55.966 [main] INFO de.neonew.exposed.migrations.RunMigrations -- Running migration version 22: MangaThumbnailLastFetched 12:49:55.996 [main] INFO de.neonew.exposed.migrations.RunMigrations -- Running migration version 23: CategoryMetaRefFix 12:49:56.034 [main] INFO de.neonew.exposed.migrations.RunMigrations -- Running migration version 24: MangaUpdateStrategy 12:49:56.066 [main] INFO de.neonew.exposed.migrations.RunMigrations -- Running migration version 25: ChapterRealUrl 12:49:56.107 [main] INFO de.neonew.exposed.migrations.RunMigrations -- Running migration version 26: CategoryIncludeInUpdate 12:49:56.131 [main] INFO de.neonew.exposed.migrations.RunMigrations -- Running migration version 27: AddDefaultCategory 12:49:56.222 [main] INFO de.neonew.exposed.migrations.RunMigrations -- Running migration version 28: AddCascade 12:49:56.321 [main] INFO de.neonew.exposed.migrations.RunMigrations -- Running migration version 29: DropMangaDefaultCategory 12:49:56.404 [main] INFO de.neonew.exposed.migrations.RunMigrations -- Running migration version 30: FixDateUpload 12:49:56.461 [main] INFO de.neonew.exposed.migrations.RunMigrations -- Running migration version 31: AddExtensionRepo 12:49:56.517 [main] INFO de.neonew.exposed.migrations.RunMigrations -- Running migration version 32: FixExtensionRepos 12:49:56.580 [main] INFO de.neonew.exposed.migrations.RunMigrations -- Running migration version 33: TrackRecord 12:49:56.648 [main] INFO de.neonew.exposed.migrations.RunMigrations -- Running migration version 34: CategoryIncludeInDownload 12:49:56.671 [main] INFO de.neonew.exposed.migrations.RunMigrations -- Running migration version 35: TrackSearch 12:49:56.732 [main] INFO de.neonew.exposed.migrations.RunMigrations -- Running migration version 36: SourceMeta 12:49:56.775 [main] INFO de.neonew.exposed.migrations.RunMigrations -- Migrations finished successfully 12:49:56.834 [main] INFO Migration -- Running migrations, previous version 0, target version 1 12:49:56.835 [main] INFO Migration -- Running migration for version: 1 12:49:56.852 [DefaultDispatcher-worker-1] INFO suwayomi.tachidesk.server.ServerSetup -- Socks Proxy changed - enabled=false address=: , username=, password=[REDACTED] 12:49:56.966 [main] INFO suwayomi.tachidesk.manga.impl.backup.proto.ProtoBackupExport -- Creating automated backup... 12:49:57.239 [main] WARN suwayomi.tachidesk.server.util.WebInterfaceManager setupWebUI(flavor= WebUI, servedFlavor= WebUI) -- no webUI files found, starting download... 12:49:57.885 [main] INFO suwayomi.tachidesk.server.util.WebInterfaceManager downloadVersion(version= r1411, flavor= WebUI) -- Downloading WebUI zip from the Internet... downloadVersionZipFile(WebUI): Download progress: % 000000000000000000000000000001010101010101010101010101020202020202020202020202020203030303030303030303030303030404040404040404040404040404050505050505050505050505050506060606060606060606060607070707070707070708080808080808080809090909090909090910101010101010101010111111111111111111121212121212121212131313131313131313141414141414141414151515151515151515161616161616161616171717171717171717171818181818181818181919191919191919192020202020202020202121212121212121212222222222222222222323232323232323232424242424242424242425252525252525252526262626262626262627272727272727272728282828282828282829292929292929292930303030303030303031313131313131313131323232323232323232333333333333333333343434343434343434353535353535353535363636363636363636373737373737373737383838383838383838393939393939393939394040404040404040404141414141414141414242424242424242424343434343434343434444444444444444444545454545454545454646464646464646464647474747474747474748484848484848484849494949494949494950505050505050505051515151515151515152525252525252525253535353535353535353545454545454545454555555555555555555565656565656565656575757575757575757585858585858585858595959595959595959606060606060606060606161616161616161616262626262626262626363636363636363636464646464646464646565656565656565656666666666666666666767676767676767676768686868686868686869696969696969696970707070707070707071717171717171717172727272727272727273737373737373737374747474747474747475757575757575757575767676767676767676777777777777777777787878787878787878797979797979797979808080808080808080818181818181818181828282828282828282828383838383838383838484848484848484848585858585858585858686868686868686868787878787878787878888888888888888888989898989898989898990909090909090909091919191919191919192929292929292929293939393939393939394949494949494949495959595959595959596969696969696969696979797979797979797989898989898989898999999999999999999100 12:49:59.789 [main] INFO suwayomi.tachidesk.server.util.WebInterfaceManager -- downloadVersionZipFile(WebUI): Downloading WebUI Done. 12:49:59.876 [main] INFO suwayomi.tachidesk.server.util.WebInterfaceManager isLocalWebUIValid(flavor= WebUI, path= /tmp/Suwayomi-WebUI-r1411) -- Verifying WebUI files... 12:50:00.721 [main] INFO suwayomi.tachidesk.server.util.WebInterfaceManager isLocalWebUIValid(flavor= WebUI, path= /tmp/Suwayomi-WebUI-r1411) -- Validation succeeded - md5: local= 8b156bacc8cf6172353c6223153334ca; expected= 8b156bacc8cf6172353c6223153334ca 12:50:00.725 [main] INFO suwayomi.tachidesk.server.util.WebInterfaceManager downloadVersion(version= r1411, flavor= WebUI) -- Extracting WebUI zip... 12:50:00.777 [main] INFO suwayomi.tachidesk.server.util.WebInterfaceManager downloadVersion(version= r1411, flavor= WebUI) -- Extracting WebUI zip Done. 12:50:00.781 [main] INFO suwayomi.tachidesk.server.JavalinSetup -- Serving web static files for WebUI 12:50:00.818 [main] WARN io.javalin.Javalin -- JDK15 and Kotlin 1.5 break reflection in different ways - the OpenAPI plugin will not work properly. Please visit https://github.com/tipsy/javalin/issues/1193 if you want to help fix this issue. 12:50:00.818 [main] WARN io.javalin.Javalin -- You can disable this warning by doing `OpenApiVersionUtil.logWarnings = false` 12:50:05.847 [Thread-9] INFO io.javalin.Javalin -- It looks like you created a Javalin instance, but you never started it. 12:50:05.848 [Thread-9] INFO io.javalin.Javalin -- Try: Javalin app = Javalin.create().start(); 12:50:05.848 [Thread-9] INFO io.javalin.Javalin -- For more help, visit https://javalin.io/documentation#server-setup 12:50:05.849 [Thread-9] INFO io.javalin.Javalin -- To disable this message, do `JettyUtil.logIfNotStarted = false` 12:50:06.584 [main] INFO io.javalin.Javalin -- __ __ _ __ __ / /____ _ _ __ ____ _ / /(_)____ / // / __ / // __ `/| | / // __ `// // // __ \ / // /_ / /_/ // /_/ / | |/ // /_/ // // // / / / /__ __/ \____/ \__,_/ |___/ \__,_//_//_//_/ /_/ /_/ https://javalin.io/documentation 12:50:06.586 [main] INFO io.javalin.Javalin -- Starting Javalin ... 12:50:06.603 [main] INFO io.javalin.Javalin -- You are running Javalin 4.6.8 (released May 4, 2023. Your Javalin version is 300 days old. Consider checking for a newer version.). 12:50:06.822 [main] INFO io.javalin.Javalin -- Static file handler added: StaticFileConfig(hostedPath=/, directory=/home/cloud/suwayomi/data/webUI, location=EXTERNAL, precompress=false, aliasCheck=null, headers={Cache-Control=max-age=0}). File system location: '/home/cloud/suwayomi/data/webUI' 12:50:06.824 [main] INFO io.javalin.Javalin -- Static file handler added: StaticFileConfig(hostedPath=/, directory=META-INF/resources/webjars, location=CLASSPATH, precompress=false, aliasCheck=null, headers={Cache-Control=max-age=31622400}). File system location: 'jar:file:/home/cloud/suwayomi/Suwayomi-Server-v1.0.0-r1498.jar!/META-INF/resources/webjars' 12:50:06.824 [main] INFO io.javalin.Javalin -- Listening on http://0.0.0.0:3000/ 12:50:06.825 [main] INFO io.javalin.Javalin -- Javalin started in 240ms \o/ 12:50:14.968 [qtp240919651-95] INFO io.javalin.Javalin -- Exception occurred while handling static resource java.lang.NullPointerException: super.getResource(path) must not be null at io.javalin.jetty.ConfigurableHandler.getResource(JettyResourceHandler.kt:86) at io.javalin.jetty.JettyResourceHandler.handle(JettyResourceHandler.kt:41) at io.javalin.http.JavalinServlet$lifecycle$2$2.invoke(JavalinServlet.kt:51) at io.javalin.http.JavalinServlet$lifecycle$2$2.invoke(JavalinServlet.kt:46) at io.javalin.http.JavalinServletHandler.executeNextTask(JavalinServletHandler.kt:99) at io.javalin.http.JavalinServletHandler.queueNextTaskOrFinish$lambda-1(JavalinServletHandler.kt:85) at java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187) at java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309) at io.javalin.http.JavalinServletHandler.queueNextTaskOrFinish$javalin(JavalinServletHandler.kt:85) at io.javalin.http.JavalinServletHandler.executeNextTask$lambda-11$lambda-10(JavalinServletHandler.kt:119) at java.base/java.util.concurrent.CompletableFuture.uniApplyNow(CompletableFuture.java:684) at java.base/java.util.concurrent.CompletableFuture.uniApplyStage(CompletableFuture.java:662) at java.base/java.util.concurrent.CompletableFuture.thenApply(CompletableFuture.java:2168) at io.javalin.http.JavalinServletHandler.executeNextTask(JavalinServletHandler.kt:119) at io.javalin.http.JavalinServletHandler.queueNextTaskOrFinish$lambda-1(JavalinServletHandler.kt:85) at java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187) at java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309) at io.javalin.http.JavalinServletHandler.queueNextTaskOrFinish$javalin(JavalinServletHandler.kt:85) at io.javalin.http.JavalinServlet.service(JavalinServlet.kt:89) at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) at io.javalin.jetty.JavalinJettyServlet.service(JavalinJettyServlet.kt:58) at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:554) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233) at io.javalin.jetty.JettyServer$start$wsAndHttpHandler$1.doHandle(JettyServer.kt:52) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:505) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) at org.eclipse.jetty.server.Server.handle(Server.java:516) at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487) at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732) at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479) at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277) at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311) at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105) at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883) at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034) at java.base/java.lang.Thread.run(Thread.java:840) 12:50:15.036 [qtp240919651-91] INFO io.javalin.Javalin -- Exception occurred while handling static resource java.lang.NullPointerException: super.getResource(path) must not be null at io.javalin.jetty.ConfigurableHandler.getResource(JettyResourceHandler.kt:86) at io.javalin.jetty.JettyResourceHandler.handle(JettyResourceHandler.kt:41) at io.javalin.http.JavalinServlet$lifecycle$2$2.invoke(JavalinServlet.kt:51) at io.javalin.http.JavalinServlet$lifecycle$2$2.invoke(JavalinServlet.kt:46) at io.javalin.http.JavalinServletHandler.executeNextTask(JavalinServletHandler.kt:99) at io.javalin.http.JavalinServletHandler.queueNextTaskOrFinish$lambda-1(JavalinServletHandler.kt:85) at java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187) at java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309) at io.javalin.http.JavalinServletHandler.queueNextTaskOrFinish$javalin(JavalinServletHandler.kt:85) at io.javalin.http.JavalinServletHandler.executeNextTask$lambda-11$lambda-10(JavalinServletHandler.kt:119) at java.base/java.util.concurrent.CompletableFuture.uniApplyNow(CompletableFuture.java:684) at java.base/java.util.concurrent.CompletableFuture.uniApplyStage(CompletableFuture.java:662) at java.base/java.util.concurrent.CompletableFuture.thenApply(CompletableFuture.java:2168) at io.javalin.http.JavalinServletHandler.executeNextTask(JavalinServletHandler.kt:119) at io.javalin.http.JavalinServletHandler.queueNextTaskOrFinish$lambda-1(JavalinServletHandler.kt:85) at java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187) at java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309) at io.javalin.http.JavalinServletHandler.queueNextTaskOrFinish$javalin(JavalinServletHandler.kt:85) at io.javalin.http.JavalinServlet.service(JavalinServlet.kt:89) at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) at io.javalin.jetty.JavalinJettyServlet.service(JavalinJettyServlet.kt:58) at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:554) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233) at io.javalin.jetty.JettyServer$start$wsAndHttpHandler$1.doHandle(JettyServer.kt:52) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:505) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) at org.eclipse.jetty.server.Server.handle(Server.java:516) at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487) at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732) at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479) at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277) at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311) at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105) at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.produce(EatWhatYouKill.java:137) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883) at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034) at java.base/java.lang.Thread.run(Thread.java:840) 12:50:15.179 [qtp240919651-90] INFO io.javalin.Javalin -- Exception occurred while handling static resource java.lang.NullPointerException: super.getResource(path) must not be null at io.javalin.jetty.ConfigurableHandler.getResource(JettyResourceHandler.kt:86) at io.javalin.jetty.JettyResourceHandler.handle(JettyResourceHandler.kt:41) at io.javalin.http.JavalinServlet$lifecycle$2$2.invoke(JavalinServlet.kt:51) at io.javalin.http.JavalinServlet$lifecycle$2$2.invoke(JavalinServlet.kt:46) at io.javalin.http.JavalinServletHandler.executeNextTask(JavalinServletHandler.kt:99) at io.javalin.http.JavalinServletHandler.queueNextTaskOrFinish$lambda-1(JavalinServletHandler.kt:85) at java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187) at java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309) at io.javalin.http.JavalinServletHandler.queueNextTaskOrFinish$javalin(JavalinServletHandler.kt:85) at io.javalin.http.JavalinServletHandler.executeNextTask$lambda-11$lambda-10(JavalinServletHandler.kt:119) at java.base/java.util.concurrent.CompletableFuture.uniApplyNow(CompletableFuture.java:684) at java.base/java.util.concurrent.CompletableFuture.uniApplyStage(CompletableFuture.java:662) at java.base/java.util.concurrent.CompletableFuture.thenApply(CompletableFuture.java:2168) at io.javalin.http.JavalinServletHandler.executeNextTask(JavalinServletHandler.kt:119) at io.javalin.http.JavalinServletHandler.queueNextTaskOrFinish$lambda-1(JavalinServletHandler.kt:85) at java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187) at java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309) at io.javalin.http.JavalinServletHandler.queueNextTaskOrFinish$javalin(JavalinServletHandler.kt:85) at io.javalin.http.JavalinServlet.service(JavalinServlet.kt:89) at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) at io.javalin.jetty.JavalinJettyServlet.service(JavalinJettyServlet.kt:58) at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:554) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233) at io.javalin.jetty.JettyServer$start$wsAndHttpHandler$1.doHandle(JettyServer.kt:52) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:505) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) at org.eclipse.jetty.server.Server.handle(Server.java:516) at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487) at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732) at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479) at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277) at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311) at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105) at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.produce(EatWhatYouKill.java:137) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883) at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034) at java.base/java.lang.Thread.run(Thread.java:840) ```
Throun commented 1 month ago

After coming back to this last week, I believe I found the problem. In short, atomic versions of Fedora set $HOME to /var/home, and symlinks /home to it. However, aside from Silverblue, they create users during installation, and that change has not yet been added to the installer, so initial users still have $HOME as /home (users created after install are not affected).

My wonder is why this is an issue; there should be no functional difference between the two, and other programs I use work as they should with this 'bug'. Maybe symlinks break how the server delivers files?