Differences between revisions 4 and 5
Revision 4 as of 2010-08-08 00:54:49
Size: 5188
Editor: jason
Comment:
Revision 5 as of 2010-08-08 01:06:08
Size: 6589
Editor: jason
Comment:
Deletions are marked like this. Additions are marked like this.
Line 154: Line 154:


= Why set up a server? =

I used [[http://www.sagenb.org]] for a semester. I have four main reasons for setting up a campus server (in no particular order):

  1. At various times, we would experience slowdowns in [[sagenb.org]] (it always seemed to happen during a class presentation!). We attributed this to our internet connection, the server being overloaded, or both.
  2. Privacy -- I am not comfortable with asking students to publish worksheets on the public server. There are some people that would not be comfortable with having the students even do any work on an external server.
  3. While the [[sagenb.org]] administrators do a fantastic job, there are no guarantees about service, uptime, backups, etc. Having a campus server allows us to control these things (especially backups!)
  4. We had no control over when upgrades were performed. It was possible that a feature of Sage that we were using would change in a next release. If so, having a campus server allows me to fix a version for the semester and stick with it (or just do upgrades if it won't negatively affect the students' experience), so that the experience is consistent for the semester. On the other hand, there were several features that I contributed to Sage to help the students, and I could apply those immediately on a campus server, instead of having to wait until the next version of Sage.

Setting up a Sage server

by Jason Grout

I recently set up a Sage server, and here are very rough notes of what I did.

Hardware Requirements

RAM

The biggest bottleneck seems to be RAM; that will determine how many simultaneous users you can have. From some informal tests, it seems that the Sage notebook uses about 150MB of RAM for the server and about 50MB for a worksheet instance. If the OS uses between 512 and 1G of RAM, then I conservatively calculate that the following amounts of RAM will support the corresponding numbers of users (if the users are doing just basic calculations and not using a lot of RAM):

RAM (GB)

Simultaneous worksheets

1

5

2

20

3

40

4

60

8

140

12

200

These numbers have not been tested. If anyone has real-world numbers, please correct the table above.

Note that the numbers above are for simultaneously running worksheets. There can be many, many more accounts on the server.

Install the server

I started with a fresh copy of Ubuntu 9.10, with a working Sage compiled from source (which means I had to install some extra packages so that Sage compiles and runs; see the Sage README).

  • 1) Install apache2 and enable the proxy modules

sudo apt-get install apache2

sudo a2enmod proxy
sudo a2enmod proxy_http
  • 2) Create an apache virtual server for the Sage server. I created a file /etc/apache2/sites-available/sagenotebook with the following contents, replacing YOUR_SERVER_NAME with your server name (e.g. sagenb.example.com). Also replace YOUR_SERVER_ADMIN_EMAIL_ADDRESS with your admin email address.

<VirtualHost *:80>   
ServerName YOUR_SERVER_NAME

ProxyRequests Off
ProxyPreserveHost On

<Proxy *>
Order deny,allow
Allow from all
</Proxy>

ProxyPass / http://localhost:8000/
ProxyPassReverse / http://localhost:8000/

 DocumentRoot /
 <Location />   DefaultType text/html
 </Location>

   ErrorLog /var/log/apache2/error.log

   # Possible values include: debug, info, notice, warn, error, crit,
   # alert, emerg.
   LogLevel warn

   CustomLog /var/log/apache2/access.log combined
   ServerAdmin YOUR_SERVER_ADMIN_EMAIL_ADDRESS
 </VirtualHost>
  • 3) Enable the site in apache and restart apache

sudo a2dissite default
sudo a2ensite sagenotebook
sudo /etc/init.d/apache2 restart
  • 4) Now add a server and 10 user accounts. The Sage notebook will invoke one of these 10 accounts to do the worksheet processing.

sudo addgroup sageuser
sudo adduser --disabled-password sageserver
for i in $(seq 0 9); do
 sudo adduser --disabled-password --ingroup sageuser sage$i
done
  • 5) I wanted to restrict logins for the sage server and sage users. I want to prevent logins as sageserver, and restrict sage* logins to only come from localhost. I'll use sudo to run commands as the sage server. Under /etc/pam.d/sshd, uncomment this line, and add "nodefgroup":

account  required     pam_access.so nodefgroup
  • Then in /etc/security/access.conf, add these lines:

-:(sageuser):ALL EXCEPT localhost
-:sageserver:ALL
  • 6) Now set up passwordless ssh keys

sudo -u sageserver -i "ssh-keygen -t dsa"
for i in $(seq 0 9); do
 sudo cat ~sageserver/.ssh/id_dsa.pub | sudo -u sage$i -i "umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys "
done
  • 7) Test logins (do at least one to generate the known_hosts file)

sudo -u sageserver -i "ssh sage0@localhost echo Done"
  • 8) I store the following command in a file /home/sageserver/startnotebook to start the notebook

echo "notebook(interface='localhost', port=8000, accounts=True, timeout=1200, server_pool=['sage%d@localhost'%i for i in range(10)], ulimit='-u 100 -t 3600 -v 500000', open_viewer=False)" | ~/sage/sage
  • 9) Now copy the current version of Sage into the sageserver home directory. I set up things so that /home/sageserver/sage/ is a symbolic link to whatever the current version is (like /home/sageserver/sage-4.3.2/) 10) Install any optional spkgs that you want. I install the jsmath-image-fonts spkg

sudo -u sageserver -i "~/sage/sage -i jsmath_image_fonts-1.4.p3"

To start the sage server, do the following. Note that since I am using sudo to run commands as sageserver, instead of logging in as sageserver, I have to do the script /dev/null trick to get screen to work.

sudo su -l sageserver
script /dev/null
screen
./startnotebook

I also added this to ~/sage/sage to control process limits:

if [[ `whoami` = sage* ]]; then
   echo "User " `whoami`
   ulimit -v 1500000 -u 300 -n 128 -t 1800
fi

Additional Notes

Why set up a server?

I used http://www.sagenb.org for a semester. I have four main reasons for setting up a campus server (in no particular order):

  1. At various times, we would experience slowdowns in sagenb.org (it always seemed to happen during a class presentation!). We attributed this to our internet connection, the server being overloaded, or both.

  2. Privacy -- I am not comfortable with asking students to publish worksheets on the public server. There are some people that would not be comfortable with having the students even do any work on an external server.
  3. While the sagenb.org administrators do a fantastic job, there are no guarantees about service, uptime, backups, etc. Having a campus server allows us to control these things (especially backups!)

  4. We had no control over when upgrades were performed. It was possible that a feature of Sage that we were using would change in a next release. If so, having a campus server allows me to fix a version for the semester and stick with it (or just do upgrades if it won't negatively affect the students' experience), so that the experience is consistent for the semester. On the other hand, there were several features that I contributed to Sage to help the students, and I could apply those immediately on a campus server, instead of having to wait until the next version of Sage.

SageServer (last edited 2013-12-04 18:44:19 by kcrisman)