Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Portable scripting language for a multi-server admin?

Please Note: Portable as in portableapps.com, not in the traditional sense of a language that can be used on multiple architectures or operating systems. Whoever coined this usage of the word portable should be whacked. :)

I'm a DBA and sysadmin, mostly for Windows machines running SQL Server. I'm looking for a programming/scripting language for Windows that doesn't require Admin access or an installer, needing no install process other than expanding it into a folder. My intent is to have a language for automation around which I can standardize.

Up to this point, I've been using a combination of batch files and Unix shell, using sh.exe from UnxUtils but it's far from a perfect solution.

I've evaluated a handful of options, all of them have at least one serious shortcoming or another. I have a strong preference for something open source or dual license, but I'm more interested in finding the right tool than anything else. Not interested that anything that relies on Cygwin or Java, but at this point I'd be fine with something that needs .NET.

Requirements:

  • Manageable footprint (1-100 files, under 30 MB installed)
  • Run on Windows XP and Server (2003+)
  • No installer (exe, msi)
  • No reliance on a JVM or Cygwin install
  • Works with external pipes, processes, and files
  • Support for MS SQL Server or ODBC connections

Bonus Points:

  • Open Source
  • FFI for calling functions in native DLLs
  • GUI support (native or gtk, wx, fltk, etc)
  • Linux, AIX, and/or OS X support
  • Dynamic, object oriented and/or functional, interpreted or bytecode compiled; interactive development
  • Able to package or compile scripts into executables

So far I've tried:

  • Ruby: 148 MB on disk, 23000 files
  • Portable Python: 54 MB on disk, 2800 files
  • Strawberry Perl: 123 MB on disk, 3600 files
  • REBOL: Great, except closed source and no MSSQL or ODBC in free version
  • Squeak Smalltalk: Great, except poor support for scripting
like image 563
Aaron Avatar asked Jan 25 '10 21:01

Aaron


4 Answers

Looking at wikipedia's exhaustive list of portable software There's Tiny C compiler, again on Wikipedia here, and its own homepage here.

To summarize by quoting from wikipedia's list of features:

  • Small - can compile and execute C code everywhere, for example on rescue disks (about 100KB for x86 TCC executable, including C preprocessor, C compiler, assembler and linker).
  • Fast - tcc generates optimized x86 code. No byte code overhead. It compiles, assembles and links about 9 times faster than GCC.
  • Any C dynamic library can be used directly. TCC is heading towards full ISOC99 compliance. TCC can of course compile itself.
  • Includes an optional memory and bound checker. Bound checked code can be mixed freely with standard code.
  • Compile and execute C source directly. No linking or assembly necessary. Full C preprocessor and GNU-like assembler included.
  • C script is supported: just add '#!/usr/local/bin/tcc -run' at the first line of your C source, and execute it directly from the command line.
  • With libtcc, you can use TCC as a backend for dynamic code generation.
  • Few dependencies. It includes its own hand-written lexer, and it is implemented using a recursive descent parser. Thus, building TCC requires few other libraries.
  • Its LGPL license permits anyone to use, modify, and/or redistribute the software, and it can be used to develop either open source or proprietary software.

Hope this helps and would be of use, Best regards, Tom.

like image 134
t0mm13b Avatar answered Sep 19 '22 15:09

t0mm13b


I urge you to try Lua. Regarding your requirements:

  • Tiny footprint (56 source files, under 150K compiled)
  • Runs everywhere (uses only ANSI C)
  • No installer needed; you compile from source (there's also a "batteries included" package that I haven't explored
  • Doesn't need JVM and works with any ANSI C compiler, so you can compile with Visual Studio, not Cygwin
  • Works with external processes and files but only to the extent supported by ANSI C. If POSIX popen is provided then that is supported also.

And your bonus points:

  • Open source (MIT license)
  • FFI to C is brilliantly conceived and executed—not quite as simple as Tcl but loads more powerful. Much better integration with C than Python or Ruby.
  • GUI support is mixed but there are good bindings for wx widgets. QT support was there at one time but I don't know if it has been maintained.
  • Linux is supported
  • Language/compiler features:
    • Dynamic
    • Functional
    • Prototype-based objects and inheritance through metamethods (you'll want to see examples in the book below
    • Fastest bytecode compiler in the West
    • Interactive read-eval-print loop; load new code dynamically
  • Able to package scripts into executables; either use Luiz de Figueiredo's srlua, or I can send you a 120-line Lua script that converts Lua source to a .c file that you link in with your app and the interpreter to make an executable.

Additional bonus points:

  • Very crisp, clean, well-designed language.
  • Small enough to master in its entirety and to be productive within a day.
  • Superb book Programming in Lua (check out the previous edition free online)
like image 31
Norman Ramsey Avatar answered Sep 20 '22 15:09

Norman Ramsey


There are a couple of options for Python that might fit your bill:

  • The first is IronPython, which can be run without an installer and will play nicely with .net APIs. This gives you access to anything with a .net API or a COM typelib that you could build a PIA for. I've used at as a scripting mechanism for precisely this reason - it could be dropped into a directory within the system and did not need to be explicitly installed..

    You will have to have an appropriate .Net runtime installed, but .Net 2.0 is installed with SQL Server 2005. SQL Server can be accessed through ADO.net and building GUIs with Winforms is fairly straightforward.

  • The second is Portable Python which is designed to be run off a USB key. Although I see you've already tried it, you might elaborate on what the shortcomings were. If something isn't available in the basic install you could always look into building a custom version with it included. TkInter (at least) is bundled.

    You can also use Py2EXE to generate standalone python applications with all superfluous junk stripped out. This will give you about 10 files or so (depending on the number of DLLs) that can be run from a single directory, possibly on a USB key.

Running local python installs on Unix-oid OS's is pretty straightforward, so that's pretty much a no brainer. Also, python comes with most linux distros and is available as 'contributed software' from most if not all trad unix vendors. IIRC it's also bundled with MacOS.

like image 21
ConcernedOfTunbridgeWells Avatar answered Sep 17 '22 15:09

ConcernedOfTunbridgeWells


Tclkit is a single-file, self-contained Tcl/Tk system. The mac version I have is about 3.8 megs. You can get a version for just about any modern OS. I carry around a thumb drive that has mac, windows and linux binaries so I can run my scripts on any platform. No install is required, just copy one file wherever you want.

The only thing it's missing from your original spec is MS SQL Server / ODBC support out of the box. I know people use tcl for that but I think you'll have to add an extra library or something. See the Tcl'ers wiki entry on MS SQL Server for more information.

like image 20
Bryan Oakley Avatar answered Sep 18 '22 15:09

Bryan Oakley