Skip to content
The Sage Cell Server---providing a way to embed Sage computations into any web page.
JavaScript Python HTML CSS CoffeeScript Jupyter Notebook Other
Latest commit b72327c May 30, 2016 @novoselt novoselt Merge pull request #464 from paulmasson/patch-1
Update jQuery version
Failed to load latest commit information.
contrib Update ipykernel to get d6dd8a8c0a844e1526d02e286ba802620d35b02d May 15, 2016
doc Remove references to jQuery May 21, 2016
js Make ? and ?? work. May 22, 2016
router-ipc Set up a router-ipc directory to house the AsyncSender ipc pipes. Nov 23, 2013
static Use r.js for combining CSS files. Mar 1, 2016
submodules Use r.js for combining CSS files. Mar 2, 2016
templates Don't call root cell sagecell to avoid name collisions in Chrome. Apr 24, 2016
tests Make the interact test page served from the static directory, and mak… Jun 29, 2013
timing Fix simple testing scripts for the new session id handling. Apr 26, 2012
.gitignore Update .gitignore for the changed layout. Apr 2, 2016
.gitmodules Use r.js for combining CSS files. Mar 2, 2016
LICENSE.txt Clarify the licensing situation, since we are importing Sage code in … May 7, 2013
Makefile Adjust to new sagenb path May 15, 2016
README.md Improve pip packages handling and add libffi dependency. May 14, 2016
backend_cell.py Use OutputHtml. May 11, 2015
comm.py Adjust import paths to ipykernel. Jan 23, 2016
config_default.py Adjust memory limit for newer and hungrier Sage. Apr 10, 2016
db.py Allow the user to create permalinks with interact values and bookmarks Aug 4, 2013
db_sqlalchemy.py Make permalink database independent of Sage. May 24, 2015
db_web.py Allow the user to create permalinks with interact values and bookmarks Aug 4, 2013
dynamic.py Implement readonly and locations parameters to interacts Aug 3, 2013
exercise.py Add linear algebra exercise example. Sep 12, 2013
forking_kernel_manager.py Specify encoding when writing user code to a file. May 29, 2016
graphics.py Add cone, cylinder, and box functions Dec 13, 2013
handlers.py Import our log configurator before ipython/tornado. May 14, 2016
interact_compatibility.py Initial port of William's exercise string decorator Aug 7, 2013
interact_sagecell.py Fix is_Vector/Matrix import for grid control detection. Oct 25, 2015
log.py Catch all messages, not just ours and tornado. Nov 24, 2014
misc.py Use pub_thread instead of pub_socket Apr 2, 2016
namespace.py Fix typo in namespace deletion Aug 7, 2013
permalink.py Make permalinks work for Unicode: do NOT decode! Jul 15, 2015
permalink_server.py Tweak upstart and drop database logging (does not work on shutdown an… Jun 1, 2015
receiver.py Do not show code saved in sagemathcell.py in the list of files. May 23, 2016
sender.py Set up a router-ipc directory to house the AsyncSender ipc pipes. Nov 23, 2013
trusted_kernel_manager.py Import our log configurator before ipython/tornado. May 15, 2016
untrusted_kernel_manager.py Import our log configurator before ipython/tornado. May 15, 2016
web_server.py Import our log configurator before ipython/tornado. May 15, 2016

README.md

This is SageMathCell - a Sage computation web service.

Please note that installation instructions below may be outdated. The most reliable source of build instructions at the moment is in contib/vm scripts.

Security Warning

If you are going to run a world accessible SageMathCell server, you must understand security implications and should be able to implement reasonable precautions.

The worker account (which is your own one by default) will be able to execute arbitrary code, which may be malicious. Make sure that you are securing the account properly. Working with a professional IT person is a very good idea here. Since the untrusted accounts can be on any computer, one way to isolate these accounts is to host them in a virtual machine that can be reset if the machine is compromised.

Simple Installation

We assume that you have access to the Internet and can install any needed dependencies (e.g. git). If you need to know more precisely what tools are needed, please consult the scripts for building virtual machine images in contib/vm scripts.

  1. Make sure you have a recent enough version of git: 1.8.5 is good enough, while 1.7.9 isn't.
  2. Install required npm packages:

    sudo apt-get install npm
    # On Debian based systems we need to make an alias
    sudo ln -s /usr/bin/nodejs /usr/bin/node
    sudo npm install -g inherits requirejs coffee-script
  3. Optionally create a directory for all components:

    mkdir sc_build
    cd sc_build
  4. Get and build Sage (export MAKE="make -j8" or something similar can speed things up):

    git clone https://github.com/novoselt/sage.git
    pushd sage
    git checkout sagecell
    make
    ./sage -i threejs
    popd

    Note that we are building a special branch of Sage, do NOT use your regular Sage installation!

  5. Prepare Sage for SageMathCell:

    sage/sage -pip install --upgrade lockfile
    sage/sage -pip install --upgrade paramiko
    sage/sage -pip install --upgrade psutil
    sage/sage -pip install --upgrade sockjs-tornado
  6. Build SageMathCell:

    git clone https://github.com/sagemath/sagecell.git
    pushd sagecell
    git submodule update --init --recursive
    ../sage/sage -sh -c make

Configuration

  1. Go into the sagecell directory (you are there in the end of the above instructions).
  2. Copy config_default.py to config.py.
  3. Edit config.py according to your needs. Of particular interest are host and username entries of the _default_config dictionary: you should be able to SSH to username@host without typing in a password. For example, by default, it assumes you can do ssh localhost without typing in a password. Unless you are running a private and firewalled server for youself, you’ll want to change this to a more restrictive account; otherwise anyone will be able to execute any code under your username. You can set up a passwordless account using SSH: type “ssh passwordless login” into Google to find lots of guides for doing this, like http://www.debian-administration.org/articles/152. You may also wish to adjust db_config["uri"] (make the database files readable only by the trusted account).
  4. You may want to adjust log.py to suit your needs and/or adjust system configuration. By default logging is done via syslog which handles multiple processes better than plain files.
  5. Start the server via

    ../sage/sage web_server.py [-p <PORT_NUMBER>]

    where the default <PORT_NUMBER> is 8888 and go to http://localhost:<PORT_NUMBER> to use the Sage Cell server.

    When you want to shut down the server, press Ctrl-C in the same terminal.

License

See the LICENSE.txt file for terms and conditions for usage and a DISCLAIMER OF ALL WARRANTIES.

Browser Compatibility

SageMathCell is designed to be compatible with recent versions of:

  • Chrome
  • Firefox
  • Internet Explorer
  • Opera
  • Safari

If you notice issues with any of these browsers, please let us know.

Something went wrong with that request. Please try again.