300 likes | 820 Views
Tcl/Tk 2003. Using Starkits for Easy Deployment of Server Applications. Mark Roseman course forum T E C H N O L O G I E S. The Canonical Tcl Server App. socket -server Accept $portnum proc Accept {sock args} { fconfigure $sock -blocking 0
E N D
Using Starkits for Easy Deployment of Server Applications Mark Roseman courseforum T E C H N O L O G I E S
The Canonical Tcl Server App socket -server Accept $portnum proc Accept {sock args} { fconfigure $sock -blocking 0 fileevent $sock readable “Readable $sock” } proc Readable {sock} { #… do something interesting }
That was easy! On to the next application…. • Ummm….forgetting something? • Oh yeah, better post it on SourceForge so others can take advantage of my brilliance!
“If it was hard to develop, it should be hard to install!” • Download the latest source • Unpack in Sites directory of your home dir • Configure Apache • Open Terminal.app, type “sudo vi /etc/httpd/httpd.conf” • Remove the leading “#” from these lines: • LoadModule php4_module libexec/httpd/libphp4.so • AddModule mod_php4.c • Modify the DirectoryIndex line to read: • DirectoryIndex index.html index.php index.htm index.php3 index.cgi
And so on… • Keep configuring Apache… • AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps • Then ‘sudo apachectl restart’ • Install MySQL (luckily someone packaged that up nicely.. Download it here…) • Check if its running: • /usr/local/mysql/bin/mysqladmin status • Oh yeah and set a root password on it • /usr/local/mysql/bin/mysqladmin -u root password sniggle
Oh, but the fun has just begun! • Better set up MySQL for your Wiki • /usr/local/mysql/bin/mysql -uroot -p mysql > grant select, insert, update, delete, lock tables on wiki.* to wiki@localhost identified by 'password'; > create database wiki; > \q • …. Hack hack hack hack hack…. • …. Tell PHP about it….. Hack hack… • Modify the Wiki code to include the database… hack hack hack hack….
A New Breed of Server Apps • Personal / Small Group Server Apps • SOHO market adopting: • Broadband, WiFi, Bluetooth… • Windows XP, Mac OS X • Weblog, Wiki, webmail, file sharing, calendars, MP3 streaming, document management… • Normal users, not network admins
Deploying Tcl Server Apps • The Starkit story so far • Deployment Requirements • Dependencies • Installation / Configuration • Starting and Stopping • Platform Issues • particularly Mac and Windows • Miscellaneous Issues - packaging, builds, obfuscation, integration…
The Starkit story so far • Tclkit: Tcl, Tk, incr Tcl, Metakit, TclVFS • Starkits and Starpacks • Platform-neutral or platform-specific • Package up your whole development tree • Way beyond simple code wrapping • Jean-Claude Wippler [Tcl’2000] • Steve Landers [Tcl’2002] • Gets you pretty far (e.g. wikit)…
CourseForum / ProjectForum • Wiki-like app • Non-tech users • Education • Business • Cross-platform • Unix, Win, OS X • Web Browser • Easy to use tool • Try before you buy
Dependencies • Typical Wiki: Apache/IIS, scripting engine, other libraries, external database, CVS, … • Trend is towards more layers (app servers) • Barriers to entry • Initial install (don’t screw up!) • Upgrade can break your app • Tradeoffs must be taken into account early! • Developer benefit from external packages • Increased complexity for end users • Understand the context you’re running in
Reducing Dependencies • Solution #1: bundle everything • Setup script to automate install • Can make sense for larger systems • Solution #2: roll your own (subsets): • TclHttpd (or mini-variants) • Metakit (or SQLite) • Build subset libraries (e.g. version control) • CF/PF: one file, no externals, < 2mb
Installation Next Next • Install = copy • Uninstall = delete • Well maybe… Next Next Next Next Next Next
Configuration • Get rid of the text based configuration files! • Web-based configuration
Starting and Stopping • Start the application, stop the application • Consider a simple GUI for this — yes, even for a server! • New Users • Feedback • Choosing ports
Running as a Daemon • Different than initial use • Unix: rc.d / inittab • Windows: services • Mac OS X: StartupItem • more later…
Unix Platform Issues • Not a lot of extra issues here • Running as ‘setuid’
Windows Platform Issues • Start / Stop GUI • Installers / Uninstallers • Windows Services • TclSvc • Tcl Dev KitService Mgr • FireDaemon
Mac OS X • “Unix for the Masses” • Opportunity for smaller developers • Rewards innovation • Culture of supporting small shops • Actually pay for software • Easy to get the word out • Free High-Quality Developer Tools and Docs • Beware — “port” is a four letter word!
Mac OS X GUI • Tk not quite there yet (sniff!) • Small Cocoa app • ~200 lines ObjC • InterfaceBuilder • A few hoursto develop
Mac OS X Application Bundles • App is a directory • Cocoa launcher • Starpack “guts” • Communicate via Unix pipes (!) • Setuid
Mac OS X Packaging So we have a Starpack[a virtual file system in a file] in an Application Bundle[which looks like a file system in a file], inside a Disk Image[a virtual file system in a file] … yikes!!! • Application Bundles • Disk Images • Installers if needed • StartupItem • Known location • Shell scripts • Run (Unix-style) executable
Other Issues • Integration • Avoiding port conflicts • Firewalls • Proxy / Virtual Hosting • Branding • Development Process • Builds • Testing • Code obfuscation (procomp / tbcload)
CourseForum / ProjectForum • Full power of Tcl, Metakit, etc. • With Starkit, drop development tree on user’s machine • Small app, quick to download, code protected • Runs like native apps, easy to setup and use
Remember that O’Reilly Article? “I’ve got one of those if-only-I’d-known-that-before sort of feelings… Nice work. You're right, it couldn't be simpler.”
Deployment is a Tcl Strength • Cross platform • Easy to embed/extend • Code hiding when needed • Starkit goes way beyond simple wrapping • Network server apps run by end users • Important new niche • Tips here to ease deployment further • Start thinking about deployment early!
Thanks! www.markroseman.com/tcl www.courseforum.com And announcing… tcl.projectforum.com Free, powerful collaborative workspaces for Tcl/Tk based open source projects and their teams. Yes it’s easy to install — but we do hosting too!