Squeak Startup Script from Debian
Last updated at 6:24 pm UTC on 14 October 2020
This page describes the squeak startup script in the Debian packages. The script is analagous to and is inspired by inisqueak. This page describes the rationale of the script and then gives its man page. The script and man page source are attached:
- squeak – the script
- squeak.sgml – the man page, in docbook format.
The main goal was that a new user can type squeak and get the expected behavior. They should not get a lecture about the proper invocation. They should not be given a lesson on image files and changes files. They should jump right into the Squeak world and be ready to play with the cool stuff, which is etoys, morphic, FM synthesis, and so on. Thus, the general strategy is to rename the VM to be squeakvm, so that the startup script can be called simply squeak.
This turns out to be nice for experienced users, too, so the script tries to accomodate them as well. Just because you know how to install files manually from /usr/share/squeak doesn't mean you have to or want to. But experienced users would like to be able to manage multiple image files, would like to specify extra VM parameters, and even would like to pass in arguments to their images.
Existing users are used to typing squeak foo.image. Since this is a common thing to want, and since it is a common situation, there is a special case for this particular command line.
More complex command lines require the image to be specified by an explicit -image argument. For example:
squeak -memory 100m -image foo.image
The explicit argument is necessary so that the script can reliably see which argument is the image file.
There are alternative strategies for the command line arguments, that were rejected for various reasons:
- The script could know how to parse every VM option, and thus reliably pick out the image name. Since the options are irregular, however, this is a lot of work. Further, the VM options are not fixed, which means that the script would need to be updated whenever the VM's options change.
- The VM options other than the image could be preceded by "–". This makes the command lines longer, however, and is especially bad if you try to pass arguments to the image:
squeak foo.image -- -- arg1 arg2 Yuck! One "–" is bad enough, and two is terrible.
- There could be a special option for VM arguments, e.g.:
squeak -vm -memory,100m This is my favorite approach conceptually, because it is unambiguously parsable and because most users should not be entering VM arguments all the time. However, in practice, I know I have typed
squeak -memory 100m too many times to be happy with this. Plus, people who use Squeak on machines without this script (assuming that such machines continue to exist :)) will find it weird.
- The VM arguments could be regularized, so that they may be detected algorithmically. I like this approach a lot, but politically and practically it seems difficult to make happen at this point. If that becomes a possibility, then the script's design could be revisited.
A final consideration was that people would like to be able to pass arguments to the squeak image. This is supported just like with the VM: you can either put in an explicit "–", or you can just stick them at the end of the command line if you think neither the script nor the VM will get confused by them.
Other notable little features:
- -image can be used along with auto-installation. If you do squeak -image temp then the script will install squeak into temp.image and temp.changes if those files do not already exist.
- In addition to gzipped images, the script allows bzip2 and uncompressed images. Also, the changes file is optional now; the script will happily install and run a bare changes-less image file. This is useful if you want to play with the plugin image.
squeak -- Squeak computer authoring system
squeak [filename] [-install | -list | -l | -run ] [-image file-name]
[-verbose | -v ] [vm options] [-- image options]
The squeak command starts Squeak, a computer authoring system. No
arguments are necessary; typing squeak alone should initialize any
files you need in the current directory and then start Squeak.
Squeak uses a few files in the current directory. The file
squeak.image holds the objects representing the entire stateof your
world, including things such as open windows, a class hierarchy, tex-
tual notes, prototype objects, and diagrams. The file squeak.changes
holds a log of any program code you have written. Finally,
SqueakV*.sources files are symbolic links to system-wide sources files
holding program code that is common to all Squeak worlds.
-install Run Squeak, but first initialize the present directory if
there are files missing. If there is a choice of images to
install, then choose automatically. No files will be over-
written. This option gives the default behavior.
-list Behave as if -install were specified, except that if an image
file is to be installed, let the user choose from a list
which image to install.
-run Do not install any files. Either run Squeak, or fail.
Instead of using squeak.image to save the state of the world,
use filename. Specifying the .image extension on filename is
optional. The name of the changes file to use will be deter-
-verbose Explain what files are being installed.
Any unrecognized options are passed directly to squeakvm.
-- image options
Any options following a double-hyphen are passed to the
Squeak world as it resumes. By convention, many worlds treat
the first such option as the name of a file to load and exe-
For convenience, an image may also be specified as the first argument.
That is, the commandline squeak filename args is treated the same as
squeak -run -image filename args.
SQUEAKVM The command to use for the virtual machine. The default is
the first squeakvm in PATH.
The directory holding available Squeak images to install.
The default is /usr/share/squeak.
The filename of the image to run. The default is
Image and changes files that may be installed. They may also
be compressed with gzip(1) or bzip2(1), so long as an exten-
sion of .gz or .bz2 is added.
The default image and changes files to install. Typically
these are symbolic links. If they are links to compressed
files, then they should have .gz or .bz2 exten-
sions matching the files they link to.
This manual page was written by Lex Spoon (lex at debian.org). Permission
is granted to copy, distribute and/or modify this document in any way.