Jellyfin Forum
SOLVED: How to fix "WebRootPath was not found" error - Printable Version

+- Jellyfin Forum (https://forum.jellyfin.org)
+-- Forum: Support (https://forum.jellyfin.org/f-support)
+--- Forum: Troubleshooting (https://forum.jellyfin.org/f-troubleshooting)
+--- Thread: SOLVED: How to fix "WebRootPath was not found" error (/t-solved-how-to-fix-webrootpath-was-not-found-error)



How to fix "WebRootPath was not found" error - theolaa - 2024-05-13

Hello, I recently updated my Jellyfin server to 10.9.1 which runs on a Linux Mint 20.3 box.

Previously there was no issue starting Jellyfin as a service, but now I am getting this error when starting Jellyfin:
Code:
May 12 22:58:42 THEO-FILE-SERVER jellyfin[1282]: [22:58:42] [WRN] The WebRootPath was not found: /var/lib/jellyfin/wwwroot. Static files may be unavailable.
May 12 22:58:42 THEO-FILE-SERVER jellyfin[1282]: [22:58:42] [ERR] Hosting failed to start

So it seems there is some issue with hosting the web client, but I don't know how to fix this.
I would be very grateful if anyone has some advice for this situation.

Thanks,
Theo L

Here is the full stack trace (retrieved using sudo systemctl status jellyfin -n 100):
Code:
May 12 23:35:27 THEO-FILE-SERVER systemd[1]: Started Jellyfin Media Server.
May 12 23:35:30 THEO-FILE-SERVER jellyfin[1378]: [23:35:30] [INF] Jellyfin version: 10.9.1
May 12 23:35:30 THEO-FILE-SERVER jellyfin[1378]: [23:35:30] [INF] Environment Variables: ["[JELLYFIN_ADDITIONAL_OPTS, ]", "[JELLYFIN_FFMPEG_OPT, --ffmpeg=/usr/lib/jellyfin-ffmpeg/ffmpeg]","[JELLYFIN_DATA_DIR, /var/lib/jellyfin]", "[JELLYFIN_WEB_OPT, --webdir=/usr/share/jellyfin/web]", "[JELLYFIN_CONFIG_DIR, /etc/jellyfin]", "[JELLYFIN_LOG_DIR, /var/log/jellyfin]", "[JELLYFIN_USER, jellyfin]","[JELLYFIN_ARGS, $JELLYFIN_WEB_OPT $JELLYFIN_FFMPEG_OPT $JELLYFIN_SERVICE_OPT $JELLYFIN_NOWEBAPP_OPT $JELLFIN_ADDITIONAL_OPTS --datadir $JELLYFIN_DATA_DIR --configdir $JELLYFIN_CONFIG_DIR --logdir $JELLYFIN_LOG_DIR --cachedir $JELLYFIN_CACHE_DIR]", "[JELLYFIN_CACHE_DIR, /var/cache/jellyfin]"]
May 12 23:35:30 THEO-FILE-SERVER jellyfin[1378]: [23:35:30] [INF] Arguments: ["/usr/lib/jellyfin/bin/jellyfin.dll", "--webdir=/usr/share/jellyfin/web", "--ffmpeg=/usr/lib/jellyfin-ffmpeg/ffmpeg"]
May 12 23:35:30 THEO-FILE-SERVER jellyfin[1378]: [23:35:30] [INF] Operating system: Linux Mint 20.3
May 12 23:35:30 THEO-FILE-SERVER jellyfin[1378]: [23:35:30] [INF] Architecture: X64
May 12 23:35:30 THEO-FILE-SERVER jellyfin[1378]: [23:35:30] [INF] 64-Bit Process: True
May 12 23:35:30 THEO-FILE-SERVER jellyfin[1378]: [23:35:30] [INF] User Interactive: True
May 12 23:35:30 THEO-FILE-SERVER jellyfin[1378]: [23:35:30] [INF] Processor count: 8
May 12 23:35:30 THEO-FILE-SERVER jellyfin[1378]: [23:35:30] [INF] Program data path: /var/lib/jellyfin
May 12 23:35:30 THEO-FILE-SERVER jellyfin[1378]: [23:35:30] [INF] Log directory path: /var/log/jellyfin
May 12 23:35:30 THEO-FILE-SERVER jellyfin[1378]: [23:35:30] [INF] Config directory path: /etc/jellyfin
May 12 23:35:30 THEO-FILE-SERVER jellyfin[1378]: [23:35:30] [INF] Cache path: /var/cache/jellyfin
May 12 23:35:30 THEO-FILE-SERVER jellyfin[1378]: [23:35:30] [INF] Web resources path: /usr/share/jellyfin/web
May 12 23:35:30 THEO-FILE-SERVER jellyfin[1378]: [23:35:30] [INF] Application directory: /usr/lib/jellyfin/bin/
May 12 23:35:30 THEO-FILE-SERVER jellyfin[1378]: [23:35:30] [INF] Setting cache path: /var/cache/jellyfin
May 12 23:35:30 THEO-FILE-SERVER jellyfin[1378]: [23:35:30] [INF] Loading assemblies
May 12 23:35:30 THEO-FILE-SERVER jellyfin[1378]: [23:35:30] [INF] Loaded assembly Jellyfin.Plugin.OpenSubtitles, Version=20.0.0.0, Culture=neutral, PublicKeyToken=null from /var/lib/jellyfin/plugins/Open Subtitles_20.0.0.0/Jellyfin.Plugin.OpenSubtitles.dll
May 12 23:35:30 THEO-FILE-SERVER jellyfin[1378]: [23:35:30] [INF] Loaded assembly Jellyfin.Plugin.SubtitleExtract, Version=4.0.0.0, Culture=neutral, PublicKeyToken=null from /var/lib/jellyfin/plugins/Subtitle Extract_4.0.0.0/Jellyfin.Plugin.SubtitleExtract.dll
May 12 23:35:30 THEO-FILE-SERVER jellyfin[1378]: [23:35:30] [INF] Defined LAN addresses: ["127.0.0.1/8", "10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16"]
May 12 23:35:30 THEO-FILE-SERVER jellyfin[1378]: [23:35:30] [INF] Defined LAN exclusions: []
May 12 23:35:30 THEO-FILE-SERVER jellyfin[1378]: [23:35:30] [INF] Using LAN addresses: ["127.0.0.1/8", "10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16"]
May 12 23:35:30 THEO-FILE-SERVER jellyfin[1378]: [23:35:30] [INF] Using bind addresses: ["127.0.0.1", "192.168.0.100"]
May 12 23:35:30 THEO-FILE-SERVER jellyfin[1378]: [23:35:30] [INF] Remote IP filter is Allowlist
May 12 23:35:30 THEO-FILE-SERVER jellyfin[1378]: [23:35:30] [INF] Filter list: []
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]: [23:35:34] [INF] Loaded plugin: Open Subtitles 20.0.0.0
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]: [23:35:34] [INF] Loaded plugin: Subtitle Extract 4.0.0.0
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]: [23:35:34] [INF] Loaded plugin: TMDb 10.9.1.0
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]: [23:35:34] [INF] Loaded plugin: Studio Images 10.9.1.0
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]: [23:35:34] [INF] Loaded plugin: OMDb 10.9.1.0
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]: [23:35:34] [INF] Loaded plugin: MusicBrainz 10.9.1.0
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]: [23:35:34] [INF] Loaded plugin: AudioDB 10.9.1.0
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]: [23:35:34] [INF] Kestrel is listening on 127.0.0.1
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]: [23:35:34] [INF] Kestrel is listening on 192.168.0.100
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]: [23:35:34] [INF] Kestrel is listening on 10.5.0.2
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]: [23:35:34] [WRN] The WebRootPath was not found: /var/lib/jellyfin/wwwroot. Static files may be unavailable.
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]: [23:35:34] [ERR] Hosting failed to start
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]: System.Net.Sockets.SocketException (99): Cannot assign requested address
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]:    at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress)
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]:    at System.Net.Sockets.Socket.Bind(EndPoint localEP)
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]:    at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransportOptions.CreateDefaultBoundListenSocket(EndPoint endpoint)
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]:    at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketConnectionListener.Bind()
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]:    at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransportFactory.BindAsync(EndPoint endpoint, CancellationToken cancellationToken)
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]:    at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure.TransportManager.BindAsync(EndPoint endPoint, ConnectionDelegate connectionDelegate, EndpointConfig endpointConfig, CancellationToken cancellationToken)
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]:    at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.<>c__DisplayClass28_0`1.<<StartAsync>g__OnBind|0>d.MoveNext()
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]: --- End of stack trace from previous location ---
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]:    at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.BindEndpointAsync(ListenOptions endpoint, AddressBindContext context, CancellationToken cancellationToken)
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]:    at Microsoft.AspNetCore.Server.Kestrel.Core.ListenOptions.BindAsync(AddressBindContext context, CancellationToken cancellationToken)
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]:    at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.EndpointsStrategy.BindAsync(AddressBindContext context, CancellationToken cancellationToken)
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]:    at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.BindAsync(ListenOptions[] listenOptions, AddressBindContext context, Func`2 useHttps, CancellationToken cancellationToken)
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]:    at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.BindAsync(CancellationToken cancellationToken)
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]:    at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.StartAsync[TContext](IHttpApplication`1 application, CancellationToken cancellationToken)
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]:    at Microsoft.AspNetCore.Hosting.GenericWebHostService.StartAsync(CancellationToken cancellationToken)
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]:    at Microsoft.Extensions.Hosting.Internal.Host.<StartAsync>b__15_1(IHostedService service, CancellationToken token)
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]:    at Microsoft.Extensions.Hosting.Internal.Host.ForeachService[T](IEnumerable`1 services, CancellationToken token, Boolean concurrent, Boolean abortOnFirstException, List`1 exceptions, Func`3 operation)
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]: [23:35:34] [ERR] Kestrel failed to start! This is most likely due to an invalid address or port bind - correct your bind configuration in network.xml and try again
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]: [23:35:34] [FTL] Error while starting server
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]: System.Net.Sockets.SocketException (99): Cannot assign requested address
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]:    at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress)
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]:    at System.Net.Sockets.Socket.Bind(EndPoint localEP)
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]:    at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransportOptions.CreateDefaultBoundListenSocket(EndPoint endpoint)
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]:    at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketConnectionListener.Bind()
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]:    at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransportFactory.BindAsync(EndPoint endpoint, CancellationToken cancellationToken)
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]:    at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure.TransportManager.BindAsync(EndPoint endPoint, ConnectionDelegate connectionDelegate, EndpointConfig endpointConfig, CancellationToken cancellationToken)
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]:    at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.<>c__DisplayClass28_0`1.<<StartAsync>g__OnBind|0>d.MoveNext()
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]: --- End of stack trace from previous location ---
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]:    at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.BindEndpointAsync(ListenOptions endpoint, AddressBindContext context, CancellationToken cancellationToken)
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]:    at Microsoft.AspNetCore.Server.Kestrel.Core.ListenOptions.BindAsync(AddressBindContext context, CancellationToken cancellationToken)
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]:    at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.EndpointsStrategy.BindAsync(AddressBindContext context, CancellationToken cancellationToken)
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]:    at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.BindAsync(ListenOptions[] listenOptions, AddressBindContext context, Func`2 useHttps, CancellationToken cancellationToken)
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]:    at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.BindAsync(CancellationToken cancellationToken)
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]:    at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.StartAsync[TContext](IHttpApplication`1 application, CancellationToken cancellationToken)
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]:    at Microsoft.AspNetCore.Hosting.GenericWebHostService.StartAsync(CancellationToken cancellationToken)
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]:    at Microsoft.Extensions.Hosting.Internal.Host.<StartAsync>b__15_1(IHostedService service, CancellationToken token)
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]:    at Microsoft.Extensions.Hosting.Internal.Host.ForeachService[T](IEnumerable`1 services, CancellationToken token, Boolean concurrent, Boolean abortOnFirstException, List`1 exceptions, Func`3 operation)
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]:    at Microsoft.Extensions.Hosting.Internal.Host.StartAsync(CancellationToken cancellationToken)
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]:    at Jellyfin.Server.Program.StartServer(IServerApplicationPaths appPaths, StartupOptions options, IConfiguration startupConfig)
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]: [23:35:34] [INF] Running query planner optimizations in the database... This might take a while
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]: [23:35:34] [INF] Disposing CoreAppHost
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]: [23:35:34] [INF] Disposing MusicBrainzArtistProvider
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]: [23:35:34] [INF] Disposing MusicBrainzAlbumProvider
May 12 23:35:34 THEO-FILE-SERVER jellyfin[1378]: [23:35:34] [INF] Disposing PluginManager
May 12 23:35:34 THEO-FILE-SERVER systemd[1]: jellyfin.service: Succeeded.



RE: How to fix "WebRootPath was not found" error - TheDreadPirate - 2024-05-13

The WebRootPath message is harmless. I also see it in my log and it hasn't been a problem.

The actual problem is this message.

Code:
System.Net.Sockets.SocketException (99): Cannot assign requested address

This sounds like you have another jellyfin instance running on the same port. Or you specified a bind IP that is no longer available.


RE: How to fix "WebRootPath was not found" error - theolaa - 2024-05-13

(2024-05-13, 11:39 AM)TheDreadPirate Wrote: This sounds like you have another jellyfin instance running on the same port.  Or you specified a bind IP that is no longer available.

Interesting, do you know where I can find the config for the network settings?


RE: How to fix "WebRootPath was not found" error - TheDreadPirate - 2024-05-13

/etc/jellyfin/network.xml has all your network related configs, including ports, bind addresses, LAN addresses, etc.


RE: How to fix "WebRootPath was not found" error - theolaa - 2024-05-13

(2024-05-13, 04:38 PM)TheDreadPirate Wrote: /etc/jellyfin/network.xml has all your network related configs, including ports, bind addresses, LAN addresses, etc.

Thanks a bunch. I'll look into this when I'm home later.


RE: How to fix "WebRootPath was not found" error - theolaa - 2024-05-14

(2024-05-13, 04:38 PM)TheDreadPirate Wrote: /etc/jellyfin/network.xml has all your network related configs, including ports, bind addresses, LAN addresses, etc.

Here is my network.xml file:

Code:
<?xml version="1.0" encoding="utf-8"?>
<NetworkConfiguration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <BaseUrl />
  <EnableHttps>false</EnableHttps>
  <RequireHttps>false</RequireHttps>
  <CertificatePath />
  <CertificatePassword />
  <InternalHttpPort>8096</InternalHttpPort>
  <InternalHttpsPort>8920</InternalHttpsPort>
  <PublicHttpPort>8096</PublicHttpPort>
  <PublicHttpsPort>8920</PublicHttpsPort>
  <AutoDiscovery>true</AutoDiscovery>
  <EnableUPnP>false</EnableUPnP>
  <EnableIPv4>true</EnableIPv4>
  <EnableIPv6>false</EnableIPv6>
  <EnableRemoteAccess>true</EnableRemoteAccess>
  <LocalNetworkSubnets />
  <LocalNetworkAddresses />
  <KnownProxies />
  <IgnoreVirtualInterfaces>true</IgnoreVirtualInterfaces>
  <VirtualInterfaceNames>
    <string>veth</string>
  </VirtualInterfaceNames>
  <EnablePublishedServerUriByRequest>false</EnablePublishedServerUriByRequest>
  <PublishedServerUriBySubnet />
  <RemoteIPFilter />
  <IsRemoteIPFilterBlacklist>false</IsRemoteIPFilterBlacklist>
</NetworkConfiguration>

I ran a port scanner and I can confirm that I don't have any services running on either port 8096 or 8920. What did you mean earlier about specifying a bind IP that is no longer available? The file doesn't have any IPs specified anywhere, is it maybe missing something somewhere then?


RE: How to fix "WebRootPath was not found" error - theolaa - 2024-05-14

I believe I have fixed the issue. I read that removing the network.xml file will cause the server to regenerate it on next startup, so I moved it to my Documents as a backup, and rebooted my machine. The jellyfin service then regenerated its network.xml file and successfully started itself. Thank you for your advice!