- Mitglied seit
- 04. Sep 2008
- Beiträge
- 2.341
- Punkte für Reaktionen
- 14
- Punkte
- 84
Ich habe mal ein kleines Shell-Script geschrieben, welches die Apps automatisch von volume(x) nach volume 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/@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
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
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.
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/@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
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")
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
Zuletzt bearbeitet: