Learning Center
Plans & pricing Sign in
Sign Out



									Tcl/Tk 2003
        Using Starkits
 for Easy Deployment
of Server Applications
   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
   ―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, type “sudo vi
  – Remove the leading “#” from these lines:
     • LoadModule php4_module libexec/httpd/
     • AddModule mod_php4.c
  – Modify the DirectoryIndex line to read:
     • DirectoryIndex index.html index.php index.htm index.php3
                 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
 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
• 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

• 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
  – Developer benefit from external packages
  – Increased complexity for end users
     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
• Install = copy
• Uninstall = delete

• Well maybe…
• Get rid of the text
  configuration files!
• Web-based
        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 Kit
    Service 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 hours
    to develop
 Mac OS X Application Bundles
• App is a
• Cocoa launcher
• Starpack ―guts‖
• Communicate via
  Unix pipes (!)
• Setuid
        Mac OS X Packaging
• Application            So we have a
  Bundles                Starpack [a
                         virtual file system
• Disk Images            in a file] in an
• Installers if needed   Application
                         Bundle [which
• StartupItem            looks like a file
                         system in a file],
  – Known location       inside a Disk
  – Shell scripts        Image [a virtual
  – Run (Unix-style)     file system in a file]
                         … yikes!!!
                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   c            n
                    Qu i k Ti me ™ a d a TIFF (LZW) d c o mp re s so r a re n e e d d to s e e t i s p i tu re .
                                                     e                             e           h       c

  development tree
  on user‘s machine
• Small app, quick to
  download, code
• 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
  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
• Network server apps run by end users
    – Important new niche
    – Tips here to ease deployment further
    – Start thinking about deployment early!

To top