You are currently browsing the category archive for the ‘Slicehost’ category.

Watch a 2-minute screencast of these instructions on Vimeo or join Vimeo for a full-size movie (800×600 13.5 MB).

GemStone/S 64 Bit 2.3.0 is now available via anonymous FTP from Since we have been using beta versions up until now, we should reinstall our server with the new executables and database (there is no officially supported path to move from beta to released code). If you have not yet setup GemStone/S on your server, then you should be able to do so following these instructions. If you already installed a beta version of GemStone/S, then you will need to follow the instructions in this post.

First, log in to your Slice. I have an alias ‘slice’ that takes care of the ssh address and port. Once logged in, run the following command that sets the needed environment variables:

source /opt/gemstone/product/seaside/defSeaside

Now we will stop any GemStone processes:

runSeasideGems stop

Next, we will move to the proper directory and get the new version of GemStone/S:

cd /opt/gemstone

Now we remove the link to our old product tree and set up a link to the new product tree:

rm product
ln -s /opt/gemstone/GemStone64Bit2.3.0-x86_64.Linux product

To verify that we have the new product, launch Topaz and check that the build number is 20209:


At this point we can update the config file, copy an extent, and start the server:

echo "SHR_PAGE_CACHE_SIZE_KB = 100000;" \
    >> /opt/gemstone/product/seaside/data/system.conf
cp $GEMSTONE/bin/extent0.seaside.dbf $GEMSTONE_DATADIR/extent0.dbf
chmod +w $GEMSTONE_DATADIR/extent0.dbf
startnetldi -g -a glass -p 50378:50378
runSeasideGems start
gslist -cvl

If all goes well, then you should have a new database running Seaside. Try it out by browsing to the site from your client:


At this point follow these instructions to see if Dale has any updates to GLASS.

A screencast of these instructions is available on Vimeo (compressed) or full-size (11.8 MB).

In a recent post I described how to set up Apache and GemStone/S on Slicehost and we ended with running Seaside. This post will describe how to connect to your GLASS system from GemTools and update Seaside (and related packages) to the latest release.

In a local shell, we log in to the Slicehost server using SSH (earlier I described an alias ‘slice’ that I have for this command):

  • ssh -p 30000 glass@slice

Once connected we run a script to set some environment variables and verify that the system is running:

  • source /opt/gemstone/product/seaside/defSeaside
  • gslist

If gslist does not show the appropriate processes, start them:

  • startGemstone
  • runSeasideGems start

The next step is to start the NetLDI service. This service listens on a port (during our initial setup the script defined 50377 as the port for NetLDI), starts gems in guest mode with the glass account, and uses a special port range (in our case one port, 50378, use more if there will be many concurrent connections) to communicate with the newly-started gem.

  • startnetldi -g -a glass -p 50378:50378

Now we can return to our client environment and start GemTools. GemTools is a Squeak application available from the downloads page at In GemTools we need to identify the GLASS host by IP address or host name. In my case I’ve added ‘slice’ to my hosts file so I can give the host name. Click the “Login” button to connect to GemStone.

On the Transcript window there are a row of buttons. Click “Monticello” to open a Monticello browser. In this browser we have a list of the packages currently installed in our system. Select the GLASS package on the left pane and note the list of servers for that package in the right pane. Select the http server and click the “Open” button. This will open a new window with the packages available on that server in the left pane and a list of versions in the right pane. Select the latest one (at the top), and click the “Load” button. Each of these steps is somewhat slow, so be patient. Once the package is loaded, you can close the Monticello browsers.

From the Transcript, you can click “Browse” to browse code and you can execute Smalltalk code in the text entry widget.

This use of GemTools will form the basis of much of what we do later in developing a Seaside application in GLASS.

In a recent post I described the process for installing and configuring Apache and FastCGI on Slicehost. This 4-minute screencast shows me going through the process. At the end we are running Seaside on GemStone/S with Apache serving static pages and redirecting requests for dynamic pages to a round-robin series of Gems configured to handle the requests through FastCGI.

The full 800×600 screencast (24.7 MB) is available from Vimeo here. A compressed version is available on Vimeo here.

A compressed version (320×240) is available on YouTube:

In an earlier post I described how to set up a Slicehost server to run GemStone/S and we demonstrated serving web pages using a Smalltalk web server. In this post we look at installing and configuring Apache and FastCGI so that you can run Seaside in GemStone/S behind Apache.

Start by logging in to your Slice (I’ve created an alias name ‘slice’ for this command):

    ssh -p 30000 glass@slice

Next, install Apache:

    install apache2 apache2.2-common apache2-mpm-prefork apache2-utils \
        libexpat1 ssl-cert apache2-threaded-dev

Now you should be able to navigate to your site and see the words “It Works!” by entering the following in a browser:


GLASS can be configured to use FastCGI and we need to download, build, install, and enable it:

    tar zxvf mod_fastcgi-current.tar.gz
    cd mod_fastcgi*
    cp Makefile.AP2 Makefile
    make top_dir=/usr/share/apache2
    sudo make install top_dir=/usr/share/apache2

Create a file that will load the FastCGI module (we will enable it later):

    echo "LoadModule fastcgi_module /usr/lib/apache2/modules/" \
        > fastcgi.load
    sudo mv fastcgi.load /etc/apache2/mods-available/

Now we need to configure Apache to route requests to GemStone/S. Apache has a rich set of configuration options, including places to put config files. The basic model is that Apache reads /etc/apache2/apache2.conf and that file has a series of includes that pull in other files. Following the general spirit of how Apache seems to expect things, we can add a configuration file that references another config file:

    echo "Include /opt/gemstone/etc/apache2.conf" > glass
    sudo mv glass /etc/apache2/sites-available/

Now we need to create some directories and set some permissions.

    chmod 775 /opt/gemstone
    cd /opt/gemstone
    mkdir etc www www/glass1 www/glass2 www/glass3

Now we can create our Apache config file named /opt/gemstone/etc/apache2.conf and past the following lines (edit the second line that has an email address):

ServerName  glass

Listen 8081
Listen 8082
Listen 8083

FastCgiExternalServer /opt/gemstone/www/glass1/seaside \
    -host localhost:9001 -pass-header Authorization
FastCgiExternalServer /opt/gemstone/www/glass2/seaside \
    -host localhost:9002 -pass-header Authorization
FastCgiExternalServer /opt/gemstone/www/glass3/seaside \
    -host localhost:9003 -pass-header Authorization

<VirtualHost *:80>
        DocumentRoot /opt/gemstone/www
        CustomLog    /opt/gemstone/log/glass-access.log combined
        ErrorLog     /opt/gemstone/log/glass-error.log
        LogLevel     info
    <Directory "/opt/gemstone/www">
        Options Indexes FollowSymLinks
        AllowOverride None
        Order allow,deny
        Allow from all

        <Proxy /seaside>
            AddDefaultCharset off
            Order allow,deny
            Allow from all
        ProxyPreserveHost On     #make proxy rewrite urls in the output
        ProxyPass /seaside balancer://gemtrio
        ProxyPassReverse /seaside balancer://gemtrio
        <Proxy balancer://gemtrio>
            Order allow,deny
            Allow from all
            BalancerMember http://localhost:8081/seaside
            BalancerMember http://localhost:8082/seaside
            BalancerMember http://localhost:8083/seaside

<VirtualHost *:8081>
        CustomLog     /opt/gemstone/log/glass-vhost-8081-access.log combined
        ErrorLog      /opt/gemstone/log/glass-vhost-8081-error.log
        LogLevel      warn
        DocumentRoot /opt/gemstone/www/glass1

<VirtualHost *:8082>
        CustomLog     /opt/gemstone/log/glass-vhost-8082-access.log combined
        ErrorLog      /opt/gemstone/log/glass-vhost-8082-error.log
        LogLevel      warn
        DocumentRoot /opt/gemstone/www/glass2

<VirtualHost *:8083>
        CustomLog     /opt/gemstone/log/glass-vhost-8083-access.log combined
        ErrorLog      /opt/gemstone/log/glass-vhost-8083-error.log
        LogLevel      warn
        DocumentRoot /opt/gemstone/www/glass3

Now we are ready to enable the new site and restart Apache:

    sudo a2enmod proxy_balancer
    sudo a2enmod proxy_http
    sudo a2enmod fastcgi
    sudo a2dissite 000-default
    sudo a2ensite glass
    sudo apache2ctl restart

Create a new home page:

    echo '<html><body><h1><a href="seaside">Seaside Rocks!</a></h1></body></html>' \
        > /opt/gemstone/www/index.html

If there are no errors, then you should be able to view the new home page by refreshing your web browser. Now we need to start GemStone and start some Gems:

    source /opt/gemstone/product/seaside/defSeaside
    runSeasideGems start

At this point you should be able to refresh your browser and follow the link to Seaside. You can log out of the Slicehost virtual private server at this point and leave GemStone/S running.

In my earlier post I have instructions for installing GemStone/S on a Slicehost virtual private server. In that example, I took the default Linux distribution of Ubuntu 8.04.1 LTS (hardy). People often ask if GemStone/S requires a particular distribution. The answer is “No.” Instead, GemStone identifies which distribution is tested (SuSE Linux ES 10), and which libraries are assumed (kernel version and glibc 2.4-31.5). Because Linux is free and open source, there are a wide variety of variations.

In fact, the discussion of Linux Distributions is sufficiently complex that it has its own page on Wikipedia. As long as a distribution includes the required libraries, it should support GemStone/S. The variations are in how the system is managed and how the packages are installed. If you have a Linux Distro that you like, then presumably you know how to use it. If you don’t have much experience (and I’m in that camp), then it might be better to use something known to work (and for which there are good resources to help). In my Slicehost example, I took the default and found that there were excellent instructions on how to set up the server.

If you use another distribution, feel free to post your experience in the comments.

Based on the earlier instructions, we have three screencasts on how to set up GLASS on Slicehost.

Update: You can get them from YouTube in 320×240 resolution (see below) or you can get them in 800×600 resolution from these links: (50 MB), (55 MB), and (53 MB).

In Part 1, we obtain a Slicehost account and secure our new server:

In Part 2, we update the server and do some basic configuration:

IN Part 3, we install GemStone/S, start a Seaside server, and browse code:

If you have problems with YouTube, check out the Vimeo list.

To run Seaside on GemStone/S, you need a 64-bit OS running on 64-bit hardware. This tutorial will walk through the process of setting up a hosted virtual private server on Slicehost. My client machine is a MacBook Pro, and I haven’t tested the process from anything else.

Setup the client machine

In these instructions we will be using your local (“client”) machine to connect to the new virtual private server (“server”) machine. On the client we need a web browser, a telnet/SSH client, and Internet connectivity. I assume you have a web browser and Internet connectivity. If you are on a Macintosh running OSX or if you are on Linux (or another Unix variant) then you should have a SSH client. If you are on Windows, I recommend PuTTY as a SSH client.

Get a Slicehost account

  1. Open a web browser on
  2. Click the “SIGN UP” button
  3. Provide your name, email, and billing information
  4. Put down as the referral 😉
  5. Leave the Slice Size as 256 (or more if you want)
  6. Leave the Linux Distribution as “Ubuntu 8.04.1 LTS (hardy)”
  7. Enter “glass” (without the quotes) as the name for your slice
  8. Agree to the terms of service and click “Build my Slice!”
  9. Watch for an email reporting that your slice is built

Add your server IP to your client hosts file

In these instructions, we will use the hostname “slice” to identify the server as this is easier than using a full IP address

  • On Linux or Macintosh, open a local Terminal window and enter the following:
sudo vi /etc/hosts
  • On Windows, open a command shell (Start / Run… / cmd), and enter the following:
notepad C:\WINDOWS\system32\drivers\etc\hosts

Edit the file to include your new IP address (as identified in the email from Slicehost) and save the file.	slice    # Slicehost server for GLASS

Secure your server

Follow these instructions, with a few changes.

  • First, replace “demo” with “glass” as the admin user.
  • Second, after you create the “glass” users, set the default group to “adm”:
usermod -g adm glass
  • As you are setting up iptables, add the following three lines for GemStone’s use later:
-A INPUT -p tcp -m tcp --dport 8008 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 50377 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 50378 -j ACCEPT
  • After you finish these changes, you can reboot the machine:

This will terminate your session and end your SSH connection.

Update your server

Log back into your server using the port you opened when you secured the server and the user you created. Note that the “slice” in the following line will be resolved based on our local hosts file that was edited earlier. If you did not modify your hosts file, you would need to enter a full IP address instead of “slice”.

ssh -p 30000 glass@slice

If you properly secured your server, then this should log you in without a password. Now, follow these instructions, with a couple minor changes and additions to update your server.

  • .bashrc — I want a slightly different color for my command prompt:
export PS1='\[\e[0;35m\]\h\[\e[0;34m\] \w\[\e[00m\]$ '
  • Also, I like to be able to see directories with a shortcut:
alias ll="ls -alF"
  • locales — To reduce the risk, update the locale after everything else (especially, upgrading the server which might include a fix for this problem).
  • When setting the locale, chose what is right for you (I use “en_US” instead of “en_GB”).
  • Time Zone — Select a timezone using the following command and then answering the questions:
  • Now apply the selection (shown on the last line) as the system default:
sudo mv /etc/localtime /etc/localtime.bak
sudo ln -sf /usr/share/zoneinfo/America/Los_Angeles /etc/localtime

Install GemStone/S 64 Bit

On the server, navigate to your home directory:

cd ~

Download the GemStone/S install script:


Make the script executable. If copy & paste doesn’t work, then go ahead and type the line by hand:

chmod 700

Install a couple packages that the GemStone script requires:

install bc
install zip

Now run the script (again, if copy & paste doesn’t work, then type the line by hand):


Among other things, the script will have changed some shared memory kernel settings and we need to reboot for these changes to take effect:

sudo reboot

Configuring GemStone/S

From your client machine, log back into your server.

ssh -p 30000 glass@slice

At this point we need to make a tweek to the configuration file to reflect the Slicehost configuration.

The system configuration file specifies a 500MB shared page cache, which is twice our total RAM. Add a new line to the end of the system config file:

echo "SHR_PAGE_CACHE_SIZE_KB = 100000;" \
    >> /opt/gemstone/product/seaside/data/system.conf

Start GemStone/S

Define some environment variables, start GemStone, and start a web server:

source /opt/gemstone/product/seaside/defSeaside
startSeaside_Hyper 8008

Now using a web browser on your client machine, navigate to Seaside:


This should show the Dispatcher Viewer in your client browser. Note that we are using a non-standard port (8008) to reach our Smalltalk web server (Hyper). At this point, using your client web browser you can “Toggle Halos” and open a Class Browser (click on the Notepad icon next to the word “WADispatcherViewer”).

To stop the Smalltalk web server, return to your client SSH session and press <Ctrl>+<C>. At this point you can stop GemStone and logout.



We have installed GemStone/S on a Slicehost server and served Seaside pages from it. Further posts will look at additional configurations, including running a maintenance gem that will expire (and garbage collect) old sessions.