hawihoney Posted July 13, 2022 Share Posted July 13, 2022 (edited) Das kürzliche Fiasko mit dem Plugin "Unassigned Devices Preclear" (Falsche Abhängigkeiten hebelten alle User Skripte aus und erforderte letztlich einen Neustart) hat mir wieder vor Augen geführt, wie gefährlich diese ganzen Plugins und Tools sein können. Deshalb möchte ich das weitestgehend ablösen und isolieren. Das Plugin "Dev Tools" konnte ich zwischenzeitlich ablösen. Bleibt bei mir noch das Plugin "Nerd Tools" übrig von dem ich sehr intensiv die folgenden Tools nutze: python3 python-pip python-setuptools screen rar unrar Als nächstes wollte ich mich nun also um Python kümmern. Hier laufen dutzende Python Skripte die ich entweder manuell auf der Konsole aufrufe oder via User Script Plugin. Meine Idee ist, dass ich Python komplett als Docker Container installiere (gibt es wohl nur im Docker Hub). Und statt meine Skripte wie folgt aufzurufen ... python3 /mnt/disk1/Projekte/********/Plex/SOURCE/SetEpisodeTitle.py --title "westworld" ... müsste ich das dann doch wie folgt aufrufen, oder? Voraussetzung wäre dann allerdings, dass das Container Mapping /mnt --> /mnt existiert. docker exec <python_container> python3 /mnt/disk1/Projekte/********/Plex/SOURCE/SetEpisodeTitle.py --title "westworld" 1.) Ist meine Vermutung richtig? 2.) Und wenn das so ginge, gäbe es die Möglichkeit "docker exec <python_container> python3" auf einen Alias/Export (heißt das so?) "python3" zu setzen? 3.) Welchen Python Container würdet Ihr empfehlen? 4.) Nachtrag: In manchen Python Skripte greife ich wiederum auf andere Docker Container (wie MakeMKV, MKVToolNix) zu. Das wird dann wahrscheinlich nicht gehen, oder? Vielen Dank. Edited July 13, 2022 by hawihoney Quote Link to comment
alturismo Posted July 13, 2022 Share Posted July 13, 2022 anstelle Nerd Tools zu nutzen, boot extra, pack da deine gewollten Pakete rein ? Quote Link to comment
hawihoney Posted July 13, 2022 Author Share Posted July 13, 2022 15 minutes ago, alturismo said: anstelle Nerd Tools zu nutzen, boot extra, pack da deine gewollten Pakete rein ? Klar, das kenne ich. Das Problem ist aber, dass irgendein Paket andere Pakete bzw. das OS himmeln kann. Oder vice versa, durch einen Update des OS werden Pakete ausgehebelt. Ich würde gerne unter allen Umständen vermeiden, dass mir so etwas wie Anfang dieser Woche noch einmal passiert. Ganz eliminieren kann ich es nicht, denn Unassigned Devices, etc sind nahezu unverzichtbar und mit sehr vielen eigenen Paketen extrem nah am System. Aber alles was geht, will ich jetzt vom OS isolieren. Und da kam mir Docker in den Sinn. Ich hatte gerade einen notwendigen Disk-Rebuild (24 Stunden) gestartet, da habe ich bemerkt, dass ein gerade zuvor durchgeführter UD-Preclear Update (11.07.) alle meine User Skripte behinderte. Die liefen nicht mehr. Und on top war dann noch gleich ein Fehler in UD selbst am 04.07. reingerutscht, der dann auch noch einige Skripte, die zumindest auf der Konsole liefen, ebenfalls behinderte. Gut ich hatte die Fehler in beiden Plugins sofort gemeldet, aber das dauert halt seine Zeit. Für knapp 24 Stunden konnte ich nix machen, nix lief. Nur ein Reboot nach 24 Stunden half. Mittlerweile frage ich mich, warum man das Plugin System nicht mit einer Rollback Funktion versieht ... und solange es das nicht gibt würde ich gerne das eigentliche OS mehr abschotten. Quote Link to comment
alturismo Posted July 13, 2022 Share Posted July 13, 2022 2 hours ago, hawihoney said: und solange es das nicht gibt würde ich gerne das eigentliche OS mehr abschotten. naja, dann würde ich mir LXC anschauen, hat @ich777 ja eingeführt, damit hast du ein recht vollwertiges OS, lässt dann alles darin laufen was so ansteht ... wäre das eine Option ? musst nur deine Volumes mounten usw ... das UAD Thema habe ich mitbekommen, nur das würde ich jetzt nicht wirklich überbewerten ... auch wenn ich es verstehe daher habe ich auch Nerd Tools ex da dies anfangs mit 6.9 meine ich auch nicht mehr lief ... und da es ja sinnfrei war weil es ja nichts anderes macht ... in deinem Fall würde ich mir eine Umgebung schaffen wo ich dann halt intern auch alles ausführe, Bsp LXC, dann halt alles auch darin ausführen, sprich die Apps die du benötigst dann auch da installieren und auf die separaten Docker zu verzichten, von einem Docker im anderen was ausführen ... wird nur über Umwege gehen, da machst du mehr Baustellen auf wie es zu belassen ... Ansatz wäre da, Befehl als Textdatei ablassen, ein script nimmt das auf und führt dann wiederum docker exec ... aus, aber wie gesagt, das wäre jetzt nicht mein Weg ich arbeite ja auch mit scripts zum reencoden, ebooks umwandeln, Aufnahmen remuxen, moven, ... da ist dann immer einiges zu machen, nutze aber auch kein python dafür sondern simpel bash scripting. 1 Quote Link to comment
hawihoney Posted July 13, 2022 Author Share Posted July 13, 2022 (edited) 1 hour ago, alturismo said: kein python dafür sondern simpel bash Danke für Deine Ausführungen. Nur am Rande: Ich arbeite intensiv mit der Plex Web API (Beispiele): https://support.plex.tv/articles/201638786-plex-media-server-url-commands/ Wenn ich das mit Bash machen soll - ui ui. Edited July 13, 2022 by hawihoney Quote Link to comment
alturismo Posted July 13, 2022 Share Posted July 13, 2022 47 minutes ago, hawihoney said: Wenn ich das mit Bash machen soll - ui ui. ich nutze curl in bash, aber nicht intensiv ... nur library update nach move und analys nach reencode schau Die LXC an ... Quote Link to comment
mgutt Posted July 14, 2022 Share Posted July 14, 2022 On 7/13/2022 at 10:28 AM, hawihoney said: ... müsste ich das dann doch wie folgt aufrufen, oder? Voraussetzung wäre dann allerdings, dass das Container Mapping /mnt --> /mnt existiert. docker exec <python_container> python3 /mnt/disk1/Projekte/********/Plex/SOURCE/SetEpisodeTitle.py --title "westworld" Ja, aber dann muss der Pfad /mnt/disk1/Projekte/.../skriptname.py und natürlich auch alle Pfade auf die das Skript zugreifen können soll, auch 1:1 in dem Docker verfügbar gemacht werden, weil dein Befehl "python3 ..." wird dann ja innerhalb des Containers ausgeführt. Aber ich denke das ist dir klar. Hier ein Beispiel: root@thoth:~# ls -lah /mnt/user/Marc/Scripts/python total 4.0K drwxrwxrwx 1 marc users 27 Jul 14 16:50 ./ drwxrwxrwx 1 marc users 20 Jul 14 16:50 ../ -rw-rw-rw- 1 marc users 40 Jul 14 16:56 helloworld.py root@thoth:~# root@thoth:~# docker run -it --rm --name helloworld.py -v /mnt/user/Marc/Scripts/python:/mnt/user/Marc/Scripts/python python:3 python /mnt/user/Marc/Scripts/python/helloworld.py Unable to find image 'python:3' locally 3: Pulling from library/python d836772a1c1f: Pull complete 66a9e63c657a: Pull complete d1989b6e74cf: Pull complete c28818711e1e: Pull complete 5084fa7ebd74: Pull complete 7f162c881e4f: Pull complete e3f48ccb2876: Pull complete 315a1520c10e: Pull complete eba0bda87095: Pull complete Digest: sha256:ce21f64c4c3ae5743ddd5f4d4d9ca5614fddcc4f8c6e32ff2a7ff9a2e8744e8d Status: Downloaded newer image for python:3 Hello World! Nicht wundern, der Python-Container ist nach der Ausführung nicht in der Basis-Ansicht auf der Docker-Übersicht zu sehen. Erst wenn du auf Advanced umschaltest, siehst du einen "orphan" Container (er wurde also automatisch "gelöscht"): Das ist bewusst so gemacht, weil es keinen Sinn macht den Container ständig laufen zu lassen. Solange der Orphan da ist, geht die Ausführung auch sehr schnell, weil er dann den Container nicht komplett neu herunterladen muss: root@thoth:~# docker run -it --rm --name helloworld.py -v /mnt/user/Marc/Scripts/python:/mnt/user/Marc/Scripts/python python:3 python /mnt/user/Marc/Scripts/python/helloworld.py Hello World! Beachte außerdem, dass du für jedes Skript einen eigenen "--name scriptname.py" angibst, weil der für jedes Skript einen eigenen Container starten muss, ansonsten kommt es zu einer Fehlermeldung, wenn parallel ein zweites Skript gestartet wird: So wäre es also richtig: Eventuell kann es sein, dass du die zusätzlichen gewünschten Kommandos (unrar etc) in deinem Skript auf Existenz prüfen und dann nachinstallieren musst. Auch das sollte dann nur beim ersten Mal installiert werden und danach ständig verfügbar sein, solange der Orphan existiert. Quote Link to comment
hawihoney Posted July 14, 2022 Author Share Posted July 14, 2022 (edited) 37 minutes ago, mgutt said: Aber ich denke das ist dir klar. Genau. Das meinte ich mit "Container Mapping /mnt --> /mnt". In Deinen Ausführungen geht es um das Ausführen eines Skripts mit dem Starten eines neuen oder "geparkten" Containers. Ich dachte in meiner naiven Denke an einen Python Container der wie alle anderen Container installiert ist (z.B. MKVToolNix) und gestartet bleibt. Und dessen Inneres ich dann nutzen kann - quasi als isoliertes Installationsverzeichnis. Und mit "docker exec" nutze ich das dann. So wie ich mir die MKVToolNix, MakeMKV und Plex Container zunutze mache. Das ist aus einer "include" meiner Python Skripte. Genau das würde ich auch gerne mit Python selbst erreichen: #### Container names (required) ################### plex_container = "plex" makemkv_container = "MakeMKV" mkvtoolnix_container = "MKVToolNix" #### Container tools (do not edit) ##### plex_media_scanner = f"docker exec {plex_container} /usr/lib/plexmediaserver/Plex\\ Media\\ Scanner" makemkvcon = f"docker exec {makemkv_container} env HOME=/config /opt/makemkv/bin/makemkvcon" mkvinfo = f"docker exec {mkvtoolnix_container} /usr/bin/mkvinfo" mkvpropedit = f"docker exec {mkvtoolnix_container} /usr/bin/mkvpropedit" ... command = f'{mkvpropedit} "{video_media_part_file}"{info}' Edited July 14, 2022 by hawihoney Quote Link to comment
mgutt Posted July 14, 2022 Share Posted July 14, 2022 58 minutes ago, hawihoney said: Ich dachte in meiner naiven Denke an einen Python Container der wie alle anderen Container installiert ist (z.B. MKVToolNix) und gestartet bleibt Das kannst du probieren, aber vom Prinzip verschwendet man damit nur Ressourcen, weil der läuft ja für nichts. Quote Link to comment
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.