Pyload Chef Cookbook

Pyload Chef Cookbook Beitragsbild

Ein neues open-source Projekt ist veröffentlicht. Es implementiert ein Chef Cookbook für die Installation und Konfiguration von Pyload, einem open-source Downloader für One-Click Hoster. Das Pyload Chef Cookbook ist auf GitHub gehostet und derzeit in Version 1.0.0 im Chef Supermarket veröffentlicht. Was Pyload denn nun eigentlich genau ist, wie dieses Projekt entstand bzw. was es bietet und wie man das Cookbook erfolgreich einsetzt, um Pyload zu installieren und konfigurieren, schauen wir uns in diesem Artikel genauer an.

Was ist Pyload und wie funktioniert es?

Pyload ist ein open-source und rein community-driven Downloader für One-Click Hoster, wie Uploaded oder ShareOnline. Pyload ist dabei komplett in Python implementiert und vergleichbar bzw. ähnlich zu JDownloader. Eines der wichtigsten Features jedoch, mit welchem Pyload im Gegensatz zu JDownloader wirklich punkten kann, ist, dass es als threaded Server (Daemon) läuft und über ein Webinterface bedient wird. Dadurch ist es nicht mehr nötig den PC 24/7 laufen zu lassen, wenn bereits ein Home Server, NAS oder eine Server Infrastruktur vorhanden ist, welche Pyload ausführen könnte.

Sobald Pyload einmal erfolgreich auf eben solch einem Home Server, NAS oder einer Server Infrastruktur installiert wurde, ist dessen Funktionsweise relativ simpel und dessen Konfiguration leicht durchzuführen. Es genügt ein Paket anzulegen und in diesem die zu downloadenden Links anzugeben. Schließlich passiert alles von selbst: Pyload lädt das Paket hinunter und legt die heruntergeladenen Dateien im konfigurierten Download Verzeichnis ab.

Je nach Download Link bzw. Source, muss Pyload jedoch auch eine passende Kommunikationsschnittstelle implementieren, um sich zum Beispiel irgendwo authentifizieren zu können. Dafür benutzt Pyload viele unterschiedliche Plugins. So bildet solch ein Plugin zum Beispiel die Kommunikation mit bzw. die Authentifizierung bei einem Hoster (Uploaded oder ShareOnline) ab, um den Download erfolgreich starten zu können und schließlich das Paket herunterzuladen. Allerdings ändern sich Hoster und dessen APIs im Laufe der Zeit, weshalb die implementierte Kommunikationsschnittstelle irgendwann inkompatibel wird. Somit muss das Plugin bzw. Pyload regelmäßig angepasst werden, weshalb kontinuierlich neue Versionen von Plugins produziert werden (sog. Rolling Releases). Nun aber stellt sich das Problem, wie wird eine Pyload-Installation mit den neuen Versionen der Plugins versorgt?

Dafür hat Pyload einen Updatemechanismus implementiert, welcher regelmäßig überprüft, ob eine neue Plugin Version verfügbar ist und gegebenenfalls diese auch herunterlädt, den sog. Update Manager. Leider jedoch hat dieser einen kleinen Hacken: Wird das Plugin Update bzw. die neue Plugin Version nicht schnell genug veröffentlicht bzw. ist diese neueste Version nicht schnell genug für den Update Manager verfügbar, so stehen Downloads still – ganz zum Ärger des Benutzers oder der Benutzerin.

Was bietet mir das Pyload Cookbook?

Wir haben uns demnach überlegt, wie man Pyload auf einfache Weise installieren und wie man es dann auch regelmäßig updaten kann, sodass oben erwähntes Problem weniger häufig auftritt. So haben wir ein Chef Cookbook entwickelt, welches Pyload per Source installiert (Git Checkout) und konfiguriert. Dabei wird das Pyload Chef Cookbook standardmäßig vom Chef Client im Intervall von 30 Minuten ausgeführt, weshalb man Source Code Änderungen von Pyload schnellstmöglich erhält (eben jene Plugins). Das Cookbook ist im Chef Supermarket veröffentlicht und steht somit jedem zur freien Verwendung zur Verfügung.

Das Pyload Chef Cookbook unterstützt dabei auch noch unterschiedliche Plattformen, und zwar Debian, Ubuntu, Redhat Enterprise Linux (RHEL), CentOS, Fedora, OpenSUSE und Arch. Auf all diesen Plattformen kann Pyload erfolgreich installiert und konfiguriert werden. Das Cookbook hat weiters keine zusätzlichen Abhängigkeiten zu anderen Cookbooks, jedoch sollte auf Debian basierten Plattformen das apt Cookbook, sowie auf RedHat basierten Plattformen , das yum und yum-epel Cookbook vor dem Pyload Cookbook ausgeführt werden. Das apt Cookbook auf Debian basierten Plattformen wird dabei benötigt, damit der apt Cache upgedated wird, um nur neueste Paket Versionen zu installieren. Hingegen wird das yum und yum-epel Cookbook auf RedHat basierten Plattformen benötigt, damit alle benötigten Pakete bzw. Abhängigkeiten von Pyload installiert werden können.

Des Weiteren erstellt das Cookbook passende Service Skripte, entsprechend des verwendeten Init-Systems der Zielplattform. So wird zum Beispiel auf Debian 7 ein Sys-V-Init Script und auf Debian 8 ein SystemD Script angelegt. Da Pyload von Haus aus keine passenden Service Skripte erzeugt, stellt dies eines der wichtigsten Features dar. Damit startet Pyload bei jedem Systemstart (Bootvorgang) automatisch und ist somit ohne manuelles Starten gleich erfügbar.

Zu guter Letzt bietet das Cookbook viele unterschiedliche Konfigurationsparameter, sog. Attributes, an, mit welchen man das Cookbook steuern kann und bereits Pyload Konfigurationsdateien von Chef bzw. dem Cookbook erzeugen lassen kann. So kann zum Beispiel der Downloadordner oder aber ein Proxy, welcher vielleicht nötig ist, konfiguriert werden. Manuelle Konfiguration entfällt somit (fast) komplett.

Die oben genannten Features sind nur ein kleiner Teil der Vorteile von Chef bzw. des Chef Cookbooks selbst. Für ehr Information, siehe das Pyload Cookbook Github Repository.

Lokale Verwendung des Cookbooks

Bei Chef unterscheidet man generell zwei verschiedene Arten, um ein Cookbook auf einem System (Node) auszuführen. Zum einen lokal, zum anderen gemeinsam mit dem Chef Server. Im Zuge dieses Artikels, wird nur die erste erwähnte Möglichkeit, die lokale Verwendung, genauer erklärt, da das Ausführen des Cookbooks gemeinsam mit einem Chef Server in einer Chef basierten Infrastruktur  von vornherein klar sein sollte.

Zuallererst werden folgende Ordner angelegt, damit lokal ausgeführt werden kann.

mkdir -p chef-local
mkdir -p chef-local/cookbooks 
mkdir -p chef-local/nodes

Der cookbooks Ordner repräsentiert dabei jenen Ordner in welchem Chef nach allen Cookbooks sucht, um diese ausführen zu können. Hingegen enthält der nodes Folder die Konfiguration für das aktuelle System.

So wird das Pyload Chef Cookbook von dessen Git Repository einmalig heruntergeladen und in den cookbooks Ordner kopiert. Sollen noch weitere Cookbooks ausgeführt werden, zum Beispiel apt oder yum und yum-epel, dann werden diese Cookbooks ebenso aus Git heruntergeladen und in den cookbooks Ordner kopiert.

Ist dies erledigt, legt man eine Konfiguration für das aktuelle System an und speichert diese im nodes Ordner unter dem Hostnamen des Systems und der Endung json. Der Inhalt dieser Konfigurationsdatei (hostname.json) ist wie folgt:

{
  "name": "<hostname",
  "chef_environment": "_default",
  "json_class": "Chef::Node",
  "chef_type": "node",
  "normal": {

  },
  "run_list": [
    "recipe[pyload]"
  ]
}

Wichtig ist hier, dass der Hostname im Key „name“ gesetzt wird, ansonsten kann Chef die Konfiguration für das aktuelle System nicht finden! Möchte man das apt oder yum und yum-epel Cookbook auch noch verwenden, so verändert man die Sektion „run_list“ wie folgt (empfohlen je nach Plattform!):

Für apt:

"run_list": [
  "recipe[apt]",
  "recipe[pyload]"
]

Für yum und yum-epel:

"run_list": [
  "recipe[yum]",
  "recipe[yum-epel]",
  "recipe[pyload]"
]

Möchte man eventuell auch noch die Default Konfiguration des Cookbooks überschreiben, kann man die entsprechenden Attribute in der Konfigurationsdatei setzen, wie im folgenden veranschaulicht.

"normal": {
  "pyload": {
    "download_dir": "/downloads"
  }
}

Schlussendlich wird der Chef Client aus dem Chef root directory (chef-local) gestartet. Dazu führt man folgenden Befehl aus:

sudo chef-client --local-mode

Um nun den Chef Client regelmäßig laufen zu lassen, kann ein Cron Job erstellt werden. Allerdings bringt der Chef Client bereits diese Funktion von Haus aus mit. Um dieses Feature zu nutzen führt man statt es obigen Befehls, den folgenden Befehl aus:

sudo chef-client --local-mode --daemonize 0 --interval 1800

Dieser Befehl startet den einen Daemon Prozess, welcher den Chef Client regelmäßig im Intervall von 1800 Sekunden (30 Minuten) ausführt.

FAQ

Welche Pakete werden von dem Cookbook im System installiert?

Das Pyload Chef Cookbook installiert lediglich alle benötigten Pakete für Pyload und zusätzlich noch Git für die Installation von Source. Die Pakete werden direkt im Cookbook definiert und dem Attribut node[‚pyload‘][‚packages‘] zugewiesen. Diese sind folgende Pakete:

  • git
  • curl
  • openssl
  • python
  • Beaker
  • BeautifulSoup4
  • pycrypto
  • python-feedparser
  • python-flup
  • python-html5lib
  • python-imaging/python-pillow
  • jinja2
  • pycurl
  • pyOpenSSL
  • pyqt4
  • simplejson
  • thrift
  • jsengine (ossp-js and rhino)
  • tesseract

Je nach Plattform, werden die Namen dieser Pakete gesetzt, da auf verschiedenen Plattformen ein und dieselben Pakete unterschiedlich benannt wurden. Dementsprechend ist in 99% der Fälle nicht nötig, das Attribut für die Pakete zu überschreiben.

Warum werden Python Pakete nicht über Python PIP installiert?

Da es wir bisher alle benötigten Pakete für Pyload auf jeder Plattform finden konnten, gibt es keinen Grund für die Installation über PIP. So haben wir bisher die Transparenz für jede Plattform erhalten können und brauchen dementsprechend nicht extra Python PIP installieren. Ist dies zukünftig nicht mehr möglich, so müssen wir Python PIP im Cookbook und die benötigten Pakete über Python PIP installieren.

Ist es von Ihrer Seite nötig, Python PIP zu verweden oder möchte Sie es unbedingt verwenden, so ist es lediglich nötig das Attribut node[‚pyload‘][‚packages‘] zu überschreiben, um keine Pakete mehr zu installieren. Allerdings ist es dann in Ihrem ermessen dafür zu sorgen, dass alle benötigten Pakete heruntergeladen werden.

Warum gibt es kein Upstart Skript?

Wir arbeiten daran noch, weshalb vielleicht in zukünftigen Versionen des Pyload Cookbooks ein Upstart Skript zur Verfügung steht. Wie auch immer, derzeit startet Pyload, trotz vermeintlich richtigem Upstart Skript nicht, weshalb wir auch für Upstart ein Sys-V-Init Script benutzen. Da Upstart zu Sys-V-Init abwärtskompatibel ist, funktioniert dies, laut unseren Tests, sehr gut.

Pyload unterstützt SSL – erstellt das Cookbook für mich ein SSL Zertifikat?

Nein. Das Cookbook erstellt absichtlich kein SSL Zertifikat, da in den meisten Fällen ein SSL Zertifikat vorhanden ist, welches benutzt werden soll, warum also ein neues extra für Pyload? Dementsprechend muss das SSL Zertifikat im System abgelegt werden, was entweder manuell oder von einem Anderen Cookbook durchgeführt wird. Wie auch immer, soll SSL verwendet werden, genügt es dem Pyload Chef Cookbook über die Attributgruppe node[‚pyload‘][’ssl‘][…] den Speicherort des Zertifikates mitzuteilen. Pyload wird dann entsprechend konfiguriert.

Ich möchte gerne zum Pyload Chef Cookbook beitragen – was muss ich tun?

Zuallererst bedanken wir uns, dass Sie an diesem Projekt mitentwickeln wollen! Bitte lesen Sie unseren Guide (in Englisch), direkt im Projekt auf Github, für mehr Informationen bzgl. Beitragen am Pyload Cookbook Projekt.

Zusammenfassung

Um nun alles kurz zusammenzufassen: Pyload ist ein empfehlenswerter Downloader für One-Klick Hoster, welcher serviceorientiert implementiert wurde. Durch das Pyload Chef Cookbook gestaltet das Installieren, Konfigurieren und Updaten mehr als einfach. Ich kann das Pyload Cookbook für das initiale Setup einmalig ausführen oder aber regelmäßig ausführen lassen, per Cron Job oder über den Chef Client. Das Cookbook ist zusätzlich in der Lage auf verschiedensten gängigen Plattformen Pyload zu installieren, wie zum Beispiel Debian, Ubuntu, RedHat oder CentOS. Mehr Information können im Projekt selber gefunden werden.

Tagged with:     , , , , , ,

About the author /


Schon früh hat sich meine technische Begabung gezeigt, weshalb ich mich vor ein paar Jahren entschloss ein Informatik Studium zu beginnen. Ich beschäftige mich intensiv mit Programmieren, besonders im Bereich Java und Mobile Applications. Ich bin immer bemüht mich in verschiedensten technischen Bereichen weiterzubilden und neue Erfahrungen zu sammeln. Außerhalb der technischen Welt spiele ich gerne Squash, hin und wieder ein interessantes Computerspiel und ich versuche mich im Kochen und Backen mit mehr oder weniger gutem Erfolg.

Post your comments

Your email address will not be published. Required fields are marked *

*

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden .

Unterstütz uns!

Folgt uns!

Diese Seite

wurde erstellt mit Ehrgeiz, Liebe und viel Koffein. Bei der Erstellung kamen keine jar-Dateien zu Schaden. Das Logo wurde erstellt von Star-seven.at.