Open Source im professionellen Einsatz
Linux-Magazin 01/2004

Tcl-Module zu einer ausführbaren Datei verschnüren

Stern-Gucker

Starkits verpacken ganze Tcl-Anwendungen inklusive aller benötigten Dateien in einem plattform- unabhängigen File. Das Ausliefern und Installieren (neudeutsch Deployment) reduziert sich so auf einfaches Kopieren. Aber auch Entwickler profitieren von der Sternenreise.

840

Das vorletzte Feder-Lesen stellte schon Jean-Claude Wipplers eingebettete Datenbank Metakit vor[2]. Diese Technik nutzt der bekannte Tcl-Entwickler auch für Starkits[1], mit denen er das Ausliefern von Anwendungen vereinfacht. Tcl-Applikationen bestehen in der Regel aus einer Reihe von Skripten, Bitmaps, Konfigurationsdateien und oft auch kompilierten Erweiterungen.

Während Programmierer damit in der Regel kein Problem haben, stößt dieses Konglomerat bei Anwendern auf Unverständnis. Sie sind selten gewillt eine komplexe Dateistruktur anzulegen und Erweiterungen selbst zu kompilieren. Bei einem Starkit steckt die gesamte Anwendung inklusive aller notwendigen Erweiterungen in einer einzigen Datei. Daher auch der Name, er steht für Stand Alone Runtime Kit. Zum Starten ist eine spezielle Version des Tcl-Interpreters nötig: »tclkit«. Er steht unter[3] für die meisten Plattformen bereit; auspacken und ausführbar machen genügt:

wget http://www.equi4.com/pub/tk/8.4.4/tclkit-linux-x86.gz
gunzip tclkit-linux-x86.gz
cp tclkit-linux-x86 tclkit
chmod 755 tclkit


Das Binary lässt sich wie jeder normale Interpreter verwenden. Es bringt bereits Tk, Metakit und die objektorientierte Erweiterung Incr-Tcl mit. Viele Tcl-Anwendungen gibt es als Starkit verpackt, das Starkit Distribution Archive[4] enthält zum Beispiel »tkcon«, »tkcvs« und die komplette Tcl-Entwicklungsumgebung ASED sowie Spielkram wie Keith Vetters Spirograph[5] (siehe Abbildung 1). Um eines dieser Kits zu starten, genügt »./tclkit Programm.kit«.

Abbildung 1: Diese nette Tcl-Spielerei zeichnet schöne Grafiken. Alle Bestandteile der Anwendung sind in einem Starkit zusammengefasst.

Programme einpacken

Nicht nur das Starten von Starkits ist einfach, auch das Einpacken ist beinahe trivial. Als Hilfsmittel dient das SDX-Starkit »sdx.kit«[6]. Diese Kommandozeilenapplikation kennt eine Reihe von Befehlen (siehe Tabelle 1), zum Beispiel schweißt folgender Aufruf das Skript aus Listing 1 in ein Starkit ein:

./tclkit sdx.kit qwrap halloWelt.tcl


Daraus entsteht »halloWelt.kit«, der Aufruf »./tclkit halloWelt.kit« führt das neue Starkit aus. Interessanter ist der Blick in die Innereien. Mit »unwrap« ist das Paket schnell wieder ausgepackt:

./tclkit sdx.kit unwrap halloWelt.kit


Im Verzeichnis »halloWelt.vfs« entsteht dabei eine Struktur, die der in Abbildung 2 gleicht (ohne die Snack-Erweiterung): Ein Starkit ist ein virtuelles Dateisystem. Der spezielle Tcl-Interpreter »tclkit« ruft darin immer die Datei »main.tcl« auf. Dieses File wurde automatisch von »qwrap« angelegt, es besteht nur aus drei Zeilen:

package require starkit
starkit::startup
package require app-halloWelt


Die letzte Zeile startet das Originalskript »halloWelt.tcl«, da im »lib«-Verzeichnis eine Datei »pkgIndex.tcl« liegt und den Zusammenhang zwischen Paket und Skript herstellt. Die komplette Struktur hat der »qwrap«-Befehl bequemerweise angelegt. Das SDX-Kommando »./tclkit sdx.kit wrap halloWelt.kit« verwandelt sie wieder in ein Starkit.

Richtig interessant sind Starkits bei Anwendungen mit mehreren Dateien und Erweiterungen. Das Beispiel in Listing 1 erzeugt nur einen einfachen Button, der auf Klick »Hallo Welt« ausgibt. Nun soll er zusätzlich eine WAV-Datei abspielen. Es gilt, das Snack-Soundpaket und eine WAV-Datei mit in das Starkit zu packen.

Tabelle 1:
SDX-Kommandos

 

Kommando

Bedeutung

eval Skript

Führt Tcl-Skript aus

fetch URL

Lädt Datei von einem Server

ftpd

Einfacher FTP-Server

httpd

Einfacher HTTP-Server

lsk Starkit

Zeigt die Struktur des Starkits

qwrap Datei

Erzeugt ein Starkit aus einem Skript

startsync

Startet den Starsync-Server

unwrap Starkit

Entpackt das Starkit

update -from URL

Aktualisiert das Starkit vom Starsync-Server

wrap (-writeable,

(-runtime

Tclkit)

Erzeugt ein Starkit aus der Name-Dateistruktur im
Verzeichnis » Name.vfs«. Mit der Option
»-writeable« wird das Starkit beschreibbar,
»-runtime« erzeugt ein Starpack mit dem gegebenen
Tclkit als Interpreter.

Abbildung 2: Starkits verpacken alle Bestandteile einer Anwendung. Neben den Tcl-Skripten sind hier eine WAV-Datei und die binäre Snack-Erweiterung für mehrere Zielplattformen enthalten.

Binär-Erweiterungen

Erweiterungen gehören in das »lib«-Verzeichnis, am besten so, dass sie auf mehreren Plattformen funktionieren. Statt selbst Snack in diese Form zu bringen, bietet es sich an, ein fertiges Starkit mit Snack zu holen, auszupacken und in das »lib«-Verzeichnis der Anwendung zu kopieren:

./tclkit sdx.kit fetch http://mini.net/sdarchive/snack.kit
./tclkit sdx.kit unwrap snack.kit
cp -r snack.vfs/lib/snack halloWelt.vfs/lib/


Neben der Erweiterung muss noch eine WAV-Datei (hier »phone.wav«) mit ins Starkit, genauer in das Verzeichnis »halloWelt.vfs/lib/app-halloWelt«. An dieser Stelle liegt auch noch das alte »halloWelt.tcl« aus Listing 1 - an seine Stelle gehört jetzt Listing 2. Diese Version erzeugt in Zeile 10 ein Snack-Sound-Objekt und füllt es mit der WAV-Datei aus demselben Verzeichnis.

Um auf Files im Starkit zuzugreifen, muss das Skript nur den Pfad richtig wählen. Die Basisadresse steht in der Variablen »starkit::topdir«.

./tclkit sdx.kit wrap halloWelt.kit


Dies Kommando verpackt die ganze Dateistruktur unter dem Verzeichnis »halloWelt.vfs« in ein neues Starkit, das sich mit »./tclkit halloWelt.kit« starten lässt - und nach jedem Knopfdruck die WAV-Datei abspielt.

Listing 1: Hallo Welt
1

01 package require Tk
02 
03 proc halloWelt {} {
04     puts stdout "Hallo Welt"
05 }
06 button .b -text "Hallo Welt" 
07     -command halloWelt
08 pack .b

Listing 2: Hallo Welt
2

01 package provide app-halloWelt 2.0
02 package require Tk
03 package require snack
04 
05 proc halloWelt {} {
06     puts stdout "Hallo Welt"
07     snd1 play
08 }
09 
10 snack::sound snd1
11 snd1 read [file join $starkit::topdir 
12     lib app-halloWelt phone.wav]
13 
14 button .b -text "Hallo Welt" 
15     -command halloWelt
16 pack .b

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Elefant im Blick

    Der Datenbankzugriff per Kommandozeile ist nicht jedermanns Sache. Für mehr Durchblick sorgt PG-Access, eine praktische Oberfläche für PostgreSQL (Maskottchen ist ein Elefant). Sie unterstützt den Anwender bei typischen Aufgabe wie Tabellenerzeugung, Ex- und Import von Daten, Backup und Reporting.

  • Paket-Entwicklung

    Die alte Frage nach dem richtigen Paketformat hat eine neue Antwort gefunden: Starkits. Sie sind direkt ausführbar, trotzdem können interessierte Anwender, Programmierer und Admins das File auspacken und die Komponenten einzeln verwenden und installieren.

  • Daten im Handgepäck

    Programme müssen ihre Daten nicht immer am SQL-Datenbankserver aufgeben: Für viele Aufgaben sind eingebettete Datenbanken die bessere Wahl. Jean-Claude Wippler hat mit Metakit eine DB-Engine entwickelt, die sehr sparsam mit den Ressourcen umgeht und dennoch einen großen Funktionsumfang bietet.

  • Bildhafte Kurven

    Das Sprichwort "Ein Bild sagt mehr als tausend Worte" gilt auch beim Anzeigen großer Datenmengen. Für die meisten Diagrammtypen genügen wenige Zeilen Tcl-Code, um Messwerte oder Ergebnisse auf dem Bildschirm grafisch ansprechend und übersichtlich darzustellen.

  • Augenweide

    Vor kaum zehn Jahren beherrschten graue Anwendungen den grauen Hintergrund des Unix-Desktops. Heute präsentieren sich KDE und Gnome mit moderner Oberfläche. Ihre Gestaltung verlangt ein geschultes Auge und guten Geschmack, beim Anzeigen und Erzeugen der Elemente hilft Tcls Werkzeugkasten.

comments powered by Disqus

Ausgabe 04/2017

Digitale Ausgabe: Preis € 6,40
(inkl. 19% MwSt.)

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.