Apps von Volume(x) nach Volume(y) verschieben

QTip

Super-Moderator
Teammitglied
Mitglied seit
04. Sep 2008
Beiträge
2.341
Punkte für Reaktionen
13
Punkte
84
Ich habe mal ein kleines Shell-Script geschrieben, welches die Apps automatisch von volume(x) nach volume(y) verschiebt und die SymLinks anpasst.

Da alle installierten Pakete, unabhängig vom Volumen, einen Teil in /var/packages ablegen, ist dies der Ausgangspunkt für die Ermittlung der entsprechenden Pakete. Unter anderem gibt es den SymLink "target", der mit seiner Quelle Aufschluss über den eigentlichen Ort preisgibt, also auf welchem volume(x) die Anwendung tatsächlich liegt. Der SymLink "etc" zeigt immer auf /usr/syno/etc/packages/<Paketname> und muss nicht angepasst werden. Eine App kann leicht von einem volume(x)/@appstore zu einem volume(y)/@appstore verschoben werden. Das Entscheidene ist, insbesondere für das Paketzentrum, das der SymLink "target" auf die korrekte Quelle zeigt. Alle anderen Pfade sind zu 99% relativ oder verweisen nicht auf ein bestimmtes Volumen.

Parameter
Als Parameter müssen min. das Quell- und Zielvolume übergeben werden. Standardmäßig und als Sicherheit wird nur ein "Trockenlauf" durchgeführt, mit dem entsprechenden Keyword "notest" als 3. Parameter wird es dann ernst. Beim Start werden die übergebenen Werte überprüft und bei Fehlern darauf hingewiesen. Die Kommentare und Ausgaben sind in englisch gehalten.

Beispiel mit Trockenlauf: ./app_mover.sh volume1 volume2
Beispiel ohne Trockenlauf: ./app_mover.sh volume1 volume2 notest

Installation
Anmeldung auf der DiskStation per Telnet oder SSH. Falls noch nicht geschehen einen Wechsel zum root mit sudo -i durchführen. Das Script im Anhang an einem geeignetem Ort auf der DiskStation sichern und mit chmod +x app_mover.sh ausführbar machen.

Durchführung
  • Script als Trockenlauf ausführen
  • Ausgaben prüfen
  • Script "final" ausführen
  • Ausgaben prüfen
  • Paket-Zentrum aufrufen und bei den verschobenen Paketen den Abschnitt "Installiertes Volume" überprüfen, ebenfalls dürfen durch das Verschieben keine "defekten" Pakete existieren
Wichtig: Immer erst den Trockenlauf durchführen und die Ausgabe prüfen!

Scriptablauf
Das Script überprüft zuerst die Eingaben auf Gültigkeit und belegt einige Variablen mit Werten. Nun werden die gefundenen Verzeichnisse der Apps in /var/packages in eine Variable eingelesen. Möchte man nicht alle Anwendungen verschieben, kann dies durch Füllen der Variablen WANTEDAPPS mit den Namen der Apps (umgeben von Anführungsstrichen), getrennt durch Leerzeichen, erreicht werden. Da ein Bearbeiten von unbekannten SymLinks nicht gewünscht ist, wird mittels der Variable SLNAMES auf bekannte SymLinks geprüft und auch nur die in SLCNAMES genannten bei Bedarf angepasst. Unbekannte SymLinks müssen im Anschluss bei Bedarf durch den Benutzer bearbeitet werden. Die ermittelten Verzeichnisse der Apps werden nun per Schleife durchlaufen, die enthaltenen SymLinks ermittelt und mit den SLNAMES verglichen. Wird ein unbekannter SymLink gefunden, gibt es diesbezüglich eine Meldung und der SymLink wird übersprungen. Ist der SymLink bekannt wird des weiteren geprüft, ob die Quelle des SymLinks mit der übergebenen Quelle übereinstimmt und bei einem negativen Ergebnis wird diese App ebenfalls übersprungen. Ist die übergebene Quelle mit der ermittelten Quelle des SymLinks identisch, dann wird im nächsten Schritt auf Vorhandensein des Verzeichnisses im Ziel geprüft. Ist das Ergebnis wieder negativ werden die folgenden Schritte übersprungen. Ist "Trockenlauf" gewählt, erfolgt nur eine Meldung über das Verschieben und Anpassen des SymLinks. Da einige Apps feste SymLinks im Verzeichnis /usr/syno/synoman/webman/3rdparty besitzen, werden im Anschluss auch Diese auf die Existens von "volume" in der Quelle untersucht und bei Bedarf angepasst.

Changelog

  • 13/07/2016 - App mover 0.1
    • initial Release
  • 16/07/2016 - App mover 0.2
    • Unterstützung für Pakete mit Leerzeichen im Namen
    • Pakete werden nun automatisch gestoppt/gestartet (wenn notwendig) und der alte Status im Anschluss wiederhergestellt
    • zusatzliche Sicherheitsabfrage vor Beginn
      Achtung:
      bedingt durch die Verarbeitung von Paketen mit Leerzeichen im Namen, müssen gewünschte Anwendungsnamen in der Variable "WANTEDAPPS" nun mit Anführungsstrichen umgeben sein.
      Beispiel: WANTEDAPPS=("APP1" "APP2")
Obwohl ich das Script mehrfach überpüft und etliche Testläufe durchgeführt habe, ist es sicherlich nicht vollkommen fehlerfrei. Jegliche Nutzung liegt in der Verantwortung des Benutzers, ich übernehme keine Haftung für eventuell auftretende Schäden.

Nun viel Erfolg beim Verschieben, Verbesserungsvorschläge nehme ich gerne entgegen.

Da das Script nun zu lang für den Post ist, habe ich die fertige Datei im Anhang bereitgestellt. Bitte nach dem Download die Endung ".txt" enfernen.
 

Anhänge

  • app_mover_v0.2.sh.txt
    9 KB · Aufrufe: 1.172
Zuletzt bearbeitet:

Ap0phis

Benutzer
Mitglied seit
16. Dez 2010
Beiträge
6.731
Punkte für Reaktionen
3
Punkte
158
Das erfreut doch das Synology-Herz! :)

Danke! Werde ich sicher mal gebrauchen können.
 
Mitglied seit
30. Okt 2012
Beiträge
265
Punkte für Reaktionen
0
Punkte
0
Genial! Danke!!!
 

wezoromax

Benutzer
Mitglied seit
27. Jun 2016
Beiträge
105
Punkte für Reaktionen
1
Punkte
18
Ich dokumentiere hier mal meinen Test:

- Skript mit nem Editor gespeichert und auf die NAS geschoben (Netzlaufwerk)
- SSH Verbindung, sudo-i
- Gegoogelt wie ausführbar machen (chmod +x app_mover.sh)
- Angefangen Pakete per Hand (im Paketmanager) zu stoppen.... geht doch bestimmt auch per Konsole -> Thread
- bei dem StartStop-Skript gemerkt, dass was mit der Formatierung nicht stimmt.... Zeilenumbrüche im Windows-Editor Notepad++ auf Unix gestellt (CF ->LF oder so), ebenso beim mover Skript
- Pakete per Hand anhalten (praktisch... alle)
- Festgestellt: Java lässt sich nicht im Paketmanager anhalten...
- start-stop-status stop in /var/package/Java8/scripts gibt keine Rückmeldung, und im Paketcenter wird Java weiter als laufend ausgegeben.... kann mit ps -elf keinen Prozess ausmachen der direkt nach Java klingt...
- beschlossen Java zu deinstallieren

-Skript test Trockendurchlauf:
Sieht alles gut aus, bis auf:
/bin/find: `/var/packages/Plex': No such file or directory
package Plex
/bin/find: `Media': No such file or directory
package Media
/bin/find: `Server': No such file or directory
--> Das einzige doofe Paket mit Leerzeichen im Namen. Hab dort eh nichts eingestellt, wird auch erstmal deinstalliert. --> Evtl. noch das Skript anpassbar?

- Noch ein Trockendurchlauf. Alles Gut
- Anschnallen und Parameter "notest"
- Ausgabe identisch mit Trockendurchlauf, ready... gut
- "installiertes Volume" hat sich geändert -> Gut!
- Java erst wieder installieren, damit keine Pakete anfangen zu weinen, wegen Abhängigkeit und so
- Pakete starten... soweit alles gut :D

Einzig das JDownloader Paket lässt sich nicht starten.... Protokoll sagt aus, dass es noch eine .jar von volume1 (alt) starten möchte...
Momentan Abhilfe -> Das Paket allein wieder zurück. Irgendwann deinstallieren und neuinstallieren (konfig sichern)

Fazit: Funktioniert Super! Danke!
Evtl. kann man noch anpassen, dass auch Paketnamen mit Leerzeichen verarbeitet werden
 

QTip

Super-Moderator
Teammitglied
Mitglied seit
04. Sep 2008
Beiträge
2.341
Punkte für Reaktionen
13
Punkte
84
Danke für deinen Test, habe aufgrund deiner Rückmeldungen eine neue Version hochgeladen.

  • 16/07/2016 - App mover 0.2
    • Unterstützung für Pakete mit Leerzeichen im Namen
    • Pakete werden nun automatisch gestoppt/gestartet (wenn notwendig) und der alte Status im Anschluss wiederhergestellt
    • zusatzliche Sicherheitsabfrage vor Beginn
      Achtung:
      bedingt durch die Verarbeitung von Paketen mit Leerzeichen im Namen, müssen gewünschte Anwendungsnamen in der Variable "WANTEDAPPS" nun von Anführungsstrichen umgeben sein.
      Beispiel: WANTEDAPPS=("APP1" "APP2")
 
Zuletzt bearbeitet:

wezoromax

Benutzer
Mitglied seit
27. Jun 2016
Beiträge
105
Punkte für Reaktionen
1
Punkte
18
Danke!
Läuft wunderbar!

Das Einzige was mich irritiert, im "notest" also "Ernst"-Fall kommt folgende Zeile:
*** dry run, test only! ***
Dabei werden aber die Änderungen vogenommen.

Auch wird bei einem falschen Aufruf ausgegeben:
"To test before making the final changes, use notest as third parameter"
Dabei sollte es doch eher heißen, "To make the final changes after testing, use notest as third parameter" ?
Oder lieber "To test before making the final changes, omit/miss out notest as third parameter"
 

QTip

Super-Moderator
Teammitglied
Mitglied seit
04. Sep 2008
Beiträge
2.341
Punkte für Reaktionen
13
Punkte
84
Danke für die Info, habe Beides sofort korrigiert und neue Version hochgeladen.
 

wezoromax

Benutzer
Mitglied seit
27. Jun 2016
Beiträge
105
Punkte für Reaktionen
1
Punkte
18
Da ist jetzt ein " in Zeile 24 am Anfang verloren gegangen

/.../app_mover_v0.2.sh: line 25: syntax error near unexpected token `<'
/.../app_mover_v0.2.sh: line 25: ` echo "${0} <source_volume> <target_volume> <notest>"'

Ansonsten aber Verhalten wie erwartet.
 
Zuletzt bearbeitet:

QTip

Super-Moderator
Teammitglied
Mitglied seit
04. Sep 2008
Beiträge
2.341
Punkte für Reaktionen
13
Punkte
84
Ups, habe den Fehler korrigiert :)
 

whitbread

Benutzer
Mitglied seit
24. Jan 2012
Beiträge
1.294
Punkte für Reaktionen
54
Punkte
68
Im Zuge der BTFRS-Migration (volume1 muss kpl. neu erstellt werden) habe ich folgende Pakete mit dem Script verschoben:

  • MediaServer
  • AudioStation
  • VideoStation
  • SnapshotReplication
  • CMS
  • LogCenter
  • NoteStation
  • Docker
Den Erfolg konnte ich bislang nur teilweise prüfen, da ich noch Daten ausgelagert und daher Pakete deaktiviert habe, scheint aber soweit zu laufen - Vielen Dank fürs Sript.

Was mich jetzt noch umtreibt ist:
1.) Sind auch die Datenbanken von Video- und Audiostation mit verschoben worden?
2.) Auf volume1 befindet sich bei mir jetzt noch ein Ordner @docker - kann wer sagen, ob ich den auch einfach verschieben kann?
3.) Nicht getraut habe ich mich das Paket Virtualization zu verschieben, da dies nicht gestoppt werden kann. Meine V-DSM-Instanzen liegem zwar nicht auf volume1, aber ich habe alle wichtigen Änderungen nur in den virtuellen Instanzen vorgenommen, daher sind die bei mir quasi "lebenswichtig".

Falls wer helfen kann wäre ich hoch erfreut.
 

QTip

Super-Moderator
Teammitglied
Mitglied seit
04. Sep 2008
Beiträge
2.341
Punkte für Reaktionen
13
Punkte
84
Die Datenbanken werden nicht angefasst, da hier nur die Apps verschoben werden. Ich habe noch nie gesehen, dass sich die Datenbanken auf /volume2 befunden haben. Der Ort wird durch die Environmentvariable PGDATA bestimmt und zeigt immer auf /var/services/pgsql, was als SymLink ausgelegt ist und auf /volume1/@database/pgsql verweist. Du könntest versuchen die Apps Video-, Audiostation und Datenbank zu stoppen, auf ein anderes Volume zu verschieben, den SymLink anzupassen und danach wieder zu starten...keine Garantie, im Zweifel läßt danach die Apps während der Migration aus.
Verzeichnisse wie @docker oder @appstore sind für z.B. Samba und der File Station unsichtbare Verzeichnisse, werden vom System angelegt und lassen sich auch nicht per Konfigurationsdialog auf ein anderes Volume verschieben. Evtl. legt das System diese Verzeichnisse beim Fehlen selbst neu an. Du könntest die App Docker stoppen, @docker verschieben und im Anschluß wieder starten oder während der Migration einfach nicht benutzen, also deaktiviert lassen.
 
Zuletzt bearbeitet:

whitbread

Benutzer
Mitglied seit
24. Jan 2012
Beiträge
1.294
Punkte für Reaktionen
54
Punkte
68
Danke für die Info.

Habe zwischenzeitlich Virtualization erfolgreich gestestet.
Das Verschieben des Docker-Paketes geht zwar, aber wenn ich dann das volume1 mit @docker lösche geht nix mehr. Deinstallation, volume1 löschen, Installation auf volume2 geht aber. Dan´nn wird auch @docker im volume2 neu angelegt.

Hinsichtlich der Datenbanken werde ich dann einfach eine Kopie zwischenlagern. Es entsteht ja direkt nach dem Löschen von volume1 ein neues volume1, welche halt anfangs kpl. leer ist.
 

tokka

Benutzer
Mitglied seit
17. Nov 2016
Beiträge
16
Punkte für Reaktionen
0
Punkte
0
SEHR GUT - du hast mir den Nachmittag an einem Draußenistsuperwettersamstag gerettet, vielen Dank für das Script!
Wo wohnst du, ich schulde dir ein paar Bier!

Tipp für andere: Ich hatte den Inhalt mit Apples hauseigenem Editor "TextEdit" geöffnet, daraus kopiert und über Nano in eine neue Datei direkt auf dem Server eingefügt. Bei der Ausführung hat NICHTS funktioniert, überall "- unknown SymLink, pls adjust yourself!". Ich konnte mich erinnern, dass dieser Editor schon bei meinen Programmierversuchen in Python vor einem halben Jahr dauernd Fehler verursacht hat, irgendwas in den Zeichensätzen war dauernd. In dem Fall habe ich nun TextWrangler, das ich eh auf dem Rechner habe (andere ebenfalls anständige Editoren gehen auch) angeworfen und daraus kopiert - alles läuft! :)


Erfolgreich verschoben: "PythonModule" "AntiVirus" "CardDAVServer" "Perl"
Diskstation: DS 1815+
System: DSM 6.1.3-15125 Update 7
AppMover: V0.2

Bei mir hat es Perl zerschossen, aber das konnte direkt über den Paketmanager mit Klick auf das orangene "reparieren" ganz oben neben der App (wie sonst in grün "aktualisieren") behoben werden.
EDIT: CardDAV hab ich deinstallieren (unter beibehaltung der Datenbankinhalte!) und neu installieren müssen. Edit2: laut Paketzentrum "angehalten", taucht aber im Menu auf und lässt sich öffnen. Kontakte werden im Adressbuch allerdings nicht angezeigt
EDIT3: gut, hätte ich vielleicht mal diesen Hinweis lesen sollen. Backup hab ich zum Glück. Nur neu installieren und richtig ausführen lässt es sich nicht mehr..

Beste Grüße
Tokka
 
Zuletzt bearbeitet:

tobe2b

Benutzer
Mitglied seit
08. Dez 2016
Beiträge
11
Punkte für Reaktionen
0
Punkte
0
Bin irgendwie zu dumm :(
Also ich hab die PhotoStation leider auf dem Volume3 installiert und würde sie gerne auf Volume1 verschieben. Unter /var/packages finde ich den Ordner (PhotoStation). Also habe ich folgende Parameter mitgegeben:

chmod +x app_mover_v0.2.sh volume3 volume1 WANTEDAPPS=("PhotoStation")

Hier kommt erstmal folgende Fehlermeldung: -ash: syntax error near unexpected token `('
zweiter Versuch ohne Klammer:

chmod +x app_mover_v0.2.sh volume3 volume1 WANTEDAPPS="PhotoStation"

Sieht etwas besser aus, aber:
chmod: cannot access ‘volume3’: No such file or directory
chmod: cannot access ‘volume1’: No such file or directory
chmod: cannot access ‘WANTEDAPPS=PhotoStation’: No such file or directory

Muss ich ganze Pfade angeben?
 

QTip

Super-Moderator
Teammitglied
Mitglied seit
04. Sep 2008
Beiträge
2.341
Punkte für Reaktionen
13
Punkte
84
Also vorab solltest das Script mit dem Befehl
Rich (BBCode):
chmod +x app_mover_v0.2.sh
ausführbar machen und nicht erst in der Aufrufzeile.

Du musst die Variable "WANTEDAPPS" im Script (Zeile 18) mit den gewünschten Apps füllen, per Kommandozeile habe ich das nicht eingebaut.

PhotoStation im Paket-Zentrum stoppen, den Aufruf
Rich (BBCode):
./app_mover_v0.2.sh volume3 volume1
durchführen und die Ausgaben checken. Nachdem Alles orndnungsgemäß im Trockenlauf durchgeführt wurde, kannst du hinter dem Aufruf das Schlüsselwort "notest" anfügen. (ohne "").
Rich (BBCode):
./app_mover_v0.2.sh volume3 volume1 notest
 

tobe2b

Benutzer
Mitglied seit
08. Dez 2016
Beiträge
11
Punkte für Reaktionen
0
Punkte
0
Da komm ich mir jetzt schon ein bisschen doof vor :rolleyes:
Hat tip top funktioniert. Super Script!
Wie sind die Erfahrungen mit der Videostation? Die würde ich auch gerne moven, aber da habe ich viel Arbeit investiert in Beschriftung, Covers, Berechtigungen usw, klappt das alles?
Danke für das Script, hat mir eben sehr geholfen!
 
Zuletzt bearbeitet von einem Moderator:

tauchloewe

Benutzer
Mitglied seit
24. Feb 2015
Beiträge
105
Punkte für Reaktionen
4
Punkte
18
Guten Morgen, das sieht zwar genau nach der Lösung meiner Frage aus (Vol2 soll raus, also müssen die paar Pakete die drauf sind auf Vol1) ... aber ich muss gestehen, dazu bin ich zu ... DAU. Gibt es keinen simpleren Weg? Ist die Konfiguration der Pakete weg wenn man sie einfach nochmal installiert nachdem man Vol2 rausgenommen hat?
Danke und ..sorry...
 

QTip

Super-Moderator
Teammitglied
Mitglied seit
04. Sep 2008
Beiträge
2.341
Punkte für Reaktionen
13
Punkte
84
Bei vielen Synology Eigenen und auch einigen 3rdParty Paketen erhält man vor der eigentlichen Deinstallation die Auswahl, ob man die Einstellungen/Konfigurationen ebenfalls löschen möchte. Allerdings sieht man diesen Dialog erst, wenn man die Abfrage "Möchten Sie dieses Paket deinstallieren?" mit "Ja" bestätigt. Wenn dir das zu gefährlich ist, wirst du um eine Neueinrichtung oder dieses Tool nicht herum kommen.

Was genau ist denn für dich "zu DAU", das Anmelden auf der Shell per Putty oder das Handling des Scripts?
 

tauchloewe

Benutzer
Mitglied seit
24. Feb 2015
Beiträge
105
Punkte für Reaktionen
4
Punkte
18
Hi Qtip, danke für die Antwort, die Abfrage kommt da leider nicht, aber ist ok, habe es jetzt runtergeworfen und nochmal neu... hoffe ich habe keine Parameter übersehen.
Ich gehöre zu denen die sich da nicht tief mit befassen wollen, das Ding muss laufen, mit Skripten etc habe ich keine sonstigen Berührungen oder so, da mag ich einfach nicht ran, da stehen Aufwand sich damit auseinander zu setzen und Nutzen (einmal in dem Fall) nicht in relation.
So, genug off- Topic, sorry dafür.

danke auf jeden Fall!!!!
 

HoP3

Benutzer
Mitglied seit
16. Sep 2017
Beiträge
20
Punkte für Reaktionen
0
Punkte
1
Hallo,

ich habe das Problem das Sich die Apps nicht verschieben lassen.
bzw. ich keinen root zugriff bekommen :/
kann mir jemand helfen?
 


 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat