Tcl-Module zu einer ausführbaren Datei
verschnüren
Stern-Gucker
von Carsten Zerbst
Erschienen im Linux-Magazin
2004/01
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.
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.
|
|
|
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.
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
|
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
|
| Whitepaper |
|
Open Source Datenintegration in der Praxis: Fallstudien und Anwendungsbeispiele (Folge 2)
Der zweite Teil des Open Source Datenintegration in der Praxis: Fallstudien und Anwendungsbeispiele White Papers beleuchtet anhand weiterer ausgewählter Case Studies die Implementierung von Open Source Datenintegration in der Praxis und benennt die daraus resultierenden Vorteile.
Download PDF (Registrierung erforderlich)
|
|
Usage Landscape Enterprise Open Source Data Integration
Die Nachfrage nach Datenintegrationslösungen für Unternehmen ist zunehmend gestiegen und vor allem das Interesse an Open Source Technologien wird immer größer. Doch wie und von wem werden Open Source Datenintegrationslösungen genutzt und welches Nutzungsverhalten lässt sich daraus ableiten? Das vorliegende White Paper präsentiert die Erfahrungswerte von über 1000 Open Source Nutzern und liefert fundierte Antworten auf diese Fragen.
Download PDF (Registrierung erforderlich)
|
Dieser Online-Artikel kann Links enthalten, die auf nicht mehr vorhandene Seiten verweisen. Wir ändern solche "broken links"
nur in wenigen Ausnahmefällen. Der Online-Artikel soll möglichst unverändert der gedrucken Fassung entsprechen.
|