Example #1
0
def setup_base_chroot(options):
    """ Create and setup the base chroot jail users will run in. """
    install_apt_packages(["debootstrap", "schroot", "unionfs-fuse"])
    chroot_dir = "/srv/chroot"
    base_chroot_dir = os.path.join(chroot_dir, "aic-base")
    if os.path.exists(base_chroot_dir):
        return
    os.makedirs(base_chroot_dir)
    run_cmd("debootstrap --variant=buildd --arch amd64 maverick \
            %s http://us.archive.ubuntu.com/ubuntu/" % (base_chroot_dir,))
    with CD(TEMPLATE_DIR):
        run_cmd("cp chroot_configs/chroot.d/aic-base /etc/schroot/chroot.d/")
        run_cmd("cp chroot_configs/sources.list %s/etc/apt/"
                % (base_chroot_dir,))
        run_cmd("cp -r chroot_configs/ai-jail /etc/schroot/ai-jail")
    run_cmd("schroot -c aic-base -- /bin/sh -c \"DEBIANFRONTEND=noninteractive;\
            apt-get update; apt-get upgrade -y\"")
    run_cmd("schroot -c aic-base -- apt-get install -y python")
    run_cmd("schroot -c aic-base -- %s/setup/worker_setup.py --chroot-setup"
            % (os.path.join(options.root_dir, options.local_repo),))
    worker_dir = os.path.join(options.root_dir, options.local_repo, "worker")
    with CD(worker_dir):
        user_info = pwd.getpwnam(options.username)
        cuid = user_info[2]
        cgid = user_info[3]
        jgid = grp.getgrnam("jailusers")[2]
        run_cmd("gcc -DCONTEST_UID=%d -DCONTEST_GID=%d -DJAIL_GID=%d jail_own.c -o jail_own" % (cuid, cgid, jgid))
        run_cmd("chown root:%s jail_own" % (cgid,))
        run_cmd("chmod u=rwxs,g=rwx,o= jail_own")
Example #2
0
def setup_website(opts):
    """ Configure apache to serve the website and set a server_info.php """
    website_root = os.path.join(opts.local_repo, "website")
    if opts.enable_email:
        reply_email = "donotreply@" + opts.website_hostname
    else:
        reply_email = "donotsend"
    si_filename = os.path.join(TEMPLATE_DIR, "server_info.php.template")
    with open(si_filename, 'r') as si_file:
        si_template = si_file.read()
    si_contents = si_template.format(upload_dir=opts.upload_dir,
            map_dir=opts.map_dir, replay_dir=opts.replay_dir,
            log_dir=opts.log_dir, repo_dir=opts.local_repo,
            database_user=opts.database_user,
            database_password=opts.database_password,
            database_name=opts.database_name,
            reply_email=reply_email,
            api_url=opts.website_hostname
            )
    with CD(website_root):
        if not os.path.exists("server_info.php"):
            with open("server_info.php", "w") as si_file:
                si_file.write(si_contents)
        if not os.path.exists("aichallenge.wiki"):
            run_cmd("git clone git://github.com/aichallenge/aichallenge.wiki.git")
            run_cmd("python setup.py")
    with CD(os.path.join(opts.local_repo, "ants/dist/starter_bots")):
        run_cmd("make")
        run_cmd("make install")
    if not os.path.exists(os.path.join(website_root, "worker-src.tgz")):
        create_worker_archive.main(website_root)
    visualizer_path = os.path.join(opts.local_repo, "ants/visualizer")
    plugin_path = "/usr/share/icedtea-web/plugin.jar"
    if not os.path.exists(os.path.join(website_root, "visualizer")):
        with CD(visualizer_path):
            run_cmd("ant deploy -Djava.plugin=%s -Ddeploy.path=%s"
                    % (plugin_path, website_root))
    site_config = "/etc/apache2/sites-available/" + opts.website_hostname
    if not os.path.exists(site_config):
        site_filename = os.path.join(TEMPLATE_DIR, "apache_site.template")
        with open(site_filename, "r") as site_file:
            site_template = site_file.read()
        site_contents = site_template.format(web_hostname=opts.website_hostname,
                web_root=website_root,
                log_dir=opts.log_dir,
                map_dir=opts.map_dir,
                replay_dir=opts.replay_dir)
        with open(site_config, "w") as site_file:
            site_file.write(site_contents)
        if opts.website_as_default:
            enabled_link = "/etc/apache2/sites-enabled/000-default"
        else:
            enabled_link = "/etc/apache2/sites-enabled/" + opts.website_hostname
        if os.path.exists(enabled_link):
            os.remove(enabled_link)
        os.symlink(site_config, enabled_link)
        run_cmd("a2enmod rewrite")
        run_cmd("/etc/init.d/apache2 restart")
    run_cmd("chown -R {0}:{0} {1}".format(opts.username, website_root))
Example #3
0
def setup_local_repo(opts):
    """ Create or update the local source repository as needed """
    with CD(opts.root_dir):
        if not os.path.exists(os.path.join(opts.root_dir, opts.local_repo)):
            run_cmd("git clone -b %s %s %s" %
                    (opts.src_branch, opts.src_repo, opts.local_repo))
        else:
            with CD(os.path.join(opts.root_dir, opts.local_repo)):
                run_cmd("git pull %s %s" % (opts.src_repo, opts.src_branch))
Example #4
0
def install_coffeescript(download_base):
    """ Install coffeescript """
    if os.path.exists("/usr/local/bin/coffee"):
        return
    with CD("/root"):
        run_cmd("curl '%s/coffeescript.tgz' > coffeescript.tgz" %
                (download_base, ))
        run_cmd("tar xzf coffeescript.tgz")
        with CD("jashkenas-coffee-script-1a652a9"):
            run_cmd("bin/cake install")
Example #5
0
def install_nodejs():
    """ Install node.js """
    if os.path.exists("/usr/local/bin/node"):
        return
    install_apt_packages("make")
    try:
        os.makedirs("/usr/local/src/nodejs")
    except OSError:
        pass
    with CD("/usr/local/src/nodejs"):
        run_cmd("curl 'http://nodejs.org/dist/node-v0.4.1.tar.gz' | tar -xz")
    with CD("/usr/local/src/nodejs/node-v0.4.1"):
        run_cmd("./configure")
        run_cmd("make")
        run_cmd("make install")
Example #6
0
def setup_contest_files(opts):
    """ Setup all the contest specific files and directories """
    contest_root = opts.root_dir
    compiled_dir = os.path.join(contest_root, "compiled")
    if not os.path.exists(compiled_dir):
        os.mkdir(compiled_dir)
        run_cmd("chown {0}:{0} {1}".format(opts.username, compiled_dir))
    map_dir = os.path.join(contest_root, "maps")
    if not os.path.exists(map_dir):
        os.mkdir(map_dir)
        run_cmd("chown {0}:{0} {1}".format(opts.username, map_dir))
    worker_dir = os.path.join(contest_root, opts.local_repo, "worker")
    si_filename = os.path.join(TEMPLATE_DIR, "worker_server_info.py.template")
    with open(si_filename, 'r') as si_file:
        si_template = si_file.read()
    si_contents = si_template.format(contest_root=contest_root,
                                     map_dir=map_dir,
                                     compiled_dir=compiled_dir,
                                     api_url=opts.api_url,
                                     api_key=opts.api_key)
    with CD(worker_dir):
        if not os.path.exists("server_info.py"):
            with open("server_info.py", "w") as si_file:
                si_file.write(si_contents)
            run_cmd("chmod 600 server_info.py")
    run_cmd("chown -R {0}:{0} {1}".format(opts.username, contest_root))
Example #7
0
def install_groovy():
    """ Install the Groovy language """
    if os.path.exists("/usr/bin/groovy"):
        return
    with CD("/root"):
        run_cmd("curl 'http://dist.groovy.codehaus.org/distributions/installers/deb/groovy_1.7.8-1_all.deb' > groovy_1.7.8-1_all.deb")
        run_cmd("dpkg -i groovy_1.7.8-1_all.deb")
Example #8
0
def install_groovy(download_base):
    """ Install the Groovy language """
    if os.path.exists("/usr/bin/groovy"):
        return
    with CD("/root"):
        run_cmd("curl '%s/groovy.deb' > groovy.deb" % (download_base, ))
        run_cmd("dpkg -i groovy.deb")
Example #9
0
def setup_base_chroot(options):
    """ Create and setup the base chroot jail users will run in. """
    install_apt_packages(["debootstrap", "schroot", "unionfs-fuse", "gcc"])
    chroot_dir = "/srv/chroot"
    base_chroot_dir = os.path.join(chroot_dir, "aic-base")
    if not os.path.exists(base_chroot_dir):
        os.makedirs(base_chroot_dir)
        run_cmd("debootstrap --variant=buildd --arch %s saucy \
                %s %s" % (options.arch, base_chroot_dir, options.os_url))
        with CD(TEMPLATE_DIR):
            run_cmd(
                "cp chroot_configs/chroot.d/aic-base /etc/schroot/chroot.d/")
            with open("chroot_configs/sources.list.template", "r") as sl_file:
                sources_contents = sl_file.read()
            chroot_filename = "%s/etc/apt/sources.list" % (base_chroot_dir, )
            with open(chroot_filename, "w") as sources_file:
                sources_file.write(sources_contents)
            run_cmd("cp -r chroot_configs/ai-jail /etc/schroot/ai-jail")
        deb_archives = "/var/cache/apt/archives/"
        run_cmd("cp {0}*.deb {1}{0}".format(deb_archives, base_chroot_dir))
        run_cmd("schroot -p -c aic-base -- /bin/sh -c \"\
                DEBIANFRONTEND=noninteractive;\
                apt-get update; apt-get upgrade -y\"")
        run_cmd("schroot -p -c aic-base -- apt-get install -y python")
    run_cmd(
        "schroot -p -c aic-base -- %s/setup/worker_setup.py --chroot-base" %
        (os.path.join(options.root_dir, options.local_repo, "worker"), ))
Example #10
0
def setup_contest_files(options):
    """ Setup all the contest specific files and directories """
    contest_root = options.root_dir
    local_repo = options.local_repo
    compiled_dir = os.path.join(contest_root, "compiled")
    if not os.path.exists(compiled_dir):
        os.mkdir(compiled_dir)
        run_cmd("chown {0}: {1}".format(options.username, compiled_dir))
    map_dir = os.path.join(contest_root, "maps")
    if not os.path.exists(map_dir):
        os.mkdir(map_dir)
        run_cmd("chown {0}: {1}".format(options.username, map_dir))
    if not os.path.exists(options.log_dir):
        os.mkdir(options.log_dir)
        run_cmd("chown {0}: {1}".format(options.username, options.log_dir))
    worker_dir = os.path.join(contest_root, local_repo, "worker")
    si_filename = os.path.join(TEMPLATE_DIR, "worker_server_info.py.template")
    with open(si_filename, 'r') as si_file:
        si_template = si_file.read()
    si_contents = si_template.format(contest_root=contest_root,
                                     repo_dir=local_repo,
                                     log_dir=options.log_dir,
                                     map_dir=map_dir,
                                     compiled_dir=compiled_dir,
                                     api_url=options.api_url,
                                     api_key=options.api_key)
    with CD(worker_dir):
        if not os.path.exists("server_info.py"):
            with open("server_info.py", "w") as si_file:
                si_file.write(si_contents)
            run_cmd("chown {0}:{0} server_info.py".format(options.username))
    if os.stat(local_repo).st_uid != pwd.getpwnam(options.username).pw_uid:
        run_cmd("chown -R {0}: {1}".format(options.username, local_repo))
Example #11
0
def setup_base_chroot(options):
    """ Create and setup the base chroot jail users will run in. """
    install_apt_packages(["debootstrap", "schroot", "unionfs-fuse", "gcc"])
    chroot_dir = "/srv/chroot"
    base_chroot_dir = os.path.join(chroot_dir, "aic-base")
    if not os.path.exists(base_chroot_dir):
        os.makedirs(base_chroot_dir)
        run_cmd("debootstrap --variant=buildd --arch %s natty \
                %s http://us-east-1.ec2.archive.ubuntu.com/ubuntu/" % (
            options.arch,
            base_chroot_dir,
        ))
        with CD(TEMPLATE_DIR):
            run_cmd(
                "cp chroot_configs/chroot.d/aic-base /etc/schroot/chroot.d/")
            run_cmd("cp chroot_configs/sources.list %s/etc/apt/" %
                    (base_chroot_dir, ))
            run_cmd("cp -r chroot_configs/ai-jail /etc/schroot/ai-jail")
        deb_archives = "/var/cache/apt/archives/"
        run_cmd("cp {0}*.deb {1}{0}".format(deb_archives, base_chroot_dir))
        run_cmd("schroot -c aic-base -- /bin/sh -c \"\
                DEBIANFRONTEND=noninteractive;\
                apt-get update; apt-get upgrade -y\"")
        run_cmd("schroot -c aic-base -- apt-get install -y python")
    run_cmd("schroot -c aic-base -- %s/setup/worker_setup.py --chroot-base" %
            (os.path.join(options.root_dir, options.local_repo), ))
Example #12
0
def setup_base_files(opts):
    """ Setup all the contest specific files and directories """
    if not os.path.exists(opts.upload_dir):
        os.mkdir(opts.upload_dir)
        run_cmd("chown {0}:www-data {1}".format(opts.username, opts.upload_dir))
        os.chmod(opts.upload_dir, 0775)
    if not os.path.exists(opts.map_dir):
        os.mkdir(opts.map_dir)
        run_cmd("chown {0}:www-data {1}".format(opts.username, opts.map_dir))
    if not os.path.exists(opts.replay_dir):
        os.mkdir(opts.replay_dir)
        run_cmd("chown {0}:www-data {1}".format(opts.username, opts.replay_dir))
        os.chmod(opts.replay_dir, 0775)
    if not os.path.exists(opts.log_dir):
        os.mkdir(opts.log_dir)
        run_cmd("chown {0}:www-data {1}".format(opts.username, opts.log_dir))
        os.chmod(opts.log_dir, 0775)
    si_filename = os.path.join(TEMPLATE_DIR, "server_info.py.template")
    with open(si_filename, 'r') as si_file:
        si_template = si_file.read()
    si_contents = si_template.format(contest_root=opts.root_dir,
            database_user=opts.database_user,
            database_password=opts.database_password,
            database_name=opts.database_name,
            map_dir=opts.map_dir, upload_dir=opts.upload_dir,
            log_dir=opts.log_dir)
    manager_dir = os.path.join(opts.local_repo, "manager")
    with CD(manager_dir):
        if not os.path.exists("server_info.py"):
            with open("server_info.py", "w") as si_file:
                si_file.write(si_contents)
            run_cmd("chown {0}:{0} server_info.py".format(opts.username))
    if os.stat(opts.local_repo).st_uid != pwd.getpwnam(opts.username).pw_uid:
        run_cmd("chown -R {0}:{0} {1}".format(opts.username, opts.local_repo))
Example #13
0
def setup_base_files(opts):
    """ Setup all the contest specific files and directories """
    sub_dir = os.path.join(opts.root_dir, "submissions")
    if not os.path.exists(sub_dir):
        os.mkdir(sub_dir)
        run_cmd("chown {0}:{0} {1}".format(opts.username, sub_dir))
    map_dir = os.path.join(opts.root_dir, "maps")
    if not os.path.exists(map_dir):
        os.mkdir(map_dir)
        run_cmd("chown {0}:{0} {1}".format(opts.username, map_dir))
    si_filename = os.path.join(TEMPLATE_DIR, "server_info.py.template")
    with open(si_filename, 'r') as si_file:
        si_template = si_file.read()
    si_contents = si_template.format(contest_root=opts.root_dir,
                                     database_user=opts.database_user,
                                     database_password=opts.database_password,
                                     database_name=opts.database_name,
                                     map_dir=map_dir,
                                     sub_dir=sub_dir)
    manager_dir = os.path.join(opts.root_dir, opts.local_repo, "manager")
    with CD(manager_dir):
        if not os.path.exists("server_info.py"):
            with open("server_info.py", "w") as si_file:
                si_file.write(si_contents)
            run_cmd("chmod 600 server_info.py")
    run_cmd("chown -R {0}:{0} {1}".format(opts.username, opts.root_dir))
Example #14
0
def install_dmd():
    """ Install the D language """
    if os.path.exists("/usr/bin/dmd"):
        return
    install_apt_packages("gcc-multilib")
    with CD("/root"):
        run_cmd("curl 'http://ftp.digitalmars.com/dmd_2.053-0_amd64.deb' > dmd_2.053-0_amd64.deb")
        run_cmd("dpkg -i dmd_2.053-0_amd64.deb")
Example #15
0
def install_clojure():
    """ Install the Clojure language """
    if os.path.exists("/usr/share/java/clojure.jar"):
        return
    with CD("/root"):
        run_cmd("curl 'http://cloud.github.com/downloads/clojure/clojure/clojure-1.2.0.zip' > clojure-1.2.0.zip")
        run_cmd("unzip clojure-1.2.0.zip")
        run_cmd("cp clojure-1.2.0/clojure.jar /usr/share/java")
Example #16
0
def install_dart(download_base):
    """ Install the Dart language """
    if os.path.exists("/usr/bin/frogsh"):
        return
    with CD("/root"):
        run_cmd("curl '%s/dart.tgz' | tar xz" % (download_base, ))
        os.rename("dart-frogsh-r1499", "/usr/share/dart")
        os.symlink("/usr/share/dart/frog/frogsh", "/usr/bin/frogsh")
Example #17
0
def install_racket(download_base):
    """ Install the Racket language"""
    if os.path.exists("/usr/bin/racket"):
        return
    with CD("/root"):
        run_cmd("curl '%s/racket.sh' > racket.sh" % (download_base, ))
        run_cmd('echo -e "\n4\n" | sh racket.sh')
        os.symlink("/usr/racket/bin/racket", "/usr/bin/racket")
Example #18
0
def install_pypy(download_base):
    """ Install pypy """
    if os.path.exists("/usr/bin/pypy"):
        return
    with CD("/root"):
        run_cmd("curl '%s/pypy.tar.bz2' | tar xj" % (download_base, ))
        os.rename("pypy-1.7", "/usr/share/pypy-1.7")
        os.symlink("/usr/share/pypy-1.7/bin/pypy", "/usr/bin/pypy")
Example #19
0
def install_dmd(download_base):
    """ Install the D language """
    if os.path.exists("/usr/bin/dmd"):
        return
    install_apt_packages("gcc-multilib")
    with CD("/root"):
        run_cmd("curl '%s/dmd.deb' > dmd.deb" % (download_base, ))
        run_cmd("dpkg -i dmd.deb")
Example #20
0
def install_dmd():
    """ Install the D language """
    # FIXME: This is broken because the package below is for i386 only and we
    # are using amd64 workers
    if os.path.exists("/usr/bin/dmd"):
        return
    with CD("/root"):
        run_cmd("curl 'http://ftp.digitalmars.com/dmd_2.052-0_i386.deb' > dmd_2.052-0_i386.deb")
        run_cmd("dpkg -i dmd_2.052-0_i386.deb")
Example #21
0
def install_scala(download_base):
    """ Install the Scala language """
    if os.path.exists("/usr/bin/scala"):
        return
    with CD("/root"):
        run_cmd("curl '%s/scala.tgz' | tar xz" % (download_base, ))
        os.rename("scala-2.9.0.1", "/usr/share/scala")
        os.symlink("/usr/share/scala/bin/scala", "/usr/bin/scala")
        os.symlink("/usr/share/scala/bin/scalac", "/usr/bin/scalac")
Example #22
0
def install_scala():
    """ Install the Scala language """
    if os.path.exists("/usr/bin/scala"):
        return
    with CD("/root"):
        run_cmd("curl 'http://www.scala-lang.org/downloads/distrib/files/scala-2.8.1.final.tgz' | tar xz")
        os.rename("scala-2.8.1.final", "/usr/share/scala")
        os.symlink("/usr/share/scala/bin/scala", "/usr/bin/scala")
        os.symlink("/usr/share/scala/bin/scalac", "/usr/bin/scalac")
Example #23
0
def install_clojure(download_base):
    """ Install the Clojure language """
    if os.path.exists("/usr/share/java/clojure.jar"):
        return
    with CD("/root"):
        run_cmd("curl '%s/clojure.zip' > clojure.zip" % (download_base, ))
        run_cmd("unzip clojure.zip")
        run_cmd(
            "cp clojure-1.3.0/clojure-1.3.0.jar /usr/share/java/clojure.jar")
        run_cmd("chmod a+r /usr/share/java/clojure.jar")
Example #24
0
def install_golang():
    """ Install golang from a mercurial release """
    RELEASE_TAG = "release.r56"
    if os.path.exists("/usr/local/bin/godoc"):
        return
    pkg_list = ["bison", "ed", "gawk", "libc6-dev", "make",
            "python-setuptools", "build-essential", "mercurial"]
    install_apt_packages(pkg_list)
    try:
        os.makedirs("/usr/local/src")
    except OSError:
        pass
    with CD("/usr/local/src"):
        run_cmd("hg clone -r %s https://go.googlecode.com/hg/ go"
            % (RELEASE_TAG,))
    append_line("/root/.bashrc", "export GOROOT=/usr/local/src/go")
    append_line("/root/.bashrc", "export GOBIN=/usr/local/bin")
    with CD("/usr/local/src/go/src"):
        run_cmd("export GOBIN=/usr/local/bin; ./all.bash")
Example #25
0
def setup_website(opts):
    """ Configure apache to serve the website and set a server_info.php """
    website_root = os.path.join(opts.local_repo, "website")
    #si_filename = os.path.join(TEMPLATE_DIR, "server_info.php.template")
    #with open(si_filename, 'r') as si_file:
    #    si_template = si_file.read()
    #si_contents = si_template.format(upload_dir=opts.upload_dir,
    #       map_dir=opts.map_dir, replay_dir=opts.replay_dir,
    #       log_dir=opts.log_dir, repo_dir=opts.local_repo,
    #       database_user=opts.database_user,
    #       database_password=opts.database_password,
    #       database_name=opts.database_name,
    #       api_url=opts.website_hostname
    #       )
    #with CD(website_root):
    #   if not os.path.exists("server_info.php"):
    #       with open("server_info.php", "w") as si_file:
    #           si_file.write(si_contents)
    with CD(website_root):
        # setup pygments flavored markdown
        #run_cmd("easy_install ElementTree")
        #run_cmd("easy_install Markdown")
        run_cmd("easy_install Pygments")
        if not os.path.exists("aichallenge.wiki"):
            run_cmd("git clone git://github.com/aichallenge/aichallenge.wiki.git")
        #    run_cmd("python setup.py")
    with CD(os.path.join(opts.local_repo, "ants/dist/starter_bots")):
        run_cmd("make")
        run_cmd("make install")
    if not os.path.exists(os.path.join(website_root, "worker-src.tgz")):
        create_worker_archive.main(website_root)
    visualizer_path = os.path.join(opts.local_repo, "ants/visualizer")
    plugin_path = "/usr/share/icedtea-web/plugin.jar"
    if not os.path.exists(os.path.join(website_root, "visualizer")):
        with CD(visualizer_path):
            run_cmd("ant deploy -Djava.plugin=%s -Ddeploy.path=%s"
                    % (plugin_path, website_root))
    setup_language_repo(opts)
    run_cmd("chown -R {0}:{0} {1}".format(opts.username, website_root))
Example #26
0
def setup_jailusers(contest_root):
    """ Create and configure the jail users """
    worker_dir = os.path.join(contest_root, "aichallenge", "worker")
    with CD(worker_dir):
        run_cmd("python create_jail_users.py 32")
    org_mode = os.stat("/etc/sudoers")[0]
    os.chmod("/etc/sudoers", 0640)
    append_line("/etc/sudoers", "contest ALL = (%jailusers) NOPASSWD: ALL")
    os.chmod("/etc/sudoers", org_mode)
    run_cmd("iptables-save > /etc/iptables.rules")
    iptablesload_path = "/etc/network/if-pre-up.d/iptablesload"
    if not os.path.exists(iptablesload_path):
        with open(iptablesload_path, "w") as loadfile:
            loadfile.write(IPTABLES_LOAD)
        os.chmod(iptablesload_path, 0744)
Example #27
0
def setup_base_jail(options):
    """ Create and configure base jail """
    run_cmd("schroot -c aic-base -- %s/setup/worker_setup.py --chroot-setup"
            % (os.path.join(options.root_dir, options.local_repo),))
    create_jail_group(options)
    iptablesload_path = "/etc/network/if-pre-up.d/iptablesload"
    if not os.path.exists(iptablesload_path):
        with open(iptablesload_path, "w") as loadfile:
            loadfile.write(IPTABLES_LOAD)
        os.chmod(iptablesload_path, 0744)
    worker_dir = os.path.join(options.root_dir, options.local_repo, "worker")
    with CD(worker_dir):
        user_info = pwd.getpwnam(options.username)
        cuid = user_info.pw_uid
        cgid = user_info.pw_gid
        jgid = grp.getgrnam("jailusers").gr_gid
        run_cmd("gcc -DCONTEST_UID=%d -DCONTEST_GID=%d -DJAIL_GID=%d jail_own.c -o jail_own" % (cuid, cgid, jgid))
        run_cmd("chown root:%s jail_own" % (cgid,))
        run_cmd("chmod u=rwxs,g=rwx,o= jail_own")
Example #28
0
def setup_base_chroot(options):
    """ Create and setup the base chroot jail users will run in. """
    install_apt_packages(["debootstrap", "schroot", "unionfs-fuse"])
    chroot_dir = "/srv/chroot"
    base_chroot_dir = os.path.join(chroot_dir, "aic-base")
    if os.path.exists(base_chroot_dir):
        return
    os.makedirs(base_chroot_dir)
    run_cmd("debootstrap --variant=buildd --arch amd64 maverick \
            %s http://us.archive.ubuntu.com/ubuntu/" % (base_chroot_dir, ))
    with CD(TEMPLATE_DIR):
        run_cmd("cp chroot_configs/chroot.d/aic-base /etc/schroot/chroot.d/")
        run_cmd("cp chroot_configs/sources.list %s/etc/apt/" %
                (base_chroot_dir, ))
        run_cmd("cp -r chroot_configs/ai-jail /etc/schroot/ai-jail")
    run_cmd(
        "schroot -c aic-base -- /bin/sh -c \"DEBIANFRONTEND=noninteractive;\
            apt-get update; apt-get upgrade -y\"")
    run_cmd("schroot -c aic-base -- apt-get install -y python")
    run_cmd("schroot -c aic-base -- %s/setup/worker_setup.py --chroot-setup" %
            (os.path.join(options.root_dir, options.local_repo), ))
Example #29
0
def setup_website(opts):
    """ Configure apache to serve the website and set a server_info.php """
    website_root = os.path.join(opts.root_dir, opts.local_repo, "website")
    subs_dir = os.path.join(opts.root_dir, "submissions")
    si_filename = os.path.join(TEMPLATE_DIR, "server_info.php.template")
    with open(si_filename, 'r') as si_file:
        si_template = si_file.read()
    si_contents = si_template.format(
        sub_dir=subs_dir,
        database_user=opts.database_user,
        database_password=opts.database_password,
        database_name=opts.database_name,
    )
    with CD(website_root):
        if not os.path.exists("server_info.php"):
            with open("server_info.php", "w") as si_file:
                si_file.write(si_contents)
    log_dir = os.path.join(opts.root_dir, "html_logs")
    if not os.path.exists(log_dir):
        os.mkdir(log_dir)
        run_cmd("chown %s:www-data %s" % (opts.username, log_dir))
        os.chmod(log_dir, 0775)
    site_config = "/etc/apache2/sites-available/ai-contest"
    if not os.path.exists(site_config):
        site_filename = os.path.join(TEMPLATE_DIR, "apache_site.template")
        with open(site_filename, "r") as site_file:
            site_template = site_file.read()
        site_contents = site_template.format(web_hostname="ai-contest.com",
                                             web_root=website_root,
                                             log_dir=log_dir)
        with open(site_config, "w") as site_file:
            site_file.write(site_contents)
        if opts.website_as_default:
            enabled_link = "/etc/apache2/sites-enabled/000-default"
        else:
            enabled_link = "/etc/apache2/sites-enabled/ai-contest"
        if os.path.exists(enabled_link):
            os.remove(enabled_link)
        os.symlink(site_config, enabled_link)
        run_cmd("/etc/init.d/apache2 restart")
Example #30
0
def install_nodejs(download_base):
    """ Install node.js """
    install_apt_packages(["rlwrap"])
    with CD("/root"):
        run_cmd("curl '%s/nodejs.deb' > nodejs.deb" % (download_base, ))
        run_cmd("dpkg -i nodejs.deb")