diff --git a/tools/install_venv.py b/tools/install_venv.py
deleted file mode 100644
index c190886d..0000000
--- a/tools/install_venv.py
+++ /dev/null
@@ -1,137 +0,0 @@
-# vim: tabstop=4 shiftwidth=4 softtabstop=4
-
-"""
-Installation script for Kong's testing virtualenv
-"""
-
-import os
-import stat
-import string
-import subprocess
-import sys
-
-ROOT = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
-VENV = os.path.join(ROOT, '.kong-venv')
-PIP_REQUIRES = os.path.join(ROOT, 'tools', 'pip-requires')
-
-
-def die(message, *args):
-    print >> sys.stderr, message % args
-    sys.exit(1)
-
-
-def whereis(executable):
-    """
-    Detect whereis a binary and make sure it's executable we can execute.
-    """
-    for d in string.split(os.environ['PATH'], \
-                              os.pathsep):
-        f = os.path.join(d, executable)
-        if os.path.isfile(f):
-            try:
-                st = os.stat(f)
-            except OSError:
-                continue
-            if stat.S_IMODE(st[stat.ST_MODE]) & 0111:
-                return True
-    return False
-
-
-def run_command(cmd, redirect_output=True, check_exit_code=True):
-    """
-    Runs a command in an out-of-process shell, returning the
-    output of that command.  Working directory is ROOT.
-    """
-    if redirect_output:
-        stdout = subprocess.PIPE
-    else:
-        stdout = None
-
-    proc = subprocess.Popen(cmd, cwd=ROOT, stdout=stdout)
-    output = proc.communicate()[0]
-    if check_exit_code and proc.returncode != 0:
-        die('Command "%s" failed.\n%s', ' '.join(cmd), output)
-    return output
-
-
-HAS_EASY_INSTALL = bool(whereis("easy_install"))
-HAS_VIRTUALENV = bool(whereis("virtualenv"))
-
-
-def check_dependencies():
-    """Make sure virtualenv is in the path."""
-
-    if not HAS_VIRTUALENV:
-        print 'not found.'
-        # Try installing it via easy_install...
-        if HAS_EASY_INSTALL:
-            print 'Installing virtualenv via easy_install...',
-            if not run_command(['easy_install', 'virtualenv']):
-                die('ERROR: virtualenv not found.\n\n'
-                    'Glance development requires virtualenv, please install'
-                    ' it using your favorite package management tool')
-            print 'done.'
-    print 'done.'
-
-
-def create_virtualenv(venv=VENV):
-    """Creates the virtual environment and installs PIP only into the
-    virtual environment
-    """
-    print 'Creating venv...',
-    run_command(['virtualenv', '-q', '--no-site-packages', VENV])
-    print 'done.'
-    print 'Installing pip in virtualenv...',
-    if not run_command(['tools/with_venv.sh', 'easy_install', 'pip']).strip():
-        die("Failed to install pip.")
-    print 'done.'
-
-
-def install_dependencies(venv=VENV):
-    print 'Installing dependencies with pip (this can take a while)...'
-
-    # Install greenlet by hand - just listing it in the requires file does not
-    # get it in stalled in the right order
-    venv_tool = 'tools/with_venv.sh'
-    run_command([venv_tool, 'pip', 'install', '-E', venv, '-r', PIP_REQUIRES],
-                redirect_output=False)
-
-    python_version = "python%s.%s" % (sys.version_info[0], sys.version_info[1])
-
-    # Tell the virtual env how to "import glance"
-    pthfile = os.path.join(venv, "lib", python_version, "site-packages",
-                                 "glance.pth")
-    f = open(pthfile, 'w')
-    f.write("%s\n" % ROOT)
-
-
-def print_help():
-    help = """
- Kong testing environment setup is complete.
-
- Kong testing uses virtualenv to track and manage Python dependencies
- while in development and testing.
-
- To activate the Kong virtualenv for the extent of your current shell
- session you can run:
-
- $ source .kong-venv/bin/activate
-
- Or, if you prefer, you can run commands in the virtualenv on a case by case
- basis by running:
-
- $ tools/with_venv.sh <your command>
-
- Also, make test will automatically use the virtualenv.
-    """
-    print help
-
-
-def main(argv):
-    check_dependencies()
-    create_virtualenv()
-    install_dependencies()
-    print_help()
-
-if __name__ == '__main__':
-    main(sys.argv)
diff --git a/tools/pip-requires b/tools/pip-requires
index 02c965b..e3ee18b 100644
--- a/tools/pip-requires
+++ b/tools/pip-requires
@@ -1,5 +1,3 @@
-pep8>=0.5.0
-pylint==0.19
 anyjson
 nose
 argparse
diff --git a/tools/rfc.sh b/tools/rfc.sh
deleted file mode 100755
index 14f9163..0000000
--- a/tools/rfc.sh
+++ /dev/null
@@ -1,136 +0,0 @@
-#!/bin/sh -e
-# Copyright (c) 2010-2011 Gluster, Inc. <http://www.gluster.com>
-# This initial version of this file was taken from the source tree
-# of GlusterFS. It was not directly attributed, but is assumed to be
-# Copyright (c) 2010-2011 Gluster, Inc and release GPLv3
-# Subsequent modifications are Copyright (c) 2011 OpenStack, LLC.
-#
-# GlusterFS is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published
-# by the Free Software Foundation; either version 3 of the License,
-# or (at your option) any later version.
-#
-# GlusterFS is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see
-# <http://www.gnu.org/licenses/>.
-
-
-branch="master";
-
-set_hooks_commit_msg()
-{
-    top_dir=`git rev-parse --show-toplevel`
-    f="${top_dir}/.git/hooks/commit-msg";
-    u="https://review.openstack.org/tools/hooks/commit-msg";
-
-    if [ -x "$f" ]; then
-        return;
-    fi
-
-    curl -o $f $u || wget -O $f $u;
-
-    chmod +x $f;
-
-    GIT_EDITOR=true git commit --amend
-}
-
-add_remote()
-{
-    username=$1
-    project=$2
-
-    echo "No remote set, testing ssh://$username@review.openstack.org:29418"
-    if ssh -p29418 -o StrictHostKeyChecking=no $username@review.openstack.org gerrit ls-projects >/dev/null 2>&1
-    then
-        echo "$username@review.openstack.org:29418 worked."
-        echo "Creating a git remote called gerrit that maps to:"
-        echo "  ssh://$username@review.openstack.org:29418/$project"
-        git remote add gerrit ssh://$username@review.openstack.org:29418/$project
-        return 0
-    fi
-    return 1
-}
-
-check_remote()
-{
-    if ! git remote | grep gerrit >/dev/null 2>&1
-    then
-        origin_project=`git remote show origin | grep 'Fetch URL' | perl -nle '@fields = split(m|[:/]|); $len = $#fields; print $fields[$len-1], "/", $fields[$len];'`
-        if add_remote $USERNAME $origin_project
-        then
-            return 0
-        else
-            echo "Your local name doesn't work on Gerrit."
-            echo -n "Enter Gerrit username (same as launchpad): "
-            read gerrit_user
-            if add_remote $gerrit_user $origin_project
-            then
-                return 0
-            else
-                echo "Can't infer where gerrit is - please set a remote named"
-                echo "gerrit manually and then try again."
-                echo
-                echo "For more information, please see:"
-                echo "\thttp://wiki.openstack.org/GerritWorkflow"
-                exit 1
-            fi
-        fi
-    fi
-}
-
-rebase_changes()
-{
-    git fetch;
-
-    GIT_EDITOR=true git rebase -i origin/$branch || exit $?;
-}
-
-
-assert_diverge()
-{
-    if ! git diff origin/$branch..HEAD | grep -q .
-    then
-	echo "No changes between the current branch and origin/$branch."
-	exit 1
-    fi
-}
-
-
-main()
-{
-    set_hooks_commit_msg;
-
-    check_remote;
-
-    rebase_changes;
-
-    assert_diverge;
-
-    bug=$(git show --format='%s %b' | perl -nle 'if (/\b([Bb]ug|[Ll][Pp])\s*[#:]?\s*(\d+)/) {print "$2"; exit}')
-
-    bp=$(git show --format='%s %b' | perl -nle 'if (/\b([Bb]lue[Pp]rint|[Bb][Pp])\s*[#:]?\s*([0-9a-zA-Z-_]+)/) {print "$2"; exit}')
-
-    if [ "$DRY_RUN" = 1 ]; then
-        drier='echo -e Please use the following command to send your commits to review:\n\n'
-    else
-        drier=
-    fi
-
-    local_branch=`git branch | grep -Ei "\* (.*)" | cut -f2 -d' '`
-    if [ -z "$bug" ]; then
-	if [ -z "$bp" ]; then
-            $drier git push gerrit HEAD:refs/for/$branch/$local_branch;
-	else
-	    $drier git push gerrit HEAD:refs/for/$branch/bp/$bp;
-	fi
-    else
-        $drier git push gerrit HEAD:refs/for/$branch/bug/$bug;
-    fi
-}
-
-main "$@"
diff --git a/tools/skip_tracker.py b/tools/skip_tracker.py
index fd15c1c..9b12eb7 100644
--- a/tools/skip_tracker.py
+++ b/tools/skip_tracker.py
@@ -83,17 +83,21 @@
 
 
 if __name__ == '__main__':
-    logging.basicConfig(format='%(levelname)s: %(message)s', level=logging.INFO)
+    logging.basicConfig(format='%(levelname)s: %(message)s',
+                        level=logging.INFO)
     results = find_skips()
     unique_bugs = sorted(set([bug for (method, bug) in results]))
     unskips = []
     info("Total bug skips found: %d", len(results))
     info("Total unique bugs causing skips: %d", len(unique_bugs))
-    lp = launchpad.Launchpad.login_anonymously('grabbing bugs', 'production', LPCACHEDIR)
+    lp = launchpad.Launchpad.login_anonymously('grabbing bugs',
+                                               'production',
+                                               LPCACHEDIR)
     for bug_no in unique_bugs:
         bug = lp.bugs[bug_no]
         for task in bug.bug_tasks:
-            info("Bug #%7s (%12s - %12s)", bug_no, task.importance, task.status)
+            info("Bug #%7s (%12s - %12s)", bug_no,
+                 task.importance, task.status)
             if task.status in ('Fix Released', 'Fix Committed'):
                 unskips.append(bug_no)
 
diff --git a/tools/test-requires b/tools/test-requires
new file mode 100644
index 0000000..77a6614
--- /dev/null
+++ b/tools/test-requires
@@ -0,0 +1,2 @@
+pep8>=0.5.0
+pylint==0.19
