jellyfin / jellyfin-plugin-opensubtitles

https://jellyfin.org
GNU General Public License v3.0
131 stars 27 forks source link

OpenSubtitles Crashes the latest Docker Jellyfin #19

Open jaydenthorup opened 5 years ago

jaydenthorup commented 5 years ago
[04:27:23] [INF] Loading assemblies,
[04:27:23] [INF] Loaded assembly Jellyfin.Plugin.PlaybackReporting, Version=3.0.0.0, Culture=neutral, PublicKeyToken=null from /config/plugins/Playback Reporting/Jellyfin.Plugin.PlaybackReporting.dll,
[04:27:23] [INF] Loaded assembly Jellyfin.Plugin.OpenSubtitles, Version=7.0.0.0, Culture=neutral, PublicKeyToken=null from /config/plugins/Open Subtitles/Jellyfin.Plugin.OpenSubtitles.dll,
[04:27:23] [INF] Disposing CoreAppHost,
[04:27:23] [FTL] Unhandled Exception,
System.IO.FileNotFoundException: Could not load file or assembly 'MediaBrowser.Controller, Version=10.4.1.0, Culture=neutral, PublicKeyToken=null'. The system cannot find the file specified.,
,
File name: 'MediaBrowser.Controller, Version=10.4.1.0, Culture=neutral, PublicKeyToken=null',
   at System.Reflection.RuntimeAssembly.GetExportedTypes(RuntimeAssembly assembly, ObjectHandleOnStack retTypes),
   at System.Reflection.RuntimeAssembly.GetExportedTypes(),
   at Emby.Server.Implementations.ApplicationHost.GetTypes(IEnumerable`1 assemblies)+MoveNext(),
   at System.Collections.Generic.LargeArrayBuilder`1.AddRange(IEnumerable`1 items),
   at System.Collections.Generic.EnumerableHelpers.ToArray[T](IEnumerable`1 source),
   at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source),
   at Emby.Server.Implementations.ApplicationHost.DiscoverTypes(),
   at Emby.Server.Implementations.ApplicationHost.InitAsync(IServiceCollection serviceCollection),
   at Jellyfin.Server.Program.StartApp(StartupOptions options),
,
   at Jellyfin.Server.Program.Main(String[] args),
   at Jellyfin.Server.Program.<Main>(String[] args),
,
Unhandled Exception: System.IO.FileNotFoundException: Could not load file or assembly 'MediaBrowser.Controller, Version=10.4.1.0, Culture=neutral, PublicKeyToken=null'. The system cannot find the file specified.,
,
   at System.Reflection.RuntimeAssembly.GetExportedTypes(RuntimeAssembly assembly, ObjectHandleOnStack retTypes),
   at System.Reflection.RuntimeAssembly.GetExportedTypes(),
   at Emby.Server.Implementations.ApplicationHost.GetTypes(IEnumerable`1 assemblies)+MoveNext(),
   at System.Collections.Generic.LargeArrayBuilder`1.AddRange(IEnumerable`1 items),
   at System.Collections.Generic.EnumerableHelpers.ToArray[T](IEnumerable`1 source),
   at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source),
   at Emby.Server.Implementations.ApplicationHost.DiscoverTypes(),
   at Emby.Server.Implementations.ApplicationHost.InitAsync(IServiceCollection serviceCollection),
   at Jellyfin.Server.Program.StartApp(StartupOptions options),
   at Jellyfin.Server.Program.Main(String[] args),
   at Jellyfin.Server.Program.<Main>(String[] args),
Aborted (core dumped),
a-r-db commented 4 years ago

I agree. :( same problem here. I am going to try different versions. I tried 6.0 release and it installed without crashing... It seems 7.0 crashes especially when it upgrades on reboot. I running the Ubuntu package jellyfin.

marconian commented 4 years ago

I had the same problem. It is searching for the assemblies in the plugin folder. Copiing the MediaBrowser.*.dll files to the plugin directory fixed it for me.

cp /usr/lib/jellyfin/bin/MediaBrowser.* /var/lib/jellyfin/plugins/'OpenSubtitles'/

Misterke commented 4 years ago

Hi all, just in case you hit the above, but can't use the fix above because you're running jellyfin as a docker container, then perhaps my experience might help.

I had Jellyfin inside a jellyfin/jellyfin docker on a Pi3, but I had all the config stuff (including the plugins) mapped to an external folder. So, my workaround was to cd to /jellyfin folder inside the image folder of the jellyfin docker (/var/lib/docker/overlay/686c27052dd10eb448f095e1d5f8fcd3e08ff1a0d20245f53378f0b063f3bf6c/root/jellyfin in my case) and then do: for i in MediaBrowser*; do ln -s "/jellyfin/$i" "/home/jellyfin/config/plugins/Open Subtitles/$i"; done where /home/jellyfin/config was the folder that was mapped to /config in the docker container. That did the trick.

The added advantage here is that the jellyfin docker image can still be update. As long as all the MediaBrowser stuff remains in /jellyfin, the symlinks will remain valid.

Keep safe!

jmullentech commented 4 years ago

@Misterke Thank you for posting that!!

In my case, also using Docker, the easiest way for me to accomplish this was to drop into a Bash session inside the container (via docker exec) and navigate over to /config/data and then use @marconian's method of copying the files over with cp /usr/lib/jellyfin/bin/MediaBrowser.* plugins/Open\ Subtitles/

Restarted the jellyfin service from within the container and she's good to go.

Thanks to both of you, as well as @jaydenthorup for reporting this one. First issue I've had with Jellyfin in the year or so I've used it. Annoyed but with your help, it was a quick fix. So thanks for that!

ETA: Might be worth mentioning that I also have my /config path mapped to an external volume. But to get the files from within the container _to the volume requires dropping into a shell. Or at least, that's the easiest way I found.

TLDR: Issuing cp /usr/lib/jellyfin/bin/MediaBrowser.* /config/data/plugins/Open\ Subtitles/ from a shell session within the container should fix this for anyone with issues.

fernandu00 commented 1 year ago

You guys saved me! I'm running the latest version of jellyfin in a docker container inside a pi2 and that did the trick! besides the command cp /usr/lib/jellyfin/bin/MediaBrowser.* /config/data/plugins/Open\ Subtitles/ from a shell session inside my jellyfin container, I changed ownership of the copied files to match my jellyfin user just in case because the files were from root user and root group so I used chown and chgrp in order to give my jellyfin user the ownership and to its group. I don´t know if I needed that but I've had many problems with user permissions inside docker already..so..