rene_charbonnea
I'm new here

Deployment von Linux FS auf Windows Webserver

Jump to solution

Hallo zusammen,

ich hätte mal wieder eine Frage:

Ich habe eine Frage/ein Problem zum Thema deployment. Wir haben mehrere FS Entwicklungsserver von welchen einer unter Linux und 2 unter Windows laufen.

Die Windows basierten Systeme werden hauptsächlich für Projekte verwendet bei denen wir mitten in der Entwicklung stecken und somit häufig getestet wird/werden muss. Die Linux Kiste ist dann eher für die Projekte die bereits abgschlossen sind und unsere eigenen Sites.

Die Server auf welche die Entwickler deployen (SAP Systeme) sind leider Windows basiert.

Bisher sieht die Konstellation wie folgt aus:

Projekt liegt auf einem der Windows FS Server.

In der Auftragsverwaltung sind manuelle Deployment Jobs ins "lokale Dateisystem" eingerichtet.

Allerdings gehen die in Wirklichkeit via \\testserver.domänenname\freigabenname auf den Windows basierten Testserver.

Das ganze funktioniert auch einwandfrei.

Wenn ich jetzt auf dem Testserver eine Freigabe für "JEDER" einrichte und darauf dem "User" (JEDER) Änderungsrechte (auf die Freigabe und dem Dateisystem)

gebe und dann ein deployment auf dem Linux FS Server einrichte, dann erhalte ich als Rückmeldung, das der Test erfolgreich war (SMBClient ist auf dem Linux Server eingerichtet).

Führe ich dann das deployment manuell aus, verläuft dies ebenfalls erfolgreich. Auf der Freigabe kommt jedoch nichts an.

Unser bisheriges Verfahren (Einrichtung eines statischen Mountpoints in der /etc/fstab und anschließendes deployment in das "lokale" Dateisystem) kann ich den Kollegen aus dem Frontend nicht zumuten. Das kann ich für unsere statischen Projekte weiter beibehalten, aber keinesfalls für die Entwicklungsprojekte.

Die Variante rsync+ssh ist zwar ganz nett und ein guter Ansatz, aber irgendwie unpraktisch. Denn auch hier muss eine Menge konfiguriert und eingestellt werden.

Allerdings brachte mich das auf eine Idee und hierfür bräuchte ich mal ein Feedback ob das möglich ist.

Mir schwebt folgendes Szenario in der Auftragsverwaltung vor:

  1. Generierung der Seite
  2. Aufruf eines Skriptes (mount Befehl; siehe unten)
  3. Deployment ins "lokale" Dateisystem
  4. Aufruf eines Skriptes (umount Befehl)

Damit müsste doch theoretisch alles abgedeckt sein.


Der Vorteil wäre, dass die Kollegen lediglich auf dem Testserver eine Freigabe einrichten müssten und einem Dienstkonto Berechtigungen geben müssten und 2 Parameter im "Mount Skript" anpassen (Freigabenname + Servername) müssten.

Auf dem Windows Testserver müsste nichts installiert/konfiguriert werden (außer eben der Freigabe) und ich muss den Kollegen keine Linux Kentnisse zumuten.


Wenn das möglich wäre könnte ich auch endlich unsere Windows FS Server abschalten... Smiley Happy

Der Mount Befehl könnte/müsste so aussehen:

mount //<FQDN des Servers>/<Freigabenname>  /mnt/<mountpoint> cifs username=<Domaene>\\<Username>,password=<Passwort>,dir_mode=0777,file_mode=0777,uid=101

Wenn man es noch schön macht definiert man irgendwo im Header ein paar Variablen, damit man nicht im gesamten Skript schauen muss welche Parameter man ändern kann/muss. Sowie sinnvollerweise eine Möglichkeit einen User (+Passwort?!) zu definieren der das Skript ausführt.

Da ich aber keine Ahnung von beanshell habe wollte ich Fragen ob das überhaupt grundsätzlich möglich ist. Falls ja, wie schwer wäre es denn wohl so ein Skript zu schreiben (plus ein umount Skript)?

Grüße aus Eschborn

René

0 Kudos
1 Solution

Accepted Solutions

Hallo alle zusammen,

ich habe nun die "perfekte" Lösung für mein Problem gefunden.

Ich habe mir (von einem guten Freund und Linux/Java Guru) ein kleines Debian Paket schreiben lassen (ist nix

Debian spezifisches, hier ist aber die Installation am einfachsten!).

Es handelt sich dabei um 2 kleine C-Skripte die durch die 2 Beanshell Skripte (die in der Firstspirit GUI verwaltet werden)

angestoßen werden!

Sobald das Debian Paket (über "dpkg -L firstspirit-cifs-deploy_1.0-1_i386.deb" sieht man wo überall Daten abgelegt werden) installiert ist (Abhängigkeiten wie smbfs und cifs-utils werden über das Paket abgefangen!) muss nur noch zwei Skripte in der Auftragsverwaltung angelegt werden (am besten benennt man die auch mount bzw. umount). In den Eigenschaften der Skripte gibt man nun die notwendigen Parameter in der passenden Reihenfolge ein und weißt ihnen Werte zu.

Wenn das erledigt ist kann man den deploy auf einen "lokalen" Mountpoint ausführen. Smiley Happy

Und fertig ist das deployment von Linux auf Windows...

Wenn Interesse besteht kann ich auch gerne eine saubere Doku in Form eine Blog Beitrags erstellen.

Ich gebe die Nutzung zu Testzwecken für jeden Interessierten frei.

Da ich das ganze bisher aber nur auf unserer eigenen Infrastruktur getestet habe (und keinen direkten Support leisten kann), kann ich (noch) nicht dazu raten das ganze in Produktivinstanzen zu nutzen/testen.

View solution in original post

0 Kudos
5 Replies
hoebbel
Crownpeak employee

Hallo René,

ich habe zwar keine tiefgehende Ahnung von Linux, aber dafür einen Blogbeitrag geschrieben, in dem ein Linux Skript aufgerufen wird und ein Parameter übergeben wird:

Veröffentlichen ohne Sprachverzeichnis

Interessant sind hierbei in diesem Zusammenhang die folgenden Zeilen aus dem Skript dort:

cmd1.add("/home/fs41/firstspirit4/temp/rename.sh");
cmd1.add(context.getPath());

Die erste übergibt den Namen des Skriptes, die zweite den [ersten] Parameter, der an das Skript übergeben wird.

Du kannst auf diese Art entweder ein Skript aufrufen und Parametern übergeben oder direkt den gewünschten Aufruf zusammenbauen. Der Trick besteht darin, dass jeder Teil des Aufrufs als eigenes Element in dem entsprechenden Vektor angelegt werden muss.

Ich würde persönlich wahrscheinlich ein Shell-Skript schreiben, welches dann entsprechend parametrisiert werden muss [ist leichter testbar und es müssen dann halt nur bestimmte Parameter übergeben werden].

Im Anhang der Admin-Doku findest Du das rsync Skript, welches einen entsprechenden Aufruf komplett zusammenbaut. Hierbei solltest Du als Vorlage das Skript aus einer möglichst aktuellen Version der Doku nehmen (momentan ist Version 2.26 aktuell)

Viele Grüsse aus Dortmund,

  Holger

Hallo Holger,

danke für den Tipp. Ein Bash Skript wäre auch nicht das Problem gewesen für das Mount Thema. Smiley Wink

Ich habe halt nur keinen blassen Dunst von BeanShell (naja gut, meine Bash Kentnisse sind auch stark eingerostet...).

Deswegen war ich mich überhaupt nicht sicher, ob ich überhaupt irgendwelche Systemfunktionen oder Skripte aufrufen kann.

Die Kombination BS + Bash Skript ist aber durchaus sehr interessant. Wobei ich jetzt noch immer nicht verstanden habe wie du das mit dem Vektor und der Parameterübergabe gemeint hast. -> Man merkt, ich bin wirklich eingerostet was Scripting angeht oder stehe gewaltig auf dem Schlauch.

Ich werde mir aber mal Gedanken dazu machen. Smiley Happy

Danke im voraus....

Gruß
René

0 Kudos

In dem Beanshell-Skript wird das Bash-Skript "rename.sh" aufgerufen und als einziger Parameter der Wert von "context.getPath()" übergeben:

cmd1.add(context.getPath());


Wenn man dem Bash-Skript mehrere Parameter übergeben möchte, die man in der Shell manuell als "renams.sh param1 param2 -f filename.txt" eintippen würde:

cmd1.add("param1");
cmd1.add("param2");
cmd1.add("-f");
cmd1.add("filename.txt");

Wenn man unter Windows arbeitet ist zu beachten, dass Bash-Skripte nur \n (New-Line) als Zeilenendezeichen enthalten dürfen und nicht das unter DOS übliche \n\r (New-Line + Carriage-Return). Ansonsten bekommt man merkwürdige Fehlermeldungen beim Start des Skripts zu sehen. Also im Texteditor als Text-Encoding "Unix" einschalten.

Im Bash-Skript selbst können die übergebenen Parameter dann als $1 $2 $3 usw. ausgelesen werden.

0 Kudos

Hallo alle zusammen,

ich habe nun die "perfekte" Lösung für mein Problem gefunden.

Ich habe mir (von einem guten Freund und Linux/Java Guru) ein kleines Debian Paket schreiben lassen (ist nix

Debian spezifisches, hier ist aber die Installation am einfachsten!).

Es handelt sich dabei um 2 kleine C-Skripte die durch die 2 Beanshell Skripte (die in der Firstspirit GUI verwaltet werden)

angestoßen werden!

Sobald das Debian Paket (über "dpkg -L firstspirit-cifs-deploy_1.0-1_i386.deb" sieht man wo überall Daten abgelegt werden) installiert ist (Abhängigkeiten wie smbfs und cifs-utils werden über das Paket abgefangen!) muss nur noch zwei Skripte in der Auftragsverwaltung angelegt werden (am besten benennt man die auch mount bzw. umount). In den Eigenschaften der Skripte gibt man nun die notwendigen Parameter in der passenden Reihenfolge ein und weißt ihnen Werte zu.

Wenn das erledigt ist kann man den deploy auf einen "lokalen" Mountpoint ausführen. Smiley Happy

Und fertig ist das deployment von Linux auf Windows...

Wenn Interesse besteht kann ich auch gerne eine saubere Doku in Form eine Blog Beitrags erstellen.

Ich gebe die Nutzung zu Testzwecken für jeden Interessierten frei.

Da ich das ganze bisher aber nur auf unserer eigenen Infrastruktur getestet habe (und keinen direkten Support leisten kann), kann ich (noch) nicht dazu raten das ganze in Produktivinstanzen zu nutzen/testen.

0 Kudos

Anbei die neue Version die sowohl mit Firstspirit 4 als auch mit Firstspirit 5 funktioniert.

0 Kudos