Tel. 06151 / 39 10 793

Packen einer Drupal-Distribution mit Drush-Make

21.01.2013  • Jan Müller
Packen einer Drupal-Distribution mit Drush-Make

Mit Drush-Make stellt Drush ein Werkzeug zur Verfügung um das Herunterladen von Drupal, sowie das Installieren von Modulen und Patches zu automatisieren. Neben dem Installieren von Drupal in der lokalen Umgebung kommt es vor allem auch beim automatischen Packen von Distributionen auf Drupal.org zum Einsatz.

Hierbei werden beim Herunterladen der Distribution von Drupal.org der Drupal-Core, sowie sämtliche aus der Drupal-Comunity installierten Libraries, Themes, Module und Patches automatisch von Drush gepackt und dem Nutzer zur Verfügung gestellt. Die hier vorgestellten Befehle sind nur ein Teil der Möglichkeiten mit Drush. Die komplette Liste der Befehle findest du in der Dokumentation von Drush-Make.

Ausgangspunkt Installationsprofil:

Als Ausgangspunkt benötigen wir hierfür ein funktionierendes Installationsprofil. Falls dies noch nicht vorhanden ist empfehle ich folgende Anleitung zu nutzen: LINK

Um die Installation als Distribution zur Verfügung zu stellen, werden zunächst alle selbst entwickelten Module, Features und Themes, die nicht Projekt auf Drupal.org sind, im Ordner des Installationsprofils abgelegt. In den Ordner des Installationsprofils kommen hierzu noch weitere Dateien hinzu: 'drupal-org.make', 'drupal-org-core.make' und 'build_my-distribution.make'. Diese Dateien werden von Drush make automatisch verarbeitet um die Distribution zu packen. Der Ordner des Installationsprofils sollte nun mindestens folgende Dateien beinhalten: ausgangspunkt.png

Drupal-org Makefiles

Der Aufbau der Makefiles ist einfach und ähnelt in seiner Syntax den bekannten .info Dateien in Drupal.

drupal-org.make:

Hier werden sämtliche Module, Themes und Patches eingetragen die von Drupal.org heruntergeladen und installiert werden sollen. Ein Beispiel:

; Zuerst werden die Api für Drush-Make und die Drupal
; Version für das Makefile definiert:
api  = "2"
core = "7.x"

; Nachfolgend werden alle Projekte inkl. Ihrer Versionen
; definiert, die man in sein Projekt integrieren möchte.
; Hier ist es auch möglich Patches anzugeben:
projects[adaptivetheme][version]  = "3.1"
projects[features][version] = "1.0"

; Durch das optionale Attribut [subdir] ist es möglich
; Module in extra Unterordner zu installieren.
projects[features][subdir] = "contrib"

projects[views][version] = "3.5"
projects[views][subdir] = "contrib"

; Patches werden mit dem attribut [patches][] angefügt.
projects[views][patches][] = "http://drupal.org/files/fixed_revisions_relationship-1754354-4.patch"

Obenstehender Code würde den Drupal Core, das Theme „Adaptivetheme“, die Module „Features“ und „Views“, sowie einen Patch für Views herunterladen.

Möchte man ein Projekt angeben, was noch in einer dev-Version ist, ist es notwendig einen speziellen Commit anzugeben, da hier noch keine genaue Version angegeben werden kann:

projects[path_breadcrumbs][version] = "3.x-dev"
projects[path_breadcrumbs][download][type] = "git" 
projects[path_breadcrumbs][download][url] = "http://git.drupal.org/project/path_breadcrumbs.git" 
projects[path_breadcrumbs][download][revision] = "c9c570b0b4bde1df0e5a322ab90197d7fc1cf9c6"

Libraries werden folgendermaßen eingebunden:

libraries[cloud-zoom][type] = "libraries"
libraries[cloud-zoom][download][type] = "file"
libraries[cloud-zoom][download][url] = "http://www.professorcloud.com/downloads/cloud-zoom.1.0.3.zip"

Um die Distribution mit dem Drupal-org Distribution Packaging zu packen muss die Library auf der Drupal.org Library Packaging Whitelist eingetragen sein. Von dort ist auch der Download Link zu übernehmen. Ist die Library nicht vorhanden, bekommt man auf der Projektseite eine Anleitung seine Library zur Aufnahme in die Whitelist zu bewerben.

Um größere Projekte zu packen gibt es die Möglichkeit die Datei drupal-org.make automatisch erstellen zu lassen. Hierfür gibt man folgenden Befehl ein:

drush generate-makefile drupal-org.make

Das hierbei erstellte Makefile enthält jedoch noch keine Modul-Patches und auch keine Libraries. Außerdem müssen die Commits für verwendete Projekte in -dev-Versionen noch per Hand eingetragen werden. Leere Einträge für Custom-Module kann man einfach entfernen. Beachtet auch dass eine für das Distribution Packaging System gültige drupal-org.make Datei keinen Drupal-Core enthalten darf. Wie ihr seht ist das erstellte Makefile auf gar keinen Fall schon „fertig“. Jedoch bietet es sich als Basis an um ein eigenes Makefile zu erstellen.

drupal-org-core.make:

Um mehr Details für den Drupal-Core anzugeben empfiehlt es sich eine neue Datei „drupal-org-core.make“ anzulegen. Hier kann man nun den Drupal-Core weiter spezifizieren und z.B., genau wie bei den Modulen auch, Patches oder eine dev-Version über einen Git-commit installieren. Ein Beispiel:

api = "2"
core = "7.x" 
; Core:
projects[drupal][version] = "7.18" 

; Patches :
projects[drupal][patch][] = "http://drupal.org/files/1146244-82-node-save-on-insert.patch" 
projects[drupal][patch][] = "http://drupal.org/files/d7_move_access_to_join_condition-1349080-89.patch"

build-my_distribution.make

Diese Datei ist notwendig für das automatische Packen der Distribution auf drupal.org.

api = "2" 
core = "7.x" 

; falls man ein offizielles Release von Drupal 
; verwenden möchte und keine Patches für den Core 
; installieren will kann hier statt 
; "includes[] = drupal-org-core.make" auch einfach
; direkt den Drupal-Core installieren: 
; 'project[drupal][version] = "7.18"'

includes[] = drupal-org-core.make; 

; Anschließend wird das Profil geholt und als Projekt
; installiert. Die Deklaration funktioniert wie bisher
; bei Modulen auch. In diesem Fall greifen wir zum 
; Testen auf einen extra erstellten Branch „test-make“ zu: 

projects[my_distribution][download][type] = "git" 
projects[my_distribution][download][url] = "http://git.drupal.org/project/my_distribution.git" 
projects[my_distribution][download][branch] = "test-make"

Wird diese Datei ausgeführt, wird zuerst der Drupal-Core zusammengepackt. Anschließend wird das Profil installiert. Da im Basisverzeichnis des Profils die Datei „drupal-org.make“ liegt, wird sie von Drush automatisch erkannt und sämtliche Abhängigkeiten aufgelöst.

Testen

Drupal.org drush:

Mit dem „Drupal.org drush“ Plugin für Drush ist es möglich drupal-org.make für das Distribution Packaging System auf drupal.org zu verifizieren. Hierfür muss das drupal.org drush Plugin  installiert werden. Eine Anleitung gibt es hier

Mit dem Drush Befehl

drush verify-makefile drupal-org.make

kann man nun herausfinden, ob das Makefile den Anforderungen von drupal.org entsprechen.

Lokales Ausführen von drupal-org.make und drupal-org-core.make:

Möchte man vor dem Hochladen auf drupal.org noch einmal lokal testen, etwa um zu schauen ob alles richtig gepackt wird und alle Module die richtige Version haben, ist es sinnvoll die Makefiles lokal auszuführen. Hierfür kopieren wir unsere komplette Drupal-Installation in einen neuen Ordner, löschen alles bis auf den profiles Ordner und erstellen zum Testen ein extra Makefile „test-my_distribution.make“ in dem Basisverzeichnis. In dem Makefile rufen wir zuerst „drupal-org-core.make“ und dann „drupal-org.make“ auf:

api = 2
core = 7.x

; falls keine drupal-org-core.make vorhanden: project[drupal][version] = "7.18" 
includes[] = profiles/my_distribution/drupal-org-core.make
includes[] = profiles/my_distribution/drupal-org.make

nach dem Ausführen von

drush make test-my_distribution.make

sollte man nun eine vollwertige Drupal-Installation bekommen. Mir hat es hier geholfen die Modulordner der Testinstallation und der alten originalen Installation mit einem diff-Programm genauer zu untersuchen um sicher zu gehen dass alle Module in der richtigen Version heruntergeladen werden.

Hochladen:

ist alles getestet und die Distribution installiert und läuft im lokalen Test, kann man den Profilordner samt Makefiles zu drupal.org hochladen. Das Projekt ist nun eine vollwertige Drupal-Distribution, und wird automatisch unter http://drupal.org/project/distributions gelistet.

Kommentar hinzufügen

Der Inhalt dieses Feldes wird nicht öffentlich zugänglich angezeigt.
So finden Sie uns