mediathekview / MediathekView

Das Programm MediathekView durchsucht die Online-Mediatheken verschiedener Sender
https://mediathekview.de
GNU General Public License v3.0
855 stars 95 forks source link

Linux: Migration in 13.7.0 schlägt fehl, MV startet nicht #573

Closed joehni closed 3 years ago

joehni commented 3 years ago

Beim ersten Start nach der Installation erscheint nach dem Splash-Screen ein Fehlerdialog:

Migration fehlgeschlagen

Bei der Migration der Historie der Filme ist ein Fehler aufgetreten. Das Programm kann nich tfortfahre und wird beendet.

Bitte überprüfen Sie Fehlermeldungen und suchen Sie Hilfe im Forum.

Stacktrace: java.sql.SQLException: Error opening connection at org.sqlite.SQLiteConnection.open(SQLiteConnection.java:239) at org.sqlite.SQLiteConnection.(SQLiteConnection.java:61) at org.sqlite.jdbc3.JDBC3Connection.(JDBC3Connection.java:28) at org.sqlite.jdbc4.JDBC4Connection.(JDBC4Connection.java:21) at org.sqlite.JDBC.createConnection(JDBC.java:115) at org.sqlite.SQLiteDataSource.getConnection(SQLiteDataSource.java:410) at org.sqlite.SQLiteDataSource.getConnection(SQLiteDataSource.java:398) at mediathek.controller.history.SeenHistoryMigrator.migrate(SeenHistoryMigrator.java:81) at mediathek.Main.migrateSeenHistory(Main.java:444) at mediathek.Main.main(Main.java:407) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:564) at com.exe4j.runtime.LauncherEngine.launch(LauncherEngine.java:84) at com.install4j.runtime.launcher.UnixLauncher.start(UnixLauncher.java:66) at install4j.mediathek.Main_MediathekView.main(Unknown Source) Caused by: java.lang.Exception: No native library found for os.name=Linux, os.arch=x86_64, paths=[/org/sqlite/native/Linux/x86_64:/usr/java/packages/lib:/usr/lib64:/lib64:/lib:/usr/lib] at org.sqlite.SQLiteJDBCLoader.loadSQLiteNativeLibrary(SQLiteJDBCLoader.java:367) at org.sqlite.SQLiteJDBCLoader.initialize(SQLiteJDBCLoader.java:67) at org.sqlite.core.NativeDB.load(NativeDB.java:63) at org.sqlite.SQLiteConnection.open(SQLiteConnection.java:235) ... 16 more

Die 13.6.0 lief ohne Probleme. Was hat sich an der DB-Verbindung verändert?

alex1702 commented 3 years ago

Die 13.6.0 hatte noch keine DB

alex1702 commented 3 years ago

Seltsam auch diese "No native library found for os.name=Linux, os.arch=x86_64, paths=[/org/sqlite/native/Linux/x86_64:/usr/java/packages/lib:/usr/lib64:/lib64:/lib:/usr/lib]". Wie genau hast du es installiert? Und welches Linux nutzt du?

derreisende77 commented 3 years ago

versuche mal mit deinem packet manager sqlite3 auf dem system zu installieren und danach neu zu starten

joehni commented 3 years ago

Ein Gentoo Linux

$ uname -a
Linux floh 5.4.80-gentoo-r1-x86_64 #1 SMP Mon Nov 30 17:53:41 CET 2020 x86_64 Intel(R) Core(TM) i7 CPU 920 @ 2.67GHz GenuineIntel GNU/Linux

sqlite ist aktuell 3.33.0

Beim Start der 13.6.0 wird man ja dazu aufgefordert 13.7.0 herunterzuladen (die 13.6.0 startet nur, wenn der Download wenigstens angefangen hat, ansonsten kommt das Hauptfenster nicht mehr). Dann das tar nach /opt entpackt und dann aus dem Mediathekview-Verzeichnis heraus mit ./Mediathekview gestartet. Ein Start mit -e gibt folgendes aus:

/opt/MediathekView $ ./MediathekView -e
[INFO ] [main] mediathek.Main - Portable Mode: false
[TRACE] [main] mediathek.Main - Configuring for non-portable mode
[TRACE] [main] mediathek.Main - setupPortableMode: 196.2 ms
[DEBUG] [main] mediathek.Main - === Java Information ===
[INFO ] [main] mediathek.Main - Programmstart: 2020-12-22T00:57:05.873896472
[INFO ] [main] mediathek.Main - Version: 13.7.0
[DEBUG] [main] mediathek.Main - maxMemory: 2048 MB
[DEBUG] [main] mediathek.Main - Java:
[DEBUG] [main] mediathek.Main - Vendor: AdoptOpenJDK
[DEBUG] [main] mediathek.Main - VMname: OpenJDK 64-Bit Server VM
[DEBUG] [main] mediathek.Main - Version: 15.0.1
[DEBUG] [main] mediathek.Main - Runtimeversion: 15.0.1+9
[DEBUG] [main] mediathek.Main - Architecture: amd64
[DEBUG] [main] mediathek.Main - ===
[DEBUG] [main] mediathek.Main - === Hardware Information ===
[DEBUG] [main] mediathek.Main - Intel(R) Core(TM) i7 CPU         920  @ 2.67GHz
 1 physical CPU package(s)
 4 physical CPU core(s)
 8 logical CPU(s)
Identifier: Intel64 Family 6 Model 26 Stepping 4
ProcessorID: A7C1FBFF001006A4
Microarchitecture: Nehalem (Server)
[DEBUG] [main] mediathek.Main - CPU is 64bit: true
[DEBUG] [main] mediathek.Main - === Memory Information ===
[DEBUG] [main] mediathek.Main - Available: 8.9 GiB/15.6 GiB
[DEBUG] [main] mediathek.Main - === Operating System ===
[DEBUG] [main] mediathek.Main - GNU/Linux Gentoo unknown (unknown) build 5.4.80-gentoo-r1-x86_64
[INFO ] [main] mediathek.Main - === JavaVM Parameter ===
-Xmx2G
--enable-preview
-DexternalUpdateCheck
[INFO ] [main] mediathek.Main - ========================
[INFO ] [main] mediathek.Main - Startparameter: -e
[TRACE] [main] mediathek.Main - Programmpfad: /opt/MediathekView/
[INFO ] [main] mediathek.Main - Verzeichnis Einstellungen: /home/joehni/.mediathek3
[TRACE] [main] mediathek.Main - L&F property is empty, setting L&F
[TRACE] [main] mediathek.Main - mediathek.xml exists
[TRACE] [main] mediathek.Main - migrating old config settings
[DEBUG] [main] mediathek.config.MVConfig - User-Agent: MediathekView
[INFO ] [main] mediathek.config.Daten - Konfig wurde gelesen!
[INFO ] [main] mediathek.controller.history.SeenHistoryMigrator - Start old history migration.
[TRACE] [main] mediathek.controller.history.SeenHistoryMigrator - Reading old entries
[TRACE] [main] mediathek.controller.history.SeenHistoryMigrator - historyEntries size: 12436
Failed to load native library:sqlite-3.32.3.2-3b9aca99-8c74-41f7-88e0-d8e5080d987b-libsqlitejdbc.so. osinfo: Linux/x86_64
java.lang.UnsatisfiedLinkError: /tmp/sqlite-3.32.3.2-3b9aca99-8c74-41f7-88e0-d8e5080d987b-libsqlitejdbc.so: /tmp/sqlite-3.32.3.2-3b9aca99-8c74-41f7-88e0-d8e5080d987b-libsqlitejdbc.so: failed to map segment from shared object
[ERROR] [main] mediathek.Main - migrateSeenHistory
java.sql.SQLException: Error opening connection
        at org.sqlite.SQLiteConnection.open(SQLiteConnection.java:239) ~[MediathekView.jar:?]
        at org.sqlite.SQLiteConnection.<init>(SQLiteConnection.java:61) ~[MediathekView.jar:?]
        at org.sqlite.jdbc3.JDBC3Connection.<init>(JDBC3Connection.java:28) ~[MediathekView.jar:?]
        at org.sqlite.jdbc4.JDBC4Connection.<init>(JDBC4Connection.java:21) ~[MediathekView.jar:?]
        at org.sqlite.JDBC.createConnection(JDBC.java:115) ~[MediathekView.jar:?]
        at org.sqlite.SQLiteDataSource.getConnection(SQLiteDataSource.java:410) ~[MediathekView.jar:?]
        at org.sqlite.SQLiteDataSource.getConnection(SQLiteDataSource.java:398) ~[MediathekView.jar:?]
        at mediathek.controller.history.SeenHistoryMigrator.migrate(SeenHistoryMigrator.java:81) ~[MediathekView.jar:?]
        at mediathek.Main.migrateSeenHistory(Main.java:444) [MediathekView.jar:?]
        at mediathek.Main.main(Main.java:407) [MediathekView.jar:?]
        at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
        at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64) ~[?:?]
        at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
        at java.lang.reflect.Method.invoke(Method.java:564) ~[?:?]
        at com.exe4j.runtime.LauncherEngine.launch(LauncherEngine.java:84) [i4jruntime.jar:?]
        at com.install4j.runtime.launcher.UnixLauncher.start(UnixLauncher.java:66) [i4jruntime.jar:?]
        at install4j.mediathek.Main_MediathekView.main(Unknown Source) [launcher9ad06d59.jar:?]
Caused by: java.lang.Exception: No native library found for os.name=Linux, os.arch=x86_64, paths=[/org/sqlite/native/Linux/x86_64:/usr/java/packages/lib:/usr/lib64:/lib64:/lib:/usr/lib]
        at org.sqlite.SQLiteJDBCLoader.loadSQLiteNativeLibrary(SQLiteJDBCLoader.java:367) ~[MediathekView.jar:?]
        at org.sqlite.SQLiteJDBCLoader.initialize(SQLiteJDBCLoader.java:67) ~[MediathekView.jar:?]
        at org.sqlite.core.NativeDB.load(NativeDB.java:63) ~[MediathekView.jar:?]
        at org.sqlite.SQLiteConnection.open(SQLiteConnection.java:235) ~[MediathekView.jar:?]
        ... 16 more

Wenigstens sieht man jetzt worauf er zugreift, es scheint, ihr verwendet eine eingepackte native lib. Bei Linux ist der Start von Anwendungen aus /tmp heraus oft aus Sicherheitsgründen unterbunden. Das könnte hier zuschlagen. https://patrik.kernstock.net/2013/01/linux-mehr-sicherheit-durch-tmp-partition-optionen-noexec/ Typischerweise sind for /tmp diese Optionen gesetzt:

derreisende77 commented 3 years ago

die native lib muss aus dem java jar entpackt werden. Die meisten Java Apps entpacken automatisch nach /tmp. Versuche mal das MV startup skript anzupassen und dort den Parameter -Djava.io.tmpdir=<path_nach_irgendwo_ausserhalb_tmp> einzubauen. Damit sollte es dann hoffentlich funktionieren.

joehni commented 3 years ago

Klappt. Danke!

Damit kann ich auch wieder mein eigenes Setup verwenden:

$ ls -l /opt/MediathekView
lrwxrwxrwx 1 root root 20 Dec 22 01:22 MediathekView -> MediathekView-13.7.0
$ cat /usr/local/bin/MediathekView
#!/bin/sh

export INSTALL4J_JAVA_HOME_OVERRIDE="`java-config --select-vm openjdk-bin-15 -O`"
export INSTALL4J_ADD_VM_PARAMS="-Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel -Djava.io.tmpdir=/home/joehni/tmp"
cd /opt/MediathekView
./MediathekView

Wer will Java 15 schon mehrfach auf der Disk? ;-)

ilu33 commented 2 years ago

@derreisende77 The solution and the exact location where to put this (uncomment line 6 and use quotes) should be included in the FAQ.

derreisende77 commented 2 years ago

Feel free to send a PR for this :)