Difference between revisions of "Cluster: Sage Chroot"
(→Sage Install) |
|||
(3 intermediate revisions by the same user not shown) | |||
Line 5: | Line 5: | ||
* [http://www.mail-archive.com/sage-support@googlegroups.com/msg01201.html [sage-support] Re: How to run the notebook in the background] | * [http://www.mail-archive.com/sage-support@googlegroups.com/msg01201.html [sage-support] Re: How to run the notebook in the background] | ||
* [http://groups.google.com/group/sage-support/msg/849e906146b41d28?pli=1 [sage-support] chroot jail -- unable to mount image file] | * [http://groups.google.com/group/sage-support/msg/849e906146b41d28?pli=1 [sage-support] chroot jail -- unable to mount image file] | ||
− | * [http://www.mail-archive.com/sage-devel@googlegroups.com/msg03545.html [sage-devel] Re: SAGE in chroot] | + | * [http://www.mail-archive.com/sage-devel@googlegroups.com/msg03545.html [sage-devel] Re: SAGE in chroot] - This one is for RedHat |
== Chroot == | == Chroot == | ||
Line 12: | Line 12: | ||
<pre> | <pre> | ||
/mounts/bobsced/sage_chroot.image /mounts/bobsced/sage_chroot ext3 loop 0 0 | /mounts/bobsced/sage_chroot.image /mounts/bobsced/sage_chroot ext3 loop 0 0 | ||
− | /dev /mounts/bobsced/sage_chroot/dev | + | /dev /mounts/bobsced/sage_chroot/dev none rbind,dev 0 0 |
− | /proc /mounts/bobsced/sage_chroot/proc | + | /proc /mounts/bobsced/sage_chroot/proc none bind 0 0 |
+ | /selinux /mounts/bobsced/sage_chroot/selinux none bind 0 0 | ||
</pre> | </pre> | ||
In order to get yum to install there, I had to edit <code>/etc/yum.repos.d/CentOS-Base.repo</code> and hard code $releasever to 3.5. I also commented out all the repositories except the top one. Then I was able to run: | In order to get yum to install there, I had to edit <code>/etc/yum.repos.d/CentOS-Base.repo</code> and hard code $releasever to 3.5. I also commented out all the repositories except the top one. Then I was able to run: | ||
− | :<code>yum --installroot=/mounts/bobsced/sage_chroot install bash fileutils sed which make gcc gcc-c++ m4 tar gzip bzip2 flex bison findutils yum rpm passwd perl diffutils</code> | + | :<code>yum --installroot=/mounts/bobsced/sage_chroot install bash fileutils sed which make gcc gcc-c++ m4 tar gzip bzip2 flex bison findutils yum rpm passwd perl diffutils sudo</code> |
to set up the base install of the OS for the chroot. It also needs a copy of /etc/hosts for the localhost entry. | to set up the base install of the OS for the chroot. It also needs a copy of /etc/hosts for the localhost entry. | ||
Line 31: | Line 32: | ||
== Sage Setup on the Base Filesystem == | == Sage Setup on the Base Filesystem == | ||
− | On the filesystem outside the chroot, I populated <code>/etc/sysconfig/sage-config</code>: | + | I followed the post above for Red Hat. On the filesystem outside the chroot, I populated <code>/etc/sysconfig/sage-config</code>: |
<pre> | <pre> | ||
Line 38: | Line 39: | ||
PORT=8000 | PORT=8000 | ||
USER=5000 | USER=5000 | ||
+ | </pre> | ||
+ | |||
+ | And <code>/usr/local/bin/sage-notebook</code>: | ||
+ | |||
+ | <pre> | ||
+ | #!/bin/bash | ||
+ | . /etc/sysconfig/sage-config | ||
+ | COMMAND="notebook(address='$ADDRESS', port=$PORT, accounts=True, open_viewer=false, secure=true)" | ||
+ | |||
+ | nohup /usr/sbin/chroot $SAGE_SERVER su - sage -c "./sage -c \"$COMMAND\" " print >>/var/log/sage & | ||
+ | </pre> | ||
+ | |||
+ | And <code>/usr/local/bin/sage-killer</code>: | ||
+ | |||
+ | <pre> | ||
+ | #!/bin/bash | ||
+ | . /etc/sysconfig/sage-config | ||
+ | |||
+ | kill -INT `cat $SAGE_SERVER/home/sage/.sage/sage_notebook/twistd.pid` 2>&1 >>/var/log/sage | ||
+ | </pre> | ||
+ | |||
+ | And finally, <code>/etc/rc.d/init.d/sage</code>: | ||
+ | <pre> | ||
+ | #!/bin/sh | ||
+ | # | ||
+ | # This script starts up a sage notebook in a chroot environment. | ||
+ | # Copied from http://www.mail-archive.com/sage-devel@googlegroups.com/msg03545.html | ||
+ | # | ||
+ | # chkconfig: 2345 35 98 | ||
+ | # description: Run a notebook in chroot environment | ||
+ | # | ||
+ | |||
+ | . /etc/rc.d/init.d/functions | ||
+ | |||
+ | start() | ||
+ | { | ||
+ | echo -n $"Starting sage " | ||
+ | if [ ! -f /var/lock/subsys/sage ]; then | ||
+ | nohup /usr/local/bin/sage-notebook print >>/var/log/sage & | ||
+ | fi | ||
+ | touch /var/lock/subsys/sage | ||
+ | success | ||
+ | echo | ||
+ | return 0 | ||
+ | } | ||
+ | |||
+ | stop() | ||
+ | { | ||
+ | echo -n $"Stopping sage " | ||
+ | /usr/local/bin/sage-killer | ||
+ | rm -f /var/lock/subsys/sage | ||
+ | success | ||
+ | echo | ||
+ | return 0 | ||
+ | } | ||
+ | |||
+ | status () { | ||
+ | if [ ! -f /var/lock/subsys/sage ]; then | ||
+ | echo $"Sage is not currently running" | ||
+ | return 1 | ||
+ | else | ||
+ | echo $"Sage is running" | ||
+ | return 0 | ||
+ | fi | ||
+ | |||
+ | } | ||
+ | # See how we were called. | ||
+ | case "$1" in | ||
+ | start) | ||
+ | start | ||
+ | ;; | ||
+ | stop) | ||
+ | stop | ||
+ | ;; | ||
+ | status) | ||
+ | status | ||
+ | ;; | ||
+ | restart) | ||
+ | stop | ||
+ | start | ||
+ | ;; | ||
+ | *) | ||
+ | echo $"Usage: $0 {start|stop|restart|status}" | ||
+ | exit 1 | ||
+ | esac | ||
+ | |||
+ | exit 0 | ||
</pre> | </pre> |
Latest revision as of 13:08, 11 September 2009
In order to chroot the Sage notebook, I used a mix of steps from the following guides:
- MSRI SAGE Installation Guide: Running the SAGE Notebook Securely
- [sage-support] Re: How to run the notebook in the background
- [sage-support] chroot jail -- unable to mount image file
- [sage-devel] Re: SAGE in chroot - This one is for RedHat
Chroot
The image itself is at /mounts/bobsced/sage_chroot.image (aka /cluster/bobscednew/sage_chroot.image). It gets mounted in the same directory as sage_chroot (it's an ext3 filesystem). The chroot needs to have /dev and /proc, so here's a copy of the relevant parts of /etc/fstab
:
/mounts/bobsced/sage_chroot.image /mounts/bobsced/sage_chroot ext3 loop 0 0 /dev /mounts/bobsced/sage_chroot/dev none rbind,dev 0 0 /proc /mounts/bobsced/sage_chroot/proc none bind 0 0 /selinux /mounts/bobsced/sage_chroot/selinux none bind 0 0
In order to get yum to install there, I had to edit /etc/yum.repos.d/CentOS-Base.repo
and hard code $releasever to 3.5. I also commented out all the repositories except the top one. Then I was able to run:
yum --installroot=/mounts/bobsced/sage_chroot install bash fileutils sed which make gcc gcc-c++ m4 tar gzip bzip2 flex bison findutils yum rpm passwd perl diffutils sudo
to set up the base install of the OS for the chroot. It also needs a copy of /etc/hosts for the localhost entry.
Sage Install
I downloaded the tar ball normally and then moved it into the chroot from the base filesystem. I untarred it from the base filesystem, too, and put it in the directory /home/sage in the chroot, then ran (as the sage
user in the chroot, which has id 5000, which isn't used in the main filesystem)
make
make test
Make sure to run ./sage
once inside the chroot so it sets up its variables and everything.
Sage Setup on the Base Filesystem
I followed the post above for Red Hat. On the filesystem outside the chroot, I populated /etc/sysconfig/sage-config
:
SAGE_SERVER=/mounts/bobsced/sage_image ADDRESS=159.28.234.200 PORT=8000 USER=5000
And /usr/local/bin/sage-notebook
:
#!/bin/bash . /etc/sysconfig/sage-config COMMAND="notebook(address='$ADDRESS', port=$PORT, accounts=True, open_viewer=false, secure=true)" nohup /usr/sbin/chroot $SAGE_SERVER su - sage -c "./sage -c \"$COMMAND\" " print >>/var/log/sage &
And /usr/local/bin/sage-killer
:
#!/bin/bash . /etc/sysconfig/sage-config kill -INT `cat $SAGE_SERVER/home/sage/.sage/sage_notebook/twistd.pid` 2>&1 >>/var/log/sage
And finally, /etc/rc.d/init.d/sage
:
#!/bin/sh # # This script starts up a sage notebook in a chroot environment. # Copied from http://www.mail-archive.com/sage-devel@googlegroups.com/msg03545.html # # chkconfig: 2345 35 98 # description: Run a notebook in chroot environment # . /etc/rc.d/init.d/functions start() { echo -n $"Starting sage " if [ ! -f /var/lock/subsys/sage ]; then nohup /usr/local/bin/sage-notebook print >>/var/log/sage & fi touch /var/lock/subsys/sage success echo return 0 } stop() { echo -n $"Stopping sage " /usr/local/bin/sage-killer rm -f /var/lock/subsys/sage success echo return 0 } status () { if [ ! -f /var/lock/subsys/sage ]; then echo $"Sage is not currently running" return 1 else echo $"Sage is running" return 0 fi } # See how we were called. case "$1" in start) start ;; stop) stop ;; status) status ;; restart) stop start ;; *) echo $"Usage: $0 {start|stop|restart|status}" exit 1 esac exit 0